天天看點

帶你讀《彈性計算—無處不在的算力》第三章:計算産品和技術3.2虛拟機雲伺服器(一)

虛拟機雲伺服器是彈性計算家族中最早出現的一款産品,時至今日,市場占有率仍然很高,适用面廣、形态靈活、管理友善、技術成熟,是當今雲計算的基礎。

3.2.1 功能特點

虛拟機雲伺服器相比傳統實體伺服器最大的特點,就是使用者不必再運維和管理底層的,如伺服器、交換機、路由器、BGP、專線、機房、電力、制冷等實體基礎裝置、設施、環境,而可以将所有精力聚焦在上層的應用環境和虛拟裝置的配置、管理和使用上。除此之外,“虛拟化”帶來的一系列的新功能,更能給使用者帶來無與倫比的全新體驗。

首先,虛拟機雲伺服器具備分鐘級的傳遞效率,不僅可以按需傳遞,而且極大地縮短了應用上線周期,還有多種适合短周期業務和長周期業務的購買方式,兼顧業務靈活性和成本經濟性。

第二,虛拟機雲伺服器的配置規格極其豐富,不僅可以瞬間完成升配或者降配,并且配置的可調整範圍大。比如可以從1 個vCPU 的配置,瞬間調整為104 個vCPU ;也可以将普通的雲伺服器更新為異構計算雲伺服器,增加一塊或多塊GPU 計算卡或者FPGA 計算卡;可靈活快速地線上熱完成增減磁盤和網卡數量,以及調整帶寬這樣的操作,實作了極大的成本節約和業務可擴充。

第三,虛拟機雲伺服器支援熱遷移,可以在使用者系統幾乎無感覺的情況下将一台虛拟機從一台實體伺服器遷移到另外一台實體伺服器。雲服務提供商在做硬體更新、軟體疊代、硬體故障處理等運維操作時,都可以對虛拟機雲伺服器進行熱遷移,不需要使用者停機配合維護。這在傳統IDC 的伺服器托管模式下是無法實作的。熱遷移是虛拟機雲伺服器的核心優勢之一,阿裡雲也在這方面做了很多的優化,并持續給使用者提供更好的熱遷移體驗。

第四,日新月異的産品服務。我們都記得當蘋果公司的第1 款iPhone 手機上市時,人們驚奇地發現原來手機買回來後其功能可以持續擴充;特斯拉公司的Model 系列電動轎車上市後,車輛購買者也首次發現原來可以随着時間推移而不停更新更新一輛轎車的功能。每一次更新都給使用者帶來了驚喜。雲計算相對于傳統IT 基礎設施的一個巨大提升就是它的可擴充性和新功能的持續疊代,使用者使用雲伺服器後可輕松地融合內建彈性塊存儲、RDS、EMR、E-HPC 等基礎和PaaS 類産品,來持續地

統和資料能力。另外,使用者今天看到的可用服務與12 個月之前看到的迥異。即便是雲伺服器這一服務本身的新功能釋出也在以天為機關持續進行着。以阿裡雲為例,每天研發團隊都會釋出新版本來持續增強産品的功能、易用性、健壯性。而這在傳統的IT 基礎設施使用者眼裡是不可思議的,傳統的一次性購買傳遞後的系統,每一次更新的複雜度和挑戰都極其巨大,并且伴随着不菲的費用。

第五,全 API 管理。通過 Open API 可以完全操控雲伺服器,包括開機、關機、裝置熱插拔、資源配置屬性修改等。對于有開發能力的使用者來說,重新定義一套适合自身業務的更高效的管理控制台是十分容易的;對于DevOps 使用者來說,全鍊路地融合企業内部的産品開發、測試、釋出流程,雲計算資源的建立使用也十分友善。企業效率的提升就是競争力的提升。

最後,穩定“質”的飛躍。鑒于虛拟雲伺服器的産品服務傳遞特性,其底層資源的大規模運維交給了雲服務廠商,雲服務廠商和使用者之間以SLA 的方式保障服務穩定性。以阿裡雲為例,單ECS 執行個體的服務可用性保障已經提升到99.975%,以單地域多可用區部署的ECS 執行個體的服務可用性保障更是高達99.995%。這種穩定性的保障能力相比傳統IT 的資源部署使用方式,是另外一個巨大的提升。

3.2.2 适用場景

虛拟機雲伺服器是一款普适産品,能做絕大多數x86 實體伺服器能做的事情。正如實體伺服器針對不同的需求會有不同的配置,虛拟機也為不同的主流場景提供了各類專門優化的執行個體規格族,這些場景包括: 

通用計算場景:面向日常的需求,例如應用伺服器、中小型資料庫、Web 伺服器、開發環境等; 

計算密集場景:科學計算、高性能前端機、對戰類遊戲、機器學習、視訊編解碼等; 

記憶體“饑渴”場景:緩存、記憶體資料庫、SAP HANA 等; 

高I/O 場景:關系型資料庫、NoSQL 資料庫、資料倉庫等; 

大資料分析場景:MapReduce 分布式計算如Hadoop、Spark 等,還有分布式檔案系統、日志和資料處理等。

阿裡雲的虛拟機雲伺服器既可以作為 Web 伺服器或者應用伺服器單獨使用,又可以與其他伺服器一起工作,提供更豐富的解決方案,舉例如下。

企業官網或輕量的 Web 應用 

當網站初始階段通路量小時,一台低配置的入門級ECS T 規格族虛拟機即可運作 Apache 或 Nginx 等 Web 應用程式、資料庫,以及存儲檔案。

通路量波動劇烈的應用或網站 

某些應用(如搶紅包應用、優惠券發放應用)、電商網站和票務網站等的通路量可能會在短時間内産生巨大的波動。在這些場景中,獨享型的C 規格族或者G 規格族虛拟機,配合負載均衡 SLB 和彈性伸縮,可自動化實作在通路量高峰來臨前增加 ECS 執行個體,在進入通路量低谷時減少 ECS 執行個體,滿足了通路量達到峰值時對資源的需求,同時能降低成本,并提升應用的可用性。

多媒體應用或網站

搭配使用獨享型的虛拟機與對象存儲 OSS,OSS 承載靜态圖檔、視訊或者下載下傳包,進而降低存儲費用,同時配合内容分發網絡 CDN 和負載均衡 SLB,可大幅減少使用者通路等待時間、降低網絡帶寬費用和提高可用性。

高并發遊戲伺服器

很多華麗精彩的大型線上遊戲需要在服務端進行大量密集的計算,此時可以使用高主頻型的HFC 或HFG 規格族虛拟機。它們配備了高主頻的CPU,能為遊戲引擎提供強大的計算力。

高 I/O 要求資料庫

為支援承載高 I/O 要求資料庫,如 OLTP 類型資料庫和 NoSQL 類型資料庫,可以使用較高配置的G 規格族或者R 規格族虛拟機,并配合高性能的 ESSD 雲盤,或者使用帶本地SSD 盤的I 規格族虛拟機,實作高 I/O 并發響應。雲盤有更好的可靠性和靈活性,本地盤則有更低的時延,兩個方案各有優劣。

大資料實時線上或離線分析

對于 Hadoop 分布式計算、日志處理和大型資料倉庫等業務場景,可以使用大資料D 規格族虛拟機。它采用了本地HDD 硬碟,可以提供海量的存儲空間和優異的存儲性能。

3.2.3 虛拟化技術

虛拟機是公共雲服務提供商的核心産品形态,故虛拟化技術也是彈性計算技術中的核心技術之一。虛拟化技術涉及計算虛拟化、存儲虛拟化、網絡虛拟化、管控排程等方面,本節主要介紹其中的計算虛拟化技術,以阿裡雲的虛拟化技術發展曆程作

開篇概述,再介紹業界流行的KVM 虛拟化技術,最後概括介紹雲計算中虛拟化的熱遷移和熱更新這兩大關鍵技術。

虛拟化技術的發展曆程

虛拟化技術是雲計算的重要技術之一,在被雲計算采用之後就不斷演進發展。虛拟化技術在阿裡雲的曆史正好是這個演進發展過程的一個縮影,是以下面就以阿裡雲為例先來講述一下阿裡雲虛拟化技術發展曆程,如圖 3-1 所示,然後重點介紹後期的KVM 和軟硬一體的虛拟化技術。

存儲Domain 0 Xen I/O{DMA中斷} VM2 VM1 硬體管控網絡2009—2015年存儲管控網絡硬體2015—2018年VM2 VM1 I/O{DMA 中斷} VM2 VM1 存儲管控網絡2018年至今MOC卡HA KVM 1 KVM 2 HA KVM 1 KVM 2 硬體 I/O{DMA 中斷} 

帶你讀《彈性計算—無處不在的算力》第三章:計算産品和技術3.2虛拟機雲伺服器(一)

圖 3-1  阿裡雲虛拟化技術發展曆程

1)Xen 虛拟化架構(2009—2015 年) 

2009 年,在阿裡雲剛成立之時,在開源虛拟化技術領域中,Xen 已經是比較成熟的虛拟機監控器項目,是以阿裡雲采用開源的 Xen 作為第一個虛拟化底層架構。當時,阿裡雲将 Xen 開源項目應用在公共雲上,做了一些修改,解決了 Xen 在公共雲應用中的大規模工程化方面的各種細節問題。在這個時期,亞馬遜 AWS 的虛拟化架構使用的也是 Xen,這種選擇也是當時業界的共識。

2)KVM 虛拟化架構(2015—2018 年) 

2005 年、2006 年,Intel 和 AMD 的 x86 CPU 硬體分别開始支援硬體虛拟化 (VT)技術,并在 2006 年誕生了 KVM 這個基于硬體虛拟化的開源虛拟化項目。紅帽(RedHat)公司在 2008 年收購了開發 KVM 的以色列公司 Qumranet 後,KVM 更是得到了大力的發展。2014 年左右,KVM 在功能完備性、穩定性、 社群支援等各個方面都超過了 Xen,這時阿裡雲也開始研發基于 KVM 的雲伺服器,最終在 2015 年将虛拟化架構遷移到了 KVM 上。在 2015—2018 年,阿裡雲不僅使用 KVM 解決了工程化58 的問題,也做了 QEMU/KVM 的熱更新等原創工作,自研了 vCPU 的排程器,支援性能突發型執行個體規格(T5)的産品,同時對熱遷移等重要功能做了比較好的優化。

3)軟硬體結合的虛拟化架構(2018 年至今) 

在 KVM 虛拟化技術比較成熟的情況下,在下一代的虛拟化架構演進方向上,包 括亞馬遜 AWS、阿裡雲等雲服務提供商仿佛達成默契,都在軟硬體結合的方向上投入研發。AWS 在 2017 年年底對外釋出了基于 Nitro 架構的 C5 執行個體規格,阿裡雲在 2017 年也釋出了基于神龍架構的彈性裸金屬伺服器,并在 2018 年上線了基于神龍架構的虛拟機雲伺服器。神龍架構是阿裡雲自研的軟硬體結合的虛拟化平台,其中的 MOC 卡是神龍架構中的核心硬體,将存儲、網絡、管控的鍊路全部轉移到 MOC 上, 同時對 KVM 虛拟化技術做進一步優化,以提升計算性能。

近些年,随着雲計算規模體量的增大、研發人力物力的大量投入,虛拟化架構的演進速度進一步加快。另外,軟硬體結合的神龍架構也在持續疊代,神龍 1.0、2.0、3.0 等架構的更新一直都在持續進行中。

KVM 虛拟化技術

KVM 是基于 CPU 硬體虛拟化技術(如 Intel 的 VT-x、AMD 的 AMD-V 等)的 全虛拟化技術,是業界多數公共雲和專有雲服務提供商使用最多的虛拟化技術之一。

KVM 虛拟化技術的核心主要由兩個子產品組成。

1)KVM 核心子產品

它屬于标準 Linux 核心的一部分,是一個專門提供虛拟化功能的子產品,主要負責 CPU 和記憶體的虛拟化,包括客戶機的建立、虛拟記憶體的配置設定、 CPU 執行模式的切換、vCPU 寄存器的通路和vCPU 的執行。

2)QEMU 使用者态工具

它是一個普通的 Linux 程序,為客戶機提供裝置模拟的功能,包括模拟 BIOS、PCI/PCIe 總線、磁盤、網卡、顯示卡、聲霸卡、鍵盤和滑鼠等,同時它通過 ioctl 系統調用與核心态的 KVM 子產品進行互動。

KVM 是在硬體虛拟化支援下的完全虛拟化技術,是以它可以支援在相應硬體上能夠運作的幾乎所有的作業系統,如 Linux、Windows、FreeBSD、macOS 等。QEMU/KVM 虛拟化基礎架構如圖 3-2 所示。在 KVM 虛拟化架構下,每個虛拟機就是一個QEMU 程序,即在一個主控端上有幾個虛拟機就會有幾個 QEMU 程序 ;客戶機中的每一個虛拟 CPU 對應 QEMU 程序中的一個執行線程 ;一個主控端中隻有一個 KVM 核心子產品(當然也可以使用多個 KVM 子產品以提高可用性),所有客戶機都與這第3 章 計算産品和技術59 個核心子產品進行互動。3.3 節還會繼續介紹軟硬體一體化設計的虛拟化技術。

使用者态普通程序1 使用者态普通程序2 Linux 虛拟機系統QEMU程序1 帶有硬體虛拟化特性(Intel VT/AMD-V)的硬體KVM核心子產品Linux核心Linux 虛拟機系統QEMU程序2 ...... 

帶你讀《彈性計算—無處不在的算力》第三章:計算産品和技術3.2虛拟機雲伺服器(一)

圖 3-2  QEMU/KVM 虛拟化基礎架構

熱遷移技術 

在虛拟化環境中的虛拟機遷移分為冷遷移和熱遷移,也稱為離線遷移和線上遷移。冷遷移和熱遷移最大的差別就是,在冷遷移中明顯有一段時間(可能是幾秒鐘或者幾分鐘),虛拟機中的服務不可用,而熱遷移則沒有明顯的服務暫停時間。虛拟化環境中的冷遷移也可以分為兩種。

關閉虛拟機後,将其硬碟鏡像複制到另一台主控端上,然後啟動, 這種遷移不能保留虛拟機中工作負載的運作時狀态。

兩台主控端共享存儲系統,隻需要在暫停(而不是完全關閉)虛拟機後,複 制其記憶體鏡像到另一台主控端中後啟動,這種遷移可以保持虛拟機遷移前的記憶體狀态和系統運作的工作負載。

熱遷移(Live Migration)指在保證虛拟機上的應用服務正常運作的同時,讓虛拟機在不同的主控端之間遷移。其邏輯步驟與前面的冷遷移幾乎一緻,有磁盤和記憶體都複制的熱遷移,也有僅複制記憶體鏡像的熱遷移;不同于冷遷移的是,為了保證遷移過程中虛拟機服務的可用性,熱遷移過程僅有非常短暫的停機時間,以至于虛拟機中的應用程式幾乎沒有任何感覺。 KVM 下的熱遷移如圖 3-3 所示。60 

VM1QEMU/KVM虛拟機支援虛拟化技術的硬體KVM主控端1(源主機) VM2 VM2 QEMU/KVM虛拟機支援虛拟化技術的硬體KVM主控端2(目的主機) 熱遷移

帶你讀《彈性計算—無處不在的算力》第三章:計算産品和技術3.2虛拟機雲伺服器(一)

圖 3-3  KVM 下的熱遷移

虛拟機熱遷移增強的是系統的可維護性,其主要目标是在使用者沒有感覺的情況下,将虛拟機遷移到另一台實體機上,并保證其各個服務都能正常使用。主要從以下兩個方面來衡量虛拟機遷移的效率。

1)整體遷移時間

整體遷移時間指從源主機(Source Host)遷移操作開始,到虛拟機被遷移到目的主機(Destination Host),并恢複其服務所花費的時間。

2)服務暫停時間(Service Down-Time) 

服務暫停時間指在遷移過程中,源主機和目的主機上虛拟機的服務都處于不可用狀态的時間。此時,源主機上的虛拟機已暫停服務,目的主機上的虛拟機還未恢複服務。

由于服務暫停時間是使用者可以真切感受得到的,是以它也更為重要。熱遷移的服務暫停時間,受虛拟機的工作負載(如 CPU、記憶體、網絡、磁盤等壓力)、主控端計算性能和網絡帶寬等因素的影響,一般在幾毫秒到幾秒不等。

在阿裡雲這樣的大型公共雲上,熱遷移具有廣泛的用途,比如硬體更新與維護、 主控端核心更新、動态排程資源等。目前熱遷移也是阿裡雲 ECS 的核心競争力之一。在阿裡雲真實場景下熱遷移的鍊路是比較長的,需要管控系統、虛拟化、存儲、網絡的各個元件互相配合才能實作,公共雲上的熱遷移過程如圖 3-4 所示。KVM 熱遷移的關鍵步驟如圖 3-5 所示。第3 章 計算産品和技術61 

