一种提高大批量网络流表老化效率的方法及装置与流程

文档序号:12492548阅读:1039来源:国知局
一种提高大批量网络流表老化效率的方法及装置与流程

本发明涉及FPGA(Field-Programmable Gate Array现场可编程门阵列)领域,涉及以太接入网领域,提出了一种基于FPGA实现的大批量流表老化的高效的方法。



背景技术:

在以太接入网通常需要对流进行管理,这里的流是指在某一段持续的时间内,具有相同五元组元素的一组连续的报文序列。流具有从建立到结束的完整生命周期。流管理是指在流建立到结束(即流老化)的整个生命周期中,对该流的报文进行计数、转发和丢弃的操作。

流管理的处理流程及流表结构如图1、2所示,图2中的N表示桶深。流表项内容如表1、2所示。流表老化的方式有两种:刷新流老化和非刷新流老化。刷新流老化是指从最后一个报文开始,该流在指定老化时间内没有被采集到而被自动老化,这种老化称为刷新流老化;非刷新流老化是指从建立流的第一个报文开始计算时间,超过设定时间后被老化,这种老化称为非刷新老化。本发明主要针对非刷新老化。

表1:HASH桶表项:

表2HASH节点表项

通常的流表老化机制都是通过遍历当前表项所在hash桶直到遍历完所有表项,是单一表项操作的。但当流表项数量特别庞大(上千万条流),老化精度又比较高(几秒)的应用场景下,使用单一表项老化的方式使得老化效率非常低。假设流表项数量为3000万,老化精度为1s,存储流表的内存(DDR3-1600SDRAM)的读写操作延时为27.5ns,内存读写时钟频率为200MHz,完成单个表项老化需要两周期(读hash桶+读hash节点),若使用单一表项的方式进行老化,完成3000万条流表可以使用25bit位宽的hash桶,假设内存只用于老化操作,则完 成一次遍历需要3200万*(27.5ns+5ns)+3000万*(27.5ns+5ns)=2s的时间,老化精度无法达到1s,并且老化操作占用的内存过多,留给建流、查表等内存操作的比例就非常少,使得整个流管理效率非常低。



技术实现要素:

针对现有技术中存在的技术问题,本发明的目的在于提供一种提高大批量网络流表老化效率的方法及装置。

本发明对原有系统硬件不做任何改变,完成老化效率的提高;其特征在于应用可编程逻辑器件的现有资源,实现流表的高速老化。

为实现上述目的,本发明的技术方案为:

一种提高大批量网络流表老化效率的方法,其特征在于,对网络流表进行分批老化,对于每一批读取的N个桶,其步骤为:

1)将该批hash桶中的有效指针存到指针FIFO中;当该批hash桶读取结束时,进行步骤2);

2)从内存中查找指针FIFO中指向的hash节点,然后根据配置的老化时间判断该hash节点是否需要老化,若需要老化,则对该hash节点进行老化并将该hash节点中的下一个指针标志有效的hash节点指针存入指针FIFO中;

3)判断当前指针FIFO是否为空,如果不为空,则进行步骤2)。

进一步的,采用可编程逻辑器FPGA对网络流表进行分批老化;根据FPGA的内存操作时延T和FPGA的存储FIFO的深度D确定每批hash桶个数N。

进一步的,内存操作时延T=C*1/F;其中,F为FPGA的内存控制器读写时钟频率,C为老化内存读时延周期数。

进一步的,N>T*F1,其中,F1为FPGA的时钟频率。

进一步的,N<D-P,P表示FIFO的余量。

一种提高大批量网络流表老化效率的装置,其特征在于,包括流老化模块和流老化配置模块;其中,流老化配置模块,用于配置网络流表老化时间以及每批读取的hash桶个数N;流老化模块,用于根据配置的hash桶个数N分批读取并缓存网络流表的hash桶;以及将hash桶中的有效指针存到指针FIFO中;以及从内存中查找指针FIFO中指向的hash节点,然后根据配置的老化时间判断该hash节点是否需要老化,若需要老化,则对该hash节点进行老化并将该hash节点中的下一个指针标志有效的hash节点指针存入指针FIFO中,直至当前指针FIFO是否为空。

本发明流程如图3所示,包括:

a.分多次完成所有流表的老化,每次小批量读取hash桶并老化hash桶下一个指针有效的有效hash节点。

根据FPGA的内存操作时延T和FPGA的存储FIFO的深度D确定每批hash桶个数N。假设内存控制器读写时钟频率为F,老化内存读时延周期数C,则T=C*1/F;一次小批量老化时间只有大于内存读延时,才能避免等待,提高老化内存利用率。假设逻辑处理时钟频率为F1,则N>T*F1。

假设FPGA内部FIFO深度D,则N<D-P,P表示FIFO的余量,用于反压的处理。

假设所有流表的hash桶总深度为M,则按HASH值大小顺序小批量刷新hash桶的次数为[M/N]+1。

b.读取hash桶的有效节点地址存到FIFO中,一次批量读取hash桶结束时,从FIFO中读节点地址并从内存中查找hash节点,将hash节点的流建立时间与当前时间对比,若时间差大于等于配置的老化时间,即当前hash节点需要老化,则删除该hash节点,若当前hash节点不需要老化则结束。

c.对于有hash冲突的场景,即不同的流有相同的hash值,同一条hash桶下挂了多个hash节点的场景,只需在b处理过程中判断有效hash节点中的下一个节点指针是否有效,若有效,则说明有hash冲突,把冲突节点的地址存入冲突FIFO,等上一批节点处理结束从冲突FIFO中读取冲突节点地址并从内存中查找冲突节点。

d.在每次小批量老化间隙可以进行流管理处理的建流,流查找等操作,实现分时复用内存,提高内存的利用率。

与现有技术相比,本发明的积极效果:

本发明基于FPGA实现,分多次完成大批量流表的老化,每次完成小批量hash桶的老化,使用pipeline模式,抵消了内存操作结果等待时间,提高了老化性能,降低了老化的内存占用率。同时在每次小批量老化的间隙可进行建流,查表等操作,最大限度利用内存,提高流管理的性能。

附图说明

图1为流管理处理流程图;

图2为流表结构图;

图3为本发明流表老化的处理流程图;

图4为本发明装置功能结构整体示意图;

图5为单次老化的流程图。

具体实施方式

下面结合附图,进一步详细描述本发明的实施例:

如图4所示,本发明的整个装置模块,由多个子功能模块构成,其中包括

MIG_APP模块:内存控制器,由FPGA内部的IP core提供。

flow_aging模块:流老化模块。批量读取内存流表信息,将有效流表结果存在FIFO(先入先出队列)里,再从FIFO里读取流表节点内容,根据节点的建立时间和老化时间进行老化处理,根据节点的下一个指针是否有效判断是否有hash冲突,对冲突节点进行重复相同的老化处理。

aging_dbg模块:流老化配置模块。PowerPC通过RGMII接口与FPGA相连,全局静态配置流表老化时间,小批量刷新个数等信息。

大批量的hash桶和hash节点存在内存sdram中,小批量读取的hash桶和hash节点结果存于FPGA内部的FIFO中,然后根据FIFO中存储的小批量hash桶和hash节点的结果内容(hash链指针是否有效,是否有hash冲突,是否到老化时间)决定是否需要进行多次操作。

以hash冲突为2的流表老化为例,其时间维度的老化模块流程为:

1、从内存读取N(假设N=1000)个hash桶;

2、把返回的hash桶的有效指针存入指针FIFO,无效指针丢弃;

3、在读完1000个hash桶时,指针FIFO若非空,读取指针FIFO,同时从内存SDRAM中读取当前指针FIFO确定的有效hash节点;

指针FIFO若为空,则说明此次批量读取的hash桶下没有有效节点,等待下一次的批量读取。

4、比较返回的有效hash节点的建立时间和FPGA逻辑内部的计时器内容,若时间差大于或等于老化时间,说明该节点需被老化,把待老化节点内容存入节点FIFO;若时间差小于老化时间,说明当前节点无需老化,进入步骤5;同时如果节点的下一个指针标志有效,说明有hash冲突,把冲突节点指针存入指针FIFO。指针是指节点地址。

5、若指针FIFO为非空(hash冲突的指针),重复步骤3,4,即将冲突节点作为有效节点进行处理,冲突节点的时间达到老化时间,就将其删除;若指针FIFO为空,判断节点FIFO,若非空,则转到步骤6;若节点FIFO为空,则此次批量老化结束,等待下一次的批量处理。

6、删除待老化的节点:即通过写节点把hash桶或hash节点中的有效指针置0。

图5中的T1表示单次刷新没有hash冲突,并且节点不到老化时间情况下的刷新所需时间;

T2表示hash冲突为2,节点无需老化的刷新时间;

T3表示hash冲突为2,节点需要老化的刷新时间。

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