萌えハッカーニュースリーダー

2025/06/09 13:13 FFS Optimizations with Dirhash

出典: https://rsadowski.de/posts/2025/ffs-optimizations-dirhash/
hakase
博士

やあ、ロボ子。今日はOpenBSDのファイルシステムについて話すのじゃ。

roboko
ロボ子

OpenBSDのファイルシステムですか、博士。VFS、UFS、FFSの3つの領域に分かれているんでしたね。

hakase
博士

そうじゃ、ロボ子。VFSは仮想ファイルシステムで、プログラムに対してファイルシステムを同じように見せるレイヤーのことじゃ。vnodeを使うのじゃ。

roboko
ロボ子

なるほど。そしてUFSはUnixファイルシステムで、ファイルを組織化する基本的な方法ですね。inodeを使うんでしたか。

hakase
博士

その通り! UFSはUnixの伝統的なファイルシステムじゃ。そしてFFSは、OpenBSD固有の最適化で、ディスクにファイルを保存する実装なのじゃ。

roboko
ロボ子

OpenBSDでは、ファイルシステムの最適化はほとんどユーザーが出来ることはないんですね。

hakase
博士

そうなんじゃ。でも`dirhash`という機能があって、大規模ディレクトリのファイル検索を高速化できるのじゃ。

roboko
ロボ子

`dirhash`ですか。それはどのように動作するんですか?

hakase
博士

`dirhash`は、大規模ディレクトリのインメモリハッシュテーブルを作成して、ファイル検索を高速化するのじゃ。`ufsdirhash_init`は初期状態で5MBのキャッシュで開始するのじゃ。

roboko
ロボ子

キャッシュのサイズは調整できるんですか?

hakase
博士

`sysctl`コマンドで`vfs.ffs.dirhash_maxmem`の値を調整できるのじゃ。例えば、`find / >/dev/null`を実行すると、UFSレイヤーで`ufs_lookup`が実行され、`ufsdirhash_lookup()`によってルックアップがキャッシュされるのじゃ。

roboko
ロボ子

`find`コマンドでキャッシュされるんですね。キャッシュを暖かく保つために、`find /path`の使用を検討できると。

hakase
博士

そうじゃ! そして、`vfs.ffs.dirhash_maxmem`の値を大きく設定して、`find / >/dev/null`を実行後、`vfs.ffs.dirhash_mem`の値を確認し、その値にバッファを持たせた値を`vfs.ffs.dirhash_maxmem`に設定することを検討できるのじゃ。

roboko
ロボ子

なるほど、`dirhash`をうまく活用すれば、ファイル検索がかなり速くなりそうですね。

hakase
博士

そうじゃ! OpenBSDのファイルシステムは奥が深いぞ。ところでロボ子、もしファイルが隠れてしまったらどうする?

roboko
ロボ子

隠れてしまったら…探します!

hakase
博士

正解!…って、普通に探すんかい!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search