系统及DPDK版本
系统:Ubuntu 20.04
DPDK:20.11.10
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
wget http://fast.dpdk.org/rel/dpdk-20.11.10.tar.xz
解压
tar -xvf dpdk-20.11.10.tar.xz
进入解压完毕的DPDK源码根目录
编译项目
meson -Dexamples=all build
到build目录 ,使用ninja编译
cd build
ninja
sudo ninja install
sudo ldconfig
配置大页内存
sudo vim /etc/default/grub
找到 GRUB_CMDLINE_LINUX 行,大页内存每页大小为2M,一共设置1024页面,即2GB。
transparent_hugepage=never default_hugepagesz=2M hugepagesz=2M hugepages=1024
更新 GRUB 配置,然后重启系统。
sudo update-grub
reboot
验证大页内存
cat /proc/meminfo |grep -i HugePages
加载网卡驱动
git clone http://dpdk.org/git/dpdk-kmods
编译
cd dpdk-kmods/linux/igb_uio
make
得到igb_uio.ko ,装载内核模块。
sudo modprobe uio
sudo insmod dpdk-kmods/linux/igb_uio/igb_uio.ko intr_mode=legacy
注意: 加载驱动时要带着参数intr_mode=legacy,如果不加参数,将会有问题!
DPDK绑定网口
查看网口信息
lspci | grep Ethernet
lshw -class network -businfo
usertools/dpdk-devbind.py --status
绑定网卡之前需要关闭linux下的网卡
sudo ifconfig ens33 down
sudo dpdk-devbind.py --bind=igb_uio 0000:02:01.0
查看状态
dpdk-devbind.py --status
测试程序
在 build/examples里运行 dpdk-helloworld
sudo ./dpdk-helloworld
EAL: No available hugepages reported in hugepages-1048576kB
1048576kB 就是1G,这行 log 应该只是一个警告,因为我们根本没设置过 1G 的 hugepage,找不到是预料之中的。
最后出现 hello from core x 就是成功了