在一家小型软件开发公司,我们虚拟化了构建服务器(使用 VirtualBox),以便轻松备份、快照等。我们最近购买了一台使用 AMD Epyc 7351P 的新服务器,它有 16 个内核(超线程时为 32 个内核)。我们发现,为任何给定的 VM 分配超过 4 个 CPU 内核绝对会降低性能:我的假设是,这是因为 Epyc 实际上是一个 NUMA 4x4core 架构,因此如果您使用超过 4 个物理内核,客户机就会开始消耗内存。
有没有办法让 VirtualBox 向客户机公开 NUMA 配置?如果没有,在这种情况下还有哪些其他虚拟化解决方案可以工作?理想情况下,我希望能够使用所有物理核心启动虚拟机,而不会产生太多的性能损失 - 您预计在虚拟化时会损失一些性能,但是此服务器上的 20 核 Virtualbox 虚拟机的运行速度约为 4 核虚拟机的 10%,这太荒谬了。
答案1
不要超额订购 CPU。也就是说,默认情况下,分配的客户 CPU 总数不要超过物理核心数。性能会下降,有时会下降一点,但有时会下降很严重。
NUMA 效应可能是一个问题。检查客户机中的 NUMA 拓扑,并与不同的虚拟机管理程序进行比较。在 Linux 上,numastat
显示每个节点的内存命中率,以及 RHEL 性能调优指南等一般文档仍然是很好的参考。
关于虚拟机管理程序的选择,我认为 VirtualBox 不支持调整客户机 NUMA。尝试一些其他 x86 虚拟化选择,包括裸机、KVM、VMware ESXi 和 Hyper-V。虽然它们都适用于服务器,但它们具有不同的功能集和操作流程。