突破性能极限——阿里云神龙最新ASPLOS论文解读

作者 | 阿里云神龙团队

 责编 | 徐威龙

封图| CSDN 下载于视觉中国

日前,ASPLOS 2020公布了计算机界最新科技成果,其中包括阿里云提交的名为《High-density Multi-tenant Bare-metal Cloud》的论文,该论文阐述了阿里云自研的神龙服务器架构如何解决困扰云计算行业多年的虚拟化性能损耗问题,打破物理机的性能神话,让云服务器突破性能极限。

此次入选意味着全球计算机顶会对阿里云自研技术的认可,也意味着中国创新技术在全球计算机界争得了一席之地。

ASPLOS 是综合体系结构、编程语言和操作系统三个方向的计算机系统领域顶级会议,从1982年创办至今推动了多项计算机系统技术的发展,一般论文录用率在20%左右。

阿里云本次入选的论文题为《High-density Multi-tenant Bare-metal Cloud》,由阿里云研究员张献涛带领的神龙技术团队撰写,详细解读了神龙架构的技术优势:超越传统物理机100%的算能、分钟级交付能力、安全物理隔离和云平台全系打通等。

虚拟化是云计算的基础,它将物理服务器虚拟化成想要的计算单元,进而拥有最大的弹性,然而却会导致性能损耗。如何解决这样的矛盾?阿里在2017年推出了“神龙架构”,弥补虚拟化的性能损耗,同时拥有云的弹性和运维优势。

2019年杭州云栖大会上,阿里云发布了第三代神龙架构,全面支持ECS虚拟机、裸金属、云原生容器等,在IOPS、PPS等方面提升5倍性能,可帮助用户降低50%的计算成本。去年双11核心系统100%上云,神龙大放异彩,成功扛住了54.4万笔/秒的订单创建峰值,与同配置物理机相比,不仅业务系统性能提升20%,而且抗高负载压力表现更好,整个业务性能非常平稳和线性。 

不仅如此,神龙还是目前最流行的容器技术的最佳拍档。基于神龙架构的阿里云容器服务对比物理机有10%-30%的性能优势。

目前,神龙架构已大规模应用于淘宝、天猫、菜鸟等业务,用于解决高峰值的性能瓶颈问题。

本次入选ACM ASPLOS论文题目为《High-density Multi-tenant Bare-metal Cloud》,由阿里云研究员兼创新产品线总负责人张献涛、阿里云高级技术专家郑晓、阿里云资深技术专家杨航及其他神龙团队共同撰写。 

该文首次全面解析了时下流行的裸金属云计算服务、神龙架构内涵。将作为新一代虚拟化技术发展方向的神龙,与现有架构作对比,详细阐述了两者在软硬件、核心计算性能、虚拟化开销的异同。论文中对多种业务表现上面的性能数据充分揭示了神龙裸金属架构的特有优势。以下为该论文的详细解读。

摘要

虚拟化是云计算的基石,多租户(Virtual Machines)共享一个物理服务器,提高了数据中心服务器的利用率,使得云计算服务商可以提供更经济高效的服务。但是,虚拟化下多VM共享物理服务器的技术会引入不少安全问题,尤其是最近的侧通道攻击等。

此外, CPU、内存和 I/O 在虚拟化性能方面会产生不可忽略的开销。为此,物理服务器租赁已成为公共云中新兴的服务类型,物理服务器租赁为用户提供了强大的隔离性、对硬件的全面和直接访问以及更可预测的性能。

但是物理服务器租赁的方式也有其缺点它只能针对单租户,且不具备可扩展性、成本又高,适应性弱。当前物理服务器租赁只能将整个物理服务器租给单个用户,并且在租用服务器后用户无法方便的替换镜像,存储等云计算的基本服务。

在本文中,阿里云提出了一种创新的高密度多租户共享弹性裸金属服务器的设计,也就是阿里云神龙弹性裸金属架构(论文中为了满足评审的要求称为BM-Hive)。在阿里云神龙高密裸金属架构中,每个裸金属实例都运行在一个单独设计的计算子板上,该计算子板带有专有的 CPU 和内存模块。BM-Hive为每个计算子板配备了硬件/软件混合 virtio I/O 系统,使客户实例能够直接访问阿里云网络和存储服务。

BM-Hive 可在单个物理服务器中托管多达 16 个裸金属实例,显著提高裸金属服务器的实例密度。此外,BM-Hive 在硬件级别严格隔离每个裸金属实例,以提高安全性和隔离性。神龙弹性裸金属高密方案已经在阿里云的公共云部署。它目前同时为百万级用户提供服务。

介绍

物理服务器租赁的出现是为了满足对性能或者安全性有非常苛刻要求的客户。但对于单租户,低密度的物理服务器却存在成本高的问题。公共云上面的大多数客户是中小规格客户。

阿里云统计云服务上面的各个规格的VM的vCPU数量,对于需求小于32Core 的VM占到了95%以上。而现有物理服务器的CPU规格最小也有64Core,最高达到128Core。这些中小客户别无选择,要么放弃物理机级别的性能与安全性,采用传统虚拟化的VM,要么租赁整个服务器,而放弃性价比。这也是不具备弹性的裸金属公共云尚未成为主流的重要原因之一。

为此,阿里云设计了神龙高密度弹性裸金属架构:一个可扩展的,支持多租户的弹性裸金属硬件虚拟化方案。该裸金属框架(BM-Hive)既能保证CPU和内存拥有本地物理机运行时的性能,又实现IO设备的硬件虚拟化,同时具备云计算的分钟级计费、弹性扩容等最重要功能。

BM-Hive由三个模块组成计算子板,IO-BondBM-hypervisor。计算子板包含了可替代的裸金属实例的CPU与内存;BM-hypervisor运行在阿里云的基础物理服务器上,它可以托管最大16个计算子板;IO-Bond是连接计算子板与BM-Hypervisor的纽带,作者在后续章节将会详细介绍这三个部分。

采用BM-Hive的方案显著优点:

  • 经济实惠:采用了高达16个裸金属实例共享一个物理服务器,能显著降低客户成本

  • 单线程性能优异:裸金属实例可以自由采用高主频CPU,比如i7 4.2GHz

  • 兼容当前运维体系:客户可以像使用其他非裸金属实例一样操作裸金属实例,包括制作镜像、更换系统盘、添加/删除云盘等云计算特有便捷操作

对比当前公共云上多种不同实例优劣如下:

神龙裸金属架构是软硬一体化的虚拟化架构

神龙裸金属软硬一体虚拟化架构是对现有虚拟化的一个自然演进与升级换代。入下图所示,在整体架构上面,BM-Hive与传统虚拟化方案在CPU/内存方面、运维体系接入、多租户复用等方面非常相近。神龙裸金属开发了一套适合裸金属共享方案的软硬件一体BM-Hypervisor来处理计算子板的IO子系统。

1、当前虚拟化主要面临如下问题:

在详细探讨神龙裸金属架构之前,我们先来看看当前云计算虚拟化面临的一些问题。而神龙裸金属软硬一体虚拟化方案很好的解决了这些问题。

  • 虚拟化开销无法满足高性能需求

  • 虚拟化性能存在无法控制的抖动,从而无法满足对性能极致要求的场景

  • 虚拟化的安全隔离性达不到特定行业要求

  • 嵌套虚拟化的性能无法满足客户需求

1)虚拟化开销:

当前虚拟化的基本原理决定了CPU必须要在vCPU环境与物理CPU环境下来回切换(VM-Exit)。频繁的切换会导致严重的VM性能问题。比如一个典型的直通设备中断,在虚拟化下处理流程就非常长。

KVM hypervisor下面一个虚拟化切换至少需要几千个时钟周期,开销有可能会达到~10us。一般情况下VMExit(比如中断)达到5K左右,VM的性能将开始受影响。还有各种原因导致的VMExit,比如IPI,EPT violation,MMIO访问,等等。

阿里云采样了30万个虚拟化实例的运行数据,发现每秒1万次以上VM-Exit的实例达到3.82%,甚至还有不少每秒超过10万切换的实例。

神龙裸金属BM-Hive由于采用了计算子板直接运行实例,避免了任何传统CPU/内存虚拟化的开销。

2)虚拟化的性能抖动:

由于客户实例与系统服务都共享同一个CPU,这就导致了当宿主机系统服务繁忙时可能影响到客户实例的运行。阿里云采样了2万个实例在运行中CPU被抢占的情况,发现在共享性实例上,有200个以上的实例,在运行中被系统占用的CPU利用率超过2%。

也就是说这200个实例的实际CPU性能是98%而不是100%,同样的情况在独享型的实例也有发生。毕竟中断等处理是一定需要CPU在宿主机系统中才能处理的。而在BM-Hive下的实例,系统服务在BM-hypervisor下运行,与计算子板的CPU为不同的物理CPU,所以神龙裸金属实例根本就不存在任何抢占计算资源的问题。

