CN110301120B - 流分类装置、方法和*** - Google Patents
流分类装置、方法和*** Download PDFInfo
- Publication number
- CN110301120B CN110301120B CN201780077572.1A CN201780077572A CN110301120B CN 110301120 B CN110301120 B CN 110301120B CN 201780077572 A CN201780077572 A CN 201780077572A CN 110301120 B CN110301120 B CN 110301120B
- Authority
- CN
- China
- Prior art keywords
- hash table
- flow classification
- rules
- sub
- key
- 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.)
- Active
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
-
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/24—Traffic characterised by specific attributes, e.g. priority or QoS
- H04L47/2441—Traffic characterised by specific attributes, e.g. priority or QoS relying on flow classification, e.g. using integrated services [IntServ]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/09—Mapping addresses
- H04L61/10—Mapping addresses of different types
-
- 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/02—Topology update or discovery
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/50—Address allocation
- H04L61/5046—Resolving address allocation conflicts; Testing of addresses
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本文中描述了用于使用cuckoo散列表和未掩蔽分组报头来基于元组空间搜索的流分类的装置、方法和***。设备可以与一个或多个硬件交换机通信。该设备可以包括用于存储散列表的散列表条目的存储器。该设备可以包括用于在散列表中执行散列查找的处理电路。该查找可以基于包括在对应于接收到的数据分组的分组报头中的未掩蔽关键码。处理电路可以检索指向子表的索引,该子表包括用于处置数据分组的规则的集合。还描述了其他实施例。
Description
优先权的要求
本专利申请要求2017年6月29日提交的美国申请序列号15/638,102的优先权的权益,该申请要求于2017年1月16日提交的美国临时专利申请序列号62/446,656的优先权,所述申请通过引用以它们的全文被并入本文中。
技术领域
本文中描述的实施例一般地涉及对通过网络发送或接收的数据分组的处理。一些实施例涉及流分类。
背景技术
数据中心和电信网络两者中出现的网络趋势对流分类提出了增加的性能要求,这形成了许多软件分组处理工作负载的一部分。因此,正在进行的努力旨在提高流分类的速度。
附图说明
在不一定按比例绘制的附图中,相同的标号可以在不同视图中描述类似的部件。具有不同字母后缀的相同标号可以表示类似部件的不同实例。附图一般通过示例而不是通过限制图示在本文档中所讨论的各种实施例。
图1图示了针对具有通配符支持的流分类的元组空间搜索(TSS)。
图2图示了根据一些实施例的双散列函数、四路cuckoo散列表。
图3图示了根据一些实施例的cuckoo分布器(CD)方案作为针对TSS的第一级查找的使用。
图4图示了根据一些实施例的条目格式。
图5图示了根据一些实施例的示例方法。
图6是根据一些实施例的装置的框图。
具体实施方式
路由器是数据中心中用于将数据分组路由到它们的目的地的分组处理节点,并且分组分类是将数据分组分类为流的过程。实施例的上下文中的路由器还可以包括诸如交换机和防火墙之类的设备。由路由器根据规则以类似的方式处理属于相同流的所有分组。分组分类解决了从可以被应用于特定数据分组的规则的集合中确定最高优先级规则的技术问题,其中每个匹配规则指定对由分组字段的组合标识的分组的集合采取的期望动作。除了其他用途之外,分组分类技术还可以被应用于实现服务质量(QoS)策略、网络监视和流量分析。
除了其他应用之外,一些数据中心还使用架顶式(top-of-rack)(ToR)交换机和特殊功能硬件来提供分组分类。然而,客户可能体验到由硬件限制(包括有限的存储器、有限的三元内容可寻址存储器(TCAM)、减少的数量的支持的数据流等)导致的减少的功能。此外,关于分组解析,硬件交换机可能是过于严格的,并且硬件交换机可能表现出通常缺乏平台灵活性和可配置性。
随着虚拟化的兴起,许多数据中心已经越来越多地利用软件定义联网(SDN)和网络功能虚拟化(NFV),这继而导致基于软件的可配置路由器和交换机的增加的使用。软件流分类通常被用于实现SDN的***中。除了其他可能性之外,软件流分类还可以包括基于树的方法,或者可以是基于散列表的。
针对具有通配符支持的流分类的元组空间搜索
基于散列表的方法的一个示例是元组空间搜索(TSS)。图1图示了针对具有通配符支持的流分类的元组空间搜索(TSS)。
在联网设备(例如,路由器,其在图1中未示出)的输入处接收分组报头100。在TSS中,规则(例如,Open Flow(开放流)规则、互联网协议(IP)版本4(IPv4)规则等)基于它们的通配符格式被划分为一系列子表102、104、106、108。例如,具有相同通配符位置的所有规则被放置在相同的子表102、104、106和108中。使用子表102作为示例,子表102中的所有规则在图示的字节的下半字节中具有通配符位置(在图1中由“xxxx”表示)。虽然仅图示了一个字节,但是将理解的是,规则可以具有任何数量的字节。
针对每个子表102、104、106、108提供或存储流掩码110、112、114、116,使得当根据流掩码110、112、114、116掩蔽分组报头100时,仅通配符比特之外的比特将被用于在相关子表102、104、106、108中搜索规则。然后,实现TSS的算法顺序地搜索所有子表(对于每个流掩码110、112、114、116),直到找到匹配为止。
例如,可以根据图1中示出的路径118继续搜索规则。给定分组报头100,首先使用流掩码110掩蔽分组报头100,并且然后搜索子表102的规则以得到与掩蔽的分组报头的匹配。如果在子表102中未找到规则,则可以将流掩码112应用于分组报头100,并且将在子表104内搜索与分组报头100相关的规则。该过程可以针对子表106、108中的每个继续,直到找到匹配或者存在未命中(例如,未找到匹配)。
每个子表102、104、106、108可以被实现为散列表。当接收到分组时,可以基于第一子表掩码(例如,流掩码110)形成子表关键码(key),以对相应子表102、104、106、108执行散列查找。
TSS是有用的,但可能是低效率的。多个子表102、104、106、108的顺序搜索可能导致显著的***处理开销。另外,创建子表关键码为基于TSS的过程提供了另外的开销,特别是当分组报头100是长的时。作为一个示例,在一些实现中,报头可以包括512个字节。此外,所使用的子表可能是存储器低效率的,这在尝试实现大规模存储或将查找表装入快速、昂贵的静态随机存取存储器(SRAM)时变得重要。
Cuckoo散列表
图2图示了根据一些实施例的双散列函数(例如,散列函数214、216)、四路cuckoo散列表200。Cuckoo散列是开放寻址的形式,其中散列表的每个非空单元包括关键码或关键码值对。但是,开放寻址受到冲突的影响,当多于一个关键码被映射到相同位置时可能发生冲突。cuckoo散列的基本思想是通过使用两个散列函数而不是仅一个散列函数来解决冲突。这为每个关键码在散列表中提供了两个可能的位置。Cuckoo散列可以在保证O(1)检索时间的情况下实现高存储效率(例如,在最坏的情况下,查找需要恒定的时间)。这与其他散列表算法形成对比,所述其他散列表算法可能没有针对执行查找所需时间的量的极限最坏情况场景。
如图2中示出的那样,并且与上面参考图1描述的散列相比,cuckoo散列通过散列(例如使用散列函数214、216)并将该条目存储在其位置202、204之一中,来将每个关键码(关键码x)映射到多个候选位置(202、204)。这些位置202、204可以被称为主位置和辅助位置。虽然示出了两个位置,但是也可以提供四个或更多个位置。
位置的组可以被称为桶(bucket)。例如,cuckoo散列表200可以包括至少两个桶(可视化为cuckoo散列表200的行)。可以针对存储器存储效率来配置桶中的位置的数量。在一些示例中,可以配置位置的数量,使得数据结构与高速缓存行对齐(例如,数据结构被高速缓存对齐)。在一些实施例中,每个桶与64字节的高速缓存行对齐,但是实施例不限于此。
散列表的每个非空单元(例如,单元206)包含关键码208或包括关键码208和值210的数据对。另外参考图1,关键码208可以包括完整流关键码而不应用任何流掩码(例如,流掩码110、112、114、116)。值210可以包括目标子表(例如,子表102、104、106、108)的指示符。
散列函数214、216可以被用于确定针对每个关键码的位置。***新条目(例如,关键码208或包括关键码208和值210的对)可以包括将已经在表内的现有条目重新定位(例如,移位)到表内的替代候选位置。为了帮助确保cuckoo散列表200的读取器正在获得关于cuckoo散列表200的写入器的一致数据,桶中的每个可以与版本计数器218相关联,使得读取器可以检测当它们正在使用桶中的一个时做出的任何改变。cuckoo散列表200的写入器可以在写入器通过将新的条目***到空位置中或者通过移位现有条目来修改桶中的任何一个时递增版本计数器218,如本文中稍后描述的那样。然后,读取器可以拍摄(一个或多个)版本计数器的快照,并在从桶中的任何一个读取之前和之后比较版本计数器218。以这种方式,读取器可以基于版本变化来检测读写冲突。为了减少存储器使用,每个版本计数器218可以由多个桶例如使用条带化(striping)来共享。其他实施例可以通过利用高级向量扩展(AVX)原子指令或TSX(事务存储器)来确保一致的数据,这减少了维护版本计数器的开销。
Cuckoo分配器
实施例提供了分层方法,以避免上面参考图1描述的TSS顺序子表查找。一些实施例提供低开销、节省空间(space-efficient)的cuckoo散列表状数据结构(例如,类似于cuckoo散列表200(图2)的散列表),其更快地将传入流搜索导向对应的子表。通过使用根据各种实施例的方法的数据结构,交换机或其他装置可以被配置成更快地确定要搜索哪个特定子表而不搜索其他子表并且不创建如本文中较早前关于基于TSS的方法描述的子表关键码。因此,交换机和其他装置可以更快地确定用于传入数据分组的分组处理规则,诸如流路由规则等。因此,提高了各种装置和***的操作效率。
图3图示了根据一些实施例的CD方案作为针对TSS的第一级查找的使用。示例方法可以使用这样的方案(例如,CD方案,尽管其他术语可以被用于描述类似的算法)作为第一级重定向表。根据各种实施例的方案可以采用与参考图2描述的cuckoo散列表200的数据结构类似(或更简单)的数据结构。
现在参考图3,接收分组(具有分组报头100)(例如,在交换机接口604(图6)处)并将其提供给CD 300。根据各种实施例的处理电路(例如,处理电路620(图6))将使用未掩蔽的完整关键码在CD 300中执行快速散列查找(以便避免形成掩蔽关键码)以检索指向包括用于处理相应流的规则的子表(例如,子表312)的值。在一些实施例中,未掩蔽的完整关键码将包括原始流关键码。在一些实施例中,在子表308、310、312中搜索之前,CD 300的输出值将被掩码302、304、306中的一个掩蔽。因此,各种方法实施例可以避免搜索多个子表(例如,其他子表308、310)。因为CD 300是指向由分组处理规则组成的子表的第一级过滤器,所以在CD 300提供错误结果的情况下,标准顺序表搜索(例如,TSS)可以由根据各种实施例的装置和方法来实现。
图4图示了根据一些实施例的CD的条目格式。CD的每个条目400可以包括小指纹402(例如,小于完整分组报头100的大小)。例如,当由装置600接收到分组时,装置600的处理电路602可以将分组的签名与指纹402进行比较,以确定分组所属的合适的CD条目。每个条目400可以进一步包括老化(aging)字段404以及索引406,所述老化字段404促进不活跃的(例如,“陈旧的(stale)”)流的逐出。索引406可以包括用于标识子表(例如,子表308、310、312)的指示符,其中将找到针对对应分组的规则。在一些实施例中,每个条目由四个字节组成,其中两个字节用于指纹402,并且各自一个字节用于老化字段404和索引406。然而,实施例不限于条目400的任何特定大小或条目400中包括的字段的任何特定数量或标识。在至少这些实施例中,一个高速缓存行可以包括16个条目作为一个桶。AVX比较指令可以被用于并行比较16个条目。
根据一些实施例的示例方法可以包括学习阶段,其中CD 300最初填充有条目,并且在这期间TSS被用于针对传入分组报头学习子表索引等。例如,在接收到传入分组报头时,装置600的处理电路602可以使用TSS来发现哪个子表包含合适的规则。一旦已经针对第一分组报头学习了子表、规则或其他值,则将那些学习的值存储在例如CD 300中。然后,使用CD 300和根据一些实施例的方法可以更快地继续对具有与先前接收的分组报头相同或相似的报头的随后接收的数据分组的处理。
其他示例方法
除了上述查找操作之外,CD操作可以进一步包括***和逐出(例如,删除)操作。在网络中,新的分组流可能出现,并且旧的分组流可能变得不活跃。在存储和维护用于处理旧流的规则时,可能浪费计算资源。应该以降低的计算成本来执行新流的***和旧流的删除。
在当前cuckoo散列表实现中,当要***新关键码时,首先计算散列,并基于计算的散列值来标识潜在的桶或桶的集合。如果潜在的桶中的一个具有可用空间(例如,空条目),则将关键码放置在该桶中。
如果所有潜在的桶是满的,则将一个条目移动到替代桶以容纳新条目。这被称为关键码移位过程。该过程以相同的方式继续,直到找到空条目,形成完成***过程的“cuckoo路径”。一些***提供用于网络切换的该***过程的优化。然而,当桶占用率高时,在某些情况下,cuckoo路径可能是相当长的,并且因此,关键码移位过程可能是耗时的。在一些实施例中,为了保证快速***,将cuckoo路径的长度限制为零或一,以在对表占用率的最小影响的情况下提高***速度。在一些实施例中,cuckoo路径被设置为可配置的***参数。
在实施例的第一子集中,当存在碰撞时不允许关键码移位(例如,出于性能目的,因为关键码移位是相对慢的)。当多于一个流散列到相同桶(例如,cuckoo散列表200(图2)的行)中并且流包括相同指纹(例如,指纹402)时,冲突可能发生。在实施例的第二集合中,允许关键码移位一次。在实施例的第一集合中,这可以被视为cuckoo散列表的回归,其中使用两个散列函数(例如,一个关键码的两个位置)但是没有关键码替换。
当桶是满的且没有关键码可以被移位时,触发逐出以逐出旧的不活跃的流(或与旧的不活跃的流相关的关键码或其他值)以容纳新流。对于逐出,类似于CPU缓存,实现伪最近最少使用(LRU)策略。维护老化字段(例如,老化字段404(图4)),并且当***新流或访问现有流时,针对相应新流的老化被设置为最年轻的,而相同的桶中的所有其他条目将老化1。在需要时,将逐出具有最老的老化的条目。根据一些实施例,逐出在其被需要时按需发生,而不是周期性地发生,因为周期性逐出可能引起对不同高速缓存行的许多读取和存储操作,从而导致高开销。
在一些实施例中,任何关键码仅允许移位一次。在将关键码从主桶移动到辅助桶之后设置标志位。在其他实施例中,选择两个桶中的一个用于***,并且在***之后关键码不移位,类似于由来自美国Maryland的Forest Hill的Apache®软件基金会的OpenvSwitch(OvS®)使用的Exact Match Cache(精确匹配高速缓存)(EMC)设计。这些实施例可以通过避免一长串的关键码移位操作来提供更快的***速度。另外,这些实施例不涉及重复的关键码移位,并且因此不需要在表中存储关键码或其替代签名来一次又一次地计算关键码的替代桶。在任何情况下,在一些实施例中,高速缓存设计可以提供宽的16路关联,这有助于防止散列冲突,并且因此占用率和性能不受限制关键码移位长度的影响。在冲突确实发生并且检索到错误的子表索引的情况下,一些实施例可以回退到如可以在图1中使用的标准TSS的使用。
图5图示了根据一些实施例的示例方法500。示例方法500可以利用上述表、方法和散列算法中的任何表、方法和散列算法。
示例方法500可以在操作502处以设备(例如,装置600(图6))接收数据分组开始。如上所述,数据分组可以包括分组报头。示例方法500可以继续操作504,其中装置600使用分组报头中包括的未掩蔽的关键码来从散列表检索指向子表的索引。如上面关于图1描述的那样,子表可以包括用于处置相应数据分组的规则的集合。示例方法500可以在操作506中继续,其中装置600转发数据分组以基于该规则进行处置。
在实施例中,如上面关于图2和3描述的那样,散列表可以包括cuckoo散列表。散列表可以包括与上面在图4中图示的那些条目类似或相同的条目,例如,散列表可以包括用于指示相应散列表条目的老化的字段,并且散列表条目可以包括由分组报头的子集组成的指纹。示例方法500可以包括如本文中较早前描述的逐出、删除和关键码***过程。例如,方法500可以包括基于散列表的相应散列表条目的老化条目根据LRU策略从散列表逐出条目。示例方法500可以进一步包括检测到未从子表检索到规则,并且响应于该检测,在多个子表上实现TSS。
示例装置
图6图示了根据一些实施例的用于执行方法的装置600的部件(例如,控制设备、网络接口控制器(NIC)或主机结构互连(HFI))。实施例的图示仅呈现了理解所描绘的实施例所必需的那些部件,使得其他部件是可预见的,并且可以被添加而不背离本文中的教导。
装置600可以包括交换机接口604,用于与一个或多个硬件交换机(图6中未示出)通信,以接收多个数据分组。然而,将理解的是,应该为任何种类的流分类提供接口。例如,可以为需要流分类的任何联网设备(例如,防火墙、路由器、交换机等)提供流分类。设备600可以包括存储器606,用于存储散列表的散列表条目(例如,多个散列表条目)。条目可以类似于图4中示出的结构来配置。例如,条目可以包括用于指示相应散列表条目的老化的字段。散列表可以包括如本文中较早前描述的cuckoo散列表。散列表条目可以包括指纹,所述指纹由相应数据分组的分组报头(包括例如分组标识信息)的两个字节组成。
当交换机接口604接收分组并使用例如直接存储器访问(DMA)将它们推入接收(RX)队列605中时,分组处理可以继续。为了在一个核/多个核(例如,一个处理核/多个处理核622)上均匀地分布分组处理的负载,处理电路620可以使用接收侧缩放(RSS)。
该装置可以包括处理电路620。处理电路620可以基于包括在对应于多个数据分组中的数据分组的分组报头中的未掩蔽关键码,在散列表中执行散列查找,以检索指向子表的索引,如本文中较早前参考图3描述的那样。子表可以包括用于处置相应数据分组的规则的集合。处理电路620可以转发(例如,到一个处理核/多个处理核622或其他元件)相应的数据分组以基于规则的集合中的规则进行处置。处理电路620可以基于散列表的相应散列表条目的老化条目根据LRU策略从散列表逐出条目。处理电路620可以响应于检测到针对不合适的子表检索到索引而实现TSS。该检测可以基于来自一个处理核/多个处理核622的错误消息或其他指示符。
术语“模块”被理解为包含有形实体,该实体是被物理构建、具体配置(例如硬连线)或临时(例如暂时地)配置(例如编程)成以指定方式操作或执行本文中描述的任何操作的至少部分的实体。考虑其中模块被临时配置的示例,模块不需要在时间上的任何一个时刻被实例化。例如,其中模块包括使用软件配置的通用硬件处理器;通用硬件处理器可以在不同时间被配置为相应的不同模块。软件可以相应地配置硬件处理器,例如,以在一个时刻构成特定模块,并且在不同的时刻构成不同的模块。术语“应用”或其变型在本文中被广泛地使用以包括例程、程序模块、程序、部件以及诸如此类,并且可以在各种***配置上实现,所述***配置包括单处理器或多处理器***、基于微处理器的电子设备、单核或多核***、其组合以及诸如此类。因此,术语应用可以被用来指代软件的实施例或者被布置成执行本文中描述的任何操作的至少部分的硬件。
虽然机器可读介质可以包括单个介质,但是术语“机器可读介质”可以包括单个介质或多个介质(例如,集中式或分布式数据库和/或相关联的高速缓存和服务器)。
术语“机器可读介质”可以包括下述任何介质:该介质能够存储、编码或携带用于由机器执行的指令并且使得机器执行本公开的技术中的任何一个或多个技术,或者能够存储、编码或携带由这样的指令使用或者与这样的指令相关联的数据结构。换言之,处理电路620(图6)可以包括指令624,并且因此可以在各种实施例的上下文中被称为机器可读介质。其他非限制性机器可读介质示例可以包括固态存储器以及光学和磁性介质。机器可读介质的具体示例可以包括:非暂时性机器可读介质或非易失性存储器,诸如半导体存储器设备(例如,电可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM))以及闪存设备;磁盘,诸如内部硬盘和可移动磁盘;磁光盘;以及CD-ROM和DVD-ROM盘。
指令624可以进一步使用传输介质通过通信网络传输或接收,所述传输介质利用多种传输协议中的任何一种(例如,帧中继、IP、TCP、用户数据报协议(UDP)、超文本传输协议(HTTP)等)。示例通信网络可以包括局域网(LAN)、广域网(WAN)、分组数据网络(例如因特网)、移动电话网络(例如,包括码分多址(CDMA)、时分多址(TDMA)、频分多址(FDMA)和正交频分多址(OFDMA)的信道接入方法,以及诸如全球移动通信***(GSM)、通用移动电信***(UMTS)、CDMA 2000 1x*标准和长期演进(LTE)的蜂窝网络)、普通老式电话(POTS)网络和无线数据网络(例如,电气和电子工程师协会(IEEE)802标准的系列,包括IEEE 802.11标准(WiFi)、IEEE 802.16标准(WiMax®)和其他)、对等(P2P)网络或现在已知或以后开发的其他协议。
术语“传输介质”应被理解为包括能够存储、编码或携带用于由硬件处理电路执行的指令的任何无形介质,并且包括数字或模拟通信信号或其他无形介质,以促进这样的软件的通信。
示例和注释
可以通过若干示例来描述本主题。
示例1包括主题(诸如设备、计算机、处理器、计算电路等),其包括:交换机接口,用于接收数据分组,所述数据分组包括分组报头;以及处理电路,其被配置成:使用分组报头中包括的未掩蔽关键码来从散列表检索指向子表的索引,所述子表包括用于处置数据分组的规则的集合;以及转发相应的数据分组以基于所述规则的集合中的规则进行处置。
在示例2中,示例1的主题可以可选地包括存储器,用于存储散列表的多个散列表条目。
在示例3中,示例2的主题可以可选地包括:其中,存储器包括静态随机存取存储器(SRAM)。
在示例4中,示例1-3中的任一项的主题可以可选地包括:其中,散列表包括cuckoo散列表。
在示例5中,示例4的主题可以可选地包括:其中,cuckoo散列表包括四路cuckoo散列表。
在示例6中,示例2-5中的任一项的主题可以可选地包括:其中,包括在多个散列表条目中的散列表条目包括用于指示散列表条目的老化的字段。
在示例7中,示例1-6中的任一项的主题可以可选地包括:其中,散列表条目包括指纹,所述指纹包括分组报头的子集。
在示例8中,示例7的主题可以可选地包括:其中,指纹包括索引。
在示例9中,示例7的主题可以可选地包括:其中,指纹包括用于指示散列表条目的老化的老化字段。
在示例10中,示例1-9中的任一项的主题可以可选地包括:其中,处理电路被配置成基于散列表的散列表条目的老化条目根据最近最少使用(LRU)策略从散列表逐出条目。
在示例11中,示例1-10中的任一项的主题可以可选地包括:其中,处理电路被进一步配置成响应于检测到未从子表检索到规则的集合中的规则而实现元组空间搜索(TSS)。
在示例12中,示例1-11中的任一项的主题可以可选地包括:其中,散列表包括条目的至少两个桶,并且其中每个桶包括高速缓存对齐的数据结构。
在示例13中,示例12的主题可以可选地包括:其中,每个桶与64字节的高速缓存行对齐。
在示例14中,示例1-13中的任一项的主题可以可选地包括:其中,规则的集合包括Open Flow规则和IPv4规则中的至少一个。
在示例15中,一种方法可以由设备(例如,计算机、处理器、路由器、硬件交换机、结构接口部件、网络接口卡、网络节点等)执行用于转发分组以进行处理。所述方法可以包括:在路由器处接收数据分组,所述数据分组包括分组报头;使用分组报头中包括的关键码来从散列表检索指向子表的索引,所述子表包括用于处置数据分组的规则的集合;以及由路由器向处理器核转发相应的数据分组以基于所述规则的集合中的规则进行处置。
在示例16中,示例15的主题可以可选地包括:其中,散列表包括四路cuckoo散列表。
在示例17中,示例15-16中的任一项的主题可以可选地包括:其中,关键码是未掩蔽的,并且四路cuckoo散列表中的散列表条目包括用于指示散列表条目的老化的字段。
在示例18中,示例15-17中的任一项的主题可以可选地包括:将关键码***到散列表中。
在示例19中,示例18的主题可以可选地包括:其中,***包括替换已经位于关键码的期望条目中的另一个关键码。
在示例20中,示例15-19中的任一项的主题可以可选地包括:在***关键码之后更新版本计数器。
在示例21中,示例15-20中的任一项的主题可以可选地包括:使用事务存储器指令来***关键码。
在示例22中,示例17的主题可以可选地包括:其中,散列表条目包括指纹,所述指纹包括分组报头的子集。
在示例23中,示例22的主题可以可选地包括:其中,指纹包括两个字节,并且其中指纹指示数据分组的标识信息。
在示例24中,示例15-23中的任一项的主题可以可选地包括:基于散列表的散列表条目的老化条目根据最近最少使用(LRU)策略从散列表逐出条目。
在示例25中,示例15-24中的任一项的主题可以可选地包括:检测到未从子表检索到规则的集合中的规则;以及响应于所述检测,在多个子表上实现元组空间搜索(TSS)。
在示例26中,一种非暂时性机器可读介质存储用于由机器(例如,计算机、处理器、网络节点、路由器、结构接口等)执行的指令,以使得机器执行操作,所述操作包括以下步骤:接收数据分组,所述数据分组包括分组报头;使用分组报头中包括的未掩蔽关键码来从散列表检索指向子表的索引,所述子表包括用于处置数据分组的规则的集合;以及转发数据分组以基于所述规则的集合中的规则进行处置。
在示例27中,示例26的主题可以可选地包括:其中,散列表包括cuckoo散列表。
在示例28中,示例27的主题可以可选地包括:其中,cuckoo散列表的散列表条目包括用于指示散列表条目的老化的字段。
在示例29中,示例27的主题可以可选地包括:基于cuckoo散列表的散列表条目的老化条目根据最近最少使用(LRU)策略从散列表逐出条目的操作。
在示例30中,示例27的主题可以可选地包括:其中,散列表条目包括指纹,所述指纹由分组报头的子集组成。
在示例31中,一种装置(例如,计算机、处理器、网络节点、硬件交换机、结构接口或其他设备等)可以包括:用于与一个或多个硬件交换机通信以接收数据分组的装置,所述数据分组包括分组报头;用于使用分组报头中包括的未掩蔽关键码来从四路cuckoo散列表检索指向子表的索引的装置,所述子表包括用于处置相应的数据分组的规则的集合;以及转发相应的数据分组以基于所述规则的集合中的规则进行处置的装置。
在示例32中,示例31的主题可以可选地包括用于存储散列表的多个散列表条目的装置,其中散列表包括cuckoo散列表,并且其中散列表包括条目的至少两个桶,其中每个装配架与64字节的高速缓存行对齐。
在示例33中,权利要求31-32中的任一项的主题可以可选地包括用于基于散列表的散列表条目的老化条目根据最近最少使用(LRU)策略从散列表逐出条目的装置。
在示例34中,权利要求31-33中的任一项的主题可以可选地包括用于响应于检测到未从子表检索到规则的集合中的规则而实现元组空间搜索(TSS)的装置。
上面的详细描述包括对形成该详细描述的一部分的附图的参考。附图通过图示示出了可以实施的具体实施例。这些实施例在本文中还被称为“示例”。这样的示例可以包括除了所示出或描述的那些元件之外的元件。然而,还考虑了包括所示出或描述的元件的示例。此外,还考虑了使用关于特定示例(或其一个或多个方面)或者关于本文中所示出或描述的其他示例(或其一个或多个方面)示出或描述的那些元件(或其一个或多个方面)的任何组合或排列的示例。
本文档中提及的出版物、专利和专利文档通过引用以它们的全文被并入本文中,如同通过引用单独并入一样。在本文档与通过引用如此并入的那些文档之间的用法不一致的情况下,在并入的(一个或多个)参考文献中的用法是对本文档的用法的补充;对于不可调和的不一致性,本文档中的用法支配。
在本文档中,使用如在专利文档中常见的术语“一”或“一个”来包括一个或多于一个,而独立于“至少一个”或“一个或多个”的任何其他实例或用法。在本文档中,术语“或者”被用于指代非排他性的或者,使得“A或者B”包括“A但不是B”、“B但不是A”以及“A和B”,除非另外指示。在所附权利要求中,术语“包括”和“在其中”被用作相应术语“包含”和“其中”的简明英语等同物。此外,在以下的权利要求中,术语“包括”和“包含”是开放式的,即包括除了在权利要求中的这样的术语之后列出的那些元件之外的元件的***、设备、物品或过程仍然被视为落入该权利要求的范围内。此外,在以下的权利要求中,术语“第一”、“第二”和“第三”等仅被用作标签,并且不旨在暗示针对它们的对象的数字顺序。
以上描述旨在是说明性的,而不是限制性的。例如,可以与其他示例组合地使用上面所描述的示例(或其一个或多个方面)。可以诸如由本领域普通技术人员在审阅以上描述时使用其他实施例。摘要是为了允许读者快速查明本技术公开的本质,并且在理解其将不被用来解释或限制权利要求的范围或含义的情况下被提交。此外,在以上具体实施方式中,各种特征可以被组合在一起以简化本公开。然而,权利要求可能没有阐述本文中公开的特征,因为实施例可以包括所述特征的子集。此外,实施例可以包括比特定示例中公开的那些特征更少的特征。因此,以下权利要求由此被并入到具体实施方式中,其中权利要求作为单独的实施例而独立存在。本文中公开的实施例的范围将参考所附权利要求连同这样的权利要求所赋予的等同物的全部范围来确定。
Claims (25)
1.一种流分类装置,包括:
交换机接口,用于接收数据分组,所述数据分组包括分组报头;以及
处理电路,其被配置成:
使用分组报头中包括的未掩蔽关键码来从散列表检索指向子表的索引,所述子表包括用于处置数据分组的规则的集合;
搜索由所述索引指示的所述子表以检索所述规则的集合中的规则;以及
转发相应的数据分组以基于所述规则的集合中的所述规则进行处置。
2.如权利要求1所述的流分类装置,进一步包括存储器,用于存储散列表的多个散列表条目。
3.如权利要求2所述的流分类装置,其中,存储器包括静态随机存取存储器SRAM。
4.如权利要求1-3中的任一项所述的装置,其中,散列表包括cuckoo散列表。
5.如权利要求4所述的流分类装置,其中,cuckoo散列表包括四路cuckoo散列表。
6.如权利要求2-5中的任一项所述的装置,其中,包括在多个散列表条目中的散列表条目包括用于指示散列表条目的老化的字段。
7.如权利要求1-6中的任一项所述的流分类装置,其中,散列表条目包括指纹,所述指纹包括分组报头的子集。
8.如权利要求7所述的流分类装置,其中,指纹包括索引。
9.如权利要求7所述的流分类装置,其中,指纹包括用于指示散列表条目的老化的老化字段。
10.如权利要求1-9中的任一项所述的流分类装置,其中,处理电路被配置成基于散列表的散列表条目的老化条目根据最近最少使用LRU策略从散列表逐出条目。
11.如权利要求1-10中的任一项所述的流分类装置,其中,处理电路被进一步配置成响应于检测到未从子表检索到规则的集合中的规则而实现元组空间搜索TSS。
12.如权利要求1-11中的任一项所述的流分类装置,其中,散列表包括条目的至少两个桶,并且其中每个桶包括高速缓存对齐的数据结构。
13.如权利要求12所述的流分类装置,其中,每个桶与64字节的高速缓存行对齐。
14.如权利要求1-13中的任一项所述的流分类装置,其中,规则的集合包括Open Flow规则和IPv4规则中的至少一个。
15.一种流分类方法,包括:
在路由器处接收数据分组,所述数据分组包括分组报头;
使用分组报头中包括的关键码来从散列表检索指向子表的索引,所述子表包括用于处置数据分组的规则的集合;
搜索由所述索引指示的所述子表以检索所述规则的集合中的规则;以及
由路由器向处理器核转发相应的数据分组以基于所述规则的集合中的所述规则进行处置。
16.如权利要求15所述的流分类方法,其中,散列表包括四路cuckoo散列表。
17.如权利要求15-16中的任一项所述的流分类方法,其中,关键码是未掩蔽的,并且四路cuckoo散列表中的散列表条目包括用于指示散列表条目的老化的字段。
18.如权利要求15-17中的任一项所述的流分类方法,进一步包括:
将关键码***到散列表中。
19.如权利要求18所述的流分类方法,其中,***包括替换已经位于关键码的期望条目中的另一个关键码。
20.如权利要求15-19中的任一项所述的流分类方法,进一步包括在***关键码之后更新版本计数器。
21.如权利要求15-20中的任一项所述的流分类方法,进一步包括使用事务存储器指令来***关键码。
22.如权利要求17所述的流分类方法,其中,散列表条目包括指纹,所述指纹包括分组报头的子集。
23.如权利要求22所述的流分类方法,其中,指纹包括两个字节,并且其中指纹指示数据分组的标识信息。
24.如权利要求15-23中的任一项所述的流分类方法,进一步包括:
基于散列表的散列表条目的老化条目根据最近最少使用LRU策略从散列表逐出条目。
25.一种包括指令的非暂时性机器可读介质,当在处理电路上实现时,所述指令使得处理电路执行权利要求15-24中的任一项所述的方法。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201762446656P | 2017-01-16 | 2017-01-16 | |
US62/446656 | 2017-01-16 | ||
US15/638,102 US11088951B2 (en) | 2017-01-16 | 2017-06-29 | Flow classification apparatus, methods, and systems |
US15/638102 | 2017-06-29 | ||
PCT/US2017/064235 WO2018132196A1 (en) | 2017-01-16 | 2017-12-01 | Flow classification apparatus, methods, and systems |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110301120A CN110301120A (zh) | 2019-10-01 |
CN110301120B true CN110301120B (zh) | 2023-10-10 |
Family
ID=62840273
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780077572.1A Active CN110301120B (zh) | 2017-01-16 | 2017-12-01 | 流分类装置、方法和*** |
Country Status (3)
Country | Link |
---|---|
US (2) | US11088951B2 (zh) |
CN (1) | CN110301120B (zh) |
WO (1) | WO2018132196A1 (zh) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10250530B2 (en) | 2016-03-08 | 2019-04-02 | Mellanox Technologies Tlv Ltd. | Flexible buffer allocation in a network switch |
US10205683B2 (en) | 2016-03-28 | 2019-02-12 | Mellanox Technologies Tlv Ltd. | Optimizing buffer allocation for network flow control |
US10387074B2 (en) | 2016-05-23 | 2019-08-20 | Mellanox Technologies Tlv Ltd. | Efficient use of buffer space in a network switch |
US10601714B2 (en) | 2016-06-28 | 2020-03-24 | Mellanox Technologies Tlv Ltd. | Adaptive flow prioritization |
US10389646B2 (en) | 2017-02-15 | 2019-08-20 | Mellanox Technologies Tlv Ltd. | Evading congestion spreading for victim flows |
US10645033B2 (en) * | 2017-03-27 | 2020-05-05 | Mellanox Technologies Tlv Ltd. | Buffer optimization in modular switches |
CN109802892A (zh) * | 2017-11-17 | 2019-05-24 | 英业达科技有限公司 | 比对流量表的方法及交换器 |
US11310158B2 (en) * | 2017-12-08 | 2022-04-19 | Corsa Technology Inc. | Packet classification using fingerprint hash table |
US20190207853A1 (en) * | 2019-03-07 | 2019-07-04 | Intel Corporation | Selection of inputs for lookup operations |
US10721186B1 (en) * | 2019-03-30 | 2020-07-21 | Fortinet, Inc. | Packet processing with per-CPU (central processing unit) flow tables in a network device |
CN110022370A (zh) * | 2019-04-12 | 2019-07-16 | 浙江中烟工业有限责任公司 | 一种基于对象句柄的可信协议栈实现方法 |
CN111817978B (zh) | 2019-04-12 | 2022-10-04 | 华为技术有限公司 | 一种流分类方法及装置 |
US11005770B2 (en) | 2019-06-16 | 2021-05-11 | Mellanox Technologies Tlv Ltd. | Listing congestion notification packet generation by switch |
US10999221B2 (en) | 2019-07-02 | 2021-05-04 | Mellanox Technologies Tlv Ltd. | Transaction based scheduling |
US11470010B2 (en) | 2020-02-06 | 2022-10-11 | Mellanox Technologies, Ltd. | Head-of-queue blocking for multiple lossless queues |
CN112152939B (zh) * | 2020-09-24 | 2022-05-17 | 宁波大学 | 一种抑制非响应流和服务区分的双队列缓存管理方法 |
CN113360516B (zh) * | 2021-08-11 | 2021-11-26 | 成都信息工程大学 | 集合成员管理方法 |
US11888747B2 (en) * | 2022-01-12 | 2024-01-30 | VMware LLC | Probabilistic filters for use in network forwarding and services |
US11973696B2 (en) | 2022-01-31 | 2024-04-30 | Mellanox Technologies, Ltd. | Allocation of shared reserve memory to queues in a network device |
US12028254B2 (en) * | 2022-01-31 | 2024-07-02 | Avago Technologies International Sales Pte. Limited | Systems for and methods of flow table management |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101937448A (zh) * | 2009-06-28 | 2011-01-05 | Sap股份公司 | 用于主存储器列存储装置的基于字典的保持顺序的串压缩 |
CN104504038A (zh) * | 2014-12-15 | 2015-04-08 | 北京更快互联网技术有限公司 | 一种减少哈希冲突的哈希查找方法 |
Family Cites Families (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB9810841D0 (en) * | 1998-05-21 | 1998-07-22 | 3Com Technologies Ltd | Organisation of data bases in network switches for packet-based data communication networks |
TW498650B (en) * | 2000-03-22 | 2002-08-11 | Ind Tech Res Inst | Flexible and highly efficient packet classification method |
US7068652B2 (en) | 2001-03-07 | 2006-06-27 | Broadcom Corporation | Pointer based binary search engine and method for use in network devices |
US6990102B1 (en) | 2001-05-10 | 2006-01-24 | Advanced Micro Devices, Inc. | Parallel lookup tables for locating information in a packet switched network |
US7394809B2 (en) * | 2003-03-31 | 2008-07-01 | Intel Corporation | Method and apparatus for packet classification using a forest of hash tables data structure |
US20070201458A1 (en) * | 2006-02-28 | 2007-08-30 | Thron Chris P | System and method for implementing ACLs using multiple hash-trie-key tables |
US20110276744A1 (en) | 2010-05-05 | 2011-11-10 | Microsoft Corporation | Flash memory cache including for use with persistent key-value store |
US10558705B2 (en) | 2010-10-20 | 2020-02-11 | Microsoft Technology Licensing, Llc | Low RAM space, high-throughput persistent key-value store using secondary memory |
US9479383B2 (en) * | 2011-07-12 | 2016-10-25 | Hughes Network Systems, Llc | Data compression for priority based data traffic, on an aggregate traffic level, in a multi stream communications system |
US9330054B2 (en) | 2012-10-31 | 2016-05-03 | Freescale Semiconductor, Inc. | System and method for assigning a message |
US9223711B2 (en) * | 2013-08-13 | 2015-12-29 | Netspeed Systems | Combining associativity and cuckoo hashing |
US9680738B2 (en) | 2013-09-15 | 2017-06-13 | Nicira, Inc. | Tracking prefixes of values associated with different rules to generate flows |
US9509809B2 (en) * | 2014-02-25 | 2016-11-29 | Alcatel-Lucent Usa Inc. | Packet classification using multiple processing units |
US9769290B2 (en) * | 2014-05-23 | 2017-09-19 | Intel Corporation | Packet flow classification |
US9921773B2 (en) * | 2014-06-18 | 2018-03-20 | Citrix Systems, Inc. | Range-based data deduplication using a hash table with entries replaced based on address alignment information |
US9866479B2 (en) | 2015-02-12 | 2018-01-09 | Intel Corporation | Technologies for concurrency of cuckoo hashing flow lookup |
US9984144B2 (en) | 2015-08-17 | 2018-05-29 | Mellanox Technologies Tlv Ltd. | Efficient lookup of TCAM-like rules in RAM |
US10049126B2 (en) * | 2015-09-06 | 2018-08-14 | Mellanox Technologies Tlv Ltd. | Cuckoo hashing with selectable hash |
US10318587B1 (en) * | 2015-09-20 | 2019-06-11 | Barefoot Networks, Inc. | Algorithmic TCAM based ternary lookup |
US9912788B2 (en) * | 2015-11-10 | 2018-03-06 | Telefonaktiebolaget L M Ericsson (Publ) | Systems and methods of an enhanced state-aware proxy device |
US10068034B2 (en) * | 2016-09-07 | 2018-09-04 | Mellanox Technologies Tlv Ltd. | Efficient matching of TCAM rules using hash tables in RAM |
-
2017
- 2017-06-29 US US15/638,102 patent/US11088951B2/en active Active
- 2017-12-01 WO PCT/US2017/064235 patent/WO2018132196A1/en active Application Filing
- 2017-12-01 CN CN201780077572.1A patent/CN110301120B/zh active Active
-
2021
- 2021-08-06 US US17/396,553 patent/US11811660B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101937448A (zh) * | 2009-06-28 | 2011-01-05 | Sap股份公司 | 用于主存储器列存储装置的基于字典的保持顺序的串压缩 |
CN104504038A (zh) * | 2014-12-15 | 2015-04-08 | 北京更快互联网技术有限公司 | 一种减少哈希冲突的哈希查找方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110301120A (zh) | 2019-10-01 |
US20180205653A1 (en) | 2018-07-19 |
WO2018132196A1 (en) | 2018-07-19 |
US20210367887A1 (en) | 2021-11-25 |
US11088951B2 (en) | 2021-08-10 |
US11811660B2 (en) | 2023-11-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110301120B (zh) | 流分类装置、方法和*** | |
CN109921996B (zh) | 一种高性能的OpenFlow虚拟流表查找方法 | |
CN108337172B (zh) | 大规模OpenFlow流表加速查找方法 | |
US9871728B2 (en) | Exact match hash lookup databases in network switch devices | |
US8627448B2 (en) | Selective invalidation of packet filtering results | |
US8898204B1 (en) | System and method for controlling updates of a data structure | |
US8750144B1 (en) | System and method for reducing required memory updates | |
CN107800631B (zh) | 使用ram中的散列表的tcam规则的有效匹配的方法和装置 | |
US7411957B2 (en) | Hardware filtering support for denial-of-service attacks | |
CN107528783B (zh) | 利用对前缀长度进行两个搜索阶段的ip路由缓存 | |
US8762362B1 (en) | System and method for updating a data structure | |
CN111937360B (zh) | 最长前缀匹配 | |
US20050171937A1 (en) | Memory efficient hashing algorithm | |
US10397116B1 (en) | Access control based on range-matching | |
CN110557335B (zh) | 三态内容寻址存储器tcam表项处理方法及装置 | |
US11652744B1 (en) | Multi-stage prefix matching enhancements | |
US10616113B2 (en) | Longest prefix match using a binary search tree with compressed hash tables | |
US11516133B2 (en) | Flow cache management | |
US10289384B2 (en) | Methods, systems, and computer readable media for processing data containing type-length-value (TLV) elements | |
US10901897B2 (en) | Method and apparatus for search engine cache | |
US9152661B1 (en) | System and method for searching a data structure | |
US20170012874A1 (en) | Software router and methods for looking up routing table and for updating routing entry of the software router | |
CN110830376B (zh) | 一种int报文的处理方法及装置 | |
CN111200542B (zh) | 一种基于确定性替换策略的网络流量管理方法及*** | |
JP6266445B2 (ja) | パケット中継装置及びパケット中継方法 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |