Damn Vegetables Asked: 2022-11-12 23:31:39 +0800 CST2022-11-12 23:31:39 +0800 CST 2022-11-12 23:31:39 +0800 CST 了解 VirtManager (LibVirt) 的当前/最大分配 772 当我第一次看到 VirtManager 中的 UI 时,我以为“Maximum”是显示给 guest 的 ram 数量,“Current”是 VM 启动时保留的 RAM。我认为 VirtManager 会在来宾请求达到“最大”大小时自动保留更多 RAM。 但是当我测试它时,它并没有那样工作。来宾始终将“当前”值视为其总 RAM 大小。那么,为什么会有“最大”呢? 而且“当前”实际上也没有分配,因为即使我设置了 4092MB,主机上的任务管理器也显示它正在使用 920MB。 kvm-virtualization 1 个回答 Voted Best Answer shodanshok 2022-11-13T09:19:35+08:002022-11-13T09:19:35+08:00 最大内存是来宾启动的内存 - 但如果当前内存上限为较低值,则它不能使用所有内存。 一些例子: 最大内存 = 当前内存 = 4G:来宾系统以 4G 连接启动,并且可以使用所有内存(减去一些由模拟平台本身映射/排除的 RAM) maximum memory = 8G,current memory = 4G: guest 以 8G 启动,但它发现 4G (max-cur) 实际上是内核保留的(通过 virt-balloon 驱动程序),所以它只能使用 4G (当前)至多。 这种预留是为了避免热添加内存,这比使用更多内存启动并声明/标记为不使用内存本身的某些部分更困难。 从任务管理器(或或)观察您的qemu-system-x86_64进程时,您只能看到来宾实际使用的内存(加上模拟器本身所需的一些内存):例如,启动基本的 linux 内核 + 用户空间可以用 ~256M 完成,并且,如果来宾内部没有运行任何进程,您将看到模拟器进程本身的内存利用率如此低(即使来宾分配了 4G 当前/最大内存)。换句话说,linux 内核分配是写时复制的事情:它不是一次性完成的,而是根据内核/用户空间的实际需求完成的。pstop 警告:Windows 来宾在启动时将所有内存归零,有效地在来宾启动时强制执行完整的主机端内存分配(直到当前内存)。
最大内存是来宾启动的内存 - 但如果当前内存上限为较低值,则它不能使用所有内存。
一些例子:
这种预留是为了避免热添加内存,这比使用更多内存启动并声明/标记为不使用内存本身的某些部分更困难。
从任务管理器(或或)观察您的
qemu-system-x86_64
进程时,您只能看到来宾实际使用的内存(加上模拟器本身所需的一些内存):例如,启动基本的 linux 内核 + 用户空间可以用 ~256M 完成,并且,如果来宾内部没有运行任何进程,您将看到模拟器进程本身的内存利用率如此低(即使来宾分配了 4G 当前/最大内存)。换句话说,linux 内核分配是写时复制的事情:它不是一次性完成的,而是根据内核/用户空间的实际需求完成的。ps
top
警告:Windows 来宾在启动时将所有内存归零,有效地在来宾启动时强制执行完整的主机端内存分配(直到当前内存)。