6

クライアント側で NFS 属性キャッシュをフラッシュする方法を見つける必要があります。stat() 呼び出しは、実際の値ではなく属性キャッシュから ctime を読み取ります。実際の値がキャッシュに反映されるまでに最大 3 秒かかります。マウント時に「noac」オプションを使用すると機能しますが、長期的にはパフォーマンスに影響します。

ファイルの同じ所有者でchownを実行するなどの解決策に出くわしましたが、stat()を実行する前に属性キャッシュをフラッシュする適切な方法はありますか? この問題は Redhat Linux でのみ発生し、FreeBSD では発生しません。誰でも説明できますか?

4

2 に答える 2

3

これは NFS に固有のものではありませんが、カーネルにキャッシュをドロップさせることができます。これは通常、IO ベンチマーク時に行われますが、NFS でも機能します。

https://www.kernel.org/doc/Documentation/sysctl/vm.txt :

Writing to this will cause the kernel to drop clean caches, dentries and
inodes from memory, causing that memory to become free.

To free pagecache:
    echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
    echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
    echo 3 > /proc/sys/vm/drop_caches

As this is a non-destructive operation and dirty objects are not freeable, the
user should run `sync' first.
于 2013-03-08T19:30:16.990 に答える
0

公式ドキュメントから ( http://www.citi.umich.edu/projects/nfs-perf/results/cel/dnlc.html ):

open と fopen のみが、読み取りと書き込みのために特定のファイルへの一貫したハンドルを取得することを保証する必要があることに注意してください。新しい属性を取得するために統計と友人は必要ありません...

皮肉なことに、JavasFileInputStreamは open を使用していますが、属性の更新をトリガーしませんが、書き込もうとするとうまくいきます。new FileOutputStream(file).close()

パイソン:os.access(path, os.W_OK)

于 2021-03-18T20:02:59.327 に答える