Jailhouse 誕生于西門子,自 2013 年 11 月遵循 GPLv2,至今發(fā)展 9 年,最新版本為 v0.12。Jailhouse 本身不對 Linux 做任何修改,通過硬件隔離的方式實(shí)現(xiàn) Linux 和多 RTOS 的同時(shí)運(yùn)行,使用 Cell 來配置 CPU 和設(shè)備資源,且 Cell 之間設(shè)備資源不可共用。硬件至少需要 2 個(gè)邏輯 CPU 支撐它的運(yùn)行,支持 x86 架構(gòu)支持 VMX、EPT、Preemption timer 與帶有虛擬化擴(kuò)展的 ARMv7 或 ARMv8 架構(gòu)。
Jailhouse 原理
Jailhouse 本身并不改造 Linux 內(nèi)核,而是利用 Linux 系統(tǒng)的開放性,增加一個(gè)或多個(gè)實(shí)時(shí)操作系統(tǒng),實(shí)現(xiàn)多系統(tǒng)在一個(gè)多核處理器上運(yùn)行,如下圖所示:
它是一個(gè)基于 Hypervisor 虛擬化技術(shù)的 Linux 靜態(tài)分區(qū)管理程序,其可以運(yùn)行裸機(jī)應(yīng)用程序或 RTOS 應(yīng)用程序。為此,Jailhouse 使用 cell 單元節(jié)點(diǎn)來配置 CPU 和設(shè)備硬件平臺的虛擬化功能,且各個(gè)節(jié)點(diǎn)分配的資源互不干擾。Jailhouse 啟動(dòng)后,可以在相對獨(dú)立的空間運(yùn)行裸機(jī)應(yīng)用程序、RTOS 系統(tǒng),甚至是 Linux 系統(tǒng)。Jailhouse 不支持硬件的多單元節(jié)點(diǎn)復(fù)用,其希望用戶僅分配需要安全隔離控制的外設(shè)硬件資源,這樣能保證裸機(jī)應(yīng)用程序或 RTOS 最大限度減少因?yàn)閼?yīng)用虛擬化技術(shù)所造成的實(shí)時(shí)性損失。Jailhouse 不執(zhí)行任何調(diào)度。
一般而言,虛擬機(jī)監(jiān)控器擁有兩種結(jié)構(gòu)類型:Type-I 類型和 Type-II 類型。Type-I 類型的虛擬機(jī)監(jiān)控器是獨(dú)立運(yùn)行在硬件/固件層之上的一層很薄的軟件;而 Type-II 類型的虛擬機(jī)監(jiān)控器則是運(yùn)行在宿主機(jī)操作系統(tǒng)之上的。
Jailhouse 上擁有一個(gè)主控節(jié)點(diǎn),通常運(yùn)行 Linux 操作系統(tǒng),負(fù)責(zé)完成系統(tǒng)的初始化并提供管理員接口。該主控節(jié)點(diǎn)并不具備全部硬件資源的控制權(quán)限。當(dāng)虛擬機(jī)監(jiān)控器完成初始化,新的分區(qū)完成創(chuàng)建后,相關(guān)的硬件資源將直接劃分至對應(yīng)的分區(qū)中,由運(yùn)行在分區(qū)中的操作系統(tǒng)進(jìn)行管理。如果從運(yùn)行時(shí)的系統(tǒng)結(jié)構(gòu)看,Jailhouse 是一種 Type-I 型的虛擬機(jī)監(jiān)控器。但與 Type-I 型虛擬機(jī)監(jiān)控器不同,其系統(tǒng)的初始化過程依賴于主控 Linux 分區(qū)。但它也不像 Type-II 型虛擬機(jī)監(jiān)控器圖,通過宿主操作系統(tǒng)來實(shí)現(xiàn)運(yùn)行時(shí)的管理。它更類似于一種 Type-I 和 Type-II 的混合結(jié)構(gòu),主控 Linux 分區(qū)被用作當(dāng)成虛擬機(jī)監(jiān)控器的 BootLoader,而不是一個(gè)具有特權(quán)的管理域。
內(nèi)存虛擬化
在非虛擬化條件下,虛擬地址經(jīng)過 CPU 的內(nèi)存管理單元(MMU)的一輪多級頁表查詢轉(zhuǎn)換為物理地址。在虛擬化平臺下,虛擬地址(VA)通過客戶操作系統(tǒng)所管理的頁表轉(zhuǎn)換后不再是實(shí)際發(fā)送到內(nèi)存總線的物理地址(PA),而是一個(gè)待虛擬機(jī)化平臺繼續(xù)轉(zhuǎn)換(至物理地址)的中間地址。本文稱之為中間物理地址(IPA)。盡管直接重用針對操作系統(tǒng)設(shè)計(jì)的虛擬內(nèi)存機(jī)制 ? 可找到支持虛擬機(jī)的方案,但通常而言這需要在虛擬機(jī)訪問虛存控制寄存器時(shí)發(fā)生自陷,并由虛擬機(jī)監(jiān)控器構(gòu)建一個(gè)影子頁表。影子頁表方案的缺點(diǎn)在于增加了性能開銷和實(shí)現(xiàn)復(fù)雜度。因此,使客戶操作系統(tǒng)不通過自陷管理虛存數(shù)據(jù)結(jié)構(gòu),同時(shí)允許虛擬機(jī)監(jiān)控器對物理內(nèi)存資源全權(quán)管理,是硬件內(nèi)存虛擬化技術(shù)所追求的目標(biāo)。為了實(shí)現(xiàn)該目標(biāo),ARM64 處理器實(shí)現(xiàn)了一個(gè)基于兩階段地址轉(zhuǎn)換的虛存管理機(jī)制,如下圖所示:
在兩階段地址轉(zhuǎn)換下,第一階段地址轉(zhuǎn)換頁表由操作系統(tǒng)進(jìn)行管理,負(fù)責(zé)將應(yīng)用程序的虛擬地址(VA)轉(zhuǎn)換成操作系統(tǒng)視圖下的物理地址。由于此時(shí)操作系統(tǒng)所使用的內(nèi)存資源處于虛擬機(jī)監(jiān)控器的管理之下,操作系統(tǒng)視圖下的物理地址并非真實(shí)的物理內(nèi)存,而是一個(gè)中間物理地址(IPA)。虛擬機(jī)監(jiān)控器在 EL2 下管理第二階段地址轉(zhuǎn)換的頁表,該階段將 IPA 最終轉(zhuǎn)換成物理地址。
每一階段所使用的頁表級數(shù)由 VA、IPA 以及 PA 的地址空間以及頁面大小所決定。當(dāng)?shù)诙A段轉(zhuǎn)換被使能時(shí),所有 IPA 將通過一組專用的頁表被轉(zhuǎn)換為 PA。兩個(gè)階段的轉(zhuǎn)換均可以被獨(dú)立的使能與禁用。當(dāng)?shù)谝浑A段地址轉(zhuǎn)換被禁用時(shí),VA 和 IPA 相等。與其類似,當(dāng)?shù)诙A段地址轉(zhuǎn)換被禁用時(shí),IPA 和 PA 相等。兩個(gè)階段地址轉(zhuǎn)換使用的頁表格式有細(xì)節(jié)上的區(qū)別。
通過使能兩階段地址轉(zhuǎn)換機(jī)制,客戶操作系統(tǒng)無需自陷至 EL2 來管理自己的第一階段地址轉(zhuǎn)換的頁表以及相關(guān)的虛存控制寄存器。對于客戶操作系統(tǒng)中的應(yīng)用程序,第一階段頁表將其 VA 轉(zhuǎn)換成 IPA,隨后 IPA 通過第二階段地址轉(zhuǎn)換被映射為 PA。第二階段地址轉(zhuǎn)換僅支持在 EL2 下進(jìn)行配置,可被完全的禁止或使能。虛擬機(jī)監(jiān)控器負(fù)責(zé)管理 IPA 到 PA 的地址映射。對于虛擬機(jī)監(jiān)控器自身的程序,其 VA 的轉(zhuǎn)換并非為兩階段的轉(zhuǎn)換機(jī)制,而是使用一個(gè)特殊的頁表基地址寄存器(TTBR0_EL2),通過一個(gè)階段的地址轉(zhuǎn)換直接轉(zhuǎn)換成 PA。這是因?yàn)椋摂M機(jī)監(jiān)控器擁有對物理內(nèi)存資源的所有管理權(quán)限,其自身所使用的地址即為真實(shí)的物理資源地址,而非如同在操作系統(tǒng)視圖下的物理地址那樣實(shí)際上只是一個(gè)中間物理地址。
IO 虛擬化
客戶機(jī)系統(tǒng)使用外圍設(shè)備區(qū)域來訪問其看到的物理外圍設(shè)備,這其中包含了直通設(shè)備和虛擬外圍設(shè)備。虛擬設(shè)備由 Jailhouse 模擬。
一個(gè)直通設(shè)備被直接分配給客戶機(jī)并映射到 IPA 地址空間,這使得客戶機(jī)中的軟件可用直接訪問真實(shí)的物理硬件。雖然客戶機(jī)中的軟件看來其是直接與物理設(shè)備交互,但實(shí)際上這一訪問會(huì)陷入相應(yīng)的異常處理程序。IO 虛擬化實(shí)現(xiàn)之前首先是對 IO 訪問的攔截和校驗(yàn),因?yàn)?Jailhouse 首先要知道的是此次 IO 訪問是否合法,這是保證安全隔離的必要條件。通過與系統(tǒng)配置信息對比,如果是非法 IO 的話,MMIO 會(huì)轉(zhuǎn)到 panic 流程。在 panic 中 Jailhouse 會(huì)輸出此次非法 IO 的地址、讀寫以及異常發(fā)生時(shí)的上下文。只有當(dāng) IO 校驗(yàn)符合系統(tǒng)配置要求時(shí),才會(huì)進(jìn)入 MMIO 的 handler 處理。這是做到安全隔離的必要手段。
中斷虛擬化
GIC 針對中斷虛擬化的需求進(jìn)行了虛擬化功能擴(kuò)展,降低了虛擬機(jī)監(jiān)控器對虛擬中斷傳遞模擬的開銷。GICv3 在物理 CPU 接口的基礎(chǔ)上擴(kuò)展了虛擬 CPU 接口(VirtualCPUInterface)和相應(yīng)的虛擬化控制接口(VirtualizationControlInterface)。虛擬機(jī)在運(yùn)行時(shí)被配置為訪問虛擬 CPU 接口,而不是實(shí)際的物理 CPU 接口。虛擬中斷是通過向虛擬化控制接口中特殊寄存器 LR(ListRegiter)發(fā)起寫操作而生成的,虛擬中斷產(chǎn)生后直接進(jìn)入 EL1。由于虛擬 CPU 接口中包含了對 ACK 和 EOI 的支持,因此當(dāng)客戶操作系統(tǒng)的 ACK 或 EOI 操作不再觸發(fā)虛擬機(jī)監(jiān)控器的自陷和模擬,從而降低了虛擬機(jī)接收中斷的開銷。例如,當(dāng)虛擬設(shè)備通過軟件編程接口向虛擬機(jī)發(fā)送虛擬中斷時(shí),虛擬機(jī)監(jiān)控器將虛擬中斷號寫入 LR 寄存器,實(shí)現(xiàn)將虛擬中斷注入到虛擬機(jī)的操作。當(dāng)進(jìn)入虛擬機(jī)后,GIC 的虛擬化擴(kuò)展中斷虛擬機(jī)內(nèi)用戶進(jìn)程的執(zhí)行,使之進(jìn)入客戶操作系統(tǒng)所定義的異常向量入口,隨后由客戶操作系統(tǒng)獨(dú)立完成 ACK、EOI 等操作:
域間通信
雖然分區(qū)將硬件資源進(jìn)行了劃分,通過虛擬機(jī)監(jiān)控器實(shí)現(xiàn)了相互隔離,但在實(shí)際應(yīng)用過程中,分區(qū)間也需進(jìn)行通信。為此,Jailhouse 為分區(qū)間使用共享內(nèi)存與信號機(jī)制構(gòu)建分區(qū)間通信的通道。具體來說,一個(gè)通道將兩個(gè)分區(qū) 1:1 對應(yīng)地連接起來,不存在“1:N”,“N:M”的連接范式,如圖:
可使用兩種類型的通信機(jī)制:通過傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議(TCP/IP)進(jìn)行網(wǎng)絡(luò)通信,該協(xié)議使用 TCP/IP 協(xié)議在節(jié)點(diǎn)之間發(fā)送數(shù)據(jù),或通過使用分區(qū)之間的共享內(nèi)存(利用此功能的協(xié)議示例為 IVSHMEM)。
TCP/IP 是一種更適合于客戶機(jī)駐留在獨(dú)立物理機(jī)中的協(xié)議,換句話說,當(dāng)多個(gè)物理機(jī)需要相互連接時(shí),它意味著為多個(gè)物理機(jī)提供通信通道。然而,考慮到要傳輸?shù)臄?shù)據(jù)經(jīng)過協(xié)議棧,通過 TCP/IP 進(jìn)行通信更耗時(shí)。
共享內(nèi)存更適用于虛擬機(jī)駐留再內(nèi)存中的情況,因?yàn)椴煌姆謪^(qū)在同一個(gè)物理機(jī)上建立。使用共享內(nèi)存協(xié)議可以減少交換數(shù)據(jù)所需的操作次數(shù),并且更改是直接可見的。
對每個(gè)分區(qū),通信通道的終端編程接口被設(shè)計(jì)為 PCI 設(shè)備接口,以便分區(qū)客戶操作系統(tǒng)通過初始化階段的 PCI 設(shè)備掃描發(fā)現(xiàn)。設(shè)備的實(shí)現(xiàn)參考了 ivshmem 設(shè)備模型,使用 intx 中斷實(shí)現(xiàn)信號通知機(jī)制。為了實(shí)現(xiàn)分區(qū)間設(shè)備狀態(tài)的同步,通道 PCI 設(shè)備提供了兩個(gè)額外的 MMIO 寄存器,一個(gè)用于寫入本地分區(qū)狀態(tài),另一個(gè)用于讀取遠(yuǎn)程分區(qū)寫入的狀態(tài)。在兩個(gè)分區(qū)之間建立通信通道時(shí),虛擬機(jī)監(jiān)控器首先需要在兩個(gè)分區(qū)的地址空間中分別分配一片內(nèi)存區(qū)域,然后分配一片與之大小相同的可讀寫物理頁面并進(jìn)行映射。最終在各個(gè)分區(qū)使用這個(gè)虛擬的 pci 設(shè)備進(jìn)行域間通信。
Jailhouse 對 openEuler 系統(tǒng)性能評估
「對 HostOS 的影響性能評估」
Jailhouse 設(shè)備穿透性能評估
LTP 穩(wěn)定性測試
在 Intel I7-8700、鯤鵬 920、飛騰 2000/4、樹莓派 4B 平臺測試 5 天,開啟 Jailhouse 后無新增穩(wěn)定性問題出現(xiàn)。
「Jailhouse 在 openEuler 的現(xiàn)狀」
Jailhouse 是由工業(yè)控制 SIG 組引進(jìn),由麒麟軟件和菁蓉聯(lián)創(chuàng)科技共同維護(hù)。
已支持飛騰 FT2004、D2000、E2000Q、E2000D、RK3588 等設(shè)備 。
目前 jailhouse 已經(jīng)適配 openEuler2203 Embedded 系統(tǒng),可以在樹莓派 4B 平臺運(yùn)行 FreeRTOS 虛擬化,由菁蓉聯(lián)創(chuàng)科技貢獻(xiàn)的jailhouse-gui 項(xiàng)目也已同步發(fā)布。
Jailhouse 在 openEuler 的未來發(fā)展
未來工業(yè)控制 SIG 組的麒麟軟件會(huì)關(guān)注于其他國內(nèi)平臺適配,瑞芯微系列(RK3399、RK3568)、全志系列等;易用性工具推廣,如配置文件自動(dòng)生成工具、UEFI 兼容等;新特新優(yōu)化,如子頁訪問效率提升、jailhouse coredump、PCIE 設(shè)備隔離。
-
cpu
+關(guān)注
關(guān)注
68文章
10882瀏覽量
212301 -
西門子
+關(guān)注
關(guān)注
94文章
3052瀏覽量
116107 -
Linux
+關(guān)注
關(guān)注
87文章
11323瀏覽量
209903 -
實(shí)時(shí)操作系統(tǒng)
+關(guān)注
關(guān)注
1文章
199瀏覽量
30783 -
openEuler
+關(guān)注
關(guān)注
2文章
319瀏覽量
5917
原文標(biāo)題:Jailhouse原理及openEuler下的性能剖析
文章出處:【微信號:openEulercommunity,微信公眾號:openEuler】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論