web-dev-qa-db-ja.com

NFSは操作の順序を維持できますか?

サーバー「B」にNFSディレクトリがマウントされているディスクレスホスト「A」があります。 Aのプロセスはそのディレクトリ内の2つのファイルF1とF2に書き込み、Bのプロセスはこれらのファイルの変更を監視します。 Bが、Aが変更を行うと予想されるよりも速く変更をポーリングするとします。プロセスAは、ファイルの先頭を探し、データを書き込み、フラッシュします。プロセスBはファイルの先頭を探し、読み取りを行います。

Aによって実行された変更の順序がBでどのように検出されるかについて、anyの保証はありますか?

具体的には、Aが一方のファイルに交互に書き込み、次にもう一方のファイルに書き込む場合、BがF1とF2の交互の変更に気付くと予想するのは合理的ですか?あるいは、BはF1で一連の変化を検出し、次にF2で一連の変化を検出できると考えられますか?

質問には多くの仮定が埋め込まれていることを私は知っています。たとえば、1つのファイルだけを操作している場合でも、Aがファイルに対して100回の操作を実行すると、NFSが以前にAのアクションの一部をキャッシュしているため、同じ結果をもたらす変更の数が少なくなる可能性があることはほぼ確実です。それらはBに伝達されます。もちろん、NFSが関与しておらず、読み取りプロセスと書き込みプロセスの両方が同じrealで実行されている場合でも、同時ファイルアクセスに問題があります。ファイルシステム。

私がここで質問をしている理由は、ほとんどの場合、上記のセットアップはBでの変更を同じ順序で検出するように見えるからです。 Aで、しかしそれは時々いくつかのイベントが入れ替わった順序でやってくる。それで、これを機能させることを試みる価値はありますか? NFSを調整して機能させる方法はありますか?おそらくキャッシュ設定などですか?それとも、このようなきめ細かい動作は、NFSに期待しすぎているのでしょうか。

1
JustJeff

この

Bが変更をポーリングするとします

そして

具体的には、Aが一方のファイルに交互に書き込み、次にもう一方のファイルに書き込む場合、BがF1とF2の交互の変更に気付くと予想するのは合理的ですか?あるいは、BはF1で一連の変化を検出し、次にF2で一連の変化を検出できると考えられますか?

つまり、whatは、ファイルシステムがここで競合状態になることを保証します。

つまり、プロセスBが変更を検出した順序でカウントをカウントすることはできません。

次の場合に何が起こるかを検討します

  1. BはFooを投票します
  2. Fooへの書き込み
  3. バーへの書き込み
  4. Bはバーを投票します

私はネットワーク全体で一貫した順序付けに依存しません。 NFS自体は通常、 1つのクライアント閉じるファイル、別のクライアント開くこれらの変更を確認することのみを保証します。 (そして、これはサーバーのファイルシステムで観察された動作については何も言いません。)

ただし、NFSクライアント、サーバー、およびプロトコルのバージョンは何ですか?たとえば、LinuxカーネルNFSクライアントは2.6.18前後で属性キャッシュの動作を変更し(デフォルト)、書き込みキャッシュをまったく行わないように-o syncでマウントできます(データまたは属性)。 NFSv4では、NFSv3よりもキャッシュ動作をより細かく制御できます。

2
ephemient

トランザクションNTFSの説明にリンクしている 別の質問への回答 をご覧ください。それは本当にクールで、あなたの状況を助けるかもしれません。

0