VM 記憶體分配建議 一般/Hyper-V

VM 記憶體分配建議 一般/Hyper-V

我有一個關於虛擬機器設定的基本問題。我正在使用 Hyper-V,但我認為這個問題非常普遍。這是針對家庭辦公室的,我希望在不進行大量工作的情況下在虛擬機器上獲得相當好的效能。我使用虛擬機器來測試/調試我的軟體。理想情況下,我會啟動所有作業系統,但一次只有一個(大多數時候可能為零)會被積極使用。

是否有一些針對虛擬機器記憶體分配的通用準則?在一種極端情況下,您可以將總記憶體除以虛擬機器數量(總共 4 GB,4 個虛擬機器 -> 每個虛擬機器 1 GB)。在極端的另一端,您可以為每個虛擬機器提供完整記憶體並讓作業系統進行仲裁。我想兩者都錯了!我正在尋找合理性能的“經驗法則”。我不知道虛擬機器伺服器如何管理虛擬機器的記憶體。

[編輯] 我問這個問題是因為我錯誤地認為 Hyper-V(2008 R2 版本)可以動態地為虛擬機器提供額外的記憶體(如果有額外的可用記憶體)。我的想法是,只要我的使用一次只達到一台虛擬機器的峰值,我就可以過度分配記憶體。由於 Hyper-V 希望在啟動時為每個虛擬機分配固定內存,因此我需要關閉一些虛擬機並僅運行我需要的虛擬機,或者將虛擬機設置為較低的內存分配並確保物理內存可用足夠所有分配加上Hyper-V 進程和(可能)主機作業系統。

聽起來 VMWare 在這方面有更多選擇,如所提供的答案所述。 [/編輯]

謝謝,布雷特

答案1

作為一般規則,您想知道在最壞的情況下,實體 RAM 足以讓所有標準功能從 RAM 可靠運行。這個神奇數字的含義因作業系統而異,並且根據客戶作業系統的用途而有很大差異。您可以愉快地啟動具有數百兆 RAM 的 Windows 2003 Server、一些具有 30Meg 或更少內存的 Linux 緊湊發行版等等,但如果您想在具有數 GB 資料庫的來賓中運行 SQL Server,那麼您將想要確保它確實有真正的RAM 來支援它認為擁有的幾Gg RAM。

虛擬機器管理程式處理 RAM 的方式因供應商和產品而異。 Hyper-V 不支援所謂的記憶體過度使用,因此您只能根據實體可用記憶體來分配 RAM。 VMware 的 ESX 允許過度提交,設定爭用仲裁(共享)規則,以便控制當虛擬機器繁忙且實體 RAM 總量不足以滿足負載時會發生什麼情況。在 Hyper-V 環境中,您沒有這種等級的控制權,因此您必須預先分配足夠的 RAM。

VMware 還有一些其他技巧可以幫助解決記憶體過度使用問題;透明頁面共享和記憶體膨脹。

透明頁面共享基本上是RAM 的單實例存儲- 虛擬機管理程序監視分配給每個VM 的RAM 塊,如果它發現多個VM 中存在公共塊,它只保留一個副本並將所有VM 指向該副本-如果隨後有任何VM嘗試寫入該區塊時,它會分離出一個副本,這樣就不會發生不好的事情。在同構 VM 環境中,這可以節省大量 RAM,而不影響效能。

記憶體氣球是一種機制,允許虛擬機管理程式「借用」分配給一個虛擬機的RAM,並透過使用前者中的來賓作業系統驅動程式(在該來賓中分配一大塊記憶體)將其提供給更重要的虛擬機器。一旦分配完畢,虛擬機器管理程式就可以安全地重新分配實體 RAM,以支援氣球驅動程式分配給它的記憶體。與虛擬機器管理程式只是將來賓虛擬機的記憶體交換到磁碟以重新分配 RAM 的直接方法相比,這樣做的優點是,正在丟失實體 RAM 的來賓知道該記憶體正在被某些東西使用,並且存在顯著降低了「借用」RAM 被分配給來賓中任何重要係統功能的風險。

編輯新增: 我從來沒有嘗試過當你嘗試啟動虛擬機時,Hyper-V 會發生什麼,這將使內存要求超出可用的物理 RAM 量,我能找到的所有文檔都表明虛擬機獲得了你擁有的所有 RAM為它們進行配置,然後管理程式和主機作業系統會分配剩餘的內容。 Hyper-V 沒有任何機制將 RAM 的最小保留應用於 VM,然後從池中分配剩餘部分,儘管它確實為 CPU 資源提供了這樣的機制。 VMware 的 ESX\ESXi 確實提供了這個選項。

值得記住的是,您還需要規劃虛擬機器管理程式和主機作業系統所需的實體記憶體(如果您執行的是裸機 Hyper-V 伺服器,請忽略後者)。微軟的Hyper-V 的效能調整建議聲明除了 VM 中的 XGig RAM 之外,您還需要:

  • 300 MB 用於虛擬機器管理程式
  • 再加上分配給每個虛擬機器的第一個 GB RAM 32 MB
  • 為每個虛擬機器分配每額外 GB 的 RAM,再加上 8 MB
  • 加上 512 MB 用於在根分割區上執行的主機作業系統

如果您沒有足夠的實體 RAM 來滿足這些需求,那麼效能將受到嚴重影響,穩定性也可能受到影響。

答案2

Windows Server 2008 R2 中的 Hyper-V支援動態記憶體功能(我正在運行 SP1 - 不確定它是否在 RTM 版本中)。我意識到你的問題很老了,所以當你問的時候可能還沒有。

我開始為每個來賓虛擬機分配靜態內存,但很快就耗盡了我的伺服器。動態記憶體可讓您為每個虛擬機器分配初始(可能較低)數量和最大數量。然後它將按需分配記憶體並回收未使用的記憶體。您必須編輯每個虛擬機器的設定才能進行此設定 - 建立新虛擬機器時它不可用。我剛剛重新配置了一堆虛擬機以使用動態內存,並將我的總體內存佔用減少了近一半。

顯示分配記憶體的 Hyper-V 管理員螢幕截圖

我為動態記憶體配置的虛擬機器顯示目前的記憶體需求和狀態。突出顯示的虛擬機器仍在其 1 GB 的初始分配內運作。 Exchange 伺服器(從上往下數第二個)是一頭大肥豬,已經耗盡了最初的 1GB 空間,並被分配了更多空間。此功能允許配置緩衝區(預設為 20%),因此 Hyper-V 為 Exchange 提供了其所需的數量以及一些額外的數量。

答案3

這不是一個普遍的問題,因為 Hyper-V 無法像 VMWare 那樣進行記憶體頁面共享,該技術可以極大地改變 VM 記憶體分配的方式。如果 Hyper-V 支持,我建議您為 VM 分配初始數量,然後查看每個 VM 隨著時間的推移的實際使用情況,當您發現更多有關其行為的信息時更改分配。

相關內容