一种配置地址表的方法、FPGA和应用该FPGA的网络设备与流程

文档序号:17985306发布日期:2019-06-22 00:22阅读:171来源:国知局
一种配置地址表的方法、FPGA和应用该FPGA的网络设备与流程

本发明涉及网络通信技术,尤其涉及一种配置地址表的方法、现场可编程门阵列(field-programmablegatearray,fpga)及应用该fpga的网络设备。



背景技术:

网络通信中,在实现许多网络协议时,需要根据输入的数据(称为关键字)在地址表中找到对应的存储地址,然后获取该存储地址中的目标数据。例如,当交换机从某个接口接收到数据帧时,该交换机提取该数据帧的目的媒体访问控制(mediaaccesscontrol,mac)地址,然后根据该目的mac地址查找地址表,得到对应的存储地址,然后读取该存储地址对应的转发表项,得到对应的端口,并向该端口转发该数据帧。

当前,通常使用交换机中的fpga执行上述查找地址表的功能。当该地址表的规格较大时,该地址表被存储在与该fpga连接的支持并行查找的内容可寻址存储器(contentaddressablememory,cam)中。然而由于cam具有大功耗,高成本的特点,对于一些地址表的规格较小(例如表项数量小于1k),但是带宽较大的场景(即单位时间内需要处理的报文数较多的场景),需要fpga在单位时间内频繁访问cam。在这种情况下,使用在fpga之外设置cam的方式成本较高且不能实现快速查找。



技术实现要素:

本发明提供了一种在fpga中配置地址表的方法、fpga和应用该fpga的网络设备,能够将地址表存储在fpga上,并减少fpga上的地址表的表项数,提高fpga的查找效率。

本发明第一方面提供了一种配置地址表的方法,该方法应用于现场可编程门阵列fpga中,该fpga包括k个存储块,k大于等于2。该fpga获取关键字,该关键字是根据第一数据流的第一报文生成的,该关键字的长度等于该fpga的关键字位宽。该fpga获取该关键字对应的索引号,该索引号用于查找该第一数据流的转发表项。该fpga将该关键字分为k个子关键字,该k个子关键字中的每个子关键字对应该k个存储块中的一个存储块。该fpga确定该k个子关键字中的每个子关键字在对应的存储块中的地址表项,根据该索引号在该地址表项中写入存储地址。

本发明上述方法中,fpga在配置地址表的过程中,将一个大位宽的关键字分为k个小位宽的子关键字,并根据该关键字对应的数据流的转发表项的索引号和该k个子关键字,在k个较小的存储块中写入相应的存储地址,使最终生成的地址表只有较少的表项数,因此可以被存储在fpga内部,能够避免为大位宽的关键字生成地址表时导致的表项数过多的问题,节约了fpga的存储空间。

可选地,获取该关键字之前,该fpga还用于获取该fpga的该关键字位宽以及获取该fpga的地址位宽,该地址位宽用于确定该fpga的每个存储块中的地址表的最大表项数。该fpga根据该关键字位宽和该地址位宽,确定该k个存储块。

可选地,该fpga确定对应该关键字位宽和该地址位宽的存储块的数量k;根据该地址位宽和该存储块的数量k,从该fpga的存储区域中确定该k个存储块。

其中,fpga根据自己的关键字位宽和地址位宽确定存储块的数量,能够充分利用fpga的存储空间。

可选地,每个存储块的数据位宽为该fpga能够提供的最大数据位宽,这样可以使该fpga所在的网络设备的转发表可以包括该最大数据位宽个转发表项,并能充分利用该fpga的查找性能。

可选地,在根据该索引号在该地址表项中写入存储地址时,该fpga确定该k个子关键字中的每个子关键字在对应的存储块中的地址表项;将该地址表项中该索引号对应的比特置1,保持该地址表项中的其他比特的值不变。

上述编码方式称为独热码。通过独热码的编码方式,使得每个子关键字在对应的存储块的地址表项中只占用一个比特。这样,其他关键字的子关键字可以占用该地址表项的其他比特,提高了地址表项的复用率,保证了该fpga可以用于查找的转发表的转发表项数等于该fpga的最大数据位宽。

