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