当前位置: 首页 > news >正文

dpdk-19.11 arm64 环境适配 Mellanox CX4 网卡

环境信息

cpu: arm64 架构
dpdk 版本:19.11
glibc 版本:2.17
网卡型号:
Mellanox CX4 网卡,详细 pci 信息如下:

02:00.0 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx]
02:00.1 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx]

cx4 dpdk 驱动适配

确认 dpdk 是否支持

查找驱动代码,mlx5_pci_id_map 中列举了支持的网卡标识,部分摘要如下:

 PCI_DEVICE_ID_MELLANOX_CONNECTX4LXVF = 0x1016,static const struct rte_pci_id mlx5_pci_id_map[] = {{RTE_PCI_DEVICE(PCI_VENDOR_ID_MELLANOX,PCI_DEVICE_ID_MELLANOX_CONNECTX4)},{RTE_PCI_DEVICE(PCI_VENDOR_ID_MELLANOX,PCI_DEVICE_ID_MELLANOX_CONNECTX4VF)},{RTE_PCI_DEVICE(PCI_VENDOR_ID_MELLANOX,PCI_DEVICE_ID_MELLANOX_CONNECTX4LX)},{RTE_PCI_DEVICE(PCI_VENDOR_ID_MELLANOX,PCI_DEVICE_ID_MELLANOX_CONNECTX4LXVF)},

确认 mlx5 驱动支持 CX4 网卡,需要编译出一个支持 mlx5 驱动的 dpdk 版本给产品进行集成。

配置文件中开启 mlx5 驱动

将 arm64 的配置文件中CONFIG_RTE_LIBRTE_MLX5_PMD 项目设置为 y,这样 dpdk 编译时会编译 mlx5 驱动。

mlx5 驱动的特点

  1. 网卡正常驱动运行依赖多个内核模块

    x86 平台成功适配的环境中,麦洛斯相关模块加载命令列举如下:

    modprobe mlx5_coremodprobe ib_umad
    modprobe ib_uverbsmodprobe mlx5_ibvers
    modprobe mlx5_ib
    modprobe mlxfw
    modprobe tls
    modprobe pci-hyperv
    modprobe vmw_pvrdma
    modprobe rdma_ucm
    modprobe psample
    

    前期成功经验表明至少需要 5.0 以上的内核才能支持,需要选择支持 arm64 架构的 5.0 以上版本内核

  2. 编译依赖三方 rdma-core 库与头文件

    由于我们的 rootfs 是定制版本,且 glibc 版本很低,基本都是古董版本,要基于源码方式编译出依赖的三方库难度会非常大,优先从互联网上检索可用的版本,实在没有版本可用时则考虑自行编译。

内核版本选型

对照依赖模块,选择了内部维护的只是 arm64 架构的 5.4.18 内核,首先检索内核发布 ko 路径中相关 ko 信息,搜索到如下内容:

kernel/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.ko.xz
kernel/drivers/infiniband/core/ib_umad.ko.xz
kernel/drivers/infiniband/core/ib_uverbs.ko.xzkernel/drivers/infiniband/hw/mlx5/mlx5_ib.ko.xz
kernel/drivers/net/ethernet/mellanox/mlxfw/mlxfw.ko.xzkernel/net/tls/tls.ko.xz
kernel/drivers/pci/controller/pci-hyperv.ko.xz
kernel/drivers/infiniband/hw/vmw_pvrdma/vmw_pvrdma.ko.xz
kernel/drivers/infiniband/core/rdma_ucm.ko.xz
kernel/net/psample/psample.ko.xz

仅缺少 mlx5_ibvers,查看内核源码确认此驱动在此版本不需要,评估 5.4.18 能够满足要求。修改 grub 文件,增加新的配置项目使用新的内核,测试确定如下条件满足:

  1. mlx5_core、ib_uverbs 等模块成功加载
  2. 网卡成功绑定到 mlx5_core 驱动,netdev 设备成功生成, /dev/infiniband/uverbsX 设备文件成功生成

mlx5 编译依赖选择

初次获取依赖的 rpm 包获取地址:

wget -c <https://rpmfind.net/linux/centos/8-stream/BaseOS/aarch64/os/Packages/libnl3-3.5.0-1.el8.aarch64.rpm>
wget -c <https://rpmfind.net/linux/centos/8-stream/BaseOS/aarch64/os/Packages/libibverbs-37.2-1.el8.aarch64.rpm>
wget -c <https://rpmfind.net/linux/centos/8-stream/BaseOS/aarch64/os/Packages/rdma-core-devel-37.2-1.el8.aarch64.rpm>

运行发现存在依赖高版本 glibc,无法在环境中运行,启动报错如下:

bash-4.2# ./l2fwd
./l2fwd: /lib/libc.so.6: version `GLIBC_2.25' not found (required by /usr/lib64/libmlx5.so.1)

进一步分析确定,仅依赖 GLIBC 2.25 getrandom 符号,这个符号低版本 glibc 并不具备,因此不能直接使用。

仅仅缺少一个符号就宣告失败让人有些惋惜,于是想着有没有什么方式能把这个缺少的符号加上,一通搜索还真的搜索到了一篇帖子——https://jakub-jozwicki.medium.com/is-it-possible-to-add-missing-functions-to-libc-so-6-via-ld-preload-c6515b82abd6,参照帖子里的内容并做了一些修改,最终能链接通过,但是运行是仍旧报相同的错误,只能放弃。

再次搜索获取到如下版本的 rpm 包:

wget -c <https://rpmfind.net/linux/centos/8-stream/BaseOS/aarch64/os/Packages/libnl3-3.5.0-1.el8.aarch64.rpm>
wget -c <https://buildlogs.cdn.centos.org/c7.1810.00.aarch64/rdma-core/20181031053230/17.2-3.el7.aarch64/libibverbs-17.2-3.el7.aarch64.rpm>
wget -c <https://buildlogs.cdn.centos.org/c7.1810.00.aarch64/rdma-core/20181031053230/17.2-3.el7.aarch64/rdma-core-17.2-3.el7.aarch64.rpm>
wget -c <https://buildlogs.cdn.centos.org/c7.1810.00.aarch64/rdma-core/20181031053230/17.2-3.el7.aarch64/rdma-core-devel-17.2-3.el7.aarch64.rpm>

这次比较幸运,测试通过,能够正常运行。

基于 l2fwd 测试记录如下:

[root@localhost]# ./l2fwd  -- -p0x3
EAL: Detected 8 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
............................................................................
EAL:   probe driver: 15b3:1015 net_mlx5
libibverbs: Warning: couldn't open config directory '/etc/libibverbs.d'.
net_mlx5: MPLS over GRE/UDP tunnel offloading disabled due to old OFED/rdma-core version or firmware configuration
............................................................................

测试 l2fwd 能够正常运行,打流确认流量能够正常转发。

dlopen 方式加载 mlx5 驱动依赖的三方库

mlx5 驱动默认动态链接 libibverbs.so 与 libmlx5.so,开启了 mlx5 驱动后,新发布的 dpdk 库在使用时如果链接到了 mlx5 pmd 驱动时需要添加新的链接参数才能够正常编译,最好不需要添加任何额外的链接参数,这样兼容性好些。

研究了一下,发现开启 CONFIG_RTE_IBVERBS_LINK_DLOPEN 配置能够解决这个问题,开启会这些库会通过 dlopen 在运行时加载,这样依赖 dpdk 库的程序编译时就不需要添加额外的链接参数了。

同时修改了 mlx5 Makefile 中的内容,设置了三方库的头文件与库的位置及必要的链接参数。

参考链接

https://blog.csdn.net/qq_36393978/article/details/118700062

https://lore.kernel.org/all/20220227102435.4275f945@hermes.local/T

相关文章:

dpdk-19.11 arm64 环境适配 Mellanox CX4 网卡

环境信息 cpu: arm64 架构 dpdk 版本&#xff1a;19.11 glibc 版本&#xff1a;2.17 网卡型号&#xff1a; Mellanox CX4 网卡&#xff0c;详细 pci 信息如下&#xff1a; 02:00.0 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx] 02:00.1 Ether…...

1141. 查询近30天活跃用户数

1141. 查询近30天活跃用户数 题目链接&#xff1a;1141. 查询近30天活跃用户数 代码如下&#xff1a; # Write your MySQL query statement below select activity_date as day,count(distinct user_id) as active_users from Activity where activity_date between 2019-06-…...

11_JavaWeb监听器

文章目录 监听器1.监听器的分类2.application域监听器案例 监听器 概念&#xff1a;后端要发生一些事情的时候&#xff0c;自动触发一些代码的执行&#xff1b; 1.监听器的分类 web中定义八个监听器接口作为监听器的规范,这八个接口按照不同的标准可以形成不同的分类 按监听的…...

jmeter常用的断言

包括&#xff08;Contains&#xff09;&#xff1a;响应内容包括需要匹配的内容即代表响应成功&#xff0c;支持正则表达式 匹配&#xff08;Matches&#xff09;&#xff1a;响应内容要完全匹配需要匹配的内容即代表响应成功&#xff0c;大小写不敏感&#xff0c;支持正则表达…...

Opencv Python图像处理笔记二:图像变换、卷积、形态学变换

文章目录 前言一、几何变换1.1 缩放1.2 平移1.3 旋转1.4 翻转1.5 仿射1.6 透视 二、低通滤波2.1 均值滤波2.2 高斯滤波2.3 中值滤波2.4 双边滤波2.5 自定义滤波 三、高通滤波3.1 Sobel3.2 Scharr3.3 Laplacian3.4 Canny 四、图像金字塔4.1 高斯金字塔4.2 拉普拉斯金字塔 五、形…...

使用若依框架RuoYi前后端分离版+运行+自动生成页面进行导入进行开发+工具(完整版)

若依后台预览 摘要: 随着前后端分离开发模式的流行,越来越多的开发者开始将项目的前端和后端分离开发,以提高开发效率和项目的灵活性。若依框架作为一款优秀的开源后台管理系统,提供了强大的权限管理和代码生成功能,非常适合前后端分离开发。 一、若依框架介绍 若依框架…...

开源博客项目Blog .NET Core源码学习(29:App.Hosting项目结构分析-17)

本文学习并分析App.Hosting项目中后台管理页面的按钮管理页面。   按钮管理页面用于显示、新建、编辑、删除页面按钮数据&#xff0c;以便配置后台管理页面中每个页面的工具栏、操作栏、数据列中的按钮的事件及响应url。按钮管理页面附带一新建及编辑页面&#xff0c;以支撑新…...

2021 hnust 湖科大 计组课设 包含multisim14连线文件,报告,指导书

2021 hnust 湖科大 计组课设 包含multisim14连线文件&#xff0c;报告&#xff0c;指导书 描述 hnust计组课设要用到的东西都在里面了 下载链接 https://pan.baidu.com/s/1tHooJmhkrwX47JCqsg379g?pwd1111...

CHATGPT升级plus(已有账号前提下)

注册wildcard(虚拟卡) 注册号账号后先进行充值&#xff0c;充值后选择CHATGPT一键升级按照他的流程来即可 Wildcard网址&#xff1a;Wildcard跳转注册 填写邀请码充值时少两美金合计14&#xffe5; 邀请码&#xff1a;OL3QXTRH...

通过血清拉曼光谱进行COVID-19的高效初步筛查

通过血清拉曼光谱进行COVID-19的高效初步筛查 原创 小王搬运工 时序课堂 2024-06-04 20:04 四川 论文地址&#xff1a;https://analyticalsciencejournals.onlinelibrary.wiley.com/doi/full/10.1002/jrs.6080 论文源码&#xff1a;无 期刊&#xff1a;JOURNAL OF RAMAN SPE…...

Java 性能调优与监控工具详解

在Java开发中&#xff0c;性能调优和监控是确保应用程序高效、稳定运行的关键环节。本文将详细介绍Java性能调优的基本原则和常用的监控工具&#xff0c;并通过代码示例帮助读者理解如何进行实际操作。 一、性能调优的基本原则 在开始调优之前&#xff0c;了解以下基本原则是…...

LeetCode 1633, 122, 239

目录 1633. 各赛事的用户注册率题目链接表要求知识点思路代码 122. 买卖股票的最佳时机 II题目链接标签思路代码 239. 滑动窗口最大值题目链接标签思路代码 1633. 各赛事的用户注册率 题目链接 1633. 各赛事的用户注册率 表 表Users有字段user_id和user_name。表Register有…...

(十五)统计学基础练习题九(选择题T401-450)

本文整理了统计学基础知识相关的练习题&#xff0c;共50道&#xff0c;适用于想巩固统计学基础或备考的同学。来源&#xff1a;如荷学数据科学题库&#xff08;技术专项-统计学三&#xff09;。序号之前的题请看往期文章。 401&#xff09; 402&#xff09; 403&#xff09; 4…...

用大白话讲解下 CNN和卷积核( 百度 AI 回答 )

CNN&#xff08;卷积神经网络&#xff09;和卷积核在图像处理中扮演着非常重要的角色。咱们来用大白话解释一下它们。 首先说CNN&#xff0c;它就像是一个聪明的机器&#xff0c;专门用来识别图片里的东西。CNN里面有很多层&#xff0c;每一层都有很多小单元&#xff0c;这些小…...

安全生产新篇章:可燃气体报警器检验周期的国家标准解读

随着工业化进程的加快&#xff0c;安全生产成为了重中之重。 可燃气体报警器作为预防火灾和爆炸事故的重要设备&#xff0c;其准确性和可靠性直接关系到企业的生产安全和员工的生命财产安全。 因此&#xff0c;国家对可燃气体报警器的检验周期有着明确的规定&#xff0c;以确…...

github搭建个人博客

准备工作 windows安装nodejs windows安装git windows安装hexo 拥有gitee个人账户 配置信息 通过gitee创建博客仓库 登录gitee平台&#xff0c;进入主界面&#xff0c;右侧加号&#xff0c;新建仓库&#xff0c;注意&#xff1a;仓库名称和gitee用户名称一致 生成/添加 SSH 公…...

Linux系统之mv命令的基本使用

Linux系统之mv命令的基本使用 一、mv命令介绍1. mv命令简介2. mv命令的使用结果 二、mv命令的使用帮助1. 在命令行的帮助信息2. mv常用选项 三、mv命令的基本使用1. 创建源目录和目标目录2. 新建测试文件3. 将源目录文件复制到目标目录4. 将文件进行改名5. 将目录的所有文件转移…...

vscode 好用的插件

转中文插件 Chinese 官网&#xff1a;Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code - Visual Studio Marketplace vue文件模板快速生成 Vue VSCode Snippets 官网&#xff1a;Vue VSCode 代码段 - Visual Studio Marketplace...

什么是蓝牙定位车载GPS终端

蓝牙定位车载GPS终端是一种集成了蓝牙技术和GPS定位功能的车载设备。这种终端不仅可以通过GPS卫星信号进行室外定位&#xff0c;还能利用蓝牙技术在室内环境中进行定位&#xff0c;实现室内外一体化的定位服务。以下是一些关于蓝牙定位车载GPS终端的关键特点和功能&#xff1a;…...

指纹采集技术

目录 1.概述 1.1 捺印油墨采集 1.2 现场指纹提取 1.3 在线指纹采集 2. 指纹采集器的关键技术指标 2.1 采集面积 2.2 分辨率 2.3 图像质量 2.4 耐用性 1.概述 最早的指纹采集技术是油墨法&#xff0c;至少已经有上百年的历史。1990年代出现了活体指纹采集器&#xff0c…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...

大模型真的像人一样“思考”和“理解”吗?​

Yann LeCun 新研究的核心探讨&#xff1a;大语言模型&#xff08;LLM&#xff09;的“理解”和“思考”方式与人类认知的根本差异。 核心问题&#xff1a;大模型真的像人一样“思考”和“理解”吗&#xff1f; 人类的思考方式&#xff1a; 你的大脑是个超级整理师。面对海量信…...