《CPU、内存、IO虚拟化关键技术及其优化探索》由会员分享,可在线阅读,更多相关《CPU、内存、IO虚拟化关键技术及其优化探索(15页珍藏版)》请在金锄头文库上搜索。
1、CPU、内存、IO 虚拟化关键技术及其优化探索本文章来自于阿里云云栖社区要: 云栖社区 2017 在线技术峰会上,来自阿里云弹性计算团队的子团分享了红包背后虚拟化技术。他从 CPU 虚拟化、内存虚拟化、IO 虚拟化三个方面介绍了虚拟化关键技术。他还分享了虚拟化架构的优化探索,包括高性能网络方案、高性能云盘/本地盘方案、高效热迁移技术、虚拟机 CPU/内存热插拔技术等。云栖社区 2017 在线技术峰会上,来自阿里云弹性计算团队的子团分享了红包背后虚拟化技术。他首先比较了容器技术和虚拟化技术,然后从 CPU 虚拟化、内存虚拟化、IO 虚拟化三个方面介绍了虚拟化关键技术。他还分享了虚拟化架构的优化探
2、索,包括高性能网络方案、高性能云盘/本地盘方案、高效热迁移技术、虚拟机 CPU/内存热插拔技术等。以下内容根据直播视频整理而成。视频回顾:点击进入(原文链接:https:/ 下载:点击进入面临的挑战 以前在阿里、天猫等用的比较多的是容器技术,比如 LXC/Docker,从 2015 年开始将“双十一” 的流量部分迁移到了阿里云的虚拟机上。容器技术的特点是轻量,很容易达到本地物理机的性能,而虚拟化技术是跑在物理机上的虚拟机上的,开销相对大一些,性能不如容器技术,但是安全性比较高。容器技术 容器技术的大体架构如上图所示,最下面是硬件平台,主流使用的是 Linux 内核,内核上会有 Containe
3、r 引擎,最上方会跑一些 Container 实例。虚拟化技术虚拟化技术和容器技术最大的差别是在虚拟机和硬件平台之间会有一个虚拟机监视器,主要用于将硬件抽象出来切分资源提供给虚拟机,提供隔离和虚拟化的功能,在监视器上方则是一个个的虚拟机。要在阿里云的公有云上跑这些业务的话,需要比较强的隔离性、安全性,所以选择虚拟化技术更加合适。虚拟化技术概念是 IBM 很早提出的,然后 VMware公司将虚拟化技术推向民用市场。在 Intel 发布 VT-x 后,虚拟化技术走向成熟,公有云的普及让虚拟化技术规模扩大。虚拟化关键技术CPU 虚拟化CPU 的虚拟化从实现上可以分为三种:二进制翻译技术,其优势在于跨
4、平台虚拟化也可以实现(纯软件实现,对硬件没有要求),其缺点是指令翻译过程开销会明显增加(因为要用很多指令才能解释一个其他平台的指令,和单词翻译类似),性能不好,很少用在商用工程上,主要用于研究机构做仿真;CPU 半虚拟化技术,比如在 X86 机器上虚拟 X86 的虚拟机,大部分的指令是不需要翻译的,但因为 x86 早期设计问题,有些敏感之类执行的异常没办法被 hypervisor捕获, 导致无法进行适当模拟, 所以虚拟机的内核必须要通过修改来适配虚拟化环境;CPU 硬件辅助虚拟化技术(VT-x),即每个虚拟机在 non-root 模式下,看到的资源(比如 x86 的 ring 结构)和本地的物
5、理机是一致的,理论上虚拟机的内核不需要经过任何的修改就能够完全运行起来。目前的 X86 机器都是支持 VT-x 的。VT-x 提供了两种模式:root 模式,权限最高,可以访问所有硬件,管理所有虚拟机;non-root 模式,只拥有部分特权。右下角的这张图中,VMM 跑在 root 模式下,其上是两个虚拟机,从 root 模式进入 non-root 模式的过程叫 VM Entry,从虚拟机退出到 VMM 的过程是VM Exit。 当需要给虚拟机执行机会使它能够运行里面的操作系统、进程作业时,需要从root 模式进入 non-root 模式,在 non-root 模式运行和在物理机上运行是没有任
6、何区别的。只有当需要去访问一些硬件,做 IO 操作, 或者收到中断等情况的时候, 才需要从虚拟机退出到 VMM。VM Entry 和 VM Exit 决定了跑在机器上的虚拟机的性能,这两个操作是非常耗时的,在当前主流的至强 E5 平台上大约需要 1 2 微秒的时间。VMCS 则记录了用来决定两种模式间切换的控制数据。内存虚拟化内存虚拟化主要面临两方面的挑战:虚拟机操作系统总是希望能够看到物理内存是从 0 开始的;虚拟机总是希望看到在地址空间里内存是连续的。但是硬件往往并不能保证上述两点。 如上图所示,在虚拟机里看到的内存实际上是 Pseudo 伪物理内存,实际的物理内存分配是硬件管理的。MMU
7、 虚拟化技术MMU 是内存里 CPU 访问内存的一个主要控制单元,它面临的挑战是Guest TLB 和 Guest 页表对硬件来讲并不总是有效的,所以 MMU 一定要经过虚拟化。MMU 虚拟化主要有四种方式: Direct page table、Virtual TLB、Shadow page table(通过多层的 page table 来控制)和 Extended page table(目前最主流的)。Extend Page Table Extend Page Table 的实现如上图所示,Guest CR3 控制页表的信息,完成Guest 的线性地址到物理地址的转换过程,再到物理机的物理地
8、址映射则通过EPT 来完成。这种基于硬件的 EPT 技术,使得虚拟机里的一次内存访问不需要经过多次的页表访问就可以完成,在内存访问方面可以达到和物理机相近的水平。IO 虚拟化 常见的 IO 虚拟化主要有三种方案:基于软件模拟的方案,这种方案里, 中断、DMA 的访问都是通过软件实现的,优点是可以模拟任何硬件的模型,缺点是性能不会太好;半虚拟化技术,主要是为了解决软件模拟性能问题,比如串口对性能要求不高可以采用软件模拟,但是磁盘设备、网卡设备对性能要求高,主流方案是采用半虚拟化技术,前后端相互感知,通过 Shared Memory 控制请求的传输,两个设备之间的通知也是基于快速消息传递,性能很高
9、;设备直通模式,比如 PCIE 的直通、网卡 SROV 直通,对性能更高的可以采用此模式,可以达到和物理机上直接使用接近的性能,但是设备和虚拟机的耦合会对管理造成影响。虚拟化架构优化虚拟化平台升级及优化 早期的阿里云后台采用 Xen 的虚拟化方案,之后切换到了 KVM 里面。KVM 能够给虚拟机提供更好的性能、稳定性, 更重要的是架构简洁,可维护性高。虚拟化的整体架构如上图所示,最上方是后羿管控系统,主要负责虚拟机生命周期的管理,下发虚拟机启停、关闭、销毁等操作到物理机,调用 Libvirt 接入API,而 Libvirt 通过调用 Qemu 完成虚拟机的操作。系统使用 Virtio 技术做磁
10、盘和 IO 设备的虚拟化,内核中使用 vhost-net/vhost-blk 模块来加速 Virtio 的性能。新虚拟化平台的特性 热升级架构:所有组件热升级,由于开源代码有安全漏洞,热升级技术为性能保驾护航; 高可用性架构:高效、稳定的热迁移,CPU/内存的热插拔, vMCE 支持,内核热补丁; 高性能网络架构:支持 vhost-net,支持多队列虚拟网卡,SRIOV 硬件网卡虚拟化; 高性能存储架构:支持 dataplane 增强的高性能分布式存储,支持 SPDK 的超高性能用户态框架。高性能网络方案高性能网络是基于 SRIOV 和万兆网卡技术来做的。高性能云盘/本地盘方案SSD 云盘的数
11、据可靠性非常高,对数据可靠性要求不是非常高的业务可以使用高性能本地盘。高效热迁移技术 不同集群中的数组集的负载出现不均衡情况时,需要将负载特别高的物理机上的虚拟机迁移一部分到负载低的物理机上,如果没有热迁移技术则只能采用停机迁移的方式,用户可以感知到,但是热迁移技术用户是感知不到的。另外,当物理机硬件出现故障时,比如磁盘坏道变多、可校正 ECC 较多,此时就可以把此物理机上的所有虚拟机热迁移到其它物理机上,然后对故障机器进行维护。当机器上软件版本出现很大问题没办法进行热升级的时候,也可以使用热迁移技术进行迁移升级。虚拟机 CPU/内存热插拔技术 当升级设备时,不想停机升级,则可使用热插拔技术进行扩容。软件层面 tuning在软件层面进行了大量的优化:Pvtimer、Pvipi、Posted interrupt 、power。优化效果 上图反映的是一台虚拟机在跑红包其中某一个业务的时候,虚拟机每秒 vmexit次数的统计。蓝色代表优化前,红色代表优化后。从图上看出,优化后退出次数明显减少,虚拟机性能越来越接近物理机表现。