![VT-d 支持已启用,但缺少 IOMMU 组](https://linux22.com/image/175943/VT-d%20%E6%94%AF%E6%8C%81%E5%B7%B2%E5%90%AF%E7%94%A8%EF%BC%8C%E4%BD%86%E7%BC%BA%E5%B0%91%20IOMMU%20%E7%BB%84.png)
上一个超微 A2SDi-8C+-HLN4FAtom C3758 系统 我看到 BIOS 中启用了 VT-d 支持,但我在 Linux (Fedora 31) 下找不到任何 IOMMU 组:
$ ls /sys/kernel/iommu_groups
$
内核日志似乎表明检测到 VT-d:
# journalctl -k | grep 'DMAR\|iommu' | sed 's/^.*kernel: //'
ACPI: DMAR 0x000000007E1629C0 000070 (v01 INTEL BDW 00000001 INTL 00000001)
DMAR: Host address width 39
DMAR: DRHD base: 0x000000fed90000 flags: 0x1
DMAR: dmar0: reg_base_addr fed90000 ver 1:0 cap d2008c40660462 ecap f050da
DMAR: RMRR base: 0x0000007f0fa000 end: 0x0000007f10afff
DMAR-IR: IOAPIC id 2 under DRHD base 0xfed90000 IOMMU 0
DMAR-IR: HPET id 0 under DRHD base 0xfed90000
DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
DMAR-IR: Enabled IRQ remapping in x2apic mode
iommu: Default domain type: Translated
我是否需要进行一些配置才能获得 IOMMU 组?
背景:我正在研究这个,因为我无法将以太网设备绑定到 dpdk 的 vfio-pci:
# /usr/share/dpdk/usertools/dpdk-devbind.py --bind=vfio-pci 07:00.0
Error: bind failed for 0000:07:00.0 - Cannot bind to driver vfio-pci
# /usr/share/dpdk/usertools/dpdk-devbind.py --status
Network devices using kernel driver
===================================
0000:05:00.0 'Ethernet Connection X553 1GbE 15e4' if=eno1 drv=ixgbe unused=vfio-pci *Active*
0000:05:00.1 'Ethernet Connection X553 1GbE 15e4' if=eno2 drv=ixgbe unused=vfio-pci
0000:07:00.1 'Ethernet Connection X553 1GbE 15e4' if=eno4 drv=ixgbe unused=vfio-pci
Other Network devices
=====================
0000:07:00.0 'Ethernet Connection X553 1GbE 15e4' unused=ixgbe,vfio-pci
# dmesg | tail -n 3
[ +0.169963] ixgbe 0000:07:00.0: complete
[ +0.000561] vfio-pci: probe of 0000:07:00.0 failed with error -22
[ +0.000040] vfio-pci: probe of 0000:07:00.0 failed with error -22
答案1
您需要添加intel_iommu=on
到内核加载参数。默认情况下此参数被禁用(我不知道on
默认情况下设置此参数的发行版)。
当您在 BIOS 中启用 IOMMU 时,ACPI 表将转换为内核 DMAR,并且内核会在引导期间初始化它。
设置后intel_iommu=on
,内核会将系统硬件资源划分为 IOMMU 组。它的数量和粒度取决于硬件。看VFIO——“虚拟功能I/O”了解详情。