中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
鲲鹏小智

虚拟机绑核

绑定QEMU进程至物理CPU

在服务器上运行多个虚拟机,每台虚拟机的业务不同,造成不同程度的资源占用,对于存储IO密集型的虚拟机,为了避免相邻的虚拟机的干扰,需要将不同虚拟机处理IO的存储进程完全隔离,由于QEMU主进程是处理前后端的主要服务进程,故需要实现隔离。

虚拟机进行绑核时,建议物理CPU0~CPU3保留,不使用。

  1. 打开虚拟机xml配置文件。
    1
    virsh edit vm1
    

    vm1为虚拟机名称。

  2. 按“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个核之间切换,造成额外开销。
  3. 按“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出现内存带宽瓶颈问题,从而整体提升虚拟机性能。

  1. 在Linux系统中先查询NUMA节点信息以及拓扑结构。
    1
    numactl -H
    

  2. 在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>