基础环境
vmware16虚拟机+Ubuntu22.04
因为要同时使用wsl2就打开了hyper-v,也导致了一些后续问题,虚拟环境兼容版本选择了Workstation Beta,没有测试,但应该16及以上均可。
DPDK使用21.11 LTS版本
安装前准备
换源,下载源码等步骤略
为了安装,需要准备一些软件包,参见2. System Requirements — Data Plane Development Kit 22.07.0 documentation
APT安装
使用apt安装以下包:build-essential libnuma-dev libpcap-dev python3-pip python3-pyelftools
由于Ubuntu22.04安装了python3.10,不需要再安装python,安装pip3即可。
PIP安装
使用pip安装meson和ninja,注意同样需要使用sudo安装到系统usr目录下,如果安装到用户目录下后续ninja install时会出现问题。
网卡配置
在虚拟机设置界面添加一个新的网卡,配置为桥接模式,以待后续测试
大页内存设置
修改/etc/default/grub配置文件,在GRUB_CMDLINE_LINUX一行中加入
default_hugepagesz=1G hugepagesz=1G hugepages=4 iommu=pt intel_iommu=on
这里仅展示永久设置1G大页的方法,临时配置或其他大小见官方文档。注意不要设置大于物理内存的总大页空间,会导致虚拟机没办法启动。
保存后执行
update-grub
更新grub
在dev文件夹下创建挂载点
sudo mkdir -p /dev/hugepages
之后挂载大页内存
sudo mount -t hugetlbfs nodev /dev/hugepages
重启后查看cat /proc/meminfo中的hugepage检查是否成功。
安装DPDK
解压源码包,在解压的根目录执行meson build,如想编译examples可以添加选项-Dexamples=all,更多选项参见3. Compiling the DPDK Target from Source — Data Plane Development Kit 22.07.0 documentation
切换到build目录,执行
ninja
sudo ninja install
sudo ldconfig
完成安装
网卡配置
使用到usertools/dpdk-devbind.py
在使用hyper-v之后就不能再使用虚拟机的Intel VT-x,因此vfio-pci不能使用,如果可以的话官方建议使用vfio-pci保证安全性,见6. Linux Drivers — Data Plane Development Kit 22.07.0 documentation
下面介绍使用igb_uio驱动的方式,DPDK20.x版本后不再提供igb_uio的源码,可以到此下载
dpdk-kmods - Kernel modules or add-ons
解压后执行make编译即可,得到模块文件igb_uio.ko,执行
sudo modprobe uio
sudo insmod igb_uio.ko
安装两个模块,此时执行
usertools/dpdk-devbind.py --status
可以在两个网卡后面的unused后面看到igb_uio说明模块配置成功
之后执行
sudo usertools/dpdk-devbind.py --bind=igb_uio eth0
即可将eth0网卡的驱动配置为igb_uio。
测试
可以使用examples中的helloworld和app中的dpdk-testpmd进行测试,见官方文档。
或许会添加使用skeleton测试的细节。