3.3.2 适用场景
公共云服务提供商推出弹性裸金属服务器,很显然是作为虚拟机云服务器的有效补充,而不是和自家虚拟机云服务器形成竞争关系。那么弹性裸金属服务器适合哪些场景呢?
混合云和第三方虚拟化软件部署
伴随着公共云的高速发展,通过混合云打通用户线下专有云和线上公共云资源的需求日趋强烈。OpenStack 和 VMware 等 IaaS Stack 在公共云上部署,同时管理用户线上和线下 IaaS 资源,可以看到,VMware Cloud on Alibaba Cloud 就属于此种混合云业务应用场景。
而 OpenStack 和 VMware Cloud 等 IaaS Stack 在公共云上部署,最为关键的就是要求公共云提供 CPU 虚拟化的能力,否则在普通虚拟机中部署嵌套虚拟化技术,其性能完全无法接受。具体到 Intel x86 CPU 体系,则要求公共云平台对外提供计算资源的完整虚拟化特性(Intel VT-x 和 VT-d 等硬件虚拟化技术),使得 VMware ESXi、KVM、 Xen、Hyper-V 等虚拟化平台和技术能够平滑上云。而弹性裸金属服务器就能满足这个要求。
高隔离容器部署
容器技术具备轻量敏捷等优势,正在成为 DevOps 主流技术。相对于公共云 VM 部署容器,使用弹性裸金属服务器部署容器具备零虚拟化开销等性能优势,如图 3-17 所示。
虚拟机物理机软件Hypervisor (和VM部署于同一台服务器) 神龙Hypervisor (独立硬件部署) 用户操作系统层Hypervisor层高速低时延伸硬件互联
图3-17 高隔离容器部署
同时我们注意到 Clear Container、RunV,以及 Kata Container 等具备高隔离高安全特性的新型容器技术,依赖 CPU 完整虚拟化特性(比如 Intel VT-x)。此种高隔离高安全的容器技术只可能部署在弹性裸金属服务器上。
高质量计算服务
高质量计算服务指零资源争抢、零虚拟化开销和高隔离高安全。
虚拟化技术在提高数据中心资源利用率的同时,引入了资源争抢等业务难题。 多个 VM 运行在一台物理服务器上,CPU 核、L1/L2/LLC 缓存、内存带宽等CPU 和内存子系统资源通过虚拟化技术抽象和切分,同时提供给多个 VM 使用。传统的虚拟化技术很难根本解决各VM 间资源的争抢问题。而弹性裸金属服务器不存在此问题。
高速低时延 RDMA 网络支持场景
RDMA 网络在超低时延和减轻 CPU 负载等方面优势明显,但是在网络虚拟化支持方面的短板明显 ;而公共云网络部署的关键是通过网络虚拟化实现网络资源的租户隔离。弹性裸金属服务器在支持原生 ROCE 和 IB RDMA 网络方面,具有天然优势。
因此可以看到各家云服务提供商均以裸金属服务器支持 RDMA 网络,以此部署满足HPC 和异构计算的高速低时延互联需求。
RISC CPU 支持
Intel x86 体系结构对 CPU 虚拟化技术等软硬件的支持最为完善,加上 Intel Xeon x86 处理器在服务器市场的垄断地位,主流公共云 IaaS 虚拟化技术均基于 Intel Xeon x86。
但是必须看到,对于特定细分市场,RISC CPU 仍然具备相当优势。比如 Power ISA CPU 在金融保险等市场的优势地位,以及 ARMv8 ISA 在新兴服务器市场崭露头角。如何支持 Power 和 ARMv8 等 RISC 服务器,是公共云服务提供商必须回答的问题。
使用弹性裸金属服务器无须 CPU 和内存虚拟化技术的特别适配,就能够快速将 Power 和ARMv8 等处理器在公共云上线部署。
GPU 性能无损输出
GPU 产品对虚拟化技术支持有限,通过传统虚拟机方式输出 GPU 计算性能,会有严重的性能下降,而弹性裸金属服务器可做到 GPU 性能无损输出。
3.3.3 弹性裸金属技术
1. 弹性裸金属技术背景
2003 年,Xen 在SOSP 发表Xen and the Art of Virtualization,拉开了x86 平台虚拟化技术的大幕。2006 年,AWS 发布EC2(Elastic Compute Cloud),同年发布S3 (Simple Storage Service),拉开了公共云服务的大幕。EC2 的核心正是基于Xen 虚拟化技术。虚拟化技术赋予了EC2 核心产品价值——弹性,同时虚拟化技术给网络虚拟化、存储虚拟化,和管控系统提供了业务部署点。
第一代虚拟化技术的特征是:Xen/KVM + 软件network vSwitch + 软件storage initiator + 管控等All on Xeon。这代技术的痛点和思考 ,如图3-18 所示。
传统KVM 虚拟化系统导致CPU 计算特性损失
众所周知,IaaS 公共云技术的核心是Intel 至强处理器VT 等硬件辅助虚拟化技术(Hardware-assisted virtualization),配合主流虚拟化系统软件(KVM/Xen/VMware ESXi 等),实现了IaaS 弹性计算;客户则是通过ECS(或者 AWS EC2) 购买虚拟机(VM)形式的计算资源。
图3-18 第一代虚拟化技术的痛点和思考
得益于高度成熟的虚拟化技术,VM 形式的计算资源“几乎”等价于客户线下的物理服务器资源,但是“几乎”并不是“ 完全”。一个典型的案例就是 Intel 至强处 理器的VT 硬件辅助虚拟化能力会被公共云服务提供商的虚拟化系统“消费掉”,客户无法在公共云VM 实例中再次部署虚拟化系统,致使传统OpenStack 和VMware based workload 无法在公共云部署。
客户希望用一套OpenStack/VMware 统一管理公共云线上资源和专有云线下资源,同时在控制面和数据面打通线上线下资源,在兼顾专有云数据安全、法律合规的基础上,充分利用公共云计算资源的弹性能力,但是由于Intel 至强处理器VT 硬件辅助虚拟化能力“被消费”,使得此种混合云技术很难在公共云实现。云原生安全容器创新依赖Intel VT 硬件辅助虚拟化能力输出,这是传统虚拟化无法解决的问题。
传统KVM 虚拟化系统导致资源争抢不可避免
以传统的KVM 虚拟化系统为例,双路Skylake(96 个HT)计算资源的虚拟化典型部署情况是:有8 个HT 部署网络虚拟化vSwitch 和存储虚拟化,对外售卖88 个HT 作为vCPU 计算资源。我们需要注意到,对外售卖的88HT vCPU 计算资源和8HT 网络/ 存储虚拟化是部署在同一组Skylake CPU 上的,那么如下共享资源争抢是不可避免的。
CPU DDR 带宽、LLC 等共享资源的争抢。在机头网络带宽迅速提升的当下, DDR 带宽、LLC 等资源争抢现象愈发突出。
半虚拟化(Para-virtualized) I/O 设备模型等资源争抢引入售卖CPU 抖动和售卖I/O 抖动。
存储和网络等I/O 内部层级化HQoS 难于实施。一般而言,层级化HQoS 是解决资源争抢的有效手段,电信级网络设备一般会部署HQoS 进行资源调度, 而HQoS 的典型部署方法需要通过芯片实现。
传统KVM 虚拟化系统导致I/O 性能瓶颈
传统KVM 虚拟化系统由(计算虚拟化)QEMU-KVM + (网络虚拟化)DPDK based vSwitch +( 存储虚拟化)SPDK based I/O initiator 构成。
在Intel 引入VT 硬件虚拟化支持后,配合KVM、Xen 等虚拟化系统软件,由CPU 指令处理的数据面和KVM 等虚拟化系统软件形成了控制面及异常处理路径,此种软硬件协同设计既实现了CPU 和内存虚拟化的数据路径的最小开销,又保留了KVM 控制路径和异常处理路径的高度灵活性。
同处于数据路径的存储虚拟化和网络虚拟化虽然通过DPDK 和SPDK 等技术接近了软件优化的技术极限,但是仍然无法和芯片的加速性能媲美。特别是在网络吞吐向100GbE 演进的过程中,交换网络的带宽能力和Intel 至强处理器的处理能力间的差距逐渐拉大,在传统KVM 虚拟化系统下,通过DPDK、SPDK 等纯软件进行I/O 性能优化的瓶颈日渐凸显。
2. 弹性裸金属技术实现
第一代虚拟化技术的业务痛点,催生了第二代虚拟化技术的产生,弹性裸金属产品也应运而生。那么第二代虚拟化技术具备哪些特征呢?
全部I/O 设备通过VT-d 设备直通模式进入VM,以此减少para-virtualization I/O 半虚拟化开销。
随着VT-d 设备直通的引入,网络虚拟化和存储虚拟化需要一个新的业务部署点。
VT-d 设备直通引入后,SR-IOV 等技术却无法达到和传统QEMU PV 设备一样的灵活性,I/O 硬件虚拟化催生Intel scalable IOV 的业务诉求。
随着存储虚拟化和网络虚拟化新的业务部署点的产生,这个业务部署点很显然需要针对计算、网络、存储、安全等IaaS 核心业务部署定制化芯片加速。
同时支持传统VM、弹性裸金属服务器、安全容器等IaaS 最新业务诉求。
简而言之,Hypervisor 的主要组件全部下沉进入一个定制计算节点,该定制计算节点完成I/O 设备虚拟化、网络虚拟化、存储虚拟化和管控部署,以及安全特性部署等。
而主机侧,针对公共云的需求,从计算和内存原来的QUME + KVM 方式,经过高度定制和瘦身后,降低了主机资源占用并提升计算服务质量,演化到了裸金属架构。
第二代虚拟化技术使弹性裸金属的产品落地成为可能。阿里云在2017 年10 月举行的杭州云栖大会上正式发布弹性裸金属产品,同年11 月,AWS reinvent 发布EC 2 版本弹性裸金属产品。中美公共云服务提供商可以说在弹性裸金属的产品定义、产品适用场景和技术上殊途同归。从3.3.1 节和3.3.2 节中,我们可以看到弹性裸金属的核心产品技术逻辑:通过技术创新,使普通物理服务器具备虚拟机的弹性和使用体验。
正是有了这个逻辑,我们可以推演出技术创新的突破点:通过软硬一体化的技术手段,让普通物理服务器能够无缝接入云平台的管控系统、VPC 云网络和EBS 云盘。
VPC 和EBS 云盘接入
我们知道在虚拟化技术中,虚拟机是通过Virtio 实现网络和存储I/O 设备的;同时,我们注意到,Virtio 这个半虚拟化设备模型实际上是严格按照“真实”PCIe 设备规范的定义而实现的I/O 设备。也就是说,Virtio 半虚拟化设备完全可以通过芯片实现。90
在通过芯片实现Virtio 的时候,考虑到VPC 和EBS 云盘实现的复杂
在通过芯片实现Virtio 的时候,考虑到VPC 和EBS 云盘实现的复杂度,我们采用了新的模式:让芯片透传PCIe TLP 包到可编程处理器,然后通过可编程处理器复用QEMU 已有的成熟的Virtio 后端代码。此种模式能够最大限度地保持既有的虚拟化架构,做到云平台管控系统、VPC 系统、EBS 云盘系统的“零修改”。
实现大量弹性网卡(ENI)和EBS 云盘设备接入
VT-x/KVM 虚拟化技术具有天然技术优势,支持大量网络和存储设备。而弹性裸金属产品的核心出发点就是要兼具虚拟机和传统物理机的优点。虚拟机对大量网络设备和存储设备的支持,必须在弹性裸金属产品中予以实现。
在多种规格的网卡和存储PCIe I/O 设备接入时,根据PCIe 规范有两个方法:1) 通过多级PCIe switch 扩展,实现大量PCIe switch downstream port,然后每个PCIe switch downstream port 挂载一个PCIe I/O 设备;2)通过PCIe SR-IOV 技术,支持大量PCIe virtual function(VF)设备。
进一步对比虚拟机I/O 设备,我们可以看到设备的热插拔、Guest OS 的零侵入是公共云IaaS 产品的刚需。只有通过多级PCIe switch 扩展模式,才能通过PCIe native hotplug 技术标准,实现上述和虚拟机一致的设备热插拔和Guest OS 零侵入。产品需求明确后,我们创新性地通过芯片RTL 实现了全球第一个片上多级PCIe switch 扩展,当前最多能够支持63 个设备,以此实现大数量规格的网络ENI 和存储EBS 云盘PCIe I/O 设备接入;同时由于支持原生PCIe 原生热插拔能力,保证了Guest OS 的零侵入,以及客户在Open API 和控制台等方面和虚拟机一致的使用体验。
3. X-Dragon Hypervisor 基于神龙的软硬一体的虚拟化技术
在阿里云神龙硬件平台下,虚拟化架构也做了相应的升级,使计算虚拟化部分的架构更加清晰简捷,让虚拟机能提供接近物理机的性能。如图3-19 所示,神龙虚拟化架构的主要特点是:I/O 链路从传统的通过软件实现转变为通过硬件和直通设备实现;存储虚拟化、网络虚拟化都在MOC 卡上实现;同时将管控系统、监控程序等都下沉到MOC 卡上。在提供计算服务的物理机上,只运行自己裁剪的Linux 操作系统和轻量化的虚拟机监控器。
神龙虚拟化架构比起传统的KVM 虚拟化的关键优化技术点简要描述如下。
1)自研虚拟CPU 调度器——VOS
VOS(VM-Oriented Scheduler)是面向虚拟机的调度器,是阿里云在神龙平台上自研的调度器,减少了虚拟CPU 调度开销,同时将其他控制面的作业调度给虚拟CPU 带来的争抢下降一个数量级研发的更加稳定和高效的计算虚拟化产品。
图3-20 所示,VOS 调度器实现的是非公平调度(与内核中的CFS 调度器不同),让虚拟CPU 线程具有更高执行优先级,保证客户购买的虚拟机的计算性能,而控制面的作业调度执行被安排在预先设定的一个较低优先级和预设时间片中投机执行,而且控制面的作业是可以被内核态抢占的。
售卖给用户的产品阿里云系统软件栈计算服务轻量化VMM TinyOS 盘古(存储虚拟化) 虚拟交换机(网络虚拟化) API、监控(控制程序) 硬件驱动程序虚拟机实例虚拟机实例虚拟机实例容器实例1.得益于其他组件的下沉, 系统软件变得非常薄。2.从开销和性能角度看, 都非常接近物理机。3.支持容器实例。硬件资源(网卡、磁盘) 硬件资源(CPU,缓存,内存……) PCIe MOC I/O 服务(采用硬件实现, 旁路系软件栈) 阿里云硬件系统
图3-19 神龙虚拟化架构
通过VOS 调度器,虚拟CPU 的调度延迟低到毫秒级;通过ping flood 来测试网络ping 的延时抖动,抖动下降到了百万分之一左右(即ping 一百万个报文只遇到1 个报文延迟的比例比均值明显偏大),抖动比之前的架构下降了两个数量级。在物理机上执行的控制面的作业包括:虚拟机生命周期管理、QEMU 控制线程、写日志、监控执行、包括热升级/ 热迁移在内的运维操作,在VOS 的管理下,正在运行的虚拟CPU 的干扰被控制在一个非常低的水平,虚拟机的计算稳定性大幅提升。
2)内存优化:内存分配器VMEM 与用户态QEMU 内存瘦身
内存分配器VMEM 是阿里云研发的用于虚拟机内存分配的分配器,可以大幅减少内核维护的内存页表等开销(开销从以前的1.5% 左右下降到0.1% 左右),支持1GB 的大页进一步减少EPT 开销,实现了通过vMCE 对硬件错误的内存页进行隔离。
在内存方面,我们通过QEMU 对其进行瘦身,将单个虚拟机的QEMU 进程内存开销降低到5MB 以内,通过全新设计的用户态内存分配器避免了内存碎片,同时对不常用的内存资源进行延迟分配。
通过这两种内存优化手段,神龙虚拟化的架构比传统KVM 虚拟化节省了约10% 的内存。
3)虚拟化运行加速
通过硬件加速虚拟机中的HLT 和MWAIT 指令,使其唤醒延迟与物理机几乎一样。同时将定时器进行硬件虚拟化,在虚拟机中访问定时器不会再触发VMEXIT, 从而提升虚拟机性能。通过这些优化,进程调度性能得到了较大提高,图3-21 的调度延迟实测数据展示的是在某次测试中,调度两百万个进程,并统计每次调度的延迟的结果。可以看到,延迟有15% 的下降。图中的g5.4xlarge 实例是之前的KVM 架构的ECS 虚拟机实例规格,g6.4xlarge 是神龙硬件平台下经过优化的ECS 虚拟机实例规格。
4)极速启动
为了让虚拟机加速启动,我们对神龙虚拟化架构也做了很多优化。首先是资源的快速分配,包括实现多线程的初始化、虚拟机内存页分配时的批处理化。同时对虚拟机依赖的固件进行裁剪、重构、优化,使虚拟机实现毫秒级加载。我们还对一些特殊的应用场景应用了内部称为vmfork 的技术,让虚拟机能实现秒级的快速复制。
5)物理机CPU 全供给虚拟机
在传统的KVM 虚拟化架构下,宿主机的CPU 资源是不可能全部供给虚拟机使用的,一般还要预留CPU 核,用于网络虚拟化软件、存储虚拟化软件、管控系统、监控脚本等的计算资源开销。在神龙架构下,网络虚拟化和存储虚拟化都通过硬件虚拟化的方式下沉到一张MOC 卡上,同时管控系统和绝大部分监控脚本都下沉到MOC 卡上运行,这样物理机CPU 资源就可以全部通过虚拟化的方式分配给虚拟机使用。经过评估,通过下沉这部分CPU 开销到MOC 卡上,物理机的CPU 资源利用率能提高10% 左右。