01虛擬化概述
1.1驅(qū)動力和優(yōu)勢
虛擬化是一種廣泛使用的技術(shù),支撐了幾乎所有現(xiàn)代云計算和企業(yè)基礎(chǔ)設(shè)施。開發(fā)人員基于虛擬化功能可以在單臺機器上運行多個操作系統(tǒng),從而完成軟件測試而不會存在破壞主計算環(huán)境的風(fēng)險。虛擬化為芯片和基礎(chǔ)設(shè)施帶來了許多特性,包括良好的隔離性、不同資源的可及性、同一資源的工作負載平衡、隔離保護等。 對于汽車芯片,尤其是座艙域SoC,當(dāng)前的發(fā)展趨勢是通過提高集成度來節(jié)省成本,因此在同一個SoC芯片上會集成多個操作系統(tǒng)對應(yīng)的物理資源,這些資源需要在虛擬化環(huán)境中安全隔離的情況下共存。具體而言,車載SoC虛擬化需要面臨的要求和挑戰(zhàn)有:
至少三個具有不同安全要求和異構(gòu)操作系統(tǒng)的域之間的隔離,運行RTOS操作系統(tǒng)的需要滿足ASIL-D安全等級要求的安全島,運行QNX或輕量級Linux操作系統(tǒng)的需要滿足ASIL-B安全等級要求的儀表域,運行Android或鴻蒙操作系統(tǒng)的信息和娛樂域系統(tǒng)。
關(guān)鍵資源的可及性和工作負載平衡,包括內(nèi)存、CPU工作線程等,尤其是在GPU或NPU處理巨大工作負載時。在功率約束和內(nèi)存容量限制下,通過虛擬化來動態(tài)保證資源的可用性和靈活性。
1.2Hypervisor簡介
Hypervisor是虛擬化功能最核心的支持組件。Hypervisor主要負責(zé)處理虛擬機下陷和管理實際物理資源等功能。Hypervisor主要可以分為兩大類:
原生獨立的Hypervisor,一般稱為Type1 Hypervisor。這類Hypervisor以最高權(quán)限運行,控制和管理所有物理資源。在這類Hypervisor運行過程中,與每個虛擬機相關(guān)的資源管理和調(diào)度功能可以卸載到該虛擬機的操作系統(tǒng)中實現(xiàn),這樣管理程序可以專注于與虛擬化相關(guān)的功能。這類Hypervisor典型的案例有QNX Hypervisor和Xen Hypervisor等。
主操作系統(tǒng)內(nèi)嵌Hypervisor擴展,一般稱為Type2 Hypervisor,基本管理功能可以通過主機操作系統(tǒng)實現(xiàn),Hypervisor擴展只專注于虛擬化支持,與主機操作系統(tǒng)配合實現(xiàn)虛擬化功能。這類Hypervisor典型的案例有Linux KVM等。
對應(yīng)于ARM異常處理體系結(jié)構(gòu),通常虛擬機操作系統(tǒng)的應(yīng)用程序或用戶空間處于EL0安全等級。虛擬機操作系統(tǒng)的內(nèi)核態(tài)空間處于EL1安全等級。為了支持虛擬化擴展引入EL2安全等級。具體安全等級細分如下圖所示:
對于Type1 Hypervisor:屬于虛擬機操作系統(tǒng)用戶態(tài)空間在EL0安全等級,虛擬機操作系統(tǒng)內(nèi)核態(tài)在EL1安全等級,獨立的Hypervisor在EL2安全等級。
對于Type2 hypervisor:虛擬機操作系統(tǒng)用戶態(tài)空間和宿主機操作系統(tǒng)的用戶態(tài)空間都在EL0 安全等級,虛擬機操作系統(tǒng)內(nèi)核態(tài)在EL1安全等級。帶有Hypervisor擴展的宿主機操作系統(tǒng)內(nèi)核態(tài)空間在EL2安全等級。
圖1. Hypervisor類型和對應(yīng)ARM異常處理等級 從不失一般性出發(fā),后續(xù)章節(jié)將以 QNX Hypervisor相關(guān)的軟件實現(xiàn)和基于ARMv8.0體系結(jié)構(gòu)的硬件實現(xiàn)作為典型示例來介紹當(dāng)前虛擬化的主要問題和解決方案。根據(jù)虛擬化場景的功能劃分,當(dāng)前主流座艙SoC的虛擬化大致可以分為三類:
用于VM管理和執(zhí)行的CPU虛擬化;
用于內(nèi)存空間分離和管理的內(nèi)存虛擬化;
以及用于設(shè)備配置和管理的設(shè)備虛擬化。
02CPU虛擬化
2.1CPU虛擬化概述
CPU或處理器可以為VM提供虛擬處理器的抽象,并執(zhí)行特定VM的相應(yīng)指令。通常來說,Hypervisor管理程序直接在物理CPU上執(zhí)行,占用物理資源并直接使用物理CPU的ISA。而虛擬機操作系統(tǒng)基于虛擬處理器的抽象占用相關(guān)資源并執(zhí)行相關(guān)指令,除了需要更高權(quán)限的動作外,大部分場景也可以直接使用物理CPU資源和物理CPU的ISA。 Hypervisor和VM的協(xié)同管理是通過虛擬機下陷機制實現(xiàn)的,通常這種下陷是VM或應(yīng)用需要更高的權(quán)限才能執(zhí)行的時候會產(chǎn)生。在ARM架構(gòu)中,上面介紹的對虛擬化的異常處理等級,VM和應(yīng)用程序最多可以擁有EL1權(quán)限,因此對于不允許執(zhí)行的指令,將觸發(fā)虛擬機陷阱。詳細流程如下:
通常情況下,VM在物理CPU上運行其指令,與沒有Hypervisor的情況下一樣;
當(dāng)虛擬機操作系統(tǒng)或應(yīng)用程序試圖執(zhí)行一條超出執(zhí)行權(quán)限的指令時,觸發(fā)虛擬機下陷,虛擬機操作系統(tǒng)做上下文切換,切到Hypervisor程序;
發(fā)生虛擬機陷阱后,Hypervisor接管現(xiàn)場,并保存虛擬機的上下文,之后處理虛擬機操作系統(tǒng)開啟的任務(wù);
當(dāng)Hypervisor完成任務(wù)后,恢復(fù)VM的上下文并將執(zhí)行權(quán)限交還給VM。
圖2. 虛擬機下陷機制和處理流程 虛擬機抽象和下陷處理機制將在后續(xù)QNX Hypervisor和ARM體系結(jié)構(gòu)中進一步介紹。
2.2QNX虛擬機和虛擬處理器支持
QNX Hypervisor軟件架構(gòu)中資源和組件的詳細層次結(jié)構(gòu)如下圖所示,從Hypervisor作為操作系統(tǒng)視角來看,各個VM需要通過例化qvm進程來在Hypervisor操作系統(tǒng)用戶態(tài)空間中注冊。在配置某個VM時,會根據(jù)規(guī)范創(chuàng)建一個對應(yīng)的qvm進程并進行配置,用以指定該VM的組件,包括虛擬虛擬處理器vCPU、虛擬設(shè)備、內(nèi)存管理頁表配置等。
圖3. QNXHypervisor資源層級示意圖 在Hypervisor正常運行期間,qvm 進程實例需要執(zhí)行以下操作:
捕獲從虛擬機出入的訪問嘗試,并根據(jù)類型進行相應(yīng)的處理;
在切換物理CPU之前保存VM的上下文;
在物理CPU重新執(zhí)行某個VM之前恢復(fù)該VM的上下文;
負責(zé)虛擬化相關(guān)故障處理;
執(zhí)行確保虛擬機完整性所需的維護程序。
在一個qvm進程被例化的同時,會在進程內(nèi)實例化多個vCPU線程、虛擬設(shè)備列表和Stage2頁表,分別用于應(yīng)用線程抽象、虛擬設(shè)備抽象和內(nèi)存虛擬化抽象。對于vCPU抽象,QNX Hypervisor遵循基于優(yōu)先級的vCPU共享模型,其中優(yōu)先級包括qvm進程優(yōu)先級和vCPU線程優(yōu)先級。在Hypervisor運行規(guī)則中,qvm進程的相對優(yōu)先級和qvm 進程內(nèi)的 vCPU調(diào)度線程的優(yōu)先級層次化地決定哪個vCPU可以訪問物理CPU。但是映射過程和后續(xù)執(zhí)行過程中,VM中運行的內(nèi)容和數(shù)據(jù)對于Hypervisor來說是完全的黑盒。Hypervisor僅確保在基于 vCPU的優(yōu)先級和調(diào)度策略共享物理CPU時,較高優(yōu)先級的vCPU將始終搶占較低優(yōu)先級的vCPU。除此之外的虛擬設(shè)備列表和Stage2頁表將在后續(xù)章節(jié)介紹。
2.3ARM 虛擬機和虛擬處理器支持
ARM架構(gòu)中的下陷機制是通過異常處理來實現(xiàn)的。如上文所述,通常虛擬機操作系統(tǒng)的應(yīng)用程序或用戶空間處于EL0安全等級。虛擬機操作系統(tǒng)的內(nèi)核態(tài)空間處于EL1安全等級。Hypervisor處于EL2安全等級。如下如左邊所示,當(dāng)超出EL1安全等級的VM或者應(yīng)用程序指令執(zhí)行時,將向 EL2級別的Hypervisor發(fā)出異常下陷,交由Hypervisor來處理異常,然后通過上下文切換返回到EL1安全等級的VM。 下圖右邊示例了一個CPU捕獲WFI的處理過程。執(zhí)行等待中斷WFI指令通常會使物理CPU進入低功耗狀態(tài)。通過注入斷言TWI信號,如果滿足HCR_EL2.TWI==1,則在EL0或EL1安全等級上執(zhí)行WFI將導(dǎo)致異常并下陷到EL2安全等級上處理。在此示例中,VM通常會在空閑循環(huán)中執(zhí)行WFI,而Hypervisor可以捕獲此類下陷動作,并調(diào)度不同的vCPU到這個物理CPU,而不是直接進入低功耗狀態(tài)。
圖4. 下陷機制和WFI下陷示例 在ARM體系結(jié)構(gòu)中,vCPU一般代表虛擬的處理單元,每個vCPU在Hypervisor中需要例化對應(yīng)的vCPU線程。VM對應(yīng)的是Hypervisor中例化的qvm進程,會包含一個或者多個vCPU線程。
圖5. ARM虛擬機和虛擬處理器層級關(guān)系
03內(nèi)存虛擬化
3.1內(nèi)存虛擬化概述
內(nèi)存虛擬化配合CPU虛擬化,可以保證所有VM都有獨立的內(nèi)存空間,并嚴(yán)格按照權(quán)限進行隔離。而內(nèi)存虛擬化的關(guān)鍵要求是地址管理,根據(jù)上下文配置和控制各個VM對物理內(nèi)存的訪問。 內(nèi)存虛擬化通常是與通過內(nèi)存分配和釋放的管理相結(jié)合來實現(xiàn)的。從硬件實現(xiàn)視角,通常的內(nèi)存虛擬化是通過控制兩級地址翻譯來實現(xiàn)的。Hypervisor和VM的內(nèi)存分配和釋放機制都和典型的操作系統(tǒng)內(nèi)部內(nèi)存分配和釋放的機制類似,使用基于分級頁表實現(xiàn)內(nèi)存管理。
3.2 ARM內(nèi)存管理體系
ARM架構(gòu)中采用基于頁表的兩級地址翻譯機制。通常來說,第一層級轉(zhuǎn)換將虛擬地址VA轉(zhuǎn)換為中間物理地址IPA,這一層級地址翻譯由操作系統(tǒng)管理和控制。而第二層級地址翻譯則將中間物理地址IPA轉(zhuǎn)換為物理地址PA,這一層級地址翻譯由Hypervisor管理和控制。這兩個階段的翻譯是相互獨立,互不干擾的。如下圖6所示,連續(xù)的虛擬頁地址可以映射到離散的中間物理頁中的地址,而離散的中間物理頁地址可以映射到連續(xù)的物理頁地址。
圖6. 兩級地址翻譯機制 下圖7顯示了ARMv8架構(gòu)的典型兩級地址空間。其中,虛擬地址空間主要代表有:
位于非安全EL0/EL1安全等級中的虛擬機操作系統(tǒng)虛擬內(nèi)存映射空間;
位于非安全EL2安全等級中的Hypervisor虛擬內(nèi)存映射空間;
位于EL3安全等級中的安全監(jiān)視器虛擬內(nèi)存映射空間。
這些虛擬地址空間都是相互獨立的,并且每個內(nèi)存空間都有獨立的配置和頁表。圖示的兩級頁表可以比較完整地支持內(nèi)存虛擬化功能,其中Stage1虛擬機操作系統(tǒng)頁表可以將虛擬地址轉(zhuǎn)換為中間物理地址,包括串口設(shè)備地址、內(nèi)存地址和存儲設(shè)備地址,而Stage2虛擬化頁表,結(jié)合Hypervisor頁表和安全監(jiān)視器頁表,可以將中間物理地址轉(zhuǎn)換為合法的物理地址。
圖7. ARMv8典型的兩級地址空間 在AArch64架構(gòu)中,物理地址通常為48bits,頁表大小通常為4KB或者64KB,為避免頁表空間太大,通常采用4級頁表劃分,按照地址段進行頁表項查詢。下圖為4級頁表和第一層級地址翻譯示例,具體內(nèi)容本文不再贅述。
圖8. AArch64 4級頁表和第一層級地址翻譯示例
04設(shè)備虛擬化
4.1設(shè)備虛擬化概述
虛擬化中Device的概念可以概括為系統(tǒng)中除了運行Hypervisor和VM的處理器之外的可訪問內(nèi)存的設(shè)備。在座艙芯片中,典型的Device類型可以總結(jié)為:
軟件模擬虛擬化設(shè)備:借助軟件模擬或硬件虛擬化的方法捕捉原生驅(qū)動,之后在Hypervisor內(nèi)模擬虛擬設(shè)備的行為,所有虛擬機都通過管理程序陷阱與該設(shè)備交互;
半虛擬化設(shè)備:為所有虛擬機模擬一個實際的物理設(shè)備,所有虛擬機都可以通過一次下陷與該設(shè)備進行批處理調(diào)用;
直通設(shè)備:被虛擬化環(huán)境中的特定虛擬機完全獨占;
共享設(shè)備:可以供一個VM使用,也可以供一個或多個VM和Hypervisor本身使用。
后續(xù)章節(jié)將詳細介紹QNX Hypervisor中設(shè)備虛擬化的具體實現(xiàn)以及在ARM體系結(jié)構(gòu)下對于設(shè)備虛擬化的支持。
4.2QNX設(shè)備虛擬化支持
QNX Hypervisor中的設(shè)備可以歸納為:
物理設(shè)備,包括直通設(shè)備和共享設(shè)備,
虛擬設(shè)備,包括全虛擬化和半虛擬化設(shè)備。
如前面所述,QNX Hypervisor在為VM配置和實例化qvm進程時,需要將物理設(shè)備和虛擬設(shè)備vdev配置給qvm進程和VM。下圖為QNX Hypervisor中對于不同種類設(shè)備虛擬化的支持。
圖9. QNXHypervisor中的設(shè)備虛擬化支持 對于直通設(shè)備,VM具有直接且獨占的訪問權(quán)限,并且Hypervisor主機操作系統(tǒng)將被繞過。這類直通設(shè)備的驅(qū)動程序也將由VM直接擁有。對于直通設(shè)備,Hypervisor只需要將來自物理設(shè)備的中斷直接路由到對應(yīng)的VM,并將來自VM的所有信號直接傳遞到對應(yīng)的設(shè)備。所有交互都在VM和設(shè)備之間,Hypervisor需要識別并允許通過來自設(shè)備的中斷和來自來VM的信號。直通設(shè)備的典型示例是 PCIe、以太網(wǎng)等。 對于共享設(shè)備,這些設(shè)備可以被多個訪客使用,典型示例是共享內(nèi)存。QNX Hypervisor支持兩種不同類型的設(shè)備共享,引用共享和中介共享:
引用共享:共享設(shè)備作為直通設(shè)備分配給一個特定的VM,該VM也管理該設(shè)備的驅(qū)動程序,其他授權(quán)的VM將通過虛擬設(shè)備訪問該設(shè)備。
中介共享:所有授權(quán)的VM通過虛擬設(shè)備訪問該設(shè)備,Hypervisor控制該設(shè)備并管理驅(qū)動程序。
對于虛擬設(shè)備,QNX Hypervisor支持全虛擬化和半虛擬化設(shè)備,用來隔離系統(tǒng)上物理設(shè)備之間的直接通信:
全虛擬化設(shè)備/軟件模擬虛擬化設(shè)備:為VM模擬實際物理設(shè)備的虛擬設(shè)備。使用此類設(shè)備時,VM不需要知道它在虛擬化環(huán)境中運行。根據(jù)物理設(shè)備的類型,全虛擬化設(shè)備可以自己處理所有事務(wù),也可以充當(dāng)VM和實際物理設(shè)備之間的中介。典型示例包括中斷控制器GIC、計時器Timer等。
半虛擬化設(shè)備:與全虛擬化設(shè)備相比,半虛擬化設(shè)備可以通過單次異常下陷批量處理設(shè)備調(diào)用,從而提高效率,減少因為虛擬化而額外引入的異常下陷下陷。QNX Hypervisor支持基于VirtIO1.0標(biāo)準(zhǔn)的半虛擬化設(shè)備,包括典型的塊設(shè)備、I/O 設(shè)備、控制臺、GPU、DPU、ISP等。
4.3ARM設(shè)備虛擬化支持
ARM架構(gòu)中針對設(shè)備虛擬化提供了多方位的支持,其中主要的機制包括系統(tǒng)內(nèi)存管理單元SMMU和支持虛擬化的中斷控制器GIC。 對于SoC系統(tǒng)中除處理器以外的設(shè)備,尤其是DMA控制器或具有DMA控制器的設(shè)備,在虛擬化場景下由VM分配時,可以通過SMMU保證地址轉(zhuǎn)換和OS級別的內(nèi)存保護。下圖左圖顯示了操作系統(tǒng)視角下不帶虛擬化支持的DMA控制器。DMA控制器將通過主機操作系統(tǒng)內(nèi)核空間中的驅(qū)動程序進行編程,該驅(qū)動程序?qū)⒏鶕?jù)MMU單元為DMA配置物理地址。但是在虛擬化環(huán)境中,特定VM的視角下,直通DMA只能基于該VM所對應(yīng)的第一層級MMU做地址翻譯,從而只能配置中間物理。因此,下圖右圖顯示了用于該 DMA 控制器的虛擬化支持的系統(tǒng)內(nèi)存管理單元SMMU,可以在支持VM直接配置直通DMA。所有的內(nèi)存訪問都可以通過管理程序主機編程的SMMU從IPA轉(zhuǎn)換為PA,以確保VM和DMA都是基于IPA進行地址操作而保持統(tǒng)一的視角。
圖10. ARM架構(gòu)中SMMU對設(shè)備虛擬化的支持 從Arm GICv2開始,如下圖所示,GIC可以通過提供物理CPU接口和虛擬CPU接口來發(fā)出物理和虛擬中斷信號。從GIC功能來看,這兩個接口是相同的,區(qū)別是一個發(fā)出物理中斷信號而另一個發(fā)出虛擬中斷信號。Hypervisor可以將虛擬CPU接口映射到VM,允許該VM中的軟件直接與GIC通信。這個機制的優(yōu)點是Hypervisor只需要設(shè)置虛擬接口,而不需要采用全虛擬化的方式來支持GIC。可以減少中斷下陷的次數(shù),從而減少中斷虛擬化的開銷。
圖11. ARM架構(gòu)中GIC對設(shè)備虛擬化的支持
05結(jié)語
虛擬化正迅速成為現(xiàn)代車載場景軟件架構(gòu)中的一項關(guān)鍵技術(shù),尤其是座艙SoC當(dāng)前面臨著安全隔離、靈活性和高利用率的挑戰(zhàn)。Hypervisor軟件與硬件虛擬化擴展的配合,可以讓座艙場景中的虛擬化特性更加高效、安全。
審核編輯 :李倩
-
cpu
+關(guān)注
關(guān)注
68文章
10782瀏覽量
210548 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6626瀏覽量
123059 -
虛擬化
+關(guān)注
關(guān)注
1文章
359瀏覽量
29741
原文標(biāo)題:虛擬化:提升座艙算力效率
文章出處:【微信號:算力基建,微信公眾號:算力基建】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論