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

    问题如下图:

     这个错误信息其实是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,需要给内核打入vfio的补丁才行 。

 

( 内核打acs补丁步骤的参考:

  1. 查看当前系统的内核版本号:

      cat /proc/version

 

      2. 下载自己需要版本的内核源码;

      由于Linux内核文件容量较大,所以建议使用国内的gitee仓库去下载:  https://gitee.com/mirrors/linux_old1.git

      3. 下载对应版本vfio补丁文件, vfio补丁的下载地址 : https://aur.archlinux.org/linux-vfio.git ;

      4. 内核打入补丁后,重新编译并安装,重启。

      linux内核打补丁参考: https://onestraw.github.io/linux/apply-patch-to-linux-kernel/

                  如何编译linux内核参考:  https://www.cnblogs.com/harrypotterjackson/p/11846222.html

)

 

posted @ 2023-07-11 11:04  朝花不夕拾  阅读(1105)  评论(0编辑  收藏  举报