DPDK 19.08(Ubuntu 16.04)环境搭建

一、前期准备:安装编译依赖与 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

脚本内交互式编译步骤(必须严格按此顺序操作)

  1. 选择编译目标 :在菜单中找到 [36] x86_64-native-linuxapp-gcc,输入 36 回车,开始编译(耗时 5-15 分钟,无红色报错,最终显示 Build complete. 即编译成功)。
  2. 编译完成后:自动返回脚本主菜单,继续后续配置(不要退出脚本)。

四、系统启动参数配置(大页内存 + 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 功能(脚本内交互式操作)

  1. 启动 testpmd 交互式工具 :在脚本菜单中输入 53 回车,进入核心掩码配置交互:
    • 提示 bitmask: 时,输入 0x3 回车(启用 CPU 核心 0 和 1,适配虚拟机环境,单核心虚拟机输入 0x1)。
    • 脚本自动初始化,无红色报错后进入 testpmd> 交互式终端(标志着 testpmd 启动成功)。
  2. testpmd 内核心操作(验证数据包转发)
    • 启动数据包转发:在 testpmd> 后输入 start 回车,输出 Start automatic packet forwarding 即转发启动。
    • 查看网卡收发统计:在 testpmd> 后输入 show port stats 0 回车,可查看 eth0 收发数据包数(无错误,数据包数非 0 即正常)。
    • 停止数据包转发:在 testpmd> 后输入 stop 回车,输出 Stop automatic packet forwarding 即转发停止。
    • 退出 testpmd:在 testpmd> 后输入 quit 回车,自动返回脚本主菜单。
  3. 退出 DPDK 配置脚本 :在脚本菜单中输入 60 回车,回到 Ubuntu 终端,整个 DPDK 搭建流程完成。

0voice · GitHub

相关推荐
Ha_To2 小时前
2026.1.14 Linux计划任务与进程
linux·运维·服务器
王闯写bug2 小时前
【openEuler】修改ssh端口号
服务器·网络·ssh·openeuler
oMcLin2 小时前
如何在CentOS 7.9上配置并优化高并发视频流平台,利用Nginx和RTMP模块确保低延迟流媒体传输?
linux·nginx·centos
之歆2 小时前
检索增强拦截器-查询转换器&翻译转化器&document后置处理器
运维·服务器
sxgzzn2 小时前
无人机热成像+数字孪生:光伏运维的智能革命
运维·无人机
咒法师无翅鱼2 小时前
【西电计网学习笔记】数据链路层【CSMA/CD&CA;以太网】
网络
dustcell.2 小时前
Linux实验环境搭建
网络
Suchadar2 小时前
Linux计划任务进程
linux·运维·服务器
Python_Study20252 小时前
制造业企业如何构建高效数据采集系统:从挑战到实践
大数据·网络·数据结构·人工智能·架构