虚拟机绑核
绑定QEMU进程至物理CPU
在服务器上运行多个虚拟机,每台虚拟机的业务不同,造成不同程度的资源占用,对于存储IO密集型的虚拟机,为了避免相邻的虚拟机的干扰,需要将不同虚拟机处理IO的存储进程完全隔离,由于QEMU主进程是处理前后端的主要服务进程,故需要实现隔离。
虚拟机进行绑核时,建议物理CPU0~CPU3保留,不使用。
- 打开虚拟机xml配置文件。
1
virsh edit vm1
vm1为虚拟机名称。
- 按“i”进入编辑模式,在xml中进行如下配置:
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>
- emulatorpin cpuset='4-7':表示将QEMU主线程绑定到4至7物理CPU上。
- vcpu placement = 'static' cpuset='4-7':用于IO线程、worker threads线程仅能使用4-7这4个核,若不配置此参数,虚拟机任务线程会在CPU任意core上浮动,会存在更多的跨NUMA和跨DIE损耗。
- vcpupin用于限制对CPU线程做一对一绑核。若不使用vcpupin绑CPU线程,则线程会在4-7这个4个核之间切换,造成额外开销。
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
跨CPU Cluster绑核
鲲鹏920系列处理器包含2个Super CPU Cluster(简称SCCL),每个SCCL包含6~8个CPU Cluster,每个CPU Cluster包含4个CPU Core。在KVM虚拟机环境下对KVM进行CPU绑核时,建议尽量分布到多个CPU Cluster中,可以减少同一个CPU Cluster内多个Core竞争导致L3 Cache出现内存带宽瓶颈问题,从而整体提升虚拟机性能。
- 在Linux系统中先查询NUMA节点信息以及拓扑结构。
1
numactl -H
- 在Linux系统中编辑虚拟机xml配置文件,设置CPU绑核尽量分布到多个CPU Cluster上,配置举例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
<domain type = 'KVM'> ... <vcpu placement = 'static' cpuset='4,5,8,9,12,16,22,23'>8</vcpu> <cputune> <vcpupin vcpu='0' cpuset='4'/> <vcpupin vcpu='1' cpuset='5'/> <vcpupin vcpu='2' cpuset='8'/> <vcpupin vcpu='3' cpuset='9'/> <vcpupin vcpu='4' cpuset='12'/> <vcpupin vcpu='5' cpuset='16'/> <vcpupin vcpu='6' cpuset='22'/> <vcpupin vcpu='7' cpuset='23'/> </cputune> ... </domain>
父主题: 虚拟化调优