さあその 先 へ、OpenLDAP パフォーマンスチューニング
1JAMzgk
1JAMzgk
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