0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

DPDK在AI驱动的高效数据包处理应用

jh18616091022 来源:AIOT大数据 2024-02-25 11:28 次阅读

交换机、路由器、防火墙等网络设备通常需要实时处理大量数据包。在现代网络中,数据包处理是一个非常重要的环节。传统上,高效的数据包处理需要使用专门且昂贵的硬件,而数据平面开发套件 ( DPDK )能在低成本商用硬件上做到这一点。通过使用商用硬件,还可以将网络功能转移到云端,并在虚拟化环境中运行它们。
DPDK最初是由 Intel 于2010年发起的,Intel 的 Venky Venkatesan 被称为“ DPDK之父”。2017年4月,DPDK成为Linux基金会下的一个项目。目前,许多开源项目已经采用了DPDK,包括 MoonGen、mTCP、Ostinato、Lagopus、Fast Data (FD.io)、Open vSwitch、OPNFV 和 OpenStack。

d083c1e4-d256-11ee-a297-92fbcf53809c.png

| DPDK框架当然,DPDK也面临着一些挑战,包括无法支持某些网卡;对 Windows 的支持有限;调试比较困难;版本兼容性问题等。

01.DPDK如何改进数据包处理?

传统的数据包处理方式是数据包先到内核最后再到用户层进行处理。这种方式会增加额外的延迟和CPU开销,严重影响数据包处理的性能。DPDK 绕过内核,在用户空间中实现快速数据包处理。它本质上是一组网络驱动程序和库。环境抽象层 ( EAL ) 从应用程序中抽象出特定于硬件的操作。下图显示了在数据包到达应用程序之前,POSIX调用的传统处理是如何通过内核空间的。DPDK缩短了这条路径,并直接在NIC和用户空间应用程序之间移动数据包。

d0b3aa80-d256-11ee-a297-92fbcf53809c.png

传统的处理是中断驱动的,当数据包到达时,NIC会中断内核。DPDK转而使用轮询,避免了与中断相关的开销。这是由轮询模式驱动程序 ( PMD ) 执行的。另一个重要的优化是零拷贝。在传统网络中,数据包从内核空间的套接字缓冲区复制到用户空间。DPDK避免了这种情况。DPDK的用户空间对开发人员很有吸引力,因为不需要修改内核。任何基于DPDK 的网络堆栈都可以针对特定应用进行优化。

02.DPDK采用的数据包处理模型是什么?

大致有两种处理模型:
# Run-to-CompletionCPU内核处理数据包的接收、处理和传输。可以使用多个内核,每个内核与专用端口关联。通过接收端扩展 ( RSS ),到达单个端口的流量可以分配到多个内核。
# Pipeline每个内核专用于特定的工作负载。例如,一个内核可能处理数据包的接收/传输,而其他内核则负责应用程序处理。数据包通过memory rings在内核之间传递。

d0d72cb2-d256-11ee-a297-92fbcf53809c.png

对于单核多CPU部署,一个CPU分配给操作系统,另一个分配给基于DPDK的应用程序。对于多核部署,无论是否使用超线程,都可以为每个端口分配多个内核。决定使用哪种模型取决于处理每个数据包所需的周期、跨软件模块的数据交换范围、某些内核的特定优化、代码可维护性等。

03.DPDK是否需要TCP / IP堆栈才能工作?

DPDK不包括TCP / IP堆栈。如果应用程序需要用户空间网络堆栈,可以使用 F-Stack、mTCP、TLDK、Seastar 和 ANS 。它们通常提供阻塞和非阻塞套接字API,其中一些是基于 FreeBSD 实现的。由于省略了网络堆栈,DPDK不会出现通用实现的低效率问题。应用程序可以包括针对其用例进行优化的网络模块,也可能存在一些不需要更高层(L2 以上)处理的用例。

04.在DPDK之前,厂商如何实现高效的数据包处理?

在DPDK之前,有专门的硬件可以进行高效的数据包处理。此类硬件可能使用定制的 ASIC、可编程 FPGA 或网络处理单元 ( NPU ),这些专用硬件以优化的方式完成数据包分类、流量控制、TCP / IP处理、加/解密、VLAN标记等任务。然而,此类硬件的购买和维护成本昂贵。升级和安全补丁的应用非常耗时,并且需要全职的网络管理员。一种解决方案是从专用硬件转向商用现成 ( COTS ) 硬件。虽然这更具成本效益且更易于维护,但性能却受到了影响。数据包从网卡 ( NIC ) 移动到操作系统 ( OS ),并通过操作系统内核堆栈进行处理。即使使用快速NIC,内核堆栈也是一个瓶颈。系统调用、中断、上下文切换、包复制和逐包处理都会降低性能。DPDK解决了COTS硬件上的性能问题,无需昂贵的定制硬件即可获得高效的数据包处理。

05.业界谁在使用DPDK?

负载均衡、流分类、路由、访问控制(防火墙)和流量监管是DPDK的典型用途。DPDK不仅适用于电信行业,也已在云环境和企业中使用。流量生成器 (TRex) 和存储应用(SPDK) 使用DPDK。下图列出了DPDK支持的开源项目。

d26764de-d256-11ee-a297-92fbcf53809c.png

Open vSwitch ( OVS ) 移植到DPDK后表现出了 7 倍的性能提升。在物联网应用中,数据包很小,DPDK减少了延迟并允许每秒处理更多此类数据包。
5G 中,用户平面功能 ( UPF ) 处理用户数据包。延迟、抖动和带宽是需要满足的关键性能指标。一些研究人员已经提出将DPDK用于5G UPF的实现。在边缘网络部署UPF时, 可以使用DPDK API连接UPF应用 ( UPF -C) 和 SmartNIC ( UPF -U)。

06.DPDK面临哪些挑战?

DPDK需要一定的专业知识,开发人员需要学习DPDK的编程模型。他们需要知道如何管理内存、如何在不复制的情况下传递数据包,以及如何使用多核架构。例如,PID 命名空间可能会导致管理fbarray出现问题;使用mmap而不指定地址的进程可能会导致问题;线程必须正确分配给CPU内核,才能获得一致的性能;此外,DPDK库还给开发人员提供了多种实现选择,选择错误会影响性能。由于绕过了内核,失去了Linux 内核提供的所有保护、实用程序( ifconfig、tcpdump)和协议(ARP 、IPSec)。调试和确定网络问题的根本原因也是一项挑战。最后,由于使用轮询而不是中断,因此即使只处理几个数据包,DPDK也会导致 100% 的CPU使用率。

07.还有哪些替代选择?

使用 Snabbswitch、Netmap 或 StackMap 可以通过内核旁路实现更快的数据包处理。与DPDK一样,它们在用户空间中处理数据包。数据包完全绕过内核堆栈。Snabbswitch 是用 Lua 编写的,而DPDK是用 C 编写的。PacketShader 对基于GPU的硬件进行内核旁路。另一种方法是修改 Linux 内核。例如 eXpress Data Path ( XDP ) 和基于远程直接内存访问 ( RDMA ) 的网络堆栈。其他有效的工具还包括 packet_mmap (但不会绕过内核)和 PF_RING (带有 ZC 驱动程序)。

审核编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 交换机
    +关注

    关注

    20

    文章

    2615

    浏览量

    99177
  • 路由器
    +关注

    关注

    22

    文章

    3699

    浏览量

    113472
  • AI
    AI
    +关注

    关注

    87

    文章

    29928

    浏览量

    268237
  • 数据包
    +关注

    关注

    0

    文章

    250

    浏览量

    24354
  • DPDK
    +关注

    关注

    0

    文章

    13

    浏览量

    1718

原文标题:技术前沿:AI之高效数据包处理DPDK

