CN100507833C - 使用户程序的复制拷贝的执行点对齐的方法和系统 - Google Patents
使用户程序的复制拷贝的执行点对齐的方法和系统 Download PDFInfo
- Publication number
- CN100507833C CN100507833C CNB2006100068796A CN200610006879A CN100507833C CN 100507833 C CN100507833 C CN 100507833C CN B2006100068796 A CNB2006100068796 A CN B2006100068796A CN 200610006879 A CN200610006879 A CN 200610006879A CN 100507833 C CN100507833 C CN 100507833C
- Authority
- CN
- China
- Prior art keywords
- processor
- instruction
- user program
- instructions
- frame
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 124
- 238000013519 translation Methods 0.000 claims description 51
- 230000008878 coupling Effects 0.000 claims description 29
- 238000010168 coupling process Methods 0.000 claims description 29
- 238000005859 coupling reaction Methods 0.000 claims description 29
- 230000015654 memory Effects 0.000 claims description 23
- 230000014509 gene expression Effects 0.000 claims description 20
- 230000000295 complement effect Effects 0.000 claims description 2
- 230000008569 process Effects 0.000 description 63
- 230000001360 synchronised effect Effects 0.000 description 23
- 238000005192 partition Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 125000004122 cyclic group Chemical group 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012544 monitoring process Methods 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 238000012795 verification Methods 0.000 description 3
- 238000012935 Averaging Methods 0.000 description 2
- 230000013011 mating Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 238000002407 reforming Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- JJWKPURADFRFRB-UHFFFAOYSA-N carbonyl sulfide Chemical compound O=C=S JJWKPURADFRFRB-UHFFFAOYSA-N 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 230000005855 radiation Effects 0.000 description 1
- 230000001105 regulatory effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000005096 rolling process Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000011282 treatment Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Hardware Redundancy (AREA)
- Multi Processors (AREA)
Abstract
一种通过交换有关已执行指令的信息来使用户程序的复制拷贝的执行点对齐的方法和系统。所述方法包括下列步骤:运行第一和第二处理器(PA、PB、PC)中用户程序的复制拷贝、允许至少用户程序之一执行到每个处理器中的退休指令计数值基本上相同为止以及随后执行每个用户程序的多条指令。在所执行的指令中,对其中至少一些译码并确定每条译码指令的输入(每个处理器中译码基本上与执行同时进行)。所述方法还包括在处理器之间交换译码指令的地址和表示译码指令的输入的值;利用至少译码指令的地址来确定第一处理器中用户程序的执行点相对于第二处理器中用户程序的执行点是否滞后以及使第一处理器提前直到每个用户程序内的执行点基本对齐为止。
Description
相关申请的交叉引用
本申请涉及题为“确定应用程序是否已进行系统级调用的方法和系统”的共同未决的美国专利申请No.(HP Ref.200402489-1(CR Ref2162-30600)),以下将其全文如同复制一样通过引用结合到本文中。本申请还涉及题为“通过拷贝存储器存储来使用户程序的复制拷贝的执行点对齐的方法和系统”的共同未决的美国专利申请No.(HPRef.200406269-1(CR Ref 2162-35000)),以下也将其全文如同复制一样通过引用而结合到本文中。
技术领域
本发明涉及通过交换已执行指令的信息使用户程序的复制拷贝的执行点对齐的方法和系统。
背景技术
松散锁步的处理器是执行用户程序的复制拷贝的处理器,但是这些处理器既不需要以逐步方式也不必在相同的挂钟时刻执行用户程序的相应拷贝。松散锁步的处理器可用来检测并校正如由宇宙辐射导致的计算错误,并且还可用来确保用户程序即便在硬件出现故障的情况下也可继续运行。
由于时钟频率上存在的轻微差异或一个处理器中出现的可纠正软误差而非其它的原因,一个处理器可能在其用户程序内执行点方面超前,并且难以确定处理器中的用户程序是超前还是滞后。对程序计数器或指令指针进行比较可能不足以识别用户程序的执行点,这是因为所有用户程序可能在相同的软件循环中,但处于不同的循环迭代,而指令指针仍可相同。此外,一些处理器在其性能监控单元中实现尝试对每个退休指令进行递增计数的退休指令计数器。由于退休指令计数器是为性能监控目的而被包含,并且不一定对每个退休指令正确计数,因此对退休指令计数值进行比较可能不充分。例如,一旦退休指令计数器达到特定值,则一些处理器可停止加载新指令;然而,流水线式处理器可能仍有几条指令处于流水线中,它们已结束但未被称为滑动挡板的退休指令计数器计数。此外,处理器制造商也不保证他们的退休指令计数器百分百正确。
发明内容
上述问题通过交换有关已执行指令的信息来使用户程序的复制拷贝的执行点对齐的方法和系统予以解决。
所述方法基于处理器,其包括如下步骤:运行第一和第二处理器中用户程序的复制拷贝;对至少一些指令译码并确定每条译码指令(decoded instruction)的输入,每个处理器中所述译码与执行基本上同时进行;在所述处理器之间交换译码指令的地址和表示所述译码指令的输入的值;利用至少所述译码指令的地址确定所述第一处理器中所述用户程序的执行点相对于所述第二处理器中所述用户程序的执行点滞后;以及使所述第一处理器提前,直到每个用户程序内的执行点基本上对齐为止。
所述系统包括:可操作以执行用户程序的第一处理器,所述第一处理器耦合到第一存储器;以及可操作以基本上同时执行所述用户程序的复制拷贝的第二处理器,所述第二处理器耦合到第二存储器;其中,所述第一处理器可操作以将其用户程序的多条已执行指令与所述第二处理器的用户程序的多条已执行指令相匹配,以确定所述第一处理器滞后的指令条数,并且其中所述第一处理器可操作以向前执行,直到所述用户程序的复制拷贝的执行点基本上相同为止。
附图简述
下面将参照附图来详细说明本发明的示范性实施例,附图中:
图1示出了根据本发明实施例的计算系统;
图2更详细地示出了根据本发明实施例的计算系统;
图3示出了根据本发明实施例的部分计算系统;
图4示出了根据本发明实施例的不协作进程处理程序;
图5说明确定执行点的第一备选方法;
图6说明图5的方法;
图7说明确定执行点的备选实施例。
图8A和8B说明图7的方法;
图9说明确定执行点的其它备选实施例;
图10A和10B说明图9的方法;以及
图11是自适应调节根据本发明实施例所用的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内的同步寄存器54中。根据本发明的实施例,会合点可以是任何合适的位置,例如:每当操作系统的调度器功能执行并且设置其它要执行的任务时;陷阱和故障处理;以及由用户程序进行的系统调用。然而,可以理解,术语系统调用在本说明书中一般地用于指任何可能的会合点。系统调用号可以是指示从任意起始点开始已进行了多少次系统调用的数字。例如,图3所示位置72表示一个系统调用号在存储器分区52中驻留的位置。在备选实施例中,系统调用号同样可以存储在不在存储器分区52内的寄存器中。在图3所示的实施例中,同步寄存器54是预先指定的存储位置,但是任何可以在其中写数据的位置均足以满足需要。在一些或所有处理器已写入它们各自的信息之后,表决器逻辑56将同步寄存器54中的信息写回到每个存储器分区52中对应的一组存储位置57中。将信息写到同步逻辑中允许继续处理用户程序,同时等待其余处理器看到中断。通过交换信息,逻辑处理器内的处理器协调在用户程序的哪一点上服务中断。
可以在任何时间通过含有中断信息的基于分组的消息或通过专用中断线向处理器断言中断。还可以从内部源,如设定为在一定数量的处理器时钟周期之后终止的定时器向处理器断言中断。当处理器接收并检测到这种分组或内部中断时,它会将用户程序挂起并调用中断处理例程。中断处理例程的目的是开始识别会合点的进程。对由中断请求的服务,中断处理例程不采取任何动作。系统调用是调度会合点的进程完成的点,也是调度器程序以便服务中断的点。有关基于系统调用的中断调度的更多信息,可参照题为“松散锁步的非确定性处理器的方法和系统”的共同未决的美国专利申请No.(HPRef.200316143-1(CR Ref.2162-22100)),该专利申请在本文中如同被全文复制一样通过引用结合到本文中。
因此,协调中断服务在系统调用时完成。然而,可能存在在延长的时间间隔内未进行系统调用的用户程序。因此,逻辑处理器内的处理器可能会在它们正执行的用户程序部分上有显著差异,和/或还可能没有充分的机会去服务中断。未以足够频度进行系统调用的用户程序称为“不协作进程”。
根据本发明的实施例,处理不协作进程有几个阶段。第一阶段是识别用户程序的确是不协作的。第二阶段是识别哪一个/哪一些处理器在用户程序执行点上滞后,并使滞后进程提前。最后一个阶段可以是修改以前的不协作进程。下面将依次讨论这些阶段中的每一个阶段。
在一些实施例中,识别用户程序进行太少的系统调用并因此被视为不协作的涉及使用定时器。如果用户程序在定时器终止之前未进行系统调用,则该用户程序为不协作进程。根据本发明的一些实施例,每当处理器的调度器程序(在最高特权状态-内核模式下操作)使用户程序执行时,该调度器程序还:复位处理器的退休指令计数器;使退休指令计数器只对用户(最低级特权)指令计数;启动不协作进程定时器;以及存储当前系统调用号的指示。退休指令计数器是例如在大多数可购得的处理器的性能监控单元中实现的计数器。退休指令计数器的值在处理器执行的每个用户级指令完成后递增。就不协作进程定时器而言,由Intel制造的Itanium处理器通过配备间隔时间计数器(ITC)和间隔时间匹配(ITM)寄存器而可用于检测不协作进程。ITC是在处理器加电时开始计数的自由运行的计数器。“自由运行”的意思是指ITC进行计数,而不考虑正在执行的指令的数量和/或类型,ITC无法由任何指令(不管具有任何特权)停止,而且ITC的值无法由任何用户指令改变。因而在这些实施例中启动不协作进程定时器意味着在经过了所需时间长度时读取ITC的值,并且将表示ITC的值放入ITM中。当ITC和ITM寄存器的值相等时,将间隔定时器中断置为有效。虽然在这些例示性实施例中,不协作进程定时器并未真正“终止”,但此后对ITC值匹配ITM的讨论将称为“定时器终止”,以便一般地适用于用作不协作进程定时器的任何定时器型系统。注意,如果采用了Itanium处理器,则编译器插入的推测性指令,如load.s和load.chk对(pair)在用户程序中不被允许,因为这些指令可能显著影响退休指令计数值。对于没有实现ITC/ITM类型定时能力的处理器,可将周期性定时器中断与寄存器结合用于跟踪中断次数,以及在发生预定次数的周期性定时器中断后执行与不协作进程相关的任务。再次一般地来看不协作进程定时器,当定时器终止时使中断有效,从而调用不协作进程处理例程。不协作进程处理例程检查在定时器规定的时间期间(这在一些实施例中可以是大约100微秒)内是否至少进行过至少一次系统调用。不协作定时器终止引起的中断可以视为不同于在用户程序执行期间有效的其它中断的中断类别,因为这种中断在每个处理器中被立刻服务。相比之下,在用户程序执行期间有效的其它中断通过调度在会合点接受服务。在备选实施例中,系统调用可复位定时器,以避免触发不协作进程处理例程,但这些复位可能需要代价很高的内核模式进程调用。与不协作处理器定时器相关联的中断在每个处理器内部处理(实际上,如果用户进程是协作的,则不协作进程定时器已终止的这一事实不会传送给其它处理器),因此可视为一种与需要跨逻辑处理器的不同处理器的协调服务的中断,如输入/输出请求类型不同的中断。
图4示出了根据本发明实施例的不协作进程处理程序的流程图。具体地说,不协作进程处理程序因不协作进程定时器终止之后中断有效而启动(框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之后,逻辑处理器的所有处理器可以在相同的退休指令计数值上,但由于背景部分中所论述的原因,不保证用户程序实际处于指令流中相同的执行点上。因此,接下来的步骤是执行多条指令,对这些指令中的至少一些进行译码以及确定所译码的指令的输入(框430)。参照图4(以及图5、7和9中更具体的实施方案中)的译码是基于程序的译码,不要与由准备执行指令的处理器所执行的基于硬件的译码混淆。在备选实施例中,处理器可专门设计用于松散锁步操作,因此可将译码的信息通过处理器的寄存器传递给软件,或者处理器可具有第二基于硬件的译码单元,该单元对指令进行译码,并将所译码的信息传递给软件。例如,设想用户程序指令是“异或”操作。译码操作(不管由软件还是专门设计的硬件执行)对机器语言指令进行译码,以确定它是已所执行的“异或”运算,并进一步确定用来执行其功能的指令的输入寄存器的值。执行和译码可按任何顺序或基本上同时进行。在处理器之间交换译码指令执行中至少一些的地址和表示译码指令的至少一些的输入的值(框432)。根据本发明的至少一些实施例,译码指令的地址和表示译码指令的输入的值的交换是通过将这些信息写到同步寄存器54中来进行的,表决器逻辑56以与交换不协作进程的指示和退休指令计数值类似的方式返回该信息。
一旦处理器已从其它处理器获得了译码指令的地址和表示指令的输入的值,则其中实现图4所示方法的处理器随后对交换的指令的地址进行模式匹配(框434)。通过寻找地址(以及因此指令)和表示输入的值的匹配模式,每个处理器确定其与逻辑处理器内其它处理器有关的执行点。下一步是确定其中实现图4所示例示性方法的处理器是否滞后于用户程序的执行点(框436)。如果该处理器滞后,则它在用户程序中向前执行,直到执行点匹配逻辑处理器的处理器中最超前的用户程序执行点为止(框438)。
根据至少一些实施例,每个处理器独自同意用户程序的不协作特性时进行的强制对齐可足以确保正确操作,而不管用户程序的不协作特性。在另外的实施例中,每个处理器在用户程序中设置系统调用(框440),以确保至少用户程序中引起不协作进程指定的部分不再如此。在一些实施例中,将用户程序的非精细部分(最可能是软件循环)修改成包含系统调用。这是通过例如以系统调用(如日时调用)替换空操作指令(NOP)来完成的。如果用户程序指令流不允许这种小的替换,则以指向已替换指令的分支指令、系统调用和返回分支指令来替换指令。当用户程序存在于长期存储装置如磁盘驱动器上时,可对用户程序进行这些修改。在另一些备选实施例中,处理器硬件可支持在指令流中的特定点上插入中断机制,并且该中断可触发用于中断调度的系统调用。例如,处理器系列支持处理器内的称为“指令断点寄存器”的寄存器。断点寄存器可以指令指针值加载,当实际指令指针匹配断点寄存器中的值时,便触发中断。此示范性机制用于触发中断,所触发的中断接着又触发用于同步的系统调用。基于硬件的机制不一定在所有体系结构中都有,但是修改用户程序的实施例可有普遍的应用。随后,复位协作进程定时器(框417),保存当前系统调用号(框419),中断允许(框418)并且中断处理程序返回(框420)。
仍参照图4,虚线428内的这组步骤:译码(框430)、交换译码指令的地址(框432)以及模式匹配(框434)是可用来确定相对于逻辑处理器内其它处理器的执行点的执行点的若干备选实施例的高级概括。本说明书提供了三个处理器可用于确定其相关执行点的备选实施例,下面依次讨论其中每个实施例。
图5说明第一备选实施例,该实施例可由处理器用于确定其相关执行点。图5的例示性方法步骤替换了图4的虚线428内的三个高级描述。进程开始于使计数参数为零(框500)。下一步是执行单条用户程序指令(框502)。执行单个用户指令可通过将其中实现图5所示例示性方法的处理器置于单步模式并执行单条指令来完成。对指令进行译码(在由处理器执行之前或者之后)并确定该指令的输入(框504)。框504所示的例示性步骤是软件译码进程,不要与由处理器对用以实现(框502所示)例示性执行步骤的用户指令进行的译码混淆。例如,如果所执行的用户程序是逻辑“与”操作,则图5所示例示性方法对机器语言指令进行译码以确定它是“与”操作,进而确定输入寄存器中指令用于执行其功能的值。之后,将译码指令的地址和表示输入的值写到列表中(框506),计数参数增一(框508)。重复将指令译码(框504)和将每条译码指令的地址(和相关信息)写到列表中(框506)的例示性步骤预定次数(框510)。对于这些实施例,预定的迭代次数在图中标记为“3N”。N的值可通过对特定品牌和型号的处理器进行测试来确定,并且该值表示具有相同的指令流并在相同的时间里执行指令流的处理器之间的至少退休指令计数值最大误差。换句话说,在处理器的退休指令计数器(当用户程序被调度时为零)相同的时候,N的值是这些处理器的执行点之间指令数的最大差值。在一些实施例中,为具有误差容限,N的值可以是最大误差的多个倍数,在某些情况下,例如即使最大误差小于1000,也会将N的值选为1000。在图5的例示性示例中,在使用N的准确值而非包括误差容限的N的情况下,应该交换至少3N条指令的译码值,以确保匹配正确地识别超前者和超前者所超前的指令数。交换超过3N条指令(或N被有意选为大于真正N的情况下)的译码值也在本发明的范围和精神内。
仍参照图5,如判决框510所示,完成执行、译码和将译码值写入列表这些步骤至少三倍退休指令计数值最大误差。下一步是将所创建的列表写到表决器逻辑中(框512),并在软件循环中等待(框514),直到表决器逻辑将类似的信息从逻辑处理器中其它处理器写回到存储器,例如写回到其中实现图5所示例示性方法的处理器的位置57为止。一旦处理器具有来自逻辑处理器中其它处理器的列表,该处理器便对这些列表执行模式匹配(框516),试图寻找具有长度为至少两倍退休指令计数值最大误差的模式。一旦找到匹配,该处理器便确定其在用户程序中相对于逻辑处理器内其它处理器的执行点(框518)。之后,进程恢复进行对其中实现例示性方法的处理器是否滞后的例示性判断(图4的框436)。
图6示出了相应于两个处理器PA1和PB1的多条指令{A,B,...P}以进一步说明图4和图5的概念。以下解释同样适用于三个处理器,这里采用两个处理器是为了不致使本说明变得过度复杂。具体而言,设想每个用户程序已被确定为不协作的,并且处理器之一已向前一直执行到它们的退休指令计数值相同(“RIC=”)为止。因为对退休指令计数的不精确性,处理器PA1的用户程序中要执行的下一指令是指令C,而处理器PB1中要执行的下一指令是指令A。因此,处理器PA1的执行点超前PB1两条用户程序指令。换句话说,在此情况下偏差为二。还认为,跨用户程序的平均时间片期间遇到的若干指令的退休指令计数值最大误差可通过经验测试而确定为四。
在此例示性情况下,N的值可以为四或更大,对于本示例,N恰为四。因此,在此例示性情况下,允许每个用户程序向前步进十二条用户程序指令,同时每个处理器创建译码指令的地址和表示译码指令的输入的值的列表(图5的框500-510)。一旦完成,处理器PA1具有包括十二项{C,D,...N}的列表600。同样,处理器PB1具有包括{A,B,...L}的列表602。之后,在处理器之间交换这些列表(图5的框512和514),并且每个处理器在其创建的列表和从其它处理器获得的列表之间进行模式匹配,以确定相对执行点(图5的框516和518)。在图6的例示性情况下,每个处理器找到包括{C,D,...L}的模式匹配。因此,发现十条指令匹配,这超过了两倍退休指令计数值最大误差(2N)的最小模式匹配长度。在本示例中,处理器PA1确定它超前并且处理器之间的执行点偏差为二(S=2)(图5的框518)。同样,处理器PB1确定它滞后并且在本例示性情况下偏差为二(图5的框518)。因此,下一步是由滞后的处理器(本示例中的PB1)向前执行偏差数量条指令(图4的框438),在此步骤之后,使每个处理器得以对齐执行点,于是每个用户程序中要执行的下一指令为O,如线条604所示。这样,例示性的两个处理器的对齐操作完成,现在可以安全地调度可与用户程序共享存储器的其它程序,而无其它程序看见非复制的存储器的可能性,也不必在处理器之间拷贝存储页面数据。
在此参照图5,将译码指令和表示其输入的值写到列表中的例示性步骤(框506)可采取许多形式。在一些实施例中,可将译码指令和实际的输入本身写到列表中。为减少在处理器之间交换的数据量,备选实施例发送输入值的识别标志和简化表示。例如,每个处理器可计算所述输入的循环冗余校验和,并且该校验和可以是写到与其它处理器交换的列表中的值。可使用任何稳健的校验和产生器,如循环冗余校验码和64位改进的Fletcher校验和。
仍参照图5,还有一些备选实施例通过译码和交换不到3N个已执行指令中的全部指令来减少处理器之间交换的数据量。更具体地说,本发明的一些实施例只交换用户程序内预定匹配点指令的地址。在这些实施例中,交换所有输入的值或者通过交换使用所有指令的输入值计算的循环冗余校验值来进一步简化数据集。例如,在一些实施例中,匹配点可以基本上只是分支指令的地址以及3N条已执行指令中的第一条指令和最后一条指令的地址。在分支指令是匹配点的例示性实施例中,每个处理器搜索长度至少为2N的匹配,但对匹配分支指令之间的指令计数并假定这些指令是相同的。然而,当计算循环冗余校验值时将那些指令的输入包括在内。在另一些备选实施例中,匹配点是具有周期性指令指针值如指令指针(IP)=0 mod M(其中M为任意数字如10、20、30)的指令。
在图5和6所示的实施例中,直到模式匹配阶段才知道哪个/哪些处理器超前、哪个/哪些处理器滞后,并因此可能需要执行三倍退休指令计数值最大误差以确保正确地识别超前者。然而,希望减少处理器之间交换的数据量,并且如果在退休指令计数值对齐(图4的框426)之后知道哪个处理器在用户程序执行点方面超前,则可以减少执行的、译码的和交换的指令数量以及模式匹配长度。
图7示出了可在图4的虚线28内实现的步骤的备选实施例,其中减少了所执行的、译码的指令和交换的地址的数量。具体地说,在使退休指令计数值对齐后(图4的框426),逻辑处理器的各处理器并不知道哪个处理器在执行点方面超前;然而,因为退休指令计数值的最大可能误差是已知的(或假设大得足以涵盖实际的最大可能误差),所以可通过选择一个处理器向前执行N条指令来强制一个超前者。因此,图7的例示性方法的第一步是选择强制的超前者处理器(框700)。选择为强制超前者的处理器无需一定是实际在执行点方面超前的处理器,事实上,强制的超前者的选择可以是任意的。例如,选择强制的超前者可涉及选择具有最低或最高处理器识别号(引导处理器时指配)的处理器。在其它实施例中,选择强制的超前者涉及通过表决器逻辑来交换信息,例如把信息写到寄存器54中,并且表决器逻辑将从每个处理器提供的数据返回到所有的处理器。例如,一种选择方法是让每个处理器产生随机数,具有最高随机数(在交换数字之后确定的)的处理器是强制的超前者。可采用其它等效的方法。
下一步是判断其中正运行图7的例示性方法的处理器是否是强制的超前者(框702)。如果其中正运行该例示性方法的处理器是强制的超前者,则该处理器在用户程序中向前执行数量至少等于退休指令计数值最大误差的指令(框704)。在此特定步骤中,不必对任何指令进行译码/或记录。不管强制的超前者实际是否在执行点方面超前或滞后,在向前执行了退休指令计数值最大误差数量的指令之后,执行此步骤的处理器将是在用户程序执行点方面的超前者(或约束为超前者)。
仍参照图7,每个处理器的下一步骤是将计数参数设为零(框706),并执行单条用户程序指令(框707)。之后,对由处理器执行的指令译码并确定该指令的输入(框708)。或者,可在执行之前或与执行操作基本上同时进行译码。把译码指令的地址和表示输入的值写到列表中(框710),计数参数增一(框712)。与图5的例示性方法非常类似,将对指令译码(框708)和将每条译码指令的地址(及相关信息)写到列表中(框710)的步骤重复预定次数(框714)。然而,与图5的例示性方法不同,在图7的方法中,预定迭代次数是两倍退休指令计数值最大误差,图中标记为“2N”。在图7的例示性情况下,以及在使用N的精确值而非包括误差容限的N的情况下,应当交换至少2N条指令的译码值,以确保匹配正确地识别超前者和超前者所超前的指令的数量。不过,交换2N条以上(或N有意选为大于真正N的情况下的)指令的译码值也在本发明的范围和精神之内。
仍参照图7,下一步是将所创建的列表写到表决器逻辑中(框716),并在软件循环中等待(框718),直到表决器逻辑将来自逻辑处理器中其它处理器的类似信息写回到存储器,例如写回到其中实现图7的例示性方法的处理器的位置57为止。一旦处理器具有来自逻辑处理器中其它处理器的列表,该处理器便对这些列表进行模式匹配,或在某些情况下根本没有匹配(框720)。一旦发现含至少一条指令的匹配,该处理器便确定其在用户程序中相对于逻辑处理器中其它处理器的执行点(框722)。之后,进程恢复判断其中实现上述方法的处理器是否滞后(图4的框436)。应该认识到图7所示操作中有关处理器超前或滞后标记的一个区别。虽然处理器的执行点在退休指令计数值被强制相等(图4的框426)时可能滞后,但是如果将原来滞后的处理器选择为强制的超前者,并使其提前N条指令(框700-704),则在模式匹配之后强制的超前者将在执行点方面超前,并且其它处理器将提前(图4的框436和438)。相反,如果处理器的执行点在强制退休指令计数值相等之后滞后,并且该处理器未被选择为强制的超前者,则一旦2N条指令的执行、译码、交换和模式匹配完成,则该处理器会滞后多得多。
图8A示出了相应于两个处理器PA1和PB1的多条指令{A,B,...M},以进一步说明图4和图7的概念。以下解释同样适用于三个处理器,这里选用两个处理器是为了不致使本说明变得过度复杂。具体而言,设想每个用户程序已被确定为不协作的,并且处理器之一已向前执行到它们的退休指令计数值相等(“RIC=”)为止。因为在对退休指令计数方面的不精确性,处理器PA1的用户程序中要执行的下一指令是指令C,而处理器PB1中要执行的下一指令是指令A。因此,处理器PA1在执行点方面超前PB1两条用户程序指令。进一步设想,可通过经验测试确定跨用户程序的平均时间片期间遇到的多条指令的退休指令计数值的最大误差为四。
在图8A的例示性情况下,N的值可以为四或更大,对本示例而言N恰好为四。任意地选择处理器PB1作为强制的超前者(图7的框700),它因此向前步进N条用户程序指令(图7的框704)。之后,在本例示性情况下允许每个用户程序向前步进八条用户程序指令(2N),同时每个处理器创建译码指令的地址和表示译码指令的输入的值的列表(图7的框706-714)。一旦完成,处理器PA1便具有包括八项{C,D,...J}的列表802。同样,处理器PB1具有包括项{E,F,...L}的列表804。之后,在处理器之间交换列表(图7的框716和718),并且每个处理器在其创建的列表和从其它处理器获得的列表之间进行模式匹配,以确定相对执行点(图7的框720-722)。在图8A中,每个处理器寻找包括{E,F,...J}的模式匹配。在本示例中,处理器PA1确定它现在滞后并且处理器之间的执行点偏差为二(S=2)(图7的框722)。同样,处理器PB1确定它现在超前并且本例示性情况下偏差为二(还是图7的框722)(图8注释:处理器PA1最初超前两条指令)。因此,下一步是让滞后的处理器,即本情况下的PA1(不管PA1在强制退休指令计数值相等之后超前的事实)向前执行两条指令(图4的框438),此步骤之后,每个处理器被对齐,于是每个用户程序中要执行的下一指令为M(如线条806所示)。这样,使对例示性的两个处理器对齐的操作结束,于是现在可以安全地调度可能与用户程序共享存储器的其它程序,而无其它程序看到非复制的存储器的可能性。
图8B显示了除将强制退休指令计数值相等之后超前的处理器PA1选择为强制的超前者以外与图8A相同的情形。因此,处理器PA1向前步进N条用户程序指令(图7的框704),使PA1的第一译码指令(图7的框708)为指令G。之后,允许每个用户程序向前步进八条用户程序指令(2N),同时每个处理器创建译码指令的地址和表示译码指令的输入的值的列表(图7的框706-714)。一旦完成,处理器PA1便具有包括八项{G,H,...N}的列表810。同样,处理器PB1具有包括项{A,B,...H}的列表812。之后,在处理器之间交换这些列表(图7的框716和718),并且每个处理器在其创建的列表和从其它处理器获得的列表之间进行模式匹配,以确定相对执行点(图7的框720和722)。在图8B中,每个处理器寻找包括{G,H}的模式匹配。在本示例中,处理器PB1确定它现在滞后(六条指令)并且处理器之间的执行点偏差为二(S=2)(图7的框722)。换句话说,处理器之间的原始偏差为二,但执行之后强制的超前者向前执行N条指令,该偏差为六条指令。同样,处理器PA1确定它现在超前并且本例示性情况下偏差为二(还是图7的框722)。同样,处理器之间的原始偏差为二,但在执行之后强制的超前者向前执行N条指令,该偏差为六条指令。因此,下一步是让滞后的处理器、即本情况下的PB1向前执行六条指令(图4的框438),在此步骤之后每个处理器被对齐。
对于采用图7的例示性方法分析的情形,如果处理器之间的偏差等于N,并且碰巧将真正的超前者选择为强制的超前者,则该强制的超前者将超前2N条指令。一旦每个处理器均提前2N条指令,那么超前的处理器仍然提前2N条指令,因此在模式匹配中找不到任何匹配(图7的框720)。在此情况下,其中运行图7的例示性方法的处理器知道原始偏差为N,而滞后的处理器现在滞后2N条指令。仍参照图7的方法,在偏差为一(S=1)的情形下,在交换的列表之间将只有一条匹配的指令。但是,假定知道强制的超前者确实是超前者,则一条指令就足以识别处理器之间的执行点。对此评估的进一步的可信度可由如下事实获得:匹配的指令将正好在强制的超前者的列表的开始和非强制的超前者的列表的末尾。
图9还说明了在图4的虚线28内实现的步骤的其它备选实施例,其中减少了所执行、译码的用户程序指令以及交换的地址的数量。具体地说,在对齐退休指令计数值(图4的框426)后,下一步是让每个处理器将计数参数设为零(框900),并执行单条用户程序指令(框902)。之后,对处理器执行的指令进行译码,并确定该指令的输入(框904)。虽然框904的译码在执行之后示出,但也可在执行之前或与执行操作基本上同时进行。将译码指令的地址和表示译码指令的输入的值写到列表中(框906),并且还将其写到表决器逻辑中(还是框906),这样在一对指令译码后即对其进行交换。例示性方法随后在软件循环中等待从其它处理器返回译码指令的地址和表示译码指令的输入的值(框908)。在数据被从表决器逻辑写回之后,将所述地址和输入值保存到第二列表中(框910),计数参数增一(框912)。将对指令译码(框904)和将每条译码指令的地址(以及相关信息)写到列表中以及写到表决器逻辑中(框906)的例示性步骤重复预定次数(框914)。与图5和图7的例示性方法相反,预定的迭代次数仅仅为至少退休指令计数值最大误差,图中标记为“N”。在图9的例示性情况下,以及在采用N的精确值而非包括误差容限的N的情况下,应当交换至少N条指令的译码值,以确保匹配正确地识别超前者和超前者所超前的指令的数量。然而,交换超过N条指令(或N有意选为大于真正N的情况下)的译码值也在本发明的范围和精神之内。
仍参照图9,在执行用户程序的N条指令并对其进行译码之后,例示性方法对来自内部产生的列表的指令和由逻辑处理器中其它处理器提供的译码指令的地址(以及表示输入的值)的列表的指令进行模式匹配(框916)。如果发现两个或以上的匹配(框918),并且例示性进程已执行了不到用户程序的3N条指令(框924),则该进程执行另外的用户程序指令。如果发现两个或以上的匹配模式,则无法确定处理器之间的超前者,因此还需要比较其它指令。另一方面,如果只找到一个匹配(具有任意长度),包括单条指令(和输入)的匹配(框918和919),则下一步是确定执行点(框920),之后该进程恢复对其中实现例示性方法的处理器是否滞后的例示性判断(图4的框436)。如果未找到匹配(框919),则这是一种指示N的值不正确的错误情况(框921)。如果发现两个或两个以上匹配(框918),但已执行了3N条指令,则译码指令包含幂等循环(基于指令和指令的输入不可区分其迭代的循环),任选一个匹配(框926),并确定相对于所选匹配的执行点(框920)。换句话说,如果已执行了3N条指令,且仍然有两个或两个以上匹配,则选择任何一个匹配,并强制这些执行点相同。
因此,图9的例示性方法可仅利用对N条指令的译码及其地址的交换来确定相对执行点(如果偏差S=0)。在一般情况下,为实施图9的例示性方法,每个处理器只需要执行至多N+2S条指令,以确定它们各自用户程序的执行点。因此,图9的方法在偏差小时优于图5的例示性方法。在偏差逼进N的极限情况下,图9的方法简并成交换3N条译码指令,与图5的方法相同。
图10A示出了相应于两个处理器PA1和PB1的多条指令{A,B...E},以进一步解释图4和图9的概念。注意本情况下例示性指令如何表示两次迭代的循环。具体地说,设想用户程序(或处理器)的每个拷贝已被确定为不协作的,而且处理器之一已向前一直执行到它们的退休指令计数值相等(“RIC=”)为止。因为在对退休指令计数的不精确性,处理器PA1的用户程序中要执行的下一指令是指令C,而处理器PB1中要执行的下一指令是指令A。因此,处理器PA1在执行点方面超前PB1两条用户程序指令。此外还设想退休指令计数值的最大误差在本示例中为四。
在图10A的例示性情况下,N的值可以为四或更大,对本示例而言N恰好为四。允许每个用户程序向前步进至少四条指令,同时每个处理器创建译码指令的地址(以及表示译码指令的输入的值)的列表并交换该列表(图9的框900-914)。一旦完成对N条指令的译码,处理器PA1便具有包括四项{C,D,A,B}的列表1002。同样,处理器PB1具有包括项{A,B,C,D}的列表1004。因为在这些实施例中,译码指令的地址(以及表示译码指令的输入的值)在每次译码之后进行了交换(图9的框906和框908),因此每个处理器还具有来自逻辑处理器中其它处理器的列表。因此,每个处理器在其创建的列表与从其它处理器获得的列表之间进行模式匹配(图9的框916)。然而,在图10A的例示性情况下,每个处理器找到为{C,D}和{A,B}的两个匹配模式(框918)。因此,无法确定两个处理器之间的执行点,并因为在本示例中,只执行了N条指令并对其进行译码,因此进程返回以执行另外的用户程序指令并对其进行译码。
图10B说明图10A在执行两条另外的用户程序指令并对其进行译码之后的情形(因为向前步进一条另外的用户程序指令仍留下两个长度相等的匹配模式)。具体地说,在执行两条另外的用户程序指令后,处理器PA1具有包括六项{C,D,A,B,C,E}的列表1006。同样地,处理器PB1具有包括项{A,B,C,D,A,B}的列表1008。本例示性情况下的模式匹配揭示含有四条指令{C,D,A,B}的匹配模式。因为只发现了一个长度为四的匹配模式(图9的框918),因此可确定用户程序的相对执行点(框920)。因此,下一步是让滞后的处理器、即本情况下的PB1向前执行两条指令(图4的框438),在此步骤之后,每个处理器均被对齐。
至此所述的实施例采用的N的值是静态的和事先确定的。在备选实施例中,可自适应地改变N的值。图11说明了用以实现对N的值的自适应改变的算法的流程图。图11的例示性方法可实现为独立的进程,或者可结合到图4的方法中。进程开始(框1100),并移到收集退休指令计数器的准确度的证据的步骤(框1102)。在一些实施例中,当退休指令计数值相等时比较处理器之间指令指针的值。例如,如果当退休指令计数值相等时指令指针是相同的,则这是退休指令计数器中无误差的间接证据。因此,这些实施例需要在向前步进到最高退休指令计数值之后交换指令指针,例如通过使用同步逻辑来交换指针。在一些实施例中,可确定N的准确度的直接证据。例如,在图7所示的实施例中,在模式匹配之后,如果未找到匹配,则这是N的值精确地等于偏差的直接证据。在图9中,如果发现没有匹配(框919),则这是N的值不正确(太小)的直接证据。
不管收集退休指令计数器的准确度的直接或间接证据的机制准确度如何,下一步是判断该证据是否指示退休指令的误差等于或大于N的值(框1104)。如果是这样的话,则应当调整N的值(框1106),并复位证据日志(框1116)(如下更详细的讨论)。N的值的增加或减小可由每个处理器在没有向其它处理器咨询的情况下来完成,或者增加N值的决定可调用由处理器执行的数据交换,以就改变N的准确值达成协议。
如果证据未暗示退休指令计数器的准确度大于N,则下一步是记录收集的证据(框1108)。因此,虽然N的值即便在所收集的证据的一种实例显示退休指令的误差可能大于N时也应增大(框1104和1106)(因为在此情况下用户程序的复制拷贝可能未正确对齐),仍然要基于大的证据集合来降低N的值。如果证据集合的大小不充分大(框1110),则进程结束(框1118)。另一方面,如果证据集合的大小足够大(框1110),例如一周的数据或者一个月的数据,则判断退休指令计数值中的可能误差是否比N的当前值小得多(框1112)。例如,如果处理器之间退休指令计数值的准确度为10或更小的计数,而N约为1000,则可减少N的值(框1114)。另一方面,如果处理器之间退休指令计数值的准确度是100个计数,并且N约为200,则不应改变N的值。在下一步骤中,复位证据日志(框1116),然后进程结束(框1118)。
以上讨论旨在说明本发明的原理和各种实施例。对本领域技术人员而言,一旦完全理解了以上公开,则许多变型和修改将变得显而易见。例如,虽然本文述及如果采用处理器则可采用基于编译器的推测指令,但上述例示性方法和系统还适用基于处理器的推测(例如分支预测推测和指令重排序),因为基于处理器的推测不一定会对退休指令计数器产生不利影响。例示性实施例描述了每个处理器向前一直执行到它们的退休指令计数值匹配为止;然而,当执行N条指令时退休指令计数值中的差异可考虑到N值的大小中。例如,如果处理器的退休指令计数值有100条指令的差异,则N的值可以是100加上对退休指令计数器可预期的最大误差量。本发明人的意图在于将如下权利要求解释为包含所有这类变型和修改。
Claims (9)
1.一种基于处理器的方法,包括:
运行第一和第二处理器中用户程序的复制拷贝;
对至少一些指令译码并确定每条译码指令的输入,每个处理器中所述译码与执行同时进行;
在所述第一和第二处理器之间交换译码指令的地址和表示所述译码指令的输入的值;
利用至少所述译码指令的地址确定所述第一处理器中所述用户程序的执行点相对于所述第二处理器中所述用户程序的执行点滞后;以及
使所述第一处理器提前,直到每个用户程序内的执行点对齐为止;
其中,收集退休指令计数值的准确度的证据,以及
基于所收集的证据来调节所述至少一些指令的数量。
2.如权利要求1所述的基于处理器的方法,其特征在于所述确定还包括在所述第一处理器内:
对所述交换的所述译码指令的地址和表示所述译码指令的输入的值进行模式匹配;以及
基于匹配模式的位置确定所述第一处理器滞后执行点的量。
3.如权利要求2所述的基于处理器的方法,其特征在于还包括:
允许至少所述用户程序之一一直执行到每个处理器中的退休指令计数值相同为止;以及随后
执行每个用户程序的多条指令。
4.如权利要求3所述的基于处理器的方法,其特征在于还包括:
其中,执行还包括执行至少三倍所述退休指令计数值最大误差数量的指令;
其中,交换还包括在执行之后进行交换;以及
其中,模式匹配还包括寻找长度为至少两倍所述退休指令计数值最大误差的匹配模式。
5.如权利要求3所述的基于处理器的方法,其特征在于还包括:
其中,在执行所述多条指令之前,所述方法还包括在所述第一和第二处理器之一中向前执行所述退休指令计数值最大误差数量的指令;
其中,执行所述多条指令还包括在每个处理器中执行至少两倍所述退休指令计数值最大误差数量的指令;
其中,交换还包括在执行之后进行交换;以及
其中,模式匹配还包括寻找一个匹配的模式或找不到匹配的模式。
6.如权利要求3所述的基于处理器的方法,其特征在于还包括:
其中,执行还包括执行数量介于并包含所述退休指令计数值最大误差和三倍所述退休指令计数值最大误差的指令;
其中,交换还包括在执行每条指令之后进行交换;以及
其中,模式匹配还包括,在交换译码指令的至少一些地址之后测定每次交换后的匹配模式,以及如果找到一个匹配则制止进一步执行或如果找到多个匹配则继续执行。
7.一种基于处理器的系统,包括:
用于执行用户程序的第一处理器,所述第一处理器耦合到第一存储器;以及
用于同时执行所述用户程序的复制拷贝的第二处理器,所述第二处理器耦合到第二存储器;
其中,所述第一处理器用于将其用户程序的多条已执行指令与所述第二处理器的用户程序的多条已执行指令相匹配,以确定所述第一处理器滞后的指令条数,并且其中所述第一处理器用于向前执行,直到所述用户程序的复制拷贝的执行点相同为止,以及收集退休指令计数值的准确度的证据,并基于所收集的证据来调节所述多条已执行指令的数量。
8.如权利要求7所述的系统,其特征在于还包括,在所述第一处理器匹配所述多条已执行指令时:
其中,所述第一处理器用于执行其相应用户程序的预定数量条指令,并用于与执行操作同时对至少一些指令译码、确定译码指令的输入以及将所述译码指令的地址和表示所述输入的值放入第一列表中;
其中,所述第二处理器用于执行其相应用户程序的预定数量条指令,并用于与执行操作同时对至少一些指令译码、确定译码指令的输入以及将所述译码指令的地址和表示所述输入的值放入第二列表中;
其中,所述第一和第二处理器能够交换列表。
9.如权利要求7所述的系统,其特征在于还包括,在所述第一处理器匹配所述多条已执行指令时:
其中,所述第一处理器用于执行其相应用户程序的多条指令,并用于与执行操作同时对至少一些指令译码并确定译码指令的输入,且用于与执行操作同时和所述第二处理器交换所述译码指令的地址和输入;以及
其中,所述第二处理器用于执行其相应用户程序的多条指令,并能够与执行操作同时对至少一些指令译码并确定译码指令的输入,且用于与执行操作同时和所述第一处理器交换所述译码指令的地址和输入。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/042,504 US7467327B2 (en) | 2005-01-25 | 2005-01-25 | Method and system of aligning execution point of duplicate copies of a user program by exchanging information about instructions executed |
US11/042504 | 2005-01-25 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1811700A CN1811700A (zh) | 2006-08-02 |
CN100507833C true CN100507833C (zh) | 2009-07-01 |
Family
ID=36698441
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006100068796A Active CN100507833C (zh) | 2005-01-25 | 2006-01-24 | 使用户程序的复制拷贝的执行点对齐的方法和系统 |
Country Status (3)
Country | Link |
---|---|
US (2) | US7467327B2 (zh) |
JP (1) | JP4386449B2 (zh) |
CN (1) | CN100507833C (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7467327B2 (en) * | 2005-01-25 | 2008-12-16 | Hewlett-Packard Development Company, L.P. | Method and system of aligning execution point of duplicate copies of a user program by exchanging information about instructions executed |
US8428065B2 (en) * | 2007-06-18 | 2013-04-23 | International Business Machines Corporation | Group communication system achieving efficient total order and state synchronization in a multi-tier environment |
US8218549B2 (en) * | 2007-06-18 | 2012-07-10 | International Business Machines Corporation | Synchronization of message stream in a multi-tier messaging system |
JP5268469B2 (ja) * | 2008-07-23 | 2013-08-21 | 株式会社東芝 | 高可用システム及び実行状態制御方法 |
US8171328B2 (en) * | 2008-12-31 | 2012-05-01 | Intel Corporation | State history storage for synchronizing redundant processors |
US20100169886A1 (en) * | 2008-12-31 | 2010-07-01 | Seakr Engineering, Incorporated | Distributed memory synchronized processing architecture |
US20110078498A1 (en) * | 2009-09-30 | 2011-03-31 | United States Of America As Represented By The Administrator Of The National Aeronautics And Spac | Radiation-hardened hybrid processor |
US20110099421A1 (en) * | 2009-09-30 | 2011-04-28 | Alessandro Geist | Radiation-hardened hybrid processor |
US8856590B2 (en) * | 2012-01-07 | 2014-10-07 | Compunetix, Inc. | Reliable compute engine, method and apparatus |
US9256426B2 (en) * | 2012-09-14 | 2016-02-09 | General Electric Company | Controlling total number of instructions executed to a desired number after iterations of monitoring for successively less number of instructions until a predetermined time period elapse |
US20140380020A1 (en) * | 2013-06-24 | 2014-12-25 | Honeywell International Inc. | System and methods for synchronization of redundant processing elements |
EP3428748B1 (de) * | 2017-07-13 | 2020-08-26 | Siemens Aktiengesellschaft | Verfahren und anordnung zum betrieb von zwei redundanten systemen |
CA3098730A1 (en) | 2018-05-10 | 2019-11-14 | Miovision Technologies Incorporated | Blockchain data exchange network and methods and systems for submitting data to and transacting data on such a network |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
AU616213B2 (en) * | 1987-11-09 | 1991-10-24 | Tandem Computers Incorporated | Method and apparatus for synchronizing a plurality of processors |
US5327553A (en) * | 1989-12-22 | 1994-07-05 | Tandem Computers Incorporated | Fault-tolerant computer system with /CONFIG filesystem |
US5838894A (en) | 1992-12-17 | 1998-11-17 | Tandem Computers Incorporated | Logical, fail-functional, dual central processor units formed from three processor units |
EP0974912B1 (en) | 1993-12-01 | 2008-11-05 | Marathon Technologies Corporation | Fault resilient/fault tolerant computing |
US5790397A (en) * | 1996-09-17 | 1998-08-04 | Marathon Technologies Corporation | Fault resilient/fault tolerant computing |
US5896523A (en) | 1997-06-04 | 1999-04-20 | Marathon Technologies Corporation | Loosely-coupled, synchronized execution |
WO1999026133A2 (en) | 1997-11-14 | 1999-05-27 | Marathon Technologies Corporation | Method for maintaining the synchronized execution in fault resilient/fault tolerant computer systems |
US6327668B1 (en) | 1998-06-30 | 2001-12-04 | Sun Microsystems, Inc. | Determinism in a multiprocessor computer system and monitor and processor therefor |
US6393582B1 (en) | 1998-12-10 | 2002-05-21 | Compaq Computer Corporation | Error self-checking and recovery using lock-step processor pair architecture |
US6604177B1 (en) | 2000-09-29 | 2003-08-05 | Hewlett-Packard Development Company, L.P. | Communication of dissimilar data between lock-stepped processors |
US7017073B2 (en) * | 2001-02-28 | 2006-03-21 | International Business Machines Corporation | Method and apparatus for fault-tolerance via dual thread crosschecking |
US6928583B2 (en) * | 2001-04-11 | 2005-08-09 | Stratus Technologies Bermuda Ltd. | Apparatus and method for two computing elements in a fault-tolerant server to execute instructions in lockstep |
US6862693B2 (en) * | 2001-04-13 | 2005-03-01 | Sun Microsystems, Inc. | Providing fault-tolerance by comparing addresses and data from redundant processors running in lock-step |
US7366948B2 (en) * | 2004-10-25 | 2008-04-29 | Hewlett-Packard Development Company, L.P. | System and method for maintaining in a multi-processor system a spare processor that is in lockstep for use in recovering from loss of lockstep for another processor |
US7467327B2 (en) * | 2005-01-25 | 2008-12-16 | Hewlett-Packard Development Company, L.P. | Method and system of aligning execution point of duplicate copies of a user program by exchanging information about instructions executed |
US7260495B2 (en) * | 2005-06-06 | 2007-08-21 | International Business Machines Corporation | System and method for test generation for system level verification using parallel algorithms |
TW200745873A (en) * | 2006-06-05 | 2007-12-16 | Dmp Electronics Inc | Dual computers for backup and being fault-tolerant system architecture |
-
2005
- 2005-01-25 US US11/042,504 patent/US7467327B2/en active Active
-
2006
- 2006-01-24 CN CNB2006100068796A patent/CN100507833C/zh active Active
- 2006-01-25 JP JP2006016023A patent/JP4386449B2/ja active Active
-
2008
- 2008-11-13 US US12/269,945 patent/US7752494B2/en not_active Expired - Fee Related
Non-Patent Citations (2)
Title |
---|
Microsoft Computer Dictionary. Microsoft,17,Microsoft Press. 1999 |
Microsoft Computer Dictionary. Microsoft,17,Microsoft Press. 1999 * |
Also Published As
Publication number | Publication date |
---|---|
US20090070564A1 (en) | 2009-03-12 |
JP2006209769A (ja) | 2006-08-10 |
US7752494B2 (en) | 2010-07-06 |
JP4386449B2 (ja) | 2009-12-16 |
US7467327B2 (en) | 2008-12-16 |
CN1811700A (zh) | 2006-08-02 |
US20060168425A1 (en) | 2006-07-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100507833C (zh) | 使用户程序的复制拷贝的执行点对齐的方法和系统 | |
CN1811724B (zh) | 使用户程序的复制拷贝的执行点对齐的方法和系统 | |
CN100472456C (zh) | 确定用户程序是否作出了系统级调用的方法和系统 | |
US7426656B2 (en) | Method and system executing user programs on non-deterministic processors | |
US8090996B2 (en) | Detecting soft errors via selective re-execution | |
CN100520730C (zh) | 在具有至少两个执行单元的计算机系统中对程序代码的执行进行分离的方法和设备 | |
CN106021040B (zh) | 一种基于线形汇编指令差异性变换的dsp软错误检测方法 | |
US20060020852A1 (en) | Method and system of servicing asynchronous interrupts in multiple processors executing a user program | |
CN100538654C (zh) | 在具有多个组件的计算机系统中产生模式信号的方法和设备 | |
CN101120320A (zh) | 在具有至少两个执行单元的计算机系统中进行模式转换的设备和方法 | |
WO2019069043A1 (en) | RESUME AFTER ERROR FOR INTRA-HEART SYNCHRONIZED LOCKING MODE | |
KR20120025492A (ko) | Smt 기계에서 비교 및 전달 명령어를 사용한 안정적 실행 | |
CN109891393A (zh) | 使用检查器处理器的主处理器错误检测 | |
US20050172196A1 (en) | Variable delay instruction for implementation of temporal redundancy | |
US8799706B2 (en) | Method and system of exchanging information between processors | |
JP5315748B2 (ja) | マイクロプロセッサおよびシグネチャ生成方法ならびに多重化システムおよび多重化実行検証方法 | |
CN104641352A (zh) | 用于周期控制系统的流水线操作 | |
US7549085B2 (en) | Method and apparatus to insert special instruction | |
CN101048746A (zh) | 用于评价具有至少两个执行单元的计算机系统的信号的方法和设备 | |
KR100508320B1 (ko) | 고속 및 저속 리플레이 경로를 갖는 리플레이 구조를구비한 프로세서 | |
Miedema et al. | Strategy Switching: Smart Fault-Tolerance for Weakly-Hard Resource-Constrained Real-Time Applications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C41 | Transfer of patent application or patent right or utility model | ||
TR01 | Transfer of patent right |
Effective date of registration: 20170116 Address after: American Texas Patentee after: HEWLETT PACKARD ENTERPRISE DEVELOPMENT LP Address before: American Texas Patentee before: Hewlett Packard Development Co. |