虚拟化:vCPU 与超线程主机 CPU 固定?

虚拟化:vCPU 与超线程主机 CPU 固定?

我在具有 Core i7-2600 CPU 的 Linux 服务器上使用 KVM/libvirt,该服务器具有以下 CPU 拓扑(1 个插槽,4 个核心,8 个线程):

Physical | Logical
---------+--------
Core 0   | 0, 4
Core 1   | 1, 5
Core 2   | 2, 6
Core 3   | 3, 7

我通常在此主机上运行 3 台虚拟机,每台虚拟机有 2 个虚拟 CPU。为了通过保持缓存热度来提高性能,我想将虚拟机的 vCore 固定到固定主机核心。

现在的问题是虚拟机核心到主机核心的映射,考虑到主机 CPU 使用超线程:

选项 1:每个物理主机核心一个虚拟机

VM1: logical cores 1, 5
VM2: logical cores 2, 6
VM3: logical cores 3, 7

这样,虚拟机的两个虚拟核心将映射到主机 CPU 上的同级超线程。由于两个主机核心共享一些缓存,因此客户代码将受益于缓存局部性。

但考虑到两个超线程也共享一些功能单元,它们会在计算负载下相互减慢速度。

选项 2:分布式 VM 核心

VM1: logical cores 1, 2
VM2: logical cores 3, 5
VM3: logical cores 6, 7

这种映射的优点是,如果虚拟机在其两个虚拟核心上都经历了计算负载,则该负载将映射到主机上的两个单独的物理核心上。如果当时没有其他虚拟机处于负载状态,则前者可以使用两个物理核心,而不是像选项 1 那样只使用一个。

所有虚拟机主要运行 Web 服务(Nginx、MySQL、PHP-FPM),所以我知道这个问题属于理论性问题 - 但我仍然想知道。

答案1

你可能想太多了。

此处手动分配核心实际上可能会导致性能降低。在 VMware 世界中,除非有非常具体的要求,否则我们不会这样做,但对于您描述的工作负载和应用程序,这不是必要的。让 KVM 安排事情并完成。如果有疑问,请获得更多核心和插槽。但在如此小的部署中,CPU 不会成为限制因素。

答案2

在大多数情况下,选项 1 不会减慢速度,但操作系统和程序可能会因为负载过大而变得不堪重负。它可能会堆积起来。我认为,如果你的邻居不介意~微小~的减速,选项 2 会更好。

相关内容