超越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库。
数字机顶盒关键技术及交互应用
汇川技术与精功科技签署战略合作协议
继电器常见故障及处理方法
双臂机器人的作用可自动化收割黄瓜
动力电池企业拒做“泥足巨人”
构建BittWare的数据包解析器
回顾智能自动化学科前沿讲习班
大朋VR一体机,改善你的看片姿态
一意孤行的瑞典再次作出针对华为的决定
三星延长QLED寿命和效率的新方法
十年有我,不忘低温制冷“芯”
华为5nm制程工艺的麒麟处理器遭限制
思必驰的低功耗产品介绍
联想Z6 Pro 5G售价正式公布8GB+256GB版仅售3299元
诺基亚8什么时候上市?诺基亚8除了蔡司双摄没什么可期待的!诺基亚9才是一匹黑马
一只发生概率小于万分之一的Bug
采用点胶机手动滴涂焊膏的工艺简介
智能变电站作用
什么是OAS安全支付区块链
使用LED闪光灯作为布光和补光来解决手机拍照光线不足的问题