
我們在一組 isilons 上運行 nfs,並且在一台機器上創建目錄並在另一台機器上讀取時間歇性地遇到相當大的延遲(大約 30 秒)。
這種情況似乎只在網路非常繁忙時才會發生,但有人建議在嘗試讀取新目錄之前在父目錄上執行「ls」將強制 NFS 重新快取。
聽起來對嗎?
答案1
聽起來您需要調整客戶端上的 acdirmin/acdirmax 掛載選項以更改目錄資訊快取期限的上限和下限。這 30 秒對應於預設的 acdirmin 30 秒,這意味著訊息必須在快取中至少 30 秒,然後客戶端才會考慮出去並刷新它。
看看將 acdirmin 調低至 15 或 10 秒是否有幫助。
另外,「ls」可能有幫助的原因是它導致 stat() 發生在「.」上。這可能會導致該 dentry 的快取失敗。我記得我們必須在 open() 之前修改一些工具來 stat() 檔案或目錄,以驗證該專案是否存在於我們的某些 NFS 內容中。
答案2
那麼這是其他客戶端注意到該文件已建立的文件嗎? (或它是否包括文件包含的資料量的變化)。
操作是否全部在單一目錄中,因為 isilons 在單一目錄中存在元資料效能問題。
您確定它不是正在寫入執行快取的檔案的伺服器嗎?
出於好奇,兩台機器安裝了相同的 isilon 磚(雖然這不重要,但會很有趣)。
您有哪些安裝選項? (nfs v2 有什麼區別嗎(更多的是好奇,它沒有 readir+ ))