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

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

3天内不再提示

构建BittWare的数据包解析器

刘强 来源:gdfffa 作者:gdfffa 2022-08-02 08:03 次阅读

超越P4的智能网卡编程技术

如今,BittWare的SmartNIC Shell的解析器组件是使用Xilinx HLS C++开发环境构建的。但BittWare的SmartNIC Shell的早期版本虽然使用Xilinx SDNet工具,但使用了P4语言。

使用P4的一个原因是,它是一种新兴的标准,受到在商品英特尔服务器上拥抱软件定义网络(SDN)的人们的欢迎。然而,Xilinx后来限制了SDNet的可用性。我们对P4的使用是专门针对SmartNIC Shell的终端用户的,所以这种限制使我们不得不寻找更开放的解决方案。在我们使用HLS成功实现RSS之后,我们被激励使用同样的HLS方法(特别是Xilinx HLS C++环境)重新实现SmartNIC Shell解析器。

什么是“Tuple”?

在网络中,tuple是指从网络数据包中提取的字段,并组合在一起。最常见的是“5-tuple”,它结合了源和目的IP地址、源和目的IP端口(如果IP协议有这些端口的话)以及IP协议号。

SmartNIC产品中的BittWare解析器会检查数据包,并在可用的情况下提取最多4个数据包。它将这些数据放入添加到数据包元数据的96位字段中。该字段宽度为IPv4源和目标地址以及源和目标端口提供了足够的位数。我们的解析器为数据包中不可用的字段提供零。如果一个数据包不包括任何IP有效载荷,那么完整的96位元组字段为零。

一个完整的5-tuple需要额外的8位来适应协议号。使用BittWare解析器的HLS用户只需稍加修改源代码就能轻松适应这一变化。

BittWare的RSS是一个可能在数据包流水线中跟随解析器并消耗96位元组数据的块的例子。在我们的应用笔记中阅读关于该块的内容,比较RTL和HLS C++。

在 BittWare 的 Loopback 示例中,Parser 的使用方式有所不同。Loopback 使用了 Parser 的三个副本,而不是扩展元数据的一个副本。之所以采取这种方法,是因为Parser实际上相当小。

在基本上创建了两个版本的数据包解析器后,我们注意到使用P4与HLS C++的一些差异。总的来说,HLS流的抽象性不如P4,但工具却远比P4成熟。

资源使用情况详见下表。

你可以看到,在所有的FPGA资源中,HLS不是相似就是更好。虽然源代码确实需要更多的行数,但其中一部分是受注释和格式的影响。然而,HLS的C++实现确实总是要比P4需要更多的代码行数。但这是针对数据包解析器/分类器而言的,属于 P4 所能描述的范围,而 HLS C++ 可以做得更多。HLS是非常通用的,几乎可以做任何事情。P4是非常专业的。

更妙的是,既然有了HLS的实现,那么后续修改它以消化以太网协议的变化就和用P4语言修改差不多了。这是因为我们的HLS C++实现的结构是对我们创建的低级解析函数的调用序列。这种方法类似于直接操作位于P4语言下的运行时。

如前所述,回环实例的源代码,包括它的解析器块,可以通过BittWare开发者网站免费提供给Ultrascale++的用户。它很好地说明了如何在HLS C++代码中使用AXI接口。想看但没有BittWare FPGA卡?请与我们联系,了解哪里可以购买。

什么是数据包解析器?

在以太网上使用的协议对硬件来说是一个挑战,要利用这些协议。这种挑战的存在是因为协议有许多可选字段。例如,这些选项使查找IP头的开始变得很复杂。 为什么这么说呢?在IP头的情况下,前面可以有零、一个或两个VLAN标签。 也可以有MPLS标签。因此硬件需要了解协议,刚好可以找到IP头。硬件需要IP头才能找到IP地址,而IP地址经常被用于硬件过滤器和表。类似的问题在下一级也存在,因为IP头本身有可选的字段。

BittWare的HLS C++包解析器可以处理。

0至2个VLAN标签(旧的SDNet代码允许0或1)。

0到5个MPLS标签(BittWare的旧SDNet代码不识别MPLS)。

IP碎片

IPv4头文件(不是IPv6

它假设在这些IP协议中找到端口ID。TCP、UDP、DCCP和STCP。

P4会不会成为FPGA硬件的通用?

P4语言是为了使用软件定义“包转发数据平面”(或网络交换机)而创建的。该语言尤其与硬件厂商Barefoot Networks有关。P4语言与谷歌帮助推广的名为“P4 Runtime”的东西不同。P4 Runtime提出了一个标准的运行时API,可以操纵由P4编译的解决方案的控制平面。

P4确实可以很容易的为一个新协议定义一个数据包分类器/解析器。P4还指定了一套完整的表查找功能,它可以重写流过的数据包,例如消除VLAN标签。

这是否意味着P4的灵活性将导致FPGA的采用?我们认为有几个理由反对这种情况发生。

在FPGA硬件上提供P4子集的商业选项是存在的,但是它们目前的范围有限。此外,如前所述,由于商业条款的限制,BittWare很难利用这些条款来创建一个我们可以随产品免费提供的示例程序。

需要注意的是,没有任何真实世界的FPGA应用可以完全用P4编写。例如,在一些例子中,跟随我们的解析器的接收端缩放(RSS)块不能用P4编写。然而,HLS C++可以用来编写任何一个块,甚至是结合两个功能的单个块。

另外,P4表查询函数基本上是用RTL或HLS C++编写的硬件专用运行库的封装器。程序员可以直接从HLS C++中调用这样的运行库,而不会受到任何惩罚。

最重要的是,在使用P4和HLS C++两种方法实现解析器后,我们实际上更倾向于HLS C++的方法。目前还不清楚FPGA上对P4的需求是否会增长到足以支持一个成熟的工具。HLS C++可以做得更多,也更成熟。

HLS的便携性和结论

我们希望对FPGA上的两个数据包解析器的实现进行解释,一个是用P4语言,另一个是用HLS C++,希望对你评估正确的方法有所帮助。

最后一点是关于我们FPGA卡之间的可移植性。在基于Xilinx FPGA的卡之间,HLS提供了一个简单的方法,几乎不需要任何改变。如果要移植到基于英特尔的卡上,比如我们的520N-MX,则需要修改源代码,特别是在兼容器的实用性方面。然而,基本概念是相同的。在这两种情况下,我们都是基于我们对FPGA翻译挑战的了解来构建C++。任意的C++代码在FPGA内运行效果会很差。然而,经过结构化并涂抹了实用程序的C++代码却能很好地运行。Xilinx或Intel所需要的改变非常相似,只是表达方式有些不同。

作为BittWare的SmartNIC Shell的一部分,我们的Parser可以帮助团队快速上手,在我们的FPGA卡上构建网络数据包处理应用。了解更多关于我们的卡的SmartNIC的信息,或与我们联系,讨论您的应用需求。

BittWare的Loopback例子重新部署了我们可以免费提供的SmartNIC shell的一个子集。这个子集包括我们的Parser库。

审核编辑:郭婷

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

    关注

    71

    文章

    2167

    浏览量

    121405
  • 服务器
    +关注

    关注

    12

    文章

    9160

    浏览量

    85418
  • C++
    C++
    +关注

    关注

    22

    文章

    2108

    浏览量

    73649
收藏 人收藏

    评论

    相关推荐

    mtu配置步骤详解 mtu与数据包丢失的关系

    MTU(Maximum Transmission Unit)即最大传输单元,是指一种通信协议的某一层上面所能通过的最大数据报大小,单位是字节。MTU配置步骤及其与数据包丢失的关系如下: MTU配置
    的头像 发表于 12-16 14:33 522次阅读

    华纳云:服务平均响应时间和数据包大小之间的影响

    服务的平均响应时间与数据包大小有一定的关系,但这只是影响响应时间的众多因素之一。具体来说,数据包大小对服务响应时间的影响可以从以下几个方面来理解: 1.
    的头像 发表于 10-10 14:01 237次阅读

    请问DCTCP与DCUDP 的登录数据包和心跳数据包与服务端是如何交互的?

    DCTCP与DCUDP的登录数据包和心跳数据包与服务端是如何交互的?
    发表于 07-25 06:37

    使用AT SAVETRANSLINK时UDP数据包丢失怎么解决?

    Android 发送一个小 UDP 数据包(5 字节)。这个小数据包被我的微控制在UART上接收到。微控制将更大的数据包(可变长度,约
    发表于 07-18 07:17

    在Iphone4上运行UDP接收数据包丢失怎么解决?

    Iphone4 上运行 UDP 接收,请注意非常大的数据包丢失。其他设备(包括 Ipad)的数据包丢失率要低得多。 使用另一个对等体(同时)与 ESP 模块并运行数据包嗅探
    发表于 07-18 06:56

    能否在ESP结束之前通过串行端口停止传入的UDP数据包的传输以解析下一个UDP数据包

    丢弃在ESP完成之前不需要的数据包,以便通过串行端口发送它以接收下一个数据包, 如果没有,我必须按顺序读取所有传入的数据包,需要的和不需要的, 而且波特率不足,主机处理开销大, 我
    发表于 07-16 06:18

    请问如何使用AT CIPSEND或AT CIPSENDBUF发送多个数据包

    我可以使用 AT CIPSEND 发送单个数据包。但是我必须发送一系列二进制数据包。如何使用AT CISEND或AT CIPSENDBUF发送多个数据包,什么是正确的算法? 到目前为止,我尝试
    发表于 07-15 07:37

    在AN65974中短数据包和零长数据包是什么意思?

    在 AN65974 中,短数据包和零长数据包是什么意思? 非常感谢!
    发表于 05-30 07:41

    如何在AIROC GUI上获取良好数据包和总数据包

    使用 IQxel-MW LifePoint 作为发生并发送波形BT_1DH5_00001111_Fs80M.iqvsg,但无法在 AIROC 工具中接收数据包。 以下是从 IQxel 发送
    发表于 05-22 06:39

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

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

    STM32H7接收数据包异常,一接收的数据出现两发送的内容怎么解决?

    );__HAL_UART_DISABLE_IT( huart1, DMA_IT_HT); 2、发送数据包1
    发表于 03-08 08:05

    CYUSB3013在ISO模式下配置设备时,最后一个数据包缺少LPF设置,这是为什么?

    我们的硬件产品是围绕 CYUSB3013 芯片构建的。 为了与设备通信,PC 使用同步端点。 当我们在 ISO 模式下配置设备时,突发长度为 11,每个间隔的 ISO 数据包数设置为 3,轮询间隔为
    发表于 02-26 06:07

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

    传统的数据包处理方式是数据包先到内核最后再到用户层进行处理。这种方式会增加额外的延迟和CPU开销,严重影响数据包处理的性能。 DPDK 绕过内核,在用户空间中实现快速数据包处理。
    的头像 发表于 02-25 11:28 944次阅读
    DPDK在AI驱动的高效<b class='flag-5'>数据包</b>处理应用

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

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

    TC387 rdc(解析器)代码不起作用的原因?

    我正在解码解析器信号,我正在使用为 TC38x 电机控制软件下载的 edsadc 和 rdc 库。 当我馈送解析器信号时,我看不到任何转换结果,因为它在 1 到 65536 值之间滑动。 正如你在
    发表于 01-22 06:17