可选地,该fpga接收查找请求,该查找请求是根据该第一数据流的第二报文生成的,该查找请求包括该关键字,该关键字的长度等于该fpga的关键字位宽。该fpga将该关键字分为该k个子关键字。该fpga分别以该k个子关键字中的每个子关键字为地址,读取该子关键字对应的存储块中的地址表项中的存储地址,得到k个存储地址。该fpga对该k个存储地址执行与操作,得到目标存储地址,并根据该目标存储地址生成该索引号。

上述过程中,fpga将接收的关键字分为k个子关键字,并根据该k个子关键字并行读取k个存储块,得到该k个存储块中的k个存储地址,并根据该k个存储地址得到目标存储地址,根据该目标存储地址生成索引号。由于fpga是根据k个子关键字并行读取k个较小的地址表,可以很快得到k个存储地址进而得到该索引号。因此,提高了fpga的查找效率。

本发明第一方面的方法以及各种可选方式可以按照合理方式自由组合,各种组合都在本发明的保护范围之内。

本发明第二方面提供了一种现场可编程门阵列fpga,该fpga包括:计算电路和k个存储块,k大于等于2。该计算电路用于:获取关键字,该关键字是根据第一数据流的第一报文生成的;该关键字的长度等于该fpga的关键字位宽;获取该关键字对应的索引号,该索引号用于查找该第一数据流的转发表项;将该关键字分为k个子关键字,该k个子关键字中的每个子关键字对应该k个存储块中的一个存储块;确定该k个子关键字中的每个子关键字在对应的存储块中的地址表项,根据该索引号在该地址表项中写入存储地址。该k个存储块中的每个存储块用于:存储该计算电路写入的存储地址。

可选地,获取关键字之前,该计算电路还获取该关键字位宽和该fpga的地址位宽,该地址位宽用于确定该fpga的每个存储块中的地址表的最大表项数,并根据该关键字位宽和该地址位宽,确定该k个存储块。

可选地,当确定该k个存储块时,该计算电路确定对应该关键字位宽和该地址位宽的存储块的数量k,并根据该地址位宽和该存储块的数量k,从该fpga的存储区域中确定该k个存储块。

可选地,当根据该索引号在该地址表项中写入存储地址时,该计算电路确定该k个子关键字中的每个子关键字在对应的存储块中的地址表项,将该地址表项中该索引号对应的比特置1,并保持该地址表项中的其他比特的值不变。

可选地,该计算电路还接收查找请求,该查找请求是根据该第一数据流的第二报文生成的,该查找请求包括该关键字。该计算电路将该关键字分为k个子关键字,每个子关键字对应该k个存储块中的一个存储块。该计算电路分别以该k个子关键字中的每个子关键字为地址,读取该子关键字对应的存储块中的地址表项中的存储地址,得到k个存储地址。该计算电路对该k个存储地址执行与操作得到目标存储地址,并根据该目标存储地址生成该索引号。

本发明第二方面的fpga以及各种可选方式可以按照合理方式自由组合,各种组合都在本发明的保护范围之内。

本发明实施例第二方面的fpga及其各实现方式是第一方面的方法及其各实现方式对应的装置,其有益效果可参考第一方面的方法及其各实现方式。

本发明第三方面提供了一种网络设备,该网络设备包括处理器和现场可编程门阵列fpga,该fpga包括k个存储块。该处理器接收第一数据流的第一报文,根据该第一报文生成关键字和索引号,该关键字的长度等于该fpga的关键字位宽,该索引号用于查找该第一数据流的转发表项;向该fpga发送该关键字和该索引号。该fpga接收该关键字和该索引号,将该关键字分为k个子关键字,该k个子关键字中的每个子关键字对应该k个存储块中的一个存储块。该fpga确定该k个子关键字中的每个子关键字在对应的存储块中的地址表项,根据该索引号在该地址表项中写入存储地址。

可选地,该fpga还获取该fpga的该关键字位宽,并获取该fpga的地址位宽,该地址位宽用于确定该fpga的每个存储块中的地址表的最大表项数。该fpga还根据该关键字位宽和该地址位宽,确定该k个存储块。

