用于在网络处理器中动态排序的系统和方法

文档序号:7605220阅读:329来源:国知局
专利名称:用于在网络处理器中动态排序的系统和方法
技术领域
本发明一般地涉及微处理器系统,更具体地说,本发明涉及多个处理器执行指令的顺序。
背景技术
高性能计算机系统通常采用多个处理器或中央处理单元(CPU)。每个处理器可访问共享和/或个人数据,如存储在耦合到处理器的存储器中的程序指令,例如算法。另外,每个处理器可支持一个或多个线程,其中每个线程对应于分离的指令或执行序列。一种更常用的多处理器体系结构被称为脉动阵列(systolic array),其中在网格状拓扑中每个处理器耦合到其最近的邻居,并且处理器对在其间流动的数据执行操作序列。一般来说,脉动阵列的处理器以“锁定步骤(lock-step)”方式操作,其中每个处理器在计算相位和通信相位之间交替。
脉动阵列通常用于要解决的问题可被分区为离散的工作单位的情形。在包括单“行”处理器的一维脉动阵列的情形中,每个处理器负责对输入数据执行相异的一组指令以便生成输出数据,输出数据随后被传递到阵列的下一个处理器(可能与另外的输入数据一同)。为了使吞吐量最大化,对问题进行划分从而使得每个处理器需要大致相同的时间量来完成它的那部分工作。以这种方式,新的输入数据可以以等于每个处理器的处理时间的速率被以流水线方式输入到阵列,其中输入数据被并行处理的单位数等于阵列中处理器的数目。通过将更多的处理器加入到阵列中就可以提高性能,只要问题可继续被划分为更小的工作单位即可。一旦达到了划分极限,就可以通过并行配置多个行来进一步提高处理容量,其中新的输入数据被顺序分配到阵列中下一行的第一处理器。
可有利地采用诸如脉动阵列这样的多处理器体系结构的一种场合是数据通信领域。具体地说,脉动阵列已用于诸如路由器这样的中间网络站点或节点的转发引擎中。中间节点通过一系列端口互连计算机网络的通信链路和子网,以在计算机网络的两个或更多个末端节点之间进行数据交换。末端节点一般通过根据预定义的协议交换离散分组或帧来进行通信,所述预定义的协议例如是传输控制协议/因特网协议(TCP/IP)或因特网分组交换(IPX)协议。中间节点通常使用转发引擎来处理在各种端口上接收的分组。该处理可包括确定分组的目的地,例如输出端口,以及将分组放置在与目的地相关联的输出队列上。
中间节点通常采用输出队列来控制放置到计算机网络中的分组流。在一般部署中,输出队列被配置为先进先出(FIFO)队列,其中分组被放置(进入队列)在队列末尾(尾部),并被从队列起点(头部)移除(退出队列)。放置和移除操作通常必须访问队列,这包括向队列中写入/从队列中读出分组或与分组有关的信息,如分组头部。
在某些中间节点中,分组由转发引擎进入队列/退出队列。在采用包含多个处理器的转发引擎的中间节点中,输出队列可被视为共享资源,这意味着多于一个处理器可在给定时间内访问给定队列。然而,共享资源的一个问题是,由中间节点按给定顺序接收的分组可以按不同的顺序来处理和转发。
为了解决这个问题,脉动阵列可被配置为保证上下文数据处理的先进先出(FIFO)排序。如这里所使用的,上下文数据或“上下文”被定义为整个分组,或更优选地,分组头部。根据FIFO排序,由阵列行的处理器处理的上下文在阵列的行前进之前,必须按照处理器的接收顺序完成。每个处理器被分配一个预定的时间间隔或“相位”,在该时间间隔或“相位”内完成其上下文处理。当每个处理器在相位内完成其上下文处理时,该控制机制是足够的。然而,如果处理器在相位间隔内停止其处理或无法完成其处理,则阵列中的所有处理器也顺序停止,以维持FIFO排序。这里,FIFO排序控制机制既惩罚了停止的处理器那一行的处理器,又惩罚了多处理器阵列的剩余行的处理器。
对于脉动阵列所执行的大部分应用程序,FIFO排序不是必要的。然而,可能需要FIFO排序来保持彼此之间具有依赖性的上下文的顺序。对应于相同“应用程序流”(或更简单的说,“流”)的分组通常需要被视为相互具有依赖性。流被定义为具有相同的第三层(如,因特网协议)源和目的地地址、相同的第四层(如,传输控制协议)端口号以及相同的第四层协议类型的分组序列。

发明内容
简要地说,本发明针对一种用于在多线程处理系统的多个线程之间保持顺序的系统和方法。在图示实施例中,处理系统有被组织为一个或多个阵列的多个处理器,每个处理器支持多个线程。处理系统可被放置在中间网络设备处,如路由器的转发引擎处,以便处理网络消息,如分组。排序系统包括向自由线程分配诸如处理接收到的分组这样的工作的分发器、跟踪其中每一个正在处理不同分组的多个线程的相对顺序的顺序管理器、以及与每个线程相关联的用于加强相对顺序的线程客户端。当分组被接收时,其被基于所选的标准或属性分配到第一顺序组,其中所选的标准或属性例如是接收分组的到达物理接口。在处理给定分组期间,各个线程响应于识别其他更详细的或不同的分组标准或属性(如),请求重新分配到其他顺序组,其中其他更详细的或不同的分组标准或属性例如是分组的网络协议类型的标识、其应用流、其发送隧道等。顺序管理器优选地管理顺序组之间线程的切换,并且对于每个顺序组,顺序管理器和线程客户端的协同操作确保了对应于该顺序组的线程根据其相对顺序处理其分组。
更具体地说,分发器优选地生成接收的分组的上下文,并选择该上下文的初始或主组标识符(ID)。初始组ID指定了上下文的第一顺序组。然后,分发器标识自由线程,并将分组上下文传递到该自由线程以进行处理。分发器还将组ID和分组上下文所分配到的线程ID注册到顺序管理器。在图示实施例中,顺序管理器将该信息存储在多个表中,这多个表用来生成顺序状态,该顺序状态指示对于每个组ID,从而对于每个顺序组,哪一个线程在该组ID的队头(Head of Line,HOL)处。线程客户端防止其各个线程执行某些动作,如访问诸如存储器这样的共享资源,或者释放正处理的分组,直到线程到达其顺序组的HOL为止。但是,线程可以在该线程到达HOL之前执行对顺序不敏感的动作。此外,线程可以在处理单个分组期间动态改变顺序组。但是,属于每个顺序组的线程被保持了相对于彼此的顺序。


