https://www.sdnlab.com/20524.html
本章分为两节,第一节介绍数据平面开发套件DPDK(Data Plane Development Kit)的基础知识,第二节介绍DPDK盒子的使用方法。
一、DPDK简介
本节首先介绍DPDK出现的行业背景,然后介绍DPDK概述、DPDK关键技术、DPDK开源代码,最后介绍DPDK Lib库。
1.1 DPDK背景
在过去10年里,以太网接口技术也经历了飞速发展。从早期主流的10Mbit/s与100Mbit/s,发展到千兆网(1Gbit/s)。到如今,万兆(10Gbit/s)网卡技术成为数据中心服务器的主流接口技术,近年来,Intel等公司还推出了40Gbit/s、100Gbit/s的超高速网络接口技术。而CPU的运行频率基本停留在10年前的水平,严重阻碍了速度的提升,为了迎接超高速网络技术的挑战,DPDK(Data Plane Development Kit),一个以软件优化为主的数据面技术应时而生,它为今天NFV(Network Function Virtualization)技术的发展提供了绝佳的平台可行性。
网络处理器能够迅速将数据报文接收入系统,比如将64字节的报文以10Gbit/s的线速也就是14.88Mp/s(百万报文每秒)收入系统,并且交由CPU处理,这在早期Linux和服务器平台上无法实现。传统上,网卡驱动程序运行在Linux的内核态,以中断方式来唤醒系统处理,这和历史形成有关。早期CPU运行速度远高于外设访问,所以中断处理方式十分有效,但随着芯片技术与高速网络接口技术的一日千里式发展,报文吞吐需要高达10Gbit/s的端口处理能力,市面上已经出现大量的25Gbit/s、40Gbit/s甚至100Gbit/s高速端口,主流处理器的主频仍停留在3GHz以下。I/O超越CPU的运行速率,是横在行业面前的技术挑战。用轮询来处理高速端口开始成为必然,这构成了DPDK运行的基础。
在理论框架和核心技术取得一定突破后,Intel与6wind进行了合作,交由在法国的软件公司进行部分软件开发和测试,6wind向Intel交付了早期的DPDK软件开发包。2011年开始,6wind、Windriver、Tieto、Radisys先后宣布了对Intel DPDK的商业服务支持。Intel起初只是将DPDK以源代码方式分享给少量客户,作为评估IA(Intel Architecture)平台和硬件性能的软件服务模块,随着时间推移与行业的大幅度接受,2013年Intel将DPDK这一软件以BSD开源方式分享在Intel的网站上,供开发者免费下载。2013年4月,6wind联合其他开发者成立www.dpdk.org的开源社区,DPDK开始走上开源的大道。
1.2 DPDK概述
什么是DPDK?对于用户来说,它可能是一个性能出色的包数据处理加速软件库;对于开发者来说,它可能是一个实践包处理新想法的创新工场;对于性能调优者来说,它可能又是一个绝佳的成果分享平台。当下火热的网络功能虚拟化,则将DPDK放在一个重要的基石位置。虽然很难用短短几语就勾勒出DPDK的完整轮廓,但随着认识的深入,我们相信你一定能够认可它传播的那些最佳实践方法,从而将这些理念带到更广泛的多核数据包处理的生产实践中去。DPDK最初的动机很简单,就是证明IA多核处理器能够支撑高性能数据包处理。随着早期目标的达成和更多通用处理器体系的加入,DPDK逐渐成为通用多核处理器高性能数据包处理的业界标杆。
1.3 DPDK关键技术
如今,DPDK 应该已经很好地回答了IA多核处理器是否可以应对高性能数据包处理这个问题。而解决好这样一个问题,也不是用了什么凭空产生的特殊技术,更多的是从工程优化角度的迭代和实践的融合。简单地盘点一下这些技术,归纳如下。
- 轮询,这一点很直接,可避免中断上下文切换的开销。之前提到Linux也采用该方法改进对大吞吐数据的处理,效果很好。
- 用户态驱动,在这种工作方式下,既规避了不必要的内存拷贝又避免了系统调用。一个间接的影响在于,用户态驱动不受限于内核现有的数据格式和行为定义。对Mbuf头格式的重定义、对网卡DMA操作的重新优化可以获得更好的性能。而用户态驱动也便于快速地迭代优化,甚至对不同场景进行不同的优化组合。
- 亲和性与独占,DPDK工作在用户态,线程的调度仍然依赖内核。利用线程的CPU亲和绑定的方式,特定任务可以被指定只在某个核上工作。好处是可避免线程在不同核间频繁切换,核间线程切换容易导致因Cache Miss和Cache Write Back造成的大量性能损失。如果更进一步地限定某些核不参与Linux系统调度,就可能使线程独占该核,保证更多Cache Hit的同时,也避免了同一个核内的多任务切换开销。
- 降低访存开销,网络数据包处理是一种典型的I/O密集型(I/O Bound)工作负载。无论是CPU指令还是DMA,对于内存子系统(Cache+DRAM)都会访问频繁。利用一些已知的高效方法来减少访存的开销能够有效地提升性能。比如利用内存大页能有效降低TLB Miss,比如利用内存多通道的交错访问能有效提高内存访问的有效带宽,再比如利用对于内存非对称性的感知可以避免额外的访存延迟。
- 软件调优,调优本身并不能说是最佳实践。这里其实指代的是一系列调优实践,比如结构的Cache Line对齐,比如数据在多核间访问避免跨Cache Line共享,比如适时地预取数据,再如多元数据批量操作。这些具体的优化策略散布在DPDK各个角落。
- 利用IA新硬件技术,IA的最新指令集以及其他新功能一直是DPDK致力挖掘数据包处理性能的源泉。拿Intel ? DDIO技术来讲,这个Cache子系统对DMA访存的硬件创新直接助推了性能跨越式的增长。有效利用SIMD(Single Instruction Multiple Data)并结合超标量技术(Superscalar)对数据层面或者对指令层面进行深度并行化,在性能的进一步提升上也行之有效。另外一些指令(比如cmpxchg),本身就是Lockless数据结构的基石,而Crc32指令对与4 Byte Key的哈希计算也是改善明显。
- 充分挖掘网卡的潜能,经过DPDK I/O加速的数据包通过PCIe网卡进入系统内存,PCIe外设到系统内存之间的带宽利用效率、数据传送方式(coalesce操作)等都是直接影响I/O性能的因素。在现代网卡中,往往还支持一些分流(如RSS,FDIR等)和Offload(如Checksum,TSO等)功能。DPDK充分利用这些硬件加速特性,帮助应用更好地获得直接的性能提升。
随着DPDK不断丰满成熟,也将自身逐步拓展到更多的平台和场景。从Linux到FreeBSD,从物理机到虚拟机,从加速网络I/O到加速存储I/O,DPDK在不同纬度发芽生长。在NFV大潮下,无论是NFVI(例如,Virtual Switch)还是VNF,DPDK都用坚实有力的性能来提供基础设施保障。
1.4 DPDK源码介绍
本节以Release 17.02.0版本为例,介绍DPDK源码包含的以下几个子目录。
文件介绍:
- lib:DPDK库的源码。
- drivers:DPDK轮询驱动的源码。
- app:DPDK应用程序的源码(自动化测试)。
- examples:DPDK应用程序样例源码。
- devtools:开发DPDK代码后,检测代码是否符合规范的脚本。
- usertools:DPDK的常用安装配置脚本。
- Config、buildtools、mk:框架相关的Makefiles,脚本和配置文件。
1.5 DPDK Lib库介绍
DPDK库文件放在$(RTE_SDK)/lib目录中。习惯上,我们调用库的代码来提供API给应用程序。通常,这里会产生一个静态库(.a),不过内核模块也在这个文件夹下。
在下面表格中对Lib库的功能做进一步说明。
二、DPDK盒子
本节主要介绍盒子的硬件结构和连接使用方法。
2.1 DPDK盒子介绍
简单来说,DPDK盒子是一个定制的、Mini的硬件盒子,预装Linux系统和DPDK软件,通过该盒子,使用者可以学习如何使用DPDK,也可以方便的开发基于DPDK的应用。DPDK盒子已经开发过三代了,下面简要介绍一下。
第一代盒子
第一代DPDK盒子的组成:一个单板计算机(MinnowboardTurbot);Intel?Atom? E3826处理器(1M缓存,1.46GHz);SilverjawLure子板,Mini PCI槽;英特尔以太网控制器I350(双千兆),插入迷你PCI槽。
第二代盒子
第二代DPDK盒子(RCC-DFF 2220系统)组成:双核Intel?Atom?C2338 CPU,2GB内存,2GbE以太网端口,Nano-ITX外形,预装DPDK软件。
第三代盒子
第三代DPDK盒子(DPDK-2340四核系统)组成:四核Intel? Atom? E3845 CPU,2GB内存,2GbE i210以太网端口,可支持四个RSS序列,预装32GB SSD & DPDK。这次升级,无论处理器,内存,还是外观都得到了大大加强。
第三代DPDK盒子(DPDK-2340四核系统)硬件规格:
- 英特尔四核Atom E3845 CPU,1.91GHz主频,带有AES-NI指令集
- 紧凑型nano-ITX外形120x120mm
- 2GB DDR3L non-ECC内存,1067MT/s,内置固定内存(不可扩展)
- 32GB M.2 SSD
- 2x 10/100 /1000Base-TX GbE以太网端口(Intel?以太网控制器I210)
- 阳极氧化黑色外壳(美国制造)
- 1x USB 2.0端口
- 1x USB 3.0端口
- 高速和低速MinnowBoard Lure连接器
- 电源/状态LED
- 控制台:HDMI
- 视频:Intel高清显卡1xHDMI输出端口
- AC/DC自适应开关电源适配器
- 运行温度:0°C至70°C
- FCC Part 15 Class A
- CE Class A
- IEC-60950
- RoHS/WEEE
使用MinnowBoard Turbot四核心板——开源硬件嵌入式平台,可用于基于4 Core Intel Atom E3845 CPU的DPDK盒子中。
2.2 DPDK盒子使用指导
第一代DPDK盒子连接方法
第一代盒子的使用方法可参考第二代盒子。
第二代DPDK盒子连接方法
1. 通过USB2控制线连接电脑和DPDK盒子。
2. 在电脑上下载并安装USB驱动(cp210x USB to UART)。
3. 打开Windows设备管理器并查看COM端口分配。
4. 打开Console客户端工具(如putty、Xshell),选择“Serial”,并将速度(波特率)设置为115200,端口号(根据实际查到的)设置为“COM3”,然后点击“Open”连接盒子。
5. 登陆客户端,用户名“root”,密码“password”。
6. 登录盒子后,可以运行dpdk文件下官方的Examples,如下图所示。
7. 例如,要运行helloworld用例,可按照下面步骤,先编译后执行。
第三代DPDK盒子连接方法
1. 使用HDMI转VGA连接线连接显示器和DPDK盒子。
2. 将键盘和鼠标的USB连接线连接DPDK盒子后面的USB口。
3. 登陆客户端,用户名“test”,密码“tester”。
4. 登录盒子后,可以运行dpdk文件官方的Examples,如下图所示。
5. 例如,要运行helloworld用例,可按照下面步骤,先编译后执行。
其他用例的执行可参考dpdk.org官方网站,或本系列文档第二部分内容的实例讲解。
DPDK盒子功能介绍
DPDK盒子第一个用处就是作为学习DPDK的平台,对于刚刚接触DPDK的初学者,该平台主要的好处是提供了一个“已知”系统:可预测网络界面设置;可预测资源用性;出错范围有限;应用程序以标准方式运行,有已知标记知道要做什么,知道有哪些资源,培训者知道有多少内存,知道典型问题是什么,运行系统时培训者对于能进行的主题很熟悉。如果要建立许多驱动,可以挑选一些驱动,这是一个“已知”系统,可以限制出错范围。对于学生而言,还有一大优势是可以看到、感受到这个盒子,亲自建立系统,获得更多亲身感知的经验。
除了初学者学习如何使用DPDK之外,开发者也可以在小盒子上轻松开发基于DPDK的小微型应用并进行部署,例如,做成一个家庭或者小型企业的网关,充当防火墙,进行流量监控等等。鉴于DPDK盒子的便携性,开发者还可以使用基于DPDK的Pktgen,轻松将DPDK盒子改装成一个发包器,用于支持客户,现场Demo或者其他需要便携式发包仪器的场合。
经过本章的介绍,初学者已经对DPDK原理和DPDK盒子的使用有了基本的认识,更具体的应用案例将在后续的第二章、第三章进行详细介绍,敬请关注。
说明:第三代DPDK盒子因没有安装网卡驱动,导致盒子暂时无法连接外网,用户如果需要连接网络或者下载文件到盒子里,可以用以下方法解决。
1.下载igb的网卡驱动,并拷贝到盒子里,安装驱动,把其中一个网卡绑定到igb驱动,该网口就可以连网使用。
2.先将文件下载到U盘,再通过USB拷贝到盒子里。
3.有USB WiFi的用户,将USB WiFi插到盒子USB口,连接网络。
参考文献:
朱河清等.深入浅出DPDK[M].北京:机械工业出版社,2016:1-10