DPDK简单介绍

本篇主要介绍DPDK的简单安装使用和一点其他相关内容,希望对初学者有所帮助。

本文打算写的内容:

  1. 对DPDK是什么和做什么用的简单介绍
  2. CentOS和Ubuntu安装DPDK的环境及流程
  3. 关于一个基于DPDK的很好用的报文发送工具 —— dpdk-pktgen的简单安装使用教程

1. 对DPDK的介绍

来自官方项目地址
DPDK is a set of libraries and drivers for fast packet processing.
It supports many processor architectures and both FreeBSD and Linux.
是一个用来进行快速报文处理的库和驱动集,支持多核架构以及FreeBSD和Linux。
评论指正:官方文档中many processor architectures应该是多种处理器架构的意思

用途:用来绑定和优化物理网卡驱动,提高其处理性能

DPDK相关技术:
(不详写,具体建议Google)

  1. 大页内存:用来减少TLB miss,提高效率
  2. IGB UIO:用户态的网卡驱动,用来取代原有的驱动,其中用户态是DPDK的核心之一(话说我至今搞不明白IGB是什么的缩写)
  3. 轮询模式:用来取代收报文进行处理时产生的中断,靠中断的话CPU效率太低,所以采用轮询来处理
  4. NUMA架构:Non Uniform Memory Access Architecture,建议Google

2. DPDK安装

2.1. 环境配置

名称 配置
操作系统 CentOS / Ubuntu
CPU 8核
内存 4G
网卡 最好两张以上
大页内存 最好512MB以上
DPDK版本 越高坑越少

2.2. 影响因素

上面是个建议的运行配置,下面详细说说

  1. 关于系统版本:一般没太大影响,DPDK似乎会被内核驱动的版本影响,但是我运行高版本的DPDK时没遇到类似问题
  2. 关于CPU: CPU核数自然是越高越好,这直接牵扯到处理能力。但是实际使用DPDK时牵扯到一个绑定CPU给DPDK线程的问题,这个具体到那里时会有所介绍,这里只简单表示:没必要绑定多余的CPU给DPDK线程,性能反而有可能降低。
  3. 内存:没啥好说的,越高越好,内存够大才能分配足够的大页内存,而大页内存又是直接影响DPDK性能的因素之一
  4. 网卡: DPDK绑定网卡之后原来的网络驱动就没用了,原先的协议栈中网络层及IP地址之类的全都会失效,还想连网建议多搞个网卡
  5. 大页内存:越高越好,影响性能,低了DPDK甚至没法正常用,可能报这个 ——


    Cannot Allocate Memory
  6. DPDK版本:现在都19.05了,除非是基于DPDK进行开发的开发者,版本改动可能影响较大,新接触建议选择高版本,坑少真的能省很多很多事情……
  7. 关于一些其他的可能的性能影响因素: 建议开启CPU超频,建议关掉防火墙,关掉蓝牙等用不上的功能

2.3. 安装过程

  1. 安之前最好安一下DPDK一些的依赖项,比较重要的:
# CentOS:
1: sudo yum install libnuma-devel
2: sudo yum install git
3: sudo yum install gcc
4: sudo yum install net-tools
# Ubuntu:
1: sudo apt install libnuma-dev
2: sudo apt install git
3: sudo apt install gcc
4: sudo apt install net-tools

其他还缺什么的话,建议根据到时候具体的错误信息进行查询

  1. 安装过程
1: ifconfig
2: sudo ens33 ifconfig down 
3: cd / 
4: git clone https://github.com/DPDK/dpdk.git
5: cd dpdk
6: export RTE_SDK = /dpdk
7: sudo ./usertools/dpdk-setup.sh

步骤1和2: 查看网卡信息,然后关了回头要绑定给DPDK的网卡,不关绑不上的,绑不上用不了的,会提示你还没绑网卡的
步骤6: 配置环境变量,下在哪配在哪,这里顺带一提,大部分基于DPDK开发的应用都要配两个特别重要的环境变量RTE_SDKRTE_TARGET,这俩一个代表DPDK下载地址,一个代表编译后文件的生成地址。
步骤7: 运行DPDK安装脚本,不建议自行一个个使用命令来安装。
运行步骤7之后:

------------------------------------------------------------------------------
 RTE_SDK exported as /root/dpdk
------------------------------------------------------------------------------
----------------------------------------------------------
 Step 1: Select the DPDK environment to build
----------------------------------------------------------
[1] arm64-armv8a-linuxapp-clang
[2] arm64-armv8a-linuxapp-gcc
[3] arm64-armv8a-linux-clang
[4] arm64-armv8a-linux-gcc
[5] arm64-bluefield-linuxapp-gcc
[6] arm64-bluefield-linux-gcc
[7] arm64-dpaa2-linuxapp-gcc
[8] arm64-dpaa2-linux-gcc
[9] arm64-dpaa-linuxapp-gcc
[10] arm64-dpaa-linux-gcc
[11] arm64-octeontx2-linuxapp-gcc
[12] arm64-octeontx2-linux-gcc
[13] arm64-stingray-linuxapp-gcc
[14] arm64-stingray-linux-gcc
[15] arm64-thunderx2-linuxapp-gcc
[16] arm64-thunderx2-linux-gcc
[17] arm64-thunderx-linuxapp-gcc
[18] arm64-thunderx-linux-gcc
[19] arm64-xgene1-linuxapp-gcc
[20] arm64-xgene1-linux-gcc
[21] arm-armv7a-linuxapp-gcc
[22] arm-armv7a-linux-gcc
[23] i686-native-linuxapp-gcc
[24] i686-native-linuxapp-icc
[25] i686-native-linux-gcc
[26] i686-native-linux-icc
[27] ppc_64-power8-linuxapp-gcc
[28] ppc_64-power8-linux-gcc
[29] x86_64-native-bsdapp-clang
[30] x86_64-native-bsdapp-gcc
[31] x86_64-native-freebsd-clang
[32] x86_64-native-freebsd-gcc
[33] x86_64-native-linuxapp-clang
[34] x86_64-native-linuxapp-gcc
[35] x86_64-native-linuxapp-icc
[36] x86_64-native-linux-clang
[37] x86_64-native-linux-gcc
[38] x86_64-native-linux-icc
[39] x86_x32-native-linuxapp-gcc
[40] x86_x32-native-linux-gcc

