亚马逊云的EC2大多数都是虚拟机,那么必然会用到各种各样的虚拟化技术,在早些的时间里用的是Xen,后来使用了亚马逊自研的Nitro技术,据说是基于KVM做了一些修改。
那么,从Xen升级到Nitro,需要开启一些设置,比如增强联网,EBS优化还有安装NVME驱动,做完这些操作之后,才能把一个Xen实例的机型升级为Nitro机型。
增强联网
大多数虚拟机都有一个通病,因为所有东西都是虚拟化出来的,所以高负载的时候速度会比较慢,并且会消耗大量的主机CPU。在Vmware和virtualbox上默认就是这中,每次网络测速都跑不满带宽,虚拟机和硬件之间始终隔着一层操作系统。
后来,亚马逊云推出了增强联网,其实也就是SR-loV技术。这个可以把物理硬件直通到虚拟机中而不再需要宿主机的转发,这种端到端的通信,就不会消耗大量的主机CPU。
EBS优化
EBS优化给实例分配了单独的带宽来连接EBS,众所周知EBS是通过网络与实例挂载的,而每个实例类型都有不同的网络带宽。那么在没有优化的情况下,EBS就会和应用负载共享带宽,如果恰好当时的磁盘吞吐量比较高,那么应用的网络是一定会受到波动的。在开启EBS优化之后,就可以分给EBS单独的带宽,这样无论磁盘负载,都不会对实例的网络进出造成影响。
在大多数常用的机型中,EBS优化是免费的,而且Nitro实例默认支持这个功能,少部分实例支持这个功能但是需要额外收取费用。
NVME驱动
想要获得NVME EBS全部的性能,也需要单独安装驱动程序。
对于windows来说:
Invoke-WebRequest https://s3.amazonaws.com/ec2-windows-drivers-downloads/NVMe/Latest/AWSNVMe.zip -outfile $env:USERPROFILE\nvme_driver.zip
Expand-Archive $env:userprofile\nvme_driver.zip -DestinationPath $env:userprofile\nvme_driver
.\install.ps1 -EnableSCSIPersistentReservations $true
对于Linux,
sudo apt-get update -y
sudo apt-get install --only-upgrade -y linux-aws
sudo reboot
这个linux-aws的除了会安装NVME驱动之外,也会安装增强联网的ENA 驱动。
参考
增强联网:https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/enhanced-networking-ena.html
EBS 优化:https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/ebs-optimized.html
NVME 驱动for windows:https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/WindowsGuide/aws-nvme-drivers.html
NVME驱动for linux:https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/nvme-ebs-volumes.html#install-nvme-driver