下發遷移任務執行遷移遷移準備GW拷貝Session終拷貝Session初拷貝 源端存儲PAUSE 網絡路由表重建 Relay路由建立 VM網絡倒換 目的隻讀打開 目的存儲讀寫管控配置下發源端VM翻譯上報遷移準備VM NC切換VM啟動遷移裝置映射終拷貝VM暫停虛拟化層面 控制層面 存儲、網絡元件 

帶你讀《彈性計算—無處不在的算力》第三章:計算産品和技術3.2虛拟機雲伺服器(一)

圖 3-4  公共雲上的熱遷移

初始化記憶體初拷貝後拷貝VM狀态儲存資源釋放存儲切換網絡切換資源預留記憶體初拷貝後拷貝VM狀态儲存VM啟動源主機目的主機存儲切換網絡切換VM目的主機運作 VM網絡 中斷VM暫停 VM運作在源主機 

帶你讀《彈性計算—無處不在的算力》第三章:計算産品和技術3.2虛拟機雲伺服器(一)

圖 3-5  KVM 熱遷移的關鍵步驟

為了進一步縮短服務停機時間,提升熱遷移的使用者體驗,阿裡雲 ECS 進行了如下 3 個方面的熱遷移優化,如圖 3-6 所示。

1)對關鍵步驟進行最大限度的并行。

2)将非關鍵的操作預處理或延後處理,使其不阻礙熱遷移的關鍵步驟。

3)将核心控制權下移到虛拟化層處理。由于熱遷移中的服務停機時間與虛拟機的負載相關度很高,為了進一步優化阿裡雲 ECS 的熱遷移體驗,将人工智能技術引入熱遷移流程中,用于預測虛拟機的負載趨勢和最佳遷移時間點,盡可能地讓熱遷移62 

發生在虛拟機負載較低的時刻,這樣對使用者的業務影響最小。

BDRV flush 關鍵路徑會話拷貝存儲/網絡 非關鍵操作前置存儲/網絡 非關鍵操作後置網絡會話終拷貝耗時操作拆解/接口優化增加Pre Last Copy階段存儲I/O關閉模式切換中繼轉發VM 終拷貝髒頁壓縮

帶你讀《彈性計算—無處不在的算力》第三章:計算産品和技術3.2虛拟機雲伺服器(一)

圖 3-6  阿裡雲 ECS 的熱遷移優化

這些優化的最終落地,使得阿裡雲 ECS 熱遷移的使用者體驗大幅提升,目前多數小規格虛拟機的服務停機時間在 100 毫秒以内,而稍大規格虛拟機的熱遷移服務停機時間一般都能控制在幾百毫秒内。

熱更新技術

雲計算中的熱更新技術指在客戶業務基本無感覺的情況下,對雲計算基礎設施的元件進行更新操作。在阿裡雲彈性計算服務的技術架構中,我們設計了一套針對QEMU/KVM 等核心虛拟化元件的熱更新系統,并在生産環境的成千上萬的虛拟機上進行了廣泛應用。

在彈性計算服務中,我們持續為客戶增加新的功能,經常要修改QEMU/KVM 等虛拟化監控器軟體。由于虛拟機軟體都會有一些缺陷,而且部分缺陷還會導緻安全第3 章 計算産品和技術63 

方面的風險,是以需要對運作中的虛拟機及虛拟化軟體進行更新。因為對這些更新的請求比較頻繁,而且針對的是雲上數以百萬計的虛拟機,是以必須盡可能地縮短客戶虛拟機的服務中斷時間。在已經存在的傳統技術中,核心熱更新檔技術和上一節介紹的虛拟機熱遷移技術能滿足這樣的需求。不過,在實際的大規模應用中,它們都有一些弊端,是以我們針對這樣的更新需求開發了阿裡雲獨特的虛拟化熱更新技術。表3-1 對這三種熱更新技術進行了比較。

表3-1  三種熱更新技術比較

更新技術 應用場景 優 勢 劣 勢
核心熱更新檔 簡單的核心安全更新檔修複 幾乎無服務中斷時間

不能處理複雜的修複

維護成本高

隻能修複Linux 核心(包括KVM 子產品) 

虛拟機熱遷移 整個系統全新更新 更新伺服器上的所有軟體

可擴充性較弱,需要額外伺服器

遷移過程需要消耗較大的網絡帶寬

遷移過程中虛拟機的服務性能下降,有相對較長的服務中斷時間

不支援直通裝置的熱遷移

阿裡雲虛拟化熱更新

雲上的新功能上線

虛拟化元件上的較複雜的修複

很短的服務中斷時間

