
01
HVTRAP 指令與虛擬機(jī)
調(diào)用 (Hypercall) 機(jī)制
在 RH850/U2Axx 的虛擬化架構(gòu)中,為了支撐用戶態(tài)軟件請求操作系統(tǒng)服務(wù),基礎(chǔ)指令集架構(gòu)(ISA)在原有 SYSCALL 指令的基礎(chǔ)上引入了專用的 HVTRAP(Hypervisor EI-level Trap) 指令,用于實(shí)現(xiàn)客戶機(jī)(VM)發(fā)起的Hypercall機(jī)制。該機(jī)制允許客戶機(jī)請求運(yùn)行于宿主機(jī)模式下的虛擬機(jī)管理器(Hypervisor)執(zhí)行受限的特權(quán)操作。當(dāng)CPU在客戶機(jī)模式(Guest Mode)下執(zhí)行HVTRAP時,受限操作模式將原子化地切換至宿主機(jī)模式(Host Mode),并觸發(fā)HVTRAP異常。若在宿主機(jī)模式下執(zhí)行該指令,CPU同樣會產(chǎn)生HVTRAP異常,但操作模式維持宿主機(jī)狀態(tài)不變。HVTRAP指令必須攜帶一個操作數(shù)(Operand),該數(shù)值將被硬件同步至宿主機(jī)端的異常原因寄存器。虛擬機(jī)管理器在解析異常時,通過讀取該參數(shù)實(shí)現(xiàn)對虛擬機(jī)請求語義的精確識別與分發(fā)處理。
02
上下文切換性能優(yōu)化
上下文切換是 虛擬機(jī)管理器 運(yùn)行邏輯中最頻繁且最具關(guān)鍵性的操作。無論是因?yàn)榭蛻魴C(jī)觸發(fā)了需由宿主機(jī)仲裁的異常,還是在多分區(qū)并發(fā)環(huán)境下執(zhí)行的時間片調(diào)度,處理器均須保存當(dāng)前執(zhí)行流的完整狀態(tài)快照,并恢復(fù)后續(xù)上下文的執(zhí)行環(huán)境。由于此類切換的頻率直接決定了系統(tǒng)的實(shí)時性,確保其執(zhí)行流程的極致高效性對于實(shí)時系統(tǒng)至關(guān)重要。為了滿足實(shí)時系統(tǒng)對極致高效性的追求,RH850/U2Axx 引入了多項硬件優(yōu)化機(jī)制,以簡化并加速上下文切換。
2.1 系統(tǒng)寄存器自動多路復(fù)用
在啟用虛擬化擴(kuò)展后,與異常處理及中斷仲裁相關(guān)的核心系統(tǒng)寄存器集被實(shí)例化為一組面向客戶機(jī)可見的影子副本。如第 2.1.2 節(jié)所述,這一機(jī)制被稱為系統(tǒng)寄存器多路復(fù)用。在此機(jī)制下,針對原生物理系統(tǒng)寄存器的任何訪存操作,硬件均會依據(jù)當(dāng)前 CPU 的受限操作模式(Host 或 Guest)實(shí)時、自動地重定向至對應(yīng)的多路復(fù)用寄存器集。

圖 2.1:在禁用虛擬化擴(kuò)展時的寄存器模型。
圖 2.1 展示了禁用虛擬化擴(kuò)展時的寄存器模型。在此常規(guī)模式下,寄存器集不具備副本機(jī)制,所有訪問操作均索引至唯一的基礎(chǔ)物理集合,不受特權(quán)等級影響。圖 2.2闡述了在虛擬化擴(kuò)展啟用且CPU處于宿主機(jī)模式下的寄存器模型。此時,宿主機(jī)上下文寄存器集被選定為多路復(fù)用對象(如虛線所示),即所有的寄存器交互均作用于宿主機(jī)上下文。相應(yīng)地,當(dāng) CPU 運(yùn)行于客戶機(jī)模式時,寄存器訪問將被重定向至客戶機(jī)上下文寄存器集,如圖 2.3 所示。在這種場景下,訪問權(quán)限受限于基礎(chǔ)集合定義的權(quán)限約束。由于客戶機(jī)模式無法獲取 HV 特權(quán),所有標(biāo)記為 HV 特權(quán)的系統(tǒng)寄存器均對客戶機(jī)不可見(圖 2.3 中以灰色標(biāo)識)。

圖 2.2:宿主機(jī)模式下的多路復(fù)用寄存器模型

圖 2.3:客戶機(jī)模式下的多路復(fù)用寄存器模型
2.2 LDM.GSR 與 STM.GSR 高速存取指令
當(dāng)兩個或多個虛擬機(jī)共享同一物理CPU時,虛擬機(jī)管理器通過定時器驅(qū)動的預(yù)定義時間片或特定仲裁策略實(shí)施資源調(diào)度。在執(zhí)行分區(qū)切換時,虛擬機(jī)管理器必須將當(dāng)前客戶機(jī)的全量上下文轉(zhuǎn)儲至內(nèi)存,并將待調(diào)度客戶機(jī)(VM)的上下文加載至相應(yīng)系統(tǒng)寄存器。盡管系統(tǒng)寄存器多路復(fù)用加速了虛擬機(jī)管理器與客戶機(jī)(VM)之間的上下文切換,但它對運(yùn)行在同一物理CPU上的客戶機(jī)(VM)之間的上下文切換并無幫助。為此,RH850/U2Axx虛擬化擴(kuò)展引入了兩條指令:LDM.GSR(多客戶機(jī)系統(tǒng)寄存器加載)與STM.GSR(多客戶機(jī)系統(tǒng)寄存器存儲)。這兩條指令能夠在預(yù)定義的系統(tǒng)寄存器列表與指令指定的內(nèi)存地址空間之間直接高速數(shù)據(jù)交換。該指令有效的系統(tǒng)寄存器完整列表,請參閱RH850/U2Axx虛擬化硬件用戶手冊。
LDM.GSR指令允許從內(nèi)存基址直接將數(shù)據(jù)恢復(fù)至多個目標(biāo)系統(tǒng)寄存器。與先用常規(guī)加載指令將內(nèi)存讀入通用寄存器再存入系統(tǒng)寄存器的方式相比,該指令能更高效地執(zhí)行加載操作同理,STM.GSR實(shí)現(xiàn)了從多個系統(tǒng)寄存器向內(nèi)存的直接狀態(tài)轉(zhuǎn)儲。與先將系統(tǒng)寄存器的值讀入通用寄存器再用常規(guī)存儲指令寫入內(nèi)存的方式相比,該指令能更高效地執(zhí)行存儲操作。
2.3 寄存器組(Register Bank)功能與中斷自動嵌套
RH850/U2Axx 系列的基礎(chǔ)架構(gòu)提供寄存器組功能,當(dāng) CPU 響應(yīng)特定優(yōu)先級的外部中斷(EIINTn)時,自動保存通用寄存器和關(guān)鍵上下文系統(tǒng)寄存器。虛擬化擴(kuò)展進(jìn)一步釋放了這一潛力,但其應(yīng)用邊界被嚴(yán)格限定于已綁定至客戶機(jī)分區(qū)的外部中斷(GMEIINTn)。啟用虛擬化擴(kuò)展后,綁定至 虛擬機(jī)管理器 的外部中斷無法使用此功能。然而,將寄存器組功能提供給客戶機(jī)軟件,可顯著提升客戶機(jī)中斷處理效率,這在實(shí)時安全關(guān)鍵型虛擬化環(huán)境(如汽車電子)中極為重要。

圖 2.4:自動將上下文保存到寄存器組。
由于保存操作與中斷響應(yīng)流水線并行執(zhí)行,從而大幅提升了 CPU對客戶機(jī)中斷的響應(yīng)速度。如圖 2.4 所示,上下文保存到具有可配置基地址的普通內(nèi)存區(qū)域,且該機(jī)制支持最多保存 64 個上下文(即 64 級嵌套中斷)。與基礎(chǔ)架構(gòu)中的寄存器組功能一樣,上下文不會自動恢復(fù)。當(dāng)客戶機(jī)軟件完成外部中斷處理后,需通過執(zhí)行 RESBANK 指令,從寄存器組中顯式觸發(fā)上下文還原流程。該過程如圖 2.5 所示。

