你创建的OpenStack高性能虚拟机能实现“零损耗”么?
来源:互联网 发布:2015年网络流行歌曲 编辑:程序博客网 时间:2024/05/17 08:39
使用默认参数创建的虚拟机,虚拟机的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。
计算节点配置
使用numactl查看下主机的numa拓扑结构,比如下面的输出说明 cpu 0-3 在一个numa node上,而 cpu 4-7 在另一个 numa node 上:
比如,我们希望将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:
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应该包括类似下面的内容:
转载自云谷计算
阅读推荐:
公开课|Kubernetes与容器云实践,10.19晚八点开趴!
1分钟投票,赢 OpenStack 悉尼峰会限量T恤
活动推荐:
本社区拥有多个国内最活跃的开源云计算讨论微信群,长期分享优质文章与PPT资料,进群请加管理员微信yookee1983,并注明“加群”。
投稿邮箱:openstackcn@sina.cn
- 你创建的OpenStack高性能虚拟机能实现“零损耗”么?
- 一步一步优化你的mysql------创建高性能的索引
- PostgreSQL分区表的性能损耗验证
- 线程上下文切换的性能损耗测试
- php try catch 带来的性能损耗
- 创建高性能的索引
- 创建高性能的索引
- 创建高性能的虚拟机
- MySQL高性能 创建高性能的索引
- 高性能Mysql——创建高性能的索引
- [高性能MySQL]-创建高性能的索引
- 高性能Mysql 3(创建高性能的索引)
- 怎样降低Struts中不需进行业务处理的性能损耗!
- Docker的性能损耗:以基因组分析流程为例
- openstack学习笔记----Libvirt的虚拟化平台调度实现
- 怎样避开10个最损耗你精力的元凶
- 你不知道的高性能JAVASCRIPT
- 创建高可用性能的mysql集群
- centos7下采用Nginx+uwsgi来部署django
- 自制基于 Snips 和 Snowboy 的智能音箱来保护你的隐私
- hive 数据导入表的方式
- [题解] JSOI2008 星球大战 (并查集+逆序处理)
- spring @profile注解的使用
- 你创建的OpenStack高性能虚拟机能实现“零损耗”么?
- Ubuntu16.04下mysql的简单安装
- Linux启动过程详解
- nyoj38
- 公有云和私有云的区别
- 快速集成一个视频直播功能
- 基于HTML5和WebGL的3D网络拓扑结构图
- CDH安装过程
- Python Logging模块的简单使用(转)