基于网络处理器的路由查找结果缓存方法

文档序号:7961789阅读:222来源:国知局

专利名称::基于网络处理器的路由查找结果缓存方法
技术领域
:本发明是一种利用网络处理器的存储器组织结构,对路由查找结果进行缓存的方法,可以提高网络设备中报文处理的速度,属于计算机
技术领域

背景技术
:网络处理器属于专用处理器的一种,通常应用于灵活高速的数据包处理。它结合了ASIC和通用CPU的优势,具有能够缩短路由器的开发周期和延长网络设备的生存周期的优点。一些厂商已经陆续推出了各类网络处理器产品。为了达到预期的目的,这些设计往往采用了与通用处理器截然不同的体系结构。比如,最为常见的做法就是将多个基于精简指令集(RISC)的处理单元集成在同一块芯片上,并且使用经过优化的专用指令集。另外一个广泛使用的架构是将通用处理器中层次式的存储器结构改为并列式,所有存储单元均对程序员可见并且由软件控制,用来减少层次式的存储器结构中由硬件控制的高速缓冲存储器所导致的访问时间不确定性,以适应网络处理半实时性的需求。网络处理器主要应用于路由器等网络设备,而路由器的主要功能之一就是进行路由查找并根据查找结果对数据包进行转发。现有的网络处理器设计往往偏重于满足路由器日益增长的对复杂操作的需求,因此,灵活性虽然很高,但是对高效地完成路由查找等基本操作缺乏支持。目前很多比较流行的网络处理器,如IntelIXP系列,其路由查找的功能依赖于外接的TCAM器件或者专用的路由查找协处理器。尽管这些器件吞吐量很高并且具有确定性的访问延迟,但它们价格昂贵,并且功耗和散热量都很大,因此线卡的设计复杂且成本极高。这使得这种方案非常不适合于以低成本为首要考虑因素的中低端路由器和以功耗和线卡所占空间为首要因素的移动设备。所以,一种能够由网络处理器自身来完成的有效的路由查找机制就显得极为重要。路由查找算法经过了较长时间的研究,目前已经比较成熟。比如基于多比特树(multi-bittrie)的算法,简单高效并且适合硬件实现。P.Gupta等人在文献[1]中设计了一种特殊的multi-bittrie算法,即根据路由表中前缀长度的分布,将trie分为长度为24和8的两级。由于绝大多数前缀都不大于24位,该算法在大多情况下只需要一次路由表的访问,个别时候需要两次。它主要的缺点是路由表占用的空间较大,可多达几十MB。但是目前大部分网络处理器都支持较大的地址空间,比如IntelIXP2400可外接2GB的DRAM。因此,该算法是比较适合在网络处理器中使用的。然而,由于多处理单元共享存储器所导致的排队和调度等因素,使得访问外部大容量存储单元的延迟通常较大,在一些工作频率较高的网络处理器中甚至可多达200多个周期。另外一方面,尽管网络处理器提供了多线程等延迟隐藏机制用于减少并列式存储器结构缺乏硬件控制高速缓冲存储器所带来的影响,但网络流量高突发性和尤其在中低速流量中更为明显的低并行性,往往使得多线程不能很好地发挥作用。因此需要一种方法,使其能够在充分利用网络处理器现有的存储结构的基础上,有效地降低返回路由查找结果所需的时间。由于网络流量中数据包的目的IP地址之间具有较强的时间局部性,即同样的目的IP地址在一段时间内会反复出现,路由查找结果的缓存是一项在各类平台和背景下广泛被采用的技术。在一些设备中会使用专门设计的硬件,称为路由查找结果高速缓冲存储器(routecache)[2]。但是这些硬件无法在已经制成产品的网络处理器中使用。Tzi-ckerChiueh等人曾经为通用处理器设计过一种加速路由查找过程的算法[3]。但该算法主要利用的是通用处理器中容量较大且硬件控制的高速缓冲存储器,这在网络处理器中是不具备的。P.Gupta,S.Lin,andN.McKeown.RoutingLookupsinHardwareatMemoryAccessSpeeds.ProceedingsofIEEEINFOCOM’98,pp.1240-1247,April1998.HuanLiu.RoutingPrefixCachinginNetworkProcessorDesign.ProceedingsoftheTenthInternationalConferenceonComputerCommunicationsandNetworks(ICCCN’01),pp.18-23,2001.Tzi-ckerChiueh,andPrashantPradhan.High-PerformanceIPRoutingTableLookupUsingCPUCaching.ProceedingsofIEEEINFOCOM’99,vol.3,pp.1421-1428,1999.
发明内容本发明的目的在于提高网络处理器中路由查找算法的效率,使得它既能够在较短的时间内返回查找结果从而给其他应用留出更充足的时间,同时又能减少完成同样功能所需要的芯片的种类和数量,以降低线卡所占用的空间、所需功耗和设计复杂度,进而降低其成本。本发明充分利用了目前比较流行的网络处理器地址空间由片上容量较小但访问延迟低的存储器和片外容量较大但访问延迟较大的存储器构成、且缺乏硬件支持的高速缓冲存储器(cache)的特点,将片上高速存储器的一部分划分出来,由软件来维护一个路由查找结果缓存表,同时在片外低速存储器中建立路由表。由于网络流量中数据包的目的IP地址之间具有较强的时间局部性,即同样的目的IP地址在一段时间内会反复出现,所以有可能通过仅维护少量目的IP地址的查找结果来降低实际所需要的片外低速存储器访问次数、提高路由查找的效率。每个需要进行查找的目的IP地址被接收后,先在该缓存表中通过哈希进行快速的查找。如果其结果已经在该表内存在则直接返回该结果,并对缓存表的结构进行相应的调整,以期在以后的查找中能尽快地返回所需结果。否则的话,才对保存在片外低速存储器中的路由表进行查找,其结果除了返回给应用程序外,还会写回路由查找结果缓存表。哈希函数的选择需要既能使从目的IP地址在缓存表中的分布足够均匀,从而减少冲突的概率,又能通过简单的几条指令就可获得索引号,缩短处理所需的时间。当路由表的内容发生改变时,需要对路由查找结果缓存表中受到影响的表项进行改变。路由查找结果缓存表模拟通用处理器中高速缓冲存储器结构,也具有标志位、标签(tag)以及缓存结果等内容。根据表项组织方式的不同,也分为直接相联、多路组相联等形式;同时由于软件的灵活性,还能在多路组相联缓存表中较为轻松地实现“最近最少使用”(LeastRecentlyUsed,LRU)等效果较好但难于用硬件实现的替换策略。网络处理器通常提供了针对网络应用进行了优化的指令集,诸如位操作、表操作等特殊指令可以使本发明高效地在网络处理器中实现。本发明的特征在于,该方法在所述网络处理器中依次按照以下步骤执行步骤0初始化步骤0.1在所述网络处理器的片上高速存储器内建立并维护一个路由查找结果缓存表,该路由查找结果缓存表以组为基本单位,每个组内含有若干表项,各组含有的表项数目相等,每个表项都与一个目的IP地址相对应;所述每个表项含有一个与目的IP地址对应的下一跳IP地址所在的端口号,即该目的IP地址的路由查找结果,用于表示表项是否有效的标志位,以及用于确定表项是否与接收到的目的IP地址匹配的标签信息D’;所述端口号的位宽由该网络处理器所支持的下一跳IP地址的个数决定;所述端口号、标志位以及标签信息在表项中的位置由编程人员自由设定,一旦设定后,在所有的表项中都是统一的;步骤0.2在所述网络处理器的片外低速存储器内建立用于完成路由查找的数据结构,比如,一种实现方法是在所述片外低速存储器内为路由表建立一个trie树,当路由查找结果缓存表中没有任何表项匹配的时候,就使用该trie树,进行完整的路由查找,并返回查找的结果;步骤1对所述网络处理器收到的目的IP地址进行哈希运算,得到要进行匹配操作的路由查找结果缓存表的组的索引号,也即该被索引组的第一个表项在片上高速存储器中的地址,一种可能的哈希运算是将所述目的IP地址中的低位部分字段不加变化地直接提取出来,作为索引号的一部分,然后对所述目的IP地址中的其他字段进行诸如异或等的操作后,将生成的结果作为索引号的其他部分;步骤2读取所述被索引组中的第一个表项,将表项的内容保存入寄存器R;步骤3检查所述寄存器R中的表项内容,确定该表项的标志位是否有效,如果无效,则执行步骤4,否则,跳转至步骤6;步骤4检查所述被索引组内是否所有表项都已经检查完毕,如果不是,则执行步骤5,否则,跳转至步骤10;步骤5读取所述被索引组中下一个未检查的表项,将表项的内容保存入寄存器R,跳转至步骤3;步骤6根据所述目的IP地址,计算得到标签D,如果采用的是步骤1中所述的哈希函数,由于IP地址中有部分字段被直接提取并用作索引号的一部分,那么路由查找结果缓存表表项中的标签信息D’只需要保存IP地址中除该字段以外的部分,标签D也由所述目的IP地址中未被直接提取用作索引号的部分构成;步骤7将步骤6中计算得到的标签D与所述寄存器R中所保存表项的标签信息D’进行比对,检查是否一致,如果一致,称该寄存器R中的表项为匹配表项,执行步骤8,否则,跳转至步骤4;步骤8如果路由查找结果缓存表的每个组内只有一条表项,或者匹配表项是路由查找结果缓存表中该组的第一条表项,则组内表项顺序不需要调整,执行步骤14;否则,执行步骤9;步骤9将路由查找结果缓存表中该组内该匹配表项之前的所有表项顺次向后移动一个位置,则该匹配表项所在的位置被原来位于该匹配表项之前的那个表项所覆盖,然后将该组内的第一条表项用该匹配表项的内容的取代,跳转至步骤14;步骤10对片外低速存储器中保存的路由表进行完整的路由查找,得到查找的结果,即与下一跳IP地址对应的端口号;步骤11如果路由查找结果缓存表的每个组内只有一条表项,跳转至步骤13;否则,执行步骤12;步骤12将路由查找结果缓存表中该组内所有的表项顺次向后移动一个位置,删除最后一条表项;步骤13将步骤10返回的路由查找结果作为新表项的端口号,将步骤6中计算得到的标签D作为新表项的标签信息D’,将该新表项的标志位设置为有效,然后将该新表项作为路<p>W0是管理平面静态配置的链路代价,例如10;α是调整因子,如果链路具有固有保护能力,α=0,否则α=1;W1是链路代价的调整粒度,可以根据网管的静态配置和网络拓扑规模等因素选择适当的值,例如100。调整前后的链路代价,如表1所示表1.如果采用上述方式调整链路代价,那么最短路径算法求解得到的路径是A-B-C-Z,即图2中所示的P1。3.按照图1所示方法步骤三,检查计算结果P2,逐链路都受到光网络底层固有保护机制的保护,A-B是1+1保护,B-C是复用段共享保护,C-Z是1+1保护,求解得到的P1路径充分利用了传输网络底层固有的保护机制,并且保护是完善的,算法结束。以图3所示的拓扑环境为例,说明本发明如何通过调整链路代价为需要保护的业务求解满足无关性要求(节点无关或者是链路无关)的工作路径和保护路径。具体的处理流程是这样的1.按照图1所示方法步骤一,接收到路由查询请求,确定路径选择的源是A节点,目的是Z节点。2.按照图1所示方法步骤二,在采用最短路径算法求解的过程中,根据链列式存储器结构,即片上高速存储器与片外低速存储器的地位完全一样,不仅构成地址空间,且不受硬件的控制,对程序员完全可见,其数据的存储和移动完全由程序员来控制。本发明将片上高速存储器的一部分划分出来,由软件来维护一个路由查找结果缓存表,同时在片外低速存储器中用一些简单高效但有可能耗用较多空间的算法建立路由表。比如,可以采用P.Gupta等人在文献[1]中设计的24-8两级表的方法,这种方法需要很大的存储空间来维护路由表,但每个目的IP地址最多需要两次路由表的访问,大多数情况下仅需一次路由表的访问就可以得到路由查找的结果。路由查找缓存表的每个表项记录一个目的IP地址的路由查找结果。路由查找结果缓存表的组织结构以组为单位,每个组内可能含有若干表项,各组含有的表项数相等。与高速缓冲存储器中的概念相对应,我们将每组内只含有一个表项的称为直接相联,每组内含2个表项的称为2路组相联,依此类推。为了存储管理的方便,组内含有的表项数为2的幂次。目的IP地址有32位,而片上高速存储器通常只有十几KB,因此路由查找结果缓存表内含有的表项总数远远少于实际所需的,即232个表项。图2显示了一个具有1024个组的2路组相联路由查找结果缓存表及其查找过程的基本框图。假如每个表项需要4个字节,那么该路由查找结果缓存表2-2就需要占用片上高速存储器2-1中8KB的存储空间。当一个目的IP地址收到时,使用该32位的数据进行一次哈希运算,得到一个10位的索引号,然后就可以使用该索引号检索到路由查找结果缓存表中对应的组。假设该组为图2中的组2-I,包含两个表项2-I-1和2-I-2。对这两个表项进行检查,如果发现匹配,就将该表项中保存的查找结果返回。如果两个表项均未匹配,则引发一个缺失。此时,就会完整地使用路由查找算法,在片外低速存储器中保存的路由表中检索到结果。该结果除了返回给应用程序外,还会写回到路由查找结果缓存表,供后来接收到的IP地址使用。在实际使用的网络中,路由的变更是比较频繁的。路由器会接收到大量路由刷新消息,并由其控制平面将这些消息综合分析后,把最终的修改通知路由表和路由查找结果缓存表。因此,原来有效的查找结果可能会在某次路由刷新后不再有效。因此,路由查找结果缓存表的每个表项中需要一个标志位,用来表示该表项是否有效。尽管路由查找的结果最终表现为IP地址(称为下一跳IP地址),但由于同一个路由器所连接的不同主机不可能太多,因此可以将所连接主机的IP地址简单地映射为一个端口号。另外,由于会出现若干个不同的目的IP地址经过哈希以后映射到同一个表项的情况。为了区分,每个表项中除了记录作为路由查找结果的端口号外,还需要保存IP地址的信息,称为标签,用D’表示。在实际使用的时候,标志位、标签D’和端口号这三部分在表项中的位置是可以任意设定的。图3显示了一种可能的表项构成方式。由于片上高速存储器通常按照字(32位)组织,其与处理单元内的寄存器的通信也以字为单位,为了节省访问到必要信息的时间开销,可以将每个表项的大小限制为一个字。每个表项的最高位为标志位(标记为V),当为“1”时有效。表项的低7位作为端口号,这样该网络处理器可以支持128个不同的下一跳IP地址。剩下的空间即可用来保存标签信息。在图3的例子中,由于标志位和端口号已经占用了部分比特,并非所有的目的IP地址字段都可以保存在表项内,因此在目的IP地址进行哈希的过程,需要有一定数量的比特位保持不变,以索引的形式反映出来。与此同时,路由查找结果缓存表至少要维持一定数量的组,才能保证目的IP地址信息不丢失。以图3为例,共有8位被占用,那么目的IP地址中应该至少有8位保持不变,用来作为索引的一部分。而路由查找结果缓存表也至少需要维持28=256个组。此时目的IP地址中剩下的24位,就可以用来与保存在路由查找结果缓存表表项中的标签进行比较,来确定是否匹配。为了区别,可以将进行路由查找结果缓存表检索时,目的IP地址用来与表项中标签进行比对的部分称为标签D’。多路组相联结构的路由查找结果缓存表由于利用了不同数据包的目的IP地址之间的空间局部性,其命中率较直接相联方式为高。网络处理器中通常是没有并行比较机制的,因此组内表项的比较往往需要逐个进行,直到发现匹配表项或所有的表项都已耗尽为止。假如第一个表项就发生匹配,那么此时软件的开销最低。实验表明,刚刚出现过的目的IP地址最有可能再次出现,而最久未出现的IP地址则最不可能再次出现。因此,路由查找结果缓存表的替换策略以LRU(LeastRecentlyUsed)为最优。该替换策略在路由查找结果缓存表中一种可能的实现为每次发生匹配时,假如匹配表项是该组的第一个表项,那么组内表项顺序不需要调整;否则的话,将位于该匹配表项之前的所有表项顺次向后移动一个位置,然后将匹配表项写为该组的第一个表项,这样就可以使得第一个表项的内容是最近刚出现的目的IP地址,而最后一个表项是最久未出现的目的IP地址;当发生缺失时,最后一个表项被驱逐出该组,其他表项顺次向后移动一个位置,然后将新返回的结果写为该组的第一个表项,这样,最久未出现的目的IP地址就被替换了。图4显示了使用路由查找结果缓存表进行检索的流程图,其具体的步骤如下1、对接收到的目的IP地址进行哈希运算,得到路由查找结果缓存表中的组的索引号,也就是该被索引组中第一个表项的位置。4-12、读取该表项的内容。4-23、根据该表项的标志位,确定表项是否有效;如果无效,则继续,否则,跳转至步骤6。4-34、检查该被索引组内是否所有表项都已经检查完毕;如果不是,则继续,否则,跳转至步骤10。4-45、移动到下一个未检查的表项,跳转至步骤2。4-56、根据目的IP地址,计算得到标签D。4-67、将标签D与表项内保存的标签D’进行比对,检查是否一致;如果一致,则继续,否则,跳转至步骤4。4-78、根据替换策略,检查是否需要对该被索引组内表项的顺序进行调整;如果需要,则继续,否则,跳转至步骤14。4-89、根据替换策略,将路由查找结果缓存表中该组内该匹配表项之前的所有表项顺次向后移动一个位置,则该匹配表项所在的位置被原来位于该匹配表项之前的那个表项所覆盖,然后将该组内的第一条表项用该匹配表项的内容的取代,跳转至步骤14。4-910、对片外低速存储器中保存的路由表进行完整的路由查找,得到查找的结果,即与下一跳IP地址对应的端口号。4-1011、确定组内是否有多条表项;如果是,则继续,否则,跳转至步骤13。4-1112、根据LRU的替换策略,将组内表项顺次下移,删除最后一个表项。4-1213、将查找结果以及标签D组成的新表项,作为组内的第一条表项写回。4-1314、返回路由查找结果。4-14哈希函数的选择是一个比较关键的问题。这是因为哈希函数决定了目的IP地址在缓存表中的分布,并且每个数据包都要经过这样一次计算。该操作位于关键路径上,需要选择简单高效的算法,使得一方面能使从目的IP地址到索引号的映射足够均匀,从而减少冲突的概率,降低路由查找操作发生的频率,另一方面又能通过简单的几条指令就可以获得索引号,缩短处理所需的时间。对于目的IP地址在哈希变换中保持不变的部分,应该选择那些被置为“1”和“0”的概率差不多相等的字段。索引号中并非由目的IP地址中的字段直接得到的部分,则可以由整个目的IP地址或者其中的某一部分经过运算得到。由于本发明中所使用的哈希函数完全由软件来实现,因此可以根据实际的流量来进行调整,以使缓存表的命中率达到最大。图5显示了一种可能的哈希函数计算方法以及标签的构成。具体来说片上高速存储器5-1中保存了一个具有1024个组的2路组相联路由查找结果缓存表5-2。该表的表项长度为32位,并具有如图3所示的构成方式。假设网络处理器以字(32位)为单位进行寻址,并且该路由查找结果缓存表的起始地址保存一个称为基地址5-5的寄存器中。由于该路由查找结果缓存表具有1024个组,因此,其索引号5-4需要有10位,记为Index[9..0]。由于每个路由查找结果缓存表表项中的标签仅有24位,因此,目的IP地址5-3中至少要有8位保持不变,并作为索引号的一部分。在本例中,目的IP地址5-3的第15到第8位保持不变(即图5中的DIP[15..8]),作为索引号5-4的低位部分(即Index[7..0]);索引号5-4的高位部分(即Index[9..8])由DIP[19..18]和DIP[17..16]经过按位异或5-6产生。由于路由查找结果缓存表的每个组包含两个表项,而网络处理器又按照字来寻址,因此,索引号5-4必须乘以2(乘法操作5-8和操作数5-7)以后才能得到被索引组相对于路由查找结果缓存表起始地址的偏移量。然后将该偏移量与基地址5-5相加(加法操作5-13),才能得到被索引组的地址。在图5中,假设被索引到的组为组5-9。标签D,即5-10由除DIP[15..8]以外的其他比特,即DIP[31..16]和DIP[7..0]连接起来构成。假如组5-9中的表项1,即5-9-1有效,标签D,即5-10,将与该表项中的标签D’进行比较(比较操作5-11)。假如表项1,即5-9-1,无效或者比较结果不同(称为未匹配),那么将检查表项2,即5-9-2;如果表项2,即5-9-2有效,那么标签D,即5-10将继续与该表项中的标签D’进行比较(比较操作5-12)。针对网络应用的特点对指令集进行优化是网络处理器设计中经常采用的技术。网络处理中频繁出现的操作被提取出来,由专用的硬件或者指令来完成,以提高代码执行的效率。对于本发明来说,一些在网络处理器中被广泛采用的特殊指令可以用来缩短程序的长度,节省处理的时间。比如,对位操作的支持就可以大大简化算法中哈希函数的运算和标签的生成。这类指令的例子包括IntelIXP1200中的LD_FIELD和LD_FIELD_W_CLR指令,可以将字节加载到寄存器的指定字段中。还有一类指令,可以称为表操作,除了可以指定基地址和偏移量外,还可以指定要读入字段的起始地址和字的个数;然后,片上高速存储器的控制器就能以突发的方式将指定字段读出,并写入处理单元中编号相连的寄存器。以下是几条经常会被网络处理器采用的优化指令BLOADRdest,Rsrc,@sst_b,@length,@dst_b;该指令是一条字段提取指令,将源寄存器Rsrc中从第@sst_b位开始的@length个比特,写入目的寄存器Rdest中从第@dst_b位开始的部分。由于寄存器一般只有32位,因此用来表示字段的起始位置和长度的数字只需要5位。为了区别这些与字段相关的数字,我们在它们前面加上@,而一般的操作数,则没有这个@符号。BCMPRa,Rb,@st_b,@length;这是一条与位操作相关的算术运算指令,将寄存器Ra和Rb中从第@st_b位开始的@length个比特进行比较,并将结果写入特殊用途寄存器中,用来进行跳转等操作。TABLE_SEARCHRresult,Rbase,Rindex,@length;这是一条表相关指令,将地址空间中从位置Rbase+Rindex开始的@length个字,写入到以Rresult开始的@length个连续的寄存器中。TABLE_MODIFYRsrc,Rbase,Rindex,@length;该指令与上一条指令相反,将从Rsrc开始的@length个连续的寄存器中的内容,写入到地址空间中从位置Rbase+Rindex开始的@length个字。以下显示了本发明用针对网络处理器优化后的指令编写的代码;该程序是采用图5中的具有1024个组的2路组相联路由查找结果缓存表及其哈希算法所进行的结果检索和缓存表维护算法;当程序开始执行时,路由查找结果缓存表的基地址、以及目的IP地址已经分别保存Rbase和RDIP中了。/*路由查找结果缓存表的查找与维护*//*将保存在寄存器RDIP中目的IP地址的第15到第8位,即DIP[15..8]写入寄存器Rindex,作为索引的低8位,即Index[7..0]*/BLOADRindex,RDIP,@0x0F,@0x08,@0x07;/*将目的IP地址右移两位保存在寄存器R1中,使DIP[19..18]与DIP[17..16]对齐*/R_SHIFTR1,RDIP,@0x02;/*进行异或操作*/XORR1,RDIP,R1;/*将R1中的第17到第16位,即DIP[19..18]与DIP[17..16]异或的结果写入R1从第9位开始的地方*/BLOADR1,R1,@0x11,@0x02,@0x09;/*将R1与Rindex合并,获得最终的索引号*/ANDRindex,Rindex,R1;/*将索引号左移3位,获得偏移量*/L_SHIFTRindex,Rindex,@0x03;/*将DIP[31..16]写入寄存器Rtag的第30到第15位*/BLOADRtag,RDIP,@0x1F,@0x10,@0x1E;/*将DIP[7..0]写入寄存器R1的第14到第7位*/BLOADR1,RDIP,@0x07,@0x08,@0x0E;/*将两部分合并,形成标签D*/ORRtag,Rtag,R1;/*将标志位置为有效*/ANDRtag,Rtag,0x80000000;/*以Rbase的内容作为基地址,将Rindex中的内容作为偏移量,将片上高速存储器中的两个字读入寄存器Rresult及其相邻的寄存器,记为Rresult2*/TABLE_SEARCHRresult,Rbase,Rindex,@0x02;/*将返回结果中的标志位与标签D’部分,即第31到第7位,与Rtag进行比较*/BCMPRtag,Rresult,@0x1F,@0x19;/*如果匹配的话,则跳转到report开头的语句*/EQreport;/*否则,检查第二个表项*/BCMPRtag,Rresult2,@0x1F,@0x19;/*如果匹配,则跳转到change开头的语句*/EQexchange;/*否则,产生缺失,进行路由查找操作,返回的结果写在寄存器Rport中*/performoff-chiproutetablesearch;/*表项下移*/ANDRresult2,Rresult,0x00000000;/*写入新的内容*/ANDRresult,Rtag,Rport;/*将调整过的表项写回缓存表*/TABLE_MODIFYRresult,Rbase,Rindex,@0x02;/*返回*/JUMPdone;exchange/*交换Rresult和Rresult2的内容*/ANDR1,Rresult,0x00000000;ANDRresult,Rresult2,0x00000000;ANDRresult2,R1,0x00000000;/*将交换过的表项写回缓存表*/TABLE_MODIFYRresult,Rbase,Rindex,@0x02;report/*将缓存的结果,即Rresult的低7位写入寄存器Rport*/ANDRport,Rresult,0x0000007F;/*返回*/JUMPdone。权利要求1.基于网络处理器的路由查找结果缓存方法,其特征在于,该方法在所述网络处理器中依次按照以下步骤执行步骤0初始化步骤0.1在所述网络处理器的片上高速存储器内建立并维护一个路由查找结果缓存表,该路由查找结果缓存表以组为基本单位,每个组内含有若干表项,各组含有的表项数目相等,每个表项都与一个目的IP地址相对应;所述每个表项含有一个与目的IP地址对应的下一跳IP地址所在的端口号,即该目的IP地址的路由查找结果,用于表示表项是否有效的标志位,以及用于确定表项是否与接收到的目的IP地址匹配的标签信息D’;所述端口号的位宽由该网络处理器所支持的下一跳IP地址的个数决定;所述端口号、标志位以及标签信息在表项中的位置由编程人员自由设定,一旦设定后,在所有的表项中都是统一的;步骤0.2在所述网络处理器的片外低速存储器内建立用于完成路由查找的数据结构,比如,一种实现方法是在所述片外低速存储器内为路由表建立一个trie树,当路由查找结果缓存表中没有任何表项匹配的时候,就使用该trie树,进行完整的路由查找,并返回查找的结果;步骤1对所述网络处理器收到的目的IP地址进行哈希运算,得到要进行匹配操作的路由查找结果缓存表的组的索引号,也即该被索引组的第一个表项在片上高速存储器中的地址,一种可能的哈希运算是将所述目的IP地址中的低位部分字段不加变化地直接提取出来,作为索引号的一部分,然后对所述目的IP地址中的其他字段进行诸如异或等的操作后,将生成的结果作为索引号的其他部分;步骤2读取所述被索引组中的第一个表项,将表项的内容保存入寄存器R;步骤3检查所述寄存器R中的表项内容,确定该表项的标志位是否有效,如果无效,则执行步骤4,否则,跳转至步骤6;步骤4检查所述被索引组内是否所有表项都已经检查完毕,如果不是,则执行步骤5,否则,跳转至步骤10;步骤5读取所述被索引组中下一个未检查的表项,将表项的内容保存入寄存器R,跳转至步骤3;步骤6根据所述目的IP地址,计算得到标签D,如果采用的是步骤1中所述的哈希函数,由于IP地址中有部分字段被直接提取并用作索引号的一部分,那么路由查找结果缓存表表项中的标签信息D’只需要保存IP地址中除该字段以外的部分,标签D也由所述目的IP地址中未被直接提取用作索引号的部分构成;步骤7将步骤6中计算得到的标签D与所述寄存器R中所保存表项的标签信息D,进行比对,检查是否一致,如果一致,称该寄存器R中的表项为匹配表项,执行步骤8,否则,跳转至步骤4;步骤8如果路由查找结果缓存表的每个组内只有一条表项,或者匹配表项是路由查找结果缓存表中该组的第一条表项,则组内表项顺序不需要调整,执行步骤14;否则,执行步骤9;步骤9将路由查找结果缓存表中该组内该匹配表项之前的所有表项顺次向后移动一个位置,则该匹配表项所在的位置被原来位于该匹配表项之前的那个表项所覆盖,然后将该组内的第一条表项用该匹配表项的内容的取代,跳转至步骤14;步骤10对片外低速存储器中保存的路由表进行完整的路由查找,得到查找的结果,即与下一跳IP地址对应的端口号;步骤11如果路由查找结果缓存表的每个组内只有一条表项,跳转至步骤13;否则,执行步骤12;步骤12将路由查找结果缓存表中该组内所有的表项顺次向后移动一个位置,删除最后一条表项;步骤13将步骤10返回的路由查找结果作为新表项的端口号,将步骤6中计算得到的标签D作为新表项的标签信息D’,将该新表项的标志位设置为有效,然后将该新表项作为路由查找结果缓存表中被索引组内的第一条表项写回;步骤14向应用程序返回路由查找结果。全文摘要基于网络处理器的路由查找结果缓存方法属于计算机领域,其特征在于在网络处理器的片上高速存储器中建立并维护一个路由查找结果缓存表,每个需要查找的目的IP地址被网络处理器接收后,先在该缓存表中通过哈希函数进行快速查找,若其结果已存在于该缓存表中,则直接返回路由查找结果,并对缓存表的表项按最近最少使用的原则进行顺序的调整,以期在后续查找中能尽快地得到结果;否则,才对保存在片外低速存储器中的路由表进行查找,其结果在返回给应用程序的同时,还要写回路由查找结果缓存表。本发明减少了由路由查找而引发的片外低速存储器的访问次数、以及对存储器带宽的占用。文档编号H04L29/06GK1863169SQ20061008370公开日2006年11月15日申请日期2006年6月2日优先权日2006年3月3日发明者刘祯,刘斌申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1