10月18、19日の2日間、フランスのストラスブールにおいて「EuroBSDCon 2008」が開催された。本誌では、同カンファレンスの中から特に興味深いセッションをピックアップしてお伝えしていこう。
Dirhashのメモリ確保と開放を動的にして最大容量の引き上げを
Google Summer of Codeに採択されたプロジェクト"Dynamic memory allocation for dirhash in UFS2"の担当者であるNick Barkas氏の発表がEuroBSDCon 2008において行われた。なお、Nick Barkas氏の取り組みは、FreeBSD's Fourth Google Summer of Codeにおいて、米Google, Murray Stokely氏によりFreeBSD SoCの結果の中で重要なものとして紹介されている。
Nick Barkas氏の取り組みは、FreeBSD UFS2で実装されているDirhash機能の問題点を洗い出し、最大Dirhashメモリ容量をダイナミックに確保できるようにしようというものだ。動的にメモリの確保と開放を実現することで固定的にメモリを消費することなく、Dirhashの恩恵を最大まで高めようというのが開発の主目的だ。
結論からいえば、同氏が取り組んだ開発は半分成功で残りは未達成だ。FreeBSDの枠組みを使って機能の実装はできたものの、性能の向上にはつながっていないか、または性能が向上しているかどうかのベンチマーク試験が不十分なところで止まっている。しかしアイディアとフューチャーワークは興味深いもので、今後の取り組みやチューニングによってはFreeBSDの性能を引き上げることにつながるかもしれない。
ここでは、発表内容からどういった取り組みが行われたかを紹介する。
Dirhashとはなに? - 大規模ディレクトリ操作を劇的に向上
Dirhashは大規模ディレクトリにおけるファイルの作成や削除といった操作を劇的に高速化するための機能。FreeBSD 5.2から導入されており、UFS2のフォーマットを変更することなくメモリ上にデータを読み込むことで実現されている。
UFS2のディレクトリはinodeにストアされている。ディレクトリinodeはディレクトリチャンクを指し示しており、ディレクトリチャンクはinodeとファイル名のリストになっている。名前からファイルを検索しようとした場合、ディレクトリごとに線形検索が発生することになる。要するにディレクトリ以下のファイルやディレクトリの数が増えると、線形に一致処理を走らせていくため、それだけ名前での検索に時間がかかるようになるというわけだ。これをメモリ上にハッシュとして保持することで高速に検索できるようにしたものがDirhashだ。
VFSネームキャッシュとDirhashとはいわばファイルに対するキャッシュ機能とディレクトリに対するキャッシュ機能ということになる。VFSは名前のルックアップをキャッシュするもので、ディレクトリそのものの操作はキャッシュしない。一方Dirhashはディレクトリにおける名前そのものをキャッシュする。この2つのキャッシュ機能がUFS2の高速化機能で重要な役割を果たしている。