我在具有Corei7-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。为了通过保持高速缓存来提高性能,我想将VM的vCores连接到固定的主机核上。
现在的问题是VM核到主机核的映射,考虑到主机CPU使用超线程的事实:
一个VM
VM1: logical cores 1, 5
VM2: logical cores 2, 6
VM3: logical cores 3, 7
这样,VM的两个虚拟核将映射到主机CPU上的同级超线程。客户端代码将受益于缓存局部性,因为两个主机核心共享一些缓存。
但是,考虑到两个超级线程也共享一些功能单元,它们在计算负载下会彼此减速。
VM1: logical cores 1, 2
VM2: logical cores 3, 5
VM3: logical cores 6, 7
这种映射的优点是,如果一个VM在其两个虚拟核上都经历了计算负载,则该负载将映射到主机上的两个独立的物理核上。如果此时没有其他VM处于加载状态,那么前者可以使用两个物理内核,而不是只有一个有选项1的内核。
VM都主要运行web服务(Nginx、MySQL、PHP),所以我知道这个问题是理论性质的--但我还是想知道。
发布于 2015-06-14 13:32:01
你可能想得太多了。
在这里手工分配核心实际上可能会导致性能降低。在VMware世界中,除非有非常具体的需求,否则我们不会这样做,但是对于您所描述的工作负载和应用程序来说,这是不必要的。让KVM安排一些事情并完成。如果有疑问的话,买更多的核心和插座。但是在如此小的部署中,CPU并不是限制因素。
发布于 2015-06-14 13:22:21
在大多数情况下,选项1不应该放慢速度,但是操作系统和程序可能会触发--对它们的工作负载很满意。可能会堆起来。我认为如果你的邻居不介意这种微小的减速,第二种选择会更好。
https://serverfault.com/questions/698888
复制相似问题