首页 / 多节点系统的重置

多节点系统的重置实质审查 发明

技术领域

[0001] 本公开涉及一种被配置为支持应用的处理系统,并且具体地涉及包括多个处理节点的处理系统,多个处理节点中的每个处理节点包括被配置为执行用于应用的一部分的指令集的处理单元。

相关背景技术

[0002] 在处理用于复杂或大量应用的数据的上下文中,可以提供用于执行该数据的处理的处理单元。处理单元可以用作工作加速器,某些数据的处理从主机系统卸载到该工作加速器。这样的处理单元可以具有用于执行特定类型的处理的专用硬件。例如,适于机器学习的处理单元可以包括在同一芯片上一起实现的大量处理器片,以便提供由同一处理器支持的大程度的并行性。为了支持这种处理单元的操作,可以在同一芯片上与处理单元一起提供附加的片上系统(SoC)电路。这样的SoC电路可以包括例如独立于处理器的存储器的片上存储器、用于外部通信的端口控制器、用于引导处理单元的引导硬件。
[0003] 为了扩展处理体积以使得能够支持更大的应用,可以将多个处理单元连接在一起以形成更大的系统。在这种处理系统的各种实施方式中,支持这些处理单元的每个芯片经由高速链路连接在一起,从而实现不同处理单元的片处理器之间的通信。
[0004] 在处理跨连接芯片系统支持的应用期间,在这些芯片中的一个或多个上可能发生各种错误事件。常见事件包括例如过温状况、不可校正的存储器错误的发生、设备的外部链路的故障。一些错误事件可能需要重置系统并从检查点重新启动系统的应用运行。

具体实施方式

[0053] 参考图1,其示出了示例多处理单元2。在我们早期的美国申请号15/886065中描述了多片处理单元2,其内容通过引用并入本文。每个处理单元2形成在单独的集成电路(即芯片)上。
[0054] 处理单元2包括多个处理器片4的阵列6和在片4之间连接的互连34。处理单元2可以单独实现为封装在同一IC封装中的多个管芯(die)中的一个。互连34在本文中也可以被称为“交换结构”34,因为它使得片4能够彼此交换数据。每个片4包括执行单元和存储器的相应实例。例如,作为说明,处理单元2可以包括数百个片4的量级,或者甚至超过一千个。为了完整起见,还应注意,如本文所提及的“阵列”不一定暗示片4的任何特定数量的尺寸或物理布局。
[0055] 在实施例中,每个处理单元2是芯片的一部分,该芯片还包括一个或多个外部链路,使得处理单元2能够连接到一个或多个其他处理单元(例如,同一处理单元2的一个或多个其他实例)。这些外部链路可以包括以下中的任何一个或多个:用于将处理单元2连接到主机系统的一个或多个处理单元到主机链路,和/或用于与同一IC封装或卡上或不同卡上的处理单元2的一个或多个其他实例连接在一起的一个或多个处理单元到处理单元链路。处理单元2以其处理的应用数据的形式从主机接收工作。
[0056] 每个片4包括处理电路和存储器。在一些示例实施例中,处理电路是多线程处理器10。图2示出了根据本公开的实施例的片4的示例。片4包括桶线程处理器(barrel‑threaded processor)10形式的多线程处理器10和局部存储器11。桶线程处理器10是一种多线程处理器10,其中流水线的执行时间被分成交错时隙的重复序列,每个时隙可以由给定线程拥有。
稍后将更详细地讨论这一点。存储器11包括指令存储器12和数据存储器22(其可以在不同的可寻址存储器单元或同一可寻址存储器单元的不同区域中实现)。指令存储器12存储要由处理单元10执行的机器代码,而数据存储器22存储要由所执行的代码操作的数据和由所执行的代码输出的数据(例如,作为这种操作的结果)。
[0057] 存储器12存储程序的各种不同线程,每个线程包括用于执行特定一个或多个任务的相应指令序列。注意,如本文所提及的指令意指机器代码指令,即处理器的指令集的基本指令中的一个的实例,其包括单个操作码和零个或多个操作数。
[0058] 在处理器10内,来自指令存储器12的线程中的多个不同线程可以通过单个执行流水线13交错(尽管通常存储在指令存储器中的全部线程的仅一个子集可以在整个程序中的任何给定点处交错)。多线程处理器10包括:多个上下文寄存器堆26,每个上下文寄存器堆26被设置为表示要同时执行的线程中的不同的相应线程的状态(上下文);共享执行流水线
13,其对于并发执行的线程是公共的;以及调度器24,用于以交错方式,优选地以循环方式,调度并发线程以便通过共享流水线执行。处理器10连接到多个线程共用的共享指令存储器
12和多个线程再次共用的共享数据存储器22。
[0059] 执行流水线13包括取出级14、解码级16和执行级18,执行级18包括执行单元,执行单元可以执行算术和逻辑操作、地址计算、加载和存储操作以及其他操作,如指令集架构所定义的。上下文寄存器文件26中的每一者包括用于表示相应线程的程序状态的相应寄存器组。
[0060] 参考图3,其示出了包括上述处理单元2的处理设备300的示例。处理设备300构成这种处理节点的系统中的处理节点。设备300被实现为单个集成电路,即芯片。设备300包含多个组件,包含处理单元2,且还包含支持处理单元2的操作的其它芯片上系统(SoC)组件。设备300包括管理处理器310,称为管理CPU(MCPU)310。MCPU 310执行计算机可读指令以支持设备300的操作,例如通过处理错误事件、建立连接。设备300还包括用于测量设备300的温度的温度传感器330。设备300包括锁相环(PLL)340,用于为设备300提供时钟信号。设备
300包括DRAM模块350,用于存储由在处理单元2上运行的应用代码输出的数据(例如,检查点数据)和/或用于提供给处理单元2。设备300包括用于外部通信的多个接口控制器。这些包括例如以太网端口控制器(EPC)360。EPC 360用于通过以太网在设备300和多节点系统中的其他等效设备300之间隧道分组。隧道化的分组可以被提供给处理单元2的片4和从处理单元2的片4提供(在数据平面业务的情况下)或者被提供给设备300的各种组件和从设备
300的各种组件提供(在控制平面业务的情况下)。接口控制器还包括用于设备300和主机设备320之间的PCIe通信的PCIe复合体370。
[0061] 图3表示在单个芯片300上实现的处理节点300的示例。参考图4,其示出了包括多个芯片410、420的处理节点400。处理节点400包括主处理芯片410,主处理芯片410包括处理单元2。处理节点400还包括与主处理芯片410相关联并连接到主处理芯片410的附加芯片420。附加芯片420可以被称为结构芯片420。为了简化,仅详细示出了节点400的四个结构芯片420中的一个。结构芯片420中的每一个提供对DRAM存储器430的访问,DRAM存储器430可以由处理单元2读取或写入。结构芯片420中的一个经由PCIe复合体450提供对主机设备440的访问。结构芯片420中的每一个包括EPC 460,EPC 460中的一个用于与主处理芯片410对接,并且EPC 460中的其他EPC 460用于与等同于处理节点400的其他处理节点对接。芯片
410还包括EPC 470,EPC 470中的一些用于与属于相同节点400的结构芯片420对接,并且EPC 470中的一些用于与属于不同节点400的结构芯片420对接。在该实施例中,MCPU 310从主处理芯片410移动到结构芯片420。
[0062] 在特定处理节点(节点300或节点400)中,可以发生许多不同的事件,这些事件可以指示在处理节点中已经发生的错误状况。这样的事件可以例如是由温度传感器330检测到的过温事件、由片4在执行其应用代码时记录的异常事件、或者在DRAM模块350、430中发生不可校正的错误。一些错误事件可能对应用是致命的,例如,芯片之间的链路已经失效,而其他错误事件可能不是致命的,同时仍然需要报告,例如,在链路上已经发生了高于阈值量的多个可校正错误。为其执行报告和聚合的事件各自被分配给事件类,该事件类是指事件的类型。例如,DRAM模块350、430中的不可校正的存储器错误可以是一个事件类,而安全异常可以是另一个事件类。在包括多个芯片410、420的处理节点400的情况下,一些事件可以在主处理芯片410上发生,而其他事件可以在结构芯片420中的一个上发生。
[0063] 提供了一种处理节点的系统,其中每个处理节点被配置为执行整个系统的应用代码的一部分。这样的系统可以被称为分区(partition),因为单个隔离的应用跨系统的设备执行。系统中的每个处理节点存储事件向量的至少一个副本,其中该事件向量的每个元素对应于不同的事件类。每个元素指示其对应的类的事件是否已经在处理节点系统中的任何地方发生。跨系统聚合的该事件向量在本文中被称为全局事件向量(GEV)。除了GEV之外,每个节点还存储其自己的相关联的局部事件向量(在本文中称为“CEV”)。CEV还包括多个元素,其中这些元素中的每一个指示在存储该局部事件向量的处理节点上是否已经发生对应事件类的事件。
[0064] 参考图6,其示出了GEV和CEV的示例。两个事件向量都包括多个元素,并提供位掩码(bitmask),该位掩码为每个事件类指示该事件类的事件是否已经发生。CEV的每个元素指示在存储该CEV的处理节点上是否已经发生相应类的事件。GEV的每个元素指示相应类的事件是否已经在系统的任何处理节点上发生。CEV包括比GEV更多的元素,反映了只有在CEV中捕获事件的事件类的子集被全局聚合。在实施例中,CEV包括15个元素,15个事件类中的每一个对应一个元素。GEV包括10个元素,10个事件类中的每一个对应一个元素,其反映在CEV中捕获的前10个事件类中的事件是全局聚合的。图6中的向量元素的编号反映了与每个元素相关联的事件类ID。
[0065] 这里参考“事件状态”。这是指CEV和GEV的状态。还参考“全局事件状态”,其指代GEV的状态。
[0066] 参考图5A,其示出了处理节点510的系统500。每个处理节点510可以是处理节点300或处理节点400。在图5A中,示出了每个节点510如何连接以聚合全局事件状态的示例。
这些连接是用于全局事件状态的传输的连接,并且因此用于跨系统500的全局事件状态的聚合。应当理解,在实施例中,除了所示的那些之外,在节点510之间可以存在附加连接,其中这些附加连接用于交换数据平面业务或其他类型的控制平面业务,例如同步消息。
[0067] 用于交换全局事件状态的节点510之间的连接形成覆盖树。覆盖树实现系统500中的任何节点510之间的通信,但是在由互连的节点510形成的图中没有提供任何循环(或环)的情况下这样做。覆盖树的使用使得消息能够以少量跳数在节点510中的任何两个节点之间传输,同时保存具有比其他情况下更少数量的连接的简单拓扑。
[0068] 参考图5B,其示出了节点510的系统500以替代拓扑连接以交换全局事件状态的示例。在这种情况下,节点510在环中连接在一起,并且全局事件状态在环周围的节点510之间交换。环形拓扑具有在系统500中内置冗余的优点。如果用于向GEV发送更新的链路发生故障,则仍然可以在系统500中的任何两个节点510之间发送更新,因为存在用于发送这种更新的替代路径。因此,利用环形拓扑,全局事件状态的聚合仍然是可能的。
[0069] 尽管在图5A和图5B的示例中,系统500被示出为仅包括16个处理节点510,但实际上,系统500可能包括数千个处理节点510。
[0070] 参考图5C,其示出了如何在系统500的不同节点510之间聚合全局事件状态。示出了系统500的部分520,其中该部分520包括示例处理节点510a‑d。
[0071] 如图所示,系统的节点510a‑d中的每一个维护GEV的副本和其自己的CEV的副本。在实践中,每个节点包括多个寄存器,其中一些被称为全局事件向量寄存器(GEVVR)并保存GEV的副本中的一个,并且其中一些被称为大型事件向量寄存器(CEVVR)并保存CEV的副本中的一个。然而,逻辑上,可以认为在节点510a‑510d中的每一个上存在节点的CEV的单个副本和GEV的单个副本。
[0072] 每当记录在CEV中的事件类的事件发生在节点510a‑d中的一个上时,该节点510a‑d的处理电路更新在该节点510上保存的CEV。具体地,该节点510a‑d的处理电路更新与检测到的事件的事件类相对应的CEV的元素。如果事件类是跨节点510传播的类,则除了更新节点510a‑d中的一个上的CEV之外,该节点510的电路还更新保存在该节点510上的GEV的对应元素。然后,处理节点510的接口电路使得包括对GEV的更新指示的更新消息(可以称为GCM消息)被发送到一个或多个其他处理节点510。每个这样的更新消息可以包括整个更新的GEV或要更新的GEV的元素的指示。更新消息从节点510a‑d中的一个节点发送到节点510,节点510是发送更新的节点510a‑d中的一个节点的(即,连接到)相邻节点。接收更新消息的节点510根据更新消息更新其GEV的副本,然后向其自己的相邻节点510(除了向其提供更新的相邻节点510)发送一个或多个进一步的更新消息。
[0073] 在图5C的实例中,在处理节点510a上已发生事件。该事件属于处理节点510a‑d被配置为全局聚合的一类事件。如图所示,在该示例中,事件已经发生在第四事件类中,针对该第四事件类,事件被记录在CEV和GEV中。然而,事件类可以是不同的事件类。响应于检测到事件,节点510a的处理电路使得节点510a的CEV的第四元素(其与第四事件类相关联)被设置为指示第四事件类的事件已经发生。类似地,响应于检测到事件,节点510a的处理电路使得节点510a的GEV的第四元素(其与第四事件类相关联)被设置为指示已经发生第四事件类的事件。
[0074] 响应于对节点510a上的GEV的副本的更新,节点510a的电路使得数据分组被发布到节点510b,其中该数据分组包括对GEV的更新的指示。节点510b接收数据分组,并且节点510b的电路使得保存在节点510b上的GEV 510b的副本根据指示被更新。
[0075] 响应于对节点510b上的GEV的副本的更新,节点510b的电路使得数据分组被发布到节点510c、510d,其中那些数据分组各自包括对GEV的更新的指示。这些节点510c、510d中的每一个的电路使得保存在相应节点510上的GEV的每个副本根据数据分组中提供的指示更新而被更新。
[0076] 现在将描述事件状态如何由处理节点510中的组件报告并传播到该节点510中的其他组件。
[0077] 当处理节点510的特定组件检测到事件时,该组件将事件报告转发到节点510的调节器组件,该调节器组件在将更新广播到维护CEV的其他副本的其他组件之前更新其CEV的副本(称为主副本(master copy))。这些消息在节点之间的交换可以经由控制总线架构进行。
[0078] 参考图7,其示出了控制总线700的示例。控制总线700在单个芯片(即,设备300或设备410)中实现。在设备410中实现控制总线700的情况下,可以在设备400中提供附接到控制总线700的组件,用于在控制总线700和属于处理节点400的其他设备420上的组件之间传送分组,以便允许在调节器节点740和那些设备420上的组件之间交换事件状态。图7所示的控制总线700在单个芯片300/410上实现。
[0079] 在我们的早期申请号17/328143中更详细地描述了控制总线700,该申请通过引用并入本文。控制总线700是用于在环中传送单个字控制业务的数据路径。控制总线700是流水线数据总线,数据分组经由其以由施加到控制总线700的时钟脉冲确定的速率在流水线中从级移动到级。该环包括多个节点710,其中业务在围绕该环的流动方向上从一个节点710传递到下一个节点710。每个节点的输出端口750连接到环中的下一个节点710的输入端口760。
[0080] 一些节点(本文称为目标节点)具有用于接收读取或写入与该节点相关联的配置设置的请求的电路。目标节点720的示例被示为附接到总线700。这样的目标节点720存储用于其相关联的组件770的配置设置,其中可以通过从控制总线700接收的读取/写入请求来读取或写入那些配置设置。配置设置(或配置状态)包括CEV和GEV的副本。
[0081] 一些节点(本文称为发起者节点)具有用于向总线700上发出读取或写入请求的请求电路。发起者节点730的示例被示出为附接到总线700。在附接模块的控制下,这样的发起者节点730向与附接到控制总线700的目标节点720相关联的配置设置发出读取或写入请求。发起者730在一些情况下可由软件控制,且在其它情况下由固定功能硬件引擎控制。
[0082] 如图所示,每个发起者节点730和每个目标节点720具有相关联的组件(示出为附接块)770。发起者节点730和目标节点720可以在其相关联的组件770内实现。每个发起者730在其相关联的组件770的控制下操作,以将读取或写入请求分派到控制总线700上。每个目标节点730接收并存储用于控制其相关联的组件770的配置状态。该配置状态从目标节点
720输出到相关联的组件。
[0083] 每个发起者节点730能够向目标节点720发出请求并从目标节点720接收完成。每个请求是从与目标节点720相关联的存储装置(例如,附接的可寻址实体或自动生成的寄存器)读取的命令或者写入与目标节点720相关联的这种存储装置的请求。响应于接收到这样的请求,目标节点720通过发出完成来进行响应。完成提供指示读取或写入请求是否成功的状态更新。在读取完成的情况下,每个完成包含从目标节点720读取的数据,并且被返回到发出读取请求的发起者节点730。在写入完成的情况下,写入完成包括写入请求是否成功的指示。
[0084] 由控制总线700支持的另一种类型的事务是事件报告。事件报告是发布到控制总线700的分组,其由发起者节点730或目标节点720分派到控制总线700上,并且包含与检测到的事件相关的信息。当硬件单元770检测到事件时,它控制其相关联的发起者节点730或相关联的目标节点720以使事件报告被分派到控制总线700上。
[0085] 参考图8,其示出了事件报告800。事件报告800包括由检测事件的硬件单元770提供的事件类820和事件标识符830。硬件单元770将这两个字段820、830提供给其相关联的节点720/730。事件报告800包括事件起源字段810,其前缀有接收事件的事件类820和事件标识符830的节点720/730。事件起源字段810在属于处理节点510的所有节点720/730中唯一地标识节点720/730。
[0086] 事件类字段820标识检测到的事件落入其中的事件类。在实施例中,事件类标识可以在CEV中捕获的上面讨论的15个事件类中的一个。事件标识符字段830标识发生在组件770处的唯一事件,该唯一事件由起源字段810标识并且发生在事件类820内。事件标识符字段830还包括事件的附加细节。
[0087] 当事件报告被分派到总线700上时,该事件报告被递送到Cbus调节器740。Cbus调节器740也可以被称为控制节点740或控制组件740。事件报告在总线700上循环,直到它到达调节器740,在调节器740处它被消耗并且事件被记录。
[0088] 参考图10,其示出了调节器节点740的示例实施例。图10示出了用于响应于事件报告的接收而记录事件状态的调节器740的组件。调节器节点740包括用于执行本文中描述为由调节器节点740执行的操作的处理电路1010。
[0089] 调节器节点740包括用于存储在事件报告中接收的信息的多个寄存器1020。这些寄存器1020被称为事件数据寄存器(EDR)1020。调节器节点740包括用于多个事件类中的每个事件类的EDR 1020。
[0090] 当在调节器740处接收到事件报告时,调节器740使得来自该事件报告的信息被存储在EDR 1020中以用于在事件报告中标识的事件类。存储在EDR 1020中的信息包括来自该事件报告的事件标识符830和来自事件报告的事件来源标识符810。每个EDR 1020还包括事件标志,该事件标志被设置为指示与EDR 1020的类相对应的类的事件已经发生。响应于事件报告,如果对应于事件报告的类的EDR 1020的事件标志尚未被设置,则节点740使得该事件标志被更新以指示针对该事件类已经发生了事件。
[0091] 调节器740还包括寄存器1030,用于存储处理节点510的CEV的副本。该寄存器1030被称为主CEVVR 1030,因为它是节点510中响应于检测到事件而被更新的CEVVR中的第一个。当在调节器740处接收到事件报告时,如果与事件报告中标识的事件类相对应的CEV的位尚未被设置,则调节器740使得CEV的该位被设置为指示该类的事件已经发生。CEV表现出幂等性,使得如果针对特定事件类的CEV的位已经被设置,则当接收到相同事件类的后续事件报告时,CEV的该位保持不变。调节器节点740控制针对CEV的访问许可,使得除了响应于重置事件之外,CEV的位可以不被复位(unset)。
[0092] 调节器节点740包括用于存储GEV的副本的寄存器1010。寄存器1010被称为主GEVVR 1010,因为它在同一处理节点510中的目标节点720的GEVVR的更新之前被更新。主GEVVR 1010可以响应于i)在其自己的节点510中检测到事件或ii)在节点510处接收到的指示对GEV的更新的分组而被更新,其中该更新由在另一节点510上发生的事件产生。
[0093] 调节器节点740包括掩码寄存器1050,在本文中称为GEVVRMASK寄存器1050。GEVVRMASK寄存器1050提供一组位,其指示对于在GEV中具有对应元素的每个事件类,是否为该事件类启用全局聚合。为了确保事件类跨系统500聚合的一致性,保存在GEVVRMASK寄存器1050中的值被设置为对于系统500中的每个节点510是相同的。
[0094] 当在调节器740处接收到事件报告时,如果GEVVRMASK寄存器1050中与事件报告中标识的事件类相对应的位被设置为指示启用全局聚合,并且GEVVR 1010中设置的位尚未被设置为指示该类中已经发生事件,则调节器740然后使得该类的GEV的位被设置为指示该类的事件已经发生。GEV表现出幂等性,使得如果针对特定事件类的GEV的位已经被设置,则当在调节器740处接收到相同事件类的后续事件报告时,GEV的该位保持不变。调节器节点740控制GEV的访问许可,使得除了响应于重置事件之外,GEV的指示事件发生的位可以不被复位。
[0095] 当EDR 1020中的一个或多个事件标志改变状态以指示事件已经发生时,调节器740向处理节点510中的所有目标节点720广播更新消息。更新消息是通过控制总线700发送的消息,用于更新处理节点510中每个目标节点720的CEVVR。更新消息使得节点510中的CEV的每个副本被更新,使得与设置了事件标志的类相关联的CEV的元素被更新以反映在该类中已经发生事件。
[0096] 另外,当主GEVVR 1010中的一个或多个位改变状态时,调节器740向处理节点510中的所有目标节点720广播更新消息(其可以是用于更新CEV的副本的相同更新消息)。更新消息是经由控制总线700发送的消息,以更新处理节点510中的每个目标节点720的GEVVR。更新消息使得目标节点720中的GEV的每个副本被更新,使得与设置了事件标志的事件类相关联的GEV的元素被更新以反映在该类中发生了事件。
[0097] 参考图9,其示出了示例目标节点720。每个目标节点720包括至少一个节点管理寄存器940。可以经由专用节点管理广播写入请求来写入节点管理寄存器940,该专用节点管理广播写入请求将公共状态集写入目标节点720中的所有节点管理寄存器940。这样的广播写入可以由调节器节点740执行。这种广播写入的示例是被发送以更新保存在每个目标节点720中的CEV和GEV的副本的更新消息。
[0098] 除了至少一个目标节点管理寄存器910之外,目标节点720与附加存储装置920相关联,附加存储装置920是与目标节点720相关联的组件770的一部分。附加存储装置920可以包括自动生成的寄存器和/或经由可寻址窗口可访问的存储装置。该附加存储装置920可以包括处理单元2的片4上的控制寄存器,其可通过另外的总线寻址。该附加存储装置920可以允许访问片外存储装置,诸如可通过PCI链路访问的主机存储装置。在这种情况下,附加存储装置920是主机分派器的存储器,该主机分派器将写入存储器的数据提供给主机存储装置。
[0099] 目标节点具有输入端口和输出端口。输入端口从控制总线700接收读和写请求,这些请求被缓冲在请求缓冲器960中,然后被传递到处理逻辑930。输出端口将完成从完成缓冲器970发送到控制总线700上。处理逻辑930可以执行在硬件或软件中实现的功能。处理逻辑930可以包括ASIC、FPGA或被配置为执行存储在目标节点720的至少一个存储器中的计算机可读指令的至少一个处理器中的一个或多个。
[0100] 如图9所示,节点管理寄存器940包括CEVVR 980和GEVVR 990。CEVVR 980中保存的CEV在处理节点中的所有目标节点720中是相同的。类似地,GEVVR 990中保存的GEV在系统的所有处理节点中的所有目标节点720中是相同的。处理逻辑930使得CEV和GEV的所有元素从节点管理寄存器940输出到附接的组件770。这些使得附接的组件770能够根据由事件状态指示的错误状况来采取动作或执行其操作。
[0101] 当调节器740发送更新消息以更新CEV时,在目标节点720处接收该更新消息。处理逻辑930使得该目标节点720的CEVVR 980根据更新被更新。更新CEVVR 980中的CEV以匹配主CEVVR 1030中保存的CEV。处理逻辑980使得该更新的CEV状态被传播到附接的组件770,以使得该组件能够对更新的错误状态起作用。在处理节点510中的每个目标节点720中执行相同的更新。
[0102] 同样,当调节器740发送更新消息(其可以与用于更新GEV的消息相同或不同)以更新GEV时,在目标节点720处接收该更新消息。处理逻辑930使得该目标节点720的GEVVR 990根据更新被更新。更新GEVVR 990中的GEV以匹配主GEVVR 1010中保存的GEV。处理逻辑980使得该更新的GEV状态被传播到附接的组件770,以使得该组件能够对更新的错误状态起作用。在处理节点510中的每个目标节点720中执行相同的更新。
[0103] 在接收对其相关联的GEV(即,保存在目标GEVVR 990中的GEV)的更新的组件770中,有处理节点510的EPC(例如,EPC 360、460、470)。当某些EPC从它们所属的处理节点510的调节器节点740接收到对它们的GEV的更新时,这些EPC被配置为在更新消息中提供更新的GEV状态的指示。GEV状态的指示在处理节点510之间传播,并用于更新保存在那些节点510中的GEV。被配置为传播事件状态的某些EPC是用于通过图5A和图5B所示的连接进行通信的EPC。正是这些EPC提供图5C所示的GEV更新消息。
[0104] 参考图11,其示出了根据实施例的EPC 1100的示例。EPC 1100可以是EPC 360、460、470中的一个。EPC 1100包括目标节点720和发起者节点730。目标节点720使得能够将从调节器节点740接收的经更新的全局事件状态提供给EPC 1100。除了图11中所示的接口之外,EPC 1100还包括用于与处理单元2交换数据平面业务的接口。图11示出了EPC内用于交换控制平面业务(包括对事件状态的更新)的组件。该组件在本文中被称为全局通信代理(GCP)1200。GCP 1200可以经由接收接口(Rx)接收以太网帧,其中这些以太网帧包括更新消息以更新其GEV的副本。GCP 1200可以通过发送接口(Tx)分派更新消息本身,其中这些更新消息是用于更新保存在系统中的其他处理节点510中的GEV的消息。GCP 1200使得更新消息被提供给帧构建器(frame builder)1120,帧构建器1120使得那些更新消息在根据连接状态寄存器1130中保存的连接状态构造的以太网帧中通过发送接口发送。
[0105] 参考图12,其示出了GCP 1200和GCP 1200内用于传播事件状态的组件。GCP 1200包括用于执行本文描述为由GCP 1200执行的操作的处理电路1220。除了GCP 1200之外,图12还示出了用于使GCP 1200能够与调节器节点740交换事件状态的目标节点720和发起者节点730。这里描述了GCP 1200如何使得能够执行事件状态的全局聚合。应当理解,尽管根据实施例的处理节点510包括多个GCP 1200,但是出于传播全局事件状态的目的,这些GCP 
1200的仅子集(一个或多个)通常将是活动的。
[0106] 如所描述的,响应于从调节器740广播的GEV更新消息,GEVVR寄存器990被更新。GEV的该更新状态从目标720输出到GCP 1200。GCP 1200包括寄存器1210,在本文中称为GEVEN寄存器1210。寄存器1210包括关于GCP 1200是否被启用用于全局事件聚合的指示。如果通过寄存器1210中的指示启用GCP 1200以执行全局事件聚合,则GCP 1200将通过将更新分组分派到另一处理节点510来响应对其目标GEVVR 990的更新。
[0107] 每个GCP 1200包括另一寄存器1240,这里称为全局事件GCP外部全局事件向量寄存器(GEVEXTGEVVR)1240。GEVEXTGEVVR 1240存储GEV的副本。电路1220将保存在GEVEXTGEVVR寄存器1240中的GEV的副本与保存在GEVVR寄存器990中的GEV的副本进行比较,以确定更新是否应该被分派到另一节点510或同一节点的调节器740。如果GCP 1200的电路1220确定在目标GEVVR 990中设置了位,即在GEVEXTGEVVR 1240中未设置,则GCP 1200的电路1220更新GEVEXTGEVVR寄存器1240以匹配保存在GEVVR 990中的GEV的副本。GCP 1200还使得更新消息被分派给GPC 1200被配置为与之通信的另一节点510上的GCP。更新消息提供更新的GEV的指示,并使接收方GCP更新其自己的GEVEXTGEVVR以匹配分派更新消息的GCP 1200的GEVEXTGEVVR 1240。
[0108] 为了提供可靠的传播,GCP 1200发送更新消息三次。在帧中分派了GEV更新消息之后,GCP 1200然后在重新发送包含更新消息的相同帧之前等待其芯片510的1000个系统时钟周期消逝。然后,GCP 1200等待另外5000个系统时钟周期,然后第三次发送帧。如果GCP 1200相关联的目标GEVVR 990在这些副本被发送之前再次改变,则上述重发序列被中止,并且发送包含GEVVR 990中保存的新状态的新更新消息。
[0109] GCP 1200可以从另一个节点510上的GCP接收更新消息,该更新消息使得其GEVEXTGEVVR 1240中的GEV的副本被更新。作为这种更新的结果,GEVEXTGEVVR 1240中保存的GEV的副本可能与GCP 1200相关联的目标GEVVR 990中保存的GEV的副本不匹配。响应于确定在GEVEXTGEVVR 1240中设置了未在相关联的GEVVR 990中设置的位,GCP 1200向其自己的节点510上的Cbus调节器740发出写入请求,其中该写入请求是更新GEVUPDATER寄存器1060以匹配现在保存在GEVEXTGEVVR 1240中的GEV的副本的请求。
[0110] 响应于接收到对GEVUPDATER 1060的写入,调节器节点740相应地更新GEVUPDATER 1060。响应于对GEVUPDATER 1060的更新,调节器740更新其保存在用于处理节点510的主GEV寄存器1010中的GEV的副本。执行对主GEVVR 1010的更新,使得在GEVUPDATER 1060中设置的任何位也在GEVVR 1010中设置,以指示在特定类中已经发生事件。然而,对于GEVUPDATER 1060中被设置为指示在该类中没有发生事件的任何位,则调节器740将不更新GEVVR 1010以指示在该类中没有发生事件。以这种方式,调节器740的更新策略确保GEVVR 
1010中保存的GEV是幂等的。
[0111] 除了更新寄存器1010中保存的GEV的副本之外,调节器740还在控制总线700上向处理节点510的所有目标节点720广播更新消息。更新消息包括保存在调节器740的寄存器1010中的更新的GEV。参考图9,每个目标节点720的处理逻辑930接收更新消息,并用更新的GEV更新保存在该目标节点720中的GEVVR 990。与目标节点720相关联的组件770可以访问其目标节点720的GEVVR 990中保存的GEV的副本。
[0112] 这些组件770中的一些经由其相关联的GEVVR 990接收对其GEV副本的更新,它们本身是能够执行全局事件聚合的GCP。每个这样的GCP响应于对其GEVVR 990的更新,向另一个节点510发出更新消息。然后以与上述相同的方式将更新的GEV传播到该另一节点510的不同组件。
[0113] 参考图5D,其更详细地示出了更新的全局事件状态如何在系统500的部分520的节点510a‑d之间传播。当组件770a(其本身可以是GCP)遇到错误事件时,它向调节器740a提供该事件的报告。调节器740a更新节点510a的CEV和GEV的主副本,并向节点510a中的每个目标节点720广播这些向量的更新。GCP 1200a检测对保存在其目标节点720a中的GEV的副本的更新,并且作为响应,向节点510b提供包含更新的GEV的消息。节点510b包括GCP 1200b,其被配置为接收更新并经由该节点510b的总线700将更新消息分派给该节点510b的调节器740b。调节器740b响应于接收到更新,更新其GEV的副本以与保存在节点510a上的GEV的副本一致。调节器740b还向处理节点510b的目标节点720(包括目标节点720b、720c)广播GEV的更新。与目标节点720b、720c相关联的GCP 1200c、1200d通过向节点510c、510d上的GCP 
1200e、1200f分派包括更新的更新消息来进行响应。GCP 1200e、f将这些更新传播到它们自己的调节器节点740c、d,调节器节点740c、d将更新广播到那些节点510c、d上的组件。以这种方式,响应于由一个节点510a上的组件770检测到的事件而生成的对GEV的更新被传播到系统500中的其他节点510b‑d的组件。
[0114] 局部事件状态(即CEV)和全局事件状态(即GEV)传播到组件770的结果为系统500中的每个组件770提供对两个不同事件向量的访问。每个组件770可以经由其处理节点510的CEV的其自己的局部副本访问其自己的处理节点510的设备范围事件和错误状态。每个组件770还可以通过其自己的用于系统的GEV的局部副本访问系统范围的事件和错误状态。基于该状态,组件770可以被配置为执行动作。在组件可访问的CEV或GEV的副本的基础上采取的这种动作在本文中被称为自主事件处理(AEH)。同一处理节点510中的不同组件770可经配置以响应于属于同一类的事件而执行不同动作。一个或多个组件770可以配置有不同的策略,并且被配置为响应于属于不同事件类的事件而执行不同的动作。此外,与关联于系统500(并且反映在GEV中)的事件相比,一个或多个组件770可以响应于与其自己的处理节点
510(并且反映在其CEV中)相关联的事件而执行不同的动作。
[0115] 可以参与AEH的组件的示例是用于使处理单元2的片4能够与在其上实现处理单元2的芯片510外部的设备交换数据的电路(在本文中称为交换块(XB))。
[0116] 参考图13,其示出了包括XB 1310和多个片4的芯片1300的示例。XB 1310包括被配置为执行所描述的操作的电路。XB 1310与芯片1300的外部接口1320相关联,XB 1310被配置为通过该外部接口1320发送和接收数据分组。XB 1310从一个或多个片4接收一种格式(“TLink”格式)的分组,并在使这些分组通过外部接口1320发送之前将这些分组转换为另一种格式(“Elink”格式)。XB 1310接收该另一格式(“Elink”格式)的分组,并在将这些分组传送到一个或多个片4之前将这些分组转换为另一格式(“TLink”格式)。XB 1310还被配置为通过提供流控制消息以传递用于在不同片4之间发送的许可来控制由片4进行的发送。
[0117] XB 1310被配置为响应于GEV中的错误的指示而参与某些自主错误处理(AEH)。参考图14,其示出了XB 1310及其相关联的目标节点720。XB 1310包括用于执行本文描述为由XB 1310执行的操作的处理电路1400。XB 1310包括掩码寄存器1410(在本文中被称为AEHGEVVMASKR寄存器1410)。AEHGEVVMASKR寄存器1410存储一组位,其标识GEV的哪些位将通过XB 1310引起AEH。在AEHGEVVMASKR寄存器1410存储指示针对特定事件类启用AEH的位的情况下,XB 1310响应于确定GEV中设置了位以指示该类的事件已经发生而执行AEH。
[0118] 在执行AEH时,XB 1310停止从片4向接口1320发送分组,并停止从接口1320向片4发送分组。如果XB 1310从片4接收到分组,则XB 1310使这些分组被丢弃。同样,如果XB 1310从接口1320接收到分组,则XB 1310使这些分组被丢弃。以这种方式,XB 1310阻止片4和外部设备之间的通信。结果是数据平面业务快速静默(quiesced)。
[0119] GEV中指示的可能导致XB 1310阻止业务的事件类型是对应用的执行致命的错误事件,例如不可修复的存储器错误,或者芯片1300的外部链路中的一个被中断。在这种情况下,IO业务在芯片1300的重置之前被静默。
[0120] 系统中的不同组件可以包括不同的掩码寄存器,诸如寄存器1410,其针对每个组件指示相应组件被配置为响应于哪个事件而执行动作。特定组件中的掩码寄存器可以包括第一组指示,其指示组件被配置为响应于CEV中标识的事件类中的哪个事件类而采取动作。掩码寄存器还可以包括第二组指示,其指示组件被配置为响应于GEV中标识的事件类中的哪个事件类而采取动作。这些寄存器是在每个组件的基础上定义的,使得每个组件可以响应于不同类型的事件而执行采取动作(即,执行AEH)。
[0121] 在CEV中定义的每个事件类(并且通过扩展也是GEV)具有相关联的事件处理程序,该事件处理程序被配置为实现对该事件的发生的给定响应。事件处理程序是在事件处理程序设备上运行的软件模块。由处理设备采取的动作是由处理节点510的各个组件770执行的任何AEH的补充。例如,响应于表示致命应用错误的事件发生,处理实体可以使应用从检查点重置。
[0122] 处理实体对于不同的事件类是不同的。对于一些事件类,处理实体可以是在MCPU 310上运行的软件。对于其他事件类,处理实体可以是在主机320/440上运行的主机进程。整个系统中的每个事件处理程序与一个或多个处理节点510相关联,并且被配置为响应于从相关联的一个或多个处理节点510接收的事件通知,针对其相关联的一个或多个处理节点
510采取动作。
[0123] 参考图15,其示出了可以如何执行到事件处理程序1510的事件通知。目标节点720接收在事件发生之后由调节器节点720广播的对CEV和GEV的更新。与目标节点720相关联的一些组件770包括相关联的事件通知硬件1500。包括这种事件通知硬件1500的组件包括例如PCIe复合体370/450或MCPU 310。处理程序软件1510可以在包括事件通知硬件1500的同一设备(例如MCPU 310)上运行,或者可以在单独的设备(例如主机设备)上运行。
[0124] 事件通知硬件1500包括CEV通知掩码寄存器1520。CEV通知掩码寄存器1520指示,对于事件被记录在CEV中的事件类中的每一个,事件通知将被提供给处理程序软件1510。响应于从目标节点720接收到事件已经在特定事件类中发生,事件通知硬件1500的处理电路检查寄存器1520中针对该事件类的对应指示。如果寄存器1520指示该类中的事件将被报告给处理程序软件1510,则事件通知硬件1500的处理电路向处理程序软件1510发出事件通知。事件通知可以采取对处理程序软件1510的中断的形式。
[0125] 事件通知硬件1500还包括GEV通知掩码寄存器1530。GEV通知掩码寄存器1530指示,对于事件被记录在GEV中的每个事件类,事件通知将被提供给处理程序软件1510。响应于从目标节点720接收到事件已经在特定事件类中发生,事件通知硬件1500的处理电路检查寄存器1530中针对该事件类的对应指示。如果寄存器1530指示该类中的事件将被报告给处理程序软件1510,则事件通知硬件1500的处理电路向处理程序软件1510发出事件通知。事件通知可以采取对处理程序软件1510的中断的形式。
[0126] 对于在CEV中报告的事件类中的每一个,定义一个事件处理程序以用于处理该类的事件。类似地,对于在GEV中报告的事件类中的每一个,定义一个事件处理程序用于处理该类的事件。在实施例中,每个处理节点510与四个事件处理程序相关联:在主机设备320/440上运行的两个主机进程、在MCPU 310上运行的进程、以及在用于启用密码功能的附加硬件单元(称为ICU)上运行的进程。因此,事件处理程序可以在单独的设备(例如,MCPU和主机)上实现,或者可以采取在同一设备上运行的单独进程的形式(例如,在单个主机上运行的单独主机进程)。
[0127] 响应于事件通知的接收,处理程序软件1510被配置为采取适当的动作。这些动作包含发出读取请求以读取相关联调节器节点740中的事件数据寄存器1020。事件处理程序1510读取相关事件类的EDR寄存器1020。事件处理器从EDR寄存器1020读取事件标志和事件标识符。读取可以由事件处理程序使用该事件处理程序的相关联的发起者730发出,其中事件细节(例如,事件平面和事件标识符)被返回到事件处理程序1510。
[0128] 在基于GEV向处理程序软件通知全局事件的情况下,事件标志向事件处理程序1510指示该事件是否与处理节点510相关联,该事件处理程序1510与该处理节点510相关联。
[0129] 参考图16,其示出了在基于每个处理节点510中保存的GEV向事件处理程序1510发出事件通知之后执行的消息交换。尽管每个事件处理程序1510被示出为与其相关联的处理节点510分离,但是每个事件处理程序1510可以被认为是其相关联的处理节点510的一部分。另外,尽管每个事件处理程序1510被示出为具有单个相关联的处理节点510,但是在一些实施例中,每个事件处理程序1510与多个此类处理节点510相关联。
[0130] 作为第一步骤,响应于事件通知的接收,每个事件处理程序1510发出读取请求以读取与由事件通知标识的事件类相关联的事件数据寄存器1020。由每个事件处理程序1510读取的事件数据寄存器1020属于与事件处理程序1510相关联的处理节点510。
[0131] 作为第二步骤,每个事件处理程序1510作为响应接收EDR 1020中保存的由其发送的读取请求标识的状态。该状态包括保存在该EDR 1020中的事件标志和事件标识符。如果GEV中反映的事件发生在与事件处理程序1510相关联的处理节点510中,则事件标志将被设置为指示事件发生在该节点510上的状态。在图16所示的示例中,在GEV中反映的事件发生在处理节点2上,因此事件处理软件2接收设置为指示在节点2上发生的事件的事件标志,并且另外接收该事件的细节(例如,以事件标识符的形式)。
[0132] 作为第三步骤,事件处理程序2将与事件相关的消息传播到其他事件处理程序1和3。消息可以是由事件处理程序2在EDR状态下接收的事件细节,或者可以是使事件处理程序
1和3重置其相关联的处理节点510的消息。在所示的示例中,事件处理程序1510中的每一个确定重置其相关联的处理节点510。该确定基于从处理节点2获得的EDR状态来进行。该确定可以由事件处理程序2进行,事件处理程序2然后将命令传播到其他事件处理程序1和3,或者可以由每个事件处理程序1510基于由事件处理程序2获得和分发的EDR状态单独地进行。
[0133] 在该示例中,并且作为第四步骤,示出了事件处理程序1510中的每一个发出命令以重置其相关联的处理节点510。该重置是通过向处理节点510上的重置引脚1600断言信号来实现的。每个处理节点510上的电路使得重置被执行。
[0134] 重置(其可被称为软件重置)重置作为每个处理节点510的一部分的多个组件的状态。重置具有擦除片4的存储器以移除应用数据的效果。重置还具有擦除用于加密进出设备510的通信的密码硬件的状态的效果。重置使得逻辑链路和使用这些链路的连接的状态被重置。然而,重置不会使链路关闭,并且配置物理链路的所有状态都是未修改的。因此,不需要在重置之后对EPC 470进行重新编程。重置不会擦除MCPU 310的应用状态。
[0135] 重置具有使得保存在系统的组件中的CEV和GEV被清除的效果,使得它们不指示任何事件已经发生。CEV和GEV的清除由调节器720执行,调节器720具有对其处理节点510中的CEVVR和GEVVR的写入许可。
[0136] 一旦特定处理节点510已经重置其状态并且片存储器已经被擦除,该处理节点510就可以从应用检查点重新启动其应用。每个处理设备300/410可以访问周期性地存储检查点数据的外部存储器。在读取请求之后,处理单元的片4从外部存储器加载检查点数据,使得应用能够从较早的点重新启动。
[0137] 每个事件处理程序1510被配置为使其相关联的处理节点510立即重置,而不需要跨系统同步重置。当在没有同步的情况下执行重置时可能遇到的一个问题是处理节点510中的一个可以执行其重置并从较早的检查点重新开始,而尚未经历重置的另一处理节点510继续执行应用的较早版本。在这种情况下,如果尚未经历重置的处理节点510发送包含对应于较早版本的应用数据的数据分组,则这些数据分组可以由已经从检查点重置的处理单元2接收。在这种情况下,由于处理单元2正在接收与较早的应用版本相对应的数据,因此在已经从检查点重新开始的处理单元2的处理中可能发生错误结果。
[0138] 根据实施例,在不同处理节点510之间发送的帧中包括号(称为世代号),其中响应于每个重置事件而更新该号。因此,该号指示应用已经被重置了多少次。当数据帧由一个处理节点510发送到另一个处理节点时,发送节点510在这些帧中的每一个中包括其自己的世代号的副本。在接收方节点510处对照接收方自己的世代号的副本来检查该号。如果帧中的世代号与接收方节点510保存的世代号不匹配,则接收方节点510丢弃帧。以这种方式,当接收方节点510已经重置并从检查点恢复时,接收方节点被保护免受与应用的预重置生成相关的帧的影响,该帧可以由系统中尚未经历重置的其他节点分派。
[0139] 参考图17,其示出了两个处理节点1700a、1700b可以通信的示例。节点1700a、1700b中的每一个可以是上述节点510中的一个。通常,系统将包括多于两个处理节点,但是为了简化,图17中仅示出了两个这样的节点。处理节点1700a、1700b都被配置为从检查点重置和重新启动。两个处理节点1700a、1700b的重置是从整个系统的检查点重置和恢复的一部分。该重置可以以上面关于图16描述的方式执行,其中系统的全局重置以及因此每个节点510的单独重置响应于在节点510中的一个上发生的错误事件而执行。然而,节点1700a、
1700b的全局重置可能不同步,这意味着节点1700a、1700b中的一个可以在节点1700a、
1700b中的另一个已经静默之前进行重置并从检查点恢复。在这种情况下,尚未静默的节点
1700a、b可以向节点1700a、b中已经从检查点恢复的节点发送数据帧。世代号的副本防止对恢复节点上的应用处理的中断。
[0140] 参考图18a和图18b,其示出了由图17中所示的处理节点1700a、1700b的系统执行的事件序列。整个方法被示出为分成第一部分1800a(在图18a中示出)和第二部分(在图18b中示出)。在事件序列开始时,两个处理节点1700a、1700b存储世代号的相同副本。生成数反映系统的全局重置(包括跨两个节点1700a、1700b的重置)已经被执行的次数。由于世代号是相同的,因此节点1700a、1700b可以通信,因为由一个节点发出的帧将包含与存储在另一个节点1700a、1700b上的世代号相同的世代号,并且因此将被该另一个节点1700a、1700b接受。
[0141] 在S1810处,响应于检测到的错误事件,第一处理节点1700a的重置电路1600使第一处理节点1700a被重置。作为该重置的一部分,从节点1700a的各种组件擦除状态。片4的存储器由节点1700a的硬件模块的电路擦除,这使得零被写入该存储器。作为重置的一部分,更新保存在节点1700a中的存储器中的世代号的副本。如将要描述的,世代号可以保存在接口1710中的存储器中。通过将世代号递增到新值来更新世代号。
[0142] 在S1820处,在重置处理节点1700a之后,从检查点恢复处理节点1700a负责的应用的部分。为了实现这一点,从节点1700a的硬件模块向片4中的不同片提供引导加载程序。片4执行引导加载程序以向检查点存储器1720发出读取请求。检查点存储器1720被示出为单个存储器单元,但是可以包括用于不同节点1700a、b的多个存储器单元。响应于由节点
1700a的片4发出的读取请求,用于检查点的应用指令和应用数据从存储器1720返回到那些片4。返回到节点1700a的应用数据表示在该节点1700a的处理单元2上执行的应用的在最后检查点处从该处理单元2写出的部分的状态。
[0143] 在S1830处,节点1700a的处理单元2的片4继续执行来自检查点的应用指令。同时,第二处理节点1700b尚未经历重置,并且该节点1700b的处理单元2正在执行其对应于较早世代的应用的部分的处理。因此,在S1810重置之前,第二处理节点1700b存储也保存在第一处理节点1700a的存储器中的较早世代号。
[0144] 在S1840处,节点1700b的处理单元2的片4被配置为使得向第一处理节点1700a发出一个或多个数据帧。一个或多个数据帧各自包括保存在节点1700b的存储器中的较早世代号的副本。片4通过向相应处理节点1700b的EPC发布数据分组来发布数据帧,这使得数据分组被封装到数据帧中并发送到节点1700a。
[0145] 在S1850处,第一处理节点1700a接收在S1840处发送的数据帧。第一处理节点1700a的电路检查每个数据帧中的世代号,并将其与保存在处理节点1700a的存储器中的世代号的副本进行比较。由于这两个世代号不匹配,所以处理节点1700a的电路丢弃这些帧。
如将描述的,帧的检查和丢弃可以由第一处理节点1700a的接口1710执行。
[0146] 在S1860处,第二处理节点1700b重置。在S1860处执行的该步骤与上述S1810相同,但是由第二处理节点1700b而不是第一处理节点1700a执行。
[0147] 在S1870处,在重置处理节点1700b之后,从检查点恢复处理节点1700b负责的应用的部分。为了实现这一点,从节点1700b的硬件模块向片4中的不同片提供引导加载程序。片4执行引导加载程序以向检查点存储器1720发出读取请求。响应于由节点1700b的片4发出的读取请求,用于检查点的应用指令和应用数据从存储器1720返回到那些片4。返回到节点
1700b的应用数据表示在该节点1700b的处理单元2上执行的应用的在最后检查点处从该处理单元2写出的部分的状态。
[0148] 在S1880处,第二处理节点1700b的处理单元2从检查点开始继续执行应用的其部分。
[0149] 在S1890,节点1700b的处理单元2的片4用于向第一处理节点1700a发出另外的一个或多个数据帧。片4通过向相应处理节点1700b的EPC发布数据分组来发布这些另外的数据帧,这使得数据分组被封装到数据帧中并被发送到节点1700a。与在S1840处发送的帧不同,这些另外的一个或多个数据帧各自包括现在保存在两个节点1700a、1700b的存储装置中的世代号的更新版本的副本。
[0150] 在S1895处,第一处理节点1700a接收在S1890处发送的数据帧。第一处理节点1700a的电路检查每个数据帧中的世代号,并将其与保存在处理节点1700a的存储器中的世代号的副本进行比较。由于这两个世代号匹配,因此处理节点1700a的电路接受帧。来自这些帧的数据被写入片4存储器。
[0151] 世代号可以插入在节点1700a、1700b之间发送的数据帧中的不同点处。世代号可以被插入在由片4分派的分组报头(例如,Elink分组报头)中。可替代地,可以将世代号插入分组的有效载荷中。
[0152] 参考图19,图19示出了一个示例性实施例,其中世代号被包括在帧报头的MAC地址内。在实施例中,MCPU 310负责提供MAC地址以用于通过连接发送数据。作为MAC地址的一部分,MCPU 310提供世代号。用于连接的MAC地址(包括接口1710的MAC地址和另一接口1710的MAC地址)由MCPU 310提供给连接状态寄存器1915以及控制和状态寄存器(CSR)1916,以存储在那些寄存器1915、1916中。具体地,寄存器1915存储帧被分派到的目的地接口1710的MAC,而CSR 1916存储发送帧的接口1710的MAC。在这些MAC地址的每一个中,保留一个或多个位以作为世代号包括在数据帧中。
[0153] 当片4具有要发送的数据时,片4以一个或多个数据分组(例如,Elink分组)的形式将该数据分派给接口1710。帧构建器1120通过添加帧报头和帧尾部来将数据分组封装到数据帧中。以这种方式,由处理单元2发出的数据分组可以通过以太网隧道传输。帧构建器1120插入保存在连接状态寄存器1915中的MAC作为每个帧的目的地MAC。帧构建器1120插入保存在连接状态寄存器1915中的MAC作为每个帧的源MAC。
[0154] 在接收侧,提供帧校验缓冲器1908,其从属于另一节点的另一接口1710接收数据帧。图19所示的接口1710的电路针对CSR 1916中保存的MAC检查接收到的帧中的目的地MAC。如果这些MAC之间存在不匹配,则电路使得帧被丢弃。如果这是MAC之间的匹配,则电路使得封装在那些帧中的数据分组被转发到在分组报头中标识的处理单元2的片4。
[0155] MCPU 310包括执行指令以提供所示的更新功能1920和地址解析功能1940的至少一个处理器。地址解析功能被配置为提供用于连接的MAC地址,这些MAC地址被提供给接口1710。MAC地址是局部范围MAC地址,并且因此可以由软件更新,而不是针对特定接口1710始终固定。地址解析功能1940将保存在世代号寄存器1910中的当前世代号插入到每个MAC地址中。MAC地址的剩余部分可以从存储装置1930获得,或者由功能1940以另一种合适的方式确定。
[0156] MCPU 404响应于重置事件而更新用于连接的MAC。MCPU 404包括世代号寄存器1210,其存储当前世代号,该当前世代号被提供作为由地址解析功能1240输出的每个MAC地址的一部分。MCPU 404的处理电路支持更新功能1220,更新功能1220更新保存在世代号寄存器1210中的世代号。
[0157] 当执行MCPU 310所属的处理节点的重置(例如,在S1810和S1860中发生的重置)时,该重置的指示被递送到MCPU 310。更新功能1920通过更新保存在世代号寄存器1910中的世代号的值来响应该重置事件。保存在世代号寄存器1910中的世代号的更新可以包括将世代号的当前值递增1。例如,假设世代号由五位组成,寄存器1910中保存的世代号的当前值由位序列00001给出。响应于重置事件,更新功能1920通过将值增加1到00010来更新世代号。
[0158] 由于世代号包括有限数量的比特,因此在生成的当前值等于最大可能值的情况下,世代号的更新包括将世代号重置为最低可能值。例如,假设世代号由五位组成,寄存器1210中保存的世代号的当前值由位序列:11111给出。响应于重置事件,更新功能1220将世代号重置为由00000给出的最低可能值。因此,世代号由更新功能1920以环绕方式更新。
[0159] 响应于重置事件的指示,地址解析功能1940确定由设备400参与的连接的更新的MAC地址。如所指出的,在每个MAC地址中保留一个或多个位以用于表示世代号。地址解析功能1240通过更新功能将这些位设置为存储在寄存器1910中的新世代号的值。每个MAC地址中的剩余位被设置为与重置事件之前相同的值。
[0160] 对于每个MAC地址,可以以不同的方式确定该MAC地址的剩余位。在一些实施例中,这些位可以保存在地址解析功能1240可访问的存储装置1930中,并且与新世代号的位级联以形成完整MAC地址。保存在存储装置1930中的这些位不响应于重置事件而被擦除,而是在重置事件之后持续并且不改变。在该实施例中,存储装置1930存储地址解析功能1940负责确定的每个MAC地址的剩余位(即,除了世代号的位之外的那些位)。地址解析功能1940通过将相同的世代号与相应MAC的剩余位组合来提供这些MAC中的每一个。
[0161] 如上所述,第一处理节点1700a的应用状态可以在其他处理节点(例如,节点1700b)的应用状态也被恢复之前从检查点恢复。在这种情况下,第一处理节点1700a可继续其应用处理,即使在处理节点1700b尚未重置并且包括对应于前一世代应用的应用状态时也是如此。这可以通过使用屏障同步来实现,屏障同步将参与处理单元2的计算阶段与那些处理单元2的交换阶段分开。屏障同步被插入到在每个处理单元2上运行的编译代码中。对于屏障同步中的每一个,一个或多个处理单元2被配置为参与。
[0162] 屏障同步的使用防止节点1700a的第一处理单元2在其代码中的点之前运行,超过该点,它将需要与尚未经历恢复和从检查点重新启动的处理单元2交换数据。例如,假设节点1700a的处理单元2在检查点之后进入计算阶段,其中它对数据执行计算以生成结果。节点1700a的处理单元2不与节点1700b的处理单元2交换数据,直到其达到节点1700a、1700b的两个处理单元2参与的屏障同步。在达到该屏障同步时,节点1700a的处理单元2停止,直到节点1700b的处理单元2也达到屏障同步。以这种方式,即使节点1700a的处理单元2达到屏障同步,而节点1700b尚未被重置,节点1700a的处理单元2也将等待,直到节点1700b重置并且其处理单元2到达屏障,之后继续到屏障同步之后的交换阶段。在交换阶段期间,节点1700a的处理单元2向节点1700b的处理单元2发送被调度用于在该交换阶段期间发送的任何应用数据。
[0163] 屏障同步的使用防止系统500的处理单元2提前运行并将数据发送到尚未重置的系统500的任何处理单元2。在处理单元2的上下文中使用屏障同步在我们的早期美国申请号17/446681中更详细地描述,该申请通过引用并入本文。
[0164] 已经描述了如何响应于重置事件而从处理节点清除CEV和GEV的副本(即,重置以指示没有事件)。CEV的位也可以由事件处理程序针对事件类重置。重置CEV的位使得事件类内的另一事件能够被检测和处理。
[0165] 再次参考图10,调节器节点740包括多个寄存器1040,在本文中称为事件处理程序注册寄存器1040。寄存器1040包括用于处理节点510的每个不同事件处理程序的事件处理程序注册寄存器。例如,可以存在用于两个主机处理器中的每一个的事件处理程序注册寄存器,MCPU 310中的一个和ICU中的一个。事件处理程序注册寄存器1040中的每一个包括针对在CEV中捕获的每个事件类的指示,无论与该寄存器相关联的相应事件处理程序是否具有清除该事件类的状态的许可。
[0166] 当事件处理程序1510已经接收到事件通知时,事件处理程序1510尤其可以确定清除该事件的事件状态,使得可以检测到相同事件类中的事件的任何进一步发生。为了清除事件类的事件状态,事件处理程序1510经由控制总线700向调节器节点740发出请求,其中该请求是清除该事件类的EDR的请求。该请求包括相关事件处理程序1510的标识符和事件类的标识符。调节器节点740在用于该事件处理程序1510的事件处理程序注册寄存器1040中检查用于该事件类的许可指示。如果事件处理程序1510具有清除该事件类的事件状态的许可,则调节器节点740更新该事件类的EDR以将EDR重置为其默认状态。在这种状态下,EDR指示没有检测到事件。另外,调节器节点740更新主CEVVR 1030以重置该事件类的事件指示。调节器节点740广播写入请求以还更新保存在处理节点510的目标节点720中的CEV的副本,以便还以相同的方式重置事件指示。
[0167] 参考图20,其示出了用于聚合处理节点510之间的全局事件状态的示例方法2000。这些步骤中的一个或多个可以彼此重叠。
[0168] S2010由系统500中的每个节点510执行。在S2010处,系统510中的每个处理节点510存储用于处理系统500的全局事件向量的副本。最初,该向量被设置为指示在系统500中没有发生事件。全局事件向量保存在主GEVVR 1010和目标节点的GEVVR 990中。
[0169] S2020由系统500中的每个节点510执行。在S2020处,系统500中的每个处理单元2执行分布式应用的指令集。
[0170] S2030由系统500中的每个节点510执行。在S2030处,处理节点510中的每一个响应于与相应元素相关联并且已经在处理系统中的处理节点中的一个上发生的类型的事件,更新全局事件向量的至少一个副本的一个或多个元素中的每一个。该步骤由调节器740执行。
[0171] 在S2040处,在处理节点510中的第一处理节点上,检测事件类型中的第一类型的第一事件。该事件可以例如是由节点510a的组件770a检测到的事件。响应于检测到第一事件,处理节点510中的第一处理节点向处理节点510中的一个或多个其他处理节点提供对全局事件向量的元素中的第一元素的更新的指示。元素中的第一元素与事件类型中的第一事件类型相关联。
[0172] S2050由系统500中接收由处理节点510中的第一处理节点在S2040处提供的更新的其他节点510(即,除了节点510中的第一节点之外)执行。在S2050处,响应于对元素中的第一元素的更新的指示,这些其他节点510中的每一个更新全局事件向量的其至少一个副本中的元素中的对应的第一元素。
[0173] 参考图21,其示出了用于更新保存在设备上的事件向量的副本并使用这些副本来执行响应动作的示例方法2100。错误事件向量可以是上面讨论的CEV或GEV。设备可以是设备300或设备410。
[0174] 在S2110处,针对设备300中的每个组件770存储事件向量的副本。最初,事件向量的每个副本可以被设置为指示在事件向量中捕获的任何事件类中没有发生事件。
[0175] 在S2120处,在组件770的子集中的每一个处,检测与该组件770相关联的事件。在相应事件报告中将事件报告给控制节点740。组件770的子集包括一个或多个组件770。
[0176] 在S2130处,控制节点740从组件770中的第一组件接收事件报告中的第一事件报告,事件报告中的第一事件报告报告第一类型的事件,其中该第一类型的事件已经由组件770中的第一组件检测到。
[0177] 在S2140处,控制节点740向多个组件770中的每一个广播一个或多个写入,以便通过设置与第一类型的事件相关联的元素中的第一元素来更新错误事件向量的每个副本,以便指示第一类型的事件已经在处理设备上发生。这些副本保存在目标节点720的CEVVR 980中。
[0178] 在S2150处,在组件770中的第二组件处,响应于在错误事件向量的其自己的副本中设置元素中的第一元素,执行与第一类型事件相关联的动作。
[0179] 上面将各种功能描述为由电路执行,例如处理逻辑930、处理电路1010、处理电路1220、处理电路1400、电路1600。该电路可以包括专用硬件,例如FPGA或ASIC,和/或被配置为执行指令的处理器。系统500中的每个处理节点510被分配指令集,用于执行由被配置为执行指令的处理器执行的任何操作。
[0180] 仅通过示例的方式描述了上述实施例。

当前第1页 第1页 第2页 第3页
相关技术
节点系统相关技术
重置相关技术
D·J·威尔金森发明人的其他相关专利技术