我认为这个问题可以适用于任何虚拟化技术,但我试图了解一些特定于 Microsoft Hyper-V Server 的细节以及如何在物理 CPU 资源之间调度虚拟 CPU 资源。
看起来 Hyper-V Server 会使用时间分片在所有可用的物理 CPU 资源上以循环方式调度每个虚拟机的虚拟 CPU。默认情况下,所有虚拟机的调度都是平等的,但可以调整虚拟机的 CPU 优先级和阈值,以有效更改调度频率。
这里缺少一些我在网上找不到的细节。这更多是出于个人好奇,但它可能会影响我将来如何在物理主机之间平衡虚拟机。
(1) 与空闲虚拟机相比,虚拟机上的 CPU 负载是否会改变其有效优先级?假设我有两个虚拟机,每个虚拟机都有一个虚拟 CPU,争夺一个物理核心。如果虚拟机 1 的 CPU 负载很高,而虚拟机 2 处于空闲状态,那么在给定时间段内单个资源可用的 N 个切片中,这两个虚拟机是否都会收到 ~N/2 个切片?似乎虚拟机 1 收到的切片接近 N 个会更好。
(2) Hyper-V 是否会自动维护任何类型的物理 CPU 亲和性?假设我有一个 VM、两个物理处理器和非统一内存访问(其中每个物理处理器都有自己的本地内存,访问速度更快)。Hyper-V 是否会在两个物理处理器上调度 VM 的虚拟 CPU?似乎如果 VM 的分配内存完全适合一个内存位置,那么在该物理 CPU 上调度 VM 而不是在两个 CPU 上调度 VM 将是最佳选择。
答案1
(1) Hyper-V 将为每个假设的虚拟处理器提供平等的运行机会,因为它们的权重相同。但是,当 VM 2 中的 VP 空闲时,空闲时间将分配给 VM 1 中的 VP。因此,实际上,VM 1 将使用大部分 CPU 容量。
(2) 是的,Hyper-V 维护与每个虚拟处理器相关联的“理想物理处理器”。VP 倾向于在其理想物理处理器上进行调度。此外,如果可能的话,VM 虚拟处理器的理想物理处理器将与分配给 VM 的内存位于同一物理 NUMA 节点中。对于具有多个虚拟处理器的 VM,VP 倾向于具有单独的理想物理处理器,但位于同一物理 NUMA 节点内。
请注意,大于物理 NUMA 节点的虚拟机将跨越多个节点,从而导致不确定性的调度和性能。