扫一扫微信二维码

OpenStack中的虚拟机CPU架构 发布时间:2017-02-17


计算机最主要的生产力为计算能力,而计算机的计算能力取决于CPU性能,CPU性能又与CPU的架构有关系。CPU的架构能够决定一个CPU的性能高低和能够使用到的特性。在CPU相同主频的情况下Hasewell架构的CPU比Ivy Bridge架构的CPU性能高。

在虚拟化的背景下,CPU的虚拟化技术能够将单颗物理CPU模拟为多个虚拟机CPU运行。目前主流CPU硬件辅助虚拟化技术为Intel VT-X和AMD-V两种。其原理为通过引入新的指令和运行模式,使VMM和Guest OS分别运行在不同模式(ROOT 模式和非ROOT模式)下,且Guest OS 运行在Ring 0 下。
\
CPU中包含的指令

通常情况下,Guest OS 的核心指令可以直接下达到计算机系统硬件执行,而不需要经过VMM。当Guest OS执行到特殊指令的时候,系统会切换到VMM,让VMM来处理特殊指令。GuestOS负责第2级调度,即线程或进程在VCPU上的调度(将核心线程映射到相应的虚拟CPU上。)

VMM(Virtual Machine Monitor)负责第1级调度,即VCPU在物理处理单元上的调度。

两级调度的调度策略和机制不存在依赖关系。VMM负责物理处理器资源在各个虚拟机之间的分配和调度,本质上即把各个虚拟机中的VCPU按照一定的策略和机制调度在物理处理单元上,可以采用任意的策略来分配物理资源,满足虚拟机的不同需求。
\
VMM

在较大的OpenStack环境中,可能存在多种不同的CPU的服务器。这就导致了OpenStack计算节点的计算能力与特性不同,从而带来的问题是
1、不同架构CPU服务器之间无法进行热迁移
2、无法统一虚拟机的性能     
                                    
为了解决以上的问题,我们可以通过将CPU架构暴露给KVM虚拟机,来解决该问题。

在libvirt中通过提供基本CPU型号名称,一组附加功能标志和拓扑(插槽/核心/线程)来指定CPU。 libvirt KVM驱动程序提供了许多标准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之间迁移。

可以通过使用virsh capabilities命令查看现在QEMU/KVM使用的CPU架构和特性
\

在OpenStack中调整CPU架构,在nova的配置文件中修改以下内容。
       [libvirt]
       …
       cpu_mode = None
       cpu_model = None
\

© 2012-2017 九州云信息科技有限公司 99Cloud 版权所有 咨询热线:400 006 0472 售后服务热线:400 670 7810 培训咨询热线:400 826 0070   ICP证:浙ICP备12032350号-1

网站建设:信达互联

北京网站建设公司