在Linux(CentOS)上部署DPDK------脚本方式

1.DPDK 简介


DPDK(Data Plane Development Kit)是数据平面开发工具包,由用于加速在各种CPU架构上运行的数据包处理的库组成。

DPDK需要一定的网卡硬件支持,以Intel为例,支持以下网卡:

    e1000 (82540, 82545, 82546)
    e1000e (82571, 82572, 82573, 82574, 82583, ICH8, ICH9, ICH10, PCH, PCH2, I217, I218, I219)
    igb (82575, 82576, 82580, I210, I211, I350, I354, DH89xx)
    ixgbe (82598, 82599, X520, X540, X550)
    i40e (X710, XL710, X722, XXV710)
    ice (E810)
    fm10k (FM10420)
    ipn3ke (PAC N3000)
    ifc (IFC)

完整的网卡支持列表可在官网查询:
http://core.dpdk.org/supported/

在Linux上部署DPDK有两种方式,一种是通过命令行依次进行配置,编译,驱动加载等;另一种是通过DPDK的脚本进行快捷配置和编译。

通过命令行的方式部署,可配置项更多,可以获得更佳的性能,对DPDK的工作环境也能有更好的熟悉;通过脚本方式部署步骤较少,较简单。
通过命令行部署的教程请移步:
在Linux(CentOS)上部署DPDK------命令行方式

2.DPDK 环境


该章节的内容参照自官网的DPDK System Requirements

2.1 编译所需的工具和库
  • GNU: make
  • coreutils: cmp, sed, grep, arch, etc.
  • gcc: versions 4.9 或更新版本。
  • libc headers, 即glibc-devel.x86_64 (以64位数Intel平台为例)。
  • Linux kernel headers or sources required to build kernel modules. (kernel - devel.x86_64; kernel - devel.ppc64)
  • 若需要在64位操作系统上编译32位软件,还需要以下工具:
    • glibc.i686, libgcc.i686, libstdc++.i686 and glibc-devel.i686 for Intel i686/x86_64;
    • glibc.ppc64, libgcc.ppc64, libstdc++.ppc64 and glibc-devel.ppc64 for IBM ppc_64;

这里需要注意的是kernel-devel的版本要匹配内核的版本,可以通过uname -r查看内核版本号,并通过yum info kernel-devel查看已安装或支持的kernel-devel版本号。这里查看到我的centos已经预装了kernel-devel,版本与kernel版本一致:

uname -r
    3.10.0-862.el7.x86_64

yum info kernel-devel
    已安装的软件包
    名称    :kernel-devel
    架构    :x86_64
    版本    :3.10.0
    发布    :862.el7
    大小    :37 M
    源    :installed

kernel头文件的路径位于/usr/lib/modules/$kernel-version/kernel

2.2 运行环境
  • Kernel version >= 3.16
  • glibc >= 2.7 (for features related to cpuset)
  • Kernel configuration,centos提供的配置可运行大多数DPDK应用。

3.DPDK 脚本部署


该章节的内容参照自官网的脚本快速部署

3.1 下载DPDK代码

可从官网下载最新的稳定版或开发版的DPDK代码DPDK代码下载

然后解压缩:

tar xJf dpdk-<version>.tar.xz
cd dpdk-<version>

其中DPDK的代码包含如下部分:

  • lib: Source code of DPDK libraries
  • drivers: Source code of DPDK poll-mode drivers
  • app: Source code of DPDK applications (automatic tests)
  • examples: Source code of DPDK application examples
  • config, buildtools, mk: Framework-related makefiles, scripts and configuration

其中在usertools路径下可以找到dpdk-setup.sh脚本,这个脚本可以运行下面这些功能:

  • 编译DPDK库
  • 加载或移除DPDK IGB_UIO kernel module
  • 加载或移除VFIO kernel module
  • 加载或移除DPDK KNI kernel module
  • 对NUMA会非NUMA系统均支持创建或删除hugepages
  • 查看当前网口状态,以及预留端口给DPDK使用
  • 对于非root用户,设置VFIO驱动的权限
  • 运行test和testpmd应用
  • 在meminfo中查看hugepages信息
  • 在/mnt/huge中列出hugepages信息
  • 移除编译的DPDK库
3.2 配置脚本的组成

dpdk-setup.sh脚本在逻辑上组成一系列步骤。每个步骤都提供了许多选项,可指导用户完成所需任务。以下是每个步骤的简要概述。

第1步:构建DPDK库

最初,用户必须选择DPDK target,以便正确配置target类型和编译选项,随后DPDK会根据选择的target和编译环境进行编译。

第一步可选的target和编译选项类型如下:

----------------------------------------------------------
 Step 1: Select the DPDK environment to build
----------------------------------------------------------
[1] arm64-armv8a-linuxapp-clang
[2] arm64-armv8a-linuxapp-gcc
[3] arm64-dpaa2-linuxapp-gcc
[4] arm64-dpaa-linuxapp-gcc
[5] arm64-stingray-linuxapp-gcc
[6] arm64-thunderx-linuxapp-gcc
[7] arm64-xgene1-linuxapp-gcc
[8] arm-armv7a-linuxapp-gcc
[9] i686-native-linuxapp-gcc
[10] i686-native-linuxapp-icc
[11] ppc_64-power8-linuxapp-gcc
[12] x86_64-native-bsdapp-clang
[13] x86_64-native-bsdapp-gcc
[14] x86_64-native-linuxapp-clang
[15] x86_64-native-linuxapp-gcc
[16] x86_64-native-linuxapp-icc
[17] x86_x32-native-linuxapp-gcc

