一种基于多路搜索树路由查找的表项更新方法及装置与流程

文档序号:18373310发布日期:2019-08-07 01:54阅读:150来源:国知局
一种基于多路搜索树路由查找的表项更新方法及装置与流程

本发明涉及网络交换技术领域,尤其涉及一种基于多路搜索树(B-tree)路由查找的表项更新方法及装置。



背景技术:

在大容量路由查找装置的应用场景中,不仅要求了容量和查找性能,更新性能也是同样重要的一个指标,但是往往在复杂的算法中,更新性能会是一个不小的瓶颈;例如在单词查找树(Trie)类的算法中,由于需要节省查找延时,往往需要采用结点复制和优先级覆盖的方式来操作,而这种操作会显著增加结点更新时的代价,因为更新或增加一个结点往往需要涉及数个乃至上百个结点的修改;而在三态内容寻址存储器(TCAM,Ternary Content Addressable Memory)的路由查找更新中,会涉及到硬件结点数据的重排,而这种重排不仅仅在TCAM内部需要做,还需要重排与TCAM条目一一映射的结果表数据,并且为了保证查找不出错,这种重排还必须是顺序交替进行的,涉及到TCAM和结果表交互和同步,大大影响了表项的更新性能。

传统的B-tree数据结构的更新中,既不不存在数据的复制,也不存在结果表与结点表的交互,性能优于Trie及TCAM的路由查找更新,然而对于优化的B-tree路由查找方法(参见201310396381.5),则需要有相应的特殊的更新流程,以提高数据更新的效率,降低数据更新带来的时延。



技术实现要素:

有鉴于此,本发明实施例期望提供一种基于B-tree路由查找的表项更新方法及装置,能够提高数据更新的效率,降低数据更新带来的时延。

为达到上述目的,本发明实施例的技术方案是这样实现的:

本发明实施例提供了一种基于B-tree路由查找的表项更新方法,所述方法包括:

确定控制包进入当前查找级,且所述控制包之前的查找指令均已处理完成时,更新当前查找级的树结点表项数据或结果表项数据,同时,依次获取所述控制包之后的查找指令中的读地址,将所述读地址与当前查找级的更新地址进行匹配,确定匹配成功时,将依据所述读地址获取的数据替换为所述更新地址对应的数据;

确定所述树结点表项数据或结果表项数据更新完成时,在当前查找级的查找指令入口处插入标记包;

确定所述标记包插入当前查找级之前的查找指令均已处理完成时,丢弃所述标记包。

上述方案中,所述确定控制包进入当前查找级,且所述控制包之前的查找指令均已处理完成之前,所述方法还包括:

读取存储的所有查找级需要更新的表项数据及所述表项数据对应的更新地址,获取并另存当前查找级需要更新的表项数据及所述当前查找级需要更新的表项数据对应的更新地址。

上述方案中,所述存储的所有查找级需要更新的表项数据及所述表项数据对应的更新地址包括:树结点表部分及结果表部分;

其中,所述树结点表部分包括:所有查找级需要更新的结点数据及所述结点数据对应的更新地址;所述结果表部分包括:所有查找级需要更新的结果数据及所述结果数据对应的更新地址。

上述方案中,所述确定控制包进入当前查找级,且所述控制包之前的查找指令均已处理完成之前,所述方法还包括:

确定当前查找级为最高查找级时,在当前查找级的查找指令入口处插入所述控制包。

上述方案中,所述方法还包括:

检测到查找的当前查找级的某条表项数据错误时,存储所述表项数据及所述表项数据对应的更新地址,并依次获取当前查找级的查找指令中的读地址,将所述读地址与当前查找级的更新地址进行匹配,确定匹配成功时,将依据所述读地址获取的数据替换为所述更新地址对应的数据,直至所述错误修复。

本发明实施例还提供了一种基于B-tree路由查找的表项更新方法,所述方法包括:

在当前查找级中检测到控制包时,对进入当前查找级的所述控制包之后的查找指令加锁;

确定所述控制包进入当前查找级之前的查找指令均已处理完成时,更新当前查找级的树结点表项数据或结果表项数据;

确定当前查找级的树结点表项数据或结果表项数据更新完成时,解锁所述进入当前查找级的所述控制包之后的查找指令。

上述方案中,在当前查找级中检测到控制包之前,所述方法还包括:

确定当前查找级为最高查找级时,在当前查找级的查找指令入口处插入控制包。

上述方案中,确定所述控制包进入当前查找级之前的查找指令均已处理完成时,所述方法还包括:

将所述控制包直接送入下一个查找级。

上述方案中,所述更新当前查找级的树结点表项数据或结果表项数据包括:读取存储的所有查找级需要更新的表项数据及所述表项数据对应的更新地址中当前查找级需要更新的表项数据及所述当前查找级需要更新的表项数据对应的更新地址,并将所述当前查找级需要更新的表项数据写入对应的更新地址中。

本发明实施例还提供了一种基于B-tree路由查找的表项更新装置,所述装置包括:第一更新模块、Cache模块、插入模块及确定模块;其中,

所述第一更新模块,用于确定控制包进入当前查找级,且所述控制包之前的查找指令均已处理完成时,更新当前查找级的树结点表项数据或结果表项数据,同时,触发Cache模块;

所述Cache模块,用于依次获取所述控制包之后的查找指令中的读地址,将所述读地址与当前查找级的更新地址进行匹配,确定匹配成功时,将依据所述读地址获取的数据替换为所述更新地址对应的数据;

所述插入模块,用于确定所述树结点表项数据或结果表项数据更新完成时,在当前查找级的查找指令入口处插入标记包;

所述确定模块,用于确定所述标记包插入当前查找级之前的查找指令均已处理完成时,丢弃所述标记包。

上述方案中,所述第一更新模块,还用于读取存储的所有查找级需要更新的表项数据及所述表项数据对应的更新地址,获取并另存当前查找级需要更新的表项数据及所述当前查找级需要更新的表项数据对应的更新地址;

