采用集成GPU来加速元组空间搜索的架构和机制的制作方法

文档序号:18213508发布日期:2019-07-19 22:28阅读:392来源:国知局
采用集成GPU来加速元组空间搜索的架构和机制的制作方法

在过去十年期间,已经存在所谓的“云托管”服务的使用方面的巨大增长。这类服务的示例包括由microsoft(hotmail/outlookonline)、google(gmail)和yahoo(yahoomail)所提供的电子邮件服务、生产力应用(例如microsoftoffice365和googledocs)以及万维网服务平台(例如amazonwebservices(aws)和elasticcomputecloud(ec2)以及microsoftazure)。云托管服务通常使用数据中心来实现,该数据中心具有在各种类型的服务器(例如填充有服务器刀片和/或模块的刀片服务器以及其他类型的服务器配置(例如1u、2u和4u服务器))的机架中实现的非常庞大数量的计算资源。

软件定义网络(sdn)和网络功能虚拟化(nfv)的部署在过去数年也已经看到迅速增长。在sdn下,对于向所选目的地转发业务的基本系统(数据平面)分离进行有关哪里发送业务的决定的系统(控制平面)。sdn概念可用来促进网络虚拟化,从而使服务提供商能够经由软件应用和api(应用程序接口)来管理其网络服务的各个方面。在nfv下,通过将网络功能虚拟化为软件应用,网络服务提供商能够获得网络配置方面的灵活性,从而使能显著有益效果,包括可用带宽的优化、成本节省以及新服务上市的更快时间。

连同sdn和nfv,新趋势推动对于标准高容量服务器上的基于高速软件的分组处理的需要,包括vm(虚拟机)通信的虚拟交换机。当前,许多云服务实现作为缺省虚拟交换机的openvswitch(ovs)。

原生ovs经由操作系统(os)内核空间数据路径(快速路径)来转发分组,其中异常分组被发送到“慢速路径”处理的用户空间监督程序(daemon),由此,研究表明ovs引起显著分组处理开销。为了改进性能,ovs的新版本集成intel®corporation的数据平面开发套件(dpdk),其是使能通用intel®x86架构机器上的优化分组处理的用户空间库和用户模式nic(网络接口控制器)驱动器的集合。ovs-dpdk完全绕过os内核栈,并且在用户空间中运行快速路径和慢速路径两者。这帮助改进可取得吞吐量,其否则受到linux内核网络栈的转发带宽所限制。但是,在通用平台上,ovs-dpdk经常只为分组切换要求多个核以保持高吞吐量,从而给应用留下用于有用工作的较少cpu资源。

同时,gpu(图形处理单元)作为从cpu卸载网络分组处理工作负荷以便取得更高全系统性能并且释放更多cpu周期以用于其他应用服务(例如分组转发、安全套接字层(ssl)加密/解密以及入侵检测系统中的正则表达匹配)的有希望候选而出现。现有途径的大多数途径已集中于设计具有分立gpu的平台的卸载架构,其常常要求大批量分组分摊通过cpu与gpu之间的通信信道(例如高速外设部件互连(pcie™))的高cpu-gpu通信等待时间。

附图说明

本发明的上述方面和许多伴随优点将变得更易于理解,因为其通过结合附图参照以下详细描述将被更好地理解,附图中,相似附图标记遍及各个视图表示相似部分,除非另加说明:

图1是示出具有通配符支持的常规元组空间搜索的示例的简图;

图2是示出gpu加速分组处理框架的示意图,在该框架下,相同处理器片上系统(soc)上集成的cpu和gpu访问共享存储器;

图3是示出使用分组级并行性的元组搜索方案的示例的示意图;

图4a-4c是示出使用集成cpu来加速采用通过使用命中计数直方图的gpu侧子表排序的元组空间搜索的第一架构的实施例,其中图4a示出在初始状态的多个工作组的局部和全局命中计数直方图的状态,图4b示出分组的第一批量已经由每个工作组处理之后的工作组的局部和全局命中计数直方图的状态,以及图4c示出已经更新全局命中计数直方图并且已经重新排序子表搜索顺序之后的工作组的局部和全局命中计数直方图的状态;

图5a是示出二级(分组和查找表)并行性架构的第一实施例的示意图,在该架构下,每个工作项处理单个分组并且搜索多个不重叠子表;

图5b是示出二级并行性架构的第二实施例的示意图,在该架构下,每个工作项处理单个分组并且搜索单个子表;

图5c是示出二级并行性架构的第三实施例的示意图,在该架构下,每个工作项处理单个分组并且搜索四个不重叠子表;

图5d是示出二级并行架构的第四实施例的示意图,在该架构下,每个工作项处理两个分组并且搜索多个不重叠子表;

图6是示出按照一个实施例、具有预筛选方案的动态二级并行处理的方面的架构的示意图;

图7a-7c示出采用多个散列算法和单维位向量的bloom滤波器如何进行操作;

图8a-8c示出采用多个散列算法和相应位向量的bloom滤波器如何进行操作;

图9a和图9b是示出按照一个实施例、使用将bloom滤波器用于预筛选的动态二级并行处理方案所实现的具有通配符支持的元组空间搜索的示例的简图;

图9c是示出按照一个实施例、使用将bloom滤波器的向量用于预筛选的动态二级并行处理方案所实现的具有通配符支持的元组空间搜索的示例的简图;

图10是示出体现为二路(散列)函数、四路关联查找表的四路cuckoo散列表的示意图;

图11是示出按照一个实施例、将cuckoo分配器用于预筛选的动态二级并行处理方案的框图;

图12示出按照一个实施例的cuckoo分配器的条目格式;

图13是示出按照一个实施例的自适应决定方案的实现的框图;

图14是示出与示范自适应选择算法的实施例对应的操作和逻辑的流程图;

图15是按照一个实施例、用来支持活动分组工作流程的api的流程图;

图16是配置成实现本文所公开实施例的方面的平台硬件和软件架构的示意图;

图17是按照一个实施例、具有集成gpu的示范处理器的示意图;以及

图18是示出对比一般ovs实现、与cuckoo分配器相组合的ovs以及与集成gpu相组合的ovs的性能的一些初步性能结果的条形图。

具体实施方式

本文描述用于采用集成gpu(图形处理器单元)来加速元组空间搜索的架构和机制的方法、设备、系统和软件的实施例。在以下描述中提出大量具体细节,以提供对本发明的实施例的透彻了解。但是相关领域的技术人员将会知道,本发明能够在没有具体细节的一个或多个或者采用其他方法、组件、材料等的情况下实施。在其他实例中,没有详细示出或描述众所周知的结构、材料或操作,以免使本发明的方面模糊。

遍及本说明书中提到“一个实施例”或“实施例”表示结合该实施例所述的特定特征、结构或特性包含在本发明的至少一个实施例中。因此,短语在“一个实施例中”或者“在实施例中”在遍及本说明书中的各个位置的出现不一定全部指同一个实施例。此外,具体特征、结构或特性可按照任何适当方式结合在一个或多个实施例中。

为了清楚起见,本文的附图中的单独组件也可通过它们在图中的标记而不是通过特定附图标记来表示。另外,表示特定类型的组件(如与特定组件相反)的附图标记可采用附图标记之后跟随表示“典型”的“(typ)”来示出。将会理解,这些组件的配置将代表可存在但是为了简洁和清楚起见而在附图中未示出的相似组件或者没有采用独立附图标记来标记的相似组件。相反,“(typ)”不是要被理解为表示通常用于其公开功能、实现、目的等的组件、元件等。

商品服务器上的基于软件的网络分组处理预示更好的灵活性、管理性和可缩放性,因而在近年来获得巨大动力。但是,没有专用硬件(例如三态内容可寻址存储器(tcam)),某些重要工作负荷(例如流分类和访问控制列表(acl))占据大量cpu周期。同时,具有驻留在与cpu相同的管芯上的集成gpu的cpu提供许多高级特征(例如芯片上互连cpu-gpu通信),以及共享物理/虚拟存储器提供加速仅cpu的分组处理的可行备选方案。

具有通配符支持的流分类是许多软件分组处理工作负荷的通用和关键阶段。如pfaff、ben等人的“thedesignandimplementationofopenvswitch.”(nsdi.2015)中所述,基于元组空间的搜索(例如在openvswitch上使用)对支持大且复杂的规则集合极为有效。一般来说,通过元组空间搜索,规则(例如openflow规则、ipv4规则等)基于其通配符格式来分为一系列子表。具有相同通配符位置的全部规则放入相同子表中。元组空间搜索则经过全部子表顺序搜索,直至找到匹配。这个过程可能是低效的,特别是当工作负荷涉及大量子表时(如采用以下所提供实验结果所示)。

按照本文所公开实施例的方面,提供采用集成gpu来加速元组空间搜索的架构和机制。架构和机制包括:分组级并行性,其利用gpu侧实时查找表排序方案来有效地减小搜索空间并且改进效率;分组级和子表级两者上的二级并行性,使并行搜索速度最大化;以及利用来自opencl2.0的装置侧入队能力来动态发起预筛选过程之后所要求的线程的技术。另外,还公开动态切换到最适合处理模型的自适应方案。

元组空间的利用已经表明为执行具有通配符支持的软件中的流分类的有效方法。因此,它被广泛使用,包括ovs虚拟交换机,如图1所示。在这种常规途径下,分组报头100中的元组数据使用多个流掩码102、104、106和108以及多个规则110、112、114和116来处理。如所示,元组搜索(其基于分组报头100中的所选字段中包含的数据(元组数据/字段))以顺序方式执行,直至找到匹配规则。分组流然后基于匹配规则来分类。

在一种方式下,每个子表实现为散列表,例如ovs中的cuckoo散列表。(参见以下cuckoo散列的描述。)当分组到来时,子表关键字(key)基于第一子表掩码来形成,以执行这个子表的散列查找。该过程对子表的每个继续进行,直至找到匹配或者存在未命中。

这种途径的开销来自两个方面:1)对多个子表的顺序搜索;以及2)对于每个子表、子关键字,需要基于子表掩码来形成。第二开销在报头极长时可能相当大。例如,ovs中的openflow报头为512字节。

根据本文所公开实施例的方面,对多个子表的元组搜索使用集成gpu并行地进行。用于采用集成gpu的分组处理的一般架构能够有效利用持久线程和多缓冲技术向gpu连续发送分组以用于处理,而无需重新发起内核或请求大批量以隐藏等待时间。例如,在tseng,janet等人的“exploitingintegratedgpusfornetworkpacketprocessingworkloads”(netsoftconferenceandworkshops(netsoft),2016ieee.ieee,2016)中论述用于采用集成gpu来执行分组处理的一种途径。用于这个文章的gpu加速分组处理框架在图2中示出。

如所示,该框架包括cpu200和gpu202,其各自有权访问共享存储器204。共享存储器包括流传送分组池206(其包括多个分组208)以及多个缓冲器210和控制块212。gpu202还描绘为包括多个线程214,其用来通过使用控制块212和缓冲器210来处理分组208。还使cpu200能够使用i/o引擎216对分组208进行操作。

框架中的高级分组执行流程与许多现有基于gpu的分组处理工作相似,其中cpu核执行网络i/o任务并且将数据传递给gpu以用于查找。该文章介绍帮助显著降低等待时间的两个新特征:(i)连续线程,其消除对每一个批量发起gpu内核线程的需要,以及(ii)多缓冲技术,其允许有效等待时间隐藏以使gpu利用最大化。

对于gpu加速分组处理框架设计,intel®dpdk用来从用户空间直接访问nic,从而绕过内核栈开销。连续线程使能一次发起gpu线程,并且连续处理传入分组,直到应用发起终止调用。在持久线程处理来自全局工作池的工作项并且一旦耗尽工作池则终止它自己的意义上,连续线程与分立gpu中使用的“持久线程”有所不同。这个模型与“批处理”技术相似,但是经由软件调度来防止gpu资源缺乏。但是,这种方法因缺乏cpu与gpu之间的即时交互而对典型等待时间敏感生产者-消费者应用(例如网络分组处理)没有解决等待时间问题。另一方面,连续线程能够处理连续流传送数据而无需对大工作池进行批处理,因此改进等待时间性能。在我们的模型中,工作线程连续处理新流入数据,直到应用发起终止调用,从而使它真正持久。类似地,主应用(cpu)可立即处理gpu输出,而无需等待池中的其余工作完成。通过多个缓冲器,在作为消费者的gpu处理新填充缓冲器的同时,作为生产者的cpu连续补充准备好被使用的缓冲器。

执行模型/术语

在一些实施例中,本文所述的架构通过使用opencl执行模型来实现。相应地,本文中使用opencl术语。但是将会理解,本文所公开的技术和原理并不局限于opencl实现,而是使用opencl术语,因为这种术语具有本领域众所周知的含意。

opencl程序的opencl执行在两个部分发生:内核,其在一个或多个opencl装置上运行;以及主程序,其在主机上运行。主程序定义内核的上下文,并且管理其执行。opencl执行模型的核通过内核如何运行来定义。当提交内核以供主机执行时,定义索引空间。内核的实例对这个索引空间中的每个点运行。这个内核实例称作工作项(work-item)(本文中又称作“工作项(workitem)”),并且通过它在索引空间中的点(其提供工作项的全局id)来识别。每个工作项运行相同代码,但是经过所操作的代码和数据的特定执行通道能够每工作项改变。工作项被组织为工作组(work-group)(本文中又称作工作组(workgroup或workgroup))。工作组提供索引空间的更粗粒度分解。工作组被指配具有与用于工作项的索引空间相同的维度的唯一工作组id。工作项被指配工作组内的唯一局部id,使得单个工作项能够通过其全局id或者通过其局部id和工作组id的组合来唯一识别。给定工作组中的工作项在单个计算单元的处理元件上并发地运行。计算单元的示例是gpu执行单元(eu)和cpu核。更一般来说,本文所述和所示的gpu上的eu是处理元件,其使gpu能够经由处理元件上的指令的执行来执行本文所述和所示的对应操作。

一般来说,通过元组空间搜索,可在多个子表的任一个中找到分组的规则。最直接解决方案是执行如图3所示的分组级并行性。在这个示例中,工作划分为m个工作组0至m-1,其各自由作为工作项302所处理的一批分组300来组成,其中每个工作项示为包括分组和n个子表。在这种途径下,每个工作组中的分组批量(可能)依次使用全部n个子表(作为查找表所访问)来处理,并且在找到条目时立即终止搜索。但是,这种解决方案可遭受低性能和相对较长延迟,因为每个eu经过全部子表顺序搜索,直至找到分组的规则。

使用集成gpu来加速元组空间搜索的架构和机制

架构1:有效查找的gpu侧查找表排序

如上所述,通过元组空间搜索,可在多个子表的任一个中找到分组的规则,例如图3所示。但是,经过全部子表的随机搜索可遭受低性能和长延迟。现实世界业务通常呈现业务偏斜,即,一些子表比其他子表更经常命中(具有元组匹配)。

基于这个观察并且按照一些实施例的方面,分组级并行处理途径通过应用gpu侧表排序来优化。在这种方案中,每个子表的命中计数直方图保持在gpu侧,其根据一个实施例重新排序子表(经由连续gpu线程),如当批量(或者跨工作组的多个批量)的处理完成时。在一个实施例中,为了更为有效,没有对每个分组更新直方图。而是每个线程保持批量的表命中计数的位图。在批量处理完成之后,线程负责更新总表(全局)命中计数直方图,并且重置其局部位图。周期地,表搜索序列基于全局命中计数直方图的当前命中计数总数来更新。

这种途径的示范实现在图4a-4c中示出。如前面(例如对图3)所述,存在m个工作组,在这里示为工作组#0、#1、…#l,其各自处理一批分组300,开始于示为第一批量(分别示为批量0-0、批量1-0和批量l-0)的pkt#0的第一分组。对n个子表0至n-1的每个描绘两个命中计数直方图条,其中上直方图条表示全局命中计数(例如对于全部工作组),以及下直方图条表示局部命中计数(对于单独工作组)。在图4a-4c中,全局命中计数通过子表#0的直方图条400、子表#1的直方图条402和子表#n-1的直方图条404示出。局部命中计数通过类似子表#0的直方图条401-i、子表#1的直方图条403-i和子表#n-1的直方图条405-i示出,其中‘i’表示工作组#。在图4a-4c的图示中,直方图条的宽度与相应子表的命中计数大致成比例,注意,用于局部命中计数的标度比用于全局命中计数的标度要大。直方图条中的数字表示示范命中计数值。

三个时帧在图4a-4c中示出:t0、t1和t2。时间t0是初始状态,在该初始状态下,还没有对工作组#0、#1、...#l的每个处理分组。在这种状态,直方图条(全局以及局部两者)全部具有命中计数‘0’。当处理工作组#0、#1、…#l的分组时,当那个表命中(即,存在与那个子表中的规则的元组匹配)时,命中计数对n个子表0至n-1的每个递增。

分组的第一批量已经通过工作组#0来处理之后的状态在图4b中在时间t1-0示出。如所示,对子表#0的直方图条400-0所示的命中计数为8,对直方图条403-0所示的命中计数为14,以及对子表#n-1的直方图条405所示的命中计数为10。对子表#0、#1和#n-1的每个所示的类似命中计数和直方图条在工作组#0的时间t1-0以及工作组#l的时间t1-l示出。如进一步所示,不同工作组中的相同子表的命中计数可以是不同的。

两个考虑因素值得注意。首先,为了说明性目的,图4b示出处理工作组#0、#1、…#l的每个的每个批量中的最后分组(pkt#31)的完成。实际上,给定工作组的一批分组中的分组的处理(基本上)并行执行,其中工作组中的每个工作项处理相应分组(根据图4a-4c中的所示实施例)。取决于何时发起每个工作项的内核以及需要对给定分组搜索多少子表,给定批量的分组的完成顺序是不可预测的。相应地,时间t1-0、t1-1和t1-l实际表示处理批量中的全部分组而不是任何特定分组何时完成。其次,t1-0、t1-1和t1-l具有不同标记(即,并非全部为t1)是因为没有同步工作组中的分组的处理。因此,工作组#0、#1、…#l的每个以其自己的步幅进行,而不管其他工作组的步幅。

如上所述,在已经处理批量之后,工作组的线程更新总表(即,全局)命中计数直方图,并且重置其局部位图。另外,表搜索序列或搜索顺序基于全局命中计数直方图的当前计数值周期地更新(例如重新排序搜索顺序),其中存在从最高总命中计数到最低总命中计数的降序。第一重新排序之后的工作组#0、#1、…#l的每个的命中计数的状态在图4c中通过时间t2示出。在这个示例中,顺序基于通过直方图条402(424的总命中计数)、直方图条404(346的总命中计数)…和直方图条400(264的总命中计数)所表示的命中计数。子表的每个的局部命中计数已经重置为零。如前面所述,直方图条保持为与其原始子表组对,使得子表#0保持为与直方图条400和401-i组对,子表#1保持为与直方图条402和403-i组对,以及子表#n-1保持为与直方图条404和405-i组对。因此,子表的顺序已经对工作组#0、#1、…#l的每个重新排序。

还将会知道,图4c中对每个工作组的时间t2的使用是为了说明和易于理解的目的。实际上,重新排序何时单独工作组的子表搜索顺序的定时可以是异步的,如果被同步,则每个工作组的处理的状态可与其他工作组有所不同。例如,根据异步途径的一个实施例,每个工作组局部保持其自己的子表搜索顺序,并且那个搜索顺序在工作组线程更新全局命中计数直方图之后被更新。根据同步途径的一个实施例,存在由全部工作组所使用的全局搜索顺序,从而每当重新排序全局搜索顺序时引起对搜索顺序的变更(对全部工作组)。

在一个实施例中,表的单行(称作位图)用来存储局部命中计数。同时,跨工作组的总命中计数存储在类似位图(其由全部工作组全局访问和更新(经由工作组线程的执行,如上所述))中。为了说明和易于理解的目的,图4a-4c示出工作组#0、#1、…#l的每个的全局直方图。实际上,将会知道,更可能的是,将存储全局命中计数直方图的单个实例而不是对单独工作组本地存储的全局直方图的副本。

架构2:二级(分组和查找表)并行性

根据第二途径,使用并行性的两级:分组级并行性和查找表并行性。在分组级并行性下,每个eu经过其全部子表进行搜索,直至找到匹配(或者在子表的任一个中没有找到)。对于每个分组,顺序搜索可引起比预期要长的延迟,特别是当存在许多子表时。为了改进这个方面,并行处理工作项的数量通过扩大并行的分组-子表对的全部单独搜索来增加,如图5a-5d所示。

在图5a-5d中,相同批量中的全部分组(这些示例中为32个)被指配给相同工作组,而多个工作项经过表并行地搜索。结果在工作组级来同步,而对不同工作项的工作可以是异步的。

根据图5a的实施例,每个工作项使用一个或多个子表(两个子表在图5a中示出)来处理单个分组。在图5b的实施例中,每个工作项使用单个子表来处理单个分组,示出并行性的最大等级。图5c中,存在32个子表,其中每个工作项使用32个子表中的四个来处理单个分组。

除了使每个工作项对单个分组进行工作之外,工作项还可对多个分组进行工作,这减少工作项矩阵中的列数。例如,图5d中,每个工作项对两个分组进行工作。

一般来说,图5a-5d中的j的值等于子表的数量除以每个工作项所搜索的子表的数量。在图5a所示的示例中,存在总共16个子表,其中每个工作项具有两个子表,并且因而j=8。图5b中,j=16,而在图5c和图5d的每个中,再次为j=8。

注意,方法和工作组矩阵配置可需要符合关于每工作组的最大工作项上限的厂商限制,意味着并非每一个分组-子表对可完全分配给全部计算资源(例如图5b所示)。

考虑这个厂商限制,需要在每个工作项中处理的子表的数量能够计算为:

m=n(子表的总数)/k(每工作组的最大工作项)

架构3:具有预筛选方案和装置侧入队的动态二级并行处理

在另一种途径下,opencl2.0装置侧入队能力用来克服关于上述二级并行性方案的潜在厂商限制,以及使表查找期间的存储器存取成本最小化。这个第三架构实现采用预筛选技术的动态二级并行处理。在这个机制中,首先发起主线程以应用预筛选,以便决定要搜索哪一个子表(或多个子表)。预筛选技术的示例包括:bloom滤波器、bloom滤波器的向量(vbf)和cuckoo分配器,如以下所述。本文所提出的架构允许与不同预筛选技术的灵活集成。

在使用预筛选技术来确定要搜索哪些子表之后,主线程则使具有预期维数和子表(其通过预筛选)的新内核入队。这个主线程则将在新入队内核处理当前批量的同时对下一个批量重新发起它自己,以获得有效管线化。

这个动态二级并行处理仍然利用多缓冲,并且提供使查找表搜索智能最小化的灵活性。通过这样做,元组空间查找所需的eu能够最小化,从而节省潜在用于其他应用任务的其他eu。

图6示出了说明采用预筛选的动态二级并行处理的一个实施例的方面的架构600。如图6所示,首先发起主线程,以便对每个分组或者采用向量化并行地对多个分组应用前置滤波器602(例如bloom滤波器)。bloom滤波器用来查找分组能够从其中获得匹配的可能元组。gpu则使具有来自子表(其通过滤波器)的预期维数的新gpu内核入队。

更详细来说,图6示出三个工作组:工作组#0、#1和31。每个工作组基于前置滤波器602的预筛选输出动态配置有子表。例如,工作组#0包括三个子表#0、#1和#3,其各自与相应工作项(如通过工作项#0、#1和#2所示)关联。这示出,因前置滤波器602对第一分组(pkt#0)所执行的预筛选操作,存在包含可匹配pkt#0的元组的规则的可能子表。类似地,由前置滤波器602对第一第二(pkt#1)所执行的预筛选操作的输出示出存在包含可匹配pkt#1的元组的规则的两个子表:子表#1和子表#5。这两个子表使用相应工作项#0和#2并行地搜索。这个过程对批量中的每个分组重复进行,最终处理最后分组(pkt#31)(或者批量中结束于最后被处理的无论哪一个分组),开始于前置滤波器602所执行的预筛选操作。pkt#31的预筛选的结果识别具有pkt#31的元组的可能匹配规则的两个子表:子表#1和子表#4。

这个主线程则将在新入队gpu内核处理当前批量的同时对下一个批量重新发起它自己,其中该循环以进行中为基础重复进行。这个动态二级并行处理仍然结合多缓冲和连续线程的精神,同时提供使查找表搜索智能最小化的最大灵活性,使并行处理量最大化,并且完全利用全部计算资源。

采用bloom滤波器的预处理

根据一个实施例,bloom滤波器(或bloom滤波器集合)用于预筛选分组。在这种技术下,一个或多个bloom滤波器可用来执行元组过滤功能,根据该功能,bloom滤波器能够用来识别没有包含任何匹配元组规则的子表。因此,那些子表能够对工作组的后续处理期间的使用被排除。

更详细来说,bloom滤波器是空间有效数据结构,其用来概率地测试元素是否为集合的成员。bloom滤波器的最简单形式采用单个散列算法,其用来在适用位位置生成元素的单行或列的位值,通常称作单维位向量。另一种bloom滤波器方案采用多个散列算法,其具有映射到单维位向量的位结果。在更复杂bloom滤波器下,多个散列算法的每个的位向量存储在相应位向量中,其又可称作多维位向量。

使用多个散列算法(其中位值映射到单维位向量中)所实现的bloom滤波器的示例在图7a-7c中示出。在这个示例中,存在三个散列算法,示为h1(x)、h2(x)和h3(x),其中元素x为输入值。对于给定输入x1,计算散列算法h1(x1)、h2(x1)和h3(x1)的每个的结果,以及在散列结果中对应的位位置标记对应位(例如设置为1)。例如,如图7a所示,散列函数h1(x1)的结果为26,h2(x1)为43,以及h3(x1)为14。相应地,设置在位置26、43和14的位(例如,位值从‘0’(清除)翻转到‘1’(设置))。这个过程然后对后续输入xi值重复进行,从而产生图7b所示的位向量,其中所设置的位采用灰色和黑色示出。图7b还示出输入x2(采用黑色所示的位)的命中的结果。命中通过使用x2作为输入值(又称作元素x2的查询)应用bloom滤波器的散列算法的每个来检验,并且然后确认是否存在每个散列算法结果的位位置所设置的位。例如,如果存在对每个散列算法结果的位置所设置的位,则结果为命中,意味着存在元素xk对应于先前输入值xj(对其应用散列算法并且设置对应位)的高概率(取决于位向量的稀疏性)。

图7c示出输入x3的未命中的结果。在这种情况下,没有设置与散列算法结果对应的位向量中的一个或多个位位置。图7b和图7c示出bloom滤波器固有的几个特征。首先,bloom滤波器可产生错误肯定。这是因为通过针对输入x的数量评估散列算法所形成的位向量是每个输入x的单独结果的联合。相应地,可存在所设置位位置(其对如针对bloom滤波器的位向量所应用的测试输入xi产生命中结果,而输入xi没有用来生成位向量)的组合。这称作错误肯定。bloom滤波器的另一个固有特征是它们没有产生错误否定。如果如应用于bloom滤波器的位向量的输入xi的评估产生未命中,则肯定地已知xi不是先前bloom滤波器输入集合的成员。

图8a-8c示出保持每个bloom滤波器散列算法的独立表行(和一维位向量)的bloom滤波器的示例。虽然每行示为具有相同长度,但是不同散列算法有可能将产生不同长度的位向量。当针对输入x值(例如针对图8a中的x1)评估散列算法时,在与散列算法结果对应的表行的位位置设置对应位。如前面所述,输入x2产生命中(无论是真命中还是错误肯定),而输入x3导致未命中。

根据一个实施例,滤波器用于每个唯一通配符掩码。当插入流程时,它被插入子表中,并且标记对应bloom滤波器。这在图9a中示出。如上所述,分组报头100的处理按照与图1所示方式相似的方式进行。首先,对流掩码102和规则110检查匹配,从而导致未命中。随后,对流掩码104和规则112检查匹配,也导致未命中。随后,对掩码106和规则检查匹配,从而产生对10xxxxxx的匹配。因此,设置掩码lbloom滤波器的对应位。

在查找时,元组匹配针对一个或多个bloom滤波器位图中的位,如与子表中的匹配条目相反。如图9b所示,在查找时,首先查找bloom滤波器系列,以及一个或多个(理想地为一个)bloom滤波器将指示这个流关键字(通配符掩码和流报头字段的and操作)已经插入对应子表中。如果没有bloom滤波器返回流关键字存在,则能够以100%概率检验关键字尚未插入。

采用bloom滤波器的向量的预处理

上述方案能够扩展到bloom滤波器的向量(vbf)。vbf使用与子表的数量对应的一系列bloom滤波器来优化间接的第一级。如前面所述,插入操作仅标记与正确子表对应的bloom滤波器,而查找操作顺序经过全部滤波器并且查找指示肯定成员资格的滤波器。

但是,vbf在如何构成流关键字方面有所不同。在常规bloom滤波器中,流关键字是“掩蔽”关键字,其中它将and操作用于具有每个子表的唯一通配符掩码的传入分组字段来形成。这个操作是高成本操作,因为它要求分组报头的不同字段的分散和集中(涉及多个存储器存取),并且此外这对每一个子表重复进行,因为各自具有其自己的掩码。

如图9c所示,vbf的思路是使用未掩蔽全关键字(分组报头的全部字段,而不管通配符掩码,例如对ovs为512b),如通过分组报头900和报头字段902所示。当插入新流时,完全未掩蔽关键字被散列,以及仅标记对应滤波器(对应于插入命令中指定的掩码)。在查找期间,完全未掩蔽关键字被散列,以及搜索每个滤波器(即,使用常规查找操作)。vbf使用更长关键字,但是节省与形成流关键字本身关联的存储器存取。当与子表的顺序搜索或者使用常规bloom滤波器方案作为间接的第一级相比时,测试已经指示vbf显著改进查找吞吐量(2x-3x)。

cuckoo分配器前置滤波器

如上所述,流表采用散列方案的使用,以存储和检索基于散列的关键字-值对。但是,常规基于散列的查找表通常是存储器低效的,这在尝试取得大标度或者使查找表适合快速昂贵sram时变得重要。例如,要求额外空间以避免散列表中的冲突(其在两个不同关键字产生相同散列结果时发生)。另外,为了避免在允许多个线程从转发表被读取的同时锁定开销,指针交换途径(例如读-拷贝更新)用来更新表,这要求存储表的两个完全副本而不是一个。

解决这个问题的一种途径是使用散列表方案(称作cuckoo散列)。在cuckoo散列下,关键字采用第一散列函数来散列,其识别能够存储关键字连同关联值的第一候选行(桶)。每个桶具有能够保存的多个条目。只要存在给定桶的可用条目,则新关键字将添加到那个桶。但是,如果产生于采用第一散列函数来对关键字进行散列的桶是满的,则使用第二散列函数,以及关键字-值对存储在与第二散列函数的结果对应的行。在一些条件下,两种桶均将是满的,在这种情况下,现有条目之一被逐出并且通过对关键字重新散列来重新定位,以识别它将重新定位到的桶。在必要时,这个关键字重新定位过程可级联多次。

cuckoo散列表的读访问如下所述进行(暂时没有考虑并发访问)。第一散列将应用于关键字,从而识别存储关键字的第一候选桶。桶中的条目将被搜索,以经由匹配关键字来定位正确条目。如果没有找到匹配,则应用第二散列函数,以识别第二候选桶,其中保证关键字将存储在第一和第二候选桶其中之一的条目中。

图10示出示范cuckoo散列表1000,其体现为二路(散列)函数、四路关联查找表,其下每行或桶1002包括用于存储关键字/值对1006的四个条目1004,其中每个条目包括关键字1008及其关联值1010。可选地,值可以是指向另一个表或数据结构(经由其存储适用值)的指针。另外,每个桶1002映射到对应版本计数器1012。为了减少版本计数器的数量,每个版本计数器经由分条(striping)来映射到多个桶。(虽然在这个示例中示出两个,但是更一般来说,给定版本计数器可映射到1-n个桶。)另外,虽然在说明性实施例中示出四路组相联散列表,但是应当理解,可使用备选组相联散列表。

如上所述,元组空间搜索的低效来自多个表的顺序搜索以及必须基于其唯一掩码来形成每个表的查找关键字。理想地,期望断定要采用原始流关键字观察哪一个子表。在一个实施例中,这通过使用cuckoo分配器(cd)作为第一级查找机制来取得。

在高等级,与cuckoo散列表相比,cuckoo分配器采用相似但更简单的数据结构。当接收流时,cuckoo分配器中的快速散列查找使用未掩蔽关键字来执行(节省形成掩蔽关键字的成本),以检索指向这个流所属的子表的索引,从而节省经过多个子表进行搜索的开销。

图11示出按照一些实施例、cuckoo分配器方案用作第一级查找。所示组件包括cuckoo分配器1100、n个掩码(示为掩码1102、1104和1106)以及n个掩码的每个的相应子表(示为子表1108、1110和1112)。分组(具有分组报头100)被接收并且转发到cuckoo分配器1100。快速散列查找使用未掩蔽全关键字来执行,以检索指向包括用于处理对应流的规则的子表(例如这个示例中的子表1110)的值。在一些实施例中,未掩蔽全关键字将包括原始流关键字。在一些实施例中,cuckoo分配器1100的输出值将在子表1108、1110或1112其中之一中的搜索之前通过掩码1102、1104、1106其中之一来掩蔽。

图12示出按照一些实施例的cuckoo分配器的条目格式。cuckoo分配器的每个条目1200能够包括小指纹1202(例如小于全分组报头100的大小)。例如,当接收分组时,处理电路(例如在gpu或cpu核中)能够将分组的签名与指纹1202进行比较,以确定分组所属的正确cuckoo分配器条目。每个条目1200还能够包括老化字段1204以促进不活动(例如“陈旧”)流的逐出,以及索引1206。索引1206能够包括识别子表(例如子表1108、1110、1112等)(其中将找到对应分组的规则)的指示符。在一些实施例中,每个条目由四个字节来组成,其中两个字节用于指纹1202,以及一个字节各自用于老化字段1204和索引1206。但是,实施例并不局限于条目1200的任何特定大小或者条目1200中包含的字段的任何特定数量或识别码。在至少这些实施例中,一个高速缓存线能够包括作为一个桶的16个条目。高级向量扩展(avx)比较指令能够用来并行地比较16个条目。

适合应用偏好和运行时环境

如上所述,上述架构的每个具有其优点和缺点。对于具有gpu侧表排序的分组级并行性,它在子表的数量少时取得最佳性能,或者业务极大地偏斜,因此需要被搜索的表的数量是少的。在这种情况下,这个架构遭受最小开销,因为它不要求工作项级同步或通信。但是,当需要被搜索的表的数量增加时,每个分组的等待时间可能增加,因为顺序搜索每个分组的子表。

对于第二(二级并行性)架构,由于同一分组的子表能够并行地处理和搜索,所以等待时间与具有gpu侧表排序的分组级并行性相比能够减少;但是,这种方法要求工作组级同步,以及当开始的子表的数量少时,同步的开销可能压倒子表级并行性的有益效果。这个架构还因并行性的二级而要求大多数eu。

第三(采用预筛选方案和装置侧入队的动态二级并行处理)架构要求最小计算资源,因为它已经采用预筛选来消除不必要子表;只有用于搜索(一个或多个)目标子表的内核通过装置侧入队过程来发起。但是,当子表的数量少时,gpu计算资源是充足的并且等待时间要求是严格的,这可能不是最优解决方案。

基于这些观察,提供在三个架构之间进行切换的自适应决定机制,以满足用户偏好并且取得最佳性能。自适应决定机制的示例在图13中示出。如所示,三个输入(包括(一个或多个)应用偏好1300、所提供吞吐量1302和活动子表的数量1304)作为对自适应决定模块1306(其输出最佳处理模型1308)的输入来接收。

存在与应用偏好有关的若干方面。例如,如果应用优选使用最少gpu资源,则架构3应当是选择,因为它动态执行装置侧入队,以便只利用必要数量的eu和最少数量的表的查找。如果用户优选对最小等待时间进行优化,则一般来说架构2因其高等级的并行性而是优选的。但是,当活动表的数量很少时,架构2因其工作组级同步开销而不是最佳选择。阈值是系统参数。另一方面,如果最大吞吐量是最终度量,则架构1或架构3将是最佳选择,取决于活动表的数量。

所提供吞吐量:传入吞吐量能够对架构具有影响。如果传入吞吐量低,则使用作为架构2的方案以快速处理分组并且转到空闲模式是有意义的。

活动子表的数量。活动表指匹配频率在统计上是重要的那些表—否则该表是陈旧表并且将通过gpu侧排序方案相应地排列。如果活动子表的数量较少(例如诸如<2),则架构1胜过全部其他选项,因为顺序搜索在这种情况下是计算廉价的。

图14示出了说明与基于上述选择标准的自适应决定模块中的示范自适应选择算法的实施例对应的操作和逻辑的流程图1400。该过程在开始框1402开始,其中在框1404得到应用偏好。在决定框1406,确定应用偏好是否使用(一个或多个)gpu资源的最小等级。如果决定为“是”,则该逻辑继续到框1408,其中选择使用架构#3。

如果对决定框1406的回答为“否”,则该逻辑继续到决定框1410,其中决定应用偏好是否包括以最小等待时间来处理分组。如果回答为“是”,则该逻辑继续到决定框1412,其中确定活动表的数量是否小于阈值。如果是的话(回答为“是”),则选择架构#1,如框1414所示。如果对决定框1412的回答为“否”,则选择使用架构#2,如在框1416所示。

返回到决定框1410,如果回答为“否”,则该逻辑继续到决定框1418,其中确定应用偏好是否包括最大吞吐量的标准。如果回答为“是”,则该逻辑继续到决定框1420,其中确定活动表的数量是否小于阈值。如果回答为“是”,则选择架构#1,如在框1422所示。如果对决定框1420的回答为“否”,则选择架构#3,如在框1424所示。

如果对决定框1418的回答为“否”,则该逻辑继续到框1426,其中得到所提供吞吐量。如在决定框1428所示,如果所提供吞吐量小于某个阈值,则该逻辑继续到决定框1412。否则,如果所提供吞吐量大于或等于该阈值,则该逻辑继续到决定框1420。

ovs集成的oclapi

按照一些实施例的其他方面,已经开发应用程序接口(api)集合,其将图2的分组框架密切集成到ovs数据路径中以内联加速器查找。图15示出支持活动分组工作流程的api的子集。创建api(例如ocl_terminatekernelthread、ocl_createcontrolbuffer和ocl_querypersistentthreadcapacity),以支持框架建立和清除。另外,提供gpu内核侧的新属性_attribute(continuous_thread),以指示gpu内核类型为连续线程。还提供实用性api集合(例如get_continuous_thread_id、commit_multibuffer、workgroup_commit_multibuffer和terminate_thread),以便使分组处理框架对应用开发人员是透明的。

为了同步cpu与gpu之间的缓冲器,使用标志轮询方法,其意味着每一个单线程轮询通信标志,即使它属于与其他线程相同的批量。例如,如果存在120个多缓冲器,则将存在对120个标志飞行(inflight)轮询的3840(每批量32个分组乘以120)个连续线程。为了有效地减少冗余高速缓存线访问的数量,我们经由应用单工作项轮询来优化该机制,这意味着对任何给定批量,只有第一工作项/线程需要对通信标志进行轮询,以确定批量就绪状态。

图16示出示范主平台配置1600,其包括平台硬件1602以及各种基于软件的组件(其配置成实现本文所述实施例的方面)。平台硬件1602包括cpu1604和gpu1605,其经由互连1612来耦合到存储器接口1606、末级高速缓存(llc)1608和i/o接口1610。在一些实施例中,上述组件的全部或者一部分可集成在片上系统(soc)上。存储器接口1606配置成促进对系统存储器1613(其通常将与soc分离)的访问。

cpu1604包括核部分,其包括m个处理器核1614,其各自包括本地1级(l1)和2级(l2)高速缓存1616。可选地,l2高速缓存可称作“中间级高速缓存”(mlc)。如所示,每个处理器核1616具有到互连1612的相应连接1618,并且与独立于其他处理器核进行操作。

gpu1605包括多个执行单元(eu)1619和l3数据高速缓存1621。具有集成gpu的处理器soc的一个实施例的其他细节在图17中示出。

为了简洁起见,互连1612示为表示单个互连结构的单个双端箭头;但是实际上,互连1612说明处理器或soc内的一个或多个互连结构,并且可包括采用独立协议并且包括用于互连段/域之间的接口的适用桥的互连段或域的分级结构。例如,存储器和处理器核所连接的互连分级结构的部分可包括采用第一协议的一致存储器域,而在分级结构中的较低级的互连一般将用于i/o访问,并且采用不一致域。处理器或soc上的互连结构可包括任何现有互连结构,例如总线和单或多通道串行点对点、环或网格互连结构。

i/o接口1610说明由平台硬件1602所提供的各种i/o接口。一般来说,i/o接口1610可实现为分立组件(例如ich(i/o控制器中枢)等,或者它可在soc上实现。此外,i/o接口1610还可实现为i/o分级结构(例如pcie™i/o分级结构)。i/o接口1610还促进各种i/o资源与装置和其他平台组件之间的通信。这些包括一个或多个nic1620(其配置成促进对网络1622的访问)和各种其他i/o装置(其包括固件存储装置1624、盘/ssd(固态盘)控制器1626和盘驱动器1628)。更一般来说,盘驱动器1628表示各种类型的非易失性存储装置,包括基于磁和光的存储装置以及固态存储装置(例如ssd或闪速存储器)。

cpu1604的多个核1614用来运行各种软件组件1630(例如库组件、模块和应用),其存储在一个或多个非易失性存储装置中,例如通过盘驱动器1628所示。可选地,软件组件1630的全部或者一部分可存储在经由网络1622所访问的一个或多个存储装置(未示出)上。

在引导或运行时操作期间,各种软件组件1630和固件1632加载到系统存储器1613中,并且作为进程(包括执行线程等)在核1614上运行。取决于特定处理器或soc架构,给定“物理”核可实现为一个或多个逻辑核,其中进程被分配给各种逻辑核。例如,在intel®hyperthreading™架构下,每个物理核实现为两个逻辑核。

附加软件组件由gpu1605上的各种eu1619来运行,以支持本文所述的各种gpu操作和功能。cpu和gpu还共享标记为共享cpu-gpu空间的系统存储器1613的一部分。这个共享存储器空间与图2中的共享存储器204相似。

在平台硬件1602的典型系统引导下,固件1632将在系统存储器1613中加载和配置,之后接着引导主操作系统(os)1634。随后,将发起(类型-2)管理程序1636(又称作虚拟机管理器或vmm),其一般可包括在主os1634上运行的应用。管理程序1636则可用来发起各种虚拟机vm0-n,其各自将配置成使用系统存储器1613的各种部分(即,地址空间)。每个虚拟机vm0-n又可用来托管相应操作系统1638。

在运行时操作期间,管理程序1636使能各种系统资源(例如系统存储器1613、核1614和(一个或多个)盘驱动器1628)的重新配置。一般来说,虚拟机提供其托管操作系统与基础平台硬件1602之间的抽象(与管理程序1636相组合),从而使硬件资源能够在vm0-n之间共享。从每个所托管操作系统的观点来看,那个操作系统“拥有”整个平台,并且不知道虚拟机上运行的其他操作系统的存在。实际上,每个操作系统只有权访问由管理程序1636对它所分配的仅资源和/或资源部分。

除了类型-2管理程序之外,管理程序1636还可实现为类型-1或“裸金属”管理程序。在这种途径下,管理程序直接在平台硬件上运行,而无需中间os层。

vm0-n的每个包括虚拟网络接口控制器(vnic),并且在其主os上运行一个或多个应用。vnic连接到例如经由管理程序或其他软件实体所实现的虚拟交换机(未示出)。在一个实施例中,ovs软件组件用来促进vnic和其他虚拟网络功能性。

在图16的所示实施例中,vm配置成使用多个nfv设备和/或nfv类型功能来实现sdn服务链。如上所述,这可包括诸如分组转发、安全套接字层(ssl)加密/解密和入侵检测系统(例如防火墙)中的正则表达匹配的操作以及其他功能。

一般来说,用于实现sdn服务链功能的软件组件将在cpu核上运行。但是,如上所述,操作的一些(例如促进流分类的那些操作)可经由gpueu上运行的软件来实现。根据图16的实施例,实现为配置成在cpu核和gpueu上运行的软件指令的软件组件用来实现sdn服务链。

在通用途径下,当分组在nic端口来接收时,它们使用由平台所提供的直接存储器存取(dma)设施从nic(未示出)中的缓冲器来复制到存储器。一旦分组已经被dma到系统存储器的缓冲器中,则它们被解析以提取分组报头,如由分组解析器1640所示。

一旦分组已经通过,则它们被转发以供流分类,其中操作的cpu侧使用ovs-dpdk组件1642和cpu核上运行的软件所执行,以缓冲分组并且促进gpu控制和通信操作,如通过cpu-gpu块1644所示。在分组已经分类为流之后,可执行附加处理操作,如通过nfv设备1646所示。将会知道,单个vm可实现一个或多个nfv设备或者相反实现nfv功能,并且作为对所示那些vm的补充的vm可用来托管其他nfv设备和功能(未示出)。分组的一个处理完成,以及分组最终目的地不是主系统或者通过平台硬件1602所托管的vm的任一个,分组将转发回到网络上。这包括在nic1620之一上的发射(tx)队列中入队,如通过tx入队块1648所示。如同接收分组那样,分组使用dma操作从系统存储器1613中的缓冲器来复制到nic上的tx缓冲器。

图17示出具有集成gpu1702的处理器soc1700的一个实施例。处理器soc1700包括具有多个cpu核1704的cpu,其各自包括l1和l2高速缓存(未示出),并且耦合到soc环形互连1706。处理器还包括llc高速缓存,其逻辑地划分为多个llc高速缓存片1708,其各自具有其自己的代理(未示出)(其也耦合到soc环形互连1706)。llc高速缓存片作为单个高速缓存(其作为共享分布式高速缓存来操作)共同工作。除了供cpu核1704使用之外,分布式高速缓存还与gpu1702共享。

处理器soc1700还采用耦合到soc环形互连1706的系统代理1710,其包括显示控制器1712、存储器控制器1714、pcie块1716和可选的嵌入式动态随机存取存储器(edram)控制器1718。edram控制器在被包含时提供对edram(未示出)(其在处理器soc1700上嵌入)的访问。

gpu1702包括gpu接口1720(其耦合到soc环形互连1706)、命令流传送器1722、全局线程分发器1724和多个片1726(示出其中之一)。在所示实施例中,每个片1726包括三个子片,其各自具有八个eu。也可实现其他配置。每个子片还包括指令高速缓存1728、本地线程分发器1370、l1和l2高速缓存以及数据端口(dp),并且耦合到l3数据高速缓存1732(包括共享本地存储器1734)。

在一个实施例中,soc环形互连1706是双向环,其具有32字节宽数据总线,其具有用于请求、探查和确认的独立线路。每个cpu核1704被看作是唯一代理。类似地,gpu1702被看作是互连环上的唯一代理。到/来自cpu核1704和到/来自gpu1702的所有芯片外系统存储器事务通过此互连、经过系统代理1710和存储器控制器1714(其将经由一个或多个存储器通道来连接到系统存储器(未示出))来促进。

gpu计算架构的基本构建块是eu。在一个实施例中,eu的架构是同时多线程(smt)和细粒度交织多线程(imt)的组合。这些是计算处理器,其驱动跨多个线程的多发布单指令多数据算术逻辑单元(simdalu)管线化,以供高吞吐量浮点和整数计算。eu的细粒度线程性质确保准备好运行指令的连续流,同时还使能较长操作(例如存储器分散/集中、取样器请求或其他系统通信)的等待时间隐藏。

性能结果

示出一些初步性能结果的条形图在图18中示出。如所示,测量一般ovs实现(ovsvanilla)、与cuckoo分配器相组合的ovs以及与集成gpu相组合的ovs的性能。每种途径证明跨范围从20至400000的多个流的一致等级的吞吐量(单位为每秒百万分组)。另外,与集成gpu途径相组合的ovs具有比其他两种方案明显要高的性能。

用于性能测试的一个集合的硬件在下表1中示出。

表1

本文所述主题的其他方面在下列编号条款中提出:

1.一种用于执行流分类的方法,包括:

在中央处理单元(cpu)和图形处理单元(gpu)的每个的可访问的存储器的多个缓冲器中缓冲多个分组;

使用所述gpu来执行使用多个工作组的所述多个分组的并行流分类,每个工作组与工作项的相应集合关联并且用来使用批量过程来处理分组的相应批量;

对于由批量过程所处理的每个分组,

通过将由所述分组的报头中的字段所定义的元组与工作项的多个子表之一中的规则进行匹配,来执行使用所述工作项的分组的流分类,其中所述多个子表按照搜索顺序来顺序搜索;

保持一个或多个命中计数直方图,其中每次找到给定子表中的规则的元组匹配时,使那个子表的所述命中计数递增;以及

使用命中计数直方图来重新排序一个或多个工作项的所述子表的所述搜索顺序。

2.如权利要求1所述的方法,其中所述方法在包括cpu和集成gpu的处理器上执行。

3.如权利要求1所述的方法,还包括:

保持全局命中计数直方图,其中所述全局命中计数直方图存储跨全部所述工作项并且跨全部所述工作组的每个子表的命中计数的集合。

4.如权利要求3所述的方法,还包括:

存储每个工作组的局部直方图,其包含由给定批量过程的所述工作组的工作项所处理的每个子表的命中计数;

与完成批量过程结合,

采用所述局部命中计数直方图来更新所述全局命中计数直方图;以及

重置所述局部命中计数直方图。

5.如权利要求4所述的方法,还包括:

基于所述全局命中计数直方图的当前状态周期地重新排序一个或多个工作项的所述子表的所述顺序。

6.如权利要求1所述的方法,其中对于给定工作组的给定批量过程,并行地执行所述批量中的分组的至少一部分的流分类。

7.如权利要求1所述的方法,其中对于给定工作组的给定批量过程,并行地执行所述批量中的全部所述分组的流分类。

8.如权利要求1所述的方法,其中所述方法通过运行每个工作组的连续gpu线程来实现。

9.如权利要求1所述的方法,其中所述方法使用在cpu上运行的openvswitch软件组件来实现。

10.如权利要求1所述的方法,其中所述方法使用在cpu上运行的数据平面开发套件(dpdk)软件组件来实现。

11.一种系统,包括:

处理器,具有包括多个处理器核的中央处理单元(cpu)、具有多个处理元件的图形处理单元(gpu)和存储器控制器,所述处理器还包括互连所述处理器核、gpu和存储器控制器的互连电路;

系统存储器,耦合到所述存储器控制器;

一个或多个存储装置,具有在其中存储的包含软件组件的指令,配置成在所述处理器核和gpu处理元件上运行,其中在运行时,所述指令使所述系统能够:

在所述cpu和gpu的每个的可访问的系统存储器的共享部分的多个缓冲器中缓冲多个分组;

经由所述gpu处理元件上的所述指令的一部分的执行,来执行使用多个工作组的所述多个分组的并行流分类,每个工作组与工作项的相应集合关联并且用来使用批量过程来处理分组的相应批量;

对于由批量过程所处理的每个分组,

通过将由所述分组的报头中的字段所定义的元组与工作项的多个子表之一中的规则进行匹配,来执行使用所述工作项的分组的流分类,其中所述多个子表按照搜索顺序来顺序搜索;

保持一个或多个命中计数直方图,其中每次找到给定子表中的规则的元组匹配时,使那个子表的所述命中计数递增;以及

采用命中计数直方图来重新排序一个或多个工作项的所述子表的所述搜索顺序。

12.如权利要求11所述的系统,其中所述指令的执行还使所述系统能够:

保持全局命中计数直方图,其中所述全局命中计数直方图存储跨全部所述工作项并且跨全部所述工作组的每个子表的命中计数的集合。

13.如权利要求12所述的系统,其中所述指令的执行还使所述系统能够:

存储每个工作组的局部直方图,其包含由给定批量过程的所述工作组的工作项所处理的每个子表的命中计数;

与完成批量过程结合,

采用所述局部命中计数直方图来更新所述全局命中计数直方图;以及

重置所述局部命中计数直方图。

14.如权利要求13所述的系统,其中所述指令的执行还使所述系统能够:

基于所述全局命中计数直方图的当前状态周期地重新排序一个或多个工作项的所述子表的所述顺序。

15.如权利要求11所述的系统,其中对于给定工作组的给定批量过程,使用所述gpu上的处理元件并行地执行所述批量中的分组的至少一部分的流分类。

16.如权利要求11所述的系统,其中对于给定工作组的给定批量过程,使用所述gpu上的处理元件并行地执行所述批量中的全部所述分组的流分类。

17.如权利要求11所述的系统,其中流分类操作通过运行每个工作组的连续gpu线程来实现。

18.如权利要求11所述的系统,其中所述软件组件包括openvswitch软件组件,其配置成在所述处理器核上运行。

19.如权利要求11所述的系统,其中所述软件组件包括数据平面开发套件(dpdk)软件组件,其配置成在所述处理器核上运行。

20.一个或多个非暂时机器可读介质,具有在其上存储的包含软件组件的指令,配置成在包括多个处理器核并且具有包括多个处理元件的集成图形处理单元(gpu)的处理器上运行,所述处理器安装在包括系统存储器(其耦合到所述处理器)的计算平台中,其中在所述处理器上的所述指令的执行时,使所述计算平台能够:

在所述cpu和gpu的每个的可访问的系统存储器的共享部分的多个缓冲器中缓冲多个分组;

经由所述gpu处理元件上的所述指令的一部分的执行,来执行使用多个工作组的所述多个分组的并行流分类,每个工作组与工作项的相应集合关联并且用来使用批量过程来处理分组的相应批量;

对于由批量过程所处理的每个分组,

通过将由所述分组的报头中的字段所定义的元组与工作项的多个子表之一中的规则进行匹配,来执行使用所述工作项的分组的流分类,其中所述多个子表按照搜索顺序来顺序搜索;

保持一个或多个命中计数直方图,其中每次找到给定子表中的规则的元组匹配时,使那个子表的所述命中计数递增;以及

采用命中计数直方图来重新排序一个或多个工作项的所述子表的所述搜索顺序。

21.如权利要求20所述的一个或多个非暂时机器可读介质,其中所述指令的执行还使所述计算平台能够:

保持全局命中计数直方图,其中所述全局命中计数直方图存储跨全部所述工作项并且跨全部所述工作组的每个子表的命中计数的集合。

22.如权利要求21所述的一个或多个非暂时机器可读介质,其中所述指令的执行还使所述计算平台能够:

存储每个工作组的局部直方图,其包含由给定批量过程的所述工作组的工作项所处理的每个子表的命中计数;

与完成批量过程结合,

采用所述局部命中计数直方图来更新所述全局命中计数直方图;以及

重置所述局部命中计数直方图。

23.如权利要求22所述的一个或多个非暂时机器可读介质,其中所述指令的执行还使所述计算平台能够:

基于所述全局命中计数直方图的当前状态周期地重新排序一个或多个工作项的所述子表的所述顺序。

24.如权利要求20所述的一个或多个非暂时机器可读介质,其中对于给定工作组的给定批量过程,使用所述gpu上的处理元件并行地执行所述批量中的全部所述分组的流分类。

25.如权利要求20所述的一个或多个非暂时机器可读介质,其中流分类操作通过运行每个工作组的连续gpu线程来实现。

26.一种系统,包括:

处理器,具有包括多个处理器核的中央处理单元(cpu)、具有多个处理元件的图形处理单元(gpu)和存储器控制器,所述处理器还包括互连所述处理器核、gpu和存储器控制器的互连电路;

系统存储器,耦合到所述存储器控制器;以及

用于执行下列步骤的部件:

在所述cpu和gpu的每个的可访问的系统存储器的共享部分的多个缓冲器中缓冲多个分组;

经由所述gpu处理元件上的所述指令的一部分的执行,来执行使用多个工作组的所述多个分组的并行流分类,每个工作组与工作项的相应集合关联并且用来使用批量过程来处理分组的相应批量;

对于由批量过程所处理的每个分组,

通过将由所述分组的报头中的字段所定义的元组与工作项的多个子表之一中的规则进行匹配,来执行使用所述工作项的分组的流分类,其中所述多个子表按照搜索顺序来顺序搜索;

保持一个或多个命中计数直方图,其中每次找到给定子表中的规则的元组匹配时,使那个子表的所述命中计数递增;以及

采用命中计数直方图来重新排序一个或多个工作项的所述子表的所述搜索顺序。

27.如权利要求26所述的系统,还包括用于保持全局命中计数直方图的部件,其中所述全局命中计数直方图存储跨全部所述工作项并且跨全部所述工作组的每个子表的命中计数的集合。

28.如权利要求27所述的系统,还包括用于执行下列步骤的部件:

存储每个工作组的局部直方图,其包含由给定批量过程的所述工作组的工作项所处理的每个子表的命中计数;

与完成批量过程结合,

采用所述局部命中计数直方图来更新所述全局命中计数直方图;以及

重置所述局部命中计数直方图。

29.如权利要求28所述的系统,还包括用于基于所述全局命中计数直方图的当前状态周期地重新排序一个或多个工作项的所述子表的所述顺序的部件。

30.如权利要求26所述的系统,其中对于给定工作组的给定批量过程,使用所述gpu上的处理元件并行地执行所述批量中的分组的至少一部分的流分类。

31.如权利要求26所述的系统,其中对于给定工作组的给定批量过程,使用所述gpu上的处理元件并行地执行所述批量中的全部所述分组的流分类。

32.如权利要求26所述的系统,其中流分类操作通过运行每个工作组的连续gpu线程来实现。

33.如权利要求26所述的系统,其中用于元件的所述部件包括openvswitch软件组件,其配置成在所述处理器核上运行。

34.如权利要求11所述的系统,其中用于元件的所述部件包括数据平面开发套件(dpdk)软件组件,其配置成在所述处理器核上运行。

35.一种用于执行流分类的方法,包括:

在中央处理单元(cpu)和图形处理单元(gpu)的每个的可访问的存储器的多个缓冲器中缓冲多个分组;

定义要用于匹配由所述分组的一个或多个报头字段中包含的数据所定义的元组的子表集合中的多个子表的每个中的规则;

执行使用多个工作组的所述多个分组的并行流分类,每个工作组与工作项的相应集合关联并且用来使用批量过程来处理分组的相应批量;

对于由批量过程所处理的每个分组,

使用所述gpu来执行使用多个工作项的所述分组的并行流分类,每个工作项实现搜索所述子表集合中的所述子表的一部分以获得匹配所述分组的所述元组的规则,其中与工作组关联的所述工作项组织成使得有可能搜索每个分组的所述子表集合中的所述多个子表的每个;以及

将所述分组分类成与匹配所述分组的所述元组的所述规则对应的流。

36.如权利要求35所述的方法,其中所述方法在包括cpu和集成gpu的处理器上执行。

37.如权利要求35或36所述的方法,其中在所述子表集合中存在n个子表,并且在工作组中存在m个工作项,以及其中所述工作项组织成使得每个工作项搜索n/m个子表。

38.如权利要求35-37中的任一项所述的方法,其中与工作组关联的每个工作项执行对由所述工作组所处理的每批分组的单个分组的子表元组搜索。

39.如权利要求35-38中的任一项所述的方法,其中与工作组关联的每个工作项执行对由所述工作组所处理的每批分组的两个或更多分组的子表元组搜索。

40.如权利要求35-39中的任一项所述的方法,其中对于给定工作组的给定批量过程,并行地执行所述批量中的分组的至少一部分的流分类。

41.如权利要求35-40中的任一项所述的方法,其中对于给定工作组的给定批量过程,并行地执行所述批量中的全部所述分组的流分类。

42.如权利要求35-41中的任一项所述的方法,其中所述方法通过运行每个工作组的连续gpu线程来实现。

43.如权利要求35-42中的任一项所述的方法,其中所述方法使用在cpu上运行的openvswitch软件组件来实现。

44.如权利要求35-43中的任一项所述的方法,其中所述方法使用在cpu上运行的数据平面开发套件软件组件来实现。

45.一种系统,包括:

处理器,具有包括多个处理器核的中央处理单元(cpu)、具有多个处理元件的图形处理单元(gpu)和存储器控制器,所述处理器还包括互连所述处理器核、gpu和存储器控制器的互连电路;

系统存储器,耦合到所述存储器控制器;

一个或多个存储装置,具有在其中存储的包含软件组件的指令,配置成在所述处理器核和gpu处理元件上运行,其中在运行时,所述指令使所述系统能够:

在中央处理单元(cpu)和图形处理单元(gpu)的每个的可访问的所述系统的存储器的共享部分的多个缓冲器中缓冲多个分组;

在系统存储器的所述共享部分中存储多个子表,每个子表包括要用于匹配由所述分组的一个或多个报头字段中包含的数据所定义的元组的多个规则;

执行使用多个工作组的所述多个分组的并行流分类,每个工作组与工作项的相应集合关联并且用来使用批量过程来处理分组的相应批量;

对于由批量过程所处理的每个分组,

使用所述gpu来执行使用多个工作项的所述分组的并行流分类,每个工作项实现搜索所述子表集合中的所述子表的一部分以获得匹配所述分组的所述元组的规则,其中与工作组关联的所述工作项组织成使得有可能搜索每个分组的所述子表集合中的所述多个子表的每个;以及

将所述分组分类成与匹配所述分组的所述元组的所述规则对应的流。

46.如权利要求45所述的系统,其中在所述子表集合中存在n个子表,并且在工作组中存在m个工作项,以及其中所述工作项组织成使得每个工作项搜索n/m个子表。

47.如权利要求45或46所述的系统,其中与工作组关联的每个工作项执行对由所述工作组所处理的每批分组的单个分组的子表元组搜索。

48.如权利要求45-47中的任一项所述的系统,其中与工作组关联的每个工作项执行对由所述工作组所处理的每批分组的两个或更多分组的子表元组搜索。

49.如权利要求45-48中的任一项所述的系统,其中对于给定工作组的给定批量过程,并行地执行所述批量中的分组的至少一部分的流分类。

50.如权利要求45-49中的任一项所述的系统,其中对于给定工作组的给定批量过程,并行地执行所述批量中的全部所述分组的流分类。

51.如权利要求45-50中的任一项所述的系统,其中对每个工作组运行指令的连续gpu线程。

52.如权利要求45-51中的任一项所述的系统,其中所述软件组件包括openvswitch软件组件,其配置成在所述处理器核上运行。

53.如权利要求45-52中的任一项所述的系统,其中所述软件组件包括数据平面开发套件(dpdk)软件组件,其配置成在所述处理器核上运行。

54.一个或多个非暂时机器可读介质,具有在其上存储的包含软件组件的指令,配置成在包括多个处理器核并且具有包括多个处理元件的集成图形处理单元(gpu)的处理器上运行,所述处理器安装在包括系统存储器(其耦合到所述处理器)的计算平台中,其中在所述处理器上的所述指令的执行时,使所述计算平台能够:

在中央处理单元(cpu)和图形处理单元(gpu)的每个的可访问的所述系统的存储器的共享部分的多个缓冲器中缓冲多个分组;

在系统存储器的所述共享部分中存储多个子表,每个子表包括要用于匹配由所述分组的一个或多个报头字段中包含的数据所定义的元组的多个规则;

执行使用多个工作组的所述多个分组的并行流分类,每个工作组与工作项的相应集合关联并且用来使用批量过程来处理分组的相应批量;

对于由批量过程所处理的每个分组,

使用所述gpu来执行使用多个工作项的所述分组的并行流分类,每个工作项实现搜索所述子表集合中的所述子表的一部分以获得匹配所述分组的所述元组的规则,其中与工作组关联的所述工作项组织成使得有可能搜索每个分组的所述子表集合中的所述多个子表的每个;以及

将所述分组分类成与匹配所述分组的所述元组的所述规则对应的流。

55.如权利要求54所述的一个或多个非暂时机器可读介质,其中在所述子表集合中存在n个子表,并且在工作组中存在m个工作项,以及其中所述工作项组织成使得每个工作项搜索n/m个子表。

56.如权利要求54或55所述的一个或多个非暂时机器可读介质,其中与工作组关联的每个工作项执行对由所述工作组所处理的每批分组的单个分组的子表元组搜索。

57.如权利要求54-56中的任一项所述的一个或多个非暂时机器可读介质,其中与工作组关联的每个工作项执行对由所述工作组所处理的每批分组的两个或更多分组的子表元组搜索。

58.如权利要求54-57中的任一项所述的一个或多个非暂时机器可读介质,其中对于给定工作组的给定批量过程,并行地执行所述批量中的分组的至少一部分的流分类。

59.如权利要求54-57中的任一项所述的一个或多个非暂时机器可读介质,其中对于给定工作组的给定批量过程,并行地执行所述批量中的全部所述分组的流分类。

60.一种系统,包括:

处理器,具有包括多个处理器核的中央处理单元(cpu)、具有多个处理元件的图形处理单元(gpu)和存储器控制器,所述处理器还包括互连所述处理器核、gpu和存储器控制器的互连电路;

系统存储器,耦合到所述存储器控制器;以及

用于执行下列步骤的部件:

在中央处理单元(cpu)和图形处理单元(gpu)的每个的可访问的所述系统的存储器的共享部分的多个缓冲器中缓冲多个分组;

在系统存储器的所述共享部分中存储多个子表,每个子表包括要用于匹配由所述分组的一个或多个报头字段中包含的数据所定义的元组的多个规则;

执行使用多个工作组的所述多个分组的并行流分类,每个工作组与工作项的相应集合关联并且用来使用批量过程来处理分组的相应批量;

对于由批量过程所处理的每个分组,

使用所述gpu来执行使用多个工作项的所述分组的并行流分类,每个工作项实现搜索所述子表集合中的所述子表的一部分以获得匹配所述分组的所述元组的规则,其中与工作组关联的所述工作项组织成使得有可能搜索每个分组的所述子表集合中的所述多个子表的每个;以及

将所述分组分类成与匹配所述分组的所述元组的所述规则对应的流。

61.如权利要求60所述的系统,其中在所述子表集合中存在n个子表,并且在工作组中存在m个工作项,以及其中所述工作项组织成使得每个工作项搜索n/m个子表。

62.如权利要求60或61所述的系统,其中与工作组关联的每个工作项执行对由所述工作组所处理的每批分组的单个分组的子表元组搜索。

63.如权利要求60-62中的任一项所述的系统,其中与工作组关联的每个工作项执行对由所述工作组所处理的每批分组的两个或更多分组的子表元组搜索。

64.如权利要求60-63中的任一项所述的系统,其中对于给定工作组的给定批量过程,并行地执行所述批量中的分组的至少一部分的流分类。

65.如权利要求60-64中的任一项所述的系统,其中对于给定工作组的给定批量过程,并行地执行所述批量中的全部所述分组的流分类。

66.如权利要求60-66中的任一项所述的系统,其中对每个工作组运行指令的连续gpu线程。

67.如权利要求60-67中的任一项所述的系统,其中用于元件的所述部件包括openvswitch软件组件,其配置成在所述处理器核上运行。

68.如权利要求60-68所述的系统,其中用于元件的所述部件包括数据平面开发套件(dpdk)软件组件,其配置成在所述处理器核上运行。

69.一种用于执行流分类的方法,包括:

在中央处理单元(cpu)和图形处理单元(gpu)的每个的可访问的存储器的多个缓冲器中缓冲多个分组;

定义要用于匹配由所述分组的一个或多个报头字段中包含的数据所定义的元组的多个子表的每个中的规则;

对于所述多个分组的每个,

采用前置滤波器来从所述多个子表之中识别要对所述分组的元组的元组匹配来搜索的子表集合;

使用所述gpu来执行使用多个工作项的所述分组的并行流分类,每个工作项实现搜索所述子表集合中的所述子表的一个或多个以获得匹配所述分组的所述元组的规则,通过所述多个工作项所实现的所述搜索并行地执行;以及

将所述分组分类成与匹配所述分组的所述元组的所述规则对应的流。

70.如权利要求69所述的方法,还包括使用所述gpu来执行使用并行性的两级的所述分组的流分类。

71.如权利要求70所述的方法,其中使用并行性的两级的所述分组的流分类包括:

使用分组的批量来处理所述多个分组;

对于分组的给定批量,

对分组的所述批量中的每个分组进行前置滤波,

指配用于处理所述分组的相应工作组,与所述多个工作项关联的所述工作组用来并行地执行所述分组的流分类,通过所述多个工作项的所述分组的所述流分类组成并行性的第一级,

其中所述相应工作组中的所述分组的处理对分组的所述批量并行地执行,从而组成并行性的第二级。

72.如权利要求71所述的方法,还包括:

发起用于分组的第一批量的处理的主线程;

经由所述主线程使将要运行的相应内核入队,以实现每个相应工作组的元组搜索;以及

使所述主线程重新发起它自己,以执行分组的下一批量的处理。

73.如权利要求71所述的方法,其中每个工作项执行单个子表的子表元组搜索。

74.如权利要求69-73中的任一项所述的方法,其中所述方法在包括cpu和集成gpu的处理器上执行。

75.如权利要求69-74中的任一项所述的方法,其中所述前置滤波器使用一个或多个bloom滤波器来实现。

76.如权利要求69-75中的任一项所述的方法,其中所述前置滤波器使用bloom滤波器的向量来实现。

77.如权利要求69-76中的任一项所述的方法,其中所述前置滤波器使用采用cuckoo散列(其识别要对每个分组来搜索的子表)的机制来实现。

78.如权利要求69-77中的任一项所述的方法,其中所述方法使用在cpu上运行的openvswitch软件组件来实现。

79.一种系统,包括:

处理器,具有包括多个处理器核的中央处理单元(cpu)、具有多个处理元件的图形处理单元(gpu)和存储器控制器,所述处理器还包括互连所述处理器核、gpu和存储器控制器的互连电路;

系统存储器,耦合到所述存储器控制器;

一个或多个存储装置,具有在其中存储的包含软件组件的指令,配置成在所述处理器核和gpu处理元件上运行,其中在运行时,所述指令使所述系统能够:

在中央处理单元(cpu)和图形处理单元(gpu)的每个的可访问的所述系统存储器的共享部分的多个缓冲器中缓冲多个分组;

在系统存储器的所述共享部分中存储多个子表,每个子表包括要用于匹配由所述分组的一个或多个报头字段中包含的数据所定义的元组的多个规则;

对于所述多个分组的每个,

采用前置滤波器从所述多个子表之中识别要对所述分组的元组的元组匹配来搜索的子表集合;

使用所述gpu来执行使用多个工作项的所述分组的并行流分类,每个工作项实现搜索所述子表集合中的所述子表的一个或多个以获得匹配所述分组的所述元组的规则,通过所述多个工作项所实现的所述搜索并行地执行;以及

将所述分组分类成与匹配所述分组的所述元组的所述规则对应的流。

80.如权利要求11所述的系统,其中在所述gpu上的所述指令的一部分的执行使所述系统能够执行使用并行性的两级的所述多个分组的流分类。

81.如权利要求12所述的系统,其中使用并行性的两级的所述多个分组的流分类包括:

使用分组的批量来处理所述多个分组;

对于分组的给定批量,

对分组的所述批量中的每个分组进行前置滤波;

指配用于处理所述分组的相应工作组,与所述多个工作项关联的所述工作组用来并行地执行所述分组的流分类,通过所述多个工作项的所述分组的所述流分类组成并行性的第一级,

其中所述相应工作组中的所述分组的处理对分组的所述批量并行地执行,从而组成并行性的第二级。

82.如权利要求13所述的系统,其中所述指令的执行还使所述系统能够:

发起用于分组的第一批量的处理的主线程;

经由所述主线程使将要运行的相应内核入队,以实现每个相应工作组的元组搜索;以及

使所述主线程重新发起它自己,以执行分组的下一批量的处理。

83.如权利要求13所述的系统,其中每个工作项执行单个子表的子表元组搜索。

84.如权利要求11所述的系统,其中所述前置滤波器使用一个或多个bloom滤波器来实现。

85.如权利要求11所述的系统,其中所述前置滤波器使用bloom滤波器的向量来实现。

86.如权利要求11所述的系统,其中所述前置滤波器使用采用cuckoo散列(其识别要对每个分组来搜索的子表)的机制来实现。

87.如权利要求11所述的系统,其中操作使用在cpu上运行的openvswitch软件组件来实现。

88.一个或多个非暂时机器可读介质,具有在其上存储的包含软件组件的指令,配置成在包括多个处理器核并且具有包括多个处理元件的集成图形处理单元(gpu)处理器上运行,所述处理器安装在包括系统存储器(其耦合到所述处理器)的计算平台中,其中在所述处理器上的所述指令的执行时,使所述计算平台能够:

在中央处理单元(cpu)和图形处理单元(gpu)的每个的可访问的所述系统存储器的共享部分的多个缓冲器中缓冲多个分组;

在系统存储器的所述共享部分中存储多个子表,每个子表包括要用于匹配由所述分组的一个或多个报头字段中包含的数据所定义的元组的多个规则;

对于所述多个分组的每个,

采用前置滤波器从所述多个子表之中识别要对所述分组的元组的元组匹配来搜索的子表集合;

使用所述gpu来执行使用多个工作项的所述分组的并行流分类,每个工作项实现搜索所述子表集合中的所述子表的一个或多个以获得匹配所述分组的所述元组的规则,通过所述多个工作项所实现的所述搜索并行地执行;以及

将所述分组分类成与匹配所述分组的所述元组的所述规则对应的流。

89.如权利要求88所述的一个或多个非暂时机器可读介质,其中在所述gpu上的所述指令的一部分的执行使所述系统能够执行使用并行性的两级的所述多个分组的流分类。

90.如权利要求89所述的一个或多个非暂时机器可读介质,其中使用并行性的两级的所述多个分组的流分类包括:

使用分组的批量来处理所述多个分组;

对于分组的给定批量,

对分组的所述批量中的每个分组进行前置滤波,

指配用于处理所述分组的相应工作组,与所述多个工作项关联的所述工作组用来并行地执行所述分组的流分类,通过所述多个工作项的所述分组的所述流分类组成并行性的第一级,

其中所述相应工作组中的所述分组的处理对分组的所述批量并行地执行,从而组成并行性的第二级。

91.如权利要求90所述的一个或多个非暂时机器可读介质,其中所述指令的执行还使所述计算平台能够:

发起用于分组的第一批量的处理的主线程;

经由所述主线程使将要运行的相应内核入队,以实现每个相应工作组的元组搜索;以及

使所述主线程重新发起它自己,以执行分组的下一批量的处理。

92.如权利要求90所述的一个或多个非暂时机器可读介质,其中每个工作项执行单个子表的子表元组搜索。

93.如权利要求88-92中的任一项所述的一个或多个非暂时机器可读介质,其中所述前置滤波器使用一个或多个bloom滤波器来实现。

94.一种系统,包括:

处理器,具有包括多个处理器核的中央处理单元(cpu)、具有多个处理元件的图形处理单元(gpu)和存储器控制器,所述处理器还包括互连所述处理器核、gpu和存储器控制器的互连电路;

系统存储器,耦合到所述存储器控制器;以及

用于执行下列步骤的部件:

在中央处理单元(cpu)和图形处理单元(gpu)的每个的可访问的所述系统存储器的共享部分的多个缓冲器中缓冲多个分组;

在系统存储器的所述共享部分中存储多个子表,每个子表包括要用于匹配由所述分组的一个或多个报头字段中包含的数据所定义的元组的多个规则;

对于所述多个分组的每个,

采用前置滤波器从所述多个子表之中识别要对所述分组的元组的元组匹配来搜索的子表集合;

使用所述gpu来执行使用多个工作项的所述分组的并行流分类,每个工作项实现搜索所述子表集合中的所述子表的一个或多个以获得匹配所述分组的所述元组的规则,通过所述多个工作项所实现的所述搜索并行地执行;以及

将所述分组分类成与匹配所述分组的所述元组的所述规则对应的流。

95.如权利要求94所述的系统,还包括用于执行使用并行性的两级的所述多个分组的流分类的部件。

96.如权利要求95所述的系统,还包括用于执行下列步骤的部件:

使用分组的批量来处理所述多个分组;

对于分组的给定批量,

对分组的所述批量中的每个分组进行前置滤波;以及

指配用于处理所述分组的相应工作组,与所述多个工作项关联的所述工作组用来并行地执行所述分组的流分类,通过所述多个工作项的所述分组的所述流分类组成并行性的第一级,

其中所述相应工作组中的所述分组的处理对分组的所述批量并行地执行,从而组成并行性的第二级。

97.如权利要求96所述的系统,还包括用于执行下列步骤的部件:

发起用于分组的第一批量的处理的主线程;

经由所述主线程使将要运行的相应内核入队,以实现每个相应工作组的元组搜索;以及

使所述主线程重新发起它自己,以执行分组的下一批量的处理。

98.如权利要求96所述的系统,其中每个工作项执行单个子表的子表元组搜索。

99.如权利要求94所述的系统,其中所述前置滤波器使用一个或多个bloom滤波器来实现。

100.如权利要求94所述的系统,其中所述前置滤波器使用bloom滤波器的向量来实现。

101.如权利要求94所述的系统,其中所述前置滤波器使用采用cuckoo散列(其识别要对每个分组来搜索的子表)的机制来实现。

102.如权利要求94-101中的任一项所述的系统,其中用于元件的所述部件包括在所述cpu上运行的openvswitch软件组件。

103.一种在计算平台(其具有包括具有多个处理器核的中央处理单元(cpu)以及具有包括多个处理元件的gpu资源的集成图形处理单元(gpu)的处理器)上用于选择处理模型以执行多个分组的流分类的方法,所述方法包括:

将所述计算平台配置成实现多个处理模型,其中所述多个处理模型的每个采用所述gpu上的处理资源来执行使用元组空间搜索的分组的流分类,其中所述元组空间搜索包括使用并行性的至少一级来搜索多个子表以获得具有所述多个分组的每个的元组的元组匹配的规则;

接收包含应用偏好的输入;

确定当前可用gpu资源;以及

考虑当前可用gpu资源基于所述应用偏好来选择处理模型。

104.如权利要求103所述的方法,其中所述多个处理模型包括实现具有gpu侧表排序(根据其,基于所述多个子表的每个的相对命中率周期地重新排序所述多个子表的搜索顺序)的分组级并行性的处理模型。

105.如权利要求104所述的方法,其中具有gpu侧表排序的所述分组级并行性处理模型包括:

在所述cpu和gpu的每个的可访问的存储器的多个缓冲器中缓冲多个分组;

使用所述gpu来执行使用多个工作组的所述多个分组的并行流分类,每个工作组与工作项的相应集合关联并且用来使用批量过程来处理分组的相应批量;

对于由批量过程所处理的每个分组,

通过将由所述分组的报头中的字段所定义的元组与工作项的多个子表之一中的规则进行匹配,来执行使用所述工作项的分组的流分类,其中所述多个子表按照搜索顺序来顺序搜索;

保持一个或多个命中计数直方图,其中每次找到给定子表中的规则的元组匹配时,使那个子表的所述命中计数递增;以及

使用命中计数直方图来重新排序一个或多个工作项的所述子表的所述搜索顺序。

106.如权利要求103所述的方法,其中所述多个处理模型包括实现并行性的两级(包括分组级并行性和子表级并行性)的处理模型。

107.如权利要求106所述的方法,其中实现并行性的两级的所述处理模型包括:

在中央处理单元(cpu)和图形处理单元(gpu)的每个的可访问的存储器的多个缓冲器中缓冲多个分组;

定义要用于匹配由所述分组的一个或多个报头字段中包含的数据所定义的元组的子表集合中的多个子表的每个中的规则;

执行使用多个工作组的所述多个分组的并行流分类,每个工作组与工作项的相应集合关联并且用来使用批量过程来处理分组的相应批量;

对于由批量过程所处理的每个分组,

使用所述gpu来执行使用多个工作项的所述分组的并行流分类,每个工作项实现搜索所述子表集合中的所述子表的一部分以获得匹配所述分组的所述元组的规则,其中与工作组关联的所述工作项组织成使得有可能搜索每个分组的所述子表集合中的所述多个子表的每个;以及

将所述分组分类成与匹配所述分组的所述元组的所述规则对应的流。

108.如权利要求103所述的方法,其中所述多个处理模型包括实现采用预筛选的动态二级并行处理的处理模型。

109.如权利要求108所述的方法,其中实现采用预筛选的动态二级并行处理的处理模型包括:

在所述cpu和gpu的每个的可访问的存储器的多个缓冲器中缓冲多个分组;

定义要用于匹配由所述分组的一个或多个报头字段中包含的数据所定义的元组的多个子表的每个中的规则;

对于所述多个分组的每个,

采用前置滤波器从所述多个子表之中识别要对所述分组的元组的元组匹配来搜索的子表集合;

使用所述gpu来执行使用多个工作项的所述分组的并行流分类,每个工作项实现搜索所述子表集合中的所述子表的一个或多个以获得匹配所述分组的所述元组的规则,通过由所述多个工作项所实现的所述搜索并行地执行;以及

将所述分组分类成与匹配所述分组的所述元组的所述规则对应的流。

110.如权利要求103-109中的任一项所述的方法,其中所接收的所述输入包括多个活动子表。

111.如权利要求103-110中的任一项所述的方法,其中所述应用偏好包括对最小等待时间进行优化的偏好。

112.如权利要求103-111中的任一项所述的方法,其中所接收的所述输入包括分组的传入吞吐量。

113.一种系统,包括:

处理器,具有包括多个处理器核的中央处理单元(cpu)、具有多个处理元件的图形处理单元(gpu)和存储器控制器,所述处理器还包括互连所述处理器核、gpu和存储器控制器的互连电路;

系统存储器,耦合到所述存储器控制器;

一个或多个存储装置,具有在其中存储的包含软件组件的指令,配置成在所述处理器核和gpu处理元件上运行,其中在运行时,所述指令使所述系统能够:

实现多个处理模型,其中所述多个处理模型的每个采用所述gpu上的处理资源来执行使用元组空间搜索的分组的流分类,其中所述元组空间搜索包括使用并行性的至少一级来搜索多个子表以获得具有所述多个分组的每个的元组的元组匹配的规则;

接收包含应用偏好的输入;

确定当前可用gpu资源;以及

考虑当前可用gpu资源基于所述应用偏好来选择处理模型。

114.如权利要求113所述的系统,其中所述多个处理模型包括实现具有gpu侧表排序(根据其,基于所述多个子表的每个的相对命中率周期地重新排序所述多个子表的搜索顺序)的分组级并行性的处理模型。

115.如权利要求114所述的系统,其中所述指令包括用于实现具有gpu侧表排序的所述分组级并行性处理模型的所述处理模型的软件组件,并且其中所述软件组件的执行使所述系统能够:

在所述cpu和gpu的每个的可访问的存储器的多个缓冲器中缓冲多个分组;

使用所述gpu来执行使用多个工作组的所述多个分组的并行流分类,每个工作组与工作项的相应集合关联并且用来使用批量过程来处理分组的相应批量;

对于由批量过程所处理的每个分组,

通过将由所述分组的报头中的字段所定义的元组与工作项的多个子表之一中的规则进行匹配,来执行使用所述工作项的分组的流分类,其中所述多个子表按照搜索顺序来顺序搜索;

保持一个或多个命中计数直方图,其中每次找到给定子表中的规则的元组匹配时,使那个子表的所述命中计数递增;以及

采用命中计数直方图来重新排序一个或多个工作项的所述子表的所述搜索顺序。

116.如权利要求113所述的系统,其中所述多个处理模型包括使用并行性的两级(包括分组级并行性和子表级并行性)来执行分组的流分类的处理模型。

117.如权利要求116所述的系统,其中所述指令包括用于实现使用并行性的两级来执行分组的流分类的所述处理模型的软件组件,并且其中所述软件组件的执行使所述系统能够:

在中央处理单元(cpu)和图形处理单元(gpu)的每个的可访问的所述系统的存储器的共享部分的多个缓冲器中缓冲多个分组;

在系统存储器的所述共享部分中存储多个子表,每个子表包括要用于匹配所述分组的一个或多个报头字段中包含的数据所定义的元组的多个规则;

执行使用多个工作组的所述多个分组的并行流分类,每个工作组与工作项的相应集合关联并且用来使用批量过程来处理分组的相应批量;

对于由批量过程所处理的每个分组,

使用所述gpu来执行使用多个工作项的所述分组的并行流分类,每个工作项实现搜索所述子表集合中的所述子表的一部分以获得匹配所述分组的所述元组的规则,其中与工作组关联的所述工作项组织成使得有可能搜索每个分组的所述子表集合中的所述多个子表的每个;以及

将所述分组分类成与匹配所述分组的所述元组的所述规则对应的流。

118.如权利要求113所述的系统,其中所述多个处理模型包括实现采用预筛选的动态二级并行处理的处理模型。

119.如权利要求118所述的系统,其中所述指令包括用于实现具有预筛选的动态二级并行处理的所述处理模型的软件组件,并且其中所述指令的执行使所述系统能够:

在中央处理单元(cpu)和图形处理单元(gpu)的每个的可访问的所述系统存储器的共享部分的多个缓冲器中缓冲多个分组;

在系统存储器的所述共享部分中存储多个子表,每个子表包括要用于匹配由所述分组的一个或多个报头字段中包含的数据所定义的元组的多个规则;

对于所述多个分组的每个,

采用前置滤波器从所述多个子表之中识别要对所述分组的元组的元组匹配来搜索的子表集合;

使用所述gpu来执行使用多个工作项的所述分组的并行流分类,每个工作项实现搜索所述子表集合中的所述子表的一个或多个以获得匹配所述分组的所述元组的规则,通过所述多个工作项所实现的所述搜索并行地执行;以及

将所述分组分类成与匹配所述分组的所述元组的所述规则对应的流。

120.如权利要求113-119中的任一项所述的系统,其中所接收的所述输入包括多个活动子表。

121.如权利要求113-120中的任一项所述的系统,其中所述应用偏好包括对最小等待时间进行优化的偏好。

122.如权利要求113-121中的任一项所述的系统,其中所接收的所述输入包括分组的传入吞吐量。

123.一个或多个非暂时机器可读介质,具有在其上存储的包含软件组件的指令,配置成在包括多个处理器核并且具有包括多个处理元件的集成图形处理单元(gpu)处理器上运行,所述处理器安装在包括系统存储器(其耦合到所述处理器)的计算平台中,其中在所述处理器上的所述指令的执行时,使所述计算平台能够:

实现多个处理模型,其中所述多个处理模型的每个采用所述gpu上的处理资源来执行使用元组空间搜索的分组的流分类,其中所述元组空间搜索包括使用并行性的至少一级来搜索多个子表以获得具有所述多个分组的每个的元组的元组匹配的规则;

接收包含应用偏好的输入;

确定当前可用gpu资源;以及

考虑当前可用gpu资源基于所述应用偏好来选择处理模型。

124.如权利要求123所述的一个或多个非暂时机器可读介质,其中所述多个处理模型包括实现具有gpu侧表排序(根据其,基于所述多个子表的每个的相对命中率周期地重新排序所述多个子表的搜索顺序)的分组级并行性的处理模型。

125.如权利要求123或124所述的一个或多个非暂时机器可读介质,其中所述多个处理模型包括使用并行性的两级(包括分组级并行性和子表级并行性)来执行分组的流分类的处理模型。

126.如权利要求123-125中的任一项所述的一个或多个非暂时机器可读介质,其中所述多个处理模型包括实现采用预筛选的动态二级并行处理的处理模型。

127.如权利要求123-126中的任一项所述的一个或多个非暂时机器可读介质,其中所述应用偏好包括对最小等待时间进行优化的偏好。

128.一种系统,包括:

处理器,具有包括多个处理器核的中央处理单元(cpu)、具有多个处理元件的图形处理单元(gpu)和存储器控制器,所述处理器还包括互连所述处理器核、gpu和存储器控制器的互连电路;

系统存储器,耦合到所述存储器控制器;以及

用于执行下列步骤的部件:

实现多个处理模型,其中所述多个处理模型的每个采用所述gpu上的处理资源来执行使用元组空间搜索的分组的流分类,其中所述元组空间搜索包括使用并行性的至少一级来搜索多个子表以获得具有所述多个分组的每个的元组的元组匹配的规则;

接收包含应用偏好的输入;

确定当前可用gpu资源;以及

考虑当前可用gpu资源基于所述应用偏好来选择处理模型。

129.如权利要求128所述的系统,其中所述多个处理模型包括实现具有gpu侧表排序(根据其,基于所述多个子表的每个的相对命中率周期地重新排序所述多个子表的搜索顺序)的分组级并行性的处理模型。

130.如权利要求129所述的系统,还包括用于执行下列步骤的部件:

在所述cpu和gpu的每个的可访问的存储器的多个缓冲器中缓冲多个分组;

使用所述gpu来执行使用多个工作组的所述多个分组的并行流分类,每个工作组与工作项的相应集合关联并且用来使用批量过程来处理分组的相应批量;

对于由批量过程所处理的每个分组,

通过将所述分组的报头中的字段所定义的元组与工作项的多个子表之一中的规则进行匹配,来执行使用所述工作项的分组的流分类,其中所述多个子表按照搜索顺序来顺序搜索;

保持一个或多个命中计数直方图,其中每次找到给定子表中的规则的元组匹配时,使那个子表的所述命中计数递增;以及

采用命中计数直方图来重新排序一个或多个工作项的所述子表的所述搜索顺序。

131.如权利要求128所述的系统,其中所述多个处理模型包括使用并行性的两级(包括分组级并行性和子表级并行性)来执行分组的流分类的处理模型。

132.如权利要求131所述的系统,还包括用于执行下列步骤的部件:

在中央处理单元(cpu)和图形处理单元(gpu)的每个的可访问的所述系统的存储器的共享部分的多个缓冲器中缓冲多个分组;

在系统存储器的所述共享部分中存储多个子表,每个子表包括要用于匹配由所述分组的一个或多个报头字段中包含的数据所定义的元组的多个规则;

执行使用多个工作组的所述多个分组的并行流分类,每个工作组与工作项的相应集合关联并且用来使用批量过程来处理分组的相应批量;

对于由批量过程所处理的每个分组,

使用所述gpu来执行使用多个工作项的所述分组的并行流分类,每个工作项实现搜索所述子表集合中的所述子表的一部分以获得匹配所述分组的所述元组的规则,其中与工作组关联的所述工作项组织成使得有可能搜索每个分组的所述子表集合中的所述多个子表的每个;以及

将所述分组分类成与匹配所述分组的所述元组的所述规则对应的流。

133.如权利要求128所述的系统,其中所述多个处理模型包括实现具有预筛选的动态二级并行处理的处理模型。

134.如权利要求133所述的系统,还包括用于执行下列步骤的部件:

在中央处理单元(cpu)和图形处理单元(gpu)的每个可访问的所述系统存储器的共享部分的多个缓冲器中缓冲多个分组;

在系统存储器的所述共享部分中存储多个子表,每个子表包括要用于匹配由所述分组的一个或多个报头字段中包含的数据所定义的元组的多个规则;

对于所述多个分组的每个,

采用前置滤波器从所述多个子表之中识别要对所述分组的元组的元组匹配来搜索的子表集合;

使用所述gpu来执行使用多个工作项的所述分组的并行流分类,每个工作项实现搜索所述子表集合中的所述子表的一个或多个以获得匹配所述分组的所述元组的规则,通过所述多个工作项所实现的所述搜索并行地执行;以及

将所述分组分类成与匹配所述分组的所述元组的所述规则对应的流。

135.如权利要求128-134中的任一项所述的系统,其中所接收的所述输入包括多个活动子表。

136.如权利要求128-135中的任一项所述的系统,其中所述应用偏好包括对最小等待时间进行优化的偏好。

137.如权利要求128-136中的任一项所述的系统,其中所接收的所述输入包括分组的传入吞吐量。

虽然一些实施例已经参照具体实现来描述,但是按照一些实施例,其他实现是可能的。另外,附图所示和/或本文所述的元件或其他特征的布置和/或顺序无需按照所示和所述的特定方式来布置。许多其他布置按照一些实施例是可能的。

在附图所示的每个系统中,一些情况下的元件各自可具有相同的附图标记或者不同的附图标记,以暗示所表示的元件可能是不同的和/或相似的。但是,元件可足够灵活以具有不同实现,并且与本文所示或所述的系统的一些或全部配合工作。附图所示的各种元件可以是相同或不同的。哪一个称作第一元件而哪一个称作第二元件是任意的。

在本描述和权利要求书中,可使用术语“耦合”和“连接”及其派生。应当理解,这些术语并不是要作为彼此的同义词。相反,在具体实施例中,“连接”可用来指示两个或更多元件相互直接物理或电接触。“耦合”可表示两个或更多元件直接物理或电接触。但是,“耦合”也可表示两个或更多元件不是相互直接接触,但是仍然相互配合或交互。

实施例是本发明的实现或示例。本说明书中提到“实施例”、“一个实施例”、“一些实施例”或“其他实施例”表示结合实施例所述的特定功能、结构或特性包含在至少一些实施例但不一定是本发明的全部实施例中。出现“实施例”、“一个实施例”或“一些实施例”的各种出现不一定都表示相同实施例。

本文所述和所示的组件、特征、结构、特性等并非全部需要包含在具体一个或多个实施例中。例如,如果本说明书陈述组件、特征、结构或特性“可”、“可能”“能”、或“能够”被包含,则不要求包含那个特定组件、特征、结构或特性。如果本说明书或权利要求书提到的“一”(a或an)元件,则并不表示仅存在元件中的一个。如果本说明书或权利要求书提到“附加”元件,则并不排除存在多于一个附加元件。

算法在此以及一般被认为是产生预期结果的动作或操作自洽序列。这些包括物理量的物理操纵。这些量通常(但不一定)采取能够被存储、传递、组合、比较以及以其他方式操控的电或磁信号的形式。主要由于普遍使用的原因,将这些信号表示为位、值、元素、符号、字符、术语、数字等有时证明是便利的。但是应当理解,所有这些及类似项均与适当的物理量关联,并且只是应用于这些量的便捷标签。

以上详细描述中的斜体字母(例如‘l’、‘m’、‘n’等)用来示出整数,以及特定字母的使用并不局限于具体实施例。此外,同一字母可在单独的权利要求中用来表示单独的整数,或者可使用不同字母。另外,详细描述中的特定字母的使用可以或者可以不匹配涉及详细描述中的相同主题的权利要求中所使用的字母。

如上所述,本文的实施例的各个方面可通过对应软件和/或固件组件及应用(例如由嵌入式处理器等所运行的软件和/或固件)来促进。因此,本发明的实施例可用作或者用来支持软件程序、软件模块、固件和/或在某种形式的处理器、处理核或嵌入式逻辑上运行的分布式软件、在处理器或核上运行或者在非暂时计算机可读或机器可读存储介质之上或之内以其他方式实现的虚拟机。非暂时计算机可读或机器可读存储介质包括用于存储或传送采用由机器(例如计算机)可读的形式的信息的任何机制。例如,非暂时计算机可读或机器可读存储介质包括提供(即,存储和/或传送)采取由计算机或计算机器(例如计算装置、电子系统等)可访问形式的信息的任何机制,例如可记录/不可记录介质(例如只读存储器(rom)、随机存取存储器(ram)、磁盘存储介质、光存储介质、闪速存储器装置等)。内容可以是直接可执行的(“对象”或“可执行”形式)源代码或者差代码(“δ”或“补丁”代码)。非暂时计算机可读或机器可读存储介质还可包括存储装置或数据库,从其中能够下载内容。非暂时计算机可读或机器可读存储介质还可包括装置或产品,其上具有在销售或递送时存储了内容。因此,递送具有所存储内容的装置或者提供通过通信介质下载的内容可被理解为提供一种制造产品,其包括非暂时计算机可读或机器可读存储介质,其具有本文所述的这种内容。

本文所述的以上称作进程、服务器或工具的各种组件可以是用于执行所述功能的部件。由本文所述的各种组件所执行的操作和功能可通过处理元件上运行的软件、经由嵌入式硬件等或者硬件和软件的任何组合来实现。这类组件可实现为软件模块、硬件模块、专用硬件(例如专用硬件、asic、dsp等)、嵌入式控制器、硬连线电路、硬件逻辑等。软件内容(例如数据、指令、配置信息等)可经由制造产品来提供,制造产品包括非暂时计算机可读或机器可读存储介质,其提供表示能够运行的指令的内容。内容可导致计算机执行本文所述的各种功能/操作。

如本文所使用,通过术语“…的至少一个”所连接的项列表能够表示所列术语的任何组合。例如,短语“a、b或c中的至少一个”能够表示:a;b;c;a和b;a和c;b和c;或者a、b和c。

包括“摘要”中描述的本发明的所示实施例的以上描述并不打算是详细的或者将本发明局限于所公开的精确形式。虽然本文为了便于说明的目的而描述本发明的具体实施例和示例,但如相关领域的技术人员将会知道的,在本发明的范围之内,各种等效修改是可能的。

能够根据以上详细描述对本发明进行这些修改。以下权利要求书中使用的术语不应当被理解为将本发明局限于本说明书和附图中公开的具体实施例。相反,本发明的范围完全由以下权利要求书(其按照权利要求解释的已制定原则来理解)来确定。

本发明还公开了一组技术方案,如下:

技术方案1.一种用于执行流分类的方法,包括:

在中央处理单元(cpu)和图形处理单元(gpu)的每个的可访问的存储器的多个缓冲器中缓冲多个分组;

使用所述gpu来执行使用多个工作组的所述多个分组的并行流分类,每个工作组与工作项的相应集合关联并且用来使用批量过程来处理分组的相应批量;

对于由批量过程所处理的每个分组,

通过将由所述分组的报头中的字段所定义的元组与工作项的多个子表之一中的规则进行匹配,来执行使用所述工作项的分组的流分类,其中所述多个子表按照搜索顺序来顺序搜索;

保持一个或多个命中计数直方图,其中每次找到给定子表中的规则的元组匹配时,使那个子表的所述命中计数递增;以及

使用命中计数直方图来重新排序一个或多个工作项的所述子表的所述搜索顺序。

技术方案2.如技术方案1所述的方法,其中所述方法在包括cpu和集成gpu的处理器上执行。

技术方案3.如技术方案1所述的方法,还包括:

保持全局命中计数直方图,其中所述全局命中计数直方图存储跨全部所述工作项并且跨全部所述工作组的每个子表的命中计数的集合。

技术方案4.如技术方案3所述的方法,还包括:

存储每个工作组的局部直方图,其包含由给定批量过程的所述工作组的工作项所处理的每个子表的命中计数;

与完成批量过程结合,

采用所述局部命中计数直方图来更新所述全局命中计数直方图;以及

重置所述局部命中计数直方图。

技术方案5.如技术方案4所述的方法,还包括:

基于所述全局命中计数直方图的当前状态周期地重新排序一个或多个工作项的所述子表的所述顺序。

技术方案6.如技术方案1所述的方法,其中对于给定工作组的给定批量过程,并行地执行所述批量中的分组的至少一部分的流分类。

技术方案7.如技术方案1所述的方法,其中对于给定工作组的给定批量过程,并行地执行所述批量中的全部所述分组的流分类。

技术方案8.如技术方案1所述的方法,其中所述方法通过运行每个工作组的连续gpu线程来实现。

技术方案9.如技术方案1所述的方法,其中所述方法使用在所述cpu上运行的openvswitch软件组件来实现。

技术方案10.如技术方案1所述的方法,其中所述方法使用在所述cpu上运行的数据平面开发套件(dpdk)软件组件来实现。

技术方案11.一种系统,包括:

处理器,所述处理器具有包括多个处理器核的中央处理单元(cpu)、具有多个处理元件的图形处理单元(gpu)和存储器控制器,所述处理器还包括互连所述处理器核、gpu和存储器控制器的互连电路;

系统存储器,所述系统存储器耦合到所述存储器控制器;

一个或多个存储装置,所述一个或多个存储装置具有在其中存储的包含软件组件的指令,所述指令配置成在所述处理器核和gpu处理元件上运行,其中在运行时,所述指令使所述系统能够:

在所述cpu和gpu的每个的可访问的系统存储器的共享部分的多个缓冲器中缓冲多个分组;

经由所述gpu处理元件上的所述指令的一部分的执行,来执行使用多个工作组的所述多个分组的并行流分类,每个工作组与工作项的相应集合关联并且用来使用批量过程来处理分组的相应批量;

对于由批量过程所处理的每个分组,

通过将由所述分组的报头中的字段所定义的元组与工作项的多个子表之一中的规则进行匹配,来执行使用所述工作项的分组的流分类,其中所述多个子表按照搜索顺序来顺序搜索;

保持一个或多个命中计数直方图,其中每次找到给定子表中的规则的元组匹配时,使那个子表的所述命中计数递增;以及

采用命中计数直方图来重新排序一个或多个工作项的所述子表的所述搜索顺序。

技术方案12.如技术方案11所述的系统,其中所述指令的执行还使所述系统能够:

保持全局命中计数直方图,其中所述全局命中计数直方图存储跨全部所述工作项并且跨全部所述工作组的每个子表的命中计数的集合。

技术方案13.如技术方案12所述的系统,其中所述指令的执行还使所述系统能够:

存储每个工作组的局部直方图,其包含由给定批量过程的所述工作组的工作项所处理的每个子表的命中计数;

与完成批量过程结合,

采用所述局部命中计数直方图来更新所述全局命中计数直方图;以及

重置所述局部命中计数直方图。

技术方案14.如技术方案13所述的系统,其中所述指令的执行还使所述系统能够:

基于所述全局命中计数直方图的当前状态周期地重新排序一个或多个工作项的所述子表的所述顺序。

技术方案15.如技术方案11所述的系统,其中对于给定工作组的给定批量过程,使用所述gpu上的处理元件并行地执行所述批量中的分组的至少一部分的流分类。

技术方案16.如技术方案11所述的系统,其中对于给定工作组的给定批量过程,使用所述gpu上的处理元件并行地执行所述批量中的全部所述分组的流分类。

技术方案17.如技术方案11所述的系统,其中流分类操作通过运行每个工作组的连续gpu线程来实现。

技术方案18.如技术方案11所述的系统,其中所述软件组件包括openvswitch软件组件,其配置成在所述处理器核上运行。

技术方案19.如技术方案11所述的系统,其中所述软件组件包括数据平面开发套件(dpdk)软件组件,其配置成在所述处理器核上运行。

技术方案20.一个或多个非暂时机器可读介质,具有在其上存储的包含软件组件的指令,配置成在包括多个处理器核并且具有包括多个处理元件的集成图形处理单元(gpu)的处理器上运行,所述处理器安装在包括耦合到所述处理器的系统存储器的计算平台中,其中在所述处理器上的所述指令的执行时,使所述计算平台能够:

在所述cpu和gpu的每个的可访问的系统存储器的共享部分的多个缓冲器中缓冲多个分组;

经由所述gpu处理元件上的所述指令的一部分的执行,来执行使用多个工作组的所述多个分组的并行流分类,每个工作组与工作项的相应集合关联并且用来使用批量过程来处理分组的相应批量;

对于由批量过程所处理的每个分组,

通过将由所述分组的报头中的字段所定义的元组与工作项的多个子表之一中的规则进行匹配,来执行使用所述工作项的分组的流分类,其中所述多个子表按照搜索顺序来顺序搜索;

保持一个或多个命中计数直方图,其中每次找到给定子表中的规则的元组匹配时,使那个子表的所述命中计数递增;以及

采用命中计数直方图来重新排序一个或多个工作项的所述子表的所述搜索顺序。

技术方案21.如技术方案20所述的一个或多个非暂时机器可读介质,其中所述指令的执行还使所述计算平台能够:

保持全局命中计数直方图,其中所述全局命中计数直方图存储跨全部所述工作项并且跨全部所述工作组的每个子表的命中计数的集合。

技术方案22.如技术方案21所述的一个或多个非暂时机器可读介质,其中所述指令的执行还使所述计算平台能够:

存储每个工作组的局部直方图,其包含由给定批量过程的所述工作组的工作项所处理的每个子表的命中计数;

与完成批量过程结合,

采用所述局部命中计数直方图来更新所述全局命中计数直方图;以及

重置所述局部命中计数直方图。

技术方案23.如技术方案22所述的一个或多个非暂时机器可读介质,其中所述指令的执行还使所述计算平台能够:

技术方案基于所述全局命中计数直方图的当前状态周期地重新排序一个或多个工作项的所述子表的所述顺序。

技术方案24.如技术方案20所述的一个或多个非暂时机器可读介质,其中对于给定工作组的给定批量过程,使用所述gpu上的处理元件并行地执行所述批量中的全部所述分组的流分类。

技术方案25.如技术方案20所述的一个或多个非暂时机器可读介质,其中流分类操作通过运行每个工作组的连续gpu线程来实现。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1