专栏首页SDNLABDPDK盒子使用手册——DPDK入门

DPDK盒子使用手册——DPDK入门

本章分为两节,第一节介绍数据平面开发套件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

本文分享自微信公众号 - SDNLAB(SDNLAB),作者:冷志源@未来网络

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-02-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SDN实战团技术分享(三十八):DPDK助力NFV与云计算

    DPDK最初动机很简单,网络处理器的软件解决方案,证明IA多核处理器能够支撑高性能数据包处理。 什么是DPDK?对于用户来说,它可能是一个出色的包数据处理性能加...

    SDNLAB
  • SDN实战团分享(二十七):Cisco ACI技术解析

    在网络厂商的圈子里,其实SDN早就不是什么新概念了。ForCES作为“SDN上古神兽”在2004年就有了第一版RFC,2006年Juniper向IETF提交NE...

    SDNLAB
  • 软件定义时代的数据中心安全

    据IDC预测,从2010年到2020年数据总量将从4.4兆GB成长到44兆GB,作为数据信息资源集散地的数据中心表示压力山大。 有数据显示2018年35%的消费...

    SDNLAB
  • DPDK内存篇(一): 基本概念

    内存管理是数据面开发套件(DPDK)的一个核心部分,以此为基础,DPDK的其他部分和用户应用得以发挥其最佳性能。本系列文章将详细介绍DPDK提供的各种内存管理的...

    Linux阅码场
  • 【C语言笔记】#define与typedef的区别?

    这里所说的字符串是一般意义上的字符序列,不要和C语言中的字符串等同,它不需要双引号。

    正念君
  • 掌握多云取决于兼容文化

    如今,云计算使用率正在上升。很多组织正在增加云计算支出、云计算的应用程序范围,甚至与他们合作的云计算供应商的数量。

    静一
  • k8s 调度

    经过预选策略(Predicates)对节点过滤,获取节点列表,再对符合需求节点列表进行打分,最终选择Pod调度到一个分值最高节点。

    程序猿Damon
  • Oracle 11g RAC之HAIP相关问题总结

    环境:RHEL 6.4 + GI 11.2.0.4 + Oracle 11.2.0.4 对有关HAIP相关问题的总结,包括禁用/启用HAIP,修改ASM资源的依...

    Alfred Zhao
  • 程序猿一定要知道的&过年&习俗

    农历正月初一是春节,又叫阴历(农历)年,俗称“过年”。这是我国民间最隆重、最热闹的一个古老传统节日。春节是汉族最重要的节日。 今天是大年三十 辛辛苦苦忙了一年...

    互扯程序
  • angular2关于自动获取配置路由里面titile的值《路由跳转,页面title变化》

    用户1437675

扫码关注云+社区

领取腾讯云代金券