Networking

使用多個磁碟的 NFS 性能不佳

  • September 20, 2013

我有一個執行 Ubuntu 12.10 的伺服器系統,連接了 12 個磁碟。我使用 NFSv4 在我的 10 Gb 網路上共享所有這些磁碟。但是,與我能夠在本地獲得的性能相比,我在 NFS 上的性能普遍較差。我在研究 NFS 性能不佳時遇到的一般解決方案是在伺服器的導出文件中使用非同步選項而不是同步。但是,這根本不是我的選擇。我知道這會導致性能下降,但我不希望達到我所看到的程度。

我發現我在 NFS 客戶端上積極使用的磁碟越多,我的每磁碟吞吐量就越差。例如,如果我只使用 1 個磁碟,我能夠以 60MB/s 的速度寫入。但是,如果我積極使用所有 12 個磁碟,我只能以每個磁碟 12MB/s 的速度寫入。等效的本地測試可以產生 200MB/s 每個磁碟沒有問題。是否可以進行一些調整來優化多磁碟 NFS 性能?在伺服器被積極使用時,CPU 或記憶體似乎都沒有被大量使用。

看起來同步寫入是這裡的罪魁禍首,不幸的是,當系統需要同步寫入時,您無能為力。

問題是由於正在寫入數據的遠端系統必須等待整個文件系統塊在寫入下一個之前寫入。如您所見,對於小塊大小,這將對性能不利。

這個問題沒有很好的解決方案,但這裡有一些可能的選項來緩解瓶頸:

  • 增加塊大小,以便每次操作能夠寫入更多數據。
  • 獲取單獨的快速 SSD 或 NVRAM 設備用於寫入記憶體/日誌。這將顯著提高所有工作負載的吞吐量。這可以通過 ext4 在 Ubuntu 上使用tune2fs(8)命令完成,並使用參數添加外部日誌設備-J
  • 將 NFS 共享拆分為一個專用於同步寫入,另一個用於非同步寫入。這樣,您可以將任何非關鍵數據放在非同步共享上,以獨立提高該工作負載的吞吐量。
  • 嘗試不同的文件系統,讓您在本機進行穩定的寫入記憶體。我在我的 SAN上的FreeBSD上使用ZFS ,並帶有 SSD 支持的意圖日誌(相當於 ext4 上的日誌)。我從未在 Linux 上嘗試過 ZFS,但它現在似乎是一個有點成熟的項目。添加 SSD 後,我在 iSCSI 上的讀取和寫入吞吐量都顯著提高。我不確定您是否熟悉 ZFS,但如果您不知道,ZIL(ZFS 意圖日誌)的目的是在 SSD 等快速、穩定的儲存上提供寫入記憶體。日誌將定期送出到事務組中的磁碟,以確保數據不會失去,並且在斷電的情況下,可以從日誌中重放寫入以恢復文件系統的完整性。

我過去遇到過這個問題,並且真的沒有找到完全消除這個問題的好方法。如果您發現任何其他緩解問題的方法,請告訴我!

引用自:https://serverfault.com/questions/539784