Linux

適合大型 (5+ Gb) 文件的網路文件系統

  • February 19, 2013

我有許多用於 HPC / 集群計算的伺服器,我注意到,鑑於它們執行的部分計算使用 NFS 上的大文件這一事實,這會導致嚴重的瓶頸。我想知道如何解決這個問題。

設置:

  • 34 台帶有 Debian Squeeze 的伺服器(每台 42 Gb RAM)
  • 每台機器 12 個物理核心 + HT
  • 2 台“head”機器(head1 和 head2),每台 500 Gb 驅動器
  • 32 台從 head1 進行 PXE 引導的“從屬”機器
  • head1 為 32 台 PXE 伺服器導出 NFS 文件系統
  • head2 通過 NFS 導出一個“數據”目錄,其中包含所有其他機器的數據文件
  • “數據”目錄包含非常大的文件(5+ Gb)
  • 機器之間的連接性:千兆乙太網
  • 大多數機器不在同一個物理機架中
  • 使用 Open Grid Scheduler(又名 Grid Engine)進行批處理作業

該集群執行的計算之一涉及,對於每個“從屬”,在開始各種計算之前讀取非常大的文件集(3Gb + 3Gb + 1.5 Gb + 750M)。我注意到,當這種情況發生時,大多數奴隸在閱讀這些文件時實際上會花費大量時間(幾分鐘)(而實際計算要快得多)。

目前,我已經提高了 head2 的 NFS 守護程序中的執行緒數,並在從屬掛載選項中放入rsizewsize32k,但這仍然是一個重大瓶頸。

我可以做些什麼來提高性能,或者我應該讓從屬伺服器將這些文件託管在他們的硬碟上?還是我應該使用完全不同的 FS 進行儲存?

既然你在做性能分析,第一個問題應該是:“我假設的數據是什麼?是否有網路跟踪或其他性能數據可以支持這個假設?”

這樣的系統有很多可能的瓶頸,我最後會質疑網路文件系統的選擇,特別是因為您似乎沒有寫入大量數據和鎖定/並發以及伴隨的延遲問題是最有可能的NFS 的瓶頸原因。

另一方面,由於單個磁碟的 IOPS 等級相當有限,每個 8 GB 數據的 32 個並發請求都可能使任何單個 SATA 磁碟過載。一個簡單的計算假設每個請求的讀取塊大小為 64 KB,磁碟的 IOPS 為 100 IOPS,隨機讀取請求的速率僅為 6.4 MB/s - 這就是你將獲得的同時讀取器數量,除非您正在大量記憶體數據。

您應該仔細查看提供的性能指標iostat,看看您的磁碟是否沒有過載。如果是這樣,請採取適當的措施(即獲得一個能夠應對負載的體面的儲存子系統)來糾正這種情況。

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