一、前期准备:安装编译依赖与 DPDK 源码编译安装
bash
# 1. 更新系统软件源
sudo apt update && sudo apt upgrade -y
# 2. 安装基础工具(vim/gcc/g++/make 等)
sudo apt install -y vim gcc g++ make git wget curl net-tools
# 3. 安装 DPDK 必需依赖(解决编译、大页、网卡绑定相关问题)
sudo apt install -y libnuma-dev pkg-config python3-pip ninja-build python3-setuptools python3-pyparsing
二、下载并解压 DPDK 19.08 源码
# 1. 下载 DPDK 19.08 稳定版(官方加速地址)
wget https://fast.dpdk.org/rel/dpdk-19.08.2.tar.xz
# 2. 解压源码(若提示 tar 不支持 xz,先安装 sudo apt install -y xz-utils)
tar -xvf dpdk-19.08.2.tar.xz
# 3. 进入 DPDK 根目录(后续所有操作均在此目录下执行)
cd dpdk-19.08.2
三、编译 DPDK 19.08
# 1. 赋予官方配置脚本执行权限
chmod +x ./usertools/dpdk-setup.sh
# 2. 运行 DPDK 图形化配置脚本(后续交互式操作按步骤选择)
sudo ./usertools/dpdk-setup.sh
脚本内交互式编译步骤(必须严格按此顺序操作)
- 选择编译目标 :在菜单中找到
[36] x86_64-native-linuxapp-gcc,输入36回车,开始编译(耗时 5-15 分钟,无红色报错,最终显示Build complete.即编译成功)。 - 编译完成后:自动返回脚本主菜单,继续后续配置(不要退出脚本)。
四、系统启动参数配置(大页内存 + CPU 隔离 + 网卡名修改)
1. 编辑 GRUB 配置文件(一站式配置所有启动参数)
sudo vim /etc/default/grub
2. 修改两个核心 GRUB 配置项(保留原有内容,追加新参数)
(1)修改GRUB_CMDLINE_LINUX_DEFAULT(大页内存 + CPU 隔离,适配 2 核虚拟机)
# 原有配置:"quiet splash"
# 修改后配置(添加大页、CPU隔离参数)
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash default_hugepagesz=2M hugepages=512 isolcpus=1"
参数说明:
default_hugepagesz=2M:指定默认大页内存尺寸为 2M(适配虚拟机小内存场景,不推荐 1G 大页);hugepages=512:分配 512 个 2M 大页,总计 1G 大页内存(可根据虚拟机内存大小调整);isolcpus=1:隔离 CPU 1 核,专供 DPDK 使用,保留 CPU 0 核给系统进程运行。(这个根据自己的核心数,不能大于等于,否则内核崩溃)
(2)修改GRUB_CMDLINE_LINUX(传统 eth 网卡名,替换 ens 命名)
# 原有配置:"find_preseed=/preseed.cfg auto noprompt priority=critical locale=en_US"
# 修改后配置(追加网卡名修改参数)
GRUB_CMDLINE_LINUX="find_preseed=/preseed.cfg auto noprompt priority=critical locale=en_US net.ifnames=0 biosdevname=0"
参数说明:
net.ifnames=0:禁用 Systemd 新式网卡命名规则,避免生成 ensXX 类名称;biosdevname=0:禁用基于 BIOS 的网卡命名规则,强制使用传统 ethX(eth0、eth1)命名。
3. 更新 GRUB 并重启系统,使配置生效
# 更新GRUB配置
sudo update-grub
# 重启服务器
sudo reboot
4. 验证配置生效情况(重启后执行)
(1)验证大页内存是否生效
# 查看2M大页分配情况
cat /proc/meminfo | grep HugePages
生效标志 :输出中HugePages_Total数值为 512,与配置的hugepages=512一致。
(2)验证网卡名是否改为 eth 格式
# 查看所有网卡名称
ip addr
生效标志:网卡名称显示为 eth0、eth1、eth2,无 ensXX 类名称。
(3)验证 CPU 隔离是否生效
# 查看CPU隔离状态
cat /proc/cmdline | grep isolcpus
生效标志 :输出中包含isolcpus=1,说明 CPU 1 核已被成功隔离。
五、VMware 虚拟机网卡配置(修改虚拟网卡为 vmxnet3)
1. 关闭虚拟机(必须关机,不可挂起)
在 VMware 客户端中,关闭当前 Ubuntu 16.04 虚拟机,确保虚拟机处于 "已关机" 状态。
2. 修改虚拟机配置文件(.vmx)
(1)找到虚拟机配置文件路径
- 打开 VMware 客户端,右键点击目标虚拟机 → 「设置」→ 「选项」→ 「常规」→ 查看「工作目录」,配置文件(XXX.vmx)位于该目录下。
(2)编辑.vmx 文件,修改网卡虚拟设备类型

