DPDK 22.11.2 (LTS) 的编译过程如下:
- 下载 DPDK 22.11.2 源码包
可以从 DPDK 官网下载最新的稳定版本源码包,也可以使用以下命令下载:
wget https://fast.dpdk.org/rel/dpdk-22.11.2.tar.xz
- 解压源码包
使用以下命令解压源码包:
tar xf dpdk-22.11.2.tar.xz
- 设置环境变量
在编译 DPDK 前需要设置一些环境变量,例如:
export RTE_SDK=/path/to/dpdk-22.11.2
export RTE_TARGET=x86_64-native-linuxapp-gcc # 根据实际情况选择目标平台和编译器
- 配置编译选项
进入 DPDK 源码目录,使用以下命令进行配置:
make config T=$RTE_TARGET # $RTE_TARGET 是之前设置的环境变量中指定的目标平台和编译器名称
根据实际需求选择相应的选项,例如开启或关闭某些功能、调整内存池大小等。
- 编译 DPDK 库文件
执行以下命令进行编译:
make -j $(nproc)
其中 -j
参数表示并发编译任务数,建议设置为当前系统 CPU 核心数量。
- 安装 DPDK 库文件
执行以下命令将编译好的库文件安装到系统目录中:
sudo make install T=$RTE_TARGET
- 配置 Hugepages
DPDK 使用 Hugepages 来优化内存访问性能,因此需要在系统中配置一定数量的 Hugepages。可以使用以下命令查看当前系统上可用的 Hugepages 数量:
cat /proc/meminfo | grep HugePages_Free
如果没有足够的空闲 Hugepages,可以使用以下命令来创建新的 Hugepage:
sudo sysctl -w vm.nr_hugepages=<number>
其中 <number>
是希望分配的 Hugepage 数量。
- 运行 DPDK 应用程序
编写 DPDK 应用程序后,使用以下命令启动应用程序:
sudo ./app -c <core mask> -n <memory channel> --file-prefix=dpdk --socket-mem=<memory size> --no-pci --vdev=net_virtio_user0,mac=<mac address>,path=<virtio-user socket file>
其中 <core mask>
表示指定哪些 CPU 核心运行应用程序,例如 0xf
表示使用 4 个 CPU 核心;<memory channel>
表示内存通道数;<memory size>
表示分配给 DPDK 的内存大小;<mac address>
表示虚拟网卡的 MAC 地址;<virtio-user socket file>
表示 virtio-user 通信所使用的 socket 文件路径。
注意,在启动应用程序前需要将 DPDK 网卡绑定到适当的驱动程序上,可以使用 dpdk-devbind.py
工具来完成。例如:
sudo $RTE_SDK/usertools/dpdk-devbind.py -b uio_pci_generic <DPDK NIC PCI address>
其中 <DPDK NIC PCI address>
是 DPDK 网卡的 PCI 地址。