輸入輸出內存管理單元

計算機領域,輸入輸出內存管理單元(英語:input–output memory management unit,縮寫IOMMU)是一種內存管理單元(MMU),它將具有直接記憶體存取能力(可以DMA)的I/O總線連接至主內存。如傳統的MMU(將CPU可見的虛擬地址轉換為物理地址)一樣,IOMMU將設備可見的虛擬地址(在此上下文中也稱設備地址或I/O地址)映射到物理地址。部分單元還提供內存保護功能,防止故障或惡意的設備。

輸入輸出內存管理單元(IOMMU)與內存管理單元(MMU)的比較。

IOMMU的一個例子是Intel架構和AMD計算機上使用的AGPPCI Express顯卡所使用的圖形地址映射表英語Graphics address remapping table(GART)。

在x86架構將CPU與平台路徑控制器(PCH)的北橋南橋拆分前,I/O虛擬化不是由CPU而是由芯片組執行。[1][2]

優點

編輯

與內存的直接物理尋址相比,擁有IOMMU的優勢包括[來源請求]

  • 分配大容量內存區域可以不需連續的物理內存——IOMMU可將連續的虛擬地址映射到底層中分段的物理地址。因此,有時可以避免使用向量化I/O英語Vectored I/O分散-集中英語Scatter-gather列表)。
  • 不支持尋址整個物理內存長度的設備仍可通過IOMMU訪問整個內存,避免了與外圍設備的可尋址內存空間複製緩衝區有關的開銷。
    • 例如,x86計算機可以用x86處理器中的物理地址擴展(PAE)功能訪問超過4GB的內存。但是,普通的32位PCI設備根本無法訪問4Gib範圍外的內存,並且因此它不能直接訪問。如果沒有IOMMU,操作系統將不得不實現耗時的反彈緩衝區英語Bounce buffer(也稱雙緩衝區英語Double buffer[3]。)
  • 內存得到保護,嘗試進行DMA攻擊的惡意設備或嘗試傳輸錯誤內存的故障設備無權讀寫非明確分配(映射)的內存。內存保護基於一項事實,CPU上運行的操作系統(見圖例)專門控制MMU和IOMMU。設備本身無法繞過或損壞已配置的內存管理表。
    • 虛擬化英語Hardware-assisted virtualization中,客戶機操作系統可以使用非專為虛擬化設計的硬件。諸如使用DMA直接訪問內存的顯卡等硬件會有更高性能。在虛擬環境中,所有內存地址都會被虛擬機軟件重映射,從而導致DMA設備遇到故障。IOMMU則處理這種重映射,允許在客戶機操作系統中使用原生的設備驅動程序
  • 在某些架構中,IOMMU也執行硬件中斷重映射,工作方式類似標準內存地址重映射。
  • 外設內存分頁可由IOMMU支持。使用PCI-SIG PCIe地址轉換服務(ATS)分頁請求接口(PRI)擴展的外設可以檢測和表示需要內存管理服務。

對於端口I/O的地址空間與內存的內存地址空間不同的系統架構,CPU與設備通過I/O端口通信時不使用。如果端口I/O與內存的地址空間被映射到一個合適的空間,則可以用IOMMU轉換I/O訪問。

缺點

編輯

與內存的直接物理尋址相比,IOMMU的缺點包括:[4]

  • 性能因翻譯和管理開銷(例如頁表變動)有所下降。
  • 增加的I/O分頁表(轉換表)消耗一些物理內存。如果該表可與處理器共享,則此問題可以緩解。

虛擬化

編輯

當操作系統在虛擬機器內運行時(包括使用半虛擬化英語Paravirtualization的系統,例如Xen),其通常不知道它要訪問的內存的主機物理地址。這使其難以直接訪問計算機硬件,因為如果客戶機系統嘗試用客戶機的物理地址進行直接記憶體存取(DMA)來吩咐硬件,其可能損壞內存數據,因為硬件不知道給定虛擬機客戶機物理地址與主機物理地址之間的映射關係。而由管理程序或主機操作系統介入I/O操作來應用翻譯則可以避免損壞,但會增加此I/O操作的延遲

IOMMU可以依靠將客戶機物理地址映射到主機物理地址的相同或兼容轉換表重映射硬件訪問地址,從而解決延遲問題。[5]

Intel和AMD的IOMMU虛擬化需要晶片組和CPU支援IOMMU虛擬化。Intel的IOMMU虛擬化稱為VT-d。

已公布規範

編輯

參見

編輯

參考資料

編輯
  1. ^ Intel platform hardware support for I/O virtualization. intel.com. 2006-08-10 [2014-06-07]. (原始內容存檔於2007-01-20). 
  2. ^ Desktop Boards: Compatibility with Intel Virtualization Technology (Intel VT). intel.com. 2014-02-14 [2014-06-07]. (原始內容存檔於2015-12-22). 
  3. ^ Physical Address Extension — PAE Memory and Windows. Microsoft Windows Hardware Development Central. 2005 [2008-04-07]. (原始內容存檔於2008-04-06). 
  4. ^ Muli Ben-Yehuda; Jimi Xenidis; Michal Ostrowski. Price of Safety: Evaluating IOMMU Performance (PDF). Proceedings of the Linux Symposium 2007. Ottawa, Ontario, Canada: IBM Research. 2007-06-27 [2013-02-28]. (原始內容 (PDF)存檔於2020-12-18). 
  5. ^ Xen FAQ: In DomU, how can I use 3D graphics. [2006-12-12]. (原始內容存檔於2008-10-02). 
  6. ^ AMD I/O Virtualization Technology (IOMMU) Specification Revision 2.0 (PDF). amd.com. 2011-03-24 [2014-01-11]. (原始內容 (PDF)存檔於2021-02-25). 
  7. ^ AMD I/O Virtualization Technology (IOMMU) Specification Revision 2.62 (PDF). amd.com. 2015-03-02 [2016-01-05]. (原始內容 (PDF)存檔於2018-06-16). 
  8. ^ Intel Virtualization Technology for Directed I/O (VT-d) Architecture Specification (PDF). [2016-02-17]. (原始內容 (PDF)存檔於2020-08-24). 
  9. ^ DVMA Resources and IOMMU Translations. [2007-04-30]. (原始內容存檔於2012-04-19). 
  10. ^ Logical Partition Security in the IBM eServer pSeries 690. [2007-04-30]. (原始內容存檔於2007-03-10). 
  11. ^ I/O Virtualization specifications. [2007-05-01]. (原始內容存檔於2021-03-08). 
  12. ^ ARM SMMU. [2013-05-13]. (原始內容存檔於2016-09-23). 
  13. ^ ARM Virtualization Extensions. [2013-05-13]. (原始內容存檔於2013-05-03). 

外部連結

編輯