CN113037634B - 基于fpga的匹配动作表的处理方法、逻辑电路和设备 - Google Patents
基于fpga的匹配动作表的处理方法、逻辑电路和设备 Download PDFInfo
- Publication number
- CN113037634B CN113037634B CN202110349960.9A CN202110349960A CN113037634B CN 113037634 B CN113037634 B CN 113037634B CN 202110349960 A CN202110349960 A CN 202110349960A CN 113037634 B CN113037634 B CN 113037634B
- Authority
- CN
- China
- Prior art keywords
- action
- matching
- data
- module
- lookup
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
- H04L45/745—Address table lookup; Address filtering
- H04L45/7453—Address table lookup; Address filtering using hashing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提供了一种基于FPGA的匹配动作表的处理方法、逻辑电路和设备,所述基于FPGA的匹配动作表的处理方法包括:CPU配置查找表项;当一个网络包的包头信息、元组数据信息被输入后,从包头信息和元组数据信息提取查找关键字;将关键字送入查找表进行匹配查找;查找完成后,查找表输出匹配成功或失败的信号、以及匹配结果数据;如果匹配成功,则按照匹配结果中的动作码选择一个动作执行单元执行动作,对包头协议字段和元组数据进行相关操作后,送给下级匹配动作表,进行后续包处理。采用本发明的技术方案,可实现任意查找关键字的选择,任意包头协议字段的逻辑、算术运算和修改,做到了占用FPGA逻辑资源少,运行速度快。
Description
技术领域
本发明涉及网络技术领域,尤其涉及一种基于FPGA的匹配动作表的处理方法、逻辑电路和设备。
背景技术
软件定义网络(Software-Defined Networks,SDN)诞生于2006年。2009年,SDN入选麻省理工科技评论的 “未来十大突破性技术”。SDN的设计核心就是控制平面与数据平面分离,其主张通过集中式的控制器平台实现网络的控制。在SDN架构中,控制平面是逻辑集中的,通过某种协议将控制信息下发至底层的数据平面去执行。所以,控制平面被称为SDN的大脑,指挥整个数据网络的运行。得益于集中控制的优势,控制平面的存在使得网络的部署和配置更加智能和简化。支持编程的SDN控制平面使得网络更加智能,更加灵活和易于拓展。控制器通过SDN的南向协议的API可以对数据平面的网元设备下发指令,完成控制平面与数据平面的控制传输。
SDN实现了控制平面的可编程,但数据平面依然采用固定功能的交换机实现,这些传统交换机只支持已有的网络协议,不支持新定义的网络协议。随着数据中心的蓬勃发展,越来越多的新网络协议将被应用于数据中心,这些固定功能的交换机严重阻碍了这些新网络协议的应用。为了让数据平面同样具备可编程能力,2014年斯坦福大学的Nick McKeown教授和普林斯顿大学的Jennifer Rexford教授等人提出了P4(Programming Protocol-Independent Packet Processors)编程语言。
P4是一种协议无关的数据包处理编程语言,P4支持用户自定义匹配字段,协议解析过程和转发过程,从而能实现真正意义上的协议无关可编程网络数据平面。Barefoot公司研发的Tofino芯片完全支持P4语言编程,通过使用P4对报文解析器(Parser),匹配动作表(Match-Action Table)和报文逆解析器(Deparser)这三个模块的描述,可实现传统网络设备的功能,也可实现创新的网络功能。Tofino芯片虽然支持P4编程,并且其接口带宽达到了6.5Tbps,但其价格昂贵,不适合于像智能网卡这样只需较小接口带宽能力的应用场合,而FPGA以其可编程性和价格相对较低,成为了较小接口带宽网络应用的首选,基于FPGA的P4交换机已成为当前的研究热点。
如前所述,匹配动作表是三个P4语言描述的可编程模块之一,P4语言允许任意包头协议字段作为匹配表的查找关键字,并且允许动作执行单元对任意包头协议字段做逻辑运算或算术运算,Tofino芯片通过一个很大的多路选择电路来实现查找关键字的选择,然后在动作执行单元预置了几百个简化指令的处理器,这些硬件电路都耗费了大量的逻辑资源,这也是ASIC实现可编程交换机所需要付出的代价。由于Tofino芯片采用了7nm的工艺,这些逻辑资源只占用了整个芯片面积的7%,因此匹配-动作电路对整个芯片成本的影响并不突出,但如果FPGA使用同样的电路来实现匹配动作表,那么硬件电路所占用的逻辑资源对于FPGA设计将是一场灾难,以从1024比特的包头数据选择32比特的IP地址查找关键字为例,多路选择电路会占用3000多个FPGA的LUTs,如果使用Xilinx的Zynq 7z100,该款FPGA有277400个LUTs,按照十个匹配动作表估算,仅匹配动作表的查找关键字选择电路就会用掉Zynq 7z100的11%的逻辑资源,这么大的逻辑资源占用,是FPGA设计不可接受的。
P4 SDNet是赛灵思公司的工具,其可将P4语言转换为Px语言,然后利用SDNet编译器将Px语言转换为Verilog语言,Verilog语言是一种通用的硬件逻辑电路设计语言;P4FPGA是一个开源工具,其工作过程是先将P4程序转换为Bluespec程序,然后用Bluespec编译器将Bluespec程序转换为Verilog代码。上述工具都是将P4程序转换为另外一种高级语言,然后再转换为硬件描述语言,其转换的效率不高,表现为转换的匹配动作表逻辑电路会占用较大的FPGA逻辑资源,逻辑电路运行的时钟频率较低。必须找到一种既占用逻辑资源少,又具备高速查表和动作执行的硬件电路设计方法,才能满足在FPGA上实现可编程匹配动作表的实际应用要求。
发明内容
针对以上技术问题,本发明公开了一种基于FPGA的匹配动作表的处理方法、逻辑电路和设备,解决了现有P4语言描述的匹配动作表转换为FPGA硬件电路存在的占用逻辑资源大,运行速度慢的问题。
对此,本发明采用的技术方案为:
一种基于FPGA的匹配动作表的处理方法,其特征在于:
所述基于FPGA的匹配动作表的输入信号包括包头信息、元组数据信息;
所述基于FPGA的匹配动作表的处理方法包括:
CPU配置查找表项;
当一个网络包的包头信息、元组数据信息被输入后,从包头信息和元组数据信息提取查找关键字;
将关键字送入查找表进行匹配查找;
查找完成后,查找表输出匹配成功或失败的信号、以及匹配结果数据;
如果匹配成功,则按照匹配结果中的动作码选择一个动作执行单元执行动作,对包头协议字段和元组数据进行逻辑运算、算术运算和修改、添加操作,最后将新产生的包头协议字段、元组数据送给下级匹配动作表,进行后续包处理。
采用此技术方案,匹配动作表可实现任意查找关键字的选择,任意包头协议字段的逻辑、算术运算和修改,做到了占用FPGA逻辑资源少,运行速度快,并且采用流水线模块化的结构,对报文的处理没有冲突和停顿,每个时钟周期处理一个数据包的表项匹配与动作执行,占用FPGA资源少,运行速度快,能够灵活适应各种查找算法。
作为本发明的进一步改进,所述基于FPGA的匹配动作表的处理方法包括:对输入的包头信息和元组数据寄存器打拍,将打拍后输出的包头信息和元组数据与查找表模块输出的匹配结果信号时序对齐。
作为本发明的进一步改进,所述CPU配置查找表项,先将需要配置的表项内容写入CPU配置模块内部的写数据寄存器,然后写CPU配置模块的表项索引寄存器和读写选择寄存器,最后写CPU配置模块的表项访问启动标志位;其中所述表项内容包括查找关键字、动作码和动作数据。
作为本发明的进一步改进,所述包头信息包含前级报文解析器解析出的包头各协议层的协议字段,以及协议字段的有效标志位;元组数据信息包含数据包的输入端口号、输出端口号、包长、优先级、多播组号以及用户自定义的包信息。
本发明还公开了一种基于FPGA的匹配动作表的逻辑电路,所述基于FPGA的匹配动作表的输入信号包括包头信息、元组数据信息;
所述基于FPGA的匹配动作表的逻辑电路包括:
CPU配置模块,用于对查找表项的配置,包括对查找表模块的读操作和写操作;
查找关键字构造模块,用于产生查表关键字,并将查找关键字输出给查找表模块;
查找表模块,使用输入的查找关键字与查找表项中的匹配关键字进行匹配,并输出匹配成功信号、匹配失败信号,以及匹配结果数据到动作执行模块;
动作执行模块,按照匹配结果中的动作码执行动作,对包头协议字段和元组数据进行逻辑运算、算术运算和修改、添加操作,最后将新产生的包头协议字段、元组数据送给下级匹配动作表,进行后续包处理;也就是修改包头信息和元组数据,然后将新的包头信息和元组数据输出到下一级匹配动作表。
作为本发明的进一步改进,所述基于FPGA的匹配动作表的逻辑电路还包括:
包头与元组数据寄存器模块,用来对输入的包头信息和元组数据寄存器打拍,将打拍后输出的包头信息和元组数据与查找表模块输出的匹配结果信号时序对齐。
作为本发明的进一步改进,所述动作执行模块接收来自查找表模块的匹配成功、失败信号和匹配结果数据,同时接收来自包头与元组数据寄存器模块的包头信息和元组数据,按照匹配结果中的动作码执行动作。
作为本发明的进一步改进,所述包头信息包含前级报文解析器解析出的包头各协议层的协议字段,以及协议字段的有效标志位;元组数据信息包含数据包的输入端口号、输出端口号、包长、优先级、多播组号以及用户自定义的包信息。
作为本发明的进一步改进,所述CPU配置模块将需要配置的表项内容写入CPU配置模块内部的写数据寄存器,然后写CPU配置模块的表项索引寄存器和读写选择寄存器,最后写CPU配置模块的表项访问启动标志位;其中所述表项内容包括查找关键字、动作码和动作数据。
本发明公开了一种设备,其包括相连的处理器和存储器,所述处理器用于执行所述存储器中存储的计算机程序,以执行如上任一项所述的基于FPGA的匹配动作表的处理方法。
本发明公开了一种计算机可读存储介质,所述计算机可读存储介质包括计算机程序,当计算机程序在计算机上运行时,以执行如上任一项所述的基于FPGA的匹配动作表的处理方法。
本发明公开了一种基于FPGA的匹配动作表的逻辑电路的设计方法,其包括:
实例化查找关键字构造模块,计算P4程序中的查找关键字的位宽,定义相同位宽的查找关键字信号;根据P4程序定义的查找关键字,将包头协议字段或者某个元组数据字段赋值给查找关键字信号;
实例化CPU配置模块,计算P4程序中的查找关键字、动作码以及动作数据的位宽,定义相同位宽的查找表模块写数据信号和读数据信号;计算表项大小的位宽,定义相同位宽的表项索引信号;
根据P4程序中的查找算法选择语句,选择对应的查找模块进行实例化,计算P4程序中的查找关键字的位宽,定义相同位宽的查找关键字输入信号;计算P4程序中的动作数据和动作执行单元数量的位宽,定义相同位宽的匹配结果数据输出信号;
实例化包头与元组数据寄存器模块,根据P4程序中的查找算法选择语句,设置与查找模块相对应的打拍级数参数值;
实例化动作执行模块, P4程序中定义的查找表的每一个动作都实例化成一个动作执行单元,方法是将每一个动作的P4语句转换为动作执行单元的Verilog语句;
将匹配动作表的输入信号包头信息、元组数据信息连接到查找关键字构造模块和包头与元组数据寄存器模块;将查找关键字构造模块输出的查找关键字信号连接到查找表模块,CPU配置模块输出的表项读写信号也连接到查找表模块;将查找表模块输出的匹配成功信号、匹配失败信号、匹配结果数据信号连接到动作执行模块,包头与元组数据寄存器模块输出的包头、元组数据信号也连接到动作执行模块;
完成上述模块连接后,就得到了一个具备P4定义查找表功能的FPGA逻辑电路。
与现有技术相比,本发明的有益效果为:
第一,采用本发明的技术方案,通过查找关键字构造、匹配动作执行和查找算法的功能分离,以及多种查找算法模块的预先设计与选择,满足了查找算法的可编程性。另外,本发明技术方案提出的关键字信号位宽、表项索引信号位宽、动作码和动作数据信号位宽的参数化设计,满足了查找关键字、表项大小和执行动作的可编程性。
第二,采用本发明的技术方案,按照P4代码关键字定义构造查找关键字信号,以及直接将动作执行单元的P4代码转换为Verilog代码,简化了逻辑电路设计,节省了FPGA资源,显著提高了动作执行模块的运行速度。
第三,采用本发明的技术方案,匹配动作表可实现任意查找关键字的选择,任意包头协议字段的逻辑、算术运算和修改,做到了占用FPGA逻辑资源少,运行速度快,并且采用流水线模块化的结构,对报文的处理没有冲突和停顿,每个时钟周期处理一个数据包的表项匹配与动作执行。
附图说明
图1为本发明实施例匹配动作表逻辑电路的结构示意图。
图2为本发明实施例匹配动作表逻辑电路实例化的流程示意图。
图3为本发明实施例匹配动作表逻辑电路的工作流程示意图。
具体实施方式
下面对本发明的较优的实施例作进一步的详细说明。
一种基于FPGA的匹配动作表的处理方法,该匹配动作表的输入信号包括包头信息、元组数据信息。其中包头信息包含前级报文解析器解析出的包头各协议层的协议字段,以及协议字段的有效标志位;元组数据信息包含数据包的输入端口号、输出端口号、包长、优先级、多播组号以及用户自定义的包信息。
所述基于FPGA的匹配动作表的处理方法包括:CPU配置查找表项,当一个网络包的包头信息、元组数据信息被输入后,从包头信息和元组数据信息选择查找关键字,接着将关键字送入查找表做匹配,然后查找表输出匹配成功或失败信号,以及匹配结果数据,如果匹配成功,则按照匹配结果中的动作码选择一个动作执行单元执行动作,对包头协议字段和元组数据进行逻辑运算、算术运算和修改、添加操作,最后将新产生的包头协议字段、元组数据送给下级匹配动作表,进行后续包处理。
其中,所述CPU配置查找表项,先将需要配置的表项内容写入CPU配置模块内部的写数据寄存器,然后写CPU配置模块的表项索引寄存器和读写选择寄存器,最后写CPU配置模块的表项访问启动标志位;其中所述表项内容包括查找关键字、动作码和动作数据。
进一步的,该处理方法还包括:对输入的包头信息和元组数据寄存器打拍,将打拍后输出的包头信息和元组数据与查找表模块输出的匹配结果信号时序对齐。
本发明实施例还公开了一种基于FPGA的匹配动作表的逻辑电路,其包括查找关键字构造模块、CPU配置模块、查找表模块、包头与元组数据寄存器模块、动作执行模块共五个模块。
查找关键字构造模块用于产生查表关键字,并将查找关键字输出给查找表模块。
由于P4程序中定义的查找关键字是确定的某个包头协议字段或者某个元组数据字段,因此可以利用FPGA逻辑的可编程特性,直接将该字段赋值给查表关键字信号,在FPGA中表现为将选定的字段连线到查表关键字信号,这只会占用少量的连线资源,对FPGA逻辑资源的占用几乎可以忽略不计。
利用这种给查找关键字信号直接赋值的方法,避免了占用大量逻辑资源的多路选择电路的使用,将逻辑资源的使用量降到最低。由于只使用了连线资源,没有使用任何组合逻辑,查找关键字构造模块运行的速度也可以达到最快。
CPU配置模块用于对查找表项的配置,包括对查找表模块的读操作和写操作。
查找表项的读写操作采用间接访问方式,软件先将需要配置的表项内容写入CPU配置模块内部的写数据寄存器,然后写CPU配置模块的表项索引寄存器和读写选择寄存器,最后写CPU配置模块的表项访问启动标志位。其中表项内容包括匹配关键字和匹配结果数据。CPU配置模块检测到表项访问启动标志位有效后,按照软件配置的表项索引和表项内容对查找表模块进行读、写操作。
对于读操作,CPU配置模块将查找表模块返回的数据保存到内部读数据寄存器,然后将表项访问启动标志位清零,软件查询到该标志位清零后,读取CPU配置模块内部的读数据寄存器,完成对查找表项的读取。
对于写操作,CPU配置模块收到查找表模块的写应答信号后,将表项访问启动标志位清零,软件查询到该标志位清零后,认为对查找表项的写操作完成。
利用间接访问的方式,可以实现软件对任意查找算法的查找表模块的读写访问,CPU配置模块内部的写数据寄存器、读数据寄存器、表项索引寄存器位宽均可通过参数来定义,这样就可以适配任何数据位宽,任何表项大小的查找表实例,满足了查找表的查找关键字、查找结果和表项大小可编程的需求。
查找表模块使用输入的查找关键字与查找表项中的匹配关键字进行匹配,并输出匹配成功信号、匹配失败信号,以及匹配结果数据到动作执行模块。其中匹配结果数据包括动作码和动作数据,动作码用来选择动作执行模块中的一个动作执行单元,动作数据是这个动作执行单元需要用到的参数。
按照不同的查找算法预先设计好对应的查找模块,例如精确匹配算法对应的HASH查找表模块,模糊匹配算法对应的TCAM查找表模块,最长前缀匹配算法对应的LPM查找表模块,这些查找表模块均采用流水线设计,每一个时钟周期都允许输入一个新的关键字进行查表,也就是查表的性能可以达到一个时钟周期查一个包的关键字。这些查找表模块的输入、输出接口完全相同,作为输入信号的查找关键字位宽可通过参数来定义,作为输出信号的匹配结果数据位宽也可通过参数定义,与CPU配置模块接口的表项索引、写表项数据、读表项数据位宽均可通过参数定义,查找表的表项数量也可通过参数定义。根据P4程序中的查找算法选择语句,从上面预先设计的查找模块中选择对应的模块,实例化后作为查找表模块。
综上所述,通过查找算法模块的参数化设计,以及多种查找算法模块的预先设计,满足了查找关键字位宽、匹配结果数据位宽、表项数量以及查找算法的可编程。
包头与元组数据寄存器模块用来对输入的包头信息和元组数据寄存器打拍,目的是将打拍后输出的包头信息和元组数据与查找表模块输出的匹配结果信号时序对齐。
由于不同的查找算法所花费的时钟周期数不同,例如HASH查找算法需要三个时钟周期完成查找,而TCAM查找算法需要七个时钟周期完成查找,为了保证到达动作执行模块的包头、元组数据和匹配结果都是同一个包的信号,必须将包头和元组数据用寄存器打拍,做时序对齐操作。
包头与元组数据寄存器模块的打拍级数可通过参数化定义,如上所述,如果采用HASH查找算法,则需要将打拍级数参数设置为三拍,才能保证包头、元组数据与查找表模块输出的匹配结果信号时序对齐,如果采用TCAM查找算法,则需要将打拍级数参数设置为七拍,才能保证包头、元组数据与查找表模块输出的匹配结果信号时序对齐。
动作执行模块接收来自查找表模块的匹配成功、失败信号和匹配结果数据,同时接收来自包头与元组数据寄存器模块的包头信息和元组数据,按照匹配结果中的动作码执行动作,也就是修改包头信息和元组数据,然后将新的包头信息和元组数据输出到下一级匹配动作表。
如果匹配成功信号有效,则按照匹配结果数据中的动作码,将包头信息、元组数据信息以及动作数据送给对应的动作执行单元,在动作执行单元中执行包头协议字段、元组数据的逻辑运算、算术运算、移位操作和修改,在P4程序中,针对某个包头、元组数据字段的运算是确定的,例如对IPv4协议头中的TTL字段的减1运算,并且P4语句的运算符号和Verilog语言的运算符号完全相同,例如都用“+”表示加法运算,用“&&”表示逻辑与运算,因此可以直接把P4程序中的运算代码转换为Verilog代码。
通过将P4的动作语句直接转换为Verilog代码的方式,简化了动作执行模块的设计,无需预先放置大量的处理器来执行运算,将占用的FPGA逻辑资源降到最低,动作执行使用的操作数来自包头协议字段、元组数据和查找表匹配结果,它们通过FPGA中的连线资源被送到动作执行逻辑电路,不需要复杂的多路选择电路来选择信号,节省FPGA资源的同时,显著提高了动作执行模块的运行速度。
参与包处理的查找关键字构造模块、查找表模块、包头与元组数据寄存器模块、动作执行模块均采用流水线设计,匹配与动作执行功能被分解成多个子功能,每一个子功能只需一个时钟周期即可完成,各子功能可并行处理不同的包信息,这样匹配动作表逻辑电路就可以实现每一个时钟周期处理一个包的高性能。
本发明实施例还公开了一种设备,其包括相连的处理器和存储器,其特征在于:所述处理器用于执行所述存储器中存储的计算机程序,以执行如上任一项所述的基于FPGA的匹配动作表的处理方法。
本发明实施例还公开了一种计算机可读存储介质,所述计算机可读存储介质包括计算机程序,当计算机程序在计算机上运行时,以执行如上任一项所述的基于FPGA的匹配动作表的处理方法。
本发明实施例还提供一种可编程匹配动作表的设计方法,实施步骤包括:
1)实例化查找关键字构造模块,计算P4程序中的查找关键字的位宽,定义相同位宽的查找关键字信号。根据P4程序定义的查找关键字,将包头协议字段或者某个元组数据字段赋值给查找关键字信号。
2)实例化CPU配置模块,计算P4程序中的查找关键字、动作码以及动作数据的位宽,定义相同位宽的查找表模块写数据信号和读数据信号。计算表项大小的位宽,定义相同位宽的表项索引信号。
3)根据P4程序中的查找算法选择语句,选择对应的查找模块进行实例化,计算P4程序中的查找关键字的位宽,定义相同位宽的查找关键字输入信号。计算P4程序中的动作数据和动作执行单元数量的位宽,定义相同位宽的匹配结果数据输出信号。
4)实例化包头与元组数据寄存器模块,根据P4程序中的查找算法选择语句,设置与查找模块相对应的打拍级数参数值。
5)实例化动作执行模块, P4程序中定义的查找表的每一个动作都实例化成一个动作执行单元,方法是将每一个动作的P4语句转换为动作执行单元的Verilog语句。
6)将匹配动作表的输入信号包头信息、元组数据信息连接到查找关键字构造模块和包头与元组数据寄存器模块;将查找关键字构造模块输出的查找关键字信号连接到查找表模块,CPU配置模块输出的表项读写信号也连接到查找表模块;将查找表模块输出的匹配成功信号、匹配失败信号、匹配结果数据信号连接到动作执行模块,包头与元组数据寄存器模块输出的包头、元组数据信号也连接到动作执行模块。完成上述模块连接后,就得到了一个具备P4定义查找表功能的FPGA逻辑电路。
下面进行进一步具体的说明。
如图1所示,本实施例基于FPGA的匹配动作表的逻辑电路包括:
查找关键字构造模块,用于产生查表关键字,并将查找关键字输出给查找表模块。
CPU配置模块,用于对查找表项的配置,包括对查找表模块的读操作和写操作。
查找表模块,使用输入的查找关键字与查找表项中的匹配关键字进行匹配,并输出匹配成功、失败信号,以及匹配结果数据到动作执行模块。
包头与元组数据寄存器模块,用来对输入的包头信息和元组数据寄存器打拍,目的是将打拍后输出的包头信息和元组数据与查找表模块输出的匹配结果信号时序对齐,输出的包头信息和元组数据送到动作执行模块。
动作执行模块,接收来自查找表模块的匹配成功、失败信号和匹配结果数据,同时接收来自包头与元组数据寄存器模块的包头信息和元组数据,按照匹配结果中的动作码执行动作,也就是修改包头信息和元组数据,然后将新的包头信息和元组数据输出到下一级匹配动作表。
匹配动作表逻辑电路的输入信号包括包头信息headers_in、元组数据信息metadata_in。其中包头信息headers_in由前级报文解析器产生,包含包头各协议层的协议字段以及协议字段的有效标志位;元组数据信息metadata_in是与包输入、包输出和包处理相关的信息,包含数据包的输入端口号、输出端口号、包长、优先级、多播组号以及用户自定义的包信息。
包头信息headers_in、元组数据信息metadata_in输入匹配动作表逻辑电路后会送给查找关键字构造模块和包头与元组数据寄存器模块,查找关键字构造模块将构造的查找关键字lookup key输出给查找表模块,包头与元组数据寄存器模块将打拍后的包头信息headers_reg、元组数据信息metadata_reg送给动作执行模块。
CPU接口信号输入匹配动作表逻辑电路后会送给CPU配置模块,在CPU完成间接访问配置并写表项访问启动标志位后,CPU配置模块产生查找表读写信号并送给查找表模块,查找表模块完成读操作后,将读数据信号返回给CPU配置模块。
查找表模块在完成一个包的关键字查找后,将匹配成功信号hit、匹配失败信号miss、动作码信号action code和动作数据信号action data送给动作执行模块。
动作执行模块完成动作执行后,将修改后的新的包头信息headers_out、元组数据信息metadata_out输出给下一级匹配动作表逻辑电路。
下文将以P4语言描述的一个查找表为例,详细说明基于FPGA的匹配动作表的实例化流程。
P4语言描述的一个典型的查找表如下所示:
// 动作执行单元1定义
action Drop_action() {
metadata.egress_port = DROP_PORT;
}
// 动作执行单元2定义
action Set_nhop(bit<32> ipv4_dest, bit<9> port) {
metadata.nexthop = ipv4_dest;
headers.ip.ttl = headers.ip.ttl – 1;
metadata.egress_port = port;
}
// 查找表定义
table ipv4_match {
// 查找关键字为headers.ip_dstAddr,查找算法选择lpm算法
key = { headers.ip_dstAddr: lpm; }
// 查找表项可配置的动作有Drop_action或者Set_nhop
actions = { Drop_action;
Set_nhop;
}
// 查找表项大小为1024个
size = 1024;
// 查找表未匹配时缺省执行的动作是Drop_action
default_action = Drop_action;
}
由上面的P4代码可知,P4语言描述的查找表包括以下语句:第一部分是动作执行单元定义语句,可能存在多个动作执行单元,执行的动作包括对包头协议字段和元组数据的逻辑运算、算术运算和修改、添加操作,可能会用到表项查找结果中的动作数据参与运算,这些动作数据是数据转发面运行过程中,由控制器配置到查找表中的;第二部分是查找关键字定义语句,主要从包头或者元组数据选择部分字段作为查找关键字;第三部分是查找算法选择语句,例如exact表示选择精确匹配算法,ternary表示选择模糊匹配算法,lpm表示选择最长前缀匹配算法;第四部分是表项大小定义语句。
如图2所示,本实施例实现的基于FPGA的匹配动作表的设计方法,即实例化流程包括:
1)实例化查找关键字构造模块,构造并输出查找关键字信号。上述P4代码中定义的查找关键字是headers.ip_dstAddr,由计算可知,该查找关键字的数据位宽为32比特,因此定义查找关键字信号lookup key的位宽为32比特,并将headers.ip_dstAddr信号赋值给查找关键字信号lookup key,完成查找关键字的构造。
2)CPU配置模块的逻辑电路已预先设计好,可完成对查找表模块的间接访问,只需要给表项读写数据信号位宽参数赋值,表项索引位宽参数赋值,即可完成CPU配置模块的实例化。由流程1可知,查找关键字位宽为32比特;上述P4代码定义了两种动作执行单元,因此可以通过1比特的动作码来表示这两种动作执行单元;动作执行单元Drop_action无参数,动作执行单元Set_nhop的参数是ipv4_dest和port,这两者的数据位宽和为41比特,因此动作数据的位宽为41比特。构成一个表项的元素包括查找关键字、动作码和动作数据,由上面的计算可知,这三者的数据位宽和为74比特,因此给表项读写数据信号位宽参数赋值74。上述P4代码定义的查找表项大小为1024个,通过计算可知,通过10比特的索引号即可对这1024个表项编号,因此给表项索引位宽参数赋值10。
3)选择查找算法模块,实例化查找表模块,给查找关键字、动作码和动作数据的位宽参数赋值。上述P4代码选择的查找算法是lpm算法,也就是最长前缀匹配算法,具备lpm算法的查找模块已预先设计好,其输入、输出接口信号与图1中的查找表模块接口信号完全相同,查找关键字输入信号位宽、来自CPU配置模块的表项读写数据与表项索引信号位宽、输出的动作码位宽、动作数据位宽均为参数化定义。根据流程1和2的计算结果,给查找关键字信号位宽赋值32,表项读写数据位宽赋值74,表项索引信号位宽赋值10,动作码位宽赋值1,动作数据位宽赋值74。
4)实例化包头与元组数据寄存器模块,给打拍级数参数赋值。上述P4代码选择的lpm查找算法需要8个时钟周期完成关键字查找,为了保证到达动作执行模块的包头、元组数据和匹配结果都是同一个包的信号,需要给包头与元组数据寄存器模块打拍级数参数赋值8,也就是将包头与元组数据信号延迟8个时钟周期输出。
5)实例化动作执行模块,将动作执行单元的P4代码转换为Verilog代码。将上述P4代码中的动作执行单元Drop_action转换为下面Verilog代码:
headers_out0 = headers_reg;
metadata_out0 = metadata_reg;
metadata_out0.egress_port = DROP_PORT;
将动作执行单元Set_nhop转换为下面Verilog代码:
headers_out1 = headers_reg;
metadata_out1 = metadata_reg;
metadata_out1.nexthop = ipv4_dest;
headers_out1.ip.ttl = headers_reg.ip.ttl – 1;
metadata_out1.egress_port = port;
最后通过动作码action code来选择这两个动作执行单元修改的包头、元组数据作为输出信号。动作码为0时,选择headers_out0和metadata_out0做为输出信号;动作码为1时,选择headers_out1和metadata_out1做为输出信号。
6)连接各模块接口信号。将匹配动作表的输入信号包头信息、元组数据信息连接到查找关键字构造模块和包头与元组数据寄存器模块;将查找关键字构造模块输出的查找关键字信号连接到查找表模块,CPU配置模块输出的表项读写信号也连接到查找表模块;将查找表模块输出的匹配成功、失败信号、匹配结果数据信号连接到动作执行模块,包头与元组数据寄存器模块输出的包头、元组数据信号也连接到动作执行模块。完成上述模块连接后,就得到了一个具备P4查找表定义功能的FPGA逻辑电路。
如图3所示,本实施例基于FPGA的匹配动作表的处理方法,也就是基于FPGA的匹配动作表实现的工作流程包括:
1)CPU配置查找表项。采用间接访问的方式来配置查找表项,也就是软件先将需要配置的表项内容写入CPU配置模块内部的写数据寄存器,然后写CPU配置模块的表项索引寄存器和读写选择寄存器,最后写CPU配置模块的表项访问启动标志位。表项内容包括查找关键字、动作码和动作数据。
2)当一个包的包头信息、元组数据信息输入匹配-动作逻辑电路后,查找关键字构造模块从包头信息、元组数据信息提取查找关键字,并将查找关键字输出给查找表模块。
3)查找表模块使用查找关键字在查找表中进行匹配查找,查找完成后,将匹配成功信号、匹配失败信号、动作码和动作数据信号输出给动作执行模块。
4)动作执行模块根据动作码选择相应的动作执行单元,并执行动作,输出修改后的包头信息、元组数据信息到下级匹配-动作逻辑电路。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
Claims (9)
1.一种基于FPGA的匹配动作表的处理方法,其特征在于:
所述基于FPGA的匹配动作表的输入信号包括包头信息、元组数据信息;所述元组数据信息包含数据包的输入端口号、输出端口号、包长、优先级、多播组号以及用户自定义的包信息;
所述基于FPGA的匹配动作表的处理方法包括:
CPU配置查找表项;计算P4程序中的查找关键字、动作码以及动作数据的位宽,定义相同位宽的查找表模块写数据信号和读数据信号;计算表项大小的位宽,定义相同位宽的表项索引信号;
当一个网络包的包头信息、元组数据信息被输入后,从包头信息和元组数据信息提取查找关键字;
将关键字送入查找表进行匹配查找;计算P4程序中的查找关键字的位宽,定义相同位宽的查找关键字信号;根据P4程序定义的查找关键字,将包头协议字段或者某个元组数据字段赋值给查找关键字信号;根据P4程序中的查找算法选择语句,选择对应的查找表模块进行实例化,计算P4程序中的查找关键字的位宽,定义相同位宽的查找关键字输入信号;计算P4程序中的动作数据和动作执行单元数量的位宽,定义相同位宽的匹配结果数据输出信号;
查找完成后,查找表输出匹配成功或失败的信号、以及匹配结果数据;
如果匹配成功,则按照匹配结果中的动作码选择一个动作执行单元执行动作,动作执行单元是将每一个动作的P4语句转换为动作执行单元的Verilog语句,对包头协议字段和元组数据进行逻辑运算、算术运算和修改、添加操作,最后将新产生的包头协议字段、元组数据送给下级匹配动作表,进行后续包处理。
2.根据权利要求1所述的基于FPGA的匹配动作表的处理方法,其特征在于:还包括:对输入的包头信息和元组数据寄存器打拍,将打拍后输出的包头信息和元组数据与查找表模块输出的匹配结果信号时序对齐。
3.根据权利要求2所述的基于FPGA的匹配动作表的处理方法,其特征在于:所述CPU配置查找表项,先将需要配置的表项内容写入CPU配置模块内部的写数据寄存器,然后写CPU配置模块的表项索引寄存器和读写选择寄存器,最后写CPU配置模块的表项访问启动标志位;其中所述表项内容包括查找关键字、动作码和动作数据。
4.根据权利要求1所述的基于FPGA的匹配动作表的处理方法,其特征在于:所述包头信息包含前级报文解析器解析出的包头各协议层的协议字段,以及协议字段的有效标志位。
5.一种基于FPGA的匹配动作表的逻辑电路,其特征在于:所述基于FPGA的匹配动作表的输入信号包括包头信息、元组数据信息;所述元组数据信息包含数据包的输入端口号、输出端口号、包长、优先级、多播组号以及用户自定义的包信息;
所述基于FPGA的匹配动作表的逻辑电路包括:
CPU配置模块,用于对查找表项的配置,包括对查找表模块的读操作和写操作;计算P4程序中的查找关键字、动作码以及动作数据的位宽,定义相同位宽的查找表模块写数据信号和读数据信号;计算表项大小的位宽,定义相同位宽的表项索引信号;
查找关键字构造模块,用于产生查表关键字,并将查找关键字输出给查找表模块;当一个网络包的包头信息、元组数据信息被输入后,从包头信息和元组数据信息提取查找关键字;计算P4程序中的查找关键字的位宽,定义相同位宽的查找关键字信号;根据P4程序定义的查找关键字,将包头协议字段或者某个元组数据字段赋值给查找关键字信号;
查找表模块,使用输入的查找关键字与查找表项中的匹配关键字进行匹配,并输出匹配成功信号、匹配失败信号,以及匹配结果数据到动作执行模块;根据P4程序中的查找算法选择语句,选择对应的查找表模块进行实例化,计算P4程序中的查找关键字的位宽,定义相同位宽的查找关键字输入信号;计算P4程序中的动作数据和动作执行单元数量的位宽,定义相同位宽的匹配结果数据输出信号;查找完成后,查找表输出匹配成功或失败的信号、以及匹配结果数据;
动作执行模块,P4程序中定义的查找表的每一个动作都实例化成一个动作执行单元,方法是将每一个动作的P4语句转换为动作执行单元的Verilog语句,按照匹配结果中的动作码选择一个动作执行单元执行动作,对包头协议字段和元组数据进行逻辑运算、算术运算和修改、添加操作,最后将新产生的包头协议字段、元组数据送给下级匹配动作表,进行后续包处理。
6.根据权利要求5所述的基于FPGA的匹配动作表的逻辑电路,其特征在于,还包括:
包头与元组数据寄存器模块,用来对输入的包头信息和元组数据寄存器打拍,将打拍后输出的包头信息和元组数据与查找表模块输出的匹配结果信号时序对齐;
所述动作执行模块接收来自查找表模块的匹配成功、失败信号和匹配结果数据,同时接收来自包头与元组数据寄存器模块的包头信息和元组数据,按照匹配结果中的动作码执行动作。
7.根据权利要求5所述的基于FPGA的匹配动作表的逻辑电路,其特征在于:所述包头信息包含前级报文解析器解析出的包头各协议层的协议字段,以及协议字段的有效标志位;所述CPU配置模块将需要配置的表项内容写入CPU配置模块内部的写数据寄存器,然后写CPU配置模块的表项索引寄存器和读写选择寄存器,最后写CPU配置模块的表项访问启动标志位;其中所述表项内容包括查找关键字、动作码和动作数据。
8.一种设备,其包括相连的处理器和存储器,其特征在于:所述处理器用于执行所述存储器中存储的计算机程序,以执行如权利要求1~4中任一项所述的基于FPGA的匹配动作表的处理方法。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括计算机程序,当计算机程序在计算机上运行时,以执行如权利要求1~4中任一项所述的基于FPGA的匹配动作表的处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110349960.9A CN113037634B (zh) | 2021-03-31 | 2021-03-31 | 基于fpga的匹配动作表的处理方法、逻辑电路和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110349960.9A CN113037634B (zh) | 2021-03-31 | 2021-03-31 | 基于fpga的匹配动作表的处理方法、逻辑电路和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113037634A CN113037634A (zh) | 2021-06-25 |
CN113037634B true CN113037634B (zh) | 2022-12-06 |
Family
ID=76453454
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110349960.9A Active CN113037634B (zh) | 2021-03-31 | 2021-03-31 | 基于fpga的匹配动作表的处理方法、逻辑电路和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113037634B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113992610B (zh) * | 2021-09-27 | 2024-01-26 | 西安电子科技大学 | 支持网络处理器的数据包包头处理电路***及其控制方法 |
CN114006819A (zh) * | 2021-11-03 | 2022-02-01 | 北京天融信网络安全技术有限公司 | 一种检测策略生成及装置、数据传输方法及装置 |
CN114615195A (zh) * | 2022-02-25 | 2022-06-10 | 阳光凯讯(北京)科技有限公司 | 用于fpga的以太网五元组快速匹配查找方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110247908A (zh) * | 2019-06-11 | 2019-09-17 | 优刻得科技股份有限公司 | 基于可编程网络交换技术的数据发送的方法、装置和*** |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10681007B2 (en) * | 2015-06-05 | 2020-06-09 | Konvax Corporation | String search and matching for gate functionality |
US10341242B2 (en) * | 2016-12-13 | 2019-07-02 | Oracle International Corporation | System and method for providing a programmable packet classification framework for use in a network device |
US10268464B2 (en) * | 2017-07-07 | 2019-04-23 | Intel Corporation | Technologies for network application programming with field-programmable gate arrays |
CN108881032B (zh) * | 2018-06-19 | 2021-01-29 | 福州大学 | 一种基于匹配优化的p4流水线性能提升方法 |
US11409805B2 (en) * | 2019-05-30 | 2022-08-09 | AdMarketplace | Computer implemented system and methods for implementing a search engine access point enhanced for suggested listing navigation |
US20220278930A1 (en) * | 2019-09-04 | 2022-09-01 | Telefonaktiebolaget Lm Ericsson (Publ) | Method for debugging the parser in programmable routers |
-
2021
- 2021-03-31 CN CN202110349960.9A patent/CN113037634B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110247908A (zh) * | 2019-06-11 | 2019-09-17 | 优刻得科技股份有限公司 | 基于可编程网络交换技术的数据发送的方法、装置和*** |
Non-Patent Citations (1)
Title |
---|
一种可重构以太网数据包解析器中可重构单元的设计;赵宇等;《计算机工程与科学》;20200215;第42卷(第02期);第220-227页 * |
Also Published As
Publication number | Publication date |
---|---|
CN113037634A (zh) | 2021-06-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113037634B (zh) | 基于fpga的匹配动作表的处理方法、逻辑电路和设备 | |
US11677664B2 (en) | Apparatus and method of generating lookups and making decisions for packet modifying and forwarding in a software-defined network engine | |
US8065259B1 (en) | Pattern matching in a multiprocessor environment | |
CN108875064B (zh) | 基于FPGA的OpenFlow多维数据匹配查找方法 | |
WO1996034479A1 (en) | Packet switching engine | |
US11218574B2 (en) | Directed graph traversal using content-addressable memory | |
CN113411380B (zh) | 基于fpga可编程会话表的处理方法、逻辑电路和设备 | |
US7937495B2 (en) | System and method for modifying data transferred from a source to a destination | |
JP2015165649A (ja) | ソフトウェア・デファインド・ネットワーク処理エンジンにおける並行かつ条件付きのデータ操作の方法および装置 | |
US20020023250A1 (en) | Parameterized designing method of data driven information processor employing self-timed pipeline control | |
US11425036B1 (en) | Pipelined match-action circuitry | |
CN110933001B (zh) | 一种可扩展的可重构交换机包解析器基本处理单元结构 | |
Hsu et al. | The design of a configurable and low-latency packet parsing system for communication networks | |
Chen et al. | A multi-character transition string matching architecture based on Aho-Corasick algorithm | |
WO2022222756A1 (zh) | 芯片、处理数据的方法和计算机设备 | |
Zolfaghari et al. | Run-to-Completion versus Pipelined: The Case of 100 Gbps Packet Parsing | |
EP4027594B1 (en) | Information processing device, information processing method, and information processing program | |
CN111177198B (zh) | 一种用于芯片的内容查找方法 | |
EP4011051B1 (en) | A network packet processor for processing a data packet | |
CN112994886B (zh) | 一种用于生成tcam搜索关键字的硬件及实现方法 | |
Ibrahim | HP4 High-Performance Programmable Packet Parser | |
CN118317006A (zh) | 一种紧耦合的可重构网络包处理引擎的硬件实现装置 | |
JP5639965B2 (ja) | 非同期動作検索回路 | |
US20010007958A1 (en) | Data driven computer, and data driven computer system | |
JPS63259726A (ja) | レジスタ転送動作の解読装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20211206 Address after: 518000 6520, building 7, block a, Bao'an Internet industry base, houye community, Xixiang street, Bao'an District, Shenzhen, Guangdong Province Applicant after: Shenzhen Xinyuan Network Technology Co.,Ltd. Address before: 912, central business building, 88 Fuhua 1st Road, Futian District, Shenzhen, Guangdong 518000 Applicant before: Li Yuanping |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |