虚拟机绑核

目的

在服务器上运行多个虚拟机,每台虚拟机的业务不同,造成不同程度的资源占用。为了避免相邻的虚拟机的干扰,需要将不同虚拟机的进程完全隔离,并且,OpenStack相关进程用于确保网络、存储等服务,故需要与其他进程隔离。

方法

方法一:使用OpenStack配置

  1. “/etc/nova/nova.conf”文件中的vcpu_pin_set选项设置成为客户系统进程保留的CPU内核列表。例如,可以进行以下设置:

    vcpu_pin_set = "0-3"

  2. 重启nova服务。

    1
    systemctl restart openstack-nova-compute.service
    

  3. 设置flavor为1v1绑核,FLAVOR-NAME为创建的实例类型名称。

    1
    openstack flavor set FLAVOR-NAME --property hw:cpu_policy=dedicated
    

    flavor配置可以根据业务实际场景配置,cpu_policy选项参考含义如下:

    • shared (default):不独占物理CPU 策略,允许 vCPU在不同的物理CPU间浮动。
    • dedicated:独占物理CPU 策略,虚拟机的 vCPU将会严格绑定到物理CPU上。

  1. 使用该flavor创建虚拟机。

    通过OpenStack 绑核方式无法显式指定vCPU。

方法二:使用virsh配置(推荐)

方法一无法显式指定vCPU,若需要根据业务需求,可以使用virsh方式显式绑核,操作如下:

  1. 查询虚拟机实例名与所属计算节点,xxx为虚拟机名。

    1
    nova show xxx
    

  2. 到对应计算节点compute1上编辑虚拟机xml配置文件,instance-xxx为步骤一查询到的实例名。

    1
    virsh edit instance-000008f1
    

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

  4. 重启虚拟机。

    1
    2
    virsh shutdown instance-000008f1
    virsh start instance-000008f1
    

推荐策略