• 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

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

  • 相关阅读:
    分布式链路追踪技术 Sleuth +Zipkin
    NSSCTF web刷题记录6
    基于行为树的高级游戏AI教程
    springboot简述
    MySQL数据库高阶语句
    TiDB ——TiKV
    【Ubuntu】Ubuntu20.04安装EasyConnect后打不开的问题。
    Spark中的闭包引用和广播变量
    完整指南:如何使用 Node.js 复制文件
    leetcode刷题日记:160. Intersection of Two Linked Lists(相交链表)
  • 原文地址:https://blog.csdn.net/choumin/article/details/126098502