DPDK主要以IA(Intel Architecture)多核处理器为目标平台以,应对高性能数据包处理问题。
其核心组件主要如图所示:
其利用了大量的有助于包处理的软硬件特性,如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主要模块分解:
核心库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、理论分析结合实践推导。