1. 下载DPDK
环境:
ubuntu 22.04
git clone <https://github.com/DPDK/dpdk.git>
2. 环境搭建
sudo apt-get install python3
sudo apt-get install python3-pip
sudo pip3 install meson
sudo pip3 install ninja
注意:
- meson 和 ninja是dpdk新版本的编译方式,且只能通过pip安装
- Python 3.6 或更高版本。
- Meson(版本 0.53.2+)和 ninja
- 大多数 Linux 发行版中的 meson 和 ninja-build 包
- 如果打包版本低于最低版本,可以从 Python 的“pip”仓库安装最新版本:pip3 install meson ninja pyelftools(版本 0.22+)
- 对于 Fedora 系统,可以使用 dnf install python-pyelftools 安装
- 对于 RHEL/CentOS 系统,可以使用 pip3 install pyelftools 安装
- 对于 Ubuntu/Debian,可以使用 apt install python3-pyelftools 安装
- 对于 Alpine Linux,可以使用 apk add py3-elftools 安装
- 用于处理 NUMA(非统一内存访问)的库。
- RHEL/Fedora 中的 numactl-devel;
- Debian/Ubuntu 中的 libnuma-dev;
- Alpine Linux 中的 numactl-dev
3. 编译dpdk
此处仅展示普通编译,交叉编译等等需求请查阅官网
//configure a DPDK build use
meson setup <options> build
//build and then install DPDK system-wide use
cd build
ninja
ninja install
ldconfig
注意:如果此过程中报错,查看是否是有包需要装,例如上一步所说的pyelftools等等
4. 设置大页内存(运行DPDK必须)
- 编译GRUB配置文件
- 打开终端
- 编辑GRUB配置文件
sudo nano /etc/default/grub //sudo is required
- 修改GRUB配置文件
- 在打开的文件中,找到GRUB_CMDLINE_LINUX_DEFAULT这一行,并在引号内添加你需要的hugepages参数。例如,如果你想预留1024个2MB的hugepages,修改如下:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash hugepages=1024"
- 如果你想预留4个1GB的hugepages,并且设置1GB为默认的hugepage大小,修改如下:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash default_hugepagesz=1G hugepagesz=1G hugepages=4"
- 更新GRUB
// 重新生成 grub.cfg
sudo grub-mkconfig -o /boot/grub/grub.cfg
// 更新 grub 配置
sudo update-grub
// 重启
reboot
- 验证配置
- 重启后,可通过如下命令验证hugepages是否以及正确预留
grep HugePages_Total /proc/meminfo
- 手动挂载
- 首先,创建一个目录作为Hugepages的挂载点
sudo mkdir -p /mnt/huge
- 挂载hugepages:使用mount命令挂载hugepages。假设你像挂载1GB大小的hugepages:
sudo mount -t hugetlbfs nodev /mnt/huge -o pagesize=1G
- 使挂载点在重启后永久生效
sudo nano /etc/fstab
在文件中添加如下行
nodev /mnt/huge hugetlbfs pagesize=1G 0 0
保存并关闭文件
- 验证挂载
mount | grep hugetlbfs
如果能看到类似如下输出,则说明挂载成功
nodev on /mnt/huge type hugetlbfs (rw,relatime,pagesize=1G)
5. 加载Kernel driver
本文以VFIO为例
5.1 BIOS支持
在VMWARE设置中,将虚拟化INTEL VTX以及虚拟机IOMMU打开
验证是否成功
dmesg | grep -e DMAR -e IOMMU
输出非空白或者IOMMU NOT FOUND即为配置成功
5.2 内核支持
与hugepages类似,修改/etc/default/grub文件
在 GRUB_CMDLINE_LINUX_DEFAULT 里添加 iommu=pt intel_iommu=on
验证
cat /proc/cmdline | grep iommu=pt
cat /proc/cmdline | grep intel_iommu=on
5.3 加载kernel
sudo modprobe vfio-pci
sudo /usr/bin/chmod a+x /dev/vfio
sudo /usr/bin/chmod 0666 /dev/vfio/*
6. 绑定network ports
需要先关闭待绑定网卡
ifconfig ens33 down
随后进行绑定
sudo python3 {dpdk_path}/usertools/dpdk-devbind.py --bind=vfio-pci ens33
sudo python3 {dpdk_path}/usertools/dpdk-devbind.py --status //验证
7. 运行hellowork example
7.1. 编译
进入dpdk build目录
cd dpdk/build
允许examples编译
meson configure -Dexamples=helloworld
编译
ninja
7.2. 运行
./<build_dir>/examples/dpdk-helloworld -l 0-3 -n 4
丢个官方文档地址
Getting Started Guide for Linux — Data Plane Development Kit 24.07.0-rc3 documentation (dpdk.org)