深入浅出DPDK学习笔记(2)——— 认识DPDK

主流包处理硬件平台

支撑包理的主流硬件平台大致可分为三个方向。
·硬件加速器 (ASIC, FPGA)
·网络处理器 (NPU)
·多核处理器 (IA multi-core Xeon 等)

初识DPDK

传统处理流程和优化

以Linux为例,传统网络设备驱动包处理的动作可以概括如下:
·数据包到达网卡设备。
·网卡设备依据配置进行DMA操作。
·网卡发送中断,唤醒处理器。
·驱动软件填充读写缓冲区数据结构。
·数据报文达到内核协议栈,进行高层处理。
·如果最终应用在用户态,数据从内核搬移到用户态。
·如果最终应用在内核态,在内核继续进行。
优化方式

  • NAPI机制:系统被中断唤醒后,尽量使用轮询的方式一次处理多个据包,直到网络再次空闲重新转入中断等待。
  • netmap:采用共享数据包池的方式,减少内核到用户空间的包复制。

DPDK最佳实践

  • 轮询,这一点很直接,可避免中断上下文切换的开销。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 I/O加速的数据包通过PCIe网卡进入系统内存,PCIe外设到系统内存之间的带宽利用效率、数据传送方式(coalesce操作)等都是直接影响I/O性能的因素。在现代网卡中,往往还支持一些分流(如RSS,FDIR等)和卸载(如Chksum, TSO等)功能。

DPDK框架简介

  • 核心库Core Libs,提供系统抽象、大页内存、缓存池、定时器及无锁环等基础组件。
  • MD库,提供全用户态的驱动,以便通过轮询和线程绑定得到极高的网络吞吐,支持各种本地和虚拟的网卡。
  • Classify 库 , 支 持 精确 匹 配 ( Exact Match ) 、 最 长 匹 配(LPM)和通配符匹配(ACL),提供常用包处理的查表操作。
  • QoS库,提供网络服务质量相关组件,如限速(Meter)和调度(Sched)。

DPDK主要模块分解

数据包处理能力

线速(Wire Speed)是线缆中流过的帧理论上支持的最大帧数。
我 们 用 以 太 网 ( Ethernet ) 为 例 , 一 般 所 说 的 接 口 带 宽 ,1Gbit/s、10Gbit/s、25Gbit/s、40Gbit/s、100Gbit/s,代表以太接口线路上所能承载的最高传输比特率,其单位是bit/s(bit persecond,位/秒)。实际上,不可能每个比特都传输有效数据。以太网每个帧之间会有帧间距(Inter-Packet Gap,IPG),默认帧间距大小为12字节。每个帧还有7个字节的前导(Preamble),和1个字节的帧首定界符(Start Frame Delimiter,SFD)。具体帧格式如下图所示,有效内容主要是以太网的目的地址、源地址、以太网类型、负载。报文尾部是校验码。
以太帧格式
帧转发率

DPDK的方法论

  1. 专用负载下的针对性软件优化
    专用处理器通过硬件架构专用优化来达到高性能,DPDK则利用通用处理器,通过优化的专用化底层软件来达到期望的高性能。这要求DPDK尽可能利用一切平台(CPU,芯片组,PCIe以及网卡)特性,并针对网络负载的特点,做针对性的优化,以发掘通用平台在某一专用领域的最大能力。
  2. 追求可水平扩展的性能
    利用多核并行计算技术,提高性能和水平扩展能力。对于产生的并发干扰,遵循临界区越薄越好、临界区碰撞越少越好的指导原则。数据尽可能本地化和无锁化,追求吞吐率随核数增加而线性增长。
  3. 向Cache索求极致的实现优化性能
    相比于系统优化和算法优化,实现优化往往较少被提及。实现优化对开发者的要求体现在需要对处理器体系结构有所了解。DPDK可谓集大量的实现优化之大成,而这些方法多数围绕着Cache进行,可以说能娴熟地驾驭好Cache,在追求极致性能的路上就已经成功了一半。
  4. 理论分析结合实践推导
    性能的天花板在哪,调优是否还有空间,是否值得花更多的功夫继续深入,这些问题有时很难直接找到答案。分析、推测、做原型、跑数据、再分析,通过这样的螺旋式上升,慢慢逼近最优解,往往是实践道路上的导航明灯。条件允许下,有依据的理论量化计算,可以更可靠地明确优化目标。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高晓伟_Steven

相逢即是有缘,动力源于金钱。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值