
私たちは isilon のクラスター上で nfs を実行していますが、1 台のマシンで dir を作成し、別のマシンで読み取るときに、断続的にかなりの遅延 (約 30 秒) が発生します。
これはネットワークが非常に混雑している場合にのみ発生するようですが、新しいディレクトリの読み取りを試みる前に親ディレクトリで「ls」を実行すると、NFS が強制的に再キャッシュされると言われています。
それは正しいと思いますか?
答え1
ディレクトリ情報のキャッシュ期間の上限と下限を変更するには、クライアントの acdirmin/acdirmax マウント オプションを調整する必要があるようです。この 30 秒はデフォルトの acdirmin の 30 秒に対応しており、クライアントがキャッシュにアクセスして更新することを検討する前に、少なくとも 30 秒間は情報がキャッシュ内にある必要があることを意味します。
acdirmin を 15 秒または 10 秒に調整すると効果があるかどうかを確認します。
また、'ls' が役に立つ理由は、それが "." で stat() を発生させ、その dentry のキャッシュを無効にしている可能性があるためです。NFS の一部の項目が存在することを検証するために、open() の前にファイルまたはディレクトリを stat() するようにツールの一部を変更する必要があったことを思い出します。
答え2
これは、ファイルが作成されたことを他のクライアントが認識しているということでしょうか? (または、ファイルに含まれるデータの量の変更も含まれますか)。
isilons では単一ディレクトリ内のメタデータ パフォーマンスに問題があるため、操作はすべて単一ディレクトリ内で行われます。
キャッシュを実行しているのはファイルを書き込むサーバーではないと確信していますか。isilon にログインして「アプライアンス」からディレクトリを監視すると、クライアントが書き込んだと同時にサーバー上にファイルが表示されますか。
興味深いことに、2 台のマシンに同じ isilon ブリックがマウントされています (問題にはならないはずですが、興味深いでしょう)。
どのようなマウント オプションがありますか? (nfs v2 では何か違いがありますか (興味深いことに、readir+ がありません))