• DPDK mlx5 驱动使用报错


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

    背景: 最近需要用 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
    
    • 1

    主要的报错信息如下:

    ...
    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
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在网上搜索一番发现,上述报错信息之前已经有人在 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
    
    • 1

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

    $ mv distro distro.bak
    $ echo "skip-distro-check" > distro
    $ cat distro
    skip-distro-check
    
    • 1
    • 2
    • 3
    • 4

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

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

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

  • 相关阅读:
    Vue3中插槽<slot>的概念和用法
    【微信小程序高频面试题——精选一】
    西门子6ES72881ST200AA1
    ArduPilot开源代码之AP_RangeFinder
    10 个 Java Stream 神级技巧:编程更轻松、更高效
    tauri使用github进行打包和自动更新教程
    自己动手从零写桌面操作系统GrapeOS系列教程——20.汇编语言读硬盘实战
    Promise简(resolve,reject,catch)
    探索Spring Boot的自动配置机制
    如何在latex中高亮文本
  • 原文地址:https://blog.csdn.net/choumin/article/details/126098502