2008年,数据平面开发套件DPDK(Data Plane Development Kit)由英特尔公司的网络通信部门提出,主要针对Intel的处理器和网卡开发,是一款高性能的网络驱动组件,旨在为数据面应用程序提供一个简单方便的,完整的,快速的数据包处理解决方案。目前,DPDK已经开源,越来越多的厂商参与进来贡献代码,这使得DPDK可以支持更多的CPU和网卡,如CPU不仅支持Intel,还支持AMD、ARM等厂商的处理器,网卡支持的范围也包括Intel网卡、Mellanox网卡、ARM集成网卡等。
在不使用DPDK而使用Linux内核处理数据平面时,数据包处理对于通用CPU系统架构的挑战是巨大的。以64B数据包长,40Gbps线速,CPU主频率2GHz为例,要达到理论最大的转发能力,最多允许消耗33个时钟周期。对比访存的时钟周期,一次LLC命中需要大约40个时钟周期,如果LLC未命中,一次内存读还另需70ns。显然,Linux内核数据平面的数据包处理很难满足线速转发的要求。
而DPDK可以为通用CPU系统架构提供简单、完整、快速实现数据平面的数据包处理方案,其核心特征就是绕过了Linux内核态对数据包的处理过程,直接在用户态收发包来解决内核的瓶颈,从而能充分释放CPU对包处理的吞吐能力。
以下是DPDK的工作原理的基本概述:
绕过内核网络栈: 传统的Linux内核网络栈包括了大量的网络协议处理、排队、调度、以及与用户态的切换。这些操作会引入较大的延迟,从而限制了数据包处理性能。DPDK绕过了这些内核操作,将数据包的处理放在用户态,以减少不必要的开销。
直接访问硬件: DPDK允许应用程序直接与网络适配器进行通信,绕过了内核对网络设备的抽象。这样,数据包可以更快速地被发送和接收,无需经过内核的中介。
共享内存: DPDK使用共享内存来实现数据包的快速传递。这允许多个处理线程在不复制数据的情况下访问相同的数据包,从而提高了多核处理器的利用率。
用户态驱动程序: DPDK提供了用户态的网络设备驱动程序,这些驱动程序在用户态中运行,而不是内核态中。这允许应用程序直接控制硬件,而不受内核的限制。
零拷贝: DPDK支持零拷贝技术,允许数据包在内存中以最有效的方式进行传输,减少了数据包处理过程中的数据复制。
多队列处理: DPDK支持多队列技术,使多个处理线程能够并行处理多个队列中的数据包,从而提高了多核系统的性能。
在测试网卡吞吐量时,使用Linux内核进行数据包转发与使用DPDK进行数据包转发之间存在显著的区别,这些区别主要涉及性能、延迟和数据包处理方式:
性能:
延迟:
数据包处理方式:
1、 Linux内核转发测试拓扑:
服务器上配置两个端口为桥接,使用信而泰L2-7层网络测试仪DarYu3000的Port1和Port2分别连接服务器上10G网卡的Port1和Port2,然后网络测试仪的Port1和Port2相互发送流量,测试帧长使用RFC2544建议的帧长64Byte、 128Byte、 256Byte、 512Byte、 1024Byte、1280Byte、1518Byte。
2、 DPDK转发测试拓扑:
服务器上部署DPDK环境,并使能L2fw程序,使用信而泰L2-7层网络测试仪DarYu3000的Port1和Port2分别连接服务器上10G网卡的Port1和Port2,然后网络测试仪的Port1和Port2相互发送流量,测试帧长使用RFC2544建议的帧长64Byte、 128Byte、 256Byte、 512Byte、 1024Byte、1280Byte、1518Byte。
分析对比内核转发测试结果与DPDK转发测试结果,显然部署了DPDK后,数据包的吞吐能力得到了极大的提升。
配置吞吐量界面,使用RFC 2544建议的字节帧长64Byte、128Byte、256Byte、512Byte、1024Byte、1280Byte、1518Byte进行测试,然后点击“完成”。
最后,点击下图所示的开始按键即可启动测试。
RFC2544按照顺序测试完64Byte、128Byte、256Byte、512Byte、1024Byte、1280Byte、1518Byte帧长的吞吐量,并自动保存测试结果,此为DPDK转发测试结果。