AWS在11月6日推出新的實例類型C5,其中采用了新的虛擬化引擎——一款AWS自家定制的KVM。這可能意味著AWS從2006年啟動時就開始使用并持續優化至今的Xen技術棧,將逐漸淡出這一體量龐大的云計算平臺。
關于Xen與KVMXen最早是劍橋大學的一個研究項目。該項目在2003年以開源協議發布后,先后經歷了XenSource公司、Citrix公司、Linux基金會等組織的領導,其技術陣營包含了Citrix、IBM、Intel、HP、Novel、紅帽、Sun、Oracle、Amazon、AMD、Bromium、CA Technologies、Calxeda、Cisco、Google、三星、以及Verizon等業界巨頭。
KVM(Kernel-based Virtual Machine,直譯為“基于內核的虛擬機”),最早是以色列初創企業Qumranet發布的開源項目。該項目在2007年被合并入Linux內核代碼——這對KVM而言是非常重要的一個節點,該公司則在2008年被紅帽收購。KVM技術差不多到2010年之后進入成熟階段,該技術陣營目前包括紅帽、SUSE、Linaro(ARM)、IBM、Intel、Google、Oracle等業界巨頭,國內的華為、阿里巴巴、騰訊等也均有參與。
在AWS啟動的2006年,Xen還是當時最成熟的虛擬化引擎技術(對于Linux操作系統而言),而KVM項目還沒有出現在大家的視野中。因此,AWS在早期技術選型當中采用了Xen,成為其彈性計算的底層基礎。(此外,2009年啟動的阿里云也因為當時KVM還不成熟的原因采用了Xen,不過兩家一直未停止過對KVM的關注與投入,阿里云更是在數年前就已經推出了基于KVM的主機。另外,2011年啟動的Google Cloud從一開始就采用了KVM引擎。)
AWS的用戶需要知道什么?首先,AWS的用戶現在已經可以將自己跑在C4實例上的主機切換到C5,前提是:
現在已經推出C5的區域有US East (Northern Virginia)、US West (Oregon)、EU (Ireland) Regions,目前要用C5的話只能在這三個區,其他區還得等等。AMI鏡像的操作系統必須包含ENA和NVMe的驅動,因為C5的網絡和存儲功能是在硬件層面實施的。AWS平臺上提供的最新版AMI鏡像,包括Amazon Linux、Microsoft Windows (Windows Server 2012 R2 以及 Windows Server 2016)、Ubuntu、RHEL、CentOS、SLES、Debian、FreeBSD,現在都支持。同理,如果你制作自己的AMI,也是一樣的要求。Reddit網站上已經有用戶在分享自己的切換過程,感興趣的讀者可以前往查看或提問。Jeff Barr也會在那里回復一些問題。
C5實例可以選擇的實例尺寸見下表:
Instance Name | vCPUs | RAM | EBS Bandwidth | Network Bandwidth |
c5.large | 2 | 4 GiB | Up to 2.25 Gbps | Up to 10 Gbps |
c5.xlarge | 4 | 8 GiB | Up to 2.25 Gbps | Up to 10 Gbps |
c5.2xlarge | 8 | 16 GiB | Up to 2.25 Gbps | Up to 10 Gbps |
c5.4xlarge | 16 | 32 GiB | 2.25 Gbps | Up to 10 Gbps |
c5.9xlarge | 36 | 72 GiB | 4.5 Gbps | 10 Gbps |
c5.18xlarge | 72 | 144 GiB | 9 Gbps | 25 Gbps |
其次,如果你已經用上了C5,想用它跑一些機器學習的推斷(inferencing)任務或者類似的計算任務,可以看一下這個Intel Math Kernel Library。C5的處理器用的是3.0 GHz Intel Xeon Platinum 8000系列,這款專為EC2做過優化的處理器配合上面那個數學庫可能會有很好的性能。
此外,C5還增加了每個vCPU的內存。對于兼容AVX-512指令集的代碼而言,矢量操作和浮點操作的性能甚至可以翻倍。
切換到C5之后,由于運行在新虛擬化引擎上的實例是通過NVMe接口從EBS卷上啟動的,而運行在Xen上的實例是從一個模擬IDE硬盤上啟動、再切換到Xen的半虛擬塊存儲驅動上的,所以雖然操作系統(OS)能夠識別自己正運行在哪個虛擬化引擎上,但如果軟件本身假設底層的虛擬化引擎是Xen并依賴于該假設,則可能會引發一些問題。
但總體來說,AWS表示只要OS層面能夠支持ENA網絡和NVMe存儲,則大部分軟件都能正常工作。AWS還表示,其他的EC2功能并不會受到影響。
如果你是AWS EC2 API的重度用戶,擔心這次虛擬化引擎的變更會對API造成什么變化,則不用擔心了:AWS在其FAQs頁面中表示其對外公開的API完全不會因為引入新的虛擬化引擎而有任何改變。
KVM在EC2上的正式啟用對AWS意味著什么?作為計算資源服務的提供方,提升性能、降低成本是永恒的話題。
Xen最初設計時,x86架構尚未引入虛擬化擴展功能,所以Xen為了實現Linux系統的虛擬化,就把Linux內核給改了——這就相當于在之后的十幾年里,Xen一直維護著一套自己的Linux內核版本,所以上游Linux內核社區的很多新的好東西,它要費一番功夫才能移植進來,這就造成了很大的維護成本。
而另一方面,因為KVM項目是合并在Linux內核代碼中的,維護起來就非常容易。Linux內核上游社區的研發勢能是非常大的,在這種情況下,KVM的發展速度迅猛,在穩定性、性能方面的提升很快趕超了Xen,受到很多技術人與企業的青睞。
EC2是AWS的基石,虛擬化引擎又是EC2的基石。由于AWS是一套構建多年的、龐大而復雜的系統,很多功能會對Xen有所依賴,要讓這套系統同時穩定的支持Xen與KVM,是一項非常復雜的工作。所以C5的推出,意味著AWS這套系統已經脫離了對Xen的完全依賴。
對AWS而言,基于KVM的系統要比基于Xen的系統的維護成本更低,這是一方面。
另一方面,可能也與性能有關。按AWS首席布道師Jeff Barr在博客中所說,C5在性價比方面相比C4提升了25%,針對有些任務甚至可以達到50%——這是針對用戶而言。要知道對于AWS今天這樣的體量,哪怕是1%的節省都是巨大的;如果有25%這樣比例的性價比提升,則絕對是勢在必行,無論花費多大代價也要上。當然這其中的性能提升有多少是來自新的硬件,有多少是來自KVM,這就不一定了。
此外,AWS首先在“計算密集型實例”(compute-intensive)上正式采用KVM,而不是從通用型、內存密集型等其他類型上開始,可能是因為考慮到計算密集型業務的I/O操作較少,比較獨立,耦合性比較小,因此更容易替換的原因。
這次改變對于業界有什么影響?從市場占有率的角度來看,就是Xen的最后一個大體量的用戶對Xen說,以后我不再需要你了。
如果說以前還有業界傳言說AWS在Xen上投入太過巨大、依賴太重,所以AWS將一直支持Xen的話,那么現在這個傳言已經宣告終結。畢竟,如果連AWS都以實際行動表示切換到KVM的收益大于成本了,那么那些體量更小的Xen用戶還能對Xen有什么更多的期待呢?
所以對于未來的市場而言,這次改變也許象征著Xen的使命已經結束了。對于過去的市場而言,Xen的使命就是讓那些仍然跑在Xen上的業務們能夠繼續平穩運行。不過這里面還有一個變數就是Unikernel,那就是另一個話題了。
從上游社區的角度,影響可能不大,因為Amazon一直不是個活躍的開源社區參與者。即使作為最大的Xen用戶那么多年,Amazon對Xen上游社區的代碼貢獻數量卻是屈指可數。所以對于KVM項目,可能我們未來也不大會看到很多來自Amazon的代碼貢獻。
從技術發展的角度,這是個大趨勢下技術更新換代的必然——也許從KVM被合并到Linux內核代碼的那時起就已經種下了種子吧。
總結關于AWS此次擁抱KVM的C5發布,目前公開的信息就總結到此。