本发明以下的描述参考附图,在附图中图1是计算机网络的框图,其中计算机网络包括互连的通信介质和附接到多个末端节点的子网的集合;图2是可有利地用于本发明的诸如网络交换机这样的中间网络节点的示意性框图;图3是具有用于分析分组的处理器池的图2节点的转发引擎的部分示意性框图;图4是根据本发明的优选排序系统的示意性图示;图5是图4的排序系统的数据结构之间的相互关系的示意性图示;以及图6是图4的排序系统所实现的状态图的示意性图示。
具体实施例方式
图1是计算机网络100的框图,计算机网络100包括互连的通信介质和附接到多个站点(station)的子网络的集合。站点一般是计算机,包括末端节点102、112和中间网络节点200。中间节点200可以是路由器或网络交换机,而末端节点102、112可以包括个人计算机、工作站、服务器、个人数字助理(PDA)等等。子网络通常包括局域网(LAN)110和120,尽管本发明也可有利地用于其他通信介质配置,如点对点网络链路、广域网(WAN)、无线网络等等。网络站点之间的通信一般受根据预定义的协议在通信末端节点之间交换诸如帧或分组这样的离散网络消息的影响,其中预定义的协议例如是如因特网协议(IP)、因特网分组交换(IPX)协议、AppleTalk协议、DECNet协议等等。
图2是中间节点200的示意性框图,在图示实施例中,中间节点200优选地是网络交换机。交换机通常执行第二层(L2)处理功能,如“直通(cut-through)”操作,其中,不必在传送到目的地之前存储整个帧。另外,节点200也实现第三层(L3)转发操作。但是,应当注意,中间节点200也可以被配置为路由器以执行L3路由处理。这里所描述的体系结构的特征是能够对节点200编程以执行L2、L3或更高层的操作。为此,节点200的操作将结合分组的IP交换来描述,尽管其也可被编程用于其他应用程序,如数据加密。
中间节点200包括多个互连组件,所述多个互连组件包括阵列式的转发引擎300、诸如外部存储器(Ext Mem)这样的各种存储器280、缓冲和队列单元(BQU)210和网络端口接口卡240。这些组件的操作优选地由时钟模块270同步地控制,尽管转发引擎300的阵列式元件也可被可操作地配置为异步动作。在图示实施例中,时钟模块270经由时钟线向节点200的组件全局地分配其时钟信号。
外部存储器(Ext Mem)280通常包括可由转发引擎300寻址的随机访问存储器(RAM)存储单元,其用于存储被组件访问的软件程序和数据结构。其一部分一般驻留在存储器280中并由引擎300所执行的操作系统,除其他方式外,也可通过调用支持在节点200上执行的软件处理的网络操作,来功能性地组织节点200。本领域的技术人员很清楚,其他存储器设备,包括各种计算机可读介质,可用于存储并执行程序指令。
如图所示,阵列式转发引擎300耦合到外部存储器(Ext Mem)资源280,缓冲和队列单元(BQU)210连接到用于存储分组的分组存储器220和用于存储数据结构上分组的头部的队列存储器230,所述数据结构例如是链接列表,其可被组织为队列235。BQU 210还包括数据接口电路,用于经由具有仲裁器255的选择器电路250将转发引擎300与多个线路卡240互连。线路卡240例如可包括OC12、OC48和快速以太网(FE)端口,其中每个包括传统的接口电路,该传统接口电路并入了信号、电和机械特性以及交换电路,该传统接口电路需要接口到物理介质和运行在该介质上的协议。中间节点200的一般配置可包括这些接口上的许多输入/输出信道,每个信道与队列存储器230中的至少一个队列235相关联。转发引擎300通常用作交换处理器,其随着BQU 210实现队列操作顺次修改分组和/或头部。
路由处理器260执行传统的路由协议以与转发引擎300直接通信。路由协议通常包括末端节点之间的拓扑信息交换,以例如基于目的地IP地址确定经过网络的最优路径。这些协议提供了路由处理器260用来创建并维护路由表(未示出)的信息。这些表可被加载到外部存储器280中作为转发信息基础(FIB)表,转发引擎300用转发信息基础(FIB)表来执行转发操作。当根据IP交换处理头部时,引擎300通过利用头部的IP地址在FIB表中索引来确定向何处发送分组。转发操作的执行导致头部的目的地媒体访问控制(MAC)地址被转发引擎300重写以识别分组的输出端口。
图3是转发引擎300的部分示意性框图,包括诸如处理器330这样的处理元件的池340,每个处理元件可被独立地标识,如P0、P1、P2等。处理器330优选地由各个处理器间链路(未示出)互连,从而使其可以相互通信。每个处理器330优选地包括,除了其他以外,多个算术逻辑单元(ALU)和具有多个通用寄存器的寄存器文件,其中寄存器存储ALU所处理的中间结果信息。根据本发明,处理器330可被组织为任何有利的部署,如一维(1-D)阵列、网格、树、立方体、无连接的处理器池等等。还应当注意,支持多线程执行的单个处理器可利用本发明。
转发引擎300还包括输入缓冲器310和输出缓冲器380,其中输入缓冲器310接收要处理的分组(或者可能只是分组头部),输出缓冲器380用于在处理完成时接收分组或分组的一部分。耦合到处理器330的池340的是一个或多个存储器控制器320。处理器330利用存储器控制器320来访问外部(EXT)存储器280。根据本发明,转发引擎300还包括一个或多个分发器404,例如分发器404a和404b,以及一个或多个顺序管理器408,例如顺序管理器408a和408b。在图示实施例中,对于诸如分发器404a这样的每个分发器404,有对应的顺序管理器,例如顺序管理器408a。如这里所述,在输入缓冲器310处接收的分组被传递到所选的分发器404,该分发器404又将每个分组分配到池340中可用的处理器330以进行处理。在优选实施例中,所分配的处理器,例如P3,处理各个分组直到完成(包括修改分组头部),并将其转发到输出缓冲器380。此时,处理器P3可用于处理另一个分组。在分组处理期间,处理器330可经由存储器控制器230访问外部存储器280。由于在优选实施例中每个处理器330支持多线程,因此单个处理器可一次处理多个分组,其中每个分组被分配或指定到不同的线程。
外部存储器280被优选地组织为一个或多个库,并利用低延迟动态随机访问存储器(RLDRAM)设备实现。但是,本领域技术人员应认识到,可以使用其他的存储器设备,如同步随机访问存储器(SRAM)等等。外部存储器280存储非暂态数据(例如,转发表、队列等),非暂态数据被组织为用于处理暂态数据的一系列数据结构。所有的外部存储器280优选地都可从池340中的任意处理器330访问。
中间节点200的合适平台是来自California,San Jose的思科系统公司的7200路由器系列。
排序机构图4是根据本发明的优选排序机构400和多个处理器330的示意性图示,其中多个处理器330例如是两个处理器330,被标识为P0和P1。处理器P0有一个或多个线程,例如三个线程402a-c。每个线程402有其自身的资源(未示出)集,如寄存器、一个或多个指令计数器和本地存储介质。如这里所解释的,线程可处于自由状态中,在该状态下,其可用于执行工作或可被分配到某个指令序列或过程。通常,所分配的线程在任何给定时刻工作在单个分组(或其一部分)上。排序机构400包括分发器404、每个线程402a-c的线程客户端406a-c和顺序管理器408。另外,分发器404包括组标识符(ID)发生器410和线程选择引擎412。而且,每个线程客户端406有状态机引擎422,如这里所述,状态机引擎422可在多个状态之间转换。顺序管理器408包括顺序保持引擎414和一个或多个表,如线程表416、组标识符(ID)映射表418和顺序组表420。
处理器P1也包括一个或多个线程(未示出)。
在图示实施例中,线程表416和顺序组表420被存储在片上存储器中,如片上SRAM或寄存器中,而组ID映射表418是通过一个或多个内容可寻址存储器(CAM)设备来实现的。
本领域的技术人员应当理解,分发器404、线程客户端406和顺序管理器408可利用一个或多个逻辑电路来形成。或者,这些组件可通过一个或多个软件模块或库来实现,所述软件模块或库例如驻留在外部存储器280中,并包括与这里所述的方法有关的程序指令,该程序指令可由诸如处理器330这样的一个或多个处理元件来执行。其他计算机可读介质也可用于存储并执行这些程序指令。但是,本领域的技术人员应认识到,也可用各种硬件和软件的组合,包括固件,来实现本发明。
图5是放置在顺序管理器408处的多个表之间的相互关系的示意性图示。每个表至少逻辑上被优选地组织为多个列和行,列和行的交叉点定义了用于存储数据或信息的单元或记录。如图所示,线程表416优选地包括有效性列502、序列号列504、顺序组表指针列506和多个行507a-h。组ID映射表418优选地包括组ID列508、有效性列510和行511a-h。顺序组表420优选地有队头(HOL)处的当前序列(Seq.)号(No.)列512、线程计数列514、位图或向量列516和多个行518a-h。位图516有多个比特位置,例如五个比特位置516a-e,这五个比特位置也被标记为“0”到“4”。
如这里所述,在表418的条目511和表420的条目518之间有一一对应关系。
基本上,分发器404将接收的分组分配到自由线程,并向顺序管理器408提起注册,顺序管理器408随后利用注册来跟踪对属于相同顺序组的分组进行操作的那些线程的顺序。线程客户端406和顺序管理器408协同操作,以确保工作在相同顺序组中的线程402根据对应顺序组内的线程的相对顺序执行其分组处理。
在初始化之后,顺序管理器408优选地将线程表416和组ID映射表418的每个条目标记为无效。
将线程注册到新的和现有的顺序组如箭头424所示,需要进行某种处理的分组被分发器404所接收。应当理解,这种分组可能来自任意多的源。例如,分组可能来自外部接口或内部缓冲器,如入口成形器、再循环队列或重排序队列等。分发器404可被配置为连续地监控这些源。当接收到需要处理的分组时,线程选择引擎412选择自由线程,例如线程402b,接收到的分组被分配到该自由线程。线程选择引擎412可维护自由线程的列表。在识别自由线程之后,分发器404优选地生成分组上下文。在优选实施例中,分组上下文包括分组头部、分组句柄(例如,可由分发器404或某个其他实体生成的标识符)和关于分组源的信息,如从其接收分组的外部接口或内部队列。
随后,组ID发生器410确定分组所属的初始或主要顺序组。如这里所述,共享公共标准或属性的分组优选地被分配到相同顺序组。此外,如这里所述,分配到相同顺序组的分组是以它们被分配到该组的顺序来处理的。即,分配到给定顺序组的分组在所有以后分配的分组之前被处理,但是在所有先前分配的分组已被处理之后被处理。
从相同源接收的分组被分配到相同的初始顺序组,从而被赋予相同的组ID,其中相同源例如是相同的物理到达接口、相同的再循环队列等。组ID定义了处理共享公共标准或属性并被施加以顺序的分组的线程集。在图示实施例中,组ID是通过将属性或标准类型与特定属性或标准值连接在一起而产生的自由形式。初始组ID的示例如下所示“到达接口”/接口号“再循环队列”/队列号“内部缓冲器”/缓冲器号组ID发生器410优选地以上述格式生成组ID。或者,组ID发生器410可维护列表(未示出),该列表将分组的每个可能的源,如外部接口、内部队列等,与对应的组ID值相映射。
假定接收的分组映射到组ID值“到达接口/0017”。
然后,分发器404通过将分配的组ID值和诸如线程402b这样的所选线程的标识符(ID)发送到顺序管理器408,来将分组注册到顺序管理器408,如箭头426所示。分发器404还将分组上下文发送到所选线程402b,如箭头428所示。引擎414利用在注册中指定的线程ID执行其线程表416的查找。具体地说,每个线程ID索引到线程表416的对应行507。假定线程402b索引到线程表416的行502h。在识别出各个行,即行502h之后,顺序保持引擎414更新对应于有效性列502的单元,以反映出线程402b当前有效。然后,引擎414利用在注册中指定的初始组ID值对组ID映射表418执行查找。如果对于指定的组ID值没有匹配条目,则引擎414优选地选择表418中的自由行或条目,例如行511b,并通过将组ID值,即“到达接口/0017”输入到对应于组ID列508的单元中,将该行分配给这个组ID。引擎414类似地选择顺序组表420中的对应条目,例如行518b,并清空对应于序列号列512、线程计数列514和近HOL列516的单元。即,这些单元中的每一个被设为0。
当在表418和420中创建新的条目后,引擎414重复其对组ID映射表418的搜索。这一次搜索返回对新创建的条目,即行511b的匹配,条目511b又推断出顺序组表420中的对应条目,即行518b。然后,顺序保持引擎414给线程分配序列号。在图示实施例中,给定顺序组的每个线程被分配以一个严格递增的序列号,该序列号是基于线程到达或分配到给定顺序组来分配的。从而,线程的序列号指定了其相对于给定顺序组中的其他线程的顺序。为了分配序列号,引擎414返回线程表416的条目507h,并且将对应于序列号列504的单元设置为HOL处的当前序列号加上来自顺序组表516的行518b的对应于列512和514的各个单元的线程计数值。这种情况下,两个值为0,因此行507h的对应于列504的序列单元被设为0。然后,引擎414将对应于列506的指针单元设为指向顺序组表420的行518b的指针,如这里所示的值“518b”所示。随后,引擎414将对应于线程计数列514的行518b的单元递增1,如圆括号中所示,从而使线程计数单元反映出与该顺序组相关联的激活线程的当前数目。
每次当顺序管理器408接收到对于现有顺序组ID值的新的注册时,其就利用所指定的顺序组ID值,例如“到达接口/0054”,来索引到组ID映射表418中,并利用匹配条目,例如行511f,来确认顺序组ID值有效(如对应于列510的有效性单元的内容所示),并识别顺序组表420中该组ID值的对应条目,例如行518f。然后,引擎414将来自对应于HOL处的当前序列号列512和线程计数列514的单元中的值,即“3”和“5”,加在一起以生成和,即“8”。然后,引擎414访问线程表416的各个条目,例如行507c,设置对应于列502的有效性单元以指示线程当前有效,并且将所计算的和,即“8”,输入到对应列504的序列单元中。引擎414还将对应于列506的指针单元加载为指向顺序组表420中各个组ID值的条目或行,如这里所示的值“518f”所示。然后,引擎414将表420中对应于列514的线程计数单元递增1,如圆括号所示。
通知线程其顺序状态顺序管理器408通过维护表416-420中的信息,来跟踪线程顺序组内的每个激活线程的顺序。更具体地说,随着每个线程402注册到顺序管理器408,该线程402被分配以一个唯一的序列号,该序列号存储在对应于线程表416的列504的序列单元中。如上所述,不改变的线程的序列号指定线程在其顺序组内的相对顺序。在优选实施例中,注册到给定顺序组的第一线程被分配序列号“0”,第二线程被分配序列号“1”,第三线程被分配序列号“2”,以此类推。另外,在对于给定顺序组ID值的表420的条目处,对应于列512的HOL处的当前序列号单元指示哪一个具体序列号(即哪一个线程)恰好是在各个顺序组的HOL处,而对应于线程计数列514的单元标识各个顺序组的当前激活的线程总数。
为了确保与相同顺序组相关联的线程都以合适的顺序执行其处理,线程客户端406阻止或暂停线程402执行任何“排序的”任务,除非或直到线程402在各个顺序组的队头(HOL)为止。而且,当在线程表416中反映出的线程被分配的序列号与顺序组表420的HOL处的当前序列号值相匹配时,认为给定线程402处于其顺序组的HOL处。随着每个线程402到达其顺序组的HOL处并完成其处理,将该线程402从顺序组中移除,并递增HOL处的当前序列号值,从而允许队中的下一个线程到达HOL。
在优选实施例中,每个线程客户端406维护其线程402的状态,该状态指示线程在各个顺序组中的相对位置。图6是根据本发明的示意性状态图600。在优选实施例中,线程402可能处于以下五个可能状态中的任何一个移动状态602、非队头(HOL)状态604、近HOL状态606、HOL状态608和独立状态609。移动状态602用于当线程移动进入第一顺序组或从一个顺序组移动到另一个顺序组时的情形。移动状态602用来处理顺序管理器408无法即时响应于某些请求的情形。一旦收到来自顺序管理器408的关于已接受请求的指示,线程客户端406就从移动状态602中转换出来。非HOL状态604用于当线程在顺序组中但是当前不在该顺序组的HOL处的情形。近HOL状态606用于当线程在顺序组中而且在该顺序组的HOL的某个预定义的范围内的情形。HOL状态408用于当线程在顺序组中而且是该顺序组的HOL处的线程的情形。独立状态609用于当线程不再与顺序组相关联的情形。另外,这些状态之间的某些转换是允许的。箭头610-624指示状态602-609之间的可允许转换。放置在每个线程客户端406处的各个状态机422响应于线程402发射到顺序管理器408的请求,以及响应于从顺序管理器408接收的顺序状态通知,使各个线程402在状态602-609之间转换。
如上所述,顺序管理器408还经由线程客户端406向线程402提供关于线程在其顺序组内的相对顺序的信息。优选地,顺序保持引擎414连续地生成线程表416中所列出的每个有效线程402的状态信息。具体地说,对于表416的每个有效条目507,引擎414首先确定各个线程是否在其顺序组的队头(HOL)处。如果线程的序列号(存储在线程表416中)与来自该顺序组的顺序组表420的HOL处的当前序列号值匹配,则线程处于其顺序组的HOL处。如果线程处于HOL处,则引擎414生成“HOL”状态通知,并将该“HOL”状态通知发射到线程,如箭头430所指示。如果线程不在HOL处,则引擎414确定其是否在近HOL处。如果线程的序列号在该顺序组的顺序组表420中所指定的处于HOL处的当前序列号的定义的范围内,则线程在近HOL处。定义的范围对应于释放位图516的长度,在此情况下是五个比特。释放位图516跟踪请求从其顺序组中释放出来,但是还未到达HOL处的线程。如果线程在定义的范围内,则引擎414生成“近HOL”状态通知,并将该“近HOL”状态通知发射到线程,也如箭头430所指示。如果线程不在近HOL处,则引擎414生成“非HOL”状态通知,并将该“非HOL”状态通知发射到线程。
理想情况下,释放位图516的长度是线程总数减1。这允许任何线程402在任何时刻请求从其顺序组中释放出去,从而消除了线程客户端406中“非HOL”状态通知以及非HOL状态604的必要性。然而,实际的限制,例如逻辑电路上的可用空间,一般要求更小的尺寸。
响应于来自顺序保持引擎414的状态通知,线程客户端406处的状态机422将线程402在上述状态之间转换。例如,当线程402从分发器404接收到要处理的分组上下文时,线程的状态机422优选地进入移动状态602,如箭头610所指示。假定已经有多于五个其他的线程当前被分配给相同顺序组,则线程客户端406将会从顺序管理器408接收到非HOL状态通知。如箭头612所指示,状态机422通过从移动状态602转换到非HOL状态604来作出响应。如果在该线程前的该组ID的激活线程数目降到或低于5,则线程客户端406将会从顺序管理器408接收到近HOL状态通知。作为响应,状态机422从非HOL状态604转换到近HOL状态,如箭头614所指示。随后,线程客户端可接收到HOL状态通知,指示线程已到达其顺序组的HOL处,并使得状态机422转换到HOL状态608,如箭头616所指示。应当理解,线程402可以从非HOL状态604直接转换到HOL状态608,如箭头618所指示。在完成其分组处理后,线程从HOL或近HOL状态608、606转换到独立状态609,如箭头624和622所指示。
应当理解,也可用其他状态来补充或替代上述状态中的任何一个。事实上,本发明可根本不用任何状态,或只用两个状态,如非HOL状态和HOL状态。
当线程402需要执行有序任务,如访问诸如存储器这样的共享的或全局的资源时,线程402优选地例如通过在该线程402上执行的微代码被配置为向其线程客户端406发射“等待HOL(Wait_HOL)”原语。响应于等待HOL原语,线程客户端406暂停线程402的进一步活动,直到线程客户端406从顺序管理器408接收到状态通知指示线程402已到达其顺序组的HOL处为止。一旦接收到HOL状态通知,线程客户端406就取消暂停线程402,从而允许其执行有序任务。
线程402可在任何时刻执行“无序”任务,而不论其在顺序组中的当前顺序如何。为了执行无序任务,如确定分组的协议类型、生成转发判决、访问共享的外部存储器280、重写分组头部等等,线程402仅仅执行各个任务,而不是发射等待HOL原语到线程客户端406。即,根据本发明,线程402既可执行有序任务,也可执行无序任务。在图示实施例中,运行或执行在线程402上的微代码自身确定哪些任务是有序任务,要求线程在顺序组的HOL处,以及哪些任务是无序任务,可在任何时刻执行。
发射顺序组交换请求线程402也可在处理给定分组的同时改变其所属的顺序组。例如,假定在相同外部接口,如接口45上接收一系列分组。如上所述,分发器404最初将这些分组中的每一个分配到相同顺序组,例如顺序组“到达接口/0044”,并将其分配到不同的线程402以进行处理。进一步假定在接口45上接收的这一系列分组属于不同的协议类型,如因特网协议(IP)、因特网协议交换(IPX)、简单网络管理协议(SNMP)等,并且只有对应于相同协议类型的分组需要相对彼此保持一定的顺序。即,在接口45上接收的所有IP分组需要被保持有序,而相对于在接口45上接口IPX和SNMP分组,则可以不按顺序处理IP分组。
如果在其分组的处理期间,线程402确定其分组是IP分组,则线程402优选地发射请求,将其顺序组从用于在物理接口45上接收的分组的顺序组,即顺序组“到达接口/0044”,改变为用于在物理接口45上接收的IP分组的顺序组,即顺序组“到达接口/0044/协议类型/IP”。应当理解,线程402可通过将现有组ID值与新属性或标准及其对应值连接到一起,来生成新的组ID值。或者,线程可访问存储在外部存储器280中的预定义的数据结构。作为响应,运行在线程402上的微代码优选地生成“交换(Exchange)”原语,并将该原语发射到其线程客户端406。线程客户端406又将交换请求发射到顺序管理器408,如箭头432所指示。交换请求指定了新的顺序组,即,顺序组“到达接口/0044/协议类型/IP”。在图示实施例中,线程402必须在其当前顺序组的HOL处,即“到达接口/0044”的HOL处,以发射交换原语。如果线程402不在HOL处,则当其发射交换原语时,线程客户端406将停止线程402,直到线程到达HOL。
一旦接收到交换请求,顺序保持引擎414就在线程表416中查找请求线程,以确定线程所属的当前顺序组,并取得指向顺序组表420的对应条目的指针。然后,引擎414将存储在对应于列512的HOL处的当前序列号单元中的值递增1,以指示该顺序组中的下一个线程目前在HOL处,并将存储在对应于列514的线程计数单元中的值递减1,以指示该顺序组少了一个激活线程,即发射交换请求的线程。随后,引擎414检查该顺序组条目的释放位图。如果释放位图的最左端比特,即条目516a被断言,例如被设为“1”,则指示顺序中的下一个线程已预先请求被从其顺序组中释放出来。这种情况下,引擎414将释放位图往左移1位(也称为填充0操作),递增对应于列512的HOL处的当前序列号单元,并将对应于列514的线程计数单元递减1。引擎414重复这些步骤,直到释放位图516的最左端比特516a为0。
在从其当前顺序组中移除目标线程后,引擎414将线程加到新的顺序组,即,顺序组“到达接口/0044/协议类型/IP”。具体地说,引擎414利用在交换请求中指定的组ID值,来执行对组ID映射表418的查找。如果没有匹配条目,则创建新的条目,如上结合注册过程所述。如果发现新的顺序组的条目,则引擎414返回到对应于目标线程402的线程表416的条目,并将对应于列504的序列号单元设为HOL处的当前序列号的值加上来自顺序组“到达接口/0044/协议类型/IP”的顺序组表516中条目的线程计数单元的值。然后,引擎414将对应于目标线程的列506的指针单元设为指向新顺序组的顺序组表420的条目或行的指针。随后,引擎414将对应于列514的线程计数单元递增1。
目标线程目前是新顺序组的成员。其可在任何时刻执行无序任务,但是在执行任何有序任务之前必须等到其到达新顺序组的HOL处。
为了防止竞争状态,线程402试图通过发射后续请求进一步改变或查询其顺序组的努力会被线程客户端406停止,直到经由确认(ACK)总线434确认当前请求后为止。
应当理解,对线程可改变顺序组的次数没有限制。一般,每次当线程402发射交换请求时,共享标准或属性的粒度或详细程度增大。即,随着线程402揭示分组的新的或另外的标准或属性,进入了新的顺序组。组ID的示例性序列如下所示。
(1)到达接口/0044(2)到达接口/0044/协议类型/IP(3)到达接口/0044/协议类型/IP/应用程序流/源地址,目的地地址,源端口,目的地端口,协议类型(4)发送接口/0071此外,线程在新顺序组中的位置是基于向顺序管理器408发射交换请求的时间,如上所述,这要求线程在其当前顺序组的HOL处。
应当理解,可以基于可由两个或更多个分组共享的任何选定标准或属性,来建立顺序组。例如,分组的初始或主顺序组可取决于接收分组的物理接口,如时分复用(TDM)信道、多链路信道、电路等。后续的顺序组可基于接收分组的逻辑接口,如虚拟局域网(VLAN)、虚拟信道(VC)、或数据链路连接标识符(DLCI)。后续顺序组的其他标准或属性包括到达隧道接口、第三层(L3)协议类型、发送逻辑接口、发送隧道等等。
还应当理解,不同于从分组自身导出的某些另外细节,区分两个或更多个顺序组的标准或属性可以是步骤或操作。例如,处理在相同接口上接收的IP分组的线程可能都需要顺序访问多个,例如三个不同的共享资源,并且/或者它们可能需要顺序地多次访问相同的共享资源。这种情况下,可建立下面的顺序组。
(1)到达接口/044/协议类型/IP/步骤/001(2)到达接口/044/协议类型/IP/步骤/002(3)到达接口/044/协议类型/IP/步骤/003如图所示,唯一区分这三个顺序组的属性或标准是正执行的具体步骤,例如要访问的具体共享资源。当作为第一顺序组一部分的线程到达HOL时,其访问对应于步骤001的共享资源。然后,线程改变到第二顺序组,并且当其到达该顺序组的HOL时,其访问对应于步骤002的共享资源,依次类推。
本领域的技术人员应认识到,在定义顺序组时也可采用其他的这种标准或属性。
发射顺序组释放请求当线程402完成其有序分组处理时,线程402优选地生成“释放”原语,并将该原语发射到其线程客户端406。然后,线程客户端发射释放请求到顺序管理器408。在图示实施例中,如果线程402处于HOL状态608或近HOL状态606,则其只能发射“释放”原语。如果线程不在其中任何一种状态,则其线程客户端406会响应于“释放”原语而暂停线程402,直到其到达其中任何一种状态。一旦释放请求被发射到顺序管理器408,线程客户端406就将线程402移动到独立状态609。
响应于释放请求,顺序保持引擎414在线程表416中查找目标线程,并使用列516的单元中的指针来标识顺序组表420中的对应条目。此时,顺序保持引擎414还将该线程在线程表416中的条目标记为无效。如果线程的序列号与顺序组表420处的当前序列号匹配,即指示线程在该顺序组的HOL处,则引擎414从顺序组中移除线程。具体地说,引擎414将存储在对应于列512的HOL处的当前序列号单元中的值递增1,以指示该顺序组中的下一个线程目前处于HOL,并将存储在对应于列514的线程计数单元中的值递减1,以指示发射释放请求的线程不再是该顺序组的成员。随后,引擎414检查该顺序组条目的释放位图。如果释放位图的最左端比特,即条目516a被断言,例如被设为“1”,则引擎414执行填充0操作,如上所述。
如果线程的序列号与该顺序组的HOL处的当前序列号不匹配,则引擎414将线程加到释放位图。具体地说,引擎414通过将线程的序列号减去来自对应于列512的单元的HOL处的当前序列号值,来计算线程在释放位图中的位置。然后,考虑最左端释放比特516a作为差别“1”的情况,引擎414为发射释放请求的线程选择释放位图516中的比特位置。假定所计算的差别为5。这种情况下,引擎414选择第五比特位置,即单元516e。然后,引擎414断言释放位图516的所选比特位置516e。
在发射释放原语后,线程可执行不需要排序的任何分组后处理任务,如统计计算、资源清扫等。一旦完成任何这种分组后处理任务,线程402就优选地发射“自由线程(Free Thread)”原语到其线程客户端406。线程客户端406通过暂停线程并通知分发器404线程可用来作出响应。此时,分发器404可分配新的分组到线程402以进行处理。
线程402可选择发射自由线程原语,而不需要首先发射释放原语,即线程不在独立状态609中。这种情况下,线程客户端406会自动地发射释放请求到顺序管理器408。如果线程不在HOL或近HOL状态,则线程客户端406将暂停线程,并延迟发送释放请求到顺序管理器408的操作,直到其到达HOL或近HOL状态。
如图所示,利用本发明,后接收的属于一个顺序组的分组不会被停止,直到从某些其他顺序组先接收的分组完成为止。从而,彼此独立的分组允许在处理期间相互传递。
在本发明的另一方面中,等待到达其当前顺序组的HOL处的线程402可将其当前分组推入队列,并继续执行其他任务或工作。具体地说,对于每个可能的顺序组优选地建立分离的队列。队列可添加于顺序组表420的行后。等待到达HOL的线程可将其分组上下文以及任何计算值和/或状态信息存储在队列中。线程的序列号也被加载到队列中。然后,线程可自由执行其他处理任务。当存储在队列中的分组上下文的序列号与HOL处的当前序列号匹配时,将分组上下文退出队列并进行处理。
应当理解,本发明可操作除了分组以外的其他网络消息,如帧、信元、分段等,并且术语网络消息试图包含所有这些消息。
线程表416优选地对于放置在转发引擎300中的每个线程402都有分离的条目。为了适应每个线程都是激活的并且被分配到不同顺序组中的情形,组ID映射表418和顺序组表420的长度都等于线程的总数。
本领域的技术人员应认识到,表416-420的信息可以其他方式实现,如链接列表等。而且,有序组表420不需要包括释放位图。
本领域的技术人员应认识到,也可采用其他部署和配置来获得本发明的利益和优点。例如,由线程客户端执行的功能可并入在顺序管理器中。此外,可提供多个分发器和顺序管理器的示例,每个这种示例被分配到转发引擎处的不同组线程。另外,除了这里所述的中间网络节点的转发引擎之外,也可以在其他的多线程计算环境中采用本发明。
还应当理解,可以将一个或多个分发器和/或顺序管理器并入在输入缓冲器310或转发引擎300的某些其他组件中。
前述描述针对本发明的特定实施例。很清楚,可对所述实施例进行其他变化和修改,而获得其优点中的某些或全部。例如,本发明可用于除了脉动阵列体系结构以外的其他计算环境中。实际上,本发明可用于任何多线程计算机系统中,包括单处理器系统和具有除阵列以外的其他拓扑的多处理器系统。因此,所附权利要求的目的是覆盖所有这些在本发明的真正精神和范围内的变化和修改。
权利要求
1.一种用于保持放置在一个或多个处理器处的多个线程之间的顺序的方法,其中每个线程执行指令序列,所述方法包括以下步骤以特定顺序将一组线程分配到顺序组;将第一个分配的线程视为至少最初在所述顺序组的队头(Head ofLine,HOL)处;给所述线程组中的每个线程分配单独的序列号,每个序列号指示各个线程被分配给所述顺序组的顺序;提供可修改的当前HOL序列值,该值指示哪一个序列号当前在所述顺序组的HOL处;以及使所述线程组中的给定线程暂停执行所述给定线程指令序列中的至少一部分,直到如所述可修改HOL序列值所指示的,所述给定线程到达所述顺序组的HOL处。
2.如权利要求1所述的方法,还包括以下步骤在当前处于所述顺序组的HOL处的线程完成其指令序列时,修改所述HOL序列值,以指示所述特定顺序中的下一个线程。
3.如权利要求1所述的方法,其中,一个或多个处理器被放置在计算机网络的中间网络节点处,并且所述线程被配置为处理经过所述计算机网络的网络消息。
4.如权利要求3所述的方法,其中,分配到所述顺序组的所述线程组中的每一个处理共享公共属性的网络消息。
5.如权利要求4所述的方法,其中所述中间网络节点具有用于发送和接收网络消息的多个接口,并且第一公共属性对应于接收一组网络消息的接口。
6.如权利要求1所述的方法,还包括以下步骤在所述组的一个或多个线程到达HOL之前,允许所述一个或多个线程执行其各自的指令序列中的至少一部分。
7.如权利要求1所述的方法,还包括以下步骤将所选线程从第一顺序组切换到第二顺序组。
8.如权利要求7所述的方法,其中,所述所选线程必须处于所述第一顺序组的HOL处,以便被切换到所述第二顺序组。
9.如权利要求8所述的方法,还包括以下步骤基于所述所选线程被切换到所述第二顺序组的顺序,给所述所选线程分配一个新的序列号。
10.如权利要求1所述的方法,还包括以下步骤为每个线程提供一个线程客户端,其中每个线程经由一个或多个原语与其线程客户端通信,其中所述一个或多个原语由所述线程发射到各自的线程客户端,并且所述原语包括“等待HOL”原语,其使得所述线程客户端暂停所述线程,直到所述线程到达其顺序组的HOL为止。
11.如权利要求10所述的方法,其中,所述原语还包括交换原语,其使得所述线程客户端或者当所述线程不在其顺序组的HOL处时暂停所述线程,或者当所述线程在其顺序组的HOL处时将所述线程从第一顺序组切换到第二顺序组。
12.如权利要求10所述的方法,其中,所述原语还包括释放原语,其使得所述线程客户端进行以下操作中的一种(1)如果所述线程不在其顺序组的HOL处或近HOL处之一,则暂停所述线程,(2)如果所述线程在其顺序组的HOL处或近HOL处之一,则使得所述线程被从其顺序组中移除。
13.如权利要求10所述的方法,其中,所述原语还包括自由线程原语,其使得所述线程客户端将所述线程变为可用于工作。
14.在具有用于在计算机网络内发送和接收网络消息的多个接口的中间网络节点中,一种被配置用来处理在所述中间网络节点处接收的网络消息的转发引擎,所述转发引擎包括用于处理接收的网络消息的多个线程;用于将所述网络消息中的至少一部分分配到所述多个线程中的所选若干个的分发器,其中所述分发器将每个网络消息关联到顺序组;与所述多个线程有通信关系的顺序管理器,用于跟踪与相同顺序组相关联的多个线程之间的相对顺序;以及与每个线程相关联的线程客户端,所述线程客户端被配置为确保所述线程根据所述线程在所述顺序组内的相对顺序来处理其各自的网络消息。
15.如权利要求14所述的转发引擎,其中,所述分发器将所有共享相互依赖性的网络消息关联到相同顺序组。
16.如权利要求15所述的转发引擎,其中所述中间网络节点有多个物理接口和多个逻辑接口,并且所述相互依赖性是接收所述网络消息的物理接口和逻辑接口中的一种。
17.如权利要求14所述的转发引擎,其中,所述网络消息是分组、帧和信元中的一种。
18.如权利要求14所述的转发引擎,其中,所述线程被配置为在所述线程处理其各自的网络消息时,发射请求到所述顺序管理器以改变所述线程所关联的顺序组。
19.如权利要求18所述的转发引擎,其中所述顺序管理器跟踪哪一个线程在所述相对顺序的头部处,阻止给定线程改变其顺序组,直到所述给定线程到达其当前顺序组的头部处。
20.如权利要求14所述的转发引擎,其中所述顺序管理器跟踪哪一个线程在所述相对顺序的头部处,所述线程客户端使所述线程暂停执行对所述网络消息的至少部分处理,直到线程在所述相对顺序的头部处为止。
21.如权利要求19所述的转发引擎,其中,所述线程在到达所述相对顺序的头部处之前执行对所述网络消息的至少部分处理。
22.如权利要求20所述的转发引擎,其中,所述顺序管理器包括顺序组表,其被操作以指示哪一个线程在每个顺序组的队头处;以及线程表,其指定每个线程在其顺序组中的相对顺序。
23.如权利要求22所述的转发引擎,其中,当每个线程到达其顺序组的队头并完成对各自的分组的处理时,所述顺序管理器操作所述顺序组表,以指示所述相对顺序中的下一个线程已到达所述顺序组的队头。
24.如权利要求22所述的转发引擎,其中每个顺序组被分配一个组标识符(ID)值;并且所述顺序管理器还包括组ID表,其将组ID值映射到各个顺序组的顺序组表中的对应条目。
全文摘要
一种系统和方法保持多线程处理系统中多个线程之间的顺序。可被放置在中间网络设备处的处理系统有多个处理器,每个处理器支持多个线程。排序系统包括分发器、顺序管理器和线程客户端,其中分发器向自由线程分配工作,如处理接收的分组,顺序管理器跟踪线程的相对顺序,线程客户端与每个线程相关联,用于加强确定的顺序。要由处理系统处理的分组被顺序管理器基于所选的属性分配到初始顺序组,并且共享相同属性值的那些分组被分配到相同顺序组。在处理期间,线程可响应于分组的其他属性请求重新分配到其他顺序组。顺序管理器优选地管理线程在顺序组之间的切换,并确保每个顺序组内的线程顺序处理其分组。
文档编号H04L12/56GK1759379SQ200480006197
公开日2006年4月12日 申请日期2004年2月23日 优先权日2003年3月7日
发明者小肯尼思·H·波特 申请人:思科技术公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1