使用 KVM 分配交換空間

使用 KVM 分配交換空間

考慮以下場景:具有 2 GiB 的主機運行一些使用 KVM 的來賓。每個客人通常不需要太多記憶體;他們每人獲得 256 MiB,並且運行的服務大部分都是閒置的。然而,有時客人需要更多的記憶體。現在,每個來賓只有很少的 RAM,但有自己的交換空間。我注意到使用了一小部分交換空間。我從來沒有遇到過該配置的問題,但只是出於好奇:

最優的掉期分配策略是什麼?

  1. 從各自的磁碟為每個來賓分配自己的交換空間,並從主機只為來賓分配很少的記憶體。 (這就是我現在正在做的事情。)
  2. 為主機分配較大的交換空間,不為客戶機分配更多交換空間,並為客戶機分配更多記憶體。

記憶體膨脹有助於提高記憶體效能嗎?

答案1

「有時客人需要更多記憶體」聽起來像是一個很好的應用過度使用內存。這個想法是你為每個客人分配大量的記憶體(超過你實際可以分配的記憶體),因為他們通常不使用它。然後,您進行數學計算,以確保有足夠的交換空間,以便來賓實際上可以在最壞的情況下交換到磁碟,在最壞的情況下,它們實際上都在使用所有記憶體。

交換空間繼續主持人機器,它需要服從

主機交換空間 = 所有客戶記憶體的總和 + 建議的主機交換空間

為了確保它的安全。

因此,如果您有 10 個訪客和 2 GiB RAM,您可以嘗試類似的方法

  • 每位訪客 512 MiB RAM(512 * 10 = 總共 5120 MiB)
  • 主機上的 2 GiB 交換

這意味著您的主機交換空間應至少為512 * 10 + 2048 = 7168 MiB 才能安全地處理此問題,假設您可以將2 GiB 的交換空間專用於主機(對於那麼小的主機內存,建議這樣做) 。

始終先測試這些類型的設置,以確保您的機器可以處理它們。對它們進行基準測試就更好了,並且可以讓您嘗試不同的負載並選擇最有效的負載。

答案2

@ndt 有一個很好的程式。我的場景不同,所以我採用不同的方法。

我的伺服器有很多客人,他們都運行一個應用程序,通常是網頁/郵件/文件伺服器。裡面的資料非常重要,所以經常做備份和快照。所以磁碟鏡像越小越簡單越好。所以我實際上不創建交換分區,而是創建交換文件。由於我沒有具有高處理甚至內存需求的客人,因此他們的磁碟存儲和內存都較小。交換文件位於 rootfs 內部。

這種設置節省了大量空間並簡化了維護。正如我所說,這與其他情況不同。

答案3

接受的答案是錯的:

您還應該在虛擬機器上啟用交換空間,以便它知道 RAM 正在交換,並避免將其用於磁碟快取和 IO 緩衝區。

如果您只在主機上啟用交換,虛擬機器將認為它有可用的實際 RAM 並使用它,而它將在主機上交換,從而產生不必要的瓶頸和凍結。這是你可能犯的最大錯誤。

您還應該使用不同的虛擬磁碟機作為交換磁碟,因為您不想將其與其他資料磁碟機一起進行快照/備份。

由於交換空間可能不穩定,因此您也可以使用cache=unsafe 或使用zram/z​​swap 以獲得更好的效能。

還要記住,交換是好的,因為它可以釋放不活動的 RAM,稍後可以將其重新用於磁碟快取和 IO 緩衝區。

相關內容