NVIDIA Mellanox MCX5 网卡 DPDK入门 (V20.11)

2023-07-28 08:38:42 昌辉 2598

Sinoinfo_Pic

基于Redhat 8.2,DPDK版本 V20.11 ,MCX512网卡,安装网卡驱动,DPDK编译和安装。赛诺实验室。


1、系统环境检查

[root@node3 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.2 (Ootpa)
[root@node3 ~]# uname -r
4.18.0-193.el8.x86_64
[root@node3 ~]# ldd --version
ldd (GNU libc) 2.28

[root@node3 ~]# lspci |grep -i Mellanox
03:00.0 Ethernet controller: Mellanox Technologies MT27800 Family [ConnectX-5]
03:00.1 Ethernet controller: Mellanox Technologies MT27800 Family [ConnectX-5]


2、安装网卡驱动

[root@node3 ~]# ls MLNX_OFED_LINUX-5.4-1.0.3.0-rhel8.2-x86_64.iso
MLNX_OFED_LINUX-5.4-1.0.3.0-rhel8.2-x86_64.iso

[root@node3 ~]# mount MLNX_OFED_LINUX-5.4-1.0.3.0-rhel8.2-x86_64.iso /mnt
mount: /mnt: WARNING: device write-protected, mounted read-only.

[root@node3 ~]# cd /mnt/

[root@node3 mnt]# ./mlnxofedinstall --upstream-libs --dpdk
Logs dir: /tmp/MLNX_OFED_LINUX.4120.logs
General log file: /tmp/MLNX_OFED_LINUX.4120.logs/general.log
Verifying KMP rpms compatibility with target kernel...
This program will install the MLNX_OFED_LINUX package on your machine.
Note that all other Mellanox, OEM, OFED, RDMA or Distribution IB packages will be removed.
Those packages are removed due to conflicts with MLNX_OFED_LINUX, do not reinstall them.

Do you want to continue?[y/N]:y



......



To load the new driver, run:
/etc/init.d/openibd restart

[root@node3 mnt]# /etc/init.d/openibd restart
Unloading HCA driver:                                      [  OK  ]
Loading HCA driver and Access Layer:                       [  OK  ]

如果出现提示需要安装相关依赖,直接安装即可,如下:

[root@node3 mnt]# ./mlnxofedinstall --upstream-libs --dpdk
Logs dir: /tmp/MLNX_OFED_LINUX.9408.logs
General log file: /tmp/MLNX_OFED_LINUX.9408.logs/general.log
Verifying KMP rpms compatibility with target kernel...
Error: One or more required packages for installing MLNX_OFED_LINUX are missing.
Please install the missing packages using your Linux distribution Package Management tool.
Run:
yum install make tcl tk

[root@node3 mnt]# yum install make tcl tk -y


3、安装meson,ninja

[root@node3 ~]# pip3 install meson ninja


4、安装numa库、gcc工具套件

[root@node3 ~]# dnf groupinstall "Development Tools"
[root@node3 ~]# yum install -y numactl numactl-devel 
[root@node3 ~]# dnf install -y gcc-toolset-9
[root@node3 ~]# pip3 install pyelftools


5、下载 编译安装DPDK 20.11

[root@node3 ~]# wget http://fast.dpdk.org/rel/dpdk-20.11.2.tar.xz

[root@node3 ~]# tar xf dpdk-20.11.2.tar.xz
[root@node3 ~]# cd dpdk-stable-20.11.2/

[root@node3 dpdk-stable-20.11.2]# ls
ABI_VERSION  buildtools  devtools  drivers   kernel  license      Makefile     meson_options.txt  usertools
app          config      doc       examples  lib     MAINTAINERS  meson.build  README             VERSION

[root@node3 dpdk-stable-20.11.2]# meson -Dexamples=all build

[root@node3 dpdk-stable-20.11.2]# cd build
[root@node3 build]# ninja -j8 -v
[root@node3 build]# ninja install

[root@node3 build]# mkdir -p /mnt/huge
[root@node3 build]# mount -t hugetlbfs nodev /mnt/huge
[root@node3 build]#

写入fstab

[root@node3 build]# vim /etc/fstab
......

nodev /mnt/huge hugetlbfs  defaults 0 0

[root@node3 build]# mount -a


6、安装配置hugepages

[root@node3 build]# yum -y install libhugetlbfs

vim /etc/default/grub
将下面行
GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet"

改为:
GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet transparent_hugepage=never default_hugepagesz=2M hugepagesz=2M hugepages=1024"

新的内容:
transparent_hugepage=never default_hugepagesz=2M hugepagesz=2M hugepages=1024

大页内存每页大小为2M,一共设置1024页面,即2GB,根据自己主机内存情况进行设置,如果内存多的,CPU又支持1GB的大页内存,可以每页设置1GB的大页内存.
// 重新生成 grub.cfg
[root@node3 build]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
done
[root@node3 build]# reboot

[root@node3 ~]# cat /proc/cmdline |grep hugepages
BOOT_IMAGE=(hd0,msdos1)/vmlinuz-4.18.0-193.el8.x86_64 root=/dev/mapper/rhel-root ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet transparent_hugepage=never default_hugepagesz=2M hugepagesz=2M hugepages=1024

[root@node3 ~]# cat /proc/meminfo |grep -i HugePages
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
HugePages_Total:    1024
HugePages_Free:     1024
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

[root@node3 ~]# numactl --hardware
available: 2 nodes (0-1)
node 0 cpus: 0 1 2 3 4 5 6 7 8 9 20 21 22 23 24 25 26 27 28 29
node 0 size: 31790 MB
node 0 free: 29135 MB
node 1 cpus: 10 11 12 13 14 15 16 17 18 19 30 31 32 33 34 35 36 37 38 39
node 1 size: 32251 MB
node 1 free: 30813 MB
node distances:
node   0   1
  0:  10  21
  1:  21  10


7、运行 testpmd,使用一根25GbE线缆将网卡2个端口直连。

[root@node3 ~]# lspci |grep -i mellanox
03:00.0 Ethernet controller: Mellanox Technologies MT27800 Family [ConnectX-5]
03:00.1 Ethernet controller: Mellanox Technologies MT27800 Family [ConnectX-5]
[root@node3 ~]# cd dpdk-stable-20.11.2/build/app/

[root@node3 app]# ./dpdk-testpmd -l 0-4 -n 2 -a 03:00.0 -a 03:00.1 -- -i --rxq=2 --txq=2 --rxd=1024 --txd=1024 --mbcache=512 --burst=64
EAL: Detected 40 lcore(s)
EAL: Detected 2 NUMA nodes
EAL: Detected static linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: No available hugepages reported in hugepages-1048576kB
EAL: Probing VFIO support...
EAL: Probe PCI driver: mlx5_pci (15b3:1017) device: 0000:03:00.0 (socket 0)
EAL: Probe PCI driver: mlx5_pci (15b3:1017) device: 0000:03:00.1 (socket 0)
EAL: No legacy callbacks, legacy socket not created
Interactive-mode selected
testpmd: create a new mbuf pool : n=212992, size=2176, socket=0
testpmd: preferred mempool ops selected: ring_mp_mc
Configuring Port 0 (socket 0)
Port 0: 0C:42:A1:7F:3D:C0
Configuring Port 1 (socket 0)
Port 1: 0C:42:A1:7F:3D:C1
Checking link statuses...
Done
testpmd>

Sinoinfo_Pic









微信公众号