Patricia树快速查找方法

文档序号:6458178阅读:334来源:国知局

专利名称::Patricia树快速查找方法
技术领域
:本发明涉及嵌入式系统领域,尤其涉及一种Patricia树快速查找方法。技术背景树查找的方法中,二叉查找树是一种经常使用的数据结构和算法。配以适当的数据结构,二叉查找树能对多种符号表的操作如查找、插入、选择和排序在平均情况下提供快速操作性能。二叉查找树也适合带掩码的条目,变长条目和最长匹配等情况,尤其适合文字条目或包含文字的条目。从二叉查找树的查找过程可见,二叉查找树的查找性能取决于它的深度,然而由于二叉查找树是在查找过程中逐个插入构成,因此它的深度取决于关键字先后插入的次序,二叉查找树算法的运行时间决定于树的形状,要想保证其平均情况下的查找性能,需要定期对树进行平衡优化。另外一种查找树Trie,Trie是一种数字查找树,它来源于单词"Retrieval",意为Retrievaldatafrommem,读作"Try"。该算法采用每次比较关键词的一部分,而不是整个关键词。该方法提供了合理的最糟糕情况下的性能而且无需对Trie树进行平衡优化。但是该方法也有两个重要的缺点,一是该方法对空间的利用率较低;其次是如果希望在空间利用率上有所优化的话就需要增加平均情况下每次查找对内存访问的次数。还有一种查找树,即DonaldR.Momson于1968年提出的Patricia树(PracticalAlgorithmToRetrieveInformationCodedInAlphanumeric)。这是一种基于以二进制表示的键值的查找树,尤其适合于处理非常长的、可变长度的键值。Partricia的基本思想是构建一个二叉树,但不是针对键值中每个比特都形成一个结点,对于那些不影响树中条目查找的比特则不生成结点,因此在每个结点中都包含下一个结点待比较的键值位置信息。该方法的缺点是糟糕情况下的性能并不稳定,因为一次查找可能需要访问树中的较多个结点,每次结点访问必须进行一次内存访问,这对于目前网络对时延和抖动的要求日益苛刻来说是个很大的问题。随着Internet网络用户不断扩大,各种网络应用越来越丰富,用户对各种网络应用的要求不断提高,internet对网络设备的带宽也提出了越来越高的要求。最近几年以及将来的发展趋势来看,internet服务将更加依赖设备的性能;在IP数据传输设备中,影响其转发性能的一个重要因素是报文在转发过程中进行的精确匹配查找各种业务表的效率。满足这种性能需要的一种方式增加内存访问带宽,目前典型的内存访问总线宽度是32,64比特,在嵌入式系统中将内存访问总线增加到256或512比特是可行的,有点遗憾的是目前没有有效的利用高内存访问带宽的优势的算法,单次访问返回有效数据的并没有随内存总线宽度成线性增长;在传统的树查找算法中检查在每次检查结点时都进行一次在内存访问后,一般一个内存结点的大小不到64个比特,而一次内存访问能返回256或512比特,其中大部分空间被浪费了。改进前Patricia查找树算法示例该示例^i殳系统有256比特的内存带宽,在一个内存访问周期内能返回256比特。普通的Patricia树结点结构由下面几项组成结点中关键比特的位置9比特左指针18比特右指针18比特结点是叶子2比特叶子大小左+右4比特总共结点大小51比特由此可见,一次内存访问有256-51-205比特浪费了,相应的内存访问的内容有效利用率为20%。另外,对于一个深度为3的树,需要进行3次内存访问才能访问到树的底部。一般来说,对于一个n个结点的树需要访问d次才能访问到树的底部,d为树的深度。图1是现有技术查找树的结构,描述了一个现有技术下Patricia树的结构,该树包含结点O、1、2、4、5和6,下面连接了B、C、D、E、F和G6个子树的根结点以及叶子A。每个结点的结构都包含关键词比较的位置,左指针指向左子结点或叶子,右指针指向右子结点或叶子。根据惯例,沿一个查找树往下进行查找时,当父结点的比4^比特为0时,下一个待^r查的结点即是该父结点的左子结点,反之上述比较比特为1时下一个待检查的结点为该父结点的右子结点。假设这样一个查找键10100101101010101100在图1所示的树结构下进行查找。首先判断结点O,其关键词的比较比特是第3个比特,键值为1,即根据结点0的右指针查找下一个结点2;结点2关键词的比较比特是第10个比特,键值为O,即根据结点2的左指针查找下一个结点5;结点5关键词的比较比特是第13个比特,键值为1,即根据结点5的右指针查找下一个结点E;另外假设一个关键词10010001011010101100,依次经过结点0和结点1,最后找到叶子A。
发明内容本发明要解决的技术问题是提供一种Patricia树快速查询方法,以减少Patricia查找树算法的内存访问次数,提高查找效率。为了解决上述问题,本发明提供了一种Patricia树快速查询方法,该方法包括以下步骤(a)将Patricia树根据树的深度划分成一个或多个子树;(b)将每个子树的所有结点信息压缩成一个压缩树结构;(c)通过处理器与内存的高带宽访问,一次内存读取获得某个子树的所有信息。进一步地,步骤(b)中的压缩树结构存储在一个连续的内存块中。进一步地,应用该方法的系统内存带宽256比特,步骤(a)中以深度为3将Patricia树划分为一个或多个子树。进一步地,步骤(b)中一个压缩树结构包括第一索引表和第二索引表两部分,第一索引表是该子树的结点和叶子信息,第二索引表是该子树的叶子指针以及该子树下面的子树的根结点指针,该两索引表均包括至少一个条目。进一步地,第一索引表中,每个结点和叶子信息用一个条目表示,包括以下信息该结点是子结点或叶子的信息、该结点的下一个结点或叶子在索引表中的条目索引值、该条目索引值是指向第一索引表或第二索引表中的条目的信息以及该结点在关键词中比较比特的位置信息。进一步地,第一索引表中每一条目占用16比特,其中该结点是子结点或叶子的信息占用1比特,该结点的下一个结点或叶子在索引表中的条目索引值占用3比特,该条目索引值是指向第一索引表还是第二索引表中的条目的信息占用1比特,该结点在关键词中比较比特的位置信息占用9比特。进一步地,第一索引表中的条目索引值分为两类,一类指向第一索引表的某个条目,另一类指向第二索引表的某个条目。进一步地,压缩树结构中所包含的上述结点的子结点或叶子信息是存放在第一索引表的相邻两行,且左子结点或叶子在右子结点或叶子前。进一步地,压缩树结构中所包含的上述结点的子树的根结点指针或者叶子指针存放在第二索引表的相邻两行,且左子树根结点指针或者叶子指针在右子树根结点指针或者叶子指针之前。进一步地,若某结点只有右子结点,则对该结点信息进行压缩处理时,增加左子结点。相较于现有技术,本发明引入了高内存访问带宽下实现高效的Patricia查找树的方法,其有益效果突出表现在三个方面,其一是大大提高了对高内存访问带宽的有效利用;其二是相对改进前的Patricia查找树算法,其内存空间利用率得到了较大提高;尤为重要的第三点是减少了Patricia查找树算法的内存访问次数,提高了该算法的查找效率。图l是现有技术查找树的结构示意图。图2是本发明Patrica树快速查找方法示意图。图3是本发明Patrica查找树的结构示意图。图4是本发明Patrica树快速查找方法所应用的硬件结构示意图。具体实施方式本发明Patricia树快速查找方法如图2所示,包括以下步骤步骤201:将Patricia树根据树的深度划分成一个或多个子树;若以深度为3进行子树划分,当Patricia树深度为3时,根据本发明方法则只有一个子树,当Patricia树深度大于3时,可以划分出多个子树。步骤202:将每个子树的所有结点信息压缩成一个压缩树结构;为了更快地获得结点信息,上述压缩树结构存储在一个连续的内存块中;具体的压缩树结构将在下文进行详细描述。步骤203:通过处理器与内存的高带宽访问,一次内存读取获得某个子树的所有信息,进而提高Patricia树算法的查找性能。本发明方法适用于256比特以上内存带宽的系统,根据该方法的思想设计其数据结构可以到达最优的查找性能。利用处理器执行操作时,上述Patricia查找树或子树中包含所有可能的查找路径,在每条查找路径中至少执行两次查找步骤,在一次内存访问中能执行3个或3个以上上述查找步骤。判断一个结点的过程即为一次查找步骤,内存带宽为256bit时,子树的深度是3,在一次内存访问中能执行3个上述查找步骤;内存为512时,子树深度可以更深,那么每次内存访问能执行更多查找步骤。以下对子树的压缩树结构进行详细描述本发明Patricia查找树方法用于存储和查找信息,其对每个子树的所有结点信息的压缩处理成一个压缩树内存结构,该压缩树内存结构由两部分组成,其一是该子树的结点和叶子信息,其二是该子树的叶子指针以及该子树下面的子树的根结点指针,即索引表A和索引表B。索引表A中每个条目结构相同,都表示一个结点或叶子的信息,条目结构如下结点中关键比特的位置9比特是否为叶子1比特沿该条目查找的下一个条目的索引3比特标识上述的下一个条目的索引值是在索引表A或索引表B中1比特叶子大小2比特总共单个条目结构大小16比特索引表B中的每个条目是一个指针,其大小为18比特;整个压缩树结构的大小为索引表A中7个条目(结点)十索引表B中8个条目(叶子或子树的根结点指针),即7*16+8*18=256比特。因此整个压缩树结构能在一次内存访问中获得。对每个子树的所有结点信息的压缩处理具有以下特点1、Patricia树或子树的所有结点以一个压缩树结构的形式存储,至少一个结点有一个右结点和左结点,所述结点拥有结点属性,一个压缩树结构由索引表A和索引表B表示;索引表A和索引表B均至少包含一个条目;一个结点信息是存放在上述索引表A中的一个条目,条目信息包括该结点是一个子结点或者叶子的信息、该结点的下一个结点或者叶子在索引表中的条目索引值、该条目索引值是指向索引表A或索引表B中的条目的信息以及该结点在关键词中比较比特的位置信息,其中条目索引值分为两类,一类指向下一个结点或叶子,该指针指向索引表A中的某个条目;另一类指向索引表B中的某个条目;2、压缩树结构中所包含的上述结点的子结点或叶子信息是存放在索51表A的相邻两行,且左子结点或叶子在右子结点或叶子前;压缩树结构中所包含的上述结点的子树的根结点指针或者叶子指针存放在索引表B的相邻两行,且左子树纟艮结点指针或者叶子指针在右子树根结点指针或者叶子指针之前。根据上述描述,右结点是放在左结点之后的,没有直接的信息到达右结点,依赖这个规则省掉了右结点的连接信息,因此必须通过左结点的信息到达右结点,如果有右结点而没有左结点,采用本发明方法进行Patricia树快速查询时,需要增加左结点,以图1所示Patricia树为例,采用本发明方法时,应变化为图3所示结构。图3中的树结构和图l很类似,该结构也包含结点O、1、2、4、5和6,下面连接了B、C、D、E、F和G6个子树的根结点。与图l不同的是增加结点3,另外,图1中的结点包含左右指针,图2中已经没有这些信息。图1和图2其实是同一个树,因采用本发明方法图2中添加结点3,添加结点3的目的在于能根据左结点3来找到右结点4。举例说明如下判断结点1的关键bit时,如果是O,那么下一个查找的是结点3,如果是l则查找的是结点4,而如果没有右结点,如结点4,则在应用本发明方法时就没有必要增加结点4。假设系统和
背景技术
示例的硬件环境相同,即有256比特的内存带宽,在一个内存访问周期内能返回256比特,则为了与内存带宽256比特相适应,以深度为3对树进行子树划分,在其他的系统环境中若内存带宽大于256比特,也可以以深度为4或其他合适深度进行子树划分。图3中,Patricia树的每个结点的信息以及各结点的逻辑关系通过压缩存放在表1和表2中。表l即为图3中所描述的树结构中对应的索引表A,如下表所示,索引表A中每个条目表示一个结点。其索引号即为其结点号,并不占实际内存空间。每个条目有一个比特表示该结点是否是叶子,有9比特表示该结点的比较比特在关键词中的位置,有3个比特表示该结点的下一个结点、叶子索引或者指针索引;还有1个比特表示前面所述的3比特是下一个结点、叶子索引或者指针索引;表l<table>tableseeoriginaldocumentpage10</column></row><table><table>tableseeoriginaldocumentpage11</column></row><table>表2为图3中所描述的树结构中对应的索引表B,索引表B中每个条目表示一个子树的根结点指针或者叶子指针;索引表A和索引表B是分别存》文在一个连续的内存块中。表2<table>tableseeoriginaldocumentpage11</column></row><table>下面描述如何将图3所包含的查找树压缩成表1和2,即索引表A和B。首先,结点0存放在表1中的第一个条目(索引号为0),该结点不是叶子,比l^比特在关键词中的位置为3,下一个结点索引为1,因为是下一个结点索引,其标识比特为0;接下来存放的是结点1,该结点不是叶子,比较比特在关键词中的位置为5,下一个叶子索引为3,因为是下一个叶子索引,其标识比特为0;根据惯例右结点或者右叶子是存放在左结点或左叶子之后,因此结点2依次存放继结点l后,即索引号为2的条目上,该条目的下一个结点索引为5;接下来是结点3的条目,该结点是叶子,其下一个是表2中的指针索引0,表2中索引0条目包含的内容即是该叶子的数据指针;结点4的下一个结点为左子树的根结点指针索引,该索引值1是表2的键值,故标识比特为1;还是根据前述惯例,结点4的右子树的根结点指针是存放在表2中继其左左子树根结点指针之后,即C存在放在表2索引值为2的条目中;结点5,6以及子树的根结点D、E、F、G根据上述原则分别存放在表1、表2中。ii由上可以发现,为查找到结点E和叶子A,利用目前已有技术,即图1的方式必须分别进行4次和3次内存访问。在目前对性能要求越来越高的数据处理设备中,多次内存访问操作无疑是其性能的一个关键缺陷所在。采用本发明方法在图3的例子中只需要一次内存访问即可获得深度为3的子树内所有结点的相关信息。另外,为了保证图1中各结点的逻辑连接,每个结点都有左右结点指针,而一般此类指针的长度在20比特左右。本文提出的方法中压缩树结构内部结点间的逻辑关系已经不需要用左右子结点指针来记录,只有叶子或者子树的根结点的指针仍然在索引表2中存在,这样减少了总体内存的消耗量。上述应用实例旨对本发明方法的基本思想进行说明,该方法不受限于例中的应用细节,例中的细节描述只是让该方法更容易理解。如图4所示,本发明方法在以下数据设备中实现,该设备包括数据接口401、网络处理器402、控制CPU403、内存404、交换网4妄口405以及交换网406,其中数据接口401,包括多个物理接口以连接不同的网络,是网络数据包进出芯片的数据通道。网络处理器402,包括微引擎组4021、帧緩存4022,其中,微引擎组4021,在数据帧到达时,对数据帧进行解码分析,提取帧头部和IP包的重要字段作为键值查询路由以及其它业务的查找,根据查询结果做相应的处理。帧緩存4022,在数据帧到达网络处理器时的临时存储区。在数据接收方向上,网络处理器402把从某个物理接口收到的数据帧去除通信接口的封装组成数据包,连同数据包的状态信息一同存入进出数据包帧緩存4022中。微引擎组4021对数据帧进行解码分析,并作各种业务处理;在数据发送方向上,根据数据包緩存4022中的状态信息,对数据包作各种数据业务处理,然后加上通信接口封装,在对应的数据接口401发出。控制CPU403,将路由或其它业务表根据本文提出改进的Patricia查找树算法生成微引擎4021能查找的条目,并放在内存404里面;交换网接口405,将网络处理器处理好的信元送往交换网406。该快速查询设备工作的流程包括如下步骤步骤A.控制CPU403根据各种业务需要生成各种Patricia查找树表,存放在内存404中;步骤B.数据通信接口401接收数据包;步骤C.从数据分组中根据业务需要提取特定字段,形成查找4建值;步骤D.微引擎4021根据键值查找,一次访问即获得与该数据分组键值匹配的结果;步骤E.微引擎4021根据查找的结果作相应处理,并判断是否还有其它业务需要处理,如果有则跳转到步骤C,否则跳转到步骤F;步骤F.微引擎4021对数据分组进行二层数据封装;步骤G.通过数据接口405发送数据包。本发明在高内存访问带宽下实现高效的Patricia查找树的方法,其有益效果突出表现在三个方面,其一是大大提高了对高内存访问带宽的有效利用;其二是相对改进前的Patricia查找树算法,其内存空间利用率得到了较大提高;尤为重要的第三点是减少了Patricia查找树算法的内存访问次数,提高了该算法的查找效率。权利要求1、一种Patricia树快速查询方法,其特征在于,该方法包括以下步骤(a)将Patricia树根据树的深度划分成一个或多个子树;(b)将每个子树的所有结点信息压缩成一个压缩树结构;(c)通过处理器与内存的高带宽访问,一次内存读取获得某个子树的所有信息。2、如权利要求l所述的方法,其特征在于步骤(b)中的压缩树结构存储在一个连续的内存块中。3、如权利要求1所述的方法,其特征在于应用该方法的系统内存带宽256比特,步骤(a)中以深度为3将Patricia树划分为一个或多个子树。4、如权利要求l所述的方法,其特征在于步骤(b)中一个压缩树结构包括第一索引表和第二索引表两部分,第一索引表是该子树的结点和叶子信息,第二索引表是该子树的叶子指针以及该子树下面的子树的根结点指针,该两索引表均包4舌至少一个条目。5、如权利要求4所述的方法,其特征在于第一索引表中,每个结点和叶子信息用一个条目表示,包括以下信息该结点是子结点或叶子的信息、该结点的下一个结点或叶子在索引表中的条目索引值、该条目索引值是指向第一索引表或第二索引表中的条目的信息以及该结点在关键词中比较比特的位置信息。6、如权利要求5所述的方法,其特征在于第一索引表中每一条目占用16比特,其中该结点是子结点或叶子的信息占用1比特,该结点的下一个结点或叶子在索引表中的条目索引值占用3比特,该条目索引值是指向第一索引表还是第二索引表中的条目的信息占用1比特,该结点在关键词中比较比特的位置信息占用9比特。7、如权利要求5所述的方法,其特征在于第一索引表中的条目索引值分为两类,一类指向第一索引表的某个条目,另一类指向第二索引表的某个条目。8、如权利要求4所述的方法,其特征在于压缩树结构中所包含的上述结点的子结点或叶子信息是存放在第一索引表的相邻两行,且左子结点或叶子在右子结点或叶子前。9、如权利要求4所述的方法,其特征在于压缩树结构中所包含的上述结点的子树的根结点指针或者叶子指针存放在第二索引表的相邻两行,且左子树根结点指针或者叶子指针在右子树根结点指针或者叶子指针之前。10、如权利要求1至9中任一项所述的方法,其特征在于若某结点只有右子结点,则对该结点信息进行压缩处理时,增加左子结点。全文摘要本发明提供了一种Patricia树快速查询方法,该方法包括以下步骤(a)将Patricia树根据树的深度划分成一个或多个子树;(b)将每个子树的所有结点信息压缩成一个压缩树结构;(c)通过处理器与内存的高带宽访问,一次内存读取获得某个子树的所有信息,本发明Patricia树快速查询方法可以减少Patricia查找树算法的内存访问次数,提高查找效率。文档编号G06F17/30GK101241499SQ20081000834公开日2008年8月13日申请日期2008年2月26日优先权日2008年2月26日发明者尹旺中申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1