# 用文本编辑器打开.vmx文件,找到网卡配置行(通常为ethernet0)
ethernet0.virtualDev = "vmxnet3"
说明 :将原有网卡虚拟设备类型改为vmxnet3,提升虚拟机网卡与 DPDK 的兼容性(若原有已是该配置,可跳过)。
3. 启动虚拟机,确认网卡识别正常
启动 Ubuntu 16.04 虚拟机,执行ip addr验证网卡是否正常识别(显示 ethX 格式名称)。
六、DPDK 环境变量配置(永久生效)
1. 编辑用户环境变量配置文件
nano ~/.bashrc
2. 在文件末尾追加 DPDK 环境变量
bash
# DPDK源码目录(根据实际解压路径调整,此处为示例路径)
export RTE_SDK=/root/dpdk-19.08
# DPDK目标编译环境
export RTE_TARGET=x86_64-native-linuxapp-gcc
3. 使环境变量立即生效
source ~/.bashrc
4. 验证环境变量是否生效
echo $RTE_SDK && echo $RTE_TARGET
生效标志:输出对应的 DPDK 源码目录和目标编译环境路径。
七、DPDK 环境配置
1. 查看当前网卡状态(确认网卡 PCI 地址与内核驱动)
sudo dpdk-devbind.py --status
然后查看ifconfig:

需要在虚拟机设置中添加一个网卡并配置成桥接,这个网卡交给dpdk使用,另外一个网卡正常用作其余用途。我这里的eth0为桥接,因此使用这个网卡。
步骤 1:先禁用eth0桥接网卡(解除内核驱动占用)
# 禁用eth0,释放vmxnet3内核驱动的占用(桥接网卡活跃状态下无法解绑)
sudo ip link set eth0 down
验证:执行
ip addr查看eth0,显示DOWN状态即成功。
紧接着,在/usertools目录下执行dpdk-setup.sh:

- 加载 igb_uio 核心驱动 :在脚本菜单中输入
43回车,输出Unloading any existing DPDK UIO module → Loading uio module → Loading DPDK UIO module即驱动加载成功(无红色报错即可),按Enter返回主菜单。 - 配置非 NUMA 系统大页内存 :在脚本菜单中输入
46回车,进入大页配置交互:- 提示
Number of pages:时,输入1024回车(对应 2GB 大页内存,满足 DPDK 运行需求)。 - 脚本自动完成大页挂载,无报错后按
Enter返回主菜单。
- 提示
- 绑定 eth0 到 igb_uio 驱动 :在脚本菜单中输入
49回车,进入网卡绑定交互:- 终端显示网卡列表,找到
eth0对应的 PCI 地址0000:03:00.0。 - 提示
Enter PCI address of device to bind to IGB UIO driver:时,输入0000:03:00.0(这是我的eth0对应的编号) 回车,无红色报错即绑定成功。 - 按
Enter返回主菜单(可选:输入48回车,验证0000:03:00.0已归属DPDK-compatible driver,显示drv=igb_uio)。
- 终端显示网卡列表,找到
八、运行 testpmd 工具验证 DPDK 功能(脚本内交互式操作)
- 启动 testpmd 交互式工具 :在脚本菜单中输入
53回车,进入核心掩码配置交互:- 提示
bitmask:时,输入0x3回车(启用 CPU 核心 0 和 1,适配虚拟机环境,单核心虚拟机输入0x1)。 - 脚本自动初始化,无红色报错后进入
testpmd>交互式终端(标志着 testpmd 启动成功)。
- 提示
- testpmd 内核心操作(验证数据包转发) :
- 启动数据包转发:在
testpmd>后输入start回车,输出Start automatic packet forwarding即转发启动。 - 查看网卡收发统计:在
testpmd>后输入show port stats 0回车,可查看eth0收发数据包数(无错误,数据包数非 0 即正常)。 - 停止数据包转发:在
testpmd>后输入stop回车,输出Stop automatic packet forwarding即转发停止。 - 退出 testpmd:在
testpmd>后输入quit回车,自动返回脚本主菜单。
- 启动数据包转发:在
- 退出 DPDK 配置脚本 :在脚本菜单中输入
60回车,回到 Ubuntu 终端,整个 DPDK 搭建流程完成。
