CN115604208A - Tcam匹配查找方法与装置 - Google Patents

Tcam匹配查找方法与装置 Download PDF

Info

Publication number
CN115604208A
CN115604208A CN202211194609.8A CN202211194609A CN115604208A CN 115604208 A CN115604208 A CN 115604208A CN 202211194609 A CN202211194609 A CN 202211194609A CN 115604208 A CN115604208 A CN 115604208A
Authority
CN
China
Prior art keywords
list
searching
search
lookup
unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202211194609.8A
Other languages
English (en)
Inventor
杨彦波
敖情波
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fiberhome Telecommunication Technologies Co Ltd
Wuhan Fisilink Microelectronics Technology Co Ltd
Original Assignee
Fiberhome Telecommunication Technologies Co Ltd
Wuhan Fisilink Microelectronics Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fiberhome Telecommunication Technologies Co Ltd, Wuhan Fisilink Microelectronics Technology Co Ltd filed Critical Fiberhome Telecommunication Technologies Co Ltd
Priority to CN202211194609.8A priority Critical patent/CN115604208A/zh
Publication of CN115604208A publication Critical patent/CN115604208A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/25Routing or path finding in a switch fabric
    • H04L49/252Store and forward routing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明公开一种TCAM匹配查找方法:采用分段查找的方式,将线性查找、分步查找和列表查找相结合实现TCAM匹配查找方式,并通过流水线处理方式提高系统查找性能,所述分段查找,是把要查找的内容分成若干段进行多级查找;所述线性查找法,直接将查找内容作为存储器的访问地址,用访问的结果作为匹配查找结果;所述分步查找采用多分支树查找方法;所述列表查找法,将表项以列表的形式存储到存储器,查找的时候,依次比对存储空间里面的表项配置,寻找匹配查找结果。本发明可实现TCAM查表方式,减少了购买TCAM IP或器件的成本;在难以获得TCAM资源的情况下,更是一种有效的实现路径,提高了资源利用率,且配置更灵活。本发明还提供了相应的TCAM匹配查找装置。

Description

TCAM匹配查找方法与装置
技术领域
本发明属于通信技术领域,更具体地,涉及一种TCAM匹配查找方法与装置。
背景技术
随着人工智能(Artificial Intelligence,AI)的速度和准确性逐渐接近人脑,各系统越来越依赖数据中心服务器,将应用从边缘连接到云。由于连接到互联网的设备数量激增,加上互联网流量呈指数级增长,所以如今的系统在很多情况下都需要极快的搜索速度。路由器是网络设备的关键组件,需要在接收数据包之后,决定将其发送到何处,以执行互联网协议(Internet Protocol,IP)转发(或称为路由)。如今的路由器需要在大量数据中进行快速查找,以实现快速的数据包路由。需要高速搜索的其他应用还包括CPU(CentralProcessing Unit,中央处理器)、数据库搜索引擎等。
尽管设计人员有多种选择来执行这些搜索,但最有效的方法仍是使用TCAM(Ternary Content Addressable Memory,三态内容寻址存储器)。TCAM将搜索数据和一份列明存储数据的表格进行比对,并返回匹配数据的地址。TCAM搜索功能的运行速度比软件中的同类功能快得多,因此TCAM在网络设备中被大量使用。例如互联网路由器中的地址查找、数据压缩和数据库加速。
TCAM是一种三态内容寻址存储器,主要用于快速查找ACL(Access Control List,访问控制列表)、路由等表项。TCAM中每个比特位有三种状态,除掉“0”和“1”外,还有一个不关注(don’t care)状态,正是TCAM的这种状态特征使其既能进行精确匹配查找,又能进行模糊匹配查找。
使用TCAM器件查找时,TCAM内所有条目是并行访问的,比如,如果有100条ACL条目,TCAM一次就能对这100条ACL进行对比操作,然后返回比对成功的地址,因此TCAM还具有查找性能优势。
TCAM虽然具有性能优势,却需要更大的面积和更高的功耗。与常用RAM(RandomAccess Memory)相比,TCAM中的每个单独的存储位都必须具有比对电路,以检测存储位和输入位之间的匹配情况。此外,在使用TCAM时,由于在搜索时间内并行搜索了所有条目,所以会有大量的电路处于活动状态。因此TCAM的功耗也很高。
使用TCAM查找具有速度快、实现简单的优点,但是也有一些不足:
TCAM作为一种专用的器件,需要额外的IP费用(芯片内使用TCAM时)或器件费用(使用TCAM作为外部器件),并且有些场景(例如FPGA内)下,TCAM并不容易获得。
由于TCAM使用的是并行匹配比较方式,所以TCAM芯片的功耗较大,因此导致芯片或系统的功耗很大。
发明内容
针对现有技术的以上不足,本发明提供了一种TCAM匹配查找方案,采用RAM进行表项存储和查找,并且通过流水线处理,可获得极高的查找吞吐量,达到一个时钟周期可完成一个查找请求的速度。采用本方法不需要购买相关TCAM IP或器件,可显著降低查找系统成本。同时采用RAM进行存储和查表,对系统的功耗也有显著降低。
为实现上述目的,按照本发明的一个方面,提供了一种TCAM匹配查找方法,所述方法包括:采用分段查找的方式,将线性查找、分步查找和列表查找相结合实现TCAM匹配查找方式,并通过流水线处理方式提高系统查找性能,其中:
所述分段查找,是把要查找的内容分成若干段进行多级查找;
所述线性查找法,直接将查找内容作为存储器的访问地址,用访问的结果作为匹配查找结果;
所述分步查找采用多分支树查找方法;
所述列表查找法,将表项以列表的形式存储到存储器,查找的时候,依次比对存储空间里面的表项配置,寻找匹配查找结果。
本发明的一个实施例中,将线性查找、分步查找和列表查找相结合,具体为:
采用线性查找单元和若干个分步和列表查找单元组成的结构,在线性查找单元后面跟随N个分步和列表查找单元,匹配查找以流水线方式从线性查找单元依次经过N个分步和列表查找单元,且每级采用流水线方式进行查找,直到找到匹配的路径,各级进行查找结果仲裁,输出最后查找结果,N为预设值。
本发明的一个实施例中,所述线性查找单元由线性条目存储单元和线性查找控制单元组成,线性查找单元的输入信号为输入的待查找信号key,线性查找控制单元以该单元设置的查找长度n,取key的n个最高位作为地址访问线性条目存储单元,线性条目存储单元用于存储查找表项。
本发明的一个实施例中,所述线性条目存储单元里面存储的是实现查表操作所需的数据结构,数据结构中箭头两边的数字说明箭头相连的数据结构之间的对应关系,具体为:
1、
Figure BDA0003870476450000031
取key的首分段n位,即前n位作为地址,访问线性条目存储单元,获得一条线性条目;
2、
Figure BDA0003870476450000032
从当前尚未参加查找的key的高位开始取m位,参与下一级访问地址;
3、
Figure BDA0003870476450000033
key的某个分步查找分段的k位作为地址,在本级中访问分步子条目;
4、
Figure BDA0003870476450000041
列表里面包含0到validNum个列表子条目,取key的长度根据前一匹配条目中StrideLen2取,ValidNum表示条目包含的子条目StrideEntry的数目;
5、
Figure BDA0003870476450000042
表示根据TileIndexNext、BlockIndexNext访问分步和列表条目。
本发明的一个实施例中,所述分步和列表查找单元由分步和列表条目存储单元和分步和列表查找控制单元组成,分步和列表条目存储单元里面存放有查找条目,分步和列表查找控制单元用于根据接收的前级输入信号后,进行下列操作:步骤1:判断TileIndexNext的值如果表示不需要继续查表,则不进行查表,将输入结果直接送出,跳到步骤6;步骤2:判断TileIndexNext是否等于本分步和列表查找单元编号,如果不等于,则不进行查表,将输入结果直接送出,跳到步骤6;等于则继续进行步骤3;步骤3:根据BlockIndexNext访问表项条目,然后跳到步骤4;步骤4:取KeyRemainingBits的高StrideLenNext位,记为key_k,然后跳到步骤5;步骤5:判断CmdNext的值如果表示要进行分步查找,跳到分步查找步骤;否则跳到列表查找步骤;步骤6:本次查找结束;
其中,TileIndexNext表示下次查表的分步和列表单元,BlockIndexNext表示下次查找的分步和列表单元中数据库地址,KeyRemainingBits表示尚未参与查找的key数据,StrideLenNext表示下次查找查表位宽,CmdNext表示下次查表类型。
本发明的一个实施例中,在查找前,首先进行条目配置,需要对待查找key值进行分段,从key值的高位到低位进行分段,对所有key值第一分段取固定值,用于线性查找;其它分段依次对应各分步和列表查找单元,对同一key值,各单元可以分配相同或不同的分段;对于不同key值,可以根据条目配置查找分段值;然后将待查找条目依次配置。
本发明的一个实施例中,对某个待查找key值进行分段,具体为:
第一分段为n位进行线性查找,然后是若干m+k位对应分步和列表查找1,采用分步或列表查找;然后是若干个k位的分段,分别对应相应的分步和列表查找单元,采用分步查找,若干个x位的分段,分别对应相应的分步和列表查找单元,采用列表查找,最后是y位的分段,对应相应的分步和列表查找单元,采用列表查找,然后将这些分段配置好,在查找的时候,分别取key的相关段进行查找;
所述n、m、k、x、y都是可配置值,各分步和列表查找单元条目针对不同key值可分配不同的m、k、x、y值。
本发明的一个实施例中,第一分段n的大小决定了线性条目存储单元的地址位宽,该单元的地址位宽必须大于等于n,即该单元要保证有2^n个存储条目;
m的大小由分步和列表条目存储单元的地址位宽决定,该单元的地址位宽必须大于等于m,即该单元要至少要保证有2^m个存储条目;
k分段对应分步和列表查找中的分步查找,因为需要在该单元中存储分步条目,一个分步条目中要存放2^k个分步子条目;
x分段对应分步和列表查找中的列表查找,需要在该单元中存储列表条目,在已选定条目位宽的情况下,所选x值应使列表条目至少能承载一个列表子条目;
y分段的设置原则同x分段。
本发明的一个实施例中,在查找时首先进行线性单元查找,产生模块间信号;然后依次进入各分步和列表查找单元,即分步和列表查找1到分步和列表查找N,在各单元中判断TileIndexNext是否和本单元匹配,对于匹配的,在本级进行查找和更新查表中间信息,然后继续进行后续单元查找,对于不匹配的直接进行后续单元的查找。直到所有单元查找完,分步和列表查找单元N输出的查表中间信号中的MathFieldNext为最后的查找结果。
按照本发明的另一方面,还提供了一种TCAM匹配查找装置,包括至少一个处理器和存储器,所述至少一个处理器和存储器之间通过数据总线连接,所述存储器存储能被所述至少一个处理器执行的指令,所述指令在被所述处理器执行后,用于完成所述的TCAM匹配查找方法。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有如下有益效果:
(1)本发明的匹配查找的方法通过线性查找、分步查找和列表查找结合的方式,可以实现TCAM查表方式,减少了购买TCAM IP或器件的成本;在难以获得TCAM资源的情况下,更是一种有效的实现路径,提高了资源利用率,且配置更灵活;
(2)本发明通过选择查找单元位置的方式,在保持查找效率的同时,可灵活的使用各查找资源;
(3)把列表条目和分步条目统一在一起处理,不必专门开辟新的专门区域,提高结构的一致性,这种一致性的结构,提高了可编程的灵活性;
(4)使用列表查找进一步降低全部采用分步条目实现时的资源规模,并且列表匹配的宽度可配置;使用列表查找还可使一个可变的查找长度出现在固定长度的分步查找中间,可以简化有相同位置、相同字段的匹配表信息的存储。
附图说明
图1是本发明总体结构图;
图2是本发明线性查找单元结构图;
图3是本发明分步与列表查找单元结构图;
图4是本发明一个key值进行分段配置实施例图;
图5是本发明查表操作所需的各种数据配置之间的关系图;
图6是本发明查找流程图;
图7是本发明待查找条目配置实施例图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
本发明属于通信领域,更具体的属于通信系统中的流识别处理领域,适用于ACL、IP LPM(最长前缀匹配)和流表功能;同时该发明也适用于需要高速搜索的其他应用,包括CPU、数据库搜索引擎等应用。
本发明公开了一种基于RAM的TCAM匹配查找方法,采用分段查找的方式,将线性查找、分步查找和列表查找相结合实现TCAM匹配查找方式,并通过流水线处理方式提高系统查找性能。
采用本发明的方法可以不使用TCAM即可实现相应功能,在缺少TCAM的FPGA中也可以实现,使得应用场景更加广泛。
所述分段查找,是把要查找的内容分成若干段进行多级查找;即把要查找的内容分成若干段,进行多级分段查找,每一段可以分别使用不同的查找法;
所述线性查找法:直接将查找内容作为存储器的访问地址,用访问的结果作为匹配查找结果;对分段使用线性查找方法时,将分段的值作为访问存储器的地址,这种方式的缺点是地址扩散问题,每一前段表项对应着2k项后级项(k为后段对应的段宽);
所述分步查找采用多分支树查找方法;对分段使用多分支树查找法,可以有效的防止分段的地址扩散。所述分步查找指的是对分段使用多分支树查找;
所述列表查找法:将表项以列表的形式连续存储到存储器(RAM),查找的时候,依次比对存储空间里面的表项,寻找匹配查找结果。列表查找的存储器里面也存储对应数据的掩码,用来进一步选择参与比较的数据。
本发明综合使用了线性查找、分步查找和列表查找三种查找方式,并使用分段方式将以上三种查找灵活的结合在一起,采用流水处理方式处理各分段,提高了查表的效率。
该发明的原理如图1所示,为了将将线性查找、分步查找和列表查找相结合,本发明采用线性查找单元和若干个分步和列表查找单元组成(图中给出了N个分步和列表查找单元)的结构,在线性查找单元后面跟随N个分步和列表查找单元(分别对应1到N个)。匹配查找是以流水线方式从线性查找单元依次经过N个分步和列表查找单元,且每级都采用流水线方式进行查找,直到找到匹配的路径,各级进行查找结果仲裁,输出最后查找结果。
本发明的匹配查找的方法通过线性查找、分步查找和列表查找结合的方式,可以实现TCAM查表方式,减少了购买TCAM IP或器件的成本;在难以获得TCAM资源的情况下,更是一种有效的实现路径,提高了资源利用率,且配置更灵活。
线性查找单元的结构如图2所示,由线性条目存储单元和线性查找控制单元组成。线性查找单元的输入信号为输入的待查找信号(下文称为key),线性查找控制单元以该单元设置的查找长度n,取key的n个最高位(例如假设key的位宽是w,且比特0为最高位即key[0:w-1],取n个最高位(n小于等于w),即key[0:n-1],后文同理按此描述)作为地址访问线性条目存储单元。
线性条目存储单元存储查找表项,其表项结构如下:
Figure BDA0003870476450000081
Figure BDA0003870476450000091
在查找后,输出查表中间信息:
TileIndexNext:表示下次查表的分步和列表单元,取表项中的TileIndex;
BlockIndexNext:表示下次查找的分步和列表单元中数据库地址,当表项中StrideLen1为0时,取表项中的BlockIndex;否则取值为表项中BlockIndex+key[n:StrideLen1+n-1],key[n:StrideLen1+n-1]为输入key减去线性查找部分后,取剩余部分的高StrideLen1位;
StrideLenNext:表示下次查找查表位宽,取表项中值StrideLen2;
KeyRemainingBits:表示尚未参与查找的key数据,等于输入key减去key[0:StrideLen1+n-1],即减去参与线性查找的部分和参与下次查找的StrideLen1部分;
CmdNext:表示下次查表类型,取表项中Cmd;
MathFieldNext:取表项值MathField。
分步和列表查找单元的结构如图3所示,由分步和列表条目存储单元和分步和列表查找控制单元组成。
分步和列表条目存储单元里面存放有查找条目,具体数据结构如下:
当用于分步查找时,表项结构如下:
域名 域描叙
StrideEntry2<sup>k</sup>-1 子条目2<sup>k</sup>-1(StrideEntry)
StrideEntry1 子条目1
StrideEntry0 子条目0
子条目(StrideEntry)数据结构同线性条目表项。
当用于列表查找时,表项结构如下:
Figure BDA0003870476450000101
Figure BDA0003870476450000111
StrideEntryLen使用说明:将StrideEntry0到StrideEntryn-1的数据域记为StrideEntryT,则StrideEntry#i=StrideEntryT[i×StrideEntryLen:(i+1)×StrideEntryLen-1],i是变量,#i表示取i的值。
例如,假设某条目中:ValidNum=3,StrideEntryLen=20,StrideEntry0到StrideEntryn-1共有77个bit记为StrideEntryT[0:76],则StrideEntry0=StrideEntryT[0:19];StrideEntry1=StrideEntryT[20:39];StrideEntry2=StrideEntryT[40:59],StrideEntryT[60:76]不存放有效数据。
当用于列表查找时,StrideEntry结构:
Figure BDA0003870476450000112
分步和列表查找控制单元的功能是根据接收的前级输入信号后(即下述的TileIndexNext、BlockIndexNext、StrideLenNext、CmdNext、KeyRemainingBits、MathFieldNext),进行下列操作:
步骤1:判断TileIndexNext的值如果表示不需要继续查表(例如为0表示不需要继续查表),则不进行查表,将输入结果直接送出,跳到步骤6;
步骤2:判断TileIndexNext是否等于本分步和列表查找单元编号,如果不等于,则不进行查表,将输入结果直接送出,跳到步骤6;等于继续进行步骤3;
步骤3:根据BlockIndexNext访问表项条目,然后跳到步骤4;
步骤4:取KeyRemainingBits的高StrideLenNext位(即KeyRemainingBits[0:StrideLenNext-1]),记为key_k(信号位宽为k位,k=StrideLenNext),然后跳到步骤5;
步骤5:判断CmdNext的值如果表示要进行分步查找(例如为0则表示要进行分步查找),跳到分步查找步骤;否则跳到列表查找步骤;
步骤6:本次查找结束。
本发明把列表条目和分步条目统一在一起处理,不必专门开辟新的专门区域,提高结构的一致性,这种一致性的结构,提高了可编程的灵活性。
分步查找步骤如下:
步骤1:根据key_k选择对应条目(当key_k编码值为0时选择StrideEntry0;当编码值为2k-1,选择StrideEntry2k-1其它编码类推),跳到步骤2;
步骤2:更新查表中间信息:
KeyRemainingBits:为输入KeyRemainingBits去掉输入KeyRemainingBits[0:StrideLenNext+StrideLen1-1](该StrideLenNext为输入值,StrideLen1为根据key_k选择的对应条目中的值),即输入KeyRemainingBits去掉参与查找的key_k部分和参与本次查找后BlockIndexNext更新的StrideLen1部分;
TileIndexNext:取条目值TileIndex;
BlockIndexNext:当条目值StrideLen1为0时,BlockIndexNext取条目值BlockIndex;否则BlockIndexNext等于条目值BlockIndex加上输出KeyRemainingBits[0:StrideLen1-1];
StrideLenNext:取条目值StrideLen2;
CmdNext:取条目值Cmd;
MathFieldNext:如果条目MathValueValid为有效,更新为表项值,否则保持输入值。
跳到步骤3
步骤3:本次查找结束
列表查找步骤:
步骤1:首先判断ValidNum,如果为0,跳到步骤2;否则跳到步骤3;
步骤2:更新查表中间信息
TileIndexNext:取条目值CTileIndex;
BlockIndexNext:取条目值CBlockIndex;
其余输出信号等于输入值;
跳到步骤8;
步骤3:根据ValidNum和StrideEntryLen,依次选取StrideEntry0-StrideEntryn-1进行判断;具体过程是:设定变量i=0,选择StrideEntry#i(#i表示取变量i的值),跳到步骤4;
步骤4:判断表达式key_k&ValidBits和表达式Prefix&ValidBits是否完全相等(表达式中的“&”表示“按位与”操作,在配置查找表项时需保证key_k、ValidBits、Prefix三个信号宽度一致);当完全相等时,跳到步骤5;否则i=i+1,跳到步骤6;
步骤5:如果TileToCmdAvlb不为0,跳到步骤7;否则更新查表中间信息
MathFieldNext:如果条目MathValueValid为有效,更新为表项值,否则保持输入值,更新其它查表中间信息为0;
步骤6:判断i是否小于ValidNum-1,如果小于,跳到步骤3;否则跳到步骤2
步骤7:更新查表中间信息:
KeyRemainingBits:为输入KeyRemainingBits去掉输入KeyRemainingBits[0:StrideLen1+StrideLenNext-1],即减去参与查找的key_k部分和参与下次查找的StrideLen1部分;
TileIndexNext:取条目值TileIndex;
BlockIndexNext:当条目值StrideLen1为0时,BlockIndexNext取条目值BlockIndex;否则BlockIndexNext等于条目值BlockIndex加上输出KeyRemainingBits[0:StrideLen1-1];
StrideLenNext:取条目值StrideLen2;
CmdNext:取条目值Cmd;
MathFieldNext:如果条目MathValueValid为有效,更新为表项值,否则保持输入值。
跳到步骤8。
步骤8:本次查找结束。
在采用列表查找时,匹配优先级越高的子条目应放置在越低的StrideEntry编号中,即StrideEntry0具有最高优先级。
本发明使用列表查找进一步降低全部采用分步条目实现时的资源规模,并且列表匹配的宽度可配置;使用列表查找还可使一个可变的查找长度出现在固定长度的分步查找中间,可以简化有相同位置、相同字段的匹配表信息的存储。
条目配置方法:
查找前,首先进行条目配置,需要对待查找key值进行分段,从key值的高位到低位进行分段,对所有key值第一分段取固定值,用于线性查找;其它分段依次对应各分步和列表查找单元,对同一key值,各单元可以分配相同或不同的分段;对于不同key值,可以根据条目配置查找分段值;然后将待查找条目依次配置。
图4是某待查找key值(实施例)进行分段配置示意图
如图4所示,首先将key值进行分段,第一分段为n位进行线性查找,第二分段为若干m+k位对应分步和列表查找1,采用分步或列表查找;然后是若干k位的分段,分别对应相应的分步和列表查找单元,采用分步查找,若干x位的分段,分别对应相应的分步和列表查找单元,采用列表查找,最后是y位的分段,对应相应的分步和列表查找单元,采用列表查找,然后将这些分段配置好,在查找的时候,分别取key的相关段进行查找。
在每级查找时,还可以根据StrideLen1配置一个偏移地址,m指的是这部分,k指的是StrideLen2指定的部分;当m为0时,本级就进行k的查找。所以这些k、x、y都是实施例。因为每个条目都可配置不同的值。
所述n、m、k、x、y都是可配置值,各分步和列表查找单元条目针对不同key值可分配不同的m、k、x、y值。
第一分段n的大小决定了线性条目存储单元的地址位宽,该单元的地址位宽必须大于等于n,即该单元要保证有2^n个存储条目,在已经选定线性条目存储单元的地址位宽后,所选n值需满足存储单元可存储2^n个存储条目;
m的大小由分步和列表条目存储单元的地址位宽决定,该单元的地址位宽必须大于等于m,即该单元要至少要保证有2^m个存储条目;在已经选定对应分步和列表条目存储单元的地址位宽后,所选m值需满足存储单元可存储2^m个存储条目;
k分段对应分步和列表查找中的分步查找,因为需要在该单元中存储分步条目,一个分步条目中要存放2^k个分步子条目(StrideEntry),在已经选定条目位宽的情况下,所选k值应使条目可存在2^k个分步子条目。
x分段对应分步和列表查找中的列表查找,需要在该单元中存储列表条目,在已选定条目位宽的情况下,所选x值应使列表条目至少能承载一个列表子条目;然后逐一配置各列表子条目,在当前列表条目不能配置当前x分段对应的所有子条目时,配置CTileIndex、CBlockIndex指向此分段(指当前x分段,而不是指后续x分段)查找的其它列表条目。
y分段的设置原则同x分段,这里设置y分段是为了区分x分段。
列表子条目中,配置ValidBits用于选择比较数据,实现模糊匹配或前缀匹配。
线性条目存储单元和分步和列表条目存储单元里面存储的是实现查表操作所需的数据配置,数据配置之间的关系如图5所示。
图中的箭头两边的数字说明了箭头相连的数据配置之间的对应关系,下面就一对多的关系进行说明;
1、
Figure BDA0003870476450000161
取key的首分段n位,即前n位作为地址(一共有2^n种可能的值),访问线性条目存储单元,获得一条线性条目;
2、
Figure BDA0003870476450000162
取key的m位(根据前一匹配条目中StrideLen1),参与下一级访问地址;
3、
Figure BDA0003870476450000163
取key的某个分步查找分段的k位(根据前一匹配条目中StrideLen2取)作为地址,在本级中访问分步子条目;
4、
Figure BDA0003870476450000164
列表里面包含0到validNum个列表子条目,取key的长度根据前一匹配条目中StrideLen2取;
5、
Figure BDA0003870476450000171
表示根据TileIndexNext、BlockIndexNext访问分步和列表条目。
图6是本发明的查找流程图,在查找时首先进行线性单元查找,产生模块间信号;然后依次进入各分步和列表查找单元(即:分步和列表查找1到分步和列表查找N)。在各单元中判断TileIndexNext是否和本单元匹配,对于匹配的,在本级进行查找和更新查表中间信息,然后继续进行后续单元查找,对于不匹配的直接进行后续单元的查找。直到所有单元查找完,分步和列表查找单元N输出的查表中间信号中的MathFieldNext为最后的查找结果。本发明通过选择查找单元位置的方式,在保持查找效率的同时,可灵活的使用各查找资源。
图7是一个条目配置实施例图。
在这个图中,一同存放有6条查找和配置路径:
路径1:由线性条目、分步条目、分步条目、列表条目组成;
路径2:由线性条目、分步条目、分步条目、列表条目、列表条目组成;
路径3:由线性条目、分步条目、分步条目、分步条目、分步条目、列表条目、列表条目组成;
路径4:由线性条目、分步条目、分步条目、分步条目、列表条目组成;
路径5:由线性条目、分步条目、分步条目、分步条目、分步条目组成;
路径6:由线性条目、分步条目、列表条目、分步条目、列表条目组成;
路径7:由线性条目、列表条目组成。
从图中可看出,各完整路径条目可以由线性条目、各分步和列表查找条目灵活组成;从线性条目可以灵活指向各分步条目或列表查找条目,分步条目可指向分步条目或列表条目,列表条目也可指向列表条目或分步条目;同一分步或列表条目的不同子条目可指定不同的查找类型。
同一分步条目的各子条目对应的key分段相同,同一列表条目的子条目对应的key分段相同;但不同条目对应的key分段长度可不同。
对于不同key值,根据条目配置不同分段值的示例如下:假设key1=0b0001 00010001;key2=0b1000 1000 1000;二者的查找分段和条目可配置如下:
Figure BDA0003870476450000181
因为key1对应的分步和列表1条目和key2对应的分步和列表2条目的分段都不相同,所以配置时,key1对应的分步和列表1的条目地址和key2对应的分步和列表2的条目地址都为不同地址。
具体实施例
假定待查找的key为{VRF(Virtual Routing Forwarding,虚拟路由转发),IPv4_da(IPv4目的地址)},待查VRF为0b00001000(0b表示二进制)待查找IPv4_da为32位的62.75.62.1,将整个待查key分4部分配置和查找。
相应配置如下:
线性条目配置:地址8对应条目,配置如下:
Figure BDA0003870476450000182
Figure BDA0003870476450000191
分步和列表1条目配置:地址262对应条目中的子条目4配置如下:
信号 信号描述
MathField {MathValueValid,MathValue}:{1,2}
TileIndex 2
BlockIndex 10
StrideLen1 0
StrideLen2 4
Cmd 1
分步和列表2条目配置:地址10对应条目中的子条目11配置如下:
信号 信号描述
MathField {MathValueValid,MathValue}:{1,3}
TileIndex 3
BlockIndex 11
StrideLen1 0
StrideLen2 4
Cmd 1
分步和列表3条目配置:地址11对应条目中的子条目3配置如下:
信号 信号描述
MathField {MathValueValid,MathValue}:{0,0}
TileIndex 4
BlockIndex 12
StrideLen1 0
StrideLen2 12
Cmd 0
分步和列表4条目配置:地址12对应条目配置如下:
Figure BDA0003870476450000192
Figure BDA0003870476450000201
子条目配置如下:
Figure BDA0003870476450000202
分步和列表5条目配置:地址20对应条目配置如下:
域名 域描叙
StrideEntryLen 12
ValidNum 1
StrideEntry2 子条目2
StrideEntry1 子条目1
StrideEntry0 子条目0
CTileIndex 0
CBlockIndex 0
子条目配置如下:
Figure BDA0003870476450000203
Figure BDA0003870476450000211
对于VRF为0b0001000,IPv4_da为62.75.62.1的数据包,查找key为0b00001000_00111110 01001011 00111110 00000001;
查找过程如下:
第一步是将8位的VRF值0b00001000作为地址进行线性查找,找到对应的条目(即在2^8=256个条目中,找到地址为0b00001000的条目(即本实施例,线性条目配置中的地址8对应条目)),在对应条目中获得TileIndex=1,BlockIndex=200,StrideLen1=8,StrideLen2=4,CmdNext=1,MathField={1,1},key的前8bit已匹配,同时由于本次查找结果得到StrideLen1等于8,即输入KeyRemainingBits的高9-16位(即0b00111110)需要参加产生BlockIndexNext,0b
Figure BDA0003870476450000212
_
Figure BDA0003870476450000213
01001011 00111110 00000001(需要说明的是,上述数字中的删除线表示相应bit已经完成匹配,后文中的删除线也是表示相同的意思),输出查找中间信息KeyRemainingBits=0b 01001011 00111110 00000001,TileIndexNext=1,BlockIndexNext=262(BlockIndex(200)+输入KeyRemainingBits的高9-16位(即0b00111110值为62)),StrideLenNext=4,CmdNext=1,MathFieldNext={1,1};
第二步查找分步和列表查找1中地址为262的条目,该条目包含24=16个子条目信息(其中指数4为第一步输出中的StrideLenNext=4决定的),取KeyRemainingBits的4个(为第一步输出中的StrideLenNext=4决定的)最高位,即0b0100,根据0b0100取对应的子条目(StrideEntry4)的信息,其中StrideLen1=0,根据子条目信息更新查表中间信息,TileIndexNext=2,BlockIndexNext=10,StrideLenNext=4,CmdNext=1,MathFieldNext={1,2},此次匹配了4bit(此4bit为第一步输出中的StrideLenNext=4决定的4bit,本次查找StrideLen1为0,所以没有额外的key信息参加更新BlockIndexNext),0b
Figure BDA0003870476450000221
101100111110 00000001,KeyRemainingBits=0b1011 00111110 00000001得到的信息是下一步也是分步查找。
第三步继续进行分步查找,在分步和列表查找2中取地址10(即上一步(即第二步)输出的BlockIndex=10)对应的条目,取KeyRemainingBits的4个最高位即0b1011(其中0b1011即上一步(即第二步)输出StrideLenNext=4决定的),根据0b1011取对应的子条目(StrideEntry11)的信息,根据子条目信息更新查表中间信息:TileIndexNext=3,BlockIndexNext=11,StrideLenNext=4,CmdNext=1,MathFieldNext={1,3},此次匹配了4bit,0b
Figure BDA0003870476450000222
00111110 00000001,KeyRemainingBits=0b00111110 00000001得到的信息是下一步也是分步查找。
第四步继续进行分步查找,在分步和列表查找3中取地址11(即上一步(即第三步)输出的BlockIndex=11)对应的条目,取KeyRemainingBits的4个最高位即0b0011(因上一步(第三步)输出StrideLenNext=4,因此再依次取4bit,即0b0011),根据0b0011取对应的子条目(StrideEntry3)的信息,根据子条目信息更新查表中间信息:TileIndexNext=4,BlockIndexNext=12,StrideLenNext=12,CmdNext=0,MathFieldNext={1,3},匹配了4bit后,0b
Figure BDA0003870476450000223
1110 00000001,KeyRemainingBits=0b 1110 00000001,得到的信息是下一步是列表查找。
第五步,在分步和列表查找4中取地址12(即上一步(即第四步)输出的BlockIndex=12)对应的条目进行列表查找,取KeyRemainingBits的12位(因为上一步(即第四步)输出StrideLenNext=12)即0b 1110 00000001,根据条目ValidNum、StrideEntryLen取各列表子条目进行逐个比对,因为子条目0即为匹配项(因为表达式key_k&ValidBits为0b111000000001&0b1111 11111111=0b1110 00000001,表达式Prefix&ValidBits为0b111000000001&0b1111 11111111=0b1110 00000001,两者相等,为匹配项),所以查找结束,输出查表中间信息TileIndexNext=0,BlockIndexNext=0,StrideLenNext=0,CmdNext=0(因为对应的子条目相应域配置为不存在,所以将上述4个赋值为0),MathFieldNext={1,14},KeyRemainingBits=0bit(表示所有都参与比较了,没有剩余位了),匹配了12bit后,0b
Figure BDA0003870476450000231
Figure BDA0003870476450000232
,全部匹配,查表结果为MathFieldNext={1,14}。
如果假设所取IP地址的最后12位为0b 0000 00000001,则在本级会一直没有匹配项,所以根据条目CTileIndex和CBlockIndex更新查表中间信息,TileIndexNext=5,BlockIndexNext=20(根据前文的配置CTileIndex=5,CBlockIndex=20),StrideLenNext=12(因在第五步查找中尚无匹配项,所以维持输入值),CmdNext=0(因在第五步查找中尚无匹配项,所以维持输入值),MathFieldNext={1,3}(因在第五步查找中尚无匹配项,所以维持输入值),KeyRemainingBits=0b 1110 00000001(因在第五步查找中尚无匹配项,所以维持输入值),继续进行第六步查找。
第六步继续进行列表查找,在分步和列表查找5中取地址20对应的条目进行列表查找,继续将IP地址最后12位即0b 0000 00000001,根据条目ValidNum、StrideEntryLen取各列表子条目进行逐个比对,找到匹配的子条目0(因为表达式key_k&ValidBits为0b000000000001&0b0000 00000000=0b0000 00000000表达式Prefix&ValidBits为0b000000000000&0b0000 00000000=0b0000 00000000两者相等,为匹配项),输出TileIndexNext=0,BlockIndexNext=0,StrideLenNext=0,CmdNext=0(因为对应的子条目相应域配置为不存在,所以将上述4个赋值为0),MathFieldNext={1,24},KeyRemainingBits=0bit(表示所有都参与比较了,没有剩余位了)。查表结果为MathFieldNext={1,24}。
进一步地,本发明还提供了一种TCAM匹配查找装置,包括至少一个处理器和存储器,所述至少一个处理器和存储器之间通过数据总线连接,所述存储器存储能被所述至少一个处理器执行的指令,所述指令在被所述处理器执行后,用于完成所述的TCAM匹配查找方法。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种TCAM匹配查找方法,其特征在于,所述方法包括:采用分段查找的方式,将线性查找、分步查找和列表查找相结合实现TCAM匹配查找方式,并通过流水线处理方式提高系统查找性能,其中:
所述分段查找,是把要查找的内容分成若干段进行多级查找;
所述线性查找法,直接将查找内容作为存储器的访问地址,用访问的结果作为匹配查找结果;
所述分步查找采用多分支树查找方法;
所述列表查找法,将表项以列表的形式存储到存储器,查找的时候,依次比对存储空间里面的表项配置,寻找匹配查找结果。
2.如权利要求1所述的TCAM匹配查找方法,其特征在于,将线性查找、分步查找和列表查找相结合,具体为:
采用线性查找单元和若干个分步和列表查找单元组成的结构,在线性查找单元后面跟随N个分步和列表查找单元,匹配查找以流水线方式从线性查找单元依次经过N个分步和列表查找单元,且每级采用流水线方式进行查找,直到找到匹配的路径,各级进行查找结果仲裁,输出最后查找结果,N为预设值。
3.如权利要求2所述的TCAM匹配查找方法,其特征在于,所述线性查找单元由线性条目存储单元和线性查找控制单元组成,线性查找单元的输入信号为输入的待查找信号key,线性查找控制单元以该单元设置的查找长度n,取key的n个最高位作为地址访问线性条目存储单元,线性条目存储单元用于存储查找表项。
4.如权利要求3所述的TCAM匹配查找方法,其特征在于,所述线性条目存储单元里面存储的是实现查表操作所需的数据结构,数据结构中箭头两边的数字说明箭头相连的数据结构之间的对应关系,具体为:
1、
Figure FDA0003870476440000021
取key的首分段n位,即前n位作为地址,访问线性条目存储单元,获得一条线性条目;
2、
Figure FDA0003870476440000022
从当前尚未参加查找的key的高位开始取m位,参与下一级访问地址;
3、
Figure FDA0003870476440000023
取key的某个分步查找分段的k位作为地址,在本级中访问分步子条目;
4、
Figure FDA0003870476440000024
列表里面包含0到validNum个列表子条目,取key的长度根据前一匹配条目中StrideLen2取,ValidNum表示条目包含的子条目StrideEntry的数目;
5、
Figure FDA0003870476440000025
表示根据TileIndexNext、BlockIndexNext访问分步和列表条目。
5.如权利要求2所述的TCAM匹配查找方法,其特征在于,所述分步和列表查找单元由分步和列表条目存储单元和分步和列表查找控制单元组成,分步和列表条目存储单元里面存放有查找条目,分步和列表查找控制单元用于根据接收的前级输入信号后,进行下列操作:步骤1:判断TileIndexNext的值如果表示不需要继续查表,则不进行查表,将输入结果直接送出,跳到步骤6;步骤2:判断TileIndexNext是否等于本分步和列表查找单元编号,如果不等于,则不进行查表,将输入结果直接送出,跳到步骤6;等于则继续进行步骤3;步骤3:根据BlockIndexNext访问表项条目,然后跳到步骤4;步骤4:取KeyRemainingBits的高StrideLenNext位,记为key_k,然后跳到步骤5;步骤5:判断CmdNext的值如果表示要进行分步查找,跳到分步查找步骤;否则跳到列表查找步骤;步骤6:本次查找结束;
其中,TileIndexNext表示下次查表的分步和列表单元,BlockIndexNext表示下次查找的分步和列表单元中数据库地址,KeyRemainingBits表示尚未参与查找的key数据,StrideLenNext表示下次查找查表位宽,CmdNext表示下次查表类型。
6.如权利要求1或2所述的TCAM匹配查找方法,其特征在于,在查找前,首先进行条目配置,需要对待查找key值进行分段,从key值的高位到低位进行分段,对所有key值第一分段取固定值,用于线性查找;其它分段依次对应各分步和列表查找单元,对同一key值,各单元可以分配相同或不同的分段;对于不同key值,可以根据条目配置查找分段值;然后将待查找条目依次配置。
7.如权利要求6所述的TCAM匹配查找方法,其特征在于,对某个待查找key值进行分段,具体为:
第一分段为n位进行线性查找,然后是若干m+k位对应分步和列表查找1,采用分步或列表查找;然后是若干个k位的分段,分别对应相应的分步和列表查找单元,采用分步查找,若干个x位的分段,分别对应相应的分步和列表查找单元,采用列表查找,最后是y位的分段,对应相应的分步和列表查找单元,采用列表查找,然后将这些分段配置好,在查找的时候,分别取key的相关段进行查找。
所述n、m、k、x、y都是可配置值,各分步和列表查找单元条目针对不同key值可分配不同的m、k、x、y值。
8.如权利要求7所述的TCAM匹配查找方法,其特征在于,
第一分段n的大小决定了线性条目存储单元的地址位宽,该单元的地址位宽必须大于等于n,即该单元要保证有2^n个存储条目;
m的大小由分步和列表条目存储单元的地址位宽决定,该单元的地址位宽必须大于等于m,即该单元要至少要保证有2^m个存储条目;
k分段对应分步和列表查找中的分步查找,因为需要在该单元中存储分步条目,一个分步条目中要存放2^k个分步子条目;
x分段对应分步和列表查找中的列表查找,需要在该单元中存储列表条目,在已选定条目位宽的情况下,所选x值应使列表条目至少能承载一个列表子条目;
y分段的设置原则同x分段。
9.如权利要求1或2所述的TCAM匹配查找方法,其特征在于,在查找时首先进行线性单元查找,产生模块间信号;然后依次进入各分步和列表查找单元,即分步和列表查找1到分步和列表查找N,在各单元中判断TileIndexNext是否和本单元匹配,对于匹配的,在本级进行查找和更新查表中间信息,然后继续进行后续单元查找,对于不匹配的直接进行后续单元的查找。直到所有单元查找完,分步和列表查找单元N输出的查表中间信号中的MathFieldNext为最后的查找结果。
10.一种TCAM匹配查找装置,其特征在于:
包括至少一个处理器和存储器,所述至少一个处理器和存储器之间通过数据总线连接,所述存储器存储能被所述至少一个处理器执行的指令,所述指令在被所述处理器执行后,用于完成权利要求1-9中任一项所述的TCAM匹配查找方法。
CN202211194609.8A 2022-09-29 2022-09-29 Tcam匹配查找方法与装置 Pending CN115604208A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211194609.8A CN115604208A (zh) 2022-09-29 2022-09-29 Tcam匹配查找方法与装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211194609.8A CN115604208A (zh) 2022-09-29 2022-09-29 Tcam匹配查找方法与装置

