02.09.2015 Views

さあその 先 へ、OpenLDAP パフォーマンスチューニング

1JAMzgk

1JAMzgk

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

はじめに<br />

<br />

OpenLDAPは、 他 のオープンソースソフトウェアと<br />

同 様 に、わずかなマシンリソースでも 動 作 させる<br />

ことができるディレクトリサーバです<br />

<br />

OpenLDAPは、わずかなチューニングを 施 すこと<br />

で、 飛 躍 的 に 性 能 を 向 上 させられる 可 能 性 を 秘<br />

めたソフトウェアです<br />

<br />

本曓 セッションでは、OpenLDAPサーバのチューニ<br />

ングの 勘 所 をご 紹 介 します<br />

2


目 次<br />

<br />

試 験 環 境<br />

<br />

チューニング<br />

<br />

<br />

<br />

<br />

<br />

<br />

DB_CONFIGと、Berkeley DBバッファ 設 定<br />

検 索 処 理 フローと、インデックス<br />

ログファイルと、syslogd<br />

エントリキャッシュ<br />

ID リストキャッシュ<br />

スレッド 数<br />

<br />

もう 一 歩 、その <strong>先</strong> へ<br />

3


試 験 環 境<br />

4


試 験 環 境<br />

サーバ 機<br />

CPU:2.53GHz Quad Core×2<br />

メモリ:12G<br />

ディスク:146GB SAS 10rpm×4<br />

ディスクコントローラ:512Mキャッシュ<br />

負 荷 サーバ<br />

OS:CentOS 5.4 x86_64<br />

JVM:Sun 64bit 1.6.0_18<br />

検 証 ツール: slamd-2.0.0<br />

OpenLDAPサーバ<br />

OS:CentOS 5.4 x86_64<br />

Berkeley DB:4.7.25<br />

OpenLDAP: 2.4.19<br />

※OpenLDAP 2.4.19 (+ Berkeley DB 4.7.25) は、 本曓 資 料 作 成 時昷 点 での 最暷 新 の 安 定 版 リリースです<br />

です。<br />

5


slamdからの 負 荷 内 容<br />

<br />

LDAPプロトコルでの 様 々な 試 験 が 可 能 なツール<br />

<br />

検 証 に 用 いた 負 荷 の 内 容<br />

<br />

<br />

Bind( 認 証 ) 処 理 1 : Search( 検 索 ) 処 理 3 の 割 合<br />

<br />

LDAP Mixed Load<br />

1 万 のエントリを 対 象<br />

<br />

検 証 時昷 のセッション 数<br />

<br />

100セッション (10クライアント × 10スレッド)<br />

6


OpenLDAPサーバの 初 期曋 設 定<br />

<br />

特 別 なオプションなしでインストール<br />

<br />

試 験 中 に、ログファイルを 参 照 してエラーがない<br />

かを 確 認 できる 状 態<br />

<br />

syslogdへstatsログを 送 付 し、 記 録<br />

<br />

試 験 中 に、ldapsearchにて、slapdの 動 作 状 況 を<br />

確 認 できる 状 態<br />

<br />

monitorデータベースを 利 用<br />

7


DB_CONFIG<br />

を 知 っておこう!<br />

8


DB_CONFIG 利 用 の 意 味<br />

ざっくりBerkeley DBをチューニング<br />

Berkeley DBへの 参 照 処 理 性 能 の 向 上<br />

set_cachesizeディレクティブ<br />

Berkeley DBへの 更暬 新 処 理 性 能 の 向 上<br />

set_lg_bsizeディレクティブ<br />

サンプルファイルをコピーするだけ<br />

9


set_cachesizeディレクティブ<br />

Berkeley DBが 共 有暼 メモリとして 利 用 する<br />

バッファプールのサイズ<br />

目 標 は、*.bdbの 合 計 サイズより 大 きく<br />

slapd<br />

Berkeley DB<br />

dn2id.bdb<br />

xx.bdb<br />

id2entry.bdb<br />

yy.bdb<br />

__db.003<br />

10


set_lg_bsizeディレクティブ<br />

Berkeley DBがログバッファとして 利 用 する<br />

データ<br />

変 更暬 処 理<br />

メモリ 領 域 のサイズ<br />

大 きな 更暬 新 では、 大 きなサイズで 性 能 が 向 上<br />

2M<br />

Berkeley DB<br />

__db.004<br />

