Dirhashの抱えている現在の課題

Dirhashは最初にディレクトリにアクセスがあった時点で作成されメモリに保持される。inodeと名前の一覧がハッシュとしてメモリに保持される仕組みだ。

現在のDirhashが抱えている検討課題は次のとおり。

  • Dirhashで利用できるメモリサイズが静的に固定されている
  • Dirhashで利用できるメモリサイズを増やすことは、それだけメモリの空き容量が必要となることを意味する
  • デフォルトのDirhashメモリサイズ(vfs.ufs.dirhash_maxmem)は2MBに設定されており、今となっては少ない傾向にある
  • Dirhashはファイルシステムがマウントされるごとにもう一度作り直す必要がある (オンメモリであってディスクにハッシュテーブルを保持しているわけではないから)

同氏は上記のうち、上から3つの課題に対してダイナミックなメモリ確保と開放を実現することで、メモリ上限値を引き上げつつも利用するメモリ量を抑えようとした。

ベンチマーク結果 - 標準偏差が大きく、性能に効果があったのかは不透明

残念なのはベンチマークの結果が不透明なことだ。

まず原因として、FreeBSD 7と8ではキャッシュの仕組みがすでに変わっており、7向けにチューニングしても8では性能が発揮できなかったことが挙げられそうだ。またベンチマークそのものが適切ではなかった可能性がある。

Nick Barkas氏が示したベンチマークグラフは標準偏差が大きすぎる傾向があり、果たして適切なベンチマーク結果であるか判断しにくい。別のベンチマークを実施した場合、異なる結果になる可能性もあり、実は汎用的に性能が向上していたという可能性もある。

ベンチマーク結果その1

ベンチマーク結果その2

ベンチマーク結果その3

今後の取り組みとしては、オンメモリで保持しているハッシュデータをディスクに保持するようにし、アンマウントした後でもDirhashを迅速に戻せるようにしたいという発表があった。ただしそれでは本末転倒であり、ファイルシステム本来の性能が損なわれる可能性もある。まだまだ研究と実験が必要だ。

とは言え、今後の発展が期待できる興味深い取り組み

今のところDirhashの性能を向上させるには、Dirhashメモリサイズ(vfs.ufs.dirhash_maxmem)をデフォルトの2MBから静的に引き上げるのが有効だ。実のところ2MBというのは小さいようだがなかなかうまく設定された値で、メモリを圧迫することなくかなりの性能向上を実現している。適切なサイズは利用状況によって左右されるが、20MB程度まで引き上げるとさらに性能が向上する。もちろんそれだけメモリは確保しておく必要はある。

結果的に性能向上につながるかどうかは不透明な状況だが、Dirhashのメモリを動的に確保・開放するというコンセプトが実装でき、検証が行われたということ、初期実装でベンチマークを実施して定量的な計測を試みたこと、今後の展開としてハッシュデータをディスクに書き込むことで永続的なハッシュデータ保持が有効ではないかと提案していることなど、評価すべきポイントも多い。今後の展開に期待だ。