设为首页收藏本站language→→ 语言切换

鸿鹄论坛

 找回密码
 论坛注册

QQ登录

先注册再绑定QQ

查看: 605|回复: 0
收起左侧

你创建的OpenStack高性能虚拟机能实现“零损耗”么?

[复制链接]
发表于 2017-10-20 16:38:11 | 显示全部楼层 |阅读模式
本帖最后由 yeslab官方 于 2017-10-20 16:42 编辑


使用默认参数创建的虚拟机,虚拟机的VCPU在物理CPU不同核心之间动态调度,另外,由于Linux还可能会将软中断,内存交换等进程调度到虚拟机正在使用的物理核心上,这些因素导致这些虚拟机相对于物理机的计算性能可能会产生较大的抖动,不能满足一些对计算SLA要求很严格的业务,比如,很多金融业务就要求99.999%的请求处理时间延时不得高于1毫秒。


    高性能虚拟机
    为了减少 Linux 和 Hypervisor 对虚拟机的影响,让虚拟机的性能接近物理机,一般可以采用如下优化手段:
    CPU 绑核(pin):将虚拟 CPU 和物理 CPU 逐一绑定起来,这样不同虚拟机的VCPU各自运行在不同的物理核心上,不会相互影响。
    CPU隔离(isolate):将虚拟机使用的物理 CPU 从 Linux 隔离出来,Linux Kernel 不再调度任何应用甚至是任何系统进程到这些 CPU 上,尽量让这些CPU 100%为虚拟机使用。
    CPU拓扑(Topology): CPU 分配尽量不要跨 NUMA ,如果必须要跨NUMA,将 NUMA 拓扑结构呈现给 Guest OS ,同时也把 SMT 拓扑结构呈现给 Guest OS 。


    OpenStack 环境
    OpenStack Mitaka:Mitaka 现在运行的很好, 新版本的 Cell 机制甚至会导致一些不可预料的结果,我们一直没有冒险去做升级投入。
    CentOS 7.3:OpenStack Mitaka 在 CentOS 7.4 的 repo 里面已经找不到了,应该是停止支持了,由于担心一些不必要的包依赖问题,我们继续使用 CentOS 7.3 。
    QEMU: CentOS 7默认的qemu 1.5版本非常老,会导致compute节点的resource_tracker不能上报numa_topology到controller节点,导致NUMATopologyFilter无法调度,所以必须升级到2.6。


                               
登录/注册后可看大图
升级qemu到2.6



    计算节点配置
    使用numactl查看下主机的numa拓扑结构,比如下面的输出说明 cpu 0-3 在一个numa node上,而 cpu 4-7 在另一个 numa node 上:


                               
登录/注册后可看大图


numactl --hardware


    比如,我们希望将2,3, 6,7隔离出来,专门给虚拟机用,尽量让Linux不要将任何用户进程和系统进程调度到这些cpu上。
    首先,编辑/etc/nova/nova.conf, 配置这台主机能用来创建VM的cpu为2,3,6,7:
    vcpu_pin_set=2,3,6,7
    然后,编辑/boot/grub/grub.conf:


                               
登录/注册后可看大图


grub.conf




    isolcpus: 不要将任何应用和系统进程(softirq, swap.。。)调度到指定的CPU上;
    nohzfull: 指定的CPU上没有时钟中断;
    rcunocbs: 不要在指定的CPU上调度执行rcb callbacks;
    最后,重启主机生效。

控制节点配置

修改/etc/nova/nova.conf, 将调度过滤器NUMATopologyFilter加入到scheduler_default_filters,scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,CoreFilter,NUMATopologyFilter

然后,重启nova-scheduler服务

systemctl restart openstack-nova-scheduler.service

创建支持cpu pin的flavor:

openstack flavor set m1.large --property hw:cpu_policy=dedicated --property hw:cpu_thread_policy=require

CPU-POLICY :

shared: (默认)VCPU会在PCPU上任意漂移;

dedicated: VCPU会绑定在指定的PCPU上;

CPU-THREAD-POLICY :
    prefer: (默认) VCPU会优先选择同一核心上的超线程。
    isolate: VCPU会选用不同核心的超线程。
    require: VCPU优先选择同一核心上的超线程,如果主机的BIOS超线程没有开启,就会报告失败。
    除了hw:cpu_policy和hw:cpu_thread_policy,这里还可以定义hw:numa_nodes,hw:numa_cpus.N,hw:numa_mem.N等NUMA策略。
    用指定的flavor创建虚拟机:
    openstack server create --image cirros --nic net-id=provider-net --flavor m1.large instance-001

    验证
    在计算节点上使用virsh dumpxml domID观察虚拟机,输出的xml应该包括类似下面的内容:


                               
登录/注册后可看大图


virsh dumpxml



转载开源云中文社区

Openstack新班
10月23日 OpenStack COA 晚班 目前正在火热招生中
11月13日 OpenStack技术脱产班 火热招生中(定位:北京,班型:面授)

                               
登录/注册后可看大图

您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2024-4-24 09:33 , Processed in 0.055380 second(s), 8 queries , Redis On.  

  Powered by Discuz!

  © 2001-2024 HH010.COM

快速回复 返回顶部 返回列表