ext4の断片と範囲の違い

ext4の断片と範囲の違い

私はしばしばext4 fsの文脈で「断片」と「範囲」という単語を偶然見つけます。

それらはすべて断片化に関連しているようです。たとえば、範囲はかなり広く解釈されます。ここ

それらの違いは何ですか?

ベストアンサー1

より混乱するのは、2つのタイプのフラグメントと3つのタイプのフラグメントがあるということです。

  • 断片化されたファイルは、複数のブロック(または断片、各断片がスコープになる可能性があります)に格納されるファイルなので、ファイルを順次読み取ると、オペレーティングシステムはディスク上のさまざまな場所からすべての断片を読み取る必要があるため、遅くなります。ファイル読み取り速度。 ext4fsのアルゴリズムは、ファイルにブロックをできるだけ連続的に割り当てることで、これが発生しないようにします。複数の範囲を持つファイルを断片化したファイルと呼びます。ただし、ファイルは、スコープではなく連続ブロックのリストである単一のフラグメント(つまり分割されていない)として保存することもできます。これがフラグメントと範囲が関連する方法です。

  • フラグメントは、チャンクより小さいファイルの最後のチャンクでも、他のフラグメントと一緒にチャンク全体にフラグメントとして格納されるチャンクより小さいファイルでもあります。ブロックサイズが大きく、小さなファイルが多い場合は、単一のブロックに複数のファイルを保存することで、大量のスペースを節約し、パフォーマンスを向上させることができます。特に、ブロックを共有するすべてのファイルを読み取ろうとする場合はさらにそうです。

ファイルシステムの観点からは、内部断片化と外部断片化がある可能性があります。

  • 内部断片化は単一ファイル内で行われ、上記の最初の断片化タイプと同じです。

  • 外部断片化は、関連ファイルがすべて1つのディレクトリにあり、ディスク全体に分散されている場合に発生します。ディレクトリ内のすべてのファイルを読み取ろうとすると、内部断片化と同じように多くのパフォーマンス問題が発生する可能性があります。 ext4fsアルゴリズムはまた、同じディレクトリ内の他のファイルと同じシリンダグループ内のファイルにブロックを割り当てようとし、外部断片化を最小化しようとします。

歴史的記録:

Linux ext4fsはext3fs、ext2fs、extfsの進歩です。 extfsはUFSに基づいていますが、ベースではありません。 UFSはBSD Fast File System(FFS)に基づいています。上記のアルゴリズムはFFSのコアアルゴリズムであり、主にext4に存在しますが、FFSの他の多くのアルゴリズム(特に回転遅延を処理するアルゴリズム)は廃止され、UFSで廃棄される可能性があります。上記の用語のいくつかは(少なくとも)Linux第2世代であり、用語自体は変更された可能性がありますが、アルゴリズムはそのまま残ります。

FFSのシリンダーグループは、最初はトラックとセクター(回転待ち時間の最適化のため)に関連付けられていますが、実際には隣接するシリンダーだけです。ブロックは少なくとも30年間トラック/セクターにはっきりとマッピングされておらず、おそらくフロッピーディスクが広く普及してからはなかったでしょう。ただし、シリンダーグループは依然として連続ブロックグループであり、ナビゲーション時間を最適化するのに役立ちます。ナビゲーション時間はSSDとは関係ありませんが、連続ブロック割り当ては依然として役立つ可能性があります。

シリンダーグループの最適化はほとんど副作用ですが、意図的です。なぜなら、 inode はシリンダグループに属し、ディレクトリの inode は順次割り当てられる傾向があり、ディレクトリの inode にブロックを割り当てようとするからです。同じシリンダーグループ。

シリンダグループは、断片化によって引き起こされるパフォーマンスの問題を軽減するために使用される唯一のアルゴリズムではありません。 FFSもファイル内でより大きな連続ブロック割り当てを得るためにブロック割り当てを遅らせようとします。

UNIXでは、「断片」という用語は常に不注意に使用され、文脈を注意深く読まないと、どのタイプの断片を参照しているかはほとんどまたはまったく明確ではありません。 BSD と Linux の両方について複数の歴史的文書を検索して参照した結果、内部または外部の断片化という用語の正式な定義が見つからず、その使用法は決して修正されていないように見え、「断片化」という用語自体が時々使用されていました.両方のタイプを同時に参照します。

おすすめ記事