ループデバイス用のdirect-IO(「losetup --direct-io」)と「mount -osync」の違いは何ですか?

ループデバイス用のdirect-IO(「losetup --direct-io」)と「mount -osync」の違いは何ですか?

私が知っている限り、デバイスループにはフラグを使用せずに2つのキャッシュが含まれています。ページキャッシュは、ループデバイス内のファイルシステムへの書き込み時に一度アクセスされ、基本ファイルのファイルシステムへの書き込み時に再びアクセスされる。そうですか?

direct-IOのドキュメントによると

--direct-io[=on|off]バックアップファイルへの直接I / Oを有効または無効にします。オプションのパラメータはオンまたはオフにできます。このパラメーターを省略すると、デフォルト値はonです。

これは、このオプションを使用すると、基本ファイル用のファイルシステムのキャッシュであるキャッシュが1つしかないことを意味しますか?

文書-o syncによると

-o syncファイルシステムへのすべてのI / Oは同時に完了する必要があります。書き込みサイクル数が制限されているメディア(たとえば、一部のフラッシュドライブ)の場合、同期はライフサイクルを短縮する可能性があります。

過去にループマウント時にファイルシステムに深刻なパフォーマンスの問題があり、sync寿命の短縮に関する警告に基づいて、これは基本ファイルに対してもキャッシュがもうないことを意味すると仮定しました。データはハードウェアに直接書き込まれます。

これは正しいですか、それとも複雑ですか?

ベストアンサー1

免責事項:これは100%正確ではないかもしれません。これが私の理解です。

通常、ファイルを開くときにO_SYNCまたはO_DIRECTを持つことができます。

同期とは、各書き込み後にデータがディスクに同期されることを意味します。これは、ユーザースペースからカーネルスペースにコピーし、ファイルシステムで同期を実行し、最後にプライマリレイヤーに同期した後、ディスク上である種の同期を実行することを意味します。

Direct-io は、データが可能な場合は内部バッファをバイパスしてディスクに直接書き込まれることを意味します。

違い:

  • 読み込み速度を上げるために、同期と共にキャッシュが引き続き使用されます。また、追加のメモリコピーが必要です。
  • 同期は、ある種のディスク同期につながることはほぼ確実です。つまり、他のパーティションのデータも同期されるという意味です(「同期化」でマウントしたパーティションは 1 つだけあり、他のパーティションは「同期化」なしでマウントできるからです)。
  • direct-ioは自動的に同期されないと思います。これは、(a)他のパーティションのデータが同期されず、(b)ドライブの内部キャッシュがフラッシュされないことを意味します。
  • 512バイトの倍数を使用するなど、他のもの

注:複数の層(ハードドライブ - >ソフトウェアRAID - >暗号化 - > lvm - >ファイルシステム)を持つより複雑な設定では、同期はハードウェアに渡されます。

direct-ioを使用してループバックデバイスをインストールするとは、次のことを意味します。

  • キャッシュはループバックデバイスには使用されません(スタックの残りの部分には使用されます)。
  • データが暗黙的にディスクに同期されないため、より良いパフォーマンスが得られます。
  • メモリを無駄にしません。

おすすめ記事