使用户程序的复制拷贝的执行点对齐的方法和系统的制作方法

文档序号:6554524阅读:137来源:国知局
专利名称:使用户程序的复制拷贝的执行点对齐的方法和系统的制作方法
技术领域
本发明涉及通过拷贝存储器存储使用户程序的复制拷贝的执行点对齐的方法和系统。
背景技术
松散锁步的处理器是执行用户程序的复制拷贝的处理器,但是这些处理器既不需要以逐步方式也不必在相同的挂钟时刻执行用户程序的相应拷贝。松散锁步的处理器可用来检测并校正如由宇宙辐射导致的计算错误,并且还可用来确保用户程序即便在硬件出现故障的情况下也可继续运行。
由于时钟频率上存在的轻微差异或一个处理器中出现的可纠正软误差而非其它的原因,一个处理器可能在其用户程序内执行点方面超前,并且难以确定处理器中的用户程序是超前还是滞后。对程序计数器或指令指针进行比较可能不足以识别用户程序的执行点,这是因为所有用户程序可能在相同的软件循环中,但处于不同的循环迭代,而指令指针仍可相同。此外,一些处理器在其性能监控单元中实现尝试对每个退休指令进行递增计数的退休指令计数器。由于退休指令计数器是为性能监控目的而被包含,并且不一定对每个退休指令正确计数,因此对退休指令计数值进行比较可能不充分。例如,一旦退休指令计数器达到特定值,则一些处理器可停止加载新指令;然而,流水线式处理器可能仍有几条指令处于流水线中,它们已结束但未被称为滑动挡板的退休指令计数器计数。此外,处理器制造商也不确保他们的退休指令计数器百分百正确。

发明内容
上述问题通过拷贝存储库存储器存储使用户程序的复制拷贝的执行点对齐的系统和方法,在很大程度得到解决。一些示范性实施例可以是包括按如下方式使第一和第二处理器中执行的用户程序的复制拷贝的执行点对齐的方法仅将由第一处理器中的用户程序执行的存储器存储的数据从第一处理器的存储器拷贝到第二处理器的存储器,以及拷贝第一处理器的用户程序的寄存器状态以供第二处理器使用。


