DPDK-A1:Centos配置MLX5驱动
admin
2024-02-01 18:54:31
0

系统安装

系统采用Centos 8.3,服务器为Xeon 铂金版8259CL,网卡为Mellnox CX5双100G接口,两个接口回环.

在安装的时候请您勾选一下组件, 虚拟化的东西是后面在虚拟机里面跑DPDK需要用到的.

  • Server with GUI

  • Virtualization Client

  • Virtualization Hypervisor

  • Virtualization Tools

安装完成后使用root
登录,然后备份原有的yum repository配置,并更换阿里云的源

#备份原有的配置文件mkdir /etc/yum.repos.d/bakmv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/
#使用阿里云的源覆盖
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
sed -i 's|^#baseurl=https://download.fedoraproject.org/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*
sudo dnf config-manager --set-enabled PowerToolsyum makecache
yum update

安装开发软件

主要是用于后面安装mlx5 ofed和编译DPDK所需的工具,注意下面的一个都不能少

特别是注意 libnl3-devel,如果缺失编译DPDK会出现找不到libibverbs很多函数的错误.

yum groupinstall "Development tools"
yum install gcc-gfortran kernel-modules-extra tcl tk tcsh terminator tmux kernel-rpm-macros elfutils-libelf-devel libnl3-devel meson createrepo numactl-devel
pip3 install pyelftools

启用iommu

sudo vi /etc/default/grub//在 GRUB_CMDLINE_LINUX 行添加"intel_iommu=on iommu=pt" 
GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet intel_iommu=on iommu=pt"
//保存退出

然后更新grub

sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

重启系统准备安装

此时必须要重启一次系统, 否则在ofed安装的时候会由于前面yum update了kernel报错.


 

安装MLX5-OFED

重启后继续使用root
登录,在如下连接下载:

https://www.mellanox.com/products/infiniband-drivers/linux/mlnx_ofed

然后解压安装,注意安装时选择带上参数--upstream-libs --dpdk --add-kernel-support

tar vzxf MLNX_OFED_LINUX-5.3-1.0.0.1-rhel8.3-x86_64.tgz
cd MLNX_OFED_LINUX-5.3-1.0.0.1-rhel8.3-x86_64/./mlnxofedinstall --upstream-libs  --dpdk --add-kernel-support 

安装时间有点慢,等一下,完成后按照提示更新initramfs,然后重启

dracut -f
reboot


 

编译DPDK

此时可以选择非root账户登录,然后编译DPDK, 首先需要检查openibd服务是否已经启动

[zartbot@netdev ~]$ sudo systemctl status openibd
● openibd.service - openibd - configure Mellanox devicesLoaded: loaded (/usr/lib/systemd/system/openibd.service; enabled; vendor preset: disabled)Active: active (exited) since Mon 2021-05-24 00:56:02 EDT; 1min 45s agoDocs: file:/etc/infiniband/openib.confProcess: 2714 ExecStart=/etc/init.d/openibd start bootid=e6af7c2ebc754526b55c8ef2c351d493 (code=exited, status=0/SUCCESS)Main PID: 2714 (code=exited, status=0/SUCCESS)Tasks: 0 (limit: 2465692)Memory: 24.1MCGroup: /system.slice/openibd.serviceMay 24 00:56:01 netdev systemd[1]: Starting openibd - configure Mellanox devices...
May 24 00:56:02 netdev openibd[2714]: [49B blob data]
May 24 00:56:02 netdev systemd[1]: Started openibd - configure Mellanox devices.

和ubuntu一类的系统不同,CentOS上需要添加/usr/local路径, 主要是LD_LIBRARY_PATH
PATH
和 PKG_CONFIG_PATH
以及sudo
的path

sudo vi /etc/ld.so.conf.d/dpdk.conf>>添加如下path
/usr/local/lib64
>>退出sudo ldconfigvim ~/.bashrc
>>添加如下pathexport PATH=/usr/local/bin:$PATH
export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:${PKG_CONFIG_PATH}sudo vim  /etc/sudoers>>将secure_path添加/usr/local/bin
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

然后解压dpdk,并编译安装

tar xf dpdk-21.05.tar.xzcd dpdk-21.05
meson build -D examples=all cd build
ninja
sudo ninja install
sudo ldconfig

检查device状态