可擴充,無額外網絡流量

支援直通裝置

隻能修複虛拟化元件( 包括QEMU/ KVM 等,能滿足雲業務的需求) 

1)核心熱更新檔

核心熱更新檔技術能夠在不重新開機系統的情況下對核心打更新檔,修複問題。它讓運作中的系統基本感受不到服務中斷。但是它不能修複較為複雜的問題,比如對持久性資料結構的改動或者添加新功能;同時它隻能針對核心子產品進行更新。這種技術主要适用于修複較為簡單的Linux 核心(包括KVM 子產品)的安全問題。

2)虛拟機熱遷移

熱遷移技術是雲服務提供商中經常用于軟體更新的技術,阿裡雲也将熱遷移技術大量用于實體硬體維修、虛拟機庫存動态排程等場景。熱遷移需要複制源主機上虛拟機的狀态(如記憶體)到另外一個空閑備用的目的主機上,在最後一輪狀态傳輸時,停止正在運作的虛拟機,複制最後一次改變的狀态,最後在目的主控端上啟動虛拟機, 恢複運作狀态。

通過熱遷移技術,雲服務提供商可以更新伺服器上所有軟體,如主控端核心、虛64 

拟化軟體、損壞的硬體裝置等。不過,在大規模的雲計算資料中心中,熱遷移也受到一些限制,比如它需要額外的空閑伺服器才能遷移;在遷移過程中需要較大的網絡帶寬,如果大量虛拟機同時做熱遷移可能造成一些網絡擁塞;熱遷移的記憶體疊代拷貝需要消耗一些CPU 計算資源,并且最後會停止虛拟機,這個過程對虛拟機運作的性能有損壞并會産生一小段的服務中斷時間;雲上有不少GPU/FPGA 等裝置直通的虛拟機,目前還不能支援帶直通裝置的熱遷移。

3)阿裡雲的虛拟化熱更新

阿裡雲的虛拟化熱更新技術盡可能吸取上述兩種方法的優點,改進它們的不足。阿裡雲的虛拟化熱更新技術支援整個虛拟化軟體棧(主要是使用者态的QEMU 和核心态的KVM 子產品)的熱更新,能實作雲計算環境下較為複雜的新功能的熱更新,比如熱更新支援一種新的分布式存儲系統。它避免了熱遷移的劣勢,不需要額外的伺服器和網絡帶寬,同時虛拟機上感覺到的服務中斷時間比熱遷移短得多。盡管它沒有像熱遷移那樣實作全新的主機切換,但是在雲環境下一般來說也是夠用的。以KVM 虛拟化為例,主機的核心是相對獨立的,使用者虛拟機的新功能開發一般隻要改動QEMU/ KVM 即可實作(對KVM 在2018 年公布的90 多個缺陷進行統計,其中98% 的缺陷發生在QEMU/KVM 上,通過熱更新都可以解決)。

阿裡雲虛拟化熱更新技術裡面有三個關鍵的技術點:雙KVM 核心子產品、虛拟機嫁接、直通裝置移交。下面分别對其做簡單的介紹。

(1)雙KVM 核心子產品

以Intel 硬體平台下的KVM 為例, 普通的KVM 架構有一個與架構無關的 kvm.ko 子產品,還有一個管理Intel 硬體虛拟化的kvm-intel.ko 子產品。在熱更新架構下, 我們做了kvm-intel-0.ko 和kvm-Intel-1.ko 兩個子產品,以便實作KVM 子產品的熱更新, 如圖3-7 所示。我們盡可能地将kvm.ko 子產品中多數的功能都移到kvm-intel-0.ko 子產品中,讓kvm.ko 子產品盡可能“薄”。在一般情況下,它不需要熱更新,隻需要更新架構相關的kvm-intel.ko 子產品即可。當我們加載kvm-intel-0.ko、kvm-intel-1.ko 子產品時,會建立相應的/dev/kvm0、/dev/kvm1 等裝置節點檔案,用于QEMU 與KVM 核心子產品的互動。

(2)虛拟機嫁接

在KVM 上,一個QEMU 程序代表一個虛拟機。虛拟機包括記憶體、虛拟CPU、存儲、網卡等,都是由QEMU 程序來配置設定和管理的。将一個虛拟機從前面提到的kvm0 遷移到kvm1 上,本來可以使用本地熱遷移技術,不過這樣就需要兩份相同大小的虛拟機記憶體,對于記憶體數量很大的虛拟機而言,會浪費不少記憶體資源。在阿裡雲第3 章 計算産品和技術65 

虛拟化熱更新技術中,通過“虛拟機嫁接”将虛拟機的記憶體和内部狀态從一個KVM 執行個體嫁接到另一個KVM 執行個體之上,如圖3-8 所示。我們先将虛拟機的記憶體标為reserved 狀态,然後派生一個新的QEMU 子程序,調用QEMU 中的savevm_state 函數儲存原來虛拟機的内部狀态并暫停虛拟機運作,之後在新的QEMU 子程序中調用execve() 函數加載更新後的QEMU 程式檔案,并通過loadvm_state 函數恢複虛拟機的狀态。在這個過程中,但凡有任何的失敗,系統都會讓最初暫停的QEMU 程序重新恢複原來的狀态。在具體實作中,需要讓新的QEMU 程序在execve() 函數執行後, 能夠保留原虛拟機的記憶體。由于在預設情況下execve() 函數并不支援記憶體的保留, 是以我們在主控端的Linux 核心中對mmap 函數進行了簡單的改造,添加了MAP_ KVM_RESERVED 這樣一個專用于QEMU/KVM 熱更新的标志。

使用者态核心态VM kvm-intel.ko子產品支援Intel VT-x的硬體可替換的部分不可替換的部分支援Intel.VT-x的硬體kvm.ko子產品/dev/kvm /dev/kvm0 /dev/kvm1 很“薄”的kvm.ko子產品VM1 VM2 kvm-intel-0.ko子產品kvm-intel-1.ko子產品

帶你讀《彈性計算—無處不在的算力》第三章:計算産品和技術3.2虛拟機雲伺服器(一)

圖3-7  雙KVM 核心子產品

(3)直通裝置移交

大型的雲服務提供商有不少的計算服務通過将GPU 或FPGA 裝置直通給虛拟機,來加速使用者的諸如深度學習、人工智能相關的應用程式。使用Intel VT-d 技術實作裝置直通,可讓虛拟機直接通路硬體裝置。現代裝置的通路都是由DMA(直接記憶體通路)來完成的,在虛拟化直通裝置的情況下,DMA 通路所需的從GPA(虛拟機實體位址)到HPA(實體機實體位址)的轉化,是由IOMMU 來實作的。如果實作帶有直通裝置的虛拟機的熱更新,那麼需要遷移裝置的内部狀态,重建IOMMU 重映射表,儲存和恢複正在進行的DMA 操作以免造成資料丢失。這是比較複雜的情況, 而且沒有現成架構可以使用。66 

帶你讀《彈性計算—無處不在的算力》第三章:計算産品和技術3.2虛拟機雲伺服器(一)

圖3-8  虛拟機嫁接

在阿裡雲虛拟化熱更新技術中,我們使用了“直通裝置移交”的方式來實作直通裝置的熱更新。由于我們都是使用VFIO 這個架構來實作裝置直通的,VFIO 會在/ dev/vfio/ 目錄下暴露一些裝置節點給QEMU 使用。在熱更新架構中,引入了一個使用者态的VFIO 連接配接器,它将所有與VFIO 相關的檔案描述符和接口(包括/dev/vfio、/ dev/vfio/grp*、 VFIO eventfd 和KVM irqfd 等),以及QEMU 對VFIO 檔案描述符的通路包裝起來,如圖3-9 所示。在熱更新的過程中,隻需要将VFIO 連接配接器的控制權移交給更新後的QEMU 程序即可,避免了裝置狀态的儲存和IOMMU 重映射表的重建等非常複雜的操作。在熱更新架構的設計中,我們通過在裝置移交後立刻給虛拟機注入一個虛拟中斷的方式,解決了中斷丢失的問題。

在一些典型的測試案例( 如空載、Web 伺服器、MySQL 資料庫伺服器、SPECCPU 壓測等)中,阿裡雲虛拟機熱更新帶來的業務中斷時間為30 毫秒左右。該熱更新架構線上上大規模虛拟機的功能疊代、運維更新中發揮了巨大的作用,已經成第3 章 計算産品和技術67 

為阿裡雲彈性計算更新疊代的運維利器,也是阿裡雲虛拟化的核心技術之一。

帶你讀《彈性計算—無處不在的算力》第三章:計算産品和技術3.2虛拟機雲伺服器(一)

圖3-9  直通裝置移交