トップ :: G 物理学 :: G06 計算;計数




【発明の名称】 プロセッサシステム
【発明者】 【氏名】上原 敬太郎

【氏名】明石 英也

【氏名】對馬 雄次

【要約】 【課題】I/Oバスから発行された主記憶ライトトランザクションに対して、先行トランザクションの完了を待たずに後続のトランザクションを発行することによってバススループットを向上させる。

【解決手段】要求側のI/Oユニットは、I/Oバスから発行されたトランザクションを連続して発行する。応答側のノードコントローラあるいは相互結合網上の中継ユニットは、同一I/Oバスから発行されたトランザクションの順序を保証するために、先行するトランザクションがリトライあるいは応答保留となったことを記録するI/Oフラグレジスタを有する。これにより応答側のノードコントローラあるいは中継ユニットは、先行するトランザクションがリトライあるいは応答保留となった場合に、後続のトランザクションをリトライあるいは応答を保留させることで完了順序を保証する。
【特許請求の範囲】
【請求項1】1つ以上のプロセッサをプロセッサバスを介して接続するノードコントローラと、I/Oバスを有する1つ以上のI/Oユニットと、1つ以上の主記憶とを相互結合網で接続するプロセッサシステムにおいて、前記I/Oユニットは、任意の前記主記憶あるいは任意の前記プロセッサに対するトランザクションを、先行するトランザクションの完了前に連続して発行する機能を有し、前記ノードコントローラは、要求されたトランザクションに対して任意の順序で応答を返す機能を有し、前記ノードコントローラは、前記同一I/Oバスから発行された先行トランザクションが前記主記憶あるいは前記プロセッサによってリトライあるいは応答を保留された場合に、前記I/Oユニットに対して後続のトランザクションの応答を保留、あるいはリトライを要求し再発行させることで、トランザクションの完了順序を保証することを特徴とするプロセッサシステム。
【請求項2】請求項1記載のプロセッサシステムにおいて、前記ノードコントローラはリトライ制御レジスタと応答保留制御レジスタを有し、前記リトライ制御レジスタは前記I/Oバスから発行された先行するトランザクションがリトライとなったことを記録する前記I/Oバスの本数に対応するリトライビットを有し、前記応答保留制御レジスタは前記I/Oバスから発行された先行するトランザクションの応答が保留されたことを記録する前記I/Oバスの本数に対応する保留ビットを有することを特徴とするプロセッサシステム。
【請求項3】1つ以上のプロセッサをプロセッサバスを介して接続するノードコントローラと、I/Oバスを有する1つ以上のI/Oユニットと、1つ以上の主記憶と相互結合網で接続するプロセッサシステムにおいて、前記各I/Oユニットは、任意の前記主記憶あるいは任意の前記プロセッサ対するトランザクションを、先行するトランザクションの完了前に連続して発行する機能を有し、前記同一I/Oバスから発行された先行トランザクションが前記主記憶あるいは前記プロセッサによってリトライされた場合に、前記相互結合網を含む任意の中継点(以下中継ユニット)において、前記I/Oユニットに対して後続のトランザクションのリトライを要求し再発行させることで、トランザクションの完了順序を保証することを特徴とするプロセッサシステム。
【請求項4】請求項3記載のプロセッサシステムにおいて、前記中継ユニットはリトライ制御レジスタを有し、前記リトライ制御レジスタは前記I/Oバスから発行された先行するトランザクションがリトライとなったことを記録する前記I/Oバスの本数に対応したリトライビットを有することを特徴とするプロセッサシステム。
【請求項5】請求項4記載のプロセッサシステムにおいて、前記中継ユニットは応答保留制御レジスタを有し、前記応答保留制御レジスタは前記I/Oバスから発行されたトランザクションの応答が保留されたことを記録する前記I/Oバスの本数に対応した保留ビットを有することを特徴とするプロセッサシステム。
【請求項6】請求項2、4及び5のいずれかに記載のプロセッサシステムにおいて、前記ノードコントローラまたは前記中継ユニットは、前記I/Oユニットからのライトトランザクションをリトライする際に対応する前記リトライ制御レジスタ内の対応するリトライビットをセットする機能と、前記リトライビットがセットされると後続のトランザクションもリトライさせる機能を有し、前記I/Oユニットは前記I/Oバスが発行したトランザクションを順番に格納するトランザクション発行キューを有し、前記トランザクション発行キューは前記トランザクションがリトライされたものであるかを判別するためのトランザクション属性フィールドを有し、前記I/Oユニットは前記トランザクション発行キュー内のトランザクションを連続発行する機能と、リトライされたトランザクションを再発行する機能を有することを特徴とするプロセッサシステム。
【請求項7】請求項6記載のプロセッサシステムにおいて、前記I/Oユニットはトランザクションを連続発行または再発行する際に前記トランザクションキュー内の先頭トランザクションと後続トランザクションを判別するために先頭トランザクションに対してヘッダフラグを付与する機能を有し、前記ノードコントローラまたは前記中継ユニットは、前記先頭トランザクションを受け取ると、前記リトライ制御レジスタ内の前記I/Oバスに対応するリトライビットをクリアする機能を有することを特徴とするプロセッサシステム。
【請求項8】請求項6記載のプロセッサシステムにおいて、前記I/Oユニットは前記トランザクション発行キュー内のリトライとなったトランザクションを再発行する際に、前回トランザクションを発行した時と同じ識別子を付与する機能を有し、前記ノードコントローラまたは前記中継ユニットは、前記リトライ制御レジスタ内に前記I/Oバスの本数に対応したリトライビットに加えトランザクション識別子記録部を持ち、前記I/Oユニットからのライトトランザクションをリトライする際に対応するリトライビットをセットすると同時に前記トランザクション識別子記録部にリトライとなったライトトランザクションの識別子を記録する機能を有し、前記I/Oユニットから再発行されたライトトランザクションを受け付けた際前記リトライ制御レジスタ内の対応するトランザクション識別子記録部を参照し、該ライトトランザクションの識別子と一致した場合には対応するリトライビットをクリアする機能を有することを特徴とするプロセッサシステム。
【請求項9】請求項6記載のプロセッサシステムにおいて、前記I/Oユニットはトランザクションをリトライして再発行した回数を示すリトライカウンタを内部に持ち、前記I/Oユニットはトランザクション発行キュー内のトランザクションを連続発行する際に、前記リトライカウンタの値をトランザクションに付与して発行する機能を有し、トランザクションを再発行する際には前記リトライカウンタの値をインクリメントする機能を有し、前記ノードコントローラまたは前記中継ユニットは、前記リトライ制御レジスタ内に前記I/Oバスの本数に応じたリトライビットに加え前記トランザクションのリトライカウンタを記録するリトライカウンタ記録部を有し、前記I/Oユニットから発行されたライトトランザクションをリトライする際に対応するリトライビットをセットすると共に、リトライカウンタ記録部に当該ライトトランザクションのリトライカウンタを記録する機能を有し、前記ノードコントローラまたは前記中継ユニットは、前記I/Oユニットから発行されたトランザクションを受け付けた際、前記I/Oフラグレジスタ内の対応するリトライカウンタ記録部を参照し、該トランザクションのリトライカウンタと異なっていた場合には対応するリトライビットをクリアする機能を有することを特徴とするプロセッサシステム。
【請求項10】請求項2、5、6、7、8及び9のいずれか記載のプロセッサシステムにおいて、前記ノードコントローラは、受け取ったトランザクションに対して即時に応答できない場合この応答を一時保留する機能を有し、応答を一時保留した前記トランザクションより後に到着したトランザクションの応答を先に返す機能を有することを特徴とするプロセッサシステム。
【請求項11】請求項10記載のプロセッサシステムにおいて、答が一時保留された場合に前記応答保留制御レジスタ内の前記I/Oバスに対応する保留ビットをセットする機能を有することを特徴とするプロセッサシステム。
【請求項12】請求項11記載のプロセッサシステムにおいて、前記ノードコントローラあるいは前記中継ユニットは、前記応答保留制御レジスタ内の前記I/Oバスに対応する保留ビットがセットされている時に、前記同一I/Oバスから発行された後続のトランザクションをリトライする機能を有し、保留されていたトランザクションの応答を返す際に前記保留ビットをクリアする機能を有することを特徴とするプロセッサシステム。
【請求項13】請求項11記載のプロセッサシステムにおいて、記I/Oバスに対応する保留ビットがセットされている時に、後続のトランザクションの応答を保留する機能を有し、前記リトライ制御レジスタ内の前記I/Oバスに対応するリトライビットをクリアする時に、前記保留ビットをクリアする機能を有することを特徴とするプロセッサシステム。
【請求項14】請求項11記載のプロセッサシステムにおいて、前記ノードコントローラあるいは前記中継ユニットは、前記応答保留制御レジスタ内の前記I/Oバスに対応する保留ビットの代わりに保留カウンタを有し、前記I/Oユニットから発行されたトランザクションの応答を保留する際に、前記保留カウンタの値をインクリメントする機能を有し、前記I/Oユニットから発行された後続トランザクションを受け付けた際、対応する前記保留カウンタの値が1以上の時には当該トランザクションの応答を保留する機能を有し、応答が保留されたトランザクションの応答を返す際に前記保留カウンタの値をデクリメントする機能を有することを特徴とするプロセッサシステム。
【請求項15】請求項13記載のプロセッサシステムにおいて、前記ノードコントローラあるいは前記中継ユニットは、前記応答保留制御レジスタ内に前記I/Oバスの本数に対応した保留ビットに加え前記I/Oバスの本数に対応した保留識別子記録部を前記応答保留制御レジスタ内に持ち、前記I/Oユニットから発行されたトランザクションの応答が保留された際に当該トランザクションの識別子を対応する保留識別子記録部に記録する機能を有し、応答を保留していたトランザクションの応答を返す際に、前記応答保留制御レジスタ内の対応する保留識別子記録部を参照し、該トランザクションの識別子と一致していた場合には対応する保留ビットをクリアする機能を有することを特徴とするプロセッサシステム。
【請求項16】請求項10記載のプロセッサシステムにおいて、前記ノードコントローラあるいは前記中継ユニットは、前記I/Oバスの本数に応じたI/O要求受け付けキューを持ち、前記I/Oユニットから発行されたトランザクションを対応する前記I/O要求受け付けキューに受け付けた順に格納する機能を有し、前記I/Oユニットから発行されたトランザクションの応答を返す際、当該トランザクションが対応するI/O要求受け付けキューの先頭エントリで無かった場合には当該トランザクションの応答を保留する機能を有することを特徴とするプロセッサシステム。
【発明の詳細な説明】【0001】
【発明の属する技術分野】本発明はプロセッサシステムにおいてI/Oバス上のデバイスを要求元とするトランザクションの順序を保証した連続発行方法に関する。
【0002】
【従来の技術】I/Oバスが発行するライトトランザクションをシステムで処理する方法の一種にポステッドライトがある。ポステッドライトはライトトランザクションをシステムが受け付けた直後に要求元バスで完了させ、以後の処理はシステムが責任を持って行う処理方法である。ライトトランザクションが発行されると、当該トランザクションがシステム上で完了する前にバスまたはプロセッサから後続トランザクションが発行可能になり、性能が向上する。
【0003】しかしながらPCIバス仕様レビジョン2.1などの規定ではPCIバス上のデバイスを要求元にしたライトトランザクションは順序を保証しなければならないという制約がある。依存関係のあるトランザクションを連続して発行した際に、先行のトランザクションがリトライされた場合には、後続のトランザクションが先に完了するという追い越しが発生し、順序が保証されなくなる。ここでリトライとは要求先が一時的にアクセスを受け付けられない状態にある場合などに、要求元に対して改めてアクセスを実行するように要求することである。したがって、あるPCIバスがライトトランザクションをシステム側に発行すると、当該ライトがリトライされずに完了が保証されるまで当該PCIバスは後続トランザクションをシステム側に発行しないことでこの制約を守っている。
【0004】
【発明が解決しようとする課題】上記従来手法では、PCIバスから依存関係のあるトランザクションが連続して発行された場合には、先行トランザクションの完了が保証されるまで後続のトランザクションが発行できないため、性能が低下してしまうという問題点があった。
【0005】また、多数のノードがネットワークで相互結合した高多重マルチプロセッサシステムにおいては、各ノードから発行されるスヌープトランザクションが多くなるため、プロセッサバスのスヌープスループットの増加がシステム全体の性能を低下させる要因となる。そのために各ノードコントローラでは、スヌープトランザクションをフィルタリングし、必要な場合だけスヌープトランザクションをプロセッサバス上に発行する、等といった仕組みが必要となる。しかしこのような仕組みを設けた場合、応答側のノードコントローラでは、必ずしも要求された順序で応答を返すとは限らない。そのため、同一PCIバスから発行されたトランザクション間の順序保証を行おうとする場合、先行するライトトランザクションの応答が保留された際には、リトライされる可能性を考慮に入れ、後続のトランザクションを全てリトライとする必要があった。
【0006】また、応答側の各ノードコントローラで、システム内の全要求元に対応するビットマップを持ち、順序保証を行う方法も考えられる。この場合システム全体でのビットマップの物量は、システム内のI/Oバスの総数とノードコントローラの数の両方に比例する。このため、I/Oバスの本数がノード数に比例するとした場合、ビットマップの物量はノード数の二乗に比例して増えていくことになり、ノード数が多いシステムでは物量の増加が問題となる。
【0007】
【課題を解決するための手段】本発明は、1つ以上のプロセッサをプロセッサバスを介して接続する1つノードコントローラと、I/Oバスを有する1つ以上のI/Oユニットと、1つ以上の主記憶とを相互結合網で接続するプロセッサシステムであって、任意の前記ノード内の前記I/Oバスを要求元ユニットとし、任意のノード内の前記プロセッサまたは任意の前記主記憶を要求先ユニットとするトランザクションを、前記相互結合網を介して発行する機能を有するプロセッサシステムにおいて、以下の機能を有することによって前記従来の課題を解決する。
【0008】前記I/Oユニットは、任意の前記主記憶あるいは任意の前記プロセッサに対するトランザクションを、先行するトランザクションの完了前に連続して発行する機能を有し、前記ノードコントローラは、要求されたトランザクションに対して任意の順序で応答を返す機能を有し、前記ノードコントローラは、前記同一I/Oバスから発行された先行トランザクションが前記主記憶あるいは前記プロセッサによってリトライあるいは応答を保留された場合に、前記I/Oユニットに対して後続のトランザクションの応答を保留、あるいはリトライを要求し再発行させることで、トランザクションの完了順序を保証する機能を有する。
【0009】また、前記ノードコントローラはリトライ制御レジスタと応答保留制御レジスタを有し、前記リトライ制御レジスタは前記I/Oバスから発行された先行するトランザクションがリトライとなったことを記録する前記I/Oバスの本数に対応したリトライビットを有し、前記応答保留制御レジスタは前記I/Oバスから発行された先行するトランザクションの応答が保留されたことを記録する前記I/Oバスの本数に対応した保留ビットを有する。
【0010】前記ノードコントローラまたは前記中継ユニットは、前記I/Oユニットからのライトトランザクションをリトライする際に対応する前記リトライ制御レジスタ内の対応するリトライビットをセットする機能と、前記リトライビットがセットされると後続のトランザクションもリトライさせる機能を有し、前記I/Oユニットは前記I/Oバスが発行したトランザクションを順番に格納するトランザクション発行キューを有し、前記トランザクション発行キューは前記トランザクションがリトライされたものであるかを判別するためのトランザクション属性フィールドを有し、前記I/Oユニットは前記トランザクション発行キュー内のトランザクションを連続発行する機能と、リトライされたトランザクションを再発行する機能を有する。
【0011】また、前記I/Oユニットはトランザクションを連続発行または再発行する際に前記トランザクションキュー内の先頭トランザクションと後続トランザクションを判別するために先頭トランザクションに対してヘッダフラグを付与する機能を有し、前記ノードコントローラまたは前記中継ユニットは、前記先頭トランザクションを受け取ると、前記リトライ制御レジスタをクリアする機能を有する。
【0012】あるいは、前記I/Oユニットは前記トランザクション発行キュー内のリトライとなったトランザクションを再発行する際に、前回トランザクションを発行した時と同じ識別子を付与する機能を有し、前記ノードコントローラまたは前記中継ユニットは、前記リトライ制御レジスタ内に前記I/Oバスの本数に対応したリトライビットに加えトランザクション識別子記録部を持ち、前記I/Oユニットからのライトトランザクションをリトライする際に対応するリトライビットをセットすると同時に前記トランザクション識別子記録部にリトライとなったライトトランザクションの識別子を記録する機能を有し、前記I/Oユニットから再発行されたライトトランザクションを受け付けた際前記リトライ制御レジスタ内の対応するトランザクション識別子記録部を参照し、該ライトトランザクションの識別子と一致した場合には対応するリトライビットをクリアする機能を有する。
【0013】あるいは、前記I/Oユニットはトランザクションをリトライして再発行した回数を示すリトライカウンタを内部に持ち、前記I/Oユニットはトランザクション発行キュー内のトランザクションを連続発行する際に、前記リトライカウンタの値をトランザクションに付与して発行する機能を有し、トランザクションを再発行する際には前記リトライカウンタの値をインクリメントする機能を有し、前記ノードコントローラまたは前記中継ユニットは、前記リトライ制御レジスタ内に前記I/Oバスの本数に応じたリトライビットに加え前記トランザクションのリトライカウンタを記録するリトライカウンタ記録部を有し、前記I/Oユニットから発行されたライトトランザクションをリトライする際に対応するリトライビットをセットすると共に、リトライカウンタ記録部に当該ライトトランザクションのリトライカウンタを記録する機能を有し、前記ノードコントローラまたは前記中継ユニットは、前記I/Oユニットから発行されたトランザクションを受け付けた際、前記I/Oフラグレジスタ内の対応するリトライカウンタ記録部を参照し、該トランザクションのリトライカウンタと異なっていた場合には対応するリトライビットをクリアする機能を有する。
【0014】前記ノードコントローラは、受け取ったトランザクションに対して即時に応答できない場合この応答を一時保留する機能を有し、応答を一時保留した前記トランザクションより後に到着したトランザクションの応答を先に返す機能を有する。
【0015】前記ノードコントローラあるいは前記中継ユニットは、受け取ったトランザクションの応答が一時保留された場合に前記応答保留制御レジスタ内の前記I/Oバスに対応する保留ビットをセットする機能を有する。
【0016】前記ノードコントローラあるいは前記中継ユニットは、前記応答保留制御レジスタ内の前記I/Oバスに対応する保留ビットがセットされている時に、後続のトランザクションをリトライする機能を有し、保留されていたトランザクションの応答を返す際に前記保留ビットをクリアする機能を有する。
【0017】前記ノードコントローラあるいは前記中継ユニットは、前記応答保留制御レジスタ内の前記I/Oバスに対応する保留ビットがセットされている時に、後続のトランザクションの応答を保留する機能を有し、前記リトライ制御レジスタ内の前記I/Oバスに対応するリトライビットをクリアする時に、前記保留ビットをクリアする機能を有する。
【0018】前記ノードコントローラあるいは前記中継ユニットは、前記応答保留制御レジスタ内の前記I/Oバスに対応する保留ビットの代わりに保留カウンタを有し、前記I/Oユニットから発行されたトランザクションの応答を保留する際に、前記保留カウンタの値をインクリメントする機能を有し、前記I/Oユニットから発行された後続トランザクションを受け付けた際、対応する前記保留カウンタの値が1以上の時には当該トランザクションの応答を保留する機能を有し、応答が保留されたトランザクションの応答を返す際に前記保留カウンタの値をデクリメントする機能を有する。
【0019】前記ノードコントローラあるいは前記中継ユニットは、前記応答保留制御レジスタ内に前記I/Oバスの本数に対応した保留ビットに加え前記I/Oバスの本数に対応した保留識別子記録部を前記応答保留制御レジスタ内に持ち、前記I/Oユニットから発行されたトランザクションの応答が保留された際に当該トランザクションの識別子を対応する保留識別子記録部に記録する機能を有し、応答を保留していたトランザクションの応答を返す際に、前記応答保留制御レジスタ内の対応する保留識別子記録部を参照し、該トランザクションの識別子と一致していた場合には対応する保留ビットをクリアする機能を有する。
【0020】前記ノードコントローラあるいは前記中継ユニットは、前記I/Oバスの本数に応じたI/O要求受け付けキューを持ち、前記I/Oユニットから発行されたトランザクションを対応する前記I/O要求受け付けキューに受け付けた順に格納する機能を有し、前記I/Oユニットから発行されたトランザクションの応答を返す際、当該トランザクションが対応するI/O要求受け付けキューの先頭エントリで無かった場合には当該トランザクションの応答を保留する機能を有する。
【0021】
【発明の実施の形態】〔実施の形態例1〕本発明をI/O発主記憶ライトに適用した場合を例にとり、第1の実施の形態を図1〜5を用いて説明する。
【0022】図1は本発明の一実施例に関わるプロセッサシステムの構成を示す概略図である。ノードコントローラ1aまたはI/Oユニット2aからなるノード、および図示されていない主記憶が相互結合網3によって多重化されシステムを構成している。この図ではI/Oユニット2aはノードコントローラ1aと別のノードとして描かれているが、これは同じノードに存在しても良い。以下の説明はどちらの構成でも差異を生じない。
【0023】I/Oユニット2aは、1つ以上のI/Oバス21aとのインタフェースを持つI/Oバスインタフェース20、I/Oバス21aから発行されたトランザクションを格納するトランザクション発行キュー200、トランザクション発行キュー200に格納されたトランザクションを制御する機能を持つI/Oトランザクション発行部210を有する。トランザクション発行キュー200の各エントリは、トランザクションを格納するフィールド200aに加え、ノードコントローラによりリトライされたトランザクションかどうかを識別するためのトランザクション属性フィールド200bを持つ。
【0024】ノードコントローラ1aは、1つ以上のプロセッサ13がつながったプロセッサバス12とのインタフェースを持つプロセッサバスインタフェース11、I/Oユニット2aから発行されたトランザクションを制御するI/Oトランザクション処理部110、およびI/Oフラグレジスタ120を有する。ここでI/Oフラグレジスタ120はリトライ制御レジスタ400と応答保留制御レジスタ410の2つのレジスタから構成される。各レジスタの詳細については後述する。
【0025】以下、I/Oバス上のデバイスがI/O発主記憶ライトトランザクションを発行した場合の概略を述べる。
【0026】I/O発主記憶ライトは、I/Oバス21a上のデバイスが発行し、主記憶に書き込む。この時、プロセッサ13がキャッシュ上に当該データを持つ可能性があるため、プロセッサバスインタフェース11を介してキャッシュ一致制御を行うトランザクションをノードコントローラ1aに対して発行し、一致制御が終了した時点で完了させる。また、I/O発主記憶ライトは、PCIバス等に見られるように、I/Oバス21a上の発行順序と同じ順序で完了することを保証する必要がある。この時バススループットを上げるためには、完了順序の保証を行いながら、トランザクションを連続して発行する必要がある。
【0027】一方、応答側のプロセッサバスインタフェース11では、プロセッサ13のキャッシュの状態によって次の3通りの応答を行う。
【0028】1.プロセッサ13のキャッシュ上に当該データがない場合、主記憶ライトはすぐに実行できるため、OKと応答する。
【0029】2.主記憶ライトが実行できない場合、リトライを要求する。
【0030】3.プロセッサ13のキャッシュ上に当該データを持つ可能性がある場合、プロセッサバスインタフェース11はこれを無効化する処理をプロセッサ13に対して要求する。この場合、OKかリトライかはプロセッサ13の応答によって決定するため、プロセッサバスインタフェース11は応答を一旦保留し、プロセッサ13からの応答が返ってきた時点で改めて応答を行う。
【0031】このような条件でトランザクションの発行された順序を守るために、本実施例では以下のような手順で処理を行う:(1)要求側のI/Oユニット2aでは要求先であるプロセッサ13を含むノードコントローラ1aに対して、順序を保ってトランザクションを連続発行する。この時、同一のI/Oバス21aから発行された一連のトランザクションの先頭トランザクションには、図2に示すように、トランザクション30に対して先頭であることを示すヘッダフラグ31に値 ‘1’ を付加する。
【0032】(2)トランザクションを受け取ったノードコントローラ1aは、先行するライトトランザクションがリトライとなった場合、後続のトランザクションもリトライとする。
【0033】(3)I/Oユニット2aではリトライとなったトランザクションを順序を保って再発行する。この時、再発行された先頭トランザクションにはやはりヘッダフラグ31に ‘1’ を付加する。
【0034】(4)ノードコントローラ1aで先行するライトトランザクションの応答が保留された場合、後続のトランザクションの応答を保留し、先行するトランザクションの結果によってリトライするかどうかを決定する。
【0035】本発明は、(1)の連続発行によってトランザクションのスループットを稼ぎ、(2)と(3)のリトライと再発行によって順序保証を行う。また、(4)によって、たとえ応答が保留された場合にでも順序保証を行える。
【0036】以下、本実施の形態例を詳しく説明する。まず、前記処理手順を実現するために、各ユニットは以下のような動作を行う。
【0037】(要求側ユニット動作)(1)I/Oバス21aからI/Oバスユニット2aへ発行されたトランザクションはトランザクション発行キュー200に順次格納される。トランザクション発行キュー200の各エントリにはトランザクション属性フィールド200bがあり、未発行のトランザクションの場合には ‘0’、リトライを要求されたトランザクションの場合には ‘1’ が記述される。
【0038】(2)I/Oトランザクション発行部210はトランザクション発行キュー200に格納されたトランザクションを連続して発行する。この時、同一I/Oバス21aから発行された一連のトランザクションの先頭トランザクションには、図2に示すようにトランザクション30に加え、先頭トランザクションであることを示すヘッダフラグ31を付加する。
【0039】(3)I/Oトランザクション発行部210は発行したトランザクションに対して応答を受け取る。ノードコントローラ1aよりOKを受け取った場合、I/Oトランザクション発行部210はトランザクション発行キュー200の中から対応するトランザクションのエントリを削除する。
【0040】(4)ノードコントローラ1aからトランザクションに対するリトライ要求を受け取った場合、I/Oトランザクション発行部210はトランザクション発行キュー200の対応するエントリのトランザクション属性フィールド200bを ‘1’ にセットする。リトライを要求されたトランザクションを再発行する時、その先頭トランザクションに対してヘッダフラグ31を付加する。
【0041】すなわち、I/Oトランザクション発行部210は、■トランザクションキュー中のトランザクションを連続発行し、■先頭トランザクションにはヘッダフラグを付加する機能を有する。
【0042】(応答側ユニット構成)応答側ユニットの構成の詳細は以下のようになる:I/Oフラグレジスタ120は中にリトライ制御レジスタ400と応答保留制御レジスタ410を持つ。それぞれのレジスタはプロセッサシステム内の全I/Oバス21aに対応したエントリを持つ。
【0043】・リトライ制御レジスタ400の各エントリは初期値が’0’のリトライビットを持ち、いずれのI/Oバス21aからのトランザクションがリトライされたかを記録する。
【0044】・応答保留制御レジスタ410の各エントリは初期値が’0’の保留ビットを持ち、いずれかのI/Oバス21aからのトランザクションの応答が保留されているかを記録する。(リトライ制御レジスタ400と応答保留制御レジスタ410の構成はこれ以外のものも考えられるが、それについては後述する。)(応答側ユニット動作)(1)I/Oトランザクション処理部110は、トランザクションを受け取った時、まずヘッダフラグ31が付加されているかどうかを見る。ヘッダフラグ31が付加されている場合、I/Oフラグレジスタ120内のリトライ制御レジスタ400内の要求元ユニットに対応するリトライビットを ‘0’ にクリアする。
【0045】(2)I/Oトランザクション処理部110は、フラグレジスタ120内のリトライ制御レジスタ400と応答保留制御レジスタ410内の、要求元I/Oバス21aに対応する保留ビットを参照する。
【0046】(a)リトライ制御レジスタ400内の対応するリトライビットが ‘1’ である場合、先行トランザクションがリトライしたことを示している。リトライビットが ‘1’ である場合、I/Oトランザクション処理部110は当該トランザクションをリトライさせる。
【0047】(b)リトライ制御レジスタ400内の対応するリトライビットが ‘0’ で、応答保留制御レジスタ410内の対応する保留ビットが ‘1’ である場合、先行トランザクションが応答を保留したことを示している。この場合、先行トランザクションがリトライとなる可能性があるため、I/Oトランザクション処理部110は順序保証のために受け付けたトランザクションをリトライさせ、対応するリトライビットを ‘1’ にセットする。
【0048】(c)リトライ制御レジスタ400内の対応するリトライビットが ‘0’ で、応答保留制御レジスタ410内の対応する保留ビットが ‘0’ である場合の動作は、プロセッサバスインタフェース11が当該トランザクションを受け付けられるかどうかで決まる。
【0049】■プロセッサバスインタフェース11がリトライを要求する場合、I/Oトランザクション処理部110は要求元ユニットであるI/Oユニット2に対してリトライを要求し、対応するリトライビットに ‘1’ をセットする。
【0050】■プロセッサバスインタフェース11が要求を受け付けられる場合、I/Oトランザクション処理部110は要求元ユニットであるI/Oユニット2aに対してOKを応答する。
【0051】■プロセッサバスインタフェース11がすぐに応答が返せない場合、I/Oトランザクション処理部110は当該トランザクションの応答を保留する。この時、I/Oトランザクション処理部110は応答保留制御レジスタ410内の対応する保留ビットを ‘1’ にセットする。
【0052】(3)応答を保留していたトランザクションに対してプロセッサバスインタフェース11が応答を返す時、当該トランザクションを保留する際にI/Oトランザクション処理部110が保留ビットを ‘1’ にセットしていた場合、これを ‘0’ にクリアする。
【0053】(a)プロセッサ13にキャッシュ一致制御要求を出した結果トランザクションをリトライする必要があった場合、I/Oトランザクション処理部110は要求元ユニットであるI/Oユニット2aに対してリトライを要求し、リトライ制御レジスタ400内の対応するリトライビットに ‘1’ をセットする。
【0054】(b)プロセッサ13のキャッシュ一致制御が終了した場合、I/Oトランザクション処理部110は要求元ユニットであるI/Oユニット2aに対してOKを応答する。
【0055】すなわち、応答側ユニットは、■先行するトランザクションがリトライまたはリトライの可能性がある場合には、後続のトランザクションをリトライとすることで順序保証を行い、■ヘッダフラグのついたトランザクションを受け取った場合、リトライフラグをクリアし処理を再開する機能を有する。
【0056】以下、全体の動作を詳細に示す。リトライが発生するケースと応答保留が発生するケースのそれぞれについて説明をする。
【0057】まず一連のトランザクションTa〜Tcの連続発行において、Tbでリトライが発生した場合を例に順序を保証する方法について述べる。
【0058】ノード1aに対してI/Oバス21a上のデバイスからトランザクションTa〜Tcが発行される。発行されたトランザクションTa,Tb,Tcは要求トランザクションキュー200のトランザクションフィールド200aに順に格納される。トランザクション属性フィールド200bには各トランザクションが初めて要求されたトランザクションであるを示す ‘0’ がセットされる。続いてI/Oトランザクション発行部210は相互結合網3を介して要求先のノード1aに対してトランザクションを発行する。この時I/Oトランザクション発行部210はTaが一連のトランザクションの先頭であるため、図2に示すようにTaのトランザクション30にヘッダフラグフィールド31 を付加する。
【0059】次に要求先ノードにおけるトランザクション受信時の振る舞いについて述べる。
【0060】(1)要求先のノードコントローラ1aではI/Oトランザクション処理部110において受信したトランザクションが順次処理される。ここでI/Oフラグレジスタ120内のリトライ制御レジスタ400の対応するリトライビットを参照すると、 ‘0’ すなわち先行するトランザクションはリトライしていないことを示している。その結果I/Oトランザクション処理部110はトランザクションTaの処理を完了させ、要求元のノード2aに対して処理が正常に受け付けられたことを示すOKを返す。
【0061】(2)I/Oトランザクション処理部110がTbを受信し、プロセッサバスインタフェース11がTbの処理を行えない場合、I/Oトランザクション処理部110は要求元のノード2aに対してリトライを要求する。この時リトライ制御レジスタ400の対応するリトライビットに ‘1’ をセットする。
【0062】(3)続いてI/Oトランザクション処理部110がTcを受信すると、リトライ制御レジスタ400内の対応するリトライビットが ‘1’ であるので、I/Oトランザクション処理部110はTcに関してもリトライを要求する。
【0063】要求元ノードのI/Oユニット2aでは、Ta に関してはノードコントローラ1aからOKが返ってきたためトランザクション発行キュー200からTaのエントリを削除する。しかしTb,Tcに関してはノードコントローラ1aからリトライ要求を受けたため、トランザクション属性フィールド200bにはリトライ要求されたトランザクションであることを示す ‘1’ がセットされる。I/Oトランザクション発行部210はリトライ要求に応じてトランザクションを再送する。この時トランザクションTbが先頭トランザクションになるためヘッダフラグ31を付与して再発行する。
【0064】ノードコントローラ1aでは、受信したTbにヘッダフラグが付与され、かつリトライ制御レジスタ400内の対応するリトライビットが ‘1’ であるため、Tbが再発行されたトランザクションの先頭であることを知る。その結果、I/Oトランザクション処理部110はリトライ制御レジスタ400内の対応するリトライビットを ‘0’ にクリアし、TbおよびTcの処理を再開する。
【0065】以上の処理により、I/Oバス21aからのトランザクションがリトライされた場合、後続のトランザクションもリトライすることができ、トランザクションの完了順序が保証される。
【0066】次に、応答が保留された時の動作について説明する。一連のトランザクションTa〜Tcの連続発行において、Tbの応答が保留された場合を例に順序を保証する方法について述べる。
【0067】トランザクションTbを受けたI/Oトランザクション処理部110は、プロセッサバスインタフェース11がTbに対する応答を即時に返せない場合、応答を保留する。この時、I/Oフラグレジスタ120内の応答保留制御レジスタ410の要求元I/Oバスに対応する保留ビットに ‘1’ をセットし、プロセッサバスインタフェース11がTbに対する応答を返すのを待つ。
【0068】I/Oトランザクション処理部110は応答保留制御レジスタ410の対応する保留ビットが ‘1’ である内に後続のトランザクションTcが到着した場合、Tbがリトライとなる可能性があるため、順序保証のためにTcもリトライとする必要がある。そこでI/Oトランザクション処理部110はリトライ制御レジスタ400内の対応するリトライビットをセットする。
【0069】ここでTc自身は順序保証のためにリトライとする必要があるが、プロセッサバスインタフェース11がTcに対するキャッシュ一致制御を処理できる場合これを行うことはできる。I/Oバス21a上において守らなくてはならない順序は完了の順序であるため、キャッシュ一致制御処理はどのような順番で行っても問題はない。そこでI/Oトランザクション処理部110はプロセッサバスインタフェース11に対してTcを処理できるかどうかを尋ね、プロセッサバスインタフェース11がTcに対する応答を即時に返せない場合には、I/Oトランザクション処理部110は応答を保留後リトライとする。プロセッサバスインタフェース11がTcに対する応答を即時に返せる場合は、その結果がOKの場合でもリトライの場合でも、I/Oトランザクション処理部110は要求元のI/Oユニット2aに対して即時にリトライを要求するプロセッサバスインタフェース11からTbに対する応答が返ってきた時、I/Oトランザクション処理部110はトランザクションTbが最初に応答を保留したトランザクションであることを認め、応答保留制御レジスタ410内の対応する保留ビットを ‘0’ にクリアする。
【0070】以上の処理により、一連のトランザクションの途中で応答が保留された場合においても、その完了順序を保証することができる。この方法を用いた場合、先行のトランザクションの応答保留中に後続のトランザクションが到着してしまうと、それ以降のトランザクションがリトライされてしまうが、後続のトランザクションの到着前にプロセッサバスインタフェース11が応答を返してきたケースではそのままトランザクションの処理を通常通り続けることができるという特徴がある。
【0071】以上の処理により、あるI/Oバスからのトランザクションがリトライされた場合、たとえその応答が保留された後リトライされる場合でも、後続のトランザクションをリトライすることができ、トランザクションの順序が保証される。
【0072】なお、実施形態のプロセッサシステムではトランザクションの要求先のノードのみがキャッシュ一致処理を行っているが、キャッシュ一致処理トランザクションを全ノードがスヌープしている場合においては、要求を発行した対象の全ノードコントローラからの応答がOKだった場合にのみOKであるという制御を追加することで、任意のノードがリトライ制御を行うことが可能である。
【0073】〔実施の形態例1の変形例1〕上記の実施例の変形例で、先行トランザクションが保留中に到着した Tc を、I/Oトランザクション処理部110がリトライとせず応答を保留させる方法も考えられる。この場合には、プロセッサバスインタフェース11はTcに対する応答を即時返している場合でも、先行する応答が保留されたトランザクション(この場合Tb)の応答が返ってくるまでは、I/Oトランザクション処理部がTcの応答を保留する。そしてプロセッサバスインタフェース11がTbに対してOKと応答した場合には、I/Oトランザクション処理部110はTcに対してもOKと応答する(Tcの応答が元々リトライだった場合には、通常のリトライの動作を行う)。
【0074】この方法を採った場合、途中で応答が保留されて応答保留中に後続トランザクションが到着した場合でも、実際にリトライが起こらない限りトランザクションを余計にリトライしてしまうことがないという特徴がある。しかし応答保留制御レジスタ410内の対応する保留ビットは1ビットしかないため、いくつのトランザクションが応答を保留しているかがわからない。このため、一回でもトランザクションの応答が保留され保留ビットが立ってしまうと、これを保留完了時にクリアすることはできない(上記の例では、Tbが応答を返す時に、Tcが既に応答を保留しているケースがある。ここでTbが保留ビットを ‘0’ にしてしまうと、Tcが応答保留中であるにも関わらず、その後に到着したTdは誰も応答を保留していないという誤った認識をしてしまう)。一度セットされた保留ビットは、I/Oトランザクション処理部が、ヘッダフラグ31の付加された先頭トランザクションを受けた時に、リトライ制御レジスタ400内のリトライフラグと共にクリアする。
【0075】〔実施の形態例1の変形例2〕前期実施例では、I/Oユニット2aは、リトライを要求され再発行されたトランザクションであることをヘッダフラグを付与することによってノードコントローラ1aに伝え、ノードコントローラ1aではこれによってリトライ制御レジスタのクリアを行っていた。再発行されたトランザクションであることをI/Oユニット2aがノードコントローラ1aに伝える方法としては、トランザクション30にヘッダフラグ31を付加する方法の他にも考えられる。1つ目の方法は、各トランザクションに固有の識別子を割り付け、再発行時にも必ず同じ識別子を使って発行するようにする方式である。この方式では図3に示すようにヘッダフラグ31の代わりにトランザクションの識別子 32を付与して発行する。ノードコントローラ1a内のI/Oフラグレジスタ120のリトライ制御レジスタ400は、リトライとなった先頭のトランザクションの識別子 32を記録するリトライ識別子記録フィールドを持ち、リトライフラグが ‘0’ である時にリトライとなった最初のトランザクションの識別子 32を記録する。I/Oトランザクション発行部210では、リトライとなったトランザクションを再発行する際に前回発行した時と同じ識別子を付けて再発行する。I/Oトランザクション処理部110ではI/O発トランザクションを受け付ける際、リトライ制御レジスタ400の対応するエントリのリトライ識別子記録フィールドの識別子と受け付けたトランザクションの識別子32との比較を行う。両者の識別子が一致した場合は、リトライした先頭トランザクションが再発行されたとみなし、対応するリトライフラグを ‘0’ に変更する。
【0076】〔実施の形態例1の変形例3〕上記の実施の形態例1において、ヘッダフラグに代わるもう1つの方法は、リトライ回数を示すリトライカウンタを用いる方法である。この方法では、図5に示すようにI/Oトランザクション発行部210は、内部にリトライ回数を示すリトライカウンタ420を持つ。そして図4に示すように、トランザクションフォーマット30に、リトライカウンタを持つフィールド33を付加する。一連のトランザクションを発行する際には、発行するトランザクション全てに同じリトライカウンタ420の値を付加して発行する。リトライし再発行する場合には、リトライカウンタ420の値を1増やし、増やした値を一連のトランザクション全てに付加して発行する。ノードコントローラ1aでは、I/Oフラグレジスタ120のリトライ制御レジスタ400に、リトライとなったトランザクションのリトライカウンタの値33を記録するリトライカウンタ記録フィールドを要求元I/Oバス21の本数に応じた個数持つ。トランザクションがリトライとなった場合、そのトランザクションのリトライカウンタの値33を要求元I/Oバス21に対応したリトライカウンタ記録フィールドへと記録する。I/Oトランザクション処理部110ではI/O発トランザクションを受け付ける際、リトライ制御レジスタ400内の対応するリトライカウンタと受け付けたトランザクションのリトライカウンタ33の比較を行う。リトライカウンタの値が異なる場合には、トランザクションが再発行されたとみなし、対応するリトライフラグを ‘0’に変更する。
【0077】〔実施の形態例1の変形例4〕上記の実施例1で応答保留制御レジスタ410の構成に、保留ビットではなく、保留カウンタを持たせる方法も考えられる。この場合の動作は以下のようになる。
【0078】(1)Tbが応答を保留する場合、I/Oトランザクション処理部110はI/Oフラグレジスタ120内の対応する保留カウンタを +1 する。具体的には ‘1’ が記録される。
【0079】(2)保留カウンタが1以上(この場合は ‘1’) である内に後続のトランザクションTc が到着した場合、I/Oトランザクション処理部110はこのTcの応答を無条件で保留する。そしてI/Oフラグレジスタ120内の対応する保留カウンタを +1 する。具体的には ‘2’ が記録される。
【0080】(3)Tb が応答を返す時にはI/Oトランザクション処理部はI/Oフラグレジスタ120内の対応する保留カウンタを −1 する。具体的には ‘1’ が記録される。
【0081】(4)I/Oトランザクション処理部110はTb が応答を返したことによってTc も応答を返すことができることを知る。この時I/Oフラグレジスタ120内の対応する保留カウンタを −1 する。具体的には ‘0’ が記録される。
【0082】〔実施の形態例1の変形例5〕上記の実施の形態例1で応答保留制御レジスタ410の構成に、保留ビットに加えて最後に応答を保留したトランザクションの識別子を記録する保留識別子記録フィールドを付加する方法も考えられる。この場合の動作は以下のようになる。
【0083】(1)Tbが応答を保留する場合、I/Oフラグレジスタ120内の対応する保留ビットをセットする。具体的には ‘1’ が記録される。それと同時に対応する保留識別子記録フィールドにTbのトランザクション識別子32を記録する。
【0084】(2)保留ビットが ‘0’ である内に後続のトランザクションTcが到着した場合、このTcは無条件で応答が保留される。そして保留識別子記録フィールドにTcのトランザクション識別子32を上書きする。
【0085】(3)Tbが応答を返す時には、保留識別子記録フィールドに記録された識別子とTbのトランザクション識別子 32を比較する。この場合、保留識別子記録フィールドに記録されているのはTcの識別子である。I/Oトランザクション処理部110は識別子が一致しないため、何もしない。
【0086】(4)Tcが応答を返す時、やはり保留識別子記録フィールドに記録されたし機別しとTcの識別子を比較する。I/Oトランザクション処理部110は、今度は識別子が一致するため、保留ビットに ‘0’ を書き込みクリアする。
【0087】〔実施の形態例2〕本発明の第2の実施例を図6を用いて説明する。
【0088】図6は本発明の一実施例に関わるプロセッサシステムの構成を示す概略図である。ノードコントローラ1001a,1001bまたはI/Oユニット1002a,1002bからなるノード、および図示されていない主記憶が相互結合網1003によって多重化されたシステムを構成している。この図ではI/Oユニット1002a,1002bはノードコントローラ1001a,1001bと別のノードとして描かれているが、これは同じノードに存在しても良い。以下の説明はどちらの構成でも差異を生じない。
【0089】I/Oユニット1002a,1002bは、実施の形態例1の図1におけるI/Oユニット2aと同一のものである。
【0090】ノードコントローラ1001a,1001b,は、1つ以上のプロセッサ1013がつながったプロセッサバス1012とのインタフェースを持つプロセッサバスインタフェース1011を有する。
【0091】相互結合網1003(または経路上の任意の中継ユニット)は、内部にI/Oユニット1002a,1002bから発行されたトランザクションを制御するI/Oトランザクション処理部1110、およびI/Oフラグレジスタ1120を有する。ここでI/Oフラグレジスタ1120はリトライ制御レジスタ1400と応答保留制御レジスタ1410の2つのレジスタから構成される。各レジスタの詳細については後述する。また、各ノードコントローラ1001a,1001bからの応答を集計する応答集計部1500を有する。
【0092】以下、I/Oバス上のデバイスがI/O発主記憶ライトトランザクションを発行した場合の概略を述べる。
【0093】I/O発主記憶ライトは、I/Oバス1021a上のデバイスが発行し、主記憶に書き込む。この時、プロセッサ1013がキャッシュ上に当該データを持つ可能性があるため、プロセッサバスインタフェース1011を介してキャッシュ一致制御を行うトランザクションを、システム中の全ノードコントローラ1001a,1001bに対して発行し、一致制御が終了した時点で完了させる。また、I/O発主記憶ライトは、PCIバス等に見られるように、I/Oバス1021a上の発行順序と同じ順序で完了することを保証する必要がある。この時バススループットを上げるためには、完了順序の保証を行いながら、トランザクションを連続して発行する必要がある。
【0094】一方、応答側のプロセッサバスインタフェース1011では、プロセッサ1013のキャッシュの状態によって次の3通りの応答を行う。
【0095】1.プロセッサ1013のキャッシュ上に当該データがない場合、主記憶ライトはすぐに実行できるため、OKと応答する。
【0096】2.主記憶ライトが実行できない場合、リトライを要求する。
【0097】3.プロセッサ1013のキャッシュ上に当該データを持つ可能性がある場合、プロセッサバスインタフェース1011はこれを無効化する処理をプロセッサ1013に対して要求する。この場合、OKかリトライかはプロセッサ1013の応答によって決定するため、プロセッサバスインタフェース1011は応答を一旦保留し、プロセッサ1013からの応答が返ってきた時点で改めて応答を行う。
【0098】このような条件でトランザクションの発行された順序を守るために、本実施例では以下のような手順で処理を行う:(1)要求側のI/Oユニット1002aでは要求先であるプロセッサ1013を含む全ノードコントローラ1001a,1001bに対して、順序を保ってトランザクションを連続発行する。この時、同一のI/Oバス1021aから発行された一連のトランザクションの先頭トランザクションには、図2に示すように、トランザクション30に対して先頭であることを示すヘッダフラグ31に値 ‘1’ を付加する。
【0099】(2)相互結合網1003は、発行されたI/Oトランザクションを目的のノードコントローラ1001a,1001bに対して転送する。
【0100】(3)相互結合網1003にある応答集計部1500は、各ノードコントローラ1001a,1001bからの応答を集計し、I/Oトランザクション処理部1110へと通知する。応答集計部1500では、あるノードコントローラ1001a,1001bからの応答がリトライとなった場合、結果をリトライとする。
【0101】(4)I/Oトランザクション処理部1110は、各要求元I/Oバス1021a,1021bに対応したレジスタを持つI/Oフラグレジスタを管理している。先行するライトトランザクションがリトライとなった場合、後続のトランザクションもリトライとする。I/Oトランザクション処理部1110は、最終的な結果を要求元であるI/Oユニット1002aへと返す。
【0102】(5)I/Oユニット1002aではリトライとなったトランザクションを順序を保って再発行する。この時、再発行された先頭トランザクションにはヘッダフラグ31に ‘1’ を付加する。
【0103】(6)プロセッサバスインタフェース1011で応答が保留された場合、ノードコントローラ1001a,1001bは相互結合網1003の応答集計部1500に対して応答を保留した旨を通知する。応答集計部1500では応答が揃ったものから順にI/Oトランザクション処理部1110へと結果を通知する。I/Oトランザクション処理部1110では、異なる要求元から出たトランザクションの応答順序を適宜入れ替えて要求元ユニットへと応答を返すことができる。
【0104】(7)同一要求元バス1021aから発行された先行するライトトランザクションの応答が保留された場合、応答集計部1500ではこれをI/Oトランザクション処理部1110に伝え、同一要求元バス1021aから発行された後続トランザクションの応答を保留する。I/Oトランザクション処理部1110は、先行するトランザクションの結果によって後続のトランザクションをリトライするかどうかを決定する。
【0105】本実施例は、実施の形態例1におけるI/Oトランザクション処理部の機能を、ノードコントローラから総合結合網内へと移したものと考えることができる。ノードコントローラには順序を保証するための機能がなくても、代わりに相互結合網内で応答を操作することによって、リトライや応答保留発生時の順序保証を実現している。
【0106】以下、本実施の形態例を詳しく説明する。まず、前記処理手順を実現するために、各ユニットは以下のような動作を行う。
【0107】(要求側ユニット動作)図6に対して以下の読み替えを行うことで、実施の形態例1の図1の要求側ユニット動作と同じ動作となる:I/Oバス1021a → I/Oバス1021I/Oバスユニット1002 → I/Oバスユニット2トランザクション発行キュー1200 → トランザクション発行キュー200トランザクション属性フィールド1200b → トランザクション属性フィールド200bI/Oトランザクション発行部1210 → I/Oトランザクション発行部210(中継部ユニット構成)図6に対して以下の読み替えを行うことで、実施の形態例1の図1の応答側ユニット構成に、応答集計部1500を加えた構成となる。
I/Oフラグレジスタ1120 → I/Oフラグレジスタ120リトライ制御レジスタ1400 → リトライ制御レジスタ400応答保留制御レジスタ1410 → 応答保留制御レジスタ410(中継部ユニット動作)実施の形態例1の応答側ユニット動作に加え、以下の応答集計処理が加わる。
【0108】(1)相互結合網1003は、I/Oユニット1002aから発行されたトランザクションを全ノードコントローラ1001a,1001bに対して転送する。
【0109】(2)応答集計部1500は、トランザクションを発行したノードコントローラ1001a,1001b全てから応答が返ると、集計した結果をI/Oトランザクション処理部1110へと通知する。I/Oトランザクション処理部1110はI/Oフラグレジスタ1120を参照し、要求元ユニットであるI/Oユニット1002aへと最終的な応答を返す。この時の応答は以下のようになる:(a)あるノードコントローラ1001aからの応答が保留された場合、結果は全てのノードコントローラ1001a,1001bから応答が返るまで保留される。
【0110】(b)全てのノードコントローラ1001a,1001bからの応答が返り、最低1つのノードコントローラ1001aからの応答がリトライだった場合、あるいは同一のI/Oバス1021aから発行された先行するトランザクションがリトライだった場合、または応答が保留されている場合、結果はリトライとする。
【0111】(c)全ノードコントローラ1001a,1001bからOKが返り、かつ同一I/Oバス1021aから発行された先行するトランザクションがリトライでなく、応答保留中でもない場合、結果はOKとする。
【0112】(3)I/Oトランザクション処理部1110は、同一のI/Oバス1021aから発行されたトランザクションがリトライ、あるいは応答保留したことを記録するI/Oフラグレジスタ1120を有する。その動作と機能は実施の形態例1と同一となる。
【0113】(4)I/Oトランザクション発行部1210は、トランザクションが再発行されたことを示すために、トランザクション30にヘッダフラグ31を付加し、再発行された先頭トランザクションであることをI/Oトランザクション処理部1120に伝える。その動作と機能も実施の形態例1に準ずる。
【0114】以下、全体の動作を実施の形態例1と比較しながら示す。
【0115】まず一連のトランザクションTa〜Tcの連続発行において、Tbでリトライが発生した場合を例に順序を保証する方法について述べる。
【0116】ノード1001aおよび1001bに対してI/Oバス1021a上のデバイスからトランザクションTa〜Tcが発行される。この時I/Oトランザクション発行部1210はTaが一連のトランザクションの先頭であるため、図2に示すようにTaのトランザクション30に対応するヘッダフラグフィールド31に‘1’ を付加する。
【0117】次に中継ユニットにおけるトランザクション受信時の振る舞いについて述べる。
【0118】(1)相互結合網1003では、I/Oユニット1002aから受け取ったトランザクションをノードコントローラ1001a,1001bへと転送する。応答集計部1500は、各トランザクションについていくつのノードコントローラ1001a,1001bへ転送したか(この場合は2)を覚えておく。
【0119】(2)ノードコントローラ1001aではプロセッサバスインタフェース1011がTbの処理を行えないため、相互結合網1003に対してリトライと応答する。1001a,1001bからトランザクションの応答を受けた応答集計部1500では、要求元であるI/Oユニット1002aに対してリトライを要求し、同時にI/Oトランザクション処理部1110に当該トランザクションがリトライしたことを通知する。I/Oトランザクション処理部1110はリトライ制御レジスタ1400の対応するリトライビットに ‘1’ をセットする。
【0120】(3)ノードコントローラ1001a,1001bは、両方ともTcを処理することができるので相互結合網1003に対してそれぞれOKを返す。応答集計部1500ではこの結果を集計してOKをI/Oトランザクション処理部1110に伝える。I/Oトランザクション処理部1110では、発行元I/Oバス1021aに対応するリトライ制御レジスタを参照し、これが ‘1’ であることから先行するトランザクションがリトライしたことを知る。このため、順序保証のためにTcに対してもリトライを要求する。
【0121】要求元ノードのI/Oユニット1002aでは、リトライとなったTb,Tcを再発行し、その際Tbに対して先頭トランザクションであることを示すためヘッダフラグフィールド31に ‘1’を付与する。
【0122】I/Oトランザクション処理部1110では、受信したTbにヘッダフラグが付与され、かつリトライ制御レジスタ1400内の対応するリトライビットが ‘1’ であるため、Tbが再発行されたトランザクションの先頭であることを知る。その結果、I/Oトランザクション処理部1110はリトライ制御レジスタ1400内の対応するリトライビットを ‘0’ にクリアし、TbおよびTcの処理を再開する。
【0123】以上の処理により、I/Oバス1021aからのトランザクションがリトライされた場合、後続のトランザクションもリトライすることができ、トランザクションの完了順序が保証される。
【0124】次に、応答が保留された時の動作について説明する。一連のトランザクションTa〜Tcの連続発行において、Tbの応答が保留された場合を例に順序を保証する方法について述べる。
【0125】トランザクションTbを受けたノードコントローラ1001aは、Tbに対する応答を即時に返せない場合、応答を保留することを相互結合網1003に通知する。応答集計部1500では、Tbに対する応答が保留されたことをI/Oトランザクション処理部1110に通知する。I/Oトランザクション処理部1110は、I/Oフラグレジスタ1120内の応答保留制御レジスタ1410の要求元I/Oバスに対応する保留ビットに ‘1’ をセットし、ノードコントローラ1001aがTbに対する応答を返すのを待つ。
【0126】応答集計部1500は、Tcに対する応答がノードコントローラ1001a,1001bから返ってくると、これを集計してOKという応答をI/Oトランザクション処理部1110に通知する。I/Oトランザクション処理部1110は、応答保留制御レジスタ1410の対応する保留ビットが ‘1’ であることから、先行するトランザクションの応答がまだ保留されていることを知る。このため、順序保証のためにTcもリトライとする必要がある。I/Oトランザクション処理部1110はリトライ制御レジスタ1400内の対応するリトライビットをセットする。
【0127】ノードコントローラ1001aからTbに対する応答が返ってきた時、応答集計部1500はTbに対する応答(この場合OK)を発行元であるI/Oユニット1002aに対して返す。同時にI/Oトランザクション処理部1110へとTbの応答が返ってきたことを通知する。I/Oトランザクション処理部1110はトランザクションTbが最初に応答を保留したトランザクションであることから、応答保留制御レジスタ1410内の対応する保留ビットを ‘0’ にクリアする。以上の処理により、一連のトランザクションの途中で応答が保留された場合においても、その完了順序を保証することができる。
【0128】以上の処理により、あるI/Oバスからのトランザクションがリトライされた場合、たとえその応答が保留された後リトライされる場合でも、後続のトランザクションをリトライすることができ、トランザクションの順序が保証される。
【0129】〔実施の形態例2の変形例〕実施の形態例2に対しても、実施の形態例1の変形例1〜5と同じ変形例を適用することができる。
【0130】
【発明の効果】以上説明したように、本発明によれば、先行するトランザクションの完了を待たずに後続のトランザクションを連続して発行できるため、システム全体のスループットを向上させることができる。また、応答側で応答を保留する場合にも順序保証をした上での連続発行が可能となる。
【出願人】 【識別番号】000005108
【氏名又は名称】株式会社日立製作所
【出願日】 平成12年9月29日(2000.9.29)
【代理人】 【識別番号】100075096
【弁理士】
【氏名又は名称】作田 康夫
【公開番号】 特開2002−108836(P2002−108836A)
【公開日】 平成14年4月12日(2002.4.12)
【出願番号】 特願2000−302832(P2000−302832)