2017-08-23 1 views
0

NFSマウントでファイルを開くアプリケーションを実行しています(O_DSYNCオプション)。アプリケーションは、ループ内のファイルに6500バイトのデータを1000回書き込みます。NFSクライアントは、アプリケーションがO_DSYNCでファイルをオープンしても書き込み要求を集約します

クライアントの動作を監視し、4096および8192バイトのバッチで基本ファイルシステムに書き込みを送信していることに気付きました。

man openに従って、O_DSYNCで開かれたファイルに対する書き込み操作は、同期I/Oデータの完全性完了の要件に従って完了します。さらに、私は、基礎となるファイルシステムが正常にデータを書き込んだまでO_DSYNCで、write()呼び出しは戻らないだろうと想定

O_DSYNC provides synchronized I/O data integrity completion, meaning write operations will flush data to the underlying hardware, but will only flush metadata updates that are required to allow a subsequent read operation to complete successfully. 

、と述べています。それはここで起こっていることではありません。 NFSクライアントは書き込みをキャッシュし、それらを4kの倍数でフラッシュします。なぜこれはそうですか? 、私は唯一のストレージ・ブロック・サイズの倍数であることができ、4096

+0

古いバージョンでどのような動作が見られますか? –

+0

@AndrewHenle、同時に2つの異なるマシンでライターとリーダを実行すると、ループの500回以上の繰り返し後に4分間スリープします。アプリケーションは '6500xnumber_of_iterations'バイトを書き込んだログを出力しますが、読者は数バイト短くすると主張しています。これは4.9のみであり、4.1では見られない。 – user1071840

+0

O_DSYNCは、プロセス内のファイルバッファのみを参照します。 NFSには、書き込みとキャッシュを即時に行うSYNCオプションがあります。また、NFSエクスポートで同期を設定する必要があります。 – stark

答えて

0

デバイスへの書き込みのページサイズで、Linuxバージョン4.9を実行しているAmazon EC2インスタンスを使用しています

注:古いディスクまたは4096用のために512のバイト多くの新しいディスク。ファイルはディスクブロックと整列していないので、ファイル書き込みがはるかに小さいにもかかわらず、2つのディスクブロックの読み取り - 変更 - 書き込みが行われ、デバイスに8kの書き込みが行われる可能性があります。

関連する問題