14

Aws Ec2 Virtualization 2017: Introducing Nitro

 3 years ago
source link: https://kernel.taobao.org/2017/12/AWS-EC2-Virtualization-2017-Introducing-Nitro/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Dec 1, 2017

Aws Ec2 Virtualization 2017: Introducing Nitro

http://www.brendangregg.com/blog/2017-11-29/aws-ec2-virtualization-2017.html @木芽

AWS EC2虚拟化2017 :介绍Nitro虚拟化

在云计算中,硬件虚拟化经历了漫长的发展,相关的技术比如 VT-x, SR-IOV, VT-d, NVMe 和 APICv。最æ°AWS提出的hypervisor,Nirto提供了一种简单并且高效的硬件辅助hypervisor,能够提供接近裸机的性能,这个消息让人激动万分。

以下总结了EC2发展过程用到的虚拟化技术,表格右半部分是实例性能,包括cpu,memory,io等。而从上往下则是实例的类型。从表格可以看到大致分为三个阶段:

1)全虚拟化: guest os无需修改,很多操作依靠纯软件模拟,这种性能最差,应用有2到10倍的性能损失。

2)半è拟化: hypervisor提供了有效的hypercall,guest os使用相关驱动,以及通过修改kernel来调用这些hypercall。这种效率比全虚拟化要好一些。

3)硬件虚拟化: 这种方式的性能接近裸机性能,大概有0.1%到1.5%的性能损失。

下面按照时间顺序,具体介绍下每一行的内容

1、全模拟

还记得1998年VMWARE x86 hypervisor,这是最早的虚拟化技术,在2005和2006年才开始有硬件辅助(Intel VT-x 和 AMD-V)。最早的x86 hypervisor使用模拟和二进制翻译来做特殊的操作,比如系统调用和页表操作,显然这种方式性能损失严重,特殊是对于IO密集型的workload。

2、Xen PV 3.0

进入半虚拟化时代,它是来自于Xen虚拟化。è¿种需要guest进行修改后才能进行hypercall。在这种配置下,AMI和boot都是半虚拟的(PV),kernel用hypercall来代替privileged instructions,对于网络和存储都是使用半虚拟化的驱动。这种方式相比全虚拟化æ了性能提升,但对于系统调用和页表操作还是比较慢。目前EC2上有m1.small采用这种方式。

3、Xen HVM 3.0

这个相较于上一种方式来讲,在cpu和memory上有了硬件的辅助VT-x。另外,AMI(Amazon machine instance)boot采用HVM,所以这种类型的实例启动速度要快一步。

4、Xen HVM 4.0.1

这种方式,以HVM启动,使用PVHVM驱动[1],这使得中断和timers有了性能提升。

同时,事情也开始变得复杂起来,总结下来两个原因:

1)AMI类型。EC2对于PV和HVM使用不同镜像类型和boot,正如[2]里描述。人们开始用带PV或HVM类型的实例,但比这更复杂的是,HVM可以boot并且运行PV驱动,同时也可以在HVM驱动上运行PV。目前EC2上大部分HVM实例是带有PVHVM的HVM。 2)性能。早期的HVM性能一般,比不上PV。但现在看选择PV有点过时。听到这里,你可能有点迷惑,这里有一篇关于这几种方式的具体说明[3]

5、Xen AWS 2013

从2013å¹´开始,一些EC2实例开始对网络支持硬件虚拟化,SR-IOV。最开始是C3实例,AWS称之为网络增强型实例[4]。开始是通过ixgbe驱动达到10Gbps,后来又用ena驱动提升到25Gbps。

6、Xen AWS 2017

2015年,AWS发布äºC4实例,它在EBS磁盘卷使用硬件虚拟化,然后在2016年拓展到了x1.32xlarge,在2017年最终发布了存储优化的i3 实例存储,它采用了SR-IOV技术和Nvme磁盘。这里有些结果可供参考[5]。

7、AWS Nitro 2017

重ç¹来了,c5实例采用一种新的hypervisor,称为Nirto。非常轻量级,它是基于KVM kernel模块,没有采用qemu。同时也没有在IO路径上没有dom0或者IDD。

Nitro设计的目的就是提供裸机差不多的性能,在IO上采ç¨SR-IOV,并且对中断也进行了硬件虚拟化:采用posted中断和APICv来减少vm exit的次数,这里有一些性能数据供参考[6]。在Nirto之前,各个组件的虚拟化都比较零散,而Nitro集大成。

另外,让人激动ç是,Nirto暴露了所有PMC计数器,大大提高了性能分析的效率。AWS说以后大部分实例都要用Nirto hypervisor。

8、AWS Bare Metal 2017

更牛逼的来了,Bare Metal,与裸机一样的性能,可以运行Xen, KVM以及容器,所以的PVM计数器都有,还有一些处理器的feautres。这里有介绍视频[7]。

AWS对这种平台叫Nirto system, 刚才提到c5用的Nirto是Nirto hypervisor,可能听起来晕,这里有相关talk[8]

此文,从AWS 实例的发展ä»绍虚拟化的发展,最后的Nirto令人心动,也许开启了虚拟化的新篇章。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK