<-- Home

DPDK简单介绍

DPDK是用于报文快速处理的库和驱动程序集。主要运行在x86平台。

在导师的带领下,开始了解这个叫做DPDK的报文快速处理库,这里做一下记录。

目录


DPDK是什么

Intel® DPDK(Intel Data Plane Development Kit),是intel提供的数据平面开发工具集。

它为Intel architecture(IA)处理器架构下用户空间高效的数据包处理提供库函数和驱动的支持。

它不同于Linux系统以通用性设计为目的,而是专注于网络应用中数据包的高性能处理。

具体体现在DPDK应用程序是运行在用户空间上利用自身提供的数据平面库来收发数据包,绕过了Linux内核协议栈对数据包处理过程。

主要库

  • 多核框架(Multicore Framework)
  • 大页内存管理(Huge Page Memory)
  • 环形缓冲区(Ring Buffers)
  • 轮询驱动(Poll-mode Drivers)

DPDK用于

  • 使用最小的CPU时间接收和发送数据包
  • 开发快速的抓包算法
  • 运行第三方快速路径栈

背景

Linux传统网络设备驱动包处理的动作可以概括如下:

  1. 数据包到达网卡设备。
  2. 网卡设备依据配置进行DMA操作。
  3. 网卡发送中断,唤醒处理器。
  4. 驱动软件填充读写缓冲区数据结构。
  5. 数据报文达到内核协议栈,进行高层处理。
  6. 如果最终应用在用户态,数据从内核搬移到用户态。
  7. 如果最终应用在内核态,在内核继续进行。

DMA:Direct Memory Access,直接内存存取,一种不经过CPU而直接从内存存取数据的数据交换模式。

早期

CPU运行速度远高于外设访问,所以中断处理方式十分有效。

网卡收到一定的数据后,驱动会产生中断,然后交由CPU来处理。

目前

芯片技术与高速网络接口技术的一日千里式发展,市面上已经出现大量的25Gbit/s、40Gbit/s甚至100Gbit/s高速端口。

主流处理器的主频仍停留在3GHz以下。

基于能效比经济性的考量,系统选型时大多选取2.5GHz以下的芯片,保证合适的性价比。

网络接口带宽从千兆向万兆迈进,报文吞吐需要高达10Gbit/s的端口处理能力,驱动频繁触发中断,中断带来的开销变得突出。大量数据到来会触发频繁的中断开销,导致系统无法承受。

网络和通信节点的设计I/O超越CPU的运行速率。

一些措施

Linux内核的NAPI机制,不采用中断的方式读取数据,而代之以 POLL 的方法来轮询数据,一次尽可能处理多个数据包,直到网络再次空闲重新转入中断等待。NAPI用于高吞吐的场景,效率提升明显。

Linux内存零拷贝(zero copy)机制,减少甚至完全避免不必要 CPU 数据拷贝操作。

CPU亲和与绑定,将进程/线程与CPU绑定,提高了CPU Cache的命中率,从而减少内存访问损耗,提高程序的速度。

intel在这些措施上加以拓展完善,推出了DPDK。


DPDK的关键技术

DPDK用的的关键技术如下:

  • 轮询,可避免中断上下文切换的开销。
  • 用户态驱动,在这种工作方式下,既规避了不必要的内存拷贝又避免了系统调用。
  • 亲和性与独占,利用线程的CPU亲和绑定的方式,特定任务可以被指定只在某个核上工作。好处是可避免线程在不同核间频繁切换,减少时间开销。
  • 降低访存开销,利用内存大页(Linux HugePages)降低TLB miss,利用内存多通道的交错访问提高内存访问的有效带宽,利用对于内存非对称性的感知避免额外的访存延迟。
  • 结构的Cache Line对齐、多核间访问避免跨Cache Line共享、适时地预取数据、多元数据批量操作。
  • Intel处理器的最新指令集优化加速。

结论

DPDK + 数据包处理软件 = 高性能网络堆栈

DPDK为数据包处理带来了巨大的性能提升。


参考

《深入浅出DPDK》