下面将参照附图来详细说明本发明的示范性实施例,附图中图1示出了根据本发明实施例的计算系统;图2更详细地示出了根据本发明实施例的计算系统;图3示出了根据本发明实施例的部分计算系统;图4(包括4A和4B)示出了根据本发明实施例的不配合协作进程处理程序的流程图;图5A、5B和5C显示了说明图4方法的多条指令;图6是根据本发明实施例关于事件中断的不协作进程的处理的例示性时间线(timeline);图7是根据本发明实施例自适应调节所使用的N的值的例示性流程图。
符号和专用术语以下描述和权利要求中采用某些术语来指特定的系统组件。如本领域技术人员将会理解的那样,计算机公司可通过不同的名称引用某个组件。本文档不打算区分名称不同而功能相同的组件。在以下讨论和权利要求中,术语“包括”和“包含”以开放方式使用,并因此应解释为指“包括但不限于...”。而且,术语“耦合”用于指间接或直接连接。因此,如果第一装置耦合到第二装置,那么该连接可以通过直接连接或者经由其它装置和连接通过间接连接而实现。
具体实施例方式
以下讨论主要针对本发明的各种实施例。虽然这些实施例中的一个或多个可能是优选的,但所公开的实施例不应解释为或者用作限制本公开的范围。此外,本领域的技术人员将会明白,以下描述具有广泛的适用性,对任何实施例的讨论仅指该实施例的示范模式,而不旨在暗示本公开的范围局限于该实施例。
图1说明根据本发明实施例的计算系统1000。具体地说,计算系统1000可包括多个多处理器计算机系统10。在一些实施例中,可以只使用两个多处理器计算机系统10,因而计算系统1000可实现双模冗余(DMR)系统。如图1所示,计算系统1000包括三个多处理器计算机系统10,因而实现三模冗余(TMR)系统。不管计算机系统是双模冗余还是三模冗余,计算系统1000通过在多处理器计算机系统上冗余地执行用户程序来实现容错。
根据本发明的实施例,每个多处理器计算机系统10最好包括一个或多个处理器,如图1所示,它包括四个处理器。图1的每个处理器标记前置有“P”,表示处理器。此外,赋予每个处理器字母标记“A”、“B”或“C”,以分别指示该处理器在多处理器计算机系统10A、10B和10C之一内的物理位置。最后,赋予每个处理器一个数字标记,以指示该处理器在各个多处理器计算机系统内的位置。因此,例如,多处理器计算机系统10A中的处理器具有标记“PA1”、“PA2”、“PA3”和“PA4”。
根据本发明的实施例,每个多处理器计算机系统10的至少一个处理器可以在逻辑上编组以形成一个逻辑处理器12。在图1所示的示范性实施例中,处理器PA3、PB3和PC3可组合形成逻辑处理器12。根据本发明的实施例,逻辑处理器内的每个处理器基本上同时执行相同的用户程序,从而实现容错。更具体地说,为逻辑处理器内的每个处理器提供相同的用户程序指令流,并计算出相同的结果(假设没有错误的话),但逻辑处理器内的处理器并不是逐周期或严格锁步的;确却地说,这些处理器是松散锁步的,中断处理基于会合机会如系统调用而进行(如下讨论)。根据一些实施例,这些处理器可能有非确定性的执行,因而严格锁步是不可能的。如果其中一个处理器发生故障,其余的一个或多个处理器可继续运行,而不会影响整体系统性能。
由于在执行相同用户程序的逻辑处理器内可能存在一个或多个处理器,因此可产生重复的读操作和写操作,如重复地对输入/输出(I/O)装置14和16进行读和写。I/O装置14和16可以是任何适合的I/O装置,例如网络接口卡、软盘驱动器、硬盘驱动器、CD ROM驱动器和/或键盘。为比较读和写以便故障检测,每个逻辑处理器与同步逻辑相关联。例如,处理器PA1、PB1和PC1构成与同步逻辑18关联的逻辑处理器。同样地,处理器PA2、PB2和PC2构成与同步逻辑20相关联的逻辑处理器。逻辑处理器12与同步逻辑22相关联。最后,处理器PA4、PB4和PC4构成与同步逻辑24相关联的逻辑处理器。因此,每个多处理器计算机系统10通过互连26将各处理器耦合到各同步逻辑18、20、22、24。互连26可以是外围组件互连(PCI)总线,具体而言可以是串行的PCI总线,不过可采用其它等效的总线通信方案。
每个同步逻辑18、20、22和24包括表决器逻辑单元,如同步逻辑22的表决器逻辑28。虽然以下讨论针对的是同步逻辑22的表决器逻辑28,但它们同样适用于同步逻辑18、20、22和24中每一个中的表决器逻辑单元。表决器逻辑28用于合并来自处理器的读与写请求,并在处理器之间交换信息的过程中发挥作用,可能用于使逻辑处理器同步。为解释目的,设想逻辑处理器12中的每个处理器在执行其用户程序拷贝,并且每个处理器产生对网络接口34的读请求。逻辑处理器12的每个处理器向表决器逻辑28发送其读请求。表决器逻辑28接收每个读请求、对读请求进行比较并(假设读请求一致)向网络接口34发出一个读请求。
响应于同步逻辑发出的单个读请求,例示性网络接口34将所请求的信息返回给表决器逻辑28。接着,该表决器逻辑复制所请求的信息并将其传递给逻辑处理器的每个处理器。同样,对于其它输入/输出功能,如将分组消息写入和传送到(可能在其它逻辑处理器上执行的)其它程序,同步逻辑确保请求匹配,随后将单个请求转发到适当的位置。如果逻辑处理器中的任一处理器未正确运行(例如不能产生请求、不能在指定时间内产生请求、产生了不匹配的请求或者完全失效),则整个用户程序基于逻辑处理器的其余处理器的请求继续运行。
除了合并对外部接口(如网络接口34)的读写操作以及复制从那些外部接口返回的数据外,同步逻辑还在请求日时(time of day)时确保为每个处理器提供相同日时中发挥作用。具体而言,用户程序可在它们执行中的某点上发起请求日时信息的系统调用。系统调用是对(在更高特权模式而非用户模式下执行的)特权程序如操作系统程序的任何调用。为获取日时信息的系统调用仅仅是归于系统调用类别的程序簇的一个示例,以下将更全面地讨论系统调用在处理中断时的作用。为了在用户程序中相同执行点上为每个用户程序提供相同的日时信息(不管到达那些执行点时的挂钟时间差),根据本发明实施例的同步逻辑向逻辑处理器的每个处理器提供日时信息,而不是让那些处理器从内部获得时间。
图2更详细地说明了多处理器计算机系统10。具体地说,图2说明了根据本发明实施例的多处理器计算机系统10可具有多个处理器,在图2所示的情况下,它具有四个这种处理器34、36、38和40。虽然只显示了四个处理器,但是在不背离本发明的范围的情况下可采用任意数量的处理器。处理器34-40可以是单独封装的处理器,处理器组件在一个封装内包括两个或以上处理器芯片或在单个芯片上包括多个处理器。每个处理器可通过处理器总线44耦合到I/O桥接器和存储控制器42(之后称为I/O桥接器42)上。I/O桥接器42通过存储器总线45将处理器34-40耦合到一个或多个存储器模块46上。因此,I/O桥接器42可控制对由一个或多个存储器模块46定义的存储区域的读和写。I/O桥接器42还可允许每个处理器34-40耦合到同步逻辑(图2未显示),如总线43所示。
仍参照图2,由一个或多个存储器模块46定义的存储器可以分区,每个处理器对应于一个分区,因此允许每个处理器独立操作。在备选实施例中,每个处理器可具有其本身的集成存储控制器,因此每个处理器可具有其自己的专用存储器,这也将在本发明的考虑范围之内。处理器34-40还可以是不适用于严格锁步执行的非确定性处理器。
图2还示出每个多处理器计算机系统10包括耦合在I/O桥接器42和存储模块46之间的重整合逻辑48。图1所示的实施例显示了环路形式的重整合逻辑的互连(线条51),不过同样可采用任何网络拓扑(例如环状、树型、双环型、完全连接型)。在操作中,重整合逻辑48对于I/O桥接器42是透明的,并且不会干扰对一个或多个存储器模块46的读和写。然而,如果逻辑处理器内的一个处理器出现故障并且需要重启动时,重整合逻辑48允许拷贝至少另一处理器的用户程序存储器,使得先前故障的处理器可以在与逻辑处理器中未发生故障的处理器相同的点上开始运行。
在松散锁步的系统中,处理器超前或滞后的原因可能有许多。例如,当每个处理器可以基本上相同的时钟频率执行指令时,即使实际时钟频率上的较小差异也会导致时间上的很大差异。此外,根据本发明的至少一些实施例实现的处理器具有无确定性的执行,因此,即便为这些处理器提供完全相同的用户程序,它们也可能在到达用户程序中相同执行点所需步骤数方面有很大差异。此外,一些处理器可能会遇到数据存取延迟和/或错误。可能出现的一些示例如下一个处理器可能经历其它处理器器可能未经历的高速缓存未命中;一个处理器可能经历可纠正的存储错误,因此需要执行其余处理器不需要的恢复例程;以及一个处理器可能经历转换后备缓冲器的未命中,从而导致不会影响到用户程序最终结果的附加处理。同样,虽然处理器最终会到达用户程序中相同的执行点,但是执行的指令数量和执行那些指令需要的时间可能不相同。
记住逻辑处理器的处理器可执行相同的指令流但不一定处于指令流中的同一点上,可进而讨论这种环境下的中断处理。即使相同的中断在恰好相同的挂钟时间对每个处理器有效,但由于各处理器的松散锁步的执行,这些中断不一定在用户程序的相同执行点上有效。该困难还因中断有效本身是异步的而加重。为确保正确的操作,逻辑处理器内的每个处理器需要在用户程序的指令流中的相同执行点上服务中断。根据本发明的实施例,通过将同步逻辑用作商定服务中断的会合点的机制,确保在指令流中的相同执行点上服务中断。
根据本发明的实施例,逻辑处理器内的处理器彼此传递以下信息特定的中断已有效;以及所建议的服务该中断的点。换句话说,逻辑处理器中的处理器商定要服务哪一个中断(或先服务哪一个中断),并且还商定在用户程序中的哪一点上服务该中断。图3示出了部分计算系统1000,以便描述协同工作以协调中断服务的各组件的操作。在此情况下逻辑处理器50只包括了两个处理器PA1和PA2,在此意义上,图3是图1所示系统的简化版本。而在另一种意义上,图3比图1更详细,因为图3示出了每个处理器的存储器分区52,并说明了处理器如何通过I/O桥接器42耦合到存储器分区和表决器逻辑。因此,图3的逻辑处理器50包括分别来自多处理器计算机系统10A和10B的一个处理器。处理器PA1耦合到I/O桥接器42A,I/O桥接器42A又耦合到同步逻辑18和PA1处理器的存储器分区52A。处理器PB1耦合到其相应的I/O桥接器42B,而I/O桥接器42B又耦合到同步逻辑18和PB1处理器的存储器分区52B。
根据至少一些实施例,为建立服务中断的会合点而让逻辑处理器的处理器交换信息,这涉及各处理器将信息写到同步逻辑18的表决器逻辑56内的同步寄存器53中。根据本发明的实施例,会合点可以是任何合适的位置,例如每当操作系统的调度器程序执行并且设置其它要执行的任务时;陷阱和故障处理;以及由用户程序进行的系统调用。由于设想系统调用是主要的会合点,因此本说明书规范称这些会合点为系统调用。然而,可以理解,术语系统调用在本说明书中一般地用于指任何可能的会合点。系统调用号可以是指示从任意起始点开始已进行了多少次系统调用的数字。例如,图3所示位置72表示一个系统调用号在存储器分区52中驻留的位置。在备选实施例中,系统调用号同样可以存储在不在存储器分区52内的寄存器中。在图3所示的实施例中,同步寄存器53是预先指定的存储位置,但是任何可以在其中写数据的位置均足以满足需要。在一些或所有处理器已写入它们各自的信息之后,表决器逻辑56将同步寄存器54中的信息写回到每个存储器分区52中对应的一组存储位置57中。与寄存器54非常类似,寄存器57是存储器分区52中预先指定的存储位置,但是任何可以在其中写数据的位置均将足以满足需要。将信息写到同步逻辑中允许继续处理用户程序,同时等待其余处理器看到中断。通过交换信息,逻辑处理器内的处理器协调在用户程序的哪一点上服务中断。
可以在任何时间通过含有中断信息的基于分组的消息向处理器断言中断。还可以从内部源,如设定为在一定数量的处理器时钟周期之后终止的定时器向处理器断言中断。当处理器接收并检测到这种分组或内部中断时,它会将用户程序挂起并调用中断处理例程。中断处理例程的目的是开始识别会合点的进程。对由中断请求的服务,中断处理例程不采取任何动作。系统调用是调度会合点的进程完成的点,也是调度程序以便服务中断的点。有关基于系统调用的中断调度的更多信息,可参照题为“松散锁步的非确定性处理器的方法和系统”的共同未决的美国专利申请No.(HP Ref.200316143-1(CR Ref.2162-22100)),该专利申请在本文中如同被全文复制一样通过引用结合到本文中。
因此,根据本发明实施例,协调中断服务在系统调用和其它操作系统转换时完成。然而,可能存在在延长的时间间隔内未进行系统调用的用户程序。因此,逻辑处理器内的处理器可能会在它们正执行的用户程序的部分上有显著差异,和/或还可能没有充分的机会去服务中断。未以足够频度进行系统调用的用户程序称为“不协作进程”。
根据本发明的实施例,处理不协作进程有几个阶段。第一阶段是识别用户程序的确是不协作的。第二阶段是识别其中的用户程序可能(但不一定)有差异的存储位置。第三阶段是采取动作以保证确保逻辑处理器的每个处理器中的不协作进程处于执行的相同阶段,也称为使执行点对齐。最后一个阶段可以是修改先前的不协作进程。下面将依次讨论这些阶段中的每一个阶段。
在一些实施例中,识别用户程序进行太少的系统调用并因此被视为不协作的涉及使用定时器。如果用户程序在定时器终止之前未进行系统调用,则该用户程序为不协作进程。根据本发明的一些实施例,每当处理器的调度器程序(在最高特权状态-内核模式下操作)使用户程序执行时,该调度器程序还复位处理器的退休指令计数器;使退休指令计数器只对用户(最低级特权)指令计数;启动不协作进程定时器;以及存储当前系统调用号的指示。退休指令计数器是例如在大多数可购得的处理器的性能监控单元中实现的计数器。退休指令计数器的值在处理器执行的每个用户级指令完成后递增。就不协作进程定时器而言,由Intel制造的Itanium处理器通过配备间隔时间计数器(ITC)和间隔时间匹配(ITM)寄存器而可用于检测不协作进程。ITC是在处理器加电时开始计数的自由运行的计数器。“自由运行”的意思是指ITC进行计数,而不考虑正在执行的指令的数量和/或类型,ITC无法由任何指令(不管具有任何特权)停止,而且ITC的值无法由任何用户指令改变。因而在这些实施例中启动不协作进程定时器意味着在经过了所需时间长度时读取ITC的值,并且将表示ITC的值放入ITM中。当ITC和ITM寄存器的值相等时,将间隔定时器中断置为有效。虽然在这些例示性实施例中,不协作进程定时器并未真正“终止”,但此后对ITC值匹配ITM的讨论将称为“定时器终止”,以便一般地适用于用作不协作进程定时器的任何定时器型系统。对于没有实现ITC/ITM类型定时能力的处理器,可将周期性定时器中断与寄存器结合用于跟踪中断次数,以及在发生预定次数的周期性定时器中断后执行与不协作进程相关的任务。再次一般地来看不协作进程定时器,当定时器终止时使中断有效,从而调用不协作进程处理例程。不协作进程处理例程检查在定时器规定的时间期间(这在一些实施例中可以是大约100微秒)内是否至少进行过至少一次系统调用。在备选实施例中,系统调用可复位定时器,以避免触发不协作进程处理例程,但这些复位可能需要代价很高的内核模式进程调用。与不协作处理器定时器相关联的中断在每个处理器内部处理(实际上,如果用户进程是协作的,则不协作进程定时器已终止的这一事实不会传送给其它处理器),因此可视为一种与需要跨逻辑处理器的不同处理器的协调服务的中断,如输入/输出请求类型不同的中断。
图4(包括4A和4B)示出了根据本发明实施例的不配合协作进程处理程序的流程图。具体地说,不协作进程处理程序因不协作进程定时器终止之后中断有效而启动(框400)。在禁止中断(框402)(这可以是一个显式的步骤,或者可以是进入中断处理程序时自动进行)后,不协作进程处理程序读取当前系统调用号(例如从图3的位置72)以及调度器程序初始时存储的系统调用号(框404)。当前系统调用号与调度器初始时存储的系统调用号相同(框406)表示用户程序在由不协作进程定时器规定的时间内不能进行系统调用,因此是不协作进程。另一方面,如果当前系统调用号与所存储的系统调用号不同(同样在框406中),则进程是协作的,因此所述例示性方法复位不协作进程定时器(框417),保存当前系统调用号(框419),允许中断(框418)并返回(框420)。
根据本发明的实施例,在逻辑处理器的至少一个处理器内变成不协作的用户程序调用与其它处理器的数据交换,以确定逻辑处理器中的其它处理器是否同意其不协作的特性。仍然参照图4,如果当前系统调用号与调度器程序存储的系统调用号相同(框406),则下一步是确定是否存在未经确认的会合操作(框408)(以下进行更全面的讨论)。如果不存在未经确认的会合,则下一步是将用户程序的不协作性质的指示连同当前退休指令计数器(RIC)值一起写入到表决器逻辑56的同步寄存器54中(框410)。随后,不协作进程处理例程在软件循环中等待表决器逻辑返回同步数据(框412)。
因为根据一些实施例在任一时间只可以进行一次数据交换,因此,如果要尝试调度仍必须在不协作进程定时器终止时完成的的会合点(还是框408),即未经确认的会合,则下一步是在软件循环中等待(框422),直到表决器逻辑写入同步数据为止。记住,写回的同步数据有关前一中断(而不是触发不协作进程处理例程的当前执行的不协作进程定时器终止中断),返回的数据用于会合点调度(框424)。有关会合点调度的更多信息,可参看题为“松散锁步的非确定性处理器的方法和系统”的美国专利申请No.(HP Ref.200316143-1(CR Ref 2162-22100))。在会合点调度(框424)之后,进程继续进行,以将用户程序的不协作性质的指示连同当前退休指令计数值一起写入到表决器逻辑56内的同步寄存器54中(框410),并在软件循环中等待数据返回(框412)。
如果处理器不同意用户程序是不协作的(框414),则对返回的数据进行分析,以确定用户程序在其它处理器中是否是协作的(框416)。例如,在一个处理器中的不协作进程定时器可能刚好在用户程序进行的系统调用前终止的同时,逻辑处理器的第二处理器中的用户程序可能正好在终止之前进行系统调用。因此,一个处理器指示该进程是不协作的,并且第二处理器尝试调度会合点以处理下一中断,这包括写下建议的会合点。如果分析表明用户程序将很快进行系统调用(框416),则复位不协作进程定时器(框417),保存当前系统调用号(框419),允许中断(框418),且进程返回(框420),以便用户程序可继续执行,很快再次成为协作的。
仍然参照图4,如果逻辑处理器的所有处理器同意该用户程序是不协作的(框414),则使用户程序的各个拷贝对齐的进程由处理器在用户程序中向前执行而开始,直到该处理器的退休指令计数器与该处理器的最高退休指令计数器相同为止(框426)(由于在框410交换了信息,因此每个处理器知道退休指令计数值连同相应程序的不协作性质指示)。在一些情况下,其中正运行图4所示的不协作进程处理程序的处理器将具有最高退休指令计数器,因此该用户程序在正确的点上。向前执行到最高退休指令计数值可采取许多形式。如果当前处理器的退休指令计数值落后最高退休指令计数值很多,则可启动定时器,并且可允许用户程序在定时器的有效时间期间运行。或者可选的是,允许用户程序执行一个定时器期间,或者在将定时器用于使退休指令计数值接近最高退休指令计数值之后,可将处理器置于单指令模式下,在该模式下,单步运行用户程序,直到退休指令计数器匹配最高退休指令计数值为止。
虽然在完成图4的例示性步骤426之后,逻辑处理器的所有处理器可以在相同的退休指令计数值上,但由于背景部分中所论述的原因,不保证用户程序实际处于指令流中相同的执行点上。因此,执行图4的例示性步骤的每个处理器中的下一步是要在用户程序中向前执行预定数量(图中标记为“N”)的指令,同时记录存储器存储的地址(框428)。N的值可通过对特定品牌和型号的处理器进行测试来确定,并且该值表示具有相同的指令流的处理器之间的至少退休指令计数值最大误差。换句话说,在处理器的退休指令计数器(当用户程序被调度时为零)相同的时候,N的值是这些处理器的执行点之间最大的指令数。在一些实施例中,N的值可以是最大误差的多个倍数,并且在某些情况下,N的值选择为例如1000。
仍然参照图4、框428,在采用Itanium处理器实现的实施例中,用户程序到其相应存储器的存储是通过以触发用户程序对存储器的每一个写访问的屏蔽值来设定Itanium处理器的“数据断点寄存器”来记录的。在中断允许的情况下,允许用户程序继续执行至少N条指令。在执行N条指令期间,当某存储器访问使数据断点寄存器中的屏蔽值满足时,中断有效。该有效的中断使中断处理程序在存储器访问是存储时执行记录地址的操作。只要用户程序尚未向前执行了N条指令,则再次允许执行用户程序,同时每次对存储器的访问会触发中断以记录存储地址。除了设置数据断点寄存器以外,至少一些实施例还配备了以充分大的时间值设定的定时器,以便如果用户程序不包含任何存储器访问并因此没有存储器存储的话,该定时器可提供打断用户程序执行,以确定是否已执行了至少N条指令的途径。当用户程序已向前执行了至少N条指令时,使数据断点寄存器清零,禁止中断,恢复图4的例示性进程。其它制造商的处理器可具有与Itanium处理器的数据断点寄存器的能力类似的能力,或者可增加等效逻辑以提供此功能。
在记录N条指令的存储地址(如果有的话)之后,将已记录的地址或者N条指令中没有进行存储的指示以类似于交换数据的形式写到表决器逻辑中(框430),以确定会合点。此后,对所记录的存储地址的引用隐含包括N条指令中不进行存储的指示。因此,将所记录的存储地址写到表决器逻辑的寄存器54或专用于交换所记录的存储地址的寄存器中。记住,所有处理器已同意用户程序的不协作特性,最终,所有程序写下记录的存储地址列表,并且一旦所有的数据均已写到表决器逻辑中后,便将该数据写回到处理器,如写回到寄存器57中。例示性图4是从处理器的角度来看的流程图,具体为不协作进程处理例程的流程图。将数据写回到每个处理器由表决器逻辑在逻辑处理器的所有其它处理器写它们各自的数据(或超时)之后执行。因此,步骤432说明每个处理器等待表决器逻辑返回数据。根据数据集的大小,通过同步逻辑进行的信息交换可进行几次迭代,并且因此框430和432所示的方法可重复多次。因此,每个处理器在软件循环中等待(框432)从其它处理器返回所记录的存储地址。
下一步是由每个处理器根据所有处理器提供的信息计算存储地址的并集(框438)。例如,如果第一处理器记录了存储地址集{1,2,3,4},而第二处理器记录了存储地址集{2,3,4,5},则所记录的存储地址的并集将是{1,2,3,4,5}。所记录的存储地址的并集表示各处理器中存储器之间可能有差异的存储位置列表。之后,每个处理器将并集中其存储地址的每一个上的值以及用户程序的寄存器状态一起发送到逻辑处理器中的其它处理器(框440)。这样,逻辑处理器中的每个处理器具有基于逻辑处理器中哪一个处理器是源处理器在内部校正其存储器和寄存器状态所需的全部信息。
下一步是让处理器协同工作以便识别源处理器(框434)。源处理器不一定是在执行点方面超前的处理器,事实上,可以任意选择源处理器。协同工作以选择源处理器可涉及通过表决器逻辑交换信息如写寄存器54,并且表决器逻辑将每个处理器提供的数据返回给所有处理器。在一些实施例中,源处理器是预定的,因此框434和436可在其它时间进行,如在处理器在线时或怀疑处理器故障时。可采用其它等效的方法。如果其中正运行图4的例示性方法的处理器是源处理器(框436)的话,则不需要替换数据。因此,下面跳到框444,不协作进程定时器复位(框417),保存当前系统调用号(框419),允许中断(框418),进程返回(框420)到用户程序。
另一方面,如果其中正运行例示性进程的处理器不是源处理器(再次参照框436),则处理器提取每个存储地址上的值和源处理器的用户程序寄存器状态,并用它们替换其对应的存储器值和寄存器状态(框445)。寄存器状态包括当前程序计数器值以及处理器的各种寄存器的状态,这些状态定义了用户程序的当前上下文和执行点。当在非源处理器中恢复执行时,这些非源处理器在与源处理器相同的位置上恢复,并具有相同的存储器状态。
根据至少一些实施例,当各处理器独自同意用户程序的不协作特性时,强制对齐可足以确保正确操作而不管用户程序的不协作特性。在至少一些实施例中,每个处理器在用户程序中设置系统调用(框444),以确保造成不协作进程指定的用户程序的至少部分中不再如此。抢先步骤(proactive step)可采取许多形式。在一些实施例中,将用户程序的不精细部分(最可能是软件循环)修改成包含系统调用。这是通过例如以系统调用(例如日时调用)替换空操作指令(NOP)来完成的。如果用户程序指令流不允许这种小的替换,则以指向所替换指令的分支指令、系统调用和返回分支指令来替换指令。当用户程序存在于主存储器中和/或当用户程序存在于长期存储装置如磁盘驱动器上时,可对它进行这些修改。在另一些备选实施例中,处理器硬件可支持在指令流中的特定点上插入中断的机制,并且该中断可触发系统调用进行对齐和中断调度。例如,Itanium处理器系列支持在处理器内的称为“指令断点寄存器”的寄存器。断点寄存器可以指令指针值加载,并当实际指令指针匹配断点寄存器中的值时触发中断。此示范性机制用来触发中断,所触发的中断接着又触发系统调用,以便进行同步。基于硬件的机制不一定在所有体系结构中可用,但是修改用户程序的实施例可具有普遍的应用。之后,不协作进程定时器复位(框417),保存当前系统调用号(框419),允许中断(框418),中断处理程序返回(框420)到用户程序。
在N条已执行指令内没有存储器存储的情况下,每个非源处理器仅将其寄存器状态替换为源处理器的寄存器状态,并且它们在用户程序恢复执行时在同一点上恢复。因为N被确定为各用户程序执行点之间的最大误差,因此如果在该N条指令期间没有存储器存储发生的话,由于用户程序的存储器无差异,则可以使每个用户程序在同一点上恢复而不改变它们相应的存储器。因此,可以看到,本文所述的各种实施例远远优于例如克隆整个用户程序的存储器和/或克隆存储器页面,这是因为需要交换想当少的数据,并且在根本没有数据交换的最佳情况下,只需要保存用户程序的寄存器状态即可。
图5A显示了由两个处理器PA1和PB1执行的多条指令,以进一步说明图4的概念。虽然为避免使附图过度复杂这里使用了两个处理器,但以下解释同样适用于三个处理器。具体而言,设想每个处理器已确定其相应的用户程序包括指令(INST)1-10是不协作的(图4的框410、412和414)。还设想每个处理器已使用户程序步进到最高退休指令指针值(在本情况中RIC=A)(图4的框426)。由于负责对退休指令进行计数的硬件缺陷,因此尽管两个处理器具有相同的退休指令计数值,但其用户程序执行点可能有所不同。图5示出了超前PA1两条指令的处理器PB1,而它们的退休指令计数值相同。还设想,在对跨用户程序平均时间片期间所遇到的若干退休指令计数中的最大可能误差已被确定(可能通过经验测试)为二。
在此例示性情况中,N的值可设为等于或大于二的值,这里采用的是四。每个用户程序被允许向前步进四条指令,同时创建存储地址列表(图4的框428)。为便于说明,设想每条指令是一个存储器存储,因此每个处理器记录每条指令的存储地址。处理器PA1记录的地址500因此为指令{4,5,6,7}的存储地址。同样,处理器PB1记录的地址502因此是指令{6,7,8,9}的存储地址。所记录的存储地址在处理器之间交换(图4的框430、432)。每个处理器随后计算存储地址的并集,得到{4,5,6,7,8,9}(图4的框438)。假设这两个集合的并集表示两个处理器的存储器可能不同的所有位置(具有误差容限)。此后,在处理器之间交换存储地址的并集中的值(图4的框440)。随后选择源处理器(图4的框434和436),所有非源处理器以来自源处理器的值替换并集中存储器地址的值,而且还以源处理器的寄存器状态替换其相应的寄存器状态(图4的框445)。
图5B示出了选择处理器PA1作为源处理器的情况,因而处理器PA1的值和寄存器状态取代了处理器PB1的值和寄存器状态。在此第一例示性情况中,当每个处理器恢复时,它们开始在指令8执行(箭头504)。虽然处理器PB1重复执行指令8和9,但先前执行的效果被来自处理器PA1的数据的拷贝取消。同样,图5C示出了选择处理器PB1作为源处理器的情况,因而处理器PB1的值和寄存器状态取代了处理器PA1的值和寄存器状态。在此第二例示性示例中,当每个处理器恢复时,它们开始在指令10执行(箭头506)。虽然处理器PA1并不执行指令8和9,但因为有来自处理器PB1的存储位置的值的拷贝以及寄存器状态的拷贝,那些指令的效果仍然存在。
提供来自被选为源处理器的处理器的存储位置的值可采取许多形式。在一些实施例中,采用逻辑处理器的相应表决器逻辑来交换存储位置的值。采用表决逻辑表决器逻辑在要交换的数据量相对较小,例如N较小时可能是实际的。在其它实施例中,采用每个处理器的重整合逻辑48(图2)来交换存储位置的值。在另一些实施例中,通过经由网络17的分组消息来交换存储位置的值(图1)。
图6是说明与事件中断有关的不协作进程处理以,进一步说明图4的方法的时间线。具体而言,图6说明其中每个处理器看到系统调用号1999的情形。就处理器PA1而言,在不协作进程定时器终止之前使中断5有效,因而处理器PA1建议在系统调用号2000(线条600)上服务中断5。在建议服务中断5后不久,处理器PA1的不协作进程定时器终止,由于未确认的会合,处理器PA1空转(图4的框422),等待表决器逻辑根据先前的建议写同步数据。相反,处理器PB1在中断有效之前使其不协作进程定时器终止,因而处理器PB1将不协作进程信息写到同步寄存器54中(线条602;图4的框410),并在软件循环中等待确认(图4的框412)。表决器逻辑随后将同步数据写回到每个处理器(线条604)。因为处理器不同意服务该中断,并且因为不协作进程中断的紧急度,处理器PA1将中断5写到列表中以便可在以后再次提出该中断(框424),将不协作进程的指示写到同步寄存器中(线条606;图4的框410)并在软件循环中等待确认(图4的框412)。
就处理器PB1而言,这些处理器关于不协作进程意见不一致(框414)(处理器PA1建议服务中断而非应用程序不协作的指示)。此外,处理器PA1建议的系统调用号(在本示范情况中为系统调用2000)并不暗示处理器PB1中的系统调用即将来临;确却地说,所建议的系统调用号2000意味着处理器PA1还保持在系统调用号1999(图4的框416)。因此,处理器PB1第二次写不协作进程的指示(线条608;图4的框410),并再次在软件循环中等待确认(框412)。在一段时间后,表决器逻辑56将同步数据写到每个处理器中(线条610)。在此例示性第二写操作中,处理器就不协作状态意见一致(每个处理器的相应框414),因此每个处理器开始使用户程序的执行点对齐的进程。
图6还说明了一种情形,其中,不管写到表决器逻辑的同步数据是否失配,处理器都会收集用户程序的不协作特性可能很快结束的信息。具体地说,图6进一步说明进行系统调用的处理器PA1(区域614),在本例示性示情况中系统调用号为3000。作为系统调用进程的一部分,处理器PA1建议或通告下一会合点(线条616)。相反,处理器PB1在系统调用前使其不协作进程定时器终止,并因此写下不协作进程的指示(线条618;图4的框410),在软件循环中等待确认(图4的框412)。当表决器逻辑返回同步数据(线条620)时,处理器PA1发现失配,并再次尝试写同步数据(线条622;图4的框414)。相反,处理器PB1接收该同步数据(线条620),并当处理器不同意用户程序的不协作特性(图4的框414)时,来自处理器PA1的所建议的会合信息表明系统调用即将来临(图4的框416)。因此,处理器PB1继续执行用户程序,直到进行了系统调用为止。在稍后某个时间,处理器同意最初由处理器PA1建议的中断。
迄今所述的实施例假定N的值是静态的,并且是事先确定的。在备选实施例中,N的值可自适应地改变。图7说明了用以实现自适应改变N的值的算法的流程图。图7的例示性方法可实现为独立的进程,或者可结合到图4的方法中,例如结合到向前执行直到退休指令计数值匹配为止(图4的框426)和向前执行N条指令(图4的框428)之间。该进程开始(框700),并移到收集退休指令计数器的准确度的证据的步骤。在一些实施例中,当退休指令计数值相同的时候比较处理器之间指令指针的值。例如,如果当退休指令计数值相同时指令指针相同,则这是退休指令计数器中无误差的证据。因此,这些实施例需要在向前步进到最高退休指令计数值之后交换指令指针,诸如利用同步逻辑来交换指针。在备选实施例中,每个处理器将其记录的存储地址集合的大小与存储地址集合的并集进行比较。例如,如果处理器计算其存储地址集合的大小为五项,而所有存储地址集合的并集的大小为五项,则这是处理器之间退休指令计数值中没有或只有很小误差的证据。相反,如果处理器计算出其存储集合的大小为五项,而并集的大小为十项(在双模冗余系统中)或十五项(在三模冗余系统中),则这是退休指令计数值误差等于或大于所选择或提供的N的值。
与收集退休指令计数器的准确度的证据的准确机制无关,下一步是确定该证据是否指示退休指令的误差接近N的值(框704),例如该证据是否暗示误差大于或等于N。如果是这样的话,应当调整N的值(框706),同时复位证据日志(框716)(以下作更详细讨论)。N的值的增加或减小可由每个处理器在没有向其它处理器咨询的情况下完成,或者增加N值的决定可调用处理器进行数据交换,以就改变准确值达成一致。
如果证据未暗示退休指令计数器的误差接近N的值的话,则下一步是记录所收集的证据(框708)。因此,虽然即使在所收集的证据的一种实例表明退休指令的误差可大于N(框704和706)(因为在此实例中用户程序的复制拷贝可能未被正确对齐)时也应该增大N的值,但仍有可能用户程序的复制拷贝不会正确对齐,从而要基于大的证据集合来降低N的值。如果证据集合的大小不足够大(框710),则进程结束(框718)。另一方面,如果证据集合的大小足够大(框712),例如有一周的数据或者一个月的数据,则判断关于退休指令计数值中的可能误差是否比N的当前值小得多(框712)。例如,如果处理器之间退休指令计数值的准确度是10或更少的计数,而N约为1000,则可减少N的值(框714)。另一方面,如果处理器之间退休指令计数值的准确度是100个计数,并且N约为200,则不应改变N的值。在下一步中,复位证据日志(框716),进程结束(框718)。
以上讨论旨在说明本发明的各种实施例和原理。对本领域技术人员而言,一旦完全理解了以上公开,许多变型和修改将变得显而易见。例如,虽然本文述及,如果采用Itanium处理器以致可采用基于编译器的推测指令,但上述例示性方法和系统还可适用于基于处理器的推测(例如分支预测推测和指令重排序),因为基于处理器的推测不一定对退休指令计数器有不利的影响。此外,虽然上述各种实施例与仅基于用户程序如已定义的术语那样为不协作的判断来执行数据交换有关,但在本发明的备选实施例中,存储器存储的记录和数据以及寄存器状态的交换可在任何适宜的时候进行,如在中断有效和/或每次系统调用时进行。此外,图4的例示性实施例描述了每个处理器向前一直执行到它们的退休指令计数值匹配为止;然而,当执行N条指令时退休指令计数值中的差异可考虑到N值的大小中。例如,如果处理器的退休指令计数值有100条指令的差异,则N的值可以是100加上对退休指令计数器可预期的最大误差量。本发明人的意图在于将如下权利要求解释为包含所有这类变型和修改。
权利要求
1.一种基于处理器的方法,包括按如下方式使第一和第二处理器(PA、PB、PC)中执行的用户程序的复制拷贝的执行点对齐仅将所述第一处理器(PA、PB、PC)中所述用户程序执行的存储器存储的数据从所述第一处理器的存储器(46)拷贝到所述第二处理器(PA、PB、PC)的存储器(46)中;以及从所述第一处理器(PA、PB、PC)拷贝所述用户程序的寄存器状态以供所述第二处理器(PA、PB、PC)使用。
2.如权利要求1所述的基于处理器的方法,其特征在于还包括,在拷贝之前允许所述用户程序中的至少一个执行,直到所述第一和第二处理器(PA、PB、PC)中每个处理器中的退休指令计数值基本相同为止;执行每个用户程序的预定数量的指令;将每个所述用户程序存储数据的位置的存储器地址记录到存储器中,所述记录基本上与执行同时进行;以及确定每个所述用户程序存储数据的所述存储器地址的并集;其中,拷贝数据还包括只拷贝来自由所述存储器地址的并集定义的存储器地址的数据。
3.如权利要求2所述的基于处理器的方法,其特征在于还包括收集所述退休指令计数值的准确度的证据;基于所述收集的证据调节所述预定数量。
4.如权利要求3所述的基于处理器的方法,其特征在于调节还包括下列操作之一在所述准确度的证据暗示所述退休指令计数值的不精确度等于或大于预定数时增大所述预定数,或者在所述准确度的证据暗示所述退休指令计数值的不精确度小于所述预定数时减少所述预定数。
5.如权利要求1所述的基于处理器的方法,其特征在于还包括,在确定所述用户程序的复制拷贝均不能在预定时间间隔内进行系统级调用之后进行对齐。
6.如权利要求5所述的基于处理器的方法,其特征在于确定还包括向所述第二处理器(PA、PB、PC)提供来自所述第一处理器(PA、PB、PC)的信息,所述信息指示在所述第一处理器(PA、PB、PC)上执行的用户程序在预定时间内未进行系统级调用;以及由所述第一处理器(PA、PB、PC)利用来自所述第二处理器(PA、PB、PC)的信息确定在所述第二处理器(PA、PB、PC)中执行的所述用户程序的复制拷贝是否已在所述预定时间内进行了系统级调用。
7.如权利要求5所述的基于处理器的方法,其特征在于还包括,将每个用户程序中的系统调用插入到被确定为在所述预定时间间隔内未进行系统调用的每个处理器(PA、PB、PC)中该用户程序的部分。
8.一种系统,包括执行用户程序的第一处理器(PA、PB、PC),所述第一处理器(PA、PB、PC)耦合到第一存储器(46);以及基本上同时执行所述用户程序的复制拷贝的第二处理器(PA、PB、PC),所述第二处理器(PA、PB、PC)耦合到第二存储器(46);其中,所述第一处理器(PA、PB、PC)可操作以向述第二处理器(PA、PB、PC)提供来自所述第一存储器(46)的存储器存储位置的数据,并且其中所述第一处理器(PA、PB、PC)可操作以向所述第二处理器(PA、PB、PC)提供所述用户程序的寄存器状态。
9.如权利要求8所述的系统,其特征在于还包括在所述第一处理器(PA、PB、PC)提供数据之前,所述第一处理器(PA、PB、PC)可操作以执行其相应用户程序的预定数量的指令,且基本上可同时操作以在所述预定数量的指令内创建第一存储器存储地址列表;在所述第一处理器(PA、PB、PC)提供数据之前,所述第二处理器(PA、PB、PC)可操作以执行其相应用户程序的预定数量的指令,且基本上可同时操作以在所述预定数量的指令内创建第二存储器存储地址列表;所述第一和第二处理器(PA、PB、PC)可操作以交换它们各自的列表;以及由所述第一处理器(PA、PB、PC)提供的数据是来自所述第一和第二列表的并集的所述存储位置的数据。
10.如权利要求9所述的系统,其特征在于还包括与所述第一处理器(PA、PB、PC)相关联的第一退休指令计数器,其至少在基本上每个用户程序指令结束时改变状态;以及与所述第二处理器(PA、PB、PC)相关联的第二退休指令计数器,其至少在基本上每个复制拷贝用户程序指令结束时改变状态;其中,在每个处理器执行所述预定数量的指令之前,至少一个处理器(PA、PB、PC)可操作以执行指令,直到所述第一和第二退休指令计数器的值基本相等为止。
全文摘要
一种通过拷贝存储器存储来使用户程序的复制拷贝的执行点对齐的方法和系统。一些示范性实施例可以是包括按如下方式对齐在第一和第二处理器(PA、PB、PC)中执行的所述用户程序复制拷贝的执行点的方法仅将第一处理器(PA、PB、PC)中所述用户程序执行的存储器存储的数据从所述第一处理器(PA、PB、PC)的存储器(46)拷贝到所述第二处理器(PA、PB、PC)的存储器(46)中;以及从所述第一处理器(PA、PB、PC)拷贝所述用户程序的寄存器状态以供所述第二处理器(PA、PB、PC)使用。
文档编号G06F11/14GK1811724SQ20061000718
公开日2006年8月2日 申请日期2006年1月24日 优先权日2005年1月25日
发明者P·小德尔维纳, R·L·贾丁 申请人:惠普开发有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1