dpdk环境搭建

参考资料

https://doc.dpdk.org/

https://core.dpdk.org/doc/quick-start/

创建桥接口

1
sudo brctl addbr br0

设置grub

1
2
3
4
5
6
7
8
9
10
11
12
13
打开grub,添加 GRUB_CMDLINE_LINUX 参数

sudo vim /etc/default/grub

大页内存每页大小为2M,一共设置1024页面,即2GB, 如果内存多的,CPU又支持1GB的大页内存,可以每页设置1GB的大页内存

GRUB_CMDLINE_LINUX="iommu=pt intel_iommu=on"

重新生成grub.cfg

sudo grub-mkconfig -o /boot/grub/grub.cfg

reboot

编译dpdk

https://doc.dpdk.org/guides-22.11/linux_gsg/build_dpdk.html

1
2
3
4
5
6
7
pacman -S meson python-pyelftools
pacman -S pkg-config
meson build
cd build
ninja
ninja install
ldconfig

大页配置

1
2
3
4
5
6
7
8
9
grub配置了也可不再配置
查看虚拟机大叶内存
cat /proc/meminfo | grep Huge
设置内存大小
echo 256 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages

mkdir -p /dev/hugepages
mountpoint -q /dev/hugepages || mount -t hugetlbfs nodev /dev/hugepages
./usertools/dpdk-hugepages.py --show

加载驱动

1
2
3
modprobe vfio-pci
modprobe uio_pci_generic
modprobe uio

使能网卡UIO

1
2
3
4
5
6
./usertools/dpdk-devbind.py --status
ifconfig enp7s0 down
ifconfig enp8s0 down
./usertools/dpdk-devbind.py --bind=uio_pci_generic enp7s0
./usertools/dpdk-devbind.py --bind=uio_pci_generic enp8s0
./usertools/dpdk-devbind.py --status

测试用例

Screenshot_20230111_092529

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
./build/app/dpdk-testpmd  -l 0-1 -n2 -- -i --total-num-mbufs 2048

testpmd> show port stats all

######################## NIC statistics for port 0 ########################
RX-packets: 244 RX-missed: 0 RX-bytes: 18096
RX-errors: 0
RX-nombuf: 0
TX-packets: 0 TX-errors: 0 TX-bytes: 0

Throughput (since last show)
Rx-pps: 0 Rx-bps: 0
Tx-pps: 0 Tx-bps: 0
############################################################################

######################## NIC statistics for port 1 ########################
RX-packets: 0 RX-missed: 0 RX-bytes: 0
RX-errors: 0
RX-nombuf: 0
TX-packets: 0 TX-errors: 0 TX-bytes: 0

Throughput (since last show)
Rx-pps: 0 Rx-bps: 0
Tx-pps: 0 Tx-bps: 0
############################################################################
testpmd> show config fwd
testpmd> start
testpmd> show port stats all
testpmd> stop
testpmd> show port stats all

Screenshot_20230111_092208

编译示例

1
2
3
4
5
6
7
8
9
10
11
cd example/helloworld/
sudo find / -name "libdpdk.pc"
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig/"
pkg-config --cflags libdpdk
-I/usr/local/include -include rte_config.h -march=native
make

sudo su
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
./build/helloworld -l 0-1 -n 2

./build/examples/dpdk-ethtool

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Cause: rte_pktmbuf_pool_create failed
出现以上错误错误可以通过修改hugepages配置修复
echo 256 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages

1. 8G:

setenv othbootargs default_hugepagesz=1024m hugepagesz=1024m hugepages=8

cat /sys/devices/system/node/node0/hugepages/hugepages-*/nr_hugepages //result is 0, failed

2. 1G(size=2m):

setenv othbootargs default_hugepagesz=2m hugepagesz=2m hugepages=512

cat /sys/devices/system/node/node0/hugepages/hugepages-*/nr_hugepages //result is 512, success

3. 1G(size=4m)

setenv othbootargs default_hugepagesz=4m hugepagesz=4m hugepages=256

cat /sys/devices/system/node/node0/hugepages/hugepages-*/nr_hugepages //result is 0, failed

4. 8M(size=1024k)

setenv othbootargs default_hugepagesz=1024k hugepagesz=1024k hugepages=8

cat /sys/devices/system/node/node0/hugepages/hugepages-*/nr_hugepages //result is 0, failed

pacman -S numactl

dpdk性能测试

https://blog.csdn.net/omaidb/article/details/121589271

dpdk-pktgen 安装和基本使用

https://blog.csdn.net/choumin/article/details/120884509

DPDK系列之十:QEMU-KVM不同网络前端和后端网络性能对比测试

https://www.freesion.com/article/3818253535/


dpdk环境搭建
http://blog.uanet.cn/NETWORK/dpdk环境搭建.html
作者
dnsnat
发布于
2025年2月13日
许可协议