1. 程式人生 > >Amzaon EC2虛擬化技術演進:從 Xen 到 Nitro

Amzaon EC2虛擬化技術演進:從 Xen 到 Nitro

  今年2月,由光環新網運營的 AWS 中國(北京)區域和由西雲資料運營的 AWS 中國 (寧夏)區域釋出新的例項型別,新的例項型別包括 C5、C5d、R5、R5d。除了這四種之外,在AWS國外部分割槽域還上線了最新的C5n。       這些新例項型別個個都具有鮮明的特徵,我簡單整理歸納如下:
  • C5例項:價效比顯著提升(與 C4 例項相比,C5 例項提供了更高的記憶體與 vCPU 比率,並且價效比提高了 25%,某些應用程式提高了 50% 以上),更大的例項大小(C5 例項新的更大的例項 c5.18xlarge提供了 72 個 vCPU 和 144 GiB 記憶體並提供了 25 Gbps 的網路頻寬)。
  • C5d例項:基於本地 NVMe 的 SSD 磁碟將被物理連線到主機伺服器,提供與C5例項的生命週期相耦合的塊級儲存。c5d.18xlarge 規格的例項支援2塊900GB的NVMe SSD作為本地儲存。
  • C5n例項:這是C5 系列的最新成員,其c5n.18xlarge規格可提供高達 100Gbps 的網路吞吐量。
  • R5例項:其最大例項規格支援96 vCPU、768 GiB記憶體和25 Gbps 網路頻寬。
  • R5d例項:R5d 例項與 R5 例項規格相同,它還包括高達 3.6 TB 的本地 NVMe 儲存。


這些例項型別之所以如此實力超群,我認為主要歸功於兩點:

  • 處理器升級

C5 例項配備 Intel Xeon Platinum 8000 系列 (Skylake-SP) 處理器,它釋出於2017/Q3,具有高達 3.4GHz 的穩定全核 Turbo CPU 時鐘速度,並使用 Intel Turbo Boost Technology 來允許單個核心睿頻高達3.5GHz。C5 例項為新的 Intel 高階向量擴充套件 512 (AVX-512) 指令集提供了支援,與上一代 C4 例項相比,向量和浮點計算效能提高最高可達2倍。

而釋出於2015年的C4 例項型別,配備Intel Xeon E5-2666 v3 (Haswell) 處理器。其時鐘頻率為2.9 GHz,配合Intel® Turbo Boost後最高可達3.5 GHz。

  • 採用了AWS Nitro 虛擬化平臺

AWS Nitro 將是這篇文章的主角。本文會從它的發展歷程、架構、所創造的價值等方面進行分析和介紹,試圖總結出AWS上虛擬化基礎平臺發展的脈絡。

AWS EC2虛擬化發展歷程

下表總結了AWS曾經採用的虛擬化技術,以及這些技術之間的效能對比:

 

  • #1是全模擬技術。這種虛擬化方式能支援未修改的客戶機作業系統,但速度會嚴重下降。典型產品是VMware 在1986年釋出的虛擬化產品。AWS 並沒有採用這種虛擬化技術,放在表格中只是為了做對比用。
  • #2 是基於Xen的半虛擬化技術(Paravirtualization,PV)。PV 要求修改客戶機核心和驅動。EC2第一個採用半虛擬化的例項型別是 m1.small。
  • #3 到 #6 是基於Xen和CPU硬體的全虛擬化技術(Hardware-assisted virtualization,HVM)。採用Xen HVM 技術的虛擬機器執行在具有CPU和記憶體(VT-x)硬體虛擬化能力的處理器上,並使用半虛擬化驅動程式用於網路和儲存裝置。HVM 3.0 中尚未實現中斷和定時器半虛擬化,但在4.0中已有改善。
  • #7 和 #8 則是AWS Nitro技術,這是AWS 研發的一種新虛擬化平臺。後面會有詳細介紹。