3)虚拟化的安全性:

这个不是一个新问题,我们都承认安全级别从低到高的形态:进程->容器->虚拟化->物理机。今年发生的侧信道攻击等都说明,虚拟化下实例并非牢不可破。而神龙裸金属实例运行在独立的计算子板之上,是天然的物理隔离,不存在这些安全问题。

4)嵌套虚拟化性能问题:

一般来说KVM嵌套虚拟化的性能损失在20%以上,尤其是遇到一些IO操作更频繁的场景。因此当前云计算实例上很难在满足客户二次虚拟化的要求。而神龙裸金属实例却可以运行客户在实例内部再次运行他们自己喜欢的各种硬件加速的虚拟化方案。

神龙裸金属架构系统设计

为了解决传统虚拟的诸多问题,BM-Hive的设计考虑目标为:

  • 多租户

  • 物理机隔离安全性

  • 接入现有运维体系

  • 物理机性能

  • 低成本

图3显示了BM-Hive的整体系统架构。阿里云把神龙裸金属实例称为:BM-guest。把基于传统虚拟化的实例称为:VM-guest。每个裸机服务器由底座和多个计算子板构成。该底座本质上是一个简化的基于 Xeon 的服务器。

每个计算子板都有一个PCIe 扩展板连接到底座。其主要组件包括 CPU、内存、PCIe 总线和 IO-Bond。IO-Bond 是用FPGA实现的硬件接口。它连接底座和计算子板的PCIe总线,功能类似与PCIe的透明桥功能。

IO-Bond在计算子板的PCIe总线上,它模拟多个virtio设备并由标准virtio内核驱动程序支持。IO-Bond充当bm-guest/virtio前端与后端BM-Hypervisor的桥梁。目前,IO-Bond 支持 virtio 设备网络和存储(块设备)。它可以很容易地扩展支持其他virtio设备。

实验数据分析

我将对BM-Hive的CPU/内存系统的性能与传统虚拟化做对比,同时也对网络、存储等IO子系统做数据性能的分析。最后会提供神龙裸金属实例在真实业务场景下的性能表现。

1、神龙裸金属实例的CPU与内存性能分析

裸金属实例的本地CPU和内存性能对用户至关重要。图7和8呈现了相同配置下,裸金属实例与虚拟化实例在运行SPEC CINT 2006测量的CPU性能差异,用STREAM工具测试内存性能的差距。

上图数据做了归一化的处理,可以看到裸金属实例的CPU性能与物理机几乎没有区别,甚至有些项还优于物理机,而虚拟化实例下CPU性能一般有0-4%的损失。内存方面也类似,虚拟化实例的内存带宽是裸金属实例的98%左右。

2、IO子系统的性能分析

BM-guest和VM-guest均基于virtio的I/O路径接入阿里云VPC网络与云存储系统,他们的区别在于BM-Hive的virtio具有硬件-软件混合设计。在本节中,阿里云将BM-Guest与VM-guest的网络与存储子系统做性能对比。

阿里云两种实例产品定义的网络访问最大发包速限定于4M PPS,带宽最大为 10Gbit/s,存储限制为 25 IOPS和300MBps。因此,测试的目的在于两种实例是否都能达到设计目标。

PPS:阿里云看到BM-Guest/VM-guest都能达到设计的4M UDP PPS目标,但是VM-Guest更加平顺,这个可能是由于BM-guest经过的软硬件接口的路径要比VM-guest长得多导致。

Latency:在延时方面,通过三种测试工具得到VM-guest的网络延时要稍优于同类型的BM-Guest,差距不大。

Storage IO:存储IO的性能上面BM-Guest则要全面优于VM-guest。随机读写的IO访问延时方面BM-guest优于VM-guest,而在长尾数据方面BM-guest数据优于VM-guest 50%以上。

3、客户典型应用方面

通过对真实应用场景的对比,阿里云更能发现裸金属实例的优势。比如他们对比了两种实例在分别在网络服务器nginx,数据库mariaDB,以及内存型数据库Redis等数据差异。

Nginx:大多数客户选用的网站服务类型。BM-guest的每秒请求数与每请求处理时间等方面都要优于VM-guest 50%以上

MariaDB:MariaDB是一个标准的测试数据类型,集成在sysbench之中。BM-guest的读取性能超过VM-guest15%以上,而在写性能上更是超出50%以上

