CN103516614A - 用于在存储器中存储整数范围的系统和方法 - Google Patents
用于在存储器中存储整数范围的系统和方法 Download PDFInfo
- Publication number
- CN103516614A CN103516614A CN201210589675.5A CN201210589675A CN103516614A CN 103516614 A CN103516614 A CN 103516614A CN 201210589675 A CN201210589675 A CN 201210589675A CN 103516614 A CN103516614 A CN 103516614A
- Authority
- CN
- China
- Prior art keywords
- bit
- value
- subsequence
- subrange
- memory
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C15/00—Digital stores in which information comprising one or more characteristic parts is written into the store and in which information is read-out by searching for one or more of these characteristic parts, i.e. associative or content-addressed stores
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
- H04L45/745—Address table lookup; Address filtering
- H04L45/74591—Address table lookup; Address filtering using content-addressable memories [CAM]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了涉及在存储器中存储整数范围的系统和方法。在存储器中存储整数值范围包括:确定该范围中的子范围,使得在来自分别是子范围的开始值和结束值的二进制表示的第一和第二多个比特子序列中,第一多个比特子序列中除了至多一个比特子序列外的所有比特子序列的值都等于第二多个比特子序列中的相应比特子序列或者值为0,并且第二多个比特子序列的相应比特子序列具有最大值。在存储器中存储整数值的范围进一步包括基于第一和第二多个比特子序列的值形成第一比特串,并且在存储器中存储第一比特串。
Description
技术领域
本发明的实施方式涉及在存储器中存储值。
背景技术
诸如路由器、交换机、网桥等的包(packet)处理装置需要适应逐渐增大的带宽和处理需求。例如,带宽的增大要求以接近网速在包处理装置中处理每个包,同时,进入包处理装置的包数量变大。此外,复杂的包处理可能要求包处理装置将包报头中的较大字段组与预配置的值相比较。
在许多包处理装置中,将包标题字段与三态内容访问存储器(TCAM)中的条目(entry)相比较。TCAM是其中可使用二进制(例如1和0)比特和通配符比特来存储值的条目表。“通配符”表示对应的比特可以是1或0。在现有技术中已知一些存储1、0、和通配符的具体技术,并且可能依赖于实施方案。TCAM中的每个条目都可以对应于一个或多个字段。可以将入站包并行地与TCAM中的所有条目相比较。在基于入站包字段执行查找时,也可以使用其他存储器数据结构。
检查的包标题字段可以包括互联网协议(IP)地址、端口值、协议值、虚拟局域网标识符(VLANID)和其他头字段。将部分头字段与具体值相比较。可以将其他头字段与值的范围相比较。常常使用共同前缀来表示IP地址的范围。“前缀”是在值的二进制表示的开头开始的一个或多个比特的序列。如这里所使用的,如果两个或更多值中的每个的二进制表示具有从彼此共同的从第一比特开始的一个或多个比特的序列,则该两个或多个值被认为是具有共同前缀。然而,使用前缀可能不能有效地表示整数值的范围(例如用于在包报头中表示端口值、协议标识符等的那些)。例如,对值的范围进行存储可能需要相对大量的前缀,并且每个前缀可能需要TCAM中的多个条目。例如,范围的每个前缀可能需要TCAM中的多个条目,以在其他字段的组合中进行比较。
因此,在TCAM和存储器中的其他查找结构中所需的存储值的范围的条目数可能过大。由于其速度和灵活性,TCAM经常用于查找操作。然而,由于TCAM的相对高功耗和成本,需要减小TCAM的大小。其他存储器也可以用于查找,并且可以因为在查找表中具有较少的条目而带来好处。
发明内容
本发明实施方式涉及在TCAM或其他存储器中有效地存储值范围的方法、系统和计算机可读存储介质。在存储器中存储整数值的范围包括确定该范围中的子范围,使得在来自分别是子范围的开始值和结束值的二进制表示的第一和第二多个比特子序列(bit subsequence)中,第一多个比特子序列中的除了至多一个比特子序列以外的所有比特子序列的值要么等于第二多个中的对应比特子序列要么值为0且第二多个比特子序列中的对应比特子序列具有最大值。在存储器中存储整数值的范围进一步包括基于第一和第二多个比特子序列的值形成第一比特串(bit string),并且在存储器中存储第一比特串。
本发明的一个方面涉及一种用于在存储器中存储整数值的范围的方法,包括:确定所述范围中的子范围,使得在来自分别是所述子范围的开始值和结束值的二进制表示的第一和第二多个比特子序列中,在第一多个比特子序列中除了至多一个比特子序列外的所有比特子序列的值等于第二多个比特子序列中的相应比特子序列的值或者值为0且第二多个比特子序列的相应比特子序列具有最大值;基于所述第一和第二多个比特子序列的值形成第一比特串;以及在所述存储器中存储所述第一比特串。
在上述方法中,优选所述存储包括在三态内容寻址存储器(TCAM)中存储所述第一比特串。
在上述方法中,优选所述形成包括:生成与来自所述第一多个比特子序列的比特子序列与来自所述第二多个比特子序列的相应比特子序列的各个配对相应的各自的比特子串;以及连接(concatenate)所生成的比特子串以产生所述比特串。
在上述方法中,优选各个所述各自的比特子串的长度至少等于来自所述第一多个比特子序列的比特子序列的最大值。
在上述方法中,优选生成各自的比特子串包括:确定与所述各个配对相应的有效值的范围;以及基于所确定的有效值的范围来设置所述比特子串中的比特值,其中,所述比特子串中的各自的比特位置与所确定的有效值的范围中的值相关联。
在上述方法中,优选在所述比特子串中设置比特值包括:将所述比特子串的前m个比特设置为1,其中,m是来自所述第一多个比特子序列的比特子序列的有效值;以及将所述前m个比特后的n个比特设置为通配符,其中,n是来自所述第一多个比特子序列的比特子序列和来自所述第二多个比特子序列的比特子序列之间的差。
在上述方法中,优选还包括:从数据包的字段值的二进制表示确定第三多个比特子序列;基于所述第三多个比特子序列的值形成第二比特串;将所述第二比特串与所存储的第一比特串相比较;以及基于所述比较来处理所述数据包。
在上述方法中,优选根据预定的比特子序列长度来确定所述第一、第二和第三多个比特子序列。
在上述方法中,优选所述第一、第二和第三多个比特子序列中的比特子序列数量(a number of)相等。
在上述方法中,优选所述形成第二比特串包括:生成与来自所述第三多个比特子序列的各个比特子序列相对应的各自的第二比特子串;以及连接所述第二比特子串以产生所述第二比特串。
在上述方法中,优选生成第二比特子串包括:确定来自所述第三多个比特子序列的相应比特子序列的值;以及基于所确定的值来设置所述第二比特子串中的比特值,其中,所述第二比特子串中的各个比特位置与各自的确定值相关联。
在上述方法中,优选设置所述第二比特子串中的比特值包括:将所述第二比特子串的前m个比特设置为1,其中,m是来自所述第三多个比特子序列的比特子序列的值。
在上述方法中,优选还包括:基于存储器特性,配置所述第一和第二多个比特子序列的比特子序列的长度或者应用于所述第一比特子串的比特子串的长度中的一个或多个。
在上述方法中,优选还包括:基于比特串的预定长度,配置所述第一和第二多个比特子序列的比特子序列的长度,其中,所述预定长度被应用于所述第一比特串。
在上述方法中,优选还包括:基于所述范围的大小,配置所述第一和第二多个比特子序列的比特子序列的长度。
本发明的又一个方面涉及一种系统,包括:处理器;耦接至所述处理器的至少一个存储器;存储器存储模块,被配置为:确定范围中的子范围,使得在来自分别是所述子范围的开始值和结束值的二进制表示的第一和第二多个比特子序列中,在第一多个比特子序列中除了至多一个比特子序列外的所有比特子序列的值等于第二多个比特子序列中的相应比特子序列的值或者值为0且第二多个比特子序列的相应比特子序列具有最大值;基于第一和第二比特子序列的值形成第一比特串;以及在所述至少一个存储器中存储所述第一比特串。
在上述系统中,优选所述至少一个存储器包括三态内容寻址存储器(TCAM)。
还包括:包字段比较模块,被配置为:从数据包的字段值的二进制表示确定第三多个比特子序列;基于所述第三多个比特子序列的值形成第二比特串;将所述第二比特串与存储的第一比特串相比较。
还包括:包处理模块,被配置为基于所述比较来处理所述数据包。
本发明的又一方面涉及一种记录了指令的计算机可读存储介质,当处理器执行指令时,使得处理器执行用于在存储器中存储比较值的范围的方法,包括:确定所述范围中的子范围,使得在来自分别是所述子范围的开始值和结束值的二进制表示的第一和第二多个比特子序列中,在第一多个比特子序列中除了至多一个比特子序列外的所有比特子序列的值等于第二多个比特子序列中的相应比特子序列的值或者值为0且第二多个比特子序列的相应比特子序列具有最大值;基于所述第一和第二多个比特子序列的值形成第一比特串;以及在所述存储器中存储所述第一比特串。
以下结合附图详细描述了本公开的其他特征和优点以及本公开的各实施方式的结构和操作。值得注意的是,本公开不限于这里描述的具体实施方式。这里给出了这种实施方式仅用于说明目的。基于本文包含的教导,对于本领域普通技术人员来说,其他实施方式将是显而易见的。
附图说明
将描述本公开的实施方式,在附图中示出了其多个例子。这些附图是说明性而非限制性的。虽然在这些实施方式的上下文中概括地描述了本公开,但是应当理解,这并非旨在将本公开的范围限制到这些特定实施方式。
图1A示出了在存储器中存储整数值范围的示例性传统方法。
图1B示出了示例性包格式。
图2A和图2B示出了根据本公开实施方式的表示范围的存储器中的示例性范围和条目。
图3示出了根据本公开实施方式的用于在存储器中存储整数值范围的示例性系统。
图4示出了根据本公开实施方式的用于在存储器中存储整数值范围的方法的流程图。
图5示出了根据本公开实施方式的用于将输入字段和整数值的范围相比较的方法的流程图。
图6示出了根据实施方式的用于确定范围中的子范围的方法的流程图。
图7示出了根据实施方式的用于对子范围编码的方法的流程图。
具体实施方式
虽然这里参照用于特定应用的说明性实施方式描述了本公开,但是应当理解,本公开不限于此。本领域普通技术人员根据本文的教导将认识到在其范围内的其他修改、应用和实施方式以及本公开将具有显著实用性的其他领域。
本说明书中公开的实施方式提供了在TCAM和其他存储器结构中对整数范围的更有效的存储。例如,实施方式使得能够使用比传统技术所需的显著减少的条目在TCAM中存储整数范围。使用较少的条目来存储范围可以使得用于条目表的TCAM或其他存储器的成本较低、查找效率提高以及能够比较更多字段。
图1A示出了在诸如TCAM或其他存储器的存储器中存储整数值范围的示例性传统方法。如图1A所示,当使用存储基于前缀的范围的传统方法时,必须使用至少六个前缀来覆盖整数1﹣24的范围。如101项所示,范围1﹣24中的各个值以二进制示出。基于数字的二进制表示中的共同前缀,可以确定六个子范围。这六个子范围是1、2﹣3、4﹣7、8﹣15、16﹣23和24。105项示出了可以用于表示TCAM条目中的范围的基于前缀的字段值的最小组。如图所示,六个单独前缀需要表示范围1﹣24,即,“00001”、“0001”、“001”、“01”、“10”和“11000”。
图1B示出了可以在包处理装置中处理的数据包110的示例性格式。数据包110可以包括头字段(header field)部分112和数据部分114。头字段112包括诸如源地址、目的地址、源端口、目的端口、协议类型116、以及虚拟局域网络标识符(VLAND,未示出)的一个或多个子段。数据部分114可以包括实际数据有效负载,或者实际数据有效负载封装在一个或多个其他协议包格式中。可以根据一个或多个通信协议来将包格式化,通信协议例如但是不限于互联网协议(IP)、传输控制协议(TCP)、用户数据报协议(UDP)、以太网等。在示出的例子中,源地址和目的地址可以是IP地址。至少部分地由于IP地址的层次结构,IP地址的范围可以有效地以前缀的形式来表示。整数值范围,诸如源端口、目的端口、和协议类型116字段可以与其比较的那些整数值范围,也可以表示为如图1A所示的基于前缀的字段。然而,如结合图1A所描述的,整数值的基于前缀的表示可能需要非常多的TCAM条目,浪费存储器空间和功率。这尤其如此是因为每个前缀都可以与其他待比较的字段组合来组合。在本说明书中公开的实施方式使得能够存储整数值,诸如但是不限于用于比较数据包110中的端口和协议类型116字段的值的范围。
图2A和图2B示出了根据本公开实施方式的表示范围的TCAM或其他存储器中的示例性范围和条目。
图2A示出了根据实施方式在TCAM中存储整数11﹣54的范围。使用8比特宽度二进制比特序列202来指定范围(例如11﹣54)的边界(例如开始和结束)点的二进制表示。每个二进制比特序列202都被分成二进制比特子序列204的3比特宽的块(chunk)。3比特的块大小可以是可配置的或者可以动态地确定。这样,范围的边界点表示为元素的序列205,称为值序列,包括由3比特块表示的对应确定值。序列中的每个元素都对应于块。为了解释和说明的目的,值序列作为十进制值序列示出,例如,(013)和(066)。所示出的块大小不是限制性的。
如覆盖范围11﹣54的三个子范围210所示,该范围然后被分成若干子范围。生成子范围(例如[0 1 3]﹣[0 1 7]、[0 2 0]﹣[0 5 7]、[0 6 0]﹣[0 66]),使得当子范围表示为对应于该子范围的边界点的一对值序列时,任何子范围的边界都符合一组预定的性质。该组预定性质包括:除了至多一对,在两个十进制序列之间的各对对应元素中具有匹配值。一对对应元素包括来自子范围的各个边界点的元素。例如,在图2A中,子范围(0 1 3)(01 7)在子范围的起点和终点之间只有第三个元素不同。当对应块的值的整个允许范围对特殊的元素对有效时,来自值序列的特殊元素对免除具有匹配值的性质。例如,如图2A所示,在子范围(0 2 0)-(0 5 7)中,第二和第三个元素都不同,但是第三个元素容纳(accommodate)3比特块的值的整个范围。具体地,在起点的第三个元素(例如0)和终点的第三个元素(例如7)之间容纳可以使用3比特(例如整数值0﹣7)表示的整个范围。第三个子范围(0 6 0)﹣(0 6 6)在两个边界点之间只有第三个元素不同。
然后,将指定为值序列的每个子范围表示为在实施方式中存储为TCAM条目212或其他存储器中的条目的比特串。如图2A中所示,使用来自子范围210的子范围的值序列来从条目212中的一个确定对应于该子范围的条目。每个比特串206都包括多个比特子串208。比特串206中的比特子串208的数量等于对应的一个十进制序列中的元素的数量。每个比特子串208表示位于值序列中的对应元素对的值之间的整数值。在一个实施方式中,比特串“0000000001xxxx111”存储在存储器或TCAM中用于子范围(013)﹣(017)的条目。比特子串中的每个比特表示两个边界点中的对应块的值之间的不同整数。例如,从左边开始,第一比特表示整数“1”,第二比特表示整数“2”等。在上述示例比特串中,第一比特子串是“000”,表示在两个十进制序列的各自的第一元素之间,除了0之外,没有整数。第二比特子串“0000001”表示“1”是两个十进制序列的各自的第二元素之间的唯一整数。第三比特子串“xxxx111”表示在第三十进制序列的各自的第一元素之间的出现的整数3﹣7。“x”是特别值(例如,通配符或“不关心的比特”),表示x出现的任何位置在比特串中可以是0或1。注意,为了表示比特子串中的整数3,将表示3的比特以及所有不太重要的比特设置为1。
换种描述,每个比特子串表示对应块的有效值的范围。如下面的描述,入站包的头字段值用于导出块的序列,并且每个块与一个或多个比特串的对应比特子串相比较。例如,上述的(比特串“0000000001xxxx111”的)第一、第二、和第三比特子串将分别匹配具有例如0、1、和3﹣7(含3和7)之间的任何值的块序列中的第一、第二、和第三块的任何包报头值。可以认为比特子串具有各自的块(或比特子序列)的比特编码的(还称为“比特编码的”或“逐位编码的”)值。
图2B示出了整数范围677﹣947的存储。待表示的字段值是12比特整数,因此能够分成四个3比特块。因此,范围(例如001010100101-001110001011)的成块的二进制表示产生了十进制值序列(示出为260项)中的边界点(1245)﹣(1613)。然后,基于范围的值序列260导出子序列(262项)。如上文所述,在特定子范围的起点和终点的值序列之间,除非元素对容纳对应块的值的整个范围(例如,3比特的块的值0﹣7),否则除了来自起点值序列的至多一个元素,各个元素将与来自终点值序列的对应元素相同。例如,第一子范围(1245)﹣(1247)仅在第四个元素不同。第二子范围(1250)﹣(1277)在第三和第四个元素不同,但是第四个元素容纳对应的3比特块的值0﹣7的全部范围。第三子范围(1300)﹣(1577)在第二、第三、和第四元素不同,但是第三和第四元素每个都容纳各自的块的全部范围。264项示出了对应于子范围262的TCAM中存储的比特串。另一示出的子范围(1600)﹣(1607)仅在第四个元素不同,第一个元素也容纳块的有效值的全部范围。
图3示出了根据本公开实施方式的用于在TCAM中存储整数值范围的示例性系统300。系统300可以包括包处理装置、数据库系统、或需要快速查找操作的其他装置或系统。系统300包括处理器302、查找表304、存储器306、存储器存储模块310、字段比较模块312、处理模块314、以及通信基础设施(也称为“互连总线”)316。
处理器302可以包括任何中央处理单元(CPU)或专用处理器,例如但不限于专用集成电路(ASIC)或现场可编程门阵列(FPGA)。处理器302可以执行逻辑指令,以控制系统300的一个或多个组件的操作。处理器302可以控制系统300中的处理,并且例如,可以执行或控制一个或多个包处理管线(packet processing pipeline)的执行。包处理管线每个都包括包从进入系统300到退出系统300的处理路径的逻辑视图。
查找表304包括数据结构320,其能够用于将对应包的一个输入字段值或一组输入字段值与一个或多个存储值相比较。数据结构320包括多个条目322。每个条目322可以包括将要与单个字段比较的值,或者将要与多个选择的字段比较的值的组合。根据一个实施方式,数据结构320是TCAM。将输入比特串326与条目322比较,以确定匹配328,其被输出到应用或其他接收实体或进程(未示出)。根据一个实施方式,例如,在TCAM中,输入比特串326可以同时与数据结构320中存储的一个、全部、或多个条目相比较,并且可以输出选择的一个或多个匹配328。根据另一实施方式,数据结构320被实施为诸如存储器306的存储器中的链表、哈希表、或其他表格数据结构。
存储器306可以包括诸如静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、FLASH存储器等中的一个或多个。存储器306可以包括在系统(例如包处理装置)中执行的指令以及在装置中处理包期间的任何包和相关信息。在各实施方式中,存储器306也可以包括诸如磁盘、光盘、闪存等的永久性数据存储介质。这种计算机可读存储介质可以用于存储实现系统300的一个或多个部件的功能的软件程序和/或逻辑指令。此外,存储器306可以包括输入包324,根据一个实施方式,字段比较模块312将输入包324与查找表304相比较。例如,可以经由将系统300连接至网络(未示出)的输入接口(未示出)来接收输入包324。输入包324可以包括诸如图1B中示出的包格式。
存储器存储模块310运行以在查找表304(诸如,例如在TCAM或其他存储器中)中存储范围。根据一个实施方式,存储器存储模块310可以包括以下结合图4、6和7描述的处理逻辑。
字段比较模块312运行以将一个或多个字段与查找表中的条目相比较。根据一个实施方式,将来自入站数据包的一个或多个选择的字段与TCAM的条目相比较。根据另一实施方式,将所选择的字段与存储器(诸如,RAM)中的查找表的条目相比较。在另外一些实施方式中,可以将字段与TCAM和存储器结构两者相比较。执行字段与TCAM或其他查找表的比较,以确定一个或多个匹配条目。匹配可以是完全匹配或部分匹配。如本公开中其他地方的描述,条目中通配符的使用使得能够确定部分匹配。根据一个实施方式,字段比较模块可以包括以下结合图5描述的处理逻辑。
处理模块314运行,以根据字段比较模块312和/或查找表304的匹配输出来处理包。处理可以包括路由和/或转发、头处理、包分类、入侵防御、数据库查找、或在确定包或其他消息所属的类型时对数据包或其他消息执行的任何类型的处理。
互连总线316可以包括通信耦接包处理装置300的各模块的一个或多个互连总线结构。例如,互连总线316可以包括诸如先进高性能总线(AHB)的总线或其他内部部件互连机制,AHB使用ARM Ltd发布的AMBA规范版本2中定义的总线协议。
图4示出了根据本公开实施方式的用于在存储器中存储整数值的范围的方法400(步骤402﹣410)的流程图。并不是所有步骤402﹣410都是必需的,并且可以以不同于图4中示出的顺序来进行步骤402﹣410。在一个实施方式中,可以使用方法400来在将用于包字段查找操作的TCAM中存储整数的范围。例如,可以通过结合图3描述的查找表304和存储器存储模块310来实施方法400。
在步骤402,接收将要存储在查找表中的整数范围。该范围可以作为用户手动输入或机器生成输入被接收。例如,该范围可以是在系统初始化期间配置的用户提供参数。在另一实施方式中,该范围可以由系统基于一个或多个其他参数自动确定。例如,系统可以基于将要在入站包中识别的协议的用户配置选择来自动确定整数范围。确定范围的边界点,即,起点和终点。
在步骤404,确定块大小。术语“块大小”是指来自范围或子范围的边界点的二进制表示的连续比特组的比特大小。边界点的二进制表示的连续比特组可以称为比特的子序列(也称为“比特子序列”)。图2A中的204项是比特子序列,其还可以称为块。如图2A所示,子序列(除了各个比特序列中具有最高有效位(most significant bit)的子序列)的长度为3比特。
在实施方式中,块大小可能影响查找的各方面。例如,块大小影响TCAM条目的长度。根据一个实施方式,随着块大小增大,TCAM条目的长度也增大。此外,当块大小减小时,TCAM条目的数量减小。实际上,块大小决定TCAM条目中诸如比特子串208的比特子串中的比特数量。因此,可以基于考虑每个TCAM条目的所需大小和/或TCAM条目的所需数量来决定块大小。
在步骤406,在接收到的输入范围中确定多个子范围。所确定的子范围基于来自各自的子序列的边界的二进制表示的块大小的比特子序列。可以根据以下描述的方法600来确定子范围。
在步骤408,对于步骤406中确定的每个子范围,生成比特串。比特串是子范围的比特表示。更具体地,比特串包括多个比特子串,并且每个比特子串都是可以在对应块的子范围的边界点之间有效存在的整数的比特表示。
在步骤410,在TCAM中存储比特串形式的所确定的子范围。根据另一实施方式,在另一存储器中以例如但不限于链表或哈希表的数据结构存储子范围。然后可以使用所存储的子范围来确定输入包是否与一个或多个存储的条目相匹配。可以根据以下描述的方法700来执行比特串的编码和/或到TCAM或其他存储器的存储。
虽然示出了存储单个字段作为条目,但是应当注意,根据其他实施方式,TCAM或查找表中的条目还可以包括两个或更多字段的组合。对于每个字段,可以如结合图4所描述的那样来生成所存储的比特串。
图5示出了根据本公开实施方式的用于将入站包与整数值的范围相比较的方法500(步骤502﹣510)的流程图。并不是所有的步骤502﹣510都是必需的,并且步骤502﹣510可以以不同于图5示出的顺序来进行。在一个实施方式中,方法500可以用于将输入包的一个或多个字段与查找表相比较。例如,可以通过结合图3描述的查找表304和字段比较模块312来实施方法500。
在步骤502,确定来自输入包的所选择的字段的值。根据一个实施方式,输入包可以是通过输入接口进入例如系统300的包处理装置的包。输入包可以具有头部分和数据部分,并且头部分可以包括一个或多个字段。根据一个实施方式,输入包可以具有与图1B类似的格式。可以使用选择的字段将包与TCAM或其他查找表相比较。确定值包括识别对应于特定所选字段的比特。
在步骤504,用二进制表示字段值并且确定块。根据一个实施方式,将来自输入包的字段值的二进制串表示的长度配置为等于查找表中配置的范围和子范围的二进制串表示的长度。块大小可以是配置参数。如在范围或子范围的边界点的情况下所进行的,将输入包的所选字段的二进制表示分组成块大小的子序列。
在步骤506,形成包括多个比特子串的比特串,以表示待查找的字段值。每个比特子串逐位(bit-wise)表示来自所选字段的二进制表示的各自的块的值。与为TCAM条目配置的比特子串(诸如图2A中所示的208项)类似,对于可以在块中表示的每个不同有效整数,在表示入站包的字段值时使用的比特子串具有保留比特。
在步骤508,将表示输入包的字段的比特串(“输入字段比特串”)与查找表相比较。根据一个实施方式,将输入字段比特串与TCAM比较,以确定匹配。如上文所述,可以将输入字段比特串同时与全部或多个TCAM条目相比较。根据另一实施方式,可以执行与另一存储器数据结构的比较。该比较操作产生所确定的一个或多个匹配。一个或多个匹配指示输入字段值是否在范围以及匹配的子范围内。
在步骤510,基于在步骤508确定的一个或多个匹配来处理输入包。根据一个实施方式,在步骤508执行的查找确定用于包转发的下一跳,并且根据一个或多个匹配的TCAM条目来转发包。其他示例性实施方式包括但不限于,选择用于被本地应用处理的包,执行诸如分片(fragmentation)和重组或字段值的更改的包处理功能、选择待丢弃或优先化的包等。
以上结合使用TCAM或其他查找表来比较入站包的单个字段描述了方法500。然而,执行类型处理,以基于字段值的任意组合来执行查找。在为每个入站包匹配多个字段的情况下,TCAM或查找表中的每个条目将包括对应于若干字段的值的连接,并且例如,对应于每个字段的值将如图4所述的那样被生成。类似地,与查找表比较的输入值将包括输入包的若干字段值,并且每个字段值可以以与结合图5描述的类似方式来制定。
图6示出了根据一个实施方式的用于确定范围中的子范围的方法600(步骤602﹣612)的流程图。并不是所有的步骤602﹣612都是必需的,并且步骤602﹣612可以以不同于图6示出的顺序来进行。在一个实施方式中,可以使用方法600来确定特定范围内的多个子范围。例如,可以通过结合图3描述的存储器存储模块310来实施方法600。
在步骤602,初始化子范围标识符(“子范围id”)。子范围id是表示特定范围中的子范围的顺序编号的计数器。在所描述的实施方式中,子范围id初始化为0,并且从范围的低端到高端来确定子范围。
在步骤604,将第一子范围初始化到范围的低端。如图所示,可以通过将第一子范围的开始边界设置为范围的开始边界点(例如,范围_起点)来执行初始化。例如,如图2A所示,对于范围11﹣54,第一子范围(子范围id0)的开始边界设置为范围的开始边界点11。
可以反复地执行步骤602至612,直到整个范围被子范围覆盖。在步骤606,对于当前子范围,确定结束边界点,使得除了子范围的开始边界点的比特序列的至多一个元素,其余元素都等于结束边界点中的对应元素。这里提到的元素可以是边界点的二进制表示中的比特子序列或者来自对应于边界点的十进制序列的十进制数。当来自两个边界点的对应元素对覆盖对应块的有效值的全部范围时,提供了除了子范围的开始边界点的比特序列的至多一个元素、其余元素都等于结束边界点中的对应元素这一规则的例外。关于确定子范围的进一步信息,读者可以参照结合图2A和图2B的描述。
根据一个实施方式,可以通过接收用户输入来执行确定子范围结束边界点。根据另一实施方式,可以如下所述自动执行子范围结束边界点的确定。
将开始边界点的二进制表示分组成块,并且确定每个块的值。为了说明和讨论的目的,假设将各自的块的值确定为十进制整数。然而,在实施方式中,可以以各种其他形式来确定块的值,包括通过保持块的二进制形式。当以十进制来确定时,开始边界点可以表示为十进制序列。以上描述了“十进制序列”,并且实例在图2A的205项中示出。在图2A中,第一子范围的开始边界点表示为(013)。
可以使用与开始边界点相同数量的块来初始化子范围结束边界点。
以从最小值块(例如,最右)到最高值块(例如,最左)的顺序来考虑子范围开始边界点的每个块。例如,对于图2A中示出的第一子范围的开始边界点(013),按顺序考虑块值3、1和0。
如果当前开始边界块为0且在当前结束边界块的右边的块(如果有的话)为最大块值,则将当前结束边界块设置为最大有效值。最大有效值是最大块值或可分配给块而不会超越范围边界的最大值。
如果当前开始边界块为0并且当前结束边界块是最大块值,或者如果当前开始和结束边界块有相同值(例如,图2A中的子范围(013)﹣(017)的第一块),则继续考虑当前块的左边的块并且对下一块重复前一步骤(例如,将当前块指针移动到其当前位置的左侧)。如果当前的左边没有其他块,则已经确定了子范围。
否则,如果当前开始边界块和当前结束边界块具有不同值,则将结束边界中当前的左边的块设置成与开始边界中的对应元素的相同值。已经确定了子范围。
在步骤608,确定当前子范围结束点是否是范围的结束点。如果是,则已经确定了所有子范围,并且已经完成了方法600的处理。
如果不是,则在步骤610,将子范围标识符递增,以开始确定下一子范围。实际上,这意味着对下一步骤中提及当前子范围是指接下来要确定的子范围,即,对应于新的子范围标识符的子范围。
然后,在步骤612,当前子范围起点确定为前一子范围结束点之后的下一整数。根据一个实施方式,通过向前一子范围终点加1来确定当前子范围起点。
在步骤612之后,方法600的处理前进到步骤606,以确定当前子范围终点。
图7示出了根据实施方式的用于对子范围编码的方法700(步骤702至714)的流程图。并不是所有的步骤702﹣714都是必需的,并且步骤702﹣714可以以不同于图7示出的顺序来进行。在一个实施方式中,可以使用方法700对TCAM条目编码。例如,可以通过结合图3描述的查找表304和存储器存储模块310来实施方法700。
在步骤702,选择待编码的子范围。例如,可能已经根据图6确定了子范围。
在步骤704,选择子范围的块。根据一个实施方式,与子范围的边界点对应的十进制序列的各自的元素可以作为块被访问。根据另一实施方式,与子范围的边界点对应的比特序列的各自的比特子序列可以作为块被访问。重复步骤704﹣714,直到所选择的子范围的所有块都存储在TCAM或其他查找表数据结构中。根据一个实施方式,从最右侧的块(例如,具有最低有效位(least significant bit)的块)开始,顺序选择来自比特串的块用于使用步骤704﹣714的处理。
在步骤706,确定当前块在子范围开始序列和子范围结束序列两者中是否具有相同值。如果是(即,两个序列中具有相同值),则在步骤708,在比特串中将块值编码。逐位执行编码,例如,对应于当前块的(比特串的)比特子串具有用于块的每个有效值的保留比特。根据一个实施方式,通过对应于待编码的值的保留比特和保留比特右边的所有其他位(例如,具有更低值的比特)设置为“1”,来执行比特子串的编码。例如,如图2A所示,将子范围(060)﹣(066)中的第二元素(块)编码产生比特子串“0111111”,将六个最高有效位设置为“1”并且其余比特设置为“0”。
如果在步骤706确定开始和结束边界点中的当前块值不同,则方法700的处理进行到步骤710。在步骤710,确定当前块的有效值是否包括该块的全部范围。根据一个实施方式,确定开始边界点的0当前块值和结束边界点的最大块值(例如,块中的所有比特为1),以指示当前块的有效值包括该块的全部范围。
如果是(例如,当前块的有效值包括块的全部范围),则在步骤714,将块编码为通配符。例如,在图2A中,将子范围(020)﹣(057)的第三元素编码为“xxxxxxx”,表示7个比特的任一个可以是“1”或“0”。
如果不是(例如,当前块的有效值不包括块的全部范围),则当前块的有效值包括值的范围。因此,将对应的比特子串编码,以容纳开始子范围和结束子范围之间的当前块的有效值的整个范围。例如,如图2A所示,将子范围(013)﹣(017)中的第三元素(块)编码产生了比特子串“xxxx111”:通过将三个最低有效位设置为“1”,记录了块的最低有效值3,并且将比特4﹣7设置为通配符,以指示这些比特中的每个可以是“1”或“0”。
如上所述,重复步骤704﹣714,以对每个块编码。各自的块的编码导致TCAM或存储器中的其他数据中存储的条目。
本文描述的通信装置的代表性功能可以在硬件、软件、或他们的一些组合中来实现。例如,基于本文中给出的讨论,本领域普通技术人员将理解,可以使用计算机处理器、计算机逻辑、ASIC、FPGA、DSP等来实施处理400、500、600和700。因此,执行本文描述的处理功能和/或算法的任何处理器都在本公开的范围和精神内。
应当理解,将使用详细说明书部分而非摘要部分来解释权利要求。摘要部分可能阐述了发明人所设想的本公开的一个或多个而非全部的示例性实施方式,因此,不以任何方式限制本公开和所附的权利要求。
以上已经借助于示出实现具体功能及其关系的功能构造块来描述了本公开。为了描述的方便,本文任意地限定了这些功能构造块的边界。只要能适当地执行具体功能及其关系,也可以限定其他边界。
具体实施方式的上述描述完全揭示了本公开的总体性质,并且通过应用本领域的技术知识,在不背离本公开的一般概念的情况下,无需过分实验,其他人就能够容易地对具体实施方式进行修改和/或调整用于各种应用。因此,基于本文给出的教导和引导,这种适应性修改和调整也在所公开的实施方式的等同方案的含义和范围内。应当理解,本文的措辞和术语用于描述性而非限制性的,本说明书的措辞和术语将由本领域普通技术人员根据本文的教导和指引来解释。
本发明的外延和范围不应由任何上述示例性实施方式限制,而是应当仅根据权利要求及其等同方案来限定。
Claims (10)
1.一种用于在存储器中存储整数值的范围的方法,包括:
确定所述范围中的子范围,使得在来自分别是所述子范围的开始值和结束值的二进制表示的第一和第二多个比特子序列中,在第一多个比特子序列中除了至多一个比特子序列外的所有比特子序列的值等于第二多个比特子序列中的相应比特子序列的值或者值为0且第二多个比特子序列的相应比特子序列具有最大值;
基于所述第一和第二多个比特子序列的值形成第一比特串;以及
在所述存储器中存储所述第一比特串。
2.根据权利要求1所述的方法,其中,所述存储包括在三态内容寻址存储器(TCAM)中存储所述第一比特串。
3.根据权利要求1所述的方法,其中,所述形成包括:
生成与来自所述第一多个比特子序列的比特子序列和来自所述第二多个比特子序列的相应比特子序列的各个配对相应的各自的比特子串;以及
连接所生成的比特子串以产生所述比特串。
4.根据权利要求3所述的方法,其中,各个所述各自的比特子串的长度至少等于来自所述第一多个比特子序列的比特子序列的最大值。
5.根据权利要求3所述的方法,其中,生成各自的比特子串包括:
确定与所述各个配对相应的有效值的范围;以及
基于所确定的有效值的范围来设置所述比特子串中的比特值,其中,所述比特子串中的各自的比特位置与所确定的有效值的范围中的值相关联。
6.根据权利要求5所述的方法,其中,在所述比特子串中设置比特值包括:
将所述比特子串的前m个比特设置为1,其中,m是来自所述第一多个比特子序列的比特子序列的有效值;以及
将所述前m个比特后的n个比特设置为通配符,其中,n是来自所述第一多个比特子序列的比特子序列和来自所述第二多个比特子序列的比特子序列之间的差。
7.根据权利要求1所述的方法,还包括:
从数据包的字段值的二进制表示确定第三多个比特子序列;
基于所述第三多个比特子序列的值形成第二比特串;
将所述第二比特串与所存储的第一比特串相比较;以及
基于所述比较来处理所述数据包。
8.根据权利要求7所述的方法,其中,根据预定的比特子序列长度来确定所述第一、第二和第三多个比特子序列。
9.根据权利要求7所述的方法,其中,所述第一、第二和第三多个比特子序列中的比特子序列数量相等。
10.一种系统,包括:
处理器;
耦接至所述处理器的至少一个存储器;
存储器存储模块,被配置为:
确定范围中的子范围,使得在来自分别是所述子范围的开始值和结束值的二进制表示的第一和第二多个比特子序列中,在第一多个比特子序列中除了至多一个比特子序列外的所有比特子序列的值等于第二多个比特子序列中的相应比特子序列的值或者值为0且第二多个比特子序列的相应比特子序列具有最大值;
基于第一和第二比特子序列的值形成第一比特串;以及
在所述至少一个存储器中存储所述第一比特串。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/535,984 | 2012-06-28 | ||
US13/535,984 US9032142B2 (en) | 2012-06-28 | 2012-06-28 | System and method for storing integer ranges in a memory |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103516614A true CN103516614A (zh) | 2014-01-15 |
Family
ID=49777972
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210589675.5A Pending CN103516614A (zh) | 2012-06-28 | 2012-12-28 | 用于在存储器中存储整数范围的系统和方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9032142B2 (zh) |
CN (1) | CN103516614A (zh) |
TW (1) | TWI474686B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11943142B2 (en) * | 2014-11-10 | 2024-03-26 | Marvell Asia Pte, LTD | Hybrid wildcard match table |
WO2022197200A1 (en) * | 2021-03-17 | 2022-09-22 | Huawei Technologies Co., Ltd. | Method, apparatus and system for encoding |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101035061A (zh) * | 2006-03-09 | 2007-09-12 | 中兴通讯股份有限公司 | 实现三重内容可寻址存储器范围匹配的分段编码扩展方法 |
CN101039253A (zh) * | 2006-03-17 | 2007-09-19 | 中兴通讯股份有限公司 | 一种实现三重内容可寻址存储器范围匹配的前缀扩展方法 |
US7711893B1 (en) * | 2004-07-22 | 2010-05-04 | Netlogic Microsystems, Inc. | Range code compression method and apparatus for ternary content addressable memory (CAM) devices |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6857099B1 (en) * | 1996-09-18 | 2005-02-15 | Nippon Steel Corporation | Multilevel semiconductor memory, write/read method thereto/therefrom and storage medium storing write/read program |
US6018524A (en) | 1997-09-09 | 2000-01-25 | Washington University | Scalable high speed IP routing lookups |
US7555594B2 (en) * | 2004-07-22 | 2009-06-30 | Netlogic Microsystems, Inc. | Range representation in a content addressable memory (CAM) using an improved encoding scheme |
US8195945B2 (en) * | 2005-12-01 | 2012-06-05 | Sony Mobile Communications Ab | Secure digital certificate storing scheme for flash memory and electronic apparatus |
-
2012
- 2012-06-28 US US13/535,984 patent/US9032142B2/en active Active
- 2012-12-12 TW TW101146838A patent/TWI474686B/zh not_active IP Right Cessation
- 2012-12-28 CN CN201210589675.5A patent/CN103516614A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7711893B1 (en) * | 2004-07-22 | 2010-05-04 | Netlogic Microsystems, Inc. | Range code compression method and apparatus for ternary content addressable memory (CAM) devices |
CN101035061A (zh) * | 2006-03-09 | 2007-09-12 | 中兴通讯股份有限公司 | 实现三重内容可寻址存储器范围匹配的分段编码扩展方法 |
CN101039253A (zh) * | 2006-03-17 | 2007-09-19 | 中兴通讯股份有限公司 | 一种实现三重内容可寻址存储器范围匹配的前缀扩展方法 |
Non-Patent Citations (1)
Title |
---|
R.PANIGRAHY,S.SHARMA: "《Sorting and searching using ternary CAMs》", 《IEEE COMPUTER SOCIETY》, 28 February 2003 (2003-02-28) * |
Also Published As
Publication number | Publication date |
---|---|
TWI474686B (zh) | 2015-02-21 |
US20140003112A1 (en) | 2014-01-02 |
TW201401813A (zh) | 2014-01-01 |
US9032142B2 (en) | 2015-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6985483B2 (en) | Methods and systems for fast packet forwarding | |
US11902156B2 (en) | Method for generating segment list, method for forwarding packet, device, and system in SRv6 network | |
Le et al. | Scalable tree-based architectures for IPv4/v6 lookup using prefix partitioning | |
US7706375B2 (en) | System and method of fast adaptive TCAM sorting for IP longest prefix matching | |
JP3216630B2 (ja) | 通信制御装置 | |
CN112425131B (zh) | 一种acl的规则分类方法、查找方法和装置 | |
US20050018683A1 (en) | IP address storage technique for longest prefix match | |
US9979648B1 (en) | Increasing entropy across routing table segments | |
US8848707B2 (en) | Method for IP longest prefix match using prefix length sorting | |
WO2015090179A1 (en) | Trie stage balancing for network address lookup | |
CN101620623A (zh) | 内容可寻址存储器表项管理方法和装置 | |
Le et al. | Memory-efficient and scalable virtual routers using FPGA | |
CN105791455B (zh) | 三态内容寻址存储器tcam空间的处理方法及装置 | |
US6819671B1 (en) | Relay control circuit using hashing function algorithm | |
WO2017215102A1 (en) | Method of forwarding data packets, method of creating merged fib key entry and method of creating a search key | |
CN102045412A (zh) | IPv6地址前缀压缩存储方法及设备 | |
US20030163442A1 (en) | FFS search and edit pipline separation | |
CN101902401A (zh) | 一种搜索处理装置及网络系统 | |
TW465210B (en) | Method and apparatus for adaptive address lookup table generator for networking application | |
CN109194536A (zh) | 一种网络流量过滤方法、装置及终端 | |
CN103516614A (zh) | 用于在存储器中存储整数范围的系统和方法 | |
US20140108718A1 (en) | Method and apparatus for setting tcam entry | |
US20080022403A1 (en) | Method and apparatus for a pattern matcher using a multiple skip structure | |
Chang et al. | LayeredTrees: Most specific prefix-based pipelined design for on-chip IP address lookups | |
Behdadfar et al. | Scalar prefix search: A new route lookup algorithm for next generation internet |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1191470 Country of ref document: HK |
|
AD01 | Patent right deemed abandoned | ||
AD01 | Patent right deemed abandoned |
Effective date of abandoning: 20170419 |
|
REG | Reference to a national code |
Ref country code: HK Ref legal event code: WD Ref document number: 1191470 Country of ref document: HK |