一种数据处理方法和装置与流程

文档序号:13237434阅读:152来源:国知局
技术领域本发明涉及数据处理领域,特别是涉及一种数据处理方法和装置。

背景技术:
路由查找是根据报文的目的IP地址,查找路由器中的路由表,得到报文下一跳信息的过程。路由表中的每条路由都是一个路由前缀。路由前缀可以用‘0’,‘1’和‘*’组成的三值位串表示。如IPv4前缀192.168.1.0/24可以用下面的三值位串表示:110000001010100000000001********。‘*’表示不关心,既可以跟‘1’匹配,也可以跟‘0’匹配。所以,两个IPv4地址192.168.1.1和192.168.1.2都跟前缀192.168.1.0/24匹配。当后面有多个‘*’时,一般只写一个‘*’。比如‘01*’,表示前两位的值为“01”,后面的位都是‘*’。路由查找是一个最长前缀匹配(LPMLongestPrefixMatch)问题。当有多条前缀跟输入的IP地址匹配时,掩码最长的匹配前缀对应的下一跳信息才是最终的查找结果。假设IP地址的长度为9位,如果路由表中有两个前缀“01*”和“010*”,则IP地址010100101跟这两个前缀都匹配,但因为前缀“010*”比“01*”长,所以,“010*”才是最长的匹配前缀,它对应的下一跳信息才是最终的查找结果。现有技术中常用的路由查找算法主要是使用多位树(Multi-BitTrie),多位树可以理解为,根据路由前缀中的位串建立一棵二叉树,在二叉树中,如果当前位的值为‘0’则向左走一步,如果为‘1’则向右走一步。每次考虑的位数一般是固定多位,所述位数也可以理解为多位数的步长。如图1所示,图1为现有技术中多位树的结构示意图。其中p0的前缀为*,p1的前缀为0*,p2的前缀为10*,p3的前缀为111*,p4的前缀为0000*,p5的前缀为1001*,p6的前缀为11101*,p7的前缀为11111*,p8的前缀为000011*,p9的前缀为0000100*,p10的前缀为1110100*。假设步长为3,二叉树被分为如图1所示的7个子Trie,分别为T1到T7。多位树可以看作按步长把一个二叉Trie分成多个子Trie,并为每个子Trie创建一个Trie节点(TrieNode)。如果某个子Trie中有前缀,还要为该子Trie创建一个Prefix节点(PrefixNode)。落在该子Trie内部的前缀都保存在Prefix节点中。每条前缀对应的下一跳信息称为RE(REsult)。一般在多位树中只保存REIndex,也就是指向下一跳信息的指针。对于中间的每个子Trie,都需要为它计算一个当前最长前缀匹配(PresentLongestPrefixMatch,PLPM)。例如,对于子T2,由于覆盖它的最长前缀是p1,所以T2对应的PLPM是前缀p1。PLPM对应的REIndex一般保存在REIndex数组的第一个位置,并在Trie节点或者Prefix节点中用1位标识当前子Trie是否有对应的PLPM。图1中位于Level2和Level3的各个节点对应的PLPM已经在REIndex数组的右侧标出。Trie节点具有两类子节点,分别为Trie子节点和Prefix子节点,例如图1中的Trie节点T1有3个子节点是Trie节点,也就是T2,T3和T4;有一个子节点是Prefix节点,也就是跟T1关联的Prefix节点。每个Trie节点都有一个关联KEY,也就是子树的起始点对应的路由前缀。Trie节点的关联KEY可以看作从Trie的根节点到当前Trie节点的各个分段KEY组成的前缀。例如在图1中,T1的关联KEY是‘*’,T2的关联KEY是‘000*’,T3的关联KEY是‘010*’。Trie节点中要保存指向Trie子节点的指针。一个Trie节点的Trie子节点一般都是连续存放(可以看作一个数组),所以只需要保存Trie子节点的起始位置。比如图1中3个Trie节点T2,T3和T4都是Trie节点T1的子节点,把它们保存在一个数组中,只在Trie节点T1中保存数组的起始地址就可以了。Trie节点中也要保存指向Prefix子节点的指针。在已有的多位树算法中,一个Trie节点的Prefix子节点只是用于保存该Trie节点对应的子树中的前缀。另外,Trie节点中还要保存用于索引子节点的位图,位图的位数为2步长。位图中有几个1就表示有几个Trie子节点。在图1的例子中,因为步长为3,所以用于子节点索引的位图只需要8位。Trie节点T1的三个Trie子节点T2,T3和T4对应的分段KEY分别为000,100和111,所以T1中保存的用于索引子节点的位图为10001001。为了达到线速地处理收到的报文,路由查找一般都是用硬件实现。硬件中的查找结构一般是一个多级的流水线。基于Trie的算法可以把Trie的各级存放在硬件流水线的各级中。以图1为基础,图2为现有技术中多位树在硬件中的查找结构示意图。共分为5级,前3级保存3层Trie节点,第4级保存7个Trie节点对应的Prefix节点,第5级保存每个Prefix节点中的前缀对应的RE指针。查找时,输入KEY沿着流水线一级一级走下来,最终得到查找结果。假设IP地址的长度为9,查找IP地址111010011的过程如下:Step1:进入流水线的第一级,访问Trie节点T1,并从IP地址中提取出最高的3位‘111’。因为T1有对应的Prefix节点,所以记录该Prefix节点的指针。Step2:根据分段KEY‘111’访问Trie节点T1的子节点T4,并从IP地址中提取接下来的3位‘010’。因为T4也有对应的Prefix节点,所以更新查找的Prefix节点指针为T4对应的Prefix节点的指针。Step3:根据分段KEY‘010’访问Trie节点T4的子节点T7,并从IP地址中提取接下来的3位‘011’。因为T7也有对应的Prefix节点,所以更新查找的Prefix节点指针为T7对应的Prefix节点的指针。Step4:由于T7没有Trie子节点,所以使用最近一次保存的Prefix节点指针访问Prefix节点。在本例中也就是T7对应的Prefix节点。在Prefix节点中保存了子树T7中的前缀p10。输入KEY,也就是IP地址111010011跟前缀p10“1110100*”匹配(此处,只需要比较011跟‘0*’就可以了),而且该子树有对应的PLPM,所以p10对应的REindex保存在REindex数组的第二个位置(数组下标为1)。Step5:根据Step4中得到的REindex在REindex数组中的位置得到p10对应的REIndex。通过返回的REIndex可以得到下一跳信息。可见,传统的多位树的级数比较多,当路由容量较大、无法将树全部放在缓存(cache)中时,在进行路由查找时,需要多次访问内存,更新cache中的内容,造成cache失效的次数较多,浪费系统资源并直接造成查找速度下降。

