
虛擬化技術(shù)也分為技術(shù)流派,其中以 KVM、Xen、VMWare (Virtual Machine ware)等為主流。早在2013年,騰訊云基于對虛擬化技術(shù)未來(lái)發(fā)展方向的判斷,放棄當時(shí)的主流XEN虛擬化技術(shù),在業(yè)界率先擁抱開(kāi)源的KVM技術(shù),并將其不斷演進(jìn)。
近日,騰訊云虛擬化技術(shù)負責人陳立東,首次向外界詳細披露其在虛擬化技術(shù)上的技術(shù)演進(jìn)路線(xiàn)。
虛擬化到底是什么?
簡(jiǎn)單來(lái)說(shuō),虛擬化主要是指服務(wù)器資源的虛擬化,即在一臺物理機上為一個(gè)虛擬機構造一個(gè)完整的操作系統的運行環(huán)境,再通俗點(diǎn)說(shuō),就是“把一臺電腦虛擬成N臺電腦”。其中,虛擬化的資源包括 CPU、內存、網(wǎng)絡(luò )和存儲幾個(gè)部分。一般來(lái)說(shuō),在一個(gè)物理機上,通過(guò)虛擬化技術(shù)可以將多個(gè)完整的虛擬機以不同的形式售賣(mài)給不同的客戶(hù),滿(mǎn)足客戶(hù)定制化的需求。
談到虛擬化技術(shù),這其實(shí)并不是一個(gè)新鮮的詞匯,早在 60年代中期,IBM 就已經(jīng)有了虛擬化技術(shù)。近十多年來(lái),尤其是 2005年Intel 推出硬件輔助虛擬化,也就是在 CPU 指令上支持虛擬化,才讓這個(gè)技術(shù)有了一次重大的發(fā)展。
最初,虛擬化技術(shù)的主流是劍橋大學(xué)開(kāi)發(fā)的 Xen。陳立東透露,2010 年騰訊做開(kāi)放平臺時(shí),采用的也是 Xen。之后推出騰訊云公有云產(chǎn)品時(shí),騰訊云選擇了 KVM。之所以做出這個(gè)選擇,陳立東表示,主要的原因是 KVM 技術(shù)是一個(gè)完全開(kāi)源且輕量級的技術(shù),內核對其的支持也做得比較好,是后續技術(shù)發(fā)展的方向。
為了解虛擬化技術(shù)的作用與意義,我們從一張騰訊的云分布式調度系統 VStation 的整體架構圖中來(lái)看。VStation 作為騰訊云計算操作系統,承擔了資源調度、請求排隊的工作。
虛擬化則負責為每臺 CVM(云服務(wù)器(Cloud Virtual Machine))構造出完整的 PC 運行環(huán)境,包括 CPU、內存、網(wǎng)絡(luò )、存儲各個(gè)部分資源。主要包含 libvirt、qemu、kvm 三部分:
- qemu與kvm構成hypervisor,負責CVM資源的虛擬化,在物理機上,虛擬出一個(gè)個(gè)完整的PC環(huán)境;
- libvirt負責提供統一對外的接口,用于管理hypervisor。

圖1. 整體架構
騰訊云虛擬化技術(shù)演進(jìn)路程
據陳立東介紹,在騰訊云的大規模云計算實(shí)踐過(guò)程中,他們遇到一些虛擬化方面的技術(shù)挑戰,也在不斷解決問(wèn)題的過(guò)程中,走出了一條自己的虛擬化技術(shù)路線(xiàn)圖。
挑戰一:如何提高云服務(wù)器的可用性?
第一個(gè)挑戰體現在可用性方面。隨著(zhù)目前硬件發(fā)展的趨勢,服務(wù)器的集成度越來(lái)越高,單臺物理機故障對云服務(wù)器的影響面越來(lái)越大。如何在云上規避物理服務(wù)器宕機對虛擬化的影響,是騰訊云面臨的第一個(gè)挑戰。
陳立東提到,在騰訊云規模達到一定規模時(shí)遇到了一個(gè)問(wèn)題,當時(shí)某個(gè)游戲客戶(hù)投訴騰訊云云服務(wù)器故障率高,云服務(wù)器突然宕機,導致游戲玩家掉線(xiàn),客戶(hù)甚至因此考慮遷移到其他云。這給了陳立東團隊非常大的壓力。
通過(guò)統計服務(wù)器常見(jiàn)的故障原因后,發(fā)現在服務(wù)器故障中最主要的故障原因是內存故障。當內存發(fā)生多 bit UCE錯誤時(shí),就會(huì )導致整個(gè)物理機宕機,一臺物理機上所有的虛擬機都會(huì )隨之宕機。
然而,問(wèn)題是內存硬件上本身存在失效率,低概率的發(fā)生多 bit UCE 錯誤是無(wú)法完全避免的。為了提升云服務(wù)器的可用性,騰訊云采用了多種優(yōu)化方案,這里介紹其中兩個(gè)利器:內存高級 RAS 特性MCA recovery 和熱遷移。
首先是 MCA recovery。為了解決內存故障率的問(wèn)題,騰訊云聯(lián)合了 CPU 廠(chǎng)商,包括 Intel,針對騰訊云單獨定制 CPU。在定制過(guò)程中,騰訊云要求服務(wù)器廠(chǎng)商為騰訊云提供一些更高端的 CPU 特性,其中一個(gè)叫做 MCA Recovery。
之前,如果發(fā)生了內存UCE錯誤,原有的服務(wù)器就會(huì )直接宕機,但在支持了 MCA Recovery后再發(fā)生內存錯誤時(shí),服務(wù)器不會(huì )宕機,只會(huì )發(fā)出警告內存有問(wèn)題,再由上層決定解決如何處理。
騰訊云是首家在數據中心中大規模使用MCA Recovery技術(shù)的云廠(chǎng)商,剛開(kāi)始進(jìn)展并不順利。啟用了MCA Recovery后,大量的UCE錯誤并沒(méi)有成功規避。當時(shí)服務(wù)器ODM廠(chǎng)商,Linux 內核對MCA Recovery支持并不完善。
針對硬件廠(chǎng)商缺陷導致的規避失敗案例,騰訊云開(kāi)發(fā)故障注入工具,作為服務(wù)器 BIOS BMC 廠(chǎng)商引入標準。針對故障注入進(jìn)行長(cháng)時(shí)間壓力測試,確保硬件廠(chǎng)商都按照騰訊云的標準完成硬件引入。
同時(shí),騰訊云還發(fā)現了多個(gè) CPU架構優(yōu)化的案例,通過(guò)修改 Linux 內核軟件盡量避免觸發(fā),大大降低了不可恢復異常的觸發(fā)概率。同時(shí),騰訊云在CPU廠(chǎng)商的下一代CPU中進(jìn)行改進(jìn)優(yōu)化。
對于Linux內核對MCA Recovery的支持,騰訊云也針對性對內核的內存管理模塊和KVM進(jìn)行優(yōu)化。
相關(guān)的優(yōu)化,在騰訊云基于Intel Skylake及其以后代次的云服務(wù)器上都以全面落地。
除了 Intel,騰訊云還聯(lián)合 AMD 落地多項內存RAS 特性,結合其他多項硬件可用性?xún)?yōu)化措施,提升騰訊云AMD云服務(wù)器SA2實(shí)例的可用性。
目前,騰訊云成為首家在數據中心中大規模使用MCA Recovery技術(shù)的公司,通過(guò)一系列的軟硬件結合優(yōu)化,騰訊云 CVM 云服務(wù)器通過(guò) MCA Recovery 已規避大量的內存 UCE 錯誤,大大降低了內存故障率,將騰訊云云服務(wù)器的可用性做到了業(yè)界領(lǐng)先。
第二個(gè)技術(shù)點(diǎn)是熱遷移技術(shù)。
支持了 MCA Recovery等高級RAS特性 后,騰訊云當物理服務(wù)器出現硬件隱患時(shí),雖然不會(huì )宕機,但是已經(jīng)存在隱患了,需要盡快下線(xiàn)維修。這個(gè)時(shí)候正在運行的云服務(wù)器怎么辦?
針對這個(gè)問(wèn)題,騰訊云用熱遷移技術(shù)來(lái)解決,可以把云服務(wù)器從一臺物理機無(wú)感知遷移另一臺,當一臺物理機存在硬件隱患時(shí),把云服務(wù)器遷移到另一臺正常的物理機上。因此,通過(guò)熱遷移技術(shù),騰訊云將云服務(wù)器的可用性提升到高于物理機本身的可用性。

熱遷移示意圖
在大規模落地時(shí),熱遷移的難度體現在兩個(gè)方面,一個(gè)是熱遷移的成功率,如果熱遷移所以來(lái)的服務(wù)器負載過(guò)高,則熱遷移可能失敗,為了提高熱遷移的成功率,騰訊云使用了包括RDMA 在內的多個(gè)熱遷移優(yōu)化,將熱遷移成功率從原來(lái)的 70% 提升至 99%;第二個(gè)難點(diǎn)在于盡量減少熱遷移的停機時(shí)間,目前騰訊云可實(shí)現在 50 毫秒以?xún)鹊臒徇w移停機時(shí)間,基本上可以達到無(wú)感知的水平。
挑戰二:如何降低虛擬化帶來(lái)的損耗?
第二個(gè)挑戰是,虛擬化在同一個(gè)物理機虛擬多個(gè)虛擬機帶來(lái)靈活性,但同時(shí)虛擬化本身會(huì )有一些性能損耗,業(yè)務(wù)希望虛擬化技術(shù)要保證性能與物理機相匹配,盡量減少虛擬化的損耗,這也是虛擬化技術(shù)面臨的很大的挑戰。
在降低虛擬化性能損耗上,陳立東以騰訊內部自研上云的過(guò)程舉例。項目啟動(dòng)不久,微信同事在測試時(shí)反饋其中一個(gè)模塊性能下降超過(guò) 30%。為此,騰訊云投入了多個(gè)資深開(kāi)發(fā)工程師進(jìn)行分析,共做了 7 輪優(yōu)化,最終將 KVM 的虛擬化損耗降低到 5%。
針對 Linux 子機場(chǎng)景,騰訊云也做了一些與 KVM 虛擬化本身結合性的性能優(yōu)化,對外推出了騰訊的 Linux 的發(fā)行版 Tencent Linux,目前已經(jīng)開(kāi)源。
另外,騰訊云還針對 Windows 子機進(jìn)行了大量?jì)?yōu)化,逆向分析Windows內核邏輯,專(zhuān)門(mén)優(yōu)化了 KVM 對 Windows內核的支持,大大提升了 Windows 云服務(wù)器在騰訊云上的性能。
挑戰三:如何提升虛擬化的穩定性?
第三點(diǎn)挑戰是在虛擬化后,包括 CPU 和內存都多出一個(gè)虛擬化層。業(yè)務(wù)希望虛擬化需要和物理機一樣的穩定性,滿(mǎn)足業(yè)務(wù)對響應延時(shí)的極致追求。
除了一些性能測試工具跑分的峰值性能,騰訊云更注重性能的穩定性和業(yè)務(wù)的實(shí)際體現。
陳立東提到,Linux本身的內核度算法是CFS,但是分析了以后,Linux本身的CFS調度算法并不適合完全滿(mǎn)足虛擬化場(chǎng)景的需求,因此騰訊云針對虛擬化場(chǎng)景,自研了一套Linux內核的調度的算法,在內部稱(chēng)之為VMF。這套算法的核心思想要保證虛擬機的任務(wù)要優(yōu)先執行。通過(guò)該技術(shù),騰訊云將虛擬化場(chǎng)景下的調度延時(shí)做到和物理機持平的穩定性。
挑戰四:如何快速交付?
第四點(diǎn)就是交付的效率,使用云后,客戶(hù)希望盡可能快速地獲得大量計算資源,如何為客戶(hù)提供秒級交付體驗也是一個(gè)挑戰。
早期騰訊云的客戶(hù)反饋GPU機型,購買(mǎi)后啟動(dòng)比較慢,需要等幾分鐘后才能啟動(dòng),影響使用體驗。虛擬機啟動(dòng)的時(shí)候,提前分配并鎖住全部的虛擬機內存,而虛擬機內存越大,啟動(dòng)就越慢。這給用戶(hù)帶來(lái)非常糟糕的體驗,當時(shí)也是所有云廠(chǎng)商都存在的一個(gè)問(wèn)題。
在優(yōu)化前,一臺700G規格的一個(gè)虛擬化啟動(dòng),在之前啟動(dòng)需要大概270秒,優(yōu)化以后,將其啟動(dòng)時(shí)間縮短了22秒,大大提升了用戶(hù)的體驗,騰訊云將相關(guān)的優(yōu)化補丁已經(jīng)貢獻到了社區。
輕量級虛擬化是未來(lái)發(fā)展方向
從騰訊虛擬化技術(shù)的演進(jìn)路線(xiàn)中,可以看到虛擬化技術(shù)當前存在的一些技術(shù)難點(diǎn)與熱點(diǎn),希望對云計算開(kāi)發(fā)者帶來(lái)一定的借鑒意義。
最后,陳立東還談到了虛擬化技術(shù)未來(lái)發(fā)展的趨勢和方向。他認為,虛擬化將來(lái)一個(gè)很大的發(fā)展方向就是輕量級虛擬化,而要實(shí)現這一點(diǎn)需要要把虛擬化層做得盡量簡(jiǎn)單,從而降低損耗。
“總的來(lái)說(shuō),要實(shí)現把物理資源進(jìn)行拆分的情況下,盡量減少虛擬化的損耗,這對整個(gè)底層的挑戰還是非常大的。”陳立東指出。