本文主要参考两篇博客以及开发文档,原文链接如下:
DPDK在ubuntu20.04上的安装_一旦9912的博客-CSDN博客
DPDK使用hugepage原理总结_shaoyunzhe的专栏-CSDN博客
https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt
git clone git://dpdk.org/dpdk # Get DPDK
git clone http://dpdk.org/git/dpdk-kmods # Get igb_uio
cp -r ./dpdk-kmods/linux/igb_uio ./dpdk/kernel/linux/ # Copy dpdk-kmods/linux/igb_uio/ to dpdk/kernel/linux/
vim dpdk/kernel/linux/meson.build
将subdirs = ['kni'] 修改为 subdirs = ['kni', 'igb_uio']
vim dpdk/kernel/linux/igb_uio/meson.build
加入如下内容:
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2017 Intel Corporation
mkfile = custom_target('igb_uio_makefile',
output: 'Makefile',
command: ['touch', '@OUTPUT@'])
custom_target('igb_uio',
input: ['igb_uio.c', 'Kbuild'],
output: 'igb_uio.ko',
command: ['make', '-C', kernel_dir + '/build',
'M=' + meson.current_build_dir(),
'src=' + meson.current_source_dir(),
'EXTRA_CFLAGS=-I' + meson.current_source_dir() +
'/../../../lib/librte_eal/include',
'modules'],
depends: mkfile,
install: true,
install_dir: kernel_dir + '/extra/dpdk',
build_by_default: get_option('enable_kmods'))
apt-get install python3 python3-pip
pip3 install meson ninja pwntools
cd dpdk
sudo meson -D examples=all build
cd build
ninja install
如果只需要跑通dpdk-helloword,则可跳过本节,直接看第5节,在运行时加上“--no-huge”
echo 64 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
注意可能不具有nr_hugepages的写权限
可以先利用 chmod 777 修改该文件权限,接着再运行echo 即可
sudo chmod 777 /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
如果由多个NUMA节点,可分别预设巨页,只需修改node0 → node1
方法类似配置2MB的巨页,修改权限,再echo,hugepages-1048576kB对应1GB巨页
默认挂载2MB的巨页
mkdir -p /mnt/hugepages
mount -t hugetlbfs nodev /mnt/hugepages #默认2MB
mount -t hugetlbfs nodev /mnt/huge_1GB -o pagesize=1GB #修改参数,可挂载1GB巨页
cd dpdk/build/examples
sudo ./dpdk-helloworld
./dpdk-helloworld --no-huge #绕过配置巨页
每个物理核发送一个hello,如下图即运行成功
运行时可能会出现权限不够的情况,出现以下错误,运行前加“sudo”即可
未配置1GB巨页,参照第4节
巨页已配置,但未挂载,参照第4节
#查看正在运行的网卡
inconfig
#利用dpdk-devbind查看网卡、绑定和解绑网卡
#dpdk-devbind.py在/dpdk/usertools路径中
sudo ./dpdk-devbind.py --status #查看网卡信息
#加载uio_pci_generic
sudo modprobe uio_pci_generic
#再次查看status,可以看到网卡支持uio_pci_generic
#绑定网卡,可直接输入待绑定网卡的名字或者地址
sudo ./usetools/dpdk-devbind.py --bind=uio_pci_generic ens6f0
#或者
sudo ./usetools/dpdk-devbind.py --bind=uio_pci_generic b1:00.0
#释放网卡, 需要输入地址,输入ens6f0会报错
sudo ./usertools/dpdk-devbind.py --bind=ixgbe b1:00.0