[openstack]NFVI特性之虚拟机绑定CPU

来源:互联网 发布:pb 数据窗口过滤 编辑:程序博客网 时间:2024/06/06 08:43

..
声明:
本博客欢迎转发,但请保留原作者信息!
博客地址:http://blog.csdn.net/halcyonbaby
新浪微博:@寻觅神迹

内容系本人学习、研究和总结,如有雷同,实属荣幸!


虚拟机CPU绑定特性,是NFVI的一个重要特性。该特性在openstack的K版本合入社区。
CPU绑定特性是创建实时虚拟机的前提。

CPU绑定特性,主要解决虚拟机互相正确pCPU导致的延迟。
该特性主要用于计算密集型/要求CPU低延迟的使用场景。

这块会涉及多个概念,SMT/CMP/SMP(大家可以自行百度了解内容)。简单的说一台主机可以由多个
CPU,每个CPU可以有多个cores,每个core可以有多个thread。

openstack的CPU绑定特性允许你指定vCPUs是独占绑定core还是独占绑定thread。

使用方法

openstack提供了两个参数,可以在flavor中配置(也可以在image中配置,这里主要描述flavor的配置方法)。

  • cpu_policy
  • cpu_thread_policy

cpu_policy支持使用shared/dedicated进行配置。shared表示不独占绑定pCPUs,dedicated表示独占绑定pCPUs。

cpu_thread_policy支持使用prefer/isolate/require三种指定方式。prefer表示如果主机提供thread则使用thread方式绑定,没有则使用core绑定;isolate表示使用core绑定;require表示必须使用thread绑定。

值得说明的是,使用cpu_thread_policy为prefer或者require时,openstack的thread分配策略是尽量占满一个core,然后再使用下一个core上的thread,从而避免导致thread/core碎片。这个从下边的例子也可以看出来。

使用例子

主机共有3个CPU,3个node:
CPU1有2个core,4个thread。
CPU2有1个core,2个thread。
CPU3有1个core,2个thread。

验证core绑定策略

openstack flavor create –ram 1024 –vcpu 2 –disk 1 isolate
openstack flavor set isolate –property hw:cpu_policy=dedicated –property hw:cpu_thread_policy=isolate

openstack server create –flavor isolate –image cirros-0.3.4-x86_64-uec isolate
创建成功。

openstack server create –flavor isolate –image cirros-0.3.4-x86_64-uec isolate2
创建成功。
原因:openstack默认一个numa node。虽然还有两个core,但是不在1个node。openstack因此返回失败。

openstack flavor create –ram 1024 –vcpu 1 –disk 1 isolate_1u
openstack flavor set isolate_1u –property hw:cpu_policy=dedicated –property hw:cpu_thread_policy=isolate

openstack server create –flavor isolate_1u –image cirros-0.3.4-x86_64-uec isolate_1u1
创建成功。
openstack server create –flavor isolate_1u –image cirros-0.3.4-x86_64-uec isolate_1u2
创建成功。
openstack server create –flavor isolate_1u –image cirros-0.3.4-x86_64-uec isolate_1u3
创建失败,因为已经没有空余的core了。

通过xml也可以看出3个虚拟机使用了0,2,4,6四个pCPUs。

验证thread分配策略

openstack flavor create –ram 1024 –vcpu 2 –disk 1 prefer
openstack flavor set prefer –property hw:cpu_policy=dedicated –property hw:cpu_thread_policy=prefer
openstack server create –flavor prefer –image cirros-0.3.4-x86_64-uec prefer
创建失败,因为资源不足。

删除虚拟机isolate后,重新创建prefer,创建成功。
通过xml可以看出使用了0,1两个pCPUs。
openstack的分配策略是按顺序使用未用的pCPUs。

这样做的好处,避免thread碎片。

require的行为

openstack flavor create –ram 1024 –vcpu 2 –disk 1 require
openstack flavor set require –property hw:cpu_policy=dedicated –property hw:cpu_thread_policy=require
openstack server create –flavor require –image cirros-0.3.4-x86_64-uec require
openstack server create –flavor require –image cirros-0.3.4-x86_64-uec require2

可以创建成功,分别使用0,1和2,3

openstack server create –flavor require –image cirros-0.3.4-x86_64-uec require3
创建失败,因为没有资源了。