熱遷移、RTC 計(jì)時(shí)與安全增強(qiáng)…騰訊云 KVM 性能優(yōu)化實(shí)踐經(jīng)驗(yàn)談

大數(shù)據(jù)

寫在前面

前不久,KVM Forum 大會(huì)發(fā)布了 2017 年最新 KVM 開源貢獻(xiàn)榜,騰訊云因其向 KVM 內(nèi)核貢獻(xiàn)了 46 個(gè) patch,成為全球唯一一家上榜的公有云廠商。據(jù)了解,這些補(bǔ)丁大多是騰訊云在實(shí)戰(zhàn)過程中的經(jīng)驗(yàn)總結(jié),主要用于改善和解決 KVM 虛擬機(jī)在熱遷移,時(shí)鐘計(jì)時(shí)、嵌套虛擬化等方面的使用問題以及修復(fù)一些安全漏洞。

在開源的所有 patch 里,比較引人注目的是,騰訊云率先采用快速寫保護(hù)、共享臟頁位圖、優(yōu)化熱遷移塊大小等一系列方式,優(yōu)化熱遷移效率以及提升熱遷移成功率。那么,它的虛擬機(jī)熱遷移過程和具體方法是什么?騰訊云又如何看待 KVM 技術(shù)開源?KVM 現(xiàn)在面臨著哪些新的挑戰(zhàn)?帶著這些問題,InfoQ 采訪了騰訊云高級(jí)工程師肖光榮,就騰訊云的 KVM 開源技術(shù)與開源思路做了簡單交流。

Q:簡單闡述一下 KVM 虛擬化技術(shù)以及 KVM 和云計(jì)算的關(guān)系?

肖光榮:?KVM 是 Kernel-based Virtual Machine 的簡稱,KVM 要求 CPU 支持硬件虛擬化技術(shù)(如 intel VT 或 AMD-V),是 Linux 下的全虛擬化解決方案。KVM 由處于內(nèi)核態(tài)的KVM模塊和用戶態(tài)的 QEMU 兩部分構(gòu)成。內(nèi)核模塊實(shí)現(xiàn)了 CPU 和內(nèi)存虛擬化等決定關(guān)鍵性能和核心安全的功能并向用戶空間提供了使用這些功能的接口,QEMU利用KVM模塊提供的接口來實(shí)現(xiàn)設(shè)備模擬、 IO 虛擬化和網(wǎng)絡(luò)虛擬化等。單個(gè)虛擬機(jī)是宿主機(jī)上的一個(gè)普通 QEMU 進(jìn)程,虛擬機(jī)中的 CPU 核(vCPU)是 QEMU 的一個(gè)線程,VM 的物理地址空間是 QEMU 的虛擬地址空間(圖 1)。

vCPU 線程經(jīng)過KVM模塊提供的系統(tǒng)調(diào)用進(jìn)入到宿主機(jī)內(nèi)核態(tài),在內(nèi)核態(tài)切換到CPU的非根模式,即 guest 模式,此時(shí)虛擬機(jī)內(nèi)的 CPU 獲得宿主機(jī) CPU 資源,得以執(zhí)行。在 guest 模式中,遇到敏感指令無法直接執(zhí)行,或者有特定的內(nèi)部異常和外部中斷產(chǎn)生,vCPU 會(huì)退出到根模式由 KVM 內(nèi)核或 QEMU 來模擬執(zhí)行(圖 2)。

大數(shù)據(jù)

KVM 虛擬化技術(shù)是當(dāng)前云計(jì)算中計(jì)算虛擬化的主流技術(shù),是云計(jì)算的核心底層能力,使用 KVM 把多臺(tái)物理機(jī)虛擬化后,組成一個(gè)大的虛擬資源池,方便用戶從資源池中按需分配計(jì)算能力,提升資源的使用效率,同時(shí)保證多用戶資源之間的隔離性、安全性。

Q: 騰訊云此次向 KVM 社區(qū)貢獻(xiàn)的 46 個(gè) patch 主要解決了哪些問題?

肖光榮:這 46 個(gè) patch 是我們?cè)趯?shí)戰(zhàn)過程中的經(jīng)驗(yàn)總結(jié),用于改善和解決 KVM 虛擬機(jī)在實(shí)際運(yùn)營過程中遇到的一些問題,這些Patch主要應(yīng)用在以下三個(gè)方面:

時(shí)鐘方面重構(gòu) KVM 的 RTC 計(jì)時(shí)框架。讓 windows 虛擬機(jī)的時(shí)鐘系統(tǒng)在時(shí)鐘頻率頻繁調(diào)整的情況下保持精準(zhǔn)。重構(gòu) KVM LAPIC Timer 的模式切換和頻率調(diào)整的模擬,使其完全與硬件行為保持一致。優(yōu)化 KVM LAPIC Timer 時(shí)鐘中斷注入的延遲。發(fā)現(xiàn)并解決了使用硬件輔助的 VMX Preemption Timer 模擬的 KVM LAPIC Timer 時(shí)的各種搶占問題。嵌套虛擬化方面重構(gòu)異常注入的邏輯。解決了嵌套虛擬化下異常丟失的問題。添加異步缺頁異常 (Async Page Fault) 在嵌套虛擬化下的支持。這些問題的解決,使得嵌套虛擬化更加穩(wěn)定和高效,可以讓更多的用戶在不導(dǎo)鏡像的情況下,將業(yè)務(wù)遷移上云。修復(fù) KVM 將宿主機(jī)信息外泄的問題。修復(fù)KVM在模擬CPUID指令和處理虛擬機(jī)設(shè)備訪問時(shí),意外地將宿主機(jī)上的內(nèi)存泄露到虛擬機(jī)。

Q:騰訊云在虛擬機(jī)熱遷移技術(shù)上有比較明顯的突破,能否講解一下虛擬機(jī)的遷移過程以及騰訊云如何提升熱遷移性能?

肖光榮:虛擬機(jī)熱遷移是一項(xiàng)非常重要的技術(shù),熱遷移可以在用戶幾乎無感知的情況下將虛擬機(jī)從當(dāng)前宿主機(jī)遷到另外的宿主機(jī),熱遷移主要用于解決一些軟硬件不可逆場景下的虛擬機(jī)可用性問題,如:宿主機(jī)硬件批次性隱患、宿主機(jī)內(nèi)核內(nèi)存泄漏等。騰訊云內(nèi)部大量地使用熱遷移來提升虛擬機(jī)的可用性,從近一年的統(tǒng)計(jì)數(shù)據(jù)來看,已經(jīng)做到虛擬機(jī)的可用性大于物理機(jī)。

虛擬機(jī)的熱遷移主要有下面幾步:

在目標(biāo)宿主機(jī)上準(zhǔn)備虛擬機(jī)運(yùn)行環(huán)境,如掛載共享存儲(chǔ),創(chuàng)建虛擬網(wǎng)絡(luò)等;從源宿主機(jī)建立到目標(biāo)宿主機(jī)的連接,用于傳輸虛擬機(jī)的狀態(tài),比如內(nèi)存;源端需要捕捉內(nèi)存的更改并記錄在內(nèi)存?zhèn)鬏斶^程中有哪些頁面被改動(dòng),這些臟頁需要在下一輪迭代中繼續(xù)傳輸;傳輸全量內(nèi)存;本輪內(nèi)存?zhèn)鬏斖戤吅螅绻O碌呐K頁數(shù)量能在設(shè)定的停機(jī)時(shí)間內(nèi)傳輸完畢,那么將虛擬機(jī)停機(jī),否則繼續(xù)傳輸臟內(nèi)存,直到臟內(nèi)存的量收斂到可以在預(yù)定時(shí)間內(nèi)傳輸完成為止;傳輸余下的臟內(nèi)存,以及停機(jī)時(shí) CPU 寄存器和各個(gè)子系統(tǒng)的狀態(tài);此時(shí)源端和目標(biāo)端的虛擬機(jī)狀態(tài)完全一致,在目標(biāo)端讓虛擬機(jī)恢復(fù)運(yùn)行,遷移完畢。

如上所述,源端需要去捕獲內(nèi)存的更改,在當(dāng)前的環(huán)境下是采用寫保護(hù)和臟頁位圖的方法,即先把內(nèi)存全部變?yōu)橹蛔x,在虛擬機(jī)寫內(nèi)存時(shí)就會(huì)產(chǎn)生異常被KVM內(nèi)核模塊捕獲并且記錄到臟頁位圖,該臟頁位圖最后被復(fù)制到QEMU,據(jù)此QEMU能知道哪些內(nèi)存被更改。

