还是记录一个小点,希望对大家有所帮助。

背景: 最近需要用 DPDK测试 MellanoxConnectX-4 Lx网卡。在 DPDK中,该网卡对应的驱动是 mlx5。使用的 DPDK版本是 20.1122.03,结果都出现了类似的报错信息。

问题:testpmd中启动上述网卡出现报错情况,testpmd的命令如下:

$ ./build/app/dpdk-testpmd -l 0-3 -a 0000:06:00.0 -a 0000:06:00.1 -- -i

主要的报错信息如下:

...
Configuring Port 1 (socket 0)
mlx5_pci: Failed to init cache list NIC_ingress_0_matcher_cache entry (nil).
mlx5_pci: port 0 failed to set defaults flows
Fail to start port 1
Please stop the ports first
Done
...

在网上搜索一番发现,上述报错信息之前已经有人在 DPDKBugzilla上贴过,但后来不了了之了,链接如下:
https://bugs.dpdk.org/show_bug.cgi?id=580

解决方案:
其实,在 DPDK 的官方文档中已经有 mlx5 驱动的使用教程了,链接如下:
https://doc.dpdk.org/guides/platform/mlx5.html
建议先认真看一遍。

核心 的一点就是: 想要顺利使用 DPDK mlx5驱动,需要成功安装它所依赖的外部组件,包括外部动态库和内核模块,如下所示:

  • 用户态外部库:libibverbslibmlx5
  • 内核态模块:mlx5_coremlx5_ibib_uverbs
  • 还有可能需要升级固件版本,具体要求参照上面的链接

毫无疑问,在安装上述组件的过程中或多或少会遇到一些问题,不然也不值得写这篇博客了。

官网文档说,上述组件可以通过三种方式安装。这三种方式我都花了不少的时间尝试过,结论是直接推荐第二种,因为其他两种方式安装成功后,还是有问题,可能是组件之间的版本不匹配。总之这个驱动很复杂,GDB调试也只能定位到外部组件的问题,但为什么产生那个问题却不知道,还是得踏踏实实的把环境配好。

  • 第一种:安装 rdma-core包 + 使用内核自带模块
  • 第二种:使用 Mellanox OFED安装
  • 第三种:使用 Mellanox EN安装

使用 Mellanox OFED安装需要下载一个软件包,链接如下:
https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/

下载时需要选择自己所用 OSCPU架构对应的版本,如果没有,则下载一个最为相近的版本(这个问题被我遇到了)。
如果版本完全匹配,按照官网文档所说,只需要执行下面这个命令就可以安装成功了:

$ ./mlnxofedinstall --dpdk

由于我下载的 Debian版本和所用 OSDebian版本不匹配,因此需要将 distro文件的内容修改为 skip-distro-check,即如下所示:

$ mv distro distro.bak
$ echo "skip-distro-check" > distro
$ cat distro
skip-distro-check

继续安装时,又提示我内核版本不匹配,因此还需要在命令行加一个参数:--add-kernel-support,最后的安装命令是:

$ ./mlnxofedinstall --add-kernel-support --dpdk

上述命令需要运行十几分钟,如果中间没有报错就安装成功了。有报错的话,按照提示进行修改和配置,比如修改配置文件、修改安装脚本、增加命令行参数、卸载某些有冲突的软件包等等。总之,一定要安装成功才行。

上边的脚本执行成功后,可通过如下步骤确认相关依赖包是否都安装成功:

  • 确认 libibverbs包是否安装
$ pkg-config --modversion libibverbs
1.14.40.0 // 版本可能会有所差异
  • 确认 libmlx5包是否安装
libmlx5
$ pkg-config --modversion libmlx5
1.24.40.0 // 版本可能会有所差异
  • 确认 mlx5_coremlx5_ibib_uverbs内核模块是否加载
$ lsmod  |egrep  "^mlx5_core|^mlx5_ib|^ib_uverbs"
mlx5_ib              3211264  0
ib_uverbs            1097728  1 mlx5_ib
mlx5_core           10534912  1 mlx5_ib
  • ib_devinfo查看是否有设备信息
$ ibv_devinfo
hca_id: mlx5_0transport:            InfiniBand (0)fw_ver:               14.32.1010node_guid:            0000:0000:0000:0000sys_image_guid:          0000:0000:0000:0000vendor_id:           0x02c9vendor_part_id:           4117hw_ver:             0x0board_id:            MT_0000000266phys_port_cnt:         1port:  1state:         PORT_DOWN (1)max_mtu:       4096 (5)active_mtu:     1024 (3)sm_lid:         0port_lid:      0port_lmc:      0x00link_layer:     Ethernethca_id: mlx5_1transport:            InfiniBand (0)fw_ver:               14.32.1010node_guid:            0000:0000:0000:0001sys_image_guid:          0000:0000:0000:0000vendor_id:           0x02c9vendor_part_id:           4117hw_ver:             0x0board_id:            MT_0000000266phys_port_cnt:         1port:  1state:         PORT_DOWN (1)max_mtu:       4096 (5)active_mtu:     1024 (3)sm_lid:         0port_lid:      0port_lmc:      0x00link_layer:     Ethernet

如果 Mellanox OFED安装失败,或是想自己编译安装,则可以下载 OFED源码包。OFED-5.731个源码包,若只考虑让 DPDK能够正常运行,则可以只需要编译安装以下源码包:

rdma-core
mlnx-tools
mlnx-ofa_kernel
knem
kernel-mft
mstflint

DPDK mlx5 驱动使用报错相关推荐

  1. Cartographer(三)思岚雷达rplidar ros驱动使用报错与解决

    0.参考 https://github.com/Slamtec/rplidar_ros/issues/5https://github.com/Slamtec/rplidar_ros/issues/5 ...

  2. adb驱动安装和使用报错笔记

    adb驱动安装 adb驱动下载地址:https://adb.clockworkmod.com/ 安装时候选择一个容易记住的路径,这个很重要,因为adb驱动没有自动配置环境变量,所以实验时候将adb安装 ...

  3. git使用报错:fatal: Couldn't find remote ref master的解决方法

    git使用报错:fatal: Couldn't find remote ref master的解决方法 fatal: Couldn't find remote ref master 翻译过来就是:致命 ...

  4. 记录webpack使用问题,使用报错“UnhandledPromiseRejectionWarning,file-loader图片过大,无法加载图片,打包html文件报错TypeError

    记录webpack使用报错 版本号问题 运行npm run build,报错 "UnhandledPromiseRejectionWarning: TypeError: this.getRe ...

  5. Assets.car 解压工具 cartool 使用报错 segmentation fault cartool 解决方案

    Assets.car 解压工具 cartool 使用报错 segmentation fault cartool 解决方案 参考文章: (1)Assets.car 解压工具 cartool 使用报错 s ...

  6. “this”不能在常量表达式中使用报错的解决方法

    "this"不能在常量表达式中使用报错的解决方法 问题描述与思考 在用C++书写下面一段代码时,编译器报错"'this'不能在常量表达式中使用".在这里,我最开 ...

  7. CentOS系统yum源使用报错:Error: Cannot retrieve repository metadata

    服务器上的yum突然不好使用,使用yum的时候报错如下: [root@bastion-IDC src]# yum list ...... Could not retrieve mirrorlist h ...

  8. Python安装xlrd和xlwt的步骤以及使用报错的解决方法

    Python安装xlrd和xlwt的步骤以及使用报错的解决方法 参考文章: (1)Python安装xlrd和xlwt的步骤以及使用报错的解决方法 (2)https://www.cnblogs.com/ ...

  9. git使用报错: fatal: Couldn‘t find remote ref master的解决方法

    git使用报错: fatal: Couldn't find remote ref master的解决方法 参考文章: (1)git使用报错: fatal: Couldn't find remote r ...

最新文章

  1. 八天学会MongoDB:第三天 细说高级操作
  2. 10 分钟使用 Spring Boot + Vue + Antd + US3 搭建自己的图床
  3. YBTOJ洛谷P4551:最长异或路径(trie树)
  4. flutter和webapp_Flutter 适配移动端和web不同尺寸
  5. Uni-G/ The University of Glasgow (Uni-G) ECG Analysis Program
  6. c++质数判定及输出质数表
  7. 博主的EMNLP2021合作工作已公开:TransPrompt——基于Prompt和迁移学习的小样本文本分类,欢迎阅读与引用
  8. QT框架下的OpenGL使用---实战篇---鼠标选取点对象
  9. 网易云信七年:「连接者」背后的「放大器」
  10. 贪吃蛇python游戏
  11. APP从苹果开发者A账号转移到B账号的流程
  12. 刷脸支付上线,追赶二维码支付指日可待?
  13. linux shutdown关不了机
  14. 关于加密解密有哪些你需要知道知识?一篇文章告诉你
  15. macbook 终端命令怎么使用_玩转 Terminal 终端:入门指南及进阶技巧
  16. 利用强化学习进行股票操作实战(三)
  17. 香港科技大学计算机系主任杨强:论深度学习的迁移模型
  18. nginx报错解决connect() to unix:/tmp/php-cgi-73.sock failed (111: Connection refused
  19. brew直接安装解压工具
  20. Go :使用编译器诊断标志测试内联是否有效(附完整源码)

热门文章

  1. 上传照片视频的小程序
  2. WordPress加速插件秘笈:五款加速插件让您的网站飞起来
  3. 【历史上的今天】12 月 9 日:微软推出 Windows 2.0;五十年前的极客科技展;第一个获得专利的人
  4. 我讨厌泪水,却为何还是会哭
  5. datamatrix java_java 怎么生成datamatrix
  6. 4键电子手表说明书_迪士尼手表如何调整
  7. 华为od按水仙花方案分割字符串
  8. 11-999之间的所有三重回文数字
  9. 网站接入支付功能完整教程
  10. 天线下倾角示意图_天线下倾角计算