DPDK — 安装部署

1、基础环境

1.1、硬件配置

在这里插入图片描述

1.2、操作系统要求

在这里插入图片描述

2、测试环境编译测试过程

2.1、升级GCC版本至GCC-7.3.0

步骤1 升级GCC依赖包设置
编译安装gmp:

cd /home

tar -xvf /home/gmp-6.1.2.tar.bz2

cd /home/gmp-6.1.2

./configure --prefix=/usr/local/gmp-6.1.2

make

make install

编译安装mpfr:

cd /home

tar -zxvf mpfr-3.1.5.tar.gz

cd /home/mpfr-3.1.5

./configure --prefix=/usr/local/mpfr-3.1.5 --with-gmp=/usr/local/gmp-6.1.2

make

make install

编译安装mpc:

cd /home

tar -zxvf mpc-1.0.3.tar.gz

cd /home/mpc-1.0.3

./configure -prefix=/usr/local/mpc-1.0.3 -with-gmp=/usr/local/gmp-6.1.2 -with-mpfr=/usr/local/mpfr-3.1.5

make

make install

安装isl:

cd /home

tar -xvf /home/isl-0.18.tar.bz2

cd /home/isl-0.18

yum -y install gmp-devel

./configure --prefix=/usr/local/isl-0.18 --with-gmp=/usr/local/gmp-6.1.2

make

make install

步骤2 安装gcc 7.3.0

cd /home

tar -zxvf gcc-7.3.0.tar.gz

cd /home/gcc-7.3.0

./configure --prefix=/usr/local/gcc-7.3.0 --enable-languages=c,c++,fortran --enable-shared --enable-linker-build-id --without-included-gettext --enable-threads=posix --disable-multilib --disable-nls --disable-libsanitizer --disable-browser-plugin --enable-checking=release --build=aarch64-linux --with-gmp=/usr/local/gmp-6.1.2 --with-mpfr=/usr/local/mpfr-3.1.5 --with-mpc=/usr/local/mpc-1.0.3 --with-isl=/usr/local/isl-0.18

export LD_LIBRARY_PATH=/usr/local/mpc-1.0.3/lib:/usr/local/gmp-6.1.2/lib:/usr/local/mpfr-3.1.5/lib:/usr/local/gcc-7.3.0/lib64:/usr/local/isl-0.18/lib:/usr/local/lib:/usr/lib:$LD_LIBRARY_PATH

export PATH=/usr/local/gcc-7.3.0/bin:$PATH

./configure --prefix=/usr/local/gcc-9.3.0 --enable-languages=c,c++,fortran --enable-shared --enable-linker-build-id --without-included-gettext --enable-threads=posix --disable-multilib --disable-nls --disable-libsanitizer --disable-browser-plugin --enable-checking=release --build=aarch64-linux --with-gmp=/usr/local/gmp-6.1.2 --with-mpfr=/usr/local/mpfr-3.1.5 --with-mpc=/usr/local/mpc-1.0.3 --with-isl=/usr/local/isl-0.18

export LD_LIBRARY_PATH=/usr/local/mpc-1.0.3/lib:/usr/local/gmp-6.1.2/lib:/usr/local/mpfr-3.1.5/lib:/usr/local/gcc-9.3.0/lib64:/usr/local/isl-0.18/lib:/usr/local/lib:/usr/lib:$LD_LIBRARY_PATH

export PATH=/usr/local/gcc-9.3.0/bin:$PATH

make -j 40

make -j 40 install

gcc -v

步骤3 设置环境变量

在etc/profile文件添加:

vi /etc/profile

export LD_LIBRARY_PATH=/usr/local/mpc-1.0.3/lib:/usr/local/gmp-6.1.2/lib:/usr/local/mpfr-3.1.5/lib:/usr/local/gcc-7.3.0/lib64:/usr/local/isl-0.18/lib:/usr/local/lib:/usr/lib:$LD_LIBRARY_PATH

export PATH=/usr/local/gcc-7.3.0/bin:$PATH

export LD_LIBRARY_PATH=/usr/local/mpc-1.0.3/lib:/usr/local/gmp-6.1.2/lib:/usr/local/mpfr-3.1.5/lib:/usr/local/gcc-9.3.0/lib64:/usr/local/isl-0.18/lib:/usr/local/lib:/usr/lib:$LD_LIBRARY_PATH

export PATH=/usr/local/gcc-9.3.0/bin:$PATH
在这里插入图片描述

步骤4 加载环境变量

生效

source /etc/profile

2.2、配置内存大页和系统启动设置

步骤1 修改sysctl.conf增加内存大页设置

vim /etc/sysctl.conf

vm.nr_hugepages = 120
在这里插入图片描述
步骤2 修改系统启动项增加iommu设置

vim /boot/efi/EFI/openEuler/grub.cfg

增加iommu.passthrough=1
在这里插入图片描述
设置完成后重启系统,执行cat /proc/cmdline确认设置是否生效

cat /proc/cmdline

2.3、编译安装DPDK版本19.08.2

步骤1 安装DPDK所需依赖包

安装numa库

yum install  numactl-devel

安装libcap第三方软件,提供pcap.h

yum install  libpcap-devel

步骤2 解压编译dpdk软件包

unzip dpdk-19.08.2.zip

cd dpdk-19.08.2/

打开config/common_base文件中的 Mellanox网卡PMD驱动开关:

vi common_base

在这里插入图片描述
设置 CONFIG_RTE_LIBRTE_MLX5_PMD=y
设置 CONFIG_RTE_LIBRTE_MLX5_DEBUG=y
在这里插入图片描述