Publications (1)

Publication Number Publication Date
CN115604208A true CN115604208A (zh) 2023-01-13

Family

ID=84845551

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211194609.8A Pending CN115604208A (zh) 2022-09-29 2022-09-29 Tcam匹配查找方法与装置

Country Status (1)

Country Link
CN (1) CN115604208A (zh)

Similar Documents

Publication Publication Date Title
US7313667B1 (en) Methods and apparatus for mapping fields of entries into new values and combining these mapped values into mapped entries for use in lookup operations such as for packet processing
EP1623347B1 (en) Comparison tree data structures and lookup operations
US8780926B2 (en) Updating prefix-compressed tries for IP route lookup
US6307855B1 (en) Network routing table using content addressable memory
EP1605646B1 (en) Longest prefix matching using tree bitmap data structures
US7058642B2 (en) Method and data structure for a low memory overhead database
US6871262B1 (en) Method and apparatus for matching a string with multiple lookups using a single associative memory
CN111937360B (zh) 最长前缀匹配
US20040230583A1 (en) Comparison tree data structures of particular use in performing lookup operations
EP3276501B1 (en) Traffic classification method and device, and storage medium
US10944675B1 (en) TCAM with multi region lookups and a single logical lookup
US6987683B2 (en) Magnitude comparator based content addressable memory for search and sorting
US20060176721A1 (en) Method and apparatus for managing ternary content addressable memory
US7739445B1 (en) Circuit, apparatus, and method for extracting multiple matching entries from a content addressable memory (CAM) device
CN112667526B (zh) 一种访问控制列表电路实现方法及其电路
CN111988231A (zh) 一种掩码五元组规则匹配的方法及装置
US7299317B1 (en) Assigning prefixes to associative memory classes based on a value of a last bit of each prefix and their use including but not limited to locating a prefix and for maintaining a Patricia tree data structure
CN115604208A (zh) Tcam匹配查找方法与装置
US7523251B2 (en) Quaternary content-addressable memory
CN114079634B (zh) 一种报文转发方法、装置及计算机可读存储介质
Byun et al. Vectored-bloom filter implemented on FPGA for IP address lookup
CN114911728A (zh) 一种数据查找方法、装置及集成电路
CN114024885B (zh) 一种基于子网掩码划分的ip路由表管理系统及方法
Peyravian et al. Search engine implications for network processor efficiency
CN117914784A (zh) 并行查表装置、方法、设备及计算机可读存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination