CN105791132B - 一种基于多路搜索树路由查找的表项更新方法及装置 - Google Patents

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

Info

Publication number
CN105791132B
CN105791132B CN201410790117.4A CN201410790117A CN105791132B CN 105791132 B CN105791132 B CN 105791132B CN 201410790117 A CN201410790117 A CN 201410790117A CN 105791132 B CN105791132 B CN 105791132B
Authority
CN
China
Prior art keywords
grade
update
list item
item data
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
Application number
CN201410790117.4A
Other languages
English (en)
Other versions
CN105791132A (zh
Inventor
程晨
李彧
张炜
徐宝魁
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen ZTE Microelectronics Technology Co Ltd
Original Assignee
Shenzhen ZTE Microelectronics Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shenzhen ZTE Microelectronics Technology Co Ltd filed Critical Shenzhen ZTE Microelectronics Technology Co Ltd
Priority to CN201410790117.4A priority Critical patent/CN105791132B/zh
Priority to PCT/CN2015/080748 priority patent/WO2016095450A1/zh
Publication of CN105791132A publication Critical patent/CN105791132A/zh
Application granted granted Critical
Publication of CN105791132B publication Critical patent/CN105791132B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

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

Description

一种基于多路搜索树路由查找的表项更新方法及装置
技术领域
本发明涉及网络交换技术领域,尤其涉及一种基于多路搜索树(B-tree)路由查找的表项更新方法及装置。
背景技术
在大容量路由查找装置的应用场景中,不仅要求了容量和查找性能,更新性能也是同样重要的一个指标,但是往往在复杂的算法中,更新性能会是一个不小的瓶颈;例如在单词查找树(Trie)类的算法中,由于需要节省查找延时,往往需要采用结点复制和优先级覆盖的方式来操作,而这种操作会显著增加结点更新时的代价,因为更新或增加一个结点往往需要涉及数个乃至上百个结点的修改;而在三态内容寻址存储器(TCAM,TernaryContent 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,ApplicationSpecific Integrated Circuit)实现;第一缓存模块95及第二缓存模块14均可由存储器实现。
以上所述,仅为本发明较佳实施例而已,并非用于限定本发明的保护范围。

Claims (17)

1.一种基于多路搜索树B-tree路由查找的表项更新方法,其特征在于,所述方法包括:
确定控制包进入当前查找级,且所述控制包之前的查找指令均已处理完成时,更新当前查找级的树结点表项数据或结果表项数据,同时,依次获取所述控制包之后的查找指令中的读地址,将所述读地址与当前查找级的更新地址进行匹配,确定匹配成功时,将依据所述读地址获取的数据替换为所述更新地址对应的数据;其中,所述控制包为具有特殊标记的,且随查找指令流一起传输的控制包;
确定所述树结点表项数据或结果表项数据更新完成时,在当前查找级的查找指令入口处插入标记包;其中,所述标记包为不同于控制包的具有特殊标记的,且随查找指令流传输的标记包;
确定所述标记包插入当前查找级之前的查找指令均已处理完成时,丢弃所述标记包。
2.根据权利要求1所述方法,其特征在于,所述确定控制包进入当前查找级,且所述控制包之前的查找指令均已处理完成之前,所述方法还包括:
读取存储的所有查找级需要更新的表项数据及所述表项数据对应的更新地址,获取并另存当前查找级需要更新的表项数据及所述当前查找级需要更新的表项数据对应的更新地址。
3.根据权利要求2所述方法,其特征在于,所述存储的所有查找级需要更新的表项数据及所述表项数据对应的更新地址包括:树结点表部分及结果表部分;
其中,所述树结点表部分包括:所有查找级需要更新的结点数据及所述结点数据对应的更新地址;所述结果表部分包括:所有查找级需要更新的结果数据及所述结果数据对应的更新地址。
4.根据权利要求1或2所述方法,其特征在于,所述确定控制包进入当前查找级,且所述控制包之前的查找指令均已处理完成之前,所述方法还包括:
确定当前查找级为最高查找级时,在当前查找级的查找指令入口处插入所述控制包。
5.根据权利要求1或2所述方法,其特征在于,所述方法还包括:
检测到查找的当前查找级的某条表项数据错误时,存储所述表项数据及所述表项数据对应的更新地址,并依次获取当前查找级的查找指令中的读地址,将所述读地址与当前查找级的更新地址进行匹配,确定匹配成功时,将依据所述读地址获取的数据替换为所述更新地址对应的数据,直至所述错误修复。
6.一种基于B-tree路由查找的表项更新方法,其特征在于,所述方法包括:
在当前查找级中检测到控制包时,对进入当前查找级的所述控制包之后的查找指令加锁;其中,所述控制包为具有特殊标记的,且随查找指令流一起传输的控制包;
确定所述控制包进入当前查找级之前的查找指令均已处理完成时,更新当前查找级的树结点表项数据或结果表项数据;
确定当前查找级的树结点表项数据或结果表项数据更新完成时,解锁所述进入当前查找级的所述控制包之后的查找指令。
7.根据权利要求6所述方法,其特征在于,在当前查找级中检测到控制包之前,所述方法还包括:
确定当前查找级为最高查找级时,在当前查找级的查找指令入口处插入控制包。
8.根据权利要求6或7所述方法,其特征在于,确定所述控制包进入当前查找级之前的查找指令均已处理完成时,所述方法还包括:
将所述控制包直接送入下一个查找级。
9.根据权利要求6或7所述方法,其特征在于,所述更新当前查找级的树结点表项数据或结果表项数据包括:读取存储的所有查找级需要更新的表项数据及所述表项数据对应的更新地址中当前查找级需要更新的表项数据及所述当前查找级需要更新的表项数据对应的更新地址,并将所述当前查找级需要更新的表项数据写入对应的更新地址中。
10.一种基于B-tree路由查找的表项更新装置,其特征在于,所述装置包括:第一更新模块、Cache模块、插入模块及确定模块;其中,
所述第一更新模块,用于确定控制包进入当前查找级,且所述控制包之前的查找指令均已处理完成时,更新当前查找级的树结点表项数据或结果表项数据,同时,触发Cache模块;其中,所述控制包为具有特殊标记的,且随查找指令流一起传输的控制包;
所述Cache模块,用于依次获取所述控制包之后的查找指令中的读地址,将所述读地址与当前查找级的更新地址进行匹配,确定匹配成功时,将依据所述读地址获取的数据替换为所述更新地址对应的数据;
所述插入模块,用于确定所述树结点表项数据或结果表项数据更新完成时,在当前查找级的查找指令入口处插入标记包;其中,所述标记包为不同于控制包的具有特殊标记的,且随查找指令流传输的标记包;
所述确定模块,用于确定所述标记包插入当前查找级之前的查找指令均已处理完成时,丢弃所述标记包。
11.根据权利要求10所述装置,其特征在于,所述第一更新模块,还用于读取存储的所有查找级需要更新的表项数据及所述表项数据对应的更新地址,获取并另存当前查找级需要更新的表项数据及所述当前查找级需要更新的表项数据对应的更新地址;
相应的,所述装置还包括第一缓存模块,用于存储所有查找级需要更新的表项数据及所述表项数据对应的更新地址;
所述Cache模块,还用于存储当前查找级需要更新的表项数据及所述当前查找级需要更新的表项数据对应的更新地址。
12.根据权利要求10或11所述装置,其特征在于,所述第一更新模块,还用于确定当前查找级为最高查找级时,在当前查找级的查找指令入口处插入控制包。
13.根据权利要求10或11所述装置,其特征在于,所述第一更新模块,还用于检测到查找的当前查找级的某条表项数据错误时,存储所述表项数据及所述表项数据对应的更新地址至所述Cache模块,并依次获取当前查找级的查找指令中的读地址,将所述读地址与当前查找级的更新地址进行匹配,确定匹配成功时,将依据所述读地址获取的数据替换为所述更新地址对应的数据,直至所述错误修复。
14.一种基于B-tree路由查找的表项更新装置,其特征在于,所述装置包括:加锁模块、第二更新模块及解锁模块;其中,
所述加锁模块,用于在当前查找级中检测到控制包时,对进入当前查找级的所述控制包之后的查找指令加锁;其中,所述控制包为具有特殊标记的,且随查找指令流一起传输的控制包;
所述第二更新模块,用于确定所述控制包进入当前查找级之前的查找指令均已处理完成时,更新当前查找级的树结点表项数据或结果表项数据;
所述解锁模块,用于确定当前查找级的树结点表项数据或结果表项数据更新完成时,解锁所述进入当前查找级的所述控制包之后的查找指令。
15.根据权利要求14所述装置,其特征在于,所述第二更新模块,还用于确定当前查找级为最高查找级时,在当前查找级的查找指令入口处插入所述控制包。
16.根据权利要求14或15所述装置,其特征在于,所述第二更新模块,具体用于读取存储的所有查找级需要更新的表项数据及所述表项数据对应的更新地址中当前查找级需要更新的表项数据及所述当前查找级需要更新的表项数据对应的更新地址,并将所述当前查找级需要更新的表项数据写入对应的更新地址中;
相应的,所述装置还包括第二缓存模块,用于存储所有查找级需要更新的表项数据及所述表项数据对应的更新地址。
17.根据权利要求14或15所述装置,其特征在于,所述第二更新模块,还用于将所述控制包直接送入下一个查找级。
CN201410790117.4A 2014-12-17 2014-12-17 一种基于多路搜索树路由查找的表项更新方法及装置 Active CN105791132B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201410790117.4A CN105791132B (zh) 2014-12-17 2014-12-17 一种基于多路搜索树路由查找的表项更新方法及装置
PCT/CN2015/080748 WO2016095450A1 (zh) 2014-12-17 2015-06-04 一种基于路由查找的表项更新方法、装置及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410790117.4A CN105791132B (zh) 2014-12-17 2014-12-17 一种基于多路搜索树路由查找的表项更新方法及装置

Publications (2)

Publication Number Publication Date
CN105791132A CN105791132A (zh) 2016-07-20
CN105791132B true CN105791132B (zh) 2019-08-06

Family

ID=56125786

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410790117.4A Active CN105791132B (zh) 2014-12-17 2014-12-17 一种基于多路搜索树路由查找的表项更新方法及装置

Country Status (2)

Country Link
CN (1) CN105791132B (zh)
WO (1) WO2016095450A1 (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106302172A (zh) * 2015-05-18 2017-01-04 深圳市中兴微电子技术有限公司 同时支持哈希查找和路由查找的存储、查找方法和装置
WO2018138877A1 (ja) * 2017-01-27 2018-08-02 三菱電機株式会社 管理装置及び管理方法
CN111131015B (zh) * 2019-12-27 2021-09-03 芯启源(南京)半导体科技有限公司 一种基于PC-Trie动态更新路由的方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100452732C (zh) * 2003-08-19 2009-01-14 华为技术有限公司 路由查找方法及其系统
CN100496019C (zh) * 2005-11-10 2009-06-03 中国科学院计算技术研究所 IPv6路由表快速查找和更新的方法
WO2010037421A1 (en) * 2008-10-02 2010-04-08 Telefonaktiebolaget Lm Ericsson (Publ) Ethernet frame broadcast emulation
CN102307149B (zh) * 2011-09-23 2014-05-07 中国科学院计算技术研究所 Ip查找方法和装置以及路由更新方法和装置
CN103780490B (zh) * 2012-10-17 2018-03-30 中兴通讯股份有限公司 一种更新路由查找树的方法及装置
CN103384223B (zh) * 2013-07-23 2016-08-24 迈普通信技术股份有限公司 一种流表项更新方法及设备

Also Published As

Publication number Publication date
CN105791132A (zh) 2016-07-20
WO2016095450A1 (zh) 2016-06-23

Similar Documents

Publication Publication Date Title
CN105224692B (zh) 支持多核处理器的sdn多级流表并行查找的系统及方法
US8335780B2 (en) Scalable high speed relational processor for databases and networks
CN102377664B (zh) 一种基于tcam的区域匹配装置和方法
EP1605646B1 (en) Longest prefix matching using tree bitmap data structures
EP1551141B1 (en) Apparatus and method using hashing for efficiently implementing an IP lookup solution in hardware
CN104866502B (zh) 数据匹配的方法及装置
US20160294693A1 (en) Routing Lookup Method and Device, and Construction Method for B-tree Structure
US6490279B1 (en) Fast data base research and learning apparatus
US8180958B2 (en) Key selection device and process for content-addressable memory
CN108875064A (zh) 基于FPGA的OpenFlow多维数据匹配查找方法
US20080133494A1 (en) Method and apparatus for searching forwarding table
EP1678619B1 (en) Associative memory with entry groups and skip operations
CN105791132B (zh) 一种基于多路搜索树路由查找的表项更新方法及装置
CN112667526B (zh) 一种访问控制列表电路实现方法及其电路
US20140114995A1 (en) Scalable high speed relational processor for databases and networks
CN101277252A (zh) 多分支Trie树的遍历方法
US20110255544A1 (en) System and method for an exact match search using pointer based pipelined multibit trie traversal technique
US20220075766A1 (en) Cuckoo hashing including accessing hash tables using affinity table
Kuo et al. A memory-efficient TCAM coprocessor for IPv4/IPv6 routing table update
CN103309950A (zh) 一种键值搜索方法
WO2011097385A2 (en) Duo-dual tcam architecture for routing tables with incremental update
CN104952484A (zh) 利用分组来实现三重内容可寻址存储器的方法及装置
JP2013037750A (ja) 内容参照メモリ
Guo et al. Research on switch address lookup table based on TCAM
CN115510287A (zh) 一种OpenFlow大规模流表聚合与加速查找方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant