ubuntu—Mellanox MT28908网卡使用dpdk 一站式!!

一、安装Mellanox MT28908驱动mlx5及其依赖的外部组件
使用Mellanox OFED直接安装:
Mellanox OFED下载
下载时需要选择自己所用 OS和 CPU架构对应的版本,下载压缩包版本,解压进入
如果版本完全匹配,执行下面这个命令就可以安装成功:

$ sudo ./mlnxofedinstall --dpdk

如遇到内核版本不匹配,就还需要加一个参数:

$ sudo ./mlnxofedinstall --add-kernel-support --dpdk

安装完毕执行:重新加载驱动

sudo /etc/init.d/openibd restart

确认相关依赖都安装成功:

$ pkg-config --modversion libibverbs
$ pkg-config --modversion libmlx5
$ lsmod  |egrep  "^mlx5_core|^mlx5_ib|^ib_uverbs"
mlx5_ib              3211264  0
ib_uverbs            1097728  1 mlx5_ib
mlx5_core           10534912  1 mlx5_ib
$ ibv_devinfo

二、修改Mellanox MT28908为ETHERNET模式
在安装完驱动后,网卡默认模式为ib,可通过

$ ibv_devinfo

来查看网卡模式,要使用dpdk,要求网卡模式为ETH,需要修改网卡模式,否则dpdk无法使用网卡,报错:

eval ......cannot use

安装MFT工具

Mellanox Firmware Tools (MFT) (nvidia.com)
我下的版本是4.22.1 LTS Linux DEB x64

ar xvf mft-4.22.1-11-x86_64-deb.tgz
cd mft-4.22.1-11-x86_64-deb
sudo bash install.sh
sudo mst start

将设备切换到ETH模式

sudo mlxconfig -d /dev/mst/mt4119_pciconf0 set LINK_TYPE_P1=2 LINK_TYPE_P2=2

重启设备

sudo reboot

再次查看网卡模式

$ ibv_devinfo 
hca_id:	mlx5_0
	transport:			InfiniBand (0)
	fw_ver:				20.31.1014
	node_guid:			88e9:a4ff:ff38:5b08
	sys_image_guid:			88e9:a4ff:ff38:5b08
	vendor_id:			0x02c9
	vendor_part_id:			4123
	hw_ver:				0x0
	board_id:			HPE0000000036
	phys_port_cnt:			1
		port:	1
			state:			PORT_DOWN (1)
			max_mtu:		4096 (5)
			active_mtu:		1024 (3)
			sm_lid:			0
			port_lid:		0
			port_lmc:		0x00
			link_layer:		Ethernet

hca_id:	mlx5_1
	transport:			InfiniBand (0)
	fw_ver:				20.31.1014
	node_guid:			88e9:a4ff:ff38:5b09
	sys_image_guid:			88e9:a4ff:ff38:5b08
	vendor_id:			0x02c9
	vendor_part_id:			4123
	hw_ver:				0x0
	board_id:			HPE0000000036
	phys_port_cnt:			1
		port:	1
			state:			PORT_DOWN (1)
			max_mtu:		4096 (5)
			active_mtu:		1024 (3)
			sm_lid:			0
			port_lid:		0
			port_lmc:		0x00
			link_layer:		Ethernet

三、搭建dpdk环境
1、工具安装:
GCC

sudo apt install build-essential
gcc --version

ninja

pip3 install meson ninja

numa依赖

sudo apt-get install libnuma-dev

2、开启设置HUGE
1.查看宿主机中内存页的大小
通常情况下,内存页大小为4KB。

getconf PAGESIZE
4096

2.查看宿主机中透明大页是否开启

cat /sys/kernel/mm/transparent_hugepage/enabled
always [madvise] never

3.开启透明大页

echo always > /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

4.查看宿主机中HugePage的大小

cat /proc/meminfo |grep -i HugePages
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

HugePages_Total: Hugepage的页面数量
HugePages_Free: 剩余的页面数量
HugePages_Rsvd: 被分配预留但是还没有使用的page数目
HugePages_Surp:HugePages_Total减去/proc/sys/vm/nr_hugepages中的值

5.挂载大页
内存只有被挂载了之后,才能被应用程序使用。到刚创建的huge目录下,挂载hugetlbfs文件系统。

sudo mount -t hugetlbfs  nodev /mnt/huge
mount |tail -1
//nodev on /mnt/huge type hugetlbfs (rw,relatime,pagesize=2M)

6.使用sysctl(sysctl命令用于设置和显示在/proc/sys目录中的内核参数)命令设置vm.nr_hugepages,将大页个数设置为200(200 * 2M=400M,需要确保宿主机有足够可以分配的内存)。
这里具体大小设置依据自己需要的大小

sudo sysctl vm.nr_hugepages=200
//vm.nr_hugepages = 200
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
HugePages_Total:     200
HugePages_Free:      200
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

7.大页内存挂载

mkdir /mnt/huge
sudo mount -t hugetlbfs pagesize=1GB /mnt/huge

通过在/etc/fstab文件中添加以下行,可以使挂载点在重新引导期间永久存在:

sudo vim /etc/fstab
//大页大小为1GB
nodev /mnt/huge hugetlbfs pagesize=1GB 0 0
//大页大小为2MB
nodev /mnt/huge hugetlbfs defaults 0 0

8、在引导文件grub中添加:

sudo gedit /etc/default/grub

在GRUB_CMDLINE_LINUX=“ ”,“ ”中添加

GRUB_CMDLINE_LINUX="default_hugepagesz=1G hugepagesz=1G hugepages=10 intel_idle.max_cstate=0 processor.max_cstate=0 intel_pstate=disable rcu_nocb_poll audit=0 nosoftlockup"
sudo update-grub
reboot

3、安装DPDK

tar xJf dpdk-20.11.1.tar.xz
cd dpdk-stable-20.11.1
meson build
cd build
ninja
//[2415/2415] Linking target app/test/dpdk-test
sudo  ninja install
sudo ldconfig

如需绑定网卡到dpdk,即更换网卡的驱动,以igb_uio为例

在uio文件夹中启用uio
sudo modprobe uio
sudo insmod igb_uio.ko

sudo ./usertools/dpdk-devbind.py --bind=igb_uio 0000:07:00.0

Mellanox网卡不需要绑定到dpdk上,使用的就是mlx5驱动,可以直接识别dpdk,绑到dpdk上以后反而无法使用网卡。

运行helloworld实例

make
./helloworld
sudo ./helloworld
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值