HACK#31 更改虚拟CPU分配方法,提高性能
本节介绍虚拟环境下的虚拟CPU分配方法的技巧。
虚拟化环境下客户端操作系统的各虚拟CPU可以各自独立地分配物理CPU。例如,可以将客户端操作系统A的虚拟CPU1分配(pin指定)给主机操作系统的物理CPU3。当各虚拟CPU这样占用物理CPU时,人们容易认为物理CPU的资源相互完全分离。但是,在现代的多核CPU中,各物理CPU资源多数未完全分离,如果不能正确选择分配给虚拟CPU的物理CPU,就有可能导致性能大幅降低。本节将介绍应当使用怎样的分配方法。
首先,有的多核CPU是在核之间共享L2缓存或L3缓存的。例如,Intel®Core TM 2 Quad CPU Q6700中有4个核,其中两个核共享1个L2缓存(见图5-5)。
在将某个虚拟机的两个虚拟CPU分别分配给不共享L2缓存的核时,一旦加大内存负载就有可能造成CPU性能降低(见图5-6)。
使用virt-manager的物理CPU分配方法
virt-manager可以如图5-7所示,通过CPU pinning菜单将虚拟机的虚拟CPU固定分配给物理CPU。这里显示的CPU编号为Linux内核所识别的CPU编号,而不是用来标识核的位置。要找出共享缓存的CPU,可以参照/sys/devices/system/cpu/cpuN/cache/indexM/shared_cpu_list[1]。
图 5-5 Q6700
图 5-6 导致性能降低的分配方法
在这个环境下,可以得知CPU0和CPU2,CPU1和CPU3共享缓存。
cat/sys/devices/system/cpu/cpu0/cache/index2/shared_cpu_list 0,2
cat/sys/devices/system/cpu/cpu1/cache/index2/shared_cpu_list 1,3
图 5-7 在CPU pinning菜单上设置物理CPU的固定分配
[1]N、M代表数字。