专利名称:信息处理装置和控制方法
技术领域:
这里讨论的实施例涉及一种信息处理装置、一种控制方法和一种控制程序。
背景技术:
过去,已知对称多处理器(SMP)技术,其中多个算术处理单元共享主存储单元。作为被应用该SMP技术的信息处理系统的一个不例,存在一种如下的信息处理系统,其中包括算术处理单元和主存储单元的多个节点连接到同一总线,并且每个算术处理单元通过总线共享每个主存储单元。该信息处理系统通过使用例如窥探(snoop )方案来保持每个节点的算术处理单元缓存的数据的一致性。再者,在将共享存储器用作节点之间的通信单元的系统中,存在如下技术,其中当检测节点的异常时,将待传送的数据转换成表示异常的数据并且传送所转换的数据。在该技术中,接收表示异常的数据的节点放弃接收到的数据。再者,在其中通过交叉开关连接多个节点的系统中,存在如下技术,其中当发生分组通信的停滞时,通过改变通信路径来继续处理。在该技术中,由节点传送的请求从交叉开关传送到其自身的节点和其他节点。在该技术中,传送请求的节点测量从传送请求到接收请求的时间,检测超时,并且确定已发生分组通信的停滞。再者,在其中通过交叉开关连接多个节点的系统中,存在如下技术,其中在中断从节点传送的数据的情况下,当中断时间等于或长于预定时间时,包括表示异常的数据的伪数据被传送到接收侧的节点。专利文献1:日本公开专利公布第2004-013723号专利文献2:日本公开专利公布第2002-366451号专利文献3:日本公开专利公布第11-168502号然而,上述技术具有不能抑制当发生与节点之间的数据传送相关的异常时的错误影响范围的问题。例如,在通过使用窥探方案保持缓存数据的一致性的信息处理系统中,可以考虑如下情况。就是说,当在某个节点中发生故障(节点关闭)并且发生节点之间的通信异常时,可以考虑将所有节点关闭以保持缓存数据的一致性。在该情况下,错误影响范围达到所有节点。因此,本发明的实施例的一个方面的目的在于抑制当发生与节点之间的数据传送相关的异常时的错误影响范围。
发明内容
根据实施例的一个方面,一种信息处理装置包括:多个节点,每个节点包括存储单元;以及互连,其连接多个节点,其中多个节点中的至少一个节点包括:异常检测单元,其使用能够在一个节点和另一节点中共享的、设置在一个节点或另一节点中的存储单元中所包括的共享存储器区域来检测数据传送的数据传送路径中的异常,或者使用能够在一个节点和另一节点中共享的、设置在一个节点或另一节点中的存储单元中所包括的共享存储器区域来检测数据传送的数据传送路径中包括的特定节点中的异常;错误信息生成单元,其基于由异常检测单元检测到的异常来生成错误信息,并且生成针对自身节点中的处理器的中断;以及处理器,其根据中断基于错误信息来执行恢复处理。
图1是描述根据第一实施例的信息处理系统的示例的示图2是描述根据第一实施例的构造块的功能配置的示图3是描述当其他节点附连到被分配共享存储器的节点时的存储器图的示例的示图4是描述根据第一实施例的CPU的功能配置的示图5是描述根据第一实施例的节点图的数据格式的示例的示图6是描述目录的数据格式的示例的示图7是描述由根据第一实施例的CPU传送的分组的示图8是图示传送分组的示例的示图9是图示异常检测单元的另一配置的示例的示图10是图示“TLP报头”的数据格式的示例的示图11是描述接收“中毒TLP”分组的PCIe控制单元的操作的具体示例的示图12是描述根据第一实施例的使CPU传送请求的处理的示例的示图13是描述根据第一实施例的当CPU接收分组时执行的处理的示例的示图14是描述根据第一实施例的使I/O设备传送请求的处理的示例的示图15是描述根据第一实施例的使I/O设备接收响应的处理的示例的示图16是描述当在节点和包括相应节点的访问对象的存储器的节点之间发生数据传送异常时执行的处理的示例的示图17是描述当在节点和包括相应节点的访问对象的存储器的节点之间发生数据传送异常时执行的处理的示例的示图18是描述控制共享区域的处理流程的流程图19是描述共享存储器分配处理的流程图20是描述共享存储器附连处理的流程图21是描述使应用使用共享存储器的处理的流程图22是描述节点之间的共享存储器分拆处理的流程图23是描述节点之间的共享存储器释放处理的流程图24是描述发出请求的处理流程的流程图25是描述当接收到请求时执行的处理流程的流程图26是描述当CPU接收响应时执行的处理流程的流程图27是描述当CPU传送请求时执行的处理流程的流程图28是描述当PCIe控制单元传送读取请求时执行的处理流程的流程图29是描述当PCIe控制单元传送写入请求时执行的处理流程的流程图30是描述因陷阱的生成而由OS执行的陷阱处理的流程的流程图;图31是图示处置器表格的数据格式的示例的示图;图32是描述由被通知信号的信号处置器执行的处理的流程的流程图;图33是描述由被通知信号的信号处置器执行的另一处理的流程的流程图;图34是描述用于检测节点异常的方法的示例的信息处理系统的示意图;图35是描述在使用与第一实施例的异常检测方法不同的方法的情况下的处理流程的流程图;图36是描述在集群管理管理器检测异常的情况下的处理流程的流程图;图37是描述信息处理系统的示例的示图;图38是描述分区的示例的示图;图39A是描述分区#A的CPU存储的节点图的示例的示图;图39B是描述表示分区#A的节点图的示例的示图;以及图39C是描述表示分区#B的节点图的示例的示图。
具体实施例方式将参照
本发明的优选实施例。[a]第一实施例在下面的第一实施例中,将参照图1描述包括多个节点的信息处理系统的示例。图1是描述根据第一实施例的信息处理系统的示例的示图。在图1中所示的示例中,信息处理系统I包括交叉开关(XB) 2和多个构造块10至IOe。XB 2是相互连接各个构造块10至IOe的交叉开关。再者,XB 2包括服务处理器(未示出),其是后面将描述的每个构造块10至IOe中包括的每个服务处理器的主设备。再者,在其中连接少量节点的小规模配置的情况下,构造块可以直接连接在一起,而不通过XB 2。再者,构造块10包括多个中央处理单元(CPU) 21至21c以及多个存储器22至22c。再者,其他构造块IOa至IOe也具有与构造块10相同的配置,并且将不提供它们的描述。再者,在图1中所示的示例中,未提供关于CPU 21b和21c以及存储器22b和22c的描述。再者,输入/输出(I/O)设备(未示出)设置在每个构造块中。在该实施例中,按目录方案实现CPU之间的缓存一致性控制,并且后面将描述的具有用于存储数据的归属CPU管理相应的目录。各个构造块10至IOe独立地操作OS。换言之,各个CPU 21至21c独立地执行OS。在每个构造块处在不同的分区中操作由各个构造块10至IOe执行的OS。术语“分区”表示其中同一 OS操作并且考虑到操作的OS作为单个系统操作的一组构造块。例如,构造块10至IOa作为分区#A操作,并且构造块IOb至IOd作为分区#B操作。在该情况下,由构造块10操作的OS识别到构造块10和IOa作为单个系统操作,并且由构造块IOb操作的OS识别到构造块IOb至IOd作为单个系统操作。接下来,将参照图2描述构造块的配置示例。图2是描述根据第一实施例的构造块的功能配置的示图。在图2中所示的示例中,构造块10包括节点20、服务处理器24、XB连接单元27和27a以及高速外围部件互连(PCIe)连接单元28。节点20包括多个CPU 21至21c、多个存储器22至22c以及通信单元23。
服务处理器24包括控制单元25和通信单元26。再者,在图2中所示的示例中,各个CPU 21至21c相互连接并且连接到通信单元23。再者,各个存储器22至22c连接到各个CPU 21至21c。服务处理器24通过诸如局域网(LAN)(未示出)的网络线路连接到服务器管理器终端,从管理器终端接收指令,并且执行节点或构造块10中的诸如各种设定改变的控制。
再者,各个CPU 21至21c连接到XB连接单元27或者XB连接单元27a。再者,XB连接单元27和27a可以是同一 XB连接单元。再者,各个CPU 21至21c连接到PCIe连接单元28。再者,通信单元23连接到服务处理器24中包括的通信单元26。再者,例如,通过内置集成电路(I2C)连接控制单元25、通信单元26、通信单元23和各个CPU 21至21c。
CPU 21至21c是执行应用的算术处理单元。再者,各个CPU 21至21c分别连接到存储器22至22c。再者,在其中运行的应用提出分配共享存储器的请求的情况下,各个CPU 21至21c相互执行通信并且执行其中应用使用的共享存储器的分配。再者,各个CPU21至21c将各个存储器22至22c或者其他构造块IOa至IOe中包括的一些存储器用作共享存储器。
图3是描述当其他节点附连到被分配共享存储器的节点时的存储器图的示例的示图。在图3的示例中,在将共享存储器分配到拥有存储器实体的节点(被称为归属节点)时,归属节点按恒定区域尺寸对共享存储器分区。分区的单位被称为片段(segment),但是分区到片段不是必要的。在其中其他节点提出分配相应的归属节点拥有的共享存储器的请求的情况下,在下文中该处理被称为“附连”请求,节点可以开始使用相应的归属节点的共享存储器。该远程节点使用的存储器区域被称为共享存储器映像区域。单个远程节点可以附连到共享存储器映像区域,并且多个远程节点可以附连到共享存储器映像区域。
返回图2,各个CPU 21至21c具有节点图,该节点图使物理地址与作为连接到被分配该物理地址的存储器的CPU的标识符的CPnD (身份)匹配。再者,CPUID是在系统I中唯一确定的,并且不重叠。
各个CPU 21至21c通过使用节点图执行与其他CPU的通信。例如,在其中与作为访问对象的物理地址匹配的CPMD表示不同于CPU 21至21c的CPU的情况下,CPU 21通过XB连接单元27或XB连接单元27a和XB 2向其他节点传送存储器访问请求。再者,在其中CPU 21从其他节点接收到针对与其自身连接的存储器的请求时,CPU 21从与其自身连接的存储器22读取所请求的对象数据,并且将读取的数据传送到请求源。其他CPU 21a至21c执行相同的处理。
再者,各个CPU 21至21c具有如下功能:通过使用转换后备缓冲器(TLB)来执行地址转换并且当发生TLB缺失时执行与传统CPU相同的诸如陷阱处理的处理。
再者,各个CPU 21至21c检测节点之间的数据传送的异常(错误)。将描述用于检测节点之间的数据传送的异常的方法的示例。例如,各个CPU 21至21c测量传送请求之后的时间。随后,在传送请求之后在接收到响应之前,如果传送请求之后的时间超过预定时间,则时间超时。因此,各个CPU 21至21c检测节点之间的数据传送的异常。再者,各个CPU 21至21c还检测当从其他节点接收到针对请求的否定响应时的异常。
当检测到异常时,各个CPU 21至21c执行多种处理。例如,在其中写回到各个存储器22至22c的共享存储器的脏缓存数据并非由引起异常发生(例如,节点崩溃)的节点写回的情况下,各个CPU 21至21c执行如下处理。换言之,对于表示缓存状态的目录,各个CPU 21至21c写入表示如下异常的特殊值:将写回到各个存储器22至22c的共享存储器的脏缓存数据未被写回。此外,在其中检测到异常并且写回到各个存储器22至22c的共享存储器的脏缓存数据并非由引起异常发生的节点写回的情况下,各个CPU 21至21c可以执行如下处理。换言之,对于其中被崩溃节点写回缓存数据的各个存储器22至22c的共享存储器的区域,各个CPU 21至21c可以写入表示错误状态的特殊数据。通过该处理,使得能够表示未被写回的共享存储器的数据不是正常的。再者,在其中写回请求未到达后面将描述的归属CPU的情况下,后面将描述的本地CPU通过检测来自归属CPU的、后面将描述的超时来识别事务故障。在该情况下,本地(PU放弃相应的数据。归属CPU管理的目录处于本地CPU在其缓存中拥有数据的状态。因此,从归属CPU生成“移出(MoveOut)”请求。“移出”请求使得在本地CPU中发生缓存缺失。然而,对于“移出”请求,返回错误响应,并且归属CPU中存在的目录的状态被异常更新,就是说,表示上述错误的数据被写入。再者,在其中崩溃节点的共享存储器的物理地址(PA)被写入错误发生地址寄存器的情况下,出现陷阱(中断)。换言之,在其中物理地址被写入错误发生地址寄存器的情况下,各个CPU 21至21c执行陷阱处理。在陷阱处理中,例如,将信号传送到信号处置器(handler)。这里,当接收到信号时启动信号处置器。在信号处置器的处理中,执行多种处理。例如,在信号处置器的处理中,在崩溃节点中存在“共享存储器实体”的情况下,分拆“共享存储器映像”。换言之,解除崩溃节点中包括的共享存储器的分配。再者,在信号处置器的处理中,执行恢复检测其他节点的崩溃的节点的存储器的共享存储器的处理。作为恢复处理的一个示例,可以存在如下处理:从目录清除表示写回到共享存储器的缓存数据未被写回的异常的值。再者,作为恢复处理的另一示例,可以存在如下处理:从共享存储器清除表示错误状态的数据。存储器22至22c是由信息处理系统I中包括的所有CPU共享的存储器。再者,在信息处理系统I中,对于所有构造块10至IOe中包括的存储器,各个构造块10至IOe的服务处理器分配映射到同一物理地址空间的物理地址。换言之,将具有不重叠的值的物理地址被至少分配到信息处理系统I中包括的所有存储器中的用作共享存储器的存储器。再者,存储器22至22c将一部分存储区域设定为由信息处理系统I中包括的所有CPU共享的共享区域,并且将其他部分设定为本地区域和I/O区域,本地区域存储由访问它们自身的CPU 21至21c使用的核心数据或用户数据,I/O区域由与通过共享存储器与其他节点交换数据无关的I/O设备使用。控制单元25执行构造块10的控制。例如,控制单元25执行构造块10的功率管理、构造块10中的异常的监控或控制等。再者,控制单元25通过网络(未示出)连接到其他构造块IOa至IOe中包括的服务处理器,并且执行各个构造块IOa至IOe之间的相关联的控制。再者,控制单元25可以执行由各个CPU 21至21c执行的与OS的通信。再者,控制单元25通过通信单元26和通信单元23访问各个CPU 21至21c。控制单元25通过各个构造块10至IOe中包括的节点图的更新等来执行对构造块中的CPU的控制。
再者,通信单元23通过服务处理器24中包括的通信单元26将控制信号从控制单元25传送到各个CPU 21至21c。再者,通信单元26将控制信号从控制单元25传送到节点20中包括的通信单元23。再者,XB连接单元27和27a将各个CPU 21至21c连接到XB2,并且中继各个构造块10至IOe中包括的CPU之间的通信。再者,PCIe连接单元28中继各个CPU 21至21c对I/O设备的访问。
接下来,将参照图4描述各个CPU 21至21c的功能配置。图4是描述根据第一实施例的CPU的功能配置的示图。再者,由于CPU 21a至21c具有与CPU 21相同的功能,因此将不提供它们的描述。再者,在图4中所示的示例中,未提供关于将服务处理器24连接到CPU 21的通信单元23和26的描述。
在图4中所示的示例中,CPU 21包括算术处理单元30、路由器40、存储器访问单元41和PCIe控制单元42。再者,算术处理单元30包括算术单元31、I级(LI)缓存32、2级(L2)缓存33、节点图34、地址转换单元35、缓存目录管理单元36、分组控制单元37、错误发生地址寄存器96和陷阱生成单元97。再者,诸如路由器40、存储器访问单元41和PCIe控制单元42的各个单元不必包括在同一 CPU 21内部。
再者,分组控制单元37包括分组生成单元37a、分组接收单元37b和异常检测单元37c。再者,PCIe控制单元42包括请求生成单元42a、PCIe总线控制单元42b和异常检测单元42c。
首先,将描述算术处理单元30中包括的节点图34。节点图34是其中彼此相关联地登记连接到具有由物理地址指示的存储区域的存储器的CPU的物理地址和CPnD的表格。在下文中,将参照附图描述登记在节点图34中的信息的示例。
图5是描述根据第一实施例的节点图的数据格式的示例的示图。在图5中所示的示例中,节点图34具有与各个项目“地址”、“有效”、“节点ID”和“CPMD”的登记内容匹配的条目。这里,每个条目的“地址”项目存储表示包括多个连续物理地址的地址区域的信息。
例如,信息处理系统I将分配给所有存储器的物理地址空间分成尺寸相等的物理区域,并且将诸如#0、#1和#2的标识符分配给各个地址区域。信息处理系统I将表示各个地址区域的标识符登记在节点图34中包括的每个条目的“地址”中。图5的示例图示了其中将标识符#0登记在第一条目的“地址”项目中的情况。再者,图5的示例图示了其中将标识符#1登记在第二条目的“地址”项目中的情况。再者,图5的示例图示了其中将标识符#2登记在第三条目的“地址”项目中的情况。
再者,在每个条目的“有效”项目中,登记表示是否启用对物理地址指示的存储区域的访问的有效位。例如,在其中物理地址指示的存储区域是由各个CPU共享的共享区域的情况下,登记表示启用访问的有效位(例如“I”)。图5的示例图示了其中有效位“I”登记在第一条目的“有效”项目中的情况。再者,图5的示例图示了其中有效位“I”登记在第二条目的“有效”项目中的情况。再者,图5的示例图示了其中有效位“0”登记在第三条目的“有效”项目中的情况,这表示禁用对物理地址指示的存储区域的访问。
再者,在每个条目的项目“节点ID”中,登记表示其中存在被分配物理地址的存储器的节点的标识符。图5的示例图示了其中表示节点的标识符“I”被登记在第一条目的“节点ID”中的情况。再者,图5的示例图示了其中表示节点的标识符“I”被登记在第二条目的“节点ID”中的情况。
再者,在每个条目的项目“CPWD”中,登记表示连接到被分配物理地址的存储器的CPU的标识符。换言之,节点图34表示哪个CPU连接到作为访问对象的物理地址的存储器。图5的示例图示了其中表示CPU的标识符“4”登记在第一条目的“CPWD”项目中的情况。再者,图5的示例图示了其中表示CPU的标识符“5”登记在第二条目的“CPWD”项目中的情况。再者,当可以表示哪个CPU连接到作为访问对象的物理地址的存储器时,可以通过除该实施例以外的任意格式来登记信息。返回图4,算术单元31是执行算术处理并且执行操作系统(OS)或应用的算术单元的核心。再者,当执行数据读取或写入时,算术单元31向地址转换单元35输出其中存储作为读取对象或写入对象的数据的存储区域的逻辑地址(虚拟地址:VA)。LI缓存32是临时存储在算术单元31中频繁使用的数据的缓存存储器。如LI缓存32的情况,L2缓存33临时存储频繁使用的数据。然而,L2缓存33是低速缓存存储器,其存储容量小于LI缓存32并且其数据读取和写入速度是低的。这里,目录信息存储在缓存目录管理单元36中并且是表示缓存存储器22的每个存储区域中存储的数据或者缓存数据的更新状态的CPU的信息。再者,在下面的描述中,“目录信息”还被简单地称为“目录”。通过目录管理缓存存储器的方法是在缓存一致非统一存储器(ccNUMA)系统中频繁使用的技术。然而,由于xxNUMA技术和目录技术两者是公知的技术,因此这里将不提供它们的详细描述。再者,在图4中,目录36a嵌入在缓存目录管理单元36中,但是目录信息也可以记录在存储22的一部分存储区域中。地址转换单元35包括TLB 35a。在TLB 35a中,登记其中逻辑地址和物理地址彼此匹配的条目。地址转换单元35通过使用TLB 35a将算术单元31输出的逻辑地址转换成物理地址。例如,地址转换单元35从TLB35a搜索与从算术单元31获得的逻辑地址对应的物理地址。作为搜索结果,当获得物理地址时,地址转换单元35将所获得的物理地址输出到缓存目录管理单元36。再者,当发生TLB缺失时,地址转换单元35执行陷阱处理。这里,诸如OS的系统软件将其中发生TLB缺失的物理地址和逻辑地址的集合登记在TLB 35a中。然而,对于其中禁止该集合的登记的物理地址,即使当发生TLB缺失时,物理地址和逻辑地址的集合未被诸如OS的系统软件登记在TLB 35a中。这里,当从算术单元31执行的应用接收到分配共享存储器的请求时,OS、地址转换单元35等执行如下处理。换言之,当发生TLB缺失时,诸如OS的系统软件将条目登记在TLB 35a中。再者,在没有发生TLB缺失的情况下,由于TLB 35a中的条目的登记已完成,因此地址转换单元35执行从逻辑地址到物理地址的转换。再者,当从应用或OS接收到分配逻辑区域的请求时,地址转换单元35执行如下处理。换言之,当发生TLB缺失时,诸如OS的系统软件将其中用于访问指定给CPU 21的本地区域的逻辑地址和分配给本地区域的范围的物理地址彼此匹配的条目登记在TLB 35a中。再者,OS等从TLB 35a删除包括其中发生异常的节点的共享存储器的物理地址的条目。缓存目录管理单元36包括目录36a。缓存目录管理单元36执行缓存数据和目录的管理。缓存目录管理单元36从地址转换单元35获得通过转换由算术单元31输出的逻辑地址来生成的物理地址。
当从地址转换单元35获得物理地址时,缓存目录管理单元36执行如下处理。换言之,通过使用目录36a,缓存目录管理单元36确定在所获得的物理地址中存储的数据是否缓存在LI缓存32和L2缓存33中。
当确定所获得的物理地址中存储的数据被缓存时,缓存目录管理单元36将缓存数据输出到算术单元31。再者,当所获得的物理地址中存储的数据未被缓存在LI缓存32和L2缓存33中时,缓存目录管理单元36执行如下处理。首先,缓存目录管理单元36参照节点图34识别包括所获得的物理地址的范围的条目。缓存目录管理单元36确定所识别的条目的CPUID是否是CPU 21的CPUID。随后,当所识别的条目的CPUID是CPU 21的CPUID时,缓存目录管理单元36将物理地址输出到存储器访问单元41。
再者,当所识别的条目不是CPU 21的CPWD时,缓存目录管理单元36执行如下处理。换言之,缓存目录管理单元36获得所识别的条目的CPnD和节点ID。缓存目录管理单元36将所获得的CPMD和物理地址输出到分组控制单元37。
再者,当从存储器访问单元41或分组控制单元37获得由输出的物理地址指示的存储区域中存储的数据时,缓存目录管理单元36将所获得的数据存储在LI缓存32和L2缓存33中。缓存目录管理单元36将LI缓存32中缓存的数据输出到算术单元31。
再者,当从分组控制单元37获得物理地址时,就是说,当从其他CPU或I/O设备获得作为存储器访问的请求对象的物理地址时,缓存目录管理单元36执行如下处理。换言之,缓存目录管理单元36参照节点图34确定所获得的物理地址是否是分配给本地区域的物理地址。
当所获得的物理地址是分配给本地区域的物理地址时,缓存目录管理单元36指令分组控制单元37向请求源传送否定响应(访问错误)。
再者,当所获得的物理地址是分配给共享区域的物理地址时,缓存目录管理单元36指令获得由所获得的物理地址指示的存储区域中存储的数据,将所获得的数据输出到分组控制单元37,并且将所获得的数据传送到请求源。
再者,缓存目录管理单元36还通过使用目录方案来执行保持缓存数据的一致性的处理。例如,当向请求传送源的CPU传送存储器22中存储的数据时,缓存目录管理单元36确定除请求传送源的CPU以外的CPU是否缓存相应的数据。
当其他CPU没有缓存作为请求对象的数据时,缓存目录管理单元36从LI缓存32、L2缓存33和存储器22获得作为请求对象的数据。随后,缓存目录管理单元36将所获得的数据输出到分组控制单元37。
另一方面,当其他CPU缓存作为请求对象的数据时,缓存目录管理单元36通过使用Illinois协议等执行保持缓存一致性的处理。例如,缓存目录管理单元36确定缓存数据的状态是修改/排除/共享/无效(MESI)中的哪个。
缓存目录管理单元36根据确定结果执行用于保持与其他CPU中包括的缓存目录管理单元的一致性的请求或命令(指令),并且根据缓存数据的状态执行处理。这里,“修改”表示任一个且仅一个CPU缓存数据并且缓存数据处于更新状态。再者,当缓存数据的状态是“修改”时,执行写回。
再者,“排除”表示任一个且仅一个CPU缓存数据并且缓存数据处于未更新状态。再者,“共享”表示多个CPU缓存数据并且缓存数据处于未更新状态。再者,“无效”表示未登记缓存的状态。作为具体示例,缓存目录管理单元36指令分组生成单元37a传送指令写回到缓存M (修改)状态的数据的CPU的命令。缓存目录管理单元36更新数据的状态并且根据更新之后的状态执行处理。再者,后面将描述缓存目录管理单元36传送和接收的请求或命令的类型。再者,在其中检测到节点之间的数据传送的异常的情况下,当写回到存储器22的共享存储器的缓存数据并非由引起异常发生的节点写回时,缓存目录管理单元36执行如下处理。换言之,缓存目录管理单元36将表示写回到存储器22的共享存储器的缓存数据并非由崩溃节点写回的异常的值记录在目录36a的预定区域中。图6是描述目录的数据格式的示例的示图。如图6中所示,目录36a包括从第O位到第3位的4位的“UE”项目。再者,目录36a包括从第4位到第66位的63位的“PRC”项目。再者,目录36a包括从第67位到第68位的2位的“CKBIT”项目。在“CKBIT”项目中,登记通过对缓存的状态编码而获得的数据。在“PRC”项目中,登记其中由位图表示保持缓存的CPU的位置的数据。在“UE”项目中,登记表示目录的异常以及异常的起因的数据。这里,将描述其中缓存目录管理单元36包括图6的示例中所示的目录36a的情况。在该情况下,当检测到异常并且写回到存储器22的共享存储器的缓存数据并非由引起异常发生的节点写回时,缓存目录管理单元36执行如下处理。就是说,缓存目录管理单元36记录4位或更小的值,其表示写回到存储器22的共享存储器的缓存数据并非由崩溃节点写回的异常,并且在目录36a的“UE”项目中表示起因。这样,使得能够表示未被写回的共享存储器的数据不是正常的。再者,当检测到节点之间的数据传送的异常,并且写回到存储器22的共享存储器的缓存数据并非由引起异常发生的节点写回时,缓存目录管理单元36可以执行如下处理。换言之,缓存目录管理单元36可以在存储器22的共享存储器的、其中由崩溃节点写回缓存数据的区域中,记录表示错误状态的数据。这里,将描述表示错误状态记录在共享存储器的区域中的数据的示例。例如,在其中在存储器22中存储的数据中按照每预定的位数目包括错误检查和校正(ECC)数据的情况下,可以根据ECC生成多项式执行2位或更多的错误校正。在该情况下,较之其他错误具有低的错误发生概率的、表示η (η >2)位或更大的错误的特定值的校正子(syndrome)可以是表示记录在共享存储器的区域中的错误状态的数据。再者,当记录在数据本体中时,在该处校正子具有特定值的值可以是表示错误状态记录在共享存储器的区域中的数据。这样,使得能够表示未被写回的共享存储器的数据不是正常的。再者,缓存目录管理单元36对于存储器22的共享存储器执行恢复处理。作为恢复处理的一个示例,可以存在如下处理:从目录36a清除表示写回到共享存储器的缓存数据未被写回的异常的值。再者,作为恢复处理的另一示例,可以存在如下处理:从共享存储器清除表示错误状态的数据。如后面将描述的,由OS或者应用软件的指令执行恢复处理。当分组生成单元37a从缓存目录管理单元36获得物理地址和CPWD时,分组生成单元37a生成存储所获得的物理地址的分组和CPUID的分组,就是说,作为存储器访问请求的分组。分组生成单元37a向路由器40传送所生成的分组。图7是描述由根据第一实施例的CPU传送的分组的示图。在图7中所示的示例中,分组生成单元37a生成包括CPMD、物理地址和表示请求的内容的数据的请求,并且将所生成的请求输出到路由器40。在该情况下,路由器40通过XB连接单元27将分组生成单元37a生成的请求输出到XB 2。XB 2将请求传送到请求中包括的CPUID指示的CPU。
再者,当分组生成单元37a从缓存目录管理单元36接收到发出用于保持一致性的请求或命令的指令时,分组生成单元37a生成所指令的请求或命令。分组生成单元37a通过路由器40、XB连接单元27和XB 2将所生成的请求或命令传送到指定的CPU。再者,当分组生成单元37a从I/O设备获得数据时,分组生成单元37a将对I/O的访问请求输出到路由器40。
再者,当分组生成单元37a传送请求时,分组生成单元37a将指示请求的传送的数据输出到异常检测单元37c。该数据包括关于请求的信息,诸如所传送的请求的类型,或者作为访问对象的存储器的物理地址。
当分组接收单元37b通过XB 2、XB连接单元27和路由器40接收到除其自身的节点之外,由其他CPU或其他I/O输出的分组时,分组接收单元37b获得接收到的分组中包括的物理地址。分组接收单元37b将所获得的物理地址输出到缓存目录管理单元36。此外,当分组接收单元37b接收到由其他CPU传送的数据时,分组接收单元37b将接收到的数据输出到缓存目录管理单元36。
再者,当分组接收单元37b接收到用于保持一致性的请求或命令时,分组接收单元37b将接收到的请求或命令输出到缓存目录管理单元36。再者,当分组接收单元37b从路由器40接收到对访问请求的响应或者关于I/O设备的数据时,分组接收单元37b将接收到的响应或数据输出到缓存目录管理单元36。在该情况下,例如,缓存目录管理单元36执行将所获得的数据输出到存储器访问单元41并且将所获得的数据存储在存储器22中的处理。
再者,当分组接收单元37b接收到对从分组生成单元37a传送的请求的响应时,分组接收单元37b将指示响应的接收的数据输出到异常检测单元37c。该数据包括关于响应的信息,诸如接收到的响应的类型。
异常检测单元37c包括指示器80、定时器81、传送分组82、PA 83、请求84和检测单元85。
当异常检测单元37c从分组生成单元37a接收到指示请求的传送的数据时,异常检测单元37c启动用于计时的定时器81。再者,当异常检测单元37c从分组接收单元37b接收到指示响应的接收的数据时,异常检测单元37c启动定时器81。再者,当异常检测单元37c从分组生成单元37a接收到指示请求的传送的数据时,根据接收到的数据,异常检测单元37c将所传送的请求中包括的访问对象的存储器的物理地址存储在PA 83中。再者,当异常检测单元37c从分组生成单元37a接收到指示请求的传送的数据时,根据接收到的数据,异常检测单元37c将所传送的请求存储在请求84中。
再者,当异常检测单元37c从分组生成单元37a接收到指示请求的传送的数据时,根据接收到的数据,异常检测单元37c将所传送的请求的标识符登记在传送分组82中。
再者,当异常检测单元37c从分组接收单元37b接收到指示响应的接收的数据时,根据接收到的数据,异常检测单元37c从PA 83删除与接收到的响应对应的请求中包括的访问对象的存储器的物理地址。再者,当异常检测单元37c从分组接收单元37b接收到指示响应的接收的数据时,根据接收到的数据,异常检测单元37c从请求84删除与接收到的响应对应的请求。再者,当异常检测单元37c从分组接收单元37b接收到指示响应的接收的数据时,根据接收到的数据,异常检测单元37c从传送分组82删除与接收到的响应对应的请求的标识符。图8是图示传送分组的示例的示图。例如,在图8中所示的传送分组82中,在其中响应未返回的请求的数目是N的情况下,将N个请求的标识符分别登记在从用于分组I管理的条目到用于分组N管理的条目的各个条目中。再者,指示器80指示由登记在传送分组82中的各个标识符表示的各个请求中的、具有最旧的传送时间的请求。例如,在图8的示例中,指示器80指示由登记在用于分组I管理的条目中的标识符表示的请求。检测单元85确定定时器81的时间是否已经过预定的时间。在其中已经过预定时间的情况下,在预定时间内未接收到与指示器80指示的请求对应的响应。因此,检测单元85检测到在节点20和包括访问对象的存储器的节点之间发生数据传送异常。检测单元85从PA 83获得由指示器80指示的请求中包括的访问对象的存储器的物理地址,并且将所获得的物理地址记录在错误发生地址寄存器96中。当错误发生地址寄存器96中记录物理地址时,陷阱生成单元97生成陷阱。再者,在其中请求/命令是“将数据存储到存储器”或者“写回缓存置换”的情况下,在不生成陷阱的情况下,仅可以执行表示上述异常的数据的记录,并且在将数据加载到CPU时可以检测到异常。这里,上述的“表示异常的数据的记录”表示将表示异常和起因的4位或更少的值记录在目录36a的“UE”项目中,或者将表示错误状态的数据记录在存储器22的共享存储器的区域中。这样,在异常检测单元37c中,由单个定时器计时。因此,较之其中在每个请求处设置定时器的情况,在其中响应未返回的请求的数目多的情况下,可以通过数目较少的定时器进行计时。再者,异常检测单元37c的配置不限于上述配置。例如,除了请求的标识符,可以将请求的传送时间间隔登记在异常检测单元37c的传送分组82中,并且定时器82可以添加该间隔以执行重新启动。图9是图示异常检测单元的另一配置的示例的示图。在图9的示例中,除了上文所述的用于分组K管理的条目(K是自然数)之外,在传送特定请求之后直到传送另一请求的时间被登记在传送分组82中。这里,将进行关于如下情况的描述,其中在从传送请求I起IOOns之后传送请求2,并且在从传送请求2起300ns之后传送请求3。在该情况下,请求I至3的各个标识符被登记在用于分组I管理的条目至用于分组3管理的条目中。此时,对于请求I,0ns、IOOns和300ns被分别登记在间隔1、间隔2和间隔3中。这里,由于分组接收单元37b接收到对请求I的响应,因此由指示器80指示的请求从请求I切换到请求2。此时,尽管定时器81重新启动,但是时间的初始值不是0ns,并且定时器81从对应于请求2的IOOnm的间隔起开始计时。再者,当指示器80指示的请求从请求2切换到请求3时,通过相同的方式,定时器81从对应于请求3的300nm的间隔起开始计时。再者,当接收到对所有发送请求的响应时,下次发送请求的间隔再次是0ns。如上文所述,在异常检测单元37c的另一示例中,由单个定时器81计时。因此,可以通过数目较小的计时器高精度地计时。再者,在异常检测单元37c的另一示例中,由于定时器81考虑每个请求处的间隔来计时,因此可以高精度地计时。
再者,在异常检测单元37c中,未设置指示器80,并且在每个请求处设置定时器。每个定时器可以对传送请求之后的时间计时。
当路由器40接收到分组控制单元37中包括的分组生成单元37a输出的分组时,路由器40将接收到的请求输出到XB连接单元27。再者,路由器40通过XB连接单元27将由其他CPU传送的分组或数据输出到分组接收单元37b。再者,路由器40将分组控制单元37针对I/O设备等输出的分组输出到PCIe控制单元42。再者,当路由器40从PCIe控制单元42接收到I/O设备等的请求时,路由器40将接收到的请求等输出到分组控制单元37。再者,当路由器40从PCIe控制单元42接收到I/O设备的请求时,路由器40将接收到的请求输出到XB连接单元27。再者,当路由器40通过XB连接单元27接收到对I/O设备的响应时,路由器40将接收到的响应输出到PCIe总线控制单元42b。
存储器访问单元41是所谓的存储器访问控制器(MAC)并且执行对存储器22的访问的控制。例如,当存储器访问单元41从缓存目录管理单元36接收到物理地址时,存储器访问单元41获得由接收到的物理地址指示的存储器22的区域中存储的数据,并且将所获得的数据输出到缓存目录管理单元36。再者,存储器访问单元41通过使用存储器镜像功能来使共享区域冗余。
当请求生成单元42a通过路由器40获得对I/O设备的访问请求时,请求生成单元42a生成传送到作为访问请求的对象的I/O设备的请求,并且将所生成的请求输出到PCIe总线控制单元42b。再者,当请求生成单元42a从I/O设备获得物理地址和CPWD时,请求生成单元42a生成存储所获得的物理地址和CPWD的分组,就是说,作为存储器访问的请求的分组。对于请求的类型,存在请求I/O设备读取连接到其他CPU的存储器的请求。再者,当请求生成单元42a从I/O设备获得物理地址、CPUID和所记录的数据时,请求生成单元42a生成存储所获得的物理地址、CPUID和所记录的数据的分组,就是说,作为存储器访问的请求的分组。对于请求的类型,存在请求I/O设备将数据写入连接到其他CPU的存储器的请求。随后,请求生成单元42a将所生成的分组传送到路由器40。
再者,请求生成单元42a包括错误发生地址寄存器98和陷阱生成单元99。
当PCIe总线控制单元42b获得由请求生成单元42a生成的请求时,PCIe总线控制单元42b通过PCIe连接单元28将该请求传送到I/O设备。再者,当PCIe总线控制单元42b通过PCIe连接单元28从I/O设备获得物理地址和CPMD时,PCIe总线控制单元42b将所获得的物理地址和CPWD传送到请求生成单元42a。再者,当PCIe总线控制单元42b通过PCIe连接单元28从I/O设备获得物理地址、CPUID和所记录的数据时,PCIe总线控制单元42b将所获得的物理地址、CPUID和所记录的数据传送到请求生成单元42a。
再者,由于在传送对请求I/O设备读取连接到其他CPU的存储器的请求之后的预定时间内未接收到对该请求的响应,因此当检测到异常时,PCIe总线控制单元42b执行如下处理。就是说,PCIe总线控制单元42b向PCIe连接单元28传送“中毒TLP”分组。在该情况下,当PCIe连接单元28接收到“中毒TLP”分组时,PCIe连接单元28将接收到的“中毒TLP”分组传送到I/O设备。因此,I/O设备可以检测到发生异常。再者,当检测到发生异常时,由于PCIe连接单元28通知在设备驱动器软件中发生异常,因此执行恢复处理。作为恢复处理的示例,在其中在LAN中发生异常的情况下,一旦放弃正在处理的传送/接收数据,则LAN芯片的状态被初始化,并且在初始化之后,如通常的那样执行数据传送/接收。现将参照图10描述“中毒TLP”。图10是图示“TLP报头”的数据格式的示例的示图。“中毒TLP”是由“高速PCI”规范定义的分组。当图10的示例中所示的“TLP报头”的EP位接通时,其被识别为“中毒TLP”。图11是描述接收“中毒TLP”分组的PCIe控制单元的操作的具体示例的示图。图11的示例图示了在其中PCIe控制单元42对应于“根复合体(Root Complex)”,并且PCIe连接单元28对应于“高速PCI”卡的情况下的设备驱动器的分层结构。该示例图示了其中SAS的“高速PCI”卡被安装作为“高速PCI”卡。诸如在“高速PCI”总线上生成“中毒TLP”的事件的检测,或者对总线的处置是共同的,与“高速PCI”卡的类型无关。因此,事件的检测或者对总线的处置并非由诸如SAS设备驱动器的单独的设备驱动器执行,而是由“根复合体”驱动器执行。另一方面,当发生总线上的诸如错误相关事件的特定事件时,常常在其中发生错误的总线上操作的SAS设备驱动器侧执行SAS设备驱动器特有的恢复处理。这里,作为SAS设备驱动器特有的恢复处理的示例,可以存在终止处理或者正在处理的传送处理的重试。当出现“中毒TLP”时,“根复合体”驱动器执行错误现象(读取详细信息、清除状态位等)的收获,并且随后,在总线上向SAS设备驱动器通知发生错误。通过该通知,SAS设备驱动器开始SAS设备驱动器特有的恢复处理。再者,不同于向SAS设备驱动器通知发生错误,可以使用I/O设备向应用处理通知发生错误,并且可以从应用处理执行I/O设备的重新启动处理。再者,由于在传送对请求I/O设备将数据写入连接到其他CPU的存储器的请求之后的预定时间内未接收到对该请求的响应,因此当检测到异常时,PCIe总线控制单元42b执行如下处理。就是说,在检测到异常之后,PCIe总线控制单元42b放弃从与异常相关的PCIe连接单元28接收到的“将数据写入存储器的请求”。如后面将描述的,错误发生地址被设定到错误发生地址寄存器98,并且通过使用陷阱生成单元97生成陷阱。由于该陷阱通知在设备驱动器软件中发生异常,因此执行恢复处理。作为恢复处理的示例,在其中在LAN中发生异常的情况下,一旦放弃正在处理的传送/接收数据,则LAN芯片的状态被初始化,并且在初始化之后,如通常的那样执行数据传送/接收。异常检测单元42c包括指示器90、定时器91、传送分组92、PA 93、请求94和检测单元95。指示器90、定时器91、传送分组92、PA 93、请求94和检测单元95与上文所述的指示器80、定时器81、传送分组82、PA 83、请求84和检测单元85相同。再者,错误发生地址寄存器98和陷阱生成单元99与上文所述的错误发生地址寄存器96和陷阱生成单元97相同。就是说,当在分组控制单元37传送请求之后在接收到响应之前已经过预定时间时,异常检测单元37c检测到节点之间的数据传送的异常。如异常检测单元37c的情况中的那样,异常检测单元42c参照从请求生成单元42a通过路由器40传送到其他CPU的读取请求和写入请求,检测节点之间的数据传送的异常。当检测到异常时,与异常检测单元37c的检测单元85的情况相似,检测单元95从PA 93获得由指示器90指示的请求中包括的访问对象的存储器的物理地址,并且将所获得的物理地址记录在错误发生地址寄存器98中。当物理地址记录在错误发生地址寄存器98中时,陷阱生成单元99生成陷阱。接下来,将参照图12描述使CPU 21向其他CPU传送请求的处理的示例。图12是描述根据第一实施例的使CPU传送请求的处理的示例的示图。例如,如图12的(A)所指示的,参照来自服务处理器24的节点图34,执行如下条目的设定,其中针对被分配物理地址的存储器访问的CPU的CPWD以及该物理地址彼此匹配。
再者,如图12的(B)所指示的,算术单元31执行算术处理,并且将作为访问对象的逻辑地址输出到地址转换单元35。如图12的(C)所指示的,地址转换单元35将逻辑地址转换成物理地址,并且将经转换的物理地址输出到缓存目录管理单元36。
这里,如图12的(D)所指示的,当缓存目录管理单元36从地址转换单元35获得物理地址时,缓存目录管理单元36参照节点图34获得与所获得的物理地址匹配的CPMD。如图12的(E)所指示的,当所获得的CPUID不是CPU 21的CPWD时,缓存目录管理单元36将所获得的CPUID和物理地址输出到分组控制单元37。
在该情况下,如图12的(F)所指示的,分组生成单元37a生成存储从缓存目录管理单元36获得的物理地址和CPWD的分组,并且将所生成的分组输出到路由器40。再者,如图12的(G)所指示的,分组生成单元37a将表示作为请求的分组传送的数据输出到异常检测单元37c。随后,如图12的(H)所指示的,路由器40将从分组生成单元37a获得的分组输出到XB连接单元27。随后,如图12的(I)所指示的,XB连接单元27将所获得的分组输出到XB 2。XB 2将分组传输到由分组中存储的CPWD指示的CPU。
接下来,将参照图13描述当CPU 21从其他CPU接收到分组时执行的处理示例。图13是描述根据第一实施例的当CPU接收分组时执行的处理的示例的示图。例如,如图13的(J)所指示的,分组接收单元37b从其他CPU接收存储CPU 21的CPWD以及分配给存储器22的物理地址的分组,或者响应的分组。
在该情况下,如图13的(K)所指示的,当接收到的分组是响应的分组时,分组接收单元37b向异常检测单元37c输出表示作为响应的分组的接收的数据。如图13的(L)所指示的,分组接收单元37b从接收到的分组获得物理地址,并且将所获得的物理地址输入到缓存目录管理单元36。缓存目录管理单元36确定由物理地址指示的存储区域是共享区域还是本地区域。
在访问共享区域的情况下,如图13的(M)所指示的,缓存目录管理单元36确定由物理地址指示的存储区域的数据是否被缓存在LI缓存32或L2缓存33中。
再者,如图13的(N)所指示的,当确定数据未被缓存时,缓存目录管理单元36将物理地址输出到存储器访问单元41。如图13的(0)所指示的,存储器访问单元41从存储器22获得由物理地址指示的存储区域的数据,并且将该数据输出到缓存目录管理单元36。
当缓存目录管理单元36从LI缓存32、L2缓存33或存储器访问单元41获得数据时,缓存目录管理单元36指令将所获得的数据输出到分组控制单元37,并且将所获得的数据传送到请求源的CPU。
接下来,将参照图14描述使I/O设备向除CPU 21之外的CPU传送读取或写入请求的处理的示例。图14是描述根据第一实施例的使I/O设备传送请求的处理的示例的示图。例如,如图14的(P)所指示的,当PCIe连接单元28从I/O获得物理地址和CPMD时,PCIe连接单元28将所获得的物理地址和CPMD输出到PCIe总线控制单元42b。再者,如图14的(P)所指示的,当PCIe连接单元28从I/O设备获得物理地址、CPUID和所记录的数据时,PCIe连接单元28将所获得的物理地址、CPUID和所记录的数据输出到PCIe总线控制单元42b。
如图14的(Q)所指示的,当PCIe总线控制单元42b从PCIe连接单元28获得物理地址和CPMD时,PCIe总线控制单元42b将所获得的物理地址和CPMD输出到请求生成单元42a。再者,如图14的(Q)所指示的,当PCIe总线控制单元42b从PCIe连接单元28获得物理地址、CPMD和所记录的数据时,PCIe总线控制单元42b将所获得的物理地址、CPMD和所记录的数据传送到请求生成单元42a。
再者,当PCIe总线控制单元42b从PCIe总线控制单元42b获得物理地址和CPMD时,请求生成单元42a生成作为读取请求的分组,其包括所获得的物理地址和CPWD。再者,当PCIe总线控制单元42b从PCIe总线控制单元42b获得物理地址、CPUID和所记录的数据时,请求生成单元42a生成作为写入请求的分组,其包括所获得的物理地址、CPUID和所记录的数据。随后,如图14的(R)所指示的,请求生成单元42a将所生成的分组输出到路由器40。
再者,如图14的(S)所指示的,请求生成单元42a向异常检测单元42c输出表示读取请求和写入请求的传送的数据。随后,如图14的(T)所指示的,路由器40将从请求生成单元42a获得的请求输出到XB连接单元27。随后,如图14的(U)所指示的,XB连接单元27将所获得的请求输出到XB 2。XB 2将分组传输到由请求中存储的CPUID指示的CPU。
接下来,将参照图15描述使I/O设备从除CPU 21之外的CPU接收响应的处理的示例。图15是描述根据第一实施例的使I/O设备接收响应的处理的示例的示图。例如,如图15的(V)所指示的,XB连接单元27从除CPU 21以外的CPU接收对I/O设备的响应。
如图15的(W)所指示的,当XB连接单元27接收到响应时,XB连接单元27将接收到的响应输出到路由器40。如图15的(X)所指示的,当路由器40接收到响应时,路由器40将接收到的响应输出到请求生成单元42a。如图15的(Y)所指示的,当请求生成单元42a接收到响应时,请求生成单元42a向异常检测单元42c输出表示响应的接收的数据。再者,如图15的(Z)所指示的,请求生成单元42a将响应输出到PCIe总线控制单元42b。如图15的(AA)所指示的,当PCIe总线控制单元42b接收到响应时,PCIe总线控制单元42b将接收到的响应输出到PCIe连接单元28。这样,将响应从PCIe连接单元28传送到I/O设备。
接下来,将参照图16和17描述当在节点20和包括节点20的访问对象的存储器的节点之间发生数据传送异常时执行的处理的示例。图16是描述当在节点和包括相应节点的访问对象的存储器的节点之间发生数据传送异常时执行的处理的示例的示图。例如,异常检测单元37c确定定时器81的时间是否已经过预定时间。当已经过预定时间时,在预定时间内未接收到对指示器80指示的请求的响应。因此,异常检测单元37c检测到在节点20和包括访问对象的存储器的节点之间发生数据传送异常。如图16的(AB)所指示的,异常检测单元37c从PA 83获得由指示器80指示的请求中包括的访问对象的存储器的物理地址,并且将所获得的物理地址记录在错误发生地址寄存器96中。如图16的(AC)所指示的,当物理地址被记录在错误发生地址寄存器96中时,陷阱生成单元97生成陷阱。
图17是描述当在节点和包括相应节点的访问对象的存储器的节点之间发生数据传送异常时执行的处理的示例的示图。例如,异常检测单元42c确定定时器91的时间是否已经过预定时间。当已经过预定时间时,在预定时间内未接收到对指示器90指示的请求的响应。因此,异常检测单元42c检测到在节点20和包括访问对象的存储器的节点之间发生数据传送异常。如图17的(AD)所指示的,异常检测单元42c从PA 93获得由指示器90指示的请求中包括的访问对象的存储器的物理地址,并且将所获得的物理地址记录在错误发生地址寄存器98中。如图17的(AE)所指示的,当物理地址被记录在错误发生地址寄存器98中时,陷阱生成单元99生成陷阱。通信单元23、服务处理器24、XB连接单元27、XB连接单元27a和PCIe连接单元28是电子电路。这里,作为电子电路的示例,可以应用诸如专用集成电路(ASIC)、现场可编程门阵列(FPGA)等的集成电路,CPU或者微处理单元(MPU)。再者,不同于CPU 21至21c,可以应用诸如ASIC、FPGA等的集成电路,MPU等。再者,存储器22至22a是半导体存储器设备,诸如随机存取存储器(RAM)、只读存储器(ROM)或闪速存储器。再者,LI缓存32和L2缓存33是高速半导体存储器设备,诸如静态随机存取存储器(SRAM)。接下来,将描述使各个CPU 21至21c保持缓存一致性的处理。再者,在下面的描述中,假设信息处理系统I的各个CPU通过使用Illinois协议来保持缓存一致性。再者,在下面的描述中,假设信息处理系统I中包括的各个存储器被识别为具有能够从所有CPU缓存的空间的存储器。再者,在下面的描述中,通过CPU内的MAC物理地并且直接地连接到存储作为缓存对象的数据的存储器的CPU被称为归属CPU,并且请求访问的CPU被称为本地CPU。再者,已向归属CPU传送请求并且完成数据缓存的CPU被称为远程CPU。再者,存在如下情况,其中本地CPU和归属CPU是同一 CPU,或者其中本地CPU和远程CPU是同一 CPU。本地CPU参照其自身的节点图,确定作为访问对象的物理地址被分配给归属CPU访问的存储器。本地CPU向归属CPU发出存储物理地址的请求。再者,在本地CPU发出的请求中,存在多种类型的请求。出于该原因,归属CPU中包括的缓存目录管理单元根据所获得的请求的类型来执行缓存一致性控制。例如,作为由本地CPU发出的请求的类型,存在共享类型的取出访问、排除类型的取出访问、缓存无效请求、缓存置换请求等。例如,共享类型的取出访问是“移入共享(Moveln to Share)”的执行请求,并且是当从归属CPU访问的存储器执行数据读取时发出的请求。再者,例如,排除类型的取出访问是“排除地移入(MovelnExclusively)”的执行请求,并且在其中对归属CPU访问的存储器执行数据存储的情况下,在执行对缓存的数据加载时发出。再者,例如,缓存无效请求是“移出(MoveOut)”,并且在请求针对归属CPU的缓存线路的无效时发出。再者,当归属CPU接收到缓存无效请求时,归属CPU可以向远程CPU发出缓存无效请求,或者可以发出使缓存无效的命令。例如,缓存置换请求是“写回(WriteBack)”的执行请求,并且在更新的缓存数据,即“修改(Modif ied) ”状态的缓存数据被写回到归属CPU访问的存储器时发出。再者,例如,缓存置换请求是“闪回(FlushBack)”的执行请求,并且在执行未更新的缓存数据,即“共享(shared)”或“排除(Exclusive)”状态的缓存的放弃时发出。当归属CPU从本地CPU或远程CPU接收到上述请求时,归属CPU向本地CPU或远程CPU发出命令以便处理请求。这里,归属CPU发出多种类型的命令以便根据所获得的请求的类型来执行缓存一致性控制。例如,归属CPU发出在本地CPU上加载远程CPU缓存的数据的“移出和旁通以共享(MoveOut and Bypass to Share)”。
再者,例如,归属CPU使本地CPU以外的所有远程CPU的缓存无效,并且随后,归属CPU发出“排除地移出和旁通(MoveOut and BypassExclusively以便向本地CPU传送数据。再者,归属CPU发出“带无效的移除(MoveOut WITH Invalidation)”,其请求针对远程CPU的缓存的无效。再者,当归属CPU发出“带无效的移除”时,所有CPU的缓存变为相对于对象地址的“无效”状态。再者,当事务完成时,本地CPU缓存数据。
再者,归属CPU发出“移出以回滚(MoveOut for Flush)”,其请求针对远程CPU的缓存线路的无效。再者,当归属CPU发出“移出以回滚”时,对象数据仅存储在归属CPU的存储器中。再者,当对象数据的状态是“共享”时,归属CPU发出“缓冲器无效(BufferInvalidation)”,其请求放弃针对远程CPU的缓存。
归属CPU根据请求的类型发出上述命令,并且改变各个CPU缓存的数据的状态。再者,当本地CPU或远程CPU接收到命令时,本地CPU或远程CPU执行由命令指示的处理,并且改变本地CPU或远程CPU自身缓存的数据的状态。
随后,本地CPU或远程CPU向归属CPU传送对命令的完成响应或者数据附连完成响应。再者,在归属CPU或远程CPU执行命令处理时,归属CPU或远程CPU向本地CPU传送数据附连请求响应。
[处理流程]
接下来,将参照图18描述使信息处理系统I控制共享区域的处理的流程。图18是描述控制共享区域的处理流程的流程图。首先,信息处理系统I执行根据来自应用的请求在节点之间分配共享存储器的处理(步骤S101)。随后,信息处理系统I执行附连在节点之间共享的存储器的处理(步骤S102)。
随后,由信息处理系统I中包括的各个CPU执行的应用使用各个存储器(步骤S103)。随后,信息处理系统I执行分拆共享存储器的处理(步骤S104)。随后,信息处理系统I执行释放共享存储器的处理(S105),并且结束处理。再者,步骤SlOl和步骤S105可以仅由共享存储器的归属节点上的应用执行。虽然实际处理非供他用,但是步骤SlOl和步骤S105也可以由除了共享存储器的归属节点以外的节点上的应用执行。
接下来,将参照图19描述由图18的步骤SlOl表示的、分配共享存储器的处理的流程。图19是描述共享存储器分配处理的流程图。在图19中所示的示例中,例如,由CPU21执行的应用请求OS执行在节点之间分配共享存储器的处理(步骤S201)。
由CPU 21执行的OS根据共享区域的物理地址的区域,执行具有应用所请求的尺寸的存储器分配(步骤S202)。接下来,OS分配的共享存储器的管理ID被递送到应用(步骤S203),并且结束分配共享存储器的处理。
接下来,将参照图20描述由图18的步骤S102表示的、附连节点之间的共享存储器的处理的流程。图20是描述共享存储器附连处理的流程图。首先,应用向OS递送管理ID,并且请求附连节点之间的共享存储器的处理(步骤S301)。在该情况下,OS与在另一节点中执行的OS通信,并且获得与管理ID对应的物理地址(S302)。
这里,当OS与在其他节点中执行的OS通信时,使用LAN等的通信、通过服务处理器24的各个节点之间的通信等。再者,在每个节点中执行的OS可以将特定的共享区域设定为用于节点之间的通信的区域,并且通过存储或读取所设定的区域上的信息来执行通信。
随后,OS确定与物理地址对应的逻辑地址,并且执行分配(步骤S303)。例如,在CPU 21中执行的OS将物理地址和逻辑地址的TLB 35a设定到地址转换单元35。再者,各个CPU 21至21c使用的逻辑地址可以处于重叠的范围,并且也可以处于每个CPU处的不同的范围中。再者,各个CPU 21至21c使用的逻辑地址可以由应用分配给
OS。随后,OS将逻辑地址的值递送到应用(步骤S304),并且结束处理。接下来,将参照图21描述由图18的步骤S103表示的、附连节点之间的共享存储器的处理的流程。图21是描述由应用使用共享存储器的处理的流程图。例如,CPU 21执行的应用发出逻辑地址并且执行对逻辑地址指示的存储区域的访问(步骤S401)。CPU 21确定是否发生TLB缺失(步骤S402)。当发生TLB缺失时(步骤S402中的“是”),CPU 21执行陷阱处理并且将逻辑地址和物理地址的集合的条目设定到TLB (步骤S403)。随后,应用再次发出逻辑地址,并且通过利用TLB转换成物理地址来正常执行对共享存储器的访问(步骤S404),并且随后结束处理。另一方面,当没有发生TLB缺失时(步骤S402中的“否”),正常执行针对共享存储器的访问(步骤S405),并且结束处理。接下来,将参照图22描述由图18的步骤S104表示的、分拆节点之间的共享存储器的处理。图22是描述节点之间的共享存储器分拆处理的流程图。例如,CPU 21执行的应用向OS指定节点之间的共享存储器的逻辑地址或管理ID,并且请求分拆处理(步骤S501 )。CPU 21执行的OS执行缓存的回滚(步骤S502)。换言之,在其中在解除共享存储器的分配之后OS再次执行共享存储器的分配的情况下,如果在没有执行共享存储器的分配的情况下重启共享存储器的归属节点,则缓存的状态和实际存储器的状态彼此不匹配。出于该原因,OS执行缓存的回滚以防止其中缓存的状态和实际存储器的状态彼此不匹配的状态。OS解除节点之间的共享存储器的逻辑地址的分配,也就是解除应用使用的范围的分配,并且删除与解除分配的逻辑地址相关的TLB 35a的条目(步骤S503)。再者,其后,在当前节点上,尽管对于分拆完成的存储器地址发生了 TLB缺失(步骤S402中的“是”),但是OS不会将与分拆完成的逻辑地址对应的物理地址设定到TLB 35a。因此,步骤404不正常地完成,并且发生访问错误。在分拆完成之后,与步骤S302相对,OS在节点之间通信,并且当前应用通知对共享存储器的PA的访问完成(步骤S504)。当在归属节点上完成共享存储器的释放并且应用是共享存储器的最后的用户时,请求针对归属节点的释放处理(步骤S505),并且结束处理。接下来,将参照图23描述由图18的步骤S105表示的、释放节点之间的共享存储器的处理的流程。图23是描述节点之间的共享存储器释放处理的流程图。例如,由CPU 21执行的应用向OS请求释放节点之间的共享存储器的处理(步骤S601)。当指定共享区域的所有用户被分拆时,OS释放分配(步骤S602)并且结束处理。当分拆未完成时,不执行释放分配的处理,并且完成处理(在步骤S505中执行实际分配完成处理)。接下来,将参照图24描述使CPU 21向另一 CPU传送存储器访问请求的处理的流程。图24是描述发出请求的处理流程的流程图。例如,CPU21的算术单元31发出逻辑地址(步骤S701)。地址转换单元35执行从逻辑地址到物理地址的转换(步骤S702)。随后,缓存目录管理单元36获得物理地址并且执行缓存目录管理(步骤S703 )。换言之,缓存目录管理单元36针对由所获得的物理地址指示的存储区域改变缓存状态。
随后,缓存目录管理单元36参照节点图34确定所获得的物理地址是否是分配给另一节点的存储器的物理地址(步骤S704)。当确定所获得的物理地址不是分配给另一节点的存储器的物理地址时(步骤S704中的“否”),缓存目录管理单元36通过使用所获得的物理地址来执行存储器访问(步骤S705 )。随后,结束处理。
另一方面,当所获得的物理地址是分配给另一节点的存储器的物理地址时(步骤S704中的“是”),缓存目录管理单元36从节点图35获得与物理地址匹配的CPMD (步骤S706)。分组传送单元生成存储CPUID和物理地址的分组,即存储器访问请求,并且将该分组传送到XB 2 (步骤S707),并且结束处理。
接下来,将参照图25描述当CPU 21从另一 CPU接收到存储器访问请求时执行的处理的流程。图25是描述当接收到请求时执行的处理流程的流程图。再者,在图25中所示的示例中,将参照图25描述当CPU 21从另一 CPU接收到“移入共享(Moveln to Share)”或“排除地移出(Moveln Exclusively)”时执行的处理的流程。例如,CPU 21通过XB 2从另一 CPU接收请求(步骤S801)。
在该情况下,通过使用节点图34,CPU 21确定作为请求对象的物理地址是否是本地区域(步骤S802)。当作为请求对象的物理地址是本地区域时(步骤S802中的“是”),CPU向请求源的CPU发送否定响应(步骤S803),并且结束处理。
再者,当作为请求对象的物理地址不是本地区域时(步骤S802中的“否”),CPU 21执行缓存目录管理以保持一致性(步骤S804)。再者,CPU 21确定由物理地址指示的存储区域的状态(步骤S805)。
CPU 21基于所确定的状态向另一 CPU发出命令(步骤S806)并且改变状态(步骤S807)。随后,CPU 21执行响应以将物理地址指示的存储区域的数据传送到请求源的CPU(步骤S808),并且结束处理。
接下来,将参照图26描述当CPU 21接收响应时执行的处理的流程。图26是描述当CPU接收响应时执行的处理流程的流程图。例如,CPU 21接收响应(步骤S901)。在该情况下,CPU 21确定响应的内容是否是正常响应(步骤S902)。
当响应的内容正常时,就是说,当CPU 21接收到请求对象的数据时(步骤S902中的“是”),CPU 21通过使用数据来执行正常处理(步骤S903),并且结束处理。另一方面,当CPU 21接收到否定响应时(步骤S902中的“否”),则CPU 21确定否定响应的原因是否是访问错误(步骤S904 )。
当否定响应的原因不是访问错误时(步骤S904中的“否”),CPU 21执行典型的错误处理(步骤S905)并且结束处理。另一方面,当否定响应的原因是访问错误时(步骤S904中的“是”),CPU 21将其中发生错误的物理地址设定到错误寄存器,并且执行陷阱处理(步骤S906),并且结束处理。
接下来,将参照图27描述当CPU 21传送请求时执行的处理的流程。图27是描述当CPU传送请求时执行的处理流程的流程图。例如,CPU 21将请求中包括的访问目标的物理地址存储在PA 83中,并且将请求类型存储在请求84中(步骤S1001 )。CPU 21向另一节点的CPU传送请求(步骤S1002)。随后,CPU 21启动定时器81 (步骤S1003)。
随后,CPU 21确定在超时之前,也就是,在传送请求之后经过预定时间之前,是否接收到对请求的响应(步骤S1004)。当在超时之前接收到响应时(步骤S1004中的“是”),CPU 21停止定时器81 (步骤S1005)。随后,CPU 21处理响应(步骤S1006)并且结束处理。另一方面,当在超时之前未接收到响应时(步骤S1004中的“否”),CPU 21执行如下处理。就是说,CPU 21指明与请求对应的PA 83中存储的物理地址,将指明的物理地址设定到错误发生地址寄存器96,并且生成陷阱(步骤S1007)。随后,对于连接到具有由指明的物理地址指示的存储区域的存储器的CPU,CPU 21确定CPU 21是否是归属CPU并且在请求中是否包括将脏缓存数据写回存储器22的指令(步骤S1008)。当CPU 21是归属CPU并且在请求中包括将脏缓存数据写回存储器22的指令时(步骤S1008中的“是”),CPU 21执行如下处理。就是说,CPU 21生成表示写回到存储器22的共享存储器的缓存数据未被写回的异常的值,并且将所生成的值记录在目录36a的预定区域中。替选地,CPU 21生成表示存储器22的共享区域的、其中被崩溃节点写回缓存数据的区域中的错误状态的数据,并且记录所生成的数据(步骤S1009)。随后,结束处理。再者,当CPU 21不是归属CPU时,或者当请求中不包括将脏缓存数据写回存储器22的指令时(步骤S1008中的“否”),处理结束。接下来,将参照图28描述当PCIe控制单元42传送读取请求时执行的处理的流程。图28是描述当PCIe控制单元传送读取请求时执行的处理流程的流程图。例如,PCIe控制单元42将请求中包括的访问目标的物理地址存储在PA 83中,并且将请求的类型存储在请求84中(步骤S1101)。PCIe控制单元42向另一节点的CPU传送请求(步骤S1102)。随后,PCIe控制单元42启动定时器91 (步骤S1103)。随后,PCIe控制单元42确定在超时之前是否接收到对请求的响应(步骤S1104)。当在超时之前接收到响应时(步骤S1104中的“是”),PCIe控制单元42停止定时器91 (步骤S1105)。随后,PCIe控制单元42处理响应(步骤S1106)并且结束处理。另一方面,当在超时之前未接收到对请求的响应时(步骤S1104中的“否”),PCIe控制单元42执行如下处理。就是说,PCIe控制单元42指明与请求对应的PA 83中存储的物理地址,将指明的物理地址设定到错误发生地址寄存器98,并且生成陷阱(步骤S1107)。随后,PCIe控制单元42生成“中毒TLP”分组将将所生成的“中毒TLP”分组传送到PCIe连接单元(步骤S1108),并且结束处理。接下来,将参照图29描述当PCIe控制单元42传送写入请求时执行的处理的流程。图29是描述当PCIe控制单元传送写入请求时执行的处理流程的流程图。例如,PCIe控制单元42将请求中包括的访问目标的物理地址存储在PA 83中,并且将请求的类型存储在请求84中(步骤S1201)。PCIe控制单元42向另一节点的CPU传送请求(步骤S1202)。随后,PCIe控制单元42启动定时器91 (步骤S1203)。随后,PCIe控制单元42确定在超时之前是否接收到对请求的响应(步骤S1204)。当在超时之前接收到响应时(步骤S1204中的“是”),PCIe控制单元42停止定时器91 (步骤S1205)。随后,PCIe控制单元42处理响应(步骤S1206)并且结束处理。另一方面,当在超时之前未接收到对请求的响应时(步骤S1204中的“否”),PCIe控制单元42执行如下处理。就是说,PCIe控制单元42指明与请求对应的PA 83中存储的物理地址,将指明的物理地址设定到错误发生地址寄存器98,并且生成陷阱(步骤S1207),并且结束处理。
接下来,将参照图30描述OS通过生成陷阱来执行的陷阱处理的流程。图30是描述OS通过生成陷阱来执行的陷阱处理的流程的流程图。例如,通过生成陷阱,由CPU 21执行的OS启动中断处置器(步骤S1301)。中断处置器指明陷阱的类型(步骤S1302)。中断处置器确定陷阱的类型是否表示读取处理由于与CPU 21检测到的另一节点的CPU的通信错误而正在进行。当陷阱的类型表示读取处理由于与CPU 21检测到的另一节点的CPU的通信错误而正在进行时(步骤S1303中的“是”),中断处置器执行如下处理。就是说,中断处置器将发生中断时的程序计数器指示的处理的信号处置器设定为信号传送目标(步骤S1304)。随后,中断处置器将信号传送到信号传送目标(步骤S1305 ),并且结束处理。
再者,当陷阱的类型不表示读取处理由于与CPU 21检测到的另一节点的CPU的通信错误而正在进行时(步骤S1303中的“否”),中断处置器执行如下处理。就是说,中断处置器确定陷阱的类型是否表示写入处理由于与CPU 21检测到的另一节点的CPU的通信错误而正在进行(步骤S1306)。当陷阱的类型表示写入处理由于与CPU 21检测到的另一节点的CPU的通信错误而正在进行时(步骤S1306中的“是”),中断处置器读取错误发生地址寄存器96并且获得物理地址(步骤S1307)。中断处置器搜索处置器表格以寻找与所获得的物理地址对应的信号处置器(步骤S1308)。
再者,如下创建处置器表格。首先,当通过应用的请求,根据共享区域的物理地址的区域,执行具有CPU 21执行的应用所请求的尺寸的存储器分配时,获得信号处置器,并且将所获得的信号处置器的功能的条目地址登记在处置器表格中。当信号处置器的功能的条目地址被登记在处置器表格中时,OS执行如下处理。就是说,CPU 21执行的OS将与信号处置器的功能的条目地址匹配的共享存储器的地址和处理的标识符登记在处置器表格中。这样,创建了处置器表格。
图31是图示处置器表格的数据格式的示例的示图。图31中所示的处置器表格包括“共享存储器地址”项目、“进程标示符(Pid)”项目和“信号处置器的功能的条目地址”项目。在“共享存储器地址”项目中,登记条目地址被登记在“信号处置器的功能的条目地址”项目中的、与信号处置器对应的共享存储器的地址。再者,在“进程标示符”项目中,登记条目地址被登记在“信号处置器的功能的条目地址”项目中的、与信号处置器对应的处理的标识符。在“信号处置器的功能的条目地址”项目中,登记信号处置器的功能的条目地址。
返回图30,作为搜索结果,中断处置器确定是否可获得信号处置器(步骤S1309)。当可获得信号处置器时(步骤S1309中的“是”),中断处置器将所获得的信号处置器设定为信号传送目标(步骤S1310),并且前往步骤S1305。另一方面,当不可获得信号处置器时(步骤S1309中的“否”),中断处置器停止使用在步骤S1307中获得的物理地址指示的共享区域的共享存储器的所有处理(步骤S1311 ),并且结束处理。
再者,当陷阱的类型表示写入处理没有由于与CPU 21检测到的另一节点的CPU的通信错误而正在进行时(步骤S1306中的“否”),中断处置器可以执行如下确定。就是说,中断处置器可以确定陷阱的类型是与PCIe控制单元42检测到的其他节点的CPU的通信错误。因此,中断处置器启动PCIe控制单元42的中断处理例程(步骤S1312)。在CPU 21执行的中断处理中,读取PCIe控制单元42的错误发生地址寄存器98,并且获得物理地址(步骤 S1313)。
随后,中断处置器确定所获得的物理地址指示的存储区域是否是共享存储器的存储区域(步骤S1314)。当所获得的物理地址指示的存储区域是共享存储器的存储区域时(步骤S1314中的“是”),处理返回步骤S1308。另一方面,当所获得的物理地址指示的存储区域不是共享存储器的存储区域时(步骤S1314中的“否”),执行预定的相关处理(步骤S1315),并且结束处理。接下来,将参照图32描述由被通知信号的信号处置器执行的处理的流程。图32是描述由被通知信号的信号处置器执行的处理的流程的流程图。例如,中断处置器向信号处置器通知信号并且启动信号处置器(步骤S1401)。启动的信号处置器根据通知给信号处置器的物理地址,指明其中发生异常的共享存储器(步骤S1402)。信号处置器根据其中发生通知给信号处置器的异常的节点的信息,分拆其中发生异常的节点中存在的所有共享存储器(步骤S1403)。随后,信号处置器对节点20的与其中发生异常的节点共享的所有共享存储器执行恢复处理(步骤S1404)。随后,信号处置器执行应用特有的恢复处理(步骤S1405)。将描述应用特有的恢复处理的示例。例如,当CPU 21执行以规则的间隔在诸如盘的外部存储单元上创建“检查点”的应用时,可以执行恢复处理以读取由“检查点”表示的数据并且重新开始处理。再者,当CPU 21执行未创建“检查点”的应用时,可以执行诸如重新设定或重启处理的恢复处理。再者,被通知信号的信号处置器执行的处理不限于上述处理。因此,将参照图33描述由被通知信号的信号处置器执行的另一处理的流程。图33是描述由被通知信号的信号处置器执行的另一处理的流程的流程图。例如,中断处置器向信号处置器通知信号并且启动信号处置器(步骤S1501)。启动的信号处置器根据通知给信号处置器的物理地址,指明其中发生异常的共享存储器(步骤S1502)。信号处置器确定包括执行信号处置器的CPU21的节点20 (自身节点)是否附连作为共享存储器的、其中发生异常的节点的存储器(步骤S1503)。当自身节点没有附连作为共享存储器的、其中发生异常的节点的存储器时(步骤S1503中的“否”),信号处置器前往步骤S1508。另一方面,当自身节点附连作为共享存储器的、其中发生异常的节点的存储器时(步骤S1503中的“是”),信号处置器执行如下处理。就是说,信号处置器根据其中发生通知给信号处置器的异常的节点的信息,分拆其中发生异常的节点中存在的所有共享存储器(步骤 S1504)。随后,信号处置器从LI缓存和L2缓存删除其中发生异常的节点中存在的共享存储器的地址(步骤S1505)。随后,信号处置器从TLB 35a删除包括其中发生异常的节点中存在的共享存储器的地址的条目。即使当发生TLB缺失时,信号处置器仍将通知给信号处置器的物理地址设定为禁止登记在TLB 35a中的物理地址(步骤S1507)。随后,信号处置器确定其中发生异常的节点是否附连作为共享存储器的自身节点的存储器(步骤S1508),当其中发生异常的节点附连作为共享存储器的自身节点的存储器时(步骤S1508中的“是”),信号处置器对节点20的与其中发生异常的节点共享的所有共享存储器执行恢复处理(步骤S1509)。随后,信号处置器执行应用特有的恢复处理(步骤S1510),并且结束处理。再者,当其中发生异常的节点没有附连作为共享存储器的自身节点的存储器时(步骤S1508中的“否”),结束处理。
[第一实施例的效果]
如上文所述,信息处理系统I包括:多个节点,每个节点包括存储器22至22c,存储器22至22c的一部分可以被设定为共享存储器区域;以及XB 2,其连接多个节点。多个节点中的每个节点包括异常检测单元37c和42c,其检测多个节点中的数据传送异常或者其他节点的异常。再者,多个节点中的每个节点基于由异常检测单元37c和42c检测到的异常,生成表示登记在目录36a的“UE”项目中的异常,或者“中毒TLP”分组的值。再者,多个节点中的每个节点针对数据传送请求发出源的节点内的处理器生成中断。再者,当接收到中断时,多个节点中的每个节点的CPU执行的OS执行恢复处理。
就是说,多个节点中的至少一个节点包括异常检测单元。异常检测单元使用能够在相应的单个节点和另一节点中共享的、设置在相应的单个节点或相应的另一节点中的存储单元中包括的共享存储器区域,来检测数据传送的数据传送路径中的异常。再者,异常检测单元使用能够在相应的单个节点和另一节点中共享的、设置在相应的单个节点或相应的另一节点中的存储单元中包括的共享存储器区域,来检测数据传送的数据传送路径中包括的特定节点中的异常。再者,多个节点中的至少一个节点包括错误信息生成单元,其基于由异常检测单元检测到的异常来生成错误信息,并且生成针对自身节点中的处理器的中断。再者,多个节点中的至少一个节点根据中断基于错误信息来执行恢复处理。
如上文所述,在信息处理系统I中,即使通信参与者的节点在数据传送期间崩溃,被通知中断的CPU 21中执行的OS仍对已被崩溃节点共享的自身节点的共享存储器执行恢复处理。出于该原因,即使通信参与者的节点崩溃并且因此参与者节点缓存共享存储器的数据,自身节点仍不会崩溃。因此,根据信息处理系统1,即使在数据传输期间在节点之间发生通信异常,所有节点仍不会如同相关技术那样总是崩溃。因此,根据信息处理系统1,当发生与节点之间的数据传送相关的异常时,可以抑制错误影响范围。
再者,根据信息处理系统1,通过指示器90和90切换计时的对象的请求。因此,可以由单个定时器81或91检测传送请求之后的超时。
再者,由于信息处理系统I基于接收到的物理地址来确定访问对象是否是本地区域的共享区域,因此信息处理系统I可以维持本地区域中存储的核心数据或用户数据的高安全级。再者,由于信息处理系统I使得所有存储器是可缓存的,因此信息处理系统I可以容易地隐藏存储器访问中的延时。
再者,CPU 21通过与访问存储器22的情况相同的方法,访问由其他CPU访问的存储器的共享区域。就是说,CPU 21中包括的算术单元31仅需在存储器22或其他存储器上存在作为访问对象的存储区域时输出逻辑地址。
出于该原因,即使未执行诸如I/O排除控制的处理或编程时,CPU 21仍可以容易地访问共享区域。因此,可以改进存储器访问性能。再者,CPU 21可以适当地使用共享存储器而不必修改待执行的程序或OS,并且因此,CPU 21可以按照与相关技术相同的方式来执行预取处理。因此,可以改进存储器访问性能。
再者,当确定来自其他CPU的存储器访问的对象是访问本地区域时,CPU 21发送否定响应。因此,信息处理系统I防止对除了共享区域以外的区域的访问。作为结果,可以防止错误。
再者,通过使用节点图34,缓存目录管理单元36将物理地址转换成节点图34中存储的相应的CPMD。因此,CPU 21可以识别被分配作为访问对象的物理地址的存储器的CPU。
再者,CPU 21通过使用管理缓存存储器22中存储的数据的CPU的目录来执行缓存一致性控制。因此,即使信息处理系统I中包括的CPU的数目增加,信息处理系统I仍可以高效地保持缓存一致性,而不会增加XB 2的业务。
具体地,在信息处理系统I中,各个CPU之间的通信被限制于远程CPU和归属CPU之间的通信,或者缓存更新数据的远程CPU、归属CPU和本地CPU之间的通信。因此,信息处理系统I可以高效地保持缓存一致性。
[b]第二实施例
尽管上文已描述了本发明的实施例,但是这些实施例也可以通过上述实施例以外的多种形式来实施。因此,下文将描述本发明中包括的、作为第二实施例的另一实施例。
(I)关于用于检测节点异常的方法
尽管上述第一实施例例示了其中信息处理系统I通过检测请求的超时来检测节点异常的情况,但是所公开的系统不限于此。例如,所公开的系统可以通过按预定的时间间隔检查相互连接的服务处理器之间的服务处理器的状态来检测节点异常。再者,所公开的系统可以通过按预定的时间间隔执行节点之间的“有源(alive)检查”来检测节点异常。利用请求传送定时,可以以异步方式检测节点异常。
图34是描述用于检测节点异常的方法的示例的信息处理系统的示意图。图34的示例图示了其中构造盒由“BB”表示的情况。在图34的示例中,每个BB的CPU包括异常检测电路72、自身节点编号信息73、节点崩溃通知单元61、中断生成电路75、节点崩溃接收单元62和节点关闭信息寄存器74。
异常检测单元72检测自身节点的异常。自身节点编号信息73是表示自身节点的识别编号的信息。当在异常检测电路72中检测到自身节点的异常时,节点关闭通知单元61向XB传送节点关闭通知分组,节点关闭通知分组包括异常类型以及由自身节点编号信息73表示的自身节点的识别编号。再者,作为异常类型的示例,可以存在表示在哪个CPU中发生异常的节点关闭、挂起和信息。再者,由自身节点编号信息73表示的信息可以是能够识别节点的任何信息。例如,在其中预先限定了节点和安装在节点上的CPU之间的关系的情况下,可以从CPUID获知节点编号。因此,由自身节点编号信息73表示的信息可以是CPUID。
当节点关闭接收单元62接收到从XB传送的节点关闭通知分组时,节点关闭接收单元62将节点关闭通知分组中包括的异常类型和自身节点的识别编号设定到节点关闭信息寄存器74。当异常类型和自身节点的识别编号被设定到节点关闭信息寄存器74时,软件可以通过使用所设定的信息来应对异常。再者,当节点关闭接收单元62接收到节点关闭通知分组时,节点关闭接收单元62输出用于在中断生成电路75中生成中断的控制信号。当中断生成电路75从节点关闭接收单元62接收到控制信号时,如第一实施例的情况中的那样,中断生成电路75生成中断。因此,由于中断,对于生成中断之后的处理,执行与第一实施例相同的处理。
在图34的示例中,每个BB的ASIC包括异常检测电路70、自身节点编号信息71和节点关闭通知单元60。
异常检测电路70检测自身节点的异常。自身节点编号信息71是表示自身节点的识别编号的信息。当在异常检测电路70中检测到自身节点的异常时,节点关闭通知单元60向XB传送节点关闭通知分组,节点关闭通知分组包括异常类型以及由自身节点编号信息71表示的自身节点的识别编号。节点关闭通知单元60和61通过向XB传送多个节点关闭通知分组来向多个CPU传送节点关闭通知分组。再者,节点关闭通知单元60和61可以向XB传送单个节点关闭通知分组,并且XB可以向多个CPU传送节点关闭通知分组。再者,节点关闭通知单元60和61可以向每个节点处的单个CPU传送节点关闭通知分组。现将参照图35描述当使用与第一实施例的异常检测方法不同的方法时的处理的流程。图35是描述当使用与第一实施例的异常检测方法不同的方法时的处理流程的流程图。例如,通过使用第二实施例中描述的任何一个异常检测方法,CPU 21确定是否检测到节点异常(步骤S1601)。当未检测到节点异常时(步骤S1601中的“否”),CPU 21再次执行步骤S1601中的确定处理。另一方面,当检测到节点异常时(步骤S1601中的“是”),CPU 21确定其中检测到异常的节点是否是远程节点(步骤S1602)。当其中检测到异常的节点是远程节点时(步骤S1602中的“是”),CPU 21执行的OS执行如下处理。就是说,在自身节点20的目录36a上,当其中发生异常的节点的信息残存时,OS实现目录36a的连贯性(步骤S1603),并且结束处理。这里,将描述用于实现目录的连贯性的方法的示例。例如,当崩溃节点缓存数据但是缓存的状态是“清洁”时,CPU 21执行如下处理。就是说,CPU 21执行使“清洁”缓存的目录36a的信息变为其中“崩溃节点没有缓存”的状态的处理。再者,当崩溃节点缓存数据并且缓存的状态是“脏”时,CPU 21执行如下处理。就是说,CPU 21执行使“脏”缓存线路变为错误状态的恢复处理。另一方面,当其中检测到异常的节点不是远程节点时(步骤S1602中的“否”),CPU21执行的OS执行如下处理。就是说,在自身节点20的缓存上,当其中发生异常的节点的信息残存时,OS删除缓存的节点的信息(步骤S1604)。当其中发生异常的节点的物理地址登记在自身节点的TLB 35a中时,OS删除包括其中发生异常的节点的物理地址的所有条目(步骤S1605),并且结束处理。这样,在信息处理系统I中,在应用执行集群操作的情况下,集群管理管理器可以在集群软件中检测节点关闭。因此,将参照图36描述当集群管理管理器检测异常时的处理的流程。图36是描述当集群管理管理器检测异常时的处理流程的流程图。例如,集群管理管理器检测是否检测到节点异常(步骤S1701)。当未检测到节点异常时(步骤S1701中的“否”),集群管理管理器再次执行步骤S1701的处理。另一方面,当检测到节点异常时(步骤S1701中的“是”),集群管理管理器请求在自身节点上运行的应用开始节点关闭的重新配置处理(步骤S1702)。随后,应用请求OS释放在其中检测到异常的节点中存在的共享存储器(步骤S1703)。随后,OS删除所释放的共享存储器,并且删除TLB的条目(步骤S1704)。应用执行特有的恢复处理(步骤S1705),并且结束处理。(2)关于构造块上述信息处理系统I包括具有4个CPU的构造块10至10e。然而,实施例不限于此,并且构造块10至IOe可以具有任意数目的CPU以及由各个CPU访问的存储器。再者,(PU和存储器不需要具有1:1的对应关系,并且直接访问存储器的CPU可以是整体的一部分。
(3)关于CPU传送的分组
上述CPU 21传送作为存储器访问请求的包括CPUID和PA的分组。然而,实施例不限于此。就是说,CPU 21可以输出存储任意信息的分组,只要该分组能够唯一地识别访问作为访问对象的存储器的CPU。
再者,例如,CPU 21可以将CPMD转换成虚拟连接(VC) ID,并且存储VCID。再者,CPU 21可以在分组中存储诸如表示数据长度的长度的信息。
( 4 )关于由CPU发出的命令(指令)
如上文所述,各个CPU 21至21c发出请求或命令,并且保持缓存一致性。然而,上述请求或命令仅是示例性的。例如,CPU 21至21c可以发出比较并交换(CAS)指令。
这样,当CPU 21至21c发出CAS指令时,对各个CPU的每个缓存执行处理,即使在多个CPU中频繁地发生排除控制的竞争。作为结果,CPU 21至21c可以防止由存储器访问的出现引起的延迟,并且可以防止各个CPU中的事务变得复杂。
(5)关于通过监督器(hypervisor)的控制
在上述的信息处理系统I中,已描述了其中由OS执行对作为硬件的地址转换单元35的访问的示例。然而,实施例不限于此。例如,操作虚拟机的监督器(HPV)可以执行对地址转换单元35的访问。
换言之,在其中监督器操作的节点中,OS请求对监督器的操作,而非直接执行对诸如缓存或MMU的CPU 21至21c的硬件资源的操作。这样,当各个CPU 21至21c通过监督器接收控制时,各个CPU 21至21c将虚拟地址转换成真实地址(RA)并且随后将真实地址转换成物理地址。
再者,在其中监督器操作的节点中,中断处理不直接中断OS,并且在HPV上执行中断。在该情况下,监督器通过读取OS的中断处理处置器来执行中断。再者,由上述监督器执行的处理是为了操作虚拟机而执行的已知处理。
(6)关于使用分区的处理
上述信息处理系统I中的各个CPU 21至21c通过使用单个节点图传送存储器访问。然而,实施例不限于此。例如,各个构造块10至IOe作为多个节点组操作,并且可以在每个节点组处配置操作同一固件(监督器)的单个逻辑分区。
在该情况下,各个CPU 21至21c包括表示访问目标的CPU的节点图,以及表示同一逻辑分区内的CPU的节点图。这样,由于各个CPU 21至21c包括表示同一逻辑分区中包括的CPU的节点图,因此各个CPU 21至21c可以识别未超出逻辑分区传送的、诸如错误发生通知、关闭请求或者重置请求分组的特殊分组的传送范围。
在下文中,将描述包括表示同一逻辑分区中包括的CPU的节点图的CPU。图37是描述信息处理系统的示例的示图。如图37中所示,构造块10和IOa操作逻辑分区#A,并且构造块IOb至IOd操作逻辑分区#B。
这里,在逻辑分区#么中,操作多个域#么至#(:以及固件#么。再者,在逻辑分区#B中,操作多个域《)至#6以及固件#8。再者,固件#A和固件#8是例如监督器。再者,在域#A中,操作应用和OS。如域#A的情况中的那样,在其他域#B至#G中操作应用和OS。
就是说,各个域#么至#6是其中应用和OS独立操作的虚拟机。这里,构造块10中包括的各个CPU 21至21c可以将上述特殊分组传送到分区#A中包括的各个CPU,但是并不将特殊分组传送到分区#B中包括的各个CPU。出于该原因,各个构造块10至IOd的CPU包括表示同一逻辑分区中包括的CPU的CPWD的节点图。例如,CPU 21包括节点图34,其中彼此相关联地存储连接到具有物理地址指示的存储区域的存储器的CPU的CPUID和逻辑地址。再者,CPU 21包括节点图34a,其存储与CPU 21相同的分区,即分区#A中包括的CPU的CPWD。再者,如节点图34的情况中的那样,节点图34a由服务监督器24设定。在下文中,将参照附图描述表示同一逻辑分区中包括的CPU的CPUID的节点图的示例。图38是描述分区的示例的示图。例如,在图38中所示的示例中,分区#A包括构造块#0。再者,构造块#0包括CPU #0和被分配地址区域#0的存储器。再者,构造块#B包括构造块#1和构造块#2。再者,构造块#1包括CPU #4、CPU#5、被分配地址区域“#1”的存储器、和被分配地址区域“#2”的存储器。再者,CPU #4访问被分配地址区域“#1”的存储器,并且CPU#5访问被分配地址区域“#2”的存储器。再者,构造块#2包括CPU #6和被分配地址区域“#3”的存储器。接下来,将参照图39A至39C描述图38中所示的、CPU #0中包括的节点图和CPU#4中包括的节点图。首先,将参照图39A和39B描述由分区#A的CPU存储的节点图。再者,图39A是描述分区#A的CPU存储的节点图的示例的示图。再者,图39B是描述表示分区#A的节点图的示例的示图。再者,在下面的描述中,节点ID “O”表示构造块#0,并且节点ID “I”表示构造块#1。节点 ID “2” 表示构造块 #2。再者,CPUID “O” 是 CPU #0 的 CPUID,CPUID “4” 是 CPU#4 的 CPUID,CPUID “5” 是 CPU #5 的 CPUID,并且 CPUID “8” 是 CPU #8 的 CPUID。例如,在图39A中所示的示例中,节点图34表示在构造块#0中存在地址区域“#0”,并且CPU#0执行访问。再者,节点图34表示在构造块#1中存在地址区域“#1”,并且CPU #4执行访问。再者,节点图34表示在构造块#1中存在地址区域“#2”,并且CPU #5执行访问。再者,节点图34表示在构造块#2中存在地址区域“#3”,并且CPU #8执行访问。再者,图39B图示了表示分区#A的节点图。如图39B中所示,表示分区#A的节点图在每个条目处包括有效、节点ID和CPHD。例如,在图39B中所示的示例中,表示构造块#0的CPU #0包括在分区#A中。例如,在图38中所示的示例中,CPU #0包括图39A和39B中所示的节点图。当执行存储器访问时,CPU #0通过使用图39A中所示的节点图来识别访问目标的CPU。另一方面,当仅向同一分区内部的CPU传送特殊分组时,CPU #0通过使用图39B中所示的节点图来识别传送目标的CPU。就是说,CPU #0将特殊分组传送到由图39B中示例性示出的节点图表示的分区#A内部的CPU。另一方面,为了执行存储器访问,CPU#4包括图39A中所示的节点图和39C中所示的节点图。图39C是描述表示分区#B的节点图的示例的示图。在图39C中所示的示例中,表示分区#B的节点图表示在分区#B中存在构造块#1的CPU #4和CPU #5以及构造块#2的CPU #8。CPU #4将特殊分组传送到由图39C中示例性示出的节点图表示的分区#B内部的 CPU。
这样,CPU #1和CPU #4存储使地址区域和CPMD匹配的节点图,以及表示分区的节点图。CPU #1和CPU #4通过使用使地址区域和CPMD匹配的节点图,直接执行对另一节点中包括的存储器的存储器访问。再者,CPU#1通过使用表示分区#A的节点图来传统特殊分组。再者,CPU #1通过使用表示分区#B的节点图来传统特殊分组。
这样,各个CPU可以包含在包括CPU自身的每个分区处具有不同的值的节点图。再者,当各个CPU包含在包括CPU自身的每个分区处具有不同的值的节点图时,各个CPU可以防止特殊分组超出分区传送。
再者,如上述实施例的情况中的那样,各个CPU可以通过起始地址和地址掩码,或者通过起始地址和长度,来表示作为访问对象的地址区域。就是说,CPU #1和CPU #4通过使用节点图来识别作为访问对象的节点,节点图通过使用起始地址和地址掩码,或者通过起始地址和长度来表示作为访问对象的地址区域。再者,CPU #1和CPU #4通过使用表示不同分区的节点图来传送特殊分组。
(7)关于通过服务处理器的控制
在上述信息处理系统I中,已描述了其中由服务处理器24执行对作为硬件的节点图34的访问的示例。然而,实施例不限于此,并且除服务处理器24之外的部件可以被配置成访问节点图34。例如,在CPU 21至21c中的一个或所有上操作的基本固件(基本输入/输入系统:B10S)或HPV可以被配置成执行对节点图34的访问。
根据本发明的实施例,当发生与节点之间的数据传送相关的异常时,可以抑制错误影响范围。
权利要求
1.一种信息处理装置,包括: 多个节点,每个节点包括存储单元;以及 互连,其连接所述多个节点, 其中所述多个节点中的至少一个节点包括: 异常检测单元,其使用能够在所述一个节点和另一节点中共享的、设置在所述一个节点或所述另一节点中的存储单元中所包括的共享存储器区域,来检测数据传送的数据传送路径中的异常,或者使用能够在所述一个节点和所述另一节点中共享的、设置在所述一个节点或所述另一节点中的存储单元中所包括的共享存储器区域,来检测数据传送的数据传送路径中包括的特定节点中的异常; 错误信息生成单元,其基于由所述异常检测单元检测到的异常来生成错误信息,并且生成针对自身节点中的处理器的中断;以及 处理器,其根据所述中断基于所述错误信息来执行恢复处理。
2.根据权利要求1所述的信息处理装置,其中所述异常检测单元包括: 指示器,其指示表示多个数据传送请求的信息中的、表示如下数据传送请求的信息:其中与针对数据传送请求发出源的节点的数据传送请求对应的数据未被传送;定时器,其在发出由所述指示器指示的信息表示的数据传送请求之后进行计时;以及检测单元,其在所述数据传送请求发出源的节点接收到与所述数据传送请求对应的数据之前,当所述定时器计时的时间已经过预定时间时,检测到节点之间的数据传送的异常。
3.根据权利要求2所 述的信息处理装置,其中所述一个节点进一步包括通信控制单元,其控制所述处理器和其他节点之间的通信, 所述通信控制单元包括第一传送单元和所述异常检测单元,所述第一传送单元根据来自所述处理器的指令向数据传送的访问目标的节点传送所述数据传送请求, 所述定时器在所述第一传送单元传送所述数据传送请求之后进行计时,以及所述检测单元在所述数据传送请求发出源的节点接收到与所述数据传送请求对应的数据之前,当所述定时器计时的时间已经过预定时间时,检测到节点之间的数据传送的异堂巾O
4.根据权利要求1所述的信息处理装置,其中所述异常检测单元在接收到否定响应时检测到节点之间的数据传送的异常。
5.根据权利要求2所述的信息处理装置,其中所述一个节点包括控制输入/输出I/O设备的控制单元, 所述控制单元包括第二传送单元和所述异常检测单元,所述第二传送单元根据来自所述I/o设备的指令,向数据传送的访问目标的节点传送所述数据传送请求, 所述定时器在所述第二传送单元传送所述数据传送请求之后进行计时,以及所述检测单元在所述数据传送请求发出源的节点接收到与所述数据传送请求对应的数据之前,当所述定时器计时的时间已经过预定时间时,检测到节点之间的数据传送的异堂巾O
6.根据权利要求1至5中任一项所述的信息处理装置,其中所述一个节点包括缓存存储器,其缓存数据,并且 所述错误信息生成单元生成所述错误信息,并且将所述错误信息写入包括关于所述缓存存储器中缓存的数据的信息的缓存目录中。
7.根据权利要求1至5中任一项所述的信息处理装置,其中所述一个节点包括缓存存储器,其缓存数据,并且 所述错误信息生成单元基于由所述异常检测单元检测到的其他节点的异常,生成错误信息,并且将所述错误信息写入由所述其他节点访问的共享存储器中。
8.根据权利要求5所述的信息处理装置,其中所述一个节点包括缓存存储器,其缓存数据,并且 所述错误信息生成单元生成所述错误信息,并且通过将所述错误信息传送到所述I/O设备来控制所述I/O设备以检测错误。
9.根据权利要求1所述的信息处理装置,其中所述一个节点包括缓存存储器,其缓存数据,并且 当所述处理器接收到所述中断时,在执行恢复处理时,基于由所述错误信息生成单元生成的错误信息,所述处理器删除所述缓存存储器中缓存的数据。
10.根据权利要求1所述的信息处理装置,其中所述处理器通过使用其中彼此相关联地登记逻辑地址和物理地址的表格,将应用生成的、由所述应用访问的存储单元的逻辑地址转换成所述存储单元的物理地址,以及 当所述异常检测单元检测到异常时,所述处理器解除与所述异常对应的节点中包括的存储单元的物理地址与所述表格中与所述物理地址对应的逻辑地址的匹配。
11.根据权利要求6所述的信息处理装置,其中当被所述异常检测单元检测到异常的节点是远程节点时,所述处理器实现所述缓存目录的信息的连贯性。
12.根据权利要求1所述的信息处理装置,其中所述处理器向对应于被所述异常检测单元检测到异常的节点的共享存储器的信号处置器通知信号。
13.一种用于信息处理装置中的多个节点中的至少一个节点的控制方法,所述信息处理装置包括:多个节点,每个节点包括存储单元;以及互连,其连接所述多个节点,所述方法执行如下处理: 使用能够在所述一个节点和另一节点中共享的、设置在所述一个节点或所述另一节点中的存储单元中所包括的共享存储器区域,来检测数据传送的数据传送路径中的异常,或者使用能够在所述一个节点和所述另一节点中共享的、设置在所述一个节点或所述另一节点中的存储单元中所包 括的共享存储器区域,来检测数据传送的数据传送路径中包括的特定节点中的异常; 基于检测到的异常来生成错误信息,并且生成针对自身节点中的处理器的中断;以及 根据所述中断基于所述错误信息来执行恢复处理。
全文摘要
设置在信息处理装置中包括的多个节点中的至少一个节点中的异常检测单元使用能够在单个节点和另一节点中共享的、设置在单个节点或另一节点中的存储单元中所包括的共享存储器区域来检测数据传送的数据传送路径中的异常。设置在单个节点中的错误信息生成单元基于由异常检测单元检测到的异常来生成错误信息,并且生成针对自身节点中的处理器的中断。设置在单个节点中的处理器根据中断基于错误信息来执行恢复处理。
文档编号G06F15/16GK103198046SQ20121042545
公开日2013年7月10日 申请日期2012年10月30日 优先权日2011年12月28日
发明者鲤沼秀之, 杉崎刚, 植木俊和 申请人:富士通株式会社