译作:了解下DPDK技术基本原理。

DPDK用户态网络通信

全称Data Plane Development Kit,DPDK是在用户空间操作的一项完全开源的技术。其架构支持多商户、异构,并且定位于实现高IO性能以及高网络处理速率(都是网络领域的重要指标)。其被Intel首创于2010年,后于2017年四月划归给了Linux基金会。这一举措将其定位为了Linux顶级项目。本身DPDK是为了电信架构设计的,但是如今却应用在了各个领域,包括不限于云架构、数据中心、基础设施、容器。本文,我们就来探究下2017年八月后发布的DPDK17.08版本的特性以及设计。

无疑,这个技术是为了实现高速、高性能的网络通信。

而DPDK为了实现这个大目标有这么几个基本的做法:

  1. DPDK完全在用户态下进行网络通信,无需切换内核态,少了切换成本。
  2. 利用了内存大页机制,比如使用2MB或者1GB的大页,在通信的时候相比Linux标准页(默认为4KB)仅需要更少的页即可完成工作,因此TLB页表快取不命中的概率大大降低了(性能自然就提升了)。
  3. 更底层的优化就是代码优化了。比如共享内存缓存行(避免伪共享),这样可以更高效地使用缓存,以及可以提前读缓存,优化策略诸如此类。

DPDK技术近些年变得流行起来,被应用在了很多开源项目中。许多Linux发行版本(Fedora、Ubuntu)增加了内置支持。

DPDK核心包括了库、驱动(也叫PMD Poll Mode Drivers)。本文撰写时为35个核心库。并且通过接口的形式抽象化了技术能力,将底层实现与其发布屏蔽,这样对于多个厂商来说更加灵活。

DPDK开发模式

DPDK主要是C写的,其中也有部分Python写的工具。代码贡献、补丁、讨论都通过邮件的方式进行。补丁主要通过RFC的方式获取反馈。为了尽可能保证代码的稳定,我们倾向于尽可能保留ABI二进制接口。开发者们需要严格遵守ABI退出过程,包括需要提前通过邮件列表获取ABI变更的通过。发布页面会标出ABI的变更。如果有一些新功能存疑,但是被合并到了主分支,就会标记为实验性(将来可能会被移除)。举个实验性接口的例子:17年八月的时候,一个新的rte_bus接口被加入。

同时需要说明:当有新的补丁时,支持多硬件、多厂商的通用接口必须要通过邮件发出来。必须保证至少有一个硬件或者厂商是支持新特性的。

跟许多其他的开源项目一样,DPDK每年也会开很多会议,通过这种方式可以获取用户、参与者的反馈。除了会议也会有各种在线访问调查。(增强了社区互动性)

DPDK官网维护了主分支源码,而其他的仓库专注于提供新特性。dpdk-devbind.py脚本使用DPDK协议连接网络、加密设备,还有testpmd是一个多功能工具,提供了转发、监控统计等功能。同时sample目录下提供了五十多个demo(都有完备的文档说明)。

除了DPDK本身,网站还托管了其他的项目,比如DTS测试组件(一个基于Python的测试框架),内部有着一百多个测试组件。内部还使用了IXIA、Scapy框架,提供功能性、性能测试功能。这部分开箱即用。

DPDK例常三个月发布一次。这种发布周期可以保证开发团队在比较快的节奏下进行产出,工作流程包括了review、讨论、改进代码。每个正式发布前会有3-5个release candidates发布待定。比如17.08这次发布,一共有125个作者参与,提供了1023个补丁(有来自不同系统的补丁)。长期稳定版LTS会维护两年(偶数年的11月起始)。

最近的功能特性

过去一年有很多新的功能提供。我们举一个例子,DPDK 17.05中为Intel I40E driver提供的DDP(Dynamic Device Personalization)动态设备定制化功能。

这个功能支持在I40E硬件上动态使用每个设备的信息。通过ddp add命令运行一个测试,ddp del进行移除。在网络流量波动的时候,可以动态调整profile信息的加载、卸载。这些profile信息是Intel创建的,与用户无关,使用此特性需要精通I40E设备内核知识。

DPDK以及网络相关的项目

DPDK在许多网络相关的项目上有所应用。简单看几个:

  • Open vSwitch (OvS):这个项目实现了虚拟网络切换功能
  • Contrail vRouter:这是一家创业团队开发的SDN控制台
  • pktgen-dpdk:基于DPDK制作的开源流量生成器

使用DPDK

对于新手用户、开发者,我们建议查看官方文档进行上手。

小结

本文简单解析了DPDK技术原理、使用、功能特性。DPDK在工业界的使用越发广泛,前途也是一片光明。