利用对前缀长度进行两个搜索阶段的IP路由缓存的制作方法

文档序号:13317350阅读:204来源:国知局
版权声明本专利文件的公开内容的一部分包含受版权保护的材料。版权所有者不反对专利文件或专利公开内容中的任何一个的复制,如其在专利与商标局专利文档或记录中出现的,但是除此之外无论如何保留所有的版权权利。发明背景1.发明领域本发明涉及数字信息的传输。更具体地,本发明涉及包(packets)在数据交换网络中的路由中的缓存操作(operations)。2.相关技术的描述本文中所使用的某些首字母缩略词和缩写的含义在表1中给出。表1-首字母缩略词和缩写dip目的互联网协议地址dram动态随机存取存储器hca主机通道适配器ip互联网协议lpm最长前缀匹配msb最高有效位nic网络接口卡rif路由器接口sram静态随机存取存储器tcam三元内容可寻址存储器现代互联网路由器基于在被称为路由表的转发信息的数据库中搜索包目的ip地址(dip)来确定数据路由。路由表只储存被称为前缀的前导部分的一些,而不是储存完整dip。前缀包括dip的一定数目的最高有效位(themostsignificantbits)。出于在路由表中的dip搜索的目的,其余位被视为“无关”位。然而,它们指定子网络或子网。属于子网络的计算机通过它们的ip地址中的公共前缀来寻址。最具体的匹配表条目(entries)(具有最长子网掩码的匹配表条目)被称为最长前缀匹配(lpm)。这是路由表中的条目,其中目的地址的前导地址位的最大数与表条目中的那些匹配。搜索用于lpm的路由表是路由吞吐量中的瓶颈。已经提出了各种基于硬件的解决方案。然而,实现这样的解决方案所需的电路变得复杂。此外,互联网流量的增量和对于降低延迟的需求导致具有高功耗和散热的相对昂贵的路由器电路。例如,由sorayakasnavi等人于2008年在computernetworks52第303–326页中发表的文献“acache-basedinternetprotocoladdresslookuparchitecture”提出了具有基于硬件的lpm匹配方法的三元内容可寻址存储器(tcam)。然而,tcam存储器虽然减少了哈希(hash)查找的数量但仍是昂贵的。缓解ip查找的性能的一个选项是实现缓存。与在主数据库上运行的lpm算法相反,缓存可向查找结果提供对缓存数据库的单一访问。只有导致缓存缺失的搜索需要通过lpm算法的ip地址搜索。缓存假定在短时间段内相同的ip地址被搜索多次。众所周知,通常在网络中且特别是在互联网上的流量不是均匀分布的。相反,流量已被显示为遵循可用齐夫(zipf)分布的幂律建模的重尾分布。这样的分布按照前缀、按照ip地址且按照流来观察,显示出在所有情况下,大多数流量集中在所有元素的一小部分上。这种分配可运用在良好构建的缓存方案中。已经针对lpm缓存提出了许多解决方案。其中一些在缓存和外部设备或网元(例如,dram、路由器或其他网络设备)上采用相同的算法。其他方案使缓存与在外部设备中使用的算法无关。在一种配置中,sram充当用于外部设备的缓存。用于缓存的最简单的解决方案是找到精确匹配,使得每个ip地址被缓存为sram上的条目。这在许多情况下可能已经足够了。然而,由缓存覆盖的ip地址的数量可使用lpm特征得以大幅增加。通常,任何不具有兼容的较长前缀的前缀都可被直接缓存并用于匹配。然而,对于具有较长兼容前缀的前缀(prefixes)来说,缓存可以引起“缓存隐藏”问题,除非所有较长兼容前缀也已被缓存。未在缓存中的一个这样的较长兼容前缀的包将根据储存在缓存中的较短前缀被错误地路由。存在处理缓存隐藏的不同的方法。在一个解决方案中,当前缀被放置在缓存中时,所有较长兼容前缀也被放置。然而,实现起来是复杂的,特别是从缓存中逐出是复杂的。在更简单的方式中,路由表中存在的最长前缀的长度用于缓存。这在由c.kim等人在第十届国际无源和有源网络测量(pam)的会议记录(the10thinternationalconferenceonpassiveandactivenetworkmeasurement)中所发表的文献“revisitingroutecaching:theworldshouldbeflat”中进行了探索,但假设长于/24的前缀不在表中,或者使用小的附加表来处理。该解决方案在缓存上为包创建了/24条目,并有效地缓存了每个条目256个子网地址(2(32-24)=28=256)。然而,方案的直接实现是不切实际的,因为表中可存在高达/32的前缀。如由y.liu、s.o.amin和l.wang于2013年1月在acmsigcommcomputercommunicationreview中发表的文献“efficientfibcachingusingminimalnon-overlappingprefixes”中所提出的,另一种方式涉及路由表的扩展,以确保它不具有兼容前缀。例如,如果/24前缀与/32前缀兼容,则产生与/32前缀在最后位中不兼容的/25、/26、...、/31位前缀。那些前缀包括除了/32前缀之外所有可能的dip地址在/24前缀中的模式。因此,出于路由的目的,当存在/32前缀时,它们等同于/24前缀。发明概述根据本发明的公开实施例,缓存操作使用2阶段lpm搜索来进行优化。在第一阶段中,缓存条目的可选个数(m)的最高有效位与掩码dip进行比较。在匹配时,在第二阶段中,检索值l,并且dip和缓存条目的(m+l)个最高有效位进行比较。如果第二阶段中的匹配构成缓存命中,则转发信息从缓存中被检索出来。根据本发明的实施例提供了一种方法,其通过经由数据网络接收具有目的地址的包并提供高速缓冲存储器来执行,在该高速缓冲存储器中缓存条目表示储存在主存储器中的地址的一部分。目的地址和缓存条目各自包括二进制数。该方法进一步通过做出缓存条目之一的和目的地址的m个最高有效位相同的第一确定并做出缓存条目之一的和目的地址的附加的m+l个最高有效位相同的第二确定来执行。该方法通过从高速缓冲存储器检索路由信息并根据路由信息处理包而响应于第二确定来进一步执行。该方法的一个方面包括经由数据网络接收新的包,以及使用新的包,利用数目m的新值迭代做出第一确定和做出第二确定的步骤。在该方法的另一方面中,缓存条目在高速缓冲存储器中表示为哈希表。做出第一确定和做出第二确定的步骤包括对哈希表的哈希查找。根据该方法的又一方面,缓存条目在高速缓冲存储器中表示为多路哈希表。在该方法的一个方面中,缓存条目在高速缓冲存储器中表示为第一哈希表和第二哈希表。做出第一确定和做出第二确定的步骤包括分别对第一哈希表和第二哈希表的哈希查找。根据该方法的再一方面,分配数目m通过使用数目m的不同测试值由以下操作来执行:确定覆盖地址空间所需的缓存条目数,并向所述不同测试值中的对应于确定的缓存条目最低数的测试值分配数目m。根据该方法的其他方面,分配数目m通过确定覆盖地址空间所需的缓存条目数使用数目m的不同测试值来执行,并且当选择条目数等于缓存大小时,向对应于地址空间的最大覆盖区域的不同测试值之一分配数目m。该方法的附加方面包括在新的包被接收的同时迭代地调整数目m。根据该方法的另一方面,调整数目m通过以下操作来执行:在预定的时间间隔期间将数目m迭代地分配给测试值,并在不同的测试值下测量高速缓冲存储器中的命中率,并且将数目m重新分配给不同测试值中的对应于最高命中率的测试值。根据本发明的实施例还提供了一种装置,其包括可操作用于经由数据网络接收具有目的地址的包的网元。网元具有处理器、储存包转发信息的数据库的主存储器和处理器可访问的高速缓冲存储器。高速缓冲存储器具有其中表示主存储器的包转发信息的一部分的缓存条目。目的地址和缓存条目各自包括二进制数。该处理器可操作用于做出缓存条目之一的和目的地址的m个最高有效位相同的第一确定,做出缓存条目之一的和目的地址的附加的m+l个最高有效位相同的第二确定,以及响应于第二确定从一个缓存条目中检索路由信息并根据该路由信息处理包。附图的几个视图的简述为了更好地理解本发明,通过示例对本发明的详细描述进行参考,本发明的详细描述将结合以下附图来阅读,其中相似的元件被给定相似的参考数字,以及其中:图1是根据本发明的实施例的网元的框图;图2是根据本发明的实施例的执行ip地址的缓存查找的方法的流程图;图3是根据本发明的实施例的图示了图2中所示的方法的实现的框图;图4是根据本发明的实施例的图示了对于ip地址搜索高速缓冲存储器的方法的框图;图5是根据本发明的实施例的图示了执行用于选择属性m的方法的结果的曲线图;图6是根据本发明的替代实施例的图示了执行用于选择属性m的方法的结果的图示;以及图7是根据本发明的实施例的在执行图6的方法时对缓存大小进行比较的曲线图。发明的详细描述在下面的描述中,阐述了许多具体的细节以提供对本发明的各种原理的彻底理解。然而,对于本领域技术人员将明显的是,对于实践本发明并不总是必然需要全部的这些细节。在这个实例中,用于传统的算法和过程的众所周知的电路、控制逻辑和计算机程序指令的细节没有被详细示出,以免不必要地混淆一般概念。通过引用并入本文的文献被视为本申请的组成部分,除了在这些并入的文献中以与本说明书中明确地或隐含地做出的定义冲突的方式所定义的任何术语的方面,仅应考虑本说明书中的定义。定义最高有效位(msb)。在二进制数中,最高有效位(msb)是具有最大值的位位置。最高有效位。在二进制数中,最高有效位是最接近并包括msb的位(bits)。前缀在其对于在另一较短前缀中未被掩码的所有位与该较短前缀具有相同多个msb(msbs)时与该另一个较短的前缀兼容。系统综述现在转向附图,最初参照图1,其是根据本发明的实施例的网元10的框图。网元10可包括例如网络交换机、路由器或诸如网络接口卡(nic)或主机通道适配器(hca)的网络接口设备。网元10通常包括包处理电路12,其可包括用适于协调和执行下文描述的功能的软件所编程的处理器。因此,尽管网元10的方面在图1中和本文中包括许多单独的功能块的其他附图中示出,但这些块不必是单独的物理实体,而是能够表示储存在处理器可访问的存储器中的不同的计算任务或数据对象。这些任务可以以在单一处理元件或多个处理器上运行的软件来执行。软件可以体现在用于与计算机系统一起使用的各种已知的非暂时性介质(诸如磁盘或硬盘驱动器或cd-rom)中的任一个上。代码可分布在这样的介质上,或者可以通过网络从另一计算机系统(未示出)的存储器或储存器分布到网元10。可替代地或另外,由包处理电路12执行的任务可以在诸如现场可编程门阵列或硬连线逻辑的硬件中实现。网元10可以在任何合适的通信网络中并根据任何合适的通信协议来操作。示例性协议可包括以太网或infiniband。网元10包括多个端口14,网元通过该多个端口从通信网络接收输入包(也被称为入口包),并将输出包(也被称为出口包)发送到通信网络。在典型的路径或流16中,包处理电路12从被称为入口端口的端口14之一接收输入包,对包施加某种处理,并通过被称为出口端口的端口14之一转发包。网元10包括主数据库、ip路由表18,其用于获得路由或前缀,以便根据ip路由协议20转发包。前缀也被储存在缓存22中。对每个包进行缓存22的搜索。在缓存命中时,与新的包有关的动作在执行块24中由包处理电路12执行。当存在缓存缺失时,参照路由表18以获得最佳匹配路由。对缓存的更新可在块26中发生。路由表18有时在本文中被称为“主数据库”,其可在独立存储器或嵌入式存储器中实现。由包处理电路12执行的任务之一包括使用缓存来识别包转发信息。以下简要的讨论解释了与直接方式相比较的根据本发明的实施例的缓存查找的优点。假设表2中所示的前缀储存在路由表18中:表2前缀转发信息192.160.1.0/24rif1192.160.0.0/16rif2表3说明了由对于该路由表的几个dip创建的缓存条目。在直接方法中,缓存条目储存搜索的ip地址的精确匹配连同与lpm搜索相关的结果,诸如转发决策。表3缓存中的搜索通过要求缓存的ip地址和dip之间的完全匹配来执行。大型缓存通常使用哈希表来执行高效的搜索。可以看出,缓存dip的精确匹配导致缓存“污染”。污染意味着许多不同的缓存条目被针对给定前缀创建。这降低了缓存的效率。然而,对前缀而不是完整的ip地址进行缓存可能导致错误的决策。例如:在初始化时,缓存为空。1.搜索的第一dip是192.160.2.1。2.lpm搜索导致匹配前缀192.160.0.0/16。对于该前缀的转发是rif2。3.接下来缓存条目被创建:192.160.0.0/16。转发到rif2。4.第二搜索的dip是192.160.1.1。5.缓存上的命中导致将包转发到rif2。然而,对于该包的正确转发决策是rif1,因为dip与是更长前缀的前缀192.160.1.0/24匹配。路由表18所需的信息是对于与包匹配的/m前缀(dip的m个最高有效位)的rif和属性l(以下进行描述)。该信息可以被预先编译并添加到外部设备中的路由表中,或可替代地,添加到嵌入式存储器中的路由表中,使得在匹配时除了rif之外还给出属性l。根据本发明的实施例,执行2阶段缓存查找。在第一搜索中,搜索一定数量(m)的最高有效位处的前缀。如果找到,则进行第二搜索,比较在第一搜索的结果中的l个附加位,l在ipv4方案中从0变化到32-m,并且对于ipv6从0变化到128-m。该方式有时在本文中被称为“m/l方案”。通常,属性l的值基于与路由表18中的/m值兼容的最长前缀的长度。缓存搜索可使用多路哈希表来实现,即,每个索引有多个表条目。搜索这样的哈希表的一种方法在共同受让的申请第15/086,095号中进行了教导,其通过引用并入本文。设计依据插入和逐出机制应是简单的,并且主数据库执行插入所需的信息应易于计算和维护。例如,在m、l方案中,外部设备(例如,路由表18)应提供用于给定插入的属性l的值。还应该计算属性m的值以优化启动时的性能。需要插入策略来优化性能。例如,对每个缓存缺失的插入可能需要过高的带宽并创建进出缓存的元素的振荡。另一方面,将插入减少到缓存缺失的一小部分将使缓存更少响应流量改变。也可使用更复杂的自适应方案,其在命中比例高时减少插入。类似的推理适用于逐出策略。最简单的算法是为逐出随机选择元素,该元素位于新元素将要被插入的位置。可以使用更复杂的算法,其中条目的使用或类型可用于选择要删除的元素。例如,在m、l方案中,具有大的属性l值的元素的删除可能是优选的,因为这样的元素覆盖了相对少的ip地址。现在参照图2,其是根据本发明的实施例的执行ip地址的缓存查找的方法的流程图。出于清晰呈现的目的,过程步骤以特定的线性次序在图2中示出。然而,明显的是,其中许多可以并行、异步或以不同的顺序来执行。本领域中的技术人员还将认识到,过程能够可替代地被表示为例如在状态图中的多个相关的状态或事件。此外,实施该方法可能不需要所有图示的过程步骤。在初始步骤28处,待搜索的dip被接收到。然后,在步骤30处,对数目为m的其最高有效位(msb)进行掩码。属性m是可变的,并且对于ipv4地址可在1到32的范围内,以及对于ipv6地址可在1到128的范围内。选择用于属性m的值在以下进行解释。接下来,在步骤32处,精确匹配查找(例如,缓存的哈希查找)在具有使用任何合适的精确匹配算法进行掩码的m个最高有效位的dip上被执行。在哈希表的情况下,该步骤在缓存中识别多达n个条目。当使用哈希查找时,根据所选的实现,值n指哈希表中的路的数目,或正在搜索的哈希表的数目。接下来,在决策步骤34处,确定是否存在步骤32中被识别的缓存条目尚待处理。如果在步骤34处的确定是否定的,则控制前进到最终的步骤36。报告缓存缺失。如果在步骤34处的确定是肯定的,则控制前进到步骤38。选择在步骤32中识别的条目之一。在步骤40中,dip的数目为l的附加位与所选择的条目的附加位进行比较。属性l通过分析路由表18(图1)被获得并被储存在缓存中。它基于在路由表18中找到的可兼容路由表条目的最大前缀长度。然后,在决策步骤42处,确定比较是否导致二者之间的匹配。如果在步骤42处的确定是否定的,则控制返回到决策步骤34以评估由步骤32产生的另一条目,如果有的话。如果在决策步骤42处的确定是肯定的,则控制前进到最终步骤44。报告缓存命中。来自匹配的条目的转发信息被常规地检索和处理。现在参照图3,其是根据本发明的实施例的图示了图2中所示的逻辑的实现的框图。在块46中接收到的包进行预路由处理,例如,分类或优先排序。这是常规的,并且不在本公开的范围内。然后在块48处,在缓存块50中启动dip查找。缓存缺失被交付给lpm引擎52,该lpm引擎52可经由总线54返回缓存命中,或在不能识别lpm时,可报告默认条目,使缓存在缓存块50中被重新检查。路由信息在路由阶段块56中被吸收。然后,在后路由阶段块58中,可能会发生附加的处理,这在本公开的范围之外。此后,包排入队列。搜索程序属性m是全局参数,其确定用于哈希化搜索到的ip地址的掩码大小。例如,对于ipv4地址,掩码大小可以是24位或28位。搜索到的ip用预定义的掩码进行掩码并被哈希化以访问缓存数据库。为了避免污染现象,掩模大小被设置为小于ip地址的位数的值。对于掩码的数据的一些值,路由表中存在长于掩码大小的兼容前缀长度。这样的前缀也被认为是兼容条目。对于存在兼容条目的情况,缓存条目包括对于匹配所需的附加信息。用于该信息的储存器被称为“增量字段(deltafield)”。该增量字段包含指定使用m位搜索到的ip地址与缓存中发现的ip地址之间进一步比较所需的附加位数(l)的信息。缓存命中仅当搜索到的ip和缓存条目ip地址的最高有效的m+l个最高有效位相等时才被声明。插入程序继续参照图3,另外还参照图1,在缓存缺失时,搜索到的dip地址被发送到lpm引擎52,该lpm引擎52在路由表18中搜索lpm。缓存块50使用的用于搜索缓存22的算法和用于搜索路由表18的算法不必相同。不管搜索的存储器或采用的算法如何,搜索都向缓存块提供以下信息:(1)基于匹配的前缀的转发信息。路由表通常包括默认条目,使得所有搜索都产生该信息。(2)与dip兼容的最高前缀长度。缓存中的条目被如下创建:(1)增量字段=最大(全局掩码大小,通过lpm算法报告的最高前缀长度)-全局掩码大小。(2)ip地址=搜索到的ip地址。储存的位根据全局掩码大小(m)+增量值。(l)(3)转发信息。示例1。表4储存以下前缀。缓存参数m为24。表4前缀转发信息192.160.1.0/24rif1192.160.2.240/28rif2192.170/16rif3/0(默认路由)rif4在表5中,以下的ip地址已在缓存条目中得出:表5在缓存缺失时给缓存填充新的条目可如下来执行:1)提取dip的/m前缀。2)对于该/m前缀取路由表格中最长兼容前缀的长度为l。3)如果l=0,则插入条目,首先检查以确定它并非已经存在。对于检查需要在写入前的读取。4)如果l>0,则插入条目,如果并非已经存在,则第一阶段(哈希表62(图4))具有l值,并且第二阶段(哈希表68)中的条目在/(m+l)处具有rif。冲突仅对ip地址的位中的一些位哈希化可能会导致冲突,即,产生相同哈希输出的两个不同的输入。这样的冲突减少了高速缓冲存储器的利用率,从而增加了缓存缺失的可能性。示例2。表6存储以下前缀(缓存参数m=24)表6前缀转发信息192.160.0.128/32rif1192.160.0.0/16rif2所有具有192.160.0.a的值的dip(其中“a”是128以外的任何值)创建不同的缓存条目,其中信息在表7中示出:表7表7示出了对于实现为哈希表的缓存,具有相同键(24msb)的所有条目被映射到哈希表中的相同地址。当对于这些ip地址的路由表中存在兼容前缀长度>24时,缓存必须为每个这样的ip地址生成不同的条目。现在参考图4,其是根据本发明的实施例的图示了为ip地址搜索高速缓冲存储器的方法的框图。使用图4的布置,问题可通过将缓存划分成依次被检查的两个哈希表来克服。在块60中,dip的m个最高有效位如以上所描述进行掩码,并从结果生成第一哈希键。使用第一哈希键对第一哈希表62的哈希查找在块64中示出。哈希表62仅存储ip地址的m个最高有效位。对于小于或等于主数据库中具有兼容前缀的属性m的ip前缀,也储存属性l的值。哈希表62的功能是为第二哈希表查找提供属性l。在被掩码的dip和哈希表62中找到的m个最高有效位之间进行第一比较。当找到匹配时,属性l的第一值被从条目中检索出来。使用属性l的第一值,dip在块66中以m+l个最高有效位进行掩码,并且第二哈希键由该结果生成。第二哈希键包括具有被掩码的m+l位的dip,并且另一字段表示m+l的值。后一字段可被视为引导硬件在特定表格中搜索精确匹配。使用第二哈希键对第二哈希表68的哈希查找在块70中示出。对于在块70的哈希查找中找到的每个条目,用dip的m+l个最高有效位进行第二比较。当发现匹配时,已经实现了可能的命中,并且属性l的第二值被从条目中检索出来。在属性l的第一值和第二值之间进行第三比较。如果第三比较导致匹配,则报告缓存命中。表8使用表5中所示的数据和m=24对两个哈希表62、68的内容进行了描述:表8删除程序为了实现高缓存效率,删除程序应遵循以下顺序:(1)从哈希表68中删除条目。(2)从哈希表62中删除条目,其中对于在哈希表68中不具有相应条目的条目优先逐出。为了减少对于逐出的执行复杂性,应在两个哈希表62、68上都有命中。对于(1)哈希表62上的缺失或(2)哈希表62上的命中和哈希表68上的缺失,对主数据库执行完整查找。以下讨论涉及对于哈希表62、68的大小的考虑和优化:(1)第二哈希表中的一些条目可被避免:对于哈希表62中具有属性l=0的前缀条目,避免在哈希表68上储存(和搜索)。由于这些前缀不具有与属性l>0兼容的规则,因此哈希表62、68表将储存相同的信息,因此是冗余的。(2)为了在属性l=0时节省用于前缀条目的空间,避免在哈希表62中储存任何信息。对于在哈希表62上产生缺失的搜索,用属性l=0对哈希表68执行搜索。(3)此选项的变型也可在哈希表62上保存条目:避免在哈希表62中储存具有属性l=“y”的前缀。(4)此选项提供了对现在储存增量字段的哈希表62的更好的利用率。应回想起,这包括属性l和转发信息。换句话说,哈希表62也用于储存前缀的第一缓存条目。对于哈希表62中的两个m+l的匹配,不需要访问哈希表68。哈希表68现在被访问用于哈希表62中的条目的仅m个最高有效位的匹配。m的选择。在本发明的方面中,属性m的值是可变的。其初始值可通过列表1的算法来选择。该值可以随后被动态调整,以适应流量的性质。当缓存处理流量时,还需要改变属性m的值的过程。以下对这些问题进行讨论。二叉搜索树(bst)由主存储器或路由表中的数据构成。标记被包括在树的节点的至少一部分中。标记为树的搜索提供了分支指导,指示应选择较长还是较短的子树。标记类似于ip地址的前缀,但缺少相关联的信息字段。它们在节点中的存在或不存在是重要的。这样的标记在搜索树中的放置和使用从由waldvogel等人于1997年在acmsigcomm的第97届关于计算机通信的应用、技术、架构和协议的会议(acmsigcomm’97conferenceonapplications,technologies,architectures,andprotocolsforcomputercommunication)的第25-36页中发表的文献“scalablehigh-speedprefixmatching”中了解到,其通过引用并入本文。列表1从路由表中选择m的初始值。设置m=1。创建具有root=m的二叉搜索树。对于m中的每个标记{count_marker++count_entries+=1+(1<<(lm));//需要覆盖该/m的缓存条目的数目}计算覆盖所有ip地址空间所需的缓存条目的总数:count_entries+=(1<<m)–count_markers//添加非标记增加m并转到2直到m的所有值都被测试。选择需要最低数目的缓存条目(count_entries)的m的值。在列表1中,属性l被设置为路由表中的兼容条目的最大前缀长度。该算法尝试选择需要最少条目来覆盖所有ip地址空间的属性m的值。现在参照图5,其是根据本发明的实施例的图示了对一个数据库执行列表1的算法的结果的曲线图。可以看出,选择的m值约为20。列表1的算法均等对待所有可能的缓存条目,并且不考虑缓存大小。实际上,较短的条目(那些l=0或l值小的条目)更有可能在缓存中,因为它们覆盖了更多数目的ip地址。使用第二算法,如列表2中所示,对大小为c的缓存的覆盖范围的估计可被计算出来,并且属性m的最优值可被选择:列表2选择值m=1。创建具有root=m的bst。对于m中的每个标记{count_marker++count_entries_l+=(1<<(lm));//用该l值对条目进行计数}计算count_entries_m的总数:count_entries_m=(1<<m)–count_markers//添加非标记选择开始于m的c个条目,l=1,l=2...并添加coverage_cache+=count_entries_m*(1<<(32-m))coverage_cache+=count_entries_l(l=1)*(1<<(32-l))...直到添加了c个条目。选择具有最高coverage_cache的m。列表2的算法假定短前缀获取优先级并首先进入到缓存中。这不一定为真。偏斜的流量分布可能会使模式失真。例如,前缀/32可能会经常遇到并进入到缓存中,而前缀/24可能几乎没有流量。因此,这是与列表1的结果不同的近似值。现在参照图6,其是根据本发明的实施例的使用相同数据库在仿真结束时构造的条形图,其示出了缓存中的条目对缓存长度的百分比。较短的前缀趋向于如期望那样来缓存。这在图6中清晰可见。对于短的前缀长度,几乎所有条目都在缓存中。现在参照图7,其是根据本发明的实施例的使用相同数据库对几个缓存大小(32、64和128k)的比较。如预期的那样,属性m的最优值比第一算法中的小(针对32、64和128k缓存分别为15、16和17),并且更接近于通过仿真获得的值。还可注意到,缓存可覆盖大部分的ip地址空间(232个地址)。列表1的算法提供了属性m的上限,而列表2的算法提供了对m的更好的估计。因此,二者之间但更接近第二个的值可以用作属性m的初始值。m的修正。列表1和列表2中呈现的算法可用于为属性m选择初始值或范围,但初始值在所有流量条件下可能不是最优的。因此,可以在操作期间测试m的不同值并测量命中率。由于缓存只需要数百万个包来稳定命中率,因此至少在互联网路由的情况下,测量可在几分之一秒内完成,在其间流量有明显改变是不可能的。更详细地,m=mi的算法在列表3的伪代码中给出。列表3重复{设置m=mi+1并测量命中率。设置m=mi-1并测量命中率。在mi-1、mi、m+1中选择给出最佳结果的新值。}在给定时间间隔已经过去之后搜索可被限制在一定范围内,并且在流量不关键时用较大的跳转(jump)进行补充。例如,如果在某一时刻流量低,则可承担得起测试m的其他值。为了在属性m的第一值和第二值之间转换,两个缓存可同时操作,一个具有m的当前值(旧的缓存),另一个具有新值(新的缓存)。使用阈值以/8msb的增量完成从旧改变到新的过程。对于超过阈值的dip,使用旧的缓存,并且对于未超过阈值的dip,使用新的缓存。在一段间隔之后,阈值增加一个增量,并且重复该过程直到值达到256,因为所有的/8已被迁移到m的新值。使用/8的增量对应于一次影响流量的1/256(假设均匀分布)。该程序产生从属性m的一个值到另一个值的平滑过渡,使得对命中率的影响小。本领域中的技术人员将认识到,本发明不被限制于上文所具体示出和描述的内容。相反,本发明的范围包括上文所描述的各种特征的组合和子组合以及本领域技术人员在阅读以上描述之后将想到的且未在现有技术中公开的其变型和修改。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1