系统及DPDK版本:
- 系统:Ubuntu 2204
- DPDK:21.11.1
- Pktgen-DPDK:22.04.1
关于DPDK,其实Ubuntu的软件源中就已经包含了最新的Stable版本的DPDK,如果不想自己编译的话,直接
apt install dpdk
也是可以的(甚至更方便)。
安装编译依赖:
sudo apt install build-essential python3-pip python3-pyelftools libnuma-dev libpcap0.8-dev pkg-config
sudo pip3 install meson ninja
DPDK 编译安装:
apt 安装跳过此步
- 进入解压完毕的DPDK源码根目录
meson -Dexamples=all build
cd build
ninja
sudo ninja install
sudo ldconfig
Pktgen-DPDK编译:
- 进入解压后的Pktgen源码根目录
meson build
cd build
ninja
- 编译完毕后的pkten在
[Pktgen dir]/build/app/pktgen
DPDK驱动绑定以及Huge Pages设置:
dpdk驱动绑定脚本:dpdk-devbi
nd.py
一般用法:sudo dpdk-devbind.py -b=[driver name] [PCI device ID] [PCI device ID]
如:sudo dpdk-devbind.py -b=vfio-pci 06:00.0 07:00.0 #将PCI ID为06:00.0 07:00.0两张网卡驱动替换为vfio-pci
可通过sudo dpdk-devbind.py -s
查看当前PCI设备驱动状态:
Huge Pages 脚本:dpdk-hugepages.py
一般用法:sudo dpdk-hugepages.py -p [single huge page size(1G/256M)] --setup [totally huge pages size]
如:sudo dpdk-hugepages.py -p 1G --setup 8G #设置8页单页大小为1G,总共共8G的Huge Pages
和上面一样,也可以通过sudo dpdk-hugepages.py -s来查看当前huge pages设置状态
Pktgen 简单使用:
驱动绑定以及Huge pages设置完毕后就可以启动Pktgen了,如下是一个简单启动命令:
sudo ./pktgen -l 1-3 -n 2 -- -T -P -m "2.0,3.1"
-l
: 使用CPU Cores 1、2、3
-n
: 内存通道(不知道具体影响,但是能找到的实例都设置了
--
:此符号前是DPDK的配置参数,此符号后是DPDK Application的配置参数,此处即是Pktgen的参数
-T
: 启用彩色文本输出
-P
: Enable PROMISCUOUS mode on all ports
-m string
: 重点!指定cpu core与NIC的绑定关系,格式参照下图:
回车!接下来就是见证奇迹的时刻:
可能遇到的问题
DPDK 绑定网卡时报错如下:
Error: bind failed for 0000:04:00.0 - Cannot open /sys/bus/pci/drivers/vfio/bind: [Errno 2] No such file or directory: '/sys/bus/pci/drivers/vfio/bind'
Error: unbind failed for 0000:04:00.0 - Cannot open /sys/bus/pci/drivers//unbind: [Errno 13] Permission denied: '/sys/bus/pci/drivers//unbind'
解决: 系统未开启iommu,/etc/default/grub中修改添加GRUB_CMDLINE_LINUX=”intel_iommu=on”,重启即可。