dpdk核心组件及技术介绍

时间:2024-03-31 19:28:37

DPDK主要以IA(Intel Architecture)多核处理器为目标平台以,应对高性能数据包处理问题。

其核心组件主要如图所示:

dpdk核心组件及技术介绍

其利用了大量的有助于包处理的软硬件特性,如huge page 、缓存行对齐、线程绑定、预取、NUMA、IA最新指令利用、Intel DDIO、内存交叉访问等。

下面部分摘自Intel DPDK官网

ring 管理器(librte_ring):环结构在有限大小的table(内存表??)中提供无锁的FIFO API。其比无锁队列有一些优点:

更容易实施,适应批量操作,更快。内存池管理器(librte_mempool)使用一个环,可以将其用作在逻辑内核上连接在一起的的内核之间的通信机制。

内存池管理器(librte_mempool)

内存池管理器负责分配内存中的对象池。一个内存池被命名并使用环来存储free对象。也提供乐一些其他可选的服务,例如每个内核对象缓存和对齐的帮助器以确保对象被填充在所有RAM通道上均匀分布。

网络数据包缓冲区管理(librte_mbuf)

mbuf库提供了创建和销毁DPDK应用程序用来存储信息的缓冲区。消息缓存在启动时被创建,并使用mempool库存储在mempool中。                                                                                                                                                                      该库提供了一个API来分配/释放mbufs,操纵通用消息缓冲区的控制消息缓存,以及用于传输网络数据包的数据包缓存。

时间管理器(librt_timer)

该库为DPDK执行单元提供定时器服务,提供异步执行功能的能力。它可以是周期性的函数调用,亦可以是一次性调用。使用环境抽象层(EAL)提供的定时器接口来获取精确的时间参考,并可以在需要的时候在每个内核启用。


DPDK主要模块分解:

dpdk核心组件及技术介绍

核心库Core Libs,提供系统抽象、huge page 、缓存池、定时器及无锁环等基础组件。

PMD库,提供全用户态的驱动。方便轮询和线程绑定得到极高的网络吞吐,支持各种本地和虚拟的网卡。

Classify库,提供常用包处理的查表操作。

QoS库,提供网络服务质量相关组件,比如限速(Meter)和调度(Sched)。

总结:DPDK采用了很多具体优化方法来达到性能的提升,有些是利用IA软件优化的最佳实践方法,还有一些是利用了IA的处理器特性。

大的方向主要是:

1、专用负载下的针对性软件优化

专用处理器通过硬件架构专用优化来达到高性能,DPDK则利用通用处理器,通过优化的专用化底层软件来达到期望的高性能。及DPDK尽可能利用一切平台,针对网络负载的特性,做出针对性的优化,以发掘通用平台在某一领域的最大能力。

2、利用多核的特性,追求并行性

利用多核并行计算技术,提高性能和水平扩展能力。对于可能的并发干扰,遵循临界区碰撞越少越好的原则。数据尽可能本地化和无锁化,追求吞吐率随核数增加而线性增长。

3、向Cache追求极致的性能优化

DPDK集成了大量的实现优化,这些方法多数围绕Cache进行,Cache的预取,Cache一致性,使用huge page,DDIo技术以及NUMA系统。

4、理论分析结合实践推导。