DPDK:数据平面开发套件的全面解析
立即解锁
发布时间: 2025-10-26 01:18:08 阅读量: 22 订阅数: 14 AIGC 

### DPDK:数据平面开发套件的全面解析
#### 1. DPDK 概述
DPDK(Data Plane Development Kit)是一个基于用户空间的网络应用软件开发优化套件。它主要使用 FreeBSD 许可证发布大部分运行在用户模式的软件代码,不过像 VFIO、KNI 这类运行在内核模式的少量代码则遵循 GPL 许可。BSD 许可模式为开发者和使用者在商业应用上提供了更大的灵活性。若开发者想贡献新代码,需遵循相应的许可模式。我们可以从 DPDK 官网(www.dpdk.org)下载其源代码直接使用。
目前,DPDK 的开源开发依旧十分活跃,不断有新特性加入和大量代码贡献。自 2016 年起,其开源包每 3 个月发布一次。
#### 2. DPDK 的发展背景
##### 2.1 多核 CPU 时代的挑战
2005 年,软件如何充分利用多核 CPU 优势成为一大挑战。此前,CPU 设计着重提升运行频率,软件无需修改就能获得性能提升。但进入多核时代后,CPU 创新转向在每个新产品发布周期提供更多核心。以英特尔至强处理器为例,其核心数量不断增加,具体情况如下表所示:
| CPU 代码名称 | CPU 制程(nm) | 每个 CPU 最大核心数 | 发布时间 | 超线程 | 双 CPU 服务器总核心数 |
| --- | --- | --- | --- | --- | --- |
| WoodCrest | 65 | 2 | 2006 | 否 | 4 |
| Nehalem - EP | 45 | 4 | 2009 | 是 | 16 |
| Westmere - EP | 32 | 6 | 2010 | 是 | 24 |
| Sandy Bridge - EP | 32 | 8 | 2012 | 是 | 32 |
| Ivy Bridge - EP | 22 | 12 | 2013 | 是 | 48 |
| Haswell - EP | 22 | 18 | 2014 | 是 | 72 |
| Skylake - EP | 14 | 28 | 2017 | 是 | 112 |
| Cascade Lake - EP | 14 | 56 | 2019 | 是 | 224 |
同时,服务器系统中的其他硅组件,如内存和网卡(NIC),性能也有显著提升。以太网技术从早期的 10/100 Mbps 发展到如今的高速网络接口,10 Gbps/25 Gbps 的网卡已在新数据中心服务器中广泛应用,100 Gbps 的超高速网络接口也开始在网络生产系统中使用,但 CPU 频率近 10 年来基本保持不变。以太网端口速度的发展历程如下表:
| 以太网端口速度 | 年份 |
| --- | --- |
| 10 Mb/s | ~1980 |
| 100 Mb/s | ~1995 |
| 1 GbE | ~1998 |
| 10 GbE | ~2002 |
| 25 GbE | ~2016 |
| 40 GbE | ~2010 |
| 50 GbE | ~2018 |
| 100 GbE | ~2011 |
| 200 GbE | ~2017 |
| 400 GbE | ~2017 |
为了支持高速网卡,需要进行大量的软件创新,特别是具备高并行性的软件创新。DPDK 正是在这样的变革时期诞生的,其设计目标之一就是利用多核架构支持高速网卡。
##### 2.2 网络处理器的发展与转变
在网络工作负载的硬件平台方面,网络处理器曾是电信厂商进行数据平面处理的主要选择。英特尔在该领域曾处于领先地位,其英特尔互联网交换架构(IXA)产品线的硅产品,如 IXP4xx、IXP12xx 等,取得了成功。IXP 处理器内部有大量可用于数据平面处理的微引擎,还配备用于控制平面的 XScale 处理器。
然而,2006 年 AMD 在 x86 处理器领域取得领先,英特尔对研发组织和投资组合进行了优化。经评估,IXP 的整体业务潜力不足以支持长期投资,尽管英特尔在 2006 年占据市场份额第一,但市场规模无法支撑其长期增长。于是,英特尔停止了 IXP 产品线的开发,逐渐转向基于 CPU 的解决方案,这就需要采用软件方法来处理网络工作负载。DPDK 就是为应对这一战略转变而出现的解决方案。不过,IXP 技术仍在英特尔发挥作用,为英特尔快速辅助技术(QAT)做出贡献,该技术常见于 QAT PCIe 卡、服务器芯片组或片上系统(SoC)中。
#### 3. DPDK 的历史发展
网络处理器能以线速支持数据包进出系统,例如系统以 10 Gbps 的线速接收 64 字节的数据包,约为 1488 万包每秒(Mpps),但早期基于 x86 服务器平台的 Linux 内核无法实现这一性能。英特尔团队从网卡性能测试代码入手,在 Linux 用户模式下的网卡轮询模式驱动方面取得了突破。传统的网卡驱动运行在内核模式,通过中断唤醒系统处理每个传入的数据包。
早期,CPU 速度快于 I/O 处理单元,基于中断的处理方式非常有效,因为 CPU 资源昂贵,需在不同 I/O 和计算任务间共享。但随着处理器和高速网络接口速度的提升,数据包处理需要支持 10 Gbps 及以上的速度,这超出了传统 Linux 网络软件栈的能力。而且,网络和通信系统需要考虑能源效率,如今大多数网络系统为节能运行频率低于 2.5 GHz。从硅组件角度看,I/O 速度比以前快 10 - 100 倍,给定平台上的 CPU 核心数也增加了多达 100 倍。因此,DPDK 的一个设计基础是分配专用核心对高速网络端口/队列进行轮询,以利用多核架构。
最初,英特尔仅向有限的客户分享早期原型源代码,并以 FreeBSD 许可证发布早期软件包。6wind 在软件的开发和增强方面发挥了重要作用,双方有商业合作。2011 年起,6wind、Wind River、Tieto 和 Radisys 宣布为英特尔 DPDK 提供商业服务支持。后来,英特尔在其网站上分享 DPDK 代码包,供更多开发者免费下载使用。2013 年 4 月,6wind 建立了开源网站 www.dpdk.org,最终 DPDK 成为 Linux 基金会的项目之一。
#### 4. DPDK 的开源发展
如今,任何开发者都可以通过 www.dpdk.org 提交源代码补丁。起初,DPDK 主要聚焦于英特尔服务器平台的优化,包括处理器、芯片组、加速器和网卡的最佳利用。随着众多其他硅公司的广泛参与,DPDK 得到了显著发展,能够支持多种架构和多种 I/O 设备(如网卡、FPGA)。英特尔与 6Wind、Redhat、Mellanox 等众多成员公司和开发者共同推动了 DPDK 软件社区的发展。
2015 年 8 月发布的 DPDK 2.1 版本,吸引了所有主要网卡制造商加入社区,为网卡提供 PMD 支持,如博通、Mellanox、Chelsio 和思科等。除了网卡驱动,DPDK 还扩展到数据包相关的加速技术,英特尔提交了软件模块以启用英特尔 QAT 进行加密加速,用于数据包加密/解密和数据压缩。
在多架构支持方面,DPDK 也取得了很大进展。IBM 中国研究院的朱超博士开始将 DPDK 迁移以支持 Power 架构,飞思卡尔中国的开发者也参与了代码贡献。Tilera 和 EZchip 的工程师努力使 DPDK 在 tile 架构上运行,后来 DPDK 也支持了 ARM 架构。
2017 年,DPDK 成为 Linux 基金会项目。RedHat 先将 DPDK 集成到 Fedora Linux,后又添加到 RedHat Enterprise Linux,许多其他 Linux 操作系统发行版也纷纷效仿。VMware 工程师加入社区,负责 VMXNET3 - PMD 的维护,这是 VMware NSX 中面向客户软件的高性能软件虚拟接口。Canonical 从 Ubuntu 15 开始添加 DPDK 支持。在公共云计算方面,netvsc PMD 可用于微软 Hyper - V,ENA PMD 可支持 AWS 弹性网络适配器。
#### 5. DPDK 的应用拓展
DPDK 设计为在 Linux 用户空间运行,旨在更接近通常也运行在用户空间的应用程序。DPDK 的测试案例显示,单个英特尔核心在极其简化的测试环境下,数据包转发速度约为 57 Mpps。
Open vSwitch 是云基础设施服务器常用的经典开源组件,它集成了 DPDK 以加速虚拟交换性能,在大规模云计算和网络虚拟化系统中得到广泛应用。DPDK 还添加了 virtio - 用户接口,以中立的方式将容器与 OVS - DPDK 连接起来,实现覆盖网络加速。
对于电信设备制造商而言,服务器平台和开源软件(如 Linux、DPDK/VPP/Hyperscan)是设计和提供网络与安全系统的重要新方案,也是云服务模式的重要组成部分。此外,Linux 网络栈也在通过 XDP 和 AF_XDP 进行快速创新,为 Linux 内核栈提供了旁路路径,将网卡管理交还给现有的 Linux 实用工具,为 Linux 和 DPDK 的结合使用提供了新途径。
DPDK 作为过去十年中优秀的开源网络项目之一,已成为通用服务器平台上加速数据包处理性能的广泛使用的软件库(比 Linux 内核网络性能高 10 倍以上),在以下多个场景中得到大量应用:
- 构建网络和安全设备与系统。
- 优化云基础设施的虚拟交换。
- 优化对高 I/O 有需求的存储系统,如 NVM 设备。
- 用于网络功能虚拟化(NFV),基于服务器构建以软件为中心的网络基础设施。
- 提供云网络和安全功能即服务。
#### 6. 相关贡献者
DPDK 的发展离不开众多全球人才的贡献。这本书的内容由许多为英特尔工作的个人共同完成,早期中文版主要由梁存明、胡学坤、曹水旺(华为)和朱鹤清等担任主要编辑。每章都有不同的贡献者,同时还有许多来自英特尔、阿里巴巴、华为等公司的人员为本书内容付出了努力,也借鉴了 Redhat 和 VMware 等开源开发者和产品经理的成果。特别感谢约翰·麦克马纳拉、周林等提供的领导支持,以及罗丹/林丽在中英文版本翻译和审核方面的帮助,张帆(Roy)在英文版技术审核方面也起到了重要作用。
总之,DPDK 在网络领域的发展前景广阔,它将继续在网络应用的优化和创新中发挥重要作用。随着技术的不断进步,我们有理由期待 DPDK 带来更多的惊喜和突破。
#### 7. DPDK 的技术优势与原理
DPDK 之所以能在网络应用中取得优异的性能,与其独特的技术优势和原理密不可分。
##### 7.1 多核架构的高效利用
DPDK 的核心设计理念之一是充分利用多核 CPU 的并行处理能力。在传统的网络处理模式中,单核 CPU 往往成为性能瓶颈,而 DPDK 通过将不同的任务分配到多个核心上,实现了数据包处理的并行化。例如,一个核心可以专门负责数据包的接收,另一个核心负责数据包的转发,还有核心负责数据包的处理和分析等。这种分工协作的方式大大提高了数据包处理的效率。
下面是一个简单的流程图,展示了 DPDK 多核架构下数据包处理的基本流程:
```mermaid
graph LR
A[数据包接收核心] --> B[数据包转发核心]
B --> C[数据包处理核心]
C --> D[数据包分析核心]
```
##### 7.2 用户空间运行模式
DPDK 主要运行在 Linux 用户空间,这与传统的内核模式运行的网络驱动有很大的不同。在用户空间运行可以减少内核上下文切换的开销,提高系统的响应速度。因为内核上下文切换需要保存和恢复大量的系统状态信息,会消耗大量的 CPU 时间。而 DPDK 在用户空间直接与硬件进行交互,避免了频繁的内核上下文切换,从而提高了数据包处理的性能。
##### 7.3 轮询模式驱动
DPDK 采用轮询模式驱动(PMD)来处理数据包。与传统的中断模式驱动不同,轮询模式驱动会不断地检查网卡是否有新的数据包到达,而不是等待中断信号。这种方式可以避免中断处理的延迟,提高数据包处理的实时性。当网络流量较大时,轮询模式驱动的优势更加明显,能够确保数据包的及时处理。
#### 8. DPDK 的性能优化策略
为了进一步提高 DPDK 的性能,开发者可以采用以下几种优化策略:
##### 8.1 缓存和内存优化
合理利用缓存和内存是提高 DPDK 性能的关键。DPDK 提供了一系列的缓存和内存管理机制,如大页内存的使用。大页内存可以减少页表项的数量,降低内存访问的开销,提高内存访问的效率。开发者可以通过以下步骤来使用大页内存:
1. 配置系统支持大页内存:在 Linux 系统中,可以通过修改 `/etc/sysctl.conf` 文件来配置大页内存的数量。
2. 挂载大页内存:使用 `mount` 命令将大页内存挂载到指定的目录。
3. 在 DPDK 应用中使用大页内存:在 DPDK 应用的初始化过程中,指定使用大页内存。
##### 8.2 并行处理优化
DPDK 支持多种并行处理方式,如基于核心的并行和基于网卡的并行。开发者可以根据具体的应用场景选择合适的并行处理方式。例如,在处理大量数据包时,可以采用基于核心的并行方式,将不同的数据包处理任务分配到多个核心上;在处理多个网卡的数据包时,可以采用基于网卡的并行方式,每个网卡由一个或多个核心负责处理。
##### 8.3 同步机制优化
在多核心并行处理的环境中,同步机制是必不可少的。DPDK 提供了多种同步机制,如锁、原子操作等。开发者需要根据具体的应用场景选择合适的同步机制,避免同步开销过大影响性能。例如,在对共享资源的访问频率较低时,可以使用锁机制;在对共享资源的访问频率较高时,可以使用原子操作。
#### 9. DPDK 的未来发展趋势
随着网络技术的不断发展,DPDK 也将面临新的挑战和机遇,未来可能会朝着以下几个方向发展:
##### 9.1 支持更多的硬件平台
目前,DPDK 已经支持多种硬件平台,但随着新的硬件技术的不断涌现,如新型网卡、FPGA 等,DPDK 需要进一步扩展对这些硬件平台的支持,以充分发挥硬件的性能优势。
##### 9.2 与新兴技术的融合
DPDK 可能会与新兴技术如人工智能、机器学习等进行融合。例如,利用人工智能技术对数据包进行智能分析和处理,提高网络的安全性和性能。
##### 9.3 进一步优化性能
随着网络流量的不断增加,对 DPDK 的性能要求也会越来越高。未来,DPDK 可能会进一步优化其内部算法和架构,提高数据包处理的效率和吞吐量。
#### 10. 总结
DPDK 作为一个基于用户空间的网络应用软件开发优化套件,在网络领域已经取得了显著的成就。它通过利用多核架构、用户空间运行模式和轮询模式驱动等技术优势,实现了高效的数据包处理。同时,通过缓存和内存优化、并行处理优化和同步机制优化等策略,进一步提高了性能。在未来,DPDK 将继续支持更多的硬件平台,与新兴技术融合,并不断优化性能,为网络应用的发展提供更强大的支持。
以下是 DPDK 发展历程的关键时间节点总结表格:
| 时间 | 事件 |
| --- | --- |
| 约十年前 | DPDK 作为英特尔的一个小软件项目启动 |
| 2015 年 4 月 | 首届 DPDK 中国峰会在北京举行 |
| 2016 年 | 中文版 DPDK 书籍出版 |
| 2015 年 8 月 | DPDK 2.1 版本发布 |
| 2016 年 | 英特尔停止 IXP 产品线开发 |
| 2017 年 | DPDK 成为 Linux 基金会项目 |
| 2019 年 | DPDK 已广泛应用于云、电信和企业网络及安全系统 |
总之,DPDK 凭借其独特的技术优势和不断发展的潜力,将在未来的网络世界中扮演越来越重要的角色,为网络应用的优化和创新带来更多的可能性。
0
0
复制全文


