Kvm-Virtualization

了解 VirtManager (LibVirt) 的目前/最大分配

  • November 12, 2022

當我第一次在 VirtManager 中看到 UI 時,我認為“Maximum”是顯示給來賓的 RAM 數量,“Current”是 VM 啟動時保留的 RAM。我認為當客人請求達到“最大”大小時,VirtManager 會自動保留更多 RAM。

但是當我測試它時,它並沒有那樣工作。來賓始終將“目前”值視為其總 RAM 大小。那麼,為什麼會有“最大值”呢?

並且“目前”實際上也沒有分配,因為即使我設置了 4092MB,主機上的任務管理器顯示它正在使用 920MB。

在此處輸入圖像描述

在此處輸入圖像描述

最大記憶體是啟動來賓的記憶體 - 但如果目前記憶體被限制在較低的值,它就無法使用所有記憶體。

一些例子:

  • 最大記憶體 = 目前記憶體 = 4G:來賓啟動時連接了 4G,並且可以使用所有記憶體(減去一些由模擬平臺本身映射/排除的 RAM)
  • 最大記憶體= 8G,目前記憶體= 4G:guest在啟動時附加了8G,但發現4G(max-cur)實際上是核心保留的(通過virt-balloon驅動程序),所以它只能使用4G( cur) 最多。

這種保留是為了避免熱添加記憶體,這比使用更多記憶體啟動並聲明/標記為不使用記憶體本身的某些部分更困難。

從任務管理器(或)觀察您的qemu-system-x86_64程序時,您只能看到來賓實際使用的記憶體(加上模擬器本身所需的一些記憶體):例如,啟動基本的 linux 核心 + 使用者空間可以用 ~256M 完成,並且,如果來賓內部沒有程序正在執行,您將看到模擬器程序本身的記憶體使用率如此之低(即使來賓分配了 4G 的目前/最大記憶體)。換句話說,linux核心分配是一種寫時複製的事情:它不是一次性完成的,而是根據核心/使用者空間的實際需求進行的。ps``top

警告:Windows 客戶機在啟動時將所有記憶體歸零,從而在客戶機啟動時有效地強制進行完整的主機端記憶體分配(直到目前記憶體)。

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