可选地,当确定该k个存储块时,该fpga确定对应该关键字位宽和该地址位宽的存储块的数量k,根据该地址位宽和该存储块的数量k,从该fpga的存储区域中确定该k个存储块。

可选地,当根据该索引号在该地址表项中写入存储地址时,该fpga确定该k个子关键字中的每个子关键字在对应的存储块中的地址表项,将该地址表项中该索引号对应的比特置1,并保持该地址表项中的其他比特的值不变。

可选地,当根据该第一报文生成索引号时,该处理器根据该第一报文为该数据流生成该转发表项,将该转发表项写入转发表,将该转发表项在该转发表中的序号作为该索引号。

可选地,该处理器还接收该第一数据流的第二报文,该第二报文为该第一报文的后续报文;根据该第二报文生成该关键字;向该fpga发送查找请求,该查找请求包括该关键字。该fpga还接收该查找请求;将该关键字分为该k个子关键字;分别以该k个子关键字中的每个子关键字为地址,读取该子关键字对应的存储块中的地址表项中的存储地址,得到k个存储地址;对该k个存储地址执行与操作,得到目标存储地址;根据该目标存储地址生成该索引号。该fpga还将该索引号发送给该处理器;该处理器还接收该索引号,根据该索引号获取该转发表项,根据该转发表项转发该第二报文。

本发明第三方面的网络设备以及各种可选方式可以按照合理方式自由组合,各种组合都在本发明的保护范围之内。

本发明实施例提供的网络设备的处理器在接收到新的数据流的报文时,为该数据流建立转发表项,并使该网络设备的fpga在地址表中存储根据该转发表项的索引号得到的存储地址。处理器在接收到该数据流的后续报文时,可以通过该fpga中的地址表获取到该转发表项对应的索引号,并根据该索引号查找到该转发表项,然后根据该转发表项转发该后续报文。由于该地址表是根据第一方面的方法配置的,该fpga中的地址表的规格较小,查找速度较快。因此,本发明可以提高网络设备的转发效率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对本发明实施例或现有技术描述中所需要使用的附图作简单地介绍。

图1为现有技术中使用fpga内部的ram存储地址表时的查找地址表的过程示意图;

图2为现有技术中使用fpga内部的ram实现cam的功能时的查找地址表的过程示意图;

图3为本发明实施例提供的fpga的结构示意图;

图4为本发明实施例提供的在fpga中配置地址表的方法流程示意图;

图5a和图5b为本发明实施例提供的在fpga中配置地址表的过程示意图;

图6为本发明实施例中提供的在fpga中查找地址表的方法流程示意图;

图7a和图7b为本发明实施例提供的在fpga中查找地址表的过程示意图;

图8为本发明实施例提供的包括fpga的装置的结构示意图。

具体实施方式

当前,为了避免地址表的规格较小时使用在fpga之外设置cam的方式导致的高成本,通常在地址表的规格较小时,使用fpga内部的随机访问存储器(randomaccessmemory,ram)来存储该地址表。

如图1所示,为现有技术中使用fpga内部的ram存储地址表时的查找地址表的过程示意图。当网络设备收到报文后,该网络设备的处理器提取该报文的关键字(key),并将该关键字发送给该网络设备的fpga。该关键字例如可以是源因特网协议(internetprotocol,ip)地址,目的ip地址,源媒体访问控制(mediaaccesscontrol,mac)地址,目的mac地址、虚拟局域网标识(virtuallocalareanetworkidentifier,vlanid)、传输协议、源端口号和目的端口号中的至少一种。如图1所示,假设该地址表包括n个表项,每个表项包括一个预设关键字,例如,key0到key(n-1)。fpga依次比较该关键字与该地址表中的每个预设关键字,当某个预设关键字(假设key1)与该关键字匹配时,将该预设关键字的存储地址(例如key1对应的address1)作为查找到的存储地址。该预设关键字的存储地址,可以是该预设关键字所在的表项的编号或者该表项在该ram中的硬件地址。此后,fpga可以根据该存储地址从转发表中读取数据并将该数据发送给该处理器,或者fpga可以将该存储地址发送给该处理器,由该处理器根据该存储地址从转发表中读取数据。其中,上述网络设备例如可以是交换机、路由器、具有虚拟网络功能的服务器或主机等。其中,预设关键字与该关键字匹配,可以是指该预设关键字与该关键字相同,或者该预设关键字与该关键字的指定比特位相同。

上述方案采用了串行查找的方式,每时钟周期(cycle)只能访问一次ram,当ram中的地址表的表项数为n时,最坏情况下,需要n个时钟周期才能找到关键字对应的存储地址,查找效率较低。

在另一种方式中,用fpga内部的ram实现cam的功能。当用ram实现cam时,首先根据该fpga能够处理的关键字位宽(即该关键字长度)在ram中生成地址表,假设关键字位宽为n,则该地址表的表项数为2n个,且该地址表的每个表项中存储有存储地址,即存储地址是作为表项的数据写入表项中的。其中,一个表项中写入的存储地址可以为空,也可以不为空。

如图2所示,当fpga收到关键字时,fpga以该关键字为地址,直接读取该地址表中该地址对应的表项中的存储地址。例如,当关键字的位宽为8比特,且该关键字为00000010时,以00000010为地址读地址表中的表项,得到该表项中的存储地址为address2,address2即为目标数据的存储地址。

图2所示的方法不需要逐个匹配地址表中的每个表项,fpga通过一次查找就可以获取到关键字对应的存储地址。但是当关键字位宽比较大时,需要的地址表的表项数呈指数级增长,会浪费fpga的存储空间。

本发明实施例提供了一种改进的fpga,能够快速获取大位宽的关键字对应的存储地址,且能够节约fpga的存储空间。在一个实施方式中,该fpga用于存储网络设备的转发表。其中,转发表通常用于网络桥接、路由和类似的功能以找到用于转发报文的接口。转发表例如可以是路由表或者mac表。如图3所示,为本发明实施例提供的fpga300的结构示意图。该fpga300包括计算电路310和存储区域320,所述存储区域320可根据需要被分为k个存储块,k大于等于2。当所述存储区域320被分为k个存储块时,每个存储块都有对应的编号或硬件地址,该编号或硬件地址用于识别该存储块。示例性地,该k个存储块为k个ram。每个存储块包括多个存储子块,每个存储子块可以存储一个存储地址。由于存储块用于写入存储地址,本申请中将存储块对应的存储空间称为地址表,将存储子块对应的存储空间称为地址表项。

计算电路310用于配置该n个存储块中的地址表。当配置该地址表时,计算电路310执行图4所示的配置地址表的方法。

在步骤401中,计算电路310获取所述fpga的关键字位宽a。

所述fpga的关键字位宽a即fpga能够处理的关键字的最大比特长度,由为该fpga规划的功能决定。例如,当fpga根据五元组查找存储地址时,该关键字位宽a包括32比特的源ipv4地址,32比特的目的ipv4地址,16比特的源端口号,16比特的目的端口号以及8比特的协议号,共104比特;当fpga根据包括源ipv4地址,目的ipv4地址和协议号的三元组查找存储地址时,该关键字位宽a为72比特;当fpga根据vlanid(长12比特)和目的mac地址(长48比特)查找存储地址时,该关键字位宽a为60比特。

后续以关键字位宽a为12比特为例说明本发明实施例。

在步骤402中,计算电路310获取地址位宽b。

其中,地址位宽b用于确定每个存储块中可以存储的地址表项的数量(即地址表的最大表项数),并可以表示地址表项的硬件地址的长度。所述存储块可以为图3中的ram。每个存储块相当于一个地址表,该地址表中最多可以存储2b个地址表项。后续以地址位宽为6比特,每个存储块中包括26=64个地址表项为例来说明本发明实施例。地址位宽b还可以是其他长度,例如,当地址位宽为5比特时,每个存储块中包括32个地址表项,当地址位宽为7比特时,每个存储块中包括128个地址表项。

在一个实施方式中,地址位宽b是根据fpga中的随机访问存储块(blockrandomaccessmemory,bram)的最大位宽决定的,这样可以提高fpga中存储资源的利用率。

在步骤403中,计算电路310确定对应所述关键字位宽a和地址位宽b的存储块的数量k。

在一个实施方式中,计算电路310根据所述关键字位宽a和所述地址位宽b确定所需的存储块的数量k。具体地,计算电路310根据如下公式1确定所需的存储块的数量:

k=a/b公式1

例如,当关键字位宽为12比特,地址位宽为6比特时,需要2个存储块。由于地址位宽为6比特,每个存储块相当于一个包括26=64个地址表项的地址表。

通过上述步骤401-403,计算电路310确定了实现特定位宽的关键字查找时需要的存储块的数量k。

在另一个实施方式中,还可以直接配置上述关键字位宽a,地址位宽b和存储块的数量k并将该配置在fpga上电时加载到fpga中,因此,上述步骤410-430为本发明实施例的可选实施方式。

进一步地,本发明实施例还可以设置存储块的数据位宽,即存储块中存储的地址表中存储地址的长度。

以下结合图5a和图5b来说明计算电路310生成地址表的过程,该生成地址表的过程即计算电路310在存储块中写入存储地址的过程。

在步骤404中,计算电路310根据所述地址位宽b和所述存储块的数量k,从存储区域中确定k个存储块。

例如,当地址位宽b为6比特,存储块的数量k为2时,计算电路310从fpga的没有被占用的存储区域中确定2个存储块,每个存储块可以存储64个存储地址。

步骤404只需要在生成关键字之前执行一次。所述k个存储块具有相同的规格,即所述k个存储块具有相同的地址表项数。

在步骤405中,计算电路310获取关键字,该关键字的长度为a。

计算电路310可以接收处理器发送的根据第一数据流的第一报文生成的关键字,该关键字的长度为a。示例性地,图5a中,a为12比特,第一关键字为000010111100;图5b中,a为12比特,第二关键字为000010111101。具体地,该关键字是处理器根据该第一报文和fpga的关键字位宽a生成的,该第一报文可以是以太帧、ipv4报文或ipv6报文等。该第一数据流可以是任意数据流。

在步骤406中,计算电路310获取所述关键字对应的索引号。

处理器在第一次收到属于第一数据流的第一报文时,发现转发表中没有存储该第一数据流对应的转发表项,则处理器根据该第一报文中的信息(例如包括第一报文的源ip地址、源mac地址、目的ip地址、目的mac地址和传输层协议的标识的五元组,或包括第一报文的源ip地址、目的ip地址和传输层协议的标识的三元组)为该第一数据流生成对应的转发表项,将该转发表项写入转发表中,并确定该转发表项的索引号,将该索引号发送给fpga的计算电路310。该索引号用于从转发表中查找该第一数据流的转发表项。其中,该索引号不超过fpga中的存储块的数据位宽。

例如图5a和图5b中,存储块的数据位宽(即存储地址的长度或比特数)为8,则索引号可以为0-7中的任意一个。在图5a所示的实施方式中,索引号为3;在图5b所示的实施方式中,索引号为4。在实际的部署中,所述存储块的数据位宽可以做到数百bit到上千bit,相应的,所述转发表的表项也可以达到上千个。例如,当存储块的数据位宽为1024bit时,所述索引号可以为0-1023中的任意一个。

其中,处理器可以将该关键字和该索引号同时或者分别发送给计算电路310,即步骤405和406可以同时执行,也可以分别执行,并且本发明实施例不限制分别执行时的顺序。在步骤407中,计算电路310将该关键字分为k个子关键字。

计算电路310根据存储块的数量k将该关键字平均分为k个子关键字,所述k个子关键字中的每个子关键字对应所述k个存储块一一对应。例如,子关键字ki对应存储块i,其中i∈(0,1,……(k-1))。再例如,图5a中,第一关键字000010111100被分为子关键字10(000010)和子关键字11(111100),子关键字10对应存储块0,子关键字11对应存储块1。图5b中,第二关键字000010111101被分为子关键字20(000010)和子关键字21(111101),子关键字20对应存储块0,子关键字21对应存储块1。

在步骤408中,对于每个子关键字,计算电路310确定该子关键字在对应的存储块中的地址表项,根据所述索引号在所述地址表项中写入存储地址。

在一个实施方式中,计算电路310确定每个子关键字在对应的存储块中的地址表项,并将所述地址表项中所述索引号对应的比特置1,保持所述地址表项中的其他比特的值不变。其他比特的值可以为0或者预先设定的其他值。

例如,图5a中,子关键字10(即子关键字000010)对应存储块0,以子关键字000010为地址,访问到存储块0中的编号为2的地址表项,将所述地址表项的中索引号对应的比特(即bit3)置为1,其他比特的值不变(假设初始值为0),得到的存储地址为00001000,将该存储地址00001000写入存储块0的编号为2的地址表项中。类似地,子关键字11(即子关键字111100)对应存储块1,以子关键字111100为地址,访问存储块1中的编号为60的地址表项,将所述地址表项中索引号对应的比特(即bit3)置为1,其他比特的值不变(假设初始值为0),得到的存储地址同样为00001000,将该存储地址00001000写入存储块1的编号为60的地址表项中。

进一步地,在图5a得到的地址表的基础上,执行图5b所示的配置地址表的过程。图5a中,第二关键字000010111101的子关键字20(即子关键字000010)对应存储块0,以子关键字000010为地址,访问到存储块0中的编号为2的地址表项,将所述地址表项的中索引号对应的比特(即bit4)置为1,其他比特的值不变(假设初始值为0),得到的存储地址为00010000,将该存储地址00010000写入存储块0的编号为2的地址表项中,这样,编号为2的地址表项中的内容变成了00011000。类似地,子关键字21(即子关键字111101)对应存储块1,以子关键字111101为地址,访问存储块1中的编号为61的地址表项,将所述地址表项中索引号对应的比特(即bit4)置为1,其他比特的值不变(假设初始值为0),得到的存储地址同样为00010000,将该存储地址00010000写入存储块1的编号为61的地址表项中。经过图5a和图5b的配置过程,存储块1中共写入了两个存储地址。

上述根据索引号生成存储地址时采用了独热码(one-hotcode)的编码方式。其中,独热码是指有多少个状态就有多少比特,而且只有一个比特为1,其他全为0的一种码制。

通过独热码的编码方式,使得每个子关键字在对应的存储块的地址表项中只占用一个比特。这样,其他关键字的子关键字可以占用该地址表项的其他比特,提高了地址表项的复用率,保证了该fpga可以用于查找的转发表的转发表项数等于该fpga的最大数据位宽。例如图5a和图5b中,每个存储块中的地址表的数据位宽为8比特,则每个地址表项可以写入8个索引号不同的子关键字,该8个不同的索引号可以查找到8个转发表项,则网络设备的转发表中最多可以存储8个转发表项。

通过图4所示的方法根据fpga的关键字位宽a和地址位宽b生成k个地址表,k=a/b。每个地址表包括2b个地址表项,则fpga中共需要k*2b个地址表项即可实现对位宽为a的关键字的查找。以关键字位宽a=12,地址位宽b=6,k=2为例,采用现有的技术,需要的地址表项为212=4096个,而采用本发明实施例的方案,需要的地址表项为2*26=128个。以关键字位宽a=12,地址位宽b=4,k=3为例,采用现有的技术,需要的地址表项为212=4096个,而采用本发明实施例的方案,需要的地址表项为3*24=48个。可见,本发明实施例可以极大减少fpga需要存储的地址表项数,进而节约fpga的存储空间。

进一步地,本发明实施例还提供了一种查找地址表的方法。所述被查找的地址表是根据图4所示的方法配置的,因此,所述查找地址表的方法可以认为是图4所示的配置地址表的方法的延续。以下结合图6、图7a和图7b,对所述查找地址表的方法予以说明。其中,图6为所述查找地址表的方法的流程示意图,图7a和图7b为查找地址表的过程示意图。

在步骤601中,计算电路310接收查找请求,所述查找请求包括目标关键字,所述目标关键字的长度为a。

其中,所述查找请求可以是由处理器发送给fpga的或者由fpga中的其他组件生成的。