對(duì)于臟頁內(nèi)存的捕獲,我們主要通過兩大方式提升熱遷移效率:1)采用快速寫保護(hù)算法,該算法是無鎖的并且算法復(fù)雜度為 O(1),這就意味著它的性能與虛擬機(jī)的內(nèi)存大小和工作負(fù)載無關(guān)。2)采用KVM內(nèi)核模塊和QEMU共享臟頁位圖的方法,實(shí)現(xiàn)零拷貝以及減少用戶態(tài)和內(nèi)核態(tài)的上下文切換。

另外在遷移臟塊的時(shí)候,針對(duì)子機(jī)內(nèi)部 IO 性能下降的問題,優(yōu)化熱遷移塊大小,避免傳輸無用數(shù)據(jù),提升熱遷移成功率。當(dāng)然,騰訊云還有很多其他提升熱遷移性能和穩(wěn)定性的優(yōu)化方法,在此就不一一列舉了。

Q:騰訊云如何看待云廠商們對(duì) KVM 開源的貢獻(xiàn)和支持問題?

肖光榮:騰訊云一直秉承開放,共享的心態(tài)參與開源,憑借龐大的用戶群和 KVM 集群規(guī)模,騰訊云在 KVM 虛擬化上做了深入的研究和豐富的實(shí)踐。騰訊云自 2017 年 5 月加入 Linux 基金會(huì)以來,更加大了回饋社區(qū)的力度。在 KVM 內(nèi)核領(lǐng)域,已經(jīng)是貢獻(xiàn)度最高的公有云廠商。

過去,大型開源項(xiàng)目一直鮮見中國大型企業(yè)的身影,所以開源界一直詬病中國企業(yè)只索取不貢獻(xiàn),作為公有云的一線廠商,我們希望通過實(shí)際行動(dòng)轉(zhuǎn)變開源界的看法。

當(dāng)前 KVM 虛擬化技術(shù)是各家云廠商使用的主流虛擬化技術(shù),騰訊云有一個(gè)專門負(fù)責(zé)做開源的團(tuán)隊(duì),該團(tuán)隊(duì)一方面將持續(xù)創(chuàng)新以來解決騰訊云線上遇到的各種挑戰(zhàn)并且將產(chǎn)出反饋給社區(qū),另一方面探索云計(jì)算領(lǐng)域的新技術(shù),做好前沿技術(shù)的預(yù)演和積累。同時(shí)我們也希望各大云廠商加大對(duì) KVM 項(xiàng)目的投入,積極參與到社區(qū),共同應(yīng)對(duì)新硬件,新架構(gòu)給 KVM 帶來的挑戰(zhàn)。

Q:KVM 技術(shù)現(xiàn)在面臨著哪些新的挑戰(zhàn)?

肖光榮:一方面,Intel 不斷推出新 CPU 架構(gòu):haswell、broadwell、skylake 到 cascadelake,網(wǎng)絡(luò)帶寬從 10G 到 25G 再到 100G,更新的硬件架構(gòu),更高的網(wǎng)絡(luò)帶寬需要更高效的虛擬化才能將硬件的性能充分發(fā)揮。另一方面,GPU、FPGA 在 KVM 上的虛擬化、池化有待突破,否則 GPU、FPGA 的整體利用率無法提升。虛擬機(jī)網(wǎng)絡(luò)性能一直是虛擬化的短板,利用智能網(wǎng)卡等技術(shù)可以將網(wǎng)絡(luò)性能做到和物理機(jī)旗鼓相當(dāng),但同時(shí)也讓熱遷移變得困難。

極客網(wǎng)企業(yè)會(huì)員

免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書面權(quán)利通知或不實(shí)情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。

2017-11-15
熱遷移、RTC 計(jì)時(shí)與安全增強(qiáng)…騰訊云 KVM 性能優(yōu)化實(shí)踐經(jīng)驗(yàn)談
寫在前面 前不久,KVM Forum 大會(huì)發(fā)布了 2017 年最新 KVM 開源貢獻(xiàn)榜,騰訊云因其向 KVM 內(nèi)核貢獻(xiàn)了 46 個(gè) patch,成為全球唯一一家

長按掃碼 閱讀全文