1.2 DPDK开源社区
DPDK的版本发布及其开发工作主要由DPDK社区承担,本节简要介绍DPDK开源社区及其主要工作领域。
1.2.1 社区起源
随着通信技术近10年来的飞速发展,10 Gbit/s网络端口已经普遍应用,加之40 Gbit/s/100 Gbit/s技术的出现,CPU处理能力远远超过通信外设的情形已经不复存在。传统1 Gbit/s低速网卡的中断工作方式已无法适用于10 Gbit/s等高速网卡的收发处理要求。Intel公司从自身处理器结构和经济性角度考虑,前瞻性地对多核和轮询处理技术进行了大量研究,促进了DPDK关键技术的诞生。2010年前后,Intel与6wind公司合作进行了DPDK软件的开发与测试,早期的开发包代码由6wind完成,这也是为何时至今日DPDK社区的许多代码维护者来自6wind的缘故。
Intel起初只是将这些DPDK代码分享给部分客户使用评估,后来在SDN大潮和服务器高速I/O需求的驱动下,2013年Intel在其内部网站开放了DPDK的全部代码和支持文档,供开发者免费下载,软件遵循BSD(Berkeley Software Distribution)开源许可协议。随后不久,Intel旗下6wind公司的开发人员建立了专门的dpdk.org网站,使DPDK成为一个独立的开源社区。
开源进程为DPDK技术的发展注入了强大动力,社区近年的发展具有如下几个特点:首先,开发队伍不断壮大,由早起Intel和6wind独树一帜的格局,发展到今天思科(Cisco)、博科、VMware等多家单位参与和支持社区开发工作,红帽(Red Hat)也在其Redhat Linux发行版中加入DPDK相关驱动;其次,博通(Broadcom)等主流网卡厂商均已加入社区并提供符合DPDK接口的源代码,表明DPDK已经发展成为一项通用的I/O加速技术准则;此外,DPDK不仅支持Intel处理器架构,IBM等也正在尝试将DPDK移植在其POWER (Performance Optimization With Enhanced RISC)架构上,将DPDK发展为支持多类处理器的软件加速方案也是社区的目标之一。
最后,DPDK社区也开始与其他开源社区进行融合,如红帽等主流Linux社区,已经在其Federa和企业版Linux中加入了DPDK支持,又如Open v Swtich社区也开始采用了DPDK技术改善虚拟软件交换机的性能,并已在OVS 2.4中加入了对DPDK的支持。
综上所述,与Netmap等其他近似的开源技术相比,DPDK不仅有着更为完善的产业生态环境,而且有Intel等支撑单位对重要客户提供技术支持。因此,DPDK已成为大量互联网公司和NFV开发商在x86环境进行网络处理加速的首选技术。
1.2.2 社区网站
DPDK 社区网站设计非常简洁,主要包括源代码下载(Download)、文档查看(Documentation)、开发(Development)和邮件列表(Mail List)4个部分。
进入“下载”页面主要包含4部分内容。
(1)用户可以查看并下载最新版本(当前为2.2.0)的DPDK代码和文档,并配有教读者编译安装的快速启动指南。
(2)先前发布的几十个细小版本的 DPDK 源代码及其文档,包括推荐发行(Release Candidate)的各种中间版本。
(3)DPDK驱动扩展,包括对VMware系统支持和基于共享内存的半虚拟化memnic网卡驱动支持。
(4)DPDK测试所需的各类工具套件,包括Pkt Gen(Packet Gen简称)流量发生器源代码和dts工具包两部分的源代码。其中Pkt Gen作为软件流量发生器可达到64 byte分组的10 Gbit/s线速转发能力,而dts则是DPDK的自动化测试工具,主要包含有DPDK测试用例、测试脚本及其配置、测试框架等几个基本部分,如图1-3所示,任何开发人员可以在此基础上组织自己的DPDK测试计划、自动化脚本和平台配置。
图1-3 DPDK测试套件组成结构
“文档”页面提供了DPDK开发、测试和部署所需要的各类说明文档,主要包括以下内容。
(1)DPDK快速启动指南,简要说明如何编译和安装DPDK。
(2)DPDK所支持的Intel、Cisco、Emulex等多个厂商的网卡型号以及每个厂商网卡的支持特性、限制条件、巨页配置与编译方法等信息。
(3)入门手册、DPDK API参考、编程指南、用户指南、DPDK应用指南五大技术文档供不同用户对象使用,所有的文档均有超文本和PDF两种格式。
● DPDK API参考包括设备、内存管理、定时器、逻辑锁、CPU中断控制等操作系统级功能以及QoS、报文调度和mbuf等网络流量处理功能。
● 用户指南部分主要包括快速启动手册(Linux/Free BSD)、XEN环境下DPDK分组交换解决方案、各类网卡的PMD驱动安装、配置和编译使用说明、DPDK作为L2/L3层转发的各种应用例、用于DPDK转发功能调试的testpmd应用例说明、常见问题、发布说明等。其中,针对有志加入社区工作的贡献者,社区在该网页中还提供了详尽的贡献者工作指南。
● DPDK应用指南(Sample Application Guide)提供了DPDK报文处理、L2/L3转发、QoS调度、ACL、定时器等大量应用示例,本书的第5章将详细介绍其中的典型应用例。
● 开发者指南部分则详细介绍了DPDK的开发环境要求、环境抽象层(EAL)、轮询驱动(PMD)、环型队列等库的主要原理、框架和关键数据结构。
(4)针对QEMU和VMware ESXi的半虚拟化网卡驱动说明文档。
(5)Pkt Gen流量发生器说明文档,包括命令行选项、运行脚本与配置、版本变更等。
(6)DPDK测试工具套件说明文档,包括被测设备环境配置、测试仪环境配置、测试结果自动编辑等功能说明。
(7)获取旧版本说明文档和DPDK源代码的链接如下。
● git://dpdk.org/dpdk;
● http://dpdk.org/git/dpdk。
DPDK的开发协同主要依赖git网站和电子邮件,任何参与者都可以自由提交新特性或者修正错误,代码的提交、审查、答疑工作也均通过邮件完成,了解具体有关如何发布补丁和进行补丁测试的详细说明,可以访问社区网站的“开发”页面(http://dpdk.org/dev)。
下面列举一些DPDK社区中重要的邮件列表供读者参考。
● 用户关于DPDK技术的讨论:user@dpdk.org;
● 开发技术讨论、补丁审查:dev@dpdk.org;
● DPDK版本更新与发布:announce@dpdk.org;
● 测试套件审查和讨论:dts@dpdk.org;
● 自动化测试报告: test-report@dpdk.org。