675 字
3 分钟
虚拟机网卡直通绑定DPDK失败问题

1. 情况说明#

需要将一张Intel X722/X710网卡直通到虚拟机中绑定DPDK做UPF数据面。

  • CPU passsthrough、核隔离已经加入到启动项中生效 cpu passsthrough
  • DPDK 进程能够正常启动

其他信息如下:

组件版本/配置
宿主机 OSUbuntu
VM OSDebian12
libvirt10.0.0
QEMU8.2.2
虚拟机机器类型pc-q35-7.2 (Q35)
CPU 模式host-passthrough
网卡Intel X722/X710 (8086:37d0/1572)

查看dpdk绑定的网卡驱动信息如下:

Terminal window
root@debian:bin# ./dpdk-devbind.py -s
Network devices using kernel driver
===================================
0000:01:00.0 'Virtio 1.0 network device 1041' if=enp1s0 drv=virtio-pci unused=virtio_pci,vfio-pci *Active* numa_node=-1
Other Network devices
=====================
0000:07:00.0 'Ethernet Connection X722 for 10GbE SFP+ 37d0' unused=i40e,vfio-pci

问题排查#

按之前这些配置都是能正常绑上DPDK的,但是这次出现了绑定失败的问题,但网管上DPDK进程是能够正常拉起的。

  1. 尝试手动在dpdk-devbind.py中绑定网卡驱动
Terminal window
root@debian:bin# ./dpdk-devbind.py -b vfio-pci 0000:07:00.0
Error: bind failed for 0000:07:00.0 - Cannot bind to driver vfio-pci
vfio-pci: probe of 0000:00:06.0 failed with error -22

IOMMU(八)-vIOMMU - 惠伟的文章 - 知乎

查看了大佬文章, -22 这个报错码,error -22(EINVAL)指向 IOMMU Group 缺失

  1. 查看宿主机和虚拟机内核是否都开启了IOMMU Group相关配置
Terminal window
# 宿主机
virt-host-validate
# QEMU: Checking for device assignment IOMMU support : PASS
# QEMU: Checking if IOMMU is enabled by kernel: PASS
Terminal window
# 虚拟机内
ls /sys/kernel/iommu_groups/ # 空目录,无 Group
ls /dev/vfio/
# 仅 vfio 主设备,无 group 设备
dmesg | grep-i iommu
# 仅有 "DMAR: IOMMU enabled",无 Intel-IOMMU 初始化

到这基本判断是vIOMMU没有生效 ,但为什么没生效这完全不清楚,只能上网查。

问题解决#

基于kvm的虚拟机配置开启iommu_group

libvirt 中 Intel IOMMU 的配置,用于虚拟化环境中的 PCI 设备直通,需要放在devices段,不能是features: viommu 编辑虚拟机配置文件 45GIMS.xml,添加以下内容:

<devices>
<!-- iommu -->
<iommu model='intel'>
<driver intremap='on' caching_mode='on' iotlb='on'/>
</iommu>
</devices>

添加完后又出现了报错:

Terminal window
fferror: unsupported configuration: IOMMU interrupt remapping requires split I/O APIC (ioapic driver='qemu')
Failed. Try again? [y,n,i,f,?]:

需要在xml文件的 features 段中添加以下内容:

<<features>
<acpi/> <!-- 高级配置与电源接口 -->
<apic/> <!-- 高级可编程中断控制器 -->
<ioapic driver='qemu'/> <!-- I/O APIC,由 QEMU 模拟 -->
</features>

重启后正常能够正常绑定到DPDK了。 ok

就比较奇怪,之前viommu是没做过这种配置,这次需要手动加上,才能正常绑定DPDK。可能是libvirtd版本原因?

总结#

  • 查看宿主机KVM组件版本信息,是否支持Q35机型的vIOMMU配置。
  • 首先检查当前虚拟机是否支持vIOMMU配置。
  • 确认宿主机和虚拟机内核是否都开启了IOMMU Group。
Terminal window
ls /sys/kernel/iommu_groups/
# 预期:0, 1, 2... 目录
ls /dev/vfio/
# 预期:0, 1, 2... 数字设备
  • 检查虚拟机配置文件是否正确,是否缺少vIOMMU配置。
虚拟机网卡直通绑定DPDK失败问题
https://ltreedo.icu/posts/issues-note/dpdkbinderror/
作者
Fakeragments
发布于
2026-05-22
许可协议
CC BY-NC-SA 4.0