当前位置: 首页 > 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…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

离线语音识别方案分析

随着人工智能技术的不断发展&#xff0c;语音识别技术也得到了广泛的应用&#xff0c;从智能家居到车载系统&#xff0c;语音识别正在改变我们与设备的交互方式。尤其是离线语音识别&#xff0c;由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力&#xff0c;广…...

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改&#xff0c;实现简单cat命令 输出信息到显示器&#xff0c;你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...

DeepSeek越强,Kimi越慌?

被DeepSeek吊打的Kimi&#xff0c;还有多少人在用&#xff1f; 去年&#xff0c;月之暗面创始人杨植麟别提有多风光了。90后清华学霸&#xff0c;国产大模型六小虎之一&#xff0c;手握十几亿美金的融资。旗下的AI助手Kimi烧钱如流水&#xff0c;单月光是投流就花费2个亿。 疯…...

stm32进入Infinite_Loop原因(因为有系统中断函数未自定义实现)

这是系统中断服务程序的默认处理汇编函数&#xff0c;如果我们没有定义实现某个中断函数&#xff0c;那么当stm32产生了该中断时&#xff0c;就会默认跑这里来了&#xff0c;所以我们打开了什么中断&#xff0c;一定要记得实现对应的系统中断函数&#xff0c;否则会进来一直循环…...