大量のファイルを扱う為の最適化 ― 2007年12月25日 08時18分15秒
squid や web サーバ等、大量のファイルやディレクトリにアクセスするシステムでは、まず第一に考慮した方がいい項目だ。FreeBSD では 4.4-RELEASE から DIRHASH や dirhash 等と言われる機能を搭載している。ディレクトリ内に新しいファイルを作る時に、旧来の線形サーチではなく、ハッシュを使って高速化する技法だ。既に、6.x 系 7.x 系共に UFS_DIRHASH は有効になっている。
この dirhash が使っているメモリを sysctl の vfs.ufs.dirhash_mem で見られる。これが vfs.ufs.dirhash_maxmem に近付いていると、dirhash に要するメモリが足りない事を示す。
一度、調べてみた。/usr/src を cvs up
した後なので、低くはない。
# sysctl -a | grep dirhash
vfs.ufs.dirhash_docheck: 0
vfs.ufs.dirhash_mem: 529820
vfs.ufs.dirhash_maxmem: 2097152
vfs.ufs.dirhash_minsize: 2560
make {build,install}{world,kernel}
をやった。
# sysctl -a | grep dirhash
vfs.ufs.dirhash_docheck: 0
vfs.ufs.dirhash_mem: 871454
vfs.ufs.dirhash_maxmem: 2097152
vfs.ufs.dirhash_minsize: 2560
なお、32bit の i386 アーキテクチャでは kernel virtual address (KVA) と言われるカーネルに割り当てられるメモリが、1GB になっている。vfs.ufs.dirhash_maxmem を上げる時は、それを越えない程度にするか、KVA_PAGES を変更して、KVA を大きくする必要がある。
コメント
トラックバック
このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2007/12/25/2528638/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。