大量のファイルを扱う為の最適化2007年12月25日 08時18分15秒

FreeBSD のメーリングリストを見ていると、性能に問題があると言われた時に皆が必ず指摘して、それが毎回問題になっている事がある。dirhash は高速化への第一歩のようだ。

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の入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2007/12/25/2528638/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。