過去幾年中,Xen是AWS上虛擬化技術的主體,業已成為業界標準之一,已經非常成熟。那麼,為什麼AWS要從Xen 向 Nitro 發展呢?這得從Xen 的架構說起。

從上圖可以看出,Xen 實現了虛擬機器的CPU 和記憶體虛擬化,但是虛擬機器的I/O 訪問,包括網路和儲存等,都是通過虛擬機器中的前端模組和 dom0 中的後端模組通訊,然後由dom0 中的後端模組通過裝置驅動實現的。這I/O路徑太長,這降低了I/O效能,而且dom0還會和業務虛擬機器搶佔宿主機資源,很難實現管理虛機和業務虛機之間的平衡,以及避免抖動。

2013年,AWS 採用 Xen PV虛擬化技術的cr1.8xlarge 例項的架構如下圖所示:

這是嚴格意義上未採用Nitro技術的最後一個EC2型號。簡要說明:
  1. 圖中的硬體(Hardware),是執行虛擬機器的物理伺服器,採用了當時很強大的標準的10Gbps網絡卡,以及管理一些本地磁碟的儲存HBA卡。Hardware上既執行使用者的業務虛擬機器,還執行Xen的dom0虛擬機器。
  2. VMM採用Xen專案的PV模式。
  3. 圖中 Amzon Linux 代表Xen dom0,它負責訪問硬體,向虛擬機器提供I/O 能力。
圖中 cr1.8xlarge 代表一個這種規格的虛擬機器,它的本地儲存、EBS卷和VPC網路訪問都是通過Xen管理的dom0 虛擬機器實現的。

Nitro起源和發展

針對傳統虛擬化架構存在的問題,從2012年開始,AWS EC2虛擬化團隊就開始思考以下問題:
  1. 能做出比純軟體架構更好的hypervisor嗎?
  2. 裝置模型本身很複雜,而且它會和業務虛擬機器競爭CPU和系統資源,同時技術上它很難避免抖動發生
  3. hypervisor太重了,能將hypervisor 和它周邊的元件解耦嗎?
  從成立之日起,AWS就善於聽取客戶的呼聲和建議,並不斷進行迭代式改進,而不是大刀闊斧地從頭設計一個新架構。根據該原則,AWS團隊首先從最難的網路部分著手,其位置就是上圖中的金黃色虛線框所示位置。從2013年開始,一些EC2例項型別開始支援網路介面的硬體虛擬化:單根I/O虛擬化(SR-IOV),而第一個是2013年1月釋出的C3,它首次採用了AWS增強型網路(enhanced networking)。這最初是通過ixgbe驅動程式實現的,速度高達10 Gbps。   c3.8xlarge的架構如下圖所示:

c3.8xlarge的架構與cr1.8xlarge相比,在宿主機上增加了一塊新網絡卡,這塊網絡卡和原有的標準網路通過一個迴環線(loopback cable)連線起來。虛機VPC網路功能不再通過Xen 的dom0 實現,而是直接訪問宿主機上的這塊硬體網絡卡。C3 是AWS EC2 歷史上增長最快的幾個例項型別之一,它尤其以控制性能抖動和持續的網路效能著稱。這可以看做Nitro思想的發源,那就是將軟體功能解除安裝到專有硬體上。

  下一個改進方向是EBS儲存訪問效能提升。   2015年,AWS推出了C4例項型別,它針對EBS卷使用了硬體虛擬化技術。c4.8xlarge的架構如下圖所示。仔細對比能發現,這個新架構與C3中的網路架構改進有些不同。在虛擬機器中,還保留了“前端-後端”這種Xen傳統架構,這是當時為了相容性和穩妥新考慮,因為NVMe在當時來說還是一種非常新的技術。在宿主機上,採用了新收購的Annapurna Labs公司開發一種卡(下圖中黃色虛線框內),它能將遠端儲存以NMVe形式呈現給虛擬機器。

這個改進的結果是,宿主機上的CPU被Xen佔用得少了,能更多地被虛機使用了。

  2016年5月釋出的X1 是第一個支援ENA的例項型別。ENA是增強型網路的最新實現,速度高達25 Gbps。ENA,全稱是Elastic Network Adapter,它正是Nitro專案的一部分,它是由Annapurna Labs公司開發的。

