我使用带有 QEMU 的虚拟化来测试不同操作系统和处理器架构上的软件。
客人经常完全阻塞一个主机核心并停止工作,而其他核心处于空闲状态,这让我很恼火。我的假设是这是因为 qemu 不会为来宾中的并行任务启动本机线程。如果这是真的,什么虚拟化软件可以更智能地处理这个问题?我正在寻找一种不需要修改来宾的解决方案(因此 Xen 不是一个选项)。
我在看 KVM,但还没有找到任何明确的答案。我应该说我不确定我是否正确理解了 SMP 支持,这对如何在主机上并行化任务有什么作用吗?
我还没有研究过VMWare。
我对我们的虚拟环境(VMWare)工作方式的理解是这样的:
您可以选择将专用 CPU 分配给任何 VM。分配 2 个专用 CPU 相当于您拥有的物理 2 核盒子。
但是,如果您不这样做,那么您将为每个 VM分配一定数量的处理器份额。因此,如果您将 100 份分配给一台机器,将 200 份分配给另一台机器,那么第二台机器的 CPU 性能会加倍。但实际周期可能由任何主机 cpu 处理。
因此,构建具有单个虚拟 CPU 的机器,并将份额加倍将提高您在 VM 上的速度和功率,而无需为 SMP 配置您的软件。
通常,虚拟化软件允许您设置 VM 可以访问的 CPU 数量,并允许您设置用于所有 CPU 的最小/最大 cpu 使用率。Hyper-V 和虚拟服务器当然是这样,尽管我没有使用 QEMU 的经验。
SMP 支持是指主机向来宾操作系统提供多处理器 VM 的能力。如果您想将更多的主机 CPU 资源分配给来宾,这可能是您需要采取的路线。
您可能想从 vmware阅读此文档CPU 资源管理。
虽然它来自一个古老的 ESX1.5 版本,但较新的版本使用相同的技术,甚至更多。更高版本的文档可在此处获得,但似乎没有被谷歌搜索
您可能还想研究虚拟盒子。
QEMU 的文档不是很清楚;使用“-smp <num of cores>”选项允许您模拟多个 CPU,但尚不清楚这是否是跨多个主机内核的真实 smp,或者有效地绑定到单个内核的“线程”。
VMware 产品确实将负载分散到多个内核上,但要小心处理繁忙的客户机的调度问题,这会影响整体性能。更多信息在这里。