跳到主要内容
主页代理入口联系客服

平台隔离

IOMMU 与 DMA Remapping:Intel VT-d、AMD IOMMU 如何隔离设备

IOMMU(Input/Output Memory Management Unit)位于具备 DMA 能力的设备与系统内存之间。重新映射生效时,它会转换设备使用的地址、检查访问权限,并把设备限制在操作系统分配的内存范围内。Intel 将相关架构称为 VT-d;AMD 平台提供 AMD IOMMU,常见资料也称 AMD-Vi。

最后审核: 2026-09-05发布:Heino HMA Hardware Lab

核心结论

IOMMU 不是关闭 DMA,而是为 DMA 建立可执行的地址和权限边界。硬件能力、固件声明、操作系统策略与兼容驱动缺一不可。

硬件层IOMMU
IntelVT-d
AMDAMD IOMMU
WindowsDMA Remapping

IOMMU 解决什么问题

DMA 允许网卡、存储和图形等设备高效地与内存交换数据,但设备访问也必须有边界。启用重新映射后,操作系统只向设备开放当前操作所需的内存页;不在映射内或权限不匹配的事务会被 IOMMU 拒绝。

因此,IOMMU 的安全价值来自最小范围映射、明确权限和正确的映射生命周期,而不是让设备停止工作。

设备地址如何被重新映射

设备提交的 DMA 地址不必直接等于 CPU 使用的系统物理地址。平台可以依据 PCIe 请求者身份和 I/O 页表,将设备可见地址转换到实际内存,并分别控制读写权限。

不同设备或功能可以属于不同隔离域。一个设备被允许访问某个缓冲区,并不意味着其他设备自动获得相同访问权。

VT-d 与 AMD IOMMU 的共同点和区别

Intel VT-d 与 AMD IOMMU 都提供设备地址转换和隔离能力,但使用各自的架构、表结构和固件描述。它们也不同于主要服务 CPU 虚拟化的 Intel VT-x 与 AMD-V。

Windows 是否形成完整 DMA 防护,不能只看一个名为“Virtualization”的固件开关;还要核对 IOMMU、PCIe 控制、ACPI 声明和驱动状态。

固件与操作系统怎样交接责任

Windows 加载之前,预启动 DMA 防护由平台固件负责。Microsoft 的 OEM 要求包括保护预启动 I/O 缓冲区、控制不需要总线主控的 PCIe 路径,并在 ExitBootServices 后把可用的 IOMMU 状态交给操作系统。

Windows 再依据 Intel DMAR 或 AMD IVRS 等平台信息建立运行期策略。固件声明缺失或实现不完整时,硬件具备 IOMMU 也不代表 Windows 一定显示 Kernel DMA Protection 为 On。

如何解释和验证状态

可以在 Windows 安全中心的“内存访问保护”和 msinfo32 的“内核 DMA 保护”字段读取当前状态,并同时记录主板型号、UEFI、Windows Build、设备拓扑和驱动版本。

IOMMU 已启用只能证明必要能力可用,不能单独证明每个设备、每段启动流程或每个驱动都已通过隔离验收。状态异常时应依据 OEM 和驱动厂商资料复核,不应通过关闭安全控制换取设备工作。

常见问题

01IOMMU 与 CPU 的 MMU 相同吗?

不同。CPU MMU 主要转换处理器发出的内存访问;IOMMU 主要转换和限制 I/O 设备发出的访问。

02开启 Intel VT-x 是否等于开启 VT-d?

不等于。它们分别面向处理器虚拟化与定向 I/O,平台可能分别声明和配置。

03AMD IOMMU 可用是否表示 Kernel DMA Protection 一定为 On?

不一定。Windows 还依赖固件实现、ACPI 声明、PCIe 控制和驱动兼容性。

04IOMMU 一定会明显降低性能吗?

没有通用结论。影响取决于硬件、缓存、映射方式、驱动和工作负载,应在不降低安全基线的同版本环境中测量。

官方参考资料

  1. Microsoft:面向 OEM 的 Kernel DMA Protection 要求
  2. Microsoft:为设备驱动启用 DMA Remapping
  3. Intel:VT-d 架构规范
  4. AMD:IOMMU 概念与 Linux 驱动说明
HMA 安装支持