技术实现要素:
为了解决上述技术问题,本发明实施例提供了一种数据处理方法和装置,在迭代后的Prefix节点中保存了PLPM和对应Trie节点中路由前缀的下一跳信息,有效减少了在查找路由时的访存次数。第一方面,本发明实施例提供了一种数据处理方法,应用于多位树,所述多位树中包括多个路由前缀,所述方法包括:获取所述多位树的结构中包括至少一个Trie节点和对应的Prefix节点,所述Prefix节点的容量小于等于预设容量,所述Prefix节点包括PLPM、对应Trie节点中的路由前缀和对应Trie节点中路由前缀的下一跳信息,第一Trie节点为所述至少一个Trie节点中的任一Trie节点,所述第一Trie节点包括对应的位图,所述第一Trie节点对应的Prefix节点包括直接Prefix节点和非直接Prefix节点,所述直接Prefix节点中包括所述第一Trie节点中的路由前缀、所述直接Prefix节点的PLPM和所述第一Trie节点中路由前缀的下一跳信息,所述非直接Prefix节点包括所述第一Trie节点下连接的Trie节点中的路由前缀、所述非直接Prefix的PLPM和所述第一Trie节点下连接的Trie节点中路由前缀的下一跳信息;进行迭代操作,直到迭代后得到的多位树的总容量小于等于所述预设容量;一次所述迭代操作具体为:利用得到的Prefix节点的关联前缀建立新的多位树,根据所述新的多位树的结构获取Trie节点和对应的Prefix节点,并对应保存本次迭代前相应的位图。在第一方面的第一种可能的实现方式中,还包括:获取待查找路由地址;根据所述待查找路由地址从最后一次迭代得到的多位树开始进行LPM,根据匹配到的Prefix节点所包含的位图以及所述待查找路由地址确定上一次迭代中多位树中的Prefix节点;进行循环匹配,直到匹配结果为匹配到未迭代前的多位树中的Prefix节点或出现无匹配前缀;所述循环匹配具体为:根据在第N次迭代中获得的多位树匹配得到的Prefix节点所包含的位图以及所述待查找路由地址确定第N-1次迭代中获得的多位树中的Prefix节点;若所述匹配结果为匹配到未迭代前的多位树中的Prefix节点,则将所述未迭代前的多位树中的Prefix节点中与所述待查找路由地址匹配的路由前缀的下一跳信息作为所述待查找路由地址的下一跳信息;若所述匹配结果为出现无匹配前缀,则将出现无匹配前缀的Prefix节点的PLPM所对应路由前缀的下一跳信息作为所述待查找路由地址的下一跳信息。在第一方面的第二种可能的实现方式中,还包括:将多位树中在同一单连接结构中的多个Trie节点作为一个Trie节点处理,所述单连接结构具体包括在所述多位树的连接结构中一个Trie节点下只连接一个Trie节点的结构。在第一方面的第三种可能的实现方式中,还包括:所述Prefix节点通过至少一个PCL存储PLPM、对应Trie节点中的路由前缀和对应Trie节点中路由前缀的下一跳信息,所述PCL与Trie节点一一对应。结合第一方面或者第一方面的第一种或第二种或第三种可能的实现方式,在第四种可能的实现方式中,所述预设容量根据处理系统的缓存大小决定。第二方面,本发明实施例提供了一种数据处理装置,应用于多位树,所述多位树中包括多个路由前缀,所述数据处理装置包括:获取单元,用于获取所述多位树的结构中包括至少一个Trie节点和对应的Prefix节点,所述Prefix节点的容量小于等于预设容量,所述Prefix节点包括PLPM、对应Trie节点中的路由前缀和对应Trie节点中路由前缀的下一跳信息,第一Trie节点为所述至少一个Trie节点中的任一Trie节点,所述第一Trie节点包括对应的位图,所述第一Trie节点对应的Prefix节点包括直接Prefix节点和非直接Prefix节点,所述直接Prefix节点中包括所述第一Trie节点中的路由前缀、所述直接Prefix节点的PLPM和所述第一Trie节点中路由前缀的下一跳信息,所述非直接Prefix节点包括所述第一Trie节点下连接的Trie节点中的路由前缀、所述非直接Prefix的PLPM和所述第一Trie节点下连接的Trie节点中路由前缀的下一跳信息;迭代单元,用于进行迭代操作,直到迭代后得到的多位树的总容量小于等于所述预设容量;一次所述迭代操作具体为:利用得到的Prefix节点的关联前缀建立新的多位树,根据所述新的多位树的结构获取Trie节点和对应的Prefix节点,并对应保存本次迭代前相应的位图。在第二方面的第一种可能的实现方式中,还包括:接收单元,用于获取待查找路由地址;匹配单元,用于根据所述待查找路由地址从最后一次迭代得到的多位树开始进行LPM,根据匹配到的Prefix节点所包含的位图以及所述待查找路由地址确定上一次迭代中多位树中的Prefix节点;所述匹配单元还用于进行循环匹配,直到匹配结果为匹配到未迭代前的多位树中的Prefix节点或出现无匹配前缀;所述循环匹配具体为:根据在第N次迭代中获得的多位树匹配得到的Prefix节点所包含的位图以及所述待查找路由地址确定第N-1次迭代中获得的多位树中的Prefix节点;若所述匹配单元的所述匹配结果为匹配到未迭代前的多位树中的Prefix节点,确定单元,用于将所述未迭代前的多位树中的Prefix节点中与所述待查找路由地址匹配的路由前缀的下一跳信息作为所述待查找路由地址的下一跳信息;若所述匹配单元的所述匹配结果为出现无匹配前缀,所述确定单元还用于将出现无匹配前缀的Prefix节点的PLPM所对应路由前缀的下一跳信息作为所述待查找路由地址的下一跳信息。在第二方面的第二种可能的实现方式中,还包括:处理单元,用于将多位树中在同一单连接结构中的多个Trie节点作为一个Trie节点处理,所述单连接结构具体包括在所述多位树的连接结构中一个Trie节点下只连接一个Trie节点的结构。在第二方面的第三种可能的实现方式中,所述Prefix节点通过至少一个PCL存储PLPM、对应Trie节点中的路由前缀和对应Trie节点中路由前缀的下一跳信息,所述PCL与Trie节点一一对应。结合第二方面或者第二方面的第一种或第二种或第三种可能的实现方式,在第四种可能的实现方式中,所述预设容量根据处理系统的缓存大小决定。由上述技术方案可以看出,通过对多位树的迭代操作,使得迭代后的多位树的总容量小于等于预设容量,更加适合存放于缓存中,且迭代后的多位树的Prefix节点中直接保存了PLPM和对应Trie节点中路由前缀的下一跳信息,使得在路由查找的过程中可以在得到匹配结果时直接获得对应的下一跳信息,减少在原本在查找时还需要再次访存以获取下一跳信息的过程,由此减少了路由查找的访存次数,也减少了cache失效的次数,直接提高了查找效率。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为现有技术中多位树的结构示意图;图2为现有技术中多位树在硬件中的查找结构示意图;图3为本发明实施例提供的一种数据处理方法的方法流程图;图4a为本发明实施例提供的一种多位树的结构示意图;图4b为本发明实施例提供的一种多位树的Trie节点创建的结构示意图;图4c为本发明实施例提供的一种迭代操作前的Prefix节点的关联前缀示意图;图5a为本发明实施例提供的一种迭代操作后的多位树的结构示意图;图5b为本发明实施例提供的一种迭代操作后的Trie节点创建的结构示意图;图5c为本发明实施例提供的一种路由查找结构示意图;图6为本发明实施例提供的一种路由查找方法的方法流程图;图7为本发明实施例提供的一种Skip节点的结构示意图;图8为本发明实施例提供的一种Prefix节点的编码方法的示意图;图9为本发明实施例提供的一种Prefix节点的节点结构示意图;图10为本发明实施例提供的一种数据处理装置的装置结构图;图11为本发明实施例提供的一种路由查找装置的装置结构图;图12为本发明实施例提供的一种数据处理装置的装置结构图。具体实施方式现有技术中,在保存路由前缀时,根据路由前缀形成的多位树会被拆分成多级,例如如图2所示,共分为5级,前3级保存3层Trie节点,第4级保存7个Trie节点对应的Prefix节点,第5级保存每个Prefix节点中的前缀对应的RE指针。查找时,输入KEY沿着流水线一级一级走下来,最终得到查找结果。Prefix节点中前缀对应的RE指针或者说下一跳信息被单独保存在一级中,这样在路由查询的过程中,可能需要多次访问内存,更新cache中的内容,造成cache失效的次数较多,浪费系统资源并直接造成查找速度下降。针对现有技术中的问题,本发明实施例提供了一种数据处理方法和装置,通过对多位树的迭代操作,使得迭代后的多位树的总容量小于等于预设容量,更加适合存放于缓存中,且迭代后的多位树的Prefix节点中直接保存了当前最长前缀匹配PLPM和对应Trie节点中路由前缀的下一跳信息,使得在路由查找的过程中可以在得到匹配结果时直接获得对应的下一跳信息,减少在原本在查找时还需要再次访存以获取下一跳信息的过程,由此减少了路由查找的访存次数,也减少了cache失效的次数,直接提高了查找效率。下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。实施例一图3为本发明实施例提供的一种数据处理方法的方法流程图,应用于多位树Trie,所述多位树中包括多个路由前缀,所述方法包括:S301:获取所述多位树的结构中包括至少一个Trie节点和对应的Prefix节点,所述Prefix节点的容量小于等于预设容量,所述Prefix节点包括当前最长前缀匹配PLPM、对应Trie节点中的路由前缀和对应Trie节点中路由前缀的下一跳信息,第一Trie节点为所述至少一个Trie节点中的任一Trie节点,所述第一Trie节点包括对应的位图,所述第一Trie节点对应的Prefix节点包括直接Prefix节点和非直接Prefix节点,所述直接Prefix节点中包括所述第一Trie节点中的路由前缀、所述直接Prefix节点的PLPM和所述第一Trie节点中路由前缀的下一跳信息,所述非直接Prefix节点包括所述第一Trie节点下连接的Trie节点中的路由前缀、所述非直接Prefix的PLPM和所述第一Trie节点下连接的Trie节点中路由前缀的下一跳信息。结合附图说明本发明施例所述的直接Prefix节点和非直接Prefix节点与Trie节点之间的关系,图4a为本发明实施例提供的一种多位树的结构示意图,其中p0的前缀为00*,p1的前缀为000*,p2的前缀为0010*,p3的前缀为00111*,p4的前缀为000000*,p5的前缀为001001*,p6的前缀为0011101*,p7的前缀为0011111*,p8的前缀为00000011*,p9的前缀为000000100*,p10的前缀为001110100*。在长度为4的线性表(DirectTable)下,00位消耗了p1至p10前缀的前两位,在步长为3的情况下,可以划分为如图4a所示的7个Trie节点,分别为T1至T7。根据如图4a所示的多位树的结构获取至少一个Trie节点和对应的前缀Prefix节点,具体可以如图4b所示,图4b为本发明实施例提供的一种多位树的Trie节点创建的结构示意图。其中,T1具有两个Prefix节点,分别为P1和P3,其中P1属于T1的直接Prefix节点,用于保存T1中路由前缀p0、p1和p2。P3属于T1的非直接Prefix节点,用于保存T1下连接的Trie节点的信息、对应的下一跳信息以及P1的PLPM。在本发明实施例中,假设由于容量过大,P3的容量不能大于所述预设容量,故只能保存T3中的信息,其中包括p5的前缀、对应的下一跳信息和P3的PLPM。同理,P4为T4的直接Prefix节点,P7为T4的非直接Prefix节点,P2为T2的直接Prefix节点,P5和P6为T2的非直接Prefix节点。一个Trie节点的Trie子节点最多有2步长个;而Prefix子节点最多可以有2步长+1个。需要注意的是,每个Trie节点都有一个关联前缀。相同地,每个Prefix节点也有一个关联前缀。一个Trie节点的直接Prefix节点的关联前缀跟该Trie节点的关联前缀相同;一个Trie节点的非直接Prefix节点的关联前缀,跟对应的Trie节点的关联前缀相同。一个Trie节点的Trie子节点的关联前缀和它的非直接Prefix节点的关联前缀互不相同。比如图4b中T1的两个Trie子节点T2和T4对应的关联前缀为‘00000*’和‘00111*’,而两个Prefix子节点P1和P3对应的关联前缀为‘00*’和‘00100*’,也就是Trie节点T1和T3对应的关联前缀。S302:进行迭代操作,直到迭代后得到的多位树的总容量小于等于所述预设容量;一次所述迭代操作具体为:利用得到的Prefix节点的关联前缀建立新的多位树,根据所述新的多位树的结构获取Trie节点和对应的Prefix节点,并对应保存本次迭代前相应的位图。结合附图对所述迭代操作进行说明,以图4b为基础,图4c为本发明实施例提供的一种迭代操作前的Prefix节点的关联前缀示意图。如图4c所示,图4b中共包括7个Prefix节点,获取这7个Prefix节点的关联前缀,分别为00*、00100*、00000*、00111*、00111010*、00000011*和00000010*,利用这7个关联前缀进行迭代操作,构建出新的多位树,如图5a所示,图5a为本发明实施例提供的一种迭代操作后的多位树的结构示意图,首先,该多位树的线性表的长度变成了1为,相当于不用线性表,相对于现有技术来说相当于减少了多位树的数量。在第二次迭代创建的如图5a所示多位树中,所有的前缀都正好落在各自所在Trie节点的最底部。这样可以提高Prefix节点编码的效率。根据如图5a所示多位树的结构获取Trie节点和对应的前缀Prefix节点,可以得到如图5b所示的Trie节点和Prefix节点,图5b为本发明实施例提供的一种迭代操作后的Trie节点创建的结构示意图,通过图5a所示的多位树,得到一个Trie节点T21和三个Prefix节点P21、P22和P23,其中P21保存T21中的前缀,是T21的直接Prefix节点。P22保存T22和T24中的前缀;P23保存T23和T25中的前缀,P22和P23分别为T21的非直接Prefix节点。在如图5b所示的结构中,假设创建的多位树已经比较小,多位树的总容量小于等于所述预设容量,停止迭代操作。最终的查找结构由第二代迭代创建的多位树和第一次迭代创建的prefix节点组成。可以如图5c所示,图5c为本发明实施例提供的一种路由查找结构示意图。可见,如图1所示的多位树,现有技术需要使用5级查找结构,本发明实实施例中所举的具体示例中,在前缀多两位的情况下,通过迭代操作,最终得到3级查找结构,这样可以减少路由查找过程中所需访存的次数,同时,本发明实施例中提供的Prefix节点中还直接保存了对应的下一跳信息,进一步的减少了访存次数。需要说明的是,图5b只是一个具体的示例。本发明并不限定只迭代操作一次。同样地,对于第二棵多位树可以采用跟第一棵多位树相同的方法,将所有的Prefix节点作为查找流水线的一级,并把它们的关联前缀作为新的前缀插入到第三棵多位树中。依此类推,通过创建多棵多位树,也就是进行多次迭代,直到最后一棵多位树比较小,可以放在cache中为止。最终的查找结构由最后一个Trie节点和多级Prefix节点组成。对于所述预设容量需要说明的是,所述预设容量根据处理系统的缓存大小决定。一般来说,如果CPU的cacheline是512位,则可以把Prefix节点的最大设为512位,以提高访存效率。由上述实施例可以看出,通过对多位树的迭代操作,使得迭代后的多位树的总容量小于等于预设容量,更加适合存放于缓存中,且迭代后的多位树的Prefix节点中直接保存了当前最长前缀匹配PLPM和对应Trie节点中路由前缀的下一跳信息,使得在路由查找的过程中可以在得到匹配结果时直接获得对应的下一跳信息,减少在原本在查找时还需要再次访存以获取下一跳信息的过程,由此减少了路由查找的访存次数,也减少了cache失效的次数,直接提高了查找效率。接下来将对如何使用如图3所示实施例所建立的路由查找结构进行路由查找。在图3所对应实施例的基础上,图6为本发明实施例提供的一种路由查找方法的方法流程图,所述方法包括:S601:获取待查找路由地址。S602:根据所述待查找路由地址从最后一次迭代得到的多位树开始进行最长前缀匹配LPM,根据匹配到的Prefix节点所包含的位图以及所述待查找路由地址确定上一次迭代中多位树中的Prefix节点。举例说明,在进行查找时,从S302中最后一次迭代操作得到的多位树开始查找,以图5c为例,可以直接从T21开始进行查找。S603:进行循环匹配,直到匹配结果为匹配到未迭代前的多位树中的Prefix节点或出现无匹配前缀;所述循环匹配具体为:根据在第N次迭代中获得的多位树匹配得到的Prefix节点所包含的位图以及所述待查找路由地址确定第N-1次迭代中获得的多位树中的Prefix节点。举例说明,由于通过迭代操作,可以得到如图5c所示的多级路由查找结构,S603的循环匹配可以理解为,按照分级,从所述多级路由查找结构最上一级的Trie节点开始,从上往下逐级查找的过程。通过在Prefix节点中保存的位图以及待查找路由地址,可以确定在下一级中查找哪一个Prefix节点。S604:若所述匹配结果为匹配到未迭代前的多位树中的Prefix节点,则将所述未迭代前的多位树中的Prefix节点中与所述待查找路由地址匹配的路由前缀的下一跳信息作为所述待查找路由地址的下一跳信息。S605:若所述匹配结果为出现无匹配前缀,则将出现无匹配前缀的Prefix节点的PLPM所对应路由前缀的下一跳信息作为所述待查找路由地址的下一跳信息。以图5c为例对S604和S605中的情况进行说明。假设待查找路由地址为00111010011,查找图5c所示多位树,从第一级T21开始,查找到PLPM为00*,根据T21保存的位图以及该待查找路由地址,确定第二级P23,在P23中查找到的PLPM为00111010*,根据P23保存的位图和所述待查找路由地址,确定第三级P7,在P7中查找出的PLPM为001110100*,对应前缀p10,以保存的p10下一跳信息作为所述待查找路由地址的下一跳信息。这种查找情况就类似于S604。若所述待查找路由地址为00111010111。查找过程中,所确定的第二级也是P23,在P23中查找到的PLPM为00111010*,根据P23保存的位图和所述待查找路由地址,确定第三级P7,但是在第三级P7中的匹配结果为五匹配前缀,故将P7的PLPM,也就是P23中p27的前缀的下一跳信息作为所述待查找路由地址的下一跳信息。这种查找情况就类似于S605。接下来,进一步描述本发明实施例提供的一种简化多位树结构的方法,可选的,将多位树中在同一单连接结构中的多个Trie节点作为一个Trie节点处理,所述单连接结构具体包括在所述多位树的连接结构中一个Trie节点下只连接一个Trie节点的结构。举例说明,当Trie结构相对比较简单时,可以将多个处在同一单连接结构中Trie节点当做一个节点进行相应保存,当Trie节点是单子连接的时候,可以将多级Trie节点压缩为一个Skip节点。一个Skip节点可以有最多2步长个Trie子节点和最多1个Prefix子节点。通过附图描述,图7为本发明实施例提供的一种Skip节点的结构示意图。如图7所示,三角形的虚线框中具有四个Trie节点,有4级Trie节点单子连接,并且每一级Trie节点中的子树中都有前缀。在这种情况下,可以把多级单子连接的Trie节点放在一个Skip节点中,并将所有的前缀压缩在1个Prefix子节点中。对于Skip节点,用于索引Trie子节点的结构跟普通Trie节点相同;而用于索引Prefix子节点的结构只需要1位位图和子节点的地址。接下来,本发明实施例还提供了一种优选的保存PLPM、对应Trie节点中的路由前缀和对应Trie节点中路由前缀的下一跳信息的方式。可选的,所述Prefix节点通过至少一个前缀簇(PrefixCLuster,PCL)存储PLPM、对应Trie节点中的路由前缀和对应Trie节点中路由前缀的下一跳信息,所述PCL与Trie节点一一对应。每个PCL由3部分组成:(1)前置分段的个数;(2)表示前缀的位图;(3)前置分段。其中,(1)和(2)所占的位数是固定的,组成PCLHeader。前置分段所占的位数由前置分段的个数和每个分段的长度,也就是步长决定。通过附图举例说明,图8为本发明实施例提供的一种Prefix节点的编码方法的示意图。其中,图8所示的Trie节点中包括了4个Trie节点,分别为T1、T2、T3和T4,包括了6个路由前缀,分别为p1的前缀为1*,p2的前缀为00101*,p3的前缀为10101*,p4的前缀为10111*,p5的前缀为0010011*,p6的前缀为00100101*。所包含的每个Trie节点具有一个对应的PCL,T1对应的PCL1包括p1,T2对应的PCL2包括p2,T3对应的PCL3包括p3和p4,T4对应的PCL4包括p5和p6。PCL的格式可以如表1所示:PCL1:0000100PCL2:001,0010000PCL3:101,1010000PCL4:001,001,0010100表1表1中的7位数字均为对应的位图。3位数字为对应的前缀。假设Prefix节点为256位,每个下一跳信心(REIndex)占20位,则包含如图8所示例子中6条前缀的Prefix节点的结构如图9所示,图9为本发明实施例提供的一种Prefix节点的节点结构示意图。其中,SegNum用于标识该PCL中前置分段的个数;PrefixBitmap用于表示该PCL中哪些前缀是存在的;seg0~segn保存PCL的前置分段。实施例二图10为本发明实施例提供的一种数据处理装置的装置结构图,应用于多位树,所述多位树中包括多个路由前缀,所述数据处理装置1000包括:获取单元1001,用于获取所述多位树的结构中包括至少一个树Trie节点和对应的前缀Prefix节点,所述Prefix节点的容量小于等于预设容量,所述Prefix节点包括当前最长前缀匹配PLPM、对应Trie节点中的路由前缀和对应Trie节点中路由前缀的下一跳信息,第一Trie节点为所述至少一个Trie节点中的任一Trie节点,所述第一Trie节点包括对应的位图,所述第一Trie节点对应的Prefix节点包括直接Prefix节点和非直接Prefix节点,所述直接Prefix节点中包括所述第一Trie节点中的路由前缀、所述直接Prefix节点的PLPM和所述第一Trie节点中路由前缀的下一跳信息,所述非直接Prefix节点包括所述第一Trie节点下连接的Trie节点中的路由前缀、所述非直接Prefix的PLPM和所述第一Trie节点下连接的Trie节点中路由前缀的下一跳信息。需要注意的是,每个Trie节点都有一个关联前缀。相同地,每个Prefix节点也有一个关联前缀。一个Trie节点的直接Prefix节点的关联前缀跟该Trie节点的关联前缀相同;一个Trie节点的非直接Prefix节点的关联前缀,跟对应的Trie节点的关联前缀相同。一个Trie节点的Trie子节点的关联前缀和它的非直接Prefix节点的关联前缀互不相同。所述获取单元1001可以实施实施例一中如S301的方法。这里不再赘述。迭代单元1002,用于进行迭代操作,直到迭代后得到的多位树的总容量小于等于所述预设容量;一次所述迭代操作具体为:利用得到的Prefix节点的关联前缀建立新的多位树,根据所述新的多位树的结构获取Trie节点和对应的Prefix节点,并对应保存本次迭代前相应的位图。所述迭代单元1002可以实施实施例一中如S302的方法。这里不再赘述。本发明实施例中提供的Prefix节点中还直接保存了对应的下一跳信息,进一步的减少了访存次数。对于第二棵多位树可以采用跟第一棵多位树相同的方法,将所有的Prefix节点作为查找流水线的一级,并把它们的关联前缀作为新的前缀插入到第三棵多位树中。依此类推,通过创建多棵多位树,也就是进行多次迭代,直到最后一棵多位树比较小,可以放在cache中为止。最终的查找结构由最后一个Trie节点和多级Prefix节点组成。对于所述预设容量需要说明的是,所述预设容量根据处理系统的缓存大小决定。一般来说,如果CPU的cacheline是512位,则可以把Prefix节点的最大设为512位,以提高访存效率。由上述实施例可以看出,通过对多位树的迭代操作,使得迭代后的多位树的总容量小于等于预设容量,更加适合存放于缓存中,且迭代后的多位树的Prefix节点中直接保存了当前最长前缀匹配PLPM和对应Trie节点中路由前缀的下一跳信息,使得在路由查找的过程中可以在得到匹配结果时直接获得对应的下一跳信息,减少在原本在查找时还需要再次访存以获取下一跳信息的过程,由此减少了路由查找的访存次数,也减少了cache失效的次数,直接提高了查找效率。接下来将对如何使用如图10所示实施例所建立的路由查找结构进行路由查找。在图10所对应实施例的基础上,图11为本发明实施例提供的一种路由查找装置的装置结构图,所述路由查找装置1100包括:接收单元1101,用于获取待查找路由地址。匹配单元1102,用于根据所述待查找路由地址从最后一次迭代得到的多位树开始进行最长前缀匹配LPM,根据匹配到的Prefix节点所包含的位图以及所述待查找路由地址确定上一次迭代中多位树中的Prefix节点;所述匹配单元还用于进行循环匹配,直到匹配结果为匹配到未迭代前的多位树中的Prefix节点或出现无匹配前缀;所述循环匹配具体为:根据在第N次迭代中获得的多位树匹配得到的Prefix节点所包含的位图以及所述待查找路由地址确定第N-1次迭代中获得的多位树中的Prefix节点;若所述匹配单元1102的所述匹配结果为匹配到未迭代前的多位树中的Prefix节点,确定单元1103,用于将所述未迭代前的多位树中的Prefix节点中与所述待查找路由地址匹配的路由前缀的下一跳信息作为所述待查找路由地址的下一跳信息;若所述匹配单元1102的所述匹配结果为出现无匹配前缀,所述确定单元1103还用于将出现无匹配前缀的Prefix节点的PLPM所对应路由前缀的下一跳信息作为所述待查找路由地址的下一跳信息。以图5c为例对所述确定单元1103进行说明。假设待查找路由地址为00111010011,查找图5c所示多位树,从第一级T21开始,查找到PLPM为00*,根据T21保存的位图以及该待查找路由地址,确定第二级P23,在P23中查找到的PLPM为00111010*,根据P23保存的位图和所述待查找路由地址,确定第三级P7,在P7中查找出的PLPM为001110100*,对应前缀p10,以保存的p10下一跳信息作为所述待查找路由地址的下一跳信息。这种查找情况就类似于当所述匹配单元1102的所述匹配结果为匹配到未迭代前的多位树中的Prefix节点时所述匹配单元1102的操作。若所述待查找路由地址为00111010111。查找过程中,所确定的第二级也是P23,在P23中查找到的PLPM为00111010*,根据P23保存的位图和所述待查找路由地址,确定第三级P7,但是在第三级P7中的匹配结果为五匹配前缀,故将P7的PLPM,也就是P23中p27的前缀的下一跳信息作为所述待查找路由地址的下一跳信息。这种查找情况就类似于当所述匹配单元1102的所述匹配结果为为出现无匹配前缀时所述匹配单元1102的操作。接下来,进一步描述本发明实施例提供的一种简化多位树结构的装置,可选的,在图10所对应实施例的基础上,图12为本发明实施例提供的一种数据处理装置的装置结构图,所述数据处理装置1000还包括:处理单元1003,用于将多位树中在同一单连接结构中的多个Trie节点作为一个Trie节点处理,所述单连接结构具体包括在所述多位树的连接结构中一个Trie节点下只连接一个Trie节点的结构。举例说明,当Trie结构相对比较简单时,可以将多个处在同一单连接结构中Trie节点当做一个节点进行相应保存,当Trie节点是单子连接的时候,可以将多级Trie节点压缩为一个Skip节点。一个Skip节点可以有最多2步长个Trie子节点和最多1个Prefix子节点。对于Skip节点,用于索引Trie子节点的结构跟普通Trie节点相同;而用于索引Prefix子节点的结构只需要1位位图和子节点的地址。接下来,本发明实施例还提供了一种优选的保存PLPM、对应Trie节点中的路由前缀和对应Trie节点中路由前缀的下一跳信息的方式。可选的,所述Prefix节点通过至少一个PCL存储PLPM、对应Trie节点中的路由前缀和对应Trie节点中路由前缀的下一跳信息,所述PCL与Trie节点一一对应。本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质可以是下述介质中的至少一种:只读存储器(Read-OnlyMemory,ROM)、RAM、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于设备及系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的设备及系统实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。以上所述仅是本发明的优选实施方式,并非用于限定本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1