增加 NFS 伺服器上的記憶體使用量

增加 NFS 伺服器上的記憶體使用量

我正在生成資料(100GB 檔案),這些資料最終透過 NFS v4.2 複製到 10Gb 網路上的伺服器。這些檔案以 XFS 格式儲存在許多 HDD 上(每個目標磁碟機一份副本)。

當複製任務運行時:

  • 客戶端記憶體佔用龐大(可能超過64GB,它需要盡可能多的記憶體)。
  • 但伺服器上幾乎不使用記憶體。

我想減少客戶端的記憶體使用量,因為它們不斷產生數據,這會減慢它們的速度。相反,伺服器主要是未使用的。

我猜想由於伺服器上的 HDD 速度很慢,客戶端會緩衝盡可能多的數據,以減少複製阻塞。我無法更改硬體設定。

有沒有辦法強制伺服器快取更多資料? 我更願意優先使用伺服器記憶體而不是客戶端記憶體。

NFS配置:

10.0.3.1:/          /mnt/field  nfs  nfsvers=4.2,noatime,nodiratime,_netdev,noauto,x-systemd.automount,x-systemd.mount-timeout=10 0 0

/etc/exports

/mnt        10.0.0.0/16(rw,async,fsid=0,no_subtree_check,crossmnt)

伺服器上的網卡配置:

MTU 9000
rinbuffer tx 512, rx 1024

客戶端網卡配置:

MTU 9000
rinbuffer tx 1024, rx 512

編輯: 根據要求,/proc/meminfo:

客戶端伺服器 - - - ------------------------

在此輸入影像描述

該客戶端上記憶體使用情況的監視器:

在此輸入影像描述

網路使用情況:

在此輸入影像描述

注意:客戶端使用大tmpfs(100GB)來計算。我認為這個 tmpfs 永遠不會從可用記憶體計數中減去。

編輯2:

網路和記憶體使用之間的相關性在另一個客戶端上更加明顯(我應該從這一點開始)。該客戶端不使用任何 tmpfs。

在此輸入影像描述

在此輸入影像描述

答案1

我想減少客戶端的記憶體使用量,因為它們不斷產生數據,這會減慢它們的速度。

你怎麼會知道這事?大多數客戶端記憶體都在頁面快取中,這是完全正常的,即使改進伺服器上的緩衝也不會阻止該資料用戶端的積極快取。

您是否嘗試過刷新頁面快取(作為測試)並查看應用程式在不使用頁面快取的情況下的執行情況?

NFS 具有所謂的「接近開啟」一致性,這意味著資料和元資料的內容實際上只有在您沒有主動開啟檔案時才能保證穩定(也就是說,另一個客戶端可以更改另一個客戶端上的文件)系統,你就一無所知)。

由於這種一致性限制,NFS 用戶端系統應用程式依賴頁面快取來確保資料可用於在必要時進行讀回。

話雖如此,在不知道/etc/exports將更多資料卸載到伺服器上的一種方法中發生了什麼的情況下,可能是確保使用sync掛載選項在客戶端上掛載NFS,並在伺服器上使用掛載選項導出路徑async

這將確保寫入在客戶端提交到伺服器,而伺服器在將資料提交到磁碟之前始終會回覆「完成」。

這將影響客戶端的吞吐量,因為您會因驗證客戶端的每個請求而導致延遲,但伺服器將緩衝更多的數據,因為它不會等待資料首先登陸磁碟。您可能還想調整dirty_write_centisecs伺服器上的這些位元和其他位,以允許它緩衝更多資料進行寫回。

但這就是問題所在——這可能會導致客戶端速度變慢,並在崩潰時降低伺服器的完整性。如果伺服器崩潰,您可能會遺失資料。

此外,這不會影響 NFS 無法真正控制的客戶端上頁面快取的記憶體使用。

總而言之,我懷疑減少客戶端記憶體使用量(如果您在此處測量的是頁面快取)是否會提高客戶端效能。

答案2

不,強制使用更少的記憶體可能會使速度變慢,而不是更快。您已經在 188 GB 快速 DRAM 上花費了大量精力,不妨使用它。

客戶端主機有 188 GB MemTotal,並使用其中 162 GB 進行快取。實際上記憶體需求相當低,請注意可以快速釋放的 123 GB MemAvailable。 40 GB 的 Shmem 中的大部分可能是 tmpfs。

由於 Cached + Shmem 加起來超過 MemTotal,我懷疑 tmpfs 被計算兩次,作為共享記憶體和在快取中。也會解釋 Cached 減去 Shmem 大約是 MemAvailable,缺乏持久性儲存的 tmpfs 無法被釋放。

伺服器端,15 GB 並更改 MemTotal,快取 13 GB。該主機上有大量可用記憶體。據推測,它的大部分功能都是為文件提供服務,而不是大量其他記憶體需求。

沒有開銷的證據,例如vmscan 活動頻繁或 MemAvailable 不足,我不建議採取行動。

相關內容