log.n<br />

11


Berkeley DB<br />

バッファプール<br />

で、その <strong>先</strong> へ!<br />

12


OS ファイルシステムキャッシュ<br />

<br />

Berkeley DB 側 で、OpenLDAPのデータをキャッ<br />

シュしきれなくても、OSのファイルシステムキャッ<br />

シュでキャッシュすることもできる<br />

<br />

OSのキャッシュがあるため、Berkeley DB 側 のバッ<br />

ファプールのチューニング 効 果 は 見 えにくいことが 多<br />

い<br />

dn2id.bdb ファイルシステム<br />

キャッシュ<br />

id2entry.bdb<br />

__db.003<br />

13


Berkeley DB バッファプール<br />

<br />

OSのファイルシステムキャッシュを 利 用 できない<br />

場 合 、Berkeley DBバッファプールが 性 能 に 影 響<br />

<br />

<br />

バッファプールへのページ 読 込 み 頻 度 が 性 能 に 影 響<br />

バッファプールのサイズはset_cachesizeで 調 整 可 能<br />

dn2id.bdb<br />

id2entry.bdb<br />

__db.003<br />

14


バッファプールの 利 用 価 値<br />

<br />

Linuxでは、OS 提 供 のファイルシステムキャッ<br />

シュは、 余 剰 メモリが 割 り 当 てられる<br />

<br />

OSが、 他 のプロセスにも 利 用 するキャッシュ<br />

<br />

OpenLDAP 側 での 制 御 ではない<br />

<br />

OpenLDAPにとって、 自 分 で 管 理 できる Berkeley DBの<br />

バッファプールは、 信 頼 しやすい<br />

<br />

2 重 バッファを 行 わないために、わざわざ<br />

O_DIRECTフラグを 用 いるという 考 え 方 も<br />

<br />

しっかりとした、サイジングが 必 要<br />

※ O_DIRECTフラグ<br />

フラグは、Linuxカーネル<br />

カーネル2.4.10 以 降 で 利 用 可 能 です。<br />

OpenLDAPのバックエンド<br />

バックエンドとなる<br />

となるBerkeley DBでの<br />

利 用 には、OpenLDAPコミュニティ<br />

コミュニティからの<br />

からのパッチ<br />

パッチと、コンパイルオプション<br />

コンパイルオプションの 変 更暬 が 必 要 です。<br />

15


set_cachesizeディレクティブ<br />

デフォルトは、256KBytes<br />

最暷 小 は、20KBytes<br />

DB_CONFIGでは、256MBytesを 設 定<br />

500MBytes 未曑 満 は、 自 動 的 に 設 定 値 +25%<br />

__003.dbは、+25%で、320MBytesに<br />

<br />

ざっくり 見 積 りは、OpenLDAPデータ 領 域 で<br />

# du -c -h *.bdb<br />

16


Berkeley DBバッファプールの 効 果<br />

OSキャッシュが 利 用 できない 状 況 にする 目 的 で、<br />

あえてO_DIRECTで.bdbファイルをオープン<br />

O_DIRECT と、<br />

set_cachesize=256MB<br />

ココを100%<br />

O_DIRECT と、<br />

set_cachesize=256KB<br />

15%<br />

バッファプール 不 足 で、<br />

今 回 、 秒 間 処 理 量 が、わずか<br />

わずか15%までに<br />

減 少 …<br />

※ 結 果 は、 今 回 の 検 証 環 境 での 値 です。 性 能 劣 化 のインパクト<br />

インパクトは、Berkeley DB バッファプールへの<br />

へのページ<br />

読 み 込 み 処 理 の 発 生 頻 度 にも 関 係 します。<br />

17


バッファプールで 安 心 を<br />

DB_CONFIG<br />

set_cachesize<br />

Berkeley DB の<br />

バッファプールを 活 用 しよう!<br />

18


Berkeley DB<br />

ログバッファ<br />

で、その <strong>先</strong> へ!<br />

19


slapadd でのデータロード 速 度<br />

DB_CONFIGで、ログバッファを 調 整<br />

DB_CONFIGを 適 用<br />

set_lg_bsize=2M<br />

198.0KB/sec<br />

デフォルト 状 態<br />

set_lg_bsize=32K<br />

およそ3.36 倍 更暬 新 性 能 up<br />

58.9KB /sec<br />

※ 結 果 は、 今 回 の 検 証 環 境 での 値 です。 性 能 改 善 のインパクト<br />

インパクトは、ディスク<br />

ディスクIO 性 能 にも 依 存 します。<br />

20


ログバッファで 更暬 新 性 能 up !<br />

DB_CONFIG<br />

set_lg_bsize<br />

Berkeley DB の<br />

ログバッファを 活 用 しよう!<br />

21


検 索 の 仕 組 み<br />

を 知 っておこう!<br />

22


ディレクトリ 情 報 ツリーの 検 索<br />

<br />

ldapsearch -x -b dc=my-domain,dc=com -s sub<br />

検 索 を 開 始 するベース<br />

ディレクトリ 情 報 ツリー:<br />

DIT (Directory Information tree)<br />

エントリ<br />

識 別 名 : DN (Distinguished<br />

Name)<br />

検 索 スコープ<br />

0 : base ( 検 索 ベースのみ)<br />

1 : one ( 検 索 ベース 以 下 1レベル)<br />

2 : sub ( 検 索 ベース 以 下 全 て)<br />

3 : children ( 検 索 ベースを 除 き 以 下 全 て)<br />

のどれかを 指 定<br />

や、 属 性 : (Attribute)を 持 つ<br />

dn:uid=xx,ou=yy,dc=zz<br />

cn:xx<br />

uid:xx<br />

sn:xx<br />

ObjectClass:…<br />

ObjectClass:…<br />

…<br />

23


ack-bdbでの、エントリの 扱 い<br />

Berkeley DBは、Key/Valueストレージ<br />

リレーショナルDBではない<br />

OpenLDAPの 各 エントリに 一 意 のIDを 付 与<br />

“dn:uid=xx,ou=<br />

xx, dc=zzz”が 欲<br />

しい<br />

dn<br />

dn2id.bdb<br />

ID<br />

ID<br />

id2entry.bdb<br />

slapd<br />

entry<br />

24


ack-bdbでの、エントリ 検 索<br />

最暷 初 に、 検 索 ベーストップのIDを 取 得<br />

続 いて、 検 索 ベーストップのエントリを 取 得<br />

繰 り 返 し、 同 じ 要 領 で 検 索 スコープ 内 のDN<br />

と、エントリを 取 得<br />

ldapsearch -x -b<br />

ou=xx,dc=yy -s<br />

sub *<br />

dn<br />

ID<br />

dn2id.bdb<br />

検 索 ベーストップから、<br />

スコープ 内 のエントリ 分<br />

繰 り 返 し<br />

client<br />

entries<br />

slapd<br />

ID<br />

entry<br />

id2entry.bdb<br />

ou=xx,dc=yy<br />

25


インデックス<br />

で、その <strong>先</strong> へ!<br />

26


フィルタを 付 けてのエントリ 検 索<br />

検 索 条曵 件 にフィルタを 利 用 し、 検 索 対 象 と<br />

ldapsearch -x -b<br />

ou=xx,dc=yy -s<br />

sub uid=test1000<br />

なる 件 数 を 減 らしたいが… (ここでは、uid=test1000を 指 定 )<br />

フィルタと 比 較 する 情 報 は、id2entry.bdbに 格<br />

納 されている 為 、やっぱり 何 度 もDBアクセスし<br />

ないと、 回 答 が 返 せない<br />

dn<br />

ID<br />

dn2id.bdb<br />

検 索 ベーストップから、<br />

スコープ 内 のエントリ 分<br />

繰 り 返 し<br />

ou=xx,dc=yy<br />

entries<br />

ID<br />

client<br />

slapd<br />

entry<br />

id2entry.bdb<br />

27


インデックスファイル<br />

「インデックスキー - ID」をマップ<br />

与 えられた 検 索 フィルタから、 必 要 エントリの<br />

みへのアクセスを 可 能 にする 情 報<br />

dn2id.bdbは、「DN - ID」 をマップ<br />

id2entry.bdbは、「ID - エントリ」をマップ<br />

dn2id.bdb id2entry.bdb xx.bdb<br />

28


インデックスを 利 用 した 検 索<br />

インデックスファイルを 利 用 して、ピンポイ<br />

ントで 必 要 なエントリを 読 む 為 のIDを 取 得<br />

bdb_key_read()<br />

ID、または<br />

またはIDのリスト<br />

xx.bdb<br />

dn2id.bdb<br />

slapd<br />

bdb_id2entry()<br />

エントリ<br />

id2entry.bdb<br />

必 要 な 回 数 だけに 限 り、<br />

データベースへアクセス<br />

__db.003<br />

Berkeley DB<br />

29


インデックスを 利 用 しない 検 索<br />

ピンポイントのDBアクセスができず、 延 々<br />

とエントリを 取 得 し 続 けなければならない<br />

slapd<br />

bdb_dn2id()<br />

ID<br />

bdb_id2entry()<br />

エントリ<br />

dn2id.bdb<br />

id2entry.bdb<br />

xx.bdb<br />

検 索 ベース、 検 索 スコープ<br />

の 範 囲 で 延 々データベース<br />

へのアクセス<br />

アクセスを 繰 り 返 えす<br />

__db.003<br />

Berkeley DB<br />

30


OSから 見 る、インデックス 効 果<br />

インデックス 情 報 を 利 用 できない 場 合 は、<br />

slapdは、 無 駄 に 働 きすぎてしまう<br />

頑 張 って 働 いても、 結 果 は 良 くない<br />

100%<br />

80%<br />

60%<br />

インデックスなしでの<br />

仕 事 量<br />

idle<br />

sys<br />

usr<br />

100%<br />

80%<br />

60%<br />

インデックス 利 用 時昷 の 仕 事 量<br />

40%<br />

40%<br />

20%<br />

0%<br />

試 験 時昷 間<br />

20%<br />

0%<br />

試 験 時昷 間<br />

idle<br />

iowa<br />

sys<br />

usr<br />

31


index ディレクティブの 設 定<br />

slapd<br />

syslogに 送 られたログを 参 照 することで、<br />

設 定 するべきインデックスを 確 認 できる<br />

# view servers/slapd/back-bdb/filterindex.c<br />

…[ 略 ]…<br />

slapd.confとかに、<br />

「loglevel 0」が 指<br />

定 されない 限 り、<br />

※ loglevel 0 の 場 合 は、 出 力 されません。<br />

if ( rc == LDAP_INAPPROPRIATE_MATCHING ) {<br />

}<br />

