DPDK概述

DPDK是什么

DPDK(Data Plane Development Kit),是一种用户空间数据平面开发工具包,它的主要目标是为开发人员提供一个创建高性能数据平面应用程序的平台。DPDK开发者能够用C语言、汇编与新型Intel架构的linux内核进行交互,使得数据平面应用程序在高度优化的环境中运行。

背景

随着芯片技术与高速网络接口技术的一日千里式发展,报文吞吐需要处理10Gbps 端口处理能力,世面上大量的 25G、 40G 甚至100G 高速端口已经出现,对于这些高吞吐量的网卡和应用场景往往需要专用的硬件加速器或者专门的网络处理器才能处理数据包的转发,传统的Linux协议栈在处理高流量的网络报文时往往会成为性能瓶颈(频繁的上下文切换和内存拷贝)。2009 年开始,以 Venky Venkastraen,Walter Gilmore,Mike Lynch为核心的 Intel 团队,开始了可行性研究, 希望借助纯软件技术+x86通用服务器(而不是专门的硬件)来实现对高速网络的支持,很快他们取得了一定的技术 突破,设计了运行在 Linux 用户态的网卡程序架构。随后,Intel与 6wind 进行了更进一步的合作,共同交付了早期的 DPDK 软件开发包。2011年开始,  6wind、Windriver、Tieto、Radisys 先后宣布了对 Intel DPDK 的商业服务 支持。Intel 起初只是将 DPDK以源代码方式分享给少量客户,作为评估IA 平台和硬件性能的软件服务模块, 随着时间推移与行业的大幅度接受, 2013年Intel 将 DPDK 这一软件以 BSD 开源方式,分享在Intel的网站上,供开发者免费下载。

项目架构

这部分参考自:About - DPDK

Data Plane Development Kit (DPDK) is a Linux Foundation project that consists of libraries to accelerate packet processing workloads running on a wide variety of CPU architectures.

Project Architecture

At its core, DPDK consists of a set of libraries and drivers that support fast packet processing across a variety of hardware and software environments. This framework includes an Environment Abstraction Layer (EAL) that abstracts hardware details from the applications, allowing developers to write portable code that runs efficiently on different platforms, including x86, ARM, and PowerPC processors.

EAL (Environment Abstraction Layer): Provides a basic interface between DPDK applications and the underlying hardware, abstracting away specifics of the operating system and hardware differences.

Memory Management: Includes hugepage support, memory pools, and buffer management, essential for efficient packet processing.

Poll Mode Drivers (PMDs): These are optimized drivers for various network interfaces, bypassing the kernel’s network stack to reduce latency and increase throughput.

Ring Buffers: Utilized for efficient queueing mechanisms, allowing high-speed inter-process communication.

APIs for Packet Processing: Offers a set of functions and libraries for packet manipulation, including header parsing, packet classification, and packet forwarding.

Crypto and Security: Provides libraries and drivers to support cryptographic operations and secure communication.

Eventdev and Timers: For event-driven programming and time management functionalities, aiding in scheduling and execution of tasks in a timely manner.

DPDK概述_第1张图片

  • Ethernet: 对层二的包进行处理,比如MAC地址的获取和处理等。
  • IP Fragementation: 在IP层面对IP包进行分片和重组(IP Reassembly)。在网络传输中,不同的网络链路和设备(如路由器、交换机)可能对数据包的大小有不同的限制,这个限制称为 MTU(Maximum Transmission Unit,最大传输单元)。如果一个数据包的大小超过了某个链路的 MTU,就需要将这个数据包分成更小的片段,以便通过该链路传输。
  • TCP Segmentation:在TCP层面对数据包进行分片和重组。TCP提供安全的传输机制,仅仅使用IP Fragementation是不够的。
  • Flow Offload:是指DPDK将数据流的处理从 CPU 转移到硬件设备(如网卡、智能网卡、硬件加速器等)上,以提高数据包处理的性能和效率,硬件设备通常具有专门的处理单元,可以高效地执行特定任务,如数据包分类、转发、加密/解密等。
  • Tunnels:DPDK 提供了一系列的库和 API,用于支持隧道协议的封装和解封装。GRE(Generic Routing Encapsulation),VXLAN(Virtual Extensible LAN),IPsec(Internet Protocol Security)。
  • Classification: 在 DPDK中,"Classification"(分类)指的是对网络流量进行分类的过程。分类是网络数据包处理中的一个关键步骤,通过识别和区分不同类型的流量,可以应用不同的处理策略,如转发、过滤、限速、优先级处理等。DPDK 提供了一些库和 API,用于支持高性能的流量分类操作。流量分类是指根据数据包的特征(如源 IP 地址、目的 IP 地址、端口号、协议类型等)对数据包进行分类,以便应用不同的处理策略。
  1. DPDK 提供了 rte_flow API,用于定义和管理流量分类规则。rte_flow API 支持多种匹配条件和处理操作,可以用于实现复杂的流量分类策略。
  2. DPDK 提供了 rte_acl 库,用于实现基于访问控制列表的流量分类。rte_acl 库支持多字段匹配和高效的规则查找,可以用于防火墙、访问控制等场景。
  3. DPDK 提供了 rte_lpm 库,用于实现最长前缀匹配的流量分类。rte_lpm 库通常用于路由查找和 IP 地址匹配。
  • Distribution:在 DPDK(Data Plane Development Kit)中,"Distribution"(分发)通常指的是将网络流量分发到多个处理单元(如 CPU 核心、队列、端口等)进行并行处理的过程。分发机制在高性能网络应用中非常重要,因为它可以有效地利用多核处理器的计算能力,提高数据包处理的吞吐量和效率。
  1. RSS(Receive Side Scaling),RSS 是一种硬件加速的分发机制,用于将接收到的数据包分发到多个接收队列。RSS 通常基于数据包的头部字段(如源 IP 地址、目的 IP 地址、端口号等)进行哈希计算,以实现流量的均匀分发。
  2. Flow Director 是一种高级的硬件加速分发机制,可以根据用户定义的流规则将数据包分发到特定的队列或 CPU 核心。Flow Director 支持更复杂的流分类和分发策略。
  3. 软件分发,DPDK 提供了一些软件分发库,如 rte_distributor 和 rte_ring,用于在软件层面实现数据包的分发和负载均衡。
  • QoS:在 DPDK(Data Plane Development Kit)中,QoS(Quality of Service,服务质量)是指对网络流量进行管理和控制,以确保不同类型的流量能够获得所需的带宽、延迟、抖动和丢包率等服务质量。
  1. DPDK 提供了 rte_flow API,用于定义和管理流量分类规则。
  2. DPDK 提供了 rte_sched 库,用于实现流量整形和带宽管理。
  3. DPDK 提供了 rte_meter 库,用于实现带宽管理和流量计量。
  • Crypto:DPDK 提供了一些库和 API,用于支持高性能的加密和解密操作,特别是在需要高吞吐量和低

你可能感兴趣的:(DPDK,网络)