今年2月,由光環新網運營的 AWS 中國(北京)區域和由西雲數據運營的 AWS 中國 (寧夏)區域發佈新的實例類型,新的實例類型包括 C五、C5d、R五、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。git
AWS Nitro 將是這篇文章的主角。本文會從它的發展歷程、架構、所創造的價值等方面進行分析和介紹,試圖總結出AWS上虛擬化基礎平臺發展的脈絡。github
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型號。簡要說明:
- 圖中的硬件(Hardware),是運行虛擬機的物理服務器,採用了當時很強大的標準的10Gbps網卡,以及管理一些本地磁盤的存儲HBA卡。Hardware上既運行用戶的業務虛擬機,還運行Xen的dom0虛擬機。
- VMM採用Xen項目的PV模式。
- 圖中 Amzon Linux 表明Xen dom0,它負責訪問硬件,向虛擬機提供I/O 能力。
圖中 cr1.8xlarge 表明一個這種規格的虛擬機,它的本地存儲、EBS卷和VPC網絡訪問都是經過Xen管理的dom0 虛擬機實現的。
Nitro起源和發展
針對傳統虛擬化架構存在的問題,從2012年開始,AWS EC2虛擬化團隊就開始思考如下問題:
- 能作出比純軟件架構更好的hypervisor嗎?
- 設備模型自己很複雜,並且它會和業務虛擬機競爭CPU和系統資源,同時技術上它很難避免抖動發生
- 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抖動更低)、更多類型、更高性價比方向演進,支撐愈來愈多用戶愈來愈多的業務場景,創造着愈來愈大的業務價值。
主要參考文檔:
- AWS re:Invent 2018: Powering Next-Gen EC2 Instances: Deep Dive into the Nitro System (CMP303-R1)
- AWS re:Invent 2017: C5 Instances and the Evolution of Amazon EC2 Virtualization (CMP332)
- AWS re:Invent 2018: Deep Dive on Amazon EC2 Instances & Performance Optimization Best Practices (CMP307)
- AWS re:Invent 2018:Optimizing Network Performance for Amazon EC2 Instances (CMP308-R1)
感謝您的閱讀,歡迎關注個人微信公衆號: