最近,T-Head 完成了基于 QEMU 的虛擬機(jī)虛擬 IOMMU 硬件支持的概念驗(yàn)證,基于 T-Head IOMMU 提案中的規(guī)范在其成立時(shí)提交給 IOMMU TG 作為其中之一候選人提案。 T-Head IOMMU 的虛擬 IOMMU 設(shè)計(jì)展示了一種向虛擬機(jī)公開(kāi)與主機(jī)使用的虛擬 IOMMU 相同的虛擬 IOMMU 的方法。好處是來(lái)賓虛擬機(jī)可以直接重新使用完全相同的內(nèi)核驅(qū)動(dòng)程序,并且消除了傳統(tǒng)解決方案中昂貴的基于軟件的仿真。
背景
出于性能或安全等原因,可以將物理 I/O 設(shè)備配置為由來(lái)賓虛擬機(jī)直接訪(fǎng)問(wèn),這種技術(shù)被廣泛稱(chēng)為設(shè)備直通。直通設(shè)備受 IOMMU 轉(zhuǎn)換表的限制,因此它們只能對(duì)屬于它們所分配到的虛擬機(jī)的內(nèi)存區(qū)域執(zhí)行 DMA。從虛擬機(jī)的角度來(lái)看,直通設(shè)備表現(xiàn)為直接訪(fǎng)問(wèn)虛擬機(jī)物理地址空間的外圍設(shè)備。如果不合并 IOMMU 供虛擬機(jī)使用,虛擬機(jī)會(huì)遇到與主機(jī)中的所有設(shè)備都不由 IOMMU 管理的情況相同的不便和缺點(diǎn)。它們不能被進(jìn)一步分配到虛擬機(jī)的用戶(hù)空間,也不能出于可靠性目的限制它們。
圖 1:模擬虛擬 IOMMU
如圖 1 所示,為虛擬機(jī)提供 IOMMU 的傳統(tǒng)解決方案是 trap-n-emulate 或半虛擬化。 Trap-n-emulate 很昂貴。雖然它向來(lái)賓虛擬機(jī)提供與主機(jī)使用的硬件 IOMMU 相同的 IOMMU,但是,來(lái)賓對(duì)虛擬 IOMMU 的訪(fǎng)問(wèn)會(huì)觸發(fā)由主機(jī)處理的異常。處理是昂貴的。主機(jī)不僅需要模擬對(duì)虛擬 IOMMU 寄存器的訪(fǎng)問(wèn),還需要在虛擬機(jī)修改其內(nèi)存駐留翻譯結(jié)構(gòu)時(shí)將翻譯的兩個(gè)階段結(jié)合起來(lái)。后者是由于現(xiàn)有的硬件 IOMMU 不直接使用 guest 的轉(zhuǎn)換表,因?yàn)橛布恢С忠粋€(gè)階段的地址轉(zhuǎn)換。一些 IOMMU,例如 ARM SMMU v3,可以進(jìn)行嵌套地址轉(zhuǎn)換,也有內(nèi)核補(bǔ)丁可以直接使用guest的轉(zhuǎn)換表,但是補(bǔ)丁仍然是RFC,估計(jì)是硬件架構(gòu)定義的表結(jié)構(gòu)導(dǎo)致軟件交互復(fù)雜。
圖 2:半虛擬化 IOMMU
半虛擬化(如圖 2 所示)通過(guò)要求來(lái)賓虛擬機(jī)將其 IOMMU 配置顯式傳達(dá)給主機(jī)來(lái)減少仿真工作。最大的缺點(diǎn)是需要修改來(lái)賓和主機(jī),因此,在某些環(huán)境中可能不可用。
T-Head 對(duì)虛擬 IOMMU 的硬件支持
T-Head的IOMMU提案試圖從硬件架構(gòu)開(kāi)始解決上述缺點(diǎn)。簡(jiǎn)要的想法是指定一個(gè)內(nèi)存區(qū)域(稱(chēng)為狀態(tài)區(qū)域),用于呈現(xiàn)給來(lái)賓虛擬機(jī)的虛擬 IOMMU 的寄存器狀態(tài)。同時(shí),主機(jī)的表結(jié)構(gòu)包括指向狀態(tài)區(qū)域的指針。當(dāng)需要轉(zhuǎn)換 DMA 請(qǐng)求時(shí),IOMMU 會(huì)查找狀態(tài)區(qū)域,從中獲取轉(zhuǎn)換表和來(lái)賓虛擬機(jī)配置的虛擬 IOMMU 的狀態(tài)。隨后,硬件 IOMMU 以與主機(jī)結(jié)構(gòu)相同的方式遍歷來(lái)賓的表結(jié)構(gòu),將所有地址視為來(lái)賓物理地址,即以嵌套轉(zhuǎn)換方式。
圖 3:T 頭的硬件輔助虛擬 IOMMU
T-Head 的虛擬 IOMMU(如圖 3 所示)避免了昂貴的仿真,因?yàn)榭蛻?hù)機(jī)的配置直接由硬件使用。也就是說(shuō),來(lái)賓正在與硬件支持的“直通”IOMMU 進(jìn)行交互。IOMMU 的接口由硬件 IOMMU 直接公開(kāi);它與主機(jī)的 IOMMU 相同。主機(jī)使用的完全相同的驅(qū)動(dòng)程序可以直接重復(fù)使用。使用內(nèi)存來(lái)存儲(chǔ)虛擬 IOMMU 的階段使解決方案具有可擴(kuò)展性,而不受寄存器上的資源約束。
原型
我們已經(jīng)完成了QEMU和Linux/KVM的概念驗(yàn)證。我們?cè)诒緳C(jī) QEMU 中的 IOMMU 仿真代碼中添加了對(duì)根據(jù) T-Head 的 IOMMU 規(guī)范的嵌套轉(zhuǎn)換的支持。我們以以前的設(shè)備直通工作為基礎(chǔ),在 RISC-V QEMU 中向 VFIO 層添加了嵌套的 IOMMU 支持。IOMMU 內(nèi)核驅(qū)動(dòng)程序?yàn)?RISC-V QEMU 公開(kāi)了一個(gè)新的 API,用于管理狀態(tài)區(qū)域并在轉(zhuǎn)換描述符中配置設(shè)備 ID,新 API 作為名為 /dev/xt_iommu 的設(shè)備文件存在,我們覆蓋了該文件上的 mmap 和寫(xiě)入處理程序。
未來(lái)工作
我們將繼續(xù)評(píng)估和改進(jìn)當(dāng)前的原型和設(shè)計(jì),包括在 RTL 中實(shí)現(xiàn)它。在適當(dāng)?shù)臅r(shí)候,我們希望將此解決方案貢獻(xiàn)給更大的RISC-V社區(qū)。
審核編輯:湯梓紅
-
內(nèi)核
+關(guān)注
關(guān)注
3文章
1376瀏覽量
40319 -
仿真
+關(guān)注
關(guān)注
50文章
4101瀏覽量
133726 -
硬件
+關(guān)注
關(guān)注
11文章
3348瀏覽量
66301 -
虛擬機(jī)
+關(guān)注
關(guān)注
1文章
919瀏覽量
28277 -
RISC-V
+關(guān)注
關(guān)注
45文章
2294瀏覽量
46249
原文標(biāo)題:T-Head Prototypes Innovative Hardware Support for Virtual IOMMU
文章出處:【微信號(hào):芯片開(kāi)放社區(qū),微信公眾號(hào):芯片開(kāi)放社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論