以下、実施形態について図面を参照しながら詳細に説明する。開示の技術の理解を助けるため、まずライトバック型のキャッシュメモリを用いるシステムについて説明する。
ライトバック型のキャッシュメモリを用いるシステムにおいては、キャッシュメモリに格納されたデータを主記憶装置に書き戻すライトバック動作が行われる。ライトバック動作が行われるときのシステム性能の向上に関する技術としては、以下のようなものが開示されている。
例えば、ライトバック型キャッシュを有するCPUとホストブリッジとがCPUローカルバスを介してメインメモリを共有するシステムにおける次のような構成が開示されている。
ホストブリッジは、メインメモリへのリードアクセスアドレスを保持するアドレス保持回路と、アドレス保持回路に保持されたアドレスとCPUによるライトバック動作におけるラインアドレスとの一致を検出するアドレスヒット判定回路を備える。また、両アドレスが一致した場合に、ライトバック動作におけるライトデータを取り込み、且つ、メインメモリへのアクセスをキャンセルするメモリアクセス制御回路をホストブリッジが備える。以上の構成により、所望のデータを早期に得るとともに、ローカルバスのトラフィックを軽減することができる。
また、CPUローカルバスとIO(Input/Output)バスとをバスブリッジで連結してなるコンピュータシステムにおける次のような技術も開示されている。すなわち、IOバスに接続されるバスマスタ装置からIOバスを介し主記憶装置へのアクセス動作であるリード要求があった際、キャッシュ検査部によりキャッシュへのライトバックが必要であることが通知された場合、次のようにして主記憶アクセス動作が高速化される。
具体的には、書き戻し制御部は、主記憶制御部を介してライトバックデータを主記憶装置に書き戻すのと同時に、ライトバックデータをデータバイパス部にも転送する。すると、データバイパス部を介して、リード要求アドレスに応じた目的のデータが直接IOバス制御部に取り込まれ、IOバスからバスマスタ装置へ転送される。以上により、主記憶装置に対する書き戻し処理の終了を待って主記憶装置からのデータ読み出し処理を行う必要がなくなる。
以上のように、ライトバック動作が行われるときのシステム性能の向上に関するいくつかの技術が開示されている。しかしながら、複数のCPUを有するマルチCPUシステムにおいてライトバック型のキャッシュメモリが用いられると、キャッシュプロトコルによっては、システム内の制御装置およびデータ転送装置が比較的大きなサイズのバッファを必要とすることがある。
以下では、ライトバック型のキャッシュメモリが用いられる場合に、システム内の制御装置およびデータ転送装置に必要なバッファサイズについて、具体的に説明する。
図1は複数のCPUを備えるシステムの例を示す構成図である。図1において、情報処理装置であるサーバシステム100は、複数のノード101a、101c、101e、101gとデータ転送装置であるクロスバスイッチ(以下「XB」と略す)102を備える。複数のノード101a、101c、101e、101gはXB102を介して互いに接続されている。図1のサーバシステム100のようにノード拡張された構成は、サーバシステムに好適である。
図1においてノード101aは、バス108aによりXB102と接続されたシステムコントローラ(以下「SC」と略す)103aを備える。ノード101aはさらに、内部バスを介してSC103aに接続されたCPU104a、CPU104b、メインメモリ105a、ディレクトリ106a、およびIOC(Input/Output Component)107aを備える。ノード101a内の各部は、例えば、システムボードとも呼ばれる1枚のマザーボード上に実装されていてもよい。また、図1の例では、他のノード101c,101e、および101gも、ノード101aと同様に構成されている。
サーバシステム100内の各コンポーネントについてさらに詳しく説明すれば下記のとおりである。
XB102はSC103a〜103g間でのデータ伝送を行うスイッチング機構である。後述のように、サーバシステム100内のコンポーネント間でのデータの授受はパケットの伝送により行われる。XB102は、ノード101a〜101g間でのパケットのルーティングを行うデータ転送装置の一例である。
SC103aは、ノード101a内のコンポーネント間のデータ伝送を制御するとともに、ノード101a内の各コンポーネントと他のSC103c〜103gとの間のデータ伝送を制御する制御装置である。また、SC103aはディレクトリ106aの参照や更新の制御も行う。SC103a〜103gもSC103aと同様である。
CPU104a〜104hのそれぞれは、演算や制御などを実行し、不図示のキャッシュメモリを備えている。キャッシュメモリは階層化されていてもよい。
メインメモリ105aは、例えばRAM(Random Access Memory)である。メインメモリ105aへのアクセスは、同じノード101a内のコンポーネントからも行われ、他のノード101c〜101g内のコンポーネントからも行われる。メインメモリ105c〜105gもメインメモリ105aと同様に、いずれのノード内のコンポーネントからもアクセス可能なRAMである。
ディレクトリ106aは、同じノード101a内のメインメモリ105aに格納されたデータがどのCPU内のキャッシュメモリにキャッシュされているかを、例えばテーブル形式で格納する。つまり、ディレクトリ106aの参照や更新を行うSC103aは、データ伝送を制御するだけでなく、メインメモリ105aとCPU内のキャッシュメモリ間のデータ整合性であるキャッシュコンシステンシの管理も行っている。ディレクトリ106c〜106gもディレクトリ106aと同様に、同じノード内のメインメモリ105c〜105gに格納されたデータについて管理する。
IOC107aは、不図示のPCI(Peripheral Component Interconnect)デバイスなどの様々なI/Oデバイスと、IOC107aとSC103aの間のシステムバスとを接続するチップセットコンポーネントである。IOC107c〜107gもIOC107aと同様である。
以上のように構成されたサーバシステム100において、コンポーネント間の通信はパケットの送受信により行われる。パケットは、データの要求、データの通知、データの要求への応答、データの転送などのために送信される。パケットは、少なくともパケットヘッダを有し、パケットの種類(タイプ)によってはデータペイロードをさらに有する。パケットは、さらに誤り検出用のトレイラを有していてもよい。
以下では、パケットヘッダが以下の(a1)〜(a3)の各フィールドを含むものとして説明する。
(a1)パケットの宛先のコンポーネントを識別する宛先ID(identifier)。
(a2)パケットの要求元のコンポーネントを識別する要求元ID。例えば、CPU104aが他のコンポーネントに何かを要求するときに送信する要求パケットの要求元IDは、CPU104aのIDである。また、CPU104aからの要求パケットに対する応答としてCPU104aへ送信されるパケットの要求元IDも、CPU104aのIDである。
(a3)1つの要求元からの異なる複数の要求(リクエスト)を識別する要求ID(以下「ReqID」と略す)。
図1の例において、各CPU104a〜104hが備えるキャッシュメモリがライトバック型のキャッシュメモリであるとする。すると、メインメモリ105a〜105gのいずれかから読み出されてキャッシュメモリに格納されたデータが書き換えられた場合、ライトバック動作が必要である。しかし、具体的にどのタイミングでライトバック動作が行われるかは、キャッシュコンシステンシを保つためのキャッシュプロトコルに応じて様々である。
キャッシュプロトコルは、キャッシュラインの状態(ステート)の頭文字を使って、「MESIプロトコル」、「MOSIプロトコル」、「MOESIプロトコル」などと呼ばれる。ステートには以下の(b1)〜(b5)のようなものがある。
(b1)M(Modified)ステートは、キャッシュラインが1つのCPUのキャッシュメモリにだけ格納されており、かつキャッシュライン内の少なくとも一部のデータが、キャッシュメモリに格納された後で書き換えられた状態である。すなわち、Mステートのキャッシュラインはダーティ(dirty)である。
(b2)E(Exclusive)ステートは、キャッシュラインが1つのCPUのキャッシュメモリにだけ格納されており、かつキャッシュラインがキャッシュメモリに格納された後で書き換えられていない状態である。すなわち、Eステートのキャッシュラインはクリーン(clean)である。
(b3)S(Shared)ステートは、同じキャッシュラインが他のCPUのキャッシュメモリにも格納されている状態である。
(b4)I(Invalid)ステートは、キャッシュラインが無効化された状態である。
(b5)O(Owned)ステートは、メインメモリへのライトバックを行う責任を持った状態である。Oステートのキャッシュラインはダーティであり、同じキャッシュラインが他のCPUのキャッシュメモリにも格納されている。
キャッシュプロトコルによって、利用するステートやステート間の遷移の仕方が異なり、ライトバックの仕方も異なる。そして、CPUの仕様によって、どのキャッシュプロトコルが採用されるかということが決まっている。
例えば、CPU104cがMステートで保持しているダーティなキャッシュラインのデータに対して共有型・データ転送要求が到来した場合のCPU104cの動作には、CPUの仕様およびキャッシュプロトコルにより以下の(c1)〜(c3)の3種類の動作をとりうる。
(c1)CPU104cはライトバックデータパケットのみを出力する。データを要求した要求元への共有型・転送データパケットの送信は、ライトバックデータパケットを受け取り、メインメモリへデータをライトバックするSCが行う。なお、CPU104cにおいて、共有型・データ転送要求により要求されたキャッシュラインは、キャッシュプロトコルに応じてIまたはSステートへ遷移する。
(c2)CPU104cはデータを要求した要求元を宛先とする共有型・転送データパケットのみを出力する。また、CPU104cにおいて、共有型・データ転送要求により要求されたキャッシュラインは、Oステートへ遷移する。例えばMOESIプロトコルでは(c2)の動作が行われ、ライトバックはすぐには行われない。
(c3)CPU104cはライトバックデータパケットと共有型・転送データパケットの双方を出力する。CPU104cにおいて、共有型・データ転送要求により要求されたキャッシュラインは、キャッシュプロトコルに応じてIまたはSステートへ遷移する。
なお、以下の説明では、次の(d1)〜(d4)に示すパケットタイプが定義されているものとして説明する。
(d1)CPUが、サーバシステム100内のいずれかのメインメモリに格納されているデータを要求するときに用いる「メモリアクセス要求パケット」がある。キャッシュプロトコルに応じて、メモリアクセス要求パケットには、排他型、共有型などの種類がある。
(d2)メモリアクセスが要求された対象データを、あるCPUがキャッシュしていたときに、メモリアクセスを要求した要求元へのデータの転送を要求するために用いられる「データ転送要求パケット」がある。例えば、後述の図4の例のように、要求元以外のSCがデータ転送要求パケットを出力する。キャッシュプロトコルに応じて、データ転送要求パケットにも、排他型、共有型などの種類がある。例えば、共有型のデータ転送要求パケットは、あるCPU内のキャッシュメモリにキャッシュされたデータを他のCPUに転送することを求めるパケットである。
(d3)CPUが、自分のキャッシュメモリにキャッシュしているダーティな(すなわちMステートの)キャッシュラインのデータをメインメモリにライトバックするときに出力する「ライトバックデータパケット」がある。
(d4)データを要求した要求元へ、要求されたデータを転送するために用いられる「転送データパケット」がある。キャッシュプロトコルに応じて、転送データパケットにも、排他型、共有型、書き戻し責任付き共有型などの種類がある。
続いて、上記(c1)〜(c3)の場合について、図2〜図4をそれぞれ参照してより具体的に説明する。
図2は、第1のキャッシュプロトコルにしたがったサーバシステム100の動作例を示す図である。
ステップS101において、CPU104aは、メインメモリ105eに格納されたデータを要求するため、SC103eを宛先とする共有型・メモリアクセス要求パケットを出力する。以下、説明の便宜上、ステップS101で出力される共有型・メモリアクセス要求パケットを識別するReqIDが5であると仮定する。
CPU104aが出力した共有型・メモリアクセス要求パケットは、SC103aとXB102を介して、メインメモリ105eと同じノード101e内のSC103eに送信される。
するとステップS102において、共有型・メモリアクセス要求パケットを受信したSC103eは、ディレクトリ106eを参照し、要求されたデータを含むキャッシュラインをキャッシュメモリに保持しているCPUを検索する。
以下では、ステップS102におけるディレクトリ106eの参照の結果、例えば、要求されたデータをCPU104cのみが保持していると判明したと仮定する。
すると、ステップS103においてSC103eは、CPU104cを宛先とする共有型・データ転送要求パケットを出力する。SC103eが出力した共有型・データ転送要求パケットは、XB102とSC103cを介して、CPU104cに送信される。
上記(c1)〜(c3)に関する前提として既に説明したように、図2の例においては、要求されたデータは、CPU104cがMステートで保持しているダーティなキャッシュライン内のデータである。よって、ステップS104でCPU104cは、Mステートのキャッシュラインのデータをメインメモリ105eにライトバックするため、メインメモリ105eと同じノード101e内のSC103eを宛先とするライトバックデータパケットを出力する。出力されたライトバックデータパケットは、SC103cとXB102を介してSC103eへと送信される。
また、上記(c1)で述べたように、CPU104cは、要求されたデータを含むキャッシュラインのステートを、キャッシュプロトコルに応じてIまたはSステートに更新する。
そして、ライトバックデータパケットを受信したSC103eは、続くステップS105において、ステップS101でデータを要求した要求元であるCPU104aを宛先とする共有型・転送データパケットを出力する。共有型・転送データパケットのデータペイロードは、SC103eによって、ライトバックデータパケットのデータペイロードからコピーされたものである。
共有型・転送データパケットは、XB102とSC103aを介してCPU104aに送信される。
さらに、ステップS106においてSC103eは、受信したライトバックデータパケットに基づいて、CPU104cがMステートで保持していたキャッシュラインのデータをメインメモリ105eにライトバックする。
以上の動作により、(c1)の場合にCPU104cが有するキャッシュメモリとメインメモリ105e間のデータ整合性であるキャッシュコンシステンシが保たれる。
続いて、上記(c2)の場合について図3を参照して説明する。図3は、第2のキャッシュプロトコルにしたがったサーバシステム100の動作例を示す図である。
図3におけるステップS201およびS202は、図2におけるステップS101およびS102と同様であるので説明を省略する。
ステップS203も、図2のステップS103とほぼ同様であるが、以下の点においてステップS103とは異なる。すなわち、上記(c2)で述べたように、CPU104cは、要求されたデータを含むキャッシュラインのステートをOステートに変更する。
そして、続くステップS204においてCPU104cは、データを要求した要求元であるCPU104aを宛先とする共有型・転送データパケットを出力する。出力された共有型・転送データパケットは、CPU104cからSC103c、XB102、およびSC103aを介してCPU104aに送信される。
なお、図2の例とは異なり、図3の例では、ライトバックは後に行われる。具体的には、ステップS203でOステートに変更したキャッシュラインをキャッシュメモリから追い出す入れ替え(リフィル)が後に生じたとき、CPU104cはライトバックデータパケットを出力してメインメモリ105eへのライトバックを行う。
以上の動作により、(c2)の場合にもCPU104cが有するキャッシュメモリとメインメモリ105e間のデータ整合性であるキャッシュコンシステンシが保たれる。
続いて、上記(c3)のCPU104がライトバックデータパケットと共有型・転送データパケットの双方を出力する場合について図4を参照して説明する。図4は、第3のキャッシュプロトコルにしたがったサーバシステム100の動作例を示す図である。
図4におけるステップS301〜S304は、図2におけるステップS101〜104と同様であるので説明を省略する。
図4の例ではライトバックデータパケットを出力するステップS304に続くステップS305において、CPU104cは、ステップS301でデータを要求した要求元であるCPU104aを宛先とする共有型・転送データパケットを出力する。共有型・転送データパケットは、SC103c、XB102、およびSC103aを介して送信され、CPU104aにおいて受信される。
なお、ステップS304とS305の実行順序は任意であり、両者が並列に実行されてもよい。また、CPU104cは、要求されたデータを含むキャッシュラインのステートを、キャッシュプロトコルに応じてIまたはSステートに更新する。
そして、ステップS306においてSC103eは、図2のステップS106と同様に、受信したライトバックデータパケットに基づいて、CPU104cがMステートで保持していたキャッシュラインのデータをメインメモリ105eにライトバックする。
以上の動作により、(c3)の場合にもCPU104cが有するキャッシュメモリとメインメモリ105e間のデータ整合性であるキャッシュコンシステンシが保たれる。
以上、図2〜図4を参照してキャッシュプロトコルに応じたサーバシステム100の動作例を説明したが、動作の違いに応じて、各SC103a〜103gおよびXB102に必要なバッファの容量も異なる。具体的には、図4の例においては、図2および図3の例に比べて、より大きな容量のバッファが必要である。以下、その理由について説明する。
上記のとおりXB102とSC103a〜103gは、サーバシステム100内のコンポーネント間のデータ伝送を制御しており、具体的にはパケットのルーティングを行っている。そのため、XB102とSC103a〜103gはいずれも、パケットを受け取る入力ポートと、入力されたパケットをルーティングするスイッチング機構と、ルーティング先のコンポーネントへとパケットを出力する出力ポートを備える。また、ルーティング先のコンポーネントにおけるパケットのオーバフローを避けるため、各SC103a〜103gはXB102への出力ポートの前段にバッファを有し、XB102は各SC103a〜103gへの出力ポートの前段にバッファを有する。
例えば、SC103aは、XB102に出力するパケットをバッファに一時的に保存し、XB102から出力許可が得られると、バッファ内のパケットを出力ポートからXB102へと出力する。したがって、最大でどれくらいの量のパケットがバッファに滞留する可能性があるのかに応じて、必要なバッファの容量は異なる。
図4の例では、キャッシュプロトコルから必然的に、ステップS304とS305という近接したタイミングで、2つのパケットがCPU104cからSC103cへ出力される。他方で、図2と図3の例では、2つのパケットがCPU104cからSC103cへ近接したタイミングで出力されるということはない。この違いのため、図4の例の方が、図2および図3の例よりも、必要なバッファの容量は大きい。
例えばSC103cが同じノード101c内のCPU104c〜104dへ出力するデータ転送要求パケットについて、応答を待たずに続けて発行できるパケットの最大数である最大アウトスタンディング(outstanding)数をPとして、SC103cに必要なバッファ容量について述べれば下記のごとくである。
図2の例では、ステップS103でSC103cがCPU104cに1つの共有型・データ転送要求パケットを出力する。つまり、SC103cはXB102から受け取った共有型・データ転送要求パケットをCPU104cにルーティングする。
すると、SC103cからCPU104cへの共有型・データ転送要求パケットの出力を契機として、ステップS104でCPU104cが1つのライトバックデータパケットをSC103cに出力する。したがって、SC103cは、少なくともP個のライトバックデータパケットを格納することが可能な容量のバッファを備える必要がある。
同様に、図3の例では、ステップS203でSC103cがCPU104cに1つの共有型・データ転送要求パケットを出力することを契機として、ステップS204でCPU104cは1つの共有型・転送データパケットを出力する。したがって、SC103cは、少なくともP個の共有型・転送データパケットを格納することが可能な容量のバッファを備える必要がある。
例えば、ライトバックデータパケットと共有型・転送データパケットのデータペイロードは、いずれも、要求された1つのキャッシュラインのデータであってもよい。したがって、図2と図3の例では、必要なバッファの容量は同様である。
他方で、図4の例では、ステップS303でSC103cがCPU104cに1つの共有型・データ転送要求パケットを出力することを契機として、ステップS304でCPU104cは1つのライトバックデータパケットをSC103cに出力する。そして、ステップS304とほぼ同時に行われるステップS305において、CPU104cは、1つの共有型・転送データパケットをSC103cに出力する。
したがって、SC103cは、少なくともP個のライトバックデータパケットとP個の共有型・転送データパケットを格納することが可能な容量のバッファを備える必要がある。つまり、1つの共有型・データ転送要求パケットが契機となってCPU104cからSC103cへ出力されるデータパケットの数は、図2と図3の例では1個だけであるのに対し、図4の例では2個であるため、図4の例では必要なバッファの容量が大きい。
もちろん、SC103cが備えるバッファの容量は、例えばIOC107cから受け付けるパケットの最大アウトスタンディング数など、他の要因にも左右される。しかしながら、仕様により規定された様々な最大アウトスタンディング数が同じであれば、図2や図3の例よりも図4の例の方が、必要なバッファの容量が大きいことは上記の説明から明らかである。同様の理由から、XB102に必要なバッファの容量も、図2や図3の例よりも図4の例の方が大きい。
続いて、開示の技術の理解を助けるため、図5〜図13を参照して、比較例について詳細に説明する。その後、図14〜図29を参照して、必要なバッファの容量が比較例と比べて約2分の1に削減される第1実施形態について詳細に説明する。また、必要なバッファの容量を削減するための別の構成を採用した第2実施形態について、図30を参照して説明する。
以下、図5〜図13において説明する比較例は、上記で説明した図1のサーバシステム100において図4に示したCPUがライトバックデータパケットと共有型・転送データパケットの双方を出力する動作を行う場合の例である。
図5は、図1に示したXB102の比較例における構成図である。図1に示したように、XB102はバス108a〜108gにより各SC103a〜103gと接続されており、SC103a〜103g間のデータ伝送を行う。図1では両向きの1本の矢印で表されている各バス108a〜108gが、図5では2本の矢印により表されている。
XB102は、SC103aから出力されたパケットを受け取る入力ポート201aと、SC103aへパケットを出力する出力ポート202aを備える。他のSC103c、103e、および103gに関しても同様に、XB102は、入力ポート201c、201e、および201g、ならびに出力ポート202c、202e、および202gを備える。
各SC103a〜103gとの間のバス108a〜108gの動作周波数とXB102内部の動作周波数が異なる場合、入力ポート201a〜201gのそれぞれと、出力ポート202a〜202gのそれぞれは、「周波数乗り換え」と呼ばれる周波数の変換も行う。
XB102はさらに、ルーティング部203と、4つの入力ポート201a〜201gに対応する4つのルーティングテーブル部204a〜204gを備える。
ルーティング部203は各入力ポート201a〜201gと接続されており、入力ポート201a〜201gからパケットを受け取る。また、ルーティングテーブル部204a〜204gは、入力ポート201a〜201gが受け取ったパケットをどの出力ポート202a〜202gに振り分けるのかを決定するテーブル(後述する図6のテーブル305)を有する。
ルーティング部203は、ルーティングテーブル部204a〜204gの決定にしたがって、入力ポート201a〜201gから受け取ったパケットを振り分ける。パケットの振り分けの詳細は図6とともに後述する。
また、XB102は、4つの出力ポート202a〜202gに対応した4組の回路を有する。
例えば、出力ポート202aに対応して出力ポート202aの前段に設けられた回路には、ポート間アービタ部205aと、ポート間セレクタ206aと、3つの出力バッファ制御部207ca、207ea、207gaが含まれる。各出力バッファ制御部207ca、207ea、207gaは、ルーティング部203、ポート間アービタ部205a、およびポート間セレクタ206aと接続されている。また、ポート間セレクタ206aは、ポート間アービタ部205aおよび出力ポート202aと接続されている。
なお、出力バッファ制御部207caは、添え字「ca」で示すように、SC103cからSC103aへの送信(すなわち入力ポート201cから出力ポート202aへの送信)に対応する。同様に、出力バッファ制御部207eaと207gaはそれぞれ、SC103eからSC103aへの送信とSC103gからSC103aへの送信に対応する。
詳しくは図7とともに後述するが、3つの出力バッファ制御部207ca、207ea、および207gaは、出力ポート202aを介してSC103aへ出力するパケットを保存するバッファを有する。前述の説明において、図2および図3の例に比べて図4の例ではバッファに必要な容量が大きいことを述べたが、当該バッファは具体的には図5に示した12個の出力バッファ制御部に含まれる。
入力ポート201cがSC103cから受け取ったパケットが、ルーティング部203を介して出力バッファ制御部207caに入力されると、出力バッファ制御部207caは、ポート間アービタ部205aに対して出力リクエストを発行する。ここで「出力リクエスト」とは、出力バッファ制御部207caに入力されたパケットを、ポート間セレクタ206aを介して出力ポート202aへと出力することを求めるリクエストである。
同様に、入力ポート201eがSC103eから受け取ったパケットが、ルーティング部203を介して出力バッファ制御部207eaに入力されると、出力バッファ制御部207eaは、ポート間アービタ部205aに対して出力リクエストを発行する。また、出力バッファ制御部207gaも同様に、パケットが入力されるとポート間アービタ部205aに対して出力リクエストを発行する。
ポート間アービタ部205aは、出力バッファ制御部207ca、207ea、および207gaのそれぞれから発行された複数の出力リクエストを調停する。すなわち、ポート間アービタ部205aの「ポート間」とは、出力ポート202aを出力先とするパケットが入力された入力ポート201c、201e、および201gの間での調停を表している。
なお、調停のアルゴリズムは任意である。例えば、ポート間アービタ部205aは、LRU(Least Recently Used)アルゴリズム、ラウンドロビン(round robin)アルゴリズム、あるいはFIFO(First In First Out)アルゴリズムによる調停を行ってもよい。
調停の結果、ポート間アービタ部205aは1つの出力バッファ制御部を選択する。
例えば、調停の結果、出力バッファ制御部207caが選択されたとする。すると、ポート間アービタ部205aは、出力バッファ制御部207caに出力許可を通知するとともに、出力バッファ制御部207caを選択したことをポート間セレクタ206aに通知する。そして、ポート間セレクタ206aは、ポート間アービタ部205aから通知された選択結果にしたがって、選択された出力バッファ制御部207ca内のバッファからパケットを受け取り、出力ポート202aへと出力する。
以上のように、各出力バッファ制御部207ca、207ea、および207ga内のバッファは、ポート間アービタ部205aから出力許可が通知されるまで(つまり、SC103aへのルーティングを待つ間)一時的にパケットを保存しておくための領域である。
続いて、図6を参照して、SC103cから出力されたパケットを入力ポート201cが受け取ったときのXB102の動作について、ルーティングテーブル部204cの詳細とともに説明する。
図6は、XB102の一部を抜粋して詳細を示した構成図である。図6には、入力ポート201c、ルーティング部203の一部、ルーティングテーブル部204c、ならびに3つの出力バッファ制御部207ca、207ce、および207cgが図示されている。入力ポート201cから入力されたパケットは、ルーティング部203を介して、3つの出力バッファ制御部207ca、207ce、および207cgのいずれかに出力される。
XB102内の他のルーティングテーブル部204a、204e、204g、および他の入力ポート201a、201e、201gとルーティング部203との間の関係も、図6と同様である。
入力ポート201cがSC103cから受け取ったパケットを表す信号は、信号線301へ出力される。なお以下では、単に「パケットが信号線301へ出力される」のように表記する。
信号線301は、信号線302と信号線303に分岐している。信号線302はルーティングテーブル部204cに接続されており、信号線303はルーティング部203に接続されている。分岐した信号線302を介してルーティングテーブル部204cへ送られるのは、信号線301に出力されたパケットのヘッダに含まれる宛先IDである。また、分岐した信号線303を介してルーティング部203へ送られるのは、信号線301に出力されたパケット全体である。また、ルーティングテーブル部204cは、信号線304によりルーティング部203と接続されている。
以下の各図においては、上記のようにある信号線(例えば信号線301)が複数の信号線(例えば信号線302と信号線303)に分岐しており、複数の信号線それぞれへ出力されるデータ同士が異なるとき、図6のように斜めに枝分かれする線によって分岐点を示す。なお、複数に分岐した信号線に同じデータが出力される場合は、後述の図8における信号線の分岐点のように、黒丸を用いて分岐を示す。
斜めに枝分かれする線によって図示される分岐は、例えば、以下の(e1)〜(e3)を含む様々な仕方で実装することができる。
(e1)第1と第2の回路素子は、A本の導線の組により実現される信号線(つまりビット幅がAビットの伝送路)により接続されている。また、A本の導線のうちB本は分岐して第3の回路素子に接続されている(A>B)。
例えば図6において、第1〜第3の回路素子が、それぞれ入力ポート201c、ルーティング部203、ルーティングテーブル部204cであり、信号線301と信号線303のビット幅がAビット、信号線302のビット幅がBビットであってもよい。
(e2)第1の回路素子からは、A本の導線の組により実現される信号線にAビットの信号が出力される。A本の導線のうちB本は第2の回路素子に接続し、C本は第3の回路素子に接続している(A=B+C)。
(e3)第1と第4の回路素子は、A本の導線の組により接続されている。また、第4の回路素子はB本の導線の組により第2の回路素子と接続され、C本の導線の組により第3の回路素子と接続されている(A≧BかつA≧C)。
第4の回路素子は、例えば、第1の回路素子から入力されたAビットの信号のうちBビットを第2の回路素子に出力するとともに、AビットのうちCビットを第3の回路素子に出力する。第4の回路素子は、必要に応じて、Bビットの出力を遅延させてもよく、Cビットの出力を遅延させてもよい。
例えば図6において、信号線302と信号線303が枝分かれする部分に不図示の第4の回路素子があってもよい。そして、第4の回路素子が、入力を遅延させることなく、ルーティングテーブル部204cへは信号線302を介して宛先IDを出力するとともに、ルーティング部203へは信号線303を介してパケットを出力してもよい。
以上の(e1)〜(e3)のように、斜めに枝分かれする線によって図示される分岐は、様々な実装が可能であるが、ある信号線へ出力されたデータの一部または全部が複数の信号線に分岐して出力されるという機能は、(e1)〜(e3)で共通である。また、3本以上の分岐に関しても同様である。
ここで図6の説明に戻ると、ルーティングテーブル部204cは、テーブル305を備える。また、ルーティング部203は、入力ポート201cに対応した分岐部306を備えるとともに、さらに、他の3つの入力ポート201a、201e、201gにそれぞれ対応する不図示の3つの分岐部も備えている。
ルーティングテーブル部204cは、テーブル305を参照し、入力ポート201cが受け取ったパケットのルーティング先を、信号線302を介して入力された宛先IDに基づいて決定する。すなわち、ルーティングテーブル部204cは、入力ポート201cが受け取ったパケットを、出力ポート202a、202e、202gのいずれに出力するのかを決定する。そして、ルーティングテーブル部204cは、決定した出力ポートを識別する出力ポート情報を、信号線304を介して分岐部306に出力し、通知する。
信号線303は、具体的にはルーティング部203内の分岐部306に接続されている。分岐部306は、例えばマルチプレクサでもよい。分岐部306は、信号線303を介して入力されるパケットを受け取り、通知された出力ポート情報に基づいて、受け取ったパケットの出力先を次のように切り換える。
・出力ポート情報が出力ポート202aを示す場合、分岐部306は、出力ポート202aに対応して出力ポート202aの前段に設けられた出力バッファ制御部207caへとパケットを出力する。
・出力ポート情報が出力ポート202eを示す場合、分岐部306は、出力ポート202eに対応して出力ポート202eの前段に設けられた出力バッファ制御部207ceへとパケットを出力する。
・出力ポート情報が出力ポート202gを示す場合、分岐部306は、出力ポート202gに対応して出力ポート202gの前段に設けられた出力バッファ制御部207cgへとパケットを出力する。
このように、ルーティング部203は、各入力ポート201a〜201gが受け取ったパケットを、適切な出力ポート202a〜202gへ振り分けるためのスイッチング機構である。
続いて、上記のルーティングテーブル部204cの動作について、テーブル305の詳細とともに説明する。
テーブル305は、書き換え可能な記憶素子により実現されている。例えば、FF(フリップフロップ)によりテーブル305が実現される。テーブル305は、宛先IDとルーティング先の出力ポート情報とを関連づけて記憶している。
具体的には、ノード101a内のSC103a、CPU104a、CPU104b、およびIOC107aそれぞれを識別するIDは、ノード101aのSC103aと接続された出力ポート202aを識別する出力ポート情報と関連づけられている。同様に、ノード101e内のSC103e、CPU104e、CPU104f、IOC107eのIDは、出力ポート202eを識別する出力ポート情報と関連づけられている。また、ノード101g内のSC103g、CPU104g、CPU104h、IOC107gのIDは、出力ポート202gを識別する出力ポート情報と関連づけられている。
ルーティングテーブル部204cは、テーブル305のほかに、さらに比較器308a〜308lと、論理和演算を行うOR回路309a〜309cと、セレクタ310を備えている。また、図6の例では、テーブル305を構成するFFは、具体的には、上記の12個の宛先IDをそれぞれ記憶するための12組のFF307a〜307lと、3個の出力ポート情報をそれぞれ記憶するための3組のFF311a〜311cを含む。なお、宛先IDおよび出力ポート情報を表すのに用いられるビット数に応じて、1組のFF(例えばFF307aやFF311a)を構成するFFの数が決められる。
図6に示すように、テーブル305の左列に相当し、各宛先IDを記憶している12組のFF307a〜307lの各々に対応して、12個の比較器308a〜308lが設けられている。また、テーブル305の右列に相当し、ルーティング先の各出力ポート情報を記憶している3組のFF311a〜311cの各々に対応して、3個のOR回路309a〜309cが設けられている。
信号線302からルーティングテーブル部204cに入力された宛先IDは、比較器308a〜308lのそれぞれに入力される。
例えば、比較器308aは、比較器308aに対応するFF307aが保持している宛先IDと、入力された宛先IDとを比較する。比較器308aは、2つの宛先IDが一致すれば論理値1をOR回路309aに出力し、2つの宛先IDが一致しなければ論理値0をOR回路309aに出力する。他の比較器308b〜308lに関しても同様である。
図6の例では、OR回路309aは、比較器308a〜308dからの入力の論理和をセレクタ310に出力する。同様に、OR回路309bは、比較器308e〜308hからの入力の論理和をセレクタ310に出力し、OR回路309cは、比較器308i〜308lからの入力の論理和をセレクタ310に出力する。
したがって、セレクタ310には、OR回路309a〜309cから1ビットずつ、合計3ビットの制御信号が入力される。この3ビットの制御信号は、1ビットのみが論理値1になるワンホット(One-Hot)信号である。セレクタ310は、論理値1のビットの位置に応じて、FF311a〜311cが保持する出力ポート情報のいずれかを選択し、信号線304を介して分岐部306に出力する。すなわち、セレクタ310は次のように動作する。
・OR回路309aから論理値1が出力され、OR回路309bと309cから論理値0が出力された場合、セレクタ310は、OR回路309aに対応するFF311aが保持する出力ポート情報を分岐部306に出力する。
・OR回路309bから論理値1が出力され、OR回路309aと309cから論理値0が出力された場合、セレクタ310は、OR回路309bに対応するFF311bが保持する出力ポート情報を分岐部306に出力する。
・OR回路309cから論理値1が出力され、OR回路309aと309bから論理値0が出力された場合、セレクタ310は、OR回路309cに対応するFF311cが保持する出力ポート情報を分岐部306に出力する。
以上説明したようにルーティングテーブル部204cが動作することにより、入力ポート201cが受け取ったパケットは、ヘッダに指定された宛先IDに応じて、出力バッファ制御部207ca、207ce、207cgのいずれかへと適切に振り分けられる。
続いて、図7を参照して出力バッファ制御部の詳細を説明する。図7は出力バッファ制御部207caの構成図であるが、図5に示した他の11個の出力バッファ制御部も同様の構成である。
図7に示すように、出力バッファ制御部207caは、制御部400と、データパケット保存部410と、要求パケット保存部420と、パケット間セレクタ430を備える。また、図5に関して説明したとおり、出力バッファ制御部207caは、ルーティング部203、ポート間アービタ部205a、およびポート間セレクタ206aと接続されている。
制御部400は、出力バッファ制御部207ca全体を制御しており、詳しくは後述するが、例えば下記(f1)〜(f4)のような動作を行う。
(f1)データパケット保存部410および要求パケット保存部420へのパケットの書き込みの制御
(f2)データパケット保存部410および要求パケット保存部420からパケット間セレクタ430へのパケットの出力の制御
(f3)データパケット保存部410と要求パケット保存部420の双方にパケットが保存されているときに、いずれに保存されたパケットをパケット間セレクタ430へ出力するのか、という調停
(f4)ポート間アービタ部205aへの出力リクエストの発行の制御
また、制御部400は、上記(f3)の制御を行うパケット間アービタ部401を備える。パケット間アービタ部401は、パケット間アービタ402と、比較器403と、比較器404を含む。さらに、制御部400は、パケットタイプに応じたVALID信号を出力するエンコーダ405を備える。具体的には、エンコーダ405はデータパケットと要求パケットを判別してVALID信号を出力する。
なお、以下の説明において「データパケット」とはデータペイロードを有するパケットであり、「要求パケット」とはデータペイロードを持たないパケットである。例えば、上記(d3)のライトバックデータパケットと(d4)の転送データパケットは、データパケットの例である。また、(d1)のメモリアクセス要求パケットと(d2)のデータ転送要求パケットは、要求パケットの例である。
また、制御部400は、データパケット用のライトポインタ制御部406とリードポインタ制御部407を備え、要求パケット用のライトポインタ制御部408とリードポインタ制御部409を備える。
「リードポインタ」および「ライトポインタ」とは、データパケット保存部410および要求パケット保存部420内の番地を示すポインタである。ライトポインタは、次にパケットを保存する番地を表し、リードポインタは、次に読み出すパケットが保存されている番地を表す。
データパケット保存部410はデータパケットを一時的に保存するバッファであり、要求パケット保存部420は要求パケットを一時的に保存するバッファである。すなわち、上記の各図の説明における「バッファ」とは、データパケット保存部410と要求パケット保存部420であり、特に、上記の説明で注目したバッファの容量は、データペイロードを保存するだけの容量が要求されるデータパケット保存部410の容量である。データパケット保存部410と要求パケット保存部420には、例えばRAMが用いられる。
また、データパケット保存部410と要求パケット保存部420におけるパケットのリード制御およびライト制御は、FIFOアルゴリズムにしたがっている。よって、詳しくは図8とともに後述するが、ライトポインタ制御部406と408は、FF(Flip-Flop)を使ったカウンタによってライトポインタを管理することができる。同様に、詳しくは図9とともに後述するが、リードポインタ制御部407と409も、FFを使ったカウンタによってリードポインタを管理することができる。
また、パケット間セレクタ430は、制御部400の制御にしたがって、データパケット保存部410または要求パケット保存部420のいずれかを選択し、パケットをポート間セレクタ206aへと出力する。
なお、以下では、データパケット保存部410および要求パケット保存部420内について、次の(g1)〜(g4)のように定める。
(g1)1つのデータパケットを保存するのに必要な容量は最大Dバイトである。すなわち、データパケットは、Dバイトという固定長であるか、または、最長でDバイトの可変長であることが仕様で決められている。
(g2)データパケット保存部410内の番地は、Dバイトを1つのブロックとして、ブロックの番号により管理される。つまり、ライトポインタ制御部406が制御するライトポインタの値、およびリードポインタ制御部407が制御するリードポインタの値は、データパケット保存部410内のブロックの番号である。
(g3)1つの要求パケットを保存するのに必要な容量は最大Rバイトである(R<D)。すなわち、要求パケットは、Rバイトという固定長であるか、または、最長でRバイトの可変長であることが仕様で決められている。
(g4)要求パケット保存部420内の番地は、Rバイトを1つのブロックとして、ブロックの番号により管理される。つまり、ライトポインタ制御部408が制御するライトポインタの値、およびリードポインタ制御部409が制御するリードポインタの値は、要求パケット保存部420内のブロックの番号である。
以上、出力バッファ制御部207caの構成について説明した。続いて、ルーティング部203から出力バッファ制御部207caにパケットが出力されてから、出力バッファ制御部207caがパケットをポート間セレクタ206aへ出力するまでの動作を説明する。
まず、ルーティング部203が信号線441を介してパケットを出力バッファ制御部207caに出力する。信号線441は、図7に示すように信号線442と信号線443に分岐しており、信号線442へはパケットが出力される。
また、ステップS401に示すように、信号線443へはパケットヘッダ内のパケットタイプフィールドが出力される。すると、信号線443の接続先であるエンコーダ405は、パケットタイプフィールドの値に基づいて、ルーティング部203から入力されたパケットがデータパケットであるか要求パケットであるかを判別する。
ステップS401においてパケットがデータパケットであると判明した場合の動作は下記ステップS402d〜S406dのとおりである。
エンコーダ405は、ステップS402dに示すように、データパケット用のライトポインタ制御部406にVALID信号を出力する。以下、説明の便宜上VALID信号は正論理であるとすると、ステップS402dにおいてエンコーダ405は、ライトポインタ制御部406に論理値1の信号を出力する。なお、この場合、エンコーダ405は、要求パケット用のライトポインタ制御部408には、無効を示す論理値0を出力する。
VALID信号を受け取ったライトポインタ制御部406は、次のステップS403dにおいて、データパケット保存部410へライト指示とライトポインタ値を出力し、ライトポインタ値を更新する。また、論理値0が入力されたライトポインタ制御部408は、ライトポインタ値を更新せず、従前のライトポインタ値を保持する。 なお、データパケット保存部410への「ライト指示」とは、信号線442を介して入力されるパケットを、ライトポインタ値により示されるデータパケット保存部410内の番地に書き込むことの指示である。以下では、説明の便宜上、ライト指示も正論理であるとする。すなわち、論理値1はライト指示がアサートされていることを示し、論理値0はライト指示がネゲートされていることを示すものとする。
ここで、ステップS403dの動作をより詳細に説明するため、図8を参照する。図8は、ライトポインタ制御部406の構成図である。
図8に示すように、ライトポインタ制御部406はライトポインタ値を格納するFF451を備える。FF451は、エンコーダ405から入力されるVALID信号をカウントイネーブル信号として用いるカウンタ回路である。FF451のビット数は、上記(g2)で説明したデータパケット保存部410のブロックの番号の最大値による。また、ライトポインタ制御部406はエンコーダ405から入力された信号そのものをデータパケット保存部410に出力する。
すなわち、ステップS402dでエンコーダ405からVALID信号として論理値1が入力されると、ステップS403dでライトポインタ制御部406は、入力された論理値1をそのままライト指示としてデータパケット保存部410に出力する。また、ライトポインタ制御部406は、FF451が保持するライトポインタ値をデータパケット保存部410に出力する。その後、ライトポインタ制御部406は、カウントイネーブル信号としてのVALID信号にしたがって、FF451が保持する値を1増やす。
逆に、もしエンコーダ405から論理値0が入力されれば、ライトポインタ制御部406は論理値0をそのままデータパケット保存部410に出力し、FF451はカウントアップ動作を行わない。
ここで図7の説明に戻ると、データパケット保存部410はステップS404dにおいて次のように動作する。すなわち、データパケット保存部410は、ステップS403dで受けたライト指示にしたがい、信号線442を介して入力されるデータパケットを、ステップS403dで入力されたライトポインタ値で示される番地に保存する。
また、ステップS405dとして示すように、ライトポインタ制御部406は、ステップS403dで更新したライトポインタ値をパケット間アービタ部401内の比較器403に出力する。なお、ステップS404dとS405dは、同時に並行して行われてもよい。
また、図7に示すようにリードポインタ制御部407も比較器403に接続されており、リードポインタ制御部407が保持するリードポインタが前回更新されたときに比較器403にはリードポインタ値が入力されている。
そこで、ステップS406dにおいて比較器403は、ライトポインタ制御部406から入力されたライトポインタ値と、リードポインタ制御部407から入力されたリードポインタ値を比較する。
比較した結果、ライトポインタ値とリードポインタ値が一致した場合は、ポート間セレクタ206aへの出力を待つためにデータパケット保存部410に保存されているデータパケットは存在しない。したがって、比較器403は、パケット間アービタ402へ出力リクエストを出力しない。換言すれば、比較器403は、出力リクエストをネゲート(negate)する。
逆に、ライトポインタ値とリードポインタ値が不一致だった場合は、ポート間セレクタ206aへの出力を待つためにデータパケット保存部410に保存されているデータパケットが存在する。したがって、比較器403は、パケット間アービタ402へ出力リクエストを出力(すなわちアサート(assert))する。
以上説明したステップS402d〜S406dは、ステップS401においてパケットがデータペイロードを有するデータパケットであると判明した場合の動作である。逆に、ステップS401においてパケットがデータペイロードを有さない要求パケットであると判明した場合の動作は、次のステップS402r〜S406rのとおりである。ステップS402r〜S406rはステップS402d〜S406dと類似なので、簡単に説明する。
ステップS401においてパケットが要求パケットであると判明すると、エンコーダ405は、ステップS402rに示すように、要求パケット用のライトポインタ制御部408にVALID信号を出力するとともに、データパケット用のライトポインタ制御部406には無効を示す論理値0を出力する。
VALID信号を受け取ったライトポインタ制御部408は、次のステップS403rにおいて、要求パケット保存部420へライト指示とライトポインタ値を出力し、ライトポインタ値を更新する。ライトポインタ制御部408も、図8のライトポインタ制御部406と同様に構成されている。
そして、次のステップS404rにおいて、要求パケット保存部420は、ステップS403rで受けたライト指示にしたがい、信号線442を介して入力される要求パケットを、ステップS403rで入力されたライトポインタ値で示される番地に保存する。
また、ステップS405rとして示すように、ライトポインタ制御部408は、更新後のライトポインタ値を比較器404に出力する。ステップS404rとS405rは並行して行われてもよい。
そして、ステップS406rにおいて比較器404は、ライトポインタ制御部408から入力されたライトポインタ値と、リードポインタ制御部409から入力されたリードポインタ値を比較する。両者が一致した場合は、比較器404はパケット間アービタ402へ出力リクエストを出力せず、不一致の場合は、比較器404はパケット間アービタ402への出力リクエストを発行する。
パケット間アービタ402は、ステップS406dまたはS406rにおいて出力リクエストを受けた場合、続くステップS407においてポート間アービタ部205aへ出力リクエストを出力する。
なお、比較器403と比較器404の双方から出力リクエストが出力されている場合、パケット間アービタ402は、LRUアルゴリズムやラウンドロビンアルゴリズムなどによる調停を行う。パケット間アービタ402は、調停の結果、どちらの出力リクエストを先にポート間アービタ部205aへ出力するかを決定し、出力リクエストをポート間アービタ部205aへ出力する。
図5に関して説明したように、ポート間アービタ部205aは、出力バッファ制御部207ca、207ea、および207gaからの出力リクエストを調停する。調停の結果、ステップS408でポート間アービタ部205aが出力バッファ制御部207caに対して出力許可を通知する。
すると、ステップS407でデータパケット用の比較器403からの出力リクエストが選択されてポート間アービタ部205aに出力された場合は、出力バッファ制御部207caは、以下のステップS409d〜S412dのように動作する。また、ステップS407で要求パケット用の比較器404からの出力リクエストが選択されてポート間アービタ部205aに出力された場合は、出力バッファ制御部207caは、以下のステップS409r〜S412rのように動作する。
すなわち、ステップS409dでパケット間アービタ402は、データパケットを出力するよう指示する出力パケットタイプ選択信号をパケット間セレクタ430へ出力する。例えば、出力パケットタイプ選択信号は2ビットで表され、当該2ビットがデコードされることにより、「10」はデータパケットを出力することを示し、「01」は要求パケットを出力することを示し、「00」はどちらの種類のパケットも出力しないことを示し、「11」はドントケア(don’t care)として使われない。もちろん、出力パケットタイプ選択信号は他の形式でもよい。
また、ステップS409dでパケット間アービタ402は、データパケット用のリードポインタ制御部407に対してリードポインタ更新指示を出力する。なお、説明の便宜上、以下ではリードポインタ更新指示も正論理であるとする。
ここで、ステップS409dの動作をより詳細に説明するため、図9を参照する。図9はリードポインタ制御部407の構成図である。
図9に示すように、リードポインタ制御部407はリードポインタ値を格納するFF452を備える。FF452は、パケット間アービタ402から入力されるリードポインタ更新指示をカウントイネーブル信号として用いるカウンタ回路である。FF452のビット数も、上記(g2)で説明したデータパケット保存部410のブロックの番号の最大値を表現できるだけのビット数が必要とされる。また、リードポインタ制御部407は、パケット間アービタ402から入力された信号そのものをデータパケット保存部410に出力する。
以下、図9と図7の双方を参照しながらステップS409d〜S411dについて説明する。ステップS409dでリードポインタ更新指示として論理値1が入力されると、ステップS410dでリードポインタ制御部407は、入力された論理値1をそのままリード指示としてデータパケット保存部410に出力する。また、リードポインタ制御部407は、FF452が保持するリードポインタ値をデータパケット保存部410に出力する。その後、リードポインタ制御部407は、カウントイネーブル信号としてのリードポインタ更新指示にしたがって、FF452が保持する値を1増やす。
逆に、もしパケット間アービタ402から論理値0が入力されれば、リードポインタ制御部407は論理値0をそのままデータパケット保存部410に出力し、FF452はカウントアップ動作を行わない。
ステップS410dでリードポインタ値を更新した場合、リードポインタ制御部407は、続くステップS411dにおいて、更新したリードポインタ値をパケット間アービタ部401内の比較器403に出力する。さらに、ステップS412dにおいてデータパケット保存部410は、ステップS410dで受けたリード指示にしたがい、ステップS410dで入力されたリードポインタ値が示す番地に保存しているデータパケットをパケット間セレクタ430に出力する。
なお、ステップS411dとS412dは、並行して行われてもよい。また、リードポインタ値が更新されなかった場合は、リード指示がアサートされないので、ステップS412dは行われない。
以上説明したステップS409d〜S412dは、ステップS407でデータパケット用の比較器403からの出力リクエストが選択された場合の動作である。逆に、ステップS407で要求パケット用の比較器404からの出力リクエストが選択された場合の動作は、次のステップS409r〜S412rのとおりである。ステップS409r〜S412rはステップS409d〜S412dと類似なので、簡単に説明する。
ステップS409rでパケット間アービタ402は、要求パケットを出力するよう指示する出力パケットタイプ選択信号(上記に例示した形式では「01」)をパケット間セレクタ430へ出力する。また、パケット間アービタ402は、要求パケット用のリードポインタ制御部409に対してリードポインタ更新指示を出力する。リードポインタ制御部409も図9のリードポインタ制御部407と同様に構成されている。
ステップS409rでリードポインタ更新指示として論理値1が入力されると、ステップS410rでリードポインタ制御部409は、入力された論理値1をそのままリード指示として要求パケット保存部420に出力する。また、リードポインタ制御部409は、リードポインタ値を要求パケット保存部420に出力し、リードポインタ値を1増やす。
逆に、もしパケット間アービタ402から論理値0が入力されれば、リードポインタ制御部409は論理値0をそのまま要求パケット保存部420に出力し、リードポインタの更新は行わない。
ステップS410rでリードポインタ値を更新した場合、リードポインタ制御部409は、続くステップS411rにおいて、更新したリードポインタ値をパケット間アービタ部401内の比較器404に出力する。さらに、ステップS412rにおいて要求パケット保存部420は、ステップS410rで受けたリード指示にしたがい、ステップS410rで入力されたリードポインタ値が示す番地に保存している要求パケットをパケット間セレクタ430に出力する。
なお、ステップS411rとS412rは、並行して行われてもよい。また、リードポインタ値が更新されなかった場合は、リード指示がアサートされないので、ステップS412rは行われない。
以上のようにして、ステップS409d〜S412dまたはステップS409r〜S412rが実行されると、ステップS413においてパケット間セレクタ430は次のように動作する。すなわち、パケット間セレクタ430は、ステップS409dまたはS409rで入力された出力パケットタイプ選択信号にしたがって、データパケット保存部410または要求パケット保存部420からの出力を選択し、ポート間セレクタ206aへとパケットを出力する。
以上、図5〜図9を参照して、比較例におけるXB102の詳細について説明した。
なお、図7のデータパケット保存部410には、例えば次のような場合に、同じデータペイロードを有するライトバックデータパケットと共有型・転送データパケットが保存される場合がある。すなわち、図1のCPU104aがメインメモリ105aに格納されたデータを要求するため、共有型・メモリアクセス要求パケットを出力し、要求されたデータがCPU104cにキャッシュされていると判明した場合である。
この場合、ライトバックデータパケットと共有型・転送データパケットの双方がCPU104cから出力され、同じノード101aに属するCPU104aとSC103aにそれぞれルーティングされる。よって、図7の出力バッファ制御部207ca内のデータパケット保存部410は、同じデータペイロードを有する2つのパケットを保存する可能性がある。
続いて、図10と図11を参照して、比較例におけるSC103cの詳細について説明する。
図10は、図1に示したSC103cの比較例における構成図である。図示は省略したが、他のSC103a、103e、および103gもSC103cと同様の構成である。
図10に示したように、SC103cは、バス108cを介してXB102と接続されている。さらに、SC103cは、ノード101c内のCPU104c、CPU104d、メインメモリ105c、ディレクトリ106c、およびIOC107cとも、ノード101c内のバスを介して接続されている。SC103cは、ノード101c内のコンポーネントと、他のSC103a、103e、および103gとの間でのパケット形式のデータの伝送を制御する。
SC103cは、XB102、CPU104c、CPU104d、メインメモリ105c、ディレクトリ106c、IOC107cそれぞれからのパケットをそれぞれ受け取る入力ポート501x、501c、501d、501m、501r、および501iを備える。
また、SC103cは、XB102、CPU104c、CPU104d、メインメモリ105c、ディレクトリ106c、IOC107cそれぞれへとパケットを出力する出力ポート502x、502c、502d、502m、502r、および502iを備える。
以上の入力ポート501x〜501iと出力ポート502x〜502iは、必要に応じて、各コンポーネントの動作周波数の違いを吸収するための周波数の変換処理を行う。
また、SC103cは、互いに接続されたメモリアクセス制御装置であるMAC(Memory Access Controller)503とSC内制御回路504を備え、メインメモリ105cへのアクセスを制御する。MAC503はさらに入力ポート501mと出力ポート502mにも接続されている。また、SC内制御回路504は入力ポート501rと出力ポート502rにも接続されている。
SC内制御回路504は、メインメモリ105cへのメモリアクセス要求を受けた際のキャッシュコンシステンシ制御を行う。キャッシュコンシステンシ制御は、MESIプロトコルなどの予め定められたキャッシュプロトコルにしたがって行われる。また、SC内制御回路504は、キャッシュコンシステンシ制御のため、ディレクトリ106cの参照と更新も制御している。
なお、SC内制御回路504は、同じノード101c内のCPU104c、CPU104d、またはIOC107cからメモリアクセス要求を受けることもある。また、SC内制御回路504は、XB102を介して他のノード101a、101e、または101g内のコンポーネントから、メモリアクセス要求を受けることもある。
図11は、比較例におけるディレクトリ106cの例を示す図である。ディレクトリ106cは、同じノード101c内のメインメモリ105cを管理するデータ構造であり、SC内制御回路504がメインメモリ105cのキャッシュコンシステンシ制御を行う際に用いられる。
図11ではディレクトリ106cをテーブル形式で表している。また、ディレクトリ106cの各エントリは、アドレスと所有者とステートの組である。
図11の左列の「アドレス」は、メインメモリ105c内のアドレスである。
図11の中列の「所有者」は、そのアドレスで示されるメインメモリ105c内のブロックのデータを、キャッシュラインとしてキャッシュメモリに保持しているCPUのIDである。
図11の右列の「ステート」は、「所有者」が保持するメモリデータのステートである。キャッシュプロトコルによって、例えば上記(b1)〜(b5)に例示した各種ステートのいずれかが、「ステート」を表すのに用いられる。
ここで図10の説明に戻ると、MAC503は、SC内制御回路504から出力されるメモリアクセス要求に基づいて、実際にメインメモリ105cへデータを書き込んだり、メインメモリ105cからデータを読み出したりする制御を行う。
また、SC103cはルーティング部505を備える。ルーティング部505は、図5および図6に示したXB102のルーティング部203と同様に、パケットの振り分けを行う。ルーティング部505は、入力ポート501x、501c、501d、および501i、ならびにSC内制御回路504と接続されている。
また、SC103cは、入力ポート501x、501c、501d、および501i、ならびにSC内制御回路504にそれぞれ接続されているルーティングテーブル部506x、506c、506d、506i、および506sを備える。ルーティングテーブル部506x、506c、506d、506i、および506sの各々は、ルーティング部505とも接続されている。各ルーティングテーブル部506x、506c、506d、506i、および506sの詳細は、図6のルーティングテーブル部204cと同様なので、詳しい説明は省略する。
また、SC103cは、出力ポート502x、502c、502d、および502i、ならびにSC内制御回路504にそれぞれ対応した5組の回路を備える。5組の回路は、5つのコンポーネント(すなわち、出力ポート502x、502c、502d、および502i、ならびにSC内制御回路504)の前段にそれぞれ設けられている。
例えば、出力ポート502xの前段に設けられた1組の回路は、ポート間アービタ部507xと、ポート間セレクタ508xと、出力バッファ制御部509cx、509dx、509ix、および509sxを含む。他の4つのコンポーネントの前段に設けられた回路も、出力ポート502xの前段に設けられた上記の回路と同様である。
ポート間アービタ部507xは、XB102に備えられた図5のポート間アービタ部205aと同様である。すなわち、ポート間アービタ部507xは、出力バッファ制御部509cx、509dx、509ix、および509sxと接続され、これらの出力バッファ制御部509cx、509dx、509ix、および509sxからの出力リクエストを調停する。
また、ポート間セレクタ508xは、XB102に備えられた図5のポート間セレクタ206aと同様である。すなわち、ポート間セレクタ508xは、ポート間アービタ部507xから通知される調停の結果にしたがい、選択された出力バッファ制御部509cx、509dx、509ix、または509sxから出力されるパケットを出力ポート502xへと出力する。
なお、出力バッファ制御部509cxには、CPU104cから入力ポート501cが受け取ったパケットが、ルーティング部505を介して入力される。同様に、出力バッファ制御部509dxには、CPU104dから入力ポート501dが受け取ったパケットが、ルーティング部505を介して入力される。
また、出力バッファ制御部509ixには、IOC107cから入力ポート501iが受け取ったパケットが、ルーティング部505を介して入力される。そして、出力バッファ制御部509sxには、メインメモリ105cから入力ポート501m、MAC503、SC内制御回路504、およびルーティング部505を介して到着したパケットが入力される。
以上の出力バッファ制御部509cx、509dx、509ix、および509sxの詳細は、図7に示したXB102内の出力バッファ制御部207caと同様であるので説明を省略する。また、以下では、例えば出力バッファ制御部509cx内の各コンポーネントについても、図7の出力バッファ制御部207ca内の各コンポーネントと同じ参照符号を用いる。
以上、図1における各コンポーネントの内部について、図5〜図11を参照して詳細に説明した。
続いて、図4と同じキャッシュプロトコルが採用され、図4のステップS304とS305が行われるときの、比較例における出力バッファ制御部509cxの動作について図12と図13をそれぞれ参照して詳しく説明する。
図4に関して説明したように、SC103cが同じノード101c内のCPU104c〜104dへ出力するデータ転送要求パケットの最大アウトスタンディング数をPとする。すると、少なくとも2P個のデータパケットを保存する容量のバッファが出力バッファ制御部509cxと509dxのそれぞれに必要である。
換言すれば、図7と同様に構成されている出力バッファ制御部509cxにおいて、データパケット保存部410は、上記(g2)で述べたDバイトのブロックを少なくとも2P個含む。図12と図13は、データパケット保存部410が少なくとも2P個のブロックを含む必要があることを説明している。
図12は、本比較例において、CPU104cが図4のステップS304でライトバックデータパケットをSC103cに出力したときの、SC103c内の出力バッファ制御部509cxの動作を説明する図である。また、図13は、本比較例において、CPU104cが図4のステップS305で転送データパケットをSC103cに出力したときの、SC103c内の出力バッファ制御部509cxの動作を説明する図である。
なお、上記のように出力バッファ制御部509cxは図7の出力バッファ制御部207caと同様に構成されている。そこで、図12および図13においては、出力バッファ制御部509cx内部のコンポーネントのうち、ステップS304とS305に関連するもののみを抜粋して図示し、他のコンポーネントは省略している。
また、図12のステップS501〜S507は、図7で出力バッファ制御部207cに関して説明したステップS401、S402d〜S406d、およびS407にとそれぞれ同様である。
さて、図4のステップS304においてCPU104cは、SC103eを宛先とするライトバックデータパケット601をSC103cに出力する。すると、SC103cは図10の入力ポート501cでライトバックデータパケット601を受け取る。
ライトバックデータパケット601の宛先はSC103eであり、SC103eはSC103cとは別のノード101eにある。よって、図10のルーティングテーブル部506cは、XB102に対応する出力ポート502xを示す出力ポート情報をルーティング部505に通知する。通知にしたがい、ルーティング部505は、ライトバックデータパケット601を出力ポート502xの前段の出力バッファ制御部509cxに出力する。
すると、図12のステップS501では、信号線443を介してライトバックデータパケット601のパケットタイプフィールド602がエンコーダ405に出力される。
ライトバックデータパケット601はデータパケットの一種なので、エンコーダ405は、続くステップS502において、データパケット用のライトポインタ制御部406にVALID信号を出力する。
以下、説明の便宜上、ライトバックデータパケット601が出力バッファ制御部509cxに出力された時点においてライトポインタ制御部406内のFF451が保持するライトポインタの値が「0000」であるとする。同様に、説明の便宜上、ライトバックデータパケット601が出力バッファ制御部509cxに出力された時点においてリードポインタ制御部407内のFF452が保持するリードポインタの値も「0000」であるとする。
VALID信号を受け取ったライトポインタ制御部406は、次のステップS503において、データパケット保存部410へライト指示と「0000」というライトポインタ値を出力し、ライトポインタ値を「0001」へと更新する。
すると、ステップS504においてデータパケット保存部410は、信号線442を介して入力されるライトバックデータパケット601を、ライト指示にしたがい、ステップS503で入力された「0000」という番地に保存する。
また、ステップS505においてライトポインタ制御部406は、ステップS503での更新後の新たな「0001」というライトポインタ値を、パケット間アービタ部401内の比較器403に出力する。また、上記で仮定した「0000」という値のリードポインタ値も、比較器403には出力されている。
そして、ステップS506で比較器403は、データパケット用のライトポインタ値「0001」とリードポインタ値「0000」を比較する。比較した結果、2つの値は不一致であるため、比較器403はパケット間アービタ402へ出力リクエストを出力する。
そして、ステップS507でパケット間アービタ402は、ポート間アービタ部507xへと出力リクエストを出力する。図12の例では、すぐにはポート間アービタ部507xから出力許可が下りず、しばらくパケット間アービタ402は、ポート間アービタ部507xへ出力リクエストを出力した状態のまま、出力許可を待っているものとする。
次に、図13を参照して、CPU104cが図4のステップS305で転送データパケットをSC103cに出力したときの、SC103c内の出力バッファ制御部509cxの動作を説明する。なお、図13におけるステップ508〜S514も、図7のステップS401、S402d〜S406d、およびS407とそれぞれ同様である。
また、図12と図13に示した例においては、ステップS508は、ステップS501の後に実行されるが、必ずしもステップS502〜S507の後に実行されるとは限らない。例えば、ステップS502をエンコーダ405が実行するのと並行して、ステップS508が実行されることもありうる。
さて、図4のステップS305においてCPU104cは、CPU104aを宛先とする共有型・転送データパケット603をSC103cに出力する。すると、SC103cは図10の入力ポート501cで共有型・転送データパケット603を受け取る。
共有型・転送データパケット603の宛先はCPU104aであり、CPU104aはSC103cとは別のノード101aにある。よって、図10のルーティングテーブル部506cは、XB102に対応する出力ポート502xを示す出力ポート情報をルーティング部505に通知する。通知にしたがい、ルーティング部505は、共有型・転送データパケット603を出力ポート502xの前段の出力バッファ制御部509cxに出力する。
すると、図13のステップS508では、信号線443を介して共有型・転送データパケット603のパケットタイプフィールド604がエンコーダ405に出力される。
共有型・転送データパケット603はデータパケットの一種なので、エンコーダ405は、続くステップS509において、データパケット用のライトポインタ制御部406にVALID信号を出力する。
ライトバックデータパケット601と共有型・転送データパケット603の間にCPU104cは他のパケットを出力しなかったものとすると、ステップS509の時点でライトポインタ制御部406が管理するライトポインタ値は「0001」であり、リードポインタ制御部407が管理するリードポインタ値は「0000」である。
VALID信号を受け取ったライトポインタ制御部406は、次のステップS510において、データパケット保存部410へライト指示と「0001」というライトポインタ値を出力し、ライトポインタ値を「0002」へと更新する。
すると、ステップS511においてデータパケット保存部410は、信号線442を介して入力される共有型・転送データパケット603を、ライト指示にしたがい、ステップS510で入力された「0001」という番地に保存する。
また、ステップS512においてライトポインタ制御部406は、ステップS510での更新後の新たな「0002」というライトポインタ値を、比較器403に出力する。
ステップS513において比較器403は、データパケット用のライトポインタ値「0002」とリードポインタ値「0000」を比較し、2つの値が不一致であるため、新たな出力リクエストをパケット間アービタ402へ出力する。
ここで、図12のステップS507の出力リクエストへの出力許可がまだ下りていないとすると、パケット間アービタ402は、ポート間アービタ部507xへ出力リクエストの信号を出力したままである。よって、ステップS514でもパケット間アービタ402は、出力リクエストをアサートした状態を保つ。
以上、図12と図13を参照して説明したとおり、上記比較例においては、ライトバックデータパケット601と共有型・転送データパケット603の双方をデータパケット保存部410が保存する必要が生じることがある。
ここで、ライトバックデータパケット601と共有型・転送データパケット603のデータペイロードは、図4の説明から明らかなとおり、同じである。また、一般にはパケットのヘッダよりもデータペイロードの方が長い。つまり、図12と図13の例では、番地「0000」と番地「0001」に、大部分が重複する2つのパケットが保存されることになり、バッファの使用効率が悪い。
具体的には、出力バッファ制御部509cx内のパケット間アービタ402がポート間アービタ部507xに出力リクエストを出力してから、ポート間アービタ部507xが出力許可をアサートするまでの時間が長いと、上記のような重複した保存の必要が生じる。出力許可が得られるまでの時間は動的に決まるので、出力バッファ制御部509cxの設計においては最悪のケースを想定する必要がある。つまり、出力バッファ制御部509cxのデータパケット保存部410には、上記のとおり少なくともDバイト×2Pブロックの容量が必要である。
また、図4ではステップS301においてCPU104aがメインメモリ105eに格納されたデータを要求しているが、CPU104eがメインメモリ105eに格納されたデータを要求する場合もありうる。その場合、データをキャッシュメモリに保存しているCPU104cが、SC103eを宛先とするライトバックデータパケットと、CPU104eを宛先とする共有型・転送データパケットの双方を出力する。
ここで、データペイロードが共通する2つのパケットの宛先は、いずれもノード101e内のコンポーネントである。したがって、ライトバックデータパケットと共有型・転送データパケットの双方は、CPU104cからSC103eへと至る同じ経路を通る。
この経路上では、SC103c内においてXB102に接続された出力ポート502xの前段のポート間アービタ部507xや、XB102内においてSC103eに接続された出力ポート202eの前段のポート間アービタ部205eにおいて調停が行われる。調停の結果によっては、XB102においてもライトバックデータパケットと共有型・転送データパケットを同時にバッファリングする必要が生じる。
つまり、SC103eに接続された出力ポート202eの前段の出力バッファ制御部207ce内のデータパケット保存部410が、ライトバックデータパケットと共有型・転送データパケットの双方を保存する必要が生じることがある。
つまり、本比較例においては、SC103a〜103gとXB102がそれぞれ備える出力バッファ制御部は、同じデータペイロードを有する2つのパケットを重複して保存する必要が生じる可能性がある。
そこで、上記のようなライトバックデータパケット601と共有型・転送データパケット603の重複した保存の必要をなくせば、バッファ(つまりデータパケット保存部410)の実装面積や消費電力の削減が可能となる。その結果、サーバシステム100全体の性能も向上する。
以下では、SC103a〜103gとXB102がそれぞれ備える出力バッファ制御部に必要なバッファ容量を上記比較例よりも削減した第1実施形態について、図14〜図29を参照して説明する。
第1実施形態においても、上記比較例と同様、図1のサーバシステム100を例として説明する。また、上記比較例との共通点については、適宜説明を省略する。以下では第1実施形態について、まず図14を参照して図4と比較しながら動作の概要を説明した後、図15と図16を参照して、比較例と異なるコンポーネントの概要を説明する。その後、図17〜図29を参照して第1実施形態の詳細について説明する。
図14は、第1実施形態によるサーバシステム100の動作の概要を示す図である。図14のサーバシステム100も、図4と同様のキャッシュプロトコルにしたがって動作し、図14のステップS601〜S603は図4のステップS301〜S303と同様である。
すなわち、ステップS601において、CPU104aは、メインメモリ105eに格納されたデータを要求するため、SC103eを宛先とする共有型・メモリアクセス要求パケットを発行する。すると、共有型・メモリアクセス要求パケットは、SC103aとXB102を介して、SC103eに送信される。
続くステップS602において、共有型・メモリアクセス要求パケットを受信したSC103eは、ディレクトリ106eを参照し、要求されたデータを含むキャッシュラインをキャッシュメモリに保持しているCPUを検索する。その結果、要求されたデータをCPU104cがEステートで保持していると判明したとする。
すると、ステップS603においてSC103eは、CPU104cを宛先とする共有型・データ転送要求パケットを出力する。SC103eが出力した共有型・データ転送要求パケットは、XB102とSC103cを介して、CPU104cに送信される。
そして、ステップS604においてCPU104cは、Mステートのキャッシュラインのデータをメインメモリ105eにライトバックするため、メインメモリ105eと同じノード101e内のSC103eを宛先とするライトバックデータパケットを出力する。また、CPU104cは、要求されたデータを含むキャッシュラインのステートを、キャッシュプロトコルに応じてIまたはSステートに更新する。
詳しくは図15および図17〜図22とともに後述するが、第1実施形態におけるSC103cは、比較例の図10に示した出力バッファ制御部509cxと類似の出力バッファ制御部702cx(図14には不図示)を備えている。そして、詳しくは図15に示すとおり、比較例と同様に第1実施形態におけるSC103cも、図10に示したのと同じポート間アービタ部507xとポート間セレクタ508xを備える。
よって、ステップS604で出力されたライトバックデータパケットは、SC103c内の出力バッファ制御部702cx内のバッファに保存され、出力バッファ制御部702cxはポート間アービタ部507xに出力リクエストを発行する。
また、ステップS605においてCPU104cは、ステップS601でデータを要求した要求元であるCPU104aを宛先とする共有型・転送データパケットを出力する。
ステップS604とS605の実行順は、CPU104cの仕様によって決まり、逆順でもよいが、以下では説明の便宜上、ステップS604がステップS605よりも先に実行されるものとして説明する。なお、図14は、ポート間アービタ部507xによってライトバックデータパケットのXB102への出力が許可されるよりも前に、共有型・転送データパケットがステップS605においてSC103cの出力バッファ制御部702cxに出力された場合を示す図である。
この場合、第1実施形態では、次のステップS606に示すように、出力バッファ制御部702cxは、ライトバックデータパケットを保存する。また、ステップS607に示すように、出力バッファ制御部702cxは、共有型・転送データパケットのヘッダに含まれる情報をライトバックデータパケットと関連づけて保存することで、2つのパケットをマージする。すなわち、出力バッファ制御部702cxは、同じデータペイロードを有する2つのパケットのうち、後から受け取った方の共有型・転送データパケットを破棄する。
同じデータペイロードを有するライトバックデータパケットと共有型・転送データパケットをステップS607において1つのパケットにマージすることにより、出力バッファ制御部702cxは、パケットの保存に必要な記憶容量を削減することができる。
ステップS607で共有型・データ転送要求パケットがライトバックデータパケットにマージされた後、ポート間アービタ部507xから出力許可が下りると、ステップS608において出力バッファ制御部702cxは、マージされたパケットをXB102に出力する。
マージされたパケットは、元は、SC103eを宛先とするライトバックデータパケットと、CPU104aを宛先とする共有型・転送データパケットであり、宛先が異なる。そこで、次のステップS609でXB102は、マージされたパケットから元のライトバックデータパケットと共有型・転送データパケットを復元する。
そして、XB102は、ステップS610で共有型・転送データパケットを宛先のCPU104aと同じノード101a内のSC103aに出力するとともに、ステップS611でライトバックデータパケットを宛先のSC103eに出力する。詳しくは図23〜図29とともに後述するが、ステップS610とS611は、同時に実行されてもよい。または、ステップS610が先に実行されてもよく、ステップS611が先に実行されてもよい。
以上、図14に示したように動作するサーバシステム100においては、SC103c内の出力バッファ制御部702cxに必要なバッファの容量が削減される。もちろん、出力バッファ制御部702cx以外にも、各SC103a〜103gにおいて同様に必要なバッファの容量が削減される。したがって、第1実施形態によれば、SC103a〜103gを実現する半導体チップの製造コストおよび実装面積を削減することができ、SC103a〜103gの消費電力を抑えることもできる。
また、ライトバックデータパケットと共有型・転送データパケットの長さの合計は、マージされた1つのパケットの長さよりも長い。したがって、図4のようにSC103cがライトバックデータパケットと共有型・転送データパケットを個々にバス108cを介してXB102へと出力する場合に比べて、第1実施形態では、バス108cの占有時間が短い。したがって、比較例と比べて第1実施形態では、他のパケットが出力許可を待つ時間が削減され、実質的にSC103cからXB102へのパケット出力のスループットが向上する。つまり、サーバシステム100全体としての性能も向上する。
続いて、図15と図16を参照して、図14の動作を可能とするサーバシステム100内のコンポーネントの構成について、比較例との違いを中心に説明する。
図15は、第1実施形態におけるSC103cの構成図である。図15は、比較例におけるSC103cの構成を示した図10と類似しているが、次の(h1)〜(h6)の点において異なる。
(h1)ルーティングテーブル部506xの代わりにルーティングテーブル部701xが設けられている。ルーティングテーブル部701xの構成は、図25とともに後述する。
(h2)出力バッファ制御部509cxの代わりに、図14で説明したパケットをマージする機能を備えた出力バッファ制御部702cxが設けられている。後述するように、パケットのマージは、主に出力バッファ制御部702cx内の管理テーブル部801とヘッダマージ部804により行われる。管理テーブル部801とヘッダマージ部804は、図15では紙面の都合上、図示を省略したが、詳しくは図17〜図22とともに説明する。
(h3)(h2)と同様に、出力バッファ制御部509dxの代わりに出力バッファ制御部702dxが設けられている。
(h4)ルーティング部505の代わりにルーティング部703が設けられている。ルーティング部505とルーティング部703の違いは、図29についての説明の後で述べる。
(h5)入力ポート501xからルーティングテーブル部701xを経由してルーティング部703へ至る経路上に、不図示の複製チェック部1001が設けられている。なお、複製チェック部1001の詳細は図23、図24、図26とともに後述する。
(h6)入力ポート501xからルーティング部703へ至る経路上に、不図示のデータパケット復元部1002が設けられている。なお、データパケット復元部1002の詳細は図23、図24、図26〜図29とともに後述する。
図16は、第1実施形態におけるXB102の構成図である。図16は、比較例におけるXB102の構成を示した図5と類似しているが、次の(i1)〜(i9)の点において異なる。
(i1)ルーティングテーブル部204cの代わりにルーティングテーブル部711cが設けられている。ルーティングテーブル部204cとルーティングテーブル部711cの違いは、図25とともに後述する。
(i2)(i1)と同様に、ルーティングテーブル部204a、204e、および204gの代わりにルーティングテーブル部711a、711e、および711gが設けられている。
(i3)出力ポート202cの前段には、出力バッファ制御部207ac、207ec、および207gcの代わりに、図14で説明したパケットをマージする機能を備えた出力バッファ制御部712ac、712ec、および712gcが設けられている。上記(h2)と同様に、パケットのマージは、主に出力バッファ制御部712ac、712ec、および712gcそれぞれの内部の管理テーブル部801とヘッダマージ部804により行われる。管理テーブル部801とヘッダマージ部804は、図16では紙面の都合上、図示を省略した。
(i4)(i3)と同様に、他の出力ポート202a、202e、および202gの前段においても、それぞれ3個ずつ設けられた出力バッファ制御部の構成が比較例とは異なる。
(i5)ルーティング部203の代わりにルーティング部713が設けられている。ルーティング部203とルーティング部713の違いは、図23とともに後述する。
(i6)入力ポート201cからルーティングテーブル部711cを経由してルーティング部713へ至る経路上に、不図示の複製チェック部1001が設けられている。
(i7)他の入力ポート201a、201e、および201gとルーティング部713の間の経路においても、同様に不図示の複製チェック部1001が設けられている。
(i8)入力ポート201cからルーティング部713へ至る経路上に、不図示のデータパケット復元部1002が設けられている。
(i9)他の入力ポート201a、201e、および201gとルーティング部713の間の経路においても、同様に不図示のデータパケット復元部1002が設けられている。
以上、図15と図16を参照して、第1実施形態において比較例と異なるコンポーネントの概要を示した。
ところで、図14に示した動作シーケンスでは、SC103cにおいてパケットがマージされ、XB102においてパケットが復元される。しかし、図15と図16に示すように、第1実施形態では、さらにSC103a〜103gにおけるパケットの復元や、XB102におけるパケットのマージも可能なように、サーバシステム100が構成されている。その理由は、図14とは異なる次のような場合がありうるからである。
例えば、CPU104eが、同じノード101e内のメインメモリ105eに格納されたデータを要求するため、SC103eを宛先とする共有型・メモリアクセス要求パケットを発行する。
すると、SC103eは、ディレクトリ106eを参照し、要求されたデータを含むキャッシュラインをキャッシュメモリに保持しているCPUを検索する。その結果、要求されたデータをCPU104cがEステートで保持していると判明したとする。
この場合、図4や図14に関して説明したキャッシュプロトコルによれば、CPU104cは、CPU104eを宛先とする共有型・転送データパケットと、SC103eを宛先とするライトバックデータパケットを出力する。ここでは説明の便宜上、共有型・データ転送要求パケットが先に出力される場合を例にして説明する。
もし、SC103c内の出力バッファ制御部509cxから共有型・転送データパケットがポート間セレクタ508xへ出力される前にライトバックデータパケットが出力バッファ制御部509cxに入力されれば、図14と同様に2つのパケットはマージされる。
しかし、SC103c内の出力バッファ制御部509cxから共有型・転送データパケットが出力された後でライトバックデータパケットが出力バッファ制御部509cxに入力されれば、2つのパケットはマージされない。以下の説明では、2つのパケットがマージされなかった場合に着目する。
ここで、CPU104eを宛先とする共有型・転送データパケットは、XB102において、SC103eと接続された出力ポート202eへと出力されるパケットである。同様に、SC103eを宛先とするライトバックデータパケットは、XB102において、出力ポート202eへと出力されるパケットである。
よって、マージされずに個別にSC103cからXB102へと出力された共有型・転送データパケットとライトバックデータパケットの双方は、ともにXB102内の出力ポート202eの前段に設けられた出力バッファ制御部712ceを経由する。
したがって、場合によっては、出力バッファ制御部712ce内に共有型・転送データパケットが一時的に保存されている状況下で、出力バッファ制御部712ceにライトバックデータパケットが入力されることがある。例えば、ノード101e内のコンポーネントを宛先とする多くのパケットが集中する場合、出力バッファ制御部712ceから共有型・転送データパケットが出力される前に、出力バッファ制御部712ceへライトバックデータパケットが入力されることがある。
この場合、XB102内の出力バッファ制御部712ceにおいて2つのパケットをマージして保存し、SC103eへと出力し、SC103eがパケットの復元を行う。それにより、共有型・転送データパケットとライトバックデータパケットにおいて重複する部分の容量が不要となるため、XB102内に必要なバッファ容量が削減される。また、結果として、バス108eの占有時間も削減され、実質的にはサーバシステム100のスループットが向上する。
そのため、第1実施形態では、図16に示すようにXB102内の各出力バッファ制御部は、パケットのマージができるように管理テーブル部801やヘッダマージ部804などを備えている。また、図15に示すように各SC103a〜103gにおいて、XB102と接続された入力ポート501xとルーティング部703の間には、パケットの復元ができるように複製チェック部1001やデータパケット復元部1002が備えられている。
続いて、図14の動作シーケンスにそって、第1実施形態における各コンポーネントの構成と動作について詳細に説明する。
まず、図17と図18を参照して、図15の出力バッファ制御部702cxの詳細な構成を説明する。なお、以下では出力バッファ制御部702cxを例として説明するが、図15の出力バッファ制御部702dxおよび図16に示したXB102内の12個の出力バッファ制御部(712ceなど)も同様の構成である。
図17は、第1実施形態におけるSC103c内の出力バッファ制御部702cxの構成図である。図15に示すように、出力バッファ制御部702cxはルーティング部703、ポート間アービタ部507x、およびポート間セレクタ508xと接続されている。
また、XB102内の例えば出力バッファ制御部712ceも図17と同様の構成である。出力バッファ制御部712ceは、図16に示すように、ルーティング部713、ポート間アービタ部205e、およびポート間セレクタ206eと接続されている点で出力バッファ制御部702cxとは異なる。しかし、出力バッファ制御部712ceの内部の構成は、図17の出力バッファ制御部702cxと同様である。
図17に示したSC103c内の出力バッファ制御部702cxは、比較例において図7に示したXB102内の出力バッファ制御部207caと類似の構成を有するので、以下では共通点についての説明を適宜省略する。
出力バッファ制御部702cxは、比較例の出力バッファ制御部207caと同様に、制御部400、データパケット保存部410、要求パケット保存部420、およびパケット間セレクタ430を備える。ただし、出力バッファ制御部702cxにおいては、制御部400の内部の構造と、データパケット保存部410の容量が比較例とは異なる。
制御部400は、パケット間アービタ部401を有する。パケット間アービタ部401はパケット間アービタ402と比較器403と比較器404を備え、比較例と同様である。また、制御部400は比較例と同様のエンコーダ405を備える。制御部400はさらに、比較例と同様に、データパケット用のリードポインタ制御部407を備え、要求パケット用のライトポインタ制御部408とリードポインタ制御部409を備える。
第1実施形態の制御部400が比較例と異なるのは、管理テーブル部801を備える点、比較部802を備える点、および比較例におけるライトポインタ制御部406の代わりにライトポインタ制御部803を備える点である。また、第1実施形態においては、出力バッファ制御部702cxがさらに、ヘッダマージ部804とセレクタ805を備える。
管理テーブル部801と比較部802は協働して、同じデータペイロードを有する2つのパケットの組を判別する。そのために、管理テーブル部801は、データパケット保存部410に保存されているパケットのヘッダに含まれるヘッダ情報を管理している。
比較部802は、出力バッファ制御部702cxに新たに入力されたパケットと同じデータペイロードを有するパケットがデータパケット保存部410に保存されているか否かをライトポインタ制御部803に通知する。
ライトポインタ制御部803は、比較部802からの通知の結果に基づいて、新たに入力されたパケットのデータパケット保存部410への保存、または新たに入力されたパケットの破棄を制御する。その制御のため、ライトポインタ制御部803は、比較例と同様にライト指示およびライトポインタ値を出力するだけでなく、「複製ライト指示」を出力する。詳細は後述するが、複製ライト指示は、既にデータパケット保存部410に保存されているデータパケットと同じデータペイロードを有するパケットのヘッダ情報を記録することを管理テーブル部801に指示するためのものである。
ヘッダマージ部804は、同じデータペイロードを有する2つのパケットをマージしたパケットを生成する。セレクタ805は、ヘッダマージ部804によりマージされたパケットと、データパケット保存部410に保存されているデータパケットのいずれかを選択する。
以上、概略を述べた出力バッファ制御部702cx内の各コンポーネント間の関係は、次のとおりである。
まず、信号線441を介してパケットがルーティング部703から出力バッファ制御部702cxへ出力される。信号線441は、パケットを出力するための信号線442とパケットヘッダ内に含まれるヘッダ情報を出力するための信号線811とに分岐している。比較例に関して具体的な実装の例(e1)〜(e3)とともに説明したように、第1実施形態においても、斜めに枝分かれする線によって図示される分岐は、出力されるデータが分岐ごとに異なることを示す。
信号線442を介してデータパケット保存部410へ出力されるのは、比較例と同じくパケットである。信号線811に出力されるヘッダ情報は、具体的には、パケットタイプ、宛先ID、要求元ID、ReqID、およびデータステートである。
パケットタイプは、前述の(d1)〜(d4)などのタイプを示し、比較例においてもエンコーダ405に入力されている。宛先ID、要求元ID、およびReqIDについては上記(a1)〜(a3)で説明したとおりである。
また、データステートとしては、キャッシュプロトコルに応じて前述の(b1)〜(b5)の少なくとも一部が指定可能である。以下では、少なくとも、データステートの値が(b3)のSステートにあたる「共有型」である場合と、データステートが指定されない場合を例に取り上げる。
信号線811はさらに信号線443と信号線812に分岐し、信号線812は信号線813と信号線814に分岐する。
信号線443は比較例と同じくエンコーダ405に接続され、ヘッダ情報のうちパケットタイプが信号線443を介してエンコーダ405に入力される。また、信号線813は比較部802に接続され、ヘッダ情報のうち要求元IDとReqIDが信号線813を介して比較部802に入力される。そして、信号線814は管理テーブル部801に接続され、パケットタイプ、宛先ID、要求元ID、ReqID、データステートのすべてが信号線814を介して管理テーブル部801に入力される。
また、管理テーブル部801は、さらにライトポインタ制御部803とリードポインタ制御部407からの入力を受け取り、後述の「複製情報」を信号線815に出力する。
管理テーブル部801は、ライトポインタ制御部803からの入力に基づいて、新たに入力されたパケットと同じデータペイロードを持つパケットがデータパケット保存部410に保存されている場合は、上記新たなパケットのヘッダ情報を記憶する。また、管理テーブル部801は、リードポインタ制御部407からの入力に基づいて、リードポインタ値で示されるブロックに保存されているパケットにマージするヘッダ情報を検索する。
複製情報は、出力しようとするパケットにマージするヘッダ情報があるか否かを示す。複製情報はさらに、出力しようとするパケットにマージするヘッダ情報がある場合は、当該ヘッダ情報を含む。
信号線815は信号線816と信号線817に分岐しており、信号線816はヘッダマージ部804へ、信号線817はセレクタ805へ、それぞれ接続されている。信号線815に出力された複製情報は信号線816を介してヘッダマージ部804へ出力される。また、複製情報のうち、出力しようとするパケットにマージするヘッダ情報があるか否かを示す「複製データVALID」フィールドのみが信号線817を介してセレクタ805に出力される。
さらに管理テーブル部801は比較部802とも接続されているが、管理テーブル部801と比較部802との間のデータの入出力については図18Aおよび図18Bとともに後述する。
比較部802は、信号線813を介して入力された要求元IDとReqIDを管理テーブル部801から入力された情報と比較し、比較結果をライトポインタ制御部803に通知する。この比較は、新たに入力されたパケットと同じデータペイロードを持つパケットがデータパケット保存部410に保存されているか否かを判断するために行われる。
データパケット用のライトポインタ制御部803は、比較例のライトポインタ制御部406と同様に、比較器403およびデータパケット保存部410と接続されている。ライトポインタ制御部803はさらに、上記のように比較部802とも接続されており、また、管理テーブル部801とも接続されている。
以上、図17を参照して出力バッファ制御部702cxの構成について説明した。
続いて、出力バッファ制御部702cx内の管理テーブル部801、比較部802、およびライトポインタ制御部803の詳細を図18Aおよび図18Bを参照して説明する。
図18Aは、第1実施形態における管理テーブル部801の構成図であり、図18Bは第1実施形態における比較部802とライトポインタ制御部803の構成図である。紙幅の都合上、図18Aと図18Bは2枚に分かれているが、「A」〜「M」なる符号で示したように図18Aの管理テーブル部801は、図18Bの比較部802およびライトポインタ制御部803と接続されている。
図18Aにおいて管理テーブル部801は、データパケット保存部410内の(N+1)個の保存番地0000〜xxxxに対応する(N+1)個のエントリ901−0〜901−Nを有する。例えば、N=63ならば、「xxxx」=「0063」である。
また、管理テーブル部801は、複数ビットで表され、リードポインタ制御部407から出力されたリードポインタ値を、各1ビットの(N+1)個の出力にデコードするデコーダ902を有する。管理テーブル部801はさらに、(N+1)個のAND回路903−0〜903−Nを有する。0≦j≦Nなる各jについて、AND回路903−jにはリードポインタ制御部407から出力されたリード指示と、デコーダ902の(j+1)番目の出力とが入力される。
例えば、「1」というリードポインタ値とリード指示がリードポインタ制御部407から出力された場合、デコーダ902の出力のうち保存番地0001に対応する2番目の出力のみが論理値1であり、その他のN個の出力は論理値0である。よって、(N+1)個のAND回路903−0〜903−Nのうち、AND回路903−1の出力のみが論理値1である。
また、管理テーブル部801は、FF904とFF905を有する。FF904は、それぞれ1ビットを出力する(N+1)個のAND回路903−0〜903−Nからの出力、すなわち(N+1)ビットの出力を保持する。FF905もFF904と同様であり、FF904とFF905は同じデータを保持する。2つのFF904とFF905を用いる代わりに、1つのFF904だけを用い、FF904の出力を図18AにおけるFF905の出力先へも供給するよう、信号線を適宜分岐させる実施形態も可能である。
さらに、管理テーブル部801は、複数ビットで表され、データパケット用のライトポインタ制御部803から出力されたライトポインタ値を、各1ビットの(N+1)個の出力にデコードするデコーダ906を有する。
FF904が保持する(N+1)ビットのデータは、エントリ901−0〜901−Nに1ビットずつ入力される。FF905が保持する(N+1)ビットのデータも、エントリ901−0〜901−Nに1ビットずつ入力される。また、デコーダ906の(N+1)ビットの出力も、エントリ901−0〜901−Nに1ビットずつ入力される。さらに、エントリ901−0〜901−Nにはそれぞれライトポインタ制御部803からのライト指示と複製ライト指示が入力される。
エントリ901−0〜901−Nの構造と動作はそれぞれ同様であり、図18Aでは保存番地0000用エントリ901−0についてのみ詳細に示している。すなわち、エントリ901−0は、7個のAND回路907〜913、およびAND回路907〜913にそれぞれ対応する以下の7個のフィールドを有する。
・VALIDフィールド914
・要求元IDフィールド915
・ReqIDフィールド916
・複製データVALIDフィールド917
・複製パケットタイプフィールド918
・複製パケット宛先IDフィールド919
・複製データステートフィールド920
上記7個のフィールドのそれぞれは、例えばFFなどの記憶素子を用いて実現される。各フィールドとその入出力の詳細は、比較部802とライトポインタ制御部803の詳細を説明した後で説明する。なお、上記各フィールドを備えるエントリ901−0〜901−Nの全体が、1つの管理テーブルに相当する。
また、図17に関して説明したとおり、パケットのヘッダ内のパケットタイプ、要求元ID、ReqID、宛先ID、データステートの各フィールドのデータがルーティング部703から信号線814を介して、管理テーブル部801に入力される。図17と図18Aに示すように信号線812から分岐した信号線814は、図18Aに示すように、さらに次のように分岐して各エントリ901−0〜901−Nに接続している。
・保存番地0000用エントリ901−0にパケットタイプと宛先IDとデータステートを入力するための信号線931−0
・保存番地0000用エントリ901−0に要求元IDとReqIDが入力される信号線932−0
・ ……
・保存番地xxxx用エントリ901−Nにパケットタイプと宛先IDとデータステートが入力される信号線931−N
・保存番地xxxx用エントリ901−Nに要求元IDとReqIDが入力される信号線932−N
また、信号線812からの他方の分岐は、信号線813として図18Bの比較部802に入力されている。信号線813を介してルーティング部703から比較部802に入力されるのは、パケットのヘッダに含まれる要求元IDとReqIDである。
図18Bのとおり、比較部802は、(N+1)個の保存番地0000〜xxxxに対応する(N+1)個の比較器941−0〜941−Nを備える。比較器941−0〜941−Nの構成は同様であり、比較器941−0〜941−Nそれぞれの出力は、ライトポインタ制御部803内が備えるOR回路951に入力される。
例えば、保存番地0000に対応する比較器941−0には、信号線933を介してルーティング部703から、図17の出力バッファ制御部702cxへ入力されるパケットのヘッダに含まれる要求元IDとReqIDが入力される。また、比較器941−0には、保存番地0000用エントリ901−0内の要求元IDフィールド915とReqIDフィールド916から、要求元IDとReqIDがそれぞれ入力される。つまり、比較器941−0には、要求元IDとReqIDの組が2組入力される。
また、比較器941−0には、制御信号として、保存番地0000用エントリ901−0内のVALIDフィールド914の値、すなわち、データパケット保存部410の保存番地0000のブロックが有効か否かを示す値が入力される。
制御信号として入力されたVALIDフィールド914の値が論理値0の場合、比較器941−0は、論理値0を、OR回路951および、保存番地0000用エントリ901−0内のAND回路910に出力する。
制御信号として入力されたVALIDフィールド914の値が論理値1の場合、比較器941−0は、入力された要求元IDとReqIDの組同士を比較する。そして、入力された2組の要求元IDとReqIDが一致すれば、比較器941−0は、論理値1をOR回路951とエントリ901−0内のAND回路910とに出力する。逆に、入力された2組の要求元IDとReqIDが不一致の場合は、比較器941−0は、論理値0をOR回路951とエントリ901−0内のAND回路910とに出力する。
なお、比較器941−0が出力する論理値0は、データパケット保存部410の保存番地0000には、新たに入力されたデータパケットとデータペイロードが一致するパケットが保存されていないことを示す。また、比較器941−0が出力する論理値1は、データパケット保存部410の保存番地0000には、新たに入力されたデータパケットとデータペイロードが一致するパケットが保存されていることを示す。
つまり、第1実施形態では、要求IDとReqIDが一致すればデータペイロードが等しいということを利用している。このことはパケットの仕様に依存しており、パケットの仕様に応じた様々な実施形態が可能である。いずれにせよ各比較器941−0〜941−Nは、パケットの仕様に応じて適切なヘッダ情報同士を比較することによって、データペイロードの一致または不一致を判断することができる。
データパケット用のライトポインタ制御部803は、上記のOR回路951のほかに、NOT回路952、AND回路953、AND回路954、およびFF955を備える。
OR回路951は(N+1)入力のOR回路であり、比較器941−0〜941−Nからの入力がすべて論理値0である場合のみ論理値0を出力し、それ以外の場合は論理値1を出力する。つまり、新たに出力バッファ制御部702cxに入力されたデータパケットと同じデータペイロードを有する別のデータパケットがデータパケット保存部410内のいずれかのブロックに保存されている場合のみ、OR回路951は論理値1を出力する。
OR回路951の出力はNOT回路952とAND回路953に入力され、NOT回路952の出力はAND回路954に入力される。
ここで、エンコーダ405は比較例と同様に、入力されたパケットがデータパケットであるか否かを示すVALID信号を出力する。エンコーダ405から出力されたVALID信号は、AND回路953および954に入力される。
したがって、AND回路953は、出力バッファ制御部702cxにデータパケットが入力され、かつ、入力されたデータパケットと同じデータペイロードを有する別のパケットがデータパケット保存部410に保存されている場合にのみ、論理値1を出力する。AND回路953からの出力は、図18Aの各エントリ901−0〜901−Nに、複製ライト指示としてそれぞれ入力される。
また、AND回路954は、出力バッファ制御部702cxにデータパケットが入力され、かつ、入力されたデータパケットと同じデータペイロードを有する別のパケットがデータパケット保存部410に保存されていない場合にのみ、論理値1を出力する。AND回路954からの出力は、図18Aの各エントリ901−0〜901−Nに、ライト指示としてそれぞれ入力される。
また、ライトポインタ制御部803は、図8に示した比較例のライトポインタ制御部406がFF451を備えるのと同様に、FF955を備える。FF955は、FF451と同様にライトポインタ値を保持する。また、AND回路954の出力がカウントイネーブル信号としてFF955に入力される。そして、FF955の出力であるライトポインタ値は、比較例と同様にデータパケット保存部410と比較器403に入力されるだけでなく、さらに、図18Aのデコーダ906にも入力される。
以上、図18Bを参照して比較部802とライトポインタ制御部803の詳細を説明した。そこで、ライトポインタ制御部803からの入力を受け取る図18Aの管理テーブル部801の説明に戻ると、例えば保存番地0000用エントリ901−0の内の各コンポーネントの構成と動作は次のとおりである。
VALIDフィールド914は、データパケット保存部410の保存番地0000のブロックが有効か否かを示す1ビットのフィールドである。論理値1が「有効」を示し、論理値0が「無効」を示す。
VALIDフィールド914の値は、保存番地0000に新たなパケットが保存されるときに論理値1となる。また、VALIDフィールド914の値は、保存番地0000に保存されているパケットがヘッダマージ部804を介して、または介さずに、セレクタ805へ出力され、さらにパケット間セレクタ430へと出力されるときに、論理値0となる。具体的には、VALIDフィールド914は次のように構成されている。
VALIDフィールド914は、例えばRS(Reset-Set)型FFにより実現されてもよい。その場合、RS型FFのS(セット)端子にはAND回路907の出力が与えられ、R(リセット)端子には、(N+1)ビットを保持するFF904の最初のビットであるビット0が与えられる。
ここで、AND回路907の入力は、デコーダ906からの出力の最初のビットであるビット0(すなわち(N+1)ビットの出力のうち、保存番地0000に相当するビット)と、ライトポインタ制御部803から出力されたライト指示である。したがって、ライトポインタ制御部803が保存番地0000を指定してライト指示をアサートした場合にのみ、AND回路907の出力は論理値1となり、VALIDフィールド914の値が論理値1にセットされる。
また、リードポインタ制御部407が保存番地0000を示すリードポインタ値を出力するとともにリード指示をアサートした場合にのみ、FF904の最初のビットであるビット0(すなわち(N+1)ビットのうち、保存番地0000に相当するビット)は論理値1となる。そして、FF904のビット0が論理値1となると、VALIDフィールド914の値は論理値0にリセットされる。
AND回路907の出力とFF904のビット0がともに論理値0の場合は、VALIDフィールド914の値は変わらない。
また、前述のとおり、VALIDフィールド914の値は、保存番地0000に対応する比較器941−0へと出力される。
次に要求元IDフィールド915について説明する。要求元IDフィールド915は、データパケット保存部410の保存番地0000に保存するデータパケットの要求元IDを記憶する。要求元IDフィールド915への値の設定は、AND回路908により行われる。以下、要求元IDが例えばM1ビットで表されるとして説明する。
AND回路908への入力は、ライトポインタ制御部803から出力されるライト指示と、デコーダ906の出力のうち、保存番地0000に相当するビット0と、信号線932−0から分岐した信号線を介して入力されるM1ビットの要求元IDである。AND回路908は、ライト指示とデコーダ906のビット0の出力がともに論理値1のときのみ、入力されたM1ビットの要求元IDの値を要求元IDフィールド915に上書きする。ライト指示とデコーダ906からの出力のビット0の少なくとも一方が論理値0のとき、AND回路908は、要求元IDフィールド915への上書きを行わず、要求元IDフィールド915は現在の値を保持する。
上記のように動作するAND回路908と要求元IDフィールド915の具体的な実装方法は様々である。
例えば、AND回路908は、ライト指示とデコーダ906からの出力のビット0との論理積を得るAND回路を含むとともに、入力されたM1ビットの要求元IDを要求元IDフィールド915に通過させるよう構成されていてもよい。また、要求元IDフィールド915は、例えばM1ビットを格納するためのM1組の記憶素子を備え、各記憶素子の制御端子にはライトイネーブル用の制御信号として上記AND回路の出力が与えられる。それにより、上記AND回路の出力が論理値0のときは、要求元IDフィールド915が現在の値を保持し、上記AND回路の出力が論理値1のときは、AND回路908を通過した要求元IDが要求元IDフィールド915に書き込まれる。
例えば、要求元IDフィールド915がM1個のRS型FFを備えていてもよい。ここで、説明の便宜上、AND回路908内の上記AND回路の出力(すなわちライト指示とデコーダ906からの出力のビット0との論理積)を「X」とし、AND回路908を通過した要求元IDのビットjを「Yj」とする(0≦j≦M1−1)。要求元IDフィールド915は、ビットごとに2つのAND回路と1つのNOT回路を備え、ビットjに対応するRS型FFのR端子にはX∧Yjが、S端子にはX∧¬Yjが、それぞれ入力されるように構成される。
すると、Xが論理値0の場合は各RS型FFが現状の値を保持し、Xが論理値1の場合は各RS型FFの値はYj(すなわち要求元IDのビットjの値)となる。したがって、AND回路908と要求元IDフィールド915の上記の動作が実現される。
なお、AND回路908および要求元IDフィールド915の具体的な構成が上記の例と異なっていてもよいことは無論である。
また、前述のとおり、要求元IDフィールド915の値は、保存番地0000に対応する図18Bの比較器941−0へと出力される。
続いて、ReqIDフィールド916について説明する。ReqIDフィールド916は、データパケット保存部410の保存番地0000に保存するデータパケットのReqIDを記憶する。ReqIDフィールド916への値の設定は、AND回路909により行われる。
AND回路909への入力は、ライトポインタ制御部803から出力されるライト指示と、デコーダ906からの出力のうち保存番地0000に相当するビット0と、信号線932−0から分岐した信号線を介して入力されるReqIDである。AND回路908と要求元IDフィールド915について説明したのと同様に、AND回路909とReqIDフィールド916の具体的な実装は様々である。
具体的にどのように実装されるにしろ、AND回路909とReqIDフィールド916は以下のように動作する。すなわち、AND回路909は、ライト指示とデコーダ906からの出力のビット0がともに論理値1のときのみ、入力されたReqIDの値をReqIDフィールド916に上書きする。他方、ライト指示とデコーダ906からの出力のビット0の少なくとも一方が論理値0のとき、AND回路909は、ReqIDフィールド916への上書きを行わず、ReqIDフィールド916は現在の値を保持する。
また、前述のとおり、ReqIDフィールド916の値は、保存番地0000に対応する比較器941−0へと出力される。
続いて、複製データVALIDフィールド917について説明する。複製データVALIDフィールド917は、複製パケットタイプフィールド918、複製パケット宛先IDフィールド919、および複製データステートフィールド920が有効か否かを示す1ビットのフィールドである。論理値1が「有効」を示し、論理値0が「無効」を示す。
複製データVALIDフィールド917の値は、保存番地0000に第1のパケットが保存されている状態で、第1のパケットと同じデータペイロードを有する第2のパケットが出力バッファ制御部702cxに入力されたときに論理値1となる。このとき、第2のパケットのヘッダに含まれるパケットタイプ、宛先ID、データステートはそれぞれ複製パケットタイプフィールド918、複製パケット宛先IDフィールド919、複製データステートフィールド920に記憶される。
また、複製データVALIDフィールド917の値は、保存番地0000に保存されている第1のパケットが、図17のヘッダマージ部804とセレクタ805を介してパケット間セレクタ430へと出力されるときに、論理値0となる。
具体的には、複製データVALIDフィールド917は、例えばRS型FFにより実現されてもよい。その場合、S端子にはAND回路910の出力が与えられ、R端子には、(N+1)ビットを保持するFF905の最初のビットであるビット0が与えられる。
ここで、AND回路910の入力は、保存番地0000に対応して図18Bの比較部802に設けられた比較器941−0の出力と、ライトポインタ制御部803から出力された複製ライト指示である。したがって、新たに入力された第2のパケットと同じデータペイロードを有する第1のパケットが既に保存番地0000に保存されているときのみ、AND回路910の2つの入力がともに論理値1となり、複製データVALIDフィールド917の値が論理値1にセットされる。
また、リードポインタ制御部407が保存番地0000を示すリードポインタ値を出力するとともにリード指示をアサートした場合にのみ、FF905のビット0が論理値1となり、複製データVALIDフィールド917の値が論理値0にリセットされる。
AND回路910の出力とFF905のビット0がともに論理値0の場合は、複製データVALIDフィールド917の値は変わらない。
次に、複製パケットタイプフィールド918について説明する。ここで、図17の出力バッファ制御部702cxに新たに入力された第2のパケットと同じデータペイロードを有する第1のパケットが、既にデータパケット保存部410の保存番地0000に保存されていたとする。このとき、複製パケットタイプフィールド918は、第2のパケットのヘッダに含まれるパケットタイプを記憶する。また、複製パケットタイプフィールド918への値の設定は、AND回路911により行われる。
AND回路911への入力は、図18Bの比較器941−0の出力と、ライトポインタ制御部803から出力された複製ライト指示と、信号線931−0から分岐した信号線を介して入力されるパケットタイプである。AND回路908と要求元IDフィールド915について説明したのと同様に、AND回路911と複製パケットタイプフィールド918の具体的な実装は様々である。
具体的にどのように実装されるにしろ、AND回路911と複製パケットタイプフィールド918は次のように動作する。すなわち、AND回路911は、比較器941−0の出力と複製ライト指示がともに論理値1のときのみ、入力されたパケットタイプの値を複製パケットタイプフィールド918に上書きする。他方、比較器941−0の出力と複製ライト指示の少なくとも一方が論理値0のとき、AND回路911は複製パケットタイプフィールド918への上書きを行わず、複製パケットタイプフィールド918は現在の値を保持する。
次に、複製パケット宛先IDフィールド919について説明する。複製パケット宛先IDフィールド919は、上記第2のパケットのヘッダに含まれる宛先IDを記憶する。また、複製パケット宛先IDフィールド919への値の設定はAND回路912により行われる。
AND回路912への入力は、図18Bの比較器941−0の出力と、ライトポインタ制御部803から出力された複製ライト指示と、信号線931−0から分岐した信号線を介して入力される宛先IDである。宛先IDは、例えば要求元IDと同じくM1ビットで表される。AND回路908と要求元IDフィールド915について説明したのと同様に、AND回路912と複製パケット宛先IDフィールド919の具体的な実装は様々である。
具体的にどのように実装されるにしろ、AND回路912と複製パケット宛先IDフィールド919は次のように動作する。すなわち、AND回路912は、比較器941−0の出力と複製ライト指示がともに論理値1のときのみ、入力された宛先IDの値を複製パケット宛先IDフィールド919に上書きする。他方、比較器941−0の出力と複製ライト指示の少なくとも一方が論理値0のとき、AND回路912は複製パケット宛先IDフィールド919への上書きを行わず、複製パケット宛先IDフィールド919は現在の値を保持する。
次に、複製データステートフィールド920について説明する。複製データステートフィールド920は、上記第2のパケットのヘッダに含まれるデータステートを記憶する。また、複製データステートフィールド920への値の設定はAND回路913により行われる。
AND回路913への入力は、図18Bの比較器941−0の出力と、ライトポインタ制御部803から出力された複製ライト指示と、信号線931−0から分岐した信号線を介して入力されるデータステートである。AND回路908と要求元IDフィールド915について説明したのと同様に、AND回路913と複製データステートフィールド920の具体的な実装は様々である。
具体的にどのように実装されるにしろ、AND回路913と複製データステートフィールド920は次のように動作する。すなわち、AND回路913は、比較器941−0の出力と複製ライト指示がともに論理値1のときのみ、入力されたデータステートの値を複製データステートフィールド920に上書きする。他方、比較器941−0の出力と複製ライト指示の少なくとも一方が論理値0のとき、AND回路913は複製データステートフィールド920への上書きを行わず、複製データステートフィールド920は現在の値を保持する。
そして、以上説明した複製データVALIDフィールド917、複製パケットタイプフィールド918、複製パケット宛先IDフィールド919、および複製データステートフィールド920の値は、管理テーブル部801内のセレクタ921へと出力される。同様に、他のエントリ901−1〜901−Nからもセレクタ921へと4つの値の組がそれぞれ出力される。
また、セレクタ921には、選択信号として、AND回路903−0〜903−Nからの出力が入力される。AND回路903−0〜903−Nの出力はそれぞれ1ビットであるから、セレクタ921の選択信号は(N+1)ビットである。また、明らかに、選択信号の(N+1)ビットのうち論理値1となるのは、最大1ビットである。
選択信号の全ビットが論理値0の場合、セレクタ921は出力をネゲートする(すなわち、有効なデータを出力しない)。選択信号のビットj(0≦j≦N)が論理値1のとき、セレクタ921はエントリ901−jから出力された4つの値の組を選択して信号線815へと出力する。例えば、「0」というリードポインタ値とリード指示がリードポインタ制御部407から出力されると、AND回路903−0の出力が論理値1となり、セレクタ921は保存番地0000用エントリ901−0からの出力を選択する。
信号線815は、ヘッダマージ部804へ接続された信号線816と、セレクタ805へ接続された信号線817に分岐している。そして、セレクタ921が出力する複製データVALIDフィールド917の値は、信号線815と信号線816、信号線817を介してそれぞれヘッダマージ部804、セレクタ805に出力される。セレクタ921が出力する複製パケットタイプフィールド918、複製パケット宛先IDフィールド919、複製データステートフィールド920の値は、信号線815と信号線816を介してヘッダマージ部804に出力される。
ヘッダマージ部804は、リードポインタ値に対応するエントリ(901−0〜901−Nのいずれか)からセレクタ921を介して入力された各フィールドの値を、リード指示に応じてデータパケット保存部410から出力されたパケットにマージする。そして、ヘッダマージ部804は、マージして得られたパケットをセレクタ805に出力する。
例えば、データパケット保存部410に保存されている第1のパケットと同じデータペイロードを有する第2のパケットのヘッダの内容がj番目のエントリ901−jに記憶されており、第1のパケットの保存番地を指定するリード指示が発行される。すると、ヘッダマージ部804は、エントリ901−jからセレクタ921を介して入力された内容(すなわち、第2のパケットのヘッダに相当する情報)を、データパケット保存部410から出力される第1のパケットにマージする。
以上、図18Aと図18Bを参照して702cxの構成を説明した。続いて、出力バッファ制御部702cxの動作を説明する。
図19は、第1実施形態における出力バッファ制御部702cxの動作を説明する図である。なお、要求パケットが入力された場合、出力バッファ制御部702cxは比較例における図7の出力バッファ制御部207caと同様に動作するので、説明は省略する。以下では、データパケットが出力バッファ制御部702cxに入力された場合について説明する。
ステップS701で、CPU104cが出力したデータパケットがルーティング部703によりルーティングされ、出力バッファ制御部702cxに入力される。
すると、ステップS702で、データパケットのヘッダ内のパケットタイプがエンコーダ405と管理テーブル部801に出力される。また、ヘッダ内の要求元IDとReqIDが管理テーブル部801と比較部802に出力される。さらに、ヘッダ内の宛先IDとデータステートは管理テーブル部801に出力される。
次のステップS703では、ルーティング部703から入力されたのはデータパケットであるということを、エンコーダ405がパケットタイプの値から判断する。その結果、エンコーダ405は、データパケット用のライトポインタ制御部803にVALID信号を出力する。
また、ステップS704では、比較部802が、ステップS702で受け取った要求元IDとReqIDの組を、管理テーブル部801内の各エントリ901−0〜901−Nから出力されている要求元IDとReqIDの組と比較する。比較の結果、比較部802は、図18Bに関して説明したように、(N+1)個の出力を管理テーブル部801内の各エントリ901−0〜901−Nとライトポインタ制御部803内のOR回路951に出力する。ステップS704はステップS703と並行して行われてもよい。
なお、図18Aに関して説明したように、管理テーブル部801内の各エントリ901−0〜901−N内からはVALIDフィールド914の値が比較部802へ出力されている。したがって、ステップS704では、VALIDフィールド914の値が「有効」を示す論理値1であるエントリ内の要求元IDとReqIDの組と、ステップS701で入力されたデータパケットの要求元IDとReqIDの組とが比較される。
ステップS705では、データパケット用のライトポインタ制御部803が、OR回路951を用いて、比較部802からステップS704で出力された(N+1)個の出力の論理和を求める。そして、ステップS703でエンコーダ405から出力されたVALID信号と、求めた論理和とに基づいて、ライトポインタ制御部803は、次のように動作する。
エンコーダ405からVALID信号が出力(アサート)されており、かつ、OR回路951が出力する論理和が論理値0である場合、ステップS701で入力されたデータパケットと同じデータペイロードを有するパケットは保存されていない。よって、ステップS701で入力されたデータパケットは破棄してはならない。
したがって、この場合、ライトポインタ制御部803は、ステップS701で入力されたデータパケットを現在使われていないデータパケット保存部410内のブロックに保存する処理を行う。すなわち、ライトポインタ制御部803は、図18BのFF955が保持するライトポインタ値を出力し、ライトポインタ値を更新する。ライトポインタ値の出力先は、管理テーブル部801、データパケット保存部410、および比較器403である。また、ライトポインタ制御部803は、管理テーブル部801とデータパケット保存部410へライト指示を出力する。
こうしてライトポインタ値とライト指示が出力された後は、データパケット保存部410がパケットを保存し、パケット間アービタ402が調停の結果としてポート間アービタ部507xへ出力リクエストを出力する。詳しくは、図7の比較例でステップS404d〜S407として説明した動作と同様である。
また、ステップS705において、エンコーダ405からVALID信号が出力されており、かつ、OR回路951が出力する論理和が論理値1である場合、ステップS701で入力されたデータパケットと同じデータペイロードを有するパケットが保存されている。
したがって、この場合、ライトポインタ制御部803は、ステップS701で入力されたデータパケットのうち、後の復元で使うためのヘッダ情報のみを管理テーブル部801に記憶し、データパケットそのものは破棄する処理を行う。すなわち、ライトポインタ制御部803は、複製ライト指示を管理テーブル部801に出力する。
そして、ステップS706において管理テーブル部801は、ステップS702で入力された情報を適切なエントリ内に保存する。管理テーブル部801のステップS706における動作は、ライトポインタ制御部803から出力されるライト指示、複製ライト指示、およびライトポインタ値、ならびに比較部802から出力される(N+1)個の比較結果に基づく。
具体的には、ステップS706における管理テーブル部801の動作は、ステップS705でライト指示と複製ライト指示のいずれが出力(アサート)されたかによって2通りに場合分けされる。図18Bの説明から明らかなとおり、ライト指示と複製ライト指示は排他的であり、同時に論理値1になることはない。
ステップS705でライト指示が出力された場合、管理テーブル部801は、ライトポインタ値が示す番地用のエントリ内の要求元IDフィールド915とReqIDフィールド916に、ステップS702で入力された要求元IDとReqIDの値を記憶する。また、管理テーブル部801は、ライトポインタ値が示す番地に対応するエントリ内のVALIDフィールド914の値を論理値1にセットし、ライトポインタ値が示す番地に対応するエントリを有効にする。
ステップS705で複製ライト指示が出力された場合は、比較器941−0〜941−Nのいずれか1つが、ステップS704の比較の結果、一致を示す論理値1を出力した場合である。つまり、ステップS701で入力されたデータパケットと同じデータペイロードを有するパケットが保存されている番地が比較部802により検出された場合に、複製ライト指示が出力される。
この場合、管理テーブル部801は、判別された保存番地用のエントリ内の複製パケットタイプフィールド918、複製パケット宛先IDフィールド919、および複製データステートフィールド920に、ステップS702で入力された値をそれぞれ記憶する。また、複製ライト指示が出力されると、管理テーブル部801は、比較部802により判別されたエントリ内の複製データVALIDフィールド917を論理値1にセットする。
このように、複製ライト指示が出力された場合は、ステップS701で入力されたパケットそのものはデータパケット保存部410に保存されず、破棄される。また、複製ライト指示が出力された場合は、図18Bに示すようにライトポインタ値が更新されない。したがって、パケット間アービタ部401において改めて調停が行われることもなく、ポート間アービタ部507xへの新たな出力リクエストをパケット間アービタ402が出力することもない。こうして、ステップS705で複製ライト指示が出力された場合は、ステップS701でのパケットの入力を契機とする一連の処理が、ステップS706で終了する。
他方で、ステップS705でライト指示が出力された場合は、上記のように図7のステップS404d〜S407と同様の動作が行われ、その後、ステップS707においてポート間アービタ部507xからデータパケットの出力許可が出力される。
するとステップS708でパケット間アービタ402は、図7のステップS409dと同様に、データパケットを出力するようパケット間セレクタ430に選択信号を出力し、データパケット用のリードポインタ制御部407にリードポインタ更新指示を出力する。
すると、ステップS709でリードポインタ制御部407は、リード指示とリードポインタ値を管理テーブル部801とデータパケット保存部410に出力し、リードポインタ値を更新する。また、リードポインタ制御部407は、更新後のリードポインタ値を比較器403へ出力する。
そして、ステップS710でデータパケット保存部410は、リード指示にしたがって、リードポインタ値が示す番地に保存されているパケットをヘッダマージ部804とセレクタ805に出力する。
また、ステップS711に示すように管理テーブル部801は、リード指示にしたがって、リードポインタ値が示す番地に対応するエントリ内のデータをヘッダマージ部804とセレクタ805に出力する。
具体的には、管理テーブル部801は、複製データVALIDフィールド917、複製パケットタイプフィールド918、複製パケット宛先IDフィールド919、および複製データステートフィールド920の値をヘッダマージ部804に出力する。また、管理テーブル部801は、複製データVALIDフィールド917の値を選択信号としてセレクタ805に出力する。
出力された複製データVALIDフィールド917の値は、論理値0のとき、リードポインタ値により示されるデータパケット保存部410内の保存番地から読み出されたパケットそのものをセレクタ805が選択することを示す。逆に、出力された複製データVALIDフィールド917の値は、論理値1のとき、ヘッダマージ部804で生成される複製情報を持ったパケットをセレクタ805が選択することを示す。
ステップS711において管理テーブル部801はさらに、図18AのFF904とFF905を用いて、リードポインタ値で示される保存番地用のエントリ内のVALIDフィールド914と複製データVALIDフィールド917の値を論理値0にリセットする。
なお、ステップS710とS711は並列に実行されてもよい。
そして、ステップS712においてヘッダマージ部804は、ステップS710で入力されたデータパケットのヘッダに、ステップS711で入力された4つのフィールドの情報を追加したパケットを生成し、セレクタ805に出力する。具体例は後述するが、ヘッダマージ部804は、例えば、ステップS710で入力されたデータパケットのヘッダの所定の位置に、4つのフィールドの情報を挿入することにより、パケットを生成する。
するとステップS713においてセレクタ805は、ステップS711で管理テーブル部801から出力された選択信号にしたがって、データパケット保存部410から入力されたパケットと、ヘッダマージ部804から入力されたパケットの一方を選択する。そして、セレクタ805は、選択したパケットをパケット間セレクタ430に出力する。
ここで、パケット間セレクタ430には、図7のステップS409rおよびS409dに関して説明したように、要求パケットとデータパケットのいずれを選択するのかを示す選択信号がパケット間アービタ402から入力されている。選択信号が、データパケットを選択することを示す値になると、ステップS714に示すように、パケット間セレクタ430は、セレクタ805から出力されたパケットを選択し、ポート間セレクタ508xへ出力する。
以上、図19を参照して出力バッファ制御部702cxの動作について説明した。なお、図19の説明におけるデータパケットは、例えば、ライトバックデータパケットでもよく、共有型・転送データパケットでもよい。
また、図16に示したXB102内の出力バッファ制御部712ceなども、図17〜図19を参照して説明した出力バッファ制御部702cxと同様に構成されている。例えば、図19は、ルーティング部703とポート間アービタ部507xとポート間セレクタ508xを、それぞれルーティング部713とポート間アービタ部205eとポート間セレクタ206eに置き換えれば、出力バッファ制御部712ceを示す図となる。なお、以下の図に関しても同様に、出力バッファ制御部702cxを中心にして説明を行うが、他の出力バッファ制御部についても同様である。
次に、より具体的な例として、図14においてステップS604とS605が行われた場合のSC103c内の出力バッファ制御部702cxの動作について、図20〜図22を参照して説明する。
図20は、第1実施形態において先にライトバックデータパケットが入力されたときの出力バッファ制御部702cxの動作の具体例を説明する図である。
図20には、出力バッファ制御部702cx内のコンポーネントのうち、以下で説明するステップに関連するもののみを抜粋して示してある。また、図20には、データパケット保存部410の詳細を示した。さらに、図20では、管理テーブル部801内の各エントリ901−0〜901−Nを表形式で示した。
なお、以下では説明の便宜上、図20の動作が開始される時点で、ライトポインタ制御部803のライトポインタ値とリードポインタ制御部407のリードポインタ値の初期値は、ともに「0000」であると仮定する。また、図20の動作が開始される時点で、管理テーブル部801内のすべてのエントリ901−0〜901−Nにおいて、VALIDフィールド914の初期値が、「無効」を示す論理値0であると仮定する。
ステップS801で、CPU104cが出力したライトバックデータパケット601が図15のSC103c内のルーティング部703によりルーティングされ、XB102と接続された出力ポート502xの前段の出力バッファ制御部702cxに入力される。
するとステップS802で、ライトバックデータパケット601のパケットヘッダ情報605がエンコーダ405、管理テーブル部801、および比較部802へ出力される。
図17に関して説明したように、具体的には、ライトバックデータパケット601のヘッダには、少なくとも、パケットタイプ、要求元ID、ReqID、宛先ID、およびデータステートのフィールドがある。
図20の例では、パケットタイプの値は、ライトバックデータパケットであることを示す値である。
そして、図14と同様に図20も、CPU104aがメインメモリ105e内のデータを要求したことを契機として、要求されたデータをキャッシュしているCPU104cがライトバックデータパケット601を出力する例を示す。したがって、ライトバックデータパケット601の要求元IDの値はCPU104aのIDである。また、宛先IDの値は、メインメモリ105eと同じノード101e内にあってメインメモリ105eを管理するSC103eのIDである。
なお、ReqIDの値は、説明の便宜上、「5」であるとする。また、ライトバックデータパケット601ではデータステートが指定されないため、データステートの値は「なし」を示す値である。
ステップS802では、パケットタイプはエンコーダ405と管理テーブル部801に出力され、要求元IDとReqIDは管理テーブル部801と比較部802に出力され、宛先IDとデータステートは管理テーブル部801に出力される。
そして、ステップS803では、エンコーダ405が、受け取ったパケットタイプに基づいて、「ライトバックデータパケット601はデータパケットである」と判断し、データパケット用のライトポインタ制御部803にVALID信号を出力する。
また、ステップS804では、比較部802が、受け取った要求元IDとReqIDの値を、管理テーブル部801内の各エントリ901−0〜901−Nの要求元IDフィールド915とReqIDフィールド916から出力される値とそれぞれ比較する。実際には、図18A〜図19に関して説明したように、VALIDフィールド914の値が「有効」を示す論理値1のエントリのみが比較対象である。
したがって、上記のとおり「すべてのエントリ901−0〜901−NにおいてVALIDフィールド914の値は論理値0である」という場合には、比較部802からの(N+1)個の出力はすべて、「不一致」を示す論理値0である。図18Bに示すように、比較部802はこの比較結果を管理テーブル部801とライトポインタ制御部803に出力する。
すると、ステップS805においてデータパケット用のライトポインタ制御部803は、比較部802からの(N+1)個の出力の論理和を求める。求めた論理和は、ライトバックデータパケット601の要求元IDおよびReqIDと一致する要求元IDおよびReqIDを記憶する有効なエントリが管理テーブル部801に存在しないことを示す。また、上記ステップS803のとおり、エンコーダ405からはVALID信号が出力されている。
よって、ステップS805でライトポインタ制御部803は、管理テーブル部801とデータパケット保存部410にライト指示と「0000」というライトポインタ値を出力し、その後、ライトポインタ値を「0001」に更新する。
するとステップS806で管理テーブル部801は、ライト指示にしたがい、入力されたライトポインタ値が示す「0000」という番地用のエントリ901−0において、3つのフィールドの値をセットする。
すなわち、管理テーブル部801は、エントリ901−0のVALIDフィールド914を、「有効」を示す論理値1にセットする。また、管理テーブル部801は、エントリ901−0の要求元IDフィールド915に、ステップS802で入力されたCPU104aのIDを保存する。さらに、管理テーブル部801は、エントリ901−0のReqIDフィールド916に、ステップS802で入力された「5」というReqIDの値を保存する。
また、ステップS807でデータパケット保存部410は、ライト指示にしたがい、入力されたライトポインタ値が示す「0000」という番地に、ライトバックデータパケット601を保存する。ステップS806とS807の実行順は任意であり、ステップS806とS807は並列に実行されてもよい。
また、ステップS808では、パケット間アービタ部401の比較器403が、データパケット用のライトポインタ値とリードポインタ値を比較する。ライトポインタ値は、ライトポインタ制御部803から受け取った更新後の「0001」という値であり、リードポインタ値はリードポインタ制御部407から受け取った「0000」という値である。したがって、比較結果は「不一致」となり、比較器403はパケット間アービタ部401に出力リクエストを出力する。
すると、パケット間アービタ部401は、ステップS808で受け取った出力リクエストと要求パケットに関する出力リクエストとの間の調停を必要に応じて行った後、ステップS809で、ポート間アービタ部507xへ出力リクエストを出力する。
続いて、ステップS809の出力リクエストに対する出力許可が得られる前に、さらに共有型・転送データパケットが出力バッファ制御部702cxに入力された場合について説明する。
図21は、第1実施形態においてライトバックデータパケットの後から共有型・転送データパケットが入力されたときの出力バッファ制御部702cx内の管理テーブル部801の動作の具体例を説明する図である。なお、図21には、出力バッファ制御部702cx内のコンポーネントのうち、以下で説明するステップに関連するもののみを抜粋して示してある。また、図21では、管理テーブル部801内の各エントリ901−0〜901−Nを表形式で示した。
ステップS810で、図15のCPU104cが出力した共有型・転送データパケット603がSC103c内のルーティング部703によりルーティングされ、XB102と接続された出力ポート502xの前段の出力バッファ制御部702cxに入力される。
するとステップS811で、共有型・転送データパケット603のパケットヘッダ情報606が、エンコーダ405、管理テーブル部801、および比較部802へ出力される。
共有型・転送データパケット603は、CPU104aがメインメモリ105e内のデータを要求したことを契機として、要求されたデータをキャッシュしているCPU104cが出力したパケットである。したがって、パケットヘッダ情報606において、パケットタイプの値は転送データパケットであることを示す値であり、要求元IDと宛先IDの値はCPU104aのIDであり、ReqIDの値は図20での仮定のとおり「5」である。また、パケットヘッダ情報606においてデータステートの値は、キャッシュプロトコルにしたがって、「共有型」を示す値であるとする。
ステップS811では、パケットタイプはエンコーダ405と管理テーブル部801に出力され、要求元IDとReqIDは管理テーブル部801と比較部802に出力され、宛先IDとデータステートは管理テーブル部801に出力される。
続いて、ステップS812でエンコーダ405が、受け取ったパケットタイプに基づいて、「共有型・転送データパケット603はデータパケットである」と判断し、データパケット用のライトポインタ制御部803にVALID信号を出力する。
また、ステップS813では比較部802が、受け取った要求元IDとReqIDの値を、管理テーブル部801内の各エントリ901−0〜901−Nの要求元IDフィールド915とReqIDフィールド916から出力される値とそれぞれ比較する。実際には、図20の前提と図20の動作から、VALIDフィールド914の値が論理値1であるエントリ901−0のみが比較対象である。
図20のステップS806の結果、エントリ901−0において要求元IDフィールド915にはCPU104aのIDが保存され、ReqIDフィールド916には「5」という値が保存されている。したがって、ステップS813では、比較部802は、エントリ901−0に対応する比較器941−0から「一致」を示す論理値1を出力し、他のエントリ901−1〜901−Nに対応する比較器941−1〜941−Nからは「不一致」を示す論理値0を出力する。これら(N+1)個の比較結果の出力先は、管理テーブル部801とライトポインタ制御部803である。
すると、ステップS814においてデータパケット用のライトポインタ制御部803は、比較部802からの(N+1)個の出力の論理和を求める。求めた論理和は、共有型・転送データパケット603の要求元IDおよびReqIDと一致する要求元IDおよびReqIDを記憶する有効なエントリが管理テーブル部801に存在することを示す。また、上記ステップS812のとおり、エンコーダ405からはVALID信号が出力されている。
よって、ステップS814でライトポインタ制御部803は、管理テーブル部801に複製ライト指示を出力する。換言すれば、ステップS814ではライト指示がネゲートされており、ライト指示がデータパケット保存部410に出力されない。したがって共有型・転送データパケット603そのものは、データパケット保存部410に保存されず、破棄される。
そして、ステップS815で管理テーブル部801は、ライトポインタ制御部803から出力された複製ライト指示と比較部802からの(N+1)個の出力に基づいて、一致が検出されたエントリ901−0において、4つのフィールドの値をセットする。
すなわち、管理テーブル部801は、エントリ901−0の複製データVALIDフィールド917を、「有効」を示す論理値1にセットする。また、管理テーブル部801は、エントリ901−0の複製パケットタイプフィールド918に、ステップS811で入力された、転送データパケットを示す値を保存する。
さらに、管理テーブル部801は、エントリ901−0の複製パケット宛先IDフィールド919に、ステップS811で入力されたCPU104aのIDを保存する。また、管理テーブル部801は、エントリ901−0の複製データステートフィールド920に、ステップS811で入力された、「共有型」を示す値を保存する。
以上、図20と図21を参照して説明したように、第1実施形態によれば、第1のデータパケットに対する出力許可が得られる前に第2のデータパケットが入力されたとき、データパケット保存部410内の1つのブロックのみが使われる。比較例では図13のとおり同じデータペイロードを持つ2つのパケットを保存するためにデータパケット保存部410の2つのブロックが使われるのと比較して、第1実施形態ではデータパケット保存部410に必要な記憶容量が2分の1に削減されている。
つまり、SC103cが同じノード101c内のCPU104c〜104dへ出力する共有型・データ転送要求パケットの最大アウトスタンディング数がPのとき、比較例ではデータパケット保存部410に2Pブロックの容量が必要である。それに対し、第1実施形態では、データパケット保存部410にPブロックの容量が必要である。
なお、第1実施形態では、比較例には存在しない管理テーブル部801が設けられており、管理テーブル部801内にはFFなどの記憶素子により実現されるエントリ901−0〜901−Nが含まれる。しかしながら、一般にパケットのヘッダはデータペイロードよりも十分に短い。よって、管理テーブル部801のために付加的に必要となる記憶容量を考慮しても、第1実施形態の方が比較例よりも出力バッファ制御部に必要な記憶容量が大幅に少ない。よって、データパケット保存部410だけではなく出力バッファ制御部全体で必要な記憶容量で比較したとしても、第1実施形態は比較例の約2分の1の容量しか必要としない。
続いて、図21のステップS814の後でポート間アービタ部507xから出力許可が下りたときの動作、すなわち図19のステップS707〜S714の具体例を説明する。
図22は、第1実施形態において図21の処理により共有型・転送データパケットが破棄された後にポート間アービタ部507xから出力許可が下りたときの出力バッファ制御部内702cxのヘッダマージ部804の動作の具体例を説明する図である。図22には、出力バッファ制御部702cx内のコンポーネントのうち、以下で説明するステップに関連するもののみを抜粋して示してある。また、図22にはヘッダマージ部804の動作を示す模式図を含む。
ステップS901で、ポート間アービタ部507xからパケット間アービタ402に対して、出力許可が出力される。
するとステップS902でパケット間アービタ402は、データパケットを出力するよう指示するパケット間セレクタ430に選択信号を出力するとともに、データパケット用のリードポインタ制御部407へリードポインタ更新指示を出力する。
続いて、ステップS903でリードポインタ制御部407は、リードポインタ更新指示にしたがって、まずリード指示と「0000」というリードポインタ値を管理テーブル部801とデータパケット保存部410に出力した後、リードポインタ値を更新する。そして、リードポインタ制御部407は、更新後のリードポインタ値「0001」を比較器403に出力する。
ここで、図20のステップS805においてライトポインタ値は「0001」に更新されているため、ステップS903の実行によりリードポインタ値とライトポインタ値が一致する。したがって、リードポインタの更新により、比較器403はパケット間アービタ402への出力リクエストをネゲートするようになる。つまり、比較器403からパケット間アービタ402へ、出力リクエストが出力されないようになる。
したがって、もし要求パケットに関して比較器404がパケット間アービタ402へ出力リクエストを出力していなければ、パケット間アービタ402からポート間アービタ部507xへの出力リクエストも出力されないようになる。
また、ステップS904でデータパケット保存部410は、ステップS903で入力されたリード指示とリードポインタ値にしたがい、リードポインタ値が示す番地「0000」に保存されているパケットをヘッダマージ部804とセレクタ805に出力する。なお、図20に関して説明したように、「0000」番地「0000」にはライトバックデータパケット601が保存されている。
また、ステップS905で管理テーブル部801は、ステップS903で入力されたリード指示にしたがい、リードポインタ値が示す番地「0000」用のエントリ901−0に保存されている4つのフィールドの値をヘッダマージ部804に出力する。
すなわち、管理テーブル部801は、エントリ901−0の複製データVALIDフィールド917、複製パケットタイプフィールド918、複製パケット宛先IDフィールド919、および複製データステートフィールド920の値をヘッダマージ部804に出力する。これらのフィールドの値は、図21に関して説明したとおり、それぞれ、「有効」を示す論理値1、転送データパケットを示す値、CPU104aのID、「共有型」を示す値である。また、以上4つのフィールドの値を、以下ではまとめて複製情報607とよぶことがある。
また、ステップS905で管理テーブル部801はさらに、リードポインタ値が示す「0000」なる番地用のエントリ901−0の複製データVALIDフィールド917の値である論理値1をセレクタ805に出力する。そして、図18Aに示したように管理テーブル部801は、FF905の出力をリセット信号として用いて、エントリ901−0の複製データVALIDフィールド917を、「無効」を示す論理値0にリセットする。
なお、ステップS904とS905の実行順は任意であり、ステップS904とS905が並列に実行されてもよい。
続いて、ステップS906でヘッダマージ部804は、ステップS904でデータパケット保存部410から出力されたライトバックデータパケット601のヘッダに、ステップS905で管理テーブル部801から出力された複製情報607を追加する。ヘッダマージ部804は、複製情報607の追加により、複製情報を持ったライトバックデータパケット608を生成し、セレクタ805に出力する。
例えば、ライトバックデータパケット601のヘッダは、パケットタイプ、宛先ID、要求元ID、ReqID、データステート、アドレス、その他のフィールドを含む。また、ヘッダの末尾には1つ以上の予約(reserved)フィールドがあってもよい。なお、ヘッダ内のアドレスフィールドは、データペイロードに含まれるデータが記憶されているメインメモリのアドレスを示す。
ヘッダマージ部804は、ライトバックデータパケット601のヘッダの所定の位置に複製情報607を挿入する。例えば、図22の例では「所定の位置」とはヘッダの末尾の予約フィールドの直前の位置だが、「所定の位置」は実施形態に応じて任意に定めることができる。
複製情報を持ったライトバックデータパケット608のヘッダでは、図22に示すように、ライトバックデータパケット601に元々含まれていたパケットタイプ、宛先ID、要求元ID、ReqID、データステート、アドレス、およびその他のフィールドの後に、複製情報607に相当する4つのフィールドが続く。そして最後に、ライトバックデータパケット601に元々含まれていた予約フィールドがある。複製情報を持ったライトバックデータパケット608のデータペイロードは、ライトバックデータパケット601のデータペイロードそのものである。
換言すれば、複製情報を持ったライトバックデータパケット608は、ライトバックデータパケット601のヘッダの情報と、共有型・転送データパケット603のヘッダの情報とを含む。さらに、複製情報を持ったライトバックデータパケット608は、ライトバックデータパケット601と共有型・転送データパケット603に共通のデータペイロードを含む。
ここで、セレクタ805には、データパケット保存部410からライトバックデータパケット601が入力され、ヘッダマージ部804から複製情報を持ったライトバックデータパケット608が入力されている。ステップS907では、セレクタ805が、ステップS905で管理テーブル部801から出力された選択信号としての複製データVALIDフィールド917の値にしたがって、複製情報を持ったライトバックデータパケット608を選択し、パケット間セレクタ430に出力する。
そして、ステップS908においてパケット間セレクタ430は、ステップS902で入力された選択信号に基づいて、データパケットを選択する。すなわち、パケット間セレクタ430は、セレクタ805からの入力である複製情報を持ったライトバックデータパケット608を選択してポート間セレクタ508xへと出力する。
なお、ポート間アービタ部507xは、ステップS901で出力バッファ制御部702cxに対する出力許可を出力した時点で、出力バッファ制御部702cxを選択するよう指示する選択信号をポート間セレクタ508xに出力している。したがって、ステップS908でパケット間セレクタ430からポート間セレクタ508xに出力された複製情報を持ったライトバックデータパケット608は、ポート間セレクタ508xで選択され、図15の出力ポート502xへ出力される。そして、複製情報を持ったライトバックデータパケット608は、出力ポート502xからバス108cを介して、図16に示すXB102の入力ポート201cへと出力される。
ここで、比較例においては、図12と図13に示すように、データパケット保存部410に個々に保存されていたライトバックデータパケット601と共有型・転送データパケット603が個々にSC103cからバス108cを介してXB102へ出力される。それに対し、第1実施形態では、上記のとおり、1つの複製情報を持ったライトバックデータパケット608がSC103cからバス108cを介してXB102へ出力されるだけである。したがって、第1実施形態によれば、データパケットの出力によるバス108cの占有時間を比較例の約2分の1に短縮することができる。
なお、複製情報を持ったライトバックデータパケット608は、追加された複製情報607のぶん、ライトバックデータパケット601や共有型・転送データパケット603よりもパケット長が長い。しかし、一般には、ヘッダの長さがデータペイロードの長さより十分に短いようなパケット形式が採用されることが多い。したがって、複製情報を持ったライトバックデータパケット608の長さは、ライトバックデータパケット601の長さと共有型・転送データパケット603の長さの和の、約2分の1である。
バス108cの占有時間が短縮されると、図15のSC103cにおいて各出力バッファ制御部702cx、702dx、509ix、および509sxがポート間アービタ部507xへ出力リクエストを出力してから出力許可が下りるまでの待ち時間が短縮される。したがって、第1実施形態によれば、比較例と比べて、サーバシステム100全体としてのレイテンシおよびスループットが改善される。つまり、第1実施形態によれば、サーバシステム100の性能が向上する。
続いて、図22のようにしてXB102へ出力された、複製情報を持ったライトバックデータパケット608の、XB102における復元について、XB102内のコンポーネントの詳細とともに、図23〜図29を参照して説明する。
図23は、第1実施形態における複製チェック部1001、データパケット復元部1002、セレクタ1003、およびルーティング部713の構成を示す図である。図23は、図16に示すXB102においてSC103cに対応する部分を抜粋して示した図である。
つまり、図23は、図16においてSC103cと接続された入力ポート201cからルーティング部713へ至る経路上に設けられた複製チェック部1001とデータパケット復元部1002とセレクタ1003とを示している。また、図23には、ルーティング部713の一部(具体的には、入力ポート201cが受け取ったパケットのルーティングに関わる部分)を抜粋して示してある。
なお、図23と同様の複製チェック部1001とデータパケット復元部1002とセレクタ1003が、図16において他のSC103a、103e、および103gに対応して設けられている。また、ルーティング部713は、4つのSC103a〜103gに関して対称的に構成されている。
さらに、図23と同様の複製チェック部1001とデータパケット復元部1002とセレクタ1003が、図15において入力ポート501xからルーティング部703に至る経路上に設けられている。また、SC103c内のルーティング部703の詳細の図示は省略したが、ルーティング部713の構成とともにルーティング部703の構成についても後述する。
図23において、SC103cと接続された入力ポート201cからルーティング部713へ至る経路上には、複製チェック部1001とデータパケット復元部1002とセレクタ1003とが設けられている。また、複製チェック部1001はルーティングテーブル部711cと接続されている。ルーティングテーブル部711cの詳細は、図25とともに後述する。
複製チェック部1001は、パケットタイプチェック部1004と複製チェック部1005と比較器1006を備える。また、データパケット復元部1002は複製データパケット修正部1007とヘッダ復元部1008とデータパケット生成部1009を備える。
そして、ルーティング部713は、比較例における図6のルーティング部203と同様の分岐部306を備え、さらに、分岐部1010、OR回路1011、OR回路1012、およびOR回路1013を備える。ただし、図6の分岐部306は出力バッファ制御部207ca、207ce、および207cgに接続されているが、分岐部306はOR回路1011、1012、および1013に接続されている。そして、OR回路1011、1012、および1013がそれぞれに対応する出力バッファ制御部712ca、712ce、および712cgに接続されている。
入力ポート201cから入力されたパケットの全部または一部は、以下のようにして各部に入力される。
入力ポート201cに接続された信号線1021には、入力ポート201cがSC103cから受け取ったパケットが出力される。信号線1021は信号線1022と信号線1023に分岐している。信号線1022は分岐してセレクタ1003と複製データパケット修正部1007に接続されており、信号線1022を介してパケットがセレクタ1003と複製データパケット修正部1007に出力される。
また、信号線1021から分岐した信号線1023を介して、複製チェック部1001にはパケットに含まれるヘッダ情報が出力される。信号線1023はさらに信号線1024と信号線1025に分岐し、信号線1025は信号線1026と信号線1027に分岐する。信号線1024を介してヘッダ情報のうちパケットタイプフィールドの値がパケットタイプチェック部1004に出力される。
また、信号線1026を介してヘッダ情報のうち複製データVALIDフィールドの値が複製チェック部1005に出力され、信号線1027を介してヘッダ情報のうち宛先IDフィールドと複製宛先フィールドの値がルーティングテーブル部711cに出力される。
なお、入力ポート201cが受け取ったパケットは、例えば要求パケットである場合などでは、複製データVALIDフィールドや複製パケット宛先IDフィールドを持たない。その場合、信号線1026を介して複製チェック部1005には、ダミーの値として論理値0が出力される。また、信号線1027を介してルーティングテーブル部711cには、例えば、宛先IDとして存在しないダミーの値が出力されてもよい。例えば、すべてのビットが論理値0の値を宛先IDとして用いないことが予め決められていれば、ダミーの値としてすべてのビットが論理値0の値を用いることができる。
このようなダミーの値の出力は、パケットの形式を定める仕様に応じて、適宜実現可能である。
例えば、任意の用途に使用してよいオプション領域がヘッダに含まれる形式のパケットが、サーバシステム100において用いられてもよい。そして、図22に示した複製データVALID、複製パケットタイプ、複製パケット宛先ID、および複製データステートの各フィールドは、オプション領域を使ったものであってもよい。例えば、オプション領域は、未使用の場合には「0」で埋められると仕様で決まっていてもよい。
この場合、例えば、信号線1023が信号線1021から分岐する点が例えば上記(e2)のように実現されていれば、上記のような必要に応じたダミーの値の出力が実現される。
あるいは、ヘッダ長を示すフィールドを含む形式のパケットが用いられ、例えば上記(e3)で説明したように、信号線1023が信号線1021から分岐する点に不図示の回路素子があってもよい。当該回路素子は、ヘッダ長を示すフィールドの値に応じて、入力ポート201cから出力されたパケットに複製データVALIDフィールドや複製パケット宛先IDフィールドがあるか否かを判断し、必要に応じてダミーのデータを出力してもよい。
また、分岐した信号線1022は、上記のとおり複製データパケット修正部1007に接続するだけでなく、さらに信号線1028と信号線1029へと分岐し、それぞれヘッダ復元部1008とデータパケット生成部1009へと接続している。信号線1022を介して出力されるパケットのうち、ヘッダが信号線1028を介してヘッダ復元部1008へと出力され、データペイロードがデータパケット生成部1009へと出力される。
以上、複製チェック部1001とデータパケット復元部1002とセレクタ1003とルーティング部713の構成の概要を説明するとともに、図23において入力ポート201cと直接接続されている各コンポーネントへの入力について説明した。続いて、図23に示した各コンポーネントの動作について、図24を参照して詳しく説明する。
図24は、第1実施形態における複製チェック部、データパケット復元部、およびセレクタの動作を説明する図である。
まず、メモリアクセス要求パケットや、データ転送要求パケットなどの要求パケット(すなわち、データペイロードを持たないパケット)が入力ポート201cに入力された場合の動作を説明する。要求パケットを処理する動作の流れは、図24において実線矢印により示される。
ステップS1001rにおいて、入力ポート201cが要求パケットを出力する。
するとステップS1002rにおいて、要求パケットのヘッダ内の宛先IDフィールドがルーティングテーブル部711cに出力されるとともに、ヘッダ内のパケットタイプフィールドがパケットタイプチェック部1004に出力される。また、上記のように複製データVALIDフィールドと複製パケット宛先IDフィールドのダミーの値が出力されてもよい。
ここで、パケットタイプチェック部1004は、図示したように、入力されたパケットタイプの値がデータパケットを示す値であるか否かを判断する判断部1101を備えている。ステップS1003rにおいて判断部1101は、入力されたパケットタイプの値をエンコードすることで、入力されたパケットがデータパケットであると判断する。
するとステップS1004rで判断部1101は、セレクタ1003に対し、複製データパケット修正部1007からの入力ではなく、図23の信号線1022を介して入力ポート201cから入力されたパケットをそのまま出力するよう命令する選択信号を出力する。選択信号にしたがい、セレクタ1003は入力ポート201cから入力されたパケットをルーティング部713の分岐部306に出力する。
また、入力されたパケットタイプの値が要求パケットを示すので、ステップS1004rで判断部1101はさらに、複製チェック部1005へ出力するVALID信号をネゲートする。
また、ステップS1005rでルーティングテーブル部711cは、図23の信号線1027を介して入力された宛先IDに基づいて、入力されたパケットのルーティング先を決定し、出力ポート情報をルーティング部713の分岐部306に出力する。ステップS1005rは、ステップS1003r〜S1004rと並列に実行されてもよい。
そして、分岐部306は、出力ポート情報に基づいて、入力された要求パケットをOR回路1011、1012、または1013に出力する。
OR回路1011、1012、または1013を介してのパケットのルーティングの詳細は図26とともに後述するが、概略を述べると次のとおりである。例えば、出力先が図16の出力ポート202cである要求パケットは、ステップS1005rで決定された出力ポート情報にしたがい、出力ポート202cの前段の出力バッファ制御部712caと接続されたOR回路1011へと出力される。このとき、後述するように分岐部1010からOR回路1011へは論理値0で埋められたデータが出力される。したがって、分岐部306が出力した要求パケットがOR回路1011を介して出力バッファ制御部712caへと出力される。
また、宛先IDから出力ポート情報を取得するためのルーティングテーブル部711cの内部の構成は、図6のルーティングテーブル部204cと類似である。ルーティングテーブル部711cの構成の詳細については、図25とともに後述する。
以上のとおり、入力ポート201cから要求パケットが出力された場合は、データパケット復元部1002を使わずにルーティングが行われる。
続いて、ライトバックデータパケットや転送データパケットなどのデータパケット(すなわち、データペイロードを持つパケット)が入力ポート201cに入力された場合の動作を説明する。データパケットを処理する動作の流れは、図24において1点鎖線矢印により示される。
ステップS1001dにおいて、入力ポート201cがデータパケットを出力する。
するとステップS1002dにおいて、データパケットのヘッダ内の宛先IDフィールドと複製パケット宛先IDフィールドがルーティングテーブル部711cに出力される。また、ヘッダ内のパケットタイプフィールドがパケットタイプチェック部1004に出力される。さらに、複製データVALIDフィールドが複製チェック部1005に出力される。なお、上記のように、入力されたデータパケットが複製データVALIDフィールドや複製パケット宛先IDフィールドを持たない場合は、ダミーの値が使われてもよい。
そして、ステップS1003dではパケットタイプチェック部1004内の判断部1101が、入力されたパケットがデータパケットであると判断する。
するとステップS1004dで判断部1101は、入力されたパケットがデータパケットであることを示すVALID信号を複製チェック部1005に出力(アサート)する。第1実施形態では、VALID信号は正論理の信号なので、ステップS1004dでは論理値1が複製チェック部1005に出力される。なお、データパケットが入力された場合のステップS1004dでは、判断部1101は、セレクタ1003への選択信号を無効な値に設定する。それにより、判断部1101は、後述する比較器1006からの選択信号のみにしたがって動作するよう、セレクタ1003に命令する。
そして、ステップS1005dで複製チェック部1005は、「入力されたデータパケットからの復元が必要か否かを判断するための比較を、比較器1006が行う必要があるか否か」を判断する。ここで、ステップS1005dの判断について説明するため、データパケットが入力される場合を次の(j1)〜(j3)に場合分けする。
(j1)入力されたパケットが有効な複製情報を持たないパケットである場合。
例えば、SC103c内の出力バッファ制御部702cxにおいて、図20の処理の後、かつ、図21と同様の共有型・転送データパケット603が入力される前に、ポート間アービタ部507xから出力許可が出力されたとする。すると、図22のような複製情報607の追加が行われないので、XB102内の入力ポート201cに入力されたデータパケットは、有効な複製情報を持たない。
(j2)入力されたパケットが有効な複製情報を持ち、かつ、宛先IDフィールドに対応する出力ポートと、複製宛先IDフィールドに対応する出力ポートが等しい場合。
例えば、CPU104eを宛先とする共有型・転送データパケットとSC103eを宛先とするライトバックデータパケットから、図20〜図22と類似の処理により、複製情報を持ったデータパケットが生成されることがある。こうして生成されたパケットが入力ポート201cに入力された場合、宛先IDフィールドに対応する出力ポートと複製宛先IDフィールドに対応する出力ポートは、ともに図16の出力ポート202eであり、等しい。
(j3)入力されたパケットが有効な複製情報を持ち、かつ、宛先IDフィールドに対応する出力ポートと、複製宛先IDフィールドに対応する出力ポートが異なる場合。
例えば、図20〜図22の処理により生成された、図22の複製情報を持ったライトバックデータパケット608が、入力ポート201cに入力された場合が、(j3)には含まれる。
第1実施形態では、上記(j1)と(j2)の場合には、入力されたパケットそのものをルーティング部713がルーティングする。なぜなら、(j1)の場合はそもそも復元の必要がないためである。また、(j2)の場合は、より後の時点で復元する方が、XB102の内部バスや、XB102とSCとの間のバス(上記の例ではSC103eとの間のバス108e)の占有時間を短縮することができるためである。
逆に、(j3)の場合には、入力されたパケットからデータパケット復元部1002が2つのパケットを復元し、復元された2つのパケットをルーティング部713がルーティングする。つまり、(j3)の場合にのみ復元が必要である。
ここで、入力されたパケットの複製VALIDフィールドの値が「無効」を示す場合は、上記(j1)に相当し、そもそもパケットの復元とは無関係である。よって、比較器1006による比較を行うまでもなく、復元は不要であると直ちに判明する。
しかし、入力されたパケットの複製VALIDフィールドの値が「有効」を示す場合は、上記(j2)と(j3)のいずれであるのかによって、復元の要否が異なる。そして、上記(j2)と(j3)を弁別するには、宛先IDフィールドに対応する出力ポートと、複製宛先IDフィールドに対応する出力ポートを比較する必要がある。つまり、入力されたパケットの復元が必要か否かを判断するためには、比較器1006による比較が必要である。
比較器1006による比較が必要であるか否かを決定するため、複製チェック部1005は、図24に示すようにAND回路1102を備えている。AND回路1102への入力は、図23の信号線1026を介して入力される複製VALIDフィールドの値と、パケットタイプチェック部1004の判断部1101が出力するVALID信号である。なお、要求パケットが入力された場合は、比較器1006による比較は当然不要である。
ステップS1005dにおいて、AND回路1102の出力は、上記(j1)の場合に論理値0となり、上記(j2)または(j3)の場合に論理値1となる。AND回路1102の出力は比較器1006に入力される。
すなわち、比較器1006による比較が必要なとき、複製チェック部1005のAND回路1102は、正論理のVALID信号を比較器1006に出力する。
また、ステップS1006dに示すように、ルーティングテーブル部711cは、ステップS1002dで入力された宛先IDフィールドと複製宛先IDフィールドの値に基づいて、出力ポート情報と複製データパケット出力ポート情報を出力する。
なお、「出力ポート情報」とは、比較例と同様に、宛先IDフィールドで指定された宛先に対応する出力ポートを識別する情報である。また、「複製データパケット出力ポート情報」とは、複製パケット宛先IDフィールドで指定された宛先に対応する出力ポートを識別する情報である。
ここで、ルーティングテーブル部711cの詳細な構成を示した図25を参照して、ステップS1006dにおけるルーティングテーブル部711cの動作を説明する。
図25は、第1実施形態におけるルーティングテーブル部711cの構成図である。ルーティングテーブル部711cは、図16および図23に示すように、SC103cから他のSCへのルーティングを管理するためのコンポーネントである。
ルーティングテーブル部711cは、比較例において図6に示したルーティングテーブル部204cと同様のFF307a〜307lと、比較器308a〜308lと、OR回路309a〜309cと、セレクタ310と、FF311a〜311cを備える。比較例と同様に、FF307a〜307lはそれぞれパケットの宛先となりうるCPU104aなどのコンポーネントのIDを格納しており、FF311a〜311cは出力ポート202a、202e、202gを識別する情報を格納している。
したがって、ルーティングテーブル部711cは、入力された宛先IDフィールドの値に応じて、比較例のルーティングテーブル部204cと同様に、セレクタ310から出力ポート情報を出力する。
また、ルーティングテーブル部711cはさらに、12個の比較器1201a〜1201lと、3個のOR回路1202a〜1202cと、セレクタ1203を備える。
12個の比較器1201a〜1201lには、12組のFF307a〜307lが保持する値がそれぞれ入力される。また、12個の比較器1201a〜1201lの各々には、複製宛先IDフィールドの値が入力される。比較器1201a〜1201lは、それぞれ2つの入力を比較し、2つの入力が一致すれば論理値1を出力し、2つの入力が一致しなければ論理値0を出力する。
OR回路1202aは、比較器1201a〜1201dの出力の論理和をセレクタ1203に出力する。OR回路1202bは、比較器1201e〜1201hの出力の論理和をセレクタ1203に出力する。OR回路1202cは、比較器1201i〜1201lの出力の論理和をセレクタ1203に出力する。
したがって、セレクタ1203には、最大1ビットが論理値1となる合計3ビットの制御信号が入力される。セレクタ1203は、論理値1のビットの位置に応じて、FF311a〜311cが保持する出力ポート情報のいずれかを選択し、複製データパケット出力ポート情報として出力する。
すなわち、セレクタ1203は、OR回路1202aの出力が論理値1のとき、FF311aが保持する値を選択する。また、セレクタ1203は、OR回路1202bの出力が論理値1のとき、FF311bが保持する値を選択し、OR回路1202cの出力が論理値1のとき、FF311cが保持する値を選択する。
このように、図25のルーティングテーブル部711cは、比較例と同様に宛先IDから出力ポート情報を取得する回路と、複製宛先IDから複製データパケット出力ポート情報を取得する回路とを有し、後者の構成は前者と同様である。また、前者と後者の回路は、宛先のコンポーネントを識別する情報を保持するFF307aなどの記憶素子と、ポートを識別する情報を保持するFF311aなどの記憶素子を共有している。図15のルーティングテーブル部701xも図25と同様に構成されている。
ここで図24の説明に戻ると、ステップS1006dでルーティングテーブル部711cは、出力ポート情報を比較器1006と分岐部306に出力するとともに、複製データパケット出力ポート情報を比較器1006と分岐部1010に出力する。なお、ステップS1006dは、ステップS1004d〜S1005dと並列に実行されてもよい。
続いて、ステップS1007dで比較器1006は、複製チェック部1005からのVALID信号、ならびにルーティングテーブル部711cからの出力ポート情報および複製データパケット出力ポート情報に基づいて、比較操作を実行する。比較器1006は、比較結果を選択信号としてセレクタ1003と分岐部1010に出力する。
つまり、複製チェック部1005からVALID信号がアサートされており、かつ、出力ポート情報と複製データパケット出力ポート情報が一致しない場合、比較器1006は、データパケット復元部1002からの出力を選択するよう指示する選択信号を出力する。それ以外の場合、比較器1006は、データパケット復元部1002からの出力を選択しないよう指示する選択信号を出力する。
換言すれば、比較器1006は、上記(j3)の場合、データパケット復元部1002からの出力を選択するよう指示する選択信号を出力する。また、比較器1006は、上記(j1)または(j2)の場合、データパケット復元部1002からの出力を選択しないよう指示する選択信号を出力する。
なお、データパケットが入力された場合、パケットタイプチェック部1004からセレクタ1003への出力は上記のとおり無効な値なのでセレクタ1003では無視される。よって、セレクタ1003は比較器1006からの選択信号のみにしたがって、入力ポート201cから図23の信号線1022を介して入力されたパケットまたはデータパケット復元部1002内の複製データパケット修正部1007から入力されたパケットを選択する。そして、セレクタ1003は、選択したパケットを分岐部306に出力する。
また、分岐部1010は、データパケット復元部1002からの出力を選択しないよう指示された場合、すべてのビットを論理値0としたデータを出力する。
続いて、上記ステップS1002d〜S1007dと並行してデータパケット復元部1002で実行されるステップS1008d〜S1010dについて説明する。なお、以下で説明するステップS1008d〜S1010dは、上記(j3)の場合の動作である。上記(j3)の場合以外では、下記の理由から、データパケット復元部1002の動作は後段のセレクタ1003およびルーティング部713の動作に影響しない。
要求パケットが入力された場合または上記(j1)の場合には、セレクタ1003でデータパケット復元部1002からの出力が選択されることがない。そして、データパケット復元部1002からの出力を選択しないよう指示する選択信号を比較器1006が分岐部1010に出力している。
また、上記(j2)の場合は、下記と同様にデータパケット復元部1002での復元が行われる。しかし、上記のとおり分岐部1010の出力の各ビットは論理値0であるため、データパケット復元部1002からの出力は、分岐部1010を介してOR回路1011、1012、あるいは1013へ伝達されることはない。
よって、以下では(j3)の場合に注目してデータパケット復元部1002の動作を説明する。
上記(j3)の場合、ステップS1001dで入力ポート201cから出力されるのは、複製情報を持ったデータパケットである。そこで、ステップS1008dでは、複製データパケット修正部1007に、入力ポート201cから出力されたデータパケットが出力される。また、ヘッダ復元部1008には、入力ポート201cから出力されたデータパケットのヘッダが出力される。そして、データパケット生成部1009には、入力ポート201cから出力されたデータパケットのデータペイロードが出力される。
すると、ステップS1009dで複製データパケット修正部1007は、入力されたパケットのヘッダから複製情報を削除したパケットを生成してセレクタ1003に出力する。つまり、複製データパケット修正部1007は、図17のヘッダマージ部804でマージされる前の元の2つのパケットのうち、先に出力バッファ制御部(例えば702cx)のデータパケット保存部410に保存されていた方のパケットを復元する。
また、ステップS1010dでヘッダ復元部1008は、入力されたヘッダから、復元しようとする元のデータパケットのヘッダを生成して復元する。つまり、ヘッダ復元部1008は、元の2つのパケットのうち、後から出力バッファ制御部(例えば702cx)に入力されて破棄された方のパケットのヘッダを復元する。ヘッダ復元部1008は、復元したヘッダをデータパケット生成部1009に出力する。なお、ステップS1009dとS1010dは並列に実行されてもよい。
そして、ステップS1011dでデータパケット生成部1009は、ヘッダ復元部1008から入力されたヘッダと、図23の信号線1029を介して入力されたデータペイロードとをマージする(すなわち連結する)ことによりパケットを生成する。すなわち、データパケット生成部1009は、元の2つのパケットのうち、後から出力バッファ制御部(例えば702cx)に入力されて破棄された方のパケットを復元する。データパケット生成部1009は、復元したパケットをルーティング部713の分岐部1010に出力する。
以上から、上記(j3)の場合は、複製データパケット修正部1007からの出力がセレクタ1003と分岐部306を介してルーティングされ、データパケット生成部1009からの出力が分岐部1010を介してルーティングされる。
また、上記(j3)の場合には、分岐部306におけるルーティング先と分岐部1010におけるルーティング先が異なる。よって、復元された2つのパケットがともに同じ1つのOR回路(1011〜1013のいずれか)に入力されることはありえない。そのため、第1実施形態では、セレクタではなくより構造が単純なOR回路を用いてルーティング部713を構成することが可能となっている。
続いて、図20〜図22の処理によりSC103c内の出力バッファ制御部702cxから出力された、複製情報を持ったライトバックデータパケット608が、XB102の入力ポート201cに入力されたという具体例について、図26を参照して説明する。
図26は、第1実施形態において複製情報を持ったライトバックデータパケット608から元の2つのパケットを復元して2つのパケットをルーティングする動作の具体例を説明する図である。
図22の処理によって生成された、複製情報を持ったライトバックデータパケット608が、ステップS1101でXB102の入力ポート201cから出力される。
すると、複製情報を持ったライトバックデータパケット608の全体が複製データパケット修正部1007へ出力される。また、複製情報を持ったライトバックデータパケット608のヘッダのみがヘッダ復元部1008へ出力される。そして、複製情報を持ったライトバックデータパケット608のデータペイロードがデータパケット生成部1009へ出力される。
また、ステップS1102では、複製情報を持ったライトバックデータパケット608のヘッダ内のいくつかのフィールドの値が下記のように出力される。
・宛先IDフィールドの値と複製パケット宛先IDフィールドの値がルーティングテーブル部711cに出力される。図22に示すとおり、宛先IDフィールドはSC103eのIDを示し、複製パケット宛先IDフィールドはCPU104aのIDを示す。
・パケットタイプフィールドの値がパケットタイプチェック部1004に出力される。図22に示すとおり、パケットタイプフィールドは、ライトバックデータパケットであることを示す。
・複製データVALIDフィールドの値が複製チェック部1005に出力される。図22に示すとおり、複製データVALIDフィールドの値は、「有効」を示す論理値1である。
すると、ステップS1103でパケットタイプチェック部1004は、入力されたパケットタイプをエンコードし、その結果、ステップS1101で入力された複製情報を持ったライトバックデータパケット608がデータパケットであると判断する。よって、パケットタイプチェック部1004は、複製チェック部1005にVALID信号を出力する。
すると、ステップS1104で複製チェック部1005は、パケットタイプチェック部1004から入力されたVALID信号と、ステップS1102で入力された複製データVALIDの論理積を求め、比較器1006に出力する。換言すれば、この例では求めた論理積の値は論理値1であるから、複製チェック部1005は比較器1006にVALID信号を出力(アサート)する。
また、ステップS1105に示すようにルーティングテーブル部711cは、入力された宛先ID(すなわちSC103eのID)から、出力ポート202eを識別する情報を出力ポート情報として取得し、出力ポート情報を分岐部306に出力する。さらに、ルーティングテーブル部711cは、入力された複製パケット宛先ID(すなわちCPU104aのID)から、出力ポート202aを識別する情報を複製データパケット出力ポート情報として取得し、分岐部1010に出力する。
また、ステップS1106で比較器1006は、ルーティングテーブル部711cから出力された出力ポート情報と複製データパケット出力ポート情報を比較する。その結果、出力ポート情報と複製データパケット出力ポート情報が不一致であるため、比較器1006は、データパケット復元部1002から出力されるパケットを選択するようにセレクタ1003と分岐部1010に選択信号を出力する。
また、ステップS1107で複製データパケット修正部1007は、図22に示した複製情報を持ったライトバックデータパケット608のヘッダから、追加された複製情報607を削除することにより、図20のライトバックデータパケット601を復元する。以下では元のパケットと復元されたパケットを区別するため、復元後のライトバックデータパケットの参照符号を「609」とする。
複製データパケット修正部1007は、復元したライトバックデータパケット609をセレクタ1003に出力する。
ステップS1107の詳細を図27に示す。すなわち、図27は、第1実施形態における複製データパケット修正部1007の動作の具体例を説明する図である。
図22に示したように、複製情報を持ったライトバックデータパケット608のヘッダの所定の位置(具体的には、ヘッダ末尾の予約フィールドの直前の位置)には、複製情報607が含まれる。複製情報607は、具体的には、複製データVALID、複製パケットタイプ、複製パケット宛先ID、複製データステートという4個のフィールドを有する。ステップS1107において複製データパケット修正部1007は、複製情報を持ったライトバックデータパケット608からヘッダ内の複製情報607を削除することによってライトバックデータパケット609を生成する。
ここで図26の説明に戻ると、ステップS1108でヘッダ復元部1008は、入力されたヘッダ内から、図21に示した元の共有型・転送データパケット603のヘッダを生成し、データパケット生成部1009に生成したヘッダを出力する。
ステップS1108の詳細を図28に示す。図28は、第1実施形態におけるヘッダ復元部1008の動作の具体例を説明する図である。
図28に示すように、ヘッダ復元部1008は、複製情報を持ったライトバックデータパケット608のヘッダ内のフィールドの一部を取り出して適切に並べ替えることで、図21の元の共有型・転送データパケット603のヘッダを復元する。
具体的には、ヘッダ復元部1008は、複製情報を持ったライトバックデータパケット608のヘッダから、下記の各フィールドを取り出し、下記のリスト順に並べることで、元の共有型・転送データパケット603のヘッダを生成し、復元する。なお、下記リストにおいて括弧内に値を示した。
・複製パケットタイプ(転送データパケットであることを示す値)
・複製パケット宛先ID(CPU104aのID)
・要求元ID(CPU104aのID)
・ReqID(5)
・複製データステート(「共有型」を示す値)
・アドレスその他の不図示のフィールド
・末尾の予約フィールド
ここで、複製情報を持ったライトバックデータパケット608の複製パケットタイプ、複製パケット宛先ID、および複製データステートは、元の共有型・転送データパケット603のパケットタイプ、宛先ID、およびデータステートを複製したものである。
また、図20〜図22に示したように、元のライトバックデータパケット601と共有型・転送データパケット603は、同じ1つの転送データ要求パケットに起因してCPU104cにより出力される。したがって、両者において必然的に、要求元ID、ReqID、およびアドレスという3個のフィールドの値は等しい。また、第1実施形態では、その他の予約フィールドや特に図示しないフィールドの値も、ライトバックデータパケット601と共有型・転送データパケット603で共通であるとする。
したがって、ヘッダ復元部1008は、上記のように複製情報を持ったライトバックデータパケット608のヘッダ内のフィールドの一部を取り出して必要に応じて並べ替えることで、共有型・転送データパケット603のヘッダを復元することができる。ヘッダ復元部1008は、復元したヘッダ611をデータパケット生成部1009に出力する。
ここで図26の説明に戻ると、ステップS1109でデータパケット生成部1009は、ヘッダ復元部1008から出力された、復元したヘッダ611と、入力ポート201cから出力されたデータペイロードとをマージする。それにより、データパケット生成部1009は、元の共有型・転送データパケット603を復元する。以下では元のパケットと復元されたパケットを区別するため、復元後の共有型・転送データパケットの参照符号を「613」とする。
ステップS1109の詳細を図29に示す。図29は、第1実施形態におけるデータパケット生成部1009の動作の具体例を説明する図である。
図29に示すように、データパケット生成部1009には、復元したヘッダ611とデータペイロード612が入力される。データパケット生成部1009は、復元したヘッダ611の後にデータペイロード612を連結することで共有型・転送データパケット613を生成し、共有型・転送データパケット613を分岐部1010に出力する。
ここで図26の説明に戻る。ステップS1110でセレクタ1003は、ステップS1006で入力された選択信号にしたがい、ステップS1107でデータパケット復元部1002の複製データパケット修正部1007から入力されたライトバックデータパケット609を選択する。セレクタ1003は、選択したライトバックデータパケット609をルーティング部713の分岐部306に出力する。
すると、ステップS1111で分岐部306は、ステップS1105で入力された出力ポート情報にしたがい、入力されたライトバックデータパケット609を、OR回路1012に出力する。
上記のとおり、複製情報を持ったライトバックデータパケット608の宛先IDであるSC103eのIDから得られた出力ポート情報は、SC103eと接続された出力ポート202eを識別する情報である。したがって、分岐部306は、入力されたライトバックデータパケット609を、出力ポート202eの前段に設けられた出力バッファ制御部712ceと接続されたOR回路1012に出力する。
なお、分岐部306は、ルーティングテーブル部711cからの出力ポート情報により選択しなかったOR回路へは、パケットのビット数分の論理値0を出力する。また、分岐部1010は、データパケット復元部1002からの出力を選択するよう比較器1006から命令された場合、複製データパケット出力ポート情報により選択しなかったOR回路へは、パケットのビット数分の論理値0を出力する。そして、上記のとおり、(j3)の場合、出力ポート情報と複製データパケット出力ポート情報は排他的である。
したがって、OR回路1012は、分岐部306から出力されたライトバックデータパケット609の各ビットと論理値0との論理和を求めることにより、実質的にはライトバックデータパケット609を出力バッファ制御部712ceへルーティングする。
その結果、復元されたライトバックデータパケット609が出力バッファ制御部712ceを介して出力ポート202eへとさらにルーティングされ、SC103eへ出力される。
また、ステップS1112で分岐部1010は、ステップS1105で入力された複製データパケット出力ポート情報にしたがい、入力された共有型・転送データパケット613を、OR回路1011に出力する。
上記のとおり、複製情報を持ったライトバックデータパケット608の複製パケット宛先IDは、CPU104aのIDである。よって、CPU104aのIDから得られた複製データパケット出力ポート情報は、CPU104aと同じノード101aのSC103aと接続された、出力ポート202aを識別する情報である。
したがって、分岐部1010は、入力された共有型・転送データパケット613を、出力ポート202aの前段に設けられた出力バッファ制御部712caと接続されたOR回路1011へ出力する。
ここで、上記のとおり分岐部306は、選択しなかったOR回路1011には論理値0で埋めたデータを出力している。よって、OR回路1011は、分岐部1010から出力された共有型・転送データパケット613の各ビットと論理値0との論理和を求めることにより、実質的には共有型・転送データパケット613を出力バッファ制御部712caへルーティングする。
その結果、復元された共有型・転送データパケット613が出力バッファ制御部712caを介して出力ポート202aへとさらにルーティングされ、SC103aへ出力される。
以上、図26〜図29を参照して、複製情報を持ったライトバックデータパケット608からライトバックデータパケット609と共有型・転送データパケット613を復元してそれぞれルーティングする処理について説明した。
なお、図26においては、いくつかのステップについての処理が並列に実行されてもよい。例えば、複製チェック部1001とルーティングテーブル部711cにおける処理は、データパケット復元部1002における処理と並列に実行されてもよい。また、ステップS1111とS1112のルーティングは並列に実行されてもよい。
また、図15に示したように、各SC103a〜103gでXB102と接続された入力ポート501xからルーティング部703へ至る経路上にも、上記と同様の複製チェック部1001、データパケット復元部1002およびセレクタ1003が設けられている。また、例えば図15のSC103cルーティング部703は、比較例と比べて、入力ポート501xに対応した部分が異なる。
具体的には、図23と同様に、ルーティング部703において、比較例と同様の分岐部306と各出力バッファ制御部509xc、509xd、509xi、および509xsとの間に、それぞれOR回路が設けられる。つまり、比較例と比べ、新たに4つのOR回路が追加されている。
また、ルーティング部703は、図23の分岐部1010と類似の新たな分岐部を有する。この新たな分岐部は、入力ポート501xに対応して設けられたデータパケット復元部1002から復元されたパケットを受け取るとともに、複製チェック部1001およびルーティングテーブル部701xから制御信号を受け取る。また、この新たな分岐部は、図23と同様に、上記4つのOR回路とそれぞれ接続されている。
しかし、ルーティング部703は、入力ポート501c、501d、および501i、ならびにSC内制御回路504に対応した部分は、比較例と同様である。
以上、図14〜図29を参照して第1実施形態について説明した。
なお、CPU104cなどの演算処理装置とXB102などのデータ転送装置の間でのデータ(例えばパケット形式のデータ)の転送を制御するSC103cなどの制御装置に注目して第1実施形態を概観すれば下記のとおりである。
すなわち、上記制御装置は、演算処理装置から出力された第1のパケットを保存するデータパケット保存部410などの保存手段を有する。第1実施形態では、保存手段としてのデータパケット保存部410に必要な容量が、上記のとおり比較例の約2分の1で済む。
また、上記制御装置は、第1の判断手段を実現するコンポーネントとして、例えば図17〜図18Bに示す管理テーブル部801、比較部802、およびライトポインタ制御部803を備える。第1の判断手段は、第1のパケットのヘッダと、第1のパケットより後に演算処理装置から受け取った第2のパケットのヘッダを比較する。パケットはデータの具体例であり、ヘッダはデータの制御情報の具体例である。上記の比較により、第1の判断手段は、第1のパケットと第2のパケットが同じデータペイロードを有する第1の場合であるか否かを判断する。データペイロードはデータ本体部の具体例である。
また、管理テーブル部801、比較部802、およびライトポインタ制御部803は、協働して次のような管理手段としても機能する。すなわち、管理手段は、第1の場合は、第2のパケットのヘッダの一部を第1のパケットと関連づけて複製情報として保存する。また、管理手段は、第1の場合に第2のパケットを破棄してもよい。また、管理手段は、第1の場合以外である第2の場合は、保存手段としてのデータパケット保存部410に第2のパケットを保存させる。
そして、保存手段に保存されたパケットのデータ転送装置(例えばXB102)への出力を制御する制御手段として、第1実施形態では、例えば以下のコンポーネントが協働している。すなわち、XB102へのパケットの出力を制御する制御手段として、少なくとも図17のポート間アービタ部507x、ポート間セレクタ508x、制御部400、およびパケット間セレクタ430が協働している。また、第1実施形態ではさらにセレクタ805も制御手段の一部として機能している。データ転送装置としてのXB102へのデータ(例えばパケット)の出力は、データ転送装置へのデータの出力を許可する出力許可に応じて制御されてもよい。
なお、第1実施形態では、ヘッダマージ部804が、図22の複製情報を持ったライトバックデータパケット608のような第3のパケットを上記第1の場合に生成する生成手段としても機能する。
そして、上記制御手段として機能する制御部400内の管理テーブル部801およびセレクタ805は、上記第1の場合には生成手段としてのヘッダマージ部804が生成した第3のパケットをデータ転送装置に出力するよう制御する。また、上記制御手段としての管理テーブル部801およびセレクタ805は、上記第2の場合には保存手段としてのデータパケット保存部410が保存する上記第1と第2のパケットの双方をデータ転送装置に出力するよう制御する。
また、第1実施形態では、第1の判断手段としての管理テーブル部801、比較部802、およびライトポインタ制御部803では、要求元IDとReqIDに基づく判断が行われる。要求元IDは、パケットの出力の起因となる要求を出力した要求元装置を識別する要求元識別情報の一例である。また、ReqIDは、要求元識別情報により識別される1つの要求元装置における複数の要求を識別する要求識別情報の一例である。
また、上記管理手段の一部として機能する管理テーブル部801は、例えば図18Aのエントリ901−0〜901−Nにより実現される管理記憶部を備える。そして、上記第1の場合には、上記第1のパケットが保存されたデータパケット保存部410上のアドレスと関連づけられた管理記憶部のエントリに複製情報を保存することにより、管理手段としての管理テーブル部801は、複製情報を第1のパケットと関連づける。
また、SC103cなどの制御装置は、図15に示すように、さらに第2の判断手段としての複製チェック部1001と、復元手段としてのデータパケット復元部1002を備えてもよい。
また、XB102などのデータ転送装置に注目して第1実施形態を概観すれば下記のとおりである。
すなわち、XB102などのデータ転送装置は、例えばSC103a〜103gなどの複数の装置と接続され、それら複数の装置間でのデータの転送を行う。
データ転送装置は、前記複数の装置のうちの1つから出力されたパケットを前記複数の装置のうちの他の1つへ送信する(すなわちルーティングする)ための送信手段として、図16や図23に示したルーティング部713を備える。
また、図16に示したXB102内の各出力バッファ制御部には、上記のSCに注目した観点で説明したのと同様の意味で、保存手段、判断手段、管理手段、および制御手段として機能する各コンポーネントが含まれる。さらに、第1実施形態では、生成手段としてのヘッダマージ部804も、XB102内の各出力バッファ制御部が備えている。
また、図16と図23に示すように、XB102は、入力されたパケットが同じデータペイロードを有する2つのパケットから生成された複製データパケットであるか否かを判断する判断手段としての複製チェック部1001を備える。また、XB102は、復元手段としてのデータパケット復元部1002も備える。そして、送信手段としてのルーティング部713は、複製チェック部1001の判断に基づいてデータの送信(具体的にはパケットのルーティング)を行う。
具体的には、第1実施形態では、判断手段としての複製チェック部1001は、入力されたパケットが複製データパケットであるか否かだけではなく、元の2つのパケットは同じ装置に送信するものであるか否かについても判断する。
そして、元の2つのパケットは同じ装置に送信する(つまりルーティングする)ものであると複製チェック部1001が判断した場合、送信手段としてのルーティング部713は入力された複製データパケットそのものを送信する。逆に、元の2つのパケットは同じ装置に送信するものではないと複製チェック部1001が判断した場合は、送信手段としてのルーティング部713は、復元された元の2つのパケットをそれぞれの送信先に送信する。
以上、制御装置としてのSC103a〜103gに注目した観点と、データ転送装置としてのXB102に注目した観点から第1実施形態を概観した。
続いて、図30を参照して、第2実施形態について説明する。第2実施形態も第1実施形態と同様に、例えば図1のように構成されたサーバシステム100に適用される。
図30は、第2実施形態におけるCPU104cの構成図である。説明の簡略化のため、第2実施形態では、他のCPU104a、104b、104d〜104hも図30と同様に構成されているものとする。
第2実施形態におけるCPU104cはマルチコアCPUであり、具体的にはデュアルコアCPUである。すなわち、演算処理装置であるCPU104cは、演算処理部であるCPUコア1301aと1301bを含む。CPUコア1301aと1301bはそれぞれ、不図示の命令フェッチ制御部、分岐予測部、命令デコード部、ALU(Arithmetic Logic Unit)などの命令実行部、およびレジスタなどを備える。アーキテクチャによっては、CPUコア1301aと1301bは、さらにアウトオブオーダ実行のためのリザベーションステーションなどを備えていてもよい。
CPUコア1301aと1301bはそれぞれ、不図示のキャッシュメモリを備える。キャッシュメモリは階層化されていてもよい。例えば、L1(レベル1)キャッシュが各CPUコア1301aと1301bに個別に設けられ、L2(レベル2)キャッシュが両CPUコア1301aと1301bで共有されていてもよい。L2キャッシュを各CPUコア1301aと1301bに個別に設ける構成も可能である。なお、データキャッシュと命令キャッシュが分かれていてもよい。
また、CPU104cは、同じノード101c内のSC103cとのインタフェイスとして、入力ポート1302と出力ポート1303を備える。入力ポート1302と出力ポート1303は、CPU104cとSC103cの動作周波数の違いに応じた「周波数乗り換え」と呼ばれる周波数の変換などを行ってもよい。
第1実施形態では、パケットの宛先IDや要求元IDとしてCPU104cのIDが使われるが、第2実施形態では、CPU104cのIDではなく、CPUコア1301aまたはCPUコア1301bのIDが宛先IDや要求元IDとして使われる。したがって、CPU104cは、SC103cから入力ポート1302を介して入力されるパケットを、宛先IDに応じてCPUコア1301aまたは1301bに振り分けるための回路を有する。
ところで、第1実施形態では、同じデータペイロードを有するデータパケットの組として、SCの1つを宛先とするライトバックデータパケットと、CPUの1つを宛先とする共有型・転送データパケットを想定している。サーバシステム100の仕様により、それ以外の組み合わせで、同じデータペイロードを有するデータパケットの組が存在する場合にも第1実施形態は適用可能である。同様に、第2実施形態は、2つの異なるCPUコアを宛先とし、互いに同じデータペイロードを有するデータパケットの組が存在する場合にも適用可能である。
なぜなら、第2実施形態では、上記のパケットを振り分けるための回路が、以下の各コンポーネントを含むからである。
・図23と同様の複製チェック部1001、データパケット復元部1002、およびセレクタ1003
・図25のルーティングテーブル部711cと類似の構成を有し、出力ポートの代わりに出力先のCPUコア(1301aまたは1301b)を指定する情報を、宛先IDと複製宛先IDにそれぞれ対応して取得する情報ルーティングテーブル部1304
・図23の分岐部1010と同様の分岐部1305a
・図23の分岐部306と同様の分岐部1305b
・図23のOR回路1011〜1013と同様のOR回路1306a〜1306b
したがって、入力ポート1302から入力されたパケットが複製情報を持っていなければ、宛先IDにしたがってCPUコア1301aまたは1301bに出力される。また、入力ポート1302から入力されたパケットが複製情報を持っていれば、元の2つのパケットが復元されて、それぞれCPUコア1301aと1301bに出力される。
また、CPU104cは、出力ポート1303の前段に、CPUコア1301a用の出力バッファ制御部1307aと、CPUコア1301b用の出力バッファ制御部1307bと、アービタ部1308と、コア間セレクタ1309とを備える。
出力バッファ制御部1307aは、CPUコア1301aから出力されたパケットを一時的に保存するバッファを含み、具体的には、第1実施形態の図17の出力バッファ制御部702cxと同様の構成を有する。出力バッファ制御部1307bも同様である。
また、アービタ部1308は、出力バッファ制御部1307aと1307bの間の調停を行う。アービタ部1308は、例えば第1実施形態における図15のポート間アービタ部507xや図16のポート間アービタ部205eと同様である。
コア間セレクタ1309は、アービタ部1308の調停の結果にしたがって、出力バッファ制御部1307aと1307bからの出力の一方を選択して出力ポート1303に出力する。コア間セレクタ1309は、例えば第1実施形態における図15のポート間セレクタ508xや図16のポート間セレクタ206eと同様である。
また、第2実施形態におけるXB102は、第1実施形態における図16のXB102と同様に構成されている。
そして、第2実施形態におけるSC103cは、下記の点において第1実施形態と異なる。すなわち、図30のCPU104cと接続されたSC103cは、図15における入力ポート501cとルーティング部703の間に、図23と同様の複製チェック部1001、データパケット復元部1002、およびセレクタ1003を備える。そして、CPU104cに対応するルーティングテーブル部506cは、ルーティングテーブル部701xと同様の構成のものに置き換えられる。
なお、CPU104c以外の他のCPUも図30と同様に構成されていてもよく、それに応じて各SC内のコンポーネントが適宜変形されてもよい。
上記のような第2実施形態によっても、サーバシステム100内でのデータの授受のために用いられるパケットを一時的に保存するためのバッファの容量を削減し、サーバシステム100内のバスの占有時間を短縮するという効果が得られる。
なお、本発明は上記の実施形態に限られるものではなく、例えば下記のように様々に変形して実施することが可能である。
第1および第2実施形態は、図1に示した構成のサーバシステム100への適用例である。しかし、サーバシステム100に含まれるノードの数や、各ノード内のCPUの数は任意である。
また、サーバシステム100はccNUMA(Cache Coherent Non-Uniform Memory Access)システムの一例だが、SMP(Symmetric Multiple Processor)システム(つまりUMA(Uniform Memory Access)システム)に、第1および第2実施形態と同様の構成を適用することもできる。
また、第1実施形態では、先に受け取ったデータパケットのヘッダの情報を、図18Aのエントリ901−0〜901−Nのいずれかの中の要求元IDフィールド915とReqIDフィールド916に記憶している。しかし、要求元IDフィールド915とReqIDフィールド916を省略し、代わりに、データパケット保存部410から図18Bの比較部802が要求元IDとReqIDを読み出す実施形態も可能である。ただし、RAMを用いてデータパケット保存部410を実現する場合は、FFを用いて管理テーブル部801内の各エントリ901−0〜901−Nに要求元IDフィールド915とReqIDフィールド916を設ける方が、処理速度の点で好ましい。
また、バスの占有時間が比較例と同等でも問題がない場合、例えば図17の出力バッファ制御部702cxを次のように変形してもよい。すなわち、出力バッファ制御部702cxは、ポート間アービタ部507xからの出力許可が得られたら、図17のヘッダマージ部804で複製情報を持ったデータパケットを生成して出力する代わりに、元の2つのパケットを連続して出力してもよい。
例えば、出力バッファ制御部702cxは、データパケット保存部410のリードポインタ値で指示される番地に保存されている第1のパケットをまず出力する。さらに、出力バッファ制御部702cxは、第1のパケットの番地に対応する管理テーブル部801内のエントリから複製情報を読み出す。そして、出力バッファ制御部702cxは、読み出した複製情報と第1のパケットから、第1のパケットと同じデータペイロードを持つために破棄された第2のパケットを復元し、出力する。
第2のパケットの復元は、例えば図23のデータパケット生成部1009と類似の新たなコンポーネントをヘッダマージ部804の代わりに設けることで実現することができる。また、例えば図17において管理テーブル部801は、セレクタ805に対して、データパケット保存部410から第1のパケットを出力するよう指示した後、必要な時間の経過後、上記新たなコンポーネントから第2のパケットを出力するよう指示を切り換える。
上記のような変形は、SC103c内の出力バッファ制御部702cxに限らず、XB102内の出力バッファ制御部においても採用することができる。
また、上記のように出力バッファ制御部からの出力時にパケットを復元する場合は、図15および図16において複製チェック部1001、データパケット復元部1002、およびセレクタ1003を設ける必要はない。また、図15のルーティング部703の代わりに比較例の図10のルーティング部505を用いることができ、図16のルーティング部713の代わりに比較例の図5のルーティング部203を用いることができる。
このように、出力バッファ制御部からの出力時にパケットを復元する変形例においても、出力バッファ制御部内に必要な記憶容量が比較例の約2分の1であり、そのため消費電力や半導体チップ上の実装面積を節約することができるという効果が得られる。
また、図30の第2実施形態では、デュアルコアCPUを例示したが、コアの数が3以上のマルチコアCPUに合わせて第2実施形態を変形した実施形態も可能であるし、シングルコアCPUが図30と同様に出力バッファ制御部を含む実施形態も可能である。
シングルコアCPUの内部に出力バッファ制御部がある場合、CPU内部には、図30のようなアービタ部1307およびコア間セレクタ1308は不要であり、CPU内の出力バッファ制御部は直接CPUの出力ポートと接続されてもよい。また、シングルコアCPUでは、入力ポート1302が直接コアと接続されていてもよい。
また、マルチコアCPUの場合でも、複数のコアを宛先として同じデータペイロードを有するパケットが出力されることがないならば、図30の第2実施形態を次のように変形してもよい。
すなわち、入力ポート1302が分岐部1305bと直接接続され、分岐部1305bがCPUコア1301aと1301bに直接接続されていてもよい。この場合、分岐部1305bは、1入力2出力のデマルチプレクサでもよい。
また、この場合、図30の複製チェック部1001、データパケット復元部1002、セレクタ1003、分岐部1305a、OR回路1306a、およびOR回路1306bは省略可能である。さらに、ルーティングテーブル部1304は、出力ポート情報の取得のみを行うものに置き換えることができる。