虚拟机在绑核时可以按P绑核、按NUMA绑核,但是不同NUMA内的CPU core访问同一个位置的内存性能不同。内存访问延时从高到低为:跨CPU > 跨NUMA不跨CPU > NUMA内,因此在应用程序运行时要尽可能的避免跨NUMA和跨片访问内存。好的NUMA绑核策略可以更好的降低访问时延。
方法一:使用OpenStack配置
1
|
openstack flavor set FLAVOR-NAME --property hw:numa_nodes=1 |
方法二:使用virsh配置(推荐)
1
|
numactl -H
|
若未安装numactl工具,可以执行下面命令安装:
yum install numactl
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> <memmode cellid='0' mode='strict' nodeset='0'/> </numatune> ... <cpu mode='host-passthrough' check='none'> <topology sockets='4' cores='1' threads='1'/> <numa> <cell id='0' cpus='0-3' memory='83886088' unit='KiB'/> </numa> </cpu> ... </domain> |
内存分配优先推荐使用不跨die+strict模式。
如果希望虚拟机有更好的性能,需要配置<numatune>和<cputune>,使vCPU和对应的内存在同一个NUMA节点上。
内存分配模式上,优先选择strict模式。strict模式不允许内存跨NUMA分配,preferred优先从设定NUMA分配,若内存不足,则从其他NUMA分配。