首页/云/云平台与虚拟化速查/IOMMU 开启检查与分组查看
虚拟化基础63 条

IOMMU 开启检查与分组查看

直通、SR-IOV 与部分性能特性依赖 IOMMU:先看内核命令行与 dmesg 确认开启,再通过 /sys/kernel/iommu_groups 核对设备分组。

云平台与虚拟化速查云更新于 2026-10-13

IOMMU 与设备直通

IOMMU(Intel VT-d 与 AMD-Vi)是设备直通与 DMA 隔离的基础:开启后内核按硬件拓扑把设备划分成组,同一组内的设备只能整组直通。检查分三步——内核命令行是否有 intel_iommu=on 或 amd_iommu=on、dmesg 里是否有 DMAR 或 IOMMU 记录、/sys/kernel/iommu_groups/ 下是否出现分组。分组粒度太粗意味着隔离不完整,需要评估 ACS 覆盖或更换平台。

基本信息

内核参数cat /proc/cmdline 查 intel_iommu=on / amd_iommu=on
内核日志dmesg | grep -i -e DMAR -e IOMMU
分组目录ls /sys/kernel/iommu_groups/
组成员ls /sys/kernel/iommu_groups/<组号>/devices/
直通前提设备绑定到 vfio-pci 且未被宿主占用

典型使用场景

  • 为虚机直通网卡、HBA 或 GPU 前确认 IOMMU 已就绪
  • 排查分组过粗导致无法单独直通某块设备
  • 升级内核或固件后确认直通能力没有回退
  • 为高性能场景评估 SR-IOV 与直通的可行性
  • 安全加固中评估 DMA 隔离是否完善

检查三件套

检查三件套
cat /proc/cmdline                                # 确认是否有 iommu 相关参数
dmesg | grep -i -e DMAR -e IOMMU | head          # 确认内核是否识别到 IOMMU
ls /sys/kernel/iommu_groups/ | head              # 是否已生成分组
ls /sys/kernel/iommu_groups/0/devices/           # 查看某个分组里的设备
lspci -nn | head                                 # 取 PCI 地址与设备标识,便于对照分组

检查点与判定

检查点命令期望与异常
内核参数/proc/cmdline缺少 iommu 参数说明未开启
内核日志dmesg 中的 DMAR/IOMMU无记录说明固件未启用或参数未生效
分组目录/sys/kernel/iommu_groups/目录为空说明 IOMMU 未生效
组内成员各分组 devices 目录多个关键设备同组说明隔离不完整
设备占用对照 lspci 与宿主驱动宿主正在使用的设备无法直接直通
若分组粒度太粗(多设备同组),可评估 ACS 覆盖或换用支持更好隔离的平台,强行直通会把同组其他设备一起从宿主剥离。
直通前要把设备从宿主驱动解绑并绑定到 vfio-pci,且确认设备未被宿主使用,否则绑定会失败或导致宿主侧功能异常。

开启顺序

  • 先在固件里启用 VT-d 或 AMD-Vi,再配置内核参数
  • 把 iommu 参数写入内核命令行并重启,重启后复查参数与 dmesg
  • 确认已生成 iommu_groups 并按组清点设备
  • 把目标设备绑定到 vfio-pci 并在宿主侧确认不再被占用
  • 直通后在 guest 内核对设备识别与驱动加载情况

易错点

  • 只加了内核参数没重启:dmesg 里看不到 DMAR/IOMMU 记录
  • 固件里未开启 VT-d/AMD-Vi,内核参数加了也没有分组
  • 分组过粗就强行直通,宿主同时失去同组其他设备
  • 把一个仍被宿主使用的设备直通给虚机,造成宿主功能异常

数据来源与参考

  • Linux 内核文档:IOMMU
  • Red Hat 文档:启用 IOMMU
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