性能媲美裸金屬,邊緣場景高性能虛擬機技術(shù)揭秘
1.走進邊緣云: 邊緣計算背后的性能需求
1.1火山引擎邊緣計算節(jié)點
隨著人工智能、自動駕駛、云游戲、直播音視頻等應(yīng)用場景的大規(guī)模落地,這些應(yīng)用對數(shù)據(jù)處理的時效性、安全性提出了更高要求,集中式云計算模式難以完全滿足其在網(wǎng)絡(luò)時延、帶寬成本、數(shù)據(jù)安全等方面的需求,伴隨用戶對云計算服務(wù)能力的多元化需求,邊緣計算應(yīng)運而生。邊緣計算基于靠近應(yīng)用和數(shù)據(jù)源頭的網(wǎng)絡(luò)邊緣位置,就近提供計算、網(wǎng)絡(luò)、存儲、安全、智能等服務(wù),據(jù)IDC報告顯示,到2024年底,全球在邊緣計算上的支出預(yù)計將達到2320億美元。同時,Gartner報告顯示,到2025年底,全球75%的企業(yè)生成數(shù)據(jù)將會在邊緣產(chǎn)生和處理。
邊緣計算節(jié)點是火山引擎邊緣云提供的通用化邊緣計算服務(wù),其基于覆蓋中國各省份和運營商的邊緣節(jié)點,在核心底座邊緣云原生操作系統(tǒng)之上,提供彈性、可靠、分布式的算力資源和低時延的網(wǎng)絡(luò)資源,幫助用戶將業(yè)務(wù)快速部署到網(wǎng)絡(luò)邊緣,提升響應(yīng)速度、降低帶寬成本,為用戶提供穩(wěn)定、高效、豐富的一站式算力服務(wù)。結(jié)合基礎(chǔ)設(shè)施、通用化計算服務(wù)、場景化計算服務(wù)、網(wǎng)絡(luò)服務(wù)和對應(yīng)解決方案,共同構(gòu)成了邊緣場景下的完整分布式云計算解決方案。
邊緣計算節(jié)點提供如下兩種計算形態(tài):
- 邊緣虛擬機: 提供彈性、穩(wěn)定、高性能、安全的虛擬機實例服務(wù),支持x86/ARM/GPU等多樣化計算資源
- 邊緣裸金屬:基于邊緣基礎(chǔ)設(shè)施,提供高性能、快速交付、便捷運維的裸金屬服務(wù)器
本文主要圍繞邊緣虛擬機實例性能優(yōu)化,深入探討邊緣高性能虛擬機的需求背景、實現(xiàn)原理及背后的核心價值。
1.2邊緣場景的性能需求
邊緣計算節(jié)點目標(biāo)為客戶提供高性價比邊緣算力,部分客戶場景對單位成本下的業(yè)務(wù)性能及性能穩(wěn)定性敏感,以下是兩個案例。
1.2.1直播客戶案例
隨著移動端直播和直播電商的興起,直播行業(yè)已經(jīng)成為數(shù)字經(jīng)濟的重要組成部分。從技術(shù)維度看,直播業(yè)務(wù)對即時性和互動性要求較高,通過利用邊緣低延時算力和網(wǎng)絡(luò)、低成本帶寬,可以顯著提升直播業(yè)務(wù)品質(zhì),降低運營成本。其與邊緣結(jié)合的概要架構(gòu)如下圖所示,主播推流到邊緣節(jié)點、觀眾從其就近的邊緣節(jié)點拉流。在實際直播客戶接入過程中,單位算力所能處理的流量帶寬直接關(guān)聯(lián)該類客戶業(yè)務(wù)成本, 部分上云客戶也對虛擬機和裸金屬性能和成本差異敏感,因此如何能夠讓客戶既使用到虛擬機實例的豐富特性,又提供較好的業(yè)務(wù)性能就是一個重要的議題。
1.2.2加速客戶案例
基于覆蓋全球的加速節(jié)點和網(wǎng)絡(luò)基礎(chǔ)設(shè)施,實現(xiàn)游戲/應(yīng)用加速是邊緣計算的另一個重要場景,該類客戶對延時和網(wǎng)絡(luò)抖動敏感,下圖是一個使用邊緣云全球加速和邊緣虛擬機產(chǎn)品實現(xiàn)跨域加速的案例。用戶就近接入全球加速網(wǎng)絡(luò),通過分布在邊緣機房的虛擬機實例部署業(yè)務(wù)服務(wù),并最終通過公網(wǎng)和跨域?qū)>€與目標(biāo)服務(wù)通信。該部分客戶對網(wǎng)絡(luò)抖動有較低容忍度,經(jīng)過深入分析,中斷/進程搶占、大量VM Exit 均會造成客戶業(yè)務(wù)抖動,如何能夠盡量降低虛擬化層對業(yè)務(wù)的干擾就成了保障加速類客服服務(wù)質(zhì)量的關(guān)鍵。
2.極致優(yōu)化:高性能虛擬機如何實現(xiàn)“零”損耗
上述業(yè)務(wù)需求驅(qū)動我們思考如何能夠降低虛擬化層對性能的擾動,提高業(yè)務(wù)場景的虛擬機單位性能。邊緣高性能虛擬機項目于是誕生,其詳細介紹如下:
2.1整體架構(gòu)
邊緣計算通過虛擬化技術(shù)向用戶提供云計算基礎(chǔ)服務(wù),底層基座依托于Qemu+KVM來實現(xiàn)虛擬化(資源,安全等)隔離。Qemu+KVM的虛擬化方案雖然會盡可能的利用硬件能力來降低虛擬化開銷,但是像CPU核間中斷(IPI),Timer中斷,虛擬設(shè)備中斷等仍存在大量虛擬化開銷,同時虛擬化硬件加速能力(如Posted Interrupt等)設(shè)計的復(fù)雜性也會帶來額外硬件開銷。我們通過修改Host Kernel,KVM模塊等方式,為云計算提供了一種新的硬件完全直通,性能損耗極低的高性能虛機方案。
該方案的設(shè)計理念是打破虛擬化的“邊界”,讓Guest Kernel像Host Kernel一樣運行在物理機上。為了讓CPU/Memory/設(shè)備等硬件的資源需要直接assign給Guest,每個高性能虛擬機的vCPU需要獨占一個物理CPU,內(nèi)存,中斷等資源。
邊緣高性能虛擬機的設(shè)計目標(biāo):
- VM Exit數(shù)量降至最低,對標(biāo)裸金屬
- Guest鏡像無感,無須修改Guest鏡像
- 支持熱升級,熱遷移等云上基礎(chǔ)能力
- 支持和通用VM實例混部的能力
其整體架構(gòu)設(shè)計如下:
2.2關(guān)鍵技術(shù)
Intel 的 VT-x 技術(shù)是在 2005 年首次發(fā)布的。VT-x 技術(shù)是 Intel 虛擬化技術(shù)的一部分,旨在提高虛擬化性能并增強虛擬化軟件的功能。Intel VT-x 引入了 Root 模式和 Non-Root 模式:Root 模式是虛擬機監(jiān)視器(VMM)運行的特權(quán)模式,也稱為 Hypervisor 模式;Non-Root 模式是客戶操作系統(tǒng)或虛擬機運行的模式。借助VMLAUNCH/VMRESUME指令,VMM將控制權(quán)轉(zhuǎn)移給虛擬機,當(dāng)虛擬機在運行過程中需要執(zhí)行特權(quán)指令或訪問受保護資源時,會產(chǎn)生VM Exit將控制權(quán)轉(zhuǎn)移給VMM,由VMM協(xié)助模擬處理。
- Guest中斷不退出機制
中斷虛擬化對虛擬化的影響是非常大的,早期虛擬化的實現(xiàn)中,向Guest注入中斷前一般要先將vCPU從Non-Root模式kick出來,然后由VMM模擬中斷控制器,完成中斷的注入。盡管后來CPU廠商為虛擬化引入了apicv等硬件加速技術(shù),減少了Guest訪問LAPIC寄存器引入的虛擬化損耗,但仍需要VMM協(xié)助完成中斷的注入。再后來,Posted-Interrupt技術(shù)以及VT-d技術(shù)進一步緩解了這個問題,但是在解決中斷注入問題的同時,硬件層面也引入了不小的性能開銷,我們測試對比發(fā)現(xiàn),相比裸金屬物理設(shè)備直接產(chǎn)生中斷,通過Posted-Interrupt方式注入中斷的延遲要高出很多。
在高性能虛擬機的設(shè)計框架下,除了虛擬設(shè)備這些必須要要模擬注入的中斷,直通設(shè)備,LAPIC Timer等設(shè)備產(chǎn)生的中斷能直接投遞給Guest,就像他們在物理環(huán)境中直接投遞給物理CPU一樣。通過配置VMCS中的INTR_EXITING字段,可以控制外部中斷發(fā)生時Guest不退出,以此為基礎(chǔ),我們實現(xiàn)了一個外部中斷不會導(dǎo)致Guest退出的基礎(chǔ)框架,后續(xù)所有的中斷都將盡可能的直接投遞給Guest,而不是產(chǎn)生external interrupt VM Exit后再由VMM模擬注入。
但是,真實世界中,物理CPU上產(chǎn)生的中斷并不是全部都是屬于Guest的,比如host kernel IPI中斷,host設(shè)備中斷如NVMe SSD等。對于設(shè)備中斷,可以通過修改host kernel實現(xiàn)設(shè)備中斷隔離技術(shù),將所有的設(shè)備的中斷affinity調(diào)整隔離到指定的控制面CPU上;對于系統(tǒng)中斷如IPI,這類中斷必須由本地CPU處理,可以通過send IPI as NMI技術(shù),將IPI中斷類型修改為NMI type,從而強行將vCPU kick出來后在Host kernel處理這些系統(tǒng)中斷。至此,我們?yōu)檫\行高性能虛擬機的物理CPU隔離出一個“干凈的”vCPU運行環(huán)境。在這個環(huán)境下,“幾乎”所有的Host中斷都不會投遞到該CPU上,一旦收到中斷,一定是Guest中斷,中斷會直接投遞到Guest或者通過VMM記錄pending Guest interrupt并在下次Guest enter時注入。
- Timer中斷直通技術(shù)
虛擬化場景下,Guest Timer是由VMM負責(zé)模擬的。以x86 CPU虛擬化為例,KVM為每個vCPU模擬一個LAPIC Timer,LAPIC Timer虛擬化的開銷當(dāng)前是很大的,以常見的Intel TSC Deadline Mode為例,Guest編程TSC Deadline MSR時會產(chǎn)生一次VM Exit,Timer到期fire時又會因為external interrupt產(chǎn)生一次VM Exit。Intel在最新一代CPU上引入了apic Timer硬件加速來降低這些開銷,但一是這些新的CPU還沒有大規(guī)模商業(yè)化,真正的性能收益未知,二是與posted-Interrupt類似,這類硬件加速技術(shù)一般會引入一定的硬件性能損耗。
在高性能虛擬機技術(shù)方案中,由于host控制面CPU要處理的工作不繁重,我們強制host CPU使用早期的Broadcast Timer,然后將每個CPU的LAPIC Timer完全直通給Guest使用。對于直通給Guest的LAPIC Timer,通過配置Guest修改TSC Deadline MSR不退出,再借助前面介紹的Guest中斷直接投遞機制,實現(xiàn)Guest LAPIC Timer沒有任何VM Exit。
- 繞過Posted-Interrupt機制的VFIO中斷直通技術(shù)
在傳統(tǒng)的虛擬化場景中,對于直通設(shè)備的中斷注入是基于Posted-interrupt機制(Intel)來完成的,Posted-Interrupt機制會帶來額外的硬件開銷。借助VFIO框架,直通設(shè)備產(chǎn)生中斷時,首先被IOMMU攔截,然后通過查找IOMMU中的IRTE表項,找到要投遞給Guest的目的vCPU和中斷vector,最終通過IOMMU的Interrupt remapping或者Posted-Interrupt機制完成中斷的注入。
高性能虛擬機通過巧妙地修改硬件IOMMU IRTE表項,使其直接記錄要投遞給Guest的destination vCPU和vector,從而實現(xiàn)了直通設(shè)備的中斷直接投遞到Guest內(nèi)部的效果。
- IPI extreme fastpath
虛擬化場景下,Guest內(nèi)部發(fā)送IPI會寫LAPIC ICR寄存器,該操作會產(chǎn)生VM Exit,最終由VMM負責(zé)模擬,并注入IPI中斷給目的vCPU。
出于安全性考慮,高性能虛擬機沒有將ICR直通給虛機,因此Guest IPI仍需要VMM協(xié)助模擬。在社區(qū)IPI fastpath的基礎(chǔ)上進一步優(yōu)化,使用匯編重寫簡化了VMM模擬IPI的邏輯,并在VMM側(cè)寫ICR產(chǎn)生IPI中斷直接投遞到Guest,最大限度的降低write ICR exiting模擬帶來的性能開銷。
- 內(nèi)核資源動態(tài)隔離技術(shù)
為了讓高性能虛擬機最大限度的獨占物理核,我們構(gòu)建了一套完整的的內(nèi)核資源隔離技術(shù),達到將timer中斷,外部設(shè)備中斷,host進程等干擾要素隔離的效果。
- 對于host timer中斷,內(nèi)核提供了NOHZ_full 技術(shù),NOHZ_full 通過減少定時器中斷的頻率來優(yōu)化系統(tǒng)性能。但是該技術(shù)是靜態(tài)配置技術(shù),需要在內(nèi)核cmdline中提前配置。高性能虛擬機方案借助NOHZ_full基礎(chǔ)框架,實現(xiàn)了dynamic nohz_full技術(shù),能夠?qū)崿F(xiàn)vCPU enter Guest時,動態(tài)的進入nohz_full狀態(tài),并在vCPU exit Guest時,動態(tài)退出nohz_full狀態(tài),最大程度減少host Timer中斷對Guest運行時的影響;
- 類比內(nèi)核已有的isolCPUs中斷隔離技術(shù),對于分配給高性能虛擬機的host CPU核,創(chuàng)建虛機前,將所有的host中斷遷移到控制面CPU上,并確保新創(chuàng)建的中斷也不會遷移到這些CPU上;
- 類比內(nèi)核已有的isolCPUs進程隔離技術(shù),對于分配給高性能虛擬機的host CPU核,創(chuàng)建虛機前,將所有host進程遷移到控制面CPU上,并確保創(chuàng)建虛機后,vCPU線程不會被隨便遷移走。
2.3場景測試
- Micro Benchmark(單位ns,less is better),在Guest內(nèi)執(zhí)行IPI Benchmark等測試工具,測量IPI單播延遲,IPI 多播延遲,單次Timer中斷延遲,單次核心MSR寄存器訪問延遲,可發(fā)現(xiàn)核心中斷延遲和 MSR 寫入延時大幅降低。
- VM Exit數(shù)量統(tǒng)計
通用實例和高性能實例均配置了idle=poll
,通過在Guest內(nèi)redis-benchmark等本地壓測工具,在Host側(cè)統(tǒng)計壓測過程中的VM Exit數(shù)量,可以看到,在這兩個測試 Case 下高性能實例減少了超過 99% 的 VM Exit。
通用實例 VM Exit主要集中在三類:
- MSR_WRITE
- External interrupt
- Preemption_Timer
- 云服務(wù)器基準(zhǔn)場景性能測試對比,性能提升從 6% ~16% 不等。測試工具使用社區(qū)成熟的壓測工具如wrk、ab、redis-benchmark、netperf等進行壓測,網(wǎng)絡(luò)拓撲為一臺虛擬機與一臺物理機互相壓測。
3.業(yè)務(wù)賦能: 邊緣場景應(yīng)用性能大幅提升
邊緣高性能虛擬機當(dāng)前已在線上逐步應(yīng)用,在多個邊緣應(yīng)用場景均有明顯收益,以下就實際業(yè)務(wù)場景舉例說明。
3.1CDN場景
內(nèi)容分發(fā)網(wǎng)絡(luò)(Content Delivery Network)是一種通過部署在全球各地的服務(wù)器網(wǎng)絡(luò),將內(nèi)容(如文本、圖像、視頻等)快速傳輸?shù)接脩舻木W(wǎng)絡(luò)的技術(shù)系統(tǒng)。CDN 可以減輕源服務(wù)器壓力、提高網(wǎng)站性能、加速內(nèi)容傳輸速度和改善用戶體驗,當(dāng)前已成為現(xiàn)代網(wǎng)絡(luò)架構(gòu)中的重要基礎(chǔ)服務(wù)。通過應(yīng)用邊緣高性能實例,某CDN客戶在同等壓力下的 CPU 使用率較通用實例降低 13.9~23.2%,較裸金屬差異 0.2% ~ 2.9%,支撐該客戶成功上云。
3.2音視頻直播場景
實時音視頻(Real - Time Communication)是一種允許用戶在網(wǎng)絡(luò)上進行實時的音頻和視頻通信的技術(shù)。它能夠?qū)崿F(xiàn)低延遲的音視頻傳輸,廣泛應(yīng)用于視頻會議、在線教育、直播互動、遠程醫(yī)療等眾多領(lǐng)域。邊緣高性能實例為實時音視頻業(yè)務(wù)提供了高效的轉(zhuǎn)發(fā)能力,相較于通用實例業(yè)務(wù)性能提升24.2%,相較于裸金屬實例性能基本持平。
直播場景如文章開篇所述,對于邊緣計算節(jié)點有性能訴求,通過應(yīng)用邊緣高性能實例,為客戶降低23.7%以上的CPU 占用,性能和裸金屬持平。
3.3加速場景
針對前述加速場景的性能穩(wěn)定性訴求,通過使用邊緣高性能實例,降低VM Exit帶來的性能抖動,能為業(yè)務(wù)帶來和裸金屬一樣的延時穩(wěn)定性。
4.總結(jié)與展望
目前邊緣高性能虛擬機已在邊緣計算節(jié)點上線應(yīng)用,基于其低虛擬化損耗設(shè)計與實現(xiàn),大幅降低VM Exit,提供接近裸金屬的業(yè)務(wù)性能,在多個邊緣場景均有較好業(yè)務(wù)收益。未來高性能虛擬機將進一步擴展業(yè)務(wù)接入范圍,覆蓋 GPU 等異構(gòu)算力場景,持續(xù)為邊緣應(yīng)用提供高性價比、穩(wěn)定算力支撐。歡迎感興趣的用戶通過如下渠道溝通交流,接入邊緣計算節(jié)點、體驗低延時算力。