Openstack云平台性能优化·CPU绑核

为了改善基于Libvirt的Openstack云主机的性能,往往采用将虚拟机的vCPU与计算节点的pCPU进行绑定的方法来实现。

配置CPU绑核

0X01 控制节点设置CPU绑定策略

修改nova-scheduler配置/etc/nova/nova.conf

重启nova服务:

配置主机组

创建两个机组aggregate:

将计算节点加入主机组:

创建flavor:

配置flavor:

选项CPU-POLICY的参数值说明:

参数值 说明
shared 默认值,允许虚拟机的vCPU在宿主机的pCPU上自由浮动。
dedicated 将虚拟机的vCPU与宿主机的pCPU进行绑定。

选项CPU-THREAD-POLICY的参数值说明:

参数值 说明
prefer 默认值,若宿主机没有开启超线程,vCPU将选择Core,若宿主机开启超线程,vCPU将优先选择同一核心上的Thread,且只会选择Thread而不会选择Core。
isolate vCPU性能最好,若宿主机没有开启超线程,每个vCPU独占一个Core,若宿主机开启超线程,每个vCPU占用一个CPU核心中的一个Thread,但其他vCPU不能再使用该核心的任何其他Thread,也相当于每个vCPU独占一个Core。
require vCPU数量最多,宿主机须启用超线程,vCPU将优先选择同一CPU核心上的Thread,当空闲线程的数量不足时,nova调度将报告失败,若宿主机没有开启超线程,则它不会显示在 Nova Scheduler 的调度名单中。

补充说明:

  1. 只有当 hw:cpu_policy=dedicated 时,参数 hw:cpu_thread_policy 才会生效。
  2. Openstack不会把pCPU的layout信息暴露给用户,用户配置CPU-POLICY和CPU-THREAD-POLICY后,nova实现绑定某个vCPU到pCPU。
  3. 强烈建议创建两个host-aggregate,cpu_pinning和cpu_unpinning,将这两个aggregate加入不同的计算节点,当然也可以通过其他方法来避免非绑核的虚拟机强占绑核虚拟机的CPU资源。
  4. 对配置了绑核的计算节点,不建议超分(虚拟机的CPU拓扑和绑定的CPU拓扑策略一致),即超分率为1.0。举例:对一台拥有2*vCPU的虚拟机进行绑核,则该虚拟机的CPU拓扑为1个socket、1个核心、2个线程。
  5. 设置 cpu_thread_policy=prefer | require 时,Nova分配策略尽量依次占满每个CPU,以减少Thread/Core碎片。

0x02 修改计算节点nova

指定计算节点上的实例能使用的CPUs,修改配置/etc/nova/nova.conf

计算节点上的实例只能使用“1-15和17-31”但不包含“7和21”的CPUs,然后重启nova服务。

0x03 控制节点指定flavor创建虚拟机

使用virsh dumpxml domID观察效果。

附加知识

修改已有主机组的CPU绑定配置

将现有flavor的metadata的主机组vcpu绑定属性设置为不绑定:

将metadata中带有cpu_pinned的主机组vcpu绑定属性设置为绑定:

手动配置CPU绑核

通过修改虚拟机XML配置文件指定vCPU与pCPU的绑定关系:

自动配置CPU绑核

以下脚本实现自动CPU绑核操作:

原创文章禁止转载:技术学堂 » Openstack云平台性能优化·CPU绑核

精彩评论

9+6=

感谢您的支持与鼓励

支付宝扫一扫打赏

微信扫一扫打赏