async
私は、NetApp NFS(v3プロトコル)サーバーがモードfsync
でクライアント要求を正しく処理していることを確認するために、いくつかの詳細なテストを行ってきました。 Linux(RHEL 6、カーネル2.6.32-431.5.1)がCOMMITジョブをまったく実行していないことを発見したときに問題が発生しました!このnfsstat
ツールを使ってnfstrace
ツール。コミットはありません。
これは違反だと思います。NFSセマンティクス:
バージョン3クライアントは、close(2)またはfsync(2)システム呼び出し中にサーバーへの安全な非同期書き込みをフラッシュするとき、またはメモリ不足が発生したときにCOMMIT操作を使用します。
どうしたの?
メモ:
マウントポイントは非同期操作でマウントする必要があります(デフォルト)。
fsyncリクエストを生成するためにPostgresqlのツールを使用しましたtest_fsync
。システムに最適な方法を決定するために、いくつかの方法を使用して基準の同期とレポートを公開します。
タイミングの違いは、マウントtest_fsync
よりもマウントでfsync関数を実行するのに時間がかかることを示します。おそらく、マウントがマウントされている間、データは常に更新され、呼び出されたときにのみ更新されます。しかし、タイミングの違いが非常に不安定であり、パフォーマンスが過度に現れる可能性があります。async
sync
sync
fsync
このオプションを使用してサーバーをインストールしても、sync
何も変更されません。
アップデート:プロットがより複雑になります。
Ubuntu / Mint 17、Linuxカーネル3.13.0(nfsバージョン:1.2.8)では、同期オプションと非同期オプションの両方を使用してループバックマウントポイントを設定し、テストを再実行しました。速度差は確かに同期と非同期の違いを表します。nfsstat
各実行後にpg_fsync_test
正確に1コミットが発生しました。
一体何?
ベストアンサー1
同僚が可能な答えを見つけました。
Netappテクニカルレポートtr-3183(NFS経由でNetAppストレージと一緒にRed Hatクライアントを使用)では、次のように説明します。
Data ONTAP の NFS サーバーは、クライアントが UNSTABLE、DATA_SYNC、または FILE_SYNC 書き込みを要求するかどうかに関係なく、すべての書き込み要求を FILE_SYNC に昇格します。したがって、すべての書き込みが NVRAM に書き込まれ、クライアントが書き込みの即時承認を受けるため、クライアントは NetApp ストレージへの書き込み時に COMMIT 要求を送信する必要はありません。したがって、NetAppストレージへの書き込みは本質的に非同期であり、はるかに高速です。