DPDK是什么?
2008年,数据平面开发套件DPDK(Data Plane Development Kit)由英特尔公司的网络通信部门提出,主要针对Intel的处理器和网卡开发,是一款高性能的网络驱动组件,旨在为数据面应用程序提供一个简单方便的,完整的,快速的数据包处理解决方案。目前,DPDK已经开源,越来越多的厂商参与进来贡献代码,这使得DPDK可以支持更多的CPU和网卡,如CPU不仅支持Intel,还支持AMD、ARM等厂商的处理器,网卡支持的范围也包括Intel网卡、Mellanox网卡、ARM集成网卡等。
DPDK工作原理
在不使用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支持多队列技术,使多个处理线程能够并行处理多个队列中的数据包,从而提高了多核系统的性能。
内核与DPDK的区别
在测试网卡吞吐量时,使用Linux内核进行数据包转发与使用DPDK进行数据包转发之间存在显著的区别,这些区别主要涉及性能、延迟和数据包处理方式:
性能:
- Linux内核: 使用Linux内核进行数据包转发时,数据包需要经过内核的网络协议栈进行处理,这会引入大量的CPU中断、上下文切换和协议处理开销,限制了数据包处理性能。因此,Linux内核数据包转发性能通常较低,特别在高负载情况下。
- DPDK: 使用DPDK进行数据包转发绕过了内核网络栈,直接在用户态处理数据包。DPDK充分利用硬件加速功能和多核处理器,因此通常可以实现更高的数据包处理性能,从而提供更高的吞吐量。
延迟:
- Linux内核: 由于Linux内核的复杂性,数据包在经过内核处理时通常会引入较大的延迟,这对于需要低延迟的应用程序来说可能是不可接受的。
- DPDK: DPDK能够显著减少数据包处理延迟,因为数据包绕过了内核中的许多中介步骤,直接在用户态进行处理。
数据包处理方式:
- Linux内核: Linux内核采用通用的网络协议栈来处理数据包,因此具有通用性,但这也意味着在处理数据包时会引入一些不必要的开销。
- DPDK: DPDK是为高性能数据包处理而设计的,它专注于提供最佳性能,允许应用程序更灵活地控制数据包处理过程。
总的来说,使用DPDK进行数据包转发可以显著提高网络设备的吞吐量和性能,特别是在高负载和需要低延迟的情况下。
内核 VS 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转发测试结果,显然部署了DPDK后,数据包的吞吐能力得到了极大的提升。
仪表配置
配置吞吐量界面,使用RFC 2544建议的字节帧长64Byte、128Byte、256Byte、512Byte、1024Byte、1280Byte、1518Byte进行测试,然后点击“完成”
最后,点击下图所示的开始按键即可启动测试。
RFC2544按照顺序测试完64Byte、128Byte、256Byte、512Byte、1024Byte、1280Byte、1518Byte帧长的吞吐量,并自动保存测试结果,此为DPDK转发测试结果。
标签:处理,网卡,吞吐量,内核,Linux,数据包,DPDK From: https://www.cnblogs.com/xinertel/p/17928961.html