(57)【要約】【課題】  フォールトトレラントでかつ高可用性のコンピュータシステムを提供する。【解決手段】  本発明にかかるマイクロプロセッサの復号回路は、命令のフォールトトレラントバージョンと命令の非フォールトトレラントバージョンとを互いから区別して復号化するように構成される。マイクロプロセッサの実行回路は、命令のフォールトトレラントバージョンを冗長性チェックをともなって実行し、命令の非フォールトトレラントバージョンを冗長性チェックなしに実行するように構成される。【選択図】図２Ｂ
2005038420.tif 000002
【特許請求の範囲】
【請求項１】
対象を定めたフォールトトレラントコンピューティングのためのマイクロプロセッサであって、
命令のフォールトトレラントバージョンと該命令の非フォールトトレラントバージョンとを互いから区別して復号化するように構成された復号回路と、
前記命令の前記フォールトトレラントバージョンを冗長性チェックをともなって実行し、前記命令の前記非フォールトトレラントバージョンを冗長性チェックなしに実行するように構成された実行回路と
を具備するマイクロプロセッサ。
【請求項２】
前記実行回路は、
オペランドデータを受け取り、前記命令に関する演算を実行し、第１の結果を生成するように構成された第１の処理ユニットと、
前記オペランドデータを受け取り、前記演算を実行し、第２の結果を生成するように構成された第２の処理ユニットと、
前記第１の結果と第２の結果とを比較するように構成された比較器と
を具備する
請求項１に記載のマイクロプロセッサ。
【請求項３】
前記命令の前記フォールトトレラントバージョンに対し、前記比較が一致しない場合、前記処理ユニットによる前記実行と前記比較器による前記結果の比較とを、一致が発生するまで最大Ｎ回まで繰り返す
請求項２に記載のマイクロプロセッサ。
【請求項４】
前記第１および第２の結果が決して一致しない場合、機械チェックを実行する
請求項３に記載のマイクロプロセッサ。
【請求項５】
前記第１の処理ユニットと前記第２の処理ユニットとの両方に対し前記オペランドデータを提供するように構成されたレジスタファイル
をさらに具備する請求項２に記載のマイクロプロセッサ。
【請求項６】
中央処理装置（ＣＰＵ）における対象を定めたフォールトトレラントコンピューティングのための方法であって、
命令のフォールトトレラントバージョンに対応する第１の演算コードを復号化することと、
前記命令の非フォールトトレラントバージョンに対応する第２の演算コードを復号化することと、
前記第１の演算コードを冗長性チェックをともなって実行することと、
前記第２の演算コードを冗長性チェックなしで実行することと
を含む方法。
【請求項７】
複数命令のセットを、該セットの各命令のフォールトトレラントバージョンと、非フォールトトレラントバージョンとがあるように提供する
請求項６に記載の方法。
【請求項８】
前記命令のセットは、
算術演算
を含む
請求項７に記載の方法。
【請求項９】
前記命令のセットは、
論理演算
を含む
請求項７に記載の方法。
【請求項１０】
前記第１の演算コードの実行は、
第１の処理ユニットにオペランドデータを提供することと、
第２の処理ユニットに前記オペランドデータを提供することと、
前記第１の処理ユニットにより前記オペランドデータに対して演算を実行することであって、第１の結果を生成することと、
前記第２の処理ユニットにより前記オペランドデータに前記演算を実行することであって、第２の結果を生成することと、
前記第１の結果と第２の結果とを比較することと
を含む
請求項６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、包括的にはコンピュータシステムに関する。
詳細には、本発明は、フォールトトレラントでかつ高可用性のコンピュータシステムに関する。
【背景技術】
【０００２】
デジタル処理においてフォールトトレランスを提供する先のソリューションは、ハードウェアベース、ソフトウェアベースまたはそれら両方の何らかの組合せのいずれかである。
フォールトトレランスを、ハードウェアにおいて、２つの完全な中央処理装置（ＣＰＵ）をロックステップで実行するか、または３つのＣＰＵを「投票（voting）」構成で実行することにより、提供することができる。
たとえば、システムは、同じ命令ストリームを実行する３つのＣＰＵを、機能を複製する３つの別個の主記憶装置および別個の入出力装置とともに採用することができ、そのため、各タイプの要素のうちの１つに障害が発生した場合に、システムは動作し続ける。
不都合なことに、かかるシステムは、必要なＣＰＵの数に関するだけでなく、ＣＰＵをサポートするインフラストラクチャ（メモリ、電源、冷却システム等）に関しても、著しいシステムオーバーヘッドを含む。
【０００３】
ソフトウェアベースのソリューションは、通常、少なくとも３回、プログラムを完全に再実行することに頼る。
これにより、有効な実行時間が、プログラムを１回しか実行しない場合よりも３倍長くなる。
組合せ方式には、余分のハードウェア（たとえば、２倍のハードウェア）と余分の処理とがともに必要である。
余分の処理は、ソフトウェアチェックポインティングの形態をとる場合がある。
ソフトウェアチェックポインティングは、エラー時に特定の命令シーケンスを「やり直す」能力に関連する。
【特許文献１】米国特許第５，３１７，７２６
【特許文献２】米国特許第５，４８８，７１６
【特許文献３】米国特許第５，８４５，０６０
【特許文献４】米国特許第５，６００，７８４
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上述した従来のソリューションは、コストおよび／またはシステム性能に関して費用がかかる。
そのため、フォールトトレラントなデジタル処理を提供するためのシステムおよび方法の改善が非常に望ましい。
【課題を解決するための手段】
【０００５】
本発明の一実施形態は、対象を定めたフォールトトレラントコンピューティングのためのマイクロプロセッサに関する。
マイクロプロセッサの復号回路は、命令のフォールトトレラントバージョンと命令の非フォールトトレラントバージョンとを互いから区別して復号化するように構成される。
マイクロプロセッサの実行回路は、命令のフォールトトレラントバージョンを冗長性チェックをともなって実行し、命令の非フォールトトレラントバージョンを冗長性チェックなしに実行するように構成される。
【０００６】
本発明の別の実施形態は、中央処理装置（ＣＰＵ）における対象を定めたフォールトトレラントコンピューティングのための方法に関する。
本方法は、命令のフォールトトレラントバージョンを復号化することであって、それによって第１の演算コードを生成する、復号化すること、および命令の非フォールトトレラントバージョンを復号化することであって、それによって第２の演算コードを生成する、復号化することを含む。
第１の演算コードは冗長性チェックをともなって実行される。
第２の演算コードは冗長性チェックなしで実行される。
【０００７】
本発明の別の実施形態は、コンピュータプログラム製品に関する。
本プログラム製品は、冗長性チェックをともなって実行される第１のタイプのコンピュータ読取可能命令と、非冗長的に実行される第２のタイプのコンピュータ読取可能命令と、を含む。
【発明を実施するための最良の形態】
【０００８】
上述したように、フォールトトレラントデジタル処理の従来のシステムおよび方法には、さまざまな不都合がある。
本発明は、改善されたフォールトトレラントコンピューティングのシステムおよび方法に関する。
【０００９】
最新のマイクロプロセッサの慣用的な命令セットは、概して性能に対して最適化された命令から構成される。
本発明の実施形態によれば、フォールトトレラントの特徴を有する特殊命令を追加することにより、かかる慣用的な命令セットを補足する。
たとえば、算術または論理演算は、２つのタイプまたはバージョンを有してもよい。
非フォールトトレラントバージョンは、高速性能に対して構成される実行パスを使用し、一方フォールトトレラントバージョンは、結果の正当性を確実にするために冗長性チェックを有するパスを使用する。
対照的に、従来のＣＰＵは、通常、算術および論理関数に対しかかる検査オプションを提供しない。
これは、これらの関数の検査が、通常低速かつ複雑であり、速度に関して性能を低減させるためである。
マイクロプロセッサにおける、キャッシュ、レジスタ、トランスレーション・ルックアサイド・バッファ（translation lookaside buffer（ＴＬＢ））等の他の構造は、通常、パリティビットまたは誤り訂正符号化によって検査する。
【００１０】
本発明の実施形態は、いくつかのＣＰＵ命令の特殊バージョンを利用して、対象を定めてフォールトトレランスを提供する。
アプリケーション内の特定の動作を、フォールトトレランスに対する対象として定めてもよく、他の動作（または他のプログラム全体）を、冗長性チェックによるオーバーヘッドなしに実行してもよい。
【００１１】
かかる対象を定めたフォールトトレランスは、従来のソリューションに対しさまざまな利点を有する。
それを、すべてのシステムプロセスに適用する代わりに、選択的にシステムプロセスに適用してもよい。
かかる資源の専用化を正当化するほど重要ではないか、または可能な限り高速で（冗長性チェックによって速度が低下することなく）実行することが望ましいプロセスがある。
たとえば、プリントスプーラプログラムは、フォールトトレランスを必要とするほど重要でない可能性がある。
本発明の実施形態によれば、対象を定めたフォールトトレランスにより、かかる重要ではないプログラムを特別な冗長性チェック命令なしに書くことができ、それによって重要でないプログラムは、貴重なシステム資源を不必要に拘束することがない。
一方、冗長性チェックを必要とする重要なプログラムまたはプロセスを、そのフォールトトレラント実行を提供するように特殊命令を使用して書くことができる。
その選択は、アプリケーションプログラマに任されてもよい。
【００１２】
図１は、本発明の一例としての実施形態による対象を定めたフォールトトレランスのためのＣＰＵ回路の概略図である。
ＣＰＵ回路は、フェッチユニット１０２と、命令キャッシュ１０４と、命令デコーダユニット１０６と、レジスタロード／ストア回路１０８と、浮動小数点レジスタファイル１１０と、第１の浮動小数点ユニット（ＦＰＵ＃１）１１２と、第２の浮動小数点ユニット（ＦＰＵ＃２）１１４と、ハードウェア比較器および関連フラグ１１６と、を備える。
【００１３】
当然ながら、ＣＰＵは、図示するもの以外の他のコンポーネントおよび接続を備える。
図示するコンポーネントは、図２Ａおよび図２Ｂに関連して後に論考するフォールトトレラント動作例に関連するものを含む。
【００１４】
本発明の実施形態によれば、命令デコーダ回路１０６を、命令のフォールトトレラントバージョンと非フォールトトレラントバージョンとを互いから区別して復号化するように構成する。
フォールトトレラント命令を、第１の演算コード（ｏｐコード）によって表すことができ、一方同じ命令の非フォールトトレラントバージョンを、第２のｏｐコードによって表すことができる。
ＣＰＵ回路を、命令のフォールトトレラントバージョンを冗長性チェックをともなって実行し、命令の非フォールトトレラントバージョンを冗長性チェックなしに実行するように構成する。
【００１５】
一実施形態によれば、フラグ（１１６参照）は、第１の「有効」フラグと第２の「比較結果」フラグとを有してもよい。
有効フラグを使用して、格納された結果の妥当性を示すことができる。
比較結果フラグは、関連する比較器によって行われた比較の結果を示すことができる。
【００１６】
図２Ａは、本発明の実施形態による命令のフォールトトレラントバージョンを使用する命令シーケンス例を示す。
命令シーケンス例は、フォールトトレラント乗算命令（ＦＴ＿ＭＵＬＴ）を含む。
他の例には、フォールトトレラント加算命令（ＦＴ＿ＡＤＤ）、他のフォールトトレラント算術命令およびフォールトトレラント論理命令（ＦＴ＿ＡＮＤ、ＦＴ＿ＮＡＮＤ、ＦＴ＿ＯＲ、ＦＴ＿ＸＯＲ等）がある。
【００１７】
図２Ａのシーケンスは、第１のレジスタＲ１にオペランドｘをロードし、第２のレジスタＲ２にオペランドｙをロードすることで開始する。
レジスタにオペランドをロードした後、乗算演算を実行する。
【００１８】
通常の非フォールトトレラント乗算（ＭＵＬＴ）では、Ｒ１およびＲ２の内容は、第３のレジスタＲ３に格納される結果を生成する浮動小数点ユニットに直接送られる。
Ｒ３における結果を、ＭＵＬＴ演算に対して有効であると仮定する。
【００１９】
しかしながら、ここで、フォールトトレラント乗算（ＦＴ＿ＭＵＬＴ）を実行する。
ＦＴ＿ＭＵＬＴ演算は、ＭＵＬＴ演算より低速でありより複雑である。
かかるフォールトトレラント演算を実行する一実施形態に含まれる特定のステップを、図２Ｂに関して以下のように説明する。
【００２０】
図２Ｂは、本発明の実施形態によるフォールトトレラント命令の実行中にＣＰＵにおいて実行されるプロセスのフローチャートである。
プロセスは、第１および第２のレジスタ（Ｒ１およびＲ２）の内容を第１の浮動小数点ユニット（ＦＰＵ＃１）と第２の浮動小数点ユニット（ＦＰＵ＃２）との両方に送出することによって開始する。
図２Ｂに示すように、これを、効率のために２つの並列ステップ（２０２−１および２０２−２）において行ってもよい。
たとえば、回路を、図１に示すように構成してもよく、Ｒ１およびＲ２の内容を、レジスタファイル１１０からＦＰＵ＃１  １１２とＦＰＵ＃２  １１４との両方に並列にロードする。
【００２１】
そして、ＦＰＵ＃１および＃２の各々は、オペランドに対し指定された演算を実行する（それぞれ２０４−１および２０４−２）。
ＦＴ＿ＭＵＬＴの場合、演算は２つのオペランドの乗算である。
乗算の結果を、各ＦＰＵによって比較器に送出する２０６−１および２０６−２。
比較器は、好ましくは、迅速に２つの結果を比較しそれらが一致するか一致しないかを判断する２０８ように設計されたハードウェア回路１１６からなる。
【００２２】
２つの結果が一致すると、有効な結果を第３のレジスタＲ３に格納する２１０。
結果を、比較器に関連する有効フラグを設定することにより、有効であると指示してもよい。（有効フラグのリセットは、無効な結果を示す。）
結果が一致したことが見出されることで、実行された演算の精度が確認される。
【００２３】
一方、結果が一致しない場合、演算を繰り返すかまたはやり直す最大回数であるＮ回に達したか否かを判断する２１２。
カウンタ装置を使用して、繰返しの回数を追跡してもよい。
１つの特定の実施態様では、Ｎは３回であってもよい。
あるいは、Ｎは１回、２回、４回またはそれより多くであってもよい。
一実施形態では、数Ｎは、選択可能であり得るようにフォールトトレラント命令のパラメータであってもよい。
【００２４】
繰返しの最大Ｎ回がすでに実行された場合、機械チェックを実行して２１４ＣＰＵの明らかに間違った演算をチェックおよび／または診断してもよい。
機械チェックの結果としてエラーメッセージを生成してもよい。
【００２５】
繰返しの最大Ｎ回に達していない場合、プロセスは戻り、ＦＰＵが演算を再実行し２０４、それらの結果を比較器に送出する２０６。
再び、結果が一致するか否かを判断する２０８。
この時一致する場合、Ｒ３に有効な結果を格納する２１０。
一致しない場合、再び最大繰返し回数に達したか否かを判断する２１２。
一致せずに最大回数に達した場合、機械チェックを実行してもよい２１４。
そうでない場合、プロセスは再び戻ってＦＰＵの演算を繰り返す。
【００２６】
一実施形態では、比較エラーのログを保持する（すなわち、比較結果が一致しない場合）。
たとえば、演算の第１の反復で比較結果が一致しないが後の反復で一致する場合、機械チェックを実行しなかった場合であっても、比較エラー（複数可）のログを記録してもよい。
ロギングを、結果が一致しないと判断された２０８後に追加のステップとして実施してもよい。
たとえば、ロギングを、図２のブロック２０８と２１２との間の追加のステップとして実行してもよい。
【００２７】
図３は、本発明の実施形態による対象を定めたフォールトトレランスの２つの異なるレベルを示す図である。
【００２８】
対象を定める第１のレベルは、プログラムレベルである。
本発明の実施形態により、プログラムを、何らかのフォールトトレラント（Ｆ−Ｔ）態様を有するかまたはフォールトトレラント態様を有していないように書くことができる。
フォールトトレラント態様を有するプログラムを、プログラムＡ３０２として示し、一方フォールトトレラント態様のないプログラムをプログラムＢ３０３として示す。
プログラムＡ３０２は、１つまたは複数の命令のフォールトトレラントバージョンを使用する少なくとも１つのルーチン３０４を含む。
一方、プログラムＢ３０３は、命令のいかなるフォールトトレラントバージョンも使用しないルーチン３０６のみを含む。
言い換えれば、本発明の実施形態により、プログラムを何らかのフォールトトレランスを含むか含まないものとしての対象に定めることができる。
いかなるフォールトトレランスもないプログラムは、最高速で実行するはずである。
【００２９】
対象を定める第２のレベルは、プログラム内におけるルーチンまたは命令のシーケンスごとか、または命令ごとである。
図３においてプログラムＡ３０２を考慮する。
プログラムＡ３０２は、フォールトトレラント命令を使用するように対象を定めてもよいいくつかのルーチン３０４と、フォールトトレラント命令を使用しない他のルーチン３０６と、を有する。
フォールトトレランスに対して対象が定められたルーチン３０４は、何らかの態様において他より重要であり得る。
たとえば、それらの計算を、正確であることが重要であるとみなしてもよく、そのためそれらの計算に対し、フォールトトレラント命令を使用して実行されるように対象を定めてもよい。
一方、フォールトトレラント命令を使用しないルーチン３０６は、計算精度に関してそれほど重要でなくてもよい。
【００３０】
本発明の実施形態は、従来のフォールトトレラントコンピューティング技術に対してさまざまな利点を有する。
フォールトトレランスを提供するために必要なハードウェアおよび／またはソフトウェアオーバヘッドを低減することができる。
これを、プログラマーがプログラム内部の特定の命令に対して「正確さの保証（assurance of correctness）」により対象を定めることができるようにすることによって行う。
この方式は、複数のＣＰＵと余分の関連するインフラストラクチャとを必要としないため、必要なハードウェアが低減する。
ハードウェア自体が、対象が定められているか否かに基づいて冗長性チェックを実行するため、ソフトウェア実行時間は比較的高速に維持される。
【００３１】
上記説明では、本発明の実施形態の完全な理解を提供するためにいくつかの特定の詳細を与えている。
しかしながら、発明の例示した実施形態の上記説明は、網羅的であるようにも、発明を開示した厳密な形態に限定するようにも、意図されていない。
当業者は、本発明を、特定の詳細のうちの１つまたは複数なしに、または他の方法、コンポーネント等とともに、実施することができる、ということを認めるであろう。
一方で、発明の態様を不明瞭にするのを回避するために、既知の構成または動作について詳細に示しも説明もしていない。
本明細書において、発明の特定の実施形態および発明に対する実施例を、例示の目的で説明しているが、当業者が認めるように、発明の範囲内でさまざまな等価の変更が可能である。
【００３２】
上記詳細な説明に鑑みて、発明に対しこれらの変更を行うことができる。
特許請求の範囲で使用する用語を、発明を明細書および特許請求の範囲で開示する特定の実施形態に限定するように解釈するべきではない。
むしろ、発明の範囲は、特許請求項によって確定されるべきであり、それらを、特許請求の範囲の解釈の確立した原則に従って解釈すべきである。
【図面の簡単な説明】
【００３３】
【図１】発明の実施形態による対象を定めたフォールトトレランスのためのＣＰＵ回路の一例としての概略図であって、マイクロプロセッサ設計の当業者は、同じ基本機能を実行する他の設計が存在し得ることを理解するであろう。
【図２Ａ】発明の実施形態による命令のフォールトトレラントバージョンを使用する一例としての命令シーケンスの図である。
【図２Ｂ】発明の実施形態によるフォールトトレラント命令の実行中にＣＰＵにおいて実行されるプロセスのフローチャートの図である。
【図３】本発明の実施形態によるターゲットフォールトトレランスの２つの異なるレベルを示す図である。
【符号の説明】
【００３４】
１０２・・・フェッチユニット、
１０４・・・命令キャッシュ、
１０６・・・命令デコーダ、
１０８・・・レジスタロード／ストア、
１１０・・・レジスタファイル、
【図１】
2005038420.tif 000003
【図２Ａ】
2005038420.tif 000004
【図２Ｂ】
2005038420.tif 000005
【図３】
2005038420.tif 000006