現在的ENA,能用於虛擬機器和物理機,它以開源專案形式釋出在github上。ENA 是AWS網路虛擬化一關鍵技術,它使得虛擬機器能夠繞過核心和使用者空間網路處理程式,直接操作網絡卡硬體,這顯著提升了網路效率。

從使用者使用角度,也許只是用了一個新網絡卡驅動。但是其底層採用了Annapurna Labs公司開發的定製網路ASIC硬體卡。這是Nitro第一款真正的專用硬體卡。它不僅解除安裝了VPC網路功能,還解除安裝了EBS 儲存網路功能。因此這是一種完全的網路負載解除安裝硬體。

 

下一步的優化方向在例項儲存上。2017年,AWS釋出了儲存優化例項型別i3,它使用了SR-IOV和NVMe儲存驅動。這是AWS首次採用Annapurna Labs研發的Nitro儲存卡40202所管理的SSD磁碟,這些磁碟被直接對映給虛擬機器,虛擬機器通過NVME驅動來使用宿主機上的SSD磁碟。這能實現磁碟300萬以上的IOPS效能。Nitro 晶片負責包括磁碟監控、加密、QoS等職責。  

 

  顯然,到這時候為止,仍然剩下的問題只能是Xen 自身,以及它的管理功能部分了。Xen過於笨重,因為作為傳統 Hypervisor,它必須做很多事情 - 它必須保護物理硬體和 BIOS,它必須虛擬化 CPU,虛擬化儲存,虛擬化網路,並提供豐富的管理功能。其管理性dom0虛擬機器會搶佔業務虛機的系統資源。那到底能不能把Xen徹底替換掉呢?答案是肯定的,因為AWS在技術上從來沒讓人失望過。   2017年11月,AWS釋出了C5 例項型別。它使用基於KVM的Nitro hypervisor 替換了Xen,hypervisor 軟體大大被簡化,Xen 所用的 dom0 也不需要了。其架構示意圖如下:

 

AWS Nitro 則重新構建了EC2虛擬化基礎架構。Nitro 系統將儲存、網路和安全功能解除安裝(offload)到專用的硬體(Nitro卡)上,帶來的好處是虛擬化例項幾乎可以為客戶機作業系統提供主機的所有 CPU 和記憶體,同時Hypervisor 的功能也因此大大減弱。   Nitro 還被用到2017年釋出的AWS 首個物理機例項型別 i3.metal中。下圖是i3.metal架構示意圖:

在i3.metal 中,Nitro 發揮了基礎性作用。它的安全晶片通過提供硬體保護和韌體驗證功能為I3例項提供安全保障;它的各種卡,使得I3例項具備基於非易失性儲存器標準 (NVMe) SSD 的例項儲存,通過ENA支援高達 25Gbps 的聚合網路頻寬。 

Nitro 架構

AWS Nitro 系統是模組化元件的集合,可以使用廣泛的計算、儲存、記憶體和網路選項來設計 EC2 例項,為新一代EC2例項提供動力。它包括三大部分:

 

Nitro 卡

 

這些Nitro 卡是硬體,插入到宿主機的PCIe卡槽中,採用SR-IOV 直通(passthrough)技術將這些卡呈現給例項。包括:
  • VPC Data Plane(用於VPC訪問的Nitro卡):本質上是一塊通過PCIe附加到宿主機上的一塊定製網絡卡,支援網路封包和解包、安全組、限速器和路由等功能。例項通過ENA驅動和它通訊。同時,該卡還帶有一些網路加速功能。以限速器為例,每個Nitro支援的例項,不管它在哪個區域哪個資料中心哪個宿主機上,都會有一致的效能,這對分散式應用非常重要。
  • EBS Data Plane(用於EBS卷訪問的Nitro卡):本質上是一塊通過PCIe附加到宿主機上的一塊定製卡。通過該卡,遠端儲存被以NVMe裝置形式展現給例項,例項通過標準NVMe驅動程式訪問該卡。它首次被用在C4中。支援卷加密、儲存加速;支援I3裸機例項。
  • Instance Storage Data Plane(用於例項儲存訪問的Nitro卡):通過該卡,本地磁碟被以NVMe裝置形式展現給例項,例項通過標準NVMe驅動程式訪問這些磁碟。支援加密、限速器和本地磁碟監控。