Debug( LDAP_DEBUG_ANY,<br />

return 0;<br />

フィルタが 指 定 さ<br />

れているのに、 利<br />

用 できなかったら、<br />

"


index ディレクティブの 設 定<br />

syslogに 送 られたログを 参 照 することで、<br />

設 定 するべきインデックスを 確 認 できる<br />

# tail -f /var/log/ldap.log<br />

…[ 略 ]…<br />

slapd<br />

date time HOST slapd[PID]:


index ディレクティブの 設 定<br />

同 じ 内 容 が 頻 繁 にログ 出 力 される 場 合 は、<br />

特 に 効 果 が 期曋 待 できる<br />

slapd<br />

slapd.conf<br />

include …<br />

database bdb<br />

suffix dc=my-domain,dc=com<br />

…[ 略 ]…<br />

index uid eq<br />

database bdb<br />

suffix dc=example,dc=com<br />

…[ 略 ]…<br />

グローバルセクション<br />

バックエンドDB #1<br />

バックエンドDB #2<br />

34


slapindexでのインデックス 作 成<br />

<br />

slapindex でのインデックス 作 成 手 順<br />

1. OpenLDAPサーバの 停 止<br />

2. slapd.confの index を 更暬 新<br />

3. slapindexを 実 行<br />

# slapindex -b dc=my-domain,dc=com -v<br />

indexing id=00000001<br />

indexing id=00000002<br />

indexing id=00000003<br />

indexing id=00000004<br />

…[ 略 ]…<br />

属 性 名 .bdb<br />

cn.bdb<br />

ou.bdb<br />

xx.bdb yy.bdb<br />

35


インデックスの 効 果<br />

<br />

インデックス 検 索 で、6.7 倍 の 性 能 改 善<br />

インデックス<br />

を 作 成<br />

1906.5 回 / 秒<br />

DB_CONFIG<br />

適 用 のみ<br />

282.917 回 / 秒<br />

※ 結 果 は、 今 回 の 検 証 環 境 での 値 です。 性 能 改 善 のインパクト<br />

インパクトは、 検 索 対 象 となるエントリ<br />

数 にも 依 存 します。<br />

36


6.7 倍 UP!<br />

インデックスで6.7 倍<br />

インデックスを 活 用 しよう!<br />

37


ログファイル<br />

を 知 っておこう!<br />

38


OpenLDAPのログファイル<br />

今 回 の 対 象<br />

ディレクティブ<br />

役 割<br />

◎<br />

loglevel<br />

syslogに 記 録 するログ。 出 力 する 内 容<br />

( 出 力 量 )を 調 整 できる<br />

logfile<br />

loglevelで 指 定 した 内 容 を、syslogに 加 え、 指<br />

定 するファイルへも 重 複 して 出 力 させる<br />

overlay accesslog<br />

OpenLDAPへの 操 作 ログを、バックエンド<br />

データベースへ 蓄 積 する<br />

overlay auditlog<br />

全 ての 変 更暬 情 報 を、 指 定 するファイルに 記 録<br />

する<br />

DB_CONFIG ファイル<br />

set_lg_max<br />

Berkeley DBのトランザクションログファイル<br />

39


ログレベルの 検 討<br />

loglevelに 指 定 する 値<br />

Level<br />

Level<br />

Level<br />

説 明<br />

(10 進 数 )<br />

(16 進 数 )<br />

( 文 字 列 )<br />

-1<br />

any<br />

enable all debugging<br />

0<br />

0x0<br />

no debugging<br />

1<br />

0x1<br />

trace<br />

trace function calls<br />

2<br />

0x2<br />

packet<br />

debug packet handling<br />

4<br />

0x4<br />

args<br />

heavy trace debugging (function<br />

args)<br />

8<br />

0x8<br />

conns<br />

connection management<br />

16<br />

0x10<br />

BER<br />

print out packets sent and<br />

received<br />

32<br />

0x20<br />

filter<br />

search filter processing<br />

40


ログレベルの 検 討<br />

loglevelに 指 定 する 値<br />

Level<br />

Level<br />

Level<br />

説 明<br />

(10 進 数 )<br />

(16 進 数 )<br />

( 文 字 列 )<br />

64<br />

0x40<br />

config<br />

configuration file processing<br />

128<br />

0x80<br />

ACL<br />

access control list processing<br />

<br />

256<br />

0x100<br />

stats<br />

stats log<br />

connections/operations/results<br />

512<br />

0x200<br />

stats2<br />

stats log entries sent<br />

1024<br />

0x400<br />

shell<br />

print communication with<br />

shell backends<br />

2048<br />

0x800<br />

parse<br />

entry parsing<br />

16384<br />

0x4000<br />

sync<br />

LDAPSync replication<br />

32768<br />

0x8000<br />

none<br />

only messages that get logged<br />

whatever log level is set<br />

41


syslogd<br />

で、その <strong>先</strong> へ!<br />

42


OSから 見 る、slapdの 仕 事 ぶり<br />

インデックス 作 成 後 も、slapdは 頑 張 ってる<br />

しかし、CPU 利 用 率 のiowaitの 割 合 からは、<br />

ディスクIOを 待 っている 時昷 間 も 長 いことがわか<br />

る<br />

検 索 処 理 でも、 管<br />

理 者 の 為 に、ログ<br />

を 出 しています<br />

100%<br />

80%<br />

インデックス 利 用 時昷 の 仕 事 量<br />

60%<br />

40%<br />

iowaが、6~7% 程 度 で 推 移<br />

slapd<br />

ディスクIOは、コン<br />

ピュータの 処 理 の<br />

中 で 最暷 も 遅 い 処 理<br />

20%<br />

0%<br />

試 験 時昷 間<br />

idle<br />

iowa<br />

sys<br />

usr<br />

43


syslogの 非 同 期曋 書暯 き 込 み<br />

syslogdがデータの 書暯 込 み 後 に、ディスク<br />

へのフラッシュ(fsync) 処 理 を 行 わない<br />

時昷 間 がかかるfsyncをスキップし 性 能 を 稼 ぐ<br />

電 源 断 時昷 には、データを 失 う 可 能 性 がある<br />

slapd<br />

syslogd<br />

LOCAL4<br />

writev()<br />

○<br />

fsync()<br />

ldap.log<br />

44


syslog 非 同 期曋 書暯 き 込 みの 設 定<br />

<br />

<br />

OpenLDAPは、デフォルトでLOCAL4ファシリティ<br />

を 用 いてログメッセージを 送 付<br />

syslog 側 で、 LOCAL4ファシリティログを 受 け 取 り<br />

非 同 期曋 で 書暯 込 む 設 定 、「-」が 必 要<br />

<br />

# vi /etc/syslog.conf<br />

…[ 略 ]…<br />

local4.* -/var/log/ldap.log<br />

…[ 略 ]…<br />

<br />

syslog 再 起 動<br />

45


syslog 非 同 期曋 書暯 き 込 みの 効 果<br />

インデックス<br />

+ 非 同 期曋 IO<br />

20515.255 回 / 秒<br />

インデックス<br />

を 作 成<br />

1906.5 回 / 秒<br />

DB_CONFIG<br />

適 用 のみ<br />

282.917 回 / 秒<br />

※ 結 果 は、 今 回 の 検 証 環 境 での 値 です。 性 能 改 善 のインパクト<br />

インパクトは、ディスク<br />

ディスクIO 性 能 、ログ<br />

出 力 量 にも 依 存 します。<br />

46


10 倍 UP!<br />

非 同 期曋 IOで、10 倍<br />

syslogdの<br />

非 同 期曋 書暯 き 込 みを 検 討 しよう!<br />

47


エントリキャッシュ<br />

を 知 っておこう!<br />

48


ack-bdbでの、エントリ 検 索<br />

最暷 初 に、 検 索 ベーストップのIDを 取 得<br />

続 いて、 検 索 ベーストップのエントリを 取 得<br />

繰 り 返 し、 同 じ 要 領 で 検 索 スコープ 内 のDN<br />

と、エントリを 取 得<br />

ldapsearch -x -b<br />

ou=xx,dc=yy -s<br />

sub *<br />

dn<br />

ID<br />

dn2id.bdb<br />

検 索 ベーストップから、<br />

スコープ 内 のエントリ 分<br />

繰 り 返 し<br />

client<br />

entries<br />

slapd<br />

ID<br />

entry<br />

id2entry.bdb<br />

ou=xx,dc=yy<br />

49


エントリデータのキャッシュ<br />

クライアントに 回 答 する 前 にdecodeが 必 要<br />

2~6までの 処 理 の 繰 り 返 し<br />

ldapsearch -x -b<br />

ou=xx,dc=yy -s<br />

sub *<br />

1<br />

2dn<br />

3ID<br />

dn2id.bdb<br />

検 索 ベーストップから、<br />

スコープ 内 のエントリ 分<br />

繰 り 返 し<br />

client<br />

7entries<br />

slapd<br />

4ID<br />

5entry<br />

id2entry.bdb<br />

ou=xx,dc=yy<br />

エントリ<br />

キャッシュ<br />

6decode (※)<br />

(※) Berkely DBに 格 納 されていた 形 式 から、クライアントへ<br />

転 送 できる 形 式 への 変 換 処 理 を、 各 エントリ 毎 に 行 う<br />

50


DB_CONFIG、set_cachesize<br />

DB_CONFIGに 設 定 するキャッシュは、<br />

Berkeley DBが 利 用 するバッファサイズ<br />

Berkeley DBによる、ディスクからのキャッシュ<br />

slapd<br />

dn2id.bdb<br />

xx.bdb<br />

id2entry.bdb<br />

yy.bdb<br />

set_cachesizeで<br />

指 定 するサイズ<br />

Berkeley DB<br />

__db.003<br />

51


エントリキャッシュ<br />

で、その <strong>先</strong> へ!<br />

52


エントリキャッシュ<br />

一 度 、Berkeley DBから 取 得 、デコードした<br />

エントリをOpenLDAP 側 でキャッシュ<br />

2 回 目 以 降 、slapdはエントリキャッシュを 利 用<br />

して、DBアクセス、デコード 処 理 を 省 略<br />

エントリキャッシュ<br />

初 回 きり<br />

id2entry.bdb<br />

slapd<br />

__db.003<br />

AVLツリー<br />

構 造<br />

Bツリー<br />

構 造<br />

53


cachesizeディレクティブ<br />

バックエンドにBerkerey DBを 利 用 している<br />

場 合 に、 利 用 可 能 なディレクティブ<br />

Berkeley DBから 取 得 済 み、デコード 済 みエン<br />

トリを、slapd 側 でキャッシュする 最暷 大 数 を 指 定<br />

bdb_id2entry()<br />

エントリ<br />

id2entry.bdb<br />

slapd<br />

エントリ<br />

キャッシュ<br />

entry_decode()<br />

__db.003<br />

Berkeley DB<br />

54


cachesizeディレクティブ<br />

デフォルトは、1000<br />

ベストは、エントリ 数 と 同 じ 数 だけ 設 定<br />

エントリキャッシュ<br />

id2entry.bdb<br />

1:1<br />

Berkeley DB<br />

slapd<br />

55


ID リストキャッシュ<br />

を 知 っておこう!<br />

56


インデックスを 利 用 した 検 索<br />

インデックスファイルを 利 用 して、ピンポイ<br />

ントで 必 要 なエントリを 読 む 為 のIDを 取 得<br />

bdb_key_read()<br />

ID、または<br />

またはIDのリスト<br />

xx.bdb<br />

dn2id.bdb<br />

slapd<br />

bdb_id2entry()<br />

エントリ<br />

id2entry.bdb<br />

必 要 な 回 数 だけに 絞 り、<br />

データベースへアクセス<br />

__db.003<br />

Berkeley DB<br />

57


キーでヒットしたIDのキャッシュ<br />

インデックスファイルから 取 得 したIDを、<br />

OpenLDAP 側 でキャッシュすることが 可 能<br />

bdb_key_read()<br />

ID、IDリスト<br />

IDリスト<br />

キャッシュ<br />

xx.bdb<br />

dn2id.bdb<br />

slapd<br />

bdb_id2entry()<br />

エントリ<br />

2 回 目 以 降 のID 取 得 の<br />

データベースアクセスを 省 略<br />

__db.003<br />

id2entry.bdb<br />

Berkeley DB<br />

58


IDリストキャッシュ<br />

で、その <strong>先</strong> へ!<br />

59


IDリストキャッシュ<br />

バックエンドにBerkerey DBを 利 用 している<br />

場 合 に 設 定 可 能<br />

IDL(ID List)キャッシュに 格 納 するIDの 最暷 大 数<br />

を 指 定 するディレクティブ<br />

slapd<br />

bdb_idl_cache_get()<br />

IDLキャッシュ<br />

bdb_idl_cache_put()<br />

( 初 回 きり)<br />

xx.bdb<br />

(2 回 目 以 降 )<br />

AVLツリー<br />

構 造<br />

__db.003<br />

Bツリー<br />

構 造<br />

60


idlcachesizeディレクティブ<br />

デフォルトは、0。<br />

IDLキャッシュは 使 わない<br />

BDBを 利 用 している 場 合 の 設 定 目 安<br />

Back-bdbは、1エントリと 同 数<br />

Back-bdbは、「1エントリにつき、1 ID」の 関 係<br />

HDBを 利 用 している 場 合 の 設 定 目 安<br />

Back-hdbはIDを 多 く 使 う 為 、エントリ 数 の3 倍<br />

61


OpenLDAP 側 でのキャッシュ 効 果<br />

インデックス<br />

+ 非 同 期曋 IO<br />

+キャッシュ<br />

22472.208 回 / 秒<br />

インデックス<br />

+ 非 同 期曋 IO<br />

20515.255 回 / 秒<br />

インデックス<br />

作 成<br />

1906.5 回 / 秒<br />

DB_CONFIG<br />

適 用 のみ<br />

282.917 回 / 秒<br />

※ 結 果 は、 今 回 の 検 証 環 境 での 値 です。 性 能 改 善 のインパクト<br />

インパクトは、 参 照 系 処 理 、 更暬 新 系 処 理 の 割 合 にも 依 存 します。<br />

62


10% UP!<br />

キャッシュで、10%<br />

OpenLDAP 側 での<br />

キャッシュ 技 術 を 活 用 しよう!<br />

63


スレッド 処 理<br />

を 知 っておこう!<br />

64


OpenLDAPが 生 成 するスレッド<br />

OpenLDAPは、マルチスレッドで 動 作<br />

slapdは、リスナーと、ワーカーの2タイプの<br />

スレッドを 生 成 する<br />

リスナースレッド×1<br />

ワーカースレッド×n<br />

slapd<br />

(n)<br />

65


スレッドが 生 成 されるタイミング<br />

slapd 起 動 時昷<br />

slapdプロセスは、リスナースレッドを 生 成<br />

LDAPクライアントからのアクセス 時昷<br />

リスナーに 加 え、 必 要 なワーカーをプール 開 始<br />

66


concurrencyディレクティブ<br />

<br />

スレッドライブラリに、 目 標 とする 並 行 度 数 を 指 定<br />

<br />

<br />

pthread_setconcurrency() を 利 用<br />

<br />

システムリソース 消 費 の 抑 制 などを 目 的 として、アプリケー<br />

ション 側 からスレッドの 並 行 度 数 を 絞 ることが 可 能<br />

デフォルトは 設 定 なし<br />

<br />

スレッドライブラリへの 並 行 度 数 の 制 限 なし<br />

Gnu C library<br />

67


tool-threadsディレクティブ<br />

<br />

slapdを、ツールモードにて 実 行 する 場 合 の 最暷 大<br />

スレッド 数 を 指 定 する<br />

デフォルト 値 は、1<br />

<br />

設 定 値 は、システムの 持 つCPUの 総 数 以 下 に<br />

<br />

slapd -T a や、slapadd など<br />

<br />

<br />

<br />

<br />

<br />

slapadd のほか<br />

slapcat<br />

slapindex<br />

slaptest<br />

slapacl…など<br />

slapd<br />

slapadd<br />

シンボリックリ<br />

ンクよりツール<br />

モードで 実 行<br />

68


ワーカースレッド<br />

で、その <strong>先</strong> へ!<br />

69


threadsディレクティブ<br />

ワーカースレッドの 最暷 大 数 (n)を 設 定 する<br />

slapdプロセスは、 最暷 大 n+1のスレッドを 生 成<br />

リスナースレッド×1<br />

ワーカーとなるスレッド×n<br />

slapd<br />

(n)<br />

70


threadsディレクティブ (2)<br />

デフォルトは、16<br />

2 未曑 満 では、OpenLDAPサーバの 起 動 不 可<br />

デフォルト 値 の2 倍 (16*2=32)より 大 きい 設 定<br />

では、 起 動 時昷 に 警 告 メッセージ<br />

33 以 上 が、 常 に 良 くないというわけではない<br />

設 定 可 能 な 最暷 大 値 は、1024<br />

( 最暷 大 1024)<br />

71


threadsディレクティブの 設 定<br />

OpenLDAPコミュニティからの、 設 定 目 安<br />

参 照 系 の 処 理 が 多 い 場 合<br />

ハードウェアのCPUコア 数 ×4、または、×8<br />

最暷 大 でも、16 程 度<br />

更暬 新 系 の 処 理 が 多 い 場 合<br />

16よりも、もっと 多 く<br />

(16 以 上 )<br />

72


threadsディレクティブの 設 定<br />

(2)<br />

<br />

処 理 内 容 や 環 境 によって、 適 正 値 は 異 なる<br />

<br />

デフォルト 値 のスタートも 間 違 いではない<br />

<br />

まずは、コミュニティの 情 報 を 信 じても 良 い<br />

可 能 であれば、 実 機 での 確 認 を!<br />

73


スレッド 数 を 調 整 した 効 果<br />

今 回<br />

インデックス<br />

+ 非 同 期曋 IO<br />

+キャッシュ<br />

インデックス<br />

+ 非 同 期曋 IO<br />

26075.061 回 / 秒<br />

22472.208 回 / 秒<br />

20515.255 回 / 秒<br />

インデックス<br />

作 成<br />

DB_CONFIG<br />

適 用 のみ<br />

1906.5 回 / 秒<br />

282.917 回 / 秒<br />

※ 結 果 は、 今 回 の 検 証 環 境 での 値 です。 性 能 改 善 のインパクト<br />

インパクトは、 参 照 系 処 理 、 更暬 新 系 処 理 の 割 合 や、CPUの 特 長 にも 依 存 します。<br />

74


16% UP!<br />

スレッド 数 で、16%<br />

状 況 に 応 じ<br />

ワーカースレッド 数 を 調 整 しよう!<br />

75


もう 一 歩 、その<br />

<strong>先</strong> へ<br />

76


様 々な 要 因 で、 性 能 は 変 化<br />

<br />

サイジングを!<br />

サービス<br />

要 件 の 把 握<br />

サイジング<br />

性 能 検 証<br />

(ベンチマーク)<br />

1. システムのサービス 要 件 の 把 握<br />

2. ハード、ミドルウェア 特 性 を 考 慮 したサイジング<br />

3. できる 限 り 本曓 番 環 境 に 近 い 環 境 での 確 認<br />

77


ご 清 聴 、<br />

ありがとうございました<br />

78

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!