云栖社区2017在线技能 峰会上 ,来自阿里云弹性盘算 团队的子团分享了红包背后假造 化技能 。他起首 比力 了容器技能 和假造 化技能 ,然后从CPU假造 化、内存假造 化 、IO假造 化三个方面先容 了假造 化关键技能 。他还分享了假造 化架构的优化探索,包罗 高性能网络方案、高性能云盘/本地 盘方案、高效热迁徙 技能 、假造 机CPU/内存热插拔技能 等。
以下内容根据直播视频整理而成 。
面对 的挑衅
从前 在阿里、天猫等用的比力 多的是容器技能 ,比如 LXC/Docker,从2015年开始将“双十一 ”的流量部分 迁徙 到了阿里云的假造 机上。容器技能 的特点是轻量,很轻易 到达 本地 物理机的性能 ,而假造 化技能 是跑在物理机上的假造 机上的,开销相对大一些,性能不如容器技能 ,但是安全性比力 高。
容器技能
容器技能 的大要 架构如上图所示 ,最下面是硬件平台,主流利用 的是Linux内核,内核上会有Container引擎 ,最上方会跑一些Container实例 。
假造 化技能
假造 化技能 和容器技能 最大的差别 是在假造 机和硬件平台之间会有一个假造 机监督 器,重要 用于将硬件抽象出来切分资源提供给假造 机,提供隔离和假造 化的功能 ,在监督 器上方则是一个个的假造 机。
要在阿里云的公有云上跑这些业务的话,必要 比力 强的隔离性、安全性,以是 选择假造 化技能 更加符合 。假造 化技能 概念是IBM很早提出的 ,然后VMware公司将假造 化技能 推向民用市场。在Intel发布VT-x后,假造 化技能 走向成熟,公有云的遍及 让假造 化技能 规模扩大 。
假造 化关键技能 CPU假造 化
CPU的假造 化从实现上可以分为三种:二进制翻译技能 ,其上风 在于跨平台假造 化也可以实现(纯软件实现,对硬件没有要求),其缺点是指令翻译过程开销会显着 增长 (由于 要用很多 指令才华 表明 一个其他平台的指令,和单词翻译雷同 ) ,性能不好 ,很少用在商用工程上,重要 用于研究机构做仿真;CPU半假造 化技能 ,比如 在X86呆板 上假造 X86的假造 机,大部分 的指令是不必要 翻译的,但由于 x86早期计划 题目 ,有些敏感之类实行 的非常 没办法被hypervisor捕获 , 导致无法举行 得当 模仿 , 以是 假造 机的内核必须要通过修改来适配假造 化环境 ;CPU硬件辅助假造 化技能 (VT-x),即每个假造 机在non-root模式下,看到的资源(比如 x86的ring布局 )和本地 的物理机是同等 的 ,理论上假造 机的内核不必要 颠末 任何的修改就可以或许 完全运行起来。
如今 的X86呆板 都是支持VT-x的。VT-x提供了两种模式:root模式,权限最高,可以访问全部 硬件 ,管理全部 假造 机;non-root模式,只拥有部分 特权 。右下角的这张图中,VMM跑在root模式下,其上是两个假造 机 ,从root模式进入non-root模式的过程叫VMEntry,从假造 机退出到VMM的过程是VMExit。
当必要 给假造 机实行 机遇 使它可以或许 运行内里 的操纵 体系 、进程 作业时,必要 从root模式进入non-root模式 ,在non-root模式运行和在物理机上运行是没有任何区别的。只有当必要 去访问一些硬件,做IO操纵 , 大概 收到停止 等环境 的时间 , 才必要 从假造 机退出到VMM 。VMEntry和VMExit决定了跑在呆板 上的假造 机的性能,这两个操纵 黑白 常耗时的 ,在当前主流的至强E5平台上约莫 必要 1 ~ 2微秒的时间。VMCS则记录 了用来决定两种模式间切换的控制数据。
内存假造 化
内存假造 化重要 面对 两方面的挑衅 :假造 机操纵 体系 总是盼望 可以或许 看到物理内存是从0开始的;假造 机总是盼望 看到在地点 空间里内存是连续 的 。但是硬件每每 并不能包管 上述两点。
如上图所示,在假造 机里看到的内存实际 上是Pseudo伪物理内存,实际 的物理内存分配是硬件管理的。
MMU假造 化技能
MMU是内存里CPU访问内存的一个重要 控制单位 ,它面对 的挑衅 是GuestTLB和Guest页表对硬件来讲并不总是有效 的,以是 MMU肯定 要颠末 假造 化 。MMU假造 化重要 有四种方式:Direct page table、Virtual TLB、Shadow page table(通过多层的page table来控制)和Extended page table(如今 最主流的)。
Extend Page Table
Extend Page Table的实现如上图所示,GuestCR3控制页表的信息 ,完成Guest的线性地点 到物理地点 的转换过程,再到物理机的物理地点 映射则通过EPT来完成。这种基于硬件的EPT技能 ,使得假造 机里的一次内存访问不必要 颠末 多次的页表访问就可以完成,在内存访问方面可以到达 和物理机相近的程度 。
IO假造 化
常见的IO假造 化重要 有三种方案:基于软件模仿 的方案 ,这种方案里, 停止 、DMA的访问都是通过软件实现的,长处 是可以模仿 任何硬件的模子 ,缺点是性能不会太好;半假造 化技能 ,重要 是为了办理 软件模仿 性能题目 ,比如 串口对性能要求不高可以采取 软件模仿 ,但是磁盘装备 、网卡装备 对性能要求高 ,主流方案是采取 半假造 化技能 ,前后端相互感知,通过SharedMemory控制哀求 的传输 ,两个装备 之间的关照 也是基于快速消息转达 ,性能很高;装备 直通模式,比如 PCIE的直通、网卡SROV直通 ,对性能更高的可以采取 此模式,可以到达 和物理机上直接利用 靠近 的性能,但是装备 和假造 机的耦合会对管理造成影响 。
假造 化架构优化假造 化平台升级及优化
早期的阿里云背景 采取 Xen的假造 化方案,之后切换到了KVM内里 。KVM可以或许 给假造 机提供更好的性能、稳固 性 , 更紧张 的是架构简便 ,可维护性高。
假造 化的团体 架构如上图所示,最上方是后羿管控体系 ,重要 负责假造 机生命周期的管理,下发假造 机启停 、关闭、烧毁 等操纵 到物理机,调用Libvirt接入API ,而Libvirt通过调用Qemu完成假造 机的操纵 。体系 利用 Virtio技能 做磁盘和IO装备 的假造 化,内核中利用 vhost-net/vhost-blk模块来加快 Virtio的性能。
新假造 化平台的特性
热升级架构:全部 组件热升级,由于开源代码有安全弊端 ,热升级技能 为性能保驾护航;
高可用性架构:高效、稳固 的热迁徙 ,CPU/内存的热插拔,vMCE支持 ,内核热补丁;
高性能网络架构:支持vhost-net,支持多队列假造 网卡,SRIOV硬件网卡假造 化;
高性能存储架构:支持dataplane加强 的高性能分布式存储,支持SPDK的超高性能用户态框架。
高性能网络方案
高性能网络是基于SRIOV和万兆网卡技能 来做的 。
高性能云盘/本地 盘方案
SSD云盘的数据可靠性非常高 ,对数据可靠性要求不黑白 常高的业务可以利用 高性能本地 盘。
高效热迁徙 技能
差别 集群中的数组集的负载出现不均衡 环境 时,必要 将负载特别 高的物理机上的假造 机迁徙 一部分 到负载低的物理机上,假如 没有热迁徙 技能 则只能采取 停机迁徙 的方式 ,用户可以感知到,但是热迁徙 技能 用户是感知不到的。别的 ,当物理机硬件出现故障时 ,比如 磁盘坏道变多 、可校正ECC较多,此时就可以把此物理机上的全部 假造 机热迁徙 到别的 物理机上,然后对故障呆板 举行 维护 。当呆板 上软件版本出现很大题目 没办法举行 热升级的时间 ,也可以利用 热迁徙 技能 举行 迁徙 升级。
假造 机CPU/内存热插拔技能
当升级装备 时,不想停机升级,则可利用 热插拔技能 举行 扩容。
软件层面tuning
在软件层面举行 了大量的优化:Pvtimer、Pvipi、Posted interrupt 、power 。
优化结果
上图反映的是一台假造 机在跑红包此中 某一个业务的时间 ,假造 机每秒vmexit次数的统计。蓝色代表优化前,赤色 代表优化后。从图上看出,优化退却 出次数显着 镌汰 ,假造 机性能越来越靠近 物理机表现 。