我读过这个问题。例如,我已经知道我可以拥有一台四核机器,其中有四个来宾,每个来宾都有两个 vCPU。因为它们并不总是需要 100% 的 CPU 使用率,所以调度程序会为我处理这个问题。
我的问题是这与故障转移或迁移情况有何关系?
如果 host1 有两个双核 CPU,我为 guest1 分配了四个 vCPU(因此它访问了所有四个物理内核),如果我尝试将它迁移到只有一个双核 CPU 的 host2 会发生什么?
qemu-kvm 可以模拟比物理更多的 vCPU 吗?或者我是否必须关闭虚拟机、更改 CPU 分配、迁移它,然后重新启动它(所以没有实时迁移)?
非常感谢。
是的,您可以配置和运行比可用物理内核更多的虚拟 CPU。这是一个空闲的 Windows Server 2008(x86,德语)KVM 来宾,在 4 核单 CPU Intel X3210 机器上显示 10 个 CPU:
但是只有当您知道自己在做什么时才应该这样做:
一方面,这将伴随着计时/同步更多虚拟 CPU 的开销,而没有额外的执行单元来运行负载。更重要的开销是,只要计划立即执行的线程数高于可用的物理 CPU 数,您的主机将不得不比必要更频繁地执行上下文切换。来宾操作系统的线程调度程序会与管理程序的调度程序发生冲突,从而导致性能严重下降。
因此,如果您已将 VM 迁移到 pCPU 数量较少的主机,则应使多个 vCPU 脱机以匹配可用 pCPU 的数量。至少在 Linux 中,它可以在不通过切换重新启动的情况下完成
/sys/devices/system/cpu/cpu<X>/online
。减少正在运行的系统上 CPU 数量的另一种理论上的方法是使用 CPU 热插拔,但操作系统对此功能的支持相当稀少,而且 KVM 也不允许在线重新配置 CPU 数量。
检查我最后的评论,如果发生迁移或 vcpu 分配不足会发生什么。我解释了 KVM 和虚拟到物理 CPU 映射