ログ構造ファイルシステム

From Wikipedia, the free encyclopedia

ログ構造ファイルシステム[1]またはログ構造化ファイルシステム[2]: Log-structured file system)はデータやメタデータをログと呼ばれるリングバッファシーケンシャルに書き込むファイルシステムである[3]。1988年にはじめてジョン・オースターハウトとFred Douglisが設計を提案し、1992年にオースターハウトとメンデル・ローゼンブラム英語版SpriteというUnix系分散オペレーティングシステム用に実装した[4]

従来のファイルシステムは空間的局所性を意識したファイルの配置をして、光学ディスクや磁気ディスクで高いパフォーマンスを発揮するようにデータ構造をインプレースに変更するため、シークが比較的遅くなる傾向がある。

ログ構造ファイルシステムの設計はそのような従来のファイルシステムは現代的コンピューターの増え続けるメモリ容量によってI/Oのうち読み込みはほとんどメモリキャッシュから行われ、書き込みの方が重要になることによって効率的でははくなるという仮説に基づいている。したがってログ構造ファイルシステムは記憶媒体を環状ログとして扱い、ログの先頭からシーケンシャルに書き込んでいく。

これによって主に以下のような副作用が生じる:

  • 光学ディスクや磁気ディスクは大きなシーケンシャルアクセスをまとめてシークのコストを最小化するため、そのようなディスクにおいての書き込みスループットが改善する。
  • 書き込みはデータとメタデータの複数かつ年代順のバージョンになる。実装によってはタイムトラベルやスナップショットと呼ばれる機能として、古いファイルバージョンに名前を付けたりアクセスしたり出来る。バージョニングファイルシステムとこの点で非常に類似している。
  • クラッシュからの回復がシンプルになる。次のマウント時にファイルシステムは不整合を修正するためにデータ構造全体を見る必要はなく、ログの最後の一貫した地点から状態を再構築できる。

しかしログ構造ファイルシステムはログの先頭が一周し末尾と重なった際にスペースの再利用をする必要がある。以降のログに新しい版が存在する場合は末尾を開放することができる。新しい版が存在しない場合はデータは先頭に移動し、追加される。

このガベージコレクションによる負荷を軽減するために、多くの実装では純粋なリングバッファを使用せず、記憶媒体をセグメントに分割する。ログの先頭は隣接していない開放済みのセグメントに伸びてゆく。空き容量が必要になったときは、最も使われていないセグメントが優先して再利用される。これによりガベージコレクションのI/O負荷は減少するが、ファイルシステムの空き容量が減少し限界が近づくにつれ徐々に非効率的になってゆく。

欠点

関連項目

脚注

Related Articles

Wikiwand AI