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转发测试结果。

DPDK技术提升网卡吞吐量几何?的更多相关文章

  1. linux查看网卡吞吐量和网卡流量用自带命令,iptraf查看。

    1 命令行直接输入:iptraf(如果没有,使用yum install iptraf安装) 2.打开进入选择ip镜像. 3. 选择监听测试的接口,所有接口. 4.开启监听状态日志,系统默认日志路径./ ...

  2. [网络技术][转]网卡的offload概念

    网络数据包分析 网卡Offload 对于网络安全来说,网络传输数据包的捕获和分析是个基础工作,绿盟科技研究员在日常工作中,经常会捕获到一些大小远大于MTU值的数据包,经过分析这些大包的特性,发现和网卡 ...

  3. 用 ThreadPoolExecutor/ThreadPoolTaskExecutor 线程池技术提高系统吞吐量(附带线程池参数详解和使用注意事项)

    1.概述 在Java中,我们一般通过集成Thread类和实现Runnnable接口,调用线程的start()方法实现线程的启动.但如果并发的数量很多,而且每个线程都是执行很短的时间便结束了,那样频繁的 ...

  4. iOS技术提升方向

    技术维度: 认知维度:

  5. c# winform 技术提升

    http://www.cnblogs.com/junjie94wan/category/303961.html http://www.cnblogs.com/springyangwc/archive/ ...

  6. Nginx08 通过扩容提升整体吞吐量 nginx平滑升级-添加sticky模块和使用

    1 扩容方式介绍 一个单一站点,想要扩,可以从硬件软件等多个方面来进行. 1 单机垂直扩容:硬件资源增加 2 水平扩展:集群化 3 细粒度拆分:分布式 3-1 数据分区 3-2 上游服务SOA化(原生 ...

  7. 使用RSS提升DPDK应用的性能(转)

    本文描述了RSS以及在DPDK中如何配置RSS达到性能提升和统一分发. 什么是RSS RSS(Receive Side Scaling)是一种能够在多处理器系统下使接收报文在多个CPU之间高效分发的网 ...

  8. 【转帖】网卡多队列技术与RSS功能介绍

    网卡多队列技术与RSS功能介绍 2017年02月08日 15:44:37 Murphy_0806 阅读数 10665 标签: rss网卡dpdk 更多 个人分类: DPDK https://blog. ...

  9. redis通过pipeline提升吞吐量

    案例目标 简单介绍 redis pipeline 的机制,结合一段实例说明pipeline 在提升吞吐量方面发生的效用. 案例背景 应用系统在数据推送或事件处理过程中,往往出现数据流经过多个网元: 然 ...

  10. [SPDK/NVMe存储技术分析]005 - DPDK概述

    注: 之所以要中英文对照翻译下面的文章,是因为SPDK严重依赖于DPDK的实现. Introduction to DPDK: Architecture and PrinciplesDPDK概论:体系结 ...

随机推荐

  1. Grafana监控指标、日志与链路追踪数据采集到GreptimeDB的完整实践指南

    以下是将Grafana监控指标.日志与链路追踪数据采集到GreptimeDB的完整实践指南,涵盖部署.运维.安全及扩展的全流程: 一.整体架构 图表 二.数据采集配置 1. 指标采集(Promethe ...

  2. 基于 Spread,在 Blazor 框架中导入 / 导出 Excel

    引言 在现代 Web 应用开发中,处理 Excel 文件的导入和导出是一项常见且重要的需求.Blazor 框架是微软推出的用于构建具有 .NET 强大功能的交互式客户端 Web UI 的相对较新的框架 ...

  3. SpringBoot--简单入门

    简介 本质上说Spring是一个组件容器,它负责创建并管理容器中的组件(也被称为Bean),并管理组件之间的依赖关系. 为什么要用SpringBoot? Spring缺点是配置过多,SpringBoo ...

  4. 使用plsql导入的操作问题

    导入文件之前要创建表空间等操作,如下: 1. sql文件导入的是用户对象 2. pde文件导入的是表和数据 sql文件使用sql插入的方式导入 pde文件使用以下方式导入

  5. 企业微信公众号本地调试auto2.0

    适配开发者工具 企业微信公众号.微信公众号本质相同,因为我在开发企业号,所以拿企业号为例 首先添加企业应用 然后进入改应用,配置主页.网页授权及JS-SDK.企业微信授权登录 注意企业微信不允许配置l ...

  6. Codeforces Round #620 (Div. 2) ABC 题解

    A. Two Rabbits 题意:数轴上有x,y,且x<y.x可以每次+a,y可以每次-b.问能否xy相遇. 思路:只要xy差值是a+b的倍数即可. view code #include< ...

  7. leetcode 需要了解的知识点储备

    简介 周赛的最好成绩3道题. 常用算法 lower_bound 二分查找 寻找比值小的 upper_bound 二分查找 lower_bound( )和upper_bound( )都是利用二分查找的方 ...

  8. leetcode 1047 双出字符串中的相邻元素

    简介 如果能想到栈的话,说明你的基础足够扎实. 我没有想到,我想到的是双向链表.我就是一个弟弟 思路 两个前后指针指向一个双向循环链表,然后判断是否相等相等的话,前一个指针前移,后一个指针后移,中间的 ...

  9. 他没买 iPad,而是花了半年时间,为所有“穷学生”写了个笔记神器

    无纸化学习,正成为大学校园里的常态.用一台平板取代厚重的书本和讲义,上课时直接在课件上圈画重点,所有科目笔记都能轻松整理.一键搜索--这种轻便高效的学习方式,越来越受到学生们的青睐.说到这,许多人第一 ...

  10. ICEE-MCU-Bluetooth+Zigbee-PIC32CX-BZ2 and WBZ451 Curiosity Development Board

    Zigbee+Bluetooth: PIC32CX-BZ2 and WBZ451 Curiosity Development Board: https://www.microchip.com/en-u ...