Linux

來賓虛擬機中的 Linux /proc/sys/vm/drop_caches

  • May 24, 2019

問題: 禁用來賓 VM 內的頁面記憶體並依賴主機的 ZFS ARC(和基於 SSD 的 L2ARC)是否是一個好主意?

背景: 我在問,因為我正在執行一個 Proxmox 集群,無論它實際需要多少,它總是顯示所有 VM 使用了大約 90% 的 RAM。由於來賓核心使用頁面記憶體,這是可以預料的。因為我聽到了很多關於 ZFS 的 ARC 的好消息,這讓我想到也許我可以增加對這些的依賴並減少對訪客頁面記憶體的依賴。本質上,ARC 將是所有 VM 的共享頁面記憶體。

通過這樣做,我將獲得更準確的 proxmox 統計數據和圖表的額外好處,從而讓我更好地了解每個 VM 實際需要多少記憶體。這反過來又會給我提供我需要的資訊,以便更好地調整每個 VM 的 RAM 的大小,並允許我將主機的 ARC 的大小增加相同的數量。

我實際上沒有嘗試過任何這些,我想我會先由你們執行它。那麼,我這樣想是不是很傻?

後續問題:我將如何禁用(或限制)Linux VM 中的頁面記憶體?一種方法是使用 cronjob 並定期將“3”寫入 /proc/sys/vm/drop_caches,例如每分鐘一次或某事。但是感覺有點hacky,沒有更好的方法嗎?

PS 是的,我意識到我只是在談論讀記憶體,而不是受頁數量影響的寫記憶體。所以我可能仍然需要一些可用的 RAM 空間來實現這一點(但這應該在 Proxmox 中的 VM 的 RAM 使用統計資訊中可見,所以上面的所有內容都應該仍然適用)。

我經常(但不總是,見下文)優化我的虛擬機管理程序,類似於您的建議:讓虛擬機在共享主機磁碟記憶體上大量中繼。

但是,使用這種drop_caches方法對我來說似乎過於嚴厲,因為它會從客戶機中驅逐過多的記憶體記憶體。同時,我不知道任何限制頁面記憶體的方法(缺少配置您的應用程序以使用直接 I/O)。因此,關鍵是正確調整 VM RAM 資源的大小:嘗試只分配來賓真正需要的記憶體,再加上 1 或 2 GB 的“喘息空間”。

以這種方式管理記憶體有一些重要的優點:

  • 由主機管理,記憶體記憶體可以根據客戶的I/O需求動態分配給客戶;
  • 通過動態管理,將您的記憶體視為真正的資源池,您可以減少資源浪費並提高效率;
  • 如果在您的主機上使用 ZFS,您可以利用非常先進的 ARC/L2ARC 及其抗垃圾行為

但也有一些缺點:

  • 作為共享資源,您的主機記憶體記憶體可能會被惡意 VM 破壞(影響其他更重要的 VM);
  • 位於一些上下文切換並vmexit/vmenter離開時,任何基於主機的記憶體的峰值和持續速度都將低於相應的客戶機端記憶體(這就是我建議您避免drop_caches在客戶機中重複的原因);
  • 儘管更先進且命中率更高,但當工作負載完全適合記憶體時,ARC 比 linux pagecache 慢。因此,為了在性能關鍵的客戶機上獲得最大的客戶機速度,您可能希望為 VM 提供足夠的記憶體用於頁面記憶體。

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