Redis:是内存型数据结构读取数据库。Redis被广泛应用于提高服务器性能与服务能力。BM-Guest在Redis测试表现也全面优于VM-guest。如图15与图16。此处不再累述。

一些思考

IO-Bond的性能优化:IO-Bond处于IO系统的关键性能路径之上。当前由FPGA实现。在将来阿里云可以通过ASIC芯片的方式实现,从而进一步提升网络与存储、性能

热迁移与热升级:热升级在裸金属实例上面是可以实现的。阿里云在升级底座BM-Hypervisor的同时可以做到对客户实例无感知。阿里云在2019年ASPLOS的论文中就有详细介绍实例热升级的技术《Fast and Scalable VMM Live Upgrade in Large Cloud Infrastructure》。热迁移理论上,裸金属实例也可以实现,阿里云做过一些尝试。目前也正在开发中。

SGX支持:SGX的支持在裸金属实例上面没有任何问题。相反由于去掉了虚拟化的阻碍,SGX的支持更容易。

总结

作者介绍了神龙高密度裸金属云服务 BM-Hive 的设计、实施和测试数据。实践证明,作为行业下一代虚拟化的发展方向,神龙的软硬一体化方案在兼容现有虚拟化优点的前提下,全面提升了性能与安全性。

推荐阅读:Docker 概念很难理解?一文搞定 Docker 端口绑定DevOps 转型时如何安全融入?对企业产出有何影响?2019年 DevOps 最新现状研究报告解读 | 原力计划
十分钟上手 React+MirrorX,从此前端大神代码不再难懂 | 原力计划
第一批复工的人,都栽在了公司的厕所......
如何用Jupyter Notebook制作新冠病毒疫情追踪器?
比特币最主流,以太坊大跌,区块链技术“万金油”红利已结束 | 区块链开发者年度报告
真香,朕在看了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518832.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1分钟 搭建xxl-job任务调度中心

文章目录一、前提环境1. 安装java环境2. 安装maven打包环境3. docker安装mysql二、搭建xxl-job 服务端(源码)三、搭建xxl-job 服务端(docker)四、常见异常解决方案4.1. docker中mysql容器的ip怎样获取?4.2. xxl-job 连…

Schedulerx2.0分布式计算原理最佳实践

1. 前言 Schedulerx2.0的客户端提供分布式执行、多种任务类型、统一日志等框架,用户只要依赖schedulerx-worker这个jar包,通过schedulerx2.0提供的编程模型,简单几行代码就能实现一套高可靠可运维的分布式执行引擎。 这篇文章重点是介绍基于…

一个优秀的可定制化Flutter相册组件,看这一篇就够了

背景 在做图片、视频相关功能的时候,相册是一个绕不开的话题,因为大家基本都有从相册获取图片或者视频的需求。最直接的方式是调用系统相册接口,基本功能是满足的,一些高级功能就不行了,例如自定义UI、多选图片等。 …

牛客网SQL篇刷题篇(24-31)

https://www.nowcoder.com/ta/sql 1.NOT IN NOT IN运算符允许从结果集中排除特定值的列表。 2.sql子查询 https://www.cnblogs.com/fzxey/p/10896244.html#where%E5%AD%90%E6%9F%A5%E8%AF%A2 子查询就是将一个查询(子查询)的结果作为另一个查询&…

最近看Kafka源码,着实被它的客户端缓冲池技术优雅到了

作者 | 犀牛饲养员责编 | 徐威龙封图| CSDN 下载于视觉中国最近看kafka源码,着实被它的客户端缓冲池技术优雅到了。忍不住要写篇文章赞美一下(哈哈)。注:本文用到的源码来自kafka2.2.2版本。背景当我们应用程序调用kafka客户端 pr…

相信坚持的力量,我的程序员打怪升级之路

我是来自阿里云-云通信技术团队的玄照,2015年底进入阿里,刚渡过三年醇,正迈向五年陈的路上。个人兴趣爱好广泛,静的、动的,音乐、游戏、电影、运动都比较喜欢。 玄照,阿里云高级技术专家 程序生涯启航 第…

牛客网SQL篇刷题篇(32-37)

https://www.nowcoder.com/ta/sql 1.sql group_contact()、concat()、concat_ws函数 https://blog.csdn.net/qq_36250202/article/details/99308824 eg:将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分 SELECT CONCAT(las…

支付宝工程师如何搞定关系数据库的“大脑”——查询优化器

