专利名称:基于tcam的分布式并行ip路由查找方法
技术领域:
IP路由查找是计算机网络应用(如路由器,交换机和防火墙等核心设备中)的关键技术之一。对于IPv4数据包,路由查找的任务是利用IP包头的目的IP地址,查找得到下一跳的路由信息(下一跳出口和下一跳路由器的IP地址等),它属于计算机网络技术领域。
背景技术:
高速IP路由查找技术主要应用于高速信息骨干网络中的G比特或T比特核心路由器。随着光接口技术的飞速发展,单个光接口的处理速度已达到40Gbps(109比特每秒),而且很快将达到160Gbps。这意味着查找引擎需要满足400Mpps(106包每秒)的查找吞吐量。这使得路由查找成为了路由器对IP包处理的主要性能瓶颈之一。
传统的路由查找采用集中式存储串行查找的方式,即路由表被集中存储在一个逻辑存储器中,查找操作之间是串行的一个接一个的顺序执行。这使得路由查找的吞吐量最受限于存储器的访问速率。由于受到当前大规模集成电路工艺水平的限制,就算采用目前最快的存储器芯片,传统的方式也很难满足160Gbps接口(即400Mpps)的处理能力要求。一些现有的文献,如[Reducing TCAM power consumption and increasing throughput]中提到运用完全冗余存储的方式来实现并行查找把一个路由转发表简单重复的存储在多个存储器中,从而实现简单的并行查找。这样做虽然吞吐量有所提高,但同时存储代价要成倍的增长。
TCAM(Ternary Content Accessible Memory),即三元内容寻址内存,是一种新颖的存储器,他允许进行储存内容为通配符的内容查找;对要求满足最长前缀匹配的IP路由查找来说,TCAM能在一次存储器访问周期返回一个查找结果(其他同类技术一般需要多次存储器访问才可返回一个查找结果);正因为这样,基于TCAM的查找技术在吞吐量上是较其他同类技术领先的,单片TCAM可以实现高达266Mpps的查找吞吐量[CYRESS芯片公司http//www.cypress.com/]。但是另一方面,由于TCAM本身的结构原理和受限于当前的工艺水平,TCAM的查找速度很难再大幅度提高,仍然达不到160Gbps的线卡处理速度要求;另外TCAM的容量不能做得很高,单片的TCAM目前只能做到1Mbytes左右的容量,而且价格十分昂贵,功耗很大。如果采用简单的重复存储,尤其是对于大型的路由表来说,功耗和价格都会及其的高,甚至无法具体实现。
注目前国外对基于TCAM的路由查找技术的研究也还处于上升阶段,研究的方向都是针对解决TCAM存在问题的某一个方面进行的,例如
1)单纯降低功耗;[CoolCAMsPower-Efficient TCAMs for Forwarding Engines]2)降低成本,节省资源[Reducing Routing Table Size Using Ternary-CAM]他们都并没有结合多个方面来考虑和最终解决问题。
与传统的集中存储串行查找以及靠简单提高成本增加存储代价来提高吞吐量的方式不同,本专利申请的技术方法的先进性和新颖性体现在利用分布式存储的思想,在不显著增加系统成本的前提下,利用多个TCAM芯片的并行操作实现非常高的查找吞吐量(满足160Gbps的要求),同时还有效的控制功耗。
发明内容
本发明的目的在于提供一种可实现上述功能的基于TCAM的分布式并行IP路由查找方法。
路由查找引擎的主要功能分为2个部分,对路由转发表的维护和对IP包的查找,前者负责管理和组织路由前缀;后者负责把待查找的IP包(的目的IP地址域)送到存储器内进行查找,并把结果返回。
相应的,本发明发明内容主要分为2个组成部分一个是分布式路由转发表的生成;另一个是自适应均衡的并行查找引擎的实现。他们的总体构成一个基于TCAM的路由查找引擎的硬件设计方案。
在此之前我们先要说明一下分布式存储,并行查找的主要思路对于基于TCAM的查找技术来说,传统的集中式查找方法是将所有的路由前缀都存放在一个TCAM里面,那么每个处理周期,我们只能访问一次TCAM存储器,只能对一个IP包进行查找;而如果我们把路由前缀分散的存储在多个TCAM芯片里面,那么每个周期我们不但可以同时对多个TCAM进行访问,对多个IP包进行查找,而且并不带来显著得额外开销。但前提是先解决以下的问题1)我们采取什么样的分布存储策略,使得路由前缀能够平均的存储在这些TCAM芯片里面,保证存储的利用率;而且要便于实现和便于管理,不需要很大的管理维护开销。
2)如何使得查找任务能够均匀的分给这些TCAM,保证不出现拥塞,保证查找吞吐量。对于问题1),我们的分布式路由转发表生成算法就给出了很好的解决方法;对于问题2)我们不但在表生成算法里考虑到了,而且我们运用少量冗余存储以及一些自适应均衡的机制使得问题也很好的解决了。下面我们详细介绍设计方案。
本发明的特征在于,它依次含有以下由一个FPGA和多个TCAM来实现的步骤(1),设定三元内容寻址内存TCAM的片数K,以及每个TCAM的分区数P;
定义一个IP地址或一个路由前缀的第l0到13比特为这个IP地址或路由前缀的ID,据此把路由前缀分成16份,每一份都是具有相同的ID的路由前缀的集合即前缀组,在对每个TCAM芯片分区时,使每个分区能存的前缀数目和一个前缀组包含的前缀数目相当,相应的测定每个前缀组的被访问流量密度D_id[j],j为这个前缀组的ID,D_id[j]在数值上等于该前缀组包含的的所有前缀被访问的频率的和占所有路由前缀总的访问频率的百分比当一个前缀组对应的访问频率较高时要根据冗余度KP/16,在多个不同的TCAM芯片中存储所述的前缀组;(2),形成分布式存储的路由转发表它包含以下步骤(2.1),预计算G[j],j=0,1,2,...,15和W[j],j=0,1,...,15;G[j]为ID等于j的这个前缀组被储存的份数,其中每一个G[j]根据下式计算G[j]=[K×P×D_id[j],j=0,1,2,...15;[]表示取整,要求结果大于0小于K;W[j]为ID的与j的前缀组在一个TCAM芯片内的等效被访问频率,W[j]在数值上等于前缀组i的被访问流量密度除以这个前缀组被存储的总份数每一个W[j]用下式表示W[j]=D_id[j]/G[j];j=0,1,...,15;(2.2),初始化,其中包括决策变量Qk,k=l,2,...K,Qk为第K个TCAM芯片存储的前缀组的集合,|Qk|表示第K个TCAM芯片存储的前缀组的个数;目标值D[k],k=1,2,...K,D[k]为第K个TCAM芯片所负担的查找流量密度,它在数值上等于所有存储在该TCAM上的前缀组的等效访问频率W[j]=D_id[j]/G[j]的和,即D[k]=∑j∈QkD_id[j]/G[j];(2.3),计算Qk和D[k],它依次包含以下步骤(2.3.1),给对应的ID组{j|j=0,1,2,...15}重新按w[j]的值从小到大的顺序编号,其结果用{Sid
,Sid[1],...,Sid[15]}表示,Sid表示各ID组i的流量从小到大的排序关系;(2.3.2),依据上一步得到的Sid[i]指示的顺序,把各个ID组i按以下步骤分配给TCAM存储得到Qk,k=1,2,...,K,D[k],k=1,2,...K;对于要分配的ID组Sid[i],从i=0开始,按照它所需要的分配次数G[Sid[i]]在K个TCAM里面挑选已分得流量最小的G[Sid[i]]个逐次分配,分配时要使等效访问频率W[j]高的ID组先被分配,低的后分配,每分配一次,要按D[k]从大到小的顺序给TCAM编号,用中间变量{Sc
,Sc[1],...,Sc[K]]表示,当满足条件Sid[i]∉QSc[k]]]>
而且|QSc[k]|<Mini=1...K|Qi|+1]]>时,那么就把ID组Sid[i]分配给第Sc[k]号TCAM芯片,直到这个ID组被分配了G[Sid[i]]次;再使i=i+1,重新以上的过程,分配器他的ID组,直到i>15时分配全部结束,得到所需要的Qk和D[k],k=1,2,...,K;上述步骤(1),(2),由现场可编程门阵列FPGA来实现;(3),实现自适应均衡的并行查找,它依次包含以下步骤(3.1),在上述FPGA控制下,提取待查找的IP地址的第10-13这4个比特,把他们送到上述FPGA内一个含有K×P个匹配器的匹配器堆构成的索引路逻辑Index Logic不见,其中每个TCAM对应P个匹配器,每个匹配器又对应这个TCAM中的一个分区,他们记录着这个TCAM的P个分区内存储着的前缀组信息,这P个匹配器又对应着一个输出,它通过比较IP地址的ID和前缀组的ID来指示这个TCAM内是否含有与当前IP匹配的前缀;当输入的IP的ID字段和组内某个匹配器的index域匹配时,对应的值partition就被输出,即这个组的返回值,表示这个TCAM的这个分区存有和当前待查IP匹配的前缀;否则返回一个不命中信号;(3.2)上述FPGA中,由比较器构成的自适应均衡优先级选择逻辑部件在收到上述Partition值后,就从各自串联着一个TCAM的FIFO存储器构成的FIFO队列计数器中选择一个FIFO存储器,他对应于多个存储有和当前IP地址相匹配的前缀的TCAM中负载最轻的一个,把当前的待查找IP通过这个FIFO存储器分配给这个负荷最轻的TCAM实现查找;然后合并器以比TCAM查找速度快K倍的速度,把K个TCAM查找得到的结果依次返回。
我们运用4片1.15MByte的工作在133MHz的TCAM,实现了高达500Mpps的路由查找吞吐量,最大支持800K的路由前缀,功耗仅有6.4瓦。这是采用国内外当前其他任何技术都无法实现的。
图1.路由前缀按照第10-13比特的分布图。
子图APacBell路由器的路由前缀第10-13bit的分布图;子图BAADS路由器的路由前缀第10-13bit的分布图;子图CPaix路由器的路由前缀第10-13bit的分布图;子图DMae-West路由器的路由前缀第10-13bit的分布图;图2.TCAM存储器的组织示意图。
图3.分布式路由表生成的程序流程框图。
图4.分布式并行查找引擎的电路原理图。
图5.自适应优先级选择器的程序流程框图。
图6.索引逻辑原理示意图。
图7.查找吞吐量随输入负荷的变化曲线。
具体实施例方式路由转发表的生成主要是根据原始的路由前缀和前缀被查找的频率,在给定TCAM芯片个数和每个芯片分区数的条件下,得到哪些表项应放在哪个TCAM芯片中,哪条表项应该被多次存放(冗余)。他要做优化的是尽可能使得前缀表项在多个TCAM内均匀分配,同时前缀表项对应的访问频率(流量强度)也要在这些TCAM内均匀分配。我们已经证明,这个优化问题其实是一个NP难的问题。后面我们就给出一个效果较好的近似算法。
如果要以一条前缀为单位来进行分配,那么需要的运算量就太大了,典型的路由表包含1到100万条前缀;同时我们还需要记录分配的结果,这样在查找的时候,我们才知道哪个TCAM内放有可以和当前要查的IP匹配的前缀,如果以每一条前缀为单位来统计,那么需要的控制部件的存储开销太大。
于是我们寻求一种粗粒度的,对路由表进行划分的办法,将路由表分成若干组,我们以每一组为一个单位来进行分配和统计。这样的分配方式需要满足容易实现和容易区分的要求。即给出一个前缀,能很快的得出他属于哪一组,实现对它的分类存放;同时给出一个待查的IP地址,也能很快得出哪一个前缀组存有和他匹配的前缀。
通过对大量路由表数据的调查,我们发现,如果根据前缀的第10-13这4个比特将他们分成24=16份;可以看出分得结果相对比较平均,每份的数目相当,可以利用来对路由表进行均匀切割,参见图一。每一组包含的前缀数目相当,于是,宏观上,我们只要保证分配到各个TCAM内的前缀的组数一样,那么就可以使得宏观上分配到他们的前缀的数目基本一样。另外,通过简单的提取比较操作,就可以知道这些前缀属于哪一个组,或者哪一个IP对应哪一个组,应该将这个IP送到存有这个组的那个TCAM那进行查找。
实现了均衡的分布式存储,接下来需要考虑的是如何使得查找任务的流量在多个TCAM芯片间均衡,只有这样,我们才能真正发挥并行查找的优势(这时吞吐量才能达到最大)。为了实现这个目标,我们需要知道前缀被访问的频率;前面说过了,如果统计每条前缀被访问的频率,那么粒度太小,非常耗费资源,我们同样是以前缀组为单位来统计访问频率就可以了。下面我们先给出一些符号定义,然后我们将给出一个前缀组分配(或表生成)的算法。符号说明1)定义一个IP地址或一个路由前缀的第10到13比特(4比特)为这个IP地址或路由前缀的ID;具有相同ID的路由前缀的集合叫做一个前缀组,并定义D_id[j]为ID等于j的这个前缀组的被访问流量密度;他数值上等于,该前缀组包含的所有前缀被访问的频率占总访问频率的百分比的和;这个频率是可以事先测得的,也输入条件之一;2)设有K个TCAM芯片;每个TCAM被分为P个分区;我们规定每个分区能存储的前缀数目应该和一个前缀组包含的器前缀数目相当(因为TCAM逻辑分区的大小是可以指定的);K和P的乘积代表了所给出的存储能力,K×P应该大于16,才能保证所有的前缀组都放入了TCAM内;K×P/16表示总存储能力与原始需求的比,我们定义为分布式存储的冗余度,它可以被利用来进行优化性能。(逻辑分区功能是TCAM的很新的可选功能,他使得匹配搜索可以限定在一个TCAM分区内进行,使得功耗能比较大程度的减少,参见CYPRESS公司TCAM芯片的MiniKey功能)3)我们用G[j]来表示ID等于j的这个前缀组被存储的份数,他是一个算法的决策值当一个前缀组对应的访问频率较高时,我们就会考虑对他进行冗余存储,在多个不同的TCAM芯片中存放;4)定义W[j]为ID等于j的前缀组在一个TCAM内的等效访问频率,他在数值上等于前缀组j的被访问流量密度除以这个前缀组被存放的总份数,即W[j]=D_id[j]/G[j];5)定义S={1,2,...,16}为所有前缀组的集合,即用前缀组的ID来代表这个前缀组;定义Qk,(k=1,...,K)为第k个TCAM储存的前缀组的集合,|Qk|表示Qk中元素的个数;我们约定用j∈Qk表示ID等于j的前缀组在第k个TCAM内有存储;进一步,我们定义D[k]为第k个TCAM所负担的查找流量密度,它在数值上等于所有存储在该TCAM上的前缀组的等效访问频率W[j]=D_id[j]/G[j]的和,即D[k]=∑j∈QkD_id[j]/G[j];其中Qj就是我们要求的分配方案;分布式存储路由转发表生成算法的描述(流程参见图3)第一步先是预计算,按照访问频率较高的得到较多的存储空间的原则,得到G[j](j=0,1,...,15),并根据定义得到W[j](j=0,1,...,15),具体的算式G[j]=[K×P×D_id[j]](j=0,1,...,15);([]代表取整,并要求结果大于0,小于K)W[j]=D_id[j]/G[j](j=0,1,...,15);第二步是初始化,把我们要决策的变量复位,包括决策变量Qk(k=1,2,...,K),目标(相关)值D[k](k=1,2,...,K)和一些中间变量(后面用到会定义);第三步开始计算首先,我们按照W[j]从大到小的顺序,给他们对应的ID组{j|j=0,1,...,15}排列,结果用{Sid
,Sid[1],...,Sid[15]}来表示;Sid[i]代表了各个ID组的流量大小排序关系。
接下来,依据上一步得到的Sid[i]指示的顺序,把各个ID组分配给TCAM存储。这个排序为的是在后面让等效访问频率高的ID组先被分配,低的后分配,这样便于把访问频率低的ID组“插缝”,从而平摊流量。
对于当前要分配的ID组Sid[i],它需要分配的次数是G[Sid[i]],接下来我们要做的是在K个TCAM里面挑选出其中G[Sid[i]]个,把当前的ID组Sid[i]分配给他们,原则是选择K个中已分得流量最小的G[Sid[i]]个。我们的做法是,把K个TCAM按照当前已分得的流量D[k](k=1,2,...,K)排序,选择其中最小的G[Sid[i]]个。
接下来我们只要根据Qk,(k=1,...,K)来对前缀组进行分配分存储就可以了。图2是一个分布式的TCAM存储器的组织示意图(具体的数值和具体的流量分布有关系,这里只是一个示范)图中表示运用K块TCAM,每个TCAM分为P个分区,每个分区存储一个前缀组。如果路由表前缀总数是N,那么每个分区大约有N/16的空间。(注意同一个TCAM内部没有冗余(都不相同)表项;而不同的TCAM间允许少量冗余即重复的表项。)有了分布式存储的路由表,我们就可以利用分布式存储的特点进行并行查找,大幅度的提高吞吐量。由于我们的表生成算法考虑到流量均衡的问题,而且可能存在一些冗余度(当K×P>16的时候),所以在结合后面要提到的自适应均衡结构后,我们的并行查找吞吐量得到了很好的保证。下面介绍具体的实现和给出详细的查找流程说明。
总体设计总体的设计参见图4,主要的功能部件除了并行组织的K个TCAM(和他配套的SRAM)外,还包括一个索引逻辑,一个自适应均衡的优先级选择逻辑,一个合并器和一系列相应的FIFO缓冲队列。粗略的说,对于一个待查找的IP地址,首先他的10-13比特被提取出来,到索引模块(Index Logic)进行索引,得到存有与这个IP地址匹配的TCAM存储器的编号,这个编号可能不唯一;接着自适应优先级选择模块(Priority Selector)根据目前各个TCAM的闲忙情况选择最空闲的一个TCAM,把IP分配给他;每个处理周期,K个TCAM模块并行的进行处理,从他们各自对应的FIFO缓冲那提取要查找的IP进行查找并返回结果。
每个模块的功能和实现首先,索引逻辑的原理如图六所示,它主要负责告诉后面的部件,当前要查的这个IP地址在哪几个TCAM内有和他相应的前缀;它通过比较IP地址的ID和前缀组的ID来实现索引;具体实现上,他是一个含有K×P个匹配器的匹配器堆,其中每个TCAM对应P个匹配器(一组),每个匹配器记录着这个TCAM的P个分区内储存的前缀组的信息;这一组匹配器对应一个输出,指示这个TCAM内是否含有与当前IP匹配的前缀。
一个组内的所有匹配器是并行工作的,每个匹配器对应这个TCAM中的一个分区,当输入的(IP的)ID字段和组内某个匹配器的index域匹配时,对应的Partition值就是这组的返回值,意味着这个TCAM的这个分区内存有和当前待查IP匹配的前缀;如果对应的TCAM中不含有与当前待查IP匹配的前缀,那么返回一个不命中信号。
自适应均衡优先级选择逻辑主要负责的是根据每个TCAM对应的FIFO队列的空满状态计数器,判断这些TCAM查找的负荷量;再根据索引逻辑给出的结果,按照负荷量少的优先原则,在多个储存有和当前IP地址匹配前缀的TCAM内选择负荷最轻的一个,把当前的查找任务分配给它。具体的实现上,他其实就是一个比较器,比较存有与当前待查IP匹配的前缀的TCAM对应的FIFO队列的计数器,选择其中最小的一个,把当前的待查IP地址分配给这个TCAM去执行查找。下面给出自适应均衡优先级选择逻辑的处理流程。
自适应均衡优先级选择逻辑的处理流程(参见图5)第一步初始化所有决策值和中间变量;第二步根据索引逻辑给出的是否有匹配的结果,先得出一个可行解;第三步在有一个可行解的基础上,根据各个TCAM对应的FIFO队列的缓冲计数器值得到最优值,也就是队列计数值最小,队列最空的一的TCAM。
----------------------------------------------------------------------另外由于这里引入了流量调度,所以需要排队缓冲队列,也就是前面提到的FIFO缓冲队列,即First In First Out Buffer(先进先出缓冲队列),他是一个按照写入顺序读出的存储器,用来对分配要查找的IP进行缓冲,对于一般情况,他的容量典型值是能存储10个左右的待查找IP地址。
合并器的作用是把K个TCAM查找的结果依次安排返回;它的工作频率应该是TCAM存储器的K倍,但由于它的功能很简单,只需轮流的把K个查找结果返回,所以完全可以高速实现。
详细流程(参考图3)对于一个待查找的32位IPv4地址,首先,他的第10-13这4个比特被提取出来,送到Index Logic进行匹配;K个组返回K个匹配结果,命中的返回的是对应的TCAM中的分区号Partition Number,不命中的返回一个不命中标志;然后自适应优先级选择逻辑根据IndexLogic的返回结果和TCAM对应的FIFO队列的计数器值,在命中的TCAM里面,选择最空闲的一个作为最终返回值,把IP分配给他执行查找(送入对应的FIFO队列)。K个TCAM模块每个周期并行的从各自对应的队列中取出一个IP执行查找,并将结果输出。结果返回模块把这些结果汇总返回。
我们可以看到由于K个TCAM是并行工作,所以吞吐量大大提高。控制逻辑可以用FPGA等可编程器件实现,也可以用专用的ASIC芯片实现。
我们采用CYPRESS公司型号为CYNSE70256的TCAM芯片来进行具体的实施示范。控制部分模块采用A1tera公司的FPGA(EP2A70)。CYPRESS的这款TCAM工作在133MHz,单片的容量是256K*36bit约为1.15MByte,支持256K条前缀的存储,当所有表项同时进行匹配时最大功耗是8瓦。
对于一个有800K条前缀的路由表1)首先我们采用K=4片TCAM,并且给每个TCAM芯片分P=5个区,每个区可以存放256K/5=51.2K前缀,满足800K/16≈51.2K的要求,一个分区可以放得下一个前缀组。K×P=20,20/16=1.25,也就是冗余度为1.25>1,我们可以利用来优化性能。具体的前缀分配和实际的访问流量密度有关,这里我们假定16个前缀组的被访问流量密度如下表表一16个前缀组的被访问流量密度(百分比)
2)接下来,我们根据表生成算法,我们得到Q1={2,4,10,12,13};Q2={0,3,4,5,12};Q3={1,7,11,12,15);Q4={4,6,8,9,14};3)我们根据2)得到的结果,将0-15这16个前缀组分配存储到4个TCAM芯片。从这个结果看出,第4和第12这2个前缀组由于对应的访问密度大,所以在多个TCAM内存有。另外,我们得到,在这种分配下,4个TCAM负担的查找流量密度分别为(百分比)24.67%,25.67%,24.33%和25.33%,相当平均。
4)前3步完成了路由表前缀的分布式存储,接下来,我们还要运用这个结果,同步更新方案中索引逻辑的4组索引表,见下表对应1#TCAM的索引表
对应2#TCAM的索引表
对应3#TCAM的索引表
对应4#TCAM的索引表
5)以上4步就绪后,就可以进行并行查找了,具体流程参考上一章的流程说明。
我们对这种情况进行了实践仿真,得到吞吐量关于流量强度的曲线图,如图七所示,(注意到实际采用的冗余度为20/16=1.25)吞吐量基本上能满足随输入负载线性增长,最大吞吐量在500Mpps以上。
另外,每个TCAM分为5个分区,每次查找只在一个分区内进行,所以功耗只有8瓦/5=1.6瓦,4个芯片并行工作,总共1.6瓦*4=6.4瓦。
结论,我们运用4片1.15MByte的工作在133MHz的TCAM,实现了高达500Mpps的路由查找吞吐量,最大支持800K的路由前缀,功耗仅有6.4瓦。这是采用国内外当前其他任何技术都无法实现的。
权利要求
1.基于TCAM的分布式并行IP路由查找方法,其特征在于,它依次含有以下由一个FPGA和多个TCAM来实现的步骤(1),设定三元内容寻址内存TCAM的片数K,以及每个TCAM的分区数P;定义一个IP地址或一个路由前缀的第10到13比特为这个IP地址或路由前缀的ID,据此把路由前缀分成16份,每一份都是具有相同的ID的路由前缀的集合即前缀组,在对每个TCAM芯片分区时,使每个分区能存的前缀数目和一个前缀组包含的前缀数目相当,相应的测定每个前缀组的被访问流量密度D_id[j],j为这个前缀组的ID,D_id[j]在数值上等于该前缀组包含的的所有前缀被访问的频率的和占所有路由前缀总的访问频率的百分比;当一个前缀组对应的访问频率较高时要根据冗余度KP/16,在多个不同的TCAM芯片中存储所述的前缀组;(2),形成分布式存储的路由转发表它包含以下步骤(2.1),预计算G[j],j=0,1,2,...,15和W[j],j=0,1,...,15;G[j]为ID等于j的这个前缀组被储存的份数,其中每一个G[j]根据下式计算G[j]=[K×P×D_id[j],j=0,1,2,...15;[]表示取整,要求结果大于0小于K;W[j]为ID的与j的前缀组在一个TCAM芯片内的等效被访问频率,W[j]在数值上等于前缀组j的被访问流量密度除以这个前缀组被存储的总份数;每一个W[j]用下式表示W[j]=D_id[j]/G[j];j=0,1,...,15;(2.2),初始化,其中包括决策变量Qk,k=1,2,...K,Qk为第K个TCAM芯片存储的前缀组的集合,|Qk|表示第K个TCAM芯片存储的前缀组的个数;目标值D[k],k=1,2,...K,D[k]为第K个TCAM芯片所负担的查找流量密度,它在数值上等于所有存储在该TCAM上的前缀组的等效访问频率W[j]=D_id[j]/G[j]的和,即D[k]=∑j∈QkD_id[j]/G[j];(2.3),计算Qk和D[k],它依次包含以下步骤(2.3.1),给对应的ID组{j|j=0,1,2,...,15}重新按w[j]的值从小到大的顺序编号,其结果用{Sid
,Sid[1],...,Sid[15]}表示,Sid表示各ID组i的流量从小到大的排序关系;(2.3.2),依据上一步得到的Sid[i]指示的顺序,把各个ID组i按以下步骤分配给TCAM存储得到Qk,k=1,2,...,K,D[k],k=1,2,...K;对于要分配的ID组Sid[i],从i=0开始,按照它所需要的分配次数G[Sid[i]]在K个TCAM里面挑选已分得流量最小的G[Sid[i]]个逐次分配,分配时要使等效访问频率W[j]高的ID组先被分配,低的后分配,每分配一次,要按D[k]从大到小的顺序给TCAM编号,用中间变量{Sc
,Sc[1],...,Sc[K]]表示,当满足条件Sid[i]∉QSc[k]]]>而且|QSc[k]|<Mini=1...K|Qi|+1]]>时,那么就把ID组Sid[i]分配给第Sc[k]号TCAM芯片,直到这个ID组被分配了G[Sid[i]]次;再使i=i+1,重新以上的过程,分配器他的ID组,直到i>15时分配全部结束,得到所需要的Qk和D[k],k=1,2,...,K;上述步骤(1),(2),由现场可编程门阵列FPGA来实现;(3),实现自适应均衡的并行查找,它依次包含以下步骤(3.1),在上述FPGA控制下,提取待查找的IP地址的第10-13这4个比特,把他们送到上述FPGA内一个含有K×P个匹配器的匹配器堆构成的索引路逻辑Index Logic不见,其中每个TCAM对应P个匹配器,每个匹配器又对应这个TCAM中的一个分区,他们记录着这个TCAM的P个分区内存储着的前缀组信息,这P个匹配器又对应着一个输出,它通过比较IP地址的ID和前缀组的ID来指示这个TCAM内是否含有与当前IP匹配的前缀;当输入的IP的ID字段和组内某个匹配器的index域匹配时,对应的值partition就被输出,即这个组的返回值,表示这个TCAM的这个分区存有和当前待查IP匹配的前缀;否则返回一个不命中信号;(3.2)上述FPGA中,由比较器构成的自适应均衡优先级选择逻辑部件在收到上述Partition值后,就从各自串联着一个TCAM的FIFO存储器构成的FIFO队列计数器中选择一个FIFO存储器,他对应于多个存储有和当前IP地址相匹配的前缀的TCAM中负载最轻的一个,把当前的待查找IP通过这个FIFO存储器分配给这个负荷最轻的TCAM实现查找;然后合并器以比TCAM查找速度快K倍的速度,把K个TCAM查找得到的结果依次返回。
全文摘要
基于TCAM的分布式并行IP路由查找方法,属于计算机网络技术领域,其特征在于它把一个IP地址或路由前缀的第10到13比特作为其ID,据此把路由前缀分成16个具有相同ID的前缀组,结合索引逻辑的设计,使多个TCAM芯片分别分区存储了这些前缀,从而使得查找任务在多个TCAM芯片间并行执行成为可能;它允许对被访问频率较高的前缀组实行TCAM片间冗余存储,使得查找流量能在多个TCAM间进一步均摊;此外,自适应优先选择器又使得查找流量在微观上得到调节,进一步保证了查找吞吐量。他的特点是吞吐量很高,但功耗却低。
文档编号H04L12/24GK1561047SQ20041000452
公开日2005年1月5日 申请日期2004年2月20日 优先权日2004年2月20日
发明者郑凯, 刘斌, 郑 凯 申请人:清华大学