当前位置:   article > 正文

DPDK — 安装部署_dpdk安装

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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

编译安装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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

编译安装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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

安装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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

步骤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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

步骤3 设置环境变量

在etc/profile文件添加:

vi /etc/profile
  • 1

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
  • 1

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

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

vim /etc/sysctl.conf
  • 1

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

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

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

cat /proc/cmdline
  • 1

2.3、编译安装DPDK版本19.08.2

步骤1 安装DPDK所需依赖包

安装numa库

yum install  numactl-devel
  • 1

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

yum install  libpcap-devel
  • 1

步骤2 解压编译dpdk软件包

unzip dpdk-19.08.2.zip

cd dpdk-19.08.2/
  • 1
  • 2
  • 3

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

vi common_base
  • 1

在这里插入图片描述
设置 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
  • 2
  • 3
  • 4
  • 5

如果这里报错,在执行一次步骤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
  • 1

(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
  • 1
  • 2
  • 3
  • 4
  • 5

步骤4 添加dpdk环境变量

vi ~/.bashrc
  • 1

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
  • 1
  • 2
  • 3

在这里插入图片描述

./dpdk-devbind.py --status
  • 1

查看当前网卡状态
如果绑定的网卡状态是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
  • 1
  • 2
  • 3

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

2.5 、使用testpmd进行压力测试

该工具所在位置

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

备注:列出部分命令行参数意义,详细意义可以在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
  • 1

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

解决后:

testpmd> show port stats all

testpmd> set fwd txonly

testpmd> start
  • 1
  • 2
  • 3
  • 4
  • 5

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

2.6 、网卡解绑

查看网卡状态:

./dpdk-devbind.py --status
  • 1

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

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

./dpdk-devbind.py  -u 0000:01:00.0
  • 1
  • 2
  • 3

再次查看网卡状态:

./dpdk-devbind.py --status
  • 1

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

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

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

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

./dpdk-devbind.py --status
  • 1

在这里插入图片描述

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,类似于二层交换机的功能。

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/542039
推荐阅读
  

闽ICP备14008679号