ext4のファイル・プリアロケーションはなぜ速いのか?

ここに答えがありました。
ext4 の徹底調査 - IBM DeveloperWorks
ファイル・レベルのプリアロケーション データベースやコンテンツ・ストリーミングなどといった特定のアプリケーションでは、ファイルが隣接するブロックに保存されることを大前提とします (ドライブの連続ブロックに対する Read 操作の最適化を活用するため、そして Read コマンド対ブロックの比率を最大限にするためです)。

エクステントによって隣接するブロックのセグメントを提供することもできますが、もう 1 つの強力な方法は、必要なサイズの隣接ブロックからなる非常に大きなセクションを事前に割り当てることです (かつて XFS で実装していた方法です)。
ext4 ではこの方法を実装する手段として、指定したファイル・サイズを事前に割り当てて初期化する新しいシステム・コールを使用します。

こうすることで、事前に割り当てたセクションに必要なデータを書き込めば、そのデータに対する Read 操作のパフォーマンスを優れたものにすることができます。
ここでいう「新しいシステムコール」というのが、"posix_fallocate"というものです。
Man page of POSIX_FALLOCATE
関数 posix_fallocate() は、ディスクリプタ fd で参照されるファイルに対して、ディスクスペースを確実に確保する。

今後、posix_fallocateをサポートしているかいないかが、ファイルシステムを考える上で非常に重要になってきそうですね。

関連記事

カテゴリ:

人気記事