IoMmu 模型
本页介绍 WDDM 2.0 中引入的 IoMmu 模型。 有关最新的 IOMMU 更新,请参阅 基于 IOMMU 的 GPU 隔离 和 IOMMU DMA 重新映射 。
概述
输入输出内存管理单元(IOMMU)是一个 MMU 组件,用于将支持 DMA 的 I/O 总线连接到系统内存。 它将设备可见的虚拟地址映射到物理地址,使其在虚拟化中很有用。
在 WDDM 2.0 IoMmu 模型中,每个进程都有一个虚拟地址空间,即:
- 在 CPU 和 GPU 之间共享。
- 由 OS 内存管理器管理。
若要访问内存,GPU 会将数据请求发送到合规的 IOMMU。 请求包括共享虚拟地址和 进程地址空间标识符 (PASID)。 IOMMU 使用共享页表执行地址转换。 下图演示了此操作。
内核模式显示驱动程序(KMD)通过设置 DXGK_VIDMMCAPS::IoMmuSupported caps 来表示对 IoMmu 模型的支持。 设置此标志后,视频内存管理器(VidMm)会自动将 GPU 与 IOMMU 一起使用的任何进程注册,并获取 该进程地址空间的 PASID 。 PASID 在创建设备期间传递给驱动程序。
VidMm 在显示之前将主要分配映射到光圈段,确保显示控制器具有对这些分配的物理访问权限。
在 IoMmu 模型中,用户模式显示驱动程序(UMD)继续使用 VidMm 的 分配 服务为 GPU 分配视频内存。 此过程允许 UMD:
- 遵循驻留模型。
- 支持 DirectX 资源共享模型。
- 确保主图面对内核可见,并在显示之前映射到光圈。
UMD 完全管理用户模式下的第一级转换(磁贴资源地址 到 共享 CPU/GPU 地址)。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