JP4886826B2 - フォールト・トレラント・コンピュータ・システム、方法及びプログラム - Google Patents

フォールト・トレラント・コンピュータ・システム、方法及びプログラム Download PDF

Info

Publication number
JP4886826B2
JP4886826B2 JP2009193089A JP2009193089A JP4886826B2 JP 4886826 B2 JP4886826 B2 JP 4886826B2 JP 2009193089 A JP2009193089 A JP 2009193089A JP 2009193089 A JP2009193089 A JP 2009193089A JP 4886826 B2 JP4886826 B2 JP 4886826B2
Authority
JP
Japan
Prior art keywords
thread
code
computer system
processor
executing
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.)
Expired - Fee Related
Application number
JP2009193089A
Other languages
English (en)
Other versions
JP2011044078A (ja
Inventor
俊彦 孝壽
卓也 仲池
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2009193089A priority Critical patent/JP4886826B2/ja
Priority to US12/859,842 priority patent/US9032190B2/en
Publication of JP2011044078A publication Critical patent/JP2011044078A/ja
Application granted granted Critical
Publication of JP4886826B2 publication Critical patent/JP4886826B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1405Saving, restoring, recovering or retrying at machine instruction level
    • G06F11/1407Checkpointing the instruction stream
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1479Generic software techniques for error detection or fault masking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1497Details of time redundant execution on a single processing unit
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1695Error detection or correction of the data by redundancy in hardware which are operating with time diversity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1629Error detection by comparing the output of redundant processing systems

Description

この発明は、コンピュータ・システムにおいて、宇宙線などの影響で発生したエラーを回復するためのシステム、方法及びプログラムに関するものである。
コンピュータ・システムにおいて、トランジェント・フォールト(transient fault)と呼ばれる障害が知られている。トランジェント・フォールトとは、宇宙線などの影響により、一時的に起こる回路の誤動作である。トランジェント・フォールトの発生確率は、トランジスタの集積度の向上とともに増大しており、プロセッサにおいてもトランジェント・フォールトを検出・回復するための機構が望まれる。特にミッション・クリティカルな目的に使われるコンピュータ・システム、航空機や宇宙船制御システムなど、高いレベルの宇宙線に曝されるコンピュータ・システムにおいて、その要望は大きい。
これに関して、特開昭55−125598号公報は、2つのプロセッサで同一のプログラムを動作させる冗長システムにおいて、一方のプロセッサが自分の主記憶装置内で破壊を検出したら、もう一方のプロセッサの主記憶装置から正しい値を読み込み回復する技術を開示している。
また、特開平3−269745号公報は、2つのプロセッサのそれぞれを稼動状態と待機状態にし、それぞれの主記憶の内容をメモリ等値化手段によって常に同じになるように等値化されているシステムにおいて、一方のプロセッサのメモリ診断手段が自分の主記憶装置内に破壊を検出したら、もう一方のプロセッサの主記憶装置から正しい値を読み込み回復する技術を開示している。
しかし、これらの従来技術では、プログラムの動作中にそれぞれのプロセッサの計算結果を照合していないので、プロセッサ内部で発生したトランジェント・フォールトを検出することができず、当然そこから回復することもできない。
一方、Cheng Wang, Ho-seop Kim, Youfeng Wu, and Victor Ying,
"Compiler-Managed Software-based Redundant Multi-Threading for Transient
Fault Detection", In the Proceedings of the International Symposium on Code
Generation and Optimization, pp.244-258 (2007).は、次のようにしてトランジェント・フォールトを検出する仕組みを開示する。すなわち、これによれば、ソースコードを 2 種類のバージョンにコンパイルし、それぞれを別々のCPUコアで実行する。便宜上、それらのスレッドを、主導スレッド(Leading Thread)と冗長スレッド(Trailing Thread)と呼ぶことにする。主導スレッドと冗長スレッドは、同一の計算 を両者で重複して行い、共有メモリの読書き時に比較することにより、トランジェント・フォールトを検出する。しかしこの方式では、トランジェント・フォールトを検出しても、そこから回復することができない。すなわち、計算結果の不一致を検出しても、計算を行う以前の状態を復元する手段がなく、そのままプログラムを終了せざるを得ないためである。
特開昭55−125598号公報 特開平3−269745号公報
Cheng Wang, Ho-seop Kim, Youfeng Wu, and Victor Ying, "Compiler-Managed Software-based Redundant Multi-Threading for Transient Fault Detection", In the Proceedings of the International Symposium on Code Generation and Optimization, pp.244-258 (2007)
従って、この発明の目的は、トランジェント・フォールトを検出するだけではなく、その状態から回復することが可能なコンピュータ・システムを提供することにある。
本発明は、上記課題を解決するためになされたものであり、本発明によれば先ず、実行すべきオリジナル・プログラムに存在するシステムコール等の回復不可能ポイントとスレッド同期ポイントで、プログラムがセクションに区切られる。この処理は、コンパイラによって行なわれる。スレッド同期ポイントでプログラムを区切ることにより、トランジェント・フォールトが発生しない限り、適切な同期処理を行っているプログラムでは、2 つのスレッドから同一の実行結果を得られることが保証される。なお、以下では便宜上、回復不可能ポイント、スレッド同期ポイント等をコミット・ポイントと呼ぶことにする。
さらに、実行すべきオリジナル・プログラムに基づき、主導スレッド(Leading Thread)と冗長スレッド(Trailing Thread)のコードが、好適にはコンパイラによって生成される。
主導スレッドと冗長スレッドは、オペレーティング・システムによって並列に実行される。本発明のシステムは、各セクションでトランジェント・フォールトが発生しないと予測し、投機的に各セクションで、好適には2つの異なるコアに主導スレッドと冗長スレッドを割り振って実行される。その際、主導スレッドと冗長スレッドで、共有メモリへの書き込みを行わず、スレッドローカルな領域にバッファリングしながら同時に実行し、2つのスレッドの実行結果が一致するなら、スレッドローカルな領域にバッファリングされた内容がコミットされ、共有メモリへの書き込みが行なわれる。
2つのスレッドの実行結果が一致しない場合、処理がセクションの先頭にロールバックされ、セクションの先頭から処理が再開される。
尚、データレース(Data Race)に起因する再実行の頻発を削減するために、再実行の際は、好適には、異なるコア間で、メモリアクセス毎に同期をしながら実行する。
以上のように、この発明によれば、トランジェント・フォールトの発生を検出したことに応答して、システム的に処理がロールバックされ再開することにより、トランジェント・フォールトが起きても、演算処理のミスを回避することが可能となる。
本発明を実施するためのハードウェア構成のブロック図である。 本発明に係る機能論理ブロック図である。 主導スレッドと、冗長スレッドを生成するための処理のフローチャートである。 主導スレッドと、冗長スレッドの間で実行結果を比較する処理のフローチャートである。
以下、図面に基づき、この発明の実施例を説明する。特に断わらない限り、同一の参照番号は、図面を通して、同一の対象を指すものとする。尚、以下で説明するのは、本発明の一実施形態であり、この発明を、この実施例で説明する内容に限定する意図はないことを理解されたい。
図1を参照すると、本発明の一実施例に係るシステム構成及び処理を実現するためのコンピュータ・ハードウェアのブロック図が示されている。図1において、システム・バス102には、CPU104と、主記憶(RAM)106と、ハードディスク・ドライブ(HDD)108と、キーボード110と、マウス112と、ディスプレイ114が接続されている。CPU104は、これには限定されないが、好適には、32ビットまたは64ビットのアーキテクチャに基づくマルチコア・タイプのものであり、例えば、インテル社のCore(商標)2 Duo、Core(商標)2 Quad、AMD Turion(商標)などを使用することができる。主記憶106は、好適には、2GB以上の容量をもつものである。ハードディスク・ドライブ108は、例えば、320GB以上の容量をもつものである。
ハードディスク・ドライブ108には、個々に図示しないが、オペレーティング・システムが、予め格納されている。オペレーティング・システムは、Linux(商標)、マイクロソフト社のWindows Vista(商標)、Windows XP(商標)、Windows(商標)2000、アップルコンピュータのMac OS(商標)などの、CPU104に適合する任意のものでよい。
ハードディスク・ドライブ108にはまた、必要に応じて、C、C++、C#、Java(商標)などのプログラム言語処理系も格納される。
ハードディスク・ドライブ108にはさらに、プログラム言語処理系でコンパイルするためのソースコードを書くためのテキスト・エディタ、及び、Eclipse(商標)などの開発環境を含んでいてもよい。
キーボード110及びマウス112は、オペレーティング・システムまたは、ハードディスク・ドライブ108から主記憶106にロードされ、ディスプレイ114に表示されたプログラム(図示しない)を起動したり、文字を打ち込んだりするために使用される。
ディスプレイ114は、好適には、液晶ディスプレイであり、例えば、XGA(1024×768の解像度)、またはUXGA(1600×1200の解像度)などの任意の解像度のものを使用することができる。
図2は、本発明に係る処理モジュールを用意するための機能ブロック図である。図2において、ソースコード202は、この実施例では、Java(商標)で書かれたテキスト・ファイルであり、好適には、ハードディスク・ドライブ108に保存されている。
コンパイラ204は、Java(商標)コンパイラであり、好適には、ハードディスク・ドライブ108に保存されており、オペレーティング・システムの働きによってキーボード110及びマウス112の操作に応答して、主記憶106にロードされ、ソースコード202をコンパイルして、実行可能コードを生成する。
特に、本発明においては、コンパイラ204は、ソースコード202に基づき、ソースコード202に記述されているのとほぼ等価な処理を行う主導スレッド・コード206と、冗長スレッド・コード208を生成する機能をもつ。
主導スレッド・コード206と、冗長スレッド・コード208は、コミット・ポイント(commit point)の前に、主導スレッド・コード206と、冗長スレッド・コード208とでバッファからデータを書き出すコードと、書き出したデータを比較するコードを挿入する点で、もとのソースコード202に記述された処理と異なるが、それ以外は、ほとんど同一である。
ここで、コミット・ポイントとは、もとのソースコードにおける、スレッドの同期(例えば、ロックの獲得、開放)、システム・コールの呼出し、外部にあるライブラリ関数の呼出しなどの位置のことである。
特に、この実施例では、コミット・ポイントから、次のコミット・ポイントまでを、セクションと呼ぶことにする。
このようにして用意された主導スレッド・コード206と、冗長スレッド・コード208は、好適には一旦ハードディスク・ドライブ108に保存され、プログラム実行時に、オペレーティング・システムに用意された実行環境210において、具体的には、主導スレッド・コード206と、冗長スレッド・コード208とが、CPU104の個別のコアに割り当てられて実行される。その意味で、CPU104は、マルチコア・タイプのものであることが望ましいが、必須ではなく、本発明は、シングルコア・タイプのCPUにも適用可能であることを理解されたい。シングルコア・タイプのCPUの場合は、CPUが、オペレーティング・システムの働きで、タスク・スイッチの機能によって主導スレッド・コード206と、冗長スレッド・コード208とを並列的に実行する。
図3は、コンパイラ204の機能の概要を示すフローチャートである。図3のステップ302で、コンパイラ204が、ソースコード202を読み取って処理する。これは通常のコンパイル処理と同様であるが、本発明に特有であるのは、ステップ304で、コンパイラ204が、共有メモリに書込みを行う場所の直前と、コミット・ポイントの直前にコードを挿入して主導スレッド・コード206を生成し、ステップ306で、コンパイラ204が、共有メモリに書込みを行う場所の直前と、コミット・ポイントの直前にコードを挿入して冗長スレッド・コード208を生成することである。
別の観点からこのことを説明してみる。先ず、オリジナルのソースコードが下記のようであるとする。このコードは、Javaをベースにしているが、特定のプログラミング言語のコードに限定されない擬似コードであることを理解されたい。
// オリジナル・コード
lock();
compute val1;
p1 = val1;
compute val2;
s1 = val2;
unlock();
// ---------------
ここでlock()は、例えば、Javaの文脈でのロック取得であり、unlock()は、Javaの文脈でのロック解放である。lock()とunlock()は、コミット・ポイントに該当する。
上記のコードで、compute val1などとあるのは、val1を計算するための処理を形式的に記述した擬似コードである。
コンパイラ204は、このようなオリジナル・コードから、次のような主導スレッド・コードを生成する。
// 主導スレッド・コード
lock();
backup(p1);
compute val1
p1 = val1;
compute val2;
buffer(s1, val2);
if (compare_buffer_and_private_data() /* 冗長スレッドとの同期 */ == FALSE) {
restore(p1);
reset_buffer();
goto retry_with_synch;
}
commit_buffer();
unlock();
// ---------------
ここで、backup(p1)は、プライベート・データp1の値をバックアップする処理である。
p1 = val1は、スレッドにおけるプライベート・データの書込みである。
buffer(s1, val2)は、val2の値を、スレッド・ローカルなメモリの領域で、変数s1にコピーあるいはバッファする処理を意味する。
compare_buffer_and_private_data()は、主導スレッドがバッファした値及び主導スレッドにおけるプライベート・データの値と、冗長スレッドがバッファした値及び冗長スレッドにおけるプライベート・データの値とを比較する処理を示す。主導スレッドがバッファした値と冗長スレッドがバッファした値が一致し、且つ主導スレッドにおけるプライベート・データの値と冗長スレッドにおけるプライベート・データの値が一致するとき、compare_buffer_and_private_data()はTRUEを返し、そうでなければ、FALSEを返す。
restore(p1)は、p1の値を復元する処理である。
reset_buffer()は、バッファをフラッシュする処理である。
goto retry_with_synchは、典型的にはプログラムのセクション境界であるロールバック点まで処理を戻す。
示されているように、restore(p1)、reset_buffer()、及びgoto retry_with_synchは、compare_buffer_and_private_data()の結果がFALSEである場合に実行され、特に、goto retry_with_synchによって、ロールバックが引き起こされる。
一方、compare_buffer_and_private_data()がTRUE、すなわち、主導スレッドがバッファした値と冗長スレッドがバッファした値が一致し、且つ、主導スレッドにおけるプライベート・データの値と冗長スレッドにおけるプライベート・データの値が一致するなら、次のcommit_buffer()に進む。
commit_buffer()は、バッファされている値を実際に書き出すコミット処理のことである。すなわち、書込みバッファには、書き込む場所と値のペアがバッファリングされている。そこで、コミット処理とは、バッファリングされている書き込む場所に、その値を実際に書き込むことである。
以上から分かるように、本発明の実施例に従い、主導スレッドにおいて、共有メモリに書込みを行う場所の直前に挿入されるコードは次のとおりである。
(1) スレッドローカルなメモリ領域に、実行結果の値をバッファするコード。
また本発明の実施例に従い、主導スレッドにおいて、コミットポイントの直前に挿入されるコードは次のとおりである。
(2) 主導スレッドにバッファされた実行結果と、冗長スレッドにバッファされた実行結果を比較するコード。
(3) 実行結果が不一致なら、前のコミット・ポイントまでロールバックするコード。
(4) 実行結果が一致するなら、バッファされた実行結果をコミットするコード。
ところで、主導スレッド乃至冗長スレッドは、共有データを読み込む場合はまず、書込みバッファをチェックし、読み込むデータ領域の最新の値があればそれを読み込み、なければ共有データ領域から読み込むという処理を行う。
一方、生成される冗長スレッド・コードは下記のとおりで、lock(), commit_buffer(), unlock()を含まない点を除き、あとは主導スレッドと同一である。
// 冗長スレッド・コード
backup(p1);
compute val1;
p1 = val1;
compute val2;
buffer(s1, val2);
if (compare_buffer_and_private_data() /* 主導スレッドとの同期 */ == FALSE) {
restore(p1);
reset_buffer();
goto retry_with_synch;
}
// -----------------
次に、以上のように用意された主導スレッド・コードと、冗長スレッド・コードで以って、実行される処理について、図4のフローチャートを参照して説明する。
図4のステップ402ではまず、主導スレッド・コードと、冗長スレッド・コードが投機的に実行される。ここで、プログラム・セクションを実行、とあるのは、ステップ402の文脈では、1セクション毎の実行を想定している。
次に、ステップ404では、主導スレッド・コードと、冗長スレッド・コードが、コミット・ポイントに到達したかどうかの判断がなされる。コミット・ポイントに到達していなければ、ステップ402に戻って、主導スレッド・コードと、冗長スレッド・コードの、セクション内の処理を続ける。主導スレッド・コードと、冗長スレッド・コードではそれぞれ、上述のように、compute val2という同一の計算が行われ、その同一の計算の結果が、主導スレッド・コードと、冗長スレッド・コードで、buffer(s1, val2)によって個別にバッファされる。
ステップ404で、主導スレッド・コードと、冗長スレッド・コードが、コミット・ポイントに到達したと判断されると、ステップ406では、主導スレッド・コードと、冗長スレッド・コードの実行結果が比較される。上述のコードでは、主導スレッド・コードと冗長スレッド・コードの両方における、compare_buffer_and_private_data()のところの処理である。
このとき、トランジェント・フォールト、データレースなどのエラーがなければ、主導スレッド・コードと冗長スレッド・コードでは、同一の処理を実行しているので、実行結果は一致するはずである。
ここでデータレースとは、主導スレッドと、冗長スレッドとが、共有データの読込みを独立して行うために発生するデータ競合のことである。例えば、主導スレッドが共有データを読み込んだ後、冗長スレッドがその共有データを読み込む前に、全く別のスレッドが同じ共有データを書き換えた場合などに発生する。ただ、この実施例によれば、スレッド同期ポイントでセクションを論理的に区切ることにより、適切な同期処理を行っているプログラムでは、主導スレッドと、冗長スレッドとがある処理を実行している間は、他のスレッドが競合するセクションを実行できないようにすることにより、データレースによる実行結果の不一致が起こる確率を実質的に減少させている。
実際に実行結果が一致すると判断されると、ステップ408に進んで、書込みバッファの内容のコミットが行われる。これは、commit_buffer()として示されている処理である。より具体的には、ここで、プライベートデータのバックアップの内容が破棄され、書込みバッファの値が共有データのメモリ領域に書き込まれる。そして、書込みバッファの内容が初期化される。
ステップ410では、主導スレッドが、コミット・ポイントの位置にある処理を行い、処理はステップ402に戻る。そこで、主導スレッドと冗長スレッドの次のセクションの処理に移る。
ステップ406に戻って、主導スレッド・コードと、冗長スレッド・コードの実行結果が比較された結果、それらが不一致なら、ステップ412に進む。
これは、上記擬似コードで、compare_buffer_and_private_data()として示した処理である。
ステップ412では、主導スレッドと冗長スレッドを、プログラム・セクションの先頭までロールバックする処理が行われる。これは、上記の擬似コードでは、goto retry_with_synchとして示された処理である。より詳しくは、ロールバックに際して、バックアップされていたプライベート・データの復元、及び書込みバッファの初期化がまず行われる。それから、セクションの先頭まで、処理が戻される。
なお、ロールバックしたセクションで、データレースが発生している可能性がある。そこで、ステップ414では、次のような処理を行う。
すなわち先ず、主導スレッドが、共有データの値を読み込む。次に、主導スレッドが、スレッド間通信で、読み込んだデータを冗長スレッドに送信する。
主導スレッドは、読み込んだ内容を用いて、実行を継続する。一方、冗長スレッドは、送信された内容を用いて、実行を継続する。
そうして、ステップ404でコミット・ポイントに達したと判断されたら、ステップ406で、再度、主導スレッド・コードと、冗長スレッド・コードの実行結果が比較される。
その結果、実行結果が一致していれば、ステップ408で書込みバッファの内容をコミットし、ステップ410で主導スレッドでコミット・ポイントの位置にある処理を実行してから、ステップ402に戻る。
このように、主導スレッドの実行結果と冗長スレッドの実行結果が一致するまで、主導スレッドと冗長スレッドがロールバックするので、トランジェント・フォールトやデータレースが生じても、それによって正しくない実行結果が、後の処理に波及することが防がれる。
こうして、ステップ402で、主導スレッドがその処理の終わりに到達すると、主導スレッドは、冗長スレッドに終了を指示する。主導スレッドは、冗長スレッドの終了を確認後に、自身を終了させる。
以上、本発明を、パーソナル・コンピュータ上で実施する形態を用いて説明したが、特定のコンピュータ・アーキテクチャや構成に限定されず、ワークステーション、メインフレーム、航空機や宇宙船搭載の組込みシステムなどでも実装可能であることを、この分野の当業者なら理解するであろう。また、好適な実施例としてマルチコア・プロセッサの例を示したが、シングルコア・プロセッサでも実施可能である。
また、上記実施例では、Javaベースで説明したが、マルチスレッドを実現可能な任意のオペレーティング・システムと、プログラミング言語処理系の組み合せで実施可能であり、Java以外に、C、C++、C#その他、この分野の当業者に知られている任意のプログラミング言語処理系が使用可能である。
102 システム・パス
104 CPU
110 キーボード
112 マウス
114 ディスプレイ
106 主記憶
108 ハードディスク・ドライブ
202 ソースコード
204 コンパイラ
206 主導スレッド・コード
208 冗長スレッド・コード
210 実行環境

Claims (18)

  1. プロセッサをもち、フォールト・トレラントに実行されるコンピュータ・システムであって、
    所定の演算結果をもたらす第1のコードを含む第1のスレッドと、前記第1のコードと同一の演算を行なう第2のコードを含む第2のスレッドとを並列的に実行する手段と、
    前記第1のスレッドと前記第2のスレッドがコミット・ポイント到達したことに応答して、前記第1のコードの演算結果と、前記第2のコードの演算結果とを比較する手段と、
    前記演算結果が不一致であることに応答して、前記第1のスレッドと前記第2のスレッドをロールバックさせる手段とを有する、
    コンピュータ・システム。
  2. 前記プロセッサが、マルチコア・プロセッサであり、前記第1のスレッドと前記第2のスレッドとがそれぞれ前記プロセッサの異なるコアに割り当てられる、請求項1に記載のコンピュータ・システム。
  3. 前記演算結果が一致することに応答して、前記第1のスレッドが、前記第1のコードの演算結果を共有メモリに書き出す、請求項1に記載のコンピュータ・システム。
  4. 前記ロールバック後、前記第1のスレッドと前記第2のスレッドをスレッド間通信させる手段をさらに有する、請求項1に記載のコンピュータ・システム。
  5. 前記コミット・ポイントが、スレッドの同期、システム・コールの呼出し、外部にあるライブラリ関数、ロックの獲得、及びロックの解除のどれかである、請求項1に記載のコンピュータ・システム。
  6. 前記ロールバックは、1つ前のコミット・ポイントへの移動である、請求項1に記載のコンピュータ・システム。
  7. プロセッサをもつコンピュータ・システムを、フォールト・トレラントに実行する方法であって、
    所定の演算結果をもたらす第1のコードを含む第1のスレッドを実行するステップと、
    前記第1のコードと同一の演算を行なう第2のコードを含む第2のスレッドを、前記第1のスレッドと並列的に実行するステップと、
    前記第1のスレッドと前記第2のスレッドがコミット・ポイント到達したことに応答して、前記第1のコードの演算結果と、前記第2のコードの演算結果とを比較するステップと、
    前記演算結果が不一致であることに応答して、前記第1のスレッドと前記第2のスレッドをロールバックさせるステップとを有する、
    コンピュータ・システムの実行方法。
  8. 前記プロセッサが、マルチコア・プロセッサであり、前記第1のスレッドと前記第2のスレッドとがそれぞれ前記プロセッサの異なるコアに割り当てられる、請求項7に記載のコンピュータ・システムの実行方法。
  9. 前記演算結果が一致することに応答して、前記第1のスレッドが、前記第1のコードの演算結果を共有メモリに書き出す、請求項7に記載のコンピュータ・システムの実行方法。
  10. 前記ロールバック後、前記第1のスレッドと前記第2のスレッドをスレッド間通信させるステップをさらに有する、請求項7に記載のコンピュータ・システムの実行方法。
  11. 前記コミット・ポイントが、スレッドの同期、システム・コールの呼出し、外部にあるライブラリ関数、ロックの獲得、及びロックの解除のどれかである、請求項7に記載のコンピュータ・システムの実行方法。
  12. 前記ロールバックは、1つ前のコミット・ポイントへの移動である、請求項7に記載のコンピュータ・システムの実行方法。
  13. プロセッサをもつコンピュータ・システムを、フォールト・トレラントに実行するプログラムであって、
    前記コンピュータ・システムをして、
    所定の演算結果をもたらす第1のコードを含む第1のスレッドを実行するステップと、
    前記第1のコードと同一の演算を行なう第2のコードを含む第2のスレッドを、前記第1のスレッドと並列的に実行するステップと、
    前記第1のスレッドと前記第2のスレッドがコミット・ポイント到達したことに応答して、前記第1のコードの演算結果と、前記第2のコードの演算結果とを比較するステップと、
    前記演算結果が不一致であることに応答して、前記第1のスレッドと前記第2のスレッドをロールバックさせるステップと実行させる、
    コンピュータ・システムの実行プログラム。
  14. 前記プロセッサが、マルチコア・プロセッサであり、前記第1のスレッドと前記第2のスレッドとがそれぞれ前記プロセッサの異なるコアに割り当てられる、請求項13に記載のコンピュータ・システムの実行プログラム。
  15. 前記演算結果が一致することに応答して、前記第1のスレッドが、前記第1のコードの演算結果を共有メモリに書き出す、請求項13に記載のコンピュータ・システムの実行プログラム。
  16. 前記ロールバック後、前記第1のスレッドと前記第2のスレッドをスレッド間通信させるステップをさらに有する、請求項13に記載のコンピュータ・システムの実行プログラム。
  17. 前記コミット・ポイントが、スレッドの同期、システム・コールの呼出し、外部にあるライブラリ関数、ロックの獲得、及びロックの解除のどれかである、請求項13に記載のコンピュータ・システムの実行プログラム。
  18. 前記ロールバックは、1つ前のコミット・ポイントへの移動である、請求項13に記載のコンピュータ・システムの実行プログラム。
JP2009193089A 2009-08-24 2009-08-24 フォールト・トレラント・コンピュータ・システム、方法及びプログラム Expired - Fee Related JP4886826B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2009193089A JP4886826B2 (ja) 2009-08-24 2009-08-24 フォールト・トレラント・コンピュータ・システム、方法及びプログラム
US12/859,842 US9032190B2 (en) 2009-08-24 2010-08-20 Recovering from an error in a fault tolerant computer system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009193089A JP4886826B2 (ja) 2009-08-24 2009-08-24 フォールト・トレラント・コンピュータ・システム、方法及びプログラム

Publications (2)

Publication Number Publication Date
JP2011044078A JP2011044078A (ja) 2011-03-03
JP4886826B2 true JP4886826B2 (ja) 2012-02-29

Family

ID=43606224

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009193089A Expired - Fee Related JP4886826B2 (ja) 2009-08-24 2009-08-24 フォールト・トレラント・コンピュータ・システム、方法及びプログラム

Country Status (2)

Country Link
US (1) US9032190B2 (ja)
JP (1) JP4886826B2 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5850774B2 (ja) 2012-03-22 2016-02-03 ルネサスエレクトロニクス株式会社 半導体集積回路装置及びそれを用いたシステム
JP2014063258A (ja) 2012-09-20 2014-04-10 Renesas Electronics Corp 半導体集積回路装置及びマイクロコントローラ
US9251014B2 (en) * 2013-08-08 2016-02-02 International Business Machines Corporation Redundant transactions for detection of timing sensitive errors
JP5988444B2 (ja) * 2014-02-14 2016-09-07 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 最適化したバイナリー・モジュールをテストする方法、並びに、当該最適化したバイナリー・モジュールをテストするためのコンピュータ及びそのコンピュータ・プログラム
GB2537942B (en) * 2015-05-01 2017-06-14 Imagination Tech Ltd Fault tolerant processor for real-time systems
US10678792B2 (en) 2015-10-23 2020-06-09 Oracle International Corporation Parallel execution of queries with a recursive clause
US10783142B2 (en) 2015-10-23 2020-09-22 Oracle International Corporation Efficient data retrieval in staged use of in-memory cursor duration temporary tables
US10452655B2 (en) * 2015-10-23 2019-10-22 Oracle International Corporation In-memory cursor duration temp tables
US11194701B2 (en) * 2020-05-11 2021-12-07 International Business Machines Corporation Identifying software interaction defects using differential speed processors
JP7419157B2 (ja) 2020-05-13 2024-01-22 株式会社日立製作所 プログラム生成装置、並列演算デバイス、及び、並列演算デバイスに並列演算を実行させるためのコンピュータプログラム
US11921785B2 (en) 2022-01-25 2024-03-05 Oracle International Corporation Inline graph algorithm execution with a relational SQL engine

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS55125598A (en) 1979-03-21 1980-09-27 Fujitsu Ltd Restoration system of memory content
JPS5751514A (en) 1980-09-09 1982-03-26 Mitsubishi Electric Corp Automobile cooler
JPH02287858A (ja) * 1989-04-28 1990-11-27 Toshiba Corp 分散処理システムのリスタート方式
JPH03269745A (ja) 1990-03-20 1991-12-02 Yokogawa Electric Corp 二重化プロセッサシステム
JPH05112508A (ja) 1991-10-17 1993-05-07 Mita Ind Co Ltd スチルベン誘導体およびそれを用いた電子写真感光体
JP3085899B2 (ja) * 1995-06-19 2000-09-11 株式会社東芝 マルチプロセッサシステム
JPH09251393A (ja) * 1996-03-18 1997-09-22 Toshiba Corp 計算機システム
JP3919274B2 (ja) * 1996-12-26 2007-05-23 株式会社東芝 状態記録再現機能を有する計算機システム及び状態記録再現プログラムを記録したコンピュータ読み取り可能な記録媒体
JP3725318B2 (ja) * 1997-01-24 2005-12-07 株式会社東芝 プロセス状態の管理方法およびプロセス管理装置、並びにこれを行うプログラムを記録した記録媒体
JP3253883B2 (ja) * 1997-01-31 2002-02-04 株式会社東芝 プロセスリスタート方法及びプロセス監視装置
JPH1139178A (ja) * 1997-07-22 1999-02-12 Toshiba Corp 計算機システム及び計算機システムにおけるチェックポイントスレッド方法
JP3052908B2 (ja) 1997-09-04 2000-06-19 日本電気株式会社 トランザクションプログラム並列実行方法およびトランザクションプログラム並列実行方式
US6854075B2 (en) * 2000-04-19 2005-02-08 Hewlett-Packard Development Company, L.P. Simultaneous and redundantly threaded processor store instruction comparator
US20030188141A1 (en) * 2002-03-29 2003-10-02 Shailender Chaudhry Time-multiplexed speculative multi-threading to support single-threaded applications
JP3702815B2 (ja) 2001-07-12 2005-10-05 日本電気株式会社 プロセッサ間レジスタ継承方法及びその装置
US7444544B2 (en) * 2006-07-14 2008-10-28 International Business Machines Corporation Write filter cache method and apparatus for protecting the microprocessor core from soft errors
JP2008102748A (ja) 2006-10-19 2008-05-01 Hitachi Ltd プログラム実行方法、言語処理系、及び実行時ルーチン
US20080244354A1 (en) * 2007-03-28 2008-10-02 Gansha Wu Apparatus and method for redundant multi-threading with recovery

Also Published As

Publication number Publication date
US20110047364A1 (en) 2011-02-24
US9032190B2 (en) 2015-05-12
JP2011044078A (ja) 2011-03-03

Similar Documents

Publication Publication Date Title
JP4886826B2 (ja) フォールト・トレラント・コンピュータ・システム、方法及びプログラム
US10997027B2 (en) Lightweight checkpoint technique for resilience against soft errors
US7516361B2 (en) Method for automatic checkpoint of system and application software
CN109891393B (zh) 使用检查器处理器的主处理器错误检测
US20080244354A1 (en) Apparatus and method for redundant multi-threading with recovery
US20060190702A1 (en) Device and method for correcting errors in a processor having two execution units
US6708288B1 (en) Compiler-based checkpointing for support of error recovery
US7802136B2 (en) Compiler technique for efficient register checkpointing to support transaction roll-back
US7308607B2 (en) Periodic checkpointing in a redundantly multi-threaded architecture
US7444544B2 (en) Write filter cache method and apparatus for protecting the microprocessor core from soft errors
US7757237B2 (en) Synchronization of threads in a multithreaded computer program
US20100318746A1 (en) Memory change track logging
US20090044044A1 (en) Device and method for correcting errors in a system having at least two execution units having registers
US20050193283A1 (en) Buffering unchecked stores for fault detection in redundant multithreading systems using speculative memory support
US8935678B2 (en) Methods and apparatus to form a resilient objective instruction construct
US9164846B2 (en) Restarting a software system
US20190129814A1 (en) Application fault tolerance via battery-backed replication of volatile state
US20230115158A1 (en) Method for detecting and recovery from soft errors in a computing device
JP4531060B2 (ja) 投機的メモリサポートを利用した冗長なマルチスレッディングシステムにおける故障検出のための外部メモリの更新管理
US20100169628A1 (en) Controlling non-redundant execution in a redundant multithreading (RMT) processor
Yalcin et al. Combining error detection and transactional memory for energy-efficient computing below safe operation margins
US8745440B1 (en) Computer-implemented system and method for providing software fault tolerance
Kuru et al. Parv: Parallelizing runtime detection and prevention of concurrency errors
Zhang et al. A local checkpoint mechanism for on-board computing
Skarlatos et al. Towards reliable task parallel programs

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110823

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111101

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20111122

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20111209

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20141216

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees