(57)【要約】【課題】  マルチプロセッサシステムにおいて発生しうる重大なエラーを防止する。【解決手段】  本発明は、順番のあるキューに格納されたトランザクションのトランザクションフェーズに関して第１のキューループシーケンスを実施し、トランザクションフェーズが終了しなかった順番のあるキューに格納されたトランザクションに対するトランザクションフェーズの終了をスプーフすることと、第１のキューループシーケンスの終了後に、順番のあるキューに格納されたトランザクションの別のトランザクションフェーズに関して第２のキューループシーケンスを実施し、別のトランザクションフェーズが終了しなかった順番のあるキューに格納されたトランザクションに対する別のトランザクションフェーズの終了をスプーフすることとを含む。【選択図】図３
2004334863.tif 000002
【特許請求の範囲】
【請求項１】
順番のあるキュー（１１１、１２１）をドレインする方法であって、
前記順番のあるキューに格納されたトランザクションのトランザクションフェーズに関して第１のキューループシーケンス（３１０、３１１）を実施することであって、該第１のキューループシーケンスが、前記トランザクションフェーズが終了しなかった前記順番のあるキューに格納された前記トランザクションに対する前記トランザクションフェーズの終了をスプーフする実施することと、
前記第１のキューループシーケンスの終了後に、前記順番のあるキューに格納された前記トランザクションの別のトランザクションフェーズに関して第２のキューループシーケンス（３２０、３２１、３２２、３２３）を実施することであって、該第２のキューループシーケンスが、前記別のトランザクションフェーズが終了しなかった前記順番のあるキューに格納された前記トランザクションに対する前記別のトランザクションフェーズの終了をスプーフする実施することと、
とを含む順番のあるキューをドレインする（drain）方法。
【請求項２】
前記最初に示したトランザクションフェーズは、
スヌープフェーズ
を含み、
前記別のトランザクションフェーズは、
応答フェーズ
を含む
請求項１に記載の順番のあるキューをドレインする方法。
【請求項３】
前記第１のキューループシーケンスと前記第２のキューループシーケンスとのうちの少なくとも１つは、
ストール状態（３１１、３２１、３２２、３２３）を実施することであって、それにより前記スプーフを特定のプロトコルに従わせるようにする実施すること
を含む
請求項１に記載の順番のあるキューをドレインする方法。
【請求項４】
前記ストール状態を実施することは、
複数のストール状態（３２１、３２２、３２３）を実施すること
を含む
請求項３に記載の順番のあるキューをドレインする方法。
【請求項５】
前記第１のキューループの動作は、前記最初に示したトランザクションフェーズに関連するトランザクションフェーズポインタ（４３２）が所定値に達するまで続き、
前記第２のキューループの動作は、前記別のトランザクションフェーズに関連するトランザクションフェーズポインタ（４３３）が前記所定値に達するまで続く
請求項１に記載の順番のあるキューをドレインする方法。
【請求項６】
前記所定値は、前記最初に示したトランザクションフェーズおよび前記別のトランザクションフェーズとは異なるトランザクションフェーズに関連するトランザクションフェーズポインタ（４３１）に対応する
請求項５に記載の順番のあるキューをドレインする方法。
【請求項７】
重大なエラーを検出すること
をさらに含み、
前記第１のキューループと前記第２のキューループシーケンスとを実施することは、前記重大なエラーを検出することに応答する
請求項１に記載の順番のあるキューをドレインする方法。
【請求項８】
前記第１のキューループシーケンスと、前記第２のキューループシーケンスとを実施する間に、前記重大なエラーに関連するバスから特定のシステム資源を切り離すこと
をさらに含む請求項７に記載の順番のあるキューをドレインする方法。
【請求項９】
順番のあるキュー（１１１、１２１）をドレインするシステムであって、
第１のドレイン状態（３１０）と、
第２のドレイン状態（３２０）と
を有する状態機械（３００）
を具備し、
該状態機械は、処理中のトランザクションに関連する第１のトランザクションフェーズポインタを、前記トランザクションに対するトランザクションフェーズの終了をスプーフする前記第１のドレイン状態を用いて、順番に進めるように動作可能であり、
前記状態機械は、前記処理中のトランザクションに関連する第２のトランザクションフェーズポインタを、前記トランザクションに対する別のトランザクションフェーズの終了をスプーフする前記第２のドレイン状態を用いて、順番に進めるようにさらに動作可能である
順番のあるキューをドレインするシステム。
【請求項１０】
前記状態機械により前記第１のトランザクションフェーズポインタを順番に進めることは、該第１のトランザクションフェーズポインタが第３のトランザクションフェーズポインタに等しくなるまで続き、
前記状態機械により前記第２のトランザクションフェーズポインタを順番に進めることは、該第２のトランザクションフェーズポインタが前記第３のトランザクションフェーズポインタに等しくなるまで続く
請求項９に記載の順番のあるキューをドレインするシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサシステムにおいて、順番のあるキューをドレインするシステムおよび方法に関する。
【０００２】
［関連出願の相互参照］
本出願は、「System and Method for Transaction Time-Out」と題する同時出願され同時係属中の本願と同一の譲受人に譲渡された米国特許出願第１０／４３５，１２７号と、「Systems and Methods Controlling Transaction Draining for Error Recovery」と題する同第１０／４３４，９２０号と、「System and Method For Error Capture and Logging in Computer Systems」と題する同第１０／４３４，９２５号と、に関連する。
【背景技術】
【０００３】
今日、コンピュータシステムが、並列および／または分散処理を提供するように構成された複数のプロセッサをしばしば含み、極めて複雑であることは珍しいことではない。
たとえば、マルチプロセッサコンピュータシステムは、しばしば、複数の主処理ユニット（ＭＰＵ）を含むのみではなく、メモリプロセッサ等の複数のサポートプロセッサまたはエージェントを含む場合もある。
これらのあらゆるプロセッサを、メモリ、入出力デバイス、ディスクデバイス等の他のシステム資源とともに、あらゆるバスによって可能になる通信によりコンピュータシステムを通して分散させることができる。
たとえば、コンピュータシステムは、主処理ユニット（ＭＰＵ）、エージェントおよび／またはメモリ等の複数のシステム資源を有する、本明細書ではセルまたはセルカードと呼ぶ複数のサブモジュールと、それらの上に配置されたバスと、を備える場合がある。
サブモジュールのシステム資源は、他のシステム資源に対し要求を行いかつ／または他のシステム資源からの要求に対処することができる。
かかるシステム資源を、システムの同じサブモジュールおよび／または他のサブモジュールと連結することができる。
【０００４】
複数のシステム資源からの要求に順序正しくかつ予測可能な方法で対処するために、システムは、あらゆるプロトコルおよびトランザクションキューを実施することができる。
たとえば、プロトコルは、例えば要求、スヌープおよび応答等の複数のトランザクションが実行されるべき順序および、恐らくは、かかるトランザクションの各々が終了するために提供されるべき複数のバス周期、を確定することができる。
同様に、トランザクションキューは、特定のシステム資源に関して「処理中の（in-process）」特定のトランザクションに関する情報を格納することができる。
たとえば、特定のトランザクションが関連するシステム資源によって適切な順序で確実に実施されるように、順番のある（in-order）キューを実施することができる。
したがって、順番のあるキューは、要求フェーズ（たとえば、データを要求すること）と、スヌープフェーズ（たとえば、要求されたデータがローカルに入手可能であるか否かを判断するためにローカルキャッシュに問合せること）と、応答フェーズ（たとえば、要求されたデータを含むデータパケットを提供すること）と、を含む場合があるような、それらの順番のあるフェーズを通して複数のトランザクション（たとえば、８つまでの未解決の（outstanding）トランザクション）と、をたどることができる。
【０００５】
上述したシステム資源のうちの任意の１つに関連するような、どんな態様であれ、システムの動作中のエラーがシステムにより検出される場合、エラー信号を生成して、適切なシステム資源に通知することができる。
システム資源単位の動作に分離されておりかつ／または回復可能な動作に関連しているようなエラーは、重大でない可能性がある。
しかしながら、プロセッサバス全体の初期化を必要とし（本明細書では、バス初期化またはＢＩＮＩＴエラーと呼ぶ）、したがってシステムバス上のシステム資源の初期化を必要とするようなエラーは実際に、重大である可能性がある。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
マルチプロセッサシステムにおけるバス初期化エラーまたは同様の重大なエラーにより、要求および応答を発行しおよび／またはそれらに応答する種々のシステム資源の相互依存性のために、障害が広がる可能性があり、システム全体の障害になる場合さえある。
単一プロセッサシステムは、すべての保留中のトランザクションをパージし新たな命令をフェッチすることにより、バス初期化エラーから回復することができる可能性があるが（たとえば、「ソフトブート（soft booting）」）、マルチプロセッサシステムのバス初期化では、「ハード」リセットが必要なシステム「ロックアップ（lock-up）」がもたらされる可能性があり、またはエラー源を分離するために有用なオペレーティングシステム状態ダンプを実行することが妨げられる可能性がある。
たとえば、バス初期化エラーにより、特定のシステム資源が、システム資源がその上でトランザクションを実行しているバスが初期化された時に、予想されるトランザクション応答を待って「ハングする（hang）」可能性がある。
初期化されたバス上のシステム資源は、それらの関連する順番のあるキューをたどるのをやめると、初期化されたバスにはないシステム資源に対して、待ちの応答を提供するのをやめることになる。
したがって、バス初期化エラーまたは同様のエラーにより、システム全体がデッドロックするカスケード故障がもたらされる可能性がある。
【０００７】
バス初期化エラーがハードリセットを必要とするシステムロックアップをもたらす上述した状況は、高可用性（ＨＡ）システムでは望ましくない、ということを理解しなければならない。
さらに、かかる結果は、システム「クラッシュダウン（crash-down）」またはオペレーティングシステム（ＯＳ）がエラーの原因を特定するのを容易にするための、ディスクまたは他の媒体に対するすべてのメモリのダンプを行わず、代りにシステム初期化を必要とし、それによりエラー時のシステムの状態を分析することができなくなる。
【課題を解決するための手段】
【０００８】
順番のあるキューをドレインする方法であって、本方法は、順番のあるキューに格納されたトランザクションのトランザクションフェーズに関して第１のキューループシーケンスを実施することであって、第１のキューループシーケンスが、トランザクションフェーズが終了しなかった順番のあるキューに格納されたトランザクションに対するトランザクションフェーズの終了をスプーフ（spoof）する、実施すること、および第１のキューループシーケンスの終了後に、順番のあるキューに格納されたトランザクションの別のトランザクションフェーズに関して第２のキューループシーケンスを実施することであって、第２のキューループシーケンスが、別のトランザクションフェーズが終了しなかった順番のあるキューに格納されたトランザクションに対する別のトランザクションフェーズの終了をスプーフする、実施することとを含む。
【０００９】
順番のあるキューをドレインするシステムであって、本システムは、第１のドレイン状態と第２のドレイン状態とを有する状態機械を備え、この状態機械は、処理中のトランザクションに関連する第１のトランザクションフェーズポインタを、トランザクションに対するトランザクションフェーズの終了をスプーフする第１のドレイン状態を用いて、順番に進めるように動作可能であり、状態機械は、処理中のトランザクションに関連する第２のトランザクションフェーズポインタを、トランザクションに対する別のトランザクションフェーズの終了をスプーフする第２のドレイン状態を用いて、順番に進めるようにさらに動作可能である。
【００１０】
順番のあるキューをドレインするためのコンピュータプログラムロジックが記録されたコンピュータ読取可能媒体を有するコンピュータプログラム製品であって、本コンピュータプログラム製品は、順番のあるキューに格納されたトランザクションのトランザクションフェーズに関して第１のキューループシーケンスを実施するコードであって、第１のキューループシーケンスが、第１のトランザクションフェーズポインタが所定値に達するまで、トランザクションフェーズが終了しなかった順番のあるキューに格納されたトランザクションに対するトランザクションフェーズの終了をスプーフするものである、コードと、順番のあるキューに格納されたトランザクションの別のトランザクションフェーズに関して第２のキューループシーケンスを実施するコードであって、第２のキューループシーケンスが、第２のトランザクションフェーズポインタが所定値に達するまで、別のトランザクションフェーズが終了しなかった順番のあるキューに格納されたトランザクションに対する別のトランザクションフェーズの終了をスプーフするものである、コードと、を含む。
【発明を実施するための最良の形態】
【００１１】
本発明の実施形態は、重大なバス初期化エラー等の特定のシステムエラーを認識し、システムエラーによって直接影響を受けるシステム資源に関連する１つまたは複数のキューを空にするように動作する、システムおよび方法を提供する。
一実施形態によれば、バス初期化エラーを検出し、初期化されるバス上のプロセッサを、初期化の前にバスから離した状態にしている間に、それらのプロセッサに関連する順番のあるキューのドレインを行う。
本発明の実施形態によるキューのドレインは、キューに入れられたトランザクションにしたがって、初期化されるバスに関連しないものを含むあらゆるシステム資源に対し、応答、たとえばヘッダおよび／または任意のデータ要素を含むデータパケットを提供し、それにより、あらゆるシステム資源に対しトランザクションの終了をスプーフする。
【００１２】
本発明の実施形態によるキューのドレインは、順番のあるキューに示されるトランザクションフェーズがシステムの動作プロトコルと一貫性のある順序でキューからドレインされることを確実にする、階層的な方法で行う。
たとえば、本発明の実施形態により、初期のトランザクションフェーズに関連するすべてのトランザクションを、後のトランザクションフェーズに関連するいかなるトランザクションよりも前にキューからドレインする。
一実施形態による動作時、キューに入れられたスヌープトランザクションフェーズからのパケット（packets off）の生成に続いてキューに入れられた応答トランザクションフェーズからパケットを生成するように、順番のあるキューをドレインする。
【００１３】
本発明の実施形態は、バス上の種々のトランザクションをたどるために通常動作時に用いられる、順番のあるキューのトランザクションポインタについて、キューに入れられたトランザクションに歩を進めシステムプロトコルに準拠するパケットを生成するための、状態機械を実施する。
状態機械は、たとえば、まずまだスヌープフェーズを通過していないスヌープフェーズの各トランザクションに歩を進め、適切なシステム資源にパケットを発行してもよい。
その後、状態機械は、応答フェーズを通過していない各トランザクションに歩を進め、適切なパケットを発行してもよい。
本発明の実施形態によるかかる状態機械の動作により、システム内部のカウンタが同期するように保持する。
さらに、かかる状態機械の動作を利用して、キューが詰る（wedge）ことがないようにしてもよく、それによりシステム資源がタイムアウトするかまたは他の方法で処理を継続しなくなることが防止される。
【００１４】
本発明の実施形態によってキューをドレインすることは、システムの正常な（graceful）終了および／または回復を提供することに関し、特に重大なシステムエラーの原因の診断を容易にするために、特に有用である、ということを理解しなければならない。
たとえば、本発明の実施形態により、オペレーティングシステム（ＯＳ）が、バス初期化エラーの原因の分析に対して有用な、メモリ状態をディスク等にダンプすることが容易になる。
【００１５】
図１Ａを参照すると、本発明の実施形態が実施されるコンピュータシステムの一部が、サブモジュールまたはセルコントローラ１００として示されている。
サブモジュール１００が一部を形成するホストシステムは、複数のＩｎｔｅｌ  ＩＴＡＮＩＵＭプロセッサを実施するＨｅｗｌｅｔｔ  Ｐａｃｋａｒｄ  ｒｘまたはｓｘシリーズサーバシステム等のマルチプロセッサシステムを備えてもよい。
【００１６】
サブモジュール１００の図示する実施形態は、主処理ユニット（ＭＰＵ）、メモリプロセッサ、メモリおよび／または同様のもの（すべて図示せず）等のあらゆるシステム資源間の通信を可能にするために利用してもよいような、ここではバス１０１および１０２として示す複数のバスを含む。
サブモジュール１００はさらに、関連する１つまたは複数のプロセッサ（たとえばメモリプロセッサ）と関連するバス（たとえば、バス１０１および１０２のうちの対応するもの）との間のデータ通信を調停してもよいような、複数のプロセッサインタフェース、ここではプロセッサインタフェース１１０および１２０を含む。
かかる通信を、サブモジュール１００上に配置されるかホストシステムの別の場所（たとえば、サブモジュール１００に対応する１つまたは複数の他のサブモジュール）に配置されるかに係らず、上述した関連するプロセッサと、ホストシステムのＭＰＵ、メモリプロセッサ、メモリ等の他のあらゆるシステム資源と、の間の通信を可能にするために利用してもよい。
【００１７】
図示する実施形態のプロセッサインタフェース１１０および１２０は、プロセッサ入力ブロック（ＰＩＮ）、ここでは各々プロセッサインタフェースブロック１１３および１２３と、プロセッサ出力ブロック（ＰＯＵＴ）、ここでは各々プロセッサ出力ブロック１１４および１２４と、プロセッサインタフェースデータパス（ＰＩＤＰ）、ここではプロセッサインタフェースデータパス１１５および１２５と、を備える。
プロセッサインタフェース１１０および１２０の図示する実施形態は、さらに、各々プロセッサインタフェース順番のあるキュー（ＰＩＱ）１１２および１２２を備え、あらゆるトランザクションたどることにより、システムプロトコルを実施しおよび／または他の方法で上述した通信の制御されたおよび予測可能な調停を提供する。
図示する実施形態のプロセッサインタフェース順番のあるキュー１１２および１２２は、各々順番のあるキュー（ＩＯＱ）１１１および１２１を含む。
図示する実施形態の順番のあるキュー１１１および１２１は、オーバーライディングプロトコルによる順序でトランザクションの終了を確実にするためにトランザクションフェーズをたどる。
【００１８】
図１Ｂ−１および図１Ｂ−２は、図１Ａのサブモジュール１００のプロセッサインタフェースの実施形態に関する詳細をさらに示す。
図１Ｂ−１および図１Ｂ−２の実施形態において分かるように、プロセッサインタフェース順番のあるキュー１１２は、順番のあるキュー１１１に入れられるトランザクションのフェーズ（要求フェーズ、スヌープフェーズおよび応答フェーズ）を制御するように動作可能な制御信号要求ポインタ（req_ptr）、スヌープポインタ（snp_ptr）および応答ポインタ（rsp_ptr）を提供する順番のあるキュー制御モジュール１３１を含む。
【００１９】
図２に注目すると、一実施形態による、順番のあるキュー１１１のエントリの一部、たとえば、８エントリ順番のあるキューのスライスが示されている。
特に、図示する実施形態の順番のあるキュー１１１は、関連するプロセッサにより終了のあらゆるフェーズにおけるトランザクションに応答してもよいような、エントリ２０１および２０２を含む。
通常動作時、順番のあるキュー１１１は、スヌープフェーズおよび応答フェーズからシステムパケットを生成するためにプロセッサ入力ブロック１１３およびプロセッサ出力ブロック１１４とインタフェースし、これにより同時にシステムに複数のパケットを生成する能力を有する。
【００２０】
図２の順番のあるキュー１１１は、上述した制御信号の制御下で、トランザクションを適切なフェーズで伝播させ最終的に順番のあるキュー１１１から出すように動作可能なマルチプレクサ２１１および２１２を含む。
たとえば、マルチプレクサ２１１を、初期のトランザクションフェーズ、ここでは「スヌープフェーズ」に関連付けてもよく、マルチプレクサ２１２を、後のトランザクションフェーズ、ここでは「応答フェーズ」に関連付けてもよい。
マルチプレクサ２１１および２１２を、キューに入れられたトランザクションに付随するパケットを生成するように独立して、好ましくは同時に動作させてもよいが、特定のトランザクションは、その応答フェーズにおける処理の前にスヌープフェーズを終了しなければならず、これにより順番のあるキュープロトコルを確定する。
【００２１】
通常動作時、上述したポインタは、順番のあるキュー１１１のトランザクションがある種々のフェーズをたどる。
これらのポインタは、適切なパケットが生成されトランザクションのフェーズに関連付けられるにしたがってキュー内の至るところを移動する（move up and down）。
しかしながら、バス初期化（ＢＩＮＩＴ）エラー等の重大なエラーが検出された場合、システム資源のうちの１つまたは複数がリセット状態になる可能性がある。
たとえば、バス１０１に関してバス初期化エラーが発行されると、プロセッサインタフェース１１０に関連するプロセッサがリセット状態になる可能性があり、それにより、いかなる現データもダンプし動作をリスタートするためにコードをフェッチする。
したがって、順番のあるキュー１１１に入れられたいかなるトランザクションも、関連するプロセッサの動作に関して無意味になる。
従来のロジックにしたがって、順番のあるキュー１１１もまた初期化される。
しかしながら、本発明の実施形態は、重大なエラー後に順番のあるキューをドレインし、それによりパケットをスプーフし、したがって他のシステム資源がロックアップするかまたは他の方法で重大なエラー後の処理を継続できなくなることを防止するように動作する。
【００２２】
図３に注目すると、本発明の実施形態によって順番のあるキューをドレインする、順番のあるキュー制御モジュール１３１内で実施されてもよいような状態機械３００が示されている。
当技術分野において既知であるように、概して、状態機械は、所与の時点で何かのステータスを格納し、入力に対して操作することにより、ステータスを変更するようにおよび／または任意の所与の変更に対してアクションまたは出力を発生させることができる任意のデバイスである。
【００２３】
通常システム動作中、状態機械３００はアイドルドレイン状態３０１で保持される。
しかしながら、バス初期化エラーが検出されると、状態機械３００は、アイドルドレイン状態３０１から、本発明の教示にしたがってキューをドレインするように動作可能な第１の状態（ここでは、スヌープドレイン状態３１０）に移る。
本発明の実施形態による動作時、バス初期化エラーが検出されたバスのプロセッサおよび／または他のシステム資源を、順番のあるキューのドレイン中に初期化されないようにする。
たとえば、バス初期化エラーが検出されたバス上のシステム資源を、アイドルドレイン状態３０１を除く状態機械３００のすべての状態の間に新たな要求を行わないようにしてもよい。
特定の動作の終了中に特定のバスからシステム資源を切り離すことに関するさらなる詳細は、「Systems and Methods Controlling Transaction Draining for Error Recovery」と題する先に参照した特許出願に記載されている。
【００２４】
スヌープドレイン状態３１０は、システムトランザクションプロトコルの初期トランザクションフェーズ、この例では「スヌープフェーズ」に関連する。
したがって、状態機械３００は、初期のトランザクションフェーズ「スヌープ」で保留中の次の待機トランザクションが選択されるようにし、恐らくは任意のデータ要素を含むが適切にフォーマットされた１つまたは複数のパケットが、スヌープドレイン状態３１０において生成されるようにする。
生成されたスヌープフェーズパケットは、通常動作と同様にシステム内を伝播し、それによりそのトランザクションに関してスヌープフェーズの終了をスプーフする。
【００２５】
本発明の実施形態は、システムプロトコルにしたがって順番のあるキューをドレインするように動作する。
たとえば、システムプロトコルは、キュードレインから切り離されたダウンストリームロジック、たとえばプロセッサ入力ブロック１１３が通常通りに動作可能になるなどのために、スヌープパケットがせいぜい１周期おきの頻度で生成される、ということを確定してもよい。
したがって、図示する実施形態の状態機械３００は、システムプロトコルにしたがってキュー内ドレインを容易にするように、スヌープドレイン状態３１０後に入るスヌープドレインストール状態３１１を含む。
【００２６】
図示する実施形態によれば、状態機械３００は、初期トランザクションフェーズが十分にドレインされるまで、スヌープドレイン状態３１０とスヌープドレインストール状態３１１との間を往復する。
たとえば、スヌープドレイン状態３１０とスヌープドレインストール状態３１１とを交互に行ってもよく、それにより、スヌープポインタが要求ポインタに等しくなるまで、１周期おきにスヌープフェーズパケットを生成する。
スヌープトランザクションフェーズポインタが要求ポインタ（初期トランザクションフェーズポインタ）に等しくなると、順番のあるキューのすべてのトランザクションがスプーフされたスヌープフェーズを通して取出されたことになる。
したがって、スヌープポインタが要求ポインタに等しくなると、状態機械３００の図示する実施形態は、システムトランザクションプロトコルの後のトランザクションフェーズ、この例では「応答フェーズ」に関連するトランザクションフェーズのキューのドレインを提供するように動作可能な状態（ここでは、応答ドレイン状態３２０）に移る。
【００２７】
応答ドレイン状態３２０は、スヌープドレイン状態３１０のものに続くシステムトランザクションプロトコルのトランザクションフェーズに関連する。
したがって、本発明の実施形態により順番のあるキューをドレインする動作は、特定のトランザクションフェーズを、通常動作中に処理される可能性のある順序でスプーフするように動作しなくてもよいが、本発明の実施形態は、各トランザクションに関連するフェーズがそれらの適切な順序でスプーフされることを確実にする。
図示する実施形態では、すべてのスヌープフェーズトランザクションがいかなる応答フェーズトランザクションをスプーフする前にもスプーフされるため、各トランザクションに関連するフェーズが所望の順序でスプーフされることを理解しなければならない。
【００２８】
図示する実施形態による動作時、状態機械３００は、「応答」フェーズを受取る次の待機トランザクションが選択されるようにし、恐らくは任意のデータ要素を含むが適切にフォーマットされた１つまたは複数のパケットが、応答ドレイン状態３２０において生成されるようにする。
上述したスヌープフェーズパケットと同様に、生成された応答フェーズパケットは、通常動作の場合と同様にシステム内を伝播し、それによってそのトランザクションに関する応答フェーズの終了をスプーフする。
【００２９】
上述したように、本発明の実施形態は、システムプロトコルにしたがって順番のあるキューをドレインするように動作する。
したがって、図示する実施形態の状態機械３００は、システムプロトコルにしたがって順番のあるキューのドレインを容易にするように、応答ドレイン状態３２０後に入る応答ドレインストール状態３２１〜３２３を含む。
【００３０】
図示する実施形態によれば、状態機械３００は、後のトランザクションフェーズが十分にドレインされるまで、応答ドレイン状態３２０と、応答ドレインストール状態３２１と、応答ドレインストール状態３２２と、応答ドレインストール状態３２３と、に順次入る。
たとえば、図示する実施形態では、応答ポインタが要求ポインタに等しくなるまで、４クロック周期おきに応答パケットがスプーフされるように、応答ドレインストール状態が提供される。
応答トランザクションフェーズポインタが要求ポインタ（初期トランザクションフェーズポインタ）に等しくなると、順番のあるキューのすべてのトランザクションがスプーフされた応答フェーズを通して取出されたことになる、ということを理解しなければならない。
応答ポインタが要求ポインタに等しくなると、本発明の状態機械３００は、システムトランザクションプロトコルのさらに後のトランザクションフェーズに関連するトランザクションフェーズのキューのドレインを提供するように動作可能な状態等、後続する所望の状態に移ってもよい。
しかしながら、図示する実施形態では、ドレインされるトランザクションフェーズは２つしか存在せず、したがって図示する実施形態の状態機械３００は、初期エラーが検出されたバス上のプロセッサがリセットから解放され初期化が可能になるため等、アイドルドレイン状態３０１に戻る。
【００３１】
図４に注目すると、状態機械３００にしたがう動作を示すタイミング図が示されている。
４０１において、システムにバス初期化エラーが存在する。
したがって、４０１の直後に、４０２においてプロセッサインタフェースキューグループのバス初期化状態信号グループが、アイドル状態からドレイン状態に移る。
４１１〜４１５は、第１のトランザクションフェーズ、たとえば上述したスヌープフェーズに関するドレイン状態のシーケンスを表す。
４３１および４３２において分かるように、４１１〜４１５を経過した後、第２のトランザクションフェーズポインタ、ここではスヌープポインタは、第１のトランザクションフェーズポインタ、ここでは要求ポインタに等しい。
したがって、４０３において、バス初期化状態信号グループは、第２のドレイン状態に移る。
４２１〜４２６は、第２のトランザクションフェーズ、たとえば上述した応答フェーズに関するドレイン状態のシーケンスを表す。
４３１および４３３において分かるように、４２１〜４２６を経過した後、第３のトランザクションフェーズポインタ、ここでは応答ポインタは、第１のトランザクションフェーズポインタ、ここでは要求ポインタに等しい。
【００３２】
図示する実施形態に示すような上述したドレイン状態およびドレインストール状態の実施態様は、本発明によって採用してもよい状態を例示するものである、ということを理解しなければならない。
特定の状態を採用すべきか否かと採用する特定の状態の数とは、システムおよび／またはそれと使用するプロトコルの属性によって変化してもよい。
たとえば、図示する実施形態は、２つのトランザクションフェーズに関連する２つのドレイン状態を採用し、それらに対し、トランザクションフェーズを終了することができないことにより、キューの詰りおよび／またはシステム資源ロックアップがもたらされる可能性がある。
本発明の実施形態は、必要に応じて、いかなる数のかかるドレイン状態を実施してもよい。
【００３３】
同様に、図示する実施形態は、特定のドレイン状態に関して３つの応答ドレインストール状態を採用することにより、バス上の、トランザクションが応答フェーズにありデータがプロセッサ無しに、たとえばキャッシュラインで駆動している場合に適応する。
応答フェーズパケットスプーフに関して実施される４つの周期により、かかるデータが、重大なエラーが検出された場合のトランザクションの実際のステータスに係りなくシステムプロトコルにしたがって、図示する実施形態のプロセッサ入力ブロック１１３および／またはプロセッサインタフェースデータパスブロック１１５等のシステムを適切に伝播することが確実になる。
本発明の実施形態は、必要に応じて、いかなる数のかかるドレインストール状態（０を含む）を特定のドレイン状態に関していかなる組合せで実施してもよい。
【００３４】
本発明の実施形態によるキューのドレインは、種々のパケットに適応するように適合される、ということを理解しなければならない。
たとえば通常システム動作は、特定のシステム資源に向けられたパケットのみを採用するのではなく、マルチキャストパケット等のマルチポイントパケットを採用してもよい。
システムのセルのうちの１つのプロセッサバスは、たとえば、保護領域にあるすべてのメモリプロセッサ（すなわち、特定のオペレーティングシステムの制御下で動作可能なすべてのセル）等複数のシステム資源に送出されるキャッシュ同期パケットを発行してもよい。
保護領域の各プロセッサバスは、キャッシュ同期を行うためにキャッシュ同期パケットを調べる必要がある。
したがって、通常動作時、プロセッサインタフェースは、関連するプロセッサからかかるマルチキャストパケット要求を受取り、それを、送出する各要求パケットに対する肯定応答を期待して、その保護領域にあるすべてのセルに送出する。
しかしながら、上述したように、セルは、複数のプロセッサおよび／または複数のバスを含む可能性がある。
したがって、単一セル内の複数のシステム資源が、最終的にマルチキャストパケットキャッシュ同期に影響するが、要求しているシステム資源は、各セルから単一の肯定応答のみを期待してもよい。
【００３５】
図示する実施形態のプロセッサ連絡（processor junction（ＰＪ））ブロック１３０は、通常動作においてかかるマルチキャスト肯定応答の調整を提供する。
特に、プロセッサ連絡ブロック１３０は、特定のパケットがマルチキャストパケットであることを認識し、各プロセッサ入力ブロック１１３および１２３と協議することにより最新のもののみがトランザクションを終了して期待された肯定応答を実際に送出することができるようにする。
図示する実施形態によれば、プロセッサ連絡ブロック１３０には、これらの状況を扱うためにカウンタがある。
本発明の実施形態による順番のあるキューのドレインの動作は、キューに入れられたトランザクションフェーズの各々を順序正しくスプーフして、上述したプロセッサ連絡ブロック１３０カウンタを同期させた状態にし、それにより、あらゆるタイプの保留中のトランザクションに関してもシステムを安定した状態に維持する。
【００３６】
本発明の図示する実施形態のドレイン状態は、システムプロトコルに準拠するパケットを生成するように動作するが、バス初期化エラーが検出されたバス上のシステム資源がリセット状態に保持されるため、生成されたパケットは、無効なデータ要素を含む可能性が高い、ということを理解しなければならない。
たとえば、特定のデータパケットは、すべて０等のヌルデータを含んでもよい。
したがって、本発明の実施形態による動作により、重大なエラーを有していたバスに関連するシステム資源によってトランザクションが終了されるのを待って、キューが詰るかまたはシステム資源がロックアップする状況は回避されるが、スプーフされたトランザクションフェーズの結果として、システムを通してシステム資源に１つまたは複数のエラーがもたらされる可能性がある。
しかしながら、これらの動作エラーは、それほど大きくなく、たとえば重大でないと予期され、したがってシステム処理は順序正しいクラッシュ、コアダンプおよび／またはソフト初期化を持続してもよい。
したがって、本発明の実施形態は、好ましくは、「System and Method for Error Capture and Logging in Computer Systems」と題する先に参照した特許出願に示されているようなエラー収集および／またはロギングを実施する。
【００３７】
本発明によるキューのドレインの動作を、追加の重大障害回復技法と組合せて実施してもよい、ということを理解しなければならない。
たとえば、本発明の実施形態による順番のあるキューのドレインを、「Systems and Methods Controlling Transaction Draining for Error Recovery」と題する先に参照した特許出願に示すような順番通りでない（out of order）バッファドレインも含むシステム障害回復プロセスで実施してもよい。
一実施形態によれば、順番のあるキューのドレインを実施し終了した後、アウトオブオーダーバッファドレインを実施して終了し、その後通常のシステム動作に戻ってもよい。
したがって、本発明の実施形態による順番のあるキュードレインは、関連する動作を調整するために、順番のあるキュードレイン中にプロセッサ出力ブロック１１４等のシステム資源または他の機能ブロックに対し、「ｐｉｑドレイン」信号等の信号をアサートしてもよい。
【００３８】
実施形態を、保護領域のシステム資源に関して上述したが、本発明の実施形態の利点は、システム資源が保護領域間で排他的に区分されるマルチプロセッサ環境に限定されない、ということを理解しなければならない。
たとえば、本発明の実施形態による順番のあるキュードレインは、システム資源が保護領域の区分に亙って利用される世界共有メモリ（globally shared memory（ＧＳＭ））を実施するシステムに関して特に有用で有り得る。
本発明の実施形態による順番のあるキュードレインを実施することにより、１つの保護領域のクラッシュが別の保護領域を、それらの保護領域がメモリを共有する場合であっても、ダウンさせることがない。
１つの保護領域が正常にクラッシュし残りの保護領域が処理を継続することができるようにして、キューの詰りおよび／またはシステム資源ロックアップが回避されるためである。
【００３９】
本発明の要素をソフトウェアで実施する場合、それらは本質的に、本明細書で説明したようなタスクを実行するコードセグメントである。
プログラムまたはコードセグメントをコンピュータ読取可能媒体に格納し、または搬送波に具体化されるコンピュータデータ信号かまたは搬送波によって変調される信号により、伝送媒体を介して送信することができる。
コンピュータ読取可能媒体は、情報を格納しまたは転送することができるいかなる媒体を含んでもよい。
コンピュータ読取可能媒体の例には、電子回路、半導体メモリデバイス、ＲＯＭ、フラッシュメモリ、消去可能ＲＯＭ（ＥＲＯＭ）、フロッピー（登録商標）ディスケット、コンパクトディスクＣＤ−ＲＯＭ、光ディスク、ハードディスク、光ファイバ媒体、無線周波数（ＲＦ）リンク等がある。
コンピュータデータ信号は、電子ネットワークチャネル、光ファイバ、空気、電磁気、ＲＦリンク等の伝送媒体を介して伝播することができるいかなる信号を含んでもよい。
コードセグメントを、インターネット、イントラネット等のコンピュータネットワークを介してダウンロードしてもよい。
【図面の簡単な説明】
【００４０】
【図１Ａ】本発明の実施形態が実施されるマルチプロセッサシステムの一部を示す図である。
【図１Ｂ−１】本発明の実施形態が実施されるマルチプロセッサシステムの一部を示す図である。
【図１Ｂ−２】本発明の実施形態が実施されるマルチプロセッサシステムの一部を示す図である。
【図２】本発明の実施形態によって動作可能な順番のあるキューに関して詳細を示す図である。
【図３】本発明の実施形態により順番のあるキュードレインを実施する状態機械を示す図である。
【図４】図３の状態機械の動作に対応するタイミング図である。
【符号の説明】
【００４１】
１００・・・サブモジュール、
１０１，１０２・・・バス、
１１０，１２０・・・プロセッサインタフェース、
１１３，１２３・・・プロセッサインタフェースブロック、
１１４，１２４・・・プロセッサ出力ブロック、
１１５，１２５・・・プロセッサインタフェースデータパス、
１１２．１２２・・・キュー（ＰＩＱ）、
１１１，１２１・・・キュー（ＩＯＱ）、
１３１・・・キュー制御モジュール、
２０１，２０２・・・エントリ、
２１１，２１２・・・マルチプレクサ、
３００・・・状態機械、
３０１・・・アイドルドレイン状態、
３１０・・・スヌープドレイン状態、
３１１・・・スヌープドレインストール状態、
３２０・・・応答ドレイン状態、
３２１〜３２１・・・応答ドレインストール状態、
【図１Ａ】
2004334863.tif 000003
【図１Ｂ−１】
2004334863.tif 000004
【図１Ｂ−２】
2004334863.tif 000005
【図２】
2004334863.tif 000006
【図３】
2004334863.tif 000007
【図４】
2004334863.tif 000008