点击蓝字,关注我们
日期:2023年05月17日 作者:Zero 介绍:Intel Data Plane Development Kit
1、前言
DPDK
全称 Intel Data Plane Development Kit
,是 Intel
提供的数据平面开发工具集,为 Intel architecture(IA)
处理器架构下用户空间高效的数据包处理提供库函数和驱动的支持,它不同于Linux
系统以通用性设计为目的,而是专注于网络应用中数据包的高性能处理。
目前很多基于流量分析方案的安全产品都使用了DPDK
作为底层技术支持,由于工作需要,之前接触过一段时间的DPDK
,也在查资料的过程中发现有网友的安装过程相当曲折,本文将DPDK
的介绍及安装避坑记录分享给需要的伙伴。
2、优缺点介绍
DPDK
应用程序是运行在用户空间上利用自身提供的数据平面库来收发数据包,绕过了 Linux
内核协议栈对数据包处理过程。Linux
内核将 DPDK
应用程序看作是一个普通的用户态进程,包括它的编译、连接和加载方式和普通程序没有什么两样。
上面引用的这段话可能看起来比较抽象,DPDK
与 Linux
网络层处理流程对比如下图所示。
可以看出在取包环节的流程发生变化,实际应用中当处理的数据量稍大的时候,传统取包方式与DPDK
的取包方式效率对比就非常明显,DPDK
的优势如下图所示。
前面都在说DPDK
好的方面,难道没有缺点吗?
DPDK
固然强大,带来效率提升的地方同样也带来了缺点,劣势如下图所示。
实际应用场景中,需要结合实际情况来进行技术选型,切记不可盲从。
3、安装过程记录
安装使用的系统为Centos7 x64
,首先安装基础编译环境。
yum install -y pciutils make gcc numactl numactl-devel
然后进行安装kernel-devel
及其他依赖软件包。
yum install -y perl perl-Carp perl-Encode perl-Exporter perl-File-Path perl-File-Temp perl-Filter perl-Getopt-Long perl-HTTP-Tiny perl-PathTools perl-Pod-Escapes perl-Pod-Perldoc perl-Pod-Simple perl-Pod-Usage perl-Scalar-List-Utils perl-Socket perl-Storable perl-Text-ParseWords perl-Time-HiRes perl-Time-Local perl-constant perl-libs perl-macros perl-parent perl-podlators perl-threads perl-threads-shared libncurses-dev libncurses-devel ncurses-devel
# 当时环境受限,查看版本号,手动下载相应版本的包
uname -a
# 安装 kernel-devel
rpm -ivh kernel-devel-3.10.0-514.26.2.el7.x86_64.rpm
开始安装之前,需要将计划使用到的网卡状态设置为down
。
ifconfig ens37 down
更改参数,添加大页支持相关参数。
vim /etc/sysctl.conf
echo 'vm.nr_hugepages = 120' /etc/sysctl.conf
增强健壮性,启用 Linux
内核异常自动重启机制。
sysctl -w kernel.softlockup_panic=1
echo 'ernel.softlockup_panic=1' /etc/sysctl.conf
接下来解压DPDK
源码,使用官方准备的usertools
进行安装非常方便。
tar -xvf dpdk-18.11.*.tar.xz
cd dpdk-stable-18.11.*/usertools
export RTE_SDK=/root/dpdk-stable-18.11.11
source dpdk-setup.sh
根据自己的环境选择目标编译的架构及方式,我这里选择 [15] x86_64-native-linuxapp-gcc
。
稍作等待,编译时间会受到性能影响各有不同。
编译完成后提示如下,按Enter
键继续下一步。
接下来加载内核模块,选择[18] Insert IGB UIO module
。
与第一步编译相同,操作完成后会有相应的提示,引导进行下一步操作,按Enter
键继续下一步。
接下来设置大内存页,这一步的选项,需要根据系统是否是NUMA
架构来选择,使用如下命令进行判断。
grep -i numa /var/log/dmesg
如果输出的结果为No NUMA configuration found
,说明非NUMA
架构,或特性被禁用。
我的环境输出结果如下图,表示机器是NUMA
架构。
这里根据NUMA
架构的检测结果,进行不同的选择,我这里选择[22]
。
这里根据自身配置来决定,1024
表示申请 2G
大页内存,按Enter
键继续下一步。
接下来输入选项 24
,进行网卡绑定。
该选项会列举出当前系统中的网卡情况:
这里输入PCI
地址,0000:
后面的就可以。
接下来使用选项 23
,查看网卡绑定情况。
可发现绑定的网卡出现在 Network devices using DPDK-compatible driver 列中,说明绑定成功。
接下来可以进行测试了,使用选项[28]
运行 testpmd
进行测试,输入start
开始工作,然后开启发包工具进行发包,发送完成后输入stop
,查看数据包情况是否正确。
可以看到统计的数据包数量正确,说明DPDK
工作正常。
4、坑点记录
如果使用虚拟机环境部署学习的话,可能会遇到两个坑点(可能更多,但是我只遇到两个)。
第一个坑点,错误提示为EAL: Error enabling interrupts for fd
,直接给出该问题的解决方法。
cd dpdk-stable-18.11.*/
sed -i "s/pci_intx_mask_supported(udev->pdev)/pci_intx_mask_supported(udev->pdev)||1/g" ./kernel/linux/igb_uio/igb_uio.c
完成上述操作后,继续前面的步骤正常安装即可。
第二个坑点,部署步骤全部完成,也没有任何报错,但是使用testpmd
进行测试,会发现数据包一直不正确,这个问题的解决方法是直接不配置大页内存或使用non-NUMA
模式的大页内存即可。
5、结语
文中的步骤及描述可能存在错误,如有大佬发现可评论区指正!
文中的命令及步骤可能会因软件版本更新而发生变化,如发现不一样的地方需要进行灵活变通,搭环境不会一直顺利,遇到错误一定要活用搜索引擎,多查一些资料并加以思考,问题总会解决的!
感谢您能看到此处~~~ 关注我们了解更多趣事,我们下期见!
免责声明:本文仅供安全研究与讨论之用,严禁用于非法用途,违者后果自负。
原文始发于微信公众号(宸极实验室):『工具使用』DPDK工具集介绍及安装避坑记录
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论