AMD IOMMU規格 (四)

IOMMU的架構

行為模式:
當禁用IOMMU時,系統會passthrought所有匯流排上的資料。而當啟用IOMMU時,系統則會攔截來自下游裝置的請求,並對請求進行權限檢與地址轉換,並將轉譯後的內容發送到系統記憶體的上游,其他請求則保持不變。

IOMMU讀取系統記憶體中的三個表格(device tables, page tables, interrupt remapping tables)來執行其功能,同時使用內部buffer提高性能。系統軟體需要發送失效命令以確保IOMMU的內部buffer與表條目同步。此外,IOMMU還會通過標準PCI MSI或MSI-X中斷來發出中斷。

IOMMU典型的操作流程:

• 由IOMMU生成的讀取、寫入和中斷事務不由IOMMU進行轉譯。

• 來自上游的事務必須未經修改地傳遞到下游。

• 來自下游的回應、隔離或刷新命令的事務必須未經修改地傳遞到上游。

• 來自下游並引用IOMMU排除範圍內地址的事務必須未經修改地傳遞到上游。

• 來自下游的記憶體讀取和寫入事務導致在Device Table中進行表查找,以獲取請求I/O設備的DomainID並找到I/O頁表。在I/O頁表中進行進一步的表查找以執行地址轉譯和權限檢查。經過權限檢查和地址轉譯後,如果來自I/O設備的事務允許,IOMMU將其上游傳遞。

• 來自下游的地址轉譯請求導致與內存讀取和寫入事務相同的表查找。將轉譯的地址和訪問權限信息返回給請求的外設。軟體需要使外設中緩存的地址轉譯映射無效。

• 來自下游的device page請求將導致事件日誌中的事件記錄(如果不支援),或將結果寫入系統記憶體的device page請求日誌中。(可選的PPR自動回應會修改此行為。)



• 中斷地址永遠不會轉譯為系統記憶體地址,但保留用於消息簽名中斷(MSI)的物理地址範圍可以選擇性地視為記憶體地址進行轉譯(例如,ACPI地址範圍,PCI配置空間映射)。

• 上游中斷將導致在device table中進行表查找,然後在中斷重新映射表中進行查找以重新映射中斷。經過檢查和中斷重新映射後,如果來自I/O設備的中斷被允許,IOMMU將其上游傳遞。SMI請求可選擇通過SMI過濾器進行,不使用中斷重新映射表。

• 來自下游設備的Port I/O空間事務將導致Device Table查找,以確定I/O設備是否被允許訪問Port I/O空間。

• IOMMU在系統記憶體中維護一個事件日誌,其中包含未正常完成的事務的詳細信息。

• IOMMU維護一個可選的包含在客戶端未運行時到達的中斷請求的客戶端虛擬APIC日誌。

• IOMMU對於能夠生成預先翻譯地址的I/O設備,不進一步轉譯設備的記憶體讀取和寫入請求。

• IOMMU處理來自命令隊列的命令。

選項中的MARC功能允許來自集成的I/O設備,如GPU,當存取系統記憶體的定義區域時,繞過IOMMU。除了從下游設備轉發事務之外,IOMMU還會插入自己的事務,執行對系統記憶體的讀取和寫入以及發送中斷。

IOMMU被允許緩存頁表和Device Table的內容以加速轉譯。定義了一個使軟體能夠在更新表時使緩存內容與記憶體保持一致的無效化協議。當軟體啟動一個不保留處理器或晶片組狀態的暫停操作時,存儲在暫存器中的IOMMU狀態將遺失,必須作為恢復序列的一部分來進行還原。當系統軟體處理PCI熱插拔通知時,則會檢查ACPI表,以確定哪個IOMMU將為外部設備提供服務,然後適當地設置IOMMU。

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

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

參考來源

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