数据平面开发工具包 (DPDK) 是一个 Linux Foundation 项目,它由多个库组成,用于加速在各种 CPU 架构上运行的数据包处理。
网络性能、吞吐量和延迟对于各种应用程序至关重要,包括无线和有线基础设施、路由器、负载均衡器、防火墙、视频流和 VoIP。DPDK(数据平面开发工具包)是由 Linux 基金会托管的开源项目,它提供了一个强大的框架,可以提高各种 CPU 架构(如 Intel x86、ARM 和 PowerPC)上的数据包处理速度。该框架是快速开发高速数据包网络应用程序的关键。
通过运行 DPDK,新用户可以显著提高其网络应用程序的性能,因为其高效的“运行-完成”模型和优化的库可确保预先分配所有必要的资源。
项目架构
DPDK 的核心由一组库和驱动程序组成,这些库和驱动程序支持跨各种硬件和软件环境进行快速数据包处理。该框架包括一个环境抽象层 (EAL),用于从应用程序中抽象出硬件细节,使开发人员能够编写在不同平台(包括 x86、ARM 和 PowerPC 处理器)上高效运行的可移植代码。
EAL (Environment Abstraction Layer):在 DPDK 应用程序和底层硬件之间提供基本接口,抽象出操作系统和硬件差异的细节。
内存管理:包括巨页支持、内存池和缓冲区管理,这对于高效的数据包处理至关重要。
轮询模式驱动程序 (PMD):这些是针对各种网络接口优化的驱动程序,绕过内核的网络堆栈以减少延迟并提高吞吐量。
环形缓冲区:利用高效的队列机制,允许高速进程间通信。
用于数据包处理的 API:提供一组用于数据包操作的函数和库,包括标头解析、数据包分类和数据包转发。
加密和安全性:提供库和驱动程序以支持加密操作和安全通信。
Eventdev 和 Timers:用于事件驱动的编程和时间管理功能,帮助及时安排和执行任务。
库
通过利用 DPDK 库,开发人员可以创建优化的数据包处理路径,管理用于异步执行函数的计时器,并利用为快速数据包处理量身定制的各种驱动程序和库。
1、librte_eal – 环境抽象层:为 DPDK 提供基础 API,便于访问内存、计时器和日志等硬件资源。
2、librte_mempool – 内存池管理器:管理内存池以实现高效、快速的数据包处理。
3、librte_ring – Ring Buffer Manager:实现无锁 FIFO 队列,实现各种 DPDK 组件之间的高速通信。
4、librte_mbuf – 数据包缓冲区管理:处理数据包缓冲区,这对于数据包传输和接收至关重要。
5、librte_ethdev – 以太网设备 API:提供用于配置和查询以太网设备的 API。它支持各种操作,包括发送和接收数据包。
6、librte_net – 网络帮助程序库:提供用于处理网络协议的帮助程序 API。
7、librte_ip_frag – IP 分片和重组:处理 IP 数据包的分片和重组,同时支持 IPv4 和 IPv6。
8、librte_kni – 内核网络接口:促进 DPDK 应用程序和 Linux 内核网络堆栈之间的通信,主要用于调试或与现有 Linux 网络服务连接。
dpdk应用示意图