輸入輸出主記憶體管理單元
此條目翻譯自其他語言維基百科,需要相關領域的編者協助校對翻譯。 |
在電腦領域,輸入輸出主記憶體管理單元(英語:input–output memory management unit,縮寫IOMMU)是一種主記憶體管理單元(MMU),它將具有直接記憶體存取能力(可以DMA)的I/O匯流排連接至主主記憶體。如傳統的MMU(將CPU可見的虛擬地址轉換為實體位址)一樣,IOMMU將裝置可見的虛擬地址(在此上下文中也稱裝置地址或I/O地址)對映到實體位址。部分單元還提供主記憶體保護功能,防止故障或惡意的裝置。
IOMMU的一個例子是Intel架構和AMD電腦上使用的AGP和PCI Express顯示卡所使用的圖形地址對映表(GART)。
在x86架構將CPU與平台路徑控制器(PCH)的北橋和南橋拆分前,I/O虛擬化不是由CPU而是由晶片組執行。[1][2]
優點
與主記憶體的直接物理定址相比,擁有IOMMU的優勢包括[來源請求]:
- 分配大容量主記憶體區域可以不需連續的實體記憶體——IOMMU可將連續的虛擬地址對映到底層中分段的實體位址。因此,有時可以避免使用向量化I/O(分散-集中列表)。
- 不支援定址整個實體記憶體長度的裝置仍可通過IOMMU訪問整個主記憶體,避免了與外圍裝置的可定址主記憶體空間複製緩衝區有關的開銷。
- 主記憶體得到保護,嘗試進行DMA攻擊的惡意裝置或嘗試傳輸錯誤主記憶體的故障裝置無權讀寫非明確分配(對映)的主記憶體。主記憶體保護基於一項事實,CPU上執行的作業系統(見圖例)專門控制MMU和IOMMU。裝置本身無法繞過或損壞已組態的主記憶體管理表。
- 在某些架構中,IOMMU也執行硬件中斷重對映,工作方式類似標準主記憶體地址重對映。
- 外設主記憶體分頁可由IOMMU支援。使用PCI-SIG PCIe地址轉換服務(ATS)分頁請求介面(PRI)擴充的外設可以檢測和表示需要主記憶體管理服務。
對於埠I/O的地址空間與主記憶體的主記憶體地址空間不同的系統架構,CPU與裝置通過I/O埠通訊時不使用。如果埠I/O與主記憶體的地址空間被對映到一個合適的空間,則可以用IOMMU轉換I/O訪問。
缺點
與主記憶體的直接物理定址相比,IOMMU的缺點包括:[4]
- 效能因翻譯和管理開銷(例如頁表變動)有所下降。
- 增加的I/O分頁表(轉換表)消耗一些實體記憶體。如果該表可與處理器共用,則此問題可以緩解。
虛擬化
當作業系統在虛擬機器內執行時(包括使用半虛擬化的系統,例如Xen),其通常不知道它要訪問的主記憶體的主機實體位址。這使其難以直接訪問電腦硬件,因為如果客戶機系統嘗試用客戶機的實體位址進行直接記憶體存取(DMA)來吩咐硬件,其可能損壞主記憶體數據,因為硬件不知道給定虛擬機器客戶機實體位址與主機實體位址之間的對映關係。而由管理程式或主機作業系統介入I/O操作來應用翻譯則可以避免損壞,但會增加此I/O操作的延遲。
IOMMU可以依靠將客戶機實體位址對映到主機實體位址的相同或相容轉換表重對映硬件訪問地址,從而解決延遲問題。[5]
Intel和AMD的IOMMU虛擬化需要晶片組和CPU支援IOMMU虛擬化。Intel的IOMMU虛擬化稱為VT-d。
已公佈規範
- AMD已出版一份IOMMU技術規範。[6][7]
- 英特爾已出版一份針對虛擬化技術直接I/O的IOMMU技術規範,簡稱為VT-d。[8]
- 有關太陽電腦(Sun)IOMMU的資訊已在Solaris Developer Connection的裝置虛擬記憶體訪問(DVMA)部分發佈。[9]
- IBM Translation Control Entry (TCE) 在eServer pSeries 690中標題為「邏輯分區安全」的文件中進行了描述。[10]
- PCI-SIG對I/O虛擬化(IOV)[11]和地址轉換服務(ATS)有相關工作。
- ARM將其IOMMU版本定義為系統主記憶體管理單元(SMMU)[12],以補充其虛擬化架構。[13]
參見
- 異構系統架構(HSA)
- IOMMU支援的硬件列表
- 記憶體對映輸入輸出
- 記憶體保護
參考資料
- ^ Intel platform hardware support for I/O virtualization. intel.com. 2006-08-10 [2014-06-07]. (原始內容存檔於2007-01-20).
- ^ Desktop Boards: Compatibility with Intel Virtualization Technology (Intel VT). intel.com. 2014-02-14 [2014-06-07]. (原始內容存檔於2015-12-22).
- ^ Physical Address Extension — PAE Memory and Windows. Microsoft Windows Hardware Development Central. 2005 [2008-04-07]. (原始內容存檔於2008-04-06).
- ^ 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).
- ^ Xen FAQ: In DomU, how can I use 3D graphics. [2006-12-12]. (原始內容存檔於2008-10-02).
- ^ AMD I/O Virtualization Technology (IOMMU) Specification Revision 2.0 (PDF). amd.com. 2011-03-24 [2014-01-11]. (原始內容 (PDF)存檔於2021-02-25).
- ^ AMD I/O Virtualization Technology (IOMMU) Specification Revision 2.62 (PDF). amd.com. 2015-03-02 [2016-01-05]. (原始內容 (PDF)存檔於2018-06-16).
- ^ Intel Virtualization Technology for Directed I/O (VT-d) Architecture Specification (PDF). [2016-02-17]. (原始內容 (PDF)存檔於2020-08-24).
- ^ DVMA Resources and IOMMU Translations. [2007-04-30]. (原始內容存檔於2012-04-19).
- ^ Logical Partition Security in the IBM eServer pSeries 690. [2007-04-30]. (原始內容存檔於2007-03-10).
- ^ I/O Virtualization specifications. [2007-05-01]. (原始內容存檔於2021-03-08).
- ^ ARM SMMU. [2013-05-13]. (原始內容存檔於2016-09-23).
- ^ ARM Virtualization Extensions. [2013-05-13]. (原始內容存檔於2013-05-03).
外部連結
- Bottomley, James. Using DMA. Linux Journal (Specialized Systems Consultants). 2004-05-01. (原始內容存檔於2006年7月15日).
- Mastering the DMA and IOMMU APIs (頁面存檔備份,存於互聯網檔案館), Embedded Linux Conference 2014, San Jose, by Laurent Pinchart