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

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

当我第一次看到 VirtManager 中的 UI 时,我以为“最大”是显示给客户机的 RAM 数量,而“当前”是 VM 启动时保留的 RAM。我以为当客户机请求时,VirtManager 会自动保留更多 RAM,直到达到“最大”的大小。

但是当我测试它时,它并没有这样工作。客户机始终将“当前”值视为其总 RAM 大小。那么,为什么会有“最大值”呢?

并且“当前”实际上也没有分配,因为尽管我已经设置了 4092MB,但主机上的任务管理器显示它正在使用 920MB。

在此处输入图片描述

在此处输入图片描述

答案1

最大内存是客户机启动时使用的内存 - 但如果当前记忆上限为较低值。

一些例子:

  • 最大内存 = 当前内存 = 4G:客户机启动时附加了 4G 内存,并且可以使用所有内存(减去模拟平台本身映射/排除的一些 RAM)
  • 最大内存 = 8G,当前内存 = 4G:客户机启动时附加了 8G 内存,但它发现 4G(max-cur)实际上由内核保留(通过 virt-balloon 驱动程序),因此最多只能使用 4G(cur)。

这种预订是为了避免热添加记忆,这比启动更困难更多的记忆和索回/标记为未使用记忆本身的某些部分。

qemu-system-x86_64从任务管理器(或ps或)观察进程时top,您只会看到实际使用的内存由客户机分配(加上模拟器本身所需的一些内存):例如,启动一个基本的 Linux 内核 + 用户空间大约需要 256M,如果客户机内部没有运行任何进程,您将看到模拟器进程本身的内存利用率非常低(即使客户机分配了 4G 的当前/最大内存)。换句话说,Linux 内核分配是一种写时复制操作:它不是一次性完成的,而是基于内核/用户空间的实际需求。

警告:Windows 客户端将所有内存清零在启动时,有效地强制完成主机端内存分配(最多当前记忆) 在客户机启动时。

相关内容