常州网站制作推广优化百度seo技术搜索引擎
概述
输入输出内存管理单元 (IOMMU) 是一个硬件组件,它将支持具有 DMA 功能的 I/O 总线连接到系统内存。 它将设备可见的虚拟地址映射到物理地址,使其在虚拟化中很有用。
在 WDDM 2.0 IoMmu 模型中,每个进程都有一个虚拟地址空间,即:
- 在 CPU 和 GPU 之间共享。
- 由 OS 内存管理器管理。
为了访问内存,GPU 向兼容的 IOMMU 发送数据请求。 该请求包括一个共享虚拟地址和一个进程地址空间标识符 (PASID)。 IOMMU 使用共享页表执行地址转换。 下图说明了此操作。
内核模式显示驱动程序 (KMD) 通过设置DXGK_VIDMMCAPS::IoMmuSupported 上限来表示对 IoMmu 模型的支持。 设置此标志后,视频内存管理器 (VidMm) 会自动将 GPU 与 IOMMU 一起使用的任何进程注册,并获取该进程地址空间的 PASID。 PASID 在创建设备期间传递给驱动程序。
VidMm 在显示之前将主要分配映射到光圈段,确保显示控制器具有对这些分配的物理访问权限。
在 IoMmu 模型中,用户模式显示驱动程序 (UMD) 继续使用 VidMm 的 Allocate 服务为 GPU 分配视频内存。 此过程允许 UMD:
- 遵循驻留模型。
- 支持 DirectX 资源共享模型。
- 确保主图面对内核可见,并在显示之前映射到光圈。
UMD 在用户模式下完全管理第一级转换(磁贴资源地址到共享 CPU/GPU 地址)
DXGK_VIDMMCAPS
typedef struct _DXGK_VIDMMCAPS {union {struct {UINT OutOfOrderLock : 1;UINT DedicatedPagingEngine : 1;UINT PagingEngineCanSwizzle : 1;UINT SectionBackedPrimary : 1;UINT CrossAdapterResource : 1;UINT VirtualAddressingSupported : 1;UINT GpuMmuSupported : 1;UINT IoMmuSupported : 1;UINT ReplicateGdiContent : 1;UINT NonCpuVisiblePrimary : 1;UINT ParavirtualizationSupported : 1;UINT IoMmuSecureModeSupported : 1;UINT DisableSelfRefreshVRAMInS3 : 1;UINT IoMmuSecureModeRequired : 1;UINT MapAperture2Supported : 1;UINT CrossAdapterResourceTexture : 1;UINT CrossAdapterResourceScanout : 1;UINT AlwaysPoweredVRAM : 1;
#if ...UINT Reserved : 14;
#elifUINT Reserved : 15;
#elifUINT Reserved : 18;
#elifUINT Reserved : 19;
#elifUINT Reserved : 21;
#elifUINT Reserved : 22;
#elifUINT Reserved : 27;
#elifUINT Reserved : 28;
#elseUINT Reserved : 31;
#endif};UINT Value;};UINT PagingNode;
} DXGK_VIDMMCAPS;
结构标识内核模式显示微型端口驱动程序(KMD)支持的视频内存管理功能。