DPDK 21.11.0-rc2 环境配置以及测试

本文主要参考两篇博客以及开发文档,原文链接如下:

DPDK在ubuntu20.04上的安装_一旦9912的博客-CSDN博客

DPDK使用hugepage原理总结_shaoyunzhe的专栏-CSDN博客

https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt

DPDK的安装

1. 获取源码(通过git)

git clone git://dpdk.org/dpdk # Get DPDK

DPDK 21.11.0-rc2 环境配置以及测试_第1张图片

git clone http://dpdk.org/git/dpdk-kmods # Get igb_uio

 DPDK 21.11.0-rc2 环境配置以及测试_第2张图片

cp -r ./dpdk-kmods/linux/igb_uio ./dpdk/kernel/linux/ # Copy dpdk-kmods/linux/igb_uio/ to dpdk/kernel/linux/

 2. 配置文件

vim dpdk/kernel/linux/meson.build
将subdirs = ['kni'] 修改为 subdirs = ['kni', 'igb_uio']

DPDK 21.11.0-rc2 环境配置以及测试_第3张图片

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'))

DPDK 21.11.0-rc2 环境配置以及测试_第4张图片

 3. 配置环境

apt-get install python3 python3-pip

DPDK 21.11.0-rc2 环境配置以及测试_第5张图片

pip3 install meson ninja pwntools

 DPDK 21.11.0-rc2 环境配置以及测试_第6张图片

cd dpdk

sudo meson -D examples=all build

DPDK 21.11.0-rc2 环境配置以及测试_第7张图片

cd build

ninja install

DPDK 21.11.0-rc2 环境配置以及测试_第8张图片

 4. 配置巨页

如果只需要跑通dpdk-helloword,则可跳过本节,直接看第5节,在运行时加上“--no-huge”

临时配置 64个2MB巨页

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

 临时配置 2个1GB巨页

方法类似配置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巨页

 5. 测试运行helloword

cd dpdk/build/examples

sudo ./dpdk-helloworld

./dpdk-helloworld --no-huge  #绕过配置巨页

每个物理核发送一个hello,如下图即运行成功

DPDK 21.11.0-rc2 环境配置以及测试_第9张图片

6. 常见错误 

运行时可能会出现权限不够的情况,出现以下错误,运行前加“sudo”即可

DPDK 21.11.0-rc2 环境配置以及测试_第10张图片

未配置1GB巨页,参照第4节

 巨页已配置,但未挂载,参照第4节

7. 绑定网卡

#查看正在运行的网卡
inconfig

 DPDK 21.11.0-rc2 环境配置以及测试_第11张图片

#利用dpdk-devbind查看网卡、绑定和解绑网卡
#dpdk-devbind.py在/dpdk/usertools路径中

sudo ./dpdk-devbind.py --status   #查看网卡信息

DPDK 21.11.0-rc2 环境配置以及测试_第12张图片

#加载uio_pci_generic
sudo modprobe uio_pci_generic

#再次查看status,可以看到网卡支持uio_pci_generic

DPDK 21.11.0-rc2 环境配置以及测试_第13张图片 

#绑定网卡,可直接输入待绑定网卡的名字或者地址
sudo ./usetools/dpdk-devbind.py --bind=uio_pci_generic ens6f0
#或者
sudo ./usetools/dpdk-devbind.py --bind=uio_pci_generic b1:00.0

DPDK 21.11.0-rc2 环境配置以及测试_第14张图片

#释放网卡, 需要输入地址,输入ens6f0会报错
sudo ./usertools/dpdk-devbind.py --bind=ixgbe b1:00.0

DPDK 21.11.0-rc2 环境配置以及测试_第15张图片

你可能感兴趣的:(DPDK,linux,ubuntu)