AMD IOMMU規格 (二)

關鍵字 :IOMMU

IOMMU的七種使用模式

1. 取代 GART

GART是AMD64系統的一個功能,主要用於協助圖形協處理器對複雜的圖形對象進行記憶體地址轉換。即使這些對象在實際內存中是分散的,GART使得圖形協處理器能夠正確訪問它們。這種轉換包括所有對圖形孔的訪問,包括主處理器執行的和I/O設備執行的內存讀寫。要使I/O設備實現類似的轉換,主機操作系統需要建立特定的I/O頁表,指定所需的轉換,然後通知IOMMU進行更新。這樣,主處理器和圖形設備的所有訪問都被映射到和GART一樣的內存頁。

如果主機操作系統更改頁面保護或轉換,它需要同時更新處理器頁表和I/O頁表,然後向處理器和IOMMU發送相應的頁失效命令。不同的是,IOMMU在改變I/O頁表後需要頁失效命令,而處理器在改變葉頁表條目時不需要這樣的操作。總的來說,IOMMU和GART在這方面相似,但IOMMU提供了更多的保護和轉譯功能。

2. 取代設備排除向量機制

設備排除向量(DEV)是一種基本的安全機制,引入於AMD64安全虛擬機器(SVM)架構中。DEV類似於IOMMU,它允許將I/O設備歸類到不同的區域(domain)。

每個區域都有一個位向量,由物理頁面地址索引,用於指示該區域中的I/O設備是否被允許訪問相應的物理頁面。IOMMU提供保護和轉譯功能。如果只需要進行保護,軟體可以建立身份映射(identity-mapped)的I/O頁表,以指定所需的保護措施。

3. 32位到64位傳統I/O設備映射

隨著大容量內存的普及,傳統32位元設備無法隨意訪問系統內存,導致操作系統需區分低內存和高內存,並進行繁複管理。為了解決問題,某些系統使用GART,但這引入了複雜性和性能成本。相比之下,IOMMU提供更優越的解決方案,全面轉譯I/O設備地址,並允許各設備獨立管理,避免性能問題。

4. 用戶模式設備訪問

IOMMU在保護和管理I/O設備存取方面扮演關鍵角色,確保只有透過I/O頁表明確映射的頁面可以被訪問。啟用使用者層級的I/O設備存取需要考慮設計,包括DMA的保護和重新映射,以及IOMMU在中斷管理上的協助。系統軟體需評估是否需要鎖定可能被使用者層級進程控制的I/O設備訪問的所有頁面,而可選的外設頁請求(PPR)機制可幫助避免鎖定所有頁面的需求。



5. 在虛擬機中由訪客端存取設備端

IOMMU可用於讓未經修改的虛擬機器客戶操作系統直接訪問I/O設備。這種情況是允許使用者層級訪問I/O設備的一種特殊情況。要實現這一點,需要考慮客戶端無法通知虛擬機管理程式 (Hypervisor) 哪些頁面I/O設備可能訪問。客戶端的I/O頁表映射客戶端物理地址到系統物理地址。若虛擬機運行在嵌套分頁下,使用與IOMMU兼容的嵌套分頁表,則IOMMU可直接與主機CPU頁表共享。多個I/O設備可共享相同的DomainID,以提高效能。最後,使用大頁分配客戶端內存可增加I/O吞吐量,並降低IOMMU翻譯快取的抖動風險。

6. 虛擬化IOMMU

IOMMU在虛擬機管理程式(HV)中的軟體模擬。HV需要模擬IOMMU配置寄存器和MMIO映射命令寄存器,以及維護實際和虛擬的Device Table。由於性能原因,HV推薦客戶端在啟動IOMMU命令處理前將批量命令排隊到IOMMU的命令緩衝區。此外,HV需建立影子I/O頁表以供實際IOMMU使用,同時報告IOMMU可選功能的子集。

7. 虛擬化用戶模式設備訪問

一個具有雙層轉譯的IOMMU在執行系統保護策略的同時,允許在虛擬化系統中由用戶層級進程正確控制任意I/O設備。它確保了系統保護策略的執行,同時允許用戶層級進程正確控制I/O設備。IOMMU轉譯I/O設備的內存訪問,只允許訪問已由相應I/O頁表映射的頁面。這樣一來,用戶進程只能訪問其有權限訪問的頁面,而無需Hypervisor或操作系統的介入。另外,除了地址轉譯外,啟用用戶層級I/O設備還需要考慮其他設計方面,例如中斷的重新映射。系統軟體需要評估是否需要鎖定所有可能被用戶層級進程控制的I/O設備訪問的內存頁,並且一些外設裝置可能支持ATS協議,可以利用外設頁面請求機制而無需鎖定所有頁面。

★博文內容參考自 網站,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★博文作者未開放評論功能

參考來源

AMD: https://www.amd.com/content/dam/amd/en/documents/processor-tech-docs/specifications/48882_IOMMU.pdf