----------------------------------------------------------
 Step 2: Setup linux environment
----------------------------------------------------------
[41] Insert IGB UIO module
[42] Insert VFIO module
[43] Insert KNI module
[44] Setup hugepage mappings for non-NUMA systems
[45] Setup hugepage mappings for NUMA systems
[46] Display current Ethernet/Crypto device settings
[47] Bind Ethernet/Crypto device to IGB UIO module
[48] Bind Ethernet/Crypto device to VFIO module
[49] Setup VFIO permissions

----------------------------------------------------------
 Step 3: Run test application for linux environment
----------------------------------------------------------
[50] Run test application ($RTE_TARGET/app/test)
[51] Run testpmd application in interactive mode ($RTE_TARGET/app/testpmd)

----------------------------------------------------------
 Step 4: Other tools
----------------------------------------------------------
[52] List hugepage info from /proc/meminfo

----------------------------------------------------------
 Step 5: Uninstall and system cleanup
----------------------------------------------------------
[53] Unbind devices from IGB UIO or VFIO driver
[54] Remove IGB UIO module
[55] Remove VFIO module
[56] Remove KNI module
[57] Remove hugepage mappings

[58] Exit Script

Option: 

输入对应的命令数字就可以执行操作了,执行的顺序是:

  1. x86_64-native-linuxapp-gcc
    选择build的平台,系统和编译器,及x86_64平台,linux系统,c语言编译器
  2. Insert IGB UIO module
    插入IGB UIO驱动,必须在编译后才能正常运行,而它运行后才能顺利执行后面的操作
  3. Setup hugepage mappings for NUMA systems
    配置大页内存,选之后输入数目就行了,一般大页内存分两种,2M的和1G的
  4. Bind Ethernet/Crypto device to IGB UIO module
    把网卡绑定给UIO,详细如下:
Option: 47


Network devices using DPDK-compatible driver
============================================
0000:02:01.0 '82545EM Gigabit Ethernet Controller (Copper) 100f' drv=igb_uio unused=e1000
0000:02:06.0 '82545EM Gigabit Ethernet Controller (Copper) 100f' drv=igb_uio unused=e1000

Network devices using kernel driver
===================================
0000:02:07.0 '82545EM Gigabit Ethernet Controller (Copper) 100f' if=ens39 drv=e1000 unused=igb_uio 

No 'Crypto' devices detected
============================

No 'Eventdev' devices detected
==============================

No 'Mempool' devices detected
=============================

No 'Compress' devices detected
==============================

Enter PCI address of device to bind to IGB UIO driver: 

假设你要绑定最上面那个,输入02:01.0就可以了,绑定之前记得在ifconfig里面把它关了

  1. Run testpmd application in interactive mode ($RTE_TARGET/app/testpmd)
    从括号里就能看到DPDK自带的app编译完了都在RTE_TARGET这个路径下面,这个是个DPDK的测试程序,可以检测下DPDK安成功了没
  2. 关于testpmd,直接看这里吧

3. dpdk - pktgen

这是一个基于DPDK开发的报文发送工具,能指定MAC地址和包大小让它使用起来十分灵活
但是对于这个工具我个人还有许多没搞懂的地方,大家使用时见仁见智吧~

直接丢安装方法,先安装依赖:

1: wget -c http://www.lua.org/ftp/lua-5.3.5.tar.gz
2: tar zxvf lua-5.3.5.tar.gz
3: cd lua-5.3.5 
4: make linux
Ubuntu 
5: sudo apt-get install libreadline5 
6: sudo apt-get install libreadline-gplv2-dev 
CentOS 
5/6: yum install readline-devel 
7: sudo make install

dpdk - pktgen是用lua语言做脚本的,所以需要下载lua和相关内容
注意步骤7哪个系统都是要运行的
然后安装dpdk - pktgen

1: export RTE_SDK=/root/dpdk
2: export RTE_TARGET=x86_64-native-linuxapp-gcc
3: cd $RTE_SDK
4: make install T=x86_64-native-linuxapp-gcc
5: cd /root/pktgen-dpdk
6: make
7: ./app/x86_64-linuxapp-gcc/pktgen -l 0-2 -n 3 -- -P -m "[1].0, [2].1"
8: set 0 dst mac <mac addr>
9: set 0 dst ip <ip addr>
10: set 0 size <size between 64 - 1518>
11: start 0 # str

其中步骤1-7是安装过程,步骤8-11是简单使用过程。
其中步骤7很重要,涉及到初始化操作,直接影响后续使用时的性能表现。
步骤8表示设置MAC地址,dst表示接收端,src表示发送端
步骤9表示设置IP地址,dst同上
步骤10表示发包的包大小
步骤11表示端口0开始发包,str表示所有端口开始发包
具体可以运行时使用help命令自行查看

参数 数值
-l 使用到的cpu核
-n 内存通道数目
-m 内核掩码

关于以上内容和性能表现之间的关系本篇并不涉及,内核掩码要讲也可以另开一篇了,所以也不会涉及到,可以自行google。
最后放一个运行时的效果图:


看起来还是蛮厉害的
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容