第2步:设置环境

这个步骤需要配置Linux的环境以支持DPDK应用程序的运行。需要配置的环境有两项,分别是:

  • Hugepages配置
  • DPDK kernel module配置(网卡驱动配置)

可以为NUMA或非NUMA系统设置Hugepages,但是仅支持默认的2MB大小的hugepage size。若想设置更大的单页,需要自己配置,可以参考:用命令行方式部署DPDK
还可以在此步骤中插入所需的DPDK内核模块,并且可以将网络端口绑定到此模块以供DPDK应用程序使用。

----------------------------------------------------------
 Step 2: Setup linuxapp environment
----------------------------------------------------------
[18] Insert IGB UIO module
[19] Insert VFIO module
[20] Insert KNI module
[21] Setup hugepage mappings for non-NUMA systems
[22] Setup hugepage mappings for NUMA systems
[23] Display current Ethernet/Crypto device settings
[24] Bind Ethernet/Crypto device to IGB UIO module
[25] Bind Ethernet/Crypto device to VFIO module
[26] Setup VFIO permissions

第3步:运行应用程序

上述步骤完成后,用户就可以运行测试应用程序。测试应用程序允许用户为DPDK运行一系列功能测试。支持接收和发送数据包的testpmd应用也可以运行。

----------------------------------------------------------
 Step 3: Run test application for linuxapp environment
----------------------------------------------------------
[27] Run test application ($RTE_TARGET/app/test)
[28] Run testpmd application in interactive mode ($RTE_TARGET/app/testpmd)

第4步:检查系统

此步骤提供了一些用于检查hugepage映射状态的工具。

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

第5步:系统清理

最后一步有将系统恢复到原始状态的一些选项。

----------------------------------------------------------
 Step 5: Uninstall and system cleanup
----------------------------------------------------------
[30] Unbind devices from IGB UIO or VFIO driver
[31] Remove IGB UIO module
[32] Remove VFIO module
[33] Remove KNI module
[34] Remove hugepage mappings
3.3 配置脚本运行示例

dpdk-setup.sh需要用root权限来运行。

source usertools/dpdk-setup.sh

第一步选择编译的target和编译选项,在x86架构的cpu上运行64位的centos,并使用gcc编译,可以选择[15] x86_64-native-linuxapp-gcc

Option: 15

Configuration done using x86_64-native-linuxapp-gcc
== Build lib
== Build lib/librte_compat
== Build lib/librte_kvargs
......
== Build app/test-eventdev
Build complete [x86_64-native-linuxapp-gcc]
Installation cannot run with T defined and DESTDIR undefined
------------------------------------------------------------------------------
 RTE_TARGET exported as x86_64-native-linuxapp-gcc
------------------------------------------------------------------------------

Press enter to continue ...

第二步配置hugepages,在NUMA系统中,选择[22] Setup hugepage mappings for NUMA systems。然后输入hugepages的页数,例如每个NUMA node需要128MB的hugepages,且系统默认的每页huge page的大小是2M,则输入页数为64。
随后需要加载DPDK的kernel module(网卡驱动),可以选择IGB UIO 或者VFIO,分别对应[18] Insert IGB UIO module[19] Insert VFIO module,也可以都加载,在绑定时选择特定的kernel module。

Option: 18

Unloading any existing DPDK UIO module
Loading DPDK UIO module

可以通过[24] Bind Ethernet/Crypto device to IGB UIO module将网卡绑定IGB UIO的驱动:

Option: 24   


Network devices using kernel driver
===================================
0000:03:00.0 'I210 Gigabit Network Connection 1533' if=enp3s0 drv=igb unused=igb_uio *Active*
0000:04:00.0 'I210 Gigabit Network Connection 1533' if=enp4s0 drv=igb unused=igb_uio *Active*
0000:05:00.0 'I210 Gigabit Network Connection 1533' if=enp5s0 drv=igb unused=igb_uio 
0000:06:00.0 'I210 Gigabit Network Connection 1533' if=enp6s0 drv=igb 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: 05:00.0
OK

随后可以用配置脚本中的[28] Run testpmd application in interactive mode ($RTE_TARGET/app/testpmd)运行测试程序。在此之前需要先声明RTE_TARGET路径,退出脚本后运行:

export RTE_TARGET=/home/dpdk-stable-18.11.2/x86_64-native-linuxapp-gcc/

随后重新打开脚本,可以运行测试程序:

Option: 28


  Enter hex bitmask of cores to execute testpmd app on
  Example: to execute app on cores 0 to 7, enter 0xff
bitmask: 0x03
Launching app
......

至此,DPDK的部署就算完成了,接下来可以尝试编译和运行
基于DPDK的简单应用了。

基于DPDK的简单应用编译与运行方法可以查看:
编译和运行DPDK示例程序

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

推荐阅读更多精彩内容