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 驱动的特点
-
网卡正常驱动运行依赖多个内核模块
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 以上版本内核
-
编译依赖三方 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 文件,增加新的配置项目使用新的内核,测试确定如下条件满足:
- mlx5_core、ib_uverbs 等模块成功加载
- 网卡成功绑定到 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 版本:19.11 glibc 版本:2.17 网卡型号: Mellanox CX4 网卡,详细 pci 信息如下: 02:00.0 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx] 02:00.1 Ether…...
1141. 查询近30天活跃用户数
1141. 查询近30天活跃用户数 题目链接:1141. 查询近30天活跃用户数 代码如下: # 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域监听器案例 监听器 概念:后端要发生一些事情的时候,自动触发一些代码的执行; 1.监听器的分类 web中定义八个监听器接口作为监听器的规范,这八个接口按照不同的标准可以形成不同的分类 按监听的…...
jmeter常用的断言
包括(Contains):响应内容包括需要匹配的内容即代表响应成功,支持正则表达式 匹配(Matches):响应内容要完全匹配需要匹配的内容即代表响应成功,大小写不敏感,支持正则表达…...
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项目中后台管理页面的按钮管理页面。 按钮管理页面用于显示、新建、编辑、删除页面按钮数据,以便配置后台管理页面中每个页面的工具栏、操作栏、数据列中的按钮的事件及响应url。按钮管理页面附带一新建及编辑页面,以支撑新…...
2021 hnust 湖科大 计组课设 包含multisim14连线文件,报告,指导书
2021 hnust 湖科大 计组课设 包含multisim14连线文件,报告,指导书 描述 hnust计组课设要用到的东西都在里面了 下载链接 https://pan.baidu.com/s/1tHooJmhkrwX47JCqsg379g?pwd1111...
CHATGPT升级plus(已有账号前提下)
注册wildcard(虚拟卡) 注册号账号后先进行充值,充值后选择CHATGPT一键升级按照他的流程来即可 Wildcard网址:Wildcard跳转注册 填写邀请码充值时少两美金合计14¥ 邀请码:OL3QXTRH...
通过血清拉曼光谱进行COVID-19的高效初步筛查
通过血清拉曼光谱进行COVID-19的高效初步筛查 原创 小王搬运工 时序课堂 2024-06-04 20:04 四川 论文地址:https://analyticalsciencejournals.onlinelibrary.wiley.com/doi/full/10.1002/jrs.6080 论文源码:无 期刊:JOURNAL OF RAMAN SPE…...
Java 性能调优与监控工具详解
在Java开发中,性能调优和监控是确保应用程序高效、稳定运行的关键环节。本文将详细介绍Java性能调优的基本原则和常用的监控工具,并通过代码示例帮助读者理解如何进行实际操作。 一、性能调优的基本原则 在开始调优之前,了解以下基本原则是…...
LeetCode 1633, 122, 239
目录 1633. 各赛事的用户注册率题目链接表要求知识点思路代码 122. 买卖股票的最佳时机 II题目链接标签思路代码 239. 滑动窗口最大值题目链接标签思路代码 1633. 各赛事的用户注册率 题目链接 1633. 各赛事的用户注册率 表 表Users有字段user_id和user_name。表Register有…...
(十五)统计学基础练习题九(选择题T401-450)
本文整理了统计学基础知识相关的练习题,共50道,适用于想巩固统计学基础或备考的同学。来源:如荷学数据科学题库(技术专项-统计学三)。序号之前的题请看往期文章。 401) 402) 403) 4…...
用大白话讲解下 CNN和卷积核( 百度 AI 回答 )
CNN(卷积神经网络)和卷积核在图像处理中扮演着非常重要的角色。咱们来用大白话解释一下它们。 首先说CNN,它就像是一个聪明的机器,专门用来识别图片里的东西。CNN里面有很多层,每一层都有很多小单元,这些小…...
安全生产新篇章:可燃气体报警器检验周期的国家标准解读
随着工业化进程的加快,安全生产成为了重中之重。 可燃气体报警器作为预防火灾和爆炸事故的重要设备,其准确性和可靠性直接关系到企业的生产安全和员工的生命财产安全。 因此,国家对可燃气体报警器的检验周期有着明确的规定,以确…...
github搭建个人博客
准备工作 windows安装nodejs windows安装git windows安装hexo 拥有gitee个人账户 配置信息 通过gitee创建博客仓库 登录gitee平台,进入主界面,右侧加号,新建仓库,注意:仓库名称和gitee用户名称一致 生成/添加 SSH 公…...
Linux系统之mv命令的基本使用
Linux系统之mv命令的基本使用 一、mv命令介绍1. mv命令简介2. mv命令的使用结果 二、mv命令的使用帮助1. 在命令行的帮助信息2. mv常用选项 三、mv命令的基本使用1. 创建源目录和目标目录2. 新建测试文件3. 将源目录文件复制到目标目录4. 将文件进行改名5. 将目录的所有文件转移…...
vscode 好用的插件
转中文插件 Chinese 官网:Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code - Visual Studio Marketplace vue文件模板快速生成 Vue VSCode Snippets 官网:Vue VSCode 代码段 - Visual Studio Marketplace...
什么是蓝牙定位车载GPS终端
蓝牙定位车载GPS终端是一种集成了蓝牙技术和GPS定位功能的车载设备。这种终端不仅可以通过GPS卫星信号进行室外定位,还能利用蓝牙技术在室内环境中进行定位,实现室内外一体化的定位服务。以下是一些关于蓝牙定位车载GPS终端的关键特点和功能:…...
指纹采集技术
目录 1.概述 1.1 捺印油墨采集 1.2 现场指纹提取 1.3 在线指纹采集 2. 指纹采集器的关键技术指标 2.1 采集面积 2.2 分辨率 2.3 图像质量 2.4 耐用性 1.概述 最早的指纹采集技术是油墨法,至少已经有上百年的历史。1990年代出现了活体指纹采集器,…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
