DPDK学习

前情提要

由于最近pni项目需要处理的数据集提高了几个量级,原有的带宽速率显得不够,因此考虑在linux环境下提高网络速率,结合之前的项目实战,选择了使用DPDK。

DPDK介绍

DPDK全称Intel Data Plane Development Kit,是intel提供的数据平面开发工具集,为Intel architecture(IA)处理器架构下用户空间高效的数据包处理提供库函数和驱动的支持。通俗地说,就是一个用来进行包数据处理加速的软件库。

DPDK不同于Linux系统以通用性设计为目的,而是专注于网络应用中数据包的高性能处理。具体体现在DPDK应用程序是运行在用户空间上利用自身提供的数据平面库来收发数据包,绕过了Linux内核协议栈对数据包处理过程。它不是一个用户可以直接建立应用程序的完整产品,不包含需要与控制层(包括内核和协议堆栈)进行交互的工具。

相比原生 Linux(Native Linux),采用Intel DPDK技术后能够大幅提升IPV4的转发性能,可以让用户在迁移包处理应用时(从基于NPU的硬件迁移到基于Intel x86的平台上),获得更好的成本和性能优势。同时可以采用统一的平台部署不同的服务,如应用处理,控制处理和包处理服务。

DPDK工作图

简单说,DPDK可以接管你的操作系统,在处理数据包的时候可以绕过内核,大大提高传输速率。

DPDK开发环境搭建

选择长期支持的版本LTS

DPDK的下载官网如下:

https://core.dpdk.org/download/

DPDK版本图

我的开发环境是Ubuntu18.04 64位,选择的是DPDK 19.11.8(LTS)版本。

其余的软件环境

从下面的文档可以查看不同版本的System Requirements章节,安装需要的软件环境,如gcc、glibc、python、numactl-devel、pcap。

http://core.dpdk.org/doc/archives/

虚拟机配置

  • 核心:4个

  • 内存:4G,感觉可以再分大些

  • 虚拟网卡:需要支持DPDK,我选的是vmnet3,建议至少两个网卡,一收一发、

DPDK安装

下载源代码

https://fast.dpdk.org/rel/dpdk-19.11.8.tar.xz

设置环境变量

1
2
3
4
5
6
7
64位系统:
export RTE_SDK=`pwd`
export RTE_TARGET=x86_64-native-linuxapp-gcc

32位系统:
export RTE_SDK=`pwd`
export RTE_TARGET=i686-default-linuxapp-gcc

利用setup.sh进行配置

1
2
cd dpdk-stable-19.11.8/usertools
source ./dpdk-setup.sh

编辑DPDK

编译DPDK

编译完后提示没有指定安装路径,我们只是编译而不是install就不用理会。

编译后提示

插入IGB UIO模块

插入IGB UIO模块

设置大页内存

设置大页内存

默认设置的是2M的大页内存,这里输入1024,表示申请2G的大页内存。

大页内存

查看配置的大页内存

查看大页内存
大页内存

查看网卡信息

记得通过ifconfig xxx down指令将网卡关闭。

查看网卡信息
网卡信息

绑定网卡

绑定网卡

输入pci的地址,0000开始到'前的全输入。

运行testpmd测试程序

测试程序

输入0xf代表程序运行在0~3核心。

输入start开始抓包

stop停止抓包