DPDK 安装指导
银河麒麟篇
Content
Version History
Content
1. 概述
1.1 介绍
1.2 简介
2.DPDK 22.07安装
2.1 软件版本
2.2 依赖工具
2.3 编译DPDK
2.4 安装网卡驱动
2.5 配置大内存页面
2.6 编译安装l3-fwd
3.DPDK 22.07-l2fwd
4.设备下电以后配置
5.FAQ
1.概述
此文档介绍DPDK在银河麒麟上的安装步骤和FAQ
1.1 介绍
待补充
1.2 简介
待补充
2.DPDK 22.07安装
2.1 软件版本
DPDK:dpdk-22.07
麒麟版本:麒麟桌面V10
linux内核:
2.2 依赖工具
设置系统依赖
apt install python3.8
apt install python3-pip
pip3 install meson ninja --user
apt install python3-pyelftools
apt install libnuma-dev
apt install ninja-build
apt install meson
apt install pkg-config
2.3 编译DPDK
解压DPDK压缩包
cd dpdk-22.07
meson build
报错后进入config/arm,修改meson.build文件,558行的error修改为warning
cd build
ninja
ninja install
更新配置文件
ldconfig
2.4 安装网卡驱动
git clone http://dpdk.org/git/dpdk-kmods
cd dpdk-kmods/linux/igb_uio
make
modprobe uio
insmod igb_uio.ko intr_mode=legacy
#lsmod | grep uio
#rmmod igb_uio
绑定网卡之前需要关闭linux下的网卡,绑定网卡需要知道网卡的bus号
ifconfig enp1s0 down
进入目录usertools
./dpdk-devbind.py –b=igb_uio 0000:01:00.0 0000:02:00.0 0000:03:00.0 0000:04:00.0
查看绑定结果
./dpdk-devbind.py –s
减绑用-u
./dpdk-devbind.py –u 0000:02:05.0
将网卡绑定为原始驱动
./dpdk-devbind.py –b igb 0000:02:05.0
2.5 配置大内存页面
配置Huge Pages:DPDK需要使用Huge Pages来提供更高的内存性能
usertools/dpdk-hugepages.py --setup 1G
2.6 编译安装l3-fwd
进入dpdk-22.07/examples/l3fwd/
编译
make
进入build目录
./l3fwd -l 1-2 -n 4 -- -P -p 0x3 --config="(0,0,1),(1,0,2)"
如果需要指定客户端服务器的mac地址,使用如下的参数,否则客户端和服务器必须配置成02:00:00:00:00:00和02:00:00:00:00:01
l3fwd -l 1,2 -n 4 -- -p 0x3 --config="(0,0,1),(1,0,2)" --parse-ptype --eth-dest=0,30:fd:65:32:f0:6f --eth-dest=1,30:fd:65:32:f0:72
DPDK的EAL(Environment Abstraction Layer)参数配置用于控制和优化DPDK的运行环境。
===============================================================================
常用的EAL参数配置:
-c <coremask>:指定DPDK应用程序将在哪些CPU核心上运行。<coremask>是一个十六进制的位掩码,每一位对应一个CPU核心。例如,使用-c 0x3参数将使DPDK应用程序在CPU核心0和1上运行。
-n <numa>:指定DPDK应用程序将在哪个NUMA节点上运行。<numa>是一个整数,表示NUMA节点的索引。例如,使用-n 0参数将使DPDK应用程序在NUMA节点0上运行。
-l <lcorelist>:指定DPDK应用程序将使用哪些逻辑核心(线程)。<lcorelist>是一个以逗号分隔的逻辑核心列表。例如,使用-l 0,2,4参数将使DPDK应用程序使用逻辑核心0、2和4。
--file-prefix <prefix>:指定DPDK应用程序的文件名前缀。<prefix>是一个字符串,用于生成DPDK应用程序的日志文件和统计文件的名称。默认情况下,文件名前缀是rte。
--socket-mem <size>:指定DPDK应用程序在每个NUMA节点上分配的内存大小。<size>是一个整数,表示以MB为单位的内存大小。例如,使用--socket-mem 1024参数将使DPDK应用程序在每个NUMA节点上分配1GB的内存。
--single-file-segments:将DPDK应用程序的内存分配在单个文件中,而不是多个文件中。这可以提高内存分配的效率。
--legacy-mem:使用传统的内存管理模式,而不是使用Huge Pages。这在某些情况下可能更容易配置和管理,但可能会导致性能下降。
常用的l3fwd参数配置:
-p PortMask: 参数指定使用的网口,例如,假设当前有 4 个网口由 dpdk 进行管理,则 0x3 表示使用网口0和 网口1,0xf 表示使用网口0、网口1、网口2 和网口3。
-P:参数表示将所有网口设置为混杂模式,以便收到所有数据包。
--config (port,queue,lcore)[,(port,queue,lcore)]:参数用以配置网口、队列、核之间的对应关系,例如:--config (0,0,1) 表示网口 0 (0-N)的队列 0 由核 1 (0-N)进行处理。
===============================================================================
运行结果:
$ ./examples/l3fwd/build/l3fwd -l 1-2 -n 4 -- -P -p 0x3 --config="(0,0,1),(1,0,2)"
EAL: Detected 4 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: Probing VFIO support...
EAL: Probe PCI driver: net_ixgbe (8086:154d) device: 0000:03:00.0 (socket 0)
EAL: Probe PCI driver: net_ixgbe (8086:154d) device: 0000:03:00.1 (socket 0)
EAL: Probe PCI driver: net_ixgbe (8086:154d) device: 0000:04:00.0 (socket 0)
EAL: Probe PCI driver: net_ixgbe (8086:154d) device: 0000:04:00.1 (socket 0)
EAL: No legacy callbacks, legacy socket not created
LPM or EM none selected, default LPM on
Initializing port 0 ... Creating queues: nb_rxq=1 nb_txq=2... Port 0 modified RSS hash function based on hardware support,requested:0xa38c configured:0x8104
Address:A0:36:9F:30:7A:D8, Destination:02:00:00:00:00:00, Allocated mbuf pool on socket 0
LPM: Adding route 198.18.0.0 / 24 (0)
LPM: Adding route 198.18.1.0 / 24 (1)
LPM: Adding route 2001:200:: / 64 (0)
LPM: Adding route 2001:200:0:1:: / 64 (1)
txq=1,0,0 txq=2,1,0
Initializing port 1 ... Creating queues: nb_rxq=1 nb_txq=2... Port 1 modified RSS hash function based on hardware support,requested:0xa38c configured:0x8104
Address:A0:36:9F:30:7A:DA, Destination:02:00:00:00:00:01, txq=1,0,0 txq=2,1,0
Skipping disabled port 2
Skipping disabled port 3
Initializing rx queues on lcore 1 ... rxq=0,0,0
Initializing rx queues on lcore 2 ... rxq=1,0,0
Checking link statusdone
Port 0 Link up at 10 Gbps FDX Autoneg
Port 1 Link up at 10 Gbps FDX Autoneg
L3FWD: entering main loop on lcore 1
L3FWD: -- lcoreid=1 portid=0 rxqueueid=0
L3FWD: entering main loop on lcore 2
L3FWD: -- lcoreid=2 portid=1 rxqueueid=0
3.DPDK 22.07-l2fwd
进入dpdk-22.07/examples/l2fwd/
编译
make
运行
./l2fwd -l 0-3 -n 4 -- -P -q 4 -p 0x3 --no-mac-updating
如果需要指定客户端服务器的mac地址,使用如下的参数
l3fwd -l 1,2 -n 4 -- -p 0x3 --config="(0,0,1),(1,0,2)" --parse-ptype --eth-dest=0,30:fd:65:32:f0:6f --eth-dest=1,30:fd:65:32:f0:72
常用的l2fwd参数配置:
p PORTMASK:要配置的端口的十六进制位掩码
P:可选,将所有端口设置为混杂模式,以便无论 MAC 目标地址如何都接受数据包。如果没有此选项,则仅接受 MAC 目标地址设置为端口以太网地址的数据包。
q NQ:每个 lcore 的队列数(=端口)(默认为 1)
–[no-]mac-updating:启用或禁用 MAC 地址更新(默认启用),建议关闭,测试仪或者PC都可以使用自身的mac地址进行转发
–portmap=”(port,port)[,(port,port)]”:确定转发端口映射。
4.设备下电以后配置
部分配置无法保存,所以如果发生设备重启\下电等,需要对如下配置重新操作
cd dpdk-kmods/linux/igb_uio
make
modprobe uio
insmod igb_uio.ko intr_mode=legacy
Ifconfig enp1s0 down
进入目录usertools
./dpdk-devbind.py –b=igb_uio 0000:02:05.0
./dpdk-devbind.py –s
./dpdk-hugepages.py --setup 1G
不配置此参数会报错EAL参数异常
在l3fwd/build目录下
./l3fwd -l 1-2 -n 4 -- -P -p 0x3 --config="(0,0,1),(1,0,2)"
5.FAQ
1、不需要配置ubuntu系统下的网卡IP,DPDK环境下的198.18.0.0/24网段并没有绑定IP,发包设备只需要配置网关的mac地址,网关IP可以配置任何198.18.0.0/24的IP
2、报错pkg-config找不到
apt install pkg-config
3、解决:ERROR: Problem encountered: missing python module: elftools
pip install pyelftools --upgrade
pip3 install pyelftools --upgrade
4、遇到报错
Makefile:14: *** "no installation of DPDK found". Stop.
在l3fwd目录下执行
export PKG_CONFIG_PATH="/usr/local/lib64/pkgconfig/"
5、执行L3fwd的时候如果遇到找不到库librte_fib.so.22
在l3fwd/build目录下
export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/usr/local/lib64/