圖 2.5:使用 RESBANK 指令從寄存器組恢復(fù)上下文。
此外,寄存器組特性還支持在無需軟件干預(yù)的情況下自動嵌套中斷。在正常狀態(tài)下,當(dāng)接受到GMEIINTn中斷時,其他GMEIINTn中斷會被屏蔽,直到軟件顯式重新使能中斷接受。這是架構(gòu)中常見的中斷嵌套方案,因?yàn)檐浖枰谠试S其他中斷發(fā)生之前保存所有上下文。然而,對于使用寄存器組和自動上下文保存功能的中斷,軟件可以將系統(tǒng)配置為在確認(rèn)外部中斷后保持中斷使能。這樣在自動上下文保存完成后,無需軟件干預(yù)即可接受更高優(yōu)先級的中斷。由于必要寄存器已被自動保存,CPU可準(zhǔn)確返回至原始中斷處理流程。
03
內(nèi)存虛擬化
3.1 嵌套內(nèi)存保護(hù)
RH850/U2Axx 基礎(chǔ)架構(gòu)內(nèi)置了一個 MPU,可用于檢測并阻止不可靠程序、失控事件等對系統(tǒng)資源的未授權(quán)訪問。該 MPU 通過 MPLA 和 MPUA 寄存器定義內(nèi)存保護(hù)區(qū)域,并在 MPAT 寄存器中配置相應(yīng)的讀、寫和執(zhí)行訪問權(quán)限。
啟用虛擬化擴(kuò)展后,現(xiàn)有的MPU被劃分為“嵌套”或“分層”的內(nèi)存保護(hù)方案,供宿主機(jī)和客戶軟件使用。在該方案下,MPU 條目池被分為兩類:宿主機(jī)管理條目,僅能由處于宿主機(jī)模式的虛擬機(jī)管理器配置;以及客戶機(jī)管理條目,也可由運(yùn)行在客戶機(jī)模式的軟件(例如 RTOS 或裸機(jī)軟件)配置。如圖 3.1 所示,宿主機(jī)與客戶機(jī)管理條目的邊界在 MPCFG 寄存器中定義,并且可以在設(shè)置宿主機(jī)管理條目時由虛擬機(jī)管理器配置。

圖 3.1:MPU宿主機(jī)與客戶機(jī)條目的分離。
當(dāng)嵌套內(nèi)存保護(hù)啟用時,內(nèi)存保護(hù)強(qiáng)制執(zhí)行機(jī)制按以下規(guī)則增強(qiáng)。處于宿主機(jī)模式時,當(dāng)訪存地址被任一宿主機(jī)管理條目 (Host Management Entry) 命中并允許時,方可進(jìn)行內(nèi)存訪問。是否在 SV 模式下強(qiáng)制執(zhí)行內(nèi)存保護(hù),由CPU處于常規(guī)模式時使用的相同控制項決定。另一方面,客戶機(jī)模式下的內(nèi)存訪問情況則不同。當(dāng)所有保護(hù)都啟用時(如圖3.2所示),即使在 SV 模式下,只有當(dāng)訪存地址同時在宿主機(jī)和客戶機(jī)管理條目中被匹配時,才允許客戶機(jī)模式的內(nèi)存訪問??蛻魴C(jī)軟件可以使用客戶機(jī)上下文系統(tǒng)寄存器中提供的常規(guī)控制,完全或僅針對 SV 模式,禁用來自客戶機(jī)管理條目的保護(hù)執(zhí)行。但宿主機(jī)管理條目的內(nèi)存保護(hù)只能在宿主機(jī)模式下(即由虛擬機(jī)管理器)禁用。

圖 3.2:針對客戶機(jī)訪問的嵌套內(nèi)存保護(hù)。
虛擬化擴(kuò)展還改變了內(nèi)存保護(hù)異常MIP與MDP的處理方式。根據(jù)保護(hù)區(qū)域的配置,這些異常行為在指令取指訪問或操作數(shù)訪問時被檢測到。在宿主機(jī)模式執(zhí)行期間發(fā)生的MPU異常始終在宿主機(jī)模式下處理。與之不同的是,在客戶機(jī)模式執(zhí)行期間發(fā)生的內(nèi)存保護(hù)異??赡苋绫?.1所示,根據(jù)GMCFG寄存器的配置(由虛擬機(jī)管理器控制),在宿主機(jī)或客戶機(jī)模式下處理。