除了卡之外,Nitro 還提供卡控制器(Card Controller)。它提供API端點,負責協調所有Nitro卡、Nitro Hypervisor和Nitro安全晶片。它還利用Nitro安全晶片實現了Hardware Root Of Trust(硬體信任根),支援例項監控、計量和認證。它還為Nitro EBS卡實現了NVMe控制器。

Nitro 安全晶片

Nitro安全晶片整合到宿主機主機板中,控制對所有非易失性儲存的訪問,持續監控和保護硬體資源,並在每次系統啟動時獨立驗證韌體。

Nitro hypervisor

Nitro hypervisor位於極簡化的定製的Linux 核心中,基於KVM,帶有定製的VMM和小使用者空間應用。它只負責管理記憶體和CPU分配,將Nitro卡虛擬功能分配給例項,監控和計量硬體等,不再需要提供任何網路功能。因此它只需執行虛擬機器所需指令,快速而且簡單,在大多數工作負載中能提供接近裸機的效能。 Nitro 各元件之間的關係如下圖所示:

 

Nitro 帶來的豐富價值

更高網路訪問效能

利用Nitro提供的新一代 Elastic Network Adapter (ENA) 和 NVM Express (NVMe) 技術,C5 例項提供了高達 25 Gbps 的網路頻寬和更低延遲及抖動。2018年釋出的更強大變體 C5n 例項,支援網路頻寬高達 100 Gbps,使用者的模擬、記憶體快取、資料湖以及其他通訊密集型應用執行得將比以往更好。   採用Nitro增強網路功能後的網路延遲對比:

(Series 1:cc2.8xlarge,2:c3.8xlarge,3:c4.8xlarge,4:c5.18xlarge,5:c5.18xlarge(採用ENAv2))

網路和儲存頻寬對比:   (1:c3.8xlarge,2:c4.8xlarge,3:c5.18xlarge,4:c5n.18xlarge. Series1:網路,Series2:儲存)

更高EBS和本地儲存訪問效能

Nitro 使得例項可通過物理方式連線到主機伺服器的基於 NVMe 的本地 SSD 塊級儲存,以及將遠端儲存以NVMe裝置的形式呈現給例項。 2019年3月,由Nitro支撐的新計算密集型 C5 和 C5d 例項已經在AWS 北京和寧夏區域推出。C5例項支援高達9Gbps 的專用 Amazon EBS 頻寬。而 C5d 最大例項規格則可使用兩塊900G的NVMe SSD。這些例項非常適合需要訪問高速、低延遲的本地儲存的應用程式。

更大例項大小和CPU記憶體比率

由Nitro支撐的C5例項,其例項的CPU和記憶體比率,由C4的1:1.875上升到1:2;例項的最大規格,從C4的36vCPU/60Gib記憶體,上升到72vCPU/144Gib記憶體。

更低虛擬化花銷

Nitro Hypervisor 是一款輕薄的靜態的虛擬機器管理程式,可管理虛擬機器的記憶體和CPU分配,並提供與大多數工作負載無法區分的效能。據Netflix公司Brendan Gregg 觀察,Nitro Hypervisor的效能損耗非常小,通常不到1%,他的結論是 Nitro提供的虛擬化效能接近裸裝置。

更低Hypervisor抖動

