JP2005166057A - 障害検出コンピュータシステム - Google Patents
障害検出コンピュータシステム Download PDFInfo
- Publication number
- JP2005166057A JP2005166057A JP2004349450A JP2004349450A JP2005166057A JP 2005166057 A JP2005166057 A JP 2005166057A JP 2004349450 A JP2004349450 A JP 2004349450A JP 2004349450 A JP2004349450 A JP 2004349450A JP 2005166057 A JP2005166057 A JP 2005166057A
- Authority
- JP
- Japan
- Prior art keywords
- code
- execution
- processor
- program
- calculation
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/1629—Error detection by comparing the output of redundant processing systems
- G06F11/1633—Error detection by comparing the output of redundant processing systems using mutual exchange of the output between the redundant processing components
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1497—Details of time redundant execution on a single processing unit
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1415—Saving, restoring, recovering or retrying at system level
- G06F11/1438—Restarting or rejuvenating
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Retry When Errors Occur (AREA)
- Hardware Redundancy (AREA)
Abstract
【解決手段】最初に、プログラムは計算セグメントに分割され、それらのセグメントの少なくとも1つのソースコードがコンパイルされて、2つの冗長なコードセクションが生成される。また、これらの2つのコードセクションの実行によって生成された結果を比較する比較コードも生成される。コードセクションのそれぞれは、次に、異なる計算領域で実行されて、各結果が生成される。各結果が同一である場合にのみ、計算結果が実行されて、プログラムのその後のフローが変更される。
【選択図】図2
Description
ハードエラーは、コンピュータシステムのオペレーションの不適切な振る舞いとして示される。
このハードエラーは、存続し、最初のエラーが起こったあと、かなりの期間の間、継続してシステムに不適当な挙動を発生させる。
ソフトエラーは、コンピュータハードウェアデバイスの一時的な異常によって生成される非再発性のエラーである。
ソフトエラーは、一定の期間を超えて持続しないコンピュータシステムの不適切な振る舞いを伴う。
この時間が経過した後、システムのその後のオペレーションが正常に進む。
この一時的な障害は、コンピュータシステムを構成するデジタル論理回路のオペレーションおよび状態の混乱を招き、多くの場合、ソフトエラーを招く。
ソフトエラーは、一般に、ハードエラーよりも検出するのが困難である。
ソフトエラーエラーは、ハードエラーよりも頻度が高いと考えられ、また、それらの影響がコンピュータシステムの設計において考慮されるべきであるほど十分多く発生するとも考えられる。
ソフトエラーが検出されないことによって、誤った結果が計算結果として報告される可能性があったり、破損したデータがディスクもしくは他の永続的な媒体に記憶されるか、または、ネットワーク接続を介して送信される可能性があったり、プログラムまたはコンピュータシステム全体の振る舞いが異常になる可能性がある。
ソフトエラーの検出およびオプションとしてハードエラーの検出を実現する技法を使用して、最も高いエラー率を有するコンピュータシステムアーキテクチャのサブシステム用のエラー検出カバレッジ(error detection coverage)を提供することが望ましい。
これらのサブシステムは、通常、システムメインメモリ、さまざまなレベルのプロセッサキャッシュ、ならびにシステムTLB(変換索引バッファ)、I/Oおよび相互接続「ファブリック」を含む。
エラーが検出されると、計算が継続して正しい結果を生成できるように、多くの場合、そのエラーを訂正する方法を提供することが望ましい。
エラーがこれらのサブシステムの1つに発生すると、そのエラーは、他のサブシステムに配信される前に、検出され、訂正される。
それによって、他のサブシステムは、エラーに対処する必要がなくなる。
これは、保護されていない(uncovered)サブシステムに取り組むことが残されている。
多くのコンピュータシステム設計では、中央処理装置の大部分が、エラー検出によってもエラー訂正によっても保護されていない。
エラー検出コードおよびエラー訂正コードは、コンピュータシステムメモリ、キャッシュ、および相互接続ファブリックの設計に広く適用されて、正しいオペレーションを検証し、ソフトエラーまたはハードエラーのいずれかが発生した場合には、データの表現の訂正を提供する。
プロセッサは、コンピュータメモリデバイスよりも複雑で多様性のあるさらに多くの構造を有するので、プロセッサ電子機器を保護することは、より困難な作業である。
プロセッサ電子機器を保護する既存のハードウェア技法は、プロセッサを構成するコア構造に発生しうるエラーのチェック、封じ込め(contain)、および回復を行う大幅な論理構造の設計および組み込みを必要とする。
これらの技法の実施においては、比較が一致しない場合、さらなる複雑さが必要とされて、誤った状態の伝播を制限する。
さらに、特別な手順が実行されて、計算結果を無効として規制するか、または、計算の状態を回復しなければならない。
このすべてが、システム設計のコストおよび複雑さを増大させる。
これらの技法のいくつかは、結果が一致するまで、プログラムを複数回完全に実行し、その結果を比較し、次いで、計算を再実行することを含む。
上記技法のすべては、計算が完了するのに必要な計算資源および時間を増大させる。
さらに、これらの技法のいくつかは、一定の部類のハードエラーを検出しない。
他のソフトウェアフォールトトレランス技法は、計算が停止するか、もしくは、「フェイルファスト」になるように機能しなくなるとみなすか、または、エラーが、プロセッサ設計に標準的に組み込まれたエラー例外チェックロジックによって検出されるとみなす。
これらの技法は、ソフトエラーの不十分なカバレッジを提供する場合がある。
このようなシステムは、多くの場合、基本的な計算環境自体に対する要求を超えて、2倍または3倍の冗長なハードウェアおよび大規模なチェックおよび訂正のロジックを使用していた。
代替的なソフトウェアフォールトトレランス技法は、通常、特殊化されたプログラミング技法を採用する必要がある。
この特殊化されたプログラミング技法は、システムおよびアプリケーションソフトウェアの設計に影響を与える可能性があるか、または、プログラムを複数回実行し、その後、2つ以上のプログラムの実行結果を比較することを必要とする。
最初に、プログラムは計算セグメントに分割され、それらのセグメントの少なくとも1つのソースコードがコンパイルされて、2つの冗長なコードセクションが生成される。
また、これらの2つのコードセクションの実行によって生成された結果を比較する比較コードも生成される。
コードセクションのそれぞれは、次に、異なる計算領域で実行されて、各結果が生成される。
各結果が同一である場合にのみ、計算結果が実行されて、プログラムのその後のフローが変更される。
これらのシステムは、既存のコンピュータアーキテクチャと組み合わされると、プロセッサの有効な障害検出カバレッジを提供する。
用語「プロセッサ」は、この文書では、中央処理装置(「CPU」)に加えて、他のタイプの機能を提供するデジタルプロセッサを指すためにも使用される。
本明細書で説明される障害検出技法が使用されて、検出された障害状況からの効率的な回復を提供しうる。
例示の実施の形態では、これらの技法は、アプリケーションプログラムのアーキテクチャ、構造、またはソースコードの変更を必要とせずに使用されうる。
VLIWは、コンパイラが、複数の基本的な相互依存しないオペレーションを、同じ命令語の中に詰め込む命令セットの思想を表す。
これらの固定長の語(命令)は、キャッシュまたはメモリからプロセッサにフェッチされると、数個の短い長さの命令に分割される。
これらの短い長さの命令は、独立した機能ユニット(「実行ユニット」としても知れられている)にディスパッチされ、機能ユニットにおいて並列に実行される。
図1に示すプロセッサでは、以下で説明するように、命令キャッシュ110の命令が、命令キュー109に入れられ、発行ポート108を介して発行され、関連したレジスタ106A/106Bを使用して機能ユニット102〜105を介して実行される。
これらの機能ユニットのそれぞれは、対応するレジスタまたはレジスタセットを有する。
このレジスタまたはレジスタセットは、パーティション106Aおよび106Bによって示されるように、対応するが別々である2つの部分に区画される。
レジスタ106A/106Bの2つのグループは、一括して「レジスタファイル」107と呼ばれる。
本システムは、並列な分岐/比較ユニット102Bがなくても機能することができるが、本明細書に示す例は、2つの比較ユニット102A/Bがプロセッサ101上で利用可能であることを前提とする。
区画されたレジスタを使用することによって、レジスタファイル107のエラーまたはレジスタファイルへの経路もしくはレジスタファイルからの経路のエラーの検出および修復が可能になる。
本システムは、異なるレジスタ名を冗長な命令(例えば、ロード、記憶、比較)に符号化して、これらの区画されたレジスタを利用することを含む。
プロセッサに影響を与えるソフトエラーは、主として、物理現象(例えば、アルファ粒子および宇宙線)の結果である。
これらの物理現象は、ランダムに発生するように観測されるが、或る平均発生率を有し、システムが誤って振舞う事象継続時間またはシステムの状態が変更されている事象継続時間の確率分布を有する。
さらに、この混乱は、一般に、VLSIチップ上の単一のアクティブデバイスまたは一群の物理的に隣接したデバイスに限定される。
これらの事象の発生間の平均時間は、混乱の最大継続時間よりもはるかに大きいという観測がなされうる。
さらに、同じ回路が、第1の事象の影響が終了した後の第2の事象によって、同様に混乱する確率も、極めて小さい。
その結果、2つの独立した同一の連続したエラーが、同じ計算ユニットにおいて、ほぼ同時に発生する確率は、無視されうる。
したがって、時間的複製の技法が使用されて、計算がソフトエラーによって大幅に混乱していなかったことを検証するのに使用されうる複数の計算領域を作成できる。
宇宙線、アルファ粒子、および他のランダムに発生する混乱現象による混乱事象の平均最大継続時間は、Dmaxの値が、或る事前に決定できるプロセッサクロックサイクル数に等しいことを要求する。
これらの混乱事象の継続時間は、半導体プロセスの特性およびプロセッサチップ上のデバイスの設計の特性と共に、粒子のタイプおよびエネルギーの関数である。
したがって、Dmaxの実際の値は、あらゆる現実のプロセッサ設計に対して決定されうる。
特定のプロセッサのDmaxに適用できる値は、設計プロセスの一部として、ソフトエラーの原因の詳細なシミュレーションによって決定されうるし、プロセッサを構成する実際のデバイスの個体数の測定によっても決定されうるし、あるいは、促進されたエラー率測定技法を通じても決定されうる。
例えば、約1ギガヘルツのクロック周波数を有するプロセッサの場合、Dmaxは、数個のCPUクロックサイクルの値を有することができる。
図2に示すように、対象となっているプログラムのソースコード201は、モデルに基づいて、コンパイラ202により、計算セグメント207に分割される。
このモデルでは、各セグメントは、一組の入力を取り込み、その入力値に対して計算を実行し、その後の計算に一組の出力を公開する。
各コードセグメントは、コンパイラ202によって処理され、その結果生成されたコード203は、オプティマイザ205に渡される。
オプティマイザ205は、オペレーションの実行をスケジューリングして、特定のプロセッサの利用可能な資源を最も良く利用する。
1つの可能な変更は、エラーチェックをオンまたはオフにするコンパイラフラグの処理を含む。
(ソースコード構文解析段階に続く)コード生成段階では、コンパイラ202は、プログラムセマンティクスの中間コード化されたもの(intermediate encoding)を読み出し、標準的なオペレーションを実行する。
この標準的なオペレーションは、識別子および一時のもの(temporaries)にアドレスを割り当てる等、対象コンピュータに空間および資源を割り当てることを含む。
通常のコンパイラによって実行されるこれらのオペレーションに加えて、コンパイラ202は、一時的な値を保持する資源(レジスタ等)の割り当ておよび再割り当てを行うオペレーションのコードも生成する。
このエラーハンドリングコード204は、実行されると、プログラムの各セグメントの正しいオペレーションを検証する。
プロセッサ101の資源が使用されて、冗長なチェック計算が、初期の計算を実行する領域とは異なる計算領域で、それぞれ実行される。
コンパイラ202によって生成されたエラーハンドリングコード204はさらに構成されて、エラーの封じ込めに適した動作がなされ、代替的な実施の形態では、回復動作がエラーの検出時に開始される。
複数の、すなわち冗長な実行ユニットは、通常、HPPA(「Hewlett-Packard Precision Architecture(ヒューレットパッカード精密アーキテクチャ)」)やSPARC(スカラープロセッサアーキテクチャ(Scalar Processor ARChitecture))等の複数命令同時発行アーキテクチャ(multiple issue architecture)に存在し、また、EPIC IPF(「Explicitly Parallel Instruction Computer Itanium Processor Family(明示的並列命令コンピュータItaniumプロセッサファミリ)」)等のVLIWアーキテクチャにも存在する。
I/Oオペレーションおよびメモリオペレーションに伴うシリアル化により、実行ユニットが十分に利用されないことが頻繁に発生する。
その結果、プログラム実行時間に大きな影響を与えることなく、冗長なチェック計算の実行をスケジューリングできることが多い。
これらの資源のスケジューリングの制御は、通常、複数命令同時発行アーキテクチャには設けられず、いくつかのVLIW設計の場合には、明白ではない場合がある。
したがって、資源スケジューリングは、オプティマイザ205によって行われる。
オプティマイザ205は、コードを並べ替え、オペレーションの実行をスケジューリングして、機能ユニット、タイミングおよび待ち時間等のプロセッサの利用可能な資源を最も良く利用する。
1次/2次の対のコードセクション210/215による同じハードウェア資源206の利用の間の時間が或るデルタ、例えばDmaxよりも大きい限り、コピーの実行順序は重要ではない。
プログラムがコンパイルされて一定のプロセッサ上で実行する時に、Dmaxが判明しているとすると、本システム200のコンパイラ202は、冗長な計算およびチェックを実行する各コードセクション215が、初期計算/チェックを実行するコードセクション210から独立して、少なくともDmaxのプロセッササイクルで確実に実行されるようにする。
オプティマイザ205は、2つのコードセクション210/215の間に、ノーオペレーション(「Nop」)を挿入するか、または、他のオペレーションをスケジューリングして、適切な実行時間間隔を確保できる。
例えば、Dmaxの値は、冗長なスレッドの実行をタイムスキューして、それに応じて、Dmaxにほぼ等しい待ち時間量を可能にするように、これらのプログラム(コンパイラ202以外)により使用されうる。
表1に示す例では、VLIWプロセッサは、サイクルの命令語の中に、サイクルごとの5つのオペレーションを許可する。
1つの分岐/比較ユニットのみが示されている。
プロセッサが、オペランドを待つことを引き伸ばしていない限り、表1の各行に示される命令は、クロックサイクルごとに発行される。
以下の例において、「BRUnit」は分岐/比較ユニット(102A/102B)であり、「ALU/cmpU」は整数ユニット(103A/103B)であり、「Load/storeU」はロード/記憶ユニット(104A/104B)であり、R1〜R3はレジスタ(106A/106B)である。
上記で示されたVLIWプロセッサの特徴は、以下に述べるその後のすべての例にも適用可能である。
コンパイラ202は、サイクルごとにより多くのオペレーションをスケジューリングすることおよび待ち時間を短縮することによって性能を向上させるために、利用可能なスロットに命令をスケジューリングするコード、プリフェッチを発行するコード等を含むことができる。
表2に示すように、レジスタR1およびR2に値AおよびBをそれぞれロードするオペレーションは、クロックサイクル1で最初に実行され、その後、クロックサイクル4で同じレジスタを使用して繰り返される。
最初の加算オペレーションの結果は、サイクル2でレジスタR3に保存され、ステップ220において、検証コード204により、第2の加算オペレーションの結果(サイクル5でレジスタR4に記憶される)と比較される。
レジスタR3およびR4に記憶された値が等しくない場合、エラーハンドリングルーチン230への分岐が行われる。
そうでない場合、処理は、ステップ225における次のコードセグメントに続く。
コンパイラ202は、プログラムをセグメント207に分割して、2つのオペレーションの結果は、当該結果が「公開」される前、または、当該結果が使用されてプログラムのその後の実行フローを変更する前に、チェックされる。
あるいは、プログラムの制御フローを変更することもあるし、しないこともある条件分岐の実行時には、結果は、別のプロセスもしくはプロセッサにより見られうるメモリ領域に書き込まれることによって、公開されうる。
エラー回復が実施される場合、セグメント207に関して追加される制約は、チェックが成功して完了されるまで、セグメントはその入力を破棄しないことである。
この条件は、各命令文の時間的冗長が個別に維持され、順序付けが維持されて、プログラムの順序で、かつ、各命令文のチェックシーケンスの実行が成功した後にのみ、結果が公開されることである。
コンパイルされたコードのセグメントの1次コピー210の実行と2次コピー215の実行との間に置かれるクロックサイクル数は、上述したように、特定のプロセッサのDmaxの値の関数である。
表2の例において、レジスタR1〜R4は、図1のレジスタファイル106A/106Bのレジスタに対応し、「Error」は、エラーハンドリングルーチン230のラベルである。
表2に示すコードは、3サイクルのDmaxについてコンパイル/最適化されている。
すなわち、冗長コードセクションの実行間に、3つのクロックサイクルが存在する。
例えば、最初の「Load R1=A」オペレーションはコンパイルされて、クロックサイクル(1)の期間中に実行され、この同じオペレーションの冗長な実行は、コンパイルされて、3サイクル後のクロックサイクル(4)の期間中に実行される。
本システムは、図2の判定ブロック220(および図3のブロック320)によって示されるように、1つまたは複数のチェックを実行し、2つの独立した計算領域(すなわち、時間領域または空間領域)でコードセクションについて実行された計算の結果が、その後の計算にそのコードを公開する前、または、その結果を使用して分岐オペレーションを指令する前に、同一であることを確実にする。
これは、分岐が実際に行われる前および後の双方で行われて、オプティマイザ205による最適化の機会を提供できる。
回復は、エラーの表示およびプログラム実行の終了(「フェイルファスト」)と同程度に単純であってよい。
この技法は、他の回復のレベルがシステムによって提供される場合に、十分でありうる。
あるいは、プログラムは、その開始から再起動されうる。
ただし、この手順は、いくつかの種類の対話型アプリケーションには受け入れられない場合がある。
すべての計算がチェックされるまで、計算された値は公開されないので、エラーのある結果を生成するプログラムステージ、すなわちセグメントは、その開始から安全に再実行されて、エラーから回復できる。
代替的な実施の形態では、エラー回復オペレーションが進行中であることを示すフラグがセットされる。
このフラグは、この計算のステージが正しく終了すると、クリアされる。
このプログラムステージの実行を試みる際に、第2のエラーは発生すると、ハードエラーが発生したとの表示が与えられる。
この場合、プログラムコードは、計算領域の大部分によって配信された計算結果が、そのコードの特定のセグメントの実行結果として公開されるように、構成される。
この保護レベルを必要とするコードにおいてのみ、任意のこれらの方法が、選択的に使用されうることに留意されたい。
図3は、空間的複製障害検出システム300の例示のコンポーネントおよびプロセスフローを示す図である。
この空間的複製方法では、各実行経路が、機能ユニットおよびレジスタを含む別々のプロセッサ資源を使用しながら、特定のプログラムのコードは、2回以上実行されうる。
このモデルでは、各セグメントが一組の入力を取り込み、その入力値に対して計算を実行し、その後の計算に一組の出力を公開する。
各コードセグメント207は、次に、コンパイラ202によってコンパイルされて、1次コンパイル済みコードセクション303、2次コンパイル済みコードセクション305、および検証コード304を生成する。
これらは、オプティマイザ205に入力される。
検証コード304の最適化されたコピー308も、オプティマイザ205によって生成される。
オプティマイザ205は、1対の1次オペレーションまたは2次オペレーションを削除しない限り、または、それらのオペレーションが同じ資源上で実行されるようにしない限り、または、結果が同一であることをチェックコードが検証するまで結果を公開しない限り、コピー306/307のオペレーションを並べ替えることができる。
時間的複製の場合のように、コンパイラは、コードをセグメントに分割して、チェックは、あらゆる結果の公開前または制御の転送前に、実行される。
異なる計算領域の実行は、重なり合うことを許容されうる。
コンパイラ202は、冗長な計算および結果のチェック用の第2のコードセグメントと共に、プログラム実行の各ステージの実行用の第1のコードセグメントを生成して、各セグメントに異なる計算領域を指定する。
ts=sin(a);第1の計算領域
rs=sin(a);第2の計算領域
if(ts<>rs) go to 回復ルーチン:
[この時点で、sは、その後の計算に公開されうる]
s=ts;
本実施の形態では、一方の計算領域が、第1の組の実行ユニット、例えば機能ユニット102A〜105Aおよびレジスタグループ106Aのレジスタを使用し、他方の計算領域が、第2の組の実行ユニット、例えば機能ユニット102B〜105Bおよびレジスタグループ106Bのレジスタを使用する。
また、ヒントが、コンパイルされたコードに含まれて、オプティマイザまたはハードウェアが複製されたオペレーションを廃棄しないことを確実にできる。
判定ブロック310によって示されるように、コンパイラ202によって生成された検証コード304が実行されて、1次および2次のコードコピー306/307の実行結果が比較される。
また、このチェックは、現在の計算に使用されている計算領域とは異なる計算領域においても、実行されうる。
結果が一致しない場合には、上記セクションの時間的複製において、図2に関して説明された回復動作と同様の回復動作が、試みられることができる。
コンパイラ202は、多くのVLIWプロセッサの命令セットで利用可能な明示的なスケジューリングを利用して、冗長なコード対が同じ機能ユニットによって実行されないことを確実にすることができる。
結果の不一致が検出されると、適切な回復動作が、エラーハンドリングルーチン320によって行われる。
この回復動作は、再実行、停止、または、ソフトウェアもしくはオペレーティングシステムハンドラへのトラップを含んでよい。
表3に示すように、クロックサイクル1において、レジスタR1およびR11に値Aがロードされ、クロックサイクル2において、レジスタR2およびR12に値Bがロードされる。
レジスタR1およびR2は、例えば、レジスタグループ106Aの一部であり、レジスタR11およびR12はレジスタグループ106Bの一部である。
クロックサイクル3の期間中に、レジスタR3およびR13が使用されて、レジスタR1/R2の内容とR11/R12の内容とがそれぞれ合計される。
レジスタR3およびR13に記憶された値が等しくない場合には、サイクル5において、エラーハンドリングルーチン320への分岐が行われる。
クロックサイクル6の期間中に、レジスタR13に記憶された合計値はプロセッサメモリに「C」として記憶される。
レジスタR3およびR13に記憶された値が一致する場合には、クロックサイクル7において、レジスタ3および4に記憶された値が比較される。
この際、メモリに記憶されたオペランドの値が再ロードされ、そのフェッチされた値は、記憶されるはずであった値と比較される。
これがなされて、レジスタからメモリへの経路またはメモリコントローラにエラーがないことが確認される。
レジスタR3およびR4に記憶された値が等しくない場合には、サイクル8において、エラーハンドリングルーチン320への分岐が行われ、等しい場合には、ステップ315において、処理は、次のコードセグメントに続く。
エラーハンドリングルーチン320は、以下の動作の任意の組み合わせを提供できる。
すなわち、エラーのあるオペレーションを所定の回数再試行すること;オペレーションを再試行する代わりに、停止させるかまたは他の動作を行うこと;エラー報告を行うこと;および総計値を収集することの任意の組み合わせが提供されうる。
レジスタファイル107が区画されて、同じレジスタ資源は、1次および2次のコードコピー306/307によって使用されない。
表3の例に示すように、複製されたコードが、異なる結果レジスタを使用することによって、機能ユニット、レジスタまたはそれらの間の経路にエラーが存在するかどうかが、結果の比較により、判断されうる。
同じことは、オペレーションの比較にも同様に当てはまる。
記憶および比較がなされた値は、アドレスである必要はなく、ラベルまたはエントリポイントに対して十分一意である値である必要があり、それによって、誤った分岐が、同一に符号化されたラベルまたはエントリポイントで制御する可能性を小さくできる。
同様に、複製された結果は、戻されうる。
これらの技法は、呼び出されたルーチンへのパラメータおよび呼び出されたルーチンからの結果が正しいことを確実にするのに役立つ。
データは、冗長な領域からフェッチされ、比較されて、データが正確であることを保証する。
図4に示すように、ステップ405において、プログラムのソースコードは、まず、ステップ406で、計算セグメントにセグメント化され、次いで、2つの形態のうちの1つでコンパイルされ、最適化される。
いずれの形態でも、その結果のコンパイルされたオブジェクトコードは、最初の計算を実行する領域とは異なる計算領域で、冗長な計算を実行する。
これらの2つのコピーは、機能的に同一であり、同じ計算(または複数の同じ計算)を実行するが、各コピーの実行では異なるレジスタおよび機能ユニットが使用されるので、厳密には同一でないことから、本質的に冗長であると言われる。
(ステップ407および408で説明した)上記の場合のいずれにおいても、本明細書で説明したように、コンパイラ202は構成されて、オプティマイザ205の追加された機能を実行できることに留意すべきである。
ステップ420において、コンパイルされたコードセグメントの冗長なコピーが、プロセッサ101によって実行される。
ステップ410で生成された検証コードが、ステップ425で実行されて、1次コピーおよび2次コピー306/307の各実行結果が、比較される。
判定ブロック430において、結果に不一致が検出されると、適切なエラーハンドリングルーチン230/320によって、適切な動作が行われる。
このエラー回復動作は、再実行(N1−ステップ433)、停止またはソフトウェアもしくはオペレーティングシステムハンドラへのトラップ(N2−ステップ432)を含んでよい。
1次コピーおよび2次コピー306/307の各実行結果が同一である場合には、ステップ434において、それらの結果がコミットされ、次のコードセグメントの冗長なコピーが、ステップ420で実行される。
別の実施態様またはツールでは、本方法に従い、静的または動的なコードの再編成または最適化を行うソフトウェアが使用されて、レガシーコードを冗長な形態に動的に変換するか、または、既存のコードを徐々に変換できる。
本システムに準拠した設計は、上記技法のすべてまたは一部を使用できる。
すべてにするかそれとも一部にするかは、要求される保護の量、さらにはコードの性能要求によって決定される。
また、この使用がなされると、エラー検出メカニズムが関連ハードウェアに組み込まれるものなら何でも、適切に増強される。
これらの命令は、図1のプロセッサ101等のプロセッサによって、検索および実行されて、プロセッサに指令して、本システムに従って動作させうる。
また、命令は、ファームウェアにも記憶されうる。
記憶媒体の例は、メモリデバイス、テープ、ディスク、集積回路、およびサーバを含む。
上記説明に含まれるか、または、添付図面に示されるすべての事項は、例示として解釈されるべきであり、限定する意味に解釈されるべきではないことに留意すべきである。
例えば、図1に示されるプロセッサは、図1に示されるコンポーネント以外のコンポーネントを含むように構成されることができ、これらのコンポーネントは、他の構成で、配置されうる。
図2〜図4に示す要素およびステップも、上記のように説明したシステムの精神から逸脱することなく、本明細書で説明した方法に従って変更されうる。
102・・・分岐/比較ユニット
103・・・整数ユニット
104・・・ロード/記憶ユニット
105・・・浮動小数点ユニット
106・・・レジスタ
107・・・レジスタファイル
108・・・発行ポート
109・・・命令キュー
110・・・命令キャッシュ
200・・・時間的複製障害検出システム
201・・・ソースコード
202・・・コンパイラ
203・・・コード
204・・・検証コード
205・・・オプティマイザ
206・・・機能ユニット
207・・・コードセグメント
230・・・エラーハンドリングルーチン
300・・・空間的複製障害検出システム
303・・・1次コードセクション
304・・・検証コード
305・・・2次コードセクション
308・・・検証コピー
320・・・エラーハンドリングルーチン
Claims (10)
- プログラムを実行するデジタルプロセッサ(101)の計算エラーを検出する方法であって、
前記プログラムを、計算セグメント(207)に分けるステップと、
前記セグメント(207)の少なくとも1つのソースコード(201)をコンパイルするステップであって、それによって、2つのコードセクション(210/215)を生成し、この2つのコードセクションの一方が、他方に対して機能的に冗長であるステップと、
前記2つのコードセクション(210/215)の実行によって生成された結果を比較する検証コード(204)を生成するステップと、
前記コードセクション(210/215)それぞれを、異なる計算領域で実行するステップであって、それによって、各結果を生成するステップと、
前記検証コード(204)を使用して、前記各結果を比較するステップと、
前記各結果が同一である場合にのみ、前記コードセクション(210/215)の1つを実行するステップであって、それによって、前記プログラムの実行のその後のフローを変更するステップと
を含む方法。 - 前記計算領域は、時間領域を含む
請求項1に記載の方法。 - 前記コンパイルするステップは、
前記コードセクション(210/215)の第1のコードセクションの実行と、前記コードセクション(210/215)の他方のコードセクションの実行との間で経過するプロセッサクロックサイクル数が最少となるように、前記ソースコード(201)をコンパイルして、実行をスケジューリングすること
を含む
請求項1に記載の方法。 - 前記最少のプロセッサクロックサイクル数は、前記計算エラーを引き起こす混乱事象の継続時間の統計的特性の関数として、事前に決定される
請求項3に記載の方法。 - 前記計算領域は、空間領域を含む
請求項1に記載の方法。 - 前記コンパイルするステップは、
前記コードセクション(210/215)それぞれが、前記プロセッサ(101)の別々の資源を使用して実行されるように、前記ソースコード(210)をコンパイルする
ことを含む
請求項1に記載の方法。 - 前記資源は、機能ユニット(102A/B〜105A/B)および区画されたレジスタ(106A/B)を備える
請求項6に記載の方法。 - 前記区画されたレジスタ(106A/B)は、使用されて、前記レジスタ(106A/B)のエラーおよび前記レジスタ(106A/B)への/からの経路のエラーの検出および修復を行う
請求項7に記載の方法。 - 前記各結果は、前記コードセクション(210/215)の1つが実行された前記領域とは異なる計算領域で、前記検証コード(204)を実行することによって比較される
請求項1に記載の方法。 - 前記計算セグメント(207)それぞれは、一組の入力を受け取り、前記入力値に対して少なくとも1つの計算を実行し、その後の計算に一組の出力を公開する
請求項1に記載の方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/726,976 US7584405B2 (en) | 2003-12-03 | 2003-12-03 | Fault-detecting computer system |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2005166057A true JP2005166057A (ja) | 2005-06-23 |
Family
ID=34677109
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004349450A Pending JP2005166057A (ja) | 2003-12-03 | 2004-12-02 | 障害検出コンピュータシステム |
Country Status (2)
Country | Link |
---|---|
US (1) | US7584405B2 (ja) |
JP (1) | JP2005166057A (ja) |
Families Citing this family (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7318169B2 (en) * | 2002-05-15 | 2008-01-08 | David Czajkowski | Fault tolerant computer |
US7237148B2 (en) * | 2002-09-05 | 2007-06-26 | David Czajkowski | Functional interrupt mitigation for fault tolerant computer |
US7971095B2 (en) * | 2005-02-16 | 2011-06-28 | Honeywell International Inc. | Fault recovery for real-time, multi-tasking computer system |
US7765427B2 (en) * | 2005-08-05 | 2010-07-27 | Honeywell International Inc. | Monitoring system and methods for a distributed and recoverable digital control system |
US7725215B2 (en) * | 2005-08-05 | 2010-05-25 | Honeywell International Inc. | Distributed and recoverable digital control system |
US8260492B2 (en) * | 2005-08-05 | 2012-09-04 | Honeywell International Inc. | Method and system for redundancy management of distributed and recoverable digital control system |
US7793147B2 (en) * | 2006-07-18 | 2010-09-07 | Honeywell International Inc. | Methods and systems for providing reconfigurable and recoverable computing resources |
US20080155504A1 (en) * | 2006-12-21 | 2008-06-26 | International Business Machines Corporation | Method and system for automated merging of multiple versions of a software component for an application |
CN101689150B (zh) * | 2007-06-20 | 2011-11-30 | 富士通株式会社 | 信息处理装置及控制方法 |
KR101418969B1 (ko) * | 2008-02-27 | 2014-08-13 | 삼성전자주식회사 | 프로세서 및 컴파일 방법 |
US20110099439A1 (en) * | 2009-10-23 | 2011-04-28 | Infineon Technologies Ag | Automatic diverse software generation for use in high integrity systems |
DE102009054637A1 (de) * | 2009-12-15 | 2011-06-16 | Robert Bosch Gmbh | Verfahren zum Betreiben einer Recheneinheit |
US20110208948A1 (en) * | 2010-02-23 | 2011-08-25 | Infineon Technologies Ag | Reading to and writing from peripherals with temporally separated redundant processor execution |
US8516356B2 (en) | 2010-07-20 | 2013-08-20 | Infineon Technologies Ag | Real-time error detection by inverse processing |
US9361104B2 (en) * | 2010-08-13 | 2016-06-07 | Freescale Semiconductor, Inc. | Systems and methods for determining instruction execution error by comparing an operand of a reference instruction to a result of a subsequent cross-check instruction |
US8935679B2 (en) * | 2012-10-10 | 2015-01-13 | Freescale Semiconductor, Inc. | Compiler optimized safety mechanism |
US9274904B2 (en) * | 2013-06-18 | 2016-03-01 | Advanced Micro Devices, Inc. | Software only inter-compute unit redundant multithreading for GPUs |
JP6155933B2 (ja) * | 2013-07-22 | 2017-07-05 | 大日本印刷株式会社 | 携帯型記憶媒体 |
KR101983125B1 (ko) | 2014-05-08 | 2019-05-28 | 마이크로 모우션, 인코포레이티드 | 페일세이프 계산들을 수행하기 위한 방법 |
WO2015185071A1 (en) * | 2014-06-04 | 2015-12-10 | Giesecke & Devrient Gmbh | Method for enhanced security of computational device with multiple cores |
FR3026205B1 (fr) * | 2014-09-23 | 2016-11-04 | Commissariat Energie Atomique | Execution speculative et iterative de graphes de flot de donnees temporises |
US9524205B1 (en) | 2016-01-04 | 2016-12-20 | International Business Machines Corporation | Code fingerprint-based processor malfunction detection |
US10303472B2 (en) * | 2016-11-22 | 2019-05-28 | Advanced Micro Devices, Inc. | Bufferless communication for redundant multithreading using register permutation |
GB2565338B (en) * | 2017-08-10 | 2020-06-03 | Mips Tech Llc | Fault detecting and fault tolerant multi-threaded processors |
US11778420B2 (en) | 2020-06-29 | 2023-10-03 | Ickovic & Bliss, Inc. | Systems, methods, and program products for digital PET identification |
CN112084071B (zh) * | 2020-09-14 | 2023-09-19 | 海光信息技术股份有限公司 | 一种计算单元运算加固方法、并行处理器及电子设备 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS60198645A (ja) | 1984-03-22 | 1985-10-08 | Fujitsu Ltd | デ−タ処理システム |
JPS62293441A (ja) | 1986-06-12 | 1987-12-21 | Nec Corp | デ−タ出力方式 |
US5594903A (en) * | 1991-02-26 | 1997-01-14 | Lynx Real-Time Systems, Inc. | Operating System architecture with reserved memory space resident program code identified in file system name space |
US5537559A (en) * | 1994-02-08 | 1996-07-16 | Meridian Semiconductor, Inc. | Exception handling circuit and method |
JPH1011309A (ja) | 1996-06-19 | 1998-01-16 | Hitachi Ltd | プロセッサ出力比較方法およびコンピュータシステム |
US7043728B1 (en) * | 1999-06-08 | 2006-05-09 | Invensys Systems, Inc. | Methods and apparatus for fault-detecting and fault-tolerant process control |
US6795895B2 (en) * | 2001-03-07 | 2004-09-21 | Canopy Group | Dual axis RAID systems for enhanced bandwidth and reliability |
US7139306B2 (en) * | 2001-03-14 | 2006-11-21 | Mercury Computer Systems, Inc. | Wireless communication systems and methods for long-code communications for regenerative multiple user detection involving pre-maximal combination matched filter outputs |
US6880112B2 (en) * | 2001-04-04 | 2005-04-12 | Nec Corporation | Method and apparatus for online detection and correction of faults affecting system-on-chip buses |
US7168008B2 (en) * | 2002-01-18 | 2007-01-23 | Mobitv, Inc. | Method and system for isolating and protecting software components |
JP2003316599A (ja) | 2002-02-22 | 2003-11-07 | Seiko Epson Corp | 集積回路 |
-
2003
- 2003-12-03 US US10/726,976 patent/US7584405B2/en active Active
-
2004
- 2004-12-02 JP JP2004349450A patent/JP2005166057A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
US7584405B2 (en) | 2009-09-01 |
US20050138485A1 (en) | 2005-06-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7584405B2 (en) | Fault-detecting computer system | |
US7861228B2 (en) | Variable delay instruction for implementation of temporal redundancy | |
US11263073B2 (en) | Error recovery for intra-core lockstep mode | |
KR101546033B1 (ko) | Smt 기계에서 비교 및 전달 명령어를 사용한 안정적 실행 | |
Reis et al. | SWIFT: Software implemented fault tolerance | |
Reis et al. | Automatic instruction-level software-only recovery | |
KR102484125B1 (ko) | 벡터 처리회로를 사용한 에러 검출 | |
US20080244354A1 (en) | Apparatus and method for redundant multi-threading with recovery | |
US8935678B2 (en) | Methods and apparatus to form a resilient objective instruction construct | |
US7467327B2 (en) | Method and system of aligning execution point of duplicate copies of a user program by exchanging information about instructions executed | |
JP2005129053A (ja) | フォールトトレラント・マルチコア・マイクロプロセッシング | |
Zarandi et al. | Two efficient software techniques to detect and correct control-flow errors | |
Nakka et al. | Processor-level selective replication | |
Sartor et al. | A novel phase-based low overhead fault tolerance approach for VLIW processors | |
JP2006252548A (ja) | 時間的冗長性を実施するための可変遅延命令 | |
US8745440B1 (en) | Computer-implemented system and method for providing software fault tolerance | |
Rebaudengo et al. | Software-level soft-error mitigation techniques | |
Maghsoudloo et al. | CCDA: Correcting control-flow and data errors automatically | |
Mokhtarpour et al. | PB-IFMC: A selective soft error protection method based on instruction fault masking capability | |
Haas | Fault-tolerant execution of parallel applications on x86 multi-core processors with hardware transactional memory | |
Carretero et al. | Implementing end-to-end register data-flow continuous self-test | |
Buchanan | A Fault Tolerant Core for Parallel Execution of Ultra Reduced Instruction Set (URISC) and MIPS Instructions | |
Braga et al. | Improving GPU Reliability with Software-Managed Pipeline Parity for Error Detection and Correction | |
Didehban | Software Techniques For Dependable Execution | |
Li et al. | Compiler-assisted soft error correction by duplicating instructions for VLIW architecture |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20061122 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070219 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070404 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070627 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20080107 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080407 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20080514 |
|
A912 | Re-examination (zenchi) completed and case transferred to appeal board |
Free format text: JAPANESE INTERMEDIATE CODE: A912 Effective date: 20081226 |