AURIX? TC4x虛擬化技術(shù)詳解
引言
本文引用地址:http://cafeforensic.com/article/202501/466197.htm在之前的《AURIX? TC4x虛擬化技術(shù)助力下一代汽車EE架構(gòu)設(shè)計》一文中,我們已經(jīng)介紹了嵌入式虛擬化的發(fā)展歷史,基本概念,使用案例,它的優(yōu)勢以及當(dāng)前面臨的挑戰(zhàn)。接下來,我們將深入探討TC4x對虛擬化技術(shù)的硬件支持,軟件開發(fā)流程以及現(xiàn)有的軟件Demo。
1. AURIX? TC4x虛擬化硬件架構(gòu)
AURIX? TC4x在硬件上全面支持虛擬化技術(shù),包括CPU虛擬化,內(nèi)存虛擬化,中斷虛擬化,外設(shè)虛擬化以及虛擬機(jī)之間的IPC通信(如圖1所示)
圖1 AURIX? TC4x虛擬化架構(gòu)
2. CPU虛擬化
2.1 CPU虛擬化的硬件支持
我們知道,CPU的軟件運(yùn)行狀態(tài)通過一套硬件資源簇來管理,圖2是AURIX? TC3x 1.6.2內(nèi)核的硬件資源簇。
圖2 AURIX? TC3x內(nèi)核硬件資源簇
TC4x 內(nèi)核架構(gòu)從1.6.2升級到1.8,一個重要的改變就是增加了對虛擬化的支持。為此,TC4x采用了三套硬件資源簇(HRA,HRB和HRHV)來管理CPU的運(yùn)行(圖3)。
圖3 TC4x硬件資源簇
TC4x最多支持6個CPU,每一個CPU最多支持8個虛擬機(jī)。其中,VM0用作Hypervisor,負(fù)責(zé)調(diào)度上層的7個虛擬機(jī)(Guest VM),并由硬件資源簇HRHV來管控;VM1是一個實(shí)時虛擬機(jī),獨(dú)享硬件資源簇HRA;另外6個虛擬機(jī)VM2-VM7,共享硬件資源簇HRB,可通過輪詢調(diào)度的方式去占用HRB。如圖4所示:
圖4 TC4x硬件資源簇與虛擬機(jī)的對應(yīng)關(guān)系
內(nèi)核復(fù)位后,虛擬化功能默認(rèn)是打開的。通過修改VCON0的EN位,用戶可以去使能或禁用某一個CPU的虛擬化功能。需要注意的是VCON0.EN位具有“write once”的屬性,即在系統(tǒng)的一個上電周期內(nèi)只能修改一次,二次修改該值無效。
每個CPU同一時刻只能有一個虛擬機(jī)運(yùn)行,用戶可以通過讀取VCON1的CVMN位獲取當(dāng)前運(yùn)行的虛擬機(jī)的Number。而下一個需要運(yùn)行的目標(biāo)虛擬機(jī),則可以通過VCON2的VMN位進(jìn)行設(shè)置。此外,為了支持虛擬機(jī)之前的切換,TriCore1.8內(nèi)核引入了兩個新的指令,RFH(Return from Hypervisor)和HVCALL:
RFH:用于Hypervisor到上層Guest VM的切換??蛻粼贖ypervisor軟件中調(diào)用RFH指令,則可以實(shí)現(xiàn)從Hypervisor到其他目標(biāo)虛擬機(jī)的切換。
HVCALL:類似之前TriCore1.6的SYSCALL,用于上層Guest VM到Hypervisor的切換。因?yàn)樯蠈覸M之間不能直接切換,需要Hypervisor來統(tǒng)一調(diào)度,所以上層虛擬機(jī)執(zhí)行完成之后,需要調(diào)用HVCALL回到Hypervisor軟件中去。
2.2 虛擬機(jī)在CPU中的部署
CPU在復(fù)位之后都會先進(jìn)入VM0(也就是Hypervisor軟件),在Hypervisor中完成硬件資源的初始化后,則開始進(jìn)行虛擬機(jī)的調(diào)度,虛擬機(jī)在CPU中的部署有如下幾種:
Hypervisor上層只有一個虛擬機(jī)VM1運(yùn)行(圖5.a):類似傳統(tǒng)的CPU,用戶進(jìn)入VM0之后可以直接切換到VM1,VM1獨(dú)享CPU的硬件資源和周期性任務(wù)。
Hypervisor上層有兩個虛擬機(jī)VM1和VM2運(yùn)行(圖5.b):用戶需要分別為VM1和VM2分配硬件資源,Hypervisor需要根據(jù)客戶的需求調(diào)度VM1和VM2。
Hypervisor上層有兩個以上VM運(yùn)行(圖5.c):由于VM2-VM7是共享一套資源簇HRB,所以每次切換到HRB進(jìn)行操作時,需要特別指定是哪一個VM進(jìn)行操作,一般客戶可以通過輪詢的方式去調(diào)度HRB里面的虛擬機(jī)。
圖5 虛擬機(jī)在CPU中的部署
以上是單核的情況,在多核場景下,每一個核都可以靈活地使用不同的虛擬機(jī)分配機(jī)制來實(shí)現(xiàn)整個系統(tǒng)的調(diào)度,如圖6所示:
圖6 TC4x多核虛擬化
圖7是虛擬機(jī)在不同CPU內(nèi)部署的示例,假設(shè)我們有兩個應(yīng)用APP1和APP2,它們分別占用CPU0/1/2/3/4的VM1和CPU3/4/5的VM2??梢钥吹?,不同CPU里面Hypervisor的調(diào)度是不同的,有可能存在一個VM獨(dú)享CPU的情況(CPU0/1/2/5),也有可能需要Hypervisor去調(diào)度多個虛擬機(jī)(CPU3/4),具體如何使用可以根據(jù)客戶的需求靈活配置。
圖7 虛擬化部署示例
3. 內(nèi)存虛擬化
在TC2x/TC3x的內(nèi)核架構(gòu)中,內(nèi)存保護(hù)都是任務(wù)層級的。操作系統(tǒng)通過MPU模塊,對不同任務(wù)設(shè)置Memory的訪問權(quán)限。這一功能在TC4x的內(nèi)核架構(gòu)中依然沿用,并且我們將任務(wù)層級的MPU保護(hù)稱作Level 1 MPU。而當(dāng)我們使能了虛擬化功能后,對于不同虛擬機(jī)之間的訪問保護(hù),則需要額外的MPU保護(hù),我們將不同Guest VM(VM1-VM7)之間的MPU保護(hù)稱作Level 2 MPU。如圖8所示:
圖8 TC4x L1/L2 MPU
3.1 Level 1 MPU保護(hù)
L1的MPU保護(hù)是通過HRx_CORECON.PROTEN寄存器的PROTEN位來使能。HRHV,HRA和HRB均可以獨(dú)立設(shè)置是否使能L1的MPU保護(hù)。TC4x支持多達(dá)24個數(shù)據(jù)段和16個代碼段的訪問權(quán)限設(shè)置??蛻艨梢栽诿恳粋€VM的RTOS中,通過配置CPXEy,DPWEy以及DPREy寄存器來選擇自身VM運(yùn)行訪問的數(shù)據(jù)段和代碼段,并通過配置CPUx_HRx_PSW寄存器的PRS2和PRS位來切換不同任務(wù)需要保護(hù)的數(shù)據(jù)和代碼段,TC4x最多支持8個保護(hù)寄存器簇(PRS0-PRS7)。圖9是L1 MPU保護(hù)所涉及到的寄存器示意圖。
圖9 L1 MPU保護(hù)寄存器
3.2 Level 2 MPU保護(hù)
在使能了虛擬化功能之后,L2的MPU保護(hù)默認(rèn)是開啟的,用戶可以根據(jù)自身需求,在Hypervisor軟件中配置不同虛擬機(jī)的訪問權(quán)限。HRHV_CPXE_x,HRHV_DPRE_x以及HRHV_DPWE_x中的x由VCON2.L2_PRS位來確定,其他的配置部分與L1 MPU相同。圖10是L1 MPU保護(hù)所涉及到的寄存器示意圖。
圖10 L2 MPU保護(hù)寄存器
需要注意的是,如果系統(tǒng)出現(xiàn)L1 MPU的訪問越界,則會觸發(fā)硬件資源的Trap,如果出現(xiàn)L2 MPU訪問的訪問越界,則會觸發(fā)Hypervisor的Trap。如果同時違背的L1 MPU和L2 MPU,則會按照L1 MPU的訪問越界響應(yīng)。
4. 中斷虛擬化
4.1 中斷虛擬化的硬件支持
如下圖所示,是TC3x和TC4x的服務(wù)請求控制寄存器(SRC),可以看到對于TC4x的SRC寄存器,除了我們熟悉的優(yōu)先級配置SRPN,服務(wù)請求使能位SRE,以及服務(wù)控制類型TOS以外,還額外增加了VM的位域。這表明,對于每一個中斷服務(wù)請求節(jié)點(diǎn),用戶可以設(shè)置VM0-VM7的選項(xiàng),從而將中斷的處理映射到某一個CPU的某一個VM中去。
圖11 TC3x/TC4x SRC寄存器對比
4.2 虛擬機(jī)的中斷仲裁和響應(yīng)機(jī)制
中斷控制單元ICU會對不同硬件資源簇內(nèi)部的虛擬機(jī)中斷服務(wù)請求進(jìn)行仲裁,虛擬機(jī)是否參與仲裁由寄存器VMEMz.VMy的配置決定。仲裁采用輪詢機(jī)制,VM0-VM1-VMz依次輪詢,其中VMz表示的是HRB里面的虛擬機(jī),HRB內(nèi)部也按照輪詢機(jī)制進(jìn)行二級仲裁。當(dāng)某一個虛擬機(jī)參與仲裁之后,其產(chǎn)生的最高優(yōu)先級的中斷服務(wù)請求會更新到VMxn_ICR的PIPN位等待ICU的仲裁。如下圖(圖12)所示:
圖12 虛擬機(jī)的中斷仲裁
此外,虛擬機(jī)的中斷還支持搶占功能,用戶可以對每一個虛擬機(jī)的中斷設(shè)置搶占閾值,只有高于該閾值的優(yōu)先級中斷才可以搶占當(dāng)前的虛擬機(jī)中斷。該功能可通過配置VMn_PETHRESH寄存器的的PE_THRESH位域?qū)崿F(xiàn)。
整個虛擬機(jī)的中斷處理流程如下(圖13):
當(dāng)產(chǎn)生中斷的響應(yīng)虛擬機(jī)為當(dāng)前正在運(yùn)行的虛擬機(jī)時,則不需要做任何的虛擬機(jī)切換,只需要確認(rèn)當(dāng)前VM的中斷使能位VMn_ICR.IE置1,且其PIPN號大于正在運(yùn)行的虛擬機(jī)的中斷優(yōu)先級號,則直接處理新的中斷,否則新的中斷將處于Pending狀態(tài)。該機(jī)制適用于VM0,VM1以及VM2-7。
當(dāng)產(chǎn)生中斷的響應(yīng)虛擬機(jī)是Hypervisor,而當(dāng)前正運(yùn)行在VM1或者VM2-7時,則需要判斷新中斷的PIPN號是否大于Hypervisor的搶占閾值,如果大于搶占閾值且大于當(dāng)前的CCPN號,則可以直接切到Hypervisor中執(zhí)行新的中斷,否則新的中斷將處于Pending狀態(tài)。
當(dāng)產(chǎn)生中斷的響應(yīng)虛擬機(jī)是VM1,而當(dāng)前正運(yùn)行在VM2-7,或者反過來的情形,則需要判斷新中斷的PIPN號是否大于正在運(yùn)行的虛擬機(jī)的搶占閾值,如果大于搶占閾值且大于當(dāng)前的CCPN號,此時會產(chǎn)生一個Hypervisor的Trap,然后在該Trap中做好虛擬機(jī)的配置工作,再切到新的虛擬機(jī)之后進(jìn)行中斷處理,否則新的中斷將處于Pending狀態(tài)。
當(dāng)產(chǎn)生的中斷響應(yīng)虛擬機(jī)時VM2-7,而當(dāng)前正運(yùn)行在VM2-7不同于之前虛擬機(jī)之中,則需要判斷新中斷的PIPN號是否大于正在運(yùn)行的虛擬機(jī)的搶占閾值,如果大于搶占閾值且大于當(dāng)前的CCPN號,此時會產(chǎn)生一個的Trap,然后在該Trap中進(jìn)行虛擬機(jī)的Swap操作,再切到新的虛擬機(jī)之后進(jìn)行中斷處理,否則新的中斷將處于Pending狀態(tài)。
圖13 虛擬機(jī)的中斷處理流程
5. 外設(shè)虛擬化
外設(shè)的訪問權(quán)限是通過ACCEN寄存器來實(shí)現(xiàn)的,只有被ACCEN選中的Master才運(yùn)行訪問該外設(shè)的資源。TC3x中Master用6個bit的Tag ID表示。在TC4x中,我們對Master的定義做了額外的擴(kuò)展,除了依據(jù)TAG ID以外,還額外增加了VM ID和PRS ID,客戶可以設(shè)置任意CPU的任意VM對外設(shè)的訪問權(quán)限。如下圖所示:
圖14 TC3x/TC4x外設(shè)寄存器保護(hù)
此外,TC4x針對原有的和SafetyEndinit 機(jī)制也做了修改,新的PROT和PROTE寄存器保護(hù)機(jī)制會兼顧不同虛擬機(jī)的寄存器權(quán)限設(shè)置,將寄存器修改的權(quán)限下發(fā)到VM層級。如下圖所示:
圖15 寄存器修改權(quán)限
6. IPC通信
區(qū)別于之前的核間通信,引入虛擬機(jī)之后,還會涉及到虛擬機(jī)之間的通信(圖16)。虛擬機(jī)直接按的通信一般可采用Share memory的方式。利用之前章節(jié)介紹的內(nèi)存虛擬化機(jī)制,給不同虛擬機(jī)開辟一塊共享內(nèi)存用于信息交互。
圖16 虛擬機(jī)的IPC通信
7. 虛擬化軟件開發(fā)流程和例程
7.1 虛擬化軟件開發(fā)流程
一般來講,虛擬化軟件的開發(fā)可以分為四個步驟(圖17):
1. 需求定義
首先,客戶需要根據(jù)項(xiàng)目的實(shí)際需求,做系統(tǒng)級的資源分配。將不同的軟件分配到不同的CPU,以及CPU內(nèi)部不同的VM中去。
2. Hypervisor軟件配置
有了最基本的硬件資源分配之后,客戶需要開發(fā)一個統(tǒng)一的Hypervisor軟件去管理和調(diào)度不同的虛擬機(jī)。
配置:包括對外設(shè)資源的分配,內(nèi)存保護(hù)的設(shè)置以及中斷資源的分配等
調(diào)度:根據(jù)客戶的需求,設(shè)置不同的調(diào)度策略,如基于時間觸發(fā)的調(diào)度或者基于事件響應(yīng)的調(diào)度策略。
3. 虛擬機(jī)開發(fā)
Hypervisor軟件開發(fā)完成之后,不同的虛擬機(jī)開發(fā)團(tuán)隊(duì)基于Hypervisor的配置,獨(dú)立開發(fā)各自的應(yīng)用,彼此之前沒有任何外設(shè),內(nèi)存,中斷的相互干擾。開發(fā)完成后,需要基于Hypervisor的調(diào)度策略做虛擬機(jī)層級的集成測試,以驗(yàn)證虛擬機(jī)應(yīng)用的基本功能和可靠性。
4. 系統(tǒng)集成測試
不同虛擬機(jī)開發(fā)團(tuán)隊(duì)將各自的虛擬機(jī)集成到ECU中去,基于Hypervisor做系統(tǒng)級的集成測試,以驗(yàn)證整體功能的完整性和可靠性。
圖17 虛擬機(jī)軟件開發(fā)流程
7.2 虛擬化軟件例程
7.2.1 Demo工程介紹
英飛凌將多個TC4x虛擬化的例程放在ADS Limited開發(fā)環(huán)境中,客戶可通過ADS Limited搜索“Hypervisor”或者“Virtualized”等關(guān)鍵詞找到相關(guān)例程。
本文以iLLD_TC4D9_ADS_Virtualization_Hypervisor_StandAlone這個Demo。該Demo支持All-in-one模式,即Hypervisor和虛擬機(jī)軟件在同一個工程里面。此外,該Demo同時支持Standalone模式,即上述工程只提供Hypervisor的初始化配置和調(diào)度功能,虛擬機(jī)軟件需要額外的軟件支持,額外的軟件包含iLLD_TC4D9_ADS_Blinky_LDE_Virtualized和iLLD_TC4D9_ADS_CAN_Loop_Back_Mode_Virtualized兩個工程。兩個工程的切換需要通過Ifx_Cfg.h里面的IFX_CFG_HYPERVISOR_STANDALONE完成。如圖18所示:
圖18 ADS中Hypervisor Demo介紹
7.2.2 Demo工程的啟動流程
以All-in-one工程為例,下面是其啟動流程(圖19):
上電之后首先會運(yùn)行芯片內(nèi)部的boot,之后跳轉(zhuǎn)的VM0的Start函數(shù)跑SSW軟件,SSW軟件和TC3x的啟動流程類似,包括BIST測試,PLL的初始化,CSA的配置,Trap和中斷向量表的配置等待
之后就正式開始Hypervisor軟件的執(zhí)行,主要包括對每一個core的初始化配置,L2的MPU保護(hù),各個虛擬機(jī)的中斷配置,調(diào)度策略的初始化等等。之后就確定下一個需要運(yùn)行的目標(biāo)虛擬機(jī)VM1,調(diào)用RFH指令切到VM1虛擬機(jī)
開始執(zhí)行VM1里面的任務(wù),在完成任務(wù)之后重新切回到Hypervisor里面進(jìn)行下一次虛擬機(jī)的調(diào)度
圖19 Hypervisor軟件啟動流程
7.2.3 Hypervisor的調(diào)度策略
該Demo支持兩種調(diào)度策略(圖20):
Counter Based:基于counter計數(shù)(事件觸發(fā))的調(diào)度策略,當(dāng)Guest VM中的代碼運(yùn)行到某個counter值的時候,通過調(diào)用HVCALL切回Hypervisor,從而完成本次虛擬機(jī)的調(diào)度
Timer-interrupt based:基于STM定時器中斷(時間觸發(fā))的調(diào)度策略,STM的中斷響應(yīng)配置為Hypervisor,當(dāng)在Guest VM里面運(yùn)行到某一個時刻,STM觸發(fā)中斷,此時non running VM的中斷會觸發(fā)Hypervisor Trap進(jìn)入到Hypervisor,Hypervisor Trap的地址對應(yīng)著調(diào)度表的地址,從而進(jìn)行下一次調(diào)度。
圖20 Hypervisor調(diào)度策略
該Demo可以實(shí)現(xiàn)多個虛擬機(jī)的輪詢調(diào)度,客戶可以根據(jù)自身的需求靈活地配置Hypervisor,實(shí)現(xiàn)適合自己項(xiàng)目開發(fā)的虛擬機(jī)配置和軟件調(diào)度策略。
總結(jié)
本文首先介紹了TC4x的硬件對虛擬化的全面支持,包括對CPU,Memory,中斷,外設(shè)的虛擬化,以及虛擬機(jī)之間的IPC通信。其次,從實(shí)際項(xiàng)目開發(fā)的角度,介紹了嵌入式虛擬化的開發(fā)流程以及Hypervisor的兩種調(diào)度策略。嵌入式虛擬化的引入,可以幫助可以更好地實(shí)現(xiàn)資源分配和安全隔離,幫助客戶節(jié)省更多開發(fā)和集成的成本。
評論