有了Nitro後,就不再需要為儲存和網路I/O再預留CPU和記憶體資源了。這不僅使得可以向EC2例項分配更多資源,為更大的例項規格提供了可能,還為實現一個簡單的輕量的hypervisor提供了可能,而這就為實現更低hypervisor抖動創造了條件。   下圖是一AWS 客戶在三種EC2例項上採用對延遲要求極低的一實時應用做的對比測試。藍色是C5,紅色是i3.metal,黃色是C4。SLA 是用於測試的實時應用所能忍受的最高延遲。

 

從上圖中的測試結果看,C5 相對裸機只有一點極小的附加開銷,而且效能非常平穩,幾乎沒有波動,能完全滿足應用的SLA需求。而C4則有相對較大的波動,只能大概滿足70的SLA。

更多例項型別

AWS釋出了基於Nitro的例項儲存例項型別 C5d,M5d 和 R5d,提供低延遲高吞吐的基於NVMe的例項儲存。 AWS在2017 re:Invent上宣佈了基於Nitro的AWS EC2 Bare Metal例項 I3.metal。它沒有效能開銷,能夠執行你喜歡的任何東西,比如Xen,KVM,容器,ESXi,FireCracker微虛機等;支援非虛擬化環境,支援容器環境,同時還能繼續使用比如EBS、ELB和VPC等基礎服務;支援比如SAP HANA和其它記憶體型應用。 AWS還基於Nitro釋出了採用AMD EPYC處理器的系列例項R5,M5和T3,最高可降低10%成本。 AWS釋出了基於Nitro的具有100Gbps網路頻寬的例項型別C5n,這是執行HPC和分散式機器學習負載的理想型別。 AWS釋出了基於Nitro的採用AWS Graviton(基於ARM)處理器的例項型別A1,最高可降低45%成本。

更低價格、更高性價比

下表顯示了AWS 北京(BJS)和中衛(ZHY)區域的4代和5代EC2例項的價格比較,你可以看到實實在在的價格下降:  

 

目前,Nitro支撐的C5 例項提供了 EC2 產品系列中最佳的價格/計算效能比。與C4例項相比,其價效比提高了49% 。 與R4例項相比,由Nitro支撐的R5例項為每個vCPU提供額外5%的記憶體,且每 GiB 價格低50%。R5例項非常適用於高效能資料庫、分散式記憶體快取、記憶體資料庫和大資料分析等應用程式。

為更多效能優化提供了可能

對於需要深度定製化EC2 的使用者而言,Nitro 還帶了了另外的好處:對於EC2 更深入的監控和優化。在由Nitro支撐的C5例項中,你可以得到數百個PMC 計數器(Performance Monitoring Counters ,效能監控計數器)。作為對比,以前的例項型別中,你只能看到區區7個PMCs。更多的PMC計數器,為效能優化提供了更多可能。

小結

亞馬遜 AWS CTO 沃納·威格爾(Werner Vogels)曾經說過,“在亞馬遜 AWS,我們90%到95%的新專案都是基於客戶給我們的反饋,剩下5%也是從客戶角度出發所做得創新嘗試。”而Nitro 正是這種專案之一,它誕生於2013年,成年於2017年,現在還在不斷成長中。Nitro 正在作為AWS核心虛擬化架構平臺,推動著AWS最核心的EC2產品家族不斷往更大(單例項的vCPU和記憶體更大)、更快(I/O速度更快)、更安全(採用Nitro安全晶片)、更穩定(Hypervisor抖動更低)、更多型別、更高性價比方向演進,支撐越來越多使用者越來越多的業務場景,創造著越來越大的業務價值。     主要參考文件:
  1. AWS re:Invent 2018: Powering Next-Gen EC2 Instances: Deep Dive into the Nitro System (CMP303-R1)
  2. AWS re:Invent 2017: C5 Instances and the Evolution of Amazon EC2 Virtualization (CMP332)
  3. AWS re:Invent 2018: Deep Dive on Amazon EC2 Instances & Performance Optimization Best Practices (CMP307)
  4. AWS re:Invent 2018:Optimizing Network Performance for Amazon EC2 Instances (CMP308-R1) 

感謝您的閱讀,歡迎關注我的微信公眾號:

&n