干货分享:OpenStack中的虚拟机CPU架构
计算机最主要的生产力为计算能力,而计算机的计算能力取决于CPU性能,CPU性能又与CPU的架构有关系。...
计算机最主要的生产力为计算能力,而计算机的计算能力取决于CPU性能,CPU性能又与CPU的架构有关系。CPU的架构能够决定一个CPU的性能高低和能够使用到的特性。在CPU相同主频的情况下Hasewell架构的CPU比IvyBridge架构的CPU性能高。
在虚拟化的背景下,CPU的虚拟化技术能够将单颗物理CPU模拟为多个虚拟机CPU运行。目前主流CPU硬件辅助虚拟化技术为Intel VT-X和AMD-V两种。其原理为通过引入新的指令和运行模式,使VMM和Guest OS分别运行在不同模式(ROOT 模式和非ROOT模式)下,且Guest OS 运行在Ring 0 下。
CPU中包含的指令
VMM(Virtual Machine Monitor)负责第1级调度,即VCPU在物理处理单元上的调度。
两级调度的调度策略和机制不存在依赖关系。VMM负责物理处理器资源在各个虚拟机之间的分配和调度,本质上即把各个虚拟机中的VCPU按照一定的策略和机制调度在物理处理单元上,可以采用任意的策略来分配物理资源,满足虚拟机的不同需求。
VMM
在较大的OpenStack环境中,可能存在多种不同的CPU的服务器。这就导致了OpenStack计算节点的计算能力与特性不同,从而带来的问题是
- 不同架构CPU服务器之间无法进行热迁移
- 无法统一虚拟机的性能
为了解决以上的问题,我们可以通过将CPU架构暴露给KVM虚拟机,来解决该问题。
在libvirt中通过提供基本CPU型号名称,一组附加功能标志和拓扑(插槽/核心/线程)来指定CPU。 libvirtKVM驱动程序提供了许多标准CPU型号名称(在/usr/share/libvirt/cpu_map.xml中定义)
“486”,“pentium”,“pentium2”,“pentiumpro”,“coreduo”,“n270”,“pentiumpro”,“qemu32”,“kvm32”,“cpu64-rhel5”,“cpu64-rhel5”,“kvm64 “Opteron_G3”,“Opteron_G3”,“Opteron_G3”,“Opteron_G3”,“Opteron_G3”,“Opteron_G4”,“Pentiumpro”,“Conroe”“Penryn”,“Nehalem”,“Westmere”,“pentiumpro”,“cpu64-rhel5”,“cpu64-rhel5””
还有两种方式获取物理机的CPU模型
- “host-model” - 这将使libvirt从上面的列表中识别与主机最匹配的命名CPU模型,然后请求额外的CPU标志来完成匹配。 这将接近最大的功能/性能,如果迁移到具有略微不同的主机CPU的另一个主机,这将保持良好的可靠性/兼容性。 注意 ,由于libvirt检测主机CPU的方式,使用主机模型创建的CPU配置可能无法正常工作。 客户机CPU可能通过使用不起作用的CPU功能和其他参数(例如CPUID级别)的组合来混淆客户机操作系统(甚至导致内核崩溃)。
- “host-passthrough” - 这将使libvirt配置KVM直接获取主机CPU。 与host-model 不同,host-passthrough不仅仅匹配功能标志,还匹配主机CPU的每个最后的细节。 这将给出最大化的性能,并且对于需要检查低级CPU细节的一些应用程序可能更重要。但是虚拟机只能在完全匹配的主机CPU之间迁移。
[libvirt]
…
cpu_mode = None
cpu_model = None
…
配置项
内容
cpu_mode
(String)用于设置实例使用的CPU模式。
如果virt_type =“kvm |qemu”,它将默认为“host-model”,否则默认为“none”。
可用的值:
host-model:克隆主机CPU功能标志。
host-passthrough:使用主机CPU型号;
custom:使用命名的CPU模型;
none:不设置任何CPU模型。
相关选项:
cpu_model:如果使用cpu_mode,请设置此配置选项,否则这将导致错误,实例将无法启动。cpu_model
(String)设置实例使用的libvirtCPU模型的名称。
可用的值:
/usr/share/libvirt/cpu_map.xml中列出的名称
相关选项:
cpu_mode:当cpu_mode未设置为custom时,不要设置此值。这将导致错误,并且实例将无法启动。
virt_type:只有虚拟化类型kvm和qemu需要使用它。
原创文章,转载请务必在文首注明转自“九州云99Cloud”及原作者,谢谢配合~
更多精彩内容请点击“阅读原文”
关注 九州云99Cloud
微信扫一扫关注公众号