发明内容
本发明所需要解决的技术问题是提供一种基于TCAM的范围多匹配2级分层查找方法,此方法不仅要能解决基于TCAM的包分类问题中的多匹配问题和范围匹配问题,而且要能在TCAM的存储空间和查找功耗上做一个最优的权衡。
为达到上述要求,本发明提供了一种基于TCAM的范围多匹配2级分层查找方法,适用于网络设备中使用TCAM来实现包分类中的多匹配查找和范围匹配查找。其特点在于,首先将原始范围集进行分类处理,提取出宽区间范围(对于现实中的规则库来说,需要解决范围问题的维(域)一般是指源端口域和目的端口域,而由观察知,现实中的源端口域和目的端口域中的范围区间大于最大范围区间W一半的范围是非常少的,所以,在本发明中,我们规定一个范围为宽区间范围的条件是其区间大于或等于1/2最大范围区间W);然后,对剩下的范围集,尽可能多的将有关联的范围合并在一起,组合成一个新的范围,通过这一步之后,所有新的范围之间就都是互不相关的范围了,即它们之间没有任何部分相交或重合的部分。而这些重新组合后的新的范围中绝大多数都是有原先的多个原始范围组合而成的,对这些新的范围中包含不止一个原始范围的新范围,根据它们的起始点,将其划分成若干个相互间距为1的毗连范围。在查找过程中,首先在第一级TCAM+SRAM中对新范围集进行查找,定位到某一个新范围区间,然后再通过对这个新范围进行比较判断,确定是否需要再到第二级TCAM+SRAM中进行毗连范围的查找,从而通过这两次的划分查找来实现基于TCAM的范围多匹配技术。
本发明的特点在于,按照分类处理的方法将范围集进行分类处理:通过判断范围是否为宽区间范围,如果为宽区间范围,则将其采用常用的经典技术来实现如HICUT/HYPERCUT或者用一个单独的小TCAM来实现(因为宽区间范围是非常少的);如果不是,则采用本发明提出的2级分层查找方法来实现。
本发明的特点在于,我们对不包括宽区间范围的范围集采用了TCAM的每个位的三种状态:“0”,“1”,“*”来表示每个范围的前缀。
本发明的特点在于我们采用了最长相同前缀LCP方法来实现了在查找中的TCAM前缀存储技术,与直接将范围转化为前缀的方法相比,大大降低TCAM的存储空间,节省了成本。
本发明的特点在于,我们采用了TCAM中模块划分的技术,通过第一级TCAM查找返回的索引来激活第二级TCAM中相应的模块,实现了区域查找的技术,减小了TCAM的查找范围,从而降低了TCAM的查找功耗。
本发明的特点在于,我们采用了2级查找技术,首先对范围进行粗略定位查找,定位到我们经过模块划分后的某一个新的范围区间内,然后再通过判断来确定这个新的范围区间是否只包含一个原始范围,如果是,则直接就可以得到所需要的查找结果;如果不是,则在这个新的范围区间内上进行二级毗连范围的查找,从而得到最终的匹配结果。
本发明的特点在于,我们的方法综合考虑了基于TCAM的包分类中的多匹配问题以及范围匹配问题,并同时解决了这两个问题。
本发明的特点在于,我们的方法不仅可以解决包分类中的多匹配问题,而且还可以用于解决包分类问题中的单匹配问题。
本发明的特点在于,我们采用了并行技术和流水线技术相结合的方法,理论情况下,我们在一个时钟周期里就可以得到所需要的查找结果。
本发明的特点在于,我们采用了3个小的TCAM来实现范围多匹配技术,从而进一步降低了TCAM的查找功耗,并且降低了成本。
本发明的技术效果在于:本发明所述的方法利用了3个小的TCAM就可以实现TCAM的范围多匹配。本发明的方法不仅降低了实现范围匹配所需要的TCAM存储空间,而且降低TCAM查找功耗,为基于TCAM的范围匹配问题提供了一个非常有效的方法。它的优点在于:1.适用任何情况下的范围集;2.不占用额外的TCAM空间;3.减小了TCAM的存储空间;4.降低了TCAM的查找功耗;5.实现了软硬件协同的技术。
具体实施方式
下面结合具体附图实例来对本发明的技术方案作进一步的详细描述:
一:几个名词和技术方法的介绍
1.最长相同前缀(Longest Common Prefix,LCP)
如表1中所示,每一个范围是由两个端点值组成的范围区间(这里我们规定两个端点值都包含在范围内),前面的一个端点值称为始点,后面一个端点值称为终点。而一个范围的LCP是指这个范围的两个端点值在二进制形式下从左到右依次按位与,直到遇到第一个两个位不相同为止,并且从此位开始以及后面所有位都用“*”代替所组成的三态形式。如表1中的第一个范围的始点是10,即8位的二进制形式为00001010,而其终点是30,即8位的二进制形式为00011110,可以看出从左到右的前3位都依次相同,即都为0,而始点的第4为0,终点的第4位为1,故第一个不相同的位为第4位,则此范围的LCP为:000*****。
表1:一个简单的8位的一维范围集
R1 |
R2 |
R3 |
R4 |
R5 |
R6 |
R7 |
R8 |
R9 |
R10 |
10:30 |
20:50 |
40:70 |
55:60 |
80:100 |
90:115 |
200:220 |
120:150 |
145:160 |
5:255 |
2.最长相同前缀扩展(Extended Longest Common Prefix,ELCP)
将每一个LCP扩展成一对LCP组,扩展方法是将LCP中从左到右的第一个位为“*”的位分别用0和1代替,组成一对0-ELCP和1-ELCP组。如表1中的范围[10:30]的LCP是000*****,则通过最长前缀扩展后得到的0-ELCP和1-ELCP分别为0000****和0001****。
3.宽区间范围
在本发明中,我们规定对于一个N位的范围集,当一个范围的区间大于等于2N-1,也就是理论最大范围的一半时,我们称这个范围为宽区间范围。例如,对于一个8位的范围集,其理论最大范围为[0:255],也就是最大范围宽度W为255,故当一个范围的范围区间为大于等于128时,则此范围为宽区间范围。
4.毗连范围(contiguous range)
毗连范围是指一个范围与另一个范围之间是一种相邻且这两个范围之间的间距为1。如范围[10:19]与[20:30]之间没有重合的部分,且前面一个范围的端点值与后面一个范围的始点值相差为1,我们将这样的一类范围集称为毗连范围集,对应的每一个范围称为毗连范围。
5.最大关联范围集模块
最大关联范围集模块是指尽可能多的将有关联的范围划分到一个模块内,关联的条件是部分相交或包含的关系。例如,有范围集a,b,c,d。它们的关系是:a与b部分相交,b包含c,但d与a,b,c均既没有部分相交也没有任何包含关系,则a,b,c为一个最大关联范围集模块,d单独为一个最大关联范围集模块。
二:方法介绍
第一步:提取出宽区间范围
图2是表1中的每个范围所对应的范围区间图。从图中,我们可以很清楚的看到R10的范围区间为200,远大于最大范围端点值(W=255)的一半,故R10为宽区间范围。前面我们已经提过,现实中的规则库中的源端口域和目的端口域中的宽区间范围的个数是非常少的,而且基本上是固定不变的。考虑到这个特点,对于宽区间范围,我们可以将其提取出来进行单独处理。通过学习,我们知道对于这种情况的范围,经典算法-Hicut/Hypercut等都是非常有效的解决方法,同时,因为这样的范围数量非常少,也可以将他们集中在一个或少量的几个TCAM模块中单独查找。在本发明中,我们不再对宽区间范围的解决方法做详细的介绍。
第二步:划分最大关联范围集模块
经过第一步宽区间范围的提取后,接下来对剩余的范围再进行最大关联范围集模块的划分。从图2中可以看出R1与R2部分相交,R2与R3部分相交,而R3包含R4,即他们之间都存在某种关联关系,而其余的都与它们没有任何的关系,所以,R1、R2、R3、R4组成了一个最大关联范围集模块,同理,R5、R6组成另一个最大关联范围集模块,R8、R9组成第三个最大关联范围集模块。由于R7不与任何一个范围有关联,所以R7单独为一个最大关联范围集模块。经过这一步的划分后,原来由9个范围组成的原始范围集现在被缩减成了4个最大关联范围集模块。
第三步:产生新的范围集
对于经过第二步形成的最大关联范围集模块中,由多个原始范围组合产生的每一个新范围集模块,我们将这个新范围集模块中的所有原始范围的始点中最小的一个始点作为新范围的始点,将所有原始范围的终点中的最大的一个终点作为新范围的终点,则这个由多个原始范围组成的最大关联范围集模块就可以用一个新的范围来代替了,而对于最大关联范围集模块中只包含一个原始范围的情况,其新范围就是原始范围。如图2中,由R1,R2,R3,R4组成的最大关联范围集模块,它们可以由新范围[10:70]来代替。而R7只有它一个,故新范围就是其自身。图2中,去除宽区间范围外的所有原始范围经过最大关联模块划分后产生的新规则集如图3所示。在本发明中,我们将那些只包含有一个原始范围的新范围依次放在那些包含不止一个原始范围的新范围的后面,如表2中的第一列所示,F4中只包含R7一个原始范围,而F1,F2,F3中至少都包含两个或两个以上的原始范围,故将F4放在其余3个新范围之后。
第四步:毗连范围的划分
前面知道,对于经过第三步后产生的新范围集中绝对大数的新范围都是由若干个原始范围组成的,如图3中的新范围F1则是由原始范围R1、R2、R3、R4形成的,结合图2和图3,我们可以看出在这个新范围内部的不同区间内,它们的匹配情况是不同的。如图2,R1与R2的交点20将R1、R2分为两个部分,即R1与R2的交点20将区间[10:19]与区间[20:30]分为两个毗连范围。从图2中可以看出,区间[10:19]内只有R1,而区间[20:30]则有R1,R2,即如果一个查找关键字K在区间[10:19]内,那么这个查找关键字K只与R1匹配;如果一个查找关键字K在区间[20:30]内,那么这个查找关键字K与R1,R2都匹配,即属于多匹配情况,我们的目的是要找到与输入进来的查找关键字K在每一点上的所有匹配情况。当然这里未考虑已经被提取出来做单独处理的宽区间范围R10,因为R10也与之匹配。表2中的第二列中列出了每个新范围内部的毗连范围的情况,而第五列中则列出了第二列中原始范围在每一个毗连范围区间内的分布情况。
第五步:新范围集的最长相同前缀LCP和最长相同前缀扩展ELCP的生成
表3是图3中所示的每一个新范围所对应的LCP以及扩展后的0-ELCP和1-ELCP。在论文“使用三态内容可寻址存储器排序和查找”中已经证明:对于一个不相毗连的范围集,如果查找关键字K在某一个范围R内,那么这个范围R的LCP所对应的0-ELCP或者1-ELCP之一必定是这个范围集内与查找关键字K相匹配的最长前缀。
第六步:新范围内部的毗连范围的最长相同前缀LCP的生成和包含不止一个原始范围的新范围内部的毗连范围所对应的存储信息的产生
表2中的第三列为每一个毗连范围所对应的LCP,而第四列中则详细的记录了每一个LCP所对应的存储信息,此存储信息的内容是在论文“用于解决范围的一个2级TCAM结构”中描述的方法的基础之上加以改进的,目的是为了通过这些信息来判断最终的匹配结果。如表2中的第四列所示,每一个存储信息对应的内容是[L,U,addr-1,addr,addr+1],分别代表的含义是:L:表示此毗连范围的始点;U:表示此毗连范围的终点;addr:表示此毗连范围区间所对应的最后一个存储匹配信息的SRAM的地址;故addr-1和addr+1分别表示此毗连范围的前一个地址和后一个地址。
表2:图3中的新范围内的毗连范围的划分以及每一个毗连范围区间所对应的原始范围
表3:图3中的新范围集中的每个范围所对应的LCP和ELCP
新范围集 |
始点 |
终点 |
LCP |
0-ELCP |
1-ELCP |
F1 |
00001010 |
01000110 |
0******* |
00****** |
01****** |
F2 |
01010000 |
01110011 |
01****** |
010***** |
011***** |
F3 |
01111000 |
10100000 |
******** |
0******* |
1******* |
F4 |
11001000 |
11011100 |
110***** |
1100**** |
1101**** |
第七步:存储到相应的TCAM和SRAM中
首先,将表3中的第五列的0-ELCP存储到TCAM0中,再将第六列的1-ELCP存储到TCAM1中,而将第二列中的始点值存储到与TCAM0相对应的SRAM0中,将第三列中的终点值存储到与TCAM1相对应的SRAM1中,如图4所示;然后,对表2中的新范围集中包含不止只有一个原始范围的新范围,依次将这些新范围内的毗连范围所对应的LCP存储到TCAM2相应的模块中,每一个新范围内的毗连范围存储到TCAM2的一个模块中,并依次给TCAM2的这些模块一个唯一的ID,其次,并依次将这些毗连范围存储信息存储到与TCAM2相对应的SRAM2的相应的位置中;最后再将表2中的第五列中每个毗连范围所对应的原始范围对应的存储到最后一个存储匹配信息的SRAM中,如图4所示。
第八步:包查找过程
数据包的整个查找流程图,如图4所示。其步骤主要有:
801:当输入进来一个查找关键字K的时候,这个查找关键字K被同时送到TCAM0和TCAM1中进行并行查找,并分别返回与TCAM0和TCAM1中与之最优匹配的条目(第一个匹配的条目)的索引值i和j;
802:将这两个索引i和j分别送到SRAM0和SRAM1中读取相应位置的始点值Si和终点值Ej;
803:在比较器C0和C1中,同时将读取出来的始点值Si和终点值Ej与查找关键字K进行比较;
所述的步骤803包括:
8031:在C0中,如果查找关键字K大于或等于从SRAM0中读取的始点值Si成立,则将从TCAM0中返回的索引i输入到比较器C2中,并执行步骤8041。否则,此条路径查找结束;
8032:在C1中,如果查找关键字K的值小于从SRAM1中读取的终点值Ej成立,则将从TCAM1中返回的索引j输入到比较器C3中,并执行步骤8042。否则,此条路径查找结束;
8041:在比较器C2中,如果i小于M(M为新范围集中包含不止一个原始范围的新范围的个数,如本发明中所举的实例中,新范围集包含不止一个原始范围的新范围的个数为3,即M=3)成立,则执行步骤8051,否则,执行步骤8061;
8042:在比较器C3中,如果j小于M成立,则执行步骤8052,否则,执行步骤8062;
8051:激活开关A0;
8052:激活开关A1;
8061:将i、M、N输入到逻辑运算单元ALU0中,然后通过公式(1)计算出索引值index,并执行步骤811;
index=i-M+N (1)
其中,N表示存储到TCAM2中所有毗连范围对应的LCP的个数,如图4中存储到TCAM2所有毗连范围对应的LCP的个数为13,即N=13,而ALU0所需实现的逻辑功能如公式(1)所示。
8062:将j、M、N输入到逻辑运算单元ALU1中,然后通过公式(2)计算出索引值index,并执行步骤811;
index=j-M+N (2)
ALU2所需实现的逻辑功能如公式(2)所示。
807:如果步骤8051被执行,则通过选择器sel1将i赋值给ID,并执行步骤808;如果步骤8052被执行,则通过选择器sel1将j赋值给ID,并执行步骤808;
808:将ID输入到TCAM2中,激活TCAM2中相应的模块,然后,将查找关键字K与TCAM2中被激活的模块的所有条目进行比较,返回最优匹配条目的索引值index0,并执行809;
809:将索引值index0输入到SRAM2中,读取相应的存储信息,并执行810;
810:将从SRAM2中读取的存储信息输入到ALU2中,并将查找关键字K输入到ALU2中,然后通过公式(3)计算出索引值index,并执行步骤811;
811:如果步骤8061、步骤8062和步骤810有一个被执行,则将通过此步骤计算得到的索引值index通过选择器sel2输入到最后一个存储匹配信息的SRAM中,从而得到最终的匹配结果。
从论文“使用三态内容可寻址存储器排序和查找”中可知,在一次查找中,比较器C0和C1最多只有一个是条件满足的,即不存在C0和C1同时条件满足的情况。因此,步骤8041和步骤8042不可能同时被执行,它们最多只有一个被执行,或都不被执行;步骤8051和步骤8052也同样如此,即最多只有一个被执行或都不被执行。如果步骤8051和步骤8052都不被执行,则步骤807到步骤810就都不会被执行。通过这些,我们又知道步骤8061、步骤8062以及步骤810,这三个步骤最多只有一个被执行,或都不被执行。如果这三个步骤都不被执行,则说明比较器C0和C1条件都不满足,则此次查找就已经结束。
通过ALU0和ALU1计算出访问最后一个存储匹配信息的SRAM的索引值index,进而得到最终的匹配结果,其正确性在论文“使用三态内容可寻址存储器排序和查找”中已经详细说明;而通过ALU2计算出访问最后一个存储匹配信息的SRAM的索引值index,进而得到最终的匹配结果,其正确性在论文“用于解决范围的一个2级TCAM结构”中也已详细说明,这里均就不再重复。
接下来,我们将通过举例来进一步说明整个的查找流程:
当查找关键字K=81(01010001)时,通过查找,可知TCAM0的第二个条目与之匹配,即i=1,而TCAM1的第一个条目与之匹配,即j=0,所以从SRAM0的第二行和SRAM1的第一行中分别取出Si=80和Ej=70,并分别送到C0和C1中进行比较判断,通过比较后,我们知道C1条件不满足,因此,此条路径查找结束,而C0条件满足,故C2被激活。于是i=1输入到C2中与M进行比较,此例中M=3,因i<M,即条件满足,故再将i=1赋值给ID,然后通过ID=1来激活TCAM2中的第二个模块,然后查找关键字K=81与此模块内的所有条目进行比较,通过查找知,K=81与此模块内的第一个条目匹配,故返回此条目的索引值index0=7。最后通过此索引到SRAM2相应的位置读取相应的存储信息,读出的地址行内容为:[80,89,6,7,8],然后将此内容输入到ALU2中,因80<81<89,所以index=7。通过index=7到SRAM中得到的查找结果为R5,从图2中,我们也可以看出与K=81相匹配的范围为R5(这里未考虑宽区间范围R10)。当K=210(11010001)时,通过同样的查找,知TCAM0中没有与之匹配的条目,即此条路径查找结束,而TCAM1中的第四个条目与之匹配,即j=3,故Ej=220,通过C1比较知,条件满足,故C3被激活,于是将j输入到C3中与M比较,因j=M,条件不满足,故ALU1被激活,于是j输入到ALU1中,通过公式(1)计算得到index=3-3+13=13,所以从SRAM中得到的查找结果为R7,即K=210与R7匹配,而从图2中,也可以看出与K=220相匹配的范围为R7。
以上内容只是结合具体的实例对本发明实施所作的进一步的详细说明,但不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单变异或替换,都应当视为属于本发明的保护范围。