CN104094558B - 多线程化分组处理 - Google Patents
多线程化分组处理 Download PDFInfo
- Publication number
- CN104094558B CN104094558B CN201380008187.3A CN201380008187A CN104094558B CN 104094558 B CN104094558 B CN 104094558B CN 201380008187 A CN201380008187 A CN 201380008187A CN 104094558 B CN104094558 B CN 104094558B
- Authority
- CN
- China
- Prior art keywords
- packet
- engine
- shunting
- shunting engine
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5083—Techniques for rebalancing the load in a distributed system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/509—Offload
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Retry When Errors Occur (AREA)
Abstract
公开一种用于并行处理对顺序敏感的数据分组的系统。来自多个依次排序的数据分组的第一数据分组被引向第一分流引擎。来自多个依次排序的数据分组的第二数据分组被引向第二分流引擎,其中第二数据分组依次跟随第一数据分组。第二分流引擎从第一分流引擎接收信息,其中该信息反映第一分流引擎正在处理第一数据分组。基于在第二分流引擎接收的信息,第二分流引擎处理第二数据分组,从而在第一分流引擎对第一数据分组的处理中的关键事件在第二分流引擎对第二数据分组的处理中的关键事件之前出现。
Description
技术领域
本发明总体上涉及计算机联网,并且更具体地涉及利用多个分组处理引擎来多线程化接收的分组。
背景技术
高性能联网不断面临挑战:本地联网技术正在比处理器和存储器速度更快地变得更快。每当以太网技术提供另一速度增量时,联网开发者必须发现用于使系统的其余部分能够跟进——甚至在快速现代硬件上——的方式。
联网设备通常利用缓冲器、即在联网设备中暂时存储数据的存储器区域以补偿在集中器、复用器、交换机、路由器等上的传入(或者传出)端口的拥塞。例如,如果传入流量的水平超过交换机的资源,则在传入交换机端口的缓冲器可以暂时存储过量流量直至交换机具有用于处理流量的充分资源。缓冲器也可以服务于暂时存储分组数据以在下游设备未在可接受的时间段内接收分组而无错误的情况下允许重传。
接收计算机系统的网络接口硬件通常在分组内容被写入到系统存储器之前向缓冲器中接收分组。随着处理开销变成显著,为了减少缓冲器溢出可能性,可以向一个或者多个分流引擎发送在缓冲器中的分组用于处理和向存储器中写入。一个或者多个分流引擎经常提供特征、比如解析分组首部、校验和计算、首部分离和分散-聚集存储分组。
可以运用多个分流引擎以并行处置来自不同逻辑端口、线程或者其它连接的分组。在这样的系统中,分组处理可以称为“多线程化”
发明内容
本发明的一个实施例的方面公开一种用于并行处理对顺序敏感的数据分组的方法和系统。向网络接口设备中接收多个依次排序的数据分组。网络接口设备将来自多个依次排序的数据分组的第一数据分组引向第一分流引擎。网络接口设备将来自多个依次排序的数据分组的第二数据分组引向第二分流引擎,其中第二数据分组依次跟随第一数据分组。第二分流引擎从第一分流引擎接收信息,其中该信息反映第一分流引擎正在处理第一数据分组。基于在第二分流引擎接收的信息,第二分流引擎处理第二数据分组,从而在第一分流引擎对第一数据分组的处理中的关键事件在第二分流引擎对第二数据分组的处理中的关键事件之前出现。
从第一方面来看,本发明提供一种用于并行处理对顺序敏感的数据分组的方法。该方法包括以下步骤:向网络接口设备中接收多个依次排序的数据分组;网络接口设备将来自多个依次排序的数据分组的第一数据分组引向第一分流引擎;网络接口设备将来自多个依次排序的数据分组的第二数据分组引向第二分流引擎,其中第二数据分组依次跟随第一数据分组;第二分流引擎从第一分流引擎接收信息,其中信息反映第一分流引擎正在处理第一数据分组;并且基于在第二分流引擎接收的信息,第二分流引擎处理第二数据分组,从而在第一分流引擎对第一数据分组的处理中的关键事件在第二分流引擎对第二数据分组的处理中的关键事件之前出现。
优选地,从第一分流引擎接收的信息包括来自以下各项的一项或者多项:基于第一分流引擎正在处理的第一数据分组的大小的、指向存储器中的指针的预测的位置、第一分流引擎对第一数据分组的处理的状态指示和序列号。
优选地,状态指示包括第一分流引擎是否已经对第一数据分组完成有效性校验、是否已经到达在处理中的校验点、是否已经检测到致命错误、是否已经完成第一数据分组的处理或者前述各项的组合。
优选地,在第一数据分组和第二数据分组的处理中的关键事件包括开始处理相应第一数据分组或者第二数据分组、完成有效性校验、通过在处理中的校验点和向存储器中写入相应第一数据分组或者第二数据分组。
优选地,第二分流引擎处理第二数据分组、从而在第一分流引擎对第一数据分组的处理中的关键事件在第二分流引擎对第二数据分组的处理中的关键事件之前出现的步骤包括以下步骤中的一个或者多个步骤:第二分流引擎在从第一分流引擎接收已经对第一数据分组完成有效性校验的通知之后开始处理第二数据分组;第二分流引擎在从第一分流引擎接收第一分流引擎已经在处理第一数据分组时通过对应校验点的通知之后继续处理第二数据分组通过在处理中的校验点;以及第二分流引擎在第一分流引擎已经向存储器中写入第一数据分组的通知之后向存储器中写入第二数据分组。
优选地,从第一分流引擎接收的信息包括致命错误在第一数据分组的处理中出现的通知,并且响应于接收致命错误出现的通知,第二分流引擎丢弃第二数据分组。
优选地,该方法还包括以下步骤:第一分流引擎基于第一分流引擎正在处理的第一数据分组的大小计算指向存储器中的指针的预测的位置;并且第一分流引擎输出预测的位置。
优选地,该方法还包括以下步骤:第一分流引擎确定第一数据分组尚未通过有效性测试并且作为响应为第二数据分组重新计算指向存储器中的指针的预测的位置;第一分流引擎输出重新计算的预测的位置;并且第一分流引擎丢弃第一数据分组。
优选地,该方法还包括以下步骤:第一分流引擎确定致命错误已经在第一数据分组的处理期间出现;并且第一分流引擎输出致命错误的通知。
优选地,该方法还包括以下步骤:第一分流引擎完成第一数据分组的处理;第一分流引擎输出已经处理第一数据分组的通知;并且第一分流引擎向存储器中写入来自第一数据分组的信息。
优选地,在处理中的校验点包括以下各项中的一项或者多项:向软件部件发送中断和更新情境存储设施。
优选地,第一数据分组和第二数据分组来自相同逻辑端口、线程或者输入连接。
从第二方面来看,本发明提供一种用于并行处理对顺序敏感的数据分组的系统,该系统包括:用于经由网络连接接收数据分组的缓冲器;可以从缓冲器被指派数据分组的多个分流引擎,多个分流引擎中的每个分流引擎能够处理数据分组并且向系统存储器中存储来自数据分组的信息;在来自多个分流引擎的至少第一分流引擎和第二分流引擎之间的通信接口,其中通信接口允许在第一分流引擎输出的信号由第二分流引擎接收;其中系统可操作为:向缓冲器中接收多个数据分组;将来自多个数据分组的第一数据分组引向第一分流引擎;将来自多个数据分组的第二数据分组引向第二分流引擎,其中第二数据分组依次跟随第一数据分组;在第二分流引擎从第一分流引擎接收信息,其中信息反映第一分流引擎正在处理第一数据分组;并且基于在第二分流引擎接收的信息,在第二分流引擎处理第二数据分组,从而在第一分流引擎对第一数据分组的处理中的关键事件在第二分流引擎对第二数据分组的处理中的关键事件之前出现。
优选地,从第一分流引擎接收的信息包括来自以下各项的一项或者多项:基于第一分流引擎正在处理的第一数据分组的大小的、指向存储器中的指针的预测的位置、第一分流引擎对第一数据分组的处理的状态指示和序列号。
优选地,状态指示包括第一分流引擎是否已经对第一数据分组完成有效性校验、是否已经到达在处理中的校验点、是否已经检测到致命错误、是否已经完成第一数据分组的处理或者前述各项的组合。
优选地,在第一数据分组和第二数据分组的处理中的关键事件包括开始处理相应第一数据分组或者第二数据分组、完成有效性校验、通过在处理中的校验点和向存储器中写入相应第一数据分组或者第二数据分组。
优选地,该系统可操作为第二分流引擎处理第二数据分组,从而在第一分流引擎对第一数据分组的处理中的关键事件在第二分流引擎对第二数据分组的处理中的关键事件之前出现。该系统可操作为:在从第一分流引擎接收已经对第一数据分组完成有效性校验的通知之后在第二分流引擎开始处理第二数据分组;在从第一分流引擎接收第一分流引擎已经在处理第一数据分组时通过对应校验点的通知之后在第二分流引擎继续处理第二数据分组通过在处理中的校验点;并且在第一分流引擎已经向存储器中写入第一数据分组的通知之后在第二分流引擎向存储器中写入第二数据分组。
优选地,从第一分流引擎接收的信息包括致命错误在第一数据分组的处理中出现的通知,并且响应于接收致命错误出现的通知,系统可操作为丢弃第二数据分组。
优选地,该系统还可操作为:基于第一分流引擎正在处理的第一数据分组的大小为第二数据分组计算指向存储器中的指针的预测的位置;并且在第一分流引擎输出预测的位置。
优选地,该系统还可操作为:在第一分流引擎确定第一数据分组尚未通过有效性测试并且作为响应为第二数据分组重新计算指向存储器中的指针的预测的位置;在第一分流引擎输出重新计算的预测的位置;并且丢弃第一数据分组。
优选地,该系统还可操作为:确定致命错误已经在第一数据分组的处理期间出现;并且在第一分流引擎输出致命错误的通知。
优选地,该系统还可操作为:在第一分流引擎完成第一数据分组的处理;在第一分流引擎输出已经处理第一数据分组的通知;并且向存储器中写入来自第一数据分组的信息。
优选地,在处理中的校验点包括以下各项中的一项或者多项:向软件部件发送中断和更新情境存储设施。
优选地,第一数据分组和第二数据分组来自相同逻辑端口、线程或者输入连接。
从第三方面来看,本发明提供一种包括计算机程序代码的计算机程序,该计算机程序代码存储于计算机可读介质上以在向计算机系统中加载并且在其上执行时使计算机系统执行根据第一方面的方法的所有步骤。
附图说明
现在将参照如附图中所示本发明的实施例仅通过示例描述本发明,在附图中:
图1图示根据本发明的一个示例实施例的联网数据处理系统;
图2描绘根据一个示例实施例的网络适配器的部件处理数据分组的示例场景;
图3图示在图2中描述的处理序列的后续状态;以及
图4描绘根据一个示例实施例的用于对顺序敏感的数据分组的多线程化处理。
具体实施方式
现在将参照各图具体描述本发明。图1图示根据本发明的一个实施例的大体上表示为100的联网数据处理系统。数据处理系统100包括连接到网络104的计算机系统102。网络104代表通信信道互连的计算机和设备的汇集,这些通信信道有助于在互连的计算机和设备之间的通信和资源共享。通信信道可以包括有线、无线通信链路或者光纤线缆。计算机系统102可以是能够通过网络与另一计算设备通信的任何计算设备、比如服务器计算机、客户端计算机、笔记本计算机、膝上型计算机、平板计算机、手持设备或者智能电话、瘦客户端、路由器、集线器或者任何其它电子设备或者计算系统。
网络适配器106允许计算机系统102通过网络104通信。在另一实施例中,可以使用任何网络接口设备。网络适配器106向缓冲器108中接收传入数据分组。在分组到达时,派发器110向分组处理引擎112、114或者116之一指派每个分组。派发器110是网络适配器106的部件,该部件包括用于确定分组处理引擎何时变成可用并且将在缓冲器108中的下一分组引向可用引擎的控制逻辑。分组处理引擎112、114和116中的每个分组处理引擎是优选地在网络适配器106上的分流引擎,该分流引擎包括用于处理接收的数据分组并且向系统存储器中写入来自数据分组的信息的控制逻辑。控制逻辑是为了执行具体功能而需要的步骤序列并且在该优选实施例中通过固件、通常为硬接线的计算机电路和其它硬件或者备选地通过在只读存储器(ROM)上存储并且由一个或者多个控制电路执行的低级程序指令来实施。
本发明的实施例认识在希望保持接收的分组的顺序时、例如在从相同逻辑端口、线程或者连接接收分组时这样保持顺序时的多线程化分组处理难度。接口118提供在分组处理引擎112、114和116之间的通信接口从而允许并行处理对顺序敏感的数据分组。在描绘的实施例中,分组处理引擎112、114和116中的每个分组处理引擎的输出端口连接到来自引擎112、114和116的其它分组处理引擎中的每个分组处理引擎的输入端口。在一个备选实施例中,接口118可以使通信限于所有分组处理引擎的某个子集。本领域普通技术人员将认识在各种实施例中,计算机系统102可以包含任何数目的分组处理引擎。接口118可以用来传达多个处理引擎正在处理的来自相同逻辑端口、线程或者连接的分组的序列和状态,从而可以运用并行处理并且维持顺序。
在分组处理引擎处理数据分组时,处理引擎按照指引如何处置该处理的相关条件集合、即情境信息进行该处理。例如处理引擎可能需要在存储器中的如下位置,它将在处理之后在该位置写入在数据分组中的信息。相似地,处理引擎可能需要用于某个类型的数据分组的系统权限或者可以从在为具体线程而接收的数据分组序列中的顺序受益。计算机系统102在情境存储设施、例如高速缓存存储器中积累这样的情境信息,并且处理引擎可以从情境存储设施接收情境信息。
在该优选实施例中,随着在计算机系统102接收数据分组,可以分配在系统存储器中的存储器缓冲器列表以接收数据分组。向情境存储装置120添加指向每个存储器缓冲器列表中的指针和在每个列表中的可用缓冲器的计数。情境存储装置120可以维持指针的当前状态和计数。在接收用于具体线程的数据分组时,情境存储装置可以向正在处理数据分组的分组处理引擎传达指向为具体线程而分配的存储器中的指针的当前位置并且可以传达可用缓冲器的计数。此外,在各种实施例中,情境存储装置120也可以向分组处理引擎传达其它情境信息、例如权限。在分组处理引擎112、114或者116已经完成处理数据分组时,在指针指定的位置向系统存储器122中写入来自数据分组的信息。随后将指针移向在列表中的下一可用缓冲器,并且在情境存储装置120中更新该更新的指针位置和任何新计数。
在本发明的一个优选实施例中,第一个开始处理用于逻辑端口、线程或者连接的数据分组的分组处理引擎视为主处理引擎并且从情境存储装置120接收情境信息。在另一分组处理引擎已经正在处理用于相同逻辑端口、线程或者连接的数据分组之时被指派数据分组的分组处理引擎视为次处理引擎。次处理引擎经由接口118从主处理引擎接收情境信息(主处理引擎的状态、权限和预测的指针位置)。次处理引擎直至接收主处理引擎已经向存储器中写入的通知才向存储器中写入。
图2描绘根据一个示例实施例的网络适配器106的部件正在处理数据分组的示例场景。
在实施为先入先出(FIFO)队列的缓冲器108接收线程A的分组1、线程B的分组1和线程A的分组2。派发器110发现这里描绘为处理引擎116的下一可用分组处理引擎和指引将由处理引擎116处理的线程A的分组。由于线程A的分组1是待处理的线程A的第一分组,所以处理引擎116是主处理引擎并且从情境存储装置120至少读入指向用于线程A的存储器列表中的指针(用粗体描绘连接)。
派发器110向这里描绘为处理引擎112的下一可用分组处理引擎指派线程B的分组1这下一数据分组。无其它分组处理引擎正在处理来自线程B的数据分组,因此处理引擎112也是主处理引擎并且从情境存储装置120至少读入指向用于线程B的存储器列表中的指针。
最后,派发器110向处理引擎114指派线程A的分组2。由于线程A的分组1正在由处理引擎116并行处理,所以处理引擎114是次处理引擎。充当主处理引擎的处理引擎116基于处理引擎116当前正在处理的数据分组的大小为下一依次分组预测指向用于线程A的存储器列表中的指针的位置。在处理引擎116的输出端口上放置情境信息,该情境信息至少包括指向存储器中的指针的预测的位置。作为次处理引擎的处理引擎114从处理引擎116这一主处理引擎而不是情境存储装置120读取情境信息(用粗体描绘连接)。处理引擎116也可以输出状态更新,从而次处理引擎可以确定它们可以继续处理它们自己的数据分组有多远。
图3图示在图2中描绘的处理序列的后续状态。在处理引擎116已经完成线程A的分组1之后,处理引擎114变成新的主引擎。派发器110向现在可用的处理引擎116指派线程A的分组3这另一个被缓冲器108接收的分组。处理引擎116现在是处理引擎114的次处理引擎。处理引擎114为下一依次分组预测情境信息、例如指向存储器中的指针将在线程A的分组2已经完成处理时指向何处并且在处理引擎116可访问的输出端口上放置情境信息。
图4描绘根据一个示例实施例的用于顺序特有的数据分组的多线程化处理的更具体逻辑流程(控制逻辑400)。
控制逻辑400向缓冲器中接收数据分组(步骤402),并且对数据分组可以被分流到的可用处理引擎定位(步骤404)。在步骤406中,控制逻辑400确定另一处理引擎是否正在处理来自相同线程(或者需要在数据分组之间的顺序特有性的其它逻辑连接)的数据分组(判决406)。
响应于确定无来自相同线程的其它数据分组正在被处理(判决406的否分支),控制逻辑400向可用处理引擎指派数据分组并且标记或者指明处理引擎为主处理引擎(步骤408)。在一个实施例中,向处理引擎传递它是主处理引擎的标志值。在第二实施例中,可以向处理引擎传递可以从其读取情境信息的地址,该地址是情境存储设施的地址,该情境存储设施例如包含指向为接收的数据而分配的存储器中的指针、在分配的存储器中的项目的当前计数、序列顺序、各种权限等(例如,情境存储装置120)。
在步骤410中,控制逻辑400从情境存储装置向处理引擎中读取清净之并且可以开始处理数据分组。控制逻辑400为后续依次数据分组计算和输出情境值(步骤412)。例如基于正在处理的数据分组的大小,控制逻辑400可以预测指向存储器中的指针将在向存储器中写入数据分组之后指向何处。可以在处理引擎的一个或者多个输出端口上放置预测的指针值。此外,处理引擎可以输出应当处理的下一依次数据分组、各种权限和它自己的处理序列的当前状态。
控制逻辑400在处理引擎中执行数据分组的有效性校验(步骤414)。通常,在数据分组中的错误造成丢弃数据分组并且继续处理下一数据分组。处理引擎例如通过计算校验和来执行一个或者多个有效性测试并且确定错误是否存在于数据分组中(判决416)。
如果确定数据分组无效(判决416的否分支),则控制逻辑400修改处理引擎输出的情境值以假如将出现分组丢弃则指示正确值。例如不会为下一数据分组推进指向存储器中的指针。在修改情境值之后,控制逻辑400丢弃数据分组(步骤420)并且输出处理引擎已经完成它的有效性校验的指示(步骤422),从而可以处理后续数据分组。
在另一方面,如果确定数据分组有效(判决416的是分支),则控制逻辑400输出处理引擎已经完成它的有效性校验的指示(步骤424),从而可以基于原来计算的情境值处理(来自步骤412)后续依次数据分组。
在有效性校验之后,控制逻辑400确定处理引擎是否引起致命错误(判决426)。如果检测到致命错误(判决426的是分支),则处理引擎输出指明错误的指示(步骤428)。如果未检测到致命错误(判决426的否分支),则控制逻辑400确定数据分组的处理是否已经通过约定校验点(步骤430)。在分组处理中的某些点,处理后续数据分组的次处理引擎直至主处理引擎已经完成相同动作才可以执行某些动作。例如在处理数据分组的过程期间,处理引擎可能必须向各种软件部件发送中断。这一动作可能需要在次处理引擎发送中断之前由主处理引擎完成。作为另一示例,处理引擎在处理数据分组时更新情境存储设施。情境存储设施应当在情境处理设施由处理后续第二数据分组的处理引擎更新之前由处理第一数据分组的处理引擎更新。
如果控制逻辑400确定已经通过这样的校验点(判决430的是分支),则控制逻辑400从处理引擎输出通过校验点的通知(步骤432)。在步骤432中输出通知之后或者备选地在确定尚未通过校验点(判决430的否分支)之后,控制逻辑400确定处理引擎是否已经完成处理数据分组(判决434)。如果处理引擎尚未完成处理数据分组(判决434的否分支),则处理引擎继续在经过步骤426-434迭代地循环之时处理数据分组以确定是否已经检测到致命错误、是否已经完成任何校验点和处理引擎是否已经完成数据分组的处理。
如果处理引擎已经完成处理数据分组(判决434的是分支),则控制逻辑400从处理引擎输出完成的指示(步骤436)并且在一个优选实施例中利用从情境存储设施向处理引擎传递的指向存储器中的指针来向存储器中写入数据分组的信息(步骤438)。
回顾判决406,如果确定另一处理引擎正在处理相同线程的数据分组(判决406的是分支),则控制逻辑400向可用处理引擎指派数据分组、标记或者指明处理引擎为次并且指示主处理引擎(步骤440)。在一个实施例中,向处理引擎传递指示它是次处理引擎的标志值。在第二实施例中,传递从其读取情境信息的地址,该地址是主处理引擎的一个或者多个输出的地址。在这样的实施例中,正在传递的地址可以作用为指明处理引擎为次并且指示主处理引擎。
控制逻辑400从主处理引擎向次处理引擎中读取情境值(步骤442)。情境值可以包括序列信息、计算或者预测的存储器指针位置、各种权限、主处理引擎的状态等。基于接收的情境值,控制逻辑400确定主处理引擎是否已经为主处理引擎正在处理的数据分组完成验证校验(判决444)。
如果主处理引擎尚未完成验证校验(判决444的否分支),则次处理引擎不会开始处理它自己的数据分组并且将继续从主处理引擎读入值直至它接收已经完成校验的指示。如果已经完成验证校验(判决444的是分支),则控制逻辑400开始在次处理引擎中处理数据分组(步骤446)。
控制逻辑400确定是否已经到达约定校验点(判决448),次处理引擎在该约定校验点不能在主处理引擎已经通过对应校验点之前执行动作或者继续处理数据分组。如果已经到达这样的校验点(判决4448的是分支),则控制逻辑400确定主处理引擎是否已经通过校验点(判决450)。如果主处理引擎尚未通过校验点(判决450的否分支),则处理未继续并且控制逻辑400继续校验主处理引擎通过校验点。如果主处理引擎已经通过约定校验点(判决450的是分支),或者备选地,如果未到达校验点(判决448的否分支),则控制逻辑400确定是否已经检测到来自主处理引擎的任何致命错误(判决452)。
如果次处理引擎未接收主处理引擎检测到致命错误的指示(判决452的是分支),则次处理引擎通过未通知任何软件和未向情境存储设施存储回情境来静默地终止处理它自己的数据分组。如果尚未接收致命错误的指示(判决452的否分支),则控制逻辑400确定次处理引擎是否已经完成数据分组的处理(判决454)。
如果次处理引擎尚未完成处理数据分组(判决454的否分支),则次处理引擎继续在经过步骤448-454迭代地循环之时处理数据分组以确定主处理引擎是否已经通过次处理引擎到达的任何校验点、是否已经在主处理引擎中检测到致命错误和次处理引擎是否已经完成数据分组的处理。
如果次处理引擎已经完成处理数据分组(判决454的是分支),则控制逻辑400确定主处理引擎是否已经完成处理它自己的数据分组(判决456)而如果不是(判决456的否分支)则等待主处理引擎完成它的处理。如果主处理引擎已经完成(判决456的是分支),则控制逻辑400在一个优选实施例中利用从主处理引擎向次处理引擎传递的指向存储器中的指针来向存储器写入来自次处理引擎正在处理的数据分组的信息。
基于前文,已经公开一种用于对顺序敏感的数据分组执行多线程化处理的方法和系统。然而可以进行许多修改和替换而未脱离本发明的范围。就这一点而言,在流程图或者框图中的每个块可以代表用于实施指定的逻辑功能的控制逻辑模块、段或者部分。也应当指出在一些备选实现方式中,在块中指出的功能可以未按照在各图中指出的顺序出现。因此,已经通过示例而非限制来公开本发明。
Claims (23)
1.一种用于并行处理对顺序敏感的数据分组的方法,所述方法包括以下步骤:
向网络接口设备中接收多个依次排序的数据分组;
所述网络接口设备将来自所述多个依次排序的数据分组的第一数据分组引向第一分流引擎;
所述网络接口设备将来自所述多个依次排序的数据分组的第二数据分组引向第二分流引擎,其中所述第二数据分组依次跟随所述第一数据分组;
所述第一分流引擎作为主分流引擎基于所述第一分流引擎正在处理的所述第一数据分组的大小来预测指向存储器中的指针的位置,并且输出情境信息;
所述第二分流引擎从所述第一分流引擎接收所述情境信息,其中所述情境信息至少包括序列号、所述第一分流引擎对所述第一数据分组的处理的状态指示和基于所述第一分流引擎正在处理的所述第一数据分组的大小的、指向存储器中的所述指针的所预测的位置;以及基于在所述第二分流引擎接收的所述情境信息,所述第二分流引擎处理所述第二数据分组,从而在所述第一分流引擎对所述第一数据分组的所述处理中的关键事件在所述第二分流引擎对所述第二数据分组的所述处理中的关键事件之前出现。
2.根据权利要求1所述的方法,其中从所述第一分流引擎接收的所述情境信息包括所述第一分流引擎是否已经对所述第一数据分组完成有效性校验、是否已经到达在处理中的校验点、是否已经检测到致命错误、是否已经完成所述第一数据分组的处理或者前述各项的组合。
3.根据权利要求1所述的方法,其中在所述第一数据分组和第二数据分组的所述处理中的所述关键事件包括:
开始处理所述相应第一数据分组或者第二数据分组、完成有效性校验、通过在处理中的校验点和向存储器中写入所述相应第一数据分组或者第二数据分组。
4.根据权利要求1所述的方法,其中所述第二分流引擎处理所述第二数据分组、从而在所述第一分流引擎对所述第一数据分组的所述处理中的关键事件在所述第二分流引擎对所述第二数据分组的所述处理中的关键事件之前出现的所述步骤包括以下步骤中的一个或者多个步骤:
所述第二分流引擎在从所述第一分流引擎接收已经对所述第一数据分组完成有效性校验的通知之后开始处理所述第二数据分组;
所述第二分流引擎在从所述第一分流引擎接收所述第一分流引擎已经在处理所述第一数据分组时通过对应校验点的通知之后继续处理所述第二数据分组通过在处理中的校验点;以及
所述第二分流引擎在所述第一分流引擎已经向存储器中写入所述第一数据分组的通知之后向存储器中写入所述第二数据分组。
5.根据权利要求1所述的方法,其中从所述第一分流引擎接收的所述情境信息包括致命错误在所述第一数据分组的所述处理中出现的通知,并且响应于接收所述致命错误出现的所述通知,所述第二分流引擎丢弃所述第二数据分组。
6.根据权利要求1所述的方法,还包括:
向所述网络接口设备中接收第三数据分组,其中所述第三数据分组不是来自所述多个依次排序的数据分组;
所述网络接口设备将所述第三数据分组引向第三分流引擎;
所述第一分流引擎从情境存储设施接收情境信息,其中所述情境信息至少包括指向为所述多个依次排序的数据分组分配的存储器中的指针的当前位置;以及
所述第三分流引擎从所述情境存储设施接收情境信息,其中所述情境信息至少包括指向为所述第三数据分组分配的存储器中的指针的当前位置。
7.根据权利要求1所述的方法,还包括以下步骤:
所述第一分流引擎确定所述第一数据分组尚未通过有效性测试并且作为响应为所述第二数据分组重新计算指向存储器中的指针的所述预测的位置;
所述第一分流引擎输出所述重新计算的预测的位置;以及
所述第一分流引擎丢弃所述第一数据分组。
8.根据权利要求1所述的方法,还包括以下步骤:
所述第一分流引擎确定致命错误已经在所述第一数据分组的处理期间出现;以及
所述第一分流引擎输出所述致命错误的通知。
9.根据权利要求1所述的方法,还包括以下步骤:
所述第一分流引擎完成所述第一数据分组的处理;
所述第一分流引擎输出已经处理所述第一数据分组的通知;以及
所述第一分流引擎向存储器中写入来自所述第一数据分组的信息。
10.根据权利要求3所述的方法,其中在处理中的所述校验点包括以下各项中的一项或者多项:
向软件部件发送中断和更新情境存储设施。
11.根据权利要求1所述的方法,其中所述第一数据分组和第二数据分组来自相同逻辑端口、线程或者输入连接。
12.一种用于并行处理对顺序敏感的数据分组的系统,所述系统包括:
用于经由网络连接接收数据分组的缓冲器;
能够从所述缓冲器被指派数据分组的多个分流引擎,所述多个分流引擎中的每个分流引擎能够处理数据分组并且向系统存储器中存储来自数据分组的信息;
在来自所述多个分流引擎的至少第一分流引擎和第二分流引擎之间的通信接口,其中所述通信接口允许在所述第一分流引擎输出的信号由所述第二分流引擎接收;
其中所述系统可操作为:
向所述缓冲器中接收多个依次排序的数据分组;
将来自所述多个依次排序的数据分组的第一数据分组引向所述第一分流引擎;
将来自所述多个依次排序的数据分组的第二数据分组引向所述第二分流引擎,其中所述第二数据分组依次跟随所述第一数据分组;
由所述第一分流引擎作为主分流引擎基于所述第一分流引擎正在处理的所述第一数据分组的大小来预测指向存储器中的指针的位置,并且向所述第二分流引擎输出情境信息;
在所述第二分流引擎从所述第一分流引擎接收情境信息,其中所述情境信息至少包括序列号、所述第一分流引擎对所述第一数据分组的处理的状态指示和基于所述第一分流引擎正在处理的所述第一数据分组的大小的、指向存储器中的所述指针的所预测的位置;以及
基于在所述第二分流引擎接收的所述情境信息,在所述第二分流引擎处理所述第二数据分组,从而在所述第一分流引擎对所述第一数据分组的所述处理中的关键事件在所述第二分流引擎对所述第二数据分组的所述处理中的关键事件之前出现。
13.根据权利要求12所述的系统,其中从所述第一分流引擎接收的所述情境信息包括所述第一分流引擎是否已经对所述第一数据分组完成有效性校验、是否已经到达在处理中的校验点、是否已经检测到致命错误、是否已经完成所述第一数据分组的处理或者前述各项的组合。
14.根据权利要求12所述的系统,其中在所述第一数据分组和第二数据分组的所述处理中的所述关键事件包括:
开始处理所述相应第一数据分组或者第二数据分组、完成有效性校验、通过在处理中的校验点和向存储器中写入所述相应第一数据分组或者第二数据分组。
15.根据权利要求12所述的系统,其中所述系统可操作为所述第二分流引擎处理所述第二数据分组、从而在所述第一分流引擎对所述第一数据分组的所述处理中的关键事件在所述第二分流引擎对所述第二数据分组的所述处理中的关键事件之前出现的所述步骤包括所述系统可操作为:
在从所述第一分流引擎接收已经对所述第一数据分组完成有效性校验的通知之后在所述第二分流引擎开始处理所述第二数据分组;
在从所述第一分流引擎接收所述第一分流引擎已经在处理所述第一数据分组时通过对应校验点的通知之后在所述第二分流引擎继续处理所述第二数据分组通过在处理中的校验点;以及
在所述第一分流引擎已经向存储器中写入所述第一数据分组的通知之后在所述第二分流引擎向存储器中写入所述第二数据分组。
16.根据权利要求12所述的系统,其中从所述第一分流引擎接收的所述情境信息包括致命错误在所述第一数据分组的所述处理中出现的通知,并且响应于接收所述致命错误出现的所述通知,所述系统可操作为丢弃所述第二数据分组。
17.根据权利要求12所述的系统,其中所述系统还可操作为:
向所述网络接口设备中接收第三数据分组,其中所述第三数据分组不是来自所述多个依次排序的数据分组;
所述网络接口设备将所述第三数据分组引向第三分流引擎;
所述第一分流引擎从情境存储设施接收情境信息,其中所述情境信息至少包括指向为所述多个依次排序的数据分组分配的存储器中的指针的当前位置;以及
所述第三分流引擎从所述情境存储设施接收情境信息,其中所述情境信息至少包括指向为所述第三数据分组分配的存储器中的指针的当前位置。
18.根据权利要求12所述的系统,其中所述系统还可操作为:
在所述第一分流引擎确定所述第一数据分组尚未通过有效性测试并且作为响应为所述第二数据分组重新计算指向存储器中的指针的所述预测的位置;
在所述第一分流引擎输出所述重新计算的预测的位置;以及
丢弃所述第一数据分组。
19.根据权利要求12所述的系统,其中所述系统还可操作为:
确定致命错误已经在所述第一数据分组的处理期间出现;以及
在所述第一分流引擎输出所述致命错误的通知。
20.根据权利要求12所述的系统,其中所述系统还可操作为:
在所述第一分流引擎完成所述第一数据分组的处理;
在所述第一分流引擎输出已经处理所述第一数据分组的通知;以及
向存储器中写入来自所述第一数据分组的信息。
21.根据权利要求14所述的系统,其中在处理中的所述校验点包括以下各项中的一项或者多项:
向软件部件发送中断和更新情境存储设施。
22.根据权利要求12所述的系统,其中所述第一和第二数据分组来自相同逻辑端口、线程或者输入连接。
23.一种用于并行处理对顺序敏感的数据分组的设备,包括用于执行根据权利要求1至11中的任一权利要求所述的方法的所有步骤的装置。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/408,575 US8934332B2 (en) | 2012-02-29 | 2012-02-29 | Multi-threaded packet processing |
US13/408,575 | 2012-02-29 | ||
PCT/IB2013/051223 WO2013128320A1 (en) | 2012-02-29 | 2013-02-15 | Multi-threaded packet processing |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104094558A CN104094558A (zh) | 2014-10-08 |
CN104094558B true CN104094558B (zh) | 2017-03-08 |
Family
ID=49002751
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380008187.3A Active CN104094558B (zh) | 2012-02-29 | 2013-02-15 | 多线程化分组处理 |
Country Status (5)
Country | Link |
---|---|
US (1) | US8934332B2 (zh) |
CN (1) | CN104094558B (zh) |
DE (1) | DE112013001211B4 (zh) |
GB (1) | GB2513809B (zh) |
WO (1) | WO2013128320A1 (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105608208B (zh) * | 2015-12-28 | 2019-04-02 | 上海瀚之友信息技术服务有限公司 | 一种大数据并发存储系统及方法 |
CN106201696A (zh) * | 2016-07-15 | 2016-12-07 | 东软集团股份有限公司 | 用于线程的方法和装置 |
US11895177B2 (en) * | 2016-09-30 | 2024-02-06 | Wisconsin Alumni Research Foundation | State extractor for middlebox management system |
US12019920B2 (en) | 2018-01-29 | 2024-06-25 | Micron Technology, Inc. | Memory controller with programmable atomic operations |
US10915271B2 (en) * | 2018-01-29 | 2021-02-09 | Micron Technology, Inc. | Memory controller with programmable atomic operations |
CN112333044B (zh) * | 2020-10-29 | 2022-07-15 | 北京锐安科技有限公司 | 分流设备性能测试方法、装置、系统、电子设备以及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5664200A (en) * | 1991-10-22 | 1997-09-02 | Bull Hn Information Systems Inc. | Apparatus and method for providing more effective reiterations of interrupt requests in a multiprocessor system |
CN1520112A (zh) * | 2002-12-31 | 2004-08-11 | ض� | 网络协议卸载引擎 |
US7751401B2 (en) * | 2008-06-30 | 2010-07-06 | Oracle America, Inc. | Method and apparatus to provide virtual toe interface with fail-over |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030235194A1 (en) | 2002-06-04 | 2003-12-25 | Mike Morrison | Network processor with multiple multi-threaded packet-type specific engines |
US7961723B2 (en) | 2002-10-08 | 2011-06-14 | Netlogic Microsystems, Inc. | Advanced processor with mechanism for enforcing ordering between information sent on two independent networks |
US20050060538A1 (en) | 2003-09-15 | 2005-03-17 | Intel Corporation | Method, system, and program for processing of fragmented datagrams |
US7626987B2 (en) | 2003-11-12 | 2009-12-01 | Cisco Technology, Inc. | Using ordered locking mechanisms to maintain sequences of items such as packets |
US6996070B2 (en) | 2003-12-05 | 2006-02-07 | Alacritech, Inc. | TCP/IP offload device with reduced sequential processing |
US7949792B2 (en) * | 2004-02-27 | 2011-05-24 | Cisco Technology, Inc. | Encoding a TCP offload engine within FCP |
US7779132B1 (en) * | 2005-11-14 | 2010-08-17 | Oracle America, Inc. | Method and apparatus for supporting multiple transport layer implementations under a socket interface |
US8028071B1 (en) * | 2006-02-15 | 2011-09-27 | Vmware, Inc. | TCP/IP offload engine virtualization system and methods |
US7698304B2 (en) * | 2006-03-17 | 2010-04-13 | Microsoft Corporation | Caching data in a distributed system |
JP5083757B2 (ja) * | 2007-04-19 | 2012-11-28 | インターナショナル・ビジネス・マシーンズ・コーポレーション | データをキャッシュする技術 |
JP5207895B2 (ja) * | 2008-09-17 | 2013-06-12 | キヤノン株式会社 | 送信装置、受信装置、及び方法、プログラム |
US8874809B2 (en) * | 2009-12-04 | 2014-10-28 | Napatech A/S | Assembly and a method of receiving and storing data while saving bandwidth by controlling updating of fill levels of queues |
KR20110072023A (ko) * | 2009-12-22 | 2011-06-29 | 삼성전자주식회사 | 휴대 단말기의 프로세서 간 데이터 통신 방법 및 장치 |
-
2012
- 2012-02-29 US US13/408,575 patent/US8934332B2/en active Active
-
2013
- 2013-02-15 WO PCT/IB2013/051223 patent/WO2013128320A1/en active Application Filing
- 2013-02-15 GB GB1415479.3A patent/GB2513809B/en active Active
- 2013-02-15 DE DE112013001211.1T patent/DE112013001211B4/de active Active
- 2013-02-15 CN CN201380008187.3A patent/CN104094558B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5664200A (en) * | 1991-10-22 | 1997-09-02 | Bull Hn Information Systems Inc. | Apparatus and method for providing more effective reiterations of interrupt requests in a multiprocessor system |
CN1520112A (zh) * | 2002-12-31 | 2004-08-11 | ض� | 网络协议卸载引擎 |
US7751401B2 (en) * | 2008-06-30 | 2010-07-06 | Oracle America, Inc. | Method and apparatus to provide virtual toe interface with fail-over |
Also Published As
Publication number | Publication date |
---|---|
GB2513809B (en) | 2015-07-01 |
DE112013001211B4 (de) | 2020-04-23 |
US8934332B2 (en) | 2015-01-13 |
DE112013001211T5 (de) | 2014-11-13 |
US20130223234A1 (en) | 2013-08-29 |
GB2513809A (en) | 2014-11-05 |
CN104094558A (zh) | 2014-10-08 |
WO2013128320A1 (en) | 2013-09-06 |
GB201415479D0 (en) | 2014-10-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104094558B (zh) | 多线程化分组处理 | |
JP4154213B2 (ja) | パケット処理装置 | |
JP4926648B2 (ja) | 車載ゲートウェイ装置 | |
CN109802864B (zh) | 芯片设计验证方法、装置及芯片测试器 | |
JP4779955B2 (ja) | パケット処理装置及びパケット処理方法 | |
JP5148707B2 (ja) | 待ち行列形成方法 | |
JP2006333438A (ja) | ゲートウェイ装置及びルーティング方法 | |
EP2736197A1 (en) | Packet reassembly and resequence method, apparatus and system | |
CN1016037B (zh) | 通信交换方法 | |
CN107005467B (zh) | 用于在交换机中路由数据的装置和方法 | |
WO2020143170A1 (zh) | 预测路线获取方法、装置、计算机设备及存储介质 | |
US20140304450A1 (en) | Switching device, packet control method, and data communication system | |
CN115269221A (zh) | 基于共享内存机制的fpga硬件抽象层设计方法、系统 | |
US8930604B2 (en) | Reliable notification of interrupts in a network processor by prioritization and policing of interrupts | |
CN110308873B (zh) | 一种数据存储方法、装置、设备及介质 | |
CN115658983A (zh) | 一种判决验证的方法及系统 | |
CN113691457A (zh) | 限流控制方法、装置、设备及存储介质 | |
CN103152228A (zh) | 一种带宽检测方法和设备 | |
US20160373367A1 (en) | System and method for identifying performance characteristics in asynchronous networks | |
US9582438B2 (en) | Method and apparatus for identifying cause of interrupt | |
US7599361B2 (en) | Wire-speed packet management in a multi-pipeline network processor | |
CN109802896B (zh) | 调度数据的方法和交换设备 | |
Shibanov | A software implementation technique for simulation of ethernet local area networks | |
CN105302634B (zh) | 事件的并行处理方法及装置 | |
US8780900B2 (en) | Crossbar switch system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |