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 驱动程序)。

审核编辑:黄飞

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

    关注

    19

    文章

    2439

    浏览量

    95674
  • 路由器
    +关注

    关注

    22

    文章

    3505

    浏览量

    111347
  • AI
    AI
    +关注

    关注

    87

    文章

    26472

    浏览量

    264102
  • 数据包
    +关注

    关注

    0

    文章

    231

    浏览量

    24095
  • DPDK
    +关注

    关注

    0

    文章

    13

    浏览量

    1703

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

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

收藏 人收藏

    评论

    相关推荐

    一种高效的串口数据包接收方式

    尾。长度等)没有任何限制,只要求数据包之间的时间间隔大于数据包内每个字节间的间隔(这是自然的传输情况)2.不像其他一些缓存式的接收方式需要缓存间的二次拷贝3.所有处理都是
    发表于 01-14 16:13

    请问,CAN发送数据出现数据包丢失的情况

    请问,CAN发送数据出现数据包丢失的情况,怎么解释呀,CAN不是有自动重发功能吗。大家对于数据包丢失这种情况是怎么处理
    发表于 12-12 20:51

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

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

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

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

    CC1101同时接收两个数据包的话,会怎么处理

    CC1101 当有两个数据包同时给一个CC1101,接受侧接受一个数据包之后放在RXfifo内,未读取,第二个数据包可以接受放在上一个数据包RXfifo之后吗?还是将上一个
    发表于 04-18 15:04

    请问SRIO每次出传输数据包的个数,数据包负载大小怎么设置?

    本帖最后由 一只耳朵怪 于 2018-6-19 14:25 编辑 DSP一次发送16个数据包,每个数据包256字节,一次传输4096个字节。如果现在DSP向FPGA发送2048字节数据,后面2048个字节它自动为零,造成效
    发表于 06-19 05:22

    AXI流数据包传输问题

    中包含512个双字。介于9.-512之间。数据相同(“deadbeef”)。我可以vivado仿真上正确看到这些数据包。但是当我编程FPGA时,我无法在内存中正确读取数据包。 我正在
    发表于 04-15 13:51

    请问串口通信中数据包的帧头和帧尾怎样加入到数据包

    在发送端发送时,即校验帧头帧尾?还是只需要在接收端校验帧头帧尾即可? 2,请问串口通信中,如果需要发送如3.13这样的非整形数据,该如何实现?是由发送端进行处理,还是由接收端接收数据
    发表于 03-30 05:55

    如何发送音频/视频ISOC数据包

    我想开发带有音频和/或视频类的 USB 主机应用程序。是否有任何工作示例项目或代码片段?我检查了 STM32 HCD 驱动文件 - -ux_hcd_stam32_periodic_schedule.c,但它总是生成 EP_TYPE_INTR 数据包。如何发送音频/视频 I
    发表于 12-26 08:18

    DPDK 22.11.1 LTS应用程序对rte_pktmbuf_alloc的调用失败怎么解决?

    对 rte_pktmbuf_alloc 的调用失败(处理了几千个数据包之后)并出现恐慌: “PANIC in __rte_mbuf_raw_sanity_check():” assert “m->next
    发表于 04-23 09:00

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

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

    开发者如何从DPDK数据包框架中获益

    Learn about the Data Plane Development Kit (DPDK) Packet Framework and how you can generate DPDK applications using your own recipe.
    的头像 发表于 09-13 06:20 4025次阅读

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

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

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

      对于特定于 NVIDIA 的 GPU , GPUdev 库功能通过 CUDA 驱动程序 DPDK 库 。要为 NVIDIA GPU 启用所有gpudev可用功能, DPDK 必须构建在具有 CUDA 库和 GDRCopy 的
    的头像 发表于 05-07 10:08 1999次阅读
    如何使用<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 656次阅读