相应的,所述装置还包括第一缓存模块,用于存储所有查找级需要更新的表项数据及所述表项数据对应的更新地址;

所述Cache模块,还用于存储当前查找级需要更新的表项数据及所述当前查找级需要更新的表项数据对应的更新地址。

上述方案中,所述第一更新模块,还用于确定当前查找级为最高查找级时,在当前查找级的查找指令入口处插入控制包。

上述方案中,所述第一更新模块,还用于检测到查找的当前查找级的某条表项数据错误时,存储所述表项数据及所述表项数据对应的更新地址至所述Cache模块,并依次获取当前查找级的查找指令中的读地址,将所述读地址与当前查找级的更新地址进行匹配,确定匹配成功时,将依据所述读地址获取的数据替换为所述更新地址对应的数据,直至所述错误修复。

本发明实施例还提供了一种基于B-tree路由查找的表项更新装置,所述装置包括:加锁模块、第二更新模块及解锁模块;其中,

所述加锁模块,用于在当前查找级中检测到控制包时,对进入当前查找级的所述控制包之后的查找指令加锁;

所述第二更新模块,用于确定所述控制包进入当前查找级之前的查找指令均已处理完成时,更新当前查找级的树结点表项数据或结果表项数据;

所述解锁模块,用于确定当前查找级的树结点表项数据或结果表项数据更新完成时,解锁所述进入当前查找级的所述控制包之后的查找指令。

上述方案中,所述第二更新模块,还用于确定当前查找级为最高查找级时,在当前查找级的查找指令入口处插入所述控制包。

上述方案中,所述第二更新模块,具体用于读取存储的所有查找级需要更新的表项数据及所述表项数据对应的更新地址中当前查找级需要更新的表项数据及所述当前查找级需要更新的表项数据对应的更新地址,并将所述当前查找级需要更新的表项数据写入对应的更新地址中;

相应的,所述装置还包括第二缓存模块,用于存储所有查找级需要更新的表项数据及所述表项数据对应的更新地址。

上述方案中,所述第二更新模块,还用于将所述控制包直接送入下一个查找级。

本发明实施例所提供的基于B-tree路由查找的表项更新方法及装置,确定控制包进入当前查找级,且所述控制包之前的查找指令均已处理完成时,更新当前查找级的树结点表项数据或结果表项数据,同时,依次获取所述控制包之后的查找指令中的读地址,将所述读地址与当前查找级的更新地址进行匹配,确定匹配成功时,将依据所述读地址获取的数据替换为所述更新地址对应的数据;确定所述树结点表项数据或结果表项数据更新完成时,在当前查找级的查找指令入口处插入标记包;确定所述标记包插入当前查找级之前的查找指令均已处理完成时,丢弃所述标记包。如此,在更新当前查找级的树结点表项数据或结果表项数据的同时,将依据所述读地址获取的数据替换为所述更新地址对应的数据,能够提高数据更新的效率,降低数据更新带来的时延。

附图说明

图1为B-tree的路由查找方法流程示意图;

图2为本发明实施例一基于B-tree路由查找的表项更新方法流程示意图a;

图3为本发明实施例一基于B-tree路由查找的表项更新方法流程示意图b;

图4本发明实施例所有查找级需要更新的表项数据及所述表项数据对应的更新地址的存储格式示意图;

图5为本发明实施例二基于B-tree路由查找的表项更新方法流程示意图a;

图6为本发明实施例二基于B-tree路由查找的表项更新方法流程示意图b;

图7为本发明实施例三基于B-tree路由查找的表项更新方法流程示意图;

图8为本发明实施例四基于B-tree路由查找的表项更新方法流程示意图;

图9为本发明实施例一基于B-tree路由查找的表项更新装置组成结构示意图;

图10为本发明实施例二基于B-tree路由查找的表项更新装置组成结构示意图。

具体实施方式

本发明实施例所述表项更新方法基于一种B-tree路由查找方法,为了更清楚的理解本发明实施例,现对所述B-tree路由查找方法进行简要描述。

B-tree是一种自底向上生长的树,树的每一层为一个查找级,最下面一层为结果表查找级,其余各层均为树结点查找级,即实际的查找级数为树的层数加结果表查找层。

B-tree中每更新(增加、删除、更新)一次数据,会引起如下操作中的一种:1、仅更新一条结果数据;2、更新一个树结点和一条结果数据;3、更新一个树结点和多条结果数据;4、更新多个树结点和多条结果数据。

B-tree的路由查找为自上而下的查找,每级查找之间存在相互关联,因此,本发明实施例所述表项更新也是自上而下的更新,即更新过程为从需要进行数据更新的最上面一个查找级开始,依次向下更新,结果表查找级为最后一级更新,如此,可以保证当前查找级进行数据更新后,新的查找请求一定访问更新过的树结点表项数据或结果表项数据。

图1所示为B-tree的路由查找方法流程示意图,如图1所示,图中给出了三级查找级之间的逻辑关系,以第N级查找级为例,第N级查找级接收到第N-1级查找级送出的查找指令后,将指令存入先入先出队列(FIFO,First In First Out)1,当FIFO1中非空,即存有查找指令时,位于FIFO1出口的查找指令将会被处理,键值和读地址等数据被存储至FIFO2中,查找请求和查找地址被发送到FIFO3中;这里所述FIFO2中的读地址与FIFO3中的查找地址为相同的地址;所述查找请求和查找地址用于获取结点表中的树结点表项数据;当FIFO3非空时,处于FIFO3出口的查找请求和查找地址会被发送到结点表中进行数据查找操作;一定时延后,查找结果会返回到FIFO4(204)中;当FIFO4非空时,处于FIFO4出口的返回结果会与处于FIFO2出口的键值等信息同时被取出;经过对返回结果中的树结点表项数据和所述键值数据的比较后生成下一查找级的查找指令,送入下一查找级。

在进行上述路由查找过程中,每一个FIFO中的数据可能因为数据线上某个位置的处理速度与指令速度不匹配暂存在FIFO中;当任何一个FIFO快满时会对前一级FIFO进行流控反压,所以不会出现丢失指令或数据的情况。

基于上述B-tree的路由查找方法,在本发明实施例中,确定控制包进入当前查找级,且所述控制包之前的查找指令均已处理完成时,更新当前查找级的树结点表项数据或结果表项数据,同时,依次获取所述控制包之后的查找指令中的读地址,将所述读地址与当前查找级的更新地址进行匹配,确定匹配成功时,将依据所述读地址获取的数据替换为所述更新地址对应的数据;确定所述树结点表项数据或结果表项数据更新完成时,在当前查找级的查找指令入口处插入标记包;确定所述标记包插入当前查找级之前的查找指令均已处理完成时,丢弃所述标记包。

图2为本发明实施例一基于B-tree路由查找的表项更新方法流程示意图a;图3为本发明实施例一基于B-tree路由查找的表项更新方法流程示意图b;如图2、图3所示,本发明实施例基于B-tree路由查找的表项更新方法流程包括:

步骤201:确定控制包进入当前查找级,且所述控制包之前的查找指令均已处理完成时,更新当前查找级的树结点表项数据或结果表项数据,同时,依次获取所述控制包之后的查找指令中的读地址,将所述读地址与当前查找级的更新地址进行匹配,确定匹配成功时,将依据所述读地址获取的数据替换为所述更新地址对应的数据;

这里,本步骤之前,所述方法还包括:确定当前查找级为最高查找级时,在当前查找级的查找指令入口处插入控制包;这里,所述控制包为一个具有特殊标记的控制包,可以随着查找指令流一起进行传输,当所述控制包从FIFO1中被读出被处理时,进入FIFO2的查找地址为无效地址或空地址,相应的,返回至FIFO4的为空结果;所述最高查找级为所有查找级中需要进行数据更新的最上面一个查找级。

进一步的,本步骤之前,所述方法还包括:读取第一缓存模块存储的所有查找级需要更新的表项数据及所述表项数据对应的更新地址,获取并另存当前查找级需要更新的表项数据及所述当前查找级需要更新的表项数据对应的更新地址至所述Cache模块;

这里,若当前查找级为最高查找级,则所述读取第一缓存模块存储的所有查找级需要更新的表项数据及所述表项数据对应的更新地址,获取并另存当前查找级需要更新的表项数据及所述当前查找级需要更新的表项数据对应的更新地址的操作,在查找指令入口处插入控制包的操作之前执行;

所述读取存储的所有查找级需要更新的表项数据及所述表项数据对应的更新地址之前,所述方法还包括:第一缓存模块存储软件写入的所有查找级需要更新的表项数据及所述表项数据对应的更新地址;

所述存储的所有查找级需要更新的表项数据及所述表项数据对应的更新地址包括:树结点表部分及结果表部分;由于结点的数据位宽远大于结果表的数据位宽,分成树结点表及结果表两部分可以有利于硬件存储单元的划分;

其中,所述树结点表部分包括:所有查找级需要更新的结点数据及所述结点数据对应的更新地址;所述结果部分包括:所有查找级需要更新的结果数据及所述结果数据对应的更新地址;

所述树结点表部分的存储格式如图4a所示,包括:有效标记、查找级、更新地址及树结点数据;其中,所述有效标记为硬件标识,标记该条更新表项是否有效,查找级标识了该条结点是处于哪一级查找级中;更新地址为树结点对应的物理地址;树结点数据即需要写入实际硬件内存的数据;由于更新树结点时为自上而下的更新,因此,在填写树结点表时,也是按照自上而下的顺序填写,最上一层需要更新的结点填写在结点缓存的第一行,然后顺序向下填写,若某一层需要更新多个结点,该层结点数据间可以不分顺序;

所述结果部分的存储格式如图4b所示,包括:有效标记、更新地址和结果表项数据;其中,所述有效标记指示该条更新表项是否有效,更新地址为结果表项数据对应的物理地址,结果表项数据即需要写入实际硬件内存的数据。

进一步的,所述依次获取所述控制包之后的查找指令中的读地址,将所述读地址与当前查找级的更新地址进行匹配包括:

使能高速缓存Cache开关,依次获取所述控制包进入当前查找级之后的查找指令中的读地址,并将所述读地址与Cache模块中存储的当前查找级的更新地址进行匹配。

进一步的,所述确定所述控制包之前的查找指令均已处理完成,即确定所述控制包进入当前查找级之前的查找指令均已从FIFO队列中清空,即在FIFO2的队列出口处检测到所述控制包时;

所述更新当前查找级的树结点表项数据或结果表项数据包括:获取所述Cache模块中存储的当前查找级需要更新的表项数据及所述表项数据对应的更新地址,将所述当前查找级需要更新的表项数据写入对应的更新地址中;

将依据所述读地址获取的表项数据替换为所述更新地址对应的表项数据,而忽略实际查找的数据,如此,从查找现象上,相应更新地址的数据已经完成了更新操作,虽然实际表项数据可能尚未写入树结点表或结果表中,加速了现象上的路由更新速度,同时对于实际表项数据,可以“慢慢地”进行更新操作。

步骤202:确定所述树结点表项数据或结果表项数据更新完成时,在当前查找级的查找指令入口处插入标记包;

这里,所述确定所述树结点表项数据或结果表项数据更新完成包括:确定所述Cache模块中存储的当前查找级需要更新的表项数据均已写入所述表项数据对应的更新地址;

所述标记包为不同于所述控制包的具有特殊标记的标记包,可以随着查找指令流正常传输,标记包的插入保证了在所述标记包插入当前查找级之后的查找指令,读取的都是更新后的树结点表项数据或结果表项数据。

步骤203:确定所述标记包插入当前查找级之前的查找指令均已处理完成时,丢弃所述标记包;

这里,所述确定所述标记包插入当前查找级之前的查找指令均已处理完成时,所述方法还包括:去使能所述Cache开关,清空所述Cache模块中存储的当前查找级需要更新的表项数据及所述表项数据对应的更新地址;如此,方便了当前查找级进行下一次更新时需要更新的数据及相应更新地址的写入;

去使能所述Cache开关,即所述标记包插入当前查找级之后的查找指令可以正常的依据自身的读地址获取对应的表项数据,无须所述Cache模块中缓存的对应的表项数据代替。

进一步的,本步骤之后,所述方法还包括:将所述控制包直接送入下一个查找级;如此,可以保证B-tree的更新操作的连贯性,减少更新时延,提高了B-tree的更新效率。

进一步的,所述方法还包括:检测到查找的当前查找级的某条表项数据错误时,所述Cache模块存储控制面写入的所述当前查找级的表项数据及相应的更新地址,并使能所述Cache开关,依次获取当前查找级的查找指令中的读地址,将所述读地址与当前查找级的更新地址进行匹配,确定匹配成功时,将依据所述读地址获取的数据替换为所述更新地址对应的数据,直至所述错误修复,去使能所述Cache开关;如此,所述Cache模块作为临时备份表被使用,便于控制面进行相应的故障定位和故障处理;

进一步的,所述方法还包括:增加另存的当前查找级需要更新的每条表项数据的有效标记,所述有效标记用于标识当前表项数据是否有效;

当检测到查找的当前查找级的某条表项数据错误,且当前查找级需要进行数据更新时,需要执行如下操作,即依据查找指令中的读地址获取的数据将被替换为所述Cache模块中存储的更新地址对应的数据,由于所述更新地址及其对应的数据在写入所述Cache模块时,可能存在某条更新数据未完全写入,但从FIFO2中出来的查找指令中的读地址为所述未完全写入的数据对应的地址,此时,当所述Cache模块中存储的更新地址对应的数据替换依据查找指令中的读地址获取的数据的操作将会出错,因此,增加所述Cache模块存储的每条表项数据的有效标记,获取当前查找级需要更新的数据及相应的地址后,首先在所述Cache模块中写入表项数据对应的更新地址,并设置有效标记为无效,待所述表项数据写入完成时,设置所述有效标记为有效,待所有表项数据的有效标记均为有效时,再对当前查找级的树结点表项数据或结果表项数据进行更新操作;如此,当检测到查找的当前查找级的某条表项数据错误时,所述Cache模块作为备份表的同时也不会影响对树结点表项数据或结果表项数据的更新。

图5为本发明实施例二基于B-tree路由查找的表项更新方法流程示意图a;图6为本发明实施例二基于B-tree路由查找的表项更新方法流程示意图b;如图5、图6所示,本发明实施例基于B-tree路由查找的表项更新方法流程包括:

步骤501:在当前查找级中检测到控制包时,对进入当前查找级的所述控制包之后的查找指令加锁;

本步骤之前,所述方法还包括:确定当前查找级为最高查找级时,在当前查找级的查找指令入口处插入控制包;如图6中步骤一所示;

其中,所述确定当前查找级为最高查找级包括:确定当前查找级为所有查找级中需要进行数据更新的最上面一个查找级;

所述控制包为一个具有特殊标记的控制包,可以随着查找指令流正常传输,当所述控制包从FIFO1中被读出被处理时,进入FIFO2的查找地址为无效地址或空地址,相应的,返回至FIFO4的为空结果。

进一步的,在当前查找级中检测到控制包,即在FIFO1的出口处检测到所述控制包,即所述控制包刚从所述FIFO1中被读出分发时;如图6中步骤二所示;

对进入当前查找级的所述控制包之后的查找指令加锁,此时,FIFO1中的查找指令被压在FIFO1中,无法输出,且在后面的一段时间内,前一级发送过来的查找指令也都被顺序压在FIFO1中,而所述控制包进入当前查找级之前的查找指令则可以顺利的从FIFO4中获得返回数据,生成下一级查找指令并进入下一级中。

步骤502:确定所述控制包进入当前查找级之前的查找指令均已处理完成时,更新当前查找级的树结点表项数据或结果表项数据;

这里,所述确定所述控制包进入当前查找级之前的查找指令均已处理完成,即确定所述控制包进入当前查找级之前的查找指令均已从FIFO队列中清空,即在FIFO2的队列出口处检测到所述控制包,同时所述控制包的读空数据也返回至FIFO4的出口时;如图6中步骤三所示;

所述更新当前查找级的树结点表项数据或结果表项数据包括:获取第二缓存模块中存储的所有查找级需要更新的数据及所述数据对应的地址中当前查找级需要更新的数据及所述当前查找级需要更新的数据对应的更新地址,将当前查找级需要更新的数据写入对应的更新地址中;

这里,所述获取第二缓存模块中存储的所有查找级需要更新的数据及所述数据对应的地址中当前查找级需要更新的数据及所述当前查找级需要更新的数据对应的更新地址之前,所述方法还包括:第二缓存模块存储软件写入的所有查找级需要更新的表项数据及所述表项数据对应的更新地址;

所述存储的所有查找级需要更新的表项数据及所述表项数据对应的更新地址包括:树结点表部分及结果表部分;由于结点的数据位宽远大于结果表的数据位宽,分成树结点表及结果表两部分可以有利于硬件存储单元的划分;

其中,所述树结点表部分包括:所有查找级需要更新的结点数据及所述结点数据对应的更新地址;所述结果部分包括:所有查找级需要更新的结果数据及所述结果数据对应的更新地址;

所述树结点表部分的存储格式如图4a所示,包括:有效标记、查找级、更新地址及树结点数据;其中,所述有效标记为硬件标识,标记该条更新表项是否有效,查找级标识了该条结点是处于哪一级查找级中;更新地址为树结点对应的物理地址;树结点数据即需要写入实际硬件内存的数据;由于更新树结点时为自上而下的更新,因此,在填写树结点表时,也是按照自上而下的顺序填写,最上一层需要更新的结点填写在结点缓存的第一行,然后顺序向下填写,若某一层需要更新多个结点,该层结点数据间可以不分顺序;

所述结果部分的存储格式如图4b所示,包括:有效标记、更新地址和结果表项数据;其中,所述有效标记指示该条更新表项是否有效,更新地址为结果表项数据对应的物理地址,结果表项数据即需要写入实际硬件内存的数据。

步骤503:确定当前查找级的树结点表项数据或结果表项数据更新完成时,解锁所述进入当前查找级的所述控制包之后的查找指令;

这里,所述解锁所述进入当前查找级的所述控制包之后的查找指令,以使之前被压在FIFO1中的查找指令可以被正常分发;如图6中步骤四所示;

所述控制包将位于查找指令流中的所述控制包之前的查找指令和所述控制包之后的查找指令严格的分成了原查找指令和新查找指令,所述原查找指令获取的是更新前的树结点表项数据或结果表项数据,所述新查找指令获取的是更新后的树结点表项数据或结果表项数据。

进一步的,本步骤之后,所述方法还包括:将所述控制包直接送入下一个查找级;如此,可以保证B-tree的更新操作的连贯性,减少更新时延,提高了B-tree的更新效率。

图7为本发明实施例三基于B-tree路由查找的表项更新方法流程示意图;在本发明实施例中进行数据更新的当前查找级为需要进行数据更新的查找级中最上面一层查找级,如图7所示,本发明实施例三基于B-tree路由查找的表项更新方法包括:

步骤701:第一缓存模块存储软件写入的所有查找级需要更新的表项数据及所述表项数据对应的更新地址;

这里,所述存储的所有查找级需要更新的表项数据及所述表项数据对应的更新地址包括:树结点表部分及结果表部分;由于结点的数据位宽远大于结果表的数据位宽,分成树结点表及结果表两部分可以有利于硬件存储单元的划分;

其中,所述树结点表部分包括:所有查找级需要更新的结点数据及所述结点数据对应的更新地址;所述结果部分包括:所有查找级需要更新的结果数据及所述结果数据对应的更新地址;

所述树结点表部分的存储格式如图4a所示,包括:有效标记、查找级、更新地址及树结点数据;其中,所述有效标记为硬件标识,标记该条更新表项是否有效,查找级标识了该条结点是处于哪一级查找级中;更新地址为树结点对应的物理地址;树结点数据即需要写入实际硬件内存的数据;由于更新树结点时为自上而下的更新,因此,在填写树结点表时,也是按照自上而下的顺序填写,最上一层需要更新的结点填写在结点缓存的第一行,然后顺序向下填写,若某一层需要更新多个结点,该层结点数据间可以不分顺序;

所述结果部分的存储格式如图4b所示,包括:有效标记、更新地址和结果表项数据;其中,所述有效标记指示该条更新表项是否有效,更新地址为结果表项数据对应的物理地址,结果表项数据即需要写入实际硬件内存的数据。

在本发明实施例中,软件仅需与所述第一缓存模块进行一次交互,便可实现多个查找级的多条路由表项的更新,大大提高了更新效率。

步骤702:在当前查找级的查找指令入口处插入控制包;

这里,所述控制包为一个具有特殊标记的控制包,可以随着查找指令流一起进行传输,当所述控制包从FIFO1中被读出被处理时,进入FIFO2的查找地址为无效地址或空地址,相应的,返回至FIFO4的为空结果;所述最高查找级为所有查找级中需要进行数据更新的最上面一个查找级。

步骤703:获取并另存当前查找级需要更新的表项数据及所述当前查找级需要更新的表项数据对应的更新地址;

本步骤具体包括:读取第一缓存模块存储的所有查找级需要更新的表项数据及所述表项数据对应的更新地址,获取并另存当前查找级需要更新的表项数据及所述当前查找级需要更新的表项数据对应的更新地址至Cache模块。

步骤704:确定控制包进入当前查找级之前的查找指令均已处理完成时,更新当前查找级的树结点表项数据或结果表项数据,同时,依次获取所述控制包之后的查找指令中的读地址,将所述读地址与当前查找级的更新地址进行匹配,确定匹配成功时,将依据所述读地址获取的数据替换为所述更新地址对应的数据;

这里,所述依次获取所述控制包之后的查找指令中的读地址,将所述读地址与当前查找级的更新地址进行匹配包括:

使能高速缓存Cache开关,依次获取所述控制包进入当前查找级之后的查找指令中的读地址,并将所述读地址与Cache模块中存储的当前查找级的更新地址进行匹配。

进一步的,所述确定控制包进入当前查找级之前的查找指令均已处理完成时,即所述控制包进入当前查找级之前的查找指令均已从FIFO队列中清空时,即在FIFO2的队列出口处检测到所述控制包时;

所述更新当前查找级的树结点表项数据或结果表项数据包括:获取所述Cache模块存储的当前查找级需要更新的表项数据及所述表项数据对应的更新地址,将所述当前查找级需要更新的表项数据写入对应的更新地址中;

将依据所述读地址获取的表项数据替换为所述更新地址对应的表项数据,而忽略实际查找的数据,如此,从查找现象上,相应更新地址的数据已经完成了更新操作,虽然实际表项数据可能尚未写入树结点表或结果表中,加速了现象上的路由更新速度,同时对于实际表项数据,可以“慢慢地”进行更新操作。

步骤705:确定所述树结点表项数据或结果表项数据更新完成时,在当前查找级的查找指令入口处插入标记包;

这里,所述确定所述树结点表项数据或结果表项数据更新完成包括:确定所述Cache模块中存储的当前查找级需要更新的表项数据均已写入所述表项数据对应的更新地址;

所述标记包为不同于所述控制包的具有特殊标记的标记包,可以随着查找指令流正常传输,标记包的插入保证了在所述标记包插入当前查找级之后的查找指令,读取的都是更新后的树结点表项数据或结果表项数据。

步骤706:确定所述标记包插入当前查找级之前的查找指令均已处理完成时,丢弃所述标记包;

本步骤之后,所述方法还包括:将所述控制包直接送入下一个查找级;如此,可以保证B-tree的更新操作的连贯性,减少更新时延,提高了B-tree的更新效率。

进一步的,所述确定所述标记包插入当前查找级之前的查找指令均已处理完成时,所述方法还包括:

去使能所述Cache开关,并清空存储的当前查找级需要更新的表项数据及所述表项数据对应的更新地址。

进一步的,所述方法还包括:检测到查找的当前查找级的某条表项数据错误时,所述Cache模块存储控制面写入的所述表项数据及相应的更新地址,并使能所述Cache开关,依次获取当前查找级的查找指令中的读地址,将所述读地址与当前查找级的更新地址进行匹配,确定匹配成功时,将依据所述读地址获取的数据替换为所述更新地址对应的数据,直至所述错误修复,去使能所述Cache开关;如此,所述Cache模块作为临时备份表被使用,便于控制面进行相应的故障定位和故障处理;

进一步的,所述方法还包括:增加另存的当前查找级需要更新的每条表项数据的有效标记,所述有效标记用于标识当前表项数据是否有效;

当检测到查找的当前查找级的某条表项数据错误,且当前查找级需要进行数据更新时,需要执行以下操作,即依据查找指令中的读地址获取的数据将被替换为所述Cache模块中存储的更新地址对应的数据,由于所述更新地址及其对应的数据在写入所述Cache模块时,可能存在某条更新数据未完全写入,但从FIFO2中出来的查找指令中的读地址为所述未完全写入的数据对应的地址,此时,所述Cache模块中存储的更新地址对应的数据替换依据查找指令中的读地址获取的数据的操作将会出错,因此,增加所述Cache模块存储的每条表项数据的有效标记,获取当前查找级需要更新的数据及相应的地址后,首先在所述Cache模块中写入表项数据对应的更新地址,并设置有效标记为无效,待所述表项数据写入完成时,设置所述有效标记为有效,待所有表项数据的有效标记均为有效时,再对当前查找级的树结点表项数据或结果表项数据进行更新操作;如此,当检测到查找的当前查找级的某条表项数据错误时,所述Cache模块作为备份表的同时也不会影响对树结点表项数据或结果表项数据的更新。

图8为本发明实施例四基于B-tree路由查找的表项更新方法流程示意图;在本发明实施例中进行数据更新的当前查找级为需要进行数据更新的查找级中最上面一层查找级,如图8所示,本发明实施例四基于B-tree路由查找的表项更新方法包括:

步骤801:第二缓存模块存储软件写入的所有查找级需要更新的表项数据及所述表项数据对应的更新地址;

这里,所述存储的所有查找级需要更新的表项数据及所述表项数据对应的更新地址包括:树结点表部分及结果表部分;由于结点的数据位宽远大于结果表的数据位宽,分成树结点表及结果表两部分可以有利于硬件存储单元的划分;

其中,所述树结点表部分包括:所有查找级需要更新的结点数据及所述结点数据对应的更新地址;所述结果部分包括:所有查找级需要更新的结果数据及所述结果数据对应的更新地址;

所述树结点表部分的存储格式如图4a所示,包括:有效标记、查找级、更新地址及树结点数据;其中,所述有效标记为硬件标识,标记该条更新表项是否有效,查找级标识了该条结点是处于哪一级查找级中;更新地址为树结点对应的物理地址;树结点数据即需要写入实际硬件内存的数据;由于更新树结点时为自上而下的更新,因此,在填写树结点表时,也是按照自上而下的顺序填写,最上一层需要更新的结点填写在结点缓存的第一行,然后顺序向下填写,若某一层需要更新多个结点,该层结点数据间可以不分顺序;

所述结果部分的存储格式如图4b所示,包括:有效标记、更新地址和结果表项数据;其中,所述有效标记指示该条更新表项是否有效,更新地址为结果表项数据对应的物理地址,结果表项数据即需要写入实际硬件内存的数据。

在本发明实施例中,软件仅需与所述第二缓存模块进行一次交互,便可实现多个查找级的多条路由表项的更新,大大提高了更新效率。

步骤802:在当前查找级的查找指令入口处插入控制包;

这里,所述控制包为一个具有特殊标记的控制包,可以随着查找指令流一起进行传输,当所述控制包从FIFO1中被读出被处理时,进入FIFO2的查找地址为无效地址或空地址,相应的,返回至FIFO4的为空结果;所述最高查找级为所有查找级中需要进行数据更新的最上面一个查找级。

步骤803:在当前查找级中检测到控制包时,对进入当前查找级的所述控制包之后的查找指令加锁;

这里,在当前查找级中检测到控制包,即在FIFO1的出口处检测到所述控制包,即所述控制包刚从所述FIFO1中被读出分发时;如图6中步骤二所示;

对进入当前查找级的所述控制包之后的查找指令加锁,此时,FIFO1中的查找指令被压在FIFO1中,无法输出,且在后面的一段时间内,前一级发送过来的查找指令也都被顺序压在FIFO1中,而所述控制包进入当前查找级之前的查找指令则可以顺利的从FIFO4中获得返回数据,生成下一级查找指令并进入下一级中。

步骤804:确定所述控制包进入当前查找级之前的查找指令均已处理完成时,更新当前查找级的树结点表项数据或结果表项数据;

这里,所述确定所述控制包进入当前查找级之前的查找指令均已处理完成时,即确定所述控制包进入当前查找级之前的查找指令均已从FIFO队列中清空时,即在FIFO2的队列出口处检测到所述控制包,同时所述控制包的读空数据也返回至FIFO4的出口时;如图6中步骤三所示;

所述更新当前查找级的树结点表项数据或结果表项数据包括:获取第二缓存模块中存储的所有查找级需要更新的数据及所述数据对应的地址中当前查找级需要更新的数据及所述当前查找级需要更新的数据对应的更新地址,将当前查找级需要更新的数据写入对应的更新地址中。

步骤805:确定当前查找级的树结点表项数据或结果表项数据更新完成时,解锁所述进入当前查找级的所述控制包之后的查找指令;

这里,所述解锁所述进入当前查找级的所述控制包之后的查找指令,以使之前被压在FIFO1中的查找指令可以被正常分发;如图6中步骤四所示;

所述控制包将位于查找指令流中的所述控制包之前的查找指令和所述控制包之后的查找指令严格的分成了原查找指令和新查找指令,所述原查找指令获取的是更新前的树结点表项数据或结果表项数据,所述新查找指令获取的是更新后的树结点表项数据或结果表项数据。

进一步的,本步骤之后,所述方法还包括:将所述控制包直接送入下一个查找级;如此,可以保证B-tree的更新操作的连贯性,减少更新时延,提高了B-tree的更新效率。

图9为本发明实施例一基于B-tree路由查找的表项更新装置组成结构示意图;如图9所示,本发明实施例基于B-tree路由查找的表项更新装置组成包括:第一更新模块、Cache模块、插入模块及确定模块;其中,

所述第一更新模块91,用于确定控制包进入当前查找级,且所述控制包之前的查找指令均已处理完成时,更新当前查找级的树结点表项数据或结果表项数据,同时,触发所述Cache模块;

所述Cache模块92,用于依次获取所述控制包之后的查找指令中的读地址,将所述读地址与当前查找级的更新地址进行匹配,确定匹配成功时,将依据所述读地址获取的数据替换为所述更新地址对应的数据;

所述插入模块93,用于确定所述树结点表项数据或结果表项数据更新完成时,在当前查找级的查找指令入口处插入标记包;

所述确定模块94,用于确定所述标记包插入当前查找级之前的查找指令均已处理完成时,丢弃所述标记包。

进一步的,所述第一更新模块91,还用于读取存储的所有查找级需要更新的表项数据及所述表项数据对应的更新地址,获取并另存当前查找级需要更新的表项数据及所述当前查找级需要更新的表项数据对应的更新地址;

相应的,所述装置还包括第一缓存模块95,用于存储所有查找级需要更新的表项数据及所述表项数据对应的更新地址;

所述Cache模块92,还用于存储当前查找级需要更新的表项数据及所述当前查找级需要更新的表项数据对应的更新地址;

这里,所述存储的所有查找级需要更新的表项数据及所述表项数据对应的更新地址包括:树结点表部分及结果表部分;由于结点的数据位宽远大于结果表的数据位宽,分成树结点表及结果表两部分可以有利于硬件存储单元的划分;

其中,所述树结点表部分包括:所有查找级需要更新的结点数据及所述结点数据对应的更新地址;所述结果部分包括:所有查找级需要更新的结果数据及所述结果数据对应的更新地址;

所述树结点表部分的存储格式如图4a所示,包括:有效标记、查找级、更新地址及树结点数据;其中,所述有效标记为硬件标识,标记该条更新表项是否有效,查找级标识了该条结点是处于哪一级查找级中;更新地址为树结点对应的物理地址;树结点数据即需要写入实际硬件内存的数据;由于更新树结点时为自上而下的更新,因此,在填写树结点表时,也是按照自上而下的顺序填写,最上一层需要更新的结点填写在结点缓存的第一行,然后顺序向下填写,若某一层需要更新多个结点,该层结点数据间可以不分顺序;

所述结果部分的存储格式如图4b所示,包括:有效标记、更新地址和结果表项数据;其中,所述有效标记指示该条更新表项是否有效,更新地址为结果表项数据对应的物理地址,结果表项数据即需要写入实际硬件内存的数据。

进一步的,所述Cache模块92依次获取所述控制包之后的查找指令中的读地址,将所述读地址与当前查找级的更新地址进行匹配包括:

所述Cache模块92使能Cache开关,依次获取所述控制包进入当前查找级之后的查找指令中的读地址,并将所述读地址与Cache模块中存储的当前查找级的更新地址进行匹配。

进一步的,所述第一更新模块91更新当前查找级的树结点表项数据或结果表项数据包括:

所述第一更新模块91获取所述Cache模块存储的当前查找级需要更新的表项数据及所述表项数据对应的更新地址,将所述当前查找级需要更新的表项数据写入对应的更新地址中。

进一步的,所述第一更新模块91,还用于确定当前查找级为最高查找级时,在当前查找级的查找指令入口处插入控制包;这里,所述控制包为一个具有特殊标记的控制包,可以随着查找指令流一起进行传输,当所述控制包从FIFO1中被读出被处理时,进入FIFO2的查找地址为无效地址或空地址,相应的,返回至FIFO4的为空结果;所述最高查找级为所有查找级中需要进行数据更新的最上面一个查找级。

进一步的,所述第一更新模块91,还用于确定所述标记包插入当前查找级之前的查找指令均已处理完成时,去使能所述Cache开关,并清空所述Cache模块中存储的当前查找级需要更新的表项数据及所述表项数据对应的更新地址;如此,方便了当前查找级进行下一次更新时需要更新的数据及相应更新地址的写入。

进一步的,所述第一更新模块91,还用于将所述控制包直接送入下一个查找级;如此,可以保证B-tree的更新操作的连贯性,减少更新时延,提高了B-tree的更新效率。

进一步的,所述第一更新模块91,还用于检测到查找的当前查找级的某条表项数据错误时,存储所述表项数据及所述表项数据对应的更新地址至所述Cache模块,并使能所述Cache开关,依次获取当前查找级的查找指令中的读地址,将所述读地址与当前查找级的更新地址进行匹配,确定匹配成功时,将依据所述读地址获取的数据替换为所述更新地址对应的数据,直至所述错误修复,去使能所述Cache开关;如此,所述Cache模块作为临时备份表被使用,便于控制面进行相应的故障定位和故障处理;

进一步的,所述第一更新模块91,还用于增加另存的当前查找级需要更新的每条表项数据的有效标记,所述有效标记用于标识当前表项数据是否有效;

当检测到查找的当前查找级的某条表项数据错误,且当前查找级需要进行数据更新时,需要执行以下操作,即依据查找指令中的读地址获取的数据将被替换为所述Cache模块中存储的更新地址对应的数据,由于所述更新地址及其对应的数据在写入所述Cache模块时,可能存在某条更新数据未完全写入,但从FIFO2中出来的查找指令中的读地址为所述未完全写入的数据对应的地址,此时,所述Cache模块中存储的更新地址对应的数据替换依据查找指令中的读地址获取的数据的操作将会出错,因此,第一更新模块91增加所述Cache模块存储的每条表项数据的有效标记,获取当前查找级需要更新的数据及相应的地址后,首先在所述Cache模块中写入表项数据对应的更新地址,并设置有效标记为无效,待所述表项数据写入完成时,设置所述有效标记为有效,待所有表项数据的有效标记均为有效时,再对当前查找级的树结点表项数据或结果表项数据进行更新操作;如此,当检测到查找的当前查找级的某条表项数据错误时,所述Cache模块作为备份表的同时也不会影响对树结点表项数据或结果表项数据的更新。

图10为本发明实施例二基于B-tree路由查找的表项更新装置组成结构示意图;如图10所示,本发明实施例基于B-tree路由查找的表项更新装置组成包括:加锁模块11、第二更新模块12及解锁模块13;其中,

所述加锁模块11,用于在当前查找级中检测到控制包时,对进入当前查找级的所述控制包之后的查找指令加锁;

所述第二更新模块12,用于确定所述控制包进入当前查找级之前的查找指令均已处理完成时,更新当前查找级的树结点表项数据或结果表项数据;

所述解锁模块13,用于确定当前查找级的树结点表项数据或结果表项数据更新完成时,解锁所述进入当前查找级的所述控制包之后的查找指令。

进一步的,所述第二更新模块12,还用于确定当前查找级为最高查找级时,在当前查找级的查找指令入口处插入控制包;

这里,所述第二更新模块12确定当前查找级为最高查找级包括:确定当前查找级为所有查找级中需要进行数据更新的最上面一个查找级;

所述控制包为一个具有特殊标记的控制包,可以随着查找指令流正常传输,当所述控制包从FIFO1中被读出被处理时,进入FIFO2的查找地址为无效地址或空地址,相应的,返回至FIFO4的为空结果。

进一步的,所述第二更新模块12确定所述控制包进入当前查找级之前的查找指令均已处理完成时,即确定所述控制包进入当前查找级之前的查找指令均已从FIFO队列中清空时,即在FIFO2的队列出口处检测到所述控制包,同时所述控制包的读空数据也返回至FIFO4的出口时;如图6中步骤三所示;

进一步的,所述第二更新模块12更新当前查找级的树结点表项数据或结果表项数据包括:

所述第二更新模块12读取存储的所有查找级需要更新的表项数据及所述表项数据对应的更新地址中当前查找级需要更新的表项数据及所述当前查找级需要更新的表项数据对应的更新地址,并将所述当前查找级需要更新的表项数据写入对应的更新地址中;

相应的,所述装置还包括第二缓存模块14,用于存储所有查找级需要更新的表项数据及所述表项数据对应的更新地址;

获取第二缓存模块14中存储的所有查找级需要更新的数据及所述数据对应的地址中当前查找级需要更新的数据及所述当前查找级需要更新的数据对应的更新地址,将当前查找级需要更新的数据写入对应的更新地址中;

这里,所述获取第二缓存模块14中存储的所有查找级需要更新的数据及所述数据对应的地址中当前查找级需要更新的数据及所述当前查找级需要更新的数据对应的更新地址之前,所述方法还包括:第二缓存模块14存储软件写入的所有查找级需要更新的表项数据及所述表项数据对应的更新地址;

所述存储的所有查找级需要更新的表项数据及所述表项数据对应的更新地址包括:树结点表部分及结果表部分;由于结点的数据位宽远大于结果表的数据位宽,分成树结点表及结果表两部分可以有利于硬件存储单元的划分;

其中,所述树结点表部分包括:所有查找级需要更新的结点数据及所述结点数据对应的更新地址;所述结果部分包括:所有查找级需要更新的结果数据及所述结果数据对应的更新地址;

所述树结点表部分的存储格式如图4a所示,包括:有效标记、查找级、更新地址及树结点数据;其中,所述有效标记为硬件标识,标记该条更新表项是否有效,查找级标识了该条结点是处于哪一级查找级中;更新地址为树结点对应的物理地址;树结点数据即需要写入实际硬件内存的数据;由于更新树结点时为自上而下的更新,因此,在填写树结点表时,也是按照自上而下的顺序填写,最上一层需要更新的结点填写在结点缓存的第一行,然后顺序向下填写,若某一层需要更新多个结点,该层结点数据间可以不分顺序;

所述结果部分的存储格式如图4b所示,包括:有效标记、更新地址和结果表项数据;其中,所述有效标记指示该条更新表项是否有效,更新地址为结果表项数据对应的物理地址,结果表项数据即需要写入实际硬件内存的数据。

进一步的,所述第二更新模块12,还用于将所述控制包直接送入下一个查找级;如此,可以保证B-tree的更新操作的连贯性,减少更新时延,提高了B-tree的更新效率。

在本发明实施例中,所述第一更新模块91、Cache模块92、插入模块93、确定模块94、加锁模块11、第二更新模块12及解锁模块13均可由服务器中的中央处理器(CPU,Central Processing Unit)或数字信号处理器(DSP,Digital Signal Processor)、或现场可编程门阵列(FPGA,Field Programmable Gate Array)、或集成电路(ASIC,Application Specific Integrated Circuit)实现;第一缓存模块95及第二缓存模块14均可由存储器实现。

以上所述,仅为本发明较佳实施例而已,并非用于限定本发明的保护范围。

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