目录
前言
安装前的环境配置
编译流程
1. 设置环境变量(好像也不需要了)
2. 构建dpdk
3. 编译
执行测试
1. 绑定vfio-pci 模块
2. 挂载网卡
3. 设置大页
4. 启动测试程序-testpmd
前言
操作系统:ubuntu22.04.2 LTS
内核版本:5.19.0-42-generic
dpdk版本:dpdk-stable-21.11.4
安装前的环境配置
sudo apt install libnuma-dev
sudo apt install meson
sudo apt install ninja-build
pyelftools-0.28-py2.py3-none-any.whl #(这个是从pypi网站下载的,通过 pip install 安装)
# ---- 如果是 ubuntu 20.04.2 ----
# 之前是通过Python-pip 安装
# 从 pypi 网站下载
meson-0.61.3-py3-none-any.whl
ninja-1.10.2.3-py2.py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl
编译流程
由于dpdk19.11 版本以后取消了 dpdk_setup.sh 的脚本,所以编译命令需要手动执行
1. 设置环境变量(好像也不需要了)
export RTE_SDK=`pwd`
export RTE_TARGET=x86_64-native-linuxapp-gcc
2. 构建dpdk
meson -Dexamples=All build
meson configure -Dexamples=All build -Dprefix=`pwd`/x86_64-native-linuxapp-gcc
# -Dexamples=All 标识编译所有的 examples 目录下的示例,也可以单独的写一个或多个(l2fwd)
# -Dprefix=`pwd`/x86_64-native-linuxapp-gcc 目标目录,注意修改 `pwd` 为当前dpdk所在目录
# -Ddisable_drivers='common/cnxk' 编译时禁用cnxk模块
3. 编译
ninja install -C build
执行测试
1. 绑定vfio-pci 模块
sudo modprobe vfio-pci
2. 挂载网卡
dpdk-devbind.py -s
# 以ens38 0000:02:06.0 为例
sudo ifconfig ens38 down
sudo dpdk-devbind.py -b vfio-pci 0000:02:06.0
# 因为ens38网卡为激活状态,当前挂载在内核驱动上,需要先down掉,然后才能绑定dpdk驱动
3. 设置大页
大页可以直接通过修改 grub进行预设,也可以后期直接设置
grub预设的好处是 在系统启动时就直接分配了对应的大页空间,减少系统资源的浪费
大页设置可以通过 dpdk-hugepage.py 脚本进行设置
官网 dpdk-Hugepages 的使用
https://doc.dpdk.org/guides-21.11/tools/hugepages.html?highlight=huge
也可以通过 命令行直接写入数据设置
echo 256 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
# 其中 256 为大页个数
# 如果当前操作系统有多个node,需要每个都设置上(网卡所在node以及要使用的node)
# 大页分为 2048K(2M) 和 1048576kB(1G),当前使用 2M 大页
4. 启动测试程序-testpmd
testpmd 为例
命令:sudo ./x86_64-native-linuxapp-gcc/bin/dpdk-testpmd -l 1-2 -- -i