[zartbot@netdev build]$ sudo dpdk-devbind.py --statusNetwork devices using kernel driver
===================================
0000:60:00.0 'Ethernet Connection X722 for 1GbE 37d1' if=enp96s0f0 drv=i40e unused=
0000:60:00.1 'Ethernet Connection X722 for 1GbE 37d1' if=enp96s0f1 drv=i40e unused= *Active*
0000:60:00.2 'Ethernet Connection X722 for 1GbE 37d1' if=enp96s0f2 drv=i40e unused=
0000:60:00.3 'Ethernet Connection X722 for 1GbE 37d1' if=enp96s0f3 drv=i40e unused=
0000:86:00.0 'MT28800 Family [ConnectX-5 Ex] 1019' if=ens17f0 drv=mlx5_core unused=
0000:86:00.1 'MT28800 Family [ConnectX-5 Ex] 1019' if=ens17f1 drv=mlx5_core unused=No 'Baseband' devices detected
==============================No 'Crypto' devices detected
============================No 'Eventdev' devices detected
==============================No 'Mempool' devices detected
=============================No 'Compress' devices detected
==============================Misc (rawdev) devices using kernel driver
=========================================
0000:00:04.0 'Sky Lake-E CBDMA Registers 2021' drv=ioatdma unused=
0000:00:04.1 'Sky Lake-E CBDMA Registers 2021' drv=ioatdma unused=
0000:00:04.2 'Sky Lake-E CBDMA Registers 2021' drv=ioatdma unused=
0000:00:04.3 'Sky Lake-E CBDMA Registers 2021' drv=ioatdma unused=
0000:00:04.4 'Sky Lake-E CBDMA Registers 2021' drv=ioatdma unused=
0000:00:04.5 'Sky Lake-E CBDMA Registers 2021' drv=ioatdma unused=
0000:00:04.6 'Sky Lake-E CBDMA Registers 2021' drv=ioatdma unused=
0000:00:04.7 'Sky Lake-E CBDMA Registers 2021' drv=ioatdma unused=Other Misc (rawdev) devices
===========================
0000:80:04.0 'Sky Lake-E CBDMA Registers 2021' unused=ioatdma
0000:80:04.1 'Sky Lake-E CBDMA Registers 2021' unused=ioatdma
0000:80:04.2 'Sky Lake-E CBDMA Registers 2021' unused=ioatdma
0000:80:04.3 'Sky Lake-E CBDMA Registers 2021' unused=ioatdma
0000:80:04.4 'Sky Lake-E CBDMA Registers 2021' unused=ioatdma
0000:80:04.5 'Sky Lake-E CBDMA Registers 2021' unused=ioatdma
0000:80:04.6 'Sky Lake-E CBDMA Registers 2021' unused=ioatdma
0000:80:04.7 'Sky Lake-E CBDMA Registers 2021' unused=ioatdmaNo 'Regex' devices detected
===========================

(免费订阅,永久学习)学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂

更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,永久学习,或点击这里加qun免费
领取,关注我持续更新哦! !   

测试收发包

需要注意的是安装了ofed驱动和支持mlx5_pmd的网卡不需要bind,直接就可以使用,我们还是使用上次的框架,稍微改改收发包程序,来测一下pps

源代码可以在github/zartbot/learn_dpdk/a1_setup_mlx5_sriov_env找到

发包程序和上次的区别是直接一个for循环rte_eth_tx_burst

  for(;;) {uint16_t nb_tx = rte_eth_tx_burst(0, 0, pkt, BURST_SIZE);}

收包那段代码做了一个统计pps的功能

uint64_t freq = rte_get_tsc_hz() ;
for (;;)
{uint16_t nb_rx = rte_eth_rx_burst(1, 0, rx_pkt, BURST_SIZE);if (unlikely(nb_rx == 0)){continue;}pkt_cnt += nb_rx;if (unlikely(rte_rdtsc() - now > freq)) {printf("PPS: %ld\n",pkt_cnt);pkt_cnt= 0;now = rte_rdtsc() ;}
}

测试之前需要注意PKG_CONFIG_PATH的定义,因为前面我们已经在bashrc中改过

source ~/.bashrc
make

然后设置hugepage

 sudo dpdk-hugepages.py --setup 4G

执行测试程序

[zartbot@netdev test]$ sudo ./build/test
EAL: Detected 96 lcore(s)
EAL: Detected 2 NUMA nodes
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'VA'
EAL: No available 1048576 kB hugepages reported
EAL: Probe PCI driver: mlx5_pci (15b3:1019) device: 0000:86:00.0 (socket 1)
EAL: Probe PCI driver: mlx5_pci (15b3:1019) device: 0000:86:00.1 (socket 1)
TELEMETRY: No legacy callbacks, legacy socket not created*****************************************
number of available port: 2initializing port 0...
port[0] support RX cheksum offload.
port[0] support TX mbuf fast free offload.
port[0] support TX IPv4 checksum offload.
port[0] support TX UDP checksum offload.
port[0] support TX TCP checksum offload.
Port[0] MAC: ec:0d:9a:c5:df:fcinitializing port 1...
port[1] support RX cheksum offload.
port[1] support TX mbuf fast free offload.
port[1] support TX IPv4 checksum offload.
port[1] support TX UDP checksum offload.
port[1] support TX TCP checksum offload.
Port[1] MAC: ec:0d:9a:c5:df:fd
PPS: 5751838
PPS: 26864418
PPS: 26815140
PPS: 26820036
PPS: 26829140


 

配置VNC(可选)

sudo dnf install tigervnc-server tigervnc-server-module
sudo cp /usr/lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@.service
sudo systemctl daemon-reload

修改vncserver.users
例如5901给root,5902给zartbot,

sudo vi /etc/tigervnc/vncserver.users
>>在文件末尾添加
:1=root

配置分辨率和gnome

sudo vi /etc/tigervnc/vncserver-config-defaults
>>添加
session=gnome
geometry=2000x1200

然后每个账号设置vnc-password

[root@netdev build]# vncpasswd
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
A view-only password is not used

最后默认启动服务

sudo systemctl enable vncserver@:1

防火墙允许vnc服务

sudo firewall-cmd --permanent --add-service vnc-server
sudo firewall-cmd --reload

此时还有可能vnc连不上,可以尝试重启一下就好

原文链接:https://www.modb.pro/db/193484

相关内容

热门资讯

【MySQL】锁 锁 文章目录锁全局锁表级锁表锁元数据锁(MDL)意向锁AUTO-INC锁...
【内网安全】 隧道搭建穿透上线... 文章目录内网穿透-Ngrok-入门-上线1、服务端配置:2、客户端连接服务端ÿ...
GCN的几种模型复现笔记 引言 本篇笔记紧接上文,主要是上一篇看写了快2w字,再去接入代码感觉有点...
数据分页展示逻辑 import java.util.Arrays;import java.util.List;impo...
Redis为什么选择单线程?R... 目录专栏导读一、Redis版本迭代二、Redis4.0之前为什么一直采用单线程?三、R...
【已解决】ERROR: Cou... 正确指令: pip install pyyaml
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
Lock 接口解读 前置知识点Synchronized synchronized 是 Java 中的关键字,...
Win7 专业版安装中文包、汉... 参考资料:http://www.metsky.com/archives/350.htm...
3 ROS1通讯编程提高(1) 3 ROS1通讯编程提高3.1 使用VS Code编译ROS13.1.1 VS Code的安装和配置...
大模型未来趋势 大模型是人工智能领域的重要发展趋势之一,未来有着广阔的应用前景和发展空间。以下是大模型未来的趋势和展...
python实战应用讲解-【n... 目录 如何在Python中计算残余的平方和 方法1:使用其Base公式 方法2:使用statsmod...
学习u-boot 需要了解的m... 一、常用函数 1. origin 函数 origin 函数的返回值就是变量来源。使用格式如下...
常用python爬虫库介绍与简... 通用 urllib -网络库(stdlib)。 requests -网络库。 grab – 网络库&...
药品批准文号查询|药融云-中国... 药品批文是国家食品药品监督管理局(NMPA)对药品的审评和批准的证明文件...
【2023-03-22】SRS... 【2023-03-22】SRS推流搭配FFmpeg实现目标检测 说明: 外侧测试使用SRS播放器测...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
初级算法-哈希表 主要记录算法和数据结构学习笔记,新的一年更上一层楼! 初级算法-哈希表...
进程间通信【Linux】 1. 进程间通信 1.1 什么是进程间通信 在 Linux 系统中,进程间通信...
【Docker】P3 Dock... Docker数据卷、宿主机与挂载数据卷的概念及作用挂载宿主机配置数据卷挂载操作示例一个容器挂载多个目...