KVM:VM(“host”与“kvm64”)的哪个 CPU 用于网络加载?

KVM:VM(“host”与“kvm64”)的哪个 CPU 用于网络加载?

使用 Proxmox 5.0 作为虚拟机管理程序平台并设置 KVM VM 来为网站提供服务,我真的想知道我是否应该使用 kvm64“虚拟”CPU 或尝试使用主机。具体来说,我有一个 4 核 CPU,它能够进行超线程处理,从而导致在 KVM 中使用 8 个内核(或者也许我应该禁用超线程以最终为每个内核获得更多功率?)并且我会将服务器的大部分功率用于我的网站。

两者背后的想法都很好:

  • 如果我使用“主机”类型的 CPU,我将获得 CPU 的所有硬件能力,而且看起来我将获得大部分能力。唯一的问题是我应该设置多少个内核供 VM 使用?如果我设置 8 个,那么 KVM 本身将使用哪些内核,如果我设置为 7 个(因此只有一个内核将由 KVM 本身使用),那么我的功率将减少 1/8。对吗?

如果我将 CPU 类型设置为“kvm64”,那么我可以为 VM 分配更多 CPU 核心(这些核心是虚拟的,因此我可以轻松分配 64 个甚至 128 个这样的核心),因此物理 CPU 可以“分割”成许多较小的 CPU,这可能对 Web 类型的负载有用。我的假设正确吗?

您建议我选择什么?

答案1

Proxmox 维基解决了选择哪种 CPU 类型的问题,部分内容:

Qemu 可以模拟多种不同类型的 CPU,从 486 到最新的 Xeon 处理器。每一代新处理器都会添加新功能,如硬件辅助 3D 渲染、随机数生成、内存保护等……通常,您应该为虚拟机选择与主机系统 CPU 紧密匹配的处理器类型,因为这意味着主机 CPU 功能(也称为 CPU 标志)将在您的虚拟机中可用。如果您想要完全匹配,您可以将 CPU 类型设置为主机,在这种情况下,虚拟机将具有与主机系统完全相同的 CPU 标志。

但这也有缺点。如果您想在不同主机之间实时迁移虚拟机,您的虚拟机最终可能会进入具有不同 CPU 类型的新系统。如果传递给客户机的 CPU 标志丢失,qemu 进程将停止。为了解决这个问题,Qemu 也有自己的 CPU 类型 kvm64,Proxmox VE 默认使用它。kvm64 是一种类似于 Pentium 4 的 CPU 类型,它设置了较少的 CPU 标志,但保证在任何地方都能正常工作。

简而言之,如果您关心实时迁移和在节点之间移动虚拟机,请保留 kvm64 默认值。如果您不关心实时迁移或拥有所有节点都具有相同 CPU 的同构集群,请将 CPU 类型设置为主机,因为理论上这将为您的客户机提供最大性能。

然而,他们没有提到的一件事是:如果你的服务器都有不同的 CPU,你使用比 kvm64 更强大的虚拟 CPU 代,并且仍可进行实时迁移。您只需确保所选的虚拟 CPU 类型是所有服务器中所有物理 CPU 中最老的(例如,如果您最老的 CPU 是 Xeon E5630,则可以使用 Westmere)。这样,您就可以拥有一个混合 CPU 的服务器场,并且仍可进行实时迁移。

同一 wiki 还讨论了使用多少个虚拟 CPU 核心:

如果所有虚拟机的总核心数大于服务器上的核心数(例如,在只有 8 个核心的机器上,有 4 个虚拟机,每个虚拟机有 4 个核心),则完全安全。在这种情况下,主机系统将平衡服务器核心之间的 Qemu 执行线程,就像运行标准多线程应用程序一样。但是,Proxmox VE 将阻止您分配比物理可用内核更多的虚拟 CPU 内核,因为这只会因上下文切换的成本而降低性能。

(这意味着任何单个虚拟机都不允许拥有比物理 CPU 核心更多的虚拟 CPU 核心。但是,几台虚拟机加在一起的虚拟 CPU 核心总数可能比物理 CPU 核心更多。)

请记住,Web 服务器负载通常不受 CPU 限制,因此您可能无论如何都会有大量空闲 CPU。

答案2

为了获得最佳性能,主机是最佳选择,因为如果 CPU 具有 VT-x 标志,它将直接在虚拟机中使用。无需在 CPU 上模拟任何内容,并且模拟会产生开销。

当然,这意味着如果您将虚拟机切换到具有不同规格 CPU 的其他主机,您可能会遇到问题。但是,通常问题主要与性能有关,例如,如果新主机的时钟速度较低、缓存较低或加速指令较少,则虚拟机不太可能无法启动。但如果确实失败了,您可能可以在迁移后更改 CPU 类型以获得成功启动。

kvm64 选项让您高枕无忧,您永远不会遇到 CPU 方面的迁移问题,但性能不会那么好。

相关内容