CN105229980A - 利用可变关键字大小的精确匹配查找 - Google Patents
利用可变关键字大小的精确匹配查找 Download PDFInfo
- Publication number
- CN105229980A CN105229980A CN201480027410.3A CN201480027410A CN105229980A CN 105229980 A CN105229980 A CN 105229980A CN 201480027410 A CN201480027410 A CN 201480027410A CN 105229980 A CN105229980 A CN 105229980A
- Authority
- CN
- China
- Prior art keywords
- hash
- keyword
- search
- segmentation
- 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.)
- Granted
Links
Classifications
-
- 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/7453—Address table lookup; Address filtering using hashing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9014—Indexing; Data structures therefor; Storage structures hash tables
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/30—Peripheral units, e.g. input or output ports
- H04L49/3009—Header conversion, routing tables or routing tags
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9017—Indexing; Data structures therefor; Storage structures using directory or table look-up
-
- 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/60—Router architectures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Data Mining & Analysis (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
在一种用于在网络设备中执行精确匹配查找的方法中,在该网络设备接收网络分组。至少基于所接收到的网络分组的报头中所包括的数据确定用于该网络分组的查找关键字。至少基于该查找关键字的大小从多个可能散列函数中选择一个散列函数,并且使用所选择的散列函数对该查找关键字执行散列操作以计算散列查找关键字分段。使用该散列查找关键字分段来查询数据库以提取出精确地对应于该查找关键字的数值。
Description
相关申请的交叉引用
本申请要求于2013年4月11日提交的题为“ExactMatchwithVariableKeySizes”的美国临时申请No.61/811011以及于2014年1月2日提交的题为“ExactMatchwithVariableKeySizes”的美国临时申请No.61/923093的权益,其公开通过引用结合于此。
本申请涉及于2012年8月31日提交的题为“MethodandApparatusForTCAMBasedLookup”的美国专利申请No.13/966962,于2013年1月9日提交的题为“ExactMatchLookupInNetworkSwitchDevice”的美国专利申请No.13/737608,以及于2013年8月28日提交的题为“ExactMatchHashLookupDatabasesinNetworkSwitchDevices”的美国专利申请No.14/012834,上述申请的公开通过引用结合于此。
技术领域
本公开总体上涉及网络设备,更特别地涉及网络设备中的精确匹配查找。
背景技术
诸如网络交换机、桥接器、路由器、边缘设备等的网络设备经常采用存储与该网络设备所处理的分组相关联的各种类型的信息的查找表。该网络设备在处理分组时经常在查找表中执行搜索/查找以作出各种处理决策或确定(例如,对分组归类,要将分组转发至哪个端口,等等)。通常,针对分组的查找根据与该分组相关联的关键字来执行。该关键字通常包括来自该分组的报头的信息,而且有时包括可能并未包括在报头中的其它信息,诸如进入接口。该关键字例如被用来搜索表格,并且有关该分组的信息(例如,该分组的转发信息或者指示一些其它动作的信息)从被该关键字所标识的表格条目所获取。
一些查找表使用内容可寻址存储器(CAM)(例如,三元CAM(TCAM)),其一般被用于“屏蔽”搜索/查找。然而,近年来,网络设备越来越多地开始执行“精确匹配”查找。虽然基于CAM的表格可以被用于精确匹配查找,但是与基于随机访问存储器(RAM)的表格—诸如使用静态RAM(SRAM)所实施的表格—相比,它们通常对于这样的查找不太有效(例如,在面积和功耗方面)。精确匹配查找目前被用来执行任意多种不同的分组处理操作,诸如分组归类、作出转发或路由决策、服务质量归类、策略控制列表应用、隧道终止操作等。此外,由于各种各样的可能处理操作,精确匹配查找可能要去使用具有不同关键字大小的多种不同类型的关键字。例如,典型地,基于介质访问控制(MAC)地址和虚拟局域网(VLAN)标识符的桥接查找使用60位的关键字,而针对IPv4地址的查找使用32位的关键字,针对IPv6地址的路由的查找则使用128位的关键字,等等。为了应对各种关键字大小,一些常规的网络设备将所有较短关键字补充为最大的所支持关键字大小的位长度,或者提供存储在不同存储器中的单独查找表,其中每个表格仅由单一固定大小的关键字进行索引。然而,这两种技术通常在存储器资源的利用方面都是低效的,这最终会增大电路面积和/或功耗。例如,就前者的技术而言,即使相对短的关键字也占据与长关键字相同数量的查找表存储器。此外,由于每个表格/关键字大小将需要的条目数量和/或关键字大小的分布通常并非是事先已知的,所以使用后者的技术的***设计人员通常无法确定将有效利用查找存储器资源的每查找表/关键字大小的条目数量。
发明内容
在一个实施例中,一种用于在网络设备中执行精确匹配查找的方法,包括在该网络设备接收网络分组;至少基于所接收到的网络分组的报头中所包括的数据确定该网络分组的查找关键字;至少基于该查找关键字的大小从多个可能散列函数中选择一个散列函数;使用所选择的散列函数对该查找关键字执行散列操作以计算散列查找关键字分段;并且使用该散列查找关键字分段来查询数据库以提取出精确地对应于该查找关键字的数值。
在另一个实施例中,一种网络设备包括多个接口、存储数据库的查找存储器、以及耦合至该多个接口的分组处理器。该分组处理器被配置为对经由该多个接口中的至少一些所接收的网络分组进行处理,并且包括关键字生成单元,关键字生成单元被配置为至少基于所接收到的网络分组的报头中所包括的数据确定经由该多个接口之一所接收到的网络分组的查找关键字。该分组处理器还包括关键字搜索单元,其被配置为至少基于该查找关键字的大小从多个可能散列函数中选择一个散列函数,使用所选择的散列函数对该查找关键字执行散列操作以计算散列查找关键字分段,并且使用该散列查找关键字分段来查询数据库以提取出精确地对应于该查找关键字的数值。
在另一个实施例中,一种用于在网络设备中执行精确匹配查找的方法,包括在该网络设备接收网络分组;至少基于所接收到的网络分组的报头中所包括的数据确定该网络分组的查找关键字;使用两个或更多散列函数对该查找关键字执行两个或更多散列操作以计算两个或更多散列查找关键字分段;并且使用该两个或更多散列关键字分段来查询在两个或更多存储器组之间进行分布的数据库以提取出精确地对应于该查找关键字的数值。查询该数据库包括使用该两个或更多散列查找关键字分段来访问该两个或更多存储器组以标识两个或更多匹配分段;获取与该两个或更多匹配分段中的至少一个相关联的至少一个指针;并且使用该至少一个指针将匹配分段中的至少两个进行组合以标识该数据库中的匹配条目,精确地对应于该查找关键字的数值是与该匹配条目相关联的数值。
在另一个实施例中,一种网络设备包括多个接口、存储在两个或更多存储器组之间进行分布的数据库的查找存储器,以及耦合至该多个接口的分组处理器。该分组处理器被配置为对经由该多个接口中的至少一些所接收的网络分组进行处理。该分组处理器包括关键字生成单元和关键字搜索单元,关键字生成单元被配置为至少基于所接收到的网络分组的报头中所包括的数据确定经由该多个接口之一所接收到的网络分组的查找关键字。该关键字搜索单元被配置为使用两个或更多散列函数对该查找关键字执行两个或更多散列操作以计算两个或更多散列查找关键字分段,并且使用该两个或更多散列关键字分段来查询该数据库以提取出精确地对应于该查找关键字的数值。该关键字搜索单元被配置为至少通过使用该两个或更多散列查找关键字分段来访问该两个或更多存储器组以标识两个或更多匹配分段,获取与该两个或更多匹配分段中的至少一个相关联的至少一个指针,并且使用该至少一个指针将匹配分段中的至少两个进行组合以标识该数据库中的匹配条目来查询该数据库,精确地对应于该查找关键字的数值是与该匹配条目相关联的数值。
在另一个实施例中,一种用于在网络设备中填充精确匹配查找表的方法,包括确定要存储在该网络设备的数据库中的查找关键字,该数据库在两个或更多存储器组之间进行分布。该方法还包括至少基于该查找关键字的大小(i)从该两个或更多存储器组之间选择第一存储器组,并且(ii)从多个可能散列函数中选择一个散列函数,使用所选择的散列函数对该查找关键字执行散列操作以计算第一散列查找关键字分段,将该第一散列查找关键字分段存储在所选择的第一存储器组中,并且将对应于该查找关键字的一个或多个散列查找关键字分段存储在该两个或更多存储器组中的一个或多个后续存储器组中。
在另一个实施例中,一种网络设备包括多个接口、存储在两个或更多存储器组之间进行分布的数据库的查找存储器、以及耦合至该多个接口的分组处理器。该分组处理器被配置为对经由该多个接口中的至少一些所接收的网络分组进行处理。该分组处理器包括关键字生成单元以及关键字***单元,关键字生成单元被配置为至少基于所接收到的网络分组的报头中所包括的数据确定经由该多个接口之一所接收到的网络分组的查找关键字。该关键字***单元被配置为至少基于该查找关键字的大小(i)从该两个或更多存储器组之间选择第一存储器组,并且(ii)从多个可能散列函数中选择一个散列函数,使用所选择的散列函数对该查找关键字执行散列操作以计算第一散列查找关键字分段,将该第一散列查找关键字分段存储在所选择的第一存储器组中,并且将对应于该查找关键字的一个或多个散列查找关键字分段存储在该两个或更多存储器组中的一个或多个后续存储器组中。
在另一个实施例中,一种用于在网络设备中填充精确匹配查找表的方法,包括确定要存储在该网络设备的数据库中的查找关键字,该数据库在两个或更多存储器组之间进行分布。该方法还包括使用两个或更多散列函数对该查找关键字执行两个或更多散列操作以计算两个或更多散列查找关键字分段,至少包括使用第一散列函数计算第一散列查找关键字分段,并且使用第二散列函数计算第二散列查找关键字分段。该方法还包括将该第一散列查找关键字分段存储在该两个或更多存储器组中的第一存储器组中,将该第二散列查找关键字分段存储在该两个或更多存储器组中的第二存储器组中,并且将指针与该第一散列查找关键字分段相关联,该指针指示该第二散列查找关键字分段在该第二存储器组中的位置。
在另一个实施例中,一种网络设备包括多个接口,以及存储在两个或更多存储器组之间进行分布的数据库的查找存储器。该两个或更多存储器组至少包括第一存储器组和第二存储器组。该网络设备还包括耦合至该多个接口的分组处理器。该分组处理器被配置为对经由该多个接口中的至少一些所接收的网络分组进行处理。该分组处理器包括关键字生成单元和关键字***单元,该关键字生成单元被配置为至少基于所接收到的网络分组的报头中所包括的数据确定经由该多个接口之一所接收到的网络分组的查找关键字。该关键字***单元被配置为至少通过使用第一散列函数计算第一散列查找关键字分段,并且使用第二散列函数计算第二散列查找关键字分段而使用两个或更多散列函数对该查找关键字执行两个或更多散列操作以计算两个或更多散列查找关键字分段。该关键字***单元还被配置为将该第一散列查找关键字分段存储在第一存储器组中,将该第二散列查找关键字分段存储在第二存储器组中,并且将指针与该第一散列查找关键字分段相关联,该指针指示该第二散列查找关键字分段在该第二存储器组中的位置。
附图说明
图1是根据一个实施例的利用多散列查找表执行各种查找操作的示例网络设备的框图。
图2是根据一个实施例的被用来依据第一精确匹配查找技术存储图1的多散列查找表的示例存储器组的框图。
图3是根据一个实施例的被用来依据第二精确匹配查找技术存储图1的多散列查找表的示例存储器组的框图。
图4是根据一个实施例的用于使用第一技术执行精确匹配查找的示例方法的流程图。
图5是根据一个实施例的用于使用第一技术填充精确匹配查找表的示例方法的流程图。
图6是根据一个实施例的用于使用第二技术执行精确匹配查找的示例方法的流程图。
图7是根据一个实施例的用于使用第二技术填充精确匹配查找表的示例方法的流程图。
具体实施方式
在以下所描述的实施例中,具有不同大小(例如,位长度)的查找关键字被有效存储在统一存储器(例如,存储器组的共用集合)之中而并不要求较短的关键字被补充至最长所支持关键字的长度。在这些实施例中的一些中,多散列、精确匹配查找表跨多个存储器组进行分布。在一个实施例中,每个存储器组或者多个存储器组的一个或多个群组中的每一个使用不同的散列函数进行访问(例如,用于填充或搜索存储在(多个)组中的查找表的一部分)。根据第一精确匹配查找技术,在一个实施例中,散列表根据关键字大小进行定义,其中每个散列表是使用单个散列函数进行访问(为了关键字***和关键字搜索)的一个或多个存储器组的虚拟/逻辑分组。在这些实施例中的一些中,并且受到表格条目的可用性的影响,具有最小大小的关键字能够被***到对应于存储器组的散列表中,而较大的关键字则能够被***到对应于两个或更多存储器组的连续分块的散列表中。在一些实施例中,对应于较大关键字的每个散列表基于关键字大小而被限制为存储器组的特定集合,并且用来访问散列表的特定散列函数取决于采用哪个存储器组的集合。在一个实施例中,例如,每个散列表使用与对应于该散列表的一个或多个存储器组的分组中的第一存储器组相关联的散列函数进行访问。
在一个实施例中,根据第二精确匹配查找技术,较大关键字能够以更为灵活的方式被***到各个存储器组中(例如,并不被限制为存储器组的连续分块),其中指针被用来指示不同存储器组中的各个散列关键字分段之间的关联。在一个这样的实施例中,查找通过如下方法来执行:利用对应于每个存储器组的散列函数对较大关键字进行散列,标识该存储器组中的任意匹配分段,并且使用与该匹配分段相关联的一个或多个指针(以及其它信息,在一些实施例中,诸如分段数量和/或关键字大小)重构针对该较大关键字提供精确匹配的适当条目。
图1是根据一个实施例的利用这里所描述的可变关键字大小的查找技术的示例网络设备10的高度简化框图。网络设备10通常是连接两个或更多计算机***、网络分段、子网等的计算机联网设备。在各个实施例中,网络设备10是桥接设备、路由器设备、交换机设备,或者被配置为在联网环境内进行操作的任意其它适当网络设备。图1的实施例中所示的网络设备10包括端口12。通常,在一些实施例中,端口12包括物理、虚拟和/或逻辑接口,诸如物理端口、虚拟端口、隧道接口等。在一些实施例中,每个端口12是能够用作入口端口和出口端口的双向端口。在其它实施例中,一些或全部端口12专用于作为入口端口或出口端口。虽然图1仅示出了十个端口,但是在其它实施例中,网络设备10可以包括多于十个的端口或者少于十个的端口。
网络设备10还包括分组处理器14。分组处理器14通常被配置为处理经由一个或多个端口12所接收和/或传送的网络分组。在各个实施例中,分组处理器14包括一个或多个分组处理单元16,其被配置为对所接收到的分组和/或表示所接收到的分组的描述符执行分组处理操作。在至少一些情形中,(多个)分组处理单元16中的至少一个执行要求使用分组信息(例如,分组报头和/或描述符信息)来执行搜索/查找以便确定要对该分组采取或者关于其采取的动作的处理操作。在一个实施例中,例如,(多个)分组处理单元16包括执行用于将分组向端口12中的一个或多个出口端口进行Layer2转发的查找的桥接单元、执行查找以确定要对所接收的分组应用哪一种策略的分类单元、执行用于分组的Layer3路由的查找的路由单元、执行用于隧道传输的分组的拆包的查找的隧道终止单元、和/或出于其它目的执行查找的一个或多个其它单元。在一些实施例中,两个或更多的分组处理单元16使用不同大小的关键字执行查找。例如,在一个实施例中,桥接单元使用对应于MAC地址和VLAN标识符/标签的60位的关键字执行查找,转发和/或分类单元使用对应于双重VLAN标签的24位关键字执行查找,隧道终止单元使用适用于特定隧道协议/类型(例如,MACinMAC、VPLS、TRILL、VXLAN等)的关键字大小执行查找,等等。附加地或者备选地,在一些实施例中,(多个)分组处理单元16中的至少一个被单独配置为使用不同大小的关键字执行查找。例如,在一个实施例中,路由单元被配置为执行使用不同关键字大小的多种类型的查找,包括使用对应于IPv4地址的32位关键字的查找,使用对应于IPv6地址的128位关键字的查找,以及使用通过向IPv4和/或IPv6地址增加虚拟路由器转发(VRF)索引而被加长的关键字的查找。
为了执行至少一些所需查找,分组处理器14包括关键字生成单元20、关键字搜索/***单元22以及存储多散列查找表的查找存储器24。在各个实施例中,关键字生成单元20和/或关键字搜索/***单元22耦合至(多个)分组处理单元16中执行查找的每个单元,并且耦合至(多个)分组处理单元16中执行查找的单元的子集中的每一个,或者被配置为对所有(多个)分组处理单元16进行服务。
为了确定要对分组执行或关于其执行的动作,关键字生成单元20使用分组信息来针对该分组生成关键字。在一个实施例中,例如,关键字生成单元20基于决定适当动作所需的分组报头信息来生成关键字,上述报头信息诸如MAC地址、VLAN或双重VLAN标签、或者IPv4或IPv6地址。附加地或者备选地,在一个实施例中,关键字生成单元20基于非报头信息生成关键字,上述非报头信息诸如分组经由其进入到网络设备10的接口(例如,端口12的接口)。关键字搜索/***单元22利用所生成的关键字对多散列查找表26进行搜索,并且(向(多个)分组处理单元16中指示该搜索的单元)返回分组处理信息,该单元能够利用该分组处理信息来执行所期望的处理操作。在一个实施例中,关键字搜索/***单元22不仅搜索多散列查找表26中的条目,而且还利用新的条目对多散列查找表26进行填充(例如,将关键字和数值/动作***到多散列查找表26中),和/或去除旧的条目(例如,基于老化准则)。
如将要在下文中更为详细描述的,多散列查找表26存储对应于不同关键字大小的条目。在各个实施例中,每个不同关键字大小或者至少一些不同关键字大小中的每一个对应于不同类型的搜索/查找,并且多散列查找表26因此是多用途数据库。例如,在一个实施例中,多散列查找表26存储与转发动作相关联的条目,以及与隧道终止动作相关联的条目,并且因此用作转发表和隧道终止表。在其它实施例中,每个不同关键字大小对应于相同的一般类型的搜索/查找。例如,在一些实施例中,多散列查找表26仅存储与路由动作(例如,在一个实施例中,对应于32位的IPv4地址的动作以及对应于128位的IPv6地址的动作)相关联的条目。
在图1所示的实施例中,多散列查找表26被细分为存储在查找存储器24的四个不同存储器组30-1至30-4之中的四个散列表部分。在一个实施例中,存储器组30-1至30-4中的每一个是查找存储器24内的不同物理存储器组。在一个实施例中,查找存储器24(包括存储器组30-1至30-4)是静态随机访问存储器(SRAM)。在其它实施例中,查找存储器24是不同的适当存储器,例如诸如动态RAM(DRAM)。在一个实施例中,存储器组30-1至30-4中的每个散列表部分使用存储器组30-1至30-4中相对应的不同的一个存储器组进行访问。在一个实施例中,能够存储在多散列查找表26中的数值/动作条目的数量等于能够存储在多散列查找表26中的最小大小的关键字的最大数量。在一些实施例中,多散列查找表26的数值/动作包括指向与关键字相关联的属性的指针,或者包括表示属性自身的数据。
分组处理器14包括一个或多个有形/物理处理器或者包括在后者之内。例如,在第一实施例中,分组处理器14包括多个软件驱动的处理器,它们被部署为管道中的分级,被配置为对通过管道输送的分组进行处理。在一个实施例中,管道的每个分级接收分组、处理情境,以及基于该情境在分级执行一种或多种处理操作所需的代码。在一个这样的实施例中,(多个)分组处理单元16被实施为相应的管道分级。此外,在一个实施例中,关键字生成单元20和/或关键字搜索/***单元22被实施为管道分级之外的一个或多个加速器(例如,一个或多个硬件加速器电路)。
在第二实施例中,分组处理器14包括多个软件驱动的运行至完成处理器/核心,其中每个核心被配置为在处理后续分组之前执行针对相应分组的基本上所有处理。在一个这样的实施例中,(多个)分组处理单元16被实施为分组处理器14的单个核心内的相应软件模块。此外,在一个实施例中,关键字生成单元20和/或关键字搜索/***单元22被实施为处于分组处理器14之外的一个或多个加速器(例如,一个或多个硬件加速器电路)。在一个实施例中,关键字生成单元20和/或关键字搜索/***单元22被多个核心用来执行与不同分组相关联的查找操作。
在以上所描述的第一和第二实施例中的一些之中,软件驱动的处理器被配置为读取并执行存储在有形的非瞬态计算机可读存储器(例如,只读存储器(ROM)、随机访问存储器(RAM)等)上的指令。在一些实施例中,该指令包括计算机可读指令,当被处理器所执行时,其使得该处理器执行这里所描述的(多个)分组处理器任意的各种动作。
在第三实施例中,分组处理器14包括以硬件实施的分组处理管道,上述硬件诸如一个或多个专用集成电路(ASIC)或者任意其它适当(多种)类型的(多个)硬件电路。在一个这样的实施例中,(多个)分组处理单元16被实施为相应的管道分级。此外,在一个实施例中,关键字生成单元20和/或关键字搜索/***单元22被实施为管道分级之外的一个或多个电路。
现在将针对两种备选技术/实施例对关键字搜索/***单元22关于填充以及搜索多散列查找表26两方面的操作进行描述。在一些实施例中尤其适用于其中大多数关键字被预期具有最小关键字大小的第一精确匹配查找技术参考图2的示例实施例进行描述。在一些实施例中提供对于关键字大小的分布不可知的更为一般的解决方案的第二种备选精确匹配查找技术则参考图3的示例实施例进行描述。
首先参考图2,其图示了第一精确匹配查找技术的一个示例实施例,所看到的是,查找存储器24的每个存储器组30-1至30-4存储多散列查找表26的相应部分,其中每个存储器组30-1至30-4被配置为在有限数量的散列表地址的每一个之中存储多达一个的散列关键字分段。如将从随后的描述所清楚的,在一个实施例中,“散列关键字分段”针对具有最小大小的关键字对应于整个关键字,或者针对具有较大大小的关键字则对应于该关键字的一部分。在一个实施例中,各个散列表部分中的每个地址在应用相对应的散列函数时对应于单个散列数值,并且每个存储器组30-1至30-4具有等于单个散列关键字分段的大小(位计数)的宽度。
在图2的实施例中,存储器组30-1的散列表部分包括均能够保存单个散列关键字分段的五个地址50-1至50-5,存储器组30-2的散列表部分包括均能够保存单个散列关键字分段的五个地址52-1至52-5,存储器组30-3的散列表部分包括均能够保存单个散列关键字分段的五个地址54-1至54-5,并且存储器组30-4的散列表部分包括均能够保存单个散列关键字分段的五个地址56-1至56-5。图2(和图1)的多散列查找表26被示为仅包括四个散列表部分(存储在四个存储器组30中),每个散列表部分包括五个地址,这仅是为了帮助进行解释。然而,在其它实施例中,多散列查找表26包括存储在其它数量的存储器组30(例如,2、3、5、6等)之中的其它数量的散列表部分,和/或每个散列表部分包括能够保存散列关键字分段的不同数量的地址(例如,256、1000等)。
当根据第一精确匹配查找技术以及图2的示例实施例进行操作时,关键字搜索/***单元22通过接收关键字(例如,从关键字生成单元20)以及要被***到多散列查找表26之中的相关联信息而填充多散列查找表26。例如,在一个实施例中,关键字包括分组的MAC地址和VLAN标识符,并且与关键字相关联的信息包括端口12中要向其转发以该MAC地址为目的地(并且具有该VLAN标识符)的分组的一个或多个出口端口。在一个实施例中,关键字生成单元20还生成关键字大小的指示符(例如,位计数或者表示大小范围的指示符,等等),并且将该指示符连同关键字一起或者作为关键字的一部分提供至关键字搜索/***单元22。
在一个实施例中,关键字搜索/***单元22基于关键字大小(例如,使用关键字生成单元20所提供的关键字大小指示符)标识/选择一个或多个散列表,其中每个不同散列表对应于不同散列函数。例如,在一个实施例中,当***具有最小关键字大小的关键字时,关键字搜索/***单元22标识/选择四个散列表60-1至60-4,这些散列表均存储在不同存储器组30-1至30-4中并且均对应于不同散列函数32-1至32-4(图1)。在一个实施例中,该最小关键字大小是在被***多散列查找表26之中时仅被散列为(散列关键字分段50、52、54和56中的)单个散列关键字分段的那些关键字的大小。在一些实施例中,关键字生成单元20提供补充以确保所有关键字都至少具有最小关键字大小。在其中要***最小大小的关键字的一些实施例和情形中,关键字搜索/***单元22通过使用相应的散列函数32-1至32-4对整个关键字进行散列而访问每个散列表60-1至60-4,并且在不会产生冲突的情况下(例如,在一个实施例中,如果该散列表并未已经在所计算的地址/散列值包括不同关键字的散列关键字分段)将该散列关键字***到散列表60之一中。在一个实施例中,关键字搜索/***单元22还将指示该关键字为最小大小的关键字的信息存储在条目中。图2图示了其中具有最小关键字大小的关键字被作为散列关键字分段“A”在地址52-1成功***到散列表60-2中的情形。
在一些实施例中,关键字搜索/***单元22每次一个地向关键字应用散列函数32-1至32-4(并且确定是否可能***到散列表60-1至60-4中相对应的一个之中),并且仅在当前散列操作并未导致关键字***的情况下才执行其余的散列函数。在其它实施例中,关键字搜索/***单元22并行地对关键字应用散列函数32-1至32-4中的每一个,并且进行检查以查看是否每个散列表60-1至60-4都能够存储该关键字。在其中多于一个的散列表60-1至60-4具有可用地址的一些实施例和情形中,关键字搜索/***单元22将该关键字***到散列表60-1至60-4中被填充最多的一个之中。附加地或者备选地,在一些实施例中,关键字搜索/***单元22采用“布谷鸟(cuckoo)”算法,其中只要之前所存储的关键字能够被移动至新的散列表,则关键字即使在存在冲突的情况下也被***。在一些实施例中,结合这里所描述的技术实施美国专利申请No.13/737608和/或美国专利申请No.14/012834中所描述的任意适当的关键字***的(多种)技术或(多种)算法。
在一个实施例中,针对两倍于最小关键字长度(或者例如被关键字生成单元20补充为两倍于最小关键字长度)的关键字,关键字搜索/***单元22标识/选择两个散列表62-1和62-2,它们均对应于存储器组30-1至30-4的不同配对,并且均对应于不同的散列函数32-1至32-4。在一个实施例中,在搜索到具有两倍于最小关键字长度的关键字时,用来访问对应于散列表62-1和62-2的存储器组的配对的散列函数是对应于被用来存储该散列表的第一存储器组的散列函数。例如,在图2的示例实施例中,用于散列表62-1的散列函数是对应于存储器组30-1的散列函数(即,散列函数32-1),并且用于散列表62-2的散列函数是对应于存储器组30-3的散列函数(即,散列函数32-3)。在其它实施例中,针对每个散列表使用不同的散列函数(例如,诸如被用来存储该散列表的最后的存储器组)。
在其中要***两倍于最小关键字大小的关键字的一些实施例和情形中,关键字搜索/***单元22通过使用散列函数32-1对整个关键字进行散列以访问存储在存储器组30-1中的散列表部分,并且还通过使用散列函数32-1对整个关键字进行散列以访问存储在存储器组30-2中的散列表部分从而访问散列表62-1。类似地,在一个实施例中,关键字搜索/***单元22通过使用散列函数32-3对整个关键字进行散列以访问存储在存储器组30-3中的散列表部分,并且还通过使用散列函数32-3对整个关键字进行散列以访问存储在存储器组30-4中的散列表部分从而访问散列表62-2。如果将不会导致冲突(例如,在一个实施例中,如果该散列表中任一个组成的散列表部分在所产生的地址/散列值处都不包括散列关键字分段),则散列关键字随后以两个相邻散列关键字分段的形式而被***到散列表62-1或62-2之一。在一个实施例中,关键字搜索/***单元22还将指示该关键字两倍于最小大小的信息存储在条目之中。图2图示了如下情形,其中具有两倍于最小关键字大小的第一关键字作为散列关键字分段“B1”和“B2”而分别在地址50-2和52-2而被成功***到散列表62-1之中,并且具有两倍于最小关键字大小的第二关键字作为散列关键字分段“C1”和“C2”而分别在地址54-3和56-3而被成功***到散列表62-2之中。如在图2的示例实施例和情形中所看到的,针对特定散列表的每个散列表部分使用相同的散列函数(例如,针对存储器组30-1和30-2中所存储的散列表部分使用散列函数32-1)使得每个散列关键字分段被存储在每个散列表部分内的相同地址/散列值。
在一些实施例中,关键字搜索/***单元22每次一个地向关键字应用散列函数32-1和32-3(并且确定是否可能***到相对应的一个散列表62-1或62-2之中),并且仅在第一散列函数32-1并未导致关键字***的情况下才执行第二散列函数32-3。在其它实施例中,关键字搜索/***单元22并行地将两个散列函数32-1和32-3应用于该关键字,并且进行检查以查看散列表62-1和62-2是否都能够存储关键字。在其中两个散列表62-1和62-2在组成的散列表部分内都具有可用地址的一些实施例和情形中,关键字搜索/***单元22将该关键字***到散列表62-1和62-2中被填充最多的一个之中。附加地或者备选地,在一些实施例中,关键字搜索/***单元22采用“cuckoo”算法,其中只要之前所存储的关键字能够被移动至新的散列表,则关键字即使在存在冲突的情况下也被***。在一些实施例中,结合这里所描述的技术实施美国专利申请No.13/737608和/或美国专利申请No.14/012834中所描述的任意适当的关键字***的(多种)技术或(多种)算法。
在一个实施例中,针对三倍于最小关键字长度(或者例如被关键字生成单元20补充为三倍于最小关键字长度)的关键字而言,关键字搜索/***单元22标识/选择对应于存储器组30-1至30-3的散列表64以及散列函数32-1至32-4之一。在一个实施例中,在搜索具有三倍于最小关键字长度的关键字时,用来访问对应于散列表64的这三个存储器组中的每一个的散列函数是对应于被用来存储该散列表的第一存储器组的散列函数。例如,在图2的示例实施例中,用于散列表64的散列函数是对应于存储器组30-1的散列函数(即,散列函数32-1)。在其它实施例中,针对每个散列表使用不同散列函数(例如,诸如被用来存储散列表的最后的存储器组)。在其中要***三倍于最小关键字大小的关键字的一些实施例和情形中,关键字搜索/***单元22通过使用相同散列函数32-1对整个关键字进行散列以访问存储在存储器组30-1至30-3中的三个散列表部分中的每一个来访问散列表64。如果将不会导致冲突(例如,在一个实施例中,如果该散列表中的三个组成的散列表部分在所产生的地址/散列值处都不包括散列关键字分段),则散列关键字随后以三个相邻散列关键字分段的形式而被***到散列表64之中。在一些实施例中,关键字搜索/***单元22采用“cuckoo”算法,其中只要之前所存储的关键字能够被移动至新的散列表,则关键字即使在存在冲突的情况下也被***。在一些实施例中,结合这里所描述的技术实施美国专利申请No.13/737608和/或美国专利申请No.14/012834中所描述的任意适当的关键字***的(多种)技术或(多种)算法。在一个实施例中,关键字搜索/***单元22还将指示该关键字为三倍于最小大小的信息存储在条目之中。图2图示了其中具有三倍最小关键字大小的关键字作为散列关键字分段“D1”、“D2”和“D3”分别在地址50-4、52-4和54-4被成功***到散列表64之中的情形。同样,针对特定散列表的每个散列表部分使用相同的散列函数(例如,针对存储器组30-1至30-3中所存储的每个散列表部分使用散列函数32-1)使得每个散列关键字分段被存储在每个散列表部分内的相同地址/散列值。
在一个实施例中,针对四倍于最小关键字长度(或者例如被关键字生成单元20补充为四倍于最小关键字长度)的关键字而言,关键字搜索/***单元22标识/选择对应于存储器组30-1至30-4的散列表66以及散列函数32-1至32-4之一。在一个实施例中,在搜索具有四倍于最小关键字长度的关键字时,用来访问对应于散列表66的这四个存储器组中的每一个的散列函数是对应于被用来存储该散列表的第一存储器组的散列函数。例如,在图2的示例实施例中,用于散列表66的散列函数是对应于存储器组30-1的散列函数(即,散列函数32-1),这是因为存储器组30-1是其中存储散列关键字的第一部分的第一存储器组。在其它实施例中,针对每个散列表使用不同散列函数(例如,诸如被用来存储散列表的最后的存储器组)。在其中要***四倍于最小关键字大小的关键字的一些实施例和情形中,关键字搜索/***单元22通过使用相同散列函数32-1对整个关键字进行散列以访问存储在存储器组30-1至30-4中的四个散列表部分中的每一个来访问散列表66。如果将不会在任意存储器组30中的相对应位置导致冲突(例如,在一个实施例中,如果该散列表中的四个组成的散列表部分在所产生的地址/散列值处都不包括散列关键字分段),则散列关键字随后以四个相邻散列关键字分段的形式而被***到散列表64之中。在一些实施例中,关键字搜索/***单元22采用“cuckoo”算法,其中只要之前所存储的关键字能够被移动至新的散列表,则关键字即使在存在冲突的情况下也被***。在一些实施例中,结合这里所描述的技术实施美国专利申请No.13/737608和/或美国专利申请No.14/012834中所描述的任意适当的关键字***的(多种)技术或(多种)算法。在一个实施例中,关键字搜索/***单元22还将指示该关键字为四倍于最小大小的信息存储在条目之中。图2图示了其中具有四倍最小关键字大小的关键字作为散列关键字分段“E1”、“E2”、“E3”和“E4”分别在地址50-5、52-5、54-5和56-5被成功***到散列表66之中的情形。同样,针对特定散列表的每个散列表部分使用相同的散列函数(即,针对存储器组30-1至30-4中所存储的每个散列表部分使用散列函数32-1)使得每个散列关键字分段被存储在每个散列表部分内的相同地址/散列值。
如图2中所看到的,在一个实施例中,该第一精确匹配查找技术在一些情形中能够选择不同的散列函数来访问单独的一个存储器组30,其中该选择基于查找关键字的大小。例如,在图2的示例实施例中,在搜索具有最小关键字大小的查找关键字时使用散列函数32-2来访问存储器组30-2,但是在搜索具有两倍、三倍或四倍于最小关键字大小的查找关键字时则使用散列函数32-1。作为另一个示例,在一个实施例中,在搜索具有最小关键字大小的查找关键字时使用散列函数32-4来访问存储器组30-4,在搜索具有两倍于最小关键字大小的查找关键字时使用散列函数32-3,并且在搜索具有四倍于最小关键字大小的查找关键字时则使用散列函数32-1。
在一些实施例中,针对特定关键字大小所提供的散列表在存储相对应的散列关键字分段的存储器组的方面能够有所重叠。然而,在图2的示例实施例中,各种散列表被限制到特定存储器组30而使得并没有针对单个关键字大小的两个散列表被存储或部分存储在相同的存储器组中。例如,在一个实施例中,两倍于最小关键字大小的关键字无法被***到存储器组30-2和30-3中所存储的散列表之中,并且三倍于最小关键字大小的关键则无法被***到存储在存储器组30-2、30-3和30-4中的散列表之中。更一般地,在具有类似于存储器组30的N个存储器组的一些实施例中,针对具有大小K倍于最小关键字大小(K是整数,并且K[i]是散列关键字的第i个分段)的关键字的(多个)散列表被部署为使得一个或多个散列表中的每一个的第一散列关键字分段(K[0])被存储在B[0],B[K],B[2K],B[3K],…,B[max_location],其中B[i]是第i个存储器组,其中max_location等于N–K–mod(N/K),并且其中每个散列表的散列关键字分段K[i]被存储在作为存储散列表的K[0]散列关键字分段的存储器组上方的第i个存储器组的存储器组中。在一些实施例中,以这种方式部署散列表防止了错误肯定(即,其中针对并非确实在多散列查找表中具有条目的关键字而错误地返回匹配条目的情形)。应用上述一般规则的一个示例实施例对应于图2中所看到的各个散列表。作为另一个示例,向具有六个存储器组(即,N=6)的实施例应用该一般规则针对双倍于最小关键字大小的关键字产生三个非重叠散列表,针对三倍于最小关键字大小的关键字产生两个非重叠散列表,针对四倍于最小关键字大小的关键字产生一个散列表,针对五倍于最小关键字大小的关键字产生一个散列表,并且针对六倍于最小关键字大小的关键字产生一个散列表。当然,在任意的这些实施例中,无需针对并未预期使用的关键字大小定义或提供散列表。
如以上所提到的,在一些实施例中,关键字搜索/***单元22基于哪些散列表被填充最多而***关键字,和/或使用cuckoo算法***关键字。在其中实施cuckoo算法的一些实施例中,关键字搜索/***单元22无论原有关键字是否比新关键字更小、相等或更大都能够清空现有条目以存储新的关键字/条目。在一个实施例或情形中,例如,关键字搜索/***单元22能够将具有两倍最小关键字大小的新的关键字***到相邻存储器组中的一对地址中,这是通过清空那些地址之一或二者处的最小大小的关键字,通过清空同样具有两倍最小关键字大小的同一对地址的关键字,或者通过清空具有至少三倍最小关键字大小的同一对地址(以及另外的一个或多个地址)的关键字来实现的。
在该第一精确匹配查找技术的一些实施例中,如以上关于表格填充/关键字***所描述的,关键字搜索/***单元22使用相同散列表和散列函数(即,如通过关键字大小所定义的)执行搜索/查找。例如,在一个实施例中,针对最小大小的关键字对散列表60进行搜索,针对具有两倍最小大小的关键字对散列表62进行搜索,针对具有三倍最小大小的关键字对散列表64进行搜索,并且针对具有四倍最小大小的关键字对散列表66进行搜索。在其中针对特定关键字大小提供多个散列表的一个实施例中,在利用具有该关键字大小的关键字进行搜索时对每个散列表进行并行搜索。例如,在图2的示例实施例中,在针对具有两倍最小关键字大小的关键字执行查找时对散列表62-1和62-2进行并行搜索。在备选实施例中,以串行方式对散列表进行搜索直至找到匹配条目。
在一个实施例中,查找匹配在针对特定关键字所计算的所有散列关键字分段与特定散列表中的相对应地址处所存储的所有条目都匹配的情况下得以实现。例如,在其中使用具有两倍最小关键字大小的关键字执行查找的一个实施例和情形中,当散列函数32-3分别在地址54-3和56-3形成散列关键字分段C1和C2时返回匹配。在一些实施例中,每个散列关键字分段连同指示对应于该条目的关键字的大小的信息一起进行存储以便减少或消除错误肯定。例如,在一个实施例和情形中,散列关键字分段“B1”和“B2”(分别处于地址50-2和52-2)均连同指示该分段属于双倍最小大小的关键字的条目的信息一起存储在相应存储器组中。在一个实施例中,关键字搜索/***单元22在检测到匹配时获取到该关键字大小信息,并且使用该关键字大小信息来确定匹配是否有效。例如,在其中关键字搜索/***单元22使用最小大小的关键字执行查找的一个实施例和情形中,应用散列函数32-2导致地址/散列值52-2,其同样恰好对应于已经存储在多散列查找表26中的较大关键字的散列位置之一(“B2”)。在该实施例/情形中,关键字搜索/***单元22获取与散列关键字分段“B2”相关联的关键字大小信息,并且使用该信息来确定该匹配对于最小大小关键字的搜索并不有效。
接下来参考图3,其图示了第二精确匹配查找技术的一个示例实施例,所看到的是,查找存储器24的存储器组30-1至30-4中的每一个同样存储多散列查找表26的相应部分,其中每个存储器组30-1至30-4同样被配置为在有限数量的散列表地址中的每一个中存储多达一个的散列关键字分段。在一个实施例中,当应用相对应的散列函数时,各个散列表部分的每个地址对应于单个散列值,并且存储器组30-1至30-4中的每一个具有等于单个散列关键字分段的大小(位计数)的宽度。
不同于图2,图3并未示出每个散列表部分中的所有可能地址位置,而是仅图示了在特定情形中被主动用来存储散列关键字分段的各个地址中的一些。然而,与图2以及第一精确匹配查找技术相同,注意,在各个不同实施例中,每个散列表部分能够包括均能够保存散列关键字分段的任意适当数量的地址(例如,256、1000等)。同样与图2以及第一精确匹配查找技术相同,多散列查找表26的其它实施例包括存储在其它数量的存储器组30(例如,2、3、5、6等)之中的其它数量的散列表部分。
当根据第二精确匹配查找技术以及图3的示例实施例进行操作时,关键字搜索/***单元22通过首先接收要被***到多散列查找表26的条目之中的关键字和相关联信息(例如,诸如以上结合图2和第一精确匹配查找技术所描述的关键字类型和/或大小中的任意一种)来填充多散列查找表26。在一个实施例中,关键字生成单元20还生成关键字大小的指示符(例如,位计数或者表示大小范围的指示符等),并且将该指示符连同关键字一起或者作为其一部分提供给关键字搜索/***单元22。
在一个实施例中,关键字搜索/***单元22无论关键字大小如何都向所接收到的关键字应用散列函数32-1至32-4中的每一个,并且确定相对应的散列表部分中的哪一个具有可用地址。如果,针对K倍于最小关键字大小的关键字而言,能够在存储器组30的至少K个不同的组中获得散列值/地址,则关键字搜索/***单元22将相应散列关键字分段***到K个不同存储器组30中的每一个之中。而第一精确匹配查找技术(针对图2的示例实施例)则仅将较大关键字的散列关键字分段***到相邻存储器组30中所存储的散列表部分之中,在至少一些实施例中,第二精确匹配查找技术允许较大关键字的散列关键字分段被存储在任意可用存储器组30的地址之中(多达每个存储器组30一个地址)。在这些实施例中的一些中,放松对于可接受的散列关键字分段位置的限制允许查找存储器24至少在空间利用方面得到更为有效的利用。然而,在一个实施例中,针对大于最小关键字大小的关键字,关键字搜索/***单元22通过连同每个散列关键字分段(除了最后分段)一起存储指针而使用附加的存储器。在一个实施例中,该指针被用来将对应于单个关键字的每个散列关键字分段进行连接。另外,在一些实施例中,关键字搜索/***单元22连同至少一些散列关键字分段存储其它信息,诸如关键字大小的指示符和/或对应于单个关键字的一系列散列关键字分段内的片段数量的指示符。如以下将更为详细描述的,该指针(以及如果存在的话,关键字大小和/或片段数量的指示符)允许所存储的关键字在执行搜索时被重构。
在图3的示例实施例和情形中,关键字搜索/***单元22成功地将对应于最小大小的关键字的散列关键字分段“A”***到存储器组30-2中所存储的散列表部分的地址80-1中,成功地将对应于两倍于最小大小的关键字的散列关键字分段“B1”和“B2”***到存储器组30-1和30-3中分别所存储的散列表部分的地址82-1和82-2中,成功地将对应于两倍于最小大小的关键字的散列关键字分段“C1”和“C2”***到存储器组30-2和30-4中分别所存储的散列表部分的地址84-1和84-2中,成功地将对应于三倍于最小大小的关键字的散列关键字分段“D1”、“D2”和“D3”***到存储器组30-1、30-3和30-4中分别所存储的散列表部分的地址86-1、86-2和86-3中,并且成功地将对应于四倍于最小大小的关键字的散列关键字分段“E1”、“E2”、“E3”和“E4”***到存储器组30-1、30-2、30-3和30-4中分别所存储的散列表部分的地址88-1、88-2、88-3和88-4中。在一个实施例中,图3中的散列关键字分段之间的各种箭头表示随散列关键字分段存储在该箭头的源头处的指针。例如,在图3的实施例和情形中,存储器组30-1的地址82-1存储从“B1”到“B2”的指针,存储器组30-2的地址84-1存储从“C1”到“C2”的指针,等等。
在一些实施例中,关键字搜索/***单元22基于哪个散列表部分被填充最多而***关键字,和/或使用cuckoo算法***关键字。在一些实施例中,结合这里所描述的技术实施美国专利申请No.13/737608和/或美国专利申请No.14/012834中所描述的任意适当的关键字***的(多种)技术或(多种)算法。在其中实施cuckoo算法的一些实施例中,关键字搜索/***单元22无论原有关键字的大小如何都能够清空现有条目以存储新的关键字/条目。
在第二精确匹配查找技术的一些实施例中,关键字搜索/***单元22通过使用相应的散列函数32-1至32-4访问存储在存储器组30-1至30-4中的散列表部分来执行搜索/查找。在一些实施例中,关键字搜索/***单元22标识多散列查找表26中位于所产生的地址/散列值处的分段,并且获取与那些匹配分段相关联的任意指针。在一些实施例中,关键字搜索/***单元22还针对一个或多个匹配分段中的每一个获取其它信息,诸如关键字大小和/或分段数量的指示符。在一个实施例中,关键字搜索/***单元22随后使用匹配分段、指针以及(如果存在)关键字大小和/或分段数量信息来标识多散列查找表26中的哪些分段对应于哪些关键字/条目。在一个实施例中,如果针对具有大小为K倍于最小关键字大小的所搜索关键字标识出K个匹配分段,并且如果那K个匹配分段经由适当指针进行连接(和/或包括适当的关键字大小和/或分段数量指示符以指示每个匹配的分段是单个关键字条目的一部分),则对应于该K个匹配分段的条目被标识为匹配条目,并且关键字搜索/***单元22获取对应于该条目的数值。
参考图3的示例情形,在一个实施例中,如果散列函数32-1在地址86-1形成散列关键字分段,散列函数32-3在地址86-2形成散列关键字分段,并且散列函数32-4在地址86-3形成散列关键字分段(即分别与分段D1、D2和D3相关联的地址),则关键字搜索/***单元22针对大小三倍于最小关键字大小的关键字标识匹配条目。然而,在一个实施例中,关键字搜索/***单元22仅在获取到从D1到D2的指针以及从D2到D3的指针和/或获取到指示D1为三个分段中的第一个,D2为三个分段中的第二个并且D3为三个分段中的第三个的信息之后才将对应于D1、D2和D3的条目标识为“匹配”条目。在一个这样的实施例/情形中,利用散列函数32-2进行散列的结果是无关的,因为关键字搜索/***单元22能够(基于指针、所搜索关键字的已知大小和/或与匹配分段相关联的关键字大小和/或分段数量信息)辨别出任何匹配分段都不对应于匹配条目的一部分。
在其中关键字搜索/***单元22针对大小三倍于最小关键字大小的关键字执行查找的另一个实施例和情形中,散列函数32-1在地址82-1形成散列关键字分段,散列函数32-2在地址80-1形成散列关键字分段,散列函数32-3在地址86-3形成散列关键字分段,并且散列函数32-4并未形成匹配分段。在该实施例/情形中,虽然标识出三个匹配分段,但是关键字搜索/***单元22并未标识出匹配条目。在一个实施例中,关键字搜索/***单元22排除地址82-1、80-1和86-3处的匹配分段,原因在于它们并未被指针所连接,和/或它们并未包括与所搜索关键字相匹配的其它信息(例如,在一个实施例中,由于关键字搜索/***单元22确定匹配分段A、B1和B2中的每一个与并不与所搜索关键字的关键字大小指示符相匹配的关键字大小指示符相关联)。
在一些实施例中,(对应于图2的示例实施例的)第一精确匹配查找技术或(对应于图3的示例实施例的)第二精确匹配查找技术结合其它查找技术来使用。例如,在一些实施例中,查找存储器24是根据以上所描述的第一或第二精确匹配查找技术的任意实施例执行精确匹配查找的SRAM,并且另一个存储器(例如,三元内容可寻址存储器(TCAM))则被用来执行屏蔽搜索和/或其它精确匹配搜索。在一个实施例中,根据在美国专利申请No.13/966962中所描述的任意适当技术,并行于SRAM精确匹配查找来使用TCAM查找。
图4是根据一个实施例的使用第一技术执行精确匹配查找的示例方法100的流程图。方法100例如在诸如图1的网络设备10的网络设备中实施。
在框102,在实施方法100的网络设备接收网络分组。在一个实施例中,该网络分组经由该网络设备的接口(例如,图1的端口12之一)而被分组处理器(例如,图1的分组处理器14)所接收。
在框104,例如,至少基于该网络分组的报头中所包括的数据和/或其它信息针对在框102所接收的网络分组确定查找关键字,上述其它信息诸如接收到该网络分组的接口。在一个实施例中,例如,框104由关键字生成单元来实施,诸如图1的关键字生成单元20。例如,在一些实施例中,查找关键字基于MAC地址、VLAN或双重VLAN标签、IPv4或IPv6地址、隧道信息和/或报头内的任意其它适当信息来确定。
在框106,至少基于查找关键字大小从多个可能的散列函数中选择一个散列函数。在一个实施例中,例如,框106由关键字搜索单元所实施,诸如图1的关键字搜索/***单元22。在一些实施例中,散列函数通过标识/选择散列表(例如,在一个实施例中,通过使用查找关键字大小来确定所要访问的散列表的索引),并且选择对应于存储该散列表的至少一部分的第一存储器组的散列函数而被选择。在其它实施例中,例如,以另一种适当方式基于关键字大小来选择散列函数,诸如选择对应于存储该散列表的至少一部分的最后存储器组的散列函数。在一些实施例中,查找关键字大小并不是关键字的确切大小,而是用作对应于该查找关键字的单个数据库条目的散列关键字分段的数量的指示符。在一个实施例中,在框106基于查找关键字确定关键字大小。在另一个实施例中,关键字大小的指示符在框104生成并且被附属至查找关键字,包括在其中或者以其它方式与之相关联。
在框108,使用在框106所选择的散列函数对查找关键字执行散列操作以计算出散列查找关键字分段。例如,在一个实施例中,框108由关键字搜索单元来实施,诸如图1的关键字搜索/***单元22。
在框110,使用在框108所计算的散列查找关键字分段来查询数据库以提取出精确地对应于查找关键字的数值。例如,在一个实施例中,框110由关键字搜索单元来实施,诸如图1的关键字搜索/***单元22。在一个实施例中,在框110所查询的数据库在两个或更多存储器组(例如,SRAM或其它适当存储器—诸如图1的查找存储器24—的两个或更多存储器组)之间进行分布。例如,在其中从N个可能的散列函数(其中N是大于1的整数)中选择散列函数(在框106)的一个实施例中,在框110所查询的数据库在均对应于N个可能散列函数中不同的一个的N个存储器组之间进行分布。在一些实施例中,该数据库通过使用散列查找关键字分段来访问两个或更多存储器组中的至少两个不同的组中的每一个而被查询。在一些实施例中,在框108所计算的散列查找关键字分段具有等于两个或更多存储器组中的每一个的宽度的大小(位长度)。
在一些实施例中,在框110查询数据库包括并行地并且使用散列查找关键字分段来访问两个或更多存储器组中的两个或更多不同组中的每一个以标识两个或更多的相应匹配分段,获取与该两个或更多匹配分段中的至少一个相关联的至少一个关键字大小指示符,并且至少基于两个或更多匹配分段以及(多个)关键字大小指示符而标识该数据库中的匹配分段。在一个这样的实施例中,精确地对应于查找关键字的数值是与所标识的匹配条目相关联的数值。
在一些实施例中,方法100包括并未在图4中看到的一个或多个另外的框。例如,在一个实施例中,方法100包括类似于框106和108的另外的框,但是其用于选择对应于该数据库中的不同散列表的不同散列函数,以及用于计算不同的散列查找关键字分段。在一个实施例和/或情形中,在类似于框110的框中使用不同的散列查找关键字分段来查询数据库,但是并未标识出匹配条目,并且因此没有提取出精确地对应于查找关键字的数值。
图5是根据一个实施例的用于使用第一技术填充精确匹配查找表的示例方法120的流程图。例如,方法120例如在诸如图1的网络设备10的网络设备中实施。
在框122,确定要被存储在分布于两个或更多存储器组(例如,SRAM或其它适当存储器的两个或更多存储器组)之间的数据库中的查找关键字。在一个实施例中,框122例如由诸如图1的关键字生成单元20的关键字生成单元来实施。例如,在一些实施例中,查找关键字基于MAC地址、VLAN或双重VLAN标签、IPv4或IPv6地址、隧道信息和/或报头内的任意其它适当信息和/或基于例如诸如接收到分组的接口的其它信息来确定。
在框124,至少基于在框122所确定的查找关键字的大小从两个或更多存储器组中选择第一存储器组,并且从多个可能散列函数中选择一个散列函数。例如,在一个实施例中,框124由诸如图1的关键字搜索/***单元22的关键字***单元来实施。例如,在其中从N个可能的散列函数(其中N是大于1的整数)中选择散列函数的一个实施例中,该数据库在均对应于N个可能散列函数中不同的一个的N个存储器组之间进行分布。在一些实施例中,该第一存储器组是被用来存储对应于该查找关键字的散列查找关键字分段的K个存储器组中的第一个,并且所选择的散列函数通过标识/选择该第一存储器组(或者通过标识/选择在该第一存储器组开始的散列表,等等)而被选择。在一个实施例中,关键字大小在框124基于查找关键字确定。在另一个实施例中,关键字大小的指示符在框122生成并且被附属至查找关键字,包括在其中或者以其它方式与之相关联。
在框126,使用在框124所选择的散列函数对查找关键字执行散列操作以计算出第一散列查找关键字分段。例如,在一个实施例中,框126由诸如图1的关键字搜索/***单元22的关键字***单元来实施。在一些实施例中,在框126所计算的第一散列查找关键字分段具有等于两个或更多存储器组中的每一个的宽度的大小(位长度)。
在框128,在框126所计算的第一散列查找关键字分段被存储(写入)到在框124所选择的第一存储器组中。例如,在一个实施例中,框128由诸如图1的关键字搜索/***单元22的关键字***单元来实施。
在框130,对应于该查找关键字的一个或多个其它散列查找关键字分段被存储在该两个或更多存储器组中的一个或多个后续存储器组中。例如,在一个实施例中,框130由诸如图1的关键字搜索/***单元22的关键字***单元来实施。在一个实施例中,该一个或多个后续存储器组与在框124所选择的第一存储器组相邻。在其中在***大于最小关键字大小的关键字时使用相同散列函数来访问多个存储器组中的每一个的实施例中,存储在后续(例如,相邻)存储器组中的一个或多个其它散列查找关键字分段中的每一个精确地等于该第一散列查找关键字分段。在其它实施例中,一个或多个其它散列查找关键字分段使用不同散列函数来计算,因此不同于第一散列查找关键字。
在一些实施例中,方法120包括并未在图5中看到的一个或多个另外的框。例如,在一个实施例中,方法120包括类似于框124和126的另外的框,但是对应于在框130所存储的一个或多个其它散列查找关键字分段。作为另一个示例,在一个实施例中,方法120进一步包括其中确定数据库中的一个或多个现有条目是否能够移动至该数据库中新的位置的框。在一个这样的实施例和情形中,(多个)现有条目是对应于比在框122所确定的查找关键字更大的另一个查找关键字的单个条目,或者对应于比在框122所确定的查找关键字更小的两个或更多其它查找关键字的两个或更多条目。此外,在一个实施例中,在框128存储第一散列查找关键字分段(和/或在框130存储一个或多个其它散列查找关键字分段)响应于一个或多个现有条目中的每一个能够移动至该数据库中新的位置而执行。
图6是根据一个实施例的使用第二技术执行精确匹配查找的示例方法140的流程图。方法140例如在诸如图1的网络设备10的网络设备中实施。
在框142,在实施方法140的网络设备接收网络分组。在一个实施例中,该网络分组经由该网络设备的接口(例如,图1的端口12之一)而被分组处理器(例如,图1的分组处理器14)所接收。
在框144,例如,至少基于该网络分组的报头中所包括的数据和/或其它信息针对在框142所接收的网络分组确定查找关键字,上述其它信息诸如接收到该网络分组的接口。在一个实施例中,例如,框144由关键字生成单元来实施,诸如图1的关键字生成单元20。例如,在一些实施例中,查找关键字基于MAC地址、VLAN或双重VLAN标签、IPv4或IPv6地址、隧道信息和/或报头内的任意其它适当信息来确定。
在框146,使用两个或更多相应散列函数对(在框144确定的)查找关键字执行两个或更多散列操作以计算出两个或更多的相应散列查找关键字分段。例如,在一个实施例中,框146由诸如图1的关键字搜索/***单元22的关键字搜索单元来实施。
在框148(包括框150、152和154),使用在框146所计算的两个或更多散列查找关键字分段来查询数据库以提取出精确地对应于该查找关键字的数值。例如,在一个实施例中,框148由诸如图1的关键字搜索/***单元22的关键字搜索单元来实施。在框148所查询的数据库在两个或更多存储器组(例如,SRAM或其它适当存储器的两个或更多存储器组)之间进行分布。例如,在一个实施例中,该数据库在均对应于N个散列函数中不同的一个的N个存储器组之间进行分布,并且框146的散列操作包括使用该N个不同散列函数的N个散列操作。此外,在一些实施例中,在框146所计算的每个散列查找关键字分段具有等于两个或更多存储器组中的每一个的宽度的大小(位长度)。
在框150,使用在框146所计算的散列查找关键字分段来访问两个或更多存储器组以标识出两个或更多相应的匹配分段。在一些实施例中,该两个或更多存储器组全部被并行访问。在其它实施例中,该存储器组被至少部分顺序地访问。
在框152,获取与在框150所标识的匹配分段中的至少一个相关联的至少一个指针。在一个实施例中,所获取的(多个)指针至少包括与匹配分段中的第一匹配分段相关联的第一指针,其中该第一指针指示匹配分段中的第二匹配分段在存储器组中的位置。
在框154,使用在框152所获取到的(多个)指针对在框150所标识的匹配分段中的至少两个进行组合以标识该数据库中的匹配条目。在一个实施例中,所重构/组合的关键字是否被确定为匹配条目至少部分取决于该查找关键字的大小。在一个实施例中,查找关键字的大小在框154基于查找关键字自身来确定。在另一个实施例中,关键字大小的指示符在框144生成并且被附属至查找关键字,包括在其中或者以其它方式与之相关联。在一个实施例中,(在框148提取的)精确地对应于查找关键字的数值是与所标识的匹配条目相关联的数值。
在一些实施例中,方法140包括并未在图6中看到的一个或多个另外的框。例如,在一个实施例中,方法140进一步包括其中获取与匹配分段中的至少一个相关联的关键字大小指示符的框。在一个这样的实施例中,框154包括使用所获取到的(多个)指针以及所获取到的关键字大小指示符对匹配分段进行组合。
注意,方法140对应于其中搜索至少具有两倍于最小关键字长度的查找关键字的实施例和情形。在对应于最小长度的查找关键字的一些实施例和情形中,至少框152和154被省略。
图7是根据一个实施例的用于使用第二技术填充精确匹配查找表的示例方法160的流程图。例如,方法160例如在诸如图1的网络设备10的网络设备中实施。
在框162,确定要被存储在分布于两个或更多存储器组(例如,SRAM或其它适当存储器的两个或更多存储器组)之间的数据库中的查找关键字。在一个实施例中,框162例如由诸如图1的关键字生成单元20的关键字生成单元来实施。例如,在一些实施例中,查找关键字基于MAC地址、VLAN或双重VLAN标签、IPv4或IPv6地址、隧道信息和/或报头内的任意其它适当信息和/或基于其它信息来确定,例如,上述其它信息诸如接收到分组的接口。
在框164,使用两个或更多散列函数对查找关键字执行两个或更多散列操作以计算出两个或更多相应的散列查找关键字分段。例如,在一个实施例中,框164由诸如图1的关键字搜索/***单元22的关键字***单元来实施。该散列查找关键字分段至少包括第一散列查找关键字分段和第二散列查找关键字分段。在一些实施例中,在框164所计算的散列查找关键字分段具有等于两个或更多存储器组中的每一个的宽度的大小(位长度)。
在框166,该第一散列查找关键字分段被存储(写入)到两个或更多存储器组中的第一存储器组中。在框168,该第二散列查找关键字分段被存储(写入)到两个或更多存储器组中不同的第二存储器组中。例如,在一个实施例中,框166和168由诸如图1的关键字搜索/***单元22的关键字***单元来实施。在一些实施例中,框166和168并行执行。在一些实施例和/或情形中,其中存储第二散列查找关键字分段的第二存储器组与存储第一散列查找关键字分段的第一存储器组并不相邻。在其它实施例和/或情形中,该第二存储器组与存储第一散列查找关键字分段的第一存储器组相邻。
在框170,指针被与第一散列查找关键字分段相关联。在一个实施例中,该指针指示第二散列查找关键字分段在第二存储器组中的位置(例如,在一个实施例中,指示第二散列查找关键字分段的地址)。在一个实施例中,框170由诸如图1的关键字搜索/***单元22的关键字***单元来实施。在一个实施例中,该指针通过被写入到(第一存储器组内)与第一散列查找关键字分段相同的存储器位置/地址而与该第一散列查找关键字分段相关联。
在一些实施例中,方法160包括并未在图7中看到的一个或多个另外的框。例如,在一个实施例和/或情形中,方法160包括类似于框166或168的另外的框,但是其中第三散列查找关键字分段被存储在第三存储器组中(或者第三和第四散列查找关键字分段被存储在第三和第四存储器组中,等等)。作为另一个示例实施例,方法160进一步包括其中关键字大小指示符至少与第一散列查找关键字分段和/或第二散列查找关键字分段相关联的框,和/或其中分段数量指示符至少与第一散列查找关键字分段和/或第二散列查找关键字分段相关联的框。
注意,方法160对应于其中具有至少两倍于最小关键字长度的查找关键字被***数据库的实施例和情形。在对应于最小长度的查找关键字的一些实施例和情形中,至少框170被省略。
虽然已经参考具体示例对本发明进行了描述,但是其意在仅是说明性而并非是对本发明的限制,对于本领域技术人员将会显而易见的是,可以对所描述的实施例进行除了以上所明确描述的那些之外的变化、增加或删除而并不背离本发明的精神和范围。
Claims (40)
1.一种用于在网络设备中执行精确匹配查找的方法,所述方法包括:
在所述网络设备接收网络分组;
至少基于所接收到的网络分组的报头中所包括的数据确定用于所述网络分组的查找关键字;
至少基于所述查找关键字的大小从多个可能散列函数中选择一个散列函数;
使用所选择的散列函数对所述查找关键字执行散列操作以计算散列查找关键字分段;并且
使用所述散列查找关键字分段来查询数据库以提取出精确地对应于所述查找关键字的数值。
2.根据权利要求1所述的方法,其中使用所述散列查找关键字分段来查询数据库包括查询在两个或更多存储器组之间进行分布的数据库。
3.根据权利要求2所述的方法,其中:
选择散列函数包括从N个可能散列函数中选择所述散列函数,N是大于1的整数;并且
使用所述散列查找关键字分段来查询数据库包括查询在N个存储器组之间进行分布的数据库,所述N个存储器组中的每一个对应于所述N个可能散列函数中的不同散列函数。
4.根据权利要求2所述的方法,其中使用所述散列查找关键字分段来查询数据库包括使用所述散列查找关键字分段来访问所述两个或更多存储器组中的不同存储器组。
5.根据权利要求2所述的方法,其中使用所述散列查找关键字分段来查询数据库包括:
并行地且使用所述散列查找关键字分段来访问所述两个或更多存储器组中的不同存储器组以标识两个或更多匹配分段;
获取与所述两个或更多匹配分段中的至少一个相关联的至少一个关键字大小指示符;并且
至少基于(i)所述两个或更多匹配分段和(ii)所述至少一个关键字大小指示符来标识所述数据库中的匹配条目,并且
其中精确地对应于所述查找关键字的所述数值是与所述匹配条目相关联的数值。
6.一种网络设备,包括:
多个接口;
存储数据库的查找存储器;和
耦合至所述多个接口的分组处理器,所述分组处理器被配置为对经由所述多个接口中的至少一些所接收的网络分组进行处理,其中所述分组处理器包括:
关键字生成单元,其被配置为至少基于所接收到的网络分组的报头中所包括的数据确定用于经由所述多个接口之一所接收到的网络分组的查找关键字;
关键字搜索单元,其被配置为:
至少基于所述查找关键字的大小从多个可能散列函数中选择一个散列函数,
使用所选择的散列函数对所述查找关键字执行散列操作以计算散列查找关键字分段,并且
使用所述散列查找关键字分段来查询数据库以提取出精确地对应于所述查找关键字的数值。
7.根据权利要求6所述的网络设备,其中:
所述查找存储器包括两个或更多存储器组;并且
所述关键字搜索单元被配置为至少通过查询在所述两个或更多存储器组之间进行分布的数据库而使用所述散列查找关键字分段来查询数据库。
8.根据权利要求7所述的网络设备,其中:
所述查找存储器包括N个存储器组,N是大于1的整数;并且
所述关键字搜索单元被配置为
从N个可能散列函数中选择所述散列函数,所述N个存储器组中的每一个对应于所述N个可能散列函数中的不同散列函数,并且
至少通过查询在所述N个存储器组之间进行分布的数据库而使用所述散列查找关键字分段来查询数据库。
9.根据权利要求7所述的网络设备,其中所述关键字搜索单元被配置为至少通过使用所述散列查找关键字分段来访问所述两个或更多存储器组中的不同存储器组而使用所述散列查找关键字分段来查询所述数据库。
10.根据权利要求7所述的网络设备,其中所述关键字搜索单元被配置为至少通过以下而使用所述散列查找关键字分段来查询所述数据库:
并行地且使用所述散列查找关键字分段来访问所述两个或更多存储器组中的不同存储器组以标识两个或更多匹配分段;
获取与所述两个或更多匹配分段中的至少一个相关联的关键字大小指示符;并且
至少基于(i)所述两个或更多匹配分段和(ii)所述关键字大小指示符来标识所述数据库中的匹配条目,并且
其中精确地对应于所述查找关键字的所述数值是与所述匹配条目相关联的数值。
11.根据权利要求6所述的网络设备,其中所述查找存储器是静态随机访问存储器(SRAM)。
12.一种用于在网络设备中执行精确匹配查找的方法,所述方法包括:
在所述网络设备接收网络分组;
至少基于所接收到的网络分组的报头中所包括的数据确定用于所述网络分组的查找关键字;
使用两个或更多散列函数对所述查找关键字执行两个或更多散列操作以计算两个或更多散列查找关键字分段;并且
使用所述两个或更多散列查找关键字分段来查询在两个或更多存储器组之间进行分布的数据库以提取出精确地对应于所述查找关键字的数值,其中查询所述数据库包括:
使用所述两个或更多散列查找关键字分段来访问所述两个或更多存储器组以标识两个或更多匹配分段;
获取与所述两个或更多匹配分段中的至少一个相关联的至少一个指针;并且
使用所述至少一个指针将所述匹配分段中的至少两个进行组合以标识所述数据库中的匹配条目,精确地对应于所述查找关键字的数值是与所述匹配条目相关联的数值。
13.根据权利要求12所述的方法,其中:
执行两个或更多散列操作包括使用N个散列函数对查找关键字执行N个散列操作以计算出N个散列查找关键字分段,N是大于1的整数;并且
查询数据库包括查询在N个存储器组之间进行分布的数据库,所述N个存储器组中的每一个对应于所述N个散列函数中的不同散列函数。
14.根据权利要求12所述的方法,其中:
查询所述数据库进一步包括获取与所述两个或更多匹配分段中的至少一个相关联的关键字大小指示符;并且
将所述匹配分段中的至少两个进行组合以标识所述数据库中的匹配条目包括至少使用(i)所述至少一个指针和(ii)所述关键字大小指示符而将所述至少两个匹配分段组合。
15.根据权利要求12所述的方法,其中:
获取与所述两个或更多匹配分段中的至少一个相关联的至少一个指针包括至少获取与所述两个或更多匹配分段中的第一匹配分段相关联的第一指针,所述第一指针指示所述两个或更多匹配分段中的第二匹配分段在所述两个或更多存储器组中的位置。
16.一种网络设备,包括:
多个接口;
存储在两个或更多存储器组之间进行分布的数据库的查找存储器;和
耦合至所述多个接口的分组处理器,所述分组处理器被配置为对经由所述多个接口中的至少一些所接收的网络分组进行处理,其中所述分组处理器包括:
关键字生成单元,其被配置为至少基于所接收到的网络分组的报头中所包括的数据确定用于经由所述多个接口之一所接收到的网络分组的查找关键字,和
关键字搜索单元,其被配置为
使用两个或更多散列函数对所述查找关键字执行两个或更多散列操作以计算两个或更多散列查找关键字分段,并且
使用所述两个或更多散列查找关键字分段来查询所述数据库以提取出精确地对应于所述查找关键字的数值,其中所述关键字搜索单元被配置为至少通过以下而查询所述数据库
使用所述两个或更多散列查找关键字分段来访问所述两个或更多存储器组以标识两个或更多匹配分段,
获取与所述两个或更多匹配分段中的至少一个相关联的至少一个指针,并且
使用所述至少一个指针将所述匹配分段中的至少两个进行组合以标识所述数据库中的匹配条目,精确地对应于所述查找关键字的所述数值是与所述匹配条目相关联的数值。
17.根据权利要求16所述的网络设备,其中:
所述查找存储器存储在N个存储器组之间进行分布的数据库,N是大于1的整数;并且
所述关键字搜索单元被配置为至少通过使用N个散列函数对所述查找关键字执行N个散列操作以计算出N个散列查找关键字分段而执行所述两个或更多散列操作,所述N个散列函数中的每一个对应于N个存储器组中的不同存储器组。
18.根据权利要求16所述的网络设备,其中所述关键字搜索单元被配置为:
进一步通过获取与所述两个或更多匹配分段中的至少一个相关联的关键字大小指示符而查询所述数据库;并且
至少通过至少使用(i)所述至少一个指针和(ii)所述关键字大小指示符将所述匹配分段中的所述至少两个匹配组合而将所述至少两个匹配分段组合以标识所述数据库中的所述匹配条目。
19.根据权利要求16所述的网络设备,其中所述关键字搜索单元被配置为:
至少通过至少获取与所述两个或更多匹配分段中的第一匹配分段相关联的第一指针而获取与所述两个或更多匹配分段中的所述至少一个相关联的所述至少一个指针,所述第一指针指示所述两个或更多匹配分段中的第二匹配分段在所述两个或更多存储器组中的位置。
20.根据权利要求16所述的网络设备,其中所述查找存储器是静态随机访问存储器(SRAM)。
21.一种用于在网络设备中填充精确匹配查找表的方法,所述方法包括:
确定要存储在所述网络设备的数据库中的查找关键字,所述数据库在两个或更多存储器组之间进行分布;
至少基于所述查找关键字的大小(i)从所述两个或更多存储器组之间选择第一存储器组,并且(ii)从多个可能散列函数中选择一个散列函数;
使用所选择的散列函数对所述查找关键字执行散列操作以计算第一散列查找关键字分段;
将所述第一散列查找关键字分段存储在所选择的第一存储器组中;并且
将对应于所述查找关键字的一个或多个散列查找关键字分段存储在所述两个或更多存储器组中的一个或多个后续存储器组中。
22.根据权利要求21所述的方法,其中将对应于所述查找关键字的一个或多个散列查找关键字分段存储在一个或多个后续存储器组中包括将对应于所述查找关键字的一个或多个散列查找关键字分段存储在所述两个或更多存储器组中与所选择的第一存储器组相邻的一个或多个存储器组中。
23.根据权利要求21所述的方法,其中将对应于所述查找关键字的一个或多个散列查找关键字分段存储在一个或多个后续存储器组中包括将所述第一散列查找关键字分段存储在所述两个或更多存储器组中与所选择的第一存储器组相邻的一个或多个存储器组中的每一个中。
24.根据权利要求21所述的方法,其中:
确定查找关键字包括确定要被存储在分布于所述网络设备的N个存储器组之间的数据库中的查找关键字,N是大于1的整数;并且
选择散列函数包括从N个可能散列函数中选择所述散列函数,所述N个可能散列函数中的每一个对应于所述N个存储器组中的不同存储器组。
25.根据权利要求21所述的方法,其中:
选择散列函数包括选择对应于所述第一存储器组的散列函数。
26.根据权利要求21所述的方法,进一步包括确定所述数据库中的一个或多个现有条目是否能够被移动至所述数据库中新的位置,所述一个或多个现有条目包括对应于大于所述查找关键字的另一个查找关键字的单个条目,或者对应于小于所述查找关键字的两个或更多其它查找关键字的两个或更多条目,其中:
将所述第一散列查找关键字分段存储在所选择的第一存储器组中包括响应于确定所述一个或多个现有条目能够被移动至所述数据库中新的位置而将所述第一散列查找关键字分段存储在所选择的第一存储器组中。
27.一种网络设备,包括:
多个接口;
存储在两个或更多存储器组之间进行分布的数据库的查找存储器;和
耦合至所述多个接口的分组处理器,所述分组处理器被配置为对经由所述多个接口中的至少一些所接收的网络分组进行处理,其中所述分组处理器包括:
关键字生成单元,其被配置为至少基于所接收到的网络分组的报头中所包括的数据确定用于经由所述多个接口之一所接收到的网络分组的查找关键字,和
关键字***单元,其被配置为
至少基于所述查找关键字的大小(i)从所述两个或更多存储器组之间选择第一存储器组,并且(ii)从多个可能散列函数中选择一个散列函数,
使用所选择的散列函数对所述查找关键字执行散列操作以计算第一散列查找关键字分段,
将所述第一散列查找关键字分段存储在所选择的第一存储器组中,并且
将对应于所述查找关键字的一个或多个散列查找关键字分段存储在所述两个或更多存储器组中的一个或多个后续存储器组中。
28.根据权利要求27所述的网络设备,其中所述关键字***单元被配置为:
至少通过将对应于所述查找关键字的所述一个或多个散列查找关键字分段存储在所述两个或更多存储器组中与所选择的第一存储器组相邻的一个或多个存储器组中而将对应于所述查找关键字的一个或多个散列查找关键字分段存储在一个或多个后续存储器组中。
29.根据权利要求27所述的网络设备,其中所述关键字***单元被配置为:
至少通过将所述第一散列查找关键字分段存储在所述两个或更多存储器组中与所选择的第一存储器组相邻的一个或多个存储器组中的每一个中而将对应于所述查找关键字的一个或多个散列查找关键字分段存储在一个或多个后续存储器组中。
30.根据权利要求27所述的网络设备,其中:
所述查找存储器存储分布于所述网络设备的N个存储器组之间的数据库,N是大于1的整数;并且
所述关键字***单元被配置为
至少通过从N个可能散列函数中选择散列函数而选择所述散列函数,所述N个可能散列函数中的每一个对应于所述N个存储器组中的不同存储器组。
31.根据权利要求27所述的网络设备,其中所述关键字***单元被配置为:
至少通过选择对应于所述第一存储器组的散列函数而选择散列函数。
32.根据权利要求27所述的网络设备,其中:
所述关键字***单元进一步被配置为确定所述数据库中的一个或多个现有条目是否能够被移动至所述数据库中新的位置,所述一个或多个现有条目包括对应于大于所述查找关键字的另一个查找关键字的单个条目,或者对应于小于所述查找关键字的两个或更多其它查找关键字的两个或更多条目;并且
所述关键字***单元被配置为至少通过响应于所述关键字***单元确定所述一个或多个现有条目能够被移动至所述数据库中新的位置而将所述第一散列查找关键字分段存储在所选择的第一存储器组中而将第一散列查找关键字分段存储在所选择的第一存储器组中。
33.一种用于在网络设备中填充精确匹配查找表的方法,包括:
确定要存储在所述网络设备的数据库中的查找关键字,所述数据库在两个或更多存储器组之间进行分布;
使用两个或更多散列函数对所述查找关键字执行两个或更多散列操作以计算两个或更多散列查找关键字分段,至少包括使用第一散列函数计算第一散列查找关键字分段,并且使用第二散列函数计算第二散列查找关键字分段;
将所述第一散列查找关键字分段存储在所述两个或更多存储器组中的第一存储器组中;
将所述第二散列查找关键字分段存储在所述两个或更多存储器组中的第二存储器组中;并且
将指针与所述第一散列查找关键字分段相关联,所述指针指示所述第二散列查找关键字分段在所述第二存储器组中的位置。
34.根据权利要求33所述的方法,进一步包括将关键字大小指示符与(i)所述第一散列查找关键字分段和(ii)所述第二散列查找关键字分段中的至少一个相关联。
35.根据权利要求33所述的方法,进一步包括将相应的分段数量指示符与(i)所述第一散列查找关键字分段和(ii)所述第二散列查找关键字分段中的至少一个相关联。
36.根据权利要求33所述的方法,其中将所述指针与所述第一散列查找关键字分段相关联包括将所述指针存储在所述第一存储器组内与所述第一散列查找关键字分段相同的存储器位置。
37.根据权利要求33所述的方法,其中将所述第二散列查找关键字分段存储在第二存储器组中包括将所述第二散列查找关键字分段存储在并不与所述第一存储器组相邻的第二存储器组中。
38.一种网络设备,包括:
多个接口;
存储在两个或更多存储器组之间进行分布的数据库的查找存储器,所述两个或更多存储器组至少包括第一存储器组和第二存储器组;和
耦合至所述多个接口的分组处理器,所述分组处理器被配置为对经由所述多个接口中的至少一些所接收的网络分组进行处理,其中所述分组处理器包括:
关键字生成单元,其被配置为至少基于所接收到的网络分组的报头中所包括的数据确定用于经由所述多个接口之一所接收到的网络分组的查找关键字,和
关键字***单元,其被配置为
至少通过使用第一散列函数计算第一散列查找关键字分段,并且使用第二散列函数计算第二散列查找关键字分段而使用两个或更多散列函数对所述查找关键字执行两个或更多散列操作以计算两个或更多散列查找关键字分段,
将所述第一散列查找关键字分段存储在所述第一存储器组中,
将所述第二散列查找关键字分段存储在所述第二存储器组中,并且
将指针与所述第一散列查找关键字分段相关联,所述指针指示所述第二散列查找关键字分段在所述第二存储器组中的位置。
39.根据权利要求38所述的网络设备,其中所述关键字***单元进一步被配置为将(i)关键字大小指示符和(ii)相应的分段数量指示符之一或二者与所述第一散列查找关键字分段和所述第二散列查找关键字分段相关联。
40.根据权利要求38所述的网络设备,其中所述关键字***单元被配置为至少通过将所述指针存储在所述第一存储器组内与所述第一散列查找关键字分段相同的存储器位置而将所述指针与所述第一散列查找关键字分段相关联。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201361811011P | 2013-04-11 | 2013-04-11 | |
US61/811,011 | 2013-04-11 | ||
US201461923093P | 2014-01-02 | 2014-01-02 | |
US61/923,093 | 2014-01-02 | ||
PCT/IB2014/001368 WO2014167419A2 (en) | 2013-04-11 | 2014-04-11 | Exact match lookup with variable key sizes |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105229980A true CN105229980A (zh) | 2016-01-06 |
CN105229980B CN105229980B (zh) | 2018-11-16 |
Family
ID=51398645
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480027410.3A Active CN105229980B (zh) | 2013-04-11 | 2014-04-11 | 利用可变关键字大小的精确匹配查找的方法及设备 |
Country Status (3)
Country | Link |
---|---|
US (3) | US9967187B2 (zh) |
CN (1) | CN105229980B (zh) |
WO (1) | WO2014167419A2 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109344222A (zh) * | 2018-09-12 | 2019-02-15 | 盛科网络(苏州)有限公司 | 一种高带宽tcam的查找与存储方法及装置 |
CN110383319A (zh) * | 2017-01-31 | 2019-10-25 | 益百利信息解决方案公司 | 大规模异构数据摄取和用户解析 |
CN113519144A (zh) * | 2019-01-10 | 2021-10-19 | 马维尔以色列(M.I.S.L.)有限公司 | 用于网络设备的精确匹配和三元内容可寻址存储器(tcam)混合查找 |
Families Citing this family (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2014167419A2 (en) | 2013-04-11 | 2014-10-16 | Marvell Israel (M.I.S.L) Ltd. | Exact match lookup with variable key sizes |
US20140325160A1 (en) * | 2013-04-30 | 2014-10-30 | Hewlett-Packard Development Company, L.P. | Caching circuit with predetermined hash table arrangement |
US20150082054A1 (en) * | 2013-08-21 | 2015-03-19 | Venux LLC | System and Method for Establishing a Secure Digital Environment |
US9756013B2 (en) * | 2014-07-10 | 2017-09-05 | Cisco Technology, Inc. | Distributed mapping of address and port (MAP) between a provider edge device and customer premise equipment devices |
WO2016025591A1 (en) * | 2014-08-12 | 2016-02-18 | Tidal Systems, Inc. | Adaptive rate compression hash processing device |
WO2016030757A1 (en) | 2014-08-25 | 2016-03-03 | Marvell World Trade Ltd. | Packet buffer with dynamic bypass |
US10798000B2 (en) | 2014-12-22 | 2020-10-06 | Arista Networks, Inc. | Method and apparatus of compressing network forwarding entry information |
US9680749B2 (en) | 2015-02-27 | 2017-06-13 | Arista Networks, Inc. | System and method of using an exact match table and longest prefix match table as a combined longest prefix match |
US10496680B2 (en) | 2015-08-17 | 2019-12-03 | Mellanox Technologies Tlv Ltd. | High-performance bloom filter array |
US10049126B2 (en) | 2015-09-06 | 2018-08-14 | Mellanox Technologies Tlv Ltd. | Cuckoo hashing with selectable hash |
US11182365B2 (en) * | 2016-03-21 | 2021-11-23 | Mellanox Technologies Tlv Ltd. | Systems and methods for distributed storage of data across multiple hash tables |
US9846553B2 (en) * | 2016-05-04 | 2017-12-19 | Exablox Corporation | Organization and management of key-value stores |
US10778612B2 (en) * | 2016-05-26 | 2020-09-15 | Arista Networks, Inc. | Variable TCAM actions |
US10068034B2 (en) * | 2016-09-07 | 2018-09-04 | Mellanox Technologies Tlv Ltd. | Efficient matching of TCAM rules using hash tables in RAM |
WO2018138062A1 (en) * | 2017-01-24 | 2018-08-02 | Rockley Photonics Limited | Multi-field classifier |
US10491521B2 (en) | 2017-03-26 | 2019-11-26 | Mellanox Technologies Tlv Ltd. | Field checking based caching of ACL lookups to ease ACL lookup search |
EP3632064B1 (en) * | 2017-05-24 | 2023-01-11 | Telefonaktiebolaget LM Ericsson (publ) | Routing table selection in a policy based routing system |
US10476794B2 (en) | 2017-07-30 | 2019-11-12 | Mellanox Technologies Tlv Ltd. | Efficient caching of TCAM rules in RAM |
US20190114323A1 (en) * | 2017-10-13 | 2019-04-18 | DataJaguar, Inc. | System And Method For Storing Data Records In Key-Value Database |
US11310158B2 (en) * | 2017-12-08 | 2022-04-19 | Corsa Technology Inc. | Packet classification using fingerprint hash table |
CN109921995B (zh) * | 2017-12-13 | 2021-08-13 | 华为技术有限公司 | 一种配置地址表的方法、fpga和应用该fpga的网络设备 |
US11188594B2 (en) * | 2018-02-07 | 2021-11-30 | Oracle International Corporation | Wildcard searches using numeric string hash |
US11327974B2 (en) | 2018-08-02 | 2022-05-10 | Mellanox Technologies, Ltd. | Field variability based TCAM splitting |
DK3618389T3 (da) | 2018-08-27 | 2020-11-09 | Ovh | Systemer og fremgangsmåder til at drive en netværksindretning |
PL3618355T3 (pl) * | 2018-08-27 | 2021-02-08 | Ovh | Systemy i sposoby obsługiwania urządzenia sieciowego |
US11018978B1 (en) * | 2018-09-04 | 2021-05-25 | Marvell Israel (M.I.S.L) Ltd. | Configurable hash-based lookup in network devices |
US11003715B2 (en) | 2018-09-17 | 2021-05-11 | Mellanox Technologies, Ltd. | Equipment and method for hash table resizing |
US20200364585A1 (en) * | 2019-05-17 | 2020-11-19 | Oracle International Corporation | Modular feature extraction from parsed log data |
US10944675B1 (en) | 2019-09-04 | 2021-03-09 | Mellanox Technologies Tlv Ltd. | TCAM with multi region lookups and a single logical lookup |
US11797539B2 (en) | 2019-09-12 | 2023-10-24 | Oracle International Corporation | Accelerated building and probing of hash tables using symmetric vector processing |
CN114586023A (zh) | 2019-09-12 | 2022-06-03 | 甲骨文国际公司 | 使用对称向量处理对散列表的加速的构建和探测 |
US11539622B2 (en) | 2020-05-04 | 2022-12-27 | Mellanox Technologies, Ltd. | Dynamically-optimized hash-based packet classifier |
US11782895B2 (en) | 2020-09-07 | 2023-10-10 | Mellanox Technologies, Ltd. | Cuckoo hashing including accessing hash tables using affinity table |
US11604740B2 (en) * | 2020-12-01 | 2023-03-14 | Capital One Services, Llc | Obfuscating cryptographic material in memory |
US11917042B2 (en) | 2021-08-15 | 2024-02-27 | Mellanox Technologies, Ltd. | Optimizing header-based action selection |
CN113595727B (zh) * | 2021-09-26 | 2021-12-21 | 南京慧链和信数字信息科技研究院有限公司 | 一种基于密钥分存与硬件绑定的密钥安全*** |
US20230095230A1 (en) * | 2021-09-29 | 2023-03-30 | Amazon Technologies, Inc. | Separate relationship management for application data objects |
US11929837B2 (en) | 2022-02-23 | 2024-03-12 | Mellanox Technologies, Ltd. | Rule compilation schemes for fast packet classification |
US11968285B2 (en) | 2022-02-24 | 2024-04-23 | Mellanox Technologies, Ltd. | Efficient memory utilization for cartesian products of rules |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6374326B1 (en) * | 1999-10-25 | 2002-04-16 | Cisco Technology, Inc. | Multiple bank CAM architecture and method for performing concurrent lookup operations |
US7069268B1 (en) * | 2003-01-13 | 2006-06-27 | Cisco Technology, Inc. | System and method for identifying data using parallel hashing |
US20060184556A1 (en) * | 2005-02-17 | 2006-08-17 | Sensory Networks, Inc. | Compression algorithm for generating compressed databases |
US20080147714A1 (en) * | 2006-12-19 | 2008-06-19 | Mauricio Breternitz | Efficient bloom filter |
US20090097654A1 (en) * | 2007-10-15 | 2009-04-16 | Steven Langley Blake | Method and system for performing exact match searches using multiple hash tables |
US20090232139A1 (en) * | 2008-03-11 | 2009-09-17 | James Madison Kelley | Multiple virtual local area network databases in a switch with a relational lookup engine |
US20090274154A1 (en) * | 2006-04-26 | 2009-11-05 | Marvell Semiconductor Israel Ltd. | Double-hash lookup mechanism for searching addresses in a network device |
CN102609509A (zh) * | 2010-04-26 | 2012-07-25 | 华为技术有限公司 | 哈希数据处理方法和装置 |
CN103238145A (zh) * | 2010-12-03 | 2013-08-07 | 华为技术有限公司 | 用于网络装备中的高性能、可更新和确定的哈希表的方法和设备 |
Family Cites Families (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6542782B1 (en) | 1998-12-31 | 2003-04-01 | Z. Joseph Lu | Systems for generating and using a lookup table with process facility control systems and models of the same, and methods of operating such systems |
US6430672B1 (en) * | 2000-07-17 | 2002-08-06 | International Business Machines Corporation | Method for performing address mapping using two lookup tables |
US7209996B2 (en) | 2001-10-22 | 2007-04-24 | Sun Microsystems, Inc. | Multi-core multi-thread processor |
US20040044868A1 (en) | 2002-08-30 | 2004-03-04 | Intel Corporation | Method and apparatus for high-speed longest prefix match of keys in a memory |
US7093092B2 (en) * | 2002-12-10 | 2006-08-15 | Isic Corporation | Methods and apparatus for data storage and retrieval |
US7219184B2 (en) * | 2002-12-10 | 2007-05-15 | Isic Corporation | Method and apparatus for longest prefix matching in processing a forwarding information database |
JP3823089B2 (ja) | 2003-01-27 | 2006-09-20 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 固定長データ検索装置、及び固定長データ検索方法、及びコンピュータプログラム、並びにコンピュータ読み取り可能な記録媒体 |
US7426518B2 (en) | 2003-03-28 | 2008-09-16 | Netlogic Microsystems, Inc. | System and method for efficiently searching a forwarding database that is split into a bounded number of sub-databases having a bounded size |
US7234019B1 (en) * | 2003-12-12 | 2007-06-19 | Raza Microelectronics, Inc. | Method and apparatus for implementing a search engine using an SRAM |
US20050138276A1 (en) | 2003-12-17 | 2005-06-23 | Intel Corporation | Methods and apparatus for high bandwidth random access using dynamic random access memory |
US7019674B2 (en) * | 2004-02-05 | 2006-03-28 | Nec Laboratories America, Inc. | Content-based information retrieval architecture |
US8345685B2 (en) * | 2006-06-09 | 2013-01-01 | Ethernety Networks Ltd | Method and device for processing data packets |
US20080028139A1 (en) * | 2006-07-27 | 2008-01-31 | Cypher Robert E | Content-addressable memory that supports a priority ordering between banks |
US7721042B2 (en) | 2006-07-27 | 2010-05-18 | Oracle America, Inc. | Content-addressable memory that supports a priority ordering between banks of differing sizes |
WO2008094455A2 (en) * | 2007-01-26 | 2008-08-07 | Cheriton David R | Hierarchical immutable content-addressable memory processor |
US20080215849A1 (en) | 2007-02-27 | 2008-09-04 | Thomas Scott | Hash table operations with improved cache utilization |
US20080281789A1 (en) * | 2007-05-10 | 2008-11-13 | Raza Microelectronics, Inc. | Method and apparatus for implementing a search engine using an SRAM |
US8184953B1 (en) * | 2008-02-22 | 2012-05-22 | Google Inc. | Selection of hash lookup keys for efficient retrieval |
US7984028B2 (en) * | 2008-05-21 | 2011-07-19 | Applied Micro Circuits Corporation | System and method for application of hash function in telecommunication and networking |
GB2462493B (en) * | 2008-08-13 | 2012-05-16 | Gnodal Ltd | Data processing |
CN101667958B (zh) * | 2008-09-01 | 2012-08-29 | 华为技术有限公司 | 选择哈希函数的方法、存储及查找路由表的方法及装置 |
US8243735B2 (en) | 2009-01-30 | 2012-08-14 | Palo Alto Research Center Incorporated | System for forwarding packets with hierarchically structured variable-length identifiers using an exact-match lookup engine |
GB2474839A (en) | 2009-10-27 | 2011-05-04 | Sdl Plc | In-context exact matching of lookup segment to translation memory source text |
US20120136846A1 (en) * | 2010-11-30 | 2012-05-31 | Haoyu Song | Methods of hashing for networks and systems thereof |
US20130111122A1 (en) * | 2011-10-31 | 2013-05-02 | Futurewei Technologies, Inc. | Method and apparatus for network table lookups |
US9171030B1 (en) | 2012-01-09 | 2015-10-27 | Marvell Israel (M.I.S.L.) Ltd. | Exact match lookup in network switch devices |
US8886827B2 (en) * | 2012-02-13 | 2014-11-11 | Juniper Networks, Inc. | Flow cache mechanism for performing packet flow lookups in a network device |
US8799507B2 (en) * | 2012-03-13 | 2014-08-05 | Juniper Networks, Inc. | Longest prefix match searches with variable numbers of prefixes |
US9269439B1 (en) | 2012-08-31 | 2016-02-23 | Marvell Israel (M.I.S.L) Ltd. | Method and apparatus for TCAM based look-up |
US9537771B2 (en) | 2013-04-04 | 2017-01-03 | Marvell Israel (M.I.S.L) Ltd. | Exact match hash lookup databases in network switch devices |
WO2014167419A2 (en) | 2013-04-11 | 2014-10-16 | Marvell Israel (M.I.S.L) Ltd. | Exact match lookup with variable key sizes |
-
2014
- 2014-04-11 WO PCT/IB2014/001368 patent/WO2014167419A2/en active Application Filing
- 2014-04-11 US US14/250,621 patent/US9967187B2/en active Active
- 2014-04-11 US US14/250,833 patent/US10110492B2/en active Active
- 2014-04-11 CN CN201480027410.3A patent/CN105229980B/zh active Active
-
2018
- 2018-10-22 US US16/166,692 patent/US11102120B2/en active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6374326B1 (en) * | 1999-10-25 | 2002-04-16 | Cisco Technology, Inc. | Multiple bank CAM architecture and method for performing concurrent lookup operations |
US7069268B1 (en) * | 2003-01-13 | 2006-06-27 | Cisco Technology, Inc. | System and method for identifying data using parallel hashing |
US20060184556A1 (en) * | 2005-02-17 | 2006-08-17 | Sensory Networks, Inc. | Compression algorithm for generating compressed databases |
US20090274154A1 (en) * | 2006-04-26 | 2009-11-05 | Marvell Semiconductor Israel Ltd. | Double-hash lookup mechanism for searching addresses in a network device |
US20080147714A1 (en) * | 2006-12-19 | 2008-06-19 | Mauricio Breternitz | Efficient bloom filter |
US20090097654A1 (en) * | 2007-10-15 | 2009-04-16 | Steven Langley Blake | Method and system for performing exact match searches using multiple hash tables |
US20090232139A1 (en) * | 2008-03-11 | 2009-09-17 | James Madison Kelley | Multiple virtual local area network databases in a switch with a relational lookup engine |
CN102609509A (zh) * | 2010-04-26 | 2012-07-25 | 华为技术有限公司 | 哈希数据处理方法和装置 |
CN103238145A (zh) * | 2010-12-03 | 2013-08-07 | 华为技术有限公司 | 用于网络装备中的高性能、可更新和确定的哈希表的方法和设备 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110383319A (zh) * | 2017-01-31 | 2019-10-25 | 益百利信息解决方案公司 | 大规模异构数据摄取和用户解析 |
CN109344222A (zh) * | 2018-09-12 | 2019-02-15 | 盛科网络(苏州)有限公司 | 一种高带宽tcam的查找与存储方法及装置 |
CN113519144A (zh) * | 2019-01-10 | 2021-10-19 | 马维尔以色列(M.I.S.L.)有限公司 | 用于网络设备的精确匹配和三元内容可寻址存储器(tcam)混合查找 |
CN113519144B (zh) * | 2019-01-10 | 2023-06-27 | 马维尔以色列(M.I.S.L.)有限公司 | 用于网络设备的精确匹配和三元内容可寻址存储器(tcam)混合查找 |
Also Published As
Publication number | Publication date |
---|---|
CN105229980B (zh) | 2018-11-16 |
US20190058661A1 (en) | 2019-02-21 |
US20140310307A1 (en) | 2014-10-16 |
WO2014167419A2 (en) | 2014-10-16 |
US11102120B2 (en) | 2021-08-24 |
US20140307737A1 (en) | 2014-10-16 |
US10110492B2 (en) | 2018-10-23 |
WO2014167419A3 (en) | 2015-03-26 |
US9967187B2 (en) | 2018-05-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105229980A (zh) | 利用可变关键字大小的精确匹配查找 | |
CN105704041B (zh) | 用于ccn路由的方法、***、和存储介质 | |
US10230643B2 (en) | Full flow retrieval optimized packet capture | |
US11182365B2 (en) | Systems and methods for distributed storage of data across multiple hash tables | |
US20160048585A1 (en) | Bloom filter with memory element | |
US10621080B2 (en) | Pipelined hash table with reduced collisions | |
CN104104604A (zh) | 网络交换机设备中的准确匹配哈希查找数据库 | |
US20130246697A1 (en) | Organizing Data in a Hybrid Memory for Search Operations | |
AU2016230539B2 (en) | Retrieval device, retrieval method, program, and recording medium | |
CN102420771B (zh) | 高速网络环境中提高tcp并发连接速度的方法 | |
US9485179B2 (en) | Apparatus and method for scalable and flexible table search in a network switch | |
US20140358886A1 (en) | Internal search engines architecture | |
WO2014047863A1 (en) | Generating a shape graph for a routing table | |
CN103077208A (zh) | 统一资源定位符匹配处理方法及装置 | |
US20170012874A1 (en) | Software router and methods for looking up routing table and for updating routing entry of the software router | |
CN103842990B (zh) | 基于索引的虚拟寻址的方法和设备 | |
CN105721627B (zh) | 一种ip网络流数据在线匿名化方法 | |
US20090171651A1 (en) | Sdram-based tcam emulator for implementing multiway branch capabilities in an xml processor | |
CN104657383A (zh) | 一种基于关联特性的重复视频检测方法与*** | |
Li et al. | Deterministic and efficient hash table lookup using discriminated vectors | |
CN109525503B (zh) | 一种压缩方法及装置、计算机可读存储介质 | |
CN108984780B (zh) | 基于支持重复键值树数据结构管理磁盘数据的方法和装置 | |
US9747226B2 (en) | Packet processing system, method and device to optimize packet buffer space | |
US10146820B2 (en) | Systems and methods to access memory locations in exact match keyed lookup tables using auxiliary keys | |
CN102194002B (zh) | 哈希表的表项添加、删除、查找方法及哈希表存储装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |