CN104601471A - 一种转发信息表的读写方法及网络处理器 - Google Patents
一种转发信息表的读写方法及网络处理器 Download PDFInfo
- Publication number
- CN104601471A CN104601471A CN201510054368.0A CN201510054368A CN104601471A CN 104601471 A CN104601471 A CN 104601471A CN 201510054368 A CN201510054368 A CN 201510054368A CN 104601471 A CN104601471 A CN 104601471A
- Authority
- CN
- China
- Prior art keywords
- row address
- key
- request
- write
- node
- 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.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/28—Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
- H04L12/40—Bus networks
- H04L12/407—Bus networks with decentralised control
- H04L12/413—Bus networks with decentralised control with random access, e.g. carrier-sense multiple-access with collision detection (CSMA-CD)
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24558—Binary matching operations
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/02—Details
- H04L12/16—Arrangements for providing special services to substations
- H04L12/18—Arrangements for providing special services to substations for broadcast or conference, e.g. multicast
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/28—Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/28—Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
- H04L12/46—Interconnection of networks
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/02—Topology update or discovery
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/16—Multipoint routing
Abstract
本发明实施例提供一种转发信息表的读写方法及网络处理器,涉及通信技术领域,能够解决现有技术中发送到Cache的命令不能顺序返回响应,使得非叶子节点和对应的叶子节点不能同步修改而导致的路由查找出错的问题。具体方案为:网络处理器接收用于修改AD的写AD请求,和用于修改AD对应的Key的写Key请求,在写AD请求和写Key请求经过缓存器之前,当待读写的任一节点区包括Key时,将写AD请求中的row地址变换为与Key所在的节点块的row地址相同的同一row地址,当待读写的任一节点区不包括Key时,将写AD请求中的row地址和写Key请求中的row地址变换为任一节点区中的同一row地址,进而根据同一row地址读写任一节点区。本发明实施例用于读写转发信息表。
Description
技术领域
本发明涉及通信技术领域,尤其涉及一种转发信息表的读写方法及网络处理器。
背景技术
转发信息表(Forward Information Base,FIB)是数据通信中为网络设备(例如网桥、交换机或路由器等)提供将数据包转发至目的地址的信息表,存储于网络硬件的网络处理器(Network Processor,NP)中,其结构示意图可以参见图1,FIB表采用二叉查找树(Binary Search Tree,Btree)结构,每一个非空节点对应一个FIB表项。Btree结构中除最后一层(Branch)节点外的其它层的节点可以称为非叶子节点,用于存储关键字(Key)例如网络协议(Internet Protocol,IP)地址,最后一层的节点可以称为叶子节点,用于存储与非叶子节点对应的相关数据(Associated Data,AD)例如下一跳IP地址或端口号,以根据数据包中的目的地址和FIB表将数据包转发至下一跳网络设备。
通常,一部分FIB表项存储在网络处理器的片内存储器中,另一部分包括叶子节点的表项存储在网络处理器的片外存储器中。Btree中存储于片内存储器中或片外存储器中的一些连续的层可以为一个节点区Stage,例如,可以是连续的2层为一个节点区,也可以是连续的3层为一个节点区,参见图1所示的结构示意图,片外存储器可以存储序号为0至n的n+1个节点区。在任一节点区内,其中的F个节点存储于同一存储地址对应的存储空间内,该F个节点可以称为一个节点块,如图1所示,一个节点区内可以有多个节点块。在任一节点区中,可以按从右到左的顺序对节点块进行编号,该编号可以称为节点块的row地址。任意一个节点块的存储地址对应一个节点块的row地址。
由于网络设备的增删等原因使得网络拓扑结构发生变化从而需要修改FIB表中的Key和其对应的AD时,需要读写每一节点区的节点并返回响应。其中,Key和AD之间存在一种维护操作序列:当待修改的Key和其对应的AD不在同一节点区时,网络设备的中央处理器(CentralProcessing Unit,CPU)先向NP发送一个用于修改AD的带标志的写AD请求,例如带Post标志的写AD请求,再发送一个用于修改Key的不带Post标志的写Key请求,Post标志可以用于指示写AD请求在读写完节点区(n-1)后暂不读写节点区n,而在返回写AD请求的响应以通知NP已读写完节点区(n-1)后,暂时保存该写AD请求,以等待写Key请求执行完修改Key的操作,并读写完节点区(n-1)且返回写Key请求的响应以通知NP已读写完节点区(n-1)后,才触发写AD请求执行修改节点区n中的AD,从而使得修改Key和修改AD在写Key请求读写Btree的流程中均被执行。
通常,由于片外存储器处理速度慢,单次查找FIB表的周期长,因而可以通过在NP与片外存储器之间增加高速缓存器Cache,来解决片外存储器处理速度慢的问题。
增加Cache后,在读写片外任一节点区时,网络设备的CPU发送的命令需要通过Cache发送到片外存储器。Cache中有多个先进先出的消息队列,针对同一节点块的row地址对应的节点进行操作的命令存放于同一消息队列中,不同消息队列中的命令根据调度机制进行轮流调度并返回响应至NP的处理器,以通知NP的处理器已读写完当前节点区。其中,同一节点块的row地址对应的命令是指,该命令是针对该row地址对应的节点块中的节点的命令。当待修改的Key和其对应的AD不在同一节点区,Key所在的节点块的row地址和AD所在的节点块的row地址不同时,写Key请求和写AD请求不在同一消息队列。若对写Key请求所在的消息队列的调度先于写AD请求所在的消息队列,则可能出现写Key请求读写完当前节点区后的响应先于写AD请求读写完当前节点区后的响应返回,当然也可能出现写Key请求读写完节点区(n-1)后的响应先于写AD请求读写完节点区(n-1)后的响应返回,因而无法通过写Key请求在读写完节点区(n-1)后返回的响应触发写AD请求对节点区n中的AD进行修改,则修改Key和修改AD不能在写Key请求读写Btree的流程中同时被执行,从而使得时间上在写Key请求之后发送的路由查找请求查找到的是修改后的Key和修改前的AD,即在Key和其对应的AD不能同步修改的情况下,使得路由查找结果中的Key和AD不匹配,导致路由查找结果出错,从而引起数据包转发出错。
发明内容
本发明的实施例提供一种转发信息表的读写方法及网络处理器,能够解决现有技术中发送到Cache的命令不能顺序返回响应,使得非叶子节点和对应的叶子节点不能同步修改而导致的路由查找出错的问题。
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,提供一种转发信息表的读写方法,所述转发信息表FIB为二叉查找树Btree结构,包括非叶子节点和叶子节点,所述非叶子节点用于存储关键字Key,所述叶子节点用于存储所述Key对应的相关数据AD,所述FIB的存储位置包括片内存储器和片外存储器,所述片外存储器存储有序号为0至n的n+1个节点区,每个节点区包括k层节点,n为大于或等于0的整数,k为正整数,每个节点区中同一存储地址对应的节点为一个节点块,其特征在于,所述方法包括:
网络处理器NP接收其所在的网络设备的中央处理器CPU发送的用于修改所述AD的写AD请求,和用于修改所述AD对应的Key的写Key请求,所述写AD请求中携带有所述AD所在的节点块的row地址,所述写Key请求中携带有所述Key所在的节点块的row地址,所述Key所在的节点块的row地址与所述AD所在的节点块的row地址不在同一节点区;
在将要读写任一节点区时,在所述写AD请求和所述写Key请求经过缓存器之前,当待读写的所述任一节点区包括所述Key时,将所述写AD请求中的row地址变换为与所述Key所在的节点块的row地址相同的同一row地址;当待读写的所述任一节点区不包括所述Key时,将所述写AD请求中的row地址和所述写Key请求中的row地址变换为所述任一节点区中的同一row地址,进而根据所述同一row地址读写所述任一节点区。
结合第一方面,在第一方面的第一种可能实现的方式中,在将要读写序号为m的任一节点区时,m大于或等于0且小于或等于n,所述当待读写的所述任一节点区不包括所述Key时,将所述写AD请求中的row地址和所述写Key请求中的row地址变换为所述任一节点区中的同一row地址包括:
所述NP将所述写AD请求中AD所在的节点块的row地址右移k*(n-m)位,得到右移后所述写AD请求中的row地址,并将所述AD所在的节点块的row地址的后k*(n-m)位存储在寄存器中;
所述NP将所述写Key请求中的row地址替换为右移后所述写AD请求中的row地址,并将替换前所述写Key请求中Key所在的节点块的row地址保存在所述寄存器中。
结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第二种可能实现的方式中,所述方法还包括:
当读写完所述任一节点区并返回所述写AD请求的AD响应和所述写Key请求的Key响应时,所述NP恢复变换后所述写AD请求中的row地址和所述写Key请求中的row地址,以便于根据变换前的所述row地址再将所述写AD请求中的row地址和所述写Key请求中的row地址变换为下一节点区中的同一row地址。
结合第一方面的第二种可能的实现方式,在第一方面的第三种可能实现的方式中,所述NP恢复变换后所述写AD请求中的row地址和所述写Key请求中的row地址,包括:
所述NP读取所述寄存器中存储的右移时所述AD所在的节点块的row地址的后k*(n-m)位,根据所述AD所在的节点块的row地址的后k*(n-m)位将所述右移后的所述写AD请求中的row地址恢复为右移前所述AD所在的节点块的row地址;
所述NP读取所述寄存器中存储的替换前所述Key所在的节点块的row地址,根据替换前所述Key所在的节点块的row地址将替换后所述写Key请求中的row地址恢复为替换前所述Key所在的节点块的row地址。
结合第一方面的第二种可能的实现方式,在第一方面的第四种可能实现的方式中,所述方法还包括:
若待读写的节点区中包括所述Key时,则所述NP在读写至所述Key所在的节点块的row地址时执行所述写Key请求,以修改所述Key;
若返回读写所述序号为n-1的节点区的响应并恢复变换后所述写AD请求中的row地址为变换前的AD所在的节点块的row地址,则所述NP在返回所述Key响应时触发执行所述写AD请求,以修改所述序号为n的节点区中的所述AD。
第二方面,提供一种网络处理器,所述网络处理器中的转发信息表FIB为二叉查找树Btree结构,包括非叶子节点和叶子节点,所述非叶子节点用于存储关键字Key,所述叶子节点用于存储所述Key对应的相关数据AD,所述FIB的存储位置包括片内存储器和片外存储器,所述片外存储器存储有序号为0至n的n+1个节点区,每个节点区包括k层节点,n为大于或等于0的整数,k为正整数,每个节点区中同一存储地址对应的节点为一个节点块,其特征在于,包括:
接收单元,用于当所述Key所在的节点块的row地址和所述AD所在的节点块的row地址不在同一节点区时,接收所述网络处理器所在的网络设备的中央处理器CPU发送的用于修改所述AD的写AD请求,和用于修改所述AD对应的Key的写Key请求,所述写AD请求中携带有所述AD所在的节点块的row地址,所述写Key请求中携带有所述Key所在的节点块的row地址,所述Key所在的节点块的row地址与所述AD所在的节点块的row地址不在同一节点区;
变换单元,用于在将要读写任一节点区时,在所述写AD请求和所述写Key请求经过缓存器之前,当待读写的所述任一节点区包括所述Key时,将所述写AD请求中的row地址变换为与所述Key所在的节点块的row地址相同的同一row地址;当待读写的所述任一节点区不包括所述Key时,将所述写AD请求中的row地址和所述写Key请求中的row地址变换为所述任一节点区中的同一row地址,进而根据所述同一row地址读写所述任一节点区。
结合第二方面,在第二方面的第一种可能实现的方式中,所述变换单元具体用于,将所述写AD请求中AD所在的节点块的row地址右移k*(n-m)位,得到右移后所述写AD请求中的row地址;将所述写Key请求中的row地址替换为右移后所述写AD请求中的row地址;
还包括存储单元,用于在所述变换单元将所述写AD请求中AD所在的节点块的row地址右移k*(n-m)位,得到右移后所述写AD请求中的row地址后,存储所述AD所在的节点块的row地址的后k*(n-m)位;
在所述变换单元将所述写Key请求中的row地址替换为右移后所述写AD请求中的row地址后,存储替换前所述写Key请求中Key所在的节点块的row地址。
结合第二方面或第二方面的第一种可能的实现方式,在第二方面的第二种可能实现的方式中,还包括:
恢复单元,用于当读写完所述任一节点区并返回所述写AD请求的AD响应和所述写Key请求的Key响应时,恢复变换后所述写AD请求中的row地址和所述写Key请求中的row地址,以便于根据变换前的所述row地址再将所述写AD请求中的row地址和所述写Key请求中的row地址变换为下一节点区中的同一row地址。
结合第二方面的第二种可能的实现方式,在第二方面的第三种可能实现的方式中,所述恢复单元具体用于:
读取所述存储单元中存储的右移时所述AD所在的节点块的row地址的后k*(n-m)位,根据所述AD所在的节点块的row地址的后k*(n-m)位将所述右移后的所述写AD请求中的row地址恢复为右移前所述AD所在的节点块的row地址;
读取所述存储单元中存储的替换前所述Key所在的节点块的row地址,根据替换前所述Key所在的节点块的row地址将替换后所述写Key请求中的row地址恢复为替换前所述Key所在的节点块的row地址。
结合第二方面的第二种可能的实现方式,在第二方面的第四种可能实现的方式中,还包括:
修改单元,用于若待读写的节点区中包括所述Key时,则在读写至所述Key所在的节点块的row地址时执行所述写Key请求,以修改所述Key;
若返回读写所述序号为n-1的节点区的响应并恢复变换后所述写AD请求中的row地址为变换前的AD所在的节点块的row地址,则在返回所述Key响应时触发执行所述写AD请求,以修改所述序号为n的节点区中的所述AD。
本发明实施例提供一种转发信息表的读写方法及网络处理器,在待修改的Key所在的节点块的row地址及其对应的AD所在的节点块的row地址不在同一节点区的情况下,在将要读写任一节点区时,在写AD请求和写Key请求经过缓存器之前,当待读写的任一节点区包括Key时,将写AD请求中的row地址变换为与Key所在的节点块的row地址相同的同一row地址;当待读写的任一节点区不包括Key时,将写AD请求中的row地址和写Key请求中的row地址变换为任一节点区中的同一row地址,进而根据同一row地址读写任一节点区。这样可以保证顺序发送到Cache中的写AD请求和写Key请求能够保存在同一row地址对应的队列中,从而能够顺序调度并返回响应,使得写Key请求在读写节点区(n-1)时的响应不会先于写AD请求在读写节点区(n-1)时的响应返回,从而使得写AD请求的响应返回后可以等待写Key请求的响应返回,以便被写Key请求的响应触发以修改节点区n中的AD,因而可以使得写AD请求能够在写Key请求读写Btree的流程中被执行,从而保证了非叶子节点的Key和对应叶子节点的AD能够同步修改,避免了现有技术中由于发送到Cache的命令不能顺序返回响应,使得非叶子节点和对应的叶子节点不能同步修改而导致的路由查找出错的问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中采用Btree结构的转发信息表的结构图;
图2为本发明实施例提供的一种转发信息表的读写方法流程图;
图3为本发明另一实施例提供的一种转发信息表的读写方法流程图;
图4为本发明实施例提供的一种采用Btree结构的转发信息表的结构图;
图5为本发明另一实施例提供的一种转发信息表的读写方法流程图;
图6为本发明另一实施例提供的一种转发信息表的读写方法流程图;
图7为本发明实施例提供的一种网络处理器的结构图;
图8为本发明实施例提供的另一种网络处理器的结构图;
图9为本发明实施例提供的另一种网络处理器的结构图;
图10为本发明实施例提供的另一种网络处理器的结构图;
图11为本发明实施例提供的一种网络设备的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,在采用Btree结构的FIB表中,Btree中一个父节点存在左、右两个子节点,节点可以为空或非空,每一个非空节点对应一个FIB表项,用于存储路由相关信息,例如可以存储IP地址。Btree结构中将节点分为多个层,在每一层中可以按从右到左的顺序对节点进行编号,该编号可以称为节点的节点地址。k个层的节点可以归为一个节点区,这里的k为正整数,不同节点区中包含的层数k可以相同也可以不同,例如任一节点区内可以包括2层节点,可以包括3层节点,本发明实施例对任一节点区内具体包括几层节点不做限定。在任一节点区内,其中的F个节点存储于同一存储地址对应的存储空间内,该F个节点可以称为一个节点块。节点块仍保持Btree中节点的父子关系,即一个父节点块也可以存在左、右两个子节点块,在任一节点区中按从右到左的顺序对节点块的存储地址进行编号,该编号可以称为节点块的row地址,例如节点块的row地址可以以二进制形式表示为00000000、00000001或00000010等,当然,节点块的row地址不限定以8bit的二进制数来表示,这里对具体的bit数量及其表示形式不做限定。其中,当k为1时,Btree中的一个节点区对应一个层。
举例来说,假设片外存储器中每个存储地址对应的存储空间可以存储256bit数据,则以32位的IP地址来说,该256bit可以包含2层中的6个节点,例如图1中片内节点区(片内存储器中存储的节点区)中的节点块所示;或可以包含3层中的7个节点,例如图1中片外节点区(片外存储器中存储的节点区)中的节点块所示。若该256bit包含3层中的7个节点,则这7个节点实际上只使用了一个外部存储器的地址,对应一个节点块的row地址,且该节点块的row地址与这3层中的最上层节点的节点地址一致。具体来说,若一个节点块包含上述3层中的7个节点,那么位于该节点块的第1层有1个节点,第2层有2个节点,第3层有4个节点,第1层节点的节点地址与该节点块的row地址一致。
在基于范围的FIB查找引擎中,FIB表项中的IP地址以数值形式存放在节点中,父节点与左、右两个子节点之间存在严格的数值大小关系。Btree结构中除最后一层节点以外的其它层的节点可以称为非叶子节点,用于存储Key;最后一层的节点可以称为叶子节点,用于存储与非叶子节点对应的AD;Key和其对应的AD存在祖孙关系或父子关系。其中,非叶子节点中存储的是IP地址,叶子节点中存储的相关数据是数据包进行转发时需要的端口信息或者下一跳IP地址。举例来说,在进行路由查找时,通过将数据包中的目的IP地址对应的数值与Btree根节点中的IP地址对应的数值进行比较,从而确定下一子节点,这样依次查找Btree的每一个节点区,直至查找到最后一个节点区中的叶子节点,从而查找到转发数据包的下一跳IP地址或端口号等。
通信系统中的路由器、交换机或网桥等网络设备,可以包括网络设备的CPU和网络处理器NP。NP是一种可编程器件,可以通过路由查找命令,并根据其存储的FIB表进行路由查找。FIB表是IP路由表中包含的转发信息的镜像,可以为网桥、交换机或路由器等网络设备提供将数据包转发至转发至目的地址的信息表。当网络中的路由或拓扑结构发生变化时,IP路由表就被更新,而这些变化也反映在FIB中。网络设备的CPU可以根据网络中的路由或拓扑结构的变化,及时控制NP更新FIB表。
本发明实施例提供一种转发信息表的读写方法,该转发信息表FIB为Btree结构,包括非叶子节点和叶子节点,非叶子节点用于存储关键字Key,叶子节点用于存储Key对应的相关数据AD,FIB存储于片内存储器和片外存储器,片外存储器存储有序号为0至n的n+1个节点区,每个节点区包括k层节点,n为大于或等于0的整数,k为正整数,每个节点区中同一存储地址对应的节点为一个节点块,参见图2,该方法的主要步骤可以包括:
201、网络处理器NP接收其所在的网络设备的中央处理器CPU发送的用于修改AD的写AD请求,和用于修改AD对应的Key的写Key请求,写AD请求中携带有AD所在的节点块的row地址,写Key请求中携带有Key所在的节点块的row地址,Key所在的节点块的row地址与AD所在的节点块的row地址不在同一节点区。
202、在将要读写任一节点区时,在写AD请求和写Key请求经过缓存器之前,当待读写的任一节点区包括Key时,NP将写AD请求中的row地址变换为与Key所在的节点块的row地址相同的同一row地址;当待读写的任一节点区不包括Key时,NP将写AD请求中的row地址和写Key请求中的row地址变换为任一节点区中的同一row地址,进而根据同一row地址读写任一节点区。
由于叶子节点的AD位于Btree的最后一层,因而位于Btree的最后一个节点区,当非叶子节点的Key和其对应的叶子节点的AD在同一节点区,即NP的片外存储器中的最后一个节点区,也就是节点区n时,由于同一节点区中的Key和其对应的AD存在祖孙关系或父子关系,因而Key和其对应的AD对应同一节点块的存储地址,从而拥有同一节点区的同一row地址。其中,节点块的row地址可以理解为节点块对应的存储地址的编号,每个节点块的存储地址可以通过该节点块的row地址计算得到。此时,网络设备的CPU可以向NP发送一条读写请求,指示NP修改该片外节点区n中同一row地址中的Key及其对应的AD。该读写请求从Btree的根节点开始读写,依次读写片上及片外的每一个节点区,当读写至片外节点区n时,修改该节点区中的Key及其对应的AD。
在写AD请求和写Key请求读写完片上节点区之后,当读写片外节点区时,NP中的检测电路可以根据写AD请求或写Key请求中的层号确定待修改的AD或Key是否存在于待读写的节点区中,若确定是,则执行写AD请求或写Key请求,对相应的AD或Key进行修改,并返回写AD请求的响应或写Key请求的响应至NP的处理器中,以便于NP的处理器将写AD请求或写Key请求发送至下一个节点区的检测电路中进行检测;若确定不是,则返回写AD请求的响应或写Key请求的响应至NP的处理器中,以便于NP的处理器将写AD请求或写Key请求发送至下一个节点区的检测电路中进行检测,从而继续读写下一个节点区。
当Key所在的节点块的row地址和AD所在的节点块的row地址不在同一节点区时,在步骤201中,NP通过接收网络设备的CPU先后发送的带标志的写AD请求例如带Post标志的写AD请求和不带Post标志的写Key请求,这两个请求从Btree的根节点开始,依次读写片上及片外的每一个节点区。当待读写的节点区包括待修改的Key时,执行写Key请求以修改相应的Key,当待读写的节点区包括待修改的AD时,执行写AD请求以修改相应的AD。
在读写完片上节点区之后,写AD请求和写Key请求可以通过高速缓存器Cache发送至NP的片外存储器,以便读写片外存储器中的节点区。在读写完片外节点区0至节点区(n-1)中的任一节点区之后,Cache向NP的处理器返回写AD请求的响应和写Key请求的响应,通知NP的处理器已读写完当前节点区,以便于NP的处理器将写AD请求和写Key请求发送至下一节点区进行读写,其中,可以将写AD请求携带在该写AD请求的响应中返回,和将写Key请求携带在该写Key请求的响应中返回。在读写完片外最后一个节点区n之后,Cache向NP的处理器和网络设备的CPU返回写AD请求的响应和写Key请求的响应,以通知已经完成修改AD和修改Key的操作。在待读写片外任一节点区,写AD请求中的row地址和写Key请求中的row地址不是同一节点区的同一row地址时,Cache的调度机制使得顺序发送至Cache的命令可能不会顺序返回响应,因而可能会使得写Key请求的响应先于写AD请求的响应返回NP,从而在写Key请求的响应返回时不能触发写AD请求修改相应的AD。
因此,在步骤202中,在待读写片外节点区0至节点区n时,当待读写的任一节点区包括Key时,本发明实施例将写AD请求中的row地址变换为与Key所在的节点块的row地址相同的同一row地址;当待读写的任一节点区不包括Key时,本发明实施例将写AD请求中的row地址和写Key请求中的row地址变换为任一节点区中的同一row地址,进而根据同一row地址读写任一节点区。这样以来,在任一节点区中,对于变换为同一row地址的写AD请求和写Key请求来说,先发送的写AD请求能够先返回响应,后发送的写Key请求能够后返回响应,因而可以保证写AD请求的响应在节点区(n-1)能够先于写Key请求的响应返回,从而使得写Key请求返回响应后能够触发写AD请求修改节点区n中相应的AD,可以使得写AD请求能够在写Key请求读写Btree的流程中被执行,从而保证了Key和其对应的AD能够同步修改。
本发明实施例提供一种转发信息表的读写方法,在待修改的Key所在的节点块的row地址及其对应的AD所在的节点块的row地址不在同一节点区的情况下,在将要读写任一节点区时,在写AD请求和写Key请求经过缓存器之前,当待读写的任一节点区包括Key时,将写AD请求中的row地址变换为与Key所在的节点块的row地址相同的同一row地址;当待读写的任一节点区不包括Key时,将写AD请求中的row地址和写Key请求中的row地址变换为任一节点区中的同一row地址,进而根据同一row地址读写任一节点区。这样可以保证顺序发送到Cache中的写AD请求和写Key请求能够保存在同一row地址对应的队列中,从而能够顺序调度并返回响应,使得写Key请求在读写节点区(n-1)时的响应不会先于写AD请求在读写节点区(n-1)时的响应返回,从而使得写AD请求的响应返回后可以等待写Key请求的响应返回,以便被写Key请求的响应触发以修改节点区n中的AD,因而可以使得写AD请求能够在写Key请求读写Btree的流程中被执行,从而保证了非叶子节点的Key和对应叶子节点的AD能够同步修改,避免了现有技术中由于发送到Cache的命令不能顺序返回响应,使得非叶子节点和对应的叶子节点不能同步修改而导致的路由查找出错的问题。
参见图3,本发明实施例提供一种转发信息表的读写方法,该转发信息表FIB为Btree结构,其具体结构可以参见上述实施例,其中,当Key所在的节点块的row地址和AD所在的节点块的row地址不在同一节点区时,本发明实施例提供的方法可以包括:
301、网络处理器NP接收其所在的网络设备的中央处理器CPU发送的用于修改Key所对应的AD的写AD请求,和用于修改AD对应的Key的写Key请求。
其中,由于FIB表可以为网桥、交换机或路由器等网络设备提供将数据包转发至目的地址所需的下一跳IP地址或端口号等信息,当网络中的路由或拓扑结构发生了变化时,网络设备中的CPU可以及时控制NP修改FIB表,而FIB表项是以Btree中节点的形式存储的,因而修改FIB表即为修改FIB表项对应的节点。又由于FIB中,非叶子节点的Key与叶子节点的AD对应,因而修改节点时需要同步修改Key及与其对应的AD,否则可能导致在进行路由查找时,根据修改后的Key中新的IP地址,查找到的是修改前的AD中包含的修改前的Key中原IP地址对应的下一跳IP地址或端口号,从而导致路由查找出错,导致网络设备转发数据包出错。
当Key所在的节点块的row地址和AD所在的节点块的row地址不在同一节点区时,为了使得在对Key及其相应的AD进行修改时不影响路由查找请求,避免路由查找请求查找到的Key和AD不对应,在步骤301中,网络设备的CPU通过发送一个维护操作序列,对位于不同节点区的Key及其对应的AD进行修改。该维护操作序列可以包括:网络设备的CPU向NP先发送一个用于修改AD的带标志的写AD请求例如带Post标志的写AD请求,而后向NP发送用于修改AD对应的Key的不带Post标志的写Key请求。其中,写AD请求中的Post标志可以用于指示写AD请求在读写完节点区(n-1)后暂不读写节点区n,而在返回写AD请求的响应以通知NP已读写完节点区(n-1)后,暂时保存该写AD请求,以等待写Key请求执行完修改Key的操作,并读写完节点区(n-1)且返回写Key请求的响应以通知NP已读写完节点区(n-1)后,才触发写AD请求执行修改节点区n中的AD,以修改片外节点区n中的AD,这样可以保证对Key及其对应AD进行同步修改,不影响路由查找结果。具体的,写AD请求中携带有待修改的AD所在的节点块的row地址,以及待修改的AD所在的层号、待修改的AD所在的节点块修改后的数据等信息;写Key请求中携带有待修改的Key所在的节点块的row地址,以及待修改的Key所在的层号、待修改的Key所在的节点块修改后的数据等信息。其中,根据写AD请求和写Key请求中的row地址和层号可以确定待修改的AD或Key所处的节点区以及具体所处的节点块。待修改的AD或Key所在的节点块修改后的数据中包括Key所在的节点块中F个节点的数据,可以用于对待修改的AD或待修改的Key所在的整个节点块进行修改替换,以对待修改的AD或Key进行修改。其中,除待修改的AD或Key所在节点中的数据为修改后的数据外,其它F-1个节点中的数据仍为原数据。
302、NP读写片上存储器中存储的节点区。
在步骤301之后,NP控制写AD请求和写Key请求从根节点开始依次读写片上存储器的节点区(即片上存储器中存储的节点区)和片外存储器的节点区(即片外存储器中存储的节点区),直至片外存储器中最后一个节点区n,并在读写完任一节点区后返回响应至NP中的处理器。
由于写AD请求中待修改的AD在片外最后一个节点区,因而在读写片上节点区的过程中,写AD请求均不执行。在写Key请求读写片上任一节点区之前,NP中的检测电路可以根据写Key请求中的层号确定待修改的Key是否存在于待读写的节点区中,若确定是,则执行写Key请求,对相应的Key进行修改,若确定不是,则继续读写下一个节点区。
在写AD请求和写Key请求读写完片上存储器中存储的节点区之后,当读写片外节点区时,NP中与每个片外节点区对应的检测电路,可以根据写AD请求或写Key请求中的层号确定待修改的AD或Key是否存在于待读写的节点区中,若确定是,则执行写AD请求或写Key请求,对相应的AD或Key进行修改;若确定不是,则返回写AD请求的响应或写Key请求的响应至NP的处理器,以便于NP的处理器将写AD请求或写Key请求发送至下一个节点区,从而继续读写下一个节点区。以下描述中的序号为0至n的节点区,若未标明是片上或片外则表示片外节点区。
303、在将要读写任一节点区时,在写AD请求和写Key请求经过缓存器之前,当待读写的任一节点区包括Key时,NP将写AD请求中的row地址变换为与Key所在的节点块的row地址相同的同一row地址;当待读写的任一节点区不包括Key时,NP将写AD请求中的row地址和写Key请求中的row地址变换为任一节点区中的同一row地址,进而根据同一row地址读写任一节点区。
网络设备的CPU发送给NP的写AD请求和写Key请求,可以通过高速缓存器Cache发送至片外存储器中的节点区。Cache中存在多个先进先出的消息队列,针对同一节点块的row地址对应的节点进行操作的命令存放于同一消息队列中。当读写片外任一节点区时,发送到Cache中的命令根据不同的row地址存储在不同的消息队列中,各消息队列中的命令根据Cache的调度机制轮流调度并返回响应至NP的处理器。
示例性的,若当前时钟周期内待读写片外任一节点区的写AD请求存放于Cache的消息队列0中,之后发送的写Key请求存放于消息队列5中,在写Key请求之后发送的路由查找命令存放于消息队列6中,此外还有消息队列1、2、3、4、7、8、9等。若在该时钟周期内,根据Cache的调度机制将要调度消息队列3中的命令,第二个时钟周期将要调度消息队列4中的命令,第三个时钟周期将要调度消息队列5中的写Key请求命令,第四个时钟周期将要调度消息队列6中的路由查找命令,并在第五至第七个时钟周期依次轮流调度完消息队列7、8、9中的命令后,才能在第八个时钟周期调度消息队列0中的写AD请求。可见,先发送至Cache的写AD请求可能会被后调度,后发送至Cache的写Key请求可能会被先调度,写Key请求的响应也相应地先于写AD请求的响应返回NP的处理器。因而,当读写完节点区(n-1)后,若写AD请求的响应后于写Key请求的响应返回NP的处理器,则不能被写Key请求的响应触发,从而修改节点区n中相应的AD。此时,路由查找命令查找到的是修改后的Key和修改前的AD,即Key和AD不能同步修改,从而使得路由查找到的Key的IP地址和AD中的下一跳IP地址或端口号不匹配,导致路由查找出错,从而引起数据包转发出错。
也就是说,对于发送至同一节点区的不同row地址的命令来说,Cache的调度机制使得顺序发送至Cache的命令可能不会顺序返回响应。而由于每一row地址对应的消息队列为先进先出消息队列,因而当Cache调度至该消息队列时,先发送到该消息队列的命令先被调度,即对于发送至同一节点区的同一row地址的命令来说,顺序发送至Cache的命令顺序返回响应至NP的处理器。
因而,在步骤303中,当将要读写序号为0至n中任一节点区时,在写AD请求和写Key请求经过缓存器之前,当待读写的任一节点区包括Key时,可以将写AD请求中的row地址变换为与Key所在的节点块的row地址相同的同一row地址;当待读写的任一节点区不包括Key时,可以将写AD请求中的row地址和写Key请求中的row地址变换为任一节点区中的同一row地址,进而根据同一row地址读写任一节点区。这样以来,在任一节点区中,对于变换为同一row地址的写AD请求和写Key请求来说,先发送的写AD请求能够先返回响应,后发送的写Key请求能够后返回响应,因而可以保证在读写完节点区(n-1)后,写AD请求的响应能够先于写Key请求的响应返回,从而可以将写AD请求的响应中携带的写AD请求暂时保存起来,以等待被后返回的写Key请求的响应触发,从而修改节点区n中相应的AD。因而,可以使得写AD请求能够在写Key请求读写Btree的流程中被执行,从而保证了Key和对应的AD能够同步修改,因而可以避免现有技术中发送到Cache的命令不能顺序返回响应,使得非叶子节点和对应的叶子节点不能同步修改而导致的路由查找出错的问题。
需要说明的是,当Key所在的节点块的row地址和AD所在的节点块的row地址不在同一节点区时,即当Key所在的节点块的row地址不在节点区n的情况下,由于在待读写节点区n时,写Key请求已经完成了修改相应Key以及触发写AD执行的操作,因而不需要再保证写AD请求和写Key请求顺序返回响应,因此,在读写节点区n时也可以不对写Key请求中的row地址进行变换,写Key请求中为任何row地址均没有影响。
其中,当待读写的节点区包括待修改的Key时,由于需要根据Key所在的节点块的row地址修改相应的Key,因而写Key请求中的row地址不能发生改变。此时,若要将写AD请求中的row地址和写Key请求中的row地址变换为同一row地址,则可以将写AD请求中的row地址变换为与Key所在的节点块的row地址相同的row地址。
当待读写的节点区包括待修改的AD时,即待读写节点区n时,由于需要根据AD所在的节点块的row地址修改相应的AD,因而写AD请求中的row地址不能发生改变。此时,若要将写Key请求中的row地址和写AD请求中的row地址变换为同一row地址,则可以将写Key请求中的row地址变换为与AD所在的节点块的row地址相同的row地址。
具体在实现步骤303时,若片外不同节点区中包含的节点层数k相同,在将要读写序号为m的任一节点区时,m大于或等于0且小于或等于n,当待读写的任一节点区不包括Key时,将写AD请求中的row地址和写Key请求中的row地址变换为任一节点区中的同一row地址的一种可实现的方式为:
NP将写AD请求中AD所在的节点块的row地址右移k*(n-m)位,得到右移后写AD请求中的row地址,并将AD所在的节点块的row地址的后k*(n-m)位存储在寄存器中;
NP将写Key请求中的row地址替换为右移后写AD请求中的row地址,并将替换前写Key请求中Key所在的节点块的row地址存储在寄存器中。
具体的,假设一层为一个节点区,由于对位于Btree中第p层的节点来说,在第p+1层有2个子节点和与2个子节点对应的row地址,该p+1层节点的row地址右移1位即为第p层父节点的row地址;在第p+2层有22个子孙节点和与22个子孙节点对应的row地址,该p+2层节点的row地址右移1位即为第p+1层父节点的row地址,该p+2层节点的row地址右移2位即为第p层祖先节点的row地址;在与第p层相隔q层的第p+q层,共有2q个子孙节点和与2q个子孙节点对应的row地址,该p+q层节点的row地址右移q位即为第p层祖先节点的row地址。同理,对于位于Btree中片外任一节点区的节点块来说,若片外不同节点区中包含的节点层数k相同,即每个节点块包含有2k-1个节点,则对位于第m个节点区的节点块来说,在第m+q个节点区中有2q个子孙节点块和与2q个子孙节点块对应的row地址,将该节点区中节点块的row地址右移k*q位即为第m层祖先节点块的row地址。
因而,当待读写的任一节点区不包括Key时,在将写AD请求中的row地址和写Key请求中的row地址变换为任一节点区中的同一row地址时,在NP读写至序号为m的任一节点区之前,可以将写AD请求中AD所在的节点块的row地址右移k*(n-m)位,此时AD请求中的row地址变换为位于节点区m的AD所在节点块的祖先节点块的row地址。同时,可以将AD所在的节点块的row地址的后k*(n-m)位存储在寄存器中,以便于根据寄存器中存储的AD所在的节点块的row地址恢复写AD请求中的row地址。当然,NP也可以将右移前AD所在的完整的row地址存储在寄存器中,本发明实施例不做限定。
需要说明的是,若片外不同节点区中包含的节点层数k不同,则在待读写节点区m时,可以根据节点区n中最上层节点的层数与节点区m(m小于n)中最上层节点的层数之间的间隔d,将写AD请求中AD所在row地址右移d位,从而得到右移后写AD请求中的row地址,即为节点区m中AD的祖先节点块所在的节点块的row地址。
进而,在将AD所在的节点块的row地址的后k*(n-m)位存储在寄存器中之后,可以将写Key请求中的row地址替换为右移后写AD请求中的row地址,从而将写AD请求中的row地址和写Key请求中的row地址变换为同一节点区中的同一row地址。而后,可以将替换前写Key请求中Key所在的节点块的row地址存储在寄存器中,以便于根据寄存器中存储的Key所在的节点块的row地址恢复写Key请求中的row地址。
此外,由于待修改的Key所在的节点与AD所在的节点对应,在进行路由查找时若命中Key所在的节点,则根据Btree中Key与AD的对应关系一定能命中AD所在的节点从而找到下一跳出口,即Key所在的节点一定是AD所在节点的祖先节点或父亲节点,Key所在的节点块与AD所在的节点块存在祖孙关系或父子关系,因而,通过将写AD请求中AD所在的节点块的row地址右移k*(n-m)位,得到的节点区m中的row地址对应的节点块,是AD所在节点块的祖先节点块或父亲节点快,也是Key所在节点块的祖先节点块或父亲节点块。也就是说,节点区m中与Key所在节点块存在祖孙关系或父子关系的节点块,和节点区m中与AD所在节点块存在祖孙关系或父子关系的节点块,为同一节点块,因而其row地址也为同一row地址。
当然,通过将AD所在的节点块的row地址右移得到右移后的写AD请求的row地址,并将右移后的row地址替换写Key请求中的row地址,只是将写AD请求中的row地址和写Key请求中的row地址变换为同一节点区中的同一row地址的其中一种方法,也可以通过指定节点区中某一row地址,将写AD请求和写Key请求中的row地址均变换为该指定的row地址,还可以采用其它的row地址变换方法,本发明实施例不做限定。
需要说明的是,在将要读写序号为m的任一节点区时,在写AD请求和写Key请求经过缓存器之前,当待读写的任一节点区包括Key时,也可以采用将写AD请求中AD所在的节点块的row地址右移k*(n-m)位的方法,得到右移后写AD请求中的row地址,并将AD所在的节点块的row地址的后k*(n-m)位存储在寄存器中,以便恢复为变换前的row地址。此时,右移后写AD请求中的row地址,为与写Key请求的row地址相同的同一row地址。此外,还可以通过将写AD请求中的row地址直接替换为Key所在的节点块的row地址,从而实现将写AD请求中的row地址与写Key请求中的row地址变换为同一row地址。本发明实施例对具体变换方法不做限定。
304、当读写完片外存储器中存储的任一节点区并返回写AD请求的AD响应和写Key请求的Key响应时,NP恢复变换后写AD请求中的row地址和写Key请求中的row地址,以便于根据变换前的row地址再将写AD请求中的row地址和写Key请求中的row地址变换为下一节点区中的同一row地址。
具体的,由于片外存储器存在n个节点区,需要保证写AD请求和写Key请求在节点区0至节点区(n-1)的任一节点区都能顺序返回响应,才能保证写AD请求的响应在读写节点区(n-1)时能够先于写Key请求的响应返回,从而保证写Key请求在节点区(n-1)返回响应后能够触发写AD请求修改节点区n中相应的AD。因而,为了便于下一节点区中再将写AD请求中的row地址和写Key请求中的row地址变换为同一row地址,在读写完当前节点区并通过返回写AD请求的AD响应和写Key请求的Key响应后,可以将变换后的写AD请求中的row地址恢复为变换前AD实际所在的节点块的row地址,将变换后的写Key请求中的row地址恢复为变换前Key实际所在的节点块的row地址。
可选地,NP恢复变换后写AD请求中的row地址和写Key请求中的row地址可以包括:NP读取寄存器中存储的右移时AD所在的节点块的row地址的后k*(n-m)位,根据AD所在的节点块的row地址的后k*(n-m)位将右移后的写AD请求中的row地址恢复为右移前AD所在的节点块的row地址,而后,NP读取寄存器中存储的替换前Key所在的节点块的row地址,根据替换前Key所在的节点块的row地址将替换后写Key请求中的row地址恢复为替换前Key所在的节点块的row地址。
也即,NP可以将寄存器中存储的AD所在的节点块的row地址的后k*(n-m)位移回,使写AD请求中的row地址恢复为右移前AD所在的节点块的row地址;而后将替换后写Key请求中的row地址替换回寄存器中存储的替换前Key所在的节点块的row地址,使写Key请求中的row地址恢复为替换前Key所在的节点块的row地址。
当然,NP也可以根据寄存器中存储的右移前AD所在的完整的row地址进行替换,从而恢复写AD请求中的row地址。
此外,由于节点区n为AD所在的片外最后一个节点区,因而待读写节点区n时写AD请求中的row地址没有进行变换,当读写完节点区n并返回写AD请求的AD响应后,不需要进行row地址恢复;待读写节点区n时,写Key请求中的row地址可以变换成与AD所在的节点块的row地址相同的row地址,当读写完节点区n并返回写AD请求的AD响应和写Key请求的Key响应后,已经完成对Key及其对应AD的修改,因而不需要再恢复变换后写Key请求中的row地址。
另外,在执行上述步骤303的过程中,若待读写的节点区中包括Key时,则NP在读写至Key所在的节点块的row地址时执行写Key请求,以修改Key;若返回读写序号为n-1的节点区的响应并恢复变换后写AD请求中的row地址为变换前的AD所在的节点块的row地址,则NP在返回Key响应时触发执行写AD请求,以修改序号为n的节点区中的AD。
具体的,可以在待读写片外节点区0之前,在写AD请求和写Key请求中设置一个旁路(Bypass)标志。在读写至序号为0至n的任一节点区时,NP中与每个片外节点区对应的检测电路可以在写Key请求中的row地址变换之前,依据写Key请求中Key所在的层号,确定待读写的节点区中是否包括Key。若确定是,则将Bypass标志置为0,在读写至Key所在的节点块的row地址时,通过Cache将该写Key请求的命令发送至外部存储器的节点区,以执行写Key请求,修改相应的Key;否则将Bypass标志置为1,在读写该节点区时,Cache不将该写Key请求发送至片外该节点区,从而不实际执行写Key请求,不对变换后的row地址对应的Key进行修改。此外,若待修改的Key位于节点区0,则在待读写节点区0之前,也可以不在写Key请求中设置Bypass标志,而在读写完节点区0之后,再设置Bypass标志,并将Bypass标志置为1,使得写Key请求在读写节点区1至节点区n时均不执行修改Key的操作。
由于AD在节点区n中,因而在待读写节点区0之前设置Bypass标志并置为1,以便于写AD请求在读写节点区0至节点区(n-1)的过程中,不执行修改AD的操作,在待读写节点区n时将写AD请求中的Bypass标志置为0,执行写AD请求,修改相应的AD。具体的,在返回读写序号为n-1的节点区的响应并恢复变换后写AD请求中的row地址为变换前的AD所在的节点块的row地址后,NP在返回Key响应时触发执行写AD请求,此时检测电路可以在写AD请求中的row地址变换之前,依据写AD请求中AD所在的层号,确定待读写的节点区中包括待修改的AD,并将写AD请求中的Bypass标志置为0,执行写AD请求,以修改节点区n中相应的AD。从而可以使得写AD请求能够在写Key请求读写Btree的流程中被执行,从而保证了Key和对应的AD能够同步修改,NP可以根据修改后的FIB表进行路由查找,从而进行数据包转发,避免了现有技术中发送到Cache的命令不能顺序返回响应,使得非叶子节点和对应的叶子节点不能同步修改而导致的路由查找出错的问题。
其中,由于写Key请求或写AD请求中包括修改后的整个节点块中节点的数据,因而在修改Key或AD时,读取写Key请求或写AD请求中row地址对应的存储地址中节点块的所有节点并替换,从而修改整个节点块,包括节点块中待修改的Key或AD所在的节点。
另外,写Key请求或写AD请求中的层号表示待修改的Key或AD所在节点的层数,也可以用较少bit的位置标志来表示待修改的Key或AD所在节点位于片上,还是片外的节点区0、节点区1或片外任一节点区,例如,当片外有三个节点区时,可以用2bit的位置标志来表示:00表示片上节点区,01表示片外节点区0,10表示片外节点区1,11表示片外节点区2。此时,根据写Key请求或写AD请求中的位置标志可以确定待修改的Key或AD所处的片外节点区,并根据写Key请求或写AD请求中的row地址可以确定所在的节点块。
本发明实施例提供一种转发信息表的读写方法,在待修改的Key所在的节点块的row地址及其对应的AD所在的节点块的row地址不在同一节点区的情况下,在将要读写任一节点区时,在写AD请求和写Key请求经过缓存器之前,当待读写的任一节点区包括Key时,将写AD请求中的row地址变换为与Key所在的节点块的row地址相同的同一row地址;当待读写的任一节点区不包括Key时,将写AD请求中的row地址和写Key请求中的row地址变换为任一节点区中的同一row地址,进而根据同一row地址读写任一节点区。这样可以保证顺序发送到Cache中的写AD请求和写Key请求能够保存在同一row地址对应的队列中,从而能够顺序调度并返回响应,使得写Key请求在读写节点区(n-1)时的响应不会先于写AD请求在读写节点区(n-1)时的响应返回,从而使得写AD请求的响应返回后可以等待写Key请求的响应返回,以便被写Key请求的响应触发以修改节点区n中的AD,因而可以使得写AD请求能够在写Key请求读写Btree的流程中被执行,从而保证了非叶子节点的Key和对应叶子节点的AD能够同步修改,避免了现有技术中由于发送到Cache的命令不能顺序返回响应,使得非叶子节点和对应的叶子节点不能同步修改而导致的路由查找出错的问题。
另外,若需要保证片外两个不同节点区中的不同Key1和Key2顺序修改时,也可以在将要读写片外任一节点区时,在写Key1请求和写Key2请求经过Cache之前,将写Key1请求中的row地址和写Key2请求中的row地址变换为任一节点区中的同一row地址,进而根据同一row地址读写任一节点区,从而可以保证顺序发送至Cache的写Key1请求和写Key2请求能够顺序返回响应,因而可以保证Key1和Key2能够够顺序修改。
此外,当顺序发送至Cache的命令为读AD请求、写AD请求、写Key请求时,若在待读写片外节点区0至节点区(n-1)时,由于读AD请求中的row地址为节点区n中的row地址,与写AD请求和写Key请求中变换后的row地址不同,则读写片外节点区(n-1)后,Cache的调度可能使得写AD请求可能先于读AD请求返回响应;在待读写片外节点区n时,由于读AD请求中的row地址与写AD请求中的row地址相同,因而在读写完节点区n后,写AD请求执行修改AD的操作,读AD请求执行读取AD的命令,且写AD请求和写Key请求顺序返回响应,即在写AD请求之前发送的读AD命令,可能读取到的修改后的AD。此时,可以在待读写片外任一节点区时,将读AD请求中的row地址、写AD请求中的row地址以及写Key请求中的row地址变换为待读写的节点区中的同一row地址,进而能够在读写任一节点区时顺序返回响应,从而可以保证在写AD请求之前发送的读AD命令读取到的是修改前的AD,在写AD请求之后发送的读AD命令读取到的是修改后的AD。
当然,在待读写片外任一节点区时,也可以将发送至Cache的所有命令中的row地址变换为待读写的节点区中的同一row地址,进而根据同一row地址读写任一节点区,以使得顺序发送至Cache的命令均能够被顺序调度,从而顺序返回响应。本发明实施例不做限定。
本发明实施例将以转发信息表FIB在NP的片外存储器中存储有节点区0、节点区1两个节点区,片外每个节点区中有3层节点,片外节点的层号为20至25,层20至层22的节点位于节点区0,层23至层25的节点位于节点区1,且待修改的Key在节点区0中为例,对转发信息表FIB的读写方法进行说明。本发明实施例中的节点区0、节点区1若未标明是片上或片外则指的是片外节点区,其中,存储FIB表的Btree结构可以参见图4。示例性的,NP对转发信息表FIB的读写流程示意图可以参见图5,当Key所在的节点块的row地址和AD所在的节点块的row地址不在同一节点区时,参见图6,本发明实施例提供的转发信息表FIB的读写方法可以包括:
601、NP接收其所在的网络设备的中央处理器CPU发送的用于修改AD的写AD请求,和用于修改AD对应的Key的写Key请求。
当网络中的路由或拓扑结构发生了变化时,网络设备的CPU通过控制NP同步修改Btree中非叶子节点的Key及其对应叶子节点的AD来修改FIB表项。
当Key所在的节点块的row地址和AD所在的节点块的row地址不在同一节点区时,在步骤601中,网络设备的CPU向NP先发送一个用于修改Key所对应的AD的带Post标志的写AD请求,而后向NP发送用于修改Key的不带Post标志的写Key请求。其中,写AD请求中携带有待修改的AD所在的节点块的row地址,以及待修改的AD所在的层号25,和待修改的AD所在的节点块修改后的数据等信息;写Key请求中携带有待修改的Key所在的节点块的row地址,以及待修改的Key所在的层号例如为20,和待修改的Key所在的节点块修改后的数据等信息。写AD请求或写Key请求中的row地址和层号可以确定待修改的AD或Key具体所处的节点块,而待修改的AD或Key所在的节点块修改后的数据可以用于对待修改的AD或待修改的Key所在的整个节点块进行修改替换,以对待修改的AD或Key进行修改。
602、NP读写片上存储器中存储的节点区。
在步骤601之后,NP控制写AD请求和写Key请求从根节点开始依次读写片上存储器中的每一个节点区,即经过图5中的片上流水线,直至片外存储器中最后一个节点区1,并在读写完任一节点区后返回响应至NP。
由于在本实施例中,待修改的Key在片外存储器节点区0,待读写的AD在片外存储器节点区1,均不在片上存储器,因而写AD请求和写Key请求读写Btree的片上各节点区时,不执行修改AD和修改Key的操作,且由于读写片上节点区时不经过Cache,因而写AD请求和写Key请求能够顺序返回响应。
603、在NP待读写片外存储器中存储的节点区0时,在写AD请求经过缓存器之前,将写AD请求中的row地址变换为Key所在的节点块的row地址。
由于网络设备的CPU发送给NP的写AD请求和写Key请求,需要通过高速缓存器Cache发送至片外存储器中的节点区,参见图5,对于发送至同一节点区的不同row地址的命令来说,Cache的调度机制使得顺序发送至Cache的命令可能不会顺序返回响应,参见步骤303;而对于发送至同一节点区的同一row地址的命令来说,顺序发送至Cache的命令顺序返回响应至NP的处理器。由于片外存储器节点区0包括Key,需要根据Key所在的节点块的row地址修改相应的Key,因而写Key请求中的row地址不能发生改变,此时可以将写AD请求中的row地址变换为与Key所在的节点块的row地址相同的row地址。这样一来,对于变换为同一row地址的写AD请求和写Key请求来说,先发送的写AD请求能够先返回响应,后发送的写Key请求能够后返回响应,以便于写AD请求的响应在节点区0能够先于写Key请求的响应返回,从而使得在写Key请求的响应返回时,能够触发写AD请求修改节点区1中相应的AD。
示例性的,在NP读写至片外存储器节点区0之前,NP可以在图5所示的示意图中的A点处,先将写AD请求中AD所在的节点块的row地址右移3位,得到右移后写AD请求中的row地址,并将AD所在的节点块的row地址的后3位存储在图5所示的寄存器中,或者,NP也可以将AD所在的节点块的完整的row地址存储在寄存器中;写Key请求中的row地址不需要进行变换。其中,写AD请求或写Key请求从NP发送至Cache,从而可以通过Cache发送至片外存储器的节点区0,并从Cache返回响应至NP的处理器的流程可以称为Round 0。
当然,通过AD所在的节点块的row地址右移只是变换row地址的其中一种方法,还可以直接将写AD请求中的row地址替换为Key所在的节点块的row地址,从而实现将写AD请求中的row地址与写Key请求中的row地址变换为同一row地址,本发明实施例对row地址的具体变换方法不做限定。
604、NP在读写至片外存储器中存储的节点区0中Key所在的节点块的row地址时执行写Key请求以修改Key。
具体的,NP中的检测电路可以依据写Key请求中Key所在的层号,确定待读写的片外存储器节点区0中包括Key,因而NP在读写至Key所在的节点块的row地址时,即在Round 0过程中,执行写Key请求,修改相应的Key,并返回Round 0响应;检测电路可以在图5中的A点之前,依据写AD请求中的row地址变换之前,写AD请求中AD所在的层号,确定待读写的节点区0中不包括AD,因而可以在写AD请求中设置Bypass标志并置为1,以便于NP在读写节点区0时不执行修改的AD的操作,并返回Round 0响应。
605、当读写完片外存储器中存储的节点区0并返回写AD请求的AD响应和写Key请求的Key响应时,NP恢复变换后写AD请求中的row地址。
具体的,在图5所示的示意图中的B点,NP可以将寄存器中存储的AD所在的节点块的row地址的后3位移回,从而写AD请求中的row地址恢复为右移前AD所在的节点块的row地址,并将返回Round 0响应后的写AD请求暂存于存储器中,以等待写Key请求的Round 0响应返回后触发写AD请求执行修改AD的操作。当然,NP也可以根据寄存器中存储的右移前AD所在的完整的row地址进行替换,从而恢复写AD请求中的row地址。
由于在待读写片外存储器节点区0时,写Key请求中的row地址没有进行变换,因而在读写完节点区0并返回响应后,写Key请求中的row地址即为Key所在的节点块的row地址,不需要进行恢复。
606、在待读写片外存储器中存储的节点区1时,NP在返回Key响应时触发执行写AD请求,以修改节点区1中的AD。
其中,写AD请求或写Key请求从NP发送至Cache,从而可以发送至片外存储器的节点区1,并从Cache返回响应至NP的处理器流程可以称为Round 1。
在待读写片外存储器节点区1时,由于节点区1不包括待修改的Key,写Key请求在读写节点区0时,即经过Round 0时,已经修改了相应的Key,并触发了写AD请求执行以修改相应的AD,因而在读写节点区1时,即经过Round 1时,不需要再执行写Key请求,也不需要保证写AD请求和写Key请求的顺序执行,因而在待读写节点区1时也可以不对写Key请求中的row地址进行变换,写Key请求中为任何row地址均没有影响。
具体的,在步骤605中恢复变换后写AD请求中的row地址后,在图5所示的B点,NP中的检测电路可以依据写AD请求中AD所在的层号,确定待读写的节点区1中包括AD,因而将Bypass标志置为0,NP在读写至AD所在的节点块的row地址时执行写AD请求,即经过Round 1时,修改相应的AD,并返回Round 1响应;检测电路可以依据写Key请求中Key所在的层号,确定待读写的节点区1中不包括Key,因而可以在写Key请求中设置Bypass标志并置为1,NP在读写节点区1时,即经过Round 1时,不通过Cache将写Key请求发送至片外节点区1,不执行写Key请求,并返回Round 1响应给NP和网络设备的中央处理器CPU,通知网络设备已完成修改Key及其对应AD的操作。
由步骤603可知,在读写完节点区0之后,先发送的写AD请求能够先返回响应,后发送的写Key请求能够后返回响应。写AD请求的响应在读写完节点区0并返回之后暂时保存在NP中,等待写Key请求的响应返回后,被其触发执行写AD请求从而修改节点区1中相应的AD,因而可以使得写AD请求能够在写Key请求读写Btree的流程中被执行,从而保证了Key和对应的AD能够同步修改,因而可以避免现有技术中发送到Cache的命令不能顺序返回响应,使得非叶子节点和对应的叶子节点不能同步修改而导致的路由查找出错的问题。
此外,对于待修改的Key位于片上某一节点区的情况,在读写片上节点区的过程中,写AD请求均不执行,检测电路可以根据写Key请求中的层号确定待读写的节点区是否包括待修改的Key,若确定是则执行写Key请求,对相应的Key进行修改,若确定不是,则继续读写下一个节点区。
本发明实施例提供一种转发信息表的读写方法,在待修改的Key所在的节点块的row地址及其对应的AD所在的节点块的row地址不在同一节点区的情况下,在将要读写任一节点区时,在写AD请求和写Key请求经过缓存器之前,当待读写的任一节点区包括Key时,将写AD请求中的row地址变换为与Key所在的节点块的row地址相同的同一row地址;当待读写的任一节点区不包括Key时,将写AD请求中的row地址和写Key请求中的row地址变换为任一节点区中的同一row地址,进而根据同一row地址读写任一节点区。这样可以保证顺序发送到Cache中的写AD请求和写Key请求能够保存在同一row地址对应的队列中,从而能够顺序调度并返回响应,使得写Key请求在读写节点区(n-1)时的响应不会先于写AD请求在读写节点区(n-1)时的响应返回,从而使得写AD请求的响应返回后可以等待写Key请求的响应返回,以便被写Key请求的响应触发以修改节点区n中的AD,因而可以使得写AD请求能够在写Key请求读写Btree的流程中被执行,从而保证了非叶子节点的Key和对应叶子节点的AD能够同步修改,避免了现有技术中由于发送到Cache的命令不能顺序返回响应,使得非叶子节点和对应的叶子节点不能同步修改而导致的路由查找出错的问题。
本发明实施例提供一种网络处理器700,该网络处理器700中的转发信息表FIB为二叉查找树Btree结构,包括非叶子节点和叶子节点,非叶子节点用于存储关键字Key,叶子节点用于存储Key对应的相关数据AD,FIB的存储位置包括片内存储器和片外存储器,片外存储器存储有序号为0至n的n+1个节点区,每个节点区包括k层节点,n为大于或等于0的整数,k为正整数,每个节点区中同一存储地址对应的节点为一个节点块,参见图7,网络处理器700可以包括:
接收单元701,可以用于接收网络处理器700所在的网络设备的中央处理器CPU发送的用于修改AD的写AD请求,和用于修改AD对应的Key的写Key请求,写AD请求中携带有AD所在的节点块的row地址,写Key请求中携带有Key所在的节点块的row地址,Key所在的节点块的row地址和AD所在的节点块的row地址不在同一节点区。
变换单元702,可以用于在将要读写任一节点区时,在写AD请求和写Key请求经过缓存器之前,当待读写的任一节点区包括Key时,将写AD请求中的row地址变换为与Key所在的节点块的row地址相同的同一row地址;当待读写的任一节点区不包括Key时,将写AD请求中的row地址和写Key请求中的row地址变换为任一节点区中的同一row地址,进而根据同一row地址读写任一节点区。
在写AD请求和写Key请求依次读写完片上节点区之后,当读写片外节点区时,网络处理器700中与每个片外节点区对应的检测电路可以根据写AD请求或写Key请求中的层号确定待修改的AD或Key是否存在于待读写的节点区中,若确定是则通过缓存器将写AD请求或写Key请求发送至待读写的节点区,并执行写AD请求或写Key请求,对相应的AD或Key进行修改;若确定不是,则返回写AD请求的响应或写Key请求的响应至网络处理器700的处理器,以便于网络处理器700的处理器可以将写AD请求或写Key请求发送至下一个节点区,从而继续读写下一个节点区。
这里的缓存器可以为高速缓存器Cache,若写AD请求和写Key请求中的row地址不是同一节点区的同一row地址,则Cache的调度机制可能导致顺序发送至Cache的写AD请求和写Key请求不能顺序返回响应。
可选地,变换单元702可以具体用于,将写AD请求中AD所在的节点块的row地址右移k*(n-m)位,得到右移后写AD请求中的row地址;将写Key请求中的row地址替换为右移后写AD请求中的row地址;
参见图8,网络处理器700还可以包括存储单元703,可以用于在变换单元702将写AD请求中AD所在的节点块的row地址右移k*(n-m)位,得到右移后写AD请求中的row地址后,存储AD所在的节点块的row地址的后k*(n-m)位;在变换单元702将写Key请求中的row地址替换为右移后写AD请求中的row地址后,存储替换前写Key请求中Key所在的节点块的row地址。
可选地,参见图9,网络处理器700还可以包括恢复单元704,可以用于当读写完任一节点区并返回写AD请求的AD响应和写Key请求的Key响应时,恢复变换后写AD请求中的row地址和写Key请求中的row地址,以便于根据变换前的row地址再将写AD请求中的row地址和写Key请求中的row地址变换为下一节点区中的同一row地址。
可选地,恢复单元704可以具体用于,读取存储单元703中存储的右移时AD所在的节点块的row地址的后k*(n-m)位,根据AD所在的节点块的row地址的后k*(n-m)位将右移后的写AD请求中的row地址恢复为右移前AD所在的节点块的row地址;读取存储单元703中存储的替换前Key所在的节点块的row地址,根据替换前Key所在的节点块的row地址将替换后写Key请求中的row地址恢复为替换前Key所在的节点块的row地址。
可选地,参见图10,网络处理器700还可以包括修改单元705,可以用于若待读写的节点区中包括Key时,则在读写至Key所在的节点块的row地址时执行写Key请求,以修改Key;若返回读写序号为n-1的节点区的响应并恢复变换后写AD请求中的row地址为变换前的AD所在的节点块的row地址,则在返回Key响应时触发执行写AD请求,以修改序号为n的节点区中的AD。
此外,当非叶子节点的Key和其对应的叶子节点的AD在同一节点区即网络处理器700的片外存储器中的节点区n时,Key与其对应的AD位于同一节点块,对应同一节点块的存储地址,因而Key及其对应的AD拥有同一节点区的同一个row地址。其中,节点块的row地址可以理解为节点块对应的存储地址的编号,每个节点块的存储地址可以通过该节点块的row地址计算得到。此时,网络设备的中央处理器CPU可以向网络处理器700发送一条读写请求,指示网络处理器700修改该片外节点区n中同一row地址中的Key及其对应的AD。该读写请求从Btree的根节点开始读写,依次读写片上及片外的每一个节点区,当读写至片外节点区n时,修改该节点区中的Key及其对应的AD。
本发明实施例提供一种网络处理器700,在待修改的Key所在的节点块的row地址及其对应的AD所在的节点块的row地址不在同一节点区的情况下,在将要读写任一节点区时,在写AD请求和写Key请求经过缓存器之前,当待读写的任一节点区包括Key时,将写AD请求中的row地址变换为与Key所在的节点块的row地址相同的同一row地址;当待读写的任一节点区不包括Key时,将写AD请求中的row地址和写Key请求中的row地址变换为任一节点区中的同一row地址,进而根据同一row地址读写任一节点区。这样可以保证顺序发送到Cache中的写AD请求和写Key请求能够保存在同一row地址对应的队列中,从而能够顺序调度并返回响应,使得写Key请求在读写节点区(n-1)时的响应不会先于写AD请求在读写节点区(n-1)时的响应返回,从而使得写AD请求的响应返回后可以等待写Key请求的响应返回,以便被写Key请求的响应触发以修改节点区n中的AD,因而可以使得写AD请求能够在写Key请求读写Btree的流程中被执行,从而保证了非叶子节点的Key和对应叶子节点的AD能够同步修改,避免了现有技术中由于发送到Cache的命令不能顺序返回响应,使得非叶子节点和对应的叶子节点不能同步修改而导致的路由查找出错的问题。
参见图11,本发明实施例提供一种网络设备100,可以包括网络处理器101、片外存储器102、中央处理器CPU 103以及总线104,这里的网络设备100可以为交换机、路由器、网桥等。其中,总线104用于连接网络处理器101、片外存储器102、中央处理器CPU 103。网络处理器101包括片内存储器1011、寄存器1012、缓存器1013、处理器1014。网络设备100中的转发信息表FIB为二叉查找树Btree结构,包括非叶子节点和叶子节点,非叶子节点用于存储关键字Key,叶子节点用于存储Key对应的相关数据AD,FIB的存储位置包括网络处理器101的片内存储器1011和网络设备中的片外存储器102,片外存储器102中存储有序号为0至n的n+1个节点区,每个节点区包括k层节点,n为大于或等于0的整数,k为正整数,每个节点区中同一存储地址对应的节点为一个节点块。
在本发明实施例提供的网络设备100中,中央处理器CPU 103可以用于向网络处理器101发送用于修改AD的写AD请求,和用于修改AD对应的Key的写Key请求,写AD请求中携带有AD所在的节点块的row地址,写Key请求中携带有Key所在的节点块的row地址,Key所在的节点块的row地址与AD所在的节点块的row地址不在同一节点区。
网络处理器101可以用于接收中央处理器CPU 103发送的用于修改Key所对应的AD的写AD请求,和用于修改Key的写Key请求。
网络处理器101还可以用于,在将要读写任一节点区时,在写AD请求和写Key请求经过缓存器1013之前,当待读写的任一节点区包括Key时,将写AD请求中的row地址变换为与Key所在的节点块的row地址相同的同一row地址;当待读写的任一节点区不包括Key时,将写AD请求中的row地址和写Key请求中的row地址变换为任一节点区中的同一row地址,进而根据同一row地址读写任一节点区。
这里的缓存器1013可以为高速缓存器Cache,若写AD请求和写Key请求中的row地址不是同一节点区的同一row地址,则Cache中的调度机制可能导致顺序发送至Cache的写AD请求和写Key请求不能顺序返回响应。
在本发明实施例中,可选地,网络处理器101在将要读写序号为m的任一节点区时,m大于或等于0且小于或等于n,当待读写的任一节点区不包括Key时,将写AD请求中的row地址和写Key请求中的row地址变换为任一节点区中的同一row地址包括:
将写AD请求中AD所在的节点块的row地址右移k*(n-m)位,得到右移后写AD请求中的row地址,并将AD所在的节点块的row地址的后k*(n-m)位存储在寄存器1012中;
将写Key请求中的row地址替换为右移后写AD请求中的row地址,并将替换前写Key请求中Key所在的节点块的row地址存储在寄存器1012中。
网络处理器101的处理器1014可以用于,在读写完片外任一节点区后,接收Cache返回的写AD请求的AD响应和写Key请求的Key响应。
在本发明实施例中,可选地,网络处理器101还可以用于,当读写完任一节点区并返回写AD请求的AD响应和写Key请求的Key响应时,恢复变换后写AD请求中的row地址和写Key请求中的row地址,以便于根据变换前的row地址再将写AD请求中的row地址和写Key请求中的row地址变换为下一节点区中的同一row地址。
在本发明实施例中,可选地,网络处理器101恢复变换后写AD请求中的row地址和写Key请求中的row地址,可以包括:
读取寄存器1012中存储的右移时AD所在的节点块的row地址的后k*(n-m)位,根据AD所在的节点块的row地址的后k*(n-m)位将右移后的写AD请求中的row地址恢复为右移前AD所在的节点块的row地址;
读取寄存器1012中存储的替换前Key所在的节点块的row地址,根据替换前Key所在的节点块的row地址将替换后写Key请求中的row地址恢复为替换前Key所在的节点块的row地址。
在本发明实施例中,可选地,网络处理器101还可以用于,若待读写的节点区中包括Key时,则在读写至Key所在的节点块的row地址时执行写Key请求,以修改Key;
若返回读写序号为n-1的节点区的响应并恢复变换后写AD请求中的row地址为变换前的AD所在的节点块的row地址,则在返回Key响应时触发执行写AD请求,以修改序号为n的节点区中的AD。
此外,当非叶子节点的Key和其对应的叶子节点的AD在同一节点区即片外存储器中的节点区n时,Key与其对应的AD位于同一节点块,对应同一节点块的存储地址,因而Key及其对应的AD拥有同一节点区的同一个row地址。其中,节点块的row地址可以理解为节点块对应的存储地址的编号,每个节点块的存储地址可以通过该节点块的row地址计算得到。此时,网络设备100的中央处理器CPU 103可以向网络处理器101发送一条读写请求,指示修改该片外节点区n中同一row地址中的Key及其对应的AD。该读写请求从Btree的根节点开始读写,依次读写片上及片外的每一个节点区,当读写至片外节点区n时,修改该节点区中的Key及其对应的AD。
本发明实施例提供一种网络设备100,包括网络处理器,在待修改的Key所在的节点块的row地址及其对应的AD所在的节点块的row地址不在同一节点区的情况下,在将要读写任一节点区时,在写AD请求和写Key请求经过缓存器之前,当待读写的任一节点区包括Key时,将写AD请求中的row地址变换为与Key所在的节点块的row地址相同的同一row地址;当待读写的任一节点区不包括Key时,将写AD请求中的row地址和写Key请求中的row地址变换为任一节点区中的同一row地址,进而根据同一row地址读写任一节点区。这样可以保证顺序发送到Cache中的写AD请求和写Key请求能够保存在同一row地址对应的队列中,从而能够顺序调度并返回响应,使得写Key请求在读写节点区(n-1)时的响应不会先于写AD请求在读写节点区(n-1)时的响应返回,从而使得写AD请求的响应返回后可以等待写Key请求的响应返回,以便被写Key请求的响应触发以修改节点区n中的AD,因而可以使得写AD请求能够在写Key请求读写Btree的流程中被执行,从而保证了非叶子节点的Key和对应叶子节点的AD能够同步修改,避免了现有技术中由于发送到Cache的命令不能顺序返回响应,使得非叶子节点和对应的叶子节点不能同步修改而导致的路由查找出错的问题。
在本申请所提供的几个实施例中,应该理解到,所揭露的网络处理器和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,在本发明各个实施例中的设备和系统中,各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理包括,也可以两个或两个以上单元集成在一个单元中。且上述的各单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (10)
1.一种转发信息表的读写方法,所述转发信息表FIB为二叉查找树Btree结构,包括非叶子节点和叶子节点,所述非叶子节点用于存储关键字Key,所述叶子节点用于存储所述Key对应的相关数据AD,所述FIB的存储位置包括片内存储器和片外存储器,所述片外存储器存储有序号为0至n的n+1个节点区,每个节点区包括k层节点,n为大于或等于0的整数,k为正整数,每个节点区中同一存储地址对应的节点为一个节点块,其特征在于,所述方法包括:
网络处理器NP接收其所在的网络设备的中央处理器CPU发送的用于修改所述AD的写AD请求,和用于修改所述AD对应的Key的写Key请求,所述写AD请求中携带有所述AD所在的节点块的row地址,所述写Key请求中携带有包括所述Key所在的节点块的row地址,所述Key所在的节点块的row地址与所述AD所在的节点块的row地址不在同一节点区;
在将要读写任一节点区时,在所述写AD请求和所述写Key请求经过缓存器之前,当待读写的所述任一节点区包括所述Key时,将所述写AD请求中的row地址变换为与所述Key所在的节点块的row地址相同的同一row地址;当待读写的所述任一节点区不包括所述Key时,将所述写AD请求中的row地址和所述写Key请求中的row地址变换为所述任一节点区中的同一row地址,进而根据所述同一row地址读写所述任一节点区。
2.根据权利要求1所述的方法,其特征在于,在将要读写序号为m的任一节点区时,m大于或等于0且小于或等于n,所述当待读写的所述任一节点区不包括所述Key时,将所述写AD请求中的row地址和所述写Key请求中的row地址变换为所述任一节点区中的同一row地址包括:
所述NP将所述写AD请求中AD所在的节点块的row地址右移k*(n-m)位,得到右移后所述写AD请求中的row地址,并将所述AD所在的节点块的row地址的后k*(n-m)位存储在寄存器中;
所述NP将所述写Key请求中的row地址替换为右移后所述写AD请求中的row地址,并将替换前所述写Key请求中Key所在的节点块的row地址保存在所述寄存器中。
3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
当读写完所述任一节点区并返回所述写AD请求的AD响应和所述写Key请求的Key响应时,所述NP恢复变换后所述写AD请求中的row地址和所述写Key请求中的row地址,以便于根据变换前的所述row地址再将所述写AD请求中的row地址和所述写Key请求中的row地址变换为下一节点区中的同一row地址。
4.根据权利要求3所述的方法,其特征在于,所述NP恢复变换后所述写AD请求中的row地址和所述写Key请求中的row地址,包括:
所述NP读取所述寄存器中存储的右移时所述AD所在的节点块的row地址的后k*(n-m)位,根据所述AD所在的节点块的row地址的后k*(n-m)位将所述右移后的所述写AD请求中的row地址恢复为右移前所述AD所在的节点块的row地址;
所述NP读取所述寄存器中存储的替换前所述Key所在的节点块的row地址,根据替换前所述Key所在的节点块的row地址将替换后所述写Key请求中的row地址恢复为替换前所述Key所在的节点块的row地址。
5.根据权利要求3所述的方法,其特征在于,所述方法还包括:
若待读写的节点区中包括所述Key时,则所述NP在读写至所述Key所在的节点块的row地址时执行所述写Key请求,以修改所述Key;
若返回读写所述序号为n-1的节点区的响应并恢复变换后所述写AD请求中的row地址为变换前的AD所在的节点块的row地址,则所述NP在返回所述Key响应时触发执行所述写AD请求,以修改所述序号为n的节点区中的所述AD。
6.一种网络处理器,所述网络处理器中的转发信息表FIB为二叉查找树Btree结构,包括非叶子节点和叶子节点,所述非叶子节点用于存储关键字Key,所述叶子节点用于存储所述Key对应的相关数据AD,所述FIB的存储位置包括片内存储器和片外存储器,所述片外存储器存储有序号为0至n的n+1个节点区,每个节点区包括k层节点,n为大于或等于0的整数,k为正整数,每个节点区中同一存储地址对应的节点为一个节点块,其特征在于,包括:
接收单元,用于接收所述网络处理器所在的网络设备的中央处理器CPU发送的用于修改所述AD的写AD请求,和用于修改所述AD对应的Key的写Key请求,所述写AD请求中携带有所述AD所在的节点块的row地址,所述写Key请求中携带有所述Key所在的节点块的row地址,所述Key所在的节点块的row地址与所述AD所在的节点块的row地址不在同一节点区;
变换单元,用于在将要读写任一节点区时,在所述写AD请求和所述写Key请求经过缓存器之前,当待读写的所述任一节点区包括所述Key时,将所述写AD请求中的row地址变换为与所述Key所在的节点块的row地址相同的同一row地址;当待读写的所述任一节点区不包括所述Key时,将所述写AD请求中的row地址和所述写Key请求中的row地址变换为所述任一节点区中的同一row地址,进而根据所述同一row地址读写所述任一节点区。
7.根据权利要求6所述的网络处理器,其特征在于,所述变换单元具体用于,将所述写AD请求中AD所在的节点块的row地址右移k*(n-m)位,得到右移后所述写AD请求中的row地址;将所述写Key请求中的row地址替换为右移后所述写AD请求中的row地址;
还包括存储单元,用于在所述变换单元将所述写AD请求中AD所在的节点块的row地址右移k*(n-m)位,得到右移后所述写AD请求中的row地址后,存储所述AD所在的节点块的row地址的后k*(n-m)位;
在所述变换单元将所述写Key请求中的row地址替换为右移后所述写AD请求中的row地址后,存储替换前所述写Key请求中Key所在的节点块的row地址。
8.根据权利要求6或7所述的网络处理器,其特征在于,还包括:
恢复单元,用于当读写完所述任一节点区并返回所述写AD请求的AD响应和所述写Key请求的Key响应时,恢复变换后所述写AD请求中的row地址和所述写Key请求中的row地址,以便于根据变换前的所述row地址再将所述写AD请求中的row地址和所述写Key请求中的row地址变换为下一节点区中的同一row地址。
9.根据权利要求8所述的网络处理器,其特征在于,所述恢复单元具体用于:
读取所述存储单元中存储的右移时所述AD所在的节点块的row地址的后k*(n-m)位,根据所述AD所在的节点块的row地址的后k*(n-m)位将所述右移后的所述写AD请求中的row地址恢复为右移前所述AD所在的节点块的row地址;
读取所述存储单元中存储的替换前所述Key所在的节点块的row地址,根据替换前所述Key所在的节点块的row地址将替换后所述写Key请求中的row地址恢复为替换前所述Key所在的节点块的row地址。
10.根据权利要求8所述的网络处理器,其特征在于,还包括:
修改单元,用于若待读写的节点区中包括所述Key时,则在读写至所述Key所在的节点块的row地址时执行所述写Key请求,以修改所述Key;
若返回读写所述序号为n-1的节点区的响应并恢复变换后所述写AD请求中的row地址为变换前的AD所在的节点块的row地址,则在返回所述Key响应时触发执行所述写AD请求,以修改所述序号为n的节点区中的所述AD。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510054368.0A CN104601471B (zh) | 2015-02-02 | 2015-02-02 | 一种转发信息表的读写方法及网络处理器 |
US15/013,456 US10038571B2 (en) | 2015-02-02 | 2016-02-02 | Method for reading and writing forwarding information base, and network processor |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510054368.0A CN104601471B (zh) | 2015-02-02 | 2015-02-02 | 一种转发信息表的读写方法及网络处理器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104601471A true CN104601471A (zh) | 2015-05-06 |
CN104601471B CN104601471B (zh) | 2017-12-01 |
Family
ID=53126989
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510054368.0A Active CN104601471B (zh) | 2015-02-02 | 2015-02-02 | 一种转发信息表的读写方法及网络处理器 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10038571B2 (zh) |
CN (1) | CN104601471B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106302374A (zh) * | 2015-06-26 | 2017-01-04 | 深圳市中兴微电子技术有限公司 | 一种用于提高表项访问带宽和原子性操作的装置及方法 |
CN108121500A (zh) * | 2016-11-30 | 2018-06-05 | 深圳市中兴微电子技术有限公司 | 一种数据的存取方法及装置 |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10521112B2 (en) | 2017-03-17 | 2019-12-31 | International Business Machines Corporation | Layered clustered scale-out storage system |
US10642521B2 (en) * | 2018-05-11 | 2020-05-05 | International Business Machines Corporation | Scaling distributed queues in a distributed storage network |
US11573891B2 (en) * | 2019-11-25 | 2023-02-07 | SK Hynix Inc. | Memory controller for scheduling commands based on response for receiving write command, storage device including the memory controller, and operating method of the memory controller and the storage device |
KR102456176B1 (ko) | 2020-05-21 | 2022-10-19 | 에스케이하이닉스 주식회사 | 메모리 컨트롤러 및 그 동작 방법 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040052251A1 (en) * | 2002-09-16 | 2004-03-18 | North Carolina State University | Methods and systems for fast binary network address lookups using parent node information stored in routing table entries |
US7003582B2 (en) * | 2001-06-20 | 2006-02-21 | International Business Machines Corporation | Robust NP-based data forwarding techniques that tolerate failure of control-based applications |
CN101155123B (zh) * | 2006-09-26 | 2011-06-01 | 华为技术有限公司 | 一种保证转发表项可靠性的方法及装置、及一种转发设备 |
US8036126B2 (en) * | 2009-02-17 | 2011-10-11 | At&T Intellectual Property Llp | System and method for compressing internet protocol routing tables |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100488414B1 (ko) * | 2000-12-30 | 2005-05-11 | 한국전자통신연구원 | 다중탐색 트리의 노드 생성 방법, 및 그에 따라 생성된 다중탐색 트리 구조의 자료 탐색 방법 |
US6985483B2 (en) * | 2001-07-31 | 2006-01-10 | North Carolina State University | Methods and systems for fast packet forwarding |
US7603346B1 (en) * | 2004-07-23 | 2009-10-13 | Netlogic Microsystems, Inc. | Integrated search engine devices having pipelined search and b-tree maintenance sub-engines therein |
US7706302B2 (en) * | 2004-09-14 | 2010-04-27 | Alcatel Lucent | Optimization of routing forwarding database in a network processor |
US9602407B2 (en) * | 2013-12-17 | 2017-03-21 | Huawei Technologies Co., Ltd. | Trie stage balancing for network address lookup |
-
2015
- 2015-02-02 CN CN201510054368.0A patent/CN104601471B/zh active Active
-
2016
- 2016-02-02 US US15/013,456 patent/US10038571B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7003582B2 (en) * | 2001-06-20 | 2006-02-21 | International Business Machines Corporation | Robust NP-based data forwarding techniques that tolerate failure of control-based applications |
US20040052251A1 (en) * | 2002-09-16 | 2004-03-18 | North Carolina State University | Methods and systems for fast binary network address lookups using parent node information stored in routing table entries |
CN101155123B (zh) * | 2006-09-26 | 2011-06-01 | 华为技术有限公司 | 一种保证转发表项可靠性的方法及装置、及一种转发设备 |
US8036126B2 (en) * | 2009-02-17 | 2011-10-11 | At&T Intellectual Property Llp | System and method for compressing internet protocol routing tables |
Non-Patent Citations (1)
Title |
---|
YAOQING LIU: "FIFA:Fast incremental FIB aggregation", 《2013 PROCEEDINGS IEEE INFOCOM》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106302374A (zh) * | 2015-06-26 | 2017-01-04 | 深圳市中兴微电子技术有限公司 | 一种用于提高表项访问带宽和原子性操作的装置及方法 |
US10545867B2 (en) | 2015-06-26 | 2020-01-28 | Sanechips Technology Co., Ltd. | Device and method for enhancing item access bandwidth and atomic operation |
CN108121500A (zh) * | 2016-11-30 | 2018-06-05 | 深圳市中兴微电子技术有限公司 | 一种数据的存取方法及装置 |
WO2018099106A1 (zh) * | 2016-11-30 | 2018-06-07 | 深圳市中兴微电子技术有限公司 | 一种数据的存取方法、装置及计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US10038571B2 (en) | 2018-07-31 |
CN104601471B (zh) | 2017-12-01 |
US20160224603A1 (en) | 2016-08-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104601471A (zh) | 一种转发信息表的读写方法及网络处理器 | |
JP5238791B2 (ja) | 転送機能を有するメモリノードを相互に接続したストレージ装置及びデータ処理方法 | |
US7565343B2 (en) | Search apparatus and search management method for fixed-length data | |
CN110417569A (zh) | 一种网络链路故障处理方法和隧道端点设备 | |
CN110177059A (zh) | 用于存储数据的系统和方法 | |
CN105191215A (zh) | 双向服务链的数据平面学习 | |
CN107211036A (zh) | 一种数据中心网络组网的方法以及数据中心网络 | |
CN104301251A (zh) | 一种QoS处理方法、系统及设备 | |
CN102857414A (zh) | 一种转发表写入、报文转发方法及装置 | |
CN111147372B (zh) | 下行报文发送、转发方法和装置 | |
CN112015517A (zh) | 一种基于k8s集群的区块链节点动态迁移方法和系统 | |
US11652744B1 (en) | Multi-stage prefix matching enhancements | |
CN108494607A (zh) | 基于容器的大二层网络架构的设计方法及系统 | |
US20220045948A1 (en) | Path creation method and device for network on chip and electronic apparatus | |
CN101369934B (zh) | 网络模拟方法及网络模拟系统 | |
JP2008295013A (ja) | 管理計算機、冗長化設定方法、冗長化設定プログラム及びスイッチの設定方法 | |
CN102567419B (zh) | 基于树结构的海量数据存储装置及方法 | |
CN102736986A (zh) | 一种内容可寻址存储器及其检索数据的方法 | |
EP2736201B1 (en) | Routing table management method and system | |
CN102045262B (zh) | 媒体接入控制地址表更新方法、装置及网络设备 | |
CN106603401A (zh) | 快速重路由方法和装置 | |
CN104348737A (zh) | 一种组播报文的传输方法及交换机 | |
CN103457864B (zh) | 处理路由下一跳的方法、装置及网络设备 | |
CN113497765B (zh) | 一种路由管理的方法、装置、电子设备和存储介质 | |
CN101577680B (zh) | 一种隧道路由信息的更新方法、装置及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |