Linuxでは、「barrier」マウントフラグとはどういう意味ですか?

Linuxでは、「barrier」マウントフラグとはどういう意味ですか?

「バリア」取り付けオプションのマニュアルは次のとおりです。

バリア=0 /バリア=1

これにより、jbdコードで書き込みバリアの使用を無効/有効にします。 Barrier = 0は無効にし、Barrier = 1は有効にします(デフォルト)。さらに、障壁をサポートできるIOスタックが必要です。障壁の書き込み中にjbdエラーが発生すると、障壁は再び無効になり、警告が発生します。書き込みバリアはログコミットの正しいディスク順序を適用し、揮発性ディスク書き込みキャッシュを安全に使用できるようにしますが、パフォーマンスが低下します。ディスクが何らかの方法でバッテリ駆動されている場合は、障壁を無効にするとパフォーマンスが安全に向上する可能性があります。

ところで、この文章が何であるかわかりません。」ログコミットの正しいディスク順序「方法。

通常の順序(ログ1、データ1、データ2)を想定します。
これを設定すると、次のいずれかのソート結果が発生しますかbarrier=0

  1. ログ2、データ2;ジャーナル1、データ1;
  2. データ1、ジャーナル1、データ2、ログ2.

答え1

ほとんどの最新のファイルシステムはジャーナリングファイルシステムです。つまり、ログと呼ばれる内部データ構造で、まだディスクに書き込まれていない変更を追跡します。競合が発生すると、ログが再生され、すべての書き込みが正常に実行されたことを確認し、ファイルの破損を防ぎます。

データが実際にディスクに書き込まれるとき、書き込みキャッシュはスループットを最大化するために書き込み順序を再指定しますが、競合が発生した場合にメタデータが次のようにならないように、メタデータの前に実際のファイルデータをディスクに書き込む必要があります。データは時代遅れです。

問題は、多くのディスクに独自のキャッシュがあるため、書き込み順序が変更される可能性があることです。一部のファイルシステムでは、これが起こると仮定し、ディスクが特定のポイントでキャッシュを強制的にフラッシュするように、これらのことが発生しないようにします。これはwrite barriers通常、ext4やLinuxなどのシステムで知られています。

この操作によるパフォーマンスの低下は、最新のディスクでは無視できますが、必ずしも必要でない限り、書き込みバリアを無効にしてはいけません。

答え2

~からこのLWN記事:

ファイルシステムコードは、[ログ]コミットレコードを作成する前に、すべてのトランザクション情報がログに書き込まれていることを絶対に確認する必要があります。正しい順序で書くだけでは十分ではありません。最新のドライブは大規模な内部キャッシュを維持し、パフォーマンスを向上させるために作業順序を変更します。したがって、ファイルシステムは、コミットレコードを書き込む前に、すべてのログデータをメディアにインポートするようにディスクに明示的に指示する必要があります。コミットレコードが最初に書き込まれると、ログが破損する可能性があります。カーネルのブロックI / Oサブシステムはバリアを使用してこの機能を提供します。デフォルトでは、バリアは、バリアの前に書き込まれたすべてのブロックがメディアにコミットされるまで、バリアの後にブロックが書き込まれることを禁止します。バリアを使用することで、ファイルシステムはディスク構造が常に一貫していることを保証します。

関連情報