前言 查询优化器是关系数据库系统的核心模块,是数据库内核开发的重点和难点,也是衡量整个数据库系统成熟度的“试金石”。 查询优化理论诞生距今已有四十来年,学术界和工业界其实已经形成了一套比较完善的查询优化框架(System-R 的 Bottom-…

SpringBoot2 集成 xxl-job任务调度中心

接上一篇: 搭建xxl-job任务调度中心 https://gblfy.blog.csdn.net/article/details/113809843 文章目录一、SpringBoot 配置1. maven依赖2. 执行器配置 application.yml3. 执行器组件配置4. 部署执行器项目二、xxl-job任务调度中心2.1. 执行器管理2.2. 任务管理三、…

HelloWorld

HelloWorld 创建一个Java文件 文件后缀名为.javaHello.java 编写代码 public class Hello{public static void main(String[] args){System.out.print("Hello, world!");} }编译java文件 javac Hello.java会多出一个Hello.class 文件 运行class文件 java Hell…

运行Java程序时 Tomcat出错 显示端口被占用

解决方法:命令提示符(管理员) 输入netstat -ano | findstr 8080 检查8080端口有哪些进程 输入taskkill -pid 11728 -f 关闭11728的进程

从开源小白到 Apache Member,我的成长之路

我们走过的每一步路,都会留下印记,越坚实,越清晰。 近日,Apache 软件基金会(ASF)官方 Blog 宣布全球新增 40 位 Apache Member,张乎兴有幸成为其中一位。 目前,全球共有771位 ASF …

当你打开天猫的那一刻,推荐系统做了哪些工作?

当年打开天猫的那一刻,它为你完成了华丽的变身,成为世上独一无二的“天猫”,这就是智能推荐的力量。今天,来自阿里巴巴搜索推荐事业部的算法工程师陈启伟为你介绍天猫如何玩转首页个性化推荐,揭开搜索推荐的神秘面纱。…

百万人学AI:CSDN重磅共建人工智能技术新生态

站在AI发展的新十年起点上,CSDN将发挥开发者优势,与中国AI各行业和企业共建“百万人学AI”新技术生态。作者 | CSDN新媒体事业部8年前,现图灵奖得主Hinton团队在ImageNet竞赛中首次使用深度学习完胜Google等其它团队,顿时让工业界…

牛客网SQL篇刷题篇(38-47)

1.视图:视图是可视化的表。 视图的作用: 第一点:使用视图,可以定制用户数据,聚焦特定的数据。 解释: 在实际过程中,公司有不同角色的工作人员,我们以销售公司为例的话&#xff0…

SpringBoot2 集成 xxl-job任务调度中心_参数传递

文章目录一、xxl-job任务调度中心1. 调度中心创建任务2. 调度中心创建执行器二、执行器任务编码2.1. 单参数2.2. 多参数三、调度中心参数传递测试3.1. 单个参数传递3.2. 多个参数传递前提:执行器和xxl-job任务调度中心启动完毕 一、xxl-job任务调度中心 1. 调度中心…

Java-用IDEA创建Java项目

1. 创建项目 2. 创建空项目 3. 输入项目名 4.配置JDK 点击Project Structure 配置JDK 点击Apply->OK 5. 新建模块 https://www.bilibili.com/video/BV12J41137hu?p21&spm_id_frompageDriver

DevOps:从「蒸汽时代」到「高铁时代」,SUNMI DevOps转型之路 | 原力计划

作者 | 文振熙、刘文沣责编 | 徐威龙封图| CSDN 下载于视觉中国商米科技成立于 2013 年,总部位于上海市杨浦区创智天地,是一家具有产品创新基因和互联网基因的公司。商米在短时间内迅速成长为一家近1000人的企业,产品研发人数占比一度超过70%…

SpringBoot2 集成 xxl-job任务调度中心_路由策略

文章目录一、简述二、故障转移演示2.1. 启动2个执行器2.2. 添加执行器ip2.3. 故障转移策略2.4. 启动任务2.5. 模拟8081执行器宕机2.6. 结论三、轮训策略演示3.1. 启动2个执行器3.2. 添加执行器ip3.3. 轮训策略3.4. 启动任务3.5. 日志分析3.6. 故障转移3.7. 重新启动8082执行器四…

Uniapp组件之间传参

1.父组件内引入子组件&#xff0c;并且子组件使用父组件内的数据 将子组件引入到父组件&#xff1a; <uni-pop :opts"defaultOptions"></uni-pop> import uniPop from /components/uniPop/uniPop.vue 子组件使用父组件内的数据&#xff1a; 2------创建…