文章出处:【微信号:AIOT大数据,微信公众号:AIOT大数据】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    CC1101快速接收两个数据包处理方式?

    CC1101快速接收两个数据包处理方式?当接受到一个数据包之后,来一个中断,中断处继续来着接受或者寄存器配置RX完会后继续保持为接受状
    发表于 03-10 14:04

    CC1101快速接收两个数据包处理方式是怎么样的?

    CC1101快速接收两个数据包处理方式是怎么样的?当接受到一个数据包之后,来一个中断,中断处继续来着接受或者寄存器配置RX完会后继续
    发表于 04-05 15:57

    网络数据包捕获机制研究

    网络数据包捕获技术,是实现入侵检测、网络安全审计的关键技术。本文改进了国外传统的数据包捕获函数库Libpcap 捕获数据包的方案。原方案在网卡捕获到数据包后,
    发表于 09-01 10:09 9次下载

    基于Jpcap的数据包捕获器的设计与实现

    本文研究了以太网数据包的捕获机制,实现了基于JPcap的网络数据包捕获工具,其基本原理是通过调用Jpcap库捕获本地网络上的所有数据包,然后对数据包进行协议解码,从而可以实
    发表于 01-15 13:47 38次下载

    数据包过滤原理

    数据包过滤技术数据包过滤原理              数据包过滤技术是防火墙最常用的技术。对于一
    发表于 06-16 23:44 4583次阅读
    <b class='flag-5'>数据包</b>过滤原理

    什么是数据包

    什么是数据包? 您在互联网上做的一切都涉及到数据包。例如,您接收的每个网页都以一系列数据包的形式传入,您发送的每封电子邮件都以一系列数据包的形式传出。以
    发表于 08-03 09:13 2004次阅读

    高速数据包处理硬件加速技术

    链路带宽的剧增给高速网络数据包处理带来了极大的挑战。传统的纯软件网络数据包处理性能上已不能满足需要。当前网络
    发表于 05-28 16:24 0次下载
    高速<b class='flag-5'>数据包</b><b class='flag-5'>处理</b>硬件加速技术

    基于Intel dpdk数据包捕获技术研究

    对Intel dpdk数据包捕获技术进行了深入研究,对其优缺点进行了详细的分析。在此基础上,利用dpdk设计并实现了一套基于Linux的数据包捕获系统,成功地将其应用于千兆网络安全防护
    发表于 11-24 15:17 4次下载
    基于Intel <b class='flag-5'>dpdk</b><b class='flag-5'>数据包</b>捕获技术研究

    简述高速流量处理DPDK替代方案

    目前大多需要进行高速流量处理的场景,基本都是使用DPDK进行数据包处理加速,DPDK虽然是开源免费的,但是
    的头像 发表于 06-22 09:30 2629次阅读
    简述高速流量<b class='flag-5'>处理</b><b class='flag-5'>DPDK</b>替代方案

    利用以太网和DPDK驱动程序推动5G技术

      通过加速 DPDK 数据包处理服务,您可以扩展和简化现有的 4G LTE 网络,并帮助顺利过渡到 5G 。
    的头像 发表于 04-18 16:59 2445次阅读
    利用以太网和<b class='flag-5'>DPDK</b><b class='flag-5'>驱动</b>程序推动5G技术

    如何使用DPDK和GPUdev增强内联数据包处理

      对于特定于 NVIDIA 的 GPU , GPUdev 库功能通过 CUDA 驱动程序 DPDK 库 。要为 NVIDIA GPU 启用所有gpudev可用功能, DPDK 必须构建在具有 CUDA 库和 GDRCopy 的
    的头像 发表于 05-07 10:08 2343次阅读
    如何使用<b class='flag-5'>DPDK</b>和GPUdev增强内联<b class='flag-5'>数据包</b><b class='flag-5'>处理</b>

    使用 NVIDIA DOCA GPUNetIO 进行内联 GPU 数据包处理

    越来越多的网络应用程序需要进行 GPU 实时数据包处理,以实现高数据率解决方案:数据过滤、数据放置、网络分析、传感器信号
    的头像 发表于 01-13 23:25 889次阅读

    Linux如何操作将数据包发送出去

      Linux 服务器收到网络数据包,需要经过哪些处理,一步步将数据传给应用进程的呢?应用进程发送数据包时,Linux 又是如何操作将数据包
    的头像 发表于 06-17 16:00 985次阅读
    Linux如何操作将<b class='flag-5'>数据包</b>发送出去

    使用P4和Vivado工具简化数据包处理设计

    电子发烧友网站提供《使用P4和Vivado工具简化数据包处理设计.pdf》资料免费下载
    发表于 01-26 17:49 0次下载
    使用P4和Vivado工具简化<b class='flag-5'>数据包</b><b class='flag-5'>处理</b>设计

    请问高端网络芯片如何处理数据包呢?

    随着网络芯片带宽的持续提升,其内部数据包处理单元的工作负载也随之增加。然而,如果处理单元无法与网络接口的传入速率相匹配,将无法及时处理数据包
    的头像 发表于 04-02 16:36 571次阅读
    请问高端网络芯片如何<b class='flag-5'>处理</b><b class='flag-5'>数据包</b>呢?