オプションを使用して NFS マウントでファイルを開くアプリケーションを実行していO_DSYNC
ます。次に、アプリケーションは6500
ループ内のファイルにデータのバイトを 1000 回書き込みます。
クライアントの動作を監視したところ、基盤となるファイルシステムに 4096 バイトと 8192 バイトのバッチで書き込みが送信されていることがわかりました。
に従ってman open
、 で開かれたファイルに対する書き込み操作は、O_DSYNC
同期化された I/O データの整合性の完了の要件に従って完了します。さらに、次のように述べています。
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.
では、基礎となるファイルシステムがデータを正常に書き込むまでO_DSYNC
、呼び出しは返されないと想定しました。write()
それはここで起こっていることではありません。NFS クライアントは書き込みをキャッシュし、4k の倍数でフラッシュしています。これはなぜですか?
ここでは、Linux バージョン 4.9 を実行する Amazon EC2 インスタンスをページ サイズ 4096 で使用していることに注意してください。