具体来说,当网络设备接收到所述第一数据流的第二报文时,所述网络设备的处理器根据所述fpga的关键字位宽a和所述第二报文生成所述目标关键字。所述第二报文为所述第一报文之后的属于所述第一数据流的任意报文。由于第一报文和第二报文都是属于第一数据流的报文,因此第一报文用于生成关键字的流标识,例如第一数据流的五元组或者三元组,和第二报文用于生成关键字的流标识是相同的。因此根据第二报文生成的关键字,即目标关键字,和根据第一报文生成的关键字应该也是相同的。为了便于说明,在图7a中,使用图5a中的关键字000010111100为目标关键字;在图7b中,使用图5b中的关键字000010111101为目标关键字。

在步骤602中,计算电路310将所述目标关键字分为k个子目标关键字。

在一个实施方式中,计算电路310根据所述fpga的地址位宽b将所述目标关键字分为k个子目标关键字。

例如,在图7a中,由于所述fpga的地址位宽b为6比特,目标关键字000010111100被分为两个子目标关键字,即子目标关键字10(000010)和子目标关键字11(111100);类似地,图7b中,目标关键字000010111101被分为两个子目标关键字,即子目标关键字20(000010)和子目标关键字21(111101)。

在步骤603中,计算电路310分别以所述k个子目标关键字中的每个子目标关键字为地址,读取该子目标关键字对应的存储块中的地址表项中的存储地址,得到k个存储地址。

本步骤中,计算电路310读取的是根据图4的配置地址表的方法得到的地址表,例如,图7a中,计算电路310以子目标关键字000010为地址读存储块0中编号为2的地址表项中的存储地址,得到存储地址00011000,并且,计算电路310以子目标关键字111100为地址读取存储块1中编号为60的地址表项中的存储地址,得到存储地址00001000;图7b中,计算电路310以子目标关键字000010为地址读存储块0中编号为2的地址表项中的存储地址,得到存储地址00011000,并且,计算电路310以子目标关键字111100为地址读取存储块1中编号为61的地址表项中的存储地址,得到存储地址00010000。

本申请中,计算电路并不需要逐个比较某个子目标关键字是否存储在某个存储块中,而是以该子目标关键字为地址直接读取对应的存储块中的存储地址,并且,由于k个子目标关键字对应不同的存储块,计算电路310可以根据该k个子目标关键字并行读取该k个存储块,因此,计算电路310可以快速获取到不同的存储地址,提高了查找速度。

在步骤604中,计算电路310对所述k个存储地址执行与操作,得到目标存储地址。

其中,目标存储地址即为目标数据的存储地址。

例如,图7a中,计算电路310对存储地址00011000和存储地址00001000执行与操作,得到目标存储地址00001000;图7b中,计算电路310对存储地址00011000和存储地址00010000执行与操作,得到目标存储地址00010000。

在上述查找地址表的过程中,计算电路310只需要并行读取与k个子关键字对应k个地址表项,得到k个存储地址,并对该k个存储地址执行与操作即可得到目标存储地址,极大提升了查找效率。此外,对根据目标关键字得到的k个存储地址执行与操作,能够保证每个目标关键字能得到唯一对应的目标存储地址,避免了地址冲突。

在步骤605中,计算电路310根据所述目标存储地址生成索引号。

如前所述,转发表项是存储在转发表中的,在转发报文时,需要查找到该报文的关键字对应的转发表项,而该转发表项通过索引号才能查找到。因此,在本发明中,需要将获取到的目标存储地址再转换成对应的索引号。当图6中的目标关键字和图4中的关键字对应相同的数据流时,步骤605中得到的索引号即为步骤406中的索引号。

在一个实施方式中,采用独热码的解码方式将所述目标存储地址转换成对应的索引号。例如,目标存储地址00001000的第三位为1,则根据独热码的解码方式得到的索引号为3;目标存储地址00010000的第四位为1,则根据独热码的解码方式得到的索引号为4。

进一步地,计算电路310还可以将所述索引号发送给处理器,以使处理器根据该索引号获取所述目标关键字对应的数据。所述目标关键字对应的数据可以为出接口、操作方式等,所述操作方式可以为封装报文,丢弃报文等。

