CPU 1:1绑核,内存访问同die
在进行绑核操作时,可以选择按CPU绑核或按NUMA绑核,但是需要注意避免虚拟机内存访问跨die和跨片,建议不要跨die和跨片。默认情况下,不同虚拟机的vCPU可能运行在相同物理CPU核上,会造成CPU资源竞争,也会导致VMID频繁切换造成L1 TLB频繁flush,从而推高TLB miss rate,最终造成虚拟机性能下降。
- 在Linux系统中先查询NUMA节点信息。
1
numactl -H
- 在Linux系统中编辑虚拟机xml配置文件,在同die(同NUMA)下进行1:1绑核,配置举例如下:
1 2 3 4 5 6 7 8 9 10 11 12
<domain type = 'KVM'> ... <vcpu placement = 'static' cpuset='4-7'>4</vcpu> <cputune> <vcpupin vcpu='0' cpuset='4'/> <vcpupin vcpu='1' cpuset='5'/> <vcpupin vcpu='2' cpuset='6'/> <vcpupin vcpu='3' cpuset='7'/> <emulatorpin cpuset='4-7'/> </cputune> ... </domain>
- 虚拟机配置使用1个NUMA通道,绑定到NUMA 0。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
<domain type = 'KVM'> ... <vcpu placement = 'static' cpuset='4-7'>4</vcpu> <cputune> <vcpupin vcpu='0' cpuset='4'/> <vcpupin vcpu='1' cpuset='5'/> <vcpupin vcpu='2' cpuset='6'/> <vcpupin vcpu='3' cpuset='7'/> <emulatorpin cpuset='4-7'/> </cputune> ... <numatune> <memory mode='strict' nodeset='0'/> </numatune> ... <cpu mode='host-passthrough' check='none'> <topology sockets='1' cores='4' threads='1'/> <numa> <cell id='0' cpus='0-3' memory='8388608' unit='KiB'/> </numa> </cpu> ... </domain>
- strict模式不允许内存跨numa分配,preferred优先从设定numa分配,若内存不足,则从其他numa分配。POC测试和比拼测试推荐使用strict,性能提升约5%。
- <numa>项提供虚拟机内部呈现NUMA拓扑功能,cpus指vCPU编号,memory指对应vnode上的内存大小。
- 如果希望虚拟机有更好的性能,则需要配置<numatune>和<cputune>,是vCPU和对应的内存在同一个物理NUMA节点上(同NUMA)。
- <numatune>中的cellid和<numa>中的cell id是对应的。mode可以配置为“strict”(严格从指定node上申请内存,内存不够则失败)、“preferred”(优先从某一node上申请内存,如果不够则从其他node上申请)、“interleave”(从指定的node上交叉申请内存),nodeset表示指定物理NUMA节点。
父主题: 虚拟化调优