基于Openstack的企业级实例在360的落地实战
# 背景
当前公司内部使用的虚拟机,主要为共享型实例。共享型实例在物理CPU上采用超卖机制,如超卖3倍到超卖5倍。共享型实例采用非绑定CPU调度模式,每个vCPU会被随机分配到任何空闲CPU超线程上,不同实例vCPU会争抢物理CPU资源,并导致高负载时计算性能波动不稳定,但是每台实例的成本相对来说较低。
随着企业内部对虚拟化性能的要求日益提高,共享型实例的这种不稳定性,已不能满足业务使用,企业级实例应运而生。与共享型实例相比,企业级实例采用固定CPU调度模式。每个vCPU绑定到一个物理CPU超线程,实例间无CPU资源争抢,实例计算性能保持稳定。
由于企业级实例在物理CPU不再进行超卖,分配给企业级实例使用的CPU价格必然比共享型实例要高。针对价格问题,当前企业级实例采用80核/768G内存/双口Mellanox-CX5网卡的HPC机型,极大程度提高虚拟机密度,一定程度对成本进行均衡控制。
# 企业级实例特点
企业级实例具有高性能、高隔离,高稳定的计算能力和平衡网络性能的特点。因为具有独享且稳定的计算、存储、网络资源,非常适合对业务稳定性具有高要求的企业场景。
# 企业级实例应用了哪些技术
在360的实际生产环境中,综合应用了下面这些技术来生产企业级实例,并已落地应用了通用型,计算型,内存型,本地SSD型共18种企业级实例。
应用NUMA拓扑和CPU亲和性绑定技术到虚拟机,虚拟机之间CPU隔离
采用固定CPU调度模式。每个vCPU绑定到一个物理CPU超线程,实例间无CPU资源争抢,实例计算性能稳定
应用宿主机进程绑核技术,宿主机进程占用分配的固定CPU,不占用虚拟机使用的CPU
分离共享型实例与企业级实例所使用的宿主机
开启网卡多队列
应用PCI Passthrough技术来挂载本地Nvme SSD磁盘
对不同规格虚拟机,应用不同网络限速规则
对不同Size云硬盘,应用不同云硬盘限速规则
# CPU绑核技术介绍
下面对企业级实例中最重要的CPU绑核技术进行介绍,通过两张图来给大家建立起一个直观的认识。物理机选用当前在生产环境使用的80核(2socket*20core*2开启超线程), 768G内存,双口Mellanox-CX5网卡的HPC机型。
首先来看共享型实例的vCPU使用情况,在虚机实际使用过程中,共享型实例的每个vCPU会在所有物理CPU超线程上浮动,共享型实例之间会一起争抢这80个核。而企业级实例的每个vCPU绑定到一个固定的物理CPU超线程上,同时我们将运行Openstack管理服务的docker进程,如nova-compute,neutron-openvswitch-agent,neutron-l3-agent等固定在了物理CPU超线程的0,1,40,41核上,在企业级实例调度时刨除这4个核,保证宿主机进程不去争抢虚机资源。
# 虚拟机实例XML对比
通过virsh dumpxml命令获取创建出来的共享型实例和企业级实例的XML文件,可以明显看到企业级实例通过vcpupin和emulatorpin将VCPU固定到指定的物理CPU上,并且内存分配采用strict模式,表示不允许内存跨NUMA分配。对于32核及以下的套餐,我们采用单Numa分配方式,对于48核的套餐,一个Numa已经不能满足,因此会从两个Numa分别分配24个物理机CPU。
01
共享型实例
<memory unit='KiB'>16777216</memory> <currentMemory unit='KiB'>16777216</currentMemory> <vcpu placement='static'>8</vcpu> <cputune> <shares>8192</shares> </cputune> <cpu mode='host-passthrough' check='none'> <topology sockets='8' cores='1' threads='1'/> </cpu> |
02
企业级实例
<memory unit='KiB'>16777216</memory> <currentMemory unit='KiB'>16777216</currentMemory> <vcpu placement='static'>8</vcpu> <cputune> <shares>8192</shares> <vcpupin vcpu='0' cpuset='18'/> <vcpupin vcpu='1' cpuset='58'/> <vcpupin vcpu='2' cpuset='52'/> <vcpupin vcpu='3' cpuset='12'/> <vcpupin vcpu='4' cpuset='8'/> <vcpupin vcpu='5' cpuset='48'/> <vcpupin vcpu='6' cpuset='13'/> <vcpupin vcpu='7' cpuset='53'/> <emulatorpin cpuset='8,12-13,18,48,52-53,58'/> </cputune> <numatune> <memory mode='strict' nodeset='0'/> <memnode cellid='0' mode='strict' nodeset='0'/> </numatune> <cpu mode='host-passthrough' check='none'> <topology sockets='1' cores='4' threads='2'/> <numa> <cell id='0' cpus='0-7' memory='16777216' unit='KiB'/> </numa> </cpu> |
# CPU和内存性能压测对比
为对比共享型实例和企业级实例的性能,我们选用了sysbench和stream这两款工具。主要目的是验证企业级实例对比共享型实例在隔离性,稳定性,性能方面的优势。
# 压测工具说明
01
sysbench
sysbench是一款开源的多线程性能测试工具,可以执行CPU、内存、线程、IO、数据库等方面的性能测试。sysbench的CPU测试是在指定时间内,循环进行素数计算。
# sysbench cpu --cpu-max-prime=20000 --threads=8 --time=30 run
素数上限20000个,时间30秒,8线程
输出结果:
events per second:所有线程每秒完成了几轮的素数计算
Avg(ms):所有event的平均耗时
02
STREAM
STREAM是业界广为流行的综合性内存带宽实际性能测量工具之一。STREAM支持Copy 、Scale 、 Add、 Triad四种操作。
Copy操作最为简单,它先访问一个内存单元读出其中的值,再将值写入到另一个内存单元。
Scale操作先从内存单元读出其中的值,作一个乘法运算,再将结果写入到另一个内存单元。
Add操作先从内存单元读出两个值,做加法运算, 再将结果写入到另一个内存单元
Triad的中文含义是将三个组合起来,在本测试中表示的意思是将Copy、Scale、Add三种操作组合起来进行测试。具体操作方式是:先从内存单元中中读两个值a、b,对其进行乘加混合运算(a + 因子 * b ) ,将运算结果写入到另一个内存单元。
# 测试环境
物理机两台,配置均是80核 768g 双口25G网卡。
物理机A上创建9台 8核16g的企业级实例。这里因为已经隔离了4个核给宿主机进程使用,因此只能创建出9台企业级实例,使用72个核。
物理机B上配置CPU 3倍超卖,创建29台8核16g的共享型实例。
# 测试数据
01
测试场景1-单台实例对比
单台企业级实例执行sysbench,看宿主机htop,可以看到8个物理CPU是处于使用率100%的情况,其他物理机CPU不受干扰
单台共享型实例执行sysbench,看宿主机htop,8个核来回调度,100%使用率不是固定的
分别对物理机,单台企业级实例,单台共享型实例在无压力的情况下进行sysbench压测
分析:
在物理机空闲时,共享型实例由于可以在所有CPU上浮动,此时性能会比绑定了固定CPU的企业级实例还更好些
共享型相比物理机来说,CPU性能损耗在1.5%左右
企业级相比物理机来说,CPU性能损耗在16%左右
对单台物理机,单台企业级实例,单台共享型实例在无压力的情况下进行stream压测
分析:
在物理机空闲时,共享型实例由于可以在所有CPU上浮动,此时性能会比绑定了固定CPU的企业级实例还更好些
共享型和企业级相比物理机来说,内存带宽仅能达到37%和25%,性能相差太大,需要分析
02
测试场景2-企业级VS共享型不超卖
9台企业级实例同时执行sysbench,看宿主机htop,可以看到72个物理CPU是处于使用率100%的情况,另外8个物理机CPU不受干扰
9台共享型实例同时执行sysbench,看宿主机htop,大部分CPU也都处于100%使用率的情况了
对9台企业级实例,9台共享型实例同时进行sysbench压测分析
分析:
物理机压力打满的情况下,企业级的CPU算力非常稳定,而共享型有波动
内存带宽方面,企业级实例相比于共享型实例提升20%
03
测试场景3-企业级VS共享型3倍超卖
29台共享型实例同时执行sysbench,与9台企业级,和共享型不超卖的9台,进行横向对比分析
分析:
企业级VS共享型3倍超卖情况下,企业级的CPU算力和内存带宽基本是共享型的3倍。
# Emulator thread问题
当前企业级实例已开启网卡多队列。网卡多队列驱动将各个队列通过中断绑定到不同的核上,来解决网络I/O带宽升高时,单核CPU的处理瓶颈,以提升网络PPS和带宽性能。
在相同的网络PPS和网络带宽的条件下,与1个队列相比,2个队列最多可提升性能达50%到100%,4个队列的性能提升更大。
在实际使用中,企业级实例的VCPU thread和emulator thread由于都固定到了相同的物理CPU上,两者间有资源争抢,当某个报文到达打满的CPU时,会表现出延迟高的现象;对于共享型的实例,由于能调度宿主机的所有物理CPU,在物理机空闲情况下,反而在Ping延迟方面占优。
如果想要企业级实例获取更高的网络性能,可通过将emulator thread绑定到与VCPU thread 不一样的物理CPU上,但与此同时,那么就需要考虑CPU资源开销问题。
# 未来探索
对企业级实例的高隔离,高稳定的这种特性,非常适合与在离线业务结合使用,将在离线业务部署为企业级实例,通过混合部署,借助离线业务的高计算使用量,在不影响在线业务使用的同时,拉高业务整体资源水位,快速地提升物理资源利用率,降低总体成本。
随着企业级实例的全面覆盖,相信可以给企业带来更高的资源利用率。
基于Openstack的企业级实例在360的落地实战相关推荐
- PostgreSQL高可用集群在360的落地实战
本文主要从以下几个方面介绍PostgreSQL高可用集群在360的落地实战 为什么选择Patroni + Etcd + PostgreSQL高可用集群方案 PostgreSQL高可用集群在360的落地 ...
- 横跨7个版本的OpenStack无感知热升级在360的落地与实践
01 背景 360公司的IaaS服务平台,是基于开源Openstack项目研发的,在发展的数年间已历经了多次版本的更新迭代.2015年,360团队基于Liberty版本自主研发了360公有云(奇云), ...
- 银联基于OpenStack的金融私有云建设实践
银联基于OpenStack的金融私有云建设实践 发表于2015-10-06 17:17| 1390次阅读| 来源CSDN| 1 条评论| 作者中国银联 祖立军 OpenStackSaaS银联金融 ...
- 浅谈基于 OpenStack 和 k8s 轻量研发私有云建设
文章目录 一.背景 二.面临的挑战 三.功能简介 1.核心优势 2.核心设施平台(IaaS云) 3.基础服务平台(PaaS云) 四.技术落地 1.整体架构 2.技术选型 2.1.IaaS云技术 2.2 ...
- 基于Hadoop的企业级网盘系统的研究与开发
基于Hadoop的企业级网盘系统的研究与开发 Research and Development of Enterprise-class Online Storage System based on H ...
- 私有云搭建:基于OpenStack 但不止于OpenStack
原文地址:https://www.admin5.com/article/20170504/742440.shtml 在过去的3月份,开源厂商Redhat公司披露了它的第四个季度的财报,显示其中16%左 ...
- 如何看待基于OpenStack与Docker技术的云计算建设
--专访天云软件技术总监牛继宾 OpenStack和Docker,这可能是近2年在云计算领域最火的两个开源技术词语了.做OpenStack的公司,都在为社区贡献代码的同时为企业用户做云:现在随着容器技 ...
- 银联基于OpenStack 的“五高”生产金融云技术白皮书
银联作为金融行业云计算的首批探索者和使用者,在2009年正式启动了云计算的前瞻性研究,并于2012年投产了基于OpenStack Essex版本的国内金融行业第一朵生产金融云.随后的五年间,银联仍然不 ...
- 基于OpenStack的云计算平台搭建
文章目录 1.硬件需求(所有节点) 1.1.配置需求 1.2.IP&主机&配置 2.安装基础环境&服务(控制节点) 2.1.安装 NTP 时间同步服务 - - 目录 基于Ope ...
最新文章
- ubuntu亮度调节失效
- 使用powerdesigner建立UML类图
- huawei hardware questions
- 【深度学习】90.94%准确率!谷歌刷新ImageNet新纪录!Model soups:提高模型的准确性和稳健性...
- PCM复用设备和PDH设备的区别介绍
- latex中怎样使公式居中_LaTeX_多行公式对齐居中的同时选择性的加编号
- java 浏览器 爬虫_java 网络编程-爬虫+模拟浏览器
- Tomcat(三):日志
- 查看当前内存使用情况---练习记录
- MVC实用架构设计(三)——EF-Code First(1):Repository,UnitOfWork,DbContext
- Struts2的学习-属性驱动和模型驱动
- python xps_python处理xps文件_从XPS文档中提取文本
- 阿里云ECS主机绑定域名
- VMWare 16 pro虚拟机无法开启,打不开磁盘“E:\ubuntu16.04.vmdk”或它所依赖的某个快照磁盘,显示模块“Disk”启动失败
- js将阿拉伯数字翻译成中文的大写数字
- 客户端与服务器信息交互的流程,客户端与服务器的交互流程
- jquery 分页器
- FastAdmin必坑指南《基础篇》
- 【英语】新走遍美国-即使平凡也要追求梦想
- Doxygen——根据代码注释生成文档的工具
热门文章
- 诗与远方:无题(八十六)
- MySQL Statement Cancellation Timer] but has failed to stop it.
- Python学习笔记之While循环(二)
- 微信公众号自定义菜单设置管理
- Java8新特性总结 - 1.接口新增默认方法和静态方法
- Springboot项目部署到外部Tomcat
- python自增_Python 为什么不支持 i++ 自增语法,不提供 ++ 操作符?
- Nodejs学习笔记(二)——模块
- 如何计算机操作维护培训,电脑基本操作培训教材.ppt
- Apache中限制和允许特定IP访问