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