接前一篇文章:零知识学习之DPDK与RDMA(1)—— 序言与初识
本文内容参考:
《Linux高性能网络详解 从DPDK、RDMA到XDP》 刘伟著 人民邮电出版社
DPDK首页、文档和下载 - 网络数据包转发处理 - OSCHINA - 中文开源技术交流社区
五分钟看懂抓包神技:DPDK - 环信
https://www.cnblogs.com/llc-blog/p/8849376.html
特此致谢!
一、认识DPDK
1. 简介
数据平面开发工具包(data plane development kit,DPDK)是在用户态运行的一组软件库和驱动程序,可在所有主要CPU体系结构上加速对网络数据包的处理。作为Linux基金会旗下的一个开源项目,DPDK在推动CPU在高性能网络环境(比如企业数据中心、电信网络)中的使用方面发挥了很大作用。
Intel® DPDK 全称 Intel Data Plane Development Kit,是Intel提供的数据平面开发工具集,为Intel architecture(IA)处理器架构下用户空间高效的数据包处理提供库函数和驱动的支持,它不同于 Linux系统以通用性设计为目的,而是专注于网络应用中数据包的高性能处理。DPDK使用了 BSDLicense,极大的方便了企业在其基础上来实现自己的协议栈或者应用。
需要强调的是,DPDK应用程序是运行在用户空间上利用自身提供的数据平面库来收发数据包,绕过了Linux内核协议栈对数据包处理过程。Linux内核将DPDK应用程序看作是一个普通的用户态进程,其编译、链接和加载方式和普通程序没有什么两样。
2. 为什么需要DPDK
诺基亚、思科、爱立信、华为等传统的网络设备供应商提供的产品,在执行低层(low-level,指相对较低层级的网络协议)数据平面功能(data plane function),如数据包的收发和路由时,使用的都是专用集成电路(application specific integrated circuit,ASIC)芯片。在这些ASIC芯片中,某些是设备供应商自己研发的、某些是博通(Broadcom)或美满科技(Marvell)等芯片供应商提供的标准产品。以这些ASIC芯片为基础运行的专属软件,实现了防火墙、路由器、交换机、基站和其它网络设备所需的各种网络协议。虽然这种“ASIC芯片+专属软件”的产品架构提供的吞吐量能够达到高性能网络的要求,但其新产品推出的时间受到漫长的芯片开发/调试周期的限制,而且供应商之间不存在软件移植的可能。
2007年,Intel、Callvium(已被Marvell收购)、飞思卡尔(已被NXP收购)和NetLogic(已被Broadcom收购)等半导体公司开始将通用多核处理器引入数据处理领域,进行低层的数据包处理。这种方案在处理器性能和成本方面,可以基于ASIC芯片的网络产品进行竞争,但问题在于软件:以Linux内核协议栈为基础的网络方案存在许多瓶颈,无法高性能地处理数据包。
此时就需要一个解决方案来消除这些瓶颈,同时保持与原有Linux应用程序的兼容。除此之外,新方案还应该适合以库的形式打包到Linux发行版中,在用户需要时用来管理各种网络设备。这些目标最初是在2010年实现的,当时Intel基于Nehalem微架构的Xeon处理器推出了DPDK的初始版本。DPDK绕过(bypass)Linux内核,在用户态执行数据包处理,以尽可能提高网络性能。
DPDK程序运行在操作系统的用户态,利用自带的“数据平面库”进行数据包的发送、接收和处理,绕过了运行在内核态的Linux网络协议栈,提升了数据包处理效率。下图展示了DPDK在软件架构上与内核协议栈方案的差异:
DPDK的网卡驱动程序运行在用户态,其屏蔽了网卡硬件发起的大部分中断(除了断链、错误等类型),采用主动轮询模式,持续检查网卡的接收/发送队列,查看是否有新数据到达或者是否可以继续发送数据,从而实现高吞吐量和低时延。因此,DPDK的驱动程序也被称为轮询模式驱动模式(poll mode driver,PMD)。
不过,Linux内核仍然是DPDK实现的基础。比如,Linux内核中的UIO驱动框架,它为DPDK驱动程序提供了获取寄存器地址和长度、地址映射和读取中断计数器等功能(具体是否使用这些功能、如何的使用这些功能,还要看DPDK驱动程序的具体实现)。另外,内核提供的“大页”机制也是DPDK进行内存管理的重要手段。
更多内容请看下回。