解决启动dpdk时,报"VFIO group is not viable! Not all device in IOMMU group bound to VFIO or unbund" 的问题

发布时间 2023-07-11 11:06:56作者: 朝花不夕拾

    问题如下图:

     这个错误信息其实是linux内核的vfio驱动报出来的,主要原因是"在iommu分组中,不是所有的设备都被绑定到vfio驱动".

  所以,解决方案核心思想: 将要使用的设备独立到一个iommu分组中。     

      步骤1:通过以下 "list_iommu_group.sh "可以看到所有的iommu分组和其分组内的设备信息:

     list_iommu_group.sh 脚本内容如下:

1 #!/bin/bash
2 for d in $(find /sys/kernel/iommu_groups/ -type l | sort -n -k5 -t/); do 
3     n=${d#*/iommu_groups/*}; n=${n%%/*}
4     printf 'IOMMU Group %s ' "$n"
5     lspci -nns "${d##*/}"
6 done;

 执行结果类似下图:

 

 

 

  步骤2 : 内核启用 pcie_acs_override 

    以 debian-11 系统为例,

          1、 编辑 grub的默认配置文件 "/etc/default/grub" , 添加"pcie_acs_override=downstream,multifunction"

               

 

           2、更新系统的grub :  update-grub

              

     3、 重启后,再次执行"list_iommu_group.sh "脚本来查看iommu分组情况是否发生改变。如果发现需要使用的设备被独立为一个分组,则成功了; 如果未发生变化则说明内核不支持acs,需要给内核打入acs的补丁才行 (内核打acs补丁的参考:)。