绑定qemu进程至物理CPU

概述

qemu主进程绑定特性是将qemu主进程绑定到特定的物理CPU范围内,从而保证了运行不同业务的虚拟机不会干扰到邻位虚拟机。例如在一个典型的云计算场景中,一台物理机上会运行多台虚拟机,而每台虚拟机的业务不同,造成了不同程度的资源占用,为了避免存储IO密集的虚拟机对邻位虚拟机的干扰,需要将不同虚拟机处理IO的存储进程完全隔离,由于qemu主进程是处理前后端的主要服务进程,故需要实现隔离。

操作步骤

通过virsh emulatorpin命令可以绑定qemu主进程到物理CPU。

  • 查看qemu进程当前绑定的物理CPU范围:

    1. # virsh emulatorpin openEulerVM
    2. emulator: CPU Affinity
    3. ----------------------------------
    4. *: 0-63

    这说明虚拟机openEulerVM对应的qemu主进程可以在主机的所有物理CPU上调度。

  • 在线绑定:修改处于running状态的虚拟机对应的qemu进程的绑定关系,使用带—live参数的vcpu emulatorpin命令:

    1. # virsh emulatorpin openEulerVM --live 2-3
    2. # virsh emulatorpin openEulerVM
    3. emulator: CPU Affinity
    4. ----------------------------------
    5. *: 2-3

    以上命令把虚拟机openEulerVM对应的qemu进程绑定到物理CPU2、3上,即限制了qemu进程只在这两个物理CPU上调度。这一绑定关系的调整立即生效,但在虚拟机关机并重新启动后失效。

  • 持久化绑定:在libvirt内部配置中修改虚拟机对应的qemu进程的绑定关系,使用带—config参数的virsh emulatorpin命令:

    1. # virsh emulatorpin openEulerVM --config 0-3,^1
    2. # virsh emulatorpin euler
    3. emulator: CPU Affinity
    4. ----------------------------------
    5. *: 0,2-3

    以上命令把虚拟机openEulerVM对应的qemu进程绑定到物理CPU0、2、3上,即限制了qemu进程只在这三个物理CPU上调度。这一绑定关系的调整不会立即生效,在虚拟机下一次启动后才生效,并持久生效。