当使用 VirtIO 内存膨胀时,为什么 pfSense 会给出错误的内存使用情况?

当使用 VirtIO 内存膨胀时,为什么 pfSense 会给出错误的内存使用情况?

我正在将 pfSense 作为 KVM/libvirt 客户端运行。当我将两者配置memorycurrentMemory2048 MB 时,pfSense 仪表板显示 ~2GB 的 RAM 和 18% 的利用率。如果我将其设置memory为 2048 MB 和currentMemory4096 MB(以利用内存膨胀),pfSense 仪表板显示 ~4GB 的 RAM 和 62% 的利用率。这完全没有道理,pfSense 实际上会使用这么多内存,所以它一定是不正确的。这是一个已知的错误吗?有什么解决方法吗?

答案1

听起来就像“记忆膨胀”是如何发生的主机实际上无法从正在运行的系统中拿走内存,因此客户机的气球驱动程序消耗客户机希望返回给主机的 RAM 数量。换句话说,气球向内膨胀,而不是向外膨胀。

例如,在你的例子中,VM 实际上总是拥有 4096 MB 内存,但其他virtio_balloon 驱动程序(或其 FreeBSD 等效驱动程序)会自动使用 2048 MB,从而让主机知道它还不需要分配那么多物理 RAM。结果是,您会看到“4096 MB 中的 x+2048”,而不是“2048 MB 中的 x”。

(在 Linux 上,当虚拟机需要更多内存时,它会使用压力通知要求气球驱动程序放弃一些保留的内存,它在要求主机实际分配内存后执行此操作。)

因此,报告内存使用情况的客户工具必须了解气球驱动程序(例如,通过查看sysctl dev.vtballoon.0.currentpfSense 的 www/system_advanced_misc.inc 文件)——如果它们不了解,那么它们将始终将额外的内存视为“已使用”。从搜索各种论坛来看,这似乎是 pfSense 和 OPNsense 仪表板无法正确执行此操作的一个非常常见的问题。(BSD 上似乎也几乎完全缺乏此驱动程序的文档。)

相关内容