表 3.1:MPU 異常時的 CPU 模式切換。
3.2 LDM.MP 與 STM.MP 指令
目前討論的用于加速上下文切換的指令和機(jī)制(即寄存器組、LDM.GSR、STM.GSR)在本質(zhì)上類似,它們都在內(nèi)存和一組上下文寄存器之間交換內(nèi)容,代碼側(cè)工作量小且比使用傳統(tǒng)加載/存儲指令更快。然而,這些機(jī)制都不涵蓋定義保護(hù)區(qū)域和相應(yīng)權(quán)限的MPU寄存器(即MPLA、MPUA、MPAT)。為在上下文切換時保存和恢復(fù)這些寄存器,基礎(chǔ)RH850/U2Axx架構(gòu)提供了LDM.MP和STM.MP指令。這些指令的工作方式與第2.1.4節(jié)描述的LDM.GSR和STM.GSR非常相似,差別在于LDM.MP與STM.MP針對MPU區(qū)域寄存器,并且可由宿主機(jī)與客戶機(jī)模式使用。在宿主機(jī)模式下執(zhí)行時,這些指令不受限制,行為與常規(guī)執(zhí)行相同。而在客戶機(jī)模式下執(zhí)行時,STM.MP可將客戶和宿主機(jī)管理條目存儲到內(nèi)存,但LDM.MP只將客戶管理條目加載到相應(yīng)寄存器中,對應(yīng)宿主機(jī)管理條目的寄存器保持不變。
04
中斷虛擬化
4.1 外部中斷直通
實(shí)時安全關(guān)鍵型虛擬化系統(tǒng)的核心架構(gòu)特性之一是中斷直通,支持外部中斷繞過 虛擬機(jī)管理器,交由客戶機(jī)直接處理。該機(jī)制允許外部硬件中斷繞過虛擬機(jī)管理器的軟件捕獲,直接由目標(biāo)客戶機(jī)(Guest)處理。這一特性是降低外部異步事件(如車載制動執(zhí)行指令或安全氣囊觸發(fā)信號)與 CPU 響應(yīng)邏輯之間的端到端時延的關(guān)鍵。RH850/U2Axx 的虛擬化擴(kuò)展通過允許將每個外部中斷源靜態(tài)綁定至特定的客戶機(jī)分區(qū)(Guest Partition)及特定的物理 CPU 核心。當(dāng)受限操作模式處于客戶機(jī)模式且存在待處理中斷(Pending Interrupt)時,中斷控制器將實(shí)時校驗(yàn)當(dāng)前運(yùn)行的客戶機(jī)分區(qū) ID(GPID)與該中斷源預(yù)置的綁定標(biāo)識是否匹配。若匹配成功,中斷控制器將直接向當(dāng)前運(yùn)行的虛擬機(jī)投遞中斷信號。在此機(jī)制下,待處理中斷將由運(yùn)行于客戶機(jī)模式的軟件直接確認(rèn)(Acknowledgment),整個中斷處理鏈路無需轉(zhuǎn)換至宿主機(jī)模式(Host Mode)。
此外,架構(gòu)亦支持將特定的中斷源綁定至宿主機(jī)分區(qū)(Host Partition),并指定負(fù)責(zé)處理該中斷的物理 CPU ID,從而為虛擬機(jī)管理器保留外部中斷。綁定到宿主機(jī)分區(qū)的中斷優(yōu)先級高于綁定到任何 客戶機(jī) 分區(qū)的中斷。例如,在宿主機(jī)模式下運(yùn)行的虛擬機(jī)管理器可保留外設(shè)定時器的中斷,以調(diào)度在同一物理 CPU 上共享的多個客戶機(jī)(VM)。
4.2 后臺中斷機(jī)制
將外部中斷源綁定到虛擬機(jī)需要在中斷控制器的配置中指定該中斷必須在哪個客戶機(jī)分區(qū) ID 中處理。對此類中斷的確認(rèn)條件之一是該指定的客戶機(jī)分區(qū) ID 值必須與當(dāng)前 CPU 的客戶機(jī)分區(qū) ID 值匹配。即使受限操作模式為 客戶機(jī),如果客戶機(jī)分區(qū) ID 不匹配,客戶機(jī)外部中斷也不會發(fā)生。后臺中斷(BGEIINTn)是虛擬化擴(kuò)展提供的一種機(jī)制,用于在客戶機(jī)分區(qū) ID 不匹配的情況下為該客戶機(jī)分區(qū)生成中斷。
每當(dāng)滿足生成客戶機(jī)外部中斷的條件,但分配給該中斷源的客戶機(jī)分區(qū) ID 值與 CPU 的客戶機(jī)分區(qū) ID 值不匹配時,中斷控制器可能會根據(jù)其優(yōu)先級將該外部中斷更改為后臺中斷。虛擬機(jī)管理器為每個物理核心配置一個優(yōu)先級閾值,中斷控制器使用該閾值來決定是否將外部中斷更改為后臺中斷:如果外部中斷的優(yōu)先級高于相應(yīng)物理核心的優(yōu)先級閾值,則將轉(zhuǎn)換。

圖 4.1:后臺中斷確認(rèn)與處理示例。
圖 4.1 說明了確認(rèn)和處理后臺中斷的過程。當(dāng)后臺中斷在 客戶機(jī) 模式下被確認(rèn)時,受限操作模式在處理中斷之前會切換到宿主機(jī)模式,并且不會清除該客戶機(jī)模式的中斷原因。這樣,是否切換到與該中斷綁定的客戶機(jī)(VM)由虛擬機(jī)管理器決定。例如,可以根據(jù)特定時間段內(nèi)后臺中斷的確認(rèn)次數(shù)、待切換客戶機(jī)(VM)的執(zhí)行時間等因素來決定是否執(zhí)行客戶機(jī)(VM)切換。如果虛擬機(jī)管理器切換到中斷的目標(biāo)客戶機(jī)(VM),則該客戶機(jī)(VM)會收到待處理中斷,如同正常的客戶機(jī)外部中斷(EIINTn)。