DPDK简介
DPDK(Data Plane Development Kit)数据平面开发工具包,是一个开源软件项目。DPDK通过维护一系列能够加速多核CPU数据包处理的库,提供数据处理框架。DPDK通过绕过内核进行数据处理,表现出了比内核中断处理更高的效率。
DPDK项目架构
-
EAL
EAL(Environment Abstraction Layer),EAL层负责访问低级资源包括硬件和内存空间。EAL屏蔽了内核具体细节,提供一个通用的接口访问库和操作系统。
-
Memory Management
内存管理包括巨页支持、内存池、缓冲区管理。
-
Poll Mode Drivers
为各种网络接口提供优化驱动,绕过内核网络栈减少延迟增加吞吐量。
-
Ring Buffers
利用高效的队列机制提供高速进程间通信。
-
API for Packet Processing
提供一系列包操纵库和函数的集合包括头解析,包分类和包转发。
-
Crypto and Security
提供加密图像操作和安全通信的库和驱动
-
Eventdev and Timers
提供事件驱动和时间管理功能
从这幅图我们可以看出,其实DPDK作用是截获网卡,此时内核就网络模块会无法发现截获的网卡,从而绕过内核网络处理,利用用户协议栈进行解析,解析完毕之后直接发给应用层。
DPDK静态库
-
librte_eal
提供访问硬件资源如内存、定时器和日志的基础API。
-
librte_mempool
提供高效包处理内存池管理库。
-
librte_ring
提供实现无锁FIFO先进先出队列以及DPDK组件间的高速通信相关的库。
-
librte_mbuf
提供包缓冲区处理包括接收和传输相关的库。
-
librte_ethdev
提供配置和查询以太网设备API包括接收和发送包。
-
librte_net
提供网络协议处理相关的库。
-
librte_ip_frag
提供IP分片和重组相关的库,支持IIPV4、IPV6。
-
librte_kni
提供DPDK应用和Linux内核网络栈间的通信,主要用于已有linux网络服务交互和调试。