本发明涉及FPGA(Field-Programmable Gate Array,现场可编程门阵列)、有线数字通信和网络数据流管理领域,尤其涉及一种提高大规模网络流表查找效率的装置及方法。
背景技术:
网络流表是实现网络数据流管理的一种方式。网络中含有相同五元组(源ip地址、目的ip地址、源端口号、目的端口号和协议类型)的数据包组成了一条数据流,通过对每条数据流建立表项的方式,对数据流的所有数据包进行统一处理。例如,对某条数据流的数据包个数进行统计,或对某条数据流的所有数据包统一转发到某一个端口。
现在网络中的每条10G光纤线路所包含的数据流数量是千万级的。要实现对如此大规模的数据流建流表需要使用大容量存储器,即动态随机存取存储器(DRAM)。查找方式采用hash方式,如图1所示,即对五元组进行hash计算,hash值作为地址在DRAM中查找表项,如果表项中的五元组与被查找五元组一致,则说明查找正确,再按流表内容对数据包进行处理,对流表内容进行更新;如果流表中的五元组与被查找五元组不一致,则表示hash冲突,需要再建立一条表项(即建流)。
目前大多采用CPU或FPGA查找流表,查完一个数据包的五元组才能查下一个,如图2所示。对DRAM的读写比较随机,没有规律。由于DRAM的读写操作之间有延迟,随机查找会大幅度降低DRAM的读取效率,在DRAM控制器数量有限的情况下,使单板处理能力降低。
技术实现要素:
本发明的目的是提供一种提高大规模网络流表查找效率的装置及方法,用FPGA内部可编程逻辑器件的现有资源实现一种硬件装置,该装置提高了DRAM的读取速率,从而提高网络流表的查找效率。
为达到上述目的,本发明采用的技术方案为:
一种提高大规模网络流表查找效率的装置,包括内存控制器、分组模块、索引处理模块、查找模块、更新模块;
所述内存控制器用于控制查找及返回hash索引、查找及返回hash节点信息、更新流表中的hash节点;
所述分组模块用于将输入数据包的五元组进行第一次hash计算,根据产生的8bit hash值分成256组数据包,其中每一组数据包的hash值相同;
所述索引处理模块用于从256组数据包中各提取一个数据包五元组进行第二次hash计算,得到固定宽度为29bit的DRAM读地址,并缓存各五元组信息以及按顺序通过内存控制器向内存发出读指令,查找并接收hash索引;
所述查找模块用于将有效索引地址通过内存控制器向内存发出读指令,查找并接收流表中hash节点的内容;
所述更新模块用于对流表中hash节点进行更新操作。
进一步地,所述查找hash索引是以hash值作为地址,查找存储在内存中的hash节点地址的索引表。
进一步地,所述有效索引为hash索引表中的有效bit位为1,即内存中已有hash节点。
进一步地,所述索引处理模块包括查找索引模块、先入先出模块、接收索引模块;
所述查找索引模块从256组数据包中各提取一个数据包五元组进行第二次hash计算,得到固定宽度为29bit的DRAM读地址,并按顺序通过内存控制器向内存发出读指令,查找hash索引;
所述先入先出模块用于缓存各五元组信息;
所述接收索引模块接收内存返回的hash索引结果。
进一步地,所述查找模块包括查找节点模块、先入先出模块、接收节点模块;
所述查找节点模块根据索引地址,通过内存控制器向内存发出读指令,查找流表中hash节点的内容;
所述先入先出模块用于缓存各流表中hash节点的五元组信息;
所述接收节点模块接收内存返回的流表中hash节点的内容。
一种提高大规模网络流表查找效率的方法,其步骤包括:
1)将输入数据包的五元组进行第一次hash计算,根据产生的8bit hash值分成256组数据包并存储;
2)从256组数据包中各提取一个数据包五元组进行第二次hash计算,得到固定宽度为29bit的DRAM读地址;
3)按顺序通过内存控制器向内存发出读指令,查找hash索引,并缓存各五元组信息;
4)从内存中得到hash索引,将有效索引地址作为读地址通过内存控制器向内存发出读指令,并在内存中查找hash节点;
5)若hash节点中的五元组与上述五元组信息一致,则查找正确;
6)更新流表中的hash节点并输出结果。
进一步地,步骤3)中所述查找hash索引是以hash值作为地址,查找存储在内存中的hash节点地址的索引表。
进一步地,步骤4)中所述有效索引为hash索引表中的有效bit位为1,即内存中已有hash节点;若有效bit位为0,说明hash索引无效,则进行建流操作。
进一步地,步骤5)中如果信息不一致,则确认是否有hash冲突,如果有hash冲突则继续查找下一个hash节点,否则进行建流操作。
更进一步地,所述建流操作就是建立一个hash节点。
本发明的有益效果在于:本发明提供一种提高大规模网络流表查找效率的装置及方法,在对原有系统硬件不做任何改变的情况下,应用FPGA可编程逻辑器件的现有资源实现一种硬件装置,完成对网络流表查找效率的提高。本发明通过采用对五元组计算hash值的方式,将输入数据包的五元组根据第一次hash计算得到的8bit hash值分成256组数据包,每次对256个不同hash值的数据包进行统一查找流表的操作,如图3所示。当256个数据包都处理完后,再发起下一次256个数据包的流表查找。这样每次流表查找就进行一次读写切换,读写延迟将被分摊到256个数据包,平均到每个数据包上的延迟时间就减小为原来的1/256,大幅度提高了网络流表的查找效率。
附图说明
图1为采用hash方式查找流表的数据流程图。
图2为现有的查找流表操作顺序示意图。
图3为本发明的查找流表操作顺序示意图。
图4为本发明一实施例的装置结构示意图。
图5为未使用本发明装置结构的示意图。
图6为使用本发明装置结构的示意图。
图7为本发明一实施例的方法流程图。
图8为图6中Prepare模块的结构示意图。
图9为图6中Prepare模块的写入流程图。
图10为图6中Prepare模块的读出流程图。
具体实施方式
为使本发明的上述特征和优点能更明显易懂,下文特举实施例,并配合所附图作详细说明如下。
本发明提供一种提高大规模网络流表查找效率的装置,如图4所示,该装置包括一内存控制器,如图中的Sdram_controller模块;一分组模块,如图中的Prepare模块;一索引处理模块,其包括查找索引模块、先入先出模块、接收索引模块,分别如图中的Lup_index模块、Fifo模块、Wait_index模块;一查找模块,其包括查找节点模块、先入先出模块、接收节点模块,分别如图中的Lup_node模块、Fifo模块、Wait_node模块;一更新模块,如图中的Write_node模块;
所述Sdram_controller模块用于控制查找及返回hash索引、查找及返回hash节点信息、更新流表中的hash节点;
所述Prepare模块将输入数据包的五元组进行第一次hash计算,根据得到的8bit hash值分成256组数据包(即256条数据流)进行存储,并按组号的顺序读出五元组,发送给下游模块进行查找,所述每个数据包的hash值相同;
所述Lup_index模块对从256组数据包中各提取的一个数据包五元组进行第二次hash计算得到固定宽度为29bit的DRAM读地址,并通过内存控制器向内存发出读指令,查找hash索引,所述查找hash索引是以hash值作为地址,查找存储在内存中的hash节点地址的索引表;
所述Fifo模块用于缓存各五元组信息;
所述Wait_index模块用于接收内存返回的hash索引结果;
所述Lup_node模块根据索引地址,通过内存控制器向内存发出读指令,查找流表中hash节点的内容;
所述Wait_node模块用于接收内存返回的流表中hash节点的内容;
所述Write_node模块用于对流表中hash节点进行更新操作。
本发明使用的hash计算,是指计算结果为统一位宽的数值。
请参考图5与图6,图5和图6分别为未使用本发明装置结构的示意图与使用本发明装置结构的示意图。从图5与图6中可以看出,在对原有系统硬件不做任何改变的情况下,应用FPGA可编程逻辑器件的现有资源(即在可编程逻辑器件中增加本发明装置),完成了对网络流表查找效率的提高。
本发明还提供一种提高大规模网络流表查找效率的方法,如图7所示,该方法步骤包括:
1)在Prepare模块对输入数据包的五元组进行第一次hash计算,根据得到的8bit hash值分成256组数据包并存储,在下游模块空闲的情况下,按组的顺序将缓存的256个hash值不同的五元组发给下游Lup_index模块;
2)Lup_index模块将256个五元组进行第二次hash计算得到固定宽度为29bit的DRAM读地址,按顺序通过内存控制器向内存发出读指令,查找hash索引,再将五元组放入Fifo模块中缓存,所述查找hash索引是以hash值作为地址,查找存储在内存中的hash节点地址的索引表;
3)在Wait_index模块判断从内存中得到的hash索引是否有效,有效则将索引地址和Fifo模块中的五元组发送给Lup_node模块;所述hash索引有效为hash索引表中的有效bit位为1,即内存中已有hash节点;若有效bit位为0,说明hash索引无效,则进行建流操作,即建立一个hash节点;
4)Lup_node模块将索引地址作为读地址,通过内存控制器向内存发送读指令,将五元组存入Fifo模块中;
5)Wait_node模块将内存返回的hash节点中的五元组与Fifo模块中的五元组进行比较,如果一致,则说明查找正确,将hash节点地址和内容发送给Write_node模块,进行更新流表中hash节点的操作并输出结果;如果查找不正确则确认是否有hash冲突,如果有hash冲突则继续查找下一个hash节点,如果没有则进行建流操作,即建立一个hash节点。
请参考图8,该图为图6中Prepare模块的结构示意图,Prepare模块由多个子功能模块构成,其包括:
Ram:可编程逻辑器件内部双端口ram;
HashX_waddr:hash值对应的部分ram写地址寄存器;
HashX_raddr:hash值对应的部分ram读地址寄存器;
Cnt:累加计数器;
Ram_wr_addr:整个ram的写地址;
Ram_rd_addr:整个ram的读地址。
请参考图9,该图为图6中Prepare模块的写入流程图,首先对五元组进行8bit的hash计算;其次将得到的hash值与hash值对应的写地址寄存器组合成为ram的写地址;最后将五元组写入ram,并将与hash值对应的写地址寄存器做加1操作。
请参考图10,该图为图6中Prepare模块的读出流程图,在下游模块为空闲的情况下,将累加计数器cnt的值和累加计数器对应的部分ram读地址寄存器组合成为ram的读地址,判断ram中是否有五元组数据,如果有数据,则输出数据,并将cnt对应的部分ram的读地址寄存器加1,累加计数器cnt累加;如果没有数据,则只进行累加计数器cnt累加。当累加计数器达到256时停止此轮操作。
表1.未使用本发明设备与使用本发明设备处理能力对比表
通过网络测试仪对是否采用快速流表查找方法的设备进行发包测试作为对照,来评估本发明的效果。评价指标采用最大处理能力,即不丢包情况下的最大可处理输入带宽。测试仪发送给使用本发明设备和未使用本发明设备的数据包完全一致,设备最大输入带宽为100Gbps,结果如表1所示。实验结果表明,在各种流量环境下,采用本发明提出的快速流表查找装置的设备有很好的性能提升,可以提高流表的查找速率。
以上实施仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。