基于本发明实施例提供的fpga,如图8所示,本发明实施例还提供了一种网络设备800,该网络设备800例如可以是交换机、路由器、具有虚拟网络功能的服务器或主机等。该网络设备800包括处理器810以及图3所示的fpga300。其中,处理器810用于:接收第一数据流的第一报文;根据该第一报文生成关键字和索引号,其中该关键字的长度等于该fpga300的关键字位宽,该索引号用于查找该第一数据流的转发表项;向该fpga300发送该关键字和该索引号。其中,该处理器810可以通过内部接口或内部总线向fpga300发送该关键字和该索引号。该fpga300用于:接收该关键字和该索引号,将该关键字分为k个子关键字,该k个子关键字中的每个子关键字对应该k个存储块中的一个存储块;确定该k个子关键字中的每个子关键字在对应的存储块中的地址表项,根据该索引号在该地址表项中写入存储地址。

在本发明的一个实施方式中,该fpga300还用于:获取该fpga300的该关键字位宽a;获取该fpga的地址位宽b,该地址位宽b用于确定该fpga的每个存储块中的地址表的最大表项数;根据该关键字位宽a和该地址位宽b,确定该k个存储块。

在本发明的一个实施方式中,当确定该k个存储块时,该fpga300用于:确定对应该关键字位宽a和该地址位宽b的存储块的数量k;根据该地址位宽b和该存储块的数量k,从该fpga300的存储区域中确定该k个存储块。

在本发明的一个实施方式中,当根据该索引号在该地址表项中写入存储地址时,该fpga300用于:确定该k个子关键字中的每个子关键字在对应的存储块中的地址表项;将该地址表项中该索引号对应的比特置1,保持该地址表项中的其他比特的值不变。

在本发明的一个实施方式中,当根据该第一报文生成索引号时,该处理器810用于:根据该第一报文为该数据流生成该转发表项,将该转发表项写入转发表,将该转发表项在该转发表中的序号作为该索引号。通常情况下,转发表的序号从0开始,这样,当该转发表项为该转发表的第20个选项时,该索引号为19。

在本发明的一个实施方式中,该处理器810还用于:接收该第一数据流的第二报文,该第二报文为该第一报文的后续报文;根据该第二报文生成该关键字;向该fpga发送查找请求,该查找请求包括该关键字。可选地,该查找请求为该关键字本身。该fpga300还用于:接收该查找请求;将该关键字分为该k个子关键字;分别以该k个子目标关键字中的每个子目标关键字为地址,读取该子目标关键字对应的存储块中的地址表项中的存储地址,得到k个存储地址;对该k个存储地址执行与操作,得到目标存储地址;根据该目标存储地址生成该索引号。

进一步地,该fpga300还将该索引号发送给该处理器810;该处理器810还用于接收该索引号,根据该索引号获取该转发表项,根据该转发表项转发该第二报文。

图8所示的处理器810的功能可以通过处理器810中的硬件的集成逻辑电路、软件形式的指令、或者通过处理器810中的硬件及软件模块组合完成。其中,该软件模块可以位于存储介质中。该存储介质位于存储器820,处理器810读取存储器820中的信息,结合其硬件完成上述由处理器810实现的功能。

可以理解,上述存储器820可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-onlymemory,rom)、可编程只读存储器(programmablerom,prom)、可擦除可编程只读存储器(erasableprom,eprom)、电可擦除可编程只读存储器(electricallyeprom,eeprom)或闪存。易失性存储器可以是随机存取存储器(randomaccessmemory,ram),其用作外部高速缓存。应注意,本申请旨在包括但不限于这些和任意其它适合类型的存储器。

通过本发明实施例提供的网络设备,处理器810能够为接收的第一数据流建立转发表项,并使fpga300在地址表中存储根据该转发表项的索引号得到的存储地址。处理器810在接收到该第一数据流的后续报文时,可以通过该fpga300中的地址表获取到该转发表项对应的索引号,并根据该索引号查找到所述转发表项,然后根据所述转发表项转发所述后续报文。由于fpga300采用了图4所示的方法配置地址表,并采用图6所示的方法查找地址表,因此fpga300中的地址表的规格较小,查找速度较快。因此,本发明可以提高网络设备的转发效率。

本申请各部分的内容属于同一个发明构思,对某一附图描述不充分的地方,可参考其他部分的描述。

以上该仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1