在現代高性能計算和虛擬化系統中,地址轉換(Address Translation)是一個至關重要的機制。隨著 PCIe 設備(如 GPU、網卡、存儲控制器)直接訪問系統內存的能力增強,設備對虛擬內存的訪問需求日益增長。
為了提升性能并確保安全訪問,Address Translation Services(ATS) 應運而生。
ATS 是 PCIe 規范中的一項關鍵功能,允許設備(如 Endpoint)在訪問內存時自行進行虛擬地址到物理地址的轉換,而無需依賴 CPU 的 MMU(Memory Management Unit)或操作系統介入。這不僅提升了性能,也增強了設備的自主性和安全性。
在早期的 PCIe 架構中,設備(如網卡或存儲設備)只能通過 DMA(Direct Memory Access)訪問物理地址。這意味著設備必須依賴主機(Host)為它分配物理地址,或者由操作系統進行地址映射。
這種方式存在以下問題:
- 性能瓶頸
:每次地址轉換都需要主機介入,導致延遲增加。
- 虛擬化支持差
:在虛擬化環境中,多個虛擬機共享同一個物理設備,傳統的物理地址訪問方式難以滿足隔離和安全需求。
- 資源浪費
:需要為每個虛擬機預留連續的物理內存區域。
擴展閱讀:
淺析CXL P2P DMA加速數據傳輸的原理
PCIe P2P DMA全景解讀
深度剖析:DMA對PCIe數據傳輸性能的影響
《存儲IO路徑》專題:數據魔法師DMA
為了解決上述問題,PCIe 3.0 引入了 Address Translation Services(ATS)。ATS 允許設備在訪問內存時,使用虛擬地址,并通過 IOMMU(Input/Output Memory Management Unit)進行地址轉換。設備可以緩存轉換結果(ATC,Address Translation Cache),從而減少頻繁的轉換請求,提高性能。
ATS 的實現依賴于以下關鍵組件:
組件 | 描述 |
IOMMU | 輸入/輸出內存管理單元,負責將設備的虛擬地址轉換為物理地址。 |
MMU | CPU 的內存管理單元,負責將 CPU 的虛擬地址轉換為物理地址。 |
Translation Agent (TA) | 負責處理 ATS 轉換請求的實體,可以是 IOMMU 或 MMU。 |
Address Translation Cache (ATC) | 設備內部緩存地址轉換結果的結構,類似于 CPU 的 TLB。 |
Address Translation Protection Table (ATPT) | 存儲地址轉換信息的數據結構,由 TA 使用。 |
設備發起轉換請求(Translation Request): 設備(如 Endpoint)向 Root Complex(RC)發送 ATS Translation Request,請求將虛擬地址轉換為物理地址。請求中包含虛擬地址、PASID(Process Address Space Identifier)、訪問權限等信息。
Root Complex 轉發請求至 Translation A