
Linux 7.4では、FAT32のファイルにディスク領域を事前割り当てする処理を改める変更が取り込まれました。ベンチマークでは最大265倍の性能向上が報告されています。対象は、ファイルサイズを変えずに領域を確保する処理です。
1クラスタずつの割り当てをまとめて実行
変更前のFATドライバーは、FALLOC_FL_KEEP_SIZEを使ってファイルを拡張する際、クラスタを1つずつ繰り返し割り当てていました。クラスタは、ファイルシステムが記憶領域を管理する単位です。
今回の変更では、複数のクラスタを1回の処理で割り当てます。パッチは数行のコードに関わり、FATドライバーの割り当て処理を変更します。
FALLOC_FL_KEEP_SIZEは、ファイルの報告上のサイズを変えずに、保存領域をあらかじめ確保するためのフラグです。今回の変更が扱うのはファイルの表示サイズではなく、先行して確保するディスク領域の割り当て方法です。
FAT32はテーブルでクラスタのつながりを管理
FATは「File Allocation Table」の略で、各クラスタの使用状況や、ファイル内で次に続くクラスタをテーブルに記録します。FAT32ではファイルのデータがクラスタ単位で置かれ、テーブルの情報をたどって順序を把握します。
ディレクトリエントリーにはファイルの先頭クラスタが記録され、後続のクラスタはテーブル上のリンクをたどって見つけます。ファイルの割り当て列の末尾には、そこで終わることを示す値が置かれます。
この方式では、ファイルを読む際に割り当て列をたどるため、FATの大きな範囲を読み込む場合があります。クラスタを複数まとめて割り当てる変更により、従来のように1クラスタずつ割り当てる処理が減ります。
ベンチマークで最大265倍の向上
開発者のMatheus Alves de Almeidaが共有したベンチマークでは、FAT32の性能が最大265倍向上しました。
変更はLinux 7.4に取り込まれました。Andrew Mortonが提出したnon-MM pull requestの一部として、今週マージされています。