export RTE_TARGET=arm64-armv8a-linuxapp-gcc  # 以当前环境CPU架构为准

export RTE_SDK=/root/dpdk-19.08.2

make install T=$RTE_TARGET

如果这里报错,在执行一次步骤1

步骤3 Mellanox网卡驱动安装

(1)Mellanox官网下载对应OS的Mellanox驱动
https://www.mellanox.com/page/products_dyn?product_family=27
(2)配置环境变量,现在rpm包编译使用的cpu核最大个数,否则编译报错

echo %_smp_ncpus_max 16 > ~/.rpmmacros

(3)安装驱动:

 ./mlnx_add_kernel_support.sh -m ./ --without-mlx5_fpga_tools --kmp -v
 
 ./mlnxofedinstall --dpdk --upstream-libs  --add-kernel-support
 
 /etc/init.d/opnibd restart

步骤4 添加dpdk环境变量

vi ~/.bashrc

export RTE_TARGET=arm64-armv8a-linuxapp-gcc # 以当前环境CPU架构为准
export RTE_SDK=/root/dpdk-19.08.2

将dpdk环境变量加入.bashrc文件中
source ~/.bashrc
在这里插入图片描述

2.4 、网卡绑定设置

DPDK会利用自己的igb_uio/vfio驱动来接管传统内核驱动,这样往往会导致一些问题,就是我们一些传统的类unix工具,诸如ifconfig、ip、ethtool等工具无法再查看被DPDK驱动接管的网卡状态。
在传统linux场景下,我向看一下网卡丢包原因、网卡寄存器状态、网卡的feature,通过一个ethtool就可以搞定,但是到了DPDK这里就行不通了,因为上述传统工具实际上都是去内核拿数据,ethtool底层就是用ioctl去读的内核数据,但是现在网卡驱动已经被DPDK驱动接管了,用ethtool再也拿不到信息了。

注意:

Mellanox网卡不需要绑定,Intel && Broadcom需要绑定,Intel && Broadcom需要使用DPDK驱动,绑定成功后在“ip a”下不可见

步骤1加载igb_uio模组

cd usertools/

./dpdk-setup.sh

在这里插入图片描述

./dpdk-devbind.py --status

查看当前网卡状态
如果绑定的网卡状态是Active,需要执行:
ifconfig ethx down 或者 ifdown ethx
在这里插入图片描述
步骤2 绑定被测网口到用户态

./dpdk-devbind.py --bind=igb_uio 0000:bd:00.0 0000:bd:00.1

./dpdk-devbind.py --status

在这里插入图片描述
绑定成功

2.5 、使用testpmd进行压力测试

该工具所在位置

cd /home/dpdk-stable-19.08.2/arm64-armv8a-linuxapp-gcc/build/app/test-pmd

备注:列出部分命令行参数意义,详细意义可以在DPDK官网获取。

参数说明
-c指定参与转发的CPU核掩码
-n指定系统内存通道个数
-w指定参与DPDK转发的网口的PCIE地址
–rxd/txd指定转发使用的网口队列深度
–txq/rxq指定参与转发的网卡队列数
–nb-cores指定实际参与转发的cpu核数
-i交互模式启动程序
在这里插入图片描述
开始测试
./testpmd -l 2-11 -n 4 -- -i --rxq=1 --txq=1 --rxd=4096 --txd=4096 --nb-cores=2 --burst=64 --mbuf-size=2048 --total-num-mbufs=20480 --mbcache=512

在这里插入图片描述
出现报错信息:testpmd: No probed ethernet devices
(1)如果你使用的是 Intel 的网卡,那么上述的步骤当然没有问题。但笔者使用了华为的网卡,所以还需要做一些适配的工作,需要安装华为方提供的网卡驱动。
(2)还有一种可能是内存不足造成的,绑定网卡后,导致大页内存分配不足,扩大内存就好了。

解决后:

testpmd> show port stats all

testpmd> set fwd txonly

testpmd> start

在这里插入图片描述
在这里插入图片描述

2.6 、网卡解绑

查看网卡状态:

./dpdk-devbind.py --status

在这里插入图片描述
进行解绑:

./dpdk-devbind.py  -u 0000:01:00.1

./dpdk-devbind.py  -u 0000:01:00.0

再次查看网卡状态:

./dpdk-devbind.py --status

在这里插入图片描述
发现该网卡在Other里,无法正常使用

解绑后,需要再重新绑会原来的驱动,该卡原来的驱动是mlx5_core,执行:

./dpdk-devbind.py  -b mlx5_core 0000:01:00.0
./dpdk-devbind.py  -b mlx5_core 0000:01:00.1

查看网卡状态,恢复正常:

./dpdk-devbind.py --status

在这里插入图片描述

2.7 、运行例子

执行example/下的例子要先绑定网卡。

Helloworld,testpmd,skeleton的测试例子就不说了,l3fwd还不懂怎么构建拓扑,这里

详细说一下l2fwd二层转发的例子:

模型
在这里插入图片描述
这里用二张网卡测试,以上面的模型收发包。

运行:./build/l2fwd -c 0x50 -n 4 – -p 0x0c -q 1

参数分为两部分,以 – 分隔,前面部分是配置EAL环境的,后面是程序的参数

-c 0x50 是指用4,6两个核,-n 4指的是用4个内存通道。0x50是core的16进制掩码。

-p 0x0c 是指网卡的16进制掩码,即2,3两个口。

-q 1 是用一个无锁队列。

由于网卡是由DPDK接管的,是没有IP地址的,所以是以MAC地址通信。确定好各自的源MAC和目的MAC,类似于二层交换机的功能。

在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硅油

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值