用于ip查找和更新的动态树位图的制作方法

文档序号:7678189阅读:208来源:国知局

专利名称::用于ip查找和更新的动态树位图的制作方法
技术领域
:本发明整体涉及基于IP的数据网络、通信和计算机系统;更具体而言,涉及一种用于通过动态树位图(DTBM,dynamictreebitmap)来表示动态IP路由器表的方法和系统。
背景技术
:随着光网络提供的带宽越来越高,需要更有效的方法来在高性能因特网路由器中进行IP查找和分组分类。通常,路由器被连接到几个不同的网络,并且通常利用含在分组报头中的信息以及分类规则表,将输入分组分类成流。该表被称作"路由器表"(等效于规则表)。当计算机与因特网上的另一计算机通信时,IP数据分组被通过一系列路由器而从源导向目的地,其中,所述一系列路由器读取目的地址,并且将分组重新传输到由该目的地址指示的其目的地或者到另一路由器,该另一路由器将进一步转发该分組直到该分组到达其目的地。在路由器与目的地之间的这些中间步骤的每一步,皮称为"下一跳"。输出接口和下一跳的组合被称为"路由"。由于通常存在超过一个的路由最终将分组导向其目的地,因此,在路由数据分组之前,路由器必须获知可以向其转发该分组的地址集合。通常,用于给定IP地址的合适的路由被编码于部分的或全部的该IP地址本身中。路由器的下一步骤是找到对应于该地址集合中的任何地址的路由。显然,由于存在一系列地址,因此,该路由器可以找到与该分组的地址相匹配的超过一个的路由。该路由器的任务是找到以下地址所定义的最佳路由,即该地址具有最多的与该分组的目的地址一样的位(bit)。通常使用分组的目的地址来完成分组分类。每个路由器表规则均是一对表单(F,NH),其中,F是过滤器,并且NH是下一跳。过滤器是目的地址前缀,其与具有该前缀的所有目的地址相匹配。关联的规则表被称为LMPT,并且W被用于指明前缀的最大可能长度。例如,过滤器10*匹配于从位序列(bitsequence)10开始的所有目的地址。通过使用路由查找表,路由器必然确定输出接口端口,由此而从连接到该接口的节点转发分组以及该分组的下一影L通常,路由器表前缀的长度不能超过目的地址的长度W。对于网际协议第4版本(IPv4)来说,转发判定是基于在每个分组的报头中所携带的32位目的地址,并且W被认为是32位的。路由器的每个端口处的查找引擎使用适当的路由数据结构,以便为该分组的目的地址确定合适的输出链路。类似地,对于网际协议第6版本(IPv6)来说,转发判定是基于在每个分组的报头中所携带的128位目的地址,并且W被认为是128位的。常规地,路由器查找操作以线性方式实现。为了匹配而检查查找表中的每个条目。即使在找到匹配之后,该操作也必须持续贯穿该表以确定找到最佳匹配。由于因特网路由器表可以含有与给定目的地址d相匹配的若干规则,因此,打破僵局者(tiebreaker)被用于从与该目的地址匹配的规则集合中选择规则。通常,通过选择与这样的最长前缀相关联的下一跳来打破僵局,其中,该最长前缀经由最长前缀匹配而与分组的目的地址相匹配。近年来已经较多地研究了用于最长前缀匹配的智:据结构。三态内容可寻址存储器(TCAM)使用并行性来获得O(l)查找。TCAM的每个存储单元可以被设置成三种状态"0"、"1"和"?"(随意)中的一个。路由器表的前缀按照前缀长度的降序被存储在TCAM中。假设TCAM的每个字具有32个单元,则前缀IOM皮存储在TCAM字中作为10...,其中,?指明"随意",并且在给定序列中存在30个?。为了进行最长前缀匹配,针对每个TCAM条目以及由TCAM仲裁逻辑所报告的第一(即,最长)匹配条目,对该目的地址进行并行匹配。因而,使用TCAM和按长度排序的线性列表,可以在O(l)时间内确定最长匹配前缀。可以在O(q)时间内插入或删除前缀,其中q是该表中不同前缀长度的数目。尽管TCAM为静态和动态路由器表提供了简单和有效的解决方案,然而,该解决方案相对于其它当前解决方案来说,需要专门化的硬件、更多的成本,并且使用更多的动力和板空间。在针对该问题的大量的一系列解决方案中,4艮少能达到性能、效率和成本的良好平衡。动态IP路由器表在本领域中是已知的,并且若干数据结构已经净皮提出用于动态LMPT。(参见美国专利No.7,031,320(下文称为'320专利))。特别地,该'320专利教导使用用于路由表的跳跃列表(skiplist),其中查找、插入、删除和更新必须从头节点开始(第8栏,第22-26行)。每个节点具有单个指针或多个指针,并且最左边的节点被称为头节点。另外,每个前缀长度具有其自己的散列表(hashtable),以便存储匹配于对应前缀长度的路由条目。每个散列表仅存储精确匹配于其前缀长度的路由条目(第9栏,第17-27行)。每个节点具有范围从32到24的路由条目,并且如果存在对应于范围从32到24(且包括32和24)的每个前缀长度的路由条目,那么对应节点将具有指向九(9)个不同散列表的九(9)个指针。尽管这些结构可以改进插/W删除的复杂性,然而,该改进是以查找的复杂性为代价的。用于动态LMPT的树位图(TBM)数据结构已经由Eatherton等人之前在"Treebitmap:hardware/softwareIPlookupswithincrementalupdates"(SIGCOMMComput.Commun.Rev.,34(2):97-122,2004)中提出,以便改进查找的复杂性。(另外参见美国专利申请No.2005/0157712)。尽管该数据结构导致了快速查找,然而,插入和删除造成过多的存储器访问。在插入和删除操作上TBM的糟糕性能的原因在于以下事实在TBM中,节点的子代被存储在使用可变大小的存储块的邻近存储器中。这对插入和删除操作有两个不利后果。首先,需要复杂的存储器管理系统来分配和解除分配可变大小的存储块。其次,对前缀的插入和删除可能显著地改变节点所具有的子代的数目,从而导致糟糕的性能。这需要解除分配旧的存储块以及分配新的存储块。因此,在最差情况下,8每个插入和删除可能需要超过3000次存储器访问。涉及使用内容可寻址存储器的硬件解决方案以及涉及修改网际协议的解决方案(即,向每个分组附加信息)也已经被提出以便提高路由分组的效率。不幸的是,专门化的硬件解决方案昂贵并且难以有效地使特定的需要个性化。因此,需要一种数据结构和方法,其在不顾此失彼的情况下提供非常高的查找和更新速率,达到性能、效率和成本的良好平衡。
发明内容本发明提供了用于通过动态树位图(DTBM)来表示动态IP路由器表的方法和系统,所述动态树位图(DTBM)支持非常高的查找和更新速率。通过启用高速路由查找和更新操作,作为性能瓶颈的路由器被减少并且在某些情况下4皮消除。如本发明所涵盖的,通过使用一种被称为动态树位图(DTBM)的新型数据结构来构造动态路由表,所述动态树位图(DTBM)使用每个节点的子代指针的阵列(anarrayofchildpointers)而不是在邻近存储器中的常规存储。作为树位图(TBM)的有效替代,在新颖的DTBM中,每个节点均具有子代指针的阵列。该变化极大地简化了存储器管理并且导致非常快的插入和删除,同时不必牺牲查找速度。本发明所需要的附加存储器都很好地处于市售SRAM的容量之内。相应地,本发明的特征包括针对数据结构的实施例,所述数据结构合并了下一跳阵列、子代指针的阵列、每个节点的非空子代数的计数、使用自由节点的单个链的存储器管理、使用组装模式(packedmode)(在该模式下,若干叶(没有其自己的后续子代的最外侧的子节点)被组装成单个28字的节点(可选地,12字的节点和/或8字的节点))的存储器管理,或者懒惰模式操作(在该模式下,通过将节点的位设置成0并且不解除分配该节点来实现前缀删除)。另外,本发明中还包括^f吏用动态树位图插入和删除前缀的方法。本发明的优点众多。本发明的一个显著优点是其提供了一种数据结构,该数据结构通过达到很高的查找和更新速率而允许简单的存储器管理和更好的系统资源分配。根据下面的详细描述,结合通过例子说明了本发明的原理的附图,本发明的其它方面和优点将变得显而易见。图1A是前缀集合R的一位Trie(特里结构)表示;图IB是其高度为2的满Trie(fullTrie);图2是为d找到最长匹配前缀的长度的算法;图3是一位Trie(one-bitTrie)的步幅3(stride-3)(SFE)全扩展;图4是动态树位图(DTBM)结构的图形表示;图5是用于DTBM节点的通用格式的图形表示;图6是用于DTBM的查找算法;图7是将前缀p插入DTBM(其步幅为s)的算法;图8是从DTBM删除前缀p的算法;图9是由fife/ete(p)所使用的清理算法;图IO是用于懒惰模式的前缀插入的算法;以及图11是用于懒惰模式的前缀删除的算法。应当理解,在某些情况下,由于计算效率或方l更维护的原因,本领域的技术人员可以重新安排或重新关联所示出的流程图的块的顺序和关系。具体实施例方式本发明涉及用于改进路由器操作以及使用一种数据结构的方法,该数据结构通过获得非常高的查找和更新速率来允许简单的存储器管理和更好的系统资源分配。该结构能够在不必牺牲查找速度的情况下支持非常高的更新速率。本发明针对该数据结构和方法,其用于使用动态树位图结构(DTBM)来进行IP查找、插入和删除,该动态树位图结构利用了每个节点的子代指针的阵列,而不是典型的使用指向子代阵列的一个指针的TBM方法。在本发明的一个实施例中,对于一位Trie中的任何节点x来说,prefix(x)是从根到x的路径的编码。图l(a)示出了前缀集合R={*,01*,1*}的一位Trie表示。左分支向编码添加0并且右分支添加1。该编码总是以*结束。例如,prefix(root)==*、prefix(root.left)=0*、prefix(root.right)=1*,以及prefix(root.left.left)=00*。当且仅当prefix(x)是集合R的元素时,节点x被阴影化。如果图1(a)的一位Trie被扩展成高度为2的满Trie(图1(b)),则可以使用前缀位图(也称为内部位图(IBM))来简洁地表示这一满Trie,其中,该前缀位图是通过在每个阴影节点中放置1并在每个非阴影节点中放置0且然后以层级顺序列出这些节点位来获得的。对于图1(b)的满Trie来说,该层级顺序遍历产生IBM1010100。在另一实施例中,高度为A的满一位Trie的IBM正好具有2A+1-1位,该Trie中的每个节点有一位。如果从1开始按照层级顺序对IBM的位进行编号,那么可以通过使用以下公式来对游走(walk)经过对应的满Trie进行仿真i'的左子代(leftchild)是2/,右子代(rightchild)是2/+1,并且父代是//2(S.Sahni,"Datastructures,algorithms,andapplicationsinJava",McGrawHill,NY,2000,pg.833)。为了为最长匹配前缀获得下一跳,IBM4皮补充了称为wejc^fe/的下一跳阵列,其存储了含于满Trie的节点中的下一跳。对于高度为A的满Trie来说,下一跳阵列的大小是2"Ll。对于所示例的Trie来说,该wdfi/o/阵列具有七个条目,其中四个为空。在本发明的一个实施例中,通过仿真从Trie根开始的自顶到底的游走并且使用目的地址中的那些位,找到与最长匹配前缀相关联的下一跳。所仿真的游走移动经过IBM的那些位,躍J宗所看到的最后的1。如果最后的1处于IBM的位置i,则从wa^^/;阵列的位置/检索下一跳。在另一实施例中,备选策略是从该Trie的适当的叶(leaf)开始,并且朝着根向上移动,在IBM中遇到的最初的1处停止。如果d,bits(/)是由目的地址d的最初的y位表示的整数,那么对于所有的d,d.bits(0)=0,并ii且对于</=1012来说,d.bits(l)=l2=l、d.bits(2)=102=2,以及d.bits(3)=1012=5。在d具有少于/位的情况下,那么通过首先向d附加足够的0来获得d,bits(/),以便新的d具有/'位。在另一实施例中,对于高度为A的满Trie来说,自顶向下的搜索终止在其索引(index)是2呌d.bits(/0的叶。例如,在图1(b)中,当</=1012并且A=2时,该搜索终止在被标记为22+2=6的叶。在又一实施例中,遍历可以从IBM的位2力+dJbits(/i)开始,并且对于每次到父代的移动,可以通过将当前的位索引除以2来仿真对Trie的向上游走。当到达值为1的位或当位索引变成0时,所仿真的游走终止。图2给出了使用该备选策略的算法,以便为d找到最长匹配前缀的长度。IBM(/)返回IBM的第/位(注意,这些位从1开始编号)。在另一实施例中,选择了步幅s,并且构建了一位Trie的步幅s全扩展(SFE)。通过从根开始将一位Trie分割成高度为的子Trie来获得该SFE。没有后代的分割可以具有小于&1的高度。然后将每个分割扩展成高度为s-l的满Trie。图3示出了步幅-3SFE的例子。在分割X4中,根及其左子代还处在针对前缀集合的原始的一位Trie中。添加其余的4个节点以便将分割完成为高度为2的满Trie。在另一实施例中,步幅-sSFE的每个分割是通过2、l位IBM、大小为2:1的wa诏^7阵列、子代指针的阵列以及该分割的非空子代数的计数来表示的。子代指针的阵列可以容纳指向子代分割的25个指针。图4示出了图3的步幅-3SFE的表示。该图的每个节点表示了步幅-3分割。每个节点的第一字段是其IBM,第二字段是子代的计数,并且接下来的^个字段是子代指针。因此,图4定义了动态树位图(DTBM)结构。图5示出了用于DTBM节点的一般格式。术语的定义如文中所使用的术语"子代"或"多个子代"指的是任何给定节点所指向的后续节点。如文中所使用的术语"节点"指的是i^树结构的入口。如文中所4吏用的术语"过滤器"指的是IP地址前缀。如文中所使用的术语"父代"指的是指向任何给定节点或子代的节点。如文中所使用的术语"根"指的是树结构的顶端节点,并且术语"叶"指的是没有子代的节点。如文中所使用的术语"步幅"指的是二进制Trie(binaryTrie)的组在一起的树层级的数目,或者作为在单个读操作中所访问的树中的层级数(其表示树或Trie中的多个层级)。如文中所使用的术语"Trie"指的是为了搜索数据所组织的一种特殊的树结构。查找算法图6给出了DTBM的to^"/;(查找)算法,node.pointers[f]位置返回第/个子代指针,并且wa出ro/7[/]位置返回当前DTBM节点的w^出^/;阵列中的第/个条目。子代索引从0开始,并且下一跳索引从l开始。例如,当搜索DTBM时,如图4中所示,使用d=11101112,使用的最初2位(11)来搜索由节点Xi表示的分割。因此,XLlBM.llmp(力返回1,并且j;净皮设置成x"而/^/,/mjfec4皮设置成2^1=3。由于d.bits(s)=d.bits(3)=7,因此节点被更新成X3。此外,t/被左移p3位而变成01112。接下来,使用所更新的d的最初2位(01)来搜索由x3表示的分割,并且X3,IBM.llmp(/0返回2。因此,j;被更新成x3并且/^//w^x;被更新成5。此时,d.bits(3)=3并且节点被更新成x4。在左移3位之后,</变成12。为了搜索X4,必须将O附加到^/以获得102。接下来,可以从位置22+2=6开始搜索X4的IBM。该搜索返回-1并且节点被更新为空。现在通过退出do循环,返回X3的Wfc^好0/5]值。插入前缀图7给出了将前缀插入步幅为s的DTBM中的算法。在第3行至第6《亍的while循环中,向下游走DTBM每次一个节点消耗/7的s位。当/;具有剩余少于s位或者不存在将要移至的下一DTBM节点时,该游走终止。在后一种情况下,我们向DTBM添加节点,继续每次采样/7的s位,直到/;中所剩少于s位。/;的剩余位(少于s)被用于将户插入到所遇到的最后节点Z。如果/7没有剩余位,则Z的最左边的IBM位械j殳置成1,并且Z.nextHop[ll被设置成用于/;的下一跳。否则,Z的IBM的位2P'ength+p.bits(p.length)被设置成1,并且对应的w^cr好o/7条目被设置成用于/7的下一跳。删除前缀图8给出了从DTBM删除前缀的算法。该算法首先搜索含有/7的DTBM节点。在该搜索期间,具有计数字段等于1并且IBM等于0的最后的节点序列,以及用于从该序列中的每个节点进行移动的子代指针的索引,一起被存储在阵列节点中。每当搜索到达具有大于0的计数或具有非零IBM字段的DTBM节点时,该序列就被重新设置为空。当在DTBM中找到p的情况下,将p从其DTBM节点Z中移除。如果现在Z的IBM是0并且Z没有子代,那么(使用图9中的^/Weae"fi"/7(删除清理)方法)删除Z及其具有等于1的计数和等于0的IBM的邻近先辈(ancestors)。存在三种可能的操作模式用于DTBM-自由(free)、组装(packed)和懒惰(lazy)。为了分析这三种模式的每一种模式中DTBM数据结构的性能,利用CypressFullFlex双端口(Dual-Port)SRAM在计算机上实现该数据结构。该SRAM的存储容量是36Mb(512K个72位的字)。该SRAM具有两个独立端口,这两个端口都支持读和写。可以在2个周期内(即,8ns,使用250MHz的时钟)通过任何一个端口来读/写72位的字。然而,多个读/写可以是流水线式的(pipelined),并且每个附加字都可以在单个周期(4ns)中被读/写。假设CPU足够快,从而使得查找、插入和删除所需的时间受控于W向SRAM读/写数据的时间。因此,通过对存储器访问数(最坏情况)进行计数来分析查找、插入14和删除的复杂性。在SRAM中,在单个存储器访问中可以读/写两个字。当该分析以及特定的DTBM实现是所选择的SRAM所特有的时,这些概念可以很容易地4皮应用于任何其它的SRAM。试验结果为了评估DTBM结构与两种其它的结构一BaRT(Lunteren,J.,"SearchingverylargeroutingtablesinfastSRAM",/VwrnZ/figs1/C(X7V,2001以及Lunteren,J."Searchverylargeroutingtablesinwideembeddedmemory,,/Vocmf/wgs1G7o6m附,2001)和TBM(Eatherton,W.,G.Varghese,Z.Dittia"Treebitmap:hardware/softwareIPlookupswithincrementalupdates"JO/57(7C(MMC。附/7"/erCV附附""/c"&》"JeW,,34,2,April2004)的动态路由器表的功效,假设每个存储器访问需要两个周期。对于BaRT来说,Lunteren,J.中所报告的版本8888,86558和844448(Lunteren,J.,"SearchingverylargeroutingtablesinfastSRAM",/CCC7V,2001)被用于独立模式,并且对于TBM来说,使用Eatherton等人的13-4_4画4_4_3软件参考设计(Eatherton,W.,G.Varghese,Z.Dittia"Treebitmap:hardware/softwareIPlookupswithincrementalupdates"JCM57GCOAfMC^附pwferCo淤/wwmca,/owl^v/ew,34,2,April2004)。尽管CypressFullFlex双端口SRAM能够使存储器访问流水线,从而使得除了第一访问之外的所有访问都各花费一个周期,然而,所考虑的数据结构都不能使用该特征。因而,周期数变成存储器访问数的两倍。表l给出了最坏情况下对于所考虑的数据结构来说查找和更新所需要的周期数。如表1中可见的,DTBM变体具有好得多的更新特性;在查找周期上它们都是可比较的。15表1:存储器要求以及最坏情况下的查找和更新时间<table>tableseeoriginaldocumentpage16</column></row><table>(a).排除用于存储管理的存储器访问。(b).当我们接近用完存储器时需要重建数据结构。表l还给出了6种公共可用的路由器表的不同数据结构所需要的存储器。数据库Paixl、Pbl、MaeWest和Aads是在2001年11月22日获得的,而Pb2和Paix2是在2000年9月13日从Merit,Ipmastatistics,http:〃nic.meritedu/ii3ma获得的,并且现在通过例如众所周知的因特网存档服务便可获得。这6种数据库的大小范围从低的16,172(Paixl)个规则到高的85,987(Paix2)个规则。尽管主题DTBM方案比BaRT和TBM方案占用稍多的存储器,然而所薷要的存储器是可接受的,并且在当前技术的范围之内。下面是说明用于实施本发明的过程的例子。这些例子不应当被解释为限制性的。例子l一自由模式位图在该模式中,使用自由节点的单链来完成存储器管理,在该单链上的每个节点都具有相同的大小。通过移除该链上的第一节点来分配节点,并且通过向该链的前端添加被解除分配的节点来解除分配节点。所有的存储器都被初始化为0,并且每当节点被解除分配时,所有其子代字段也都是o。因此,这些算法是在每次分配节点时无需显性地将子代指针设置为0的情况下工作。由于使用简单的存储器管理方案,因此,对于总共2个周期,节点分配和解除分配各需要单个存储器访问。对于SRAM72位长的字来说,可以使用的而具有适合于字的IBM的最大步幅是《=6。由于IPv4前缀的最大长度是32,且步幅为6,因此DTBM最多具有6个层级。这六个层级的步幅可以有几种可能的选择。每种选择在每次操作的时间与存储器使用之间提供不同的平衡。在一个实施例中,所描述的称为366666的实施方式对DTBM的根使用步幅3并且对其余的DTBM节点使用步幅6。从0(根)到5对这些层级编号。DTBM的根需要7位的IBM,八个子代指针和七个wex,fl^/7字段。步幅-3的DTBM根是通过在寄存器中存储其IBM并且在预定的存储位置中存储其weW好^7字段来表示的。这8个子代指针被消除,并且作为替代,编号1到8的节点被指定为DTBM的根的(多达)八个子代。因为从不删除根,所以没有为^^储计数字段。节点需要63位的IBM、6位的计数字段、64个子代指针以及63个"ex^^/;字段。如果向每个指针分配18位,则256K个节点可以被编写索引。对于64个子代指针来说,需要16个72位的字。对于每个字段来说,分配了12位。这对于4096个不同的麼x,i/0/7可能性来说U够的。因此,为了容纳所有所需的we^i^/;字段,需要11个字。因而,每个节点使用28个字。节点被编写索引1、2等等。通过将节点索引乘以28并且可能的话添加偏移,可以确定节点的第一个字。在我们的18位的指针字段的情况下,有可能编写索引多达7M个字,这远大于所考虑的SRAM的大小。对于查找来说,从层级0(根)移动到层级1不需要存储器访问。在层级1,IBM以及单个节点的子代指针被访问。通过检查目的地址中的5=6位来确定所需要的子代指针。根据这^位并且知道节点在存储器中的起始位置以及节点结构,人们可以计算含有所期望的子代指针的字的索引。因此,可以获得使用SRAM的一个端口的IBM以及使用其它端口的子代指针。因此,从层级1移动到层级2需要总共2个周期(或单个存储器访问)。事实上,每个后续的向下移动TDBM都花费相同的时间量。在最坏的情况下,查找需要四次这样的移动(之后是对层级-5的IBM的读取),总时间为10个周期。最后,需要另一次存储器访问以获得最长匹配前缀的下一跳。因此,最坏情况下的查找时间是12个周期(或48ns)。因而,预计每秒约2100万次查找。对于插入来说,最坏情况是当在层级2到5中的每个层级处,该插入都需要添加新的节点的时候。为此,必须以四次存储器访问或8个周期为代价来分配四个节点。另外,必须更新计数字段,并且必须在层级1到4的每个层级处的节点中设置子代指针,并且必须设置层级-5的节点的IBM字段和w^^i7o;p字段。使用双端口存储器,可以设置在2个周期中每个节点中所需要的两个字段。因此,在最坏的情况下,插入需要18个周期。对于删除来说,最坏情况发生在处于层级-5的节点中的前缀和用于该删除的清理步骤被删除的时候。由于节点1到8不能被分配(因为它们被保留用于层级l),因此,解除分配发生在层级2到5中的每个层级。通过进行四次读取而到达所期望的层级-5的节点。当读取所到达的层级-5的节点的IBM时,应当检验在前缀删除之后其变成0。这需要另外的读取。在此,四个子代指针必须,皮设置成0,并且必须解除分配四个节点。在解除分配节点的同时可以完成O指针的写入。因此,删除最多需要九次存储器访问或18个周期。在自由模式中,TDBM中的多数节点是叶,并且可以通过检查叶的计数字段(其为O)来检测叶。因此,叶并不需要子代字段。这些字段占了构成节点的28个字中的16个字。例子2—组装模式位图在对改进TDBM结构的存储器效率的努力中,组装才莫式是这样一个例子,即在该^=莫式中,可以将若干叶组装到单个28字的节点中。28字的节点可以#:称为类型A节点。对于组装模式来说,人们可以考虑466656的实施方式。该实施方式的促成在于观察到实际上IPv4规则表具有非常少的长度超过24的前缀。因此,预计到366666DTBM在层级5具有非常少的节点。因此,事实上层级4的所有节点都是叶。进一步地,预计到在层级2和3有非常少的叶。在466656设计中,在层级5使用类型B节点,并且在层级4使用类型C节点。在466656TDBM中,根步幅是4,在层级4的步幅是5,并且在其它每一层级的步幅是6。DTBM的根需要15位的IBM、16个子代指针和15个we^i7o/7字段。如366666设计的情况,DTBM根是通过将其IBM存储在寄存器中并且将其字段存储在预定的存储位置中来表示的。16个子代指针,皮消除,并且作为替代,编号1到16的类型A节点被指定为DTBM的根的(多达)16个子代。类型C节点的大小是8个字。层级4的叶是4吏用单个类型C节点来表示的。该节点的第一个字被用于存储31位的IBM、5位的计数字段、18位的指针(其为空)以及12位的w。:f/r印字段。接下来的6个字被用于存储其余的30个wexd^p字段。最后的字未使用。层级-4的非叶(non-leaf)使用2个类型C节点。第一个用于层级4的叶(除了指针字段现在指向第二个类型C节点之外)。第二个类型C节点存储32个18位的子代指针。类型B节点需要12个字,并且具有除了计数字段和子代指针之外的类型A节点的所有字段。注意到,利用18位的指针,人们可以仅对如在自由模式中被编写索引的那么多的存储器的四分之一编写索引。这是因为类型A节点中的指针需要指向嵌在类型A节点内的类型C节点。尽管存在三种节点类型,然而存储器管理相对简单。可用的存储器被分成类型A节点。类型A节点可以被用作类型A节点,或者可以用于容納三个类型C节点(CCC),留下四个字未使用。类型A节点还可以被用于容纳两个类型C节点和一个类型B节点(CCB)。当在后两种方式中使用时,最初八个字需要被用作具有IBM、计数和下一跳的类型C节点。这提供了随意用于控制信息的被组装到类型A节点的第一个类型C节点中的最后一个字(即,类型A节点的字8)。28字的节点的字8被称为其控制字。子代指针总是指向在类型A、B或C节点中的第一个字。如果从0开始对这些字编写索引,那么子代指针可以被认为是4的倍数,并且因而其最后两位(它们总是0)不需要被存储。使用19位的子代指针,对多达1M个字寻址是可行的。由于字(或字中的位)具有多重用途(IBM、子代指针、下一跳),因此,删除操作将与^f皮删除的前缀相关联的所有的位设置成0是有必要的。在一个实施例中,可以维护七个自由列表,/r^[(h61,且阵列索引中的各个位标识了每个列表上的节点的状态。例如,//^、/尸"[1002和/>^[1102]的任何一个中分配类型B节点。在不能从其择优列表之一中分配类型B或C节点的情况下,从//^0进行分配。当从列表/"e0中分配类型B节点时,从列表/z^[o]的前端移除所分配的节点,并且将其放到列表/"40012上,等等。例如,假i殳处于/"41002的前端的节点X将被分配用作类型B节点。需要1次存储器访问以便从/^41002]移除该节点,这是因为//^[1002必须被重新设置成该列表上的下一节点(这要求读取x的控制字)。并不对在,^[1002的前端的新节点的控制字进4于读或写,因为其在先指针不需要被设置成空。而是会将X添加到/we10l2的前端。x的控制字的下一字段,皮设置成/"e[1012;并且写入该控制字和读取/"410121的控制字(使用两个存储器端口在相同的存储器访问中完成该读取和写入)。//^[1012l的控制字中的在先指针被改成X,并且被写回到存储器。因此,需要两次存储器访问,以便将x添加到/"4ioi2的前端。对于节点分配的最坏情况的存储器访问是三次,以6个周期为代价。更确切地,需要一次存储器访问来分配类型A的节点,以及多达3次存储器访问来分配类型B或C的节点。为了从层级2和3解除分配节点,被解除分配的节点被添加到/zw是链)。为了解除分配任何其它的节点,28字的节点的开始必须首先^皮计算(其中容纳该节点)。例如,令x是类型B或类型C节点的开始。该节点被容纳在开始于;;=^/28」*28的类型A节点中。读取开始于的该类型A节点的控制字,并且计算该节点的新状态。在最坏的情况下,必须将该类型A节点从一个双链接自由列表的中部移动到另一个双链接自由列表的前端。根据j;的控制字,可以确定其当前、在先和下一节点。可以读取和修改这些在先和下一节点的控制字,以便反映使用双端口存储器在两次存储器访问的情况下对_v的删除。将y添加到其新自由列表的前端需要另外多达两次的存储器访问。因而,解除分配类型B或C的节点可以构成多达五次访问;利用单个存储器访问可以解除分配类型A的节点。在466656方案中的最坏情况的查找代价相比于在366666方案中多2个周期,因为在层级4,IBM和子代指针不能够^L并行地访问。必须首先访问在层级3的节点中使用子代指针的类型C节点,然后使用该类型C节21点中的指针,可以确定下一个类型C节点(其含有指向所期望的层级5的节点的子代指针)中的字。因而,总的查找时间是14个周期。对于插入来说,最坏情况是当该插入需要在层级2到5的每个层级处都添加新节点的时候。必须分配两个类型A节点和三个类型B或C节点。由于可以在对于从任何一个其它列表的分配的第一读取访问期间完成从/"401的分配,因此,分配所需的五个节点所需要的最坏情况的访问是九次访问。另外,必须更新计数字段,并且必须在层级1到3的每个层级处的节点中设置子代指针。除了在层级4的类型C节点中的子代指针、IBM字段以及层级5的节点的"m汲o/7字段之外,必须设置在层级4处的类型C节点的计数和下一字段。使用双端口存储器,可以在2个周期中设置这六个节点的每个节点中所要求的字段。因此,插入在最坏情况下需要30(15次存储器访问)个周期。对于删除来说,最坏情况发生在当删除了处于层级5的节点中的前缀以及清理步骤,解除分配在层级2和3的每个层级处的类型A节点、在层级4处的两个类型C节点以及在层级5处的一个类型B节点的时候。这些节点解除分配具有17个存储器访问(34个周期)的额定的最坏情况代价。通过在以下时间片(slot)中解除分配类型A节点,可以将最坏情况代价降低到15个存储器访问,即在该时间片中,对于其佘三个节点的解除分配仅使用双端口存储器中的一个端口。通过进行5次读取,可以到达所期望的层级5的节点。所到达的层级5的节点的IBM可以被读取,并且被检验出在前缀删除之后其变成0。下一步骤是写出OIBM,将所删除的前缀的fi^很o/;字段设置成0,以及将层级4的类型C节点中的下一指针设置成0。这需要另外两次访问。在被解除分配的五个节点的三个中以及在层级l的节点中,子代指针需要被设置成空。可以利用两次存储器访问将这四个子代指针设置成空。总的存储器访问数是24(对于48的周期计数来^L)。例子3—懒惰模式位图在该模式中,通过将含有所删除的前缀的节点的IBM的适当的位简单22地设置成0来完成前缀删除。并不完成由flfe/eteaeaw"/7所实现的清理动作。因此,节点从不被解除分配。虽然从其对清理动作的消除很容易看出懒惰模式操作支持更快的删除,但是懒惰模式操作还加快了插入,因为存储器管理被简化了。除了降低最坏情况下用于插入的时间之外,还可以降低一般情况下的时间,因为将来的插入可以重新使用那些若非如此则会在删除的清理阶段期间就被解除分配的节点。为了防止不能进行插入的风险,优选地,每当"接近"用完存储器时就重建数据结构。重建时间(甚至是对大型路由器表来说)是数十毫秒的量级。在懒惰模式的操作中,计数字段(图5)是不需要的,因为该字段仅用于帮助确定在删除的清理阶段中将要解除分配哪些节点。图10和图11给出了在懒惰模式的操作下用于插入和删除的算法。366666和466656DTBM这二者的懒惰模式实现均被评估。对于366666来说,对层级1到4使用了类型A节点并且对层级5使用了类型B节点。DTBM的才艮被存储为用于非懒惰实现;编号为1到8的类型A节点被用于DTBM的根的(多达)八个子代。尽管在该模式中并未使用计数字段,然而类型A和类型B节点的大小并不改变。也就是说,类型A节点长28个字,并且类型B节点是12个字。由于在懒惰模式操作中从不解除分配节点,并且由于类型A节点从不作为插入或删除的结果而变成类型B节点(或相反),因此可以使用相当简单的存储器管理方案。待管理的存储器是一块邻近的字。该块中所有的位都净皮初始化成零。从该块的一端分配类型A节点,并且从另一端分配类型B节点。当分配了节点时,向其分派索引。类型A节点-故编写索引1、2、3等等。以相同方式对类型B节点编写索引。类型A节点中的子代指针存储了其所指向的节点的索引。当导航通过DTBM时,从其当前所处的层级推断节点的类型,并且通过将节点索引乘以其大小(28或12)并将结果添加到基地址或从基地址减去该结果,而获得该节点中的第一个字。由于每个节点至少长12个字,因此在SRAM中有可能少于44K个节点。与非懒惰366666DTM—样,查找时间也是12个周期。对于插入来说,23最坏情况是当新的前缀进入到新的层级5的节点或现有层级5的节点中的时候。考虑前一种情况,这样的插入需要从层级1到4的每个层级处(可选地,在其中没有要读取的节点、新节点被创建并且指针被写到父节点的这样的每个层级处)的一个节点读取指针字段,对层级4的节点的指针字段进行写入,以及对新的层级5的节点进行写入。通过写入含有其IBM的字外加具有用于所插入前缀的麼W好^值的字,完成对层级5的节点的写入。其余的字不改变(所有的位最初都被设置成0)。要写入的层级5的节点的这两个字可以使用2端口的存储器来并行写入。因此,最坏情况的插入需要从该2端口存储器的四次读取以及向该2端口存储器的两次写入,总时间为12个周期。对于删除来说,最坏情况发生在当删除了处于层级5的节点中的前缀的时候。通过进行四次读取可以到达所期望的层级5的节点。接下来,必须将所到达的层级5的节点的IBM的位设置成0。为了进行该改变,必须读取和改变旧的IBM,并且该改变必须被写回到存储器。这需要另外的读和写访问。因此,对于总的12个周期,需要五次读访问和一次写访问。有趣地是,所有的三种操作都具有12个周期的相同的最坏情况需求。懒惰模式466656DTBM的根被表示(如同其非懒惰对应物(counterpart)),并且从1到16对类型A节点编号作为DTBM的根的(多达)16个子代。类型A节点被用在层级1、2和3,并且类型C节点被用在层级4和5。类型C节点的大小是8个字。在层级5,两个相邻的类型C节点净皮用于每个DTBM节点。由于节点相邻,因此从第一节点到第二节点不需要指针。对两个类型C节点的这种使用在每个DTBM层级5的节点浪费四个字。然而,由于预计到在该层级有非常少的节点,因此预计总的浪费是小的。由于懒惰模式的466656{殳计仅使用两个节点大小,因此,可以与懒惰才莫式的366666方案使用相同的存储器管理方案。在466656方案中最坏情况的查找代价与非懒惰模式的查找代价是相同的,都是14个周期。对于插入来说,最坏情况是当前缀被插入到现有的层级5的节点的时24候。花费10个周期来到达该层级5的节点,2个周期来读取该层级5的节点的IBM,以及另外两个周期来写入被修改的IBM以及与所插入的前缀相关联的下一跳。总的插入时间是14个周期。最坏情况的删除是从层级5的节点删除前缀的情况。如同最坏情况的插入,花费10个周期来达到该层级5的节点,2个周期来读取其IBM以及另外2个周期来写入被改变的IBM。总的时间还是14个周期。尽管懒惰模式466656设计比懒惰模式366666设计在每操作多花费2个周期,然而,预计到466656设计需要更少的存储器来表示真实世界的IPv4路由器表。基于前述说明,可以使用计算机编程或工程技术(包括计算机软件、固件、硬件或其任何组合或子集)来实现本发明。具有计算机可读代码装置的任何这样得到的程序均可以被体现于或提供在一个或多个计算机可读介质内,从而形成根据本发明的计算机程序产品,即制品。该计算机可读介质可以是,例如,固定(硬)驱动、磁盘、光盘、磁带、可编程逻辑器件、诸如只读存储器(ROM)等的半导体存储器,或者诸如因特网或其它通信网络或链路的任何发射/接收介质。可以通过执行直接来自一种介质的代码、通过将代码从一种介质拷贝到另一种介质或通过在网络上传输代码来形成和/或使用含有计算机代码的制品。计算机科学领域的技术人员将很容易能够将上述创建的软件与包括可编程逻辑器件的适当的通用或专用计算机硬件进行组合,以创建体现本发明的方法的计算机系统或计算机子系统。用于制造、4吏用或销售本发明的装置可以是一个或多个处理系统,包括但不限于,中央处理单元(CPU)、存储器、存储设备、通信链路和设备、服务器、I/O设备或者一个或多个处理系统的任何子组件(包括软件、固件、硬件或其任何组合或子集),它们体现了本发明。可以从键盘、鼠标、笔、话音、触摸屏或人们由此可以将数据输入到计算机(包括通过诸如应用程序的其它程序)的任何其它装置来接收用户输入。在此参照或引用的所有专利、专利申请和公开都通过引用的方式(在它们与本说明书的明确教导不会不一致的程度上)将其全部内容(包括所有的附图和表格)纳入本发明。应当理解,文中所描述的例子和实施例仅出于说明性目的,并且鉴于此,本领域的技术人员将得到暗示来进行各种修改或改变,并且这些修改或改变将被包括在本申请的精神和范围之内。权利要求1.一种计算机可读介质,在其上存储有数据结构,所述数据结构包括用于表示Trie的前缀位图;下一跳阵列;子代指针的阵列;以及非空子代数的计数;其中所述前缀位图、所述下一跳阵列、所述子代指针的阵列以及所述非空子代数的计数表示了所述Trie的节点。2.—种使用数据结构来实现数据分组的目的地址的最长前缀匹配的方法,所述数据结构包括用于表示子Trie的前缀位图、下一跳阵列、子代指针的阵列,以及非空子代数的计数,其中所述前缀位图、所述下一跳阵列、所述子代指针的阵列以及所述非空子代数的计数表示了所述子Trie的节点,所述方法包括实现用于搜索Trie的查找。3.根据权利要求3所述的方法,其中所述数据结构是动态树位图(DTBM)结构,其中每个节点存储了内部位图(IBM),并且其中实现查找包括通过标识子Trie中所存储的前缀,找到目的地址的最长前缀的长度来检索下一跳信息;使用所述目的地址来游走通过所述DTBM结构;以及使用在每个节点处存储的IBM来定位当前最长的匹配前缀。4.一种使用步幅为s的动态树位图(DTBM)数据结构来插入前缀的方法,所述DTBM包括用于表示子Trie的前缀位图、下一跳阵列、子代指针的阵列,以及非空子代数的计数,其中所述前缀位图、所述下一跳阵列、所述子代指针的阵列以及所述非空子代数的计数表示了所述子Trie的节点,其中每个节点存储了内部位图(IBM),所述方法包括游走通过所述DTBM每次一个节点,以便找到合适的节点来插入所述前缀,其中所述游走消耗所述前缀的s位;如果在所述游走期间,所述前缀剩下少于S位,则少于S位的所述前缀的剩余位被用于将所述前缀插入所遇到的最后的节点;以及如果不存在合适的节点,则将新的节点添加到所述DTBM,直到在所述前缀中剩下少于s位,其中少于s位的所述前缀的剩余位净皮用于将所述前缀插入所遇到的最后的节点。5.—种j吏用动态树位图(DTBM)数据结构来删除前缀的方法,所述动态树位图(DTBM)数据结构包括用于表示子Trie的前缀位图、下一跳阵列、子代指针的阵列,以及非空子代数的计数,其中所述前缀位图、所述下一跳阵列、所述子代指针的阵列以及所述非空子代数的计数表示了所述子Trie的节点,其中每个节点存储了内部位图(IBM),所述方法包括为了含有所述前缀的节点而搜索所述DTBM;以及如果在所述DTBM中找到所述前缀,则将其从节点Z移除。6.根据权利要求5所述的方法,其中如果节点Z的IBM是零并且节点Z没有子代,那么删除节点Z连同其连续先辈,所述连续先辈具有等于1的计数和等于零的IBM。7.—种使用动态树位图(DTBM)数据结构来进行存储器管理的方法,所述动态树位图(DTBM)数据结构包括用于表示子Trie的前缀位图、下一跳阵列、子代指针的阵列,以及非空子代数的计数,其中所迷前缀位图、所述下一跳阵列、所述子代指针的阵列以及所述非空子代数的计数表示了所述子Trie的节点,其中每个节点存储了内部位图(IBM),所述方法包括使用自由节点的单链,其中所述单链上的每个节点都具有相同的大小;通过移除在链上的第一节点来分配节点;以及通过向链的前端添加被解除分配的节点来解除分配节点,其中,所有的存储器都被初始化为零,并且每当解除分配节点时,其所有的子代字段都为零。8.根据权利要求7所述的方法,其中所述DTBM将步幅3用于所述DTBM的根,而将步幅6用于其余的DTBM节点,并且这些层级被从所述根处的0编号到5。9.根据权利要求8所述的方法,其中所述DTBM的根具有7位的IBM、八个子代指针,以及七个/^xtf^/7字段。10.根据权利要求9所述的方法,其进一步包括步骤通过将DTBM根的IBM存储在寄存器中并且将所述DTBM根的w^^好印字段存储在预定的存储位置中来表示所述DTBM根。11.根据权利要求7所述的方法,其进一步包括以下步骤查找最长匹配前缀,插入新的前缀,以及删除前缀。12.—种使用动态树位图(DTBM)数据结构来进行存储器管理的方法,所述动态树位图(DTBM)数据结构包括用于表示子Trie的前缀位图、下一跳阵列、子代指针的阵列,以及非空子代数的计数,其中所述前缀位图、所述下一跳阵列、所述子代指针的阵列以及所述非空子代数的计数表示了所述子Trie的节点,其中每个节点均是28字的节点,并且组装了若干叶,所述方法包括将所述28字的节点指定为所述DTBM的根;以及通过将DTBM根的IBM存储在寄存器中并且将所述DTBM根的w"出》;7字段存储在预定的存储位置中来表示所述DTBM根,其中所述28字的节点是类型A节点,并且其可以被分成类型B节点和类型C节点。13.根据权利要求12所述的方法,其中所述DTBM将步幅4用于所述DTBM的根,而将步幅6用于其余的DTBM节点。14.根据权利要求12所述的方法,其中所述类型A节点被指定为所述DTBM的+艮的子4戈。15.根据权利要求12所述的方法,其进一步包括以下步骤标识其中所有的28个字都可供使用的自由节点,以及在列表中维护所述自由节点。16.根据权利要求15所述的方法,其中第一列表是链,并且其余的列表是双链接的,其中节点的控制字的位被用于指示节点处于哪个列表中。17.根据权利要求16所述的方法,其中从第一列表链分配节点。18.根据权利要求12所述的方法,其进一步包括以下步骤查找最长匹配前缀,插入新的前缀,以及删除前缀。全文摘要本发明提供了一种数据结构和方法,用于使用动态树位图结构(DTBM)来进行IP查找、插入和删除,该DTBM利用用于每个节点的子代指针的阵列,而不是典型的使用指向子代阵列的一个指针的TBM方法。文档编号H04L12/28GK101491015SQ200780027670公开日2009年7月22日申请日期2007年7月20日优先权日2006年7月27日发明者S·K·萨尼,陆海斌申请人:佛罗里达大学研究基金公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1