我在 VirtualBox VM 上安装了 Lubuntu 22.04 LTS(客户机)。VirtualBox 在 Ubuntu 20.04 LTS(主机)机器上运行。
最初,我为虚拟机分配了 2 个(虚拟)CPU 核心。我注意到,VMM load
尽管客户机处于空闲状态,但始终处于高位。会话信息窗口显示guest load
和之间存在巨大差异VMM load
。虽然guest load
约为 0%,但VMM load
介于 50-90% 之间。然后我切换了分配的核心数量。有趣的是,只有当我为虚拟机分配 2 个(虚拟)核心或更多时,才会出现这种差异,如下图所示。
我对此有几个问题:
- 到底是什么
VMM load
? guest load
和有什么区别VMM load
?guest load
为什么和VMM load
(2核或以上)有如此大的差异?- 在评估客户系统的 CPU 负载(即系统是否在极限下工作)时,这两个变量中的哪一个是决定性的?
我找不到满意的答案。我也不知道我的虚拟机是否存在资源/性能问题。尽管表明guest load
没有性能问题,但这些VMM load
值似乎令人担忧。使用的 RAM 始终在 385 MB 左右(分配给虚拟机的内存共计 2 GB)。
我尝试过的 VirtualBox 版本(及其各自的 Guest Additions):6.1.38、6.1.40 和 7.0.0。全部存在相同问题。
我的 CPU:Intel Xeon E3-1231 v3 @ 3.40 GHz(4 个物理核心,8 个线程)。
编辑: 在进行一些 CPU 压力测试时,我发现了一个有趣的现象:
- 1 个分配的虚拟核心:在 CPU 压力测试期间
guest load
增加但仍保持在~0%。VMM load
- 2 个分配的虚拟核心:在 CPU 压力测试期间
guest load
增加,否则减少。VMM load
总之,每次客户系统需要处理能力来处理用户/系统任务时, 就会VMM load
停机或保持停机状态。这可能意味着无论 代表什么VMM load
,它都不会(或几乎不会)影响用户/系统所需的处理能力。
此外,我观察到,即使(在分配了 2 个或更多虚拟核心的情况下)很高VMM load
,主机系统上的 CPU 负载仍然很低。只有当guest load
增加时,主机系统上的 CPU 负载才会增加。因此,VMM load
表示不消耗或几乎不消耗 CPU 功率的东西。
剩下的唯一问题是,为什么VMM load
分配 2 个虚拟核心后会出现高值。可能是核心之间有协调过程?
答案1
我在帖子中找到了开发人员的一些解释 VirtualBox 与 Hyper-V AMD/Intel 性能差异巨大 - 第 2 页:
VirtualBox 使用三个纳秒计数器来计算实时时间,它们分别称为 执行,停止和其它。前两个计数器分别总结了客户操作系统执行和暂停的时间。第三个计数器总结了 VirtualBox 本身正在执行“其他操作”或 VirtualBox 完全不活动(并且客户操作系统未处于暂停状态)的时间。这个“其他操作”很难掌握,因为它隐藏在大多数 VirtualBox 代码中。
在性能监视器中,客人负荷表示增量 执行,以及VMM 负载表示增量其它。由于客户操作系统和主机操作系统的 CPU 负载似乎都没有反映这一点VMM 负载,我不认为这个问题对于 VirtualBox 开发具有高优先级。
然后,VMM 负载被解释为 VirtualBox 正在执行“其他操作”或根本不活动时的一个模糊计数器。据说它与客户机和主机中的 CPU 负载没有任何关系,开发人员认为它并不重要。
我最多能说的是,如果开发人员不认为这很重要,你也应该这样做。