(57)【要約】【課題】データ転送装置が接続される計算機内のハードウェアリソース競合を抑制してスループットを向上させる。【解決手段】計算機に接続される第１インタフェースと、外部に接続される第２インタフェースとの間でデータの転送を行う制御部は、第１または第２のインタフェースが計算機の主記憶へのアクセス要求を受け付けたときに、主記憶に対するメモリトランザクションを第１インタフェースに発行するメモリトランザクション発行部を有し、第１インタフェースは、計算機に対して並列的に接続された複数のインタフェースを有し、制御部は、メモリトランザクション発行部が発行したメモリトランザクションに含まれる主記憶のアドレスを抽出し、前記アドレスに対応するアドレス指定情報が設定されたインタフェースを選択してメモリトランザクションを送信するメモリトランザクション分配部を有する。【選択図】図３
2010061194.tif 000002
【特許請求の範囲】
【請求項１】
計算機に接続される第１のインタフェースと、
外部の装置に接続される第２のインタフェースと、
前記第１のインタフェースと第２のインタフェースの間でデータの転送を行う制御部と、を備え、
前記制御部は、前記第１のインタフェースまたは第２のインタフェースが前記計算機の主記憶へのアクセス要求を受け付けたときに、前記主記憶に対するメモリトランザクションを前記第１のインタフェースに発行する少なくとも一つのメモリトランザクション発行部を有するデータ転送装置において、
前記第１のインタフェースは、
前記計算機に対して並列的に接続された複数のインタフェースを有し、
前記制御部は、
前記メモリトランザクション発行部が発行したメモリトランザクションに含まれる主記憶のアドレスを抽出し、当該抽出されたアドレスに応じて、前記複数のインタフェースの１つに前記メモリトランザクションを送信することを特徴とするデータ転送装置。
【請求項２】
請求項１に記載のデータ転送装置において、
前記制御部は、
予め設定された前記メモリトランザクションの転送先アドレスと前記複数のインタフェースとの対応関係に基づき、前記抽出されたアドレスに対応するアドレス指定情報が設定されたインタフェースを前記複数のインタフェースから選択し、当該選択したインタフェースに前記メモリトランザクションを送信するメモリトランザクション分配部を有することを特徴とするデータ転送装置。
【請求項３】
請求項２に記載のデータ転送装置において、
前記制御部は、
前記対応関係を記述するアドレス指定情報を格納する分配情報記憶部を有し、
前記メモリトランザクション分配部は、
前記メモリトランザクションから抽出した主記憶のアドレスで前記分配情報記憶部を参照し、前記アドレスに対応するアドレス指定情報が設定された前記インタフェースを選択することを特徴とするデータ転送装置。
【請求項４】
請求項１に記載のデータ転送装置において、
前記制御部は、
前記受け付けたアクセス要求にメモリトランザクションの完了保証要求が含まれるときに、前記メモリトランザクション分配部が送信したメモリトランザクションについて主記憶に対するアクセスが完了したことを検知したときに、前記計算機ないし前記アクセス要求の送信元に対してメモリトランザクションの完了を通知する完了保証部を有することを特徴とするデータ転送装置。
【請求項５】
請求項１に記載のデータ転送装置において、
前記制御部は、
前記メモリトランザクション分配部がメモリトランザクションを送信した前記複数のインタフェースごとに、メモリトランザクションの完了または未完了を識別する情報を記憶する完了状況記憶部を有し、
前記完了保証部は、
前記受け付けたアクセス要求にメモリトランザクションの完了保証要求が含まれるときには、前記完了状況記憶部の情報が未完了となっている前記インタフェースに完了保証用のトランザクションを発行し、前記完了保証用トランザクションに対する応答を全て受信したときに、前記メモリトランザクションについて主記憶に対するアクセスが完了したことを検知することを特徴とするデータ転送装置。
【請求項６】
請求項１に記載のデータ転送装置において、
前記制御部は、
前記メモリトランザクション分配部が前記複数のインタフェースのうちのひとつを選択する条件を設定する分配方法設定部を有し、
前記メモリトランザクション分配部は、前記分配方法設定部で設定された条件で前記複数のインタフェースのうちのひとつを選択することを特徴とするデータ転送装置。
【請求項７】
請求項１に記載のデータ転送装置において、
前記分配方法設定部は、
前記複数のインタフェースのそれぞれについてデータ転送の有効または無効の何れかを設定する記憶部を有することを特徴とするデータ転送装置。
【請求項８】
請求項１に記載のデータ転送装置において、
前記第２のインタフェースは、
ネットワークに接続されて信号の送受信を行うネットワークインタフェースであることを特徴とするデータ転送装置。
【請求項９】
請求項８に記載のデータ転送装置において、
前記第２のインタフェースは、
ネットワークに接続された計算機と、第１のインタフェースで接続された計算機の主記憶との間でＤＭＡ転送を行うことを特徴とするデータ転送装置。
【請求項１０】
請求項１に記載のデータ転送装置において、
前記第１のインタフェースは、
ＰＣＩ  Ｅｘｐｒｅｓｓで構成されたことを特徴とするデータ転送装置。
【請求項１１】
請求項５に記載のデータ転送装置において、
前記完了保証用のトランザクションとして、メモリリードトランザクションを用いることを特徴とするデータ転送装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機に接続されて、計算機の主記憶装置に対してデータ転送を行う装置に関する。
【背景技術】
【０００２】
本発明者が検討したところによれば、ネットワークインタフェースアダプタ、ストレージインタフェースアダプタ、及び、グラフィックスアダプタなどの計算機のデータ入出力に関与するデータ転送装置において、計算機の主記憶装置に対するデータ転送をプロセッサを介在せずに行うＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送が用いられている。プロセッサを介在しないで主記憶装置へデータ転送を行うことにより、プロセッサの負荷軽減とデータ転送の高速化を図っている。
【０００３】
前記のデータ転送装置は、ＰＣＩやＰＣＩ  Ｅｘｐｒｅｓｓのような、業界標準規格で定められたインタフェースを介して計算機と接続することが一般的である。インタフェースのスループットは規格で定められている範囲に制限される。例えば、ＰＣＩ  Ｅｘｐｒｅｓｓではｘ１、ｘ２、ｘ４、ｘ８、ｘ１６、及び、ｘ３２の６種のスループットが規格で定められているが、それ以上のスループットのものを必要とする場合には、規格の改訂を待つ必要がある。そのため、このインタフェースの性能（スループット）がボトルネックとなってシステム全体の実効性能を低下させてしまうことがある。ＰＣＩ  Ｅｘｐｒｅｓｓに関して述べられている文献として、非特許文献１及び非特許文献２が知られている。
【０００４】
例えば、安価に入手可能な計算機（例えば、ＰＣ）をノードとして、このノードをネットワークで複数台接続してクラスタを構成することで、クラスタ全体として高性能な計算機を実現することが可能である。この場合、処理の内容によっては各ノード間のネットワーク性能が低いと、クラスタ全体としての実効性能が著しく低下する恐れがある。しかし、ネットワーク性能を高めても、前記の理由により、ネットワークインタフェースアダプタと計算機を接続するインタフェースの性能が、ネットワーク性能に見合ったものでない場合、このインタフェースがボトルネックとなっていまい、性能を低下させてしまう。特に、安価に入手可能なＰＣ等のコモディティな計算機では、こうしたクラスタを構成する上でのインタフェースの性能に関する問題は考慮されていないので、クラスタを構成する上で必要となるデータ転送性能を有するインタフェースを備えていない場合がある。
【０００５】
上記の例はネットワークインタフェースアダプタの場合であるが、ストレージインタフェースアダプタやグラフィックスアダプタなど、他のデータ転送装置においても同様の問題がある。
【０００６】
このように、性能が不足しているインタフェースを用いて、所定のデータ転送性能を達成するための手段として、複数個のインタフェースを用いる方法が知られている。その一例として、特許文献１に記載の技術などが挙げられる。特許文献１には、計算機とストレージデバイスが複数のアクセスパスで接続されている構成において、計算機はストレージデバイスに接続されているアクセスパスを検出し、当該ストレージデバイスに対するアクセスを検出された複数のアクセスパスに分散させる技術が記載されている。
【０００７】
また、複数個のインタフェースを用いる技術としては、複数のＰＣＩ  Ｅｘｐｒｅｓｓスロットに複数のグラフィックスカードを装着し、単一の３次元画像の描画を行う技術が知られている（例えば、特許文献２，３）。
【０００８】
なお、ＰＣＩ  Ｅｘｐｒｅｓｓなどのインタフェースとプロセッサを接続する技術としては、非特許文献３に示すＨｙｐｅｒＴｒａｎｓｐｏｒｔやＩｎｔｅｌ社のＱｕｉｃｋＰａｔｈ  Ｉｎｔｅｒｃｏｎｎｅｃｔのような内部ネットワークを用いることで、スループットを確保することができる。
【特許文献１】特開２０００−３３０９２４号公報
【特許文献２】米国特許第７，２８９，１２５号公報
【特許文献３】米国特許第７，０７５，５４１号公報
【非特許文献１】ＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂａｓｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  Ｒｅｖｉｓｉｏｎ  ２．０，  ＰＣＩ−ＳＩＧ，  Ｄｅｃｅｍｂｅｒ  ２０，２００６．
【非特許文献２】Ｍｉｎｄｓｈａｒｅ  Ｉｎｃ．，  Ｒａｖｉ  Ｂｕｄｒｕｋ，  Ｄｏｎ  Ａｎｄｅｒｓｏｎ  ａｎｄ  Ｔｏｍ  Ｓｈａｎｌｅｙ，  ＰＣＩ  Ｅｘｐｒｅｓｓ  Ｓｙｓｔｅｍ  Ａｒｃｈｉｔｅｃｔｕｒｅ  （ＰＣ  Ｓｙｓｔｅｍ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｅｒｉｅｓ），  Ａｄｄｉｓｏｎ−Ｗｅｓｌｅｙ，  Ｓｅｐｔｅｍｂｅｒ  １４，  ２００３．
【非特許文献３】ＨｙｐｅｒＴｒａｎｓｐｏｒｔ  Ｉ／Ｏ  Ｌｉｎｋ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  Ｒｅｖｉｓｉｏｎ  ３．００，  ＨｙｐｅｒＴｒａｎｓｐｏｒｔ  Ｔｅｃｈｎｏｌｏｇｙ  Ｃｏｎｓｏｒｔｉｕｍ，  Ａｐｒｉｌ  ２１，２００６．
【発明の開示】
【発明が解決しようとする課題】
【０００９】
上記背景技術にあるように、計算機の主記憶装置に対してデータ転送を行うデータ転送装置において、データ転送のスループットの向上を目的として、複数のインタフェースを介して前記計算機に接続する場合がある。この場合、データ転送装置はデータ転送を実現するための複数のメモリトランザクションを、前記複数のインタフェースに分配する必要がある。
【００１０】
例えば、データ転送装置が２つのインタフェースＡ，Ｂを備えて並列的に計算機に接続され、計算機が２つのプロセッサＡ，Ｂと、２つの主記憶装置Ａ，Ｂを備える例を検討する。なお、プロセッサＡはＩ／ＯハブＡを介してインタフェースＡに接続され、プロセッサＡには主記憶装置Ａが接続される。同様に、プロセッサＢはＩ／ＯハブＢを介してインタフェースＢに接続され、プロセッサＢには主記憶装置Ｂが接続される。また、プロセッサＡ，Ｂはインターコネクトにより接続されている。
【００１１】
データ転送装置から２つのインタフェースＡ，Ｂを介して主記憶装置Ａ，Ｂにアクセスする場合、インタフェースＡから主記憶装置Ａにメモリトランザクションが発行され、インタフェースＢから主記憶装置Ｂにメモリトランザクションが発行される場合には、並列的にメモリトランザクションが実行されてスループットの向上が期待できる。
【００１２】
一方、インタフェースＡから主記憶装置Ｂにメモリトランザクションが発行され、インタフェースＢから主記憶装置Ａにメモリトランザクションが発行される場合には、プロセッサＡ，Ｂ間のインターコネクトで２つのメモリトランザクションを転送することになる。この場合は、プロセッサＡ，Ｂ間のインターコネクトが、プロセッサＡとＩ／ＯハブＡ間またはプロセッサＢとＩ／ＯハブＢ間の経路の２倍以上の転送速度を備える必要がある。プロセッサＡ，Ｂ間のインターコネクトの転送速度が他の経路の転送速度と同等の場合には、メモリトランザクションを分散したにもかかわらず、１つのインタフェースでメモリトランザクションを実行した場合と同等の処理速度になる、という問題があった。
【００１３】
さらに、インタフェースＡ，ＢまたはインタフェースＡ，Ｂと計算機の経路のいずれかに障害が発生した場合、それに応じて複数のメモリトランザクションの分配を変更しなければ、メモリトランザクションを送信することが出来なくなる、という問題があった。
【００１４】
また、データ転送装置から複数のインタフェースＡ，Ｂを介して主記憶装置Ａ，Ｂにメモリライトトランザクションを発行した場合、データ転送装置では主記憶装置Ａ，Ｂへ書き込みが完了したか否かを検知することができないため、データ転送装置は書き込みに関して完了の保証を行うことができない、という問題があった。
【００１５】
本発明の目的はこれらの課題を解決するために、以下の特徴を持つデータ転送装置を提供することにある。
【００１６】
複数のインタフェースを介して計算機の主記憶装置ないしは主記憶制御部に対して送信したメモリトランザクションが、主記憶装置ないしは主記憶制御部に至るまでの経路上で、ハードウェアリソースの競合を抑制してスループットを向上させることが可能なデータ転送装置を提供することである。
【００１７】
また、複数のインタフェースで計算機に接続されたデータ転送装置で、メモリトランザクションの完了保証を行い、かつ、完了保証に要するオーバヘッドを低減し、データ転送用のメモリトランザクションのスループットを維持することが可能なデータ転送装置を提供することである。
【００１８】
本発明の前記ならびにその他の目的と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１９】
本発明は、計算機と外部の装置、例えばＩ／Ｏデバイス等との間でやりとりされる入出力信号を互いに転送しあうためのデータ転送装置にあって、当該データ転送装置が前記計算機の主記憶へのアクセス要求を受け付けたときに、当該主記憶に対するメモリトランザクションに含まれる主記憶のアドレスを抽出し、当該抽出されたアドレスに応じて、上記計算機に信号ないしデータを送信するためのインタフェースから適切なものを選択して、前記メモリトランザクションを送信するための制御手段を備えることを特徴とする。
【００２０】
このため、本発明を用いて構成されるデータ転送装置は、上記計算機と信号あるいはデータをやりとりするための第１のインタフェースと、上記外部の装置と信号あるいはデータをやりとりするための第２のインタフェースとを備え、上記の制御手段は、上記第１のインタフェースと第２のインタフェースの間に配置される。また、第１のインタフェースは、通常、複数のインタフェースにより構成される。
【００２１】
メモリトランザクションを転送するべきインタフェースの選択方法は、種々の構成により実現することができる。例えば、第１のインタフェースを構成する複数のインタフェースのそれぞれについて、メモリトランザクションの転送先アドレスまたはアドレス範囲（以下、アドレス情報とする）を予め設定し、この対応関係をアドレス指定情報として格納しておき、受信したメモリトランザクションから抽出されるアドレス情報と照合して、適切なインタフェースを選択する。
【００２２】
あるいは、インタフェースの選択規則を予め複数備えておき、受信したメモリトランザクションの種別や前記計算機で動作するソフトウェアの種別など，に応じて選択規則を選び、それに応じてインタフェースを選択してもよい。
【発明の効果】
【００２３】
本発明のうち、代表的なものによって得られる効果を簡単に説明すれば以下の通りである。
【００２４】
第１のインタフェースを複数のインタフェースで構成し、これら複数のインタフェースを介して計算機の主記憶に対して送信したメモリトランザクションが、主記憶に至るまでの経路上で、ハードウェアリソースの競合が生じにくい経路で伝送され、データ転送装置から主記憶装置へのデータ転送の実効性能を高めることができる。
【００２５】
また、複数のインタフェースを介して送信したメモリトランザクションが完了したことを保証するための付加的なメモリトランザクションの送信に起因するオーバヘッドを低減することで、データ転送装置から主記憶装置へのデータ転送の実効性能を高めることができる。
【００２６】
また、計算機の構成及びデータ転送装置を用いるユーザアプリケーションの特性に応じて、計算機上で動作するソフトウェアがメモリトランザクションの分配方法を変更することを可能とすることにより、データ転送装置から主記憶装置へのデータ転送性能を高めることができる。また、分配方法の変更により、複数のインタフェースのうち、一部のインタフェースを切り離した縮退動作を実現することで、一部のインタフェースに異常が生じた際も、データ転送性能は落ちるが、継続して動作することが可能なデータ転送装置を実現できる。
【００２７】
よって、本発明は上記により、データ転送装置から計算機の主記憶装置へのデータ転送性能を高めることができる。
【発明を実施するための最良の形態】
【００２８】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一の部材には原則として同一の符号を付し、その繰り返しの説明は省略する。
【００２９】
本発明は、複数のインタフェースを介して計算機の主記憶装置ないしは主記憶制御部とデータ転送を行うデータ転送装置に適用することが可能であり、一例としては、ネットワークインタフェースアダプタ、ストレージインタフェースアダプタ、及び、グラフィックスアダプタなどに適用することが可能である。以下に説明する本発明の一実施の形態は、ＲＤＭＡ（Ｒｅｍｏｔｅ  Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送を行うネットワークインタフェースアダプタに本発明を適用したものであるが、これは、本発明を実施するための最良の形態を示すために好適な適用先であるためであり、本発明の適用先をネットワークインタフェースアダプタに限定するものではない。
【００３０】
図１に、本発明の一実施の形態のデータ転送装置であるネットワークインタフェースアダプタによって実現するネットワークを示す。
【００３１】
ネットワーク１００は例えばＩｎｆｉｎｉＢａｎｄにより構成されるネットワークである。ネットワーク１００を介して相互にＲＤＭＡ転送を行うノード１０２は、リンク１０１を介してネットワークへ接続されている。これ以降の説明において、あるノードに注目して説明を行う場合、そのノードをローカルノードと称し、ローカルノードとネットワーク１００を介して接続される他のノードをリモートノードと称する。
【００３２】
図２に、ノード１０２の構成の一例を示す。ノード１０２は計算機２０３、及び、リンク１０１を介して計算機２０３とネットワーク１００を接続するためのネットワークインタフェースアダプタ２０１を有する。計算機２０３とネットワークインタフェースアダプタ２０１は少なくとも２本以上のインタフェース２０２−１、２０２−２、２０２−３、２０２−４を介して接続される。図２ではインタフェースは４本として図示されているが、２本以上の任意の本数で構成することができる。インタフェース２０２−１、２０２−２、２０２−３、２０２−４は本実施例ではＰＣＩ  Ｅｘｐｒｅｓｓとする。ネットワークインタフェースアダプタ２０１は、信号処理を行うコントローラ２０を主体に構成される。
【００３３】
データ転送装置としてのネットワークインタフェースアダプタ２０１は計算機２０３で動作するソフトウェアからの要求に応じて、リモートノードへのＲＤＭＡ転送要求パケットを生成し、ネットワーク１００を介してリモートノードへ送信する。また、リモートノードからローカルノードへのＲＤＭＡ転送要求パケットを受け取った時には、当該ＲＤＭＡ転送要求を実行するために必要なメモリトランザクション及びパケットの生成と送信を行う。ＲＤＭＡ転送を要求するパケットは、図９に示すＲＤＭＡライト要求パケット１４００、図１０に示すＲＤＭＡリード要求パケット１５００及び図１１に示すＲＤＭＡリード応答パケット１６００の３種類がある。各パケットの詳細に関しては後述する。
【００３４】
図３は、本発明の一実施の形態のデータ転送装置であるネットワークインタフェースアダプタ２０１の構成の一例を示すブロック図である。図３は、上記図２に示したコントローラ２０の詳細な機能要素を示すものである。図３に示す各部はコントローラ２０の各機能として動作する。このため、コントローラ２０は、プロセッサとメモリ及び信号処理回路を含んで構成される。
【００３５】
図３において、ネットワークインタフェースアダプタ２０１は、ネットワークインタフェース３０１、パケット解読部３０２、パケット生成部３０３、メモリトランザクション発行部３０４、メモリトランザクション分配部３０５、アドレス変換部３０６、アドレス変換情報記憶部３０７、分配情報記憶部３０８、分配方法設定部３０９、少なくとも２個以上のＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３１０−１，３１０−２，３１０−３，３１０−４、完了状況記憶部３１１、完了保証部３１２から構成される。
【００３６】
ＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３１０−−１，３１０−２，３１０−３，３１０−４は、ネットワークインタフェースアダプタ２０１をＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−２，２０２−３，２０２−４に接続するために必要となる、ＰＣＩ  Ｅｘｐｒｅｓｓの規格で規定された、物理層、データリンク層、トランザクション層の処理を担う。
【００３７】
例えば、ＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３１０−１について説明する。ＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３１０−１は、ネットワークインタフェースアダプタ２０１内の機能要素によって生成されたＰＣＩ  Ｅｘｐｒｅｓｓパケットを、制御・データパス３７３−１を介して受け取り、当該パケットをＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１に送信する役割を担う。また、ＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３１０−１は、計算機２０３がＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１を介してネットワークインタフェースアダプタ２０１に送信したＰＣＩ  Ｅｘｐｒｅｓｓパケットを受け取り、制御・データパス３７１−１を介して接続されるネットワークインタフェースアダプタ２０１内の機能要素に、受け取ったパケットを送信する役割を担う。ＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３１０−１は、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１を介して接続される計算機２０３のＩ／Ｏハブ４００−１と、パケットの送受に際してフロー制御やパケットに付与された誤り訂正符号によるエラー訂正を行うなど、個々のパケットの転送を正常に行うための処理を行う。
【００３８】
以上、ＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３１０−１に関して説明したが、これはＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３１０−２，３１０−３，３１０−４に関しても同様である。すなわち、ＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３１０−２に関しては、ネットワークインタフェースアダプタ２０１内の機能要素が制御・データパス３７３−２に送信したパケットをＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−２に送信する役割と、計算機２０３がＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−２に送信したパケットを、制御・データパス３７１−２に送信する役割を持つ。ＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３１０−３に関しては、ネットワークインタフェースアダプタ２０１内の機能要素が制御・データパス３７３−３に送信したパケットをＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−３に送信する役割と、計算機２０３がＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−３に送信したパケットを、制御・データパス３７−１，３に送信する役割を持つ。ＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３１０−４に関しては、ネットワークインタフェースアダプタ２０１内の機能要素が制御・データパス３７３−４に送信したパケットをＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−４に送信する役割と、計算機２０３がＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−４に送信したパケットを、制御・データパス３７１−４に送信する役割を持つ。
【００３９】
上記の様に、ＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３１０−−１，３１０−２，３１０−３，３１０−４は、ネットワークインタフェースアダプタ２０１内部の機能要素が送信したパケットをＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−２，２０２−３，２０２−４に送信する役割と、計算機２０３内部のＩ／Ｏハブ４００−１，４００−２がＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−２，２０２−３，２０２−４に送信したパケットを、ネットワークインタフェースアダプタ２０１内部の機能要素に送信する役割を持つ。ＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３１０−−１，３１０−２，３１０−３，３１０−４と、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−２，２０２−３，２０２−４は、それぞれ１対１の関係になっている。よって、ネットワークインタフェースアダプタ２０１内の機能要素がメモリトランザクションをＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３１０−１に送信することと、前記機能要素がメモリトランザクションをＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１に送信することは同じ意味を持つ。この関係は、他のＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３１０−２，３１０−３，３１０−４とＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−２，２０２−３，２０２−４の間でも同様である。
【００４０】
制御・データパス３７１−１はパケット生成部３０３、完了保証部３１２、分配情報記憶部３０８、及び、分配方法設定部３０９に接続されており、これら４つの機能要素が、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１からのパケットを、ＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３１０−１経由で受信する。
【００４１】
制御・データパス３７１−２，３７−１，３，３７１−４はパケット生成部３０３、及び、完了保証部３１２に接続されており、これら２つの機能要素が、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−２，２０２−３，２０２−４からのパケットを、ＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３１０−２，３１０−３，３１０−４経由で受信する。
【００４２】
制御・データパス３７３−−１，３７３−２，３７３−３，３７３−４はメモリトランザクション分配部３０５、及び、完了保証部３１２に接続されており、これら２つの機能要素がＰＣＩ  Ｅｘｐｒｅｓｓパケットを、ＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３１０−−１，３１０−２，３１０−３，３１０−４経由で、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−２，２０２−３，２０２−４に送信する。
【００４３】
ネットワークインタフェース３０１は、リンク１０１を介してネットワーク１００に接続する。ネットワークインタフェース３０１は、データパス３５１を介してネットワークインタフェース３０１に入力されたパケットをネットワーク１００に送信する。一方、ネットワーク１００から受信したパケットは、データパス３５２を介してパケット解読部３０２に転送する。
【００４４】
パケット解読部３０２は、ネットワークインタフェース３０１を介して受信したパケットを解読し、パケットで指示されるデータ転送を行うために必要となる制御及び情報を他のブロックに伝達する。
【００４５】
パケット生成部３０３は、データ転送に必要となるパケットを生成し、ネットワークインタフェース３０１を介して送信する。また、パケットの生成に必要となるデータを得るために、必要な制御及び情報を他のブロックに伝達する。
【００４６】
パケット解読部３０２及びパケット生成部３０３は、前述したＲＤＭＡライト要求パケット１４００、ＲＤＭＡリード要求パケット１５００及びＲＤＭＡリード応答パケット１６００の他に、これらのパケットの送信元ノードに対してパケットが完全な形で到着したことを通知するためのＡＣＫパケットや、到達したパケットに欠損があるときなどにパケットの送信元に異常を通知するＮＡＣＫパケットの解読ないしは生成を行う。
【００４７】
パケット解読部３０２はネットワークインタフェース３０１から、データパス３５２を介して、受信したパケットを受け取る。パケット解読部３０２はＣＲＣやパケットシーケンス番号などを検査することで、パケットが欠損なく正常に到達したかを判定する。その結果、パケットが正常と判定されれば、制御パス３５３を介してパケット生成部３０３に、ＡＣＫパケットを当該パケットの送信元に送信するよう要求する。パケットが正常でないと判定されれば、制御パス３５３を介してパケット生成部３０３にＮＡＣＫパケットの送信を要求する。
【００４８】
パケット解読部３０２は、前記したパケットの検査を行った後、当該パケットで要求される処理を判断し、判定された処理を実現するために必要なメモリトランザクションの発行を制御・データパス３５８を介してメモリトランザクション発行部３０４に要求する。このとき、メモリトランザクションを発行する上で必要となるアドレスやデータもメモリトランザクション発行部３０４に転送される。
【００４９】
パケット解読部３０２が解釈できるパケットは、前述した通り、図９に示すＲＤＭＡライト要求パケット１４００、図１０に示すＲＤＭＡリード要求パケット１５００、図１１に示すＲＤＭＡリード応答パケット１６００などである。各パケットの詳細については後述する。以下に、パケット解読部３０２が各パケットを解釈したときの処理を述べる。
【００５０】
パケット解読部３０２が、ＲＤＭＡライト要求パケット１４００を受け取ると、当該パケットに含まれるライト先アドレス１４０６（仮想アドレス）を物理アドレスに変換するために、データパス３５５を介してアドレス変換部３０６にライト先アドレス１４０６を送り、データパス３５５を介してアドレス変換部３０６が変換した物理アドレスを受け取る。そして、当該物理アドレスに対してデータ１４０９を書き込むメモリライトトランザクションの発行を、制御・データパス３５８を介してメモリトランザクション発行部３０４に要求する。
【００５１】
パケット解読部３０２が、ＲＤＭＡリード要求パケット１５００を受け取った場合も同様に、当該パケットに含まれるリード先アドレス１５０６（仮想アドレス）を、アドレス変換部３０６で物理アドレスに変換する。そして、当該物理アドレスに対するメモリリードトランザクションの発行を、メモリトランザクション発行部３０４に要求する。このとき、当該メモリリードトランザクションで得られたデータを含んだ、ＲＤＭＡリード応答パケット１６００の生成と送信を、パケット生成部３０３に制御パス３５３を介して要求する。
【００５２】
パケット解読部３０２が、ＲＤＭＡリード応答パケット１６００を受け取った場合、予め計算機２０３がネットワークインタフェースアダプタ２０１に指定した主記憶空間のアドレスで指定される領域に、ＲＤＭＡリード応答パケット１６００に含まれるデータ１６０７を書き込むためのメモリライトトランザクションの発行を、制御・データパス３５８を介してメモリトランザクション発行部３０４に要求する。前記主記憶空間のアドレスが仮想アドレスで指定されている場合、データパス３５５を介してアドレス変換部３０６に前記仮想アドレスのアドレス変換を要求し、データパス３５５を介してアドレス変換部３０６から変換された物理アドレスを得た後、メモリトランザクション発行部３０４に要求する。
【００５３】
なお、パケット解読部３０２は、ＲＤＭＡライト要求パケット、ないしは、ＲＤＭＡリード応答パケットに、完了通知を要求する属性がつけられていた場合、制御・データパス３５８を経由してメモリトランザクション発行部３０４に出すメモリトランザクション発行要求に、完了通知を要求する属性を付ける。
【００５４】
アドレス変換部３０６は、リモートノードからのＲＤＭＡ要求パケットに含まれるローカルノードのアドレスが仮想アドレスである場合に、アドレス変換情報記憶部３０７が保持する仮想アドレスから物理アドレスへの変換情報を元に、物理アドレスへ変換する。また、パケットを生成してネットワークに送信するために、必要となるデータを主記憶装置から取得する際にも、前記アドレス変換部３０６で仮想アドレスから物理アドレスへの変換を行う。
【００５５】
アドレス変換情報記憶部３０７は、アドレス変換部３０６での仮想アドレスから物理アドレスへの変換に必要となる変換情報を保持する。アドレス変換情報記憶部３０７の実装の一形態としては、キャッシュメモリとすることが挙げられる。ネットワークインタフェースアダプタ２０１が接続される計算機２０３の構成にもよるが、全てのアドレス変換情報をネットワークインタフェースアダプタ２０１内で保持することは、必要となる記憶容量の大きさから困難である。よって、計算機２０３のライブラリ、デバイスドライバもしくはオペレーティングシステムなどのソフトウェアが、主記憶装置上の所定の領域にアドレス変換情報を用意し、ネットワークインタフェースアダプタ２０１は該アドレス変換情報を参照してアドレス変換を行う。しかし、アドレス変換の度に主記憶装置からアドレス変換情報を取得するのは時間が掛かりすぎて性能を低下させるため、キャッシュメモリを用いて、アドレス変換情報をネットワークインタフェースアダプタ２０１の中のアドレス変換情報記憶部３０７に格納しておく。
【００５６】
メモリトランザクション発行部３０４は、パケット解読部３０２ないしはパケット生成部３０３の要求に応じて、データ転送に必要となる計算機２０３の主記憶装置ないしは主記憶制御部に対するメモリリードトランザクション及びメモリライトトランザクションを発行する。発行されたメモリトランザクションは、データパス３５９を介してメモリトランザクション分配部に転送される。
【００５７】
パケット解読部３０２ないしはパケット生成部３０３からメモリトランザクション発行部３０４へのメモリトランザクション発行要求が１回だったとしても、メモリトランザクション発行部３０４は複数個のメモリトランザクションに分けて発行することがある。その理由は２種類ある。
【００５８】
１つ目の理由はメモリトランザクションを受ける側である計算機２０３の制約に起因するものである。例えば、パケット解読部３０２が４ＫＢのデータを含むＲＤＭＡライト要求パケットを受け取り、メモリトランザクション発行部３０４に当該データの主記憶への書き込みをするためのメモリライトトランザクションの発行を要求したとする。ここで、計算機２０３の制約上、１個のメモリライトトランザクションに含まれるデータの最大量が２５６Ｂとされていれば、メモリトランザクション発行部３０４は当該データを１６分割し、２５６Ｂデータのメモリライトトランザクションを１６個発行しなければならない。
【００５９】
２つ目の理由は、後述するメモリトランザクション分配部３０５を有効に機能させるためである。後述するように、メモリトランザクション分配部３０５は、複数のメモリトランザクションを、複数のＰＣＩ  Ｅｘｐｒｅｓｓインタフェースに分散させて送信することで、各インタフェースにかかる負荷を分散し、スループットを向上させる。よって、メモリトランザクションが１つだけでは、メモリトランザクション分配部３０５は有効に機能できない。そのため、巨大なデータを書き込むためには、先の例と同様に小さなデータに分割して、複数個のメモリライトトランザクションを並列的に発行する。
【００６０】
なお、メモリトランザクション発行部３０４は、パケット解読部３０２からのメモリトランザクション発行要求に、完了通知を要求する属性が付与されていた場合、データパス３５９を介してメモリトランザクション分配部３０５にメモリトランザクションを送信した後、それに続けて完了通知を要求する情報をメモリトランザクション分配部３０５に送る。
【００６１】
メモリトランザクション分配部３０５は、複数のＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−２，２０２−３，２０２−４のうち、いずれか１つを選択し、選択されたインタフェースに、メモリトランザクション発行部３０４で発行されたメモリトランザクションの１つを送信する。複数のＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−２，２０２−３，２０２−４のうち、いずれか１つを選択する方法として、ラウンドロビン、重み付きラウンドロビン、ないしは、メモリトランザクションの対象アドレスによるインタリーブを適用することが考えられるが、本明細書の発明が解決しようとする課題において示したように、計算機２０３の構成とメモリトランザクションを送信するパターンによっては、これらの方法ではネットワークインタフェースアダプタ２０１から計算機２０３の主記憶装置へのデータ転送性能を低下させてしまう。
【００６２】
そこで、本発明においては、ネットワークインタフェースアダプタ２０１内に新しく分配情報記憶部３０８を設け、メモリトランザクション分配部３０５は前記分配情報記憶部３０８の記憶する、主記憶アドレスとＰＣＩ  Ｅｘｐｒｅｓｓインタフェースとの対応関係を用いて、メモリトランザクションを送信すべきＰＣＩ  Ｅｘｐｒｅｓｓインタフェースを選択する。
【００６３】
分配情報記憶部３０８に、計算機２０３の複数の主記憶装置ないしは主記憶制御部が担う主記憶アドレスの範囲と、当該主記憶装置ないしは主記憶制御部に相対的に短い経路でメモリトランザクションを伝送できるインタフェースを示す情報の組を１つのエントリとして、少なくとも１つ以上のエントリを格納しておく。メモリトランザクション分配部３０５は、データパス３６０を介して分配情報記憶部３０８のデータを参照することが出来る。
【００６４】
メモリトランザクション分配部３０５は、データパス３５９を介してメモリトランザクション発行部３０４から発行されたメモリトランザクションを受け取ると、分配情報記憶部３０８を参照して、当該メモリトランザクションの対象アドレスが属する主記憶アドレス範囲のエントリを抽出する。当該エントリが存在した場合には、当該エントリで指定されているＰＣＩ  Ｅｘｐｒｅｓｓインタフェースに、当該メモリトランザクションを送信する。エントリが存在しない場合には、デフォルトで送信先とされているインタフェースに対して、当該メモリトランザクションを送信する。
【００６５】
分配情報記憶部３０８の内容は、ネットワークインタフェースアダプタ２０１の初期化時に、計算機２０３の上で動作するライブラリ、デバイスドライバないしはオペレーティングシステムのようなソフトウェアが設定する。分配情報記憶部３０８は計算機の主記憶アドレス空間に割り当てられているメモリマップドレジスタであり、ＰＣＩ Ｅｘｐｒｅｓｓエンドポイント３１０−１にデータパス３７１−１で接続されている。よって、前記ソフトウェアはＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１に対して、分配情報記憶部３０８のアドレスを対象としたメモリライトトランザクションを発行することで、分配情報記憶部３０８の内容を設定することが可能である。分配情報記憶部３０８のさらに詳細な構成の一例、及び、前記分配情報記憶部３０８に記録される情報の一例は後述する。
【００６６】
なお、メモリトランザクション分配部３０５は、データパス３５９を介してメモリトランザクション発行部３０４から完了通知要求を受け取ると、それまでに受け取ったメモリトランザクションの分配を完了した後に、制御パス３６５を介して完了保証部３１２に、既に送信したメモリトランザクションの完了を保証し、完了を通知する処理を行うよう要求する。なお、ここまでに完了通知要求が伝搬してきた流れの全体像を図１２に示す。図１２は、パケット解読部３０２が完了通知要求のパケットを受け付けてからメモリトランザクション分配部３０５でメモリトランザクションを分配する様子を示す説明図である。
【００６７】
以上の構成によって、メモリトランザクションを短い時間で目的地まで転送し、かつ、計算機２０３内のインターコネクトの混雑を減少させることができる。
【００６８】
複数のＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−２，２０２−３，２０２−４のうち、いずれか１つを選択する方法は複数あり得る。本発明で開示する分配情報記憶部３０８を用いたメモリトランザクションの分配は、本実施形態で示されるように、計算機２０３の構成によっては、ラウンドロビン、重み付きラウンドロビン、及び、アドレスによるインタリーブなどの分配方法を用いるより、高いデータ転送性能を実現し得る。しかし、前述したとおり、分配情報記憶部３０８の内容を予め設定しておく必要がある。そのため、ライブラリ、デバイスドライバ、及び、オペレーティングシステムなどが対応しない限り、分配情報記憶部３０８に基づいたメモリトランザクションの分配は不可能である。よって、データ転送性能が低下するおそれはあるが、こうした状況でもネットワークインタフェースアダプタ２０１が正常に動作するためには、メモリトランザクション分配部３０５は、前述したような複数の分配方法をサポートし、そのうちの実際に分配に用いる分配方法を、計算機２０３で動作するソフトウェアから設定できるようにする必要がある。また、ソフトウェアのデバッグや、ネットワークインタフェースアダプタ２０１の性能を犠牲にしてでも単一のＰＣＩ  Ｅｘｐｒｅｓｓインタフェースを介して計算機２０３に接続しようとする場合、複数のＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−２，２０２−３，２０２−４のうち、計算機２０３で動作するソフトウェアで指定される１つのインタフェースに固定的にメモリトランザクションを送信できるようにする必要がある。さらには、故障等の理由により、ＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３１０−−１，３１０−２，３１０−３，３１０−４のうち何れかが利用できなくなった場合、各エンドポイントに接続されているＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−２，２０２−３，２０２−４のうち何れかが利用できなくなった場合、もしくは、計算機内のＩ／Ｏハブ４００−１，４００−２の何れかに障害が発生した場合に、縮退して動作し続けるために、利用できないＰＣＩ  ＥｘｐｒｅｓｓエンドポイントないしはＰＣＩ  Ｅｘｐｒｅｓｓインタフェースに対しては分配を行わないように設定できる必要がある。本発明ではこれらの要求を満たすために、ネットワークインタフェースアダプタ２０１は上記に示したメモリトランザクション分配部３０５の分配方法を、計算機２０３のソフトウェアから指定するための分配方法設定部３０９を備える。
【００６９】
分配方法設定部３０９は、ＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３１０−１にデータパス３７１−１で接続されており、計算機２０３の主記憶アドレス空間上にマッピングされたメモリマップドレジスタとして機能する。計算機２０３で動作するソフトウェアは、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１に、当該アドレスに対するメモリライトトランザクションを発行することで、分配方法設定部３０９の内容を設定することができる。
【００７０】
メモリライトトランザクションを送信すると、送信先として選択されたインタフェースには、処理が完了していない可能性があるメモリライトトランザクションが少なくとも１つ以上あることになるので、メモリトランザクション分配部３０５は、データパス３６３を介して完了状況記憶部３１１に、当該ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース上に未完了のメモリライトトランザクションが存在することを示す情報を記録する。
【００７１】
本発明で開示する、完了状況記憶部３１１は、ネットワークインタフェースアダプタ２０１が有する複数のＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３０１−−１，３１０−２，３１０−３，３１０−４それぞれに接続されているＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−２，２０２−３，２０２−４において、既に発行されたメモリライトトランザクションが全て完了しているか、もしくは、完了していないメモリライトトランザクションが残っている可能性があるかを記憶する。完了状況記憶部３１１のさらに詳細な構成の一例、及び、ネットワークインタフェースアダプタ２０１がＲＤＭＡ転送要求を処理する際の、完了状況記憶部３１１の記憶内容の一例は後述する。
【００７２】
完了保証部３１２は、計算機２０３で動くソフトウェアの要求、ないしは、リモートノードからの要求に応じて、ネットワークインタフェースアダプタ２０１がＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−２，２０２−３，２０２−４を介して計算機２０３の主記憶装置ないしは主記憶制御部に対して送信したメモリトランザクションの処理が完了したことを保証し、計算機２０３で動くソフトウェアないしはリモートノードに通知する。その際、完了保証に必要となる付加的なトランザクションの送信量を必要最小限に抑えるために、本発明では、ネットワークインタフェースアダプタ２０１は完了状況記憶部３１１を備える。
【００７３】
完了保証部３１２は、制御パス３６５を介してメモリトランザクション分配部３０５から完了通知の要求があったときに、完了保証に必要な処理を、完了状況記憶部３１１において、メモリライトトランザクションが未完了であると示されるインタフェースのみに行う。当該インタフェースでメモリライトトランザクションの完了が保証できるようになった段階で、完了状況記憶部３１１に、当該インタフェースに送信されたメモリライトトランザクションの処理は完了したことを示す情報を記録する。また、全てのインタフェースのメモリライトトランザクションの完了が保証できた段階、すなわち前述した完了状況記憶部３１１で未完了であるとされ、完了保証に必要な処理を行ったインタフェースが全て完了となった段階で、メモリライトトランザクションが完了したことを計算機２０３またはリモートノードに通知する。完了保証部３１２は、このメモリライトトランザクションの完了保証のために必要な、計算機２０３へのメモリトランザクションの発行を、データパス３６４を介してメモリトランザクション発行部３０４に要求する。
【００７４】
本実施形態のネットワークインタフェースアダプタ２０１では、４本のＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−２，２０２−３，２０２−４を介して計算機２０３に接続している。より多くのＰＣＩ  Ｅｘｐｒｅｓｓインタフェースを介して計算機２０３に接続するためには、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェースの数を増やし、それに合わせて、ネットワークインタフェースアダプタ２０１が持つＰＣＩ  Ｅｘｐｒｅｓｓエンドポイントの個数も増やす。増やしたＰＣＩ  Ｅｘｐｒｅｓｓエンドポイントは、メモリトランザクション分配部３０５、パケット生成部３０３、及び、完了保証部３１２へ接続し、メモリトランザクション分配部３０５は接続されている全てのＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント（及び、当該ＰＣＩ  Ｅｘｐｒｅｓｓエンドポイントに接続されるＰＣＩ  Ｅｘｐｒｅｓｓインタフェース）をメモリトランザクションの分配先として扱うものとする。
【００７５】
図４は、ネットワークインタフェースアダプタ２０１と接続してノード１０２を構成する計算機２０３の一例を示すブロック図である。
【００７６】
図４に示す計算機２０３は、ネットワークインタフェースアダプタ２０１を複数のインタフェースを介して接続するために、Ｉ／Ｏハブ４００−１，４００−２を備える。Ｉ／Ｏハブ４００−１はインターコネクト４０４−１，４０４−３を介して、プロセッサ４０４−１，４０４−３に接続される。Ｉ／Ｏハブ４００−２はインターコネクト４０４−２，４０４−４を介して、プロセッサ４０４−２，４０４−４に接続される。なお、インターコネクト４０５−１，４０５−２，４０５−３，４０５−４、４０５−５、４０５−６はプロセッサ４０１−１，４０１−２，４０１−３，４０１−４を接続する。
【００７７】
Ｉ／Ｏハブ４００−１，４００−２はネットワークインタフェースアダプタ２０１を接続するための複数のＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１、２０２−２、２０２−３、２０２−４を提供する。これらのインタフェースがネットワークインタフェースアダプタ２０１に接続される。すなわち、Ｉ／Ｏハブ４００−１は、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−２を介して、ネットワークインタフェースアダプタ２０１のＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３１０−−１，３１０−２と接続される。同様に、Ｉ／Ｏハブ４００−２は、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−３，２０２−４を介して、ネットワークインタフェースアダプタ２０１のＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３１０−３，３１０−４と接続される。
【００７８】
プロセッサ４０１−１，４０１−２，４０１−３，４０１−４はそれぞれ、主記憶制御部を有し、メモリバス４０３−１，４０３−２，４０３−３，４０３−４を介して主記憶装置４０２−１，４０２−２，４０２−３，４０２−４に接続される。インターコネクト４０４−１，４０４−２，４０４−３，４０４−４、４０５−１，４０５−２，４０５−３，４０５−４、４０５−５、４０５−６は例えばＨｙｐｅｒＴｒａｎｓｐｏｒｔ（上記非特許文献３）や上記ＱｕｉｃｋＰａｔｈ  Ｉｎｔｅｒｃｏｎｎｅｃｔのようなインターコネクトである。
【００７９】
計算機２０３は単一の主記憶空間を備えており、主記憶装置４０２−１，４０２−２，４０２−３，４０２−４はそれぞれ主記憶空間の一部を担っている。
【００８０】
図４に示す計算機２０３の場合、Ｉ／Ｏハブ４００−１を介して到達したメモリトランザクションが、Ｉ／Ｏハブ４００−２に近いプロセッサ４０１−２，４０１−４へ伝送される経路、あるいは逆に、Ｉ／Ｏハブ４００−２を介して到達したメモリトランザクションがＩ／Ｏハブ４００−１に近いプロセッサ４０１−１，４０１−３へ伝送される経路が、インターコネクト４０５−１，４０５−２，４０５−５、４０５−６と複数ありうる。よって、図２１のインターコネクト５０５と異なり、複数のトランザクションを同時並行的に別経路でＩ／Ｏハブ４００−１からプロセッサ４０１−２，４０１−４へ、ないしは、Ｉ／Ｏハブ４００−２からプロセッサ４０１−１，４０１−３へ伝送することが可能となり、インターコネクト上での複数メモリトランザクション競合によるデータ転送性能低下の度合いは小さい。
【００８１】
しかし、トランザクションを転送する経路によってレイテンシがばらつくという問題は依然として残る。特にレイテンシが長大になる事例として、Ｉ／Ｏハブ４００−１からインターコネクト４０４−１、プロセッサ４０１−１、インターコネクト４０５−１、プロセッサ４０１−２、インターコネクト４０５−４を経由してプロセッサ４０１−４に到達する場合もあり得る。また、プロセッサ間のインターコネクト４０５−１，４０５−２，４０５−３，４０５−４、４０５−５、４０５−６ではＩ／Ｏハブとのメモリトランザクションの転送のみならず、プロセッサ間のデータ転送も行われるので、競合を避けるためには、プロセッサ間のインターコネクトをＩ／Ｏハブによるメモリトランザクションの転送に使われないようにすることが望ましい。特に、ネットワークインタフェースアダプタ２０１をはじめとするＤＭＡ転送を行うデータ転送装置は、プロセッサに負荷をかけずに主記憶装置にデータ転送をすることで、その間、プロセッサが別の処理を実行できるようにすることを目的としてＤＭＡ転送を行っている。
【００８２】
よって、データ転送装置に起因するメモリトランザクションがプロセッサ間インターコネクトを混雑させることによって、プロセッサが行う処理のうち、プロセッサ間通信を伴うものの性能が低下してしまうことは避けたい。プロセッサ間通信を伴う処理の例としては、複数のプロセッサが協調して演算を行い、必要となるデータの転送やバリア同期にプロセッサ間インターコネクトを用いた通信を行う場合が挙げられる。こうした処理の一方で、演算された結果をネットワーク経由で他のノードに伝送する場合や、ストレージ装置に記憶する場合には、ＤＭＡ転送を用いてプロセッサの演算を阻害しないように主記憶装置からデータを転送する必要がある。こうした状況を鑑みると、図４に示すような計算機においても、本発明で開示する手段が必要となる。
【００８３】
図５は完了状況記憶部３１１の構成の一例を示す説明図である。完了状況記憶部３１１は、ネットワークインタフェースアダプタ２０１が接続されるＰＣＩ  Ｅｘｐｒｅｓｓインタフェースの数と同数のビット数を有するレジスタとして構成することが考えられる。本実施形態の場合、ネットワークインタフェースアダプタ２０１はＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３１０−−１，３１０−２，３１０−３，３１０−４を介して４本のＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−２，２０２−３，２０２−４と接続されているので、完了状況記憶部３１１は４ビットのレジスタ６００とする。
【００８４】
レジスタ６００の各ビット６０１，６０２，６０３，６０４は、それぞれ個々のＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−２，２０２−３，２０２−４に対応している。各ビット６０１、６０２、６０３、６０４はそれぞれ０もしくは１の２値を保持する。０の場合には、当該ビットに対応するインタフェースに既に送信されたメモリライトトランザクションの処理が完了していることを示す。処理が完了しているとは、メモリライトトランザクションの場合、当該メモリライトトランザクションで書き込まれるべきデータが、計算機のプロセッサから観測可能になっていることを示す。１の場合には当該ビットに対応するインタフェースに既に送信されたメモリライトトランザクションのうち、処理が完了していないメモリトランザクションが存在する可能性があることを示す。
【００８５】
完了状況記憶部３１１は、実装形態の一例としては、ビット数と同数のフリップフロップで実装することができる。ネットワークインタフェースアダプタ２０１が接続されるＰＣＩ  Ｅｘｐｒｅｓｓインタフェースと同数のフリップフロップを、ネットワークインタフェースアダプタ２０１内に用意すれば良いので、ハードウェアの物量という面では、大きな負担にならない。
【００８６】
図６に分配情報記憶部３０８の構成の一例を示す。分配情報記憶部は、主記憶アドレス上のある範囲を示すアドレス範囲情報１７０２と、ネットワークインタフェースアダプタ２０１が接続される複数のＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−２，２０２−３，２０２−４の何れか１つ、ないしは、複数の組み合わせを示すインタフェース指定情報１７０３、及び、前記アドレス範囲情報１７０２及び前記インタフェース指定情報１７０３の組が有効か無効かを示す有効フラグ１７０１、の３つの情報を１つの組としたエントリを最低１エントリ以上記憶している。図６の例では５エントリ（５行）の情報を有している。５エントリ未満しか使用しない場合には、未使用のエントリには有効フラグ１７０１に０（無効）をセットしておく。図６に示す分配情報記憶部３０８の３エントリ目（３行目）のエントリは無効化されているエントリである。
【００８７】
アドレス範囲情報１７０２は、例えばベースアドレスとリミット値の組で構成することができる。この場合、あるアドレスＡが与えられたとして、ベースアドレス＜＝アドレスＡ＜＝（ベースアドレス＋リミット値）の関係を満たせば、アドレスＡが当該アドレス範囲に属しているものと判定できる。
【００８８】
但し、主記憶アドレス空間全体を網羅するようにアドレス範囲情報１７０２が指定されるとは限らないので、いずれのアドレス範囲にも属さなかった時に送信先として選択すべきインタフェースを定めておく必要がある。図６の場合は、５エントリ目（５行目）で、アドレス範囲情報としてその他のアドレスとなっているように、他のどのアドレス範囲にも属さなかった対象アドレスのメモリトランザクションが送信されるべきインタフェースを示す情報を記憶できるようにしている。
【００８９】
この分配情報記憶部３０８で設定する分配情報は、アプリケーションソフトウェアの特性等に適したものにすることが可能であるが、一般的な使用方法としては、メモリトランザクションがその対象アドレスを担う主記憶装置が接続されている主記憶制御部に、短い時間で到達し、かつ、計算機２０３内のインターコネクトの混雑を防ぐような設定とする。その設定の一例を、図４で示す計算機２０３の場合を例にして説明する。
【００９０】
図４の計算機２０３で、主記憶装置４０２−１がアドレス範囲Ａを、主記憶装置４０２−２がアドレス範囲Ｂを、主記憶装置４０２−３がアドレス範囲Ｃを、主記憶装置４０２−４がアドレス範囲Ｄを担っているものとする。なお、ネットワークインタフェースアダプタの構成は図３の通りである。この場合は、アドレス範囲Ａとアドレス範囲ＣがＩ／Ｏハブ４００−１、アドレス範囲Ｂとアドレス範囲ＤがＩ／Ｏハブ４００−２に、それぞれ相対的に近いことになる。よって、アドレス範囲Ａないしはアドレス範囲Ｃに属する主記憶アドレスに対するメモリトランザクションはＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１ないしは２０２−２、アドレス範囲Ｂないしはアドレス範囲Ｄに属する主記憶アドレスに対するメモリトランザクションはＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−３ないしは２０２−４に送信されれば、データ転送のスループットを向上させることができる。そのためには、分配情報記憶部３０８の設定を、アドレス範囲Ａないしはアドレス範囲Ｃに属する主記憶アドレスに対するメモリトランザクションはＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１ないしは２０２−２、アドレス範囲Ｂないしはアドレス範囲Ｄに属する主記憶アドレスに対するメモリトランザクションはＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−３ないしは２０２−４に送信する設定にすれば良い。
【００９１】
上記した、図４の計算機２０３での分配情報記憶部３０８の設定例の説明図を図７に示す。上記図６では、アドレス範囲Ｃに属する場合にＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−３に分配する設定を無効にする例を示したが、図４の経路の全てを実現するための分配情報記憶部３０８のエントリは図７に示すようになる。すなわち、１エントリ目（１行目）の有効ビットを１（有効）、アドレス範囲情報にアドレス範囲Ａ、インタフェース指定情報にＰＣＩ  Ｅｘｐｅｒｓｓインタフェース２０２−１、２０２−２を示す情報を記録する。２エントリ目（２行目）の有効ビットを１（有効）、アドレス範囲情報にアドレス範囲Ｂ、インタフェース指定情報にＰＣＩ  Ｅｘｐｅｒｓｓインタフェース２０２−３、２０２−４を示す情報を記録する。３エントリ目（３行目）の有効ビットを１（有効）、アドレス範囲情報にアドレス範囲Ｃ、インタフェース指定情報にＰＣＩ  Ｅｘｐｅｒｓｓインタフェース２０２−１、２０２−２を示す情報を記録する。４エントリ目（４行目）の有効ビットを１（有効）、アドレス範囲情報にアドレス範囲Ｄ、インタフェース指定情報にＰＣＩ  Ｅｘｐｅｒｓｓインタフェース２０２−３、２０２−４を示す情報を記録する。５エントリ目（５行目）の有効ビットを１（有効）、アドレス範囲情報にその他のアドレスを示す情報、インタフェース指定情報にＰＣＩ  Ｅｘｐｅｒｓｓインタフェース２０２−１を示す情報を記録する。
【００９２】
図８に分配方法設定部３０９の構成の一例を示す。図８で示す一例では、分配方法設定部３０９は、分配方法指定レジスタ１８００とインタフェース有効／無効ビット１８０１，１８０２，１８０３，１８０４を備える。インタフェース有効／無効ビットのビット数は、ネットワークインタフェースアダプタ２０１と計算機２０３を接続するＰＣＩ  Ｅｘｐｒｅｓｓインタフェースの数と同数（すなわち、ネットワークインタフェースアダプタ２０１が持つＰＣＩ  Ｅｘｐｒｅｓｓエンドポイントとも同数）であり、図３で示されるネットワークインタフェースアダプタ２０１の一例ではＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−２，２０２−３，２０２−４の数に合わせて４個としている。
【００９３】
分配方法指定レジスタ１８００はメモリトランザクション分配部３０５が、複数のＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−２，２０２−３，２０２−４に対してメモリトランザクションを分配する方法を指定するレジスタである。分配方法指定レジスタ１８００のビット数が３ビットだった場合、例えばレジスタの記憶内容が２進数で０００の時は分配を行わずＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１に固定的にメモリトランザクションを送信し、レジスタの記憶内容が２進数で００１の時にはＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−２に固定的にメモリトランザクションを送信し、レジスタの記憶内容が２進数で０１０の時にはＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−３に固定的にメモリトランザクションを送信し、レジスタの記憶内容が２進数で０１１の時にはＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−４に固定的にメモリトランザクションを送信し、２進数で１００の時には分配情報記憶部３０８に記憶されているアドレス範囲情報とメモリトランザクションの対象アドレスを比較することによりメモリトランザクションを送信するインタフェースを選択する分配方法とする。さらに、レジスタの記憶内容が２進数で１０１の時にはラウンドロビン方式でインタフェースを選択する分配方法、というように、分配方法指定レジスタ１８０３に設定した値の内容により、メモリトランザクション分配部３０５の動作を変更させることを可能とする。
【００９４】
インタフェース有効／無効ビット１８０１，１８０２，１８０３，１８０４は、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−２，２０２−３，２０２−４それぞれを、メモリトランザクションの分配先として使うか否かを指定する。例えば、ラウンドロビン方式でメモリトランザクションの分配を行っているところで、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１の有効／無効ビット１８０１が１（有効）、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−２の有効／無効ビット１８０２が０（無効）、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−３の有効／無効ビット１８０３が１（有効）、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−４の有効／無効ビットが０（無効）の場合、ラウンドロビン方式での分配において、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−２の有効／無効ビット１８０２に対応するＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−２と、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−４有効／無効ビット１８０４に対応するＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−４は選択されず、他の有効なインタフェースのみでラウンドロビン方式による分配を行う。すなわち、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−３のみに、ラウンドロビン方式によるメモリトランザクションの分配が行われる。分配方法指定レジスタ１８００でラウンドロビン方式が指定されている場合に限らず、例えば分配情報記憶部３０８に記憶されているアドレス変換情報に基づく分配の場合などでも、上記の例と同様に、インタフェース有効／無効ビット１８０１，１８０２，１８０３，１８０４で選択された特定のインタフェースを使わずに動作させることができる。これにより、いずれかのエンドポイント、エンドポイントに接続されるインタフェース、ないしは、Ｉ／Ｏハブに故障等の問題が生じた場合にでも、当該インタフェースをメモリトランザクションが分配される対象から外すことによって、縮退して動作し続けることが可能になる。
【００９５】
分配方法指定レジスタ１８００に対する各ビット及び有効／無効ビットの設定は、計算機２０３のソフトウェアから行うことができる。
【００９６】
図９、図１０、図１１に、ネットワークインタフェースアダプタ２０１でＲＤＭＡ転送を行うためのパケットの一例を示す。図９はＲＤＭＡ書き込みを要求するためのＲＤＭＡライト要求パケットの一例を示す説明図である。図１０はＲＤＭＡ読み込みを要求するためのＲＤＭＡリード要求パケットの一例を示す説明図である。図１１はＲＤＭＡ読み込み要求に対して、読み込みを要求されたデータを返すためのＲＤＭＡリード応答パケットの一例を示す説明図である。
【００９７】
図９のＲＤＭＡライト要求パケット１４００は、コマンド１４０１、送信先ノードＩＤ１４０２、送信元ノードＩＤ１４０３、フラグ１４０４、パケットシーケンス番号１４０５、ライト先アドレス１４０６、認証キー１４０７、データ長１４０８、データ１４０９、ＣＲＣ１４１０を含んでいる。
【００９８】
コマンド１４０１は、パケットによって送信元から送信先へ要求する処理の内容を示す。ＲＤＭＡライト要求パケット１４００であれば、コマンド１４０１にはＲＤＭＡライト要求であることを示す情報を含む。
【００９９】
送信先ノードＩＤ１４０２は、本パケットの送信先のノードを識別する情報である。送信元ノードＩＤ１４０３は、本パケットの送信元のノードを識別する情報である。
【０１００】
フラグ１４０４は、パケットの属性を表す情報を含む。フラグ１４０４で示されるパケットの属性としては、単一のＲＤＭＡ要求を構成する一連のパケットの最初のパケットであることを示すファーストパケット属性、単一のＲＤＭＡ要求を構成する一連のパケットの最後のパケットであることを示すラストパケット属性、単一のＲＤＭＡ要求を構成する唯一つパケットであることを示すオンリーパケット属性、パケット送達確認のためのＡＣＫを要求するパケットであることを示すＡＣＫ要求属性、パケットで要求される処理が完了したことを通知することを要求する完了通知要求属性を含む。これらの属性は複数を組み合わせて用いることがあり、例えば、複数のパケットで構成される単一のＲＤＭＡ要求で、当該ＲＤＭＡ要求が完了したときに通知を行いたい場合、前記パケット群の最後のパケットのフラグ１４０４はラストパケット属性と完了通知要求属性を持つことになる。
【０１０１】
パケットシーケンス番号１４０５は、パケットの送信元がパケット毎に順番に付加していく。パケットを受信した側は、パケットシーケンス番号１４０５を検査し、順番通りに到達していることを確認する。もし、パケットシーケンス番号の抜けがあった場合には、当該パケットの送信元にＮＡＣＫパケットを送信し、再送を要求する。
【０１０２】
データ１４０９は送信先ノードの主記憶に書き込みたいデータであり、ライト先アドレス１４０６で書き込み先の仮想アドレスを指定する。データ長１４０８は、データ１４０９の大きさである。
【０１０３】
ＲＤＭＡライト要求パケットを受信したノード、すなわち送信先ノードＩＤ１４０２で示されるノードは、ＲＤＭＡライト要求パケットの送信を要求した送信元ノードＩＤ１４０３で示されるノード上のソフトウェアが、ライト先アドレス１４０６で示される主記憶上の領域に対して、データの書き込む権限を有するかを、認証キー１４０７を用いて検査する。
【０１０４】
ＣＲＣ１４１０は、ＲＤＭＡライト要求パケット１４００のビット列に誤りがないかどうかの検査を行う巡回冗長検査符号であり、誤りが検出された場合には、当該パケットは受信側に到達していないものとみなし、当該パケットの送信元にＮＡＣＫパケットを送信し、再送を要求する。
【０１０５】
図１０のＲＤＭＡリード要求パケット１５００と、図１１のＲＤＭＡリード応答パケット１６００は、ＲＤＭＡリード要求とそれに対する応答を行うために対になって用いられる。
【０１０６】
図１０のＲＤＭＡリード要求パケット１５００は、コマンド１５０１、送信先ノードＩＤ１５０２、送信元ノードＩＤ１５０３、フラグ１５０４、パケットシーケンス番号１５０５、リード先アドレス１５０６、認証キー１５０７、データ長１５０８、ＣＲＣ１５０９を含んでいる。
【０１０７】
図１１のＲＤＭＡリード応答パケット１６００は、コマンド１６０１、送信先ノードＩＤ１６０２、送信元ノードＩＤ１６０３、フラグ１６０４、パケットシーケンス番号１６０５、データ長１６０６、データ１６０７、ＣＲＣ１６０８を含んでいる。
【０１０８】
ＲＤＭＡリード要求パケット１５００及びＲＤＭＡリード応答パケット１６００のいずれも、フラグ１５０４、１６０４、パケットシーケンス番号１５０５、１６０５、ＣＲＣ１５０９、１６０８と、それに付随する完了通知、ＡＣＫパケット及びＮＡＣＫパケットの取り扱いに関しては、ＲＤＭＡライト要求パケット１４００の場合と共通であるので、説明を省略する。
【０１０９】
ＲＤＭＡリード要求パケット１５００を受信したノード、すなわち、送信先ノードＩＤ１５０２で示されるノードは、認証キー１５０７を検査し、リード先アドレス１５０６に対する読み込みを認証できれば、リード先アドレス１５０６からデータ長１５０８で示される長さのデータを読み込み、ＲＤＭＡリード応答パケットによって、ＲＤＭＡリードの要求元にデータを返す。よって、ＲＤＭＡリード応答パケットの送信先ノードＩＤ１６０２はＲＤＭＡリード要求パケットの送信元ノードＩＤ１５０３になり、ＲＤＭＡリード応答パケットの送信元ノードＩＤ１６０３はＲＤＭＡリード要求パケットの送信先ノードＩＤ１５０２になる。読み込まれたデータはデータ１６０７に格納されて、ＲＤＭＡリード要求元のノードへ返される。
【０１１０】
図１３、図１４、図１５、図１６に、ネットワークインタフェースアダプタ２０１が、ネットワークを介して接続される他のノードに対してＲＤＭＡ転送を要求する場合の動作、及び、他のノードからＲＤＭＡ転送を要求された場合の動作を、フローチャートの形で示す。なお、このフローチャートは、ネットワークインタフェースアダプタ２０１全体としての動作を示しており、フローチャートを構成する各ステップはそれぞれネットワークインタフェースアダプタ２０１を構成する１つもしくは複数の構成要素によって担われる。
【０１１１】
図１３は、ネットワークインタフェースアダプタ２０１のコントローラ２０が、他のノードからＲＤＭＡライト要求パケット１４００を受け取ったときの処理を示すフローチャートである。ネットワークインタフェースアダプタ２０１が、他のノードからＲＤＭＡライト要求パケットを受け取り、ＣＲＣ１４１０及びパケットシーケンス番号１４０５の検査を完了すると、コントローラ２０は、まずステップＳ１００１でパケットの送達確認のためのＡＣＫが要求されているかを調べる。
【０１１２】
ＲＤＭＡライト要求パケットの送信元ノードが、当該パケットが送信先に到達したことを確認したい時、フラグ１４０４にＡＣＫを要求するフラグを付加してＲＤＭＡライト要求パケットを送信する。ステップＳ１００１で、コントローラ２０がフラグ１４０４にＡＣＫ要求が有ると判定した場合、ステップＳ１００２において当該ＲＤＭＡライト要求パケットの送信元に対してＡＣＫパケットを返す。
【０１１３】
ステップＳ１００３では、コントローラ２０が認証キー１４０７を検査し、ライト先アドレス１４０６に書き込みを行う権限を有しているかどうかを確認した後に、ライト先アドレス１４０６を仮想アドレスから物理アドレスにアドレス変換し、当該物理アドレスに対してデータ１４０９を書き込むメモリライトトランザクションを生成する。なお、このとき、ＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３１０−−１，３１０−２，３１０−３，３１０−４や計算機２０３内のＩ／Ｏハブ４００−１，４００−２、インターコネクト、ないしは、主記憶制御部などの制約により、単一のＲＤＭＡライト要求パケットに含まれるデータを、複数のメモリライトトランザクションに分割することがある。例えば、ＲＤＭＡライト要求パケットに４ＫＢのデータが含まれており、計算機２０３のＩ／Ｏハブ４００−１，４００−２が一つのメモリトランザクションに含まれるデータの大きさを最大２５６Ｂとしている場合に、前記ＲＤＭＡライト要求パケットは、少なくとも１６個以上のメモリライトトランザクションに分割される。このメモリトランザクションを、メモリトランザクション分配部３０５でＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１、２０２−２、２０２−３、２０２−４に分配し、計算機２０３に対して送信する。
【０１１４】
ステップＳ１００４では、コントローラ２０が計算機２０３に送信した、ＲＤＭＡライト要求パケットに含まれるデータを主記憶に書き込むためのメモリライトトランザクションによる計算機２０３の主記憶装置への書き込みが、全て完了したことを確認し、完了したことを計算機２０３で動作するソフトウェア、ないしは、ＲＤＭＡライト要求パケットの送信元に通知する完了通知要求があるかどうかを、フラグ１４０４から判断する。ＲＤＭＡライト要求パケットの送信元がフラグ１４０４に完了通知要求を示すフラグを付加している場合には、ステップＳ１００５、ステップＳ１００６、及び、ステップＳ１００７においてコントローラ２０が、完了保証及び完了の通知を行う。
【０１１５】
ステップＳ１００５では、コントローラ２０が、図１７ないしは図１８で示される完了保証処理を行う。図１７及び図１８で示される完了保証処理の詳細な説明は後述する。ステップＳ１００６では、ステップＳ１００５においてメモリライトトランザクションによる計算機２０３の主記憶装置への書き込みの完了が保証されたことを判断し、この完了が保証された時に、コントローラ２０はステップＳ１００７において計算機２０３で動作するソフトウェア、ないしは、ＲＤＭＡライト要求パケットの送信元にメモリライトトランザクションによるデータ書き込みの完了を通知する。
【０１１６】
ステップＳ１００７では、計算機２０３で動作するソフトウェアにメモリライトトランザクションによるデータ書き込みの完了を通知する場合、ＲＤＭＡライト要求パケットによってデータが書き込まれた仮想アドレス空間を使っているユーザアプリケーションに対して、コントローラ２０が当該ユーザアプリケーションの領域内にＲＤＭＡライト要求によるデータの書き込みを行ったことを通知する。また、ＲＤＭＡライト要求パケットの送信元にメモリライトトランザクションによるデータ書き込みの完了を通知する場合、コントローラ２０がデータ書き込み完了を示すパケットを生成し、当該ノードに送信する。
【０１１７】
図１４は、ネットワークインタフェースアダプタ２０１のコントローラ２０が、他のノードからＲＤＭＡリード要求パケット１５００を受け取ったときの処理を示すフローチャートである。ネットワークインタフェースアダプタ２０１のコントローラ２０が、他のノードからＲＤＭＡリード要求パケット１５００を受け取り、ＣＲＣ１５０９及びパケットシーケンス番号１５０５の検査を完了すると、まずステップＳ１１０１でパケットの送達確認のためのＡＣＫが要求されているかを調べる。
【０１１８】
ＲＤＭＡリード要求パケットの送信元ノードが、当該パケットが送信先に到達したことを確認したい時、送信元ノードはフラグ１５０４にＡＣＫを要求するフラグを付加してＲＤＭＡリード要求パケットを送信する。ステップＳ１１０１で、コントローラ２０はＡＣＫ要求が有ると判定した場合、ステップＳ１１０２において当該ＲＤＭＡリード要求パケットの送信元に対してＡＣＫパケットを返す。ステップＳ１１０３では、認証キー１５０７を検査し、リード先アドレス１５０６に読み込みを行う権限を有しているかどうかを確認した後に、リード先アドレス１５０６を仮想アドレスから物理アドレスにアドレス変換し、当該物理アドレスに対してデータ長１５０８で示される長さのデータの読み込みを要求するメモリリードトランザクションを発行する。
【０１１９】
なお、このとき、ＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３１０−１，３１０−２，３１０−３，３１０−４や計算機２０３のインターコネクト、ないしは、主記憶制御部などの制約により、単一のＲＤＭＡリード要求パケットで要求されているデータ長のメモリリードを、複数のメモリリードトランザクションに分割することがある。このメモリリードトランザクションを、メモリトランザクション分配部３０５でＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−２，２０２−３，２０２−４に分配し、計算機２０３に対して送信する。
【０１２０】
ステップＳ１１０４でコントローラ２０は前記メモリリードトランザクションに対する応答のトランザクションを計算機２０３から受信すると、応答のトランザクションに含まれるデータを元にＲＤＭＡリード応答パケット１６００を生成してＲＤＭＡリード要求パケットの送信元に送信する。ＲＤＭＡリード応答パケットが送信先に正しく到着したか送達確認をしたい場合、フラグ１６０４にＡＣＫ要求を入れる。この処理をステップＳ１１０５で示すように、前記メモリリードトランザクションに対する応答のトランザクションが全て揃うまで続け、全て完了したところで、他のノード（送信元）からのＲＤＭＡリード要求に対する処理は完了となる。
【０１２１】
図１５は、ネットワークインタフェースアダプタ２０１のコントローラ２０が、他のノードにＲＤＭＡライト要求パケットを送るときの処理を示すフローチャートである。
【０１２２】
ネットワークインタフェースアダプタ２０１が接続されている計算機２０３の上で動作しているソフトウェアから、他のノードへのＲＤＭＡライト要求があると、ステップＳ１２０１において、コントローラ２０は、当該ＲＤＭＡライト要求において指定されているローカルノード上の主記憶アドレス、すなわちリモートノードに転送するデータが格納されているアドレスに対するメモリリードトランザクションを生成して計算機２０３に送信する。このとき、単一のメモリリードトランザクションで要求できるデータ長に制約があり、それゆえ、複数のメモリリードトランザクションに分割しなければならない場合があるのは、前述したネットワークインタフェースアダプタ２０１がＲＤＭＡリード要求パケットを受信した場合の処理と同様である。
【０１２３】
ステップＳ１２０２において、前記メモリリードトランザクションに対する応答のトランザクションを計算機２０３から受信すると、コントローラ２０は、そのデータを含むＲＤＭＡライト要求パケットを生成して他のノードへ送信する。この処理をステップＳ１２０３で示すように、前記メモリリードトランザクションに対する応答のトランザクションが全てそろうまで繰り返して実行し、全て完了したところで、他のノードへのＲＤＭＡライト要求が完了する。
【０１２４】
図１６は、ネットワークインタフェースアダプタ２０１のコントローラ２０が、他のノードにＲＤＭＡリード要求パケットを送るときの処理、及び、当該ノードから送られてくるＲＤＭＡリード応答パケットを受け取ったときの処理を示すフローチャートである。
【０１２５】
ネットワークインタフェースアダプタ２０１が接続されている計算機２０３の上で動作するソフトウェアの要求に応じて、コントローラ２０は、ステップＳ１３０１でＲＤＭＡリード要求パケットを生成して他のノードへ送信する。
【０１２６】
ＲＤＭＡリード要求パケットを受信したノードは、図１４に示す処理によりＲＤＭＡリード応答パケットを返信してくるが、コントローラ２０はステップＳ１３０２においてＲＤＭＡリード応答が返ってくるのを待つ。コントローラ２０はＲＤＭＡリード応答パケットを受信すると、ＲＤＭＡリード応答パケット１６００のＣＲＣ１６０８及びパケットシーケンス番号１６０５の検査を行う。この検査が完了すると、コントローラ２０はステップＳ１３０３において、ＲＤＭＡリード応答パケット１６００のフラグ１６０４を検査し、ＡＣＫ要求がある場合にはステップＳ１３０４においてＡＣＫパケットを送信元へ返信し、ＲＤＭＡリード応答パケットを受け取ったことを通知する。
【０１２７】
その後、コントローラ２０は、ステップＳ１３０５において、受信したＲＤＭＡリード応答パケットに含まれるデータを主記憶装置に書き込むためのメモリライトトランザクションを発行する。なお、このとき、ＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３１０−−１，３１０−２，３１０−３，３１０−４や計算機２０３のインターコネクトないしは主記憶制御部などの制約により、単一のＲＤＭＡリード応答パケットに含まれるデータを、複数のメモリライトトランザクションに分割することがある。この場合、コントローラ２０は、メモリトランザクションを、メモリトランザクション分配部３０５でＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−２，２０２−３，２０２−４に分配し、計算機２０３に対して送信する。
【０１２８】
ステップＳ１３０６において、コントローラ２０は、ＲＤＭＡリード応答パケットに含まれるデータの主記憶への書き込みが完了したことを、計算機２０３で動作するソフトウェア、ないしは、ＲＤＭＡリード応答パケットの送信元ノードに通知する完了通知要求があるかどうかを、フラグ１６０４から判断する。ＲＤＭＡリード応答パケットの送信元がフラグ１６０４に完了通知要求を示すフラグを付加している場合には、コントローラ２０はステップＳ１３０７、ステップＳ１３０８、及び、ステップＳ１３０９において完了保証及び完了の通知を行う。ステップＳ１３０７では、図１７ないしは図１８で示される完了保証処理を行う。ステップＳ１３０８では、ステップＳ１３０７において書き込みの完了が保証されたことを判断し、書き込み完了が保証された時に、コントローラ２０はステップＳ１３０９において計算機２０３で動作するソフトウェア、ないしは、ＲＤＭＡリード応答パケットの送信元ノードに書き込みの完了を通知する。
【０１２９】
ステップＳ１３０９では、計算機２０３で動作するソフトウェアに対して書き込みの完了を通知する場合には、当該ＲＤＭＡリード応答パケットに対応するＲＤＭＡリード要求パケットを送信する元となったＲＤＭＡリード要求をネットワークインタフェースアダプタ２０１に対して行った、計算機２０３上で動作するソフトウェアに対して、コントローラ２０が主記憶装置に対するデータの書き込み終わったことを通知する。また、ＲＤＭＡリード応答パケットの送信元ノードに対して書き込みの完了を通知する場合には、コントローラ２０は当該ノードに対して書き込みの完了を通知するパケットを生成し、送信する。
【０１３０】
図１７及び図１８に、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェースのプロトコルを利用してネットワークインタフェースアダプタ２０１で完了保証を行うための、完了保証部３１２で行われる完了保証の動作をフローチャートとして示している。以下に図１７及び図１８それぞれの動作に関して、詳しく説明する。なお、図１７ないしは図１８で示される完了保証の動作を行っている最中は、完了保証のためのメモリトランザクションの送信が乱されることを防ぐために、コントローラ２０は他のメモリトランザクションの分配と送信は行われないものとする。
【０１３１】
図１７に示すコントローラ２０の完了保証部３１２の処理は、計算機２０３に接続される全てのインタフェースに対して一律に完了保証用のメモリトランザクションを送信することで、先行するメモリトランザクションの完了を保証しようというものである。ＰＣＩ  Ｅｘｐｒｅｓｓでは、メモリリードトランザクションに対しては必ず応答のトランザクションがあるため、この応答のトランザクションを待つことで、メモリリードトランザクションの完了を知ることが出来る。一方、メモリライトトランザクションに関しては、応答のトランザクションが無いため、メモリライトトランザクションを出した側が、その完了を知ることはできない。よって、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェースのプロトコルで規定される、メモリライトトランザクションとメモリリードトランザクションの順序関係を利用して、メモリライトトランザクションに関しても、当該メモリトランザクションを送信した側が、その完了を知る手段を実現する。
【０１３２】
完了保証が要求されると、コントローラ２０はステップＳ８０１において、ネットワークインタフェースアダプタ２０１に接続される全てのＰＣＩ  Ｅｘｐｒｅｓｓインタフェース、すなわち、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−２，２０２−３，２０２−４にメモリリードトランザクションをそれぞれ送信する。すなわち、各ＰＣＩ  Ｅｘｐｒｅｓｓインタフェースに接続されている、ネットワークインタフェースアダプタ２０１内の４個のＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント３１０−１，３１０−２，３１０−３，３１０−４のそれぞれに１個ずつ、合計４個のメモリリードトランザクションを送信する。このとき、メモリリードトランザクションで読み込む主記憶装置のアドレスは、メモリライトトランザクションの完了保証用に予め設定した値を用いればよい。
【０１３３】
ＰＣＩ  Ｅｘｐｒｅｓｓの規格において、メモリリードトランザクションは先行して送信されたメモリライトトランザクションを追い越すことは出来ないとされている。よって、ＰＣＩ  Ｅｘｐｒｅｓｓの規格に沿って構成されているＩ／Ｏハブを有する計算機２０３であれば、先行するメモリライトトランザクションを全て処理した後に、当該メモリリードトランザクションを処理し、当該メモリリードトランザクションに対する応答のトランザクションを返す。すなわち、ネットワークインタフェースカード２０１から見ると、前記メモリリードトランザクションに対応する応答のトランザクションが返ってきた時点では、当該メモリリードトランザクションを送信したＰＣＩ  Ｅｘｐｒｅｓｓインタフェースに、当該メモリリードトランザクションに先行して送信したメモリライトトランザクションは書き込みが完了しているものと見なせる。よって、ステップＳ８０２において、ステップＳ８０１で送信した全てのメモリリードトランザクションに対する応答を待つ。
【０１３４】
全てのメモリリードトランザクションに対する応答のトランザクションを受信すると、完了保証部３１２はＳ８０３にて完了保証を要求した計算機２０３のソフトウェアまたはリモートノードに対して完了通知を送信して処理を完了する。
【０１３５】
また、ステップＳ８０１で送信した完了保証のためのメモリリードトランザクションに先行して送信されたメモリリードトランザクション（完了保証のためのメモリリードトランザクションではなく、ＲＤＭＡ要求の処理のために必要となる、データを主記憶から読み出すためのメモリリードトランザクション）も全て処理済であることを保証するためには、先行して送信されたメモリリードトランザクションに対する応答が全て到着するまで待てばよい。上記のステップにより、先行するメモリトランザクションの完了を保証できる。
【０１３６】
しかし、前述したように、この方法では、先行するメモリライトトランザクションが無いインタフェースに対しても完了保証のためのメモリリードトランザクションを送信してしまい、インタフェース及び計算機内のインターコネクトに無用の負荷をかけてしまう。      
【０１３７】
そこで、完了保証に必要となるメモリリードトランザクションの送信量を低減させるために、本発明ではネットワークインタフェースアダプタ２０１に完了状況記憶部３１１を備える。完了状況記憶部３１１を用いた完了保証を行う完了保証部３１２の動作を図１８に示す。
【０１３８】
図１８は本発明のネットワークインタフェースアダプタ２０１のコントローラ２０で行われるメモリライトトランザクションの完了保証の一例を示すフローチャートである。なお、この処理は図３においては完了保証部３１２が行う処理となる。
【０１３９】
ステップＳ９０１で、コントローラ２０の完了保証部３１２は、メモリライトトランザクションの書き込みの完了保証のためのメモリリードトランザクションを計算機２０３に送信する。上記図１７に示した完了保証のステップＳ８０１と異なるのは、全てのインタフェースに対して送信するのではなく、完了状況記憶部３１１において、未完了なメモリライトトランザクションが残っている可能性があると示されているインタフェースに対してのみ、完了保証のためのメモリリードトランザクションを送信することである。なお、完了状況記憶部３１１に各インタフェースに先行して発行されているメモリライトトランザクションのうち、未完了のものがあるかどうかを設定する役割は、メモリトランザクション分配部３０５が担っており、その動作については既に述べた通りである。
【０１４０】
すなわち、メモリトランザクション分配部３０５は、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−２，２０２−３，２０２−４のいずれかを介して、計算機２０３の主記憶装置ないしは主記憶制御部に対してメモリライトトランザクションを発行すると、完了状況記憶部３１１のビット６０１，６０２，６０３，６０４のうち、メモリライトトランザクションを発行したＰＣＩ  Ｅｘｐｒｅｓｓインタフェースに対応するビットを「１」に設定する。
【０１４１】
メモリトランザクションの完了保証を行う完了保証部３１２は、完了状況記憶部３１１のビット６０１，６０２，６０３，６０４のうち、「１」が設定されているＰＣＩ  Ｅｘｐｒｅｓｓインタフェースにメモリトランザクションの完了保証のメモリリードトランザクションを送信する。ステップＳ９０２で、コントローラ２０は送信した完了保証用のメモリリードトランザクションに対応する応答のトランザクションを受信すると、当該メモリリードトランザクションを送信したインタフェースに、先行して送信されているメモリライトトランザクションが全て完了したことが保証できる。このため、コントローラ２０の完了保証部３１２は、ステップＳ９０２において、完了状況記憶部３１１に当該メモリリードトランザクションを送信し、それに対する応答トランザクションが返ってきたインタフェースに関して、先行して送信したメモリライトトランザクションが全て完了したことを示す情報を記憶させる。具体的には、完了状況記憶部３１１のビット６０１，６０２，６０３，６０４のうち、完了保証用に送信したメモリリードトランザクションに対する応答トランザクションが返ってきたインタフェースに対応するビットを「０」にする。そして、コントローラ２０の完了保証部３１２はステップＳ９０３において、ステップＳ９０１で送信した完了保証用のメモリリードトランザクションに対する応答のトランザクションを全て受信するまで待つ。すなわち、完了状況記憶部３１１のビット６０１，６０２，６０３，６０４全てが「０」になるまで待つ。
【０１４２】
そして、コントローラ２０の完了保証部３１２が送信した完了保証のためのメモリリードトランザクションに対する応答トランザクションを全てを受信すると、Ｓ９０４でコントローラ２０は完了通知を計算機２０３またはリモートノードに通知し、計算機２０３のソフトウェアまたはリモートノードが要求したメモリトランザクション（特にメモリライトトランザクション）が完了したことを保証する。
【０１４３】
上記のステップにより、完了保証部３１２は、完了状況記憶部３１１を参照することで先行して送信された、まだ書き込み処理が完了していない可能性があるメモリライトトランザクションが存在するＰＣＩ  Ｅｘｐｒｅｓｓインタフェースのみに完了保証のためのメモリリードトランザクションを発行することができ、先行するメモリライトトランザクションのないインタフェースに完了保証用のメモリリードトランザクションを送信することがなくなって、図１７の場合よりメモリトランザクションの発行数を削減して、完了保証を行うことが可能になる。
【０１４４】
図１３で示したＲＤＭＡライト要求パケットの処理において、メモリトランザクション分配部３０５が完了状況記憶部３１１に設定する内容と、完了状況記憶部３１１の内容に基づいて図１８に示す方法で完了保証を行う完了保証部３１２の動作を、図１９のシーケンス図１９００と、図２０の完了状況記憶部３１１の状態を示す説明図を基にして説明する。
【０１４５】
図１９に示すシーケンス図１９００は、２つのノード１０２−１、１０２−３がそれぞれ独立して、ノード１０２−２にＲＤＭＡライト要求パケットを送信しているとき、前記ＲＤＭＡライト要求パケットがノード１０２−２に到着する時間的な順序を示すシーケンス図である。なお、図中ノード１０２−１〜１０２−３は、図１に示したノード１０２に添え字を付したものである。
【０１４６】
シーケンス図の上下方向で時間の変化を示し、左右方向でノードないはプロセスの違いを示している。ノード１０２−１上ではプロセス１９４１が動作しており、ノード１０２−２に対して、時系列でパケット１９１１，１９１２，１９１３を送信している状況をシーケンス図で説明している。同様に、ノード１０２−３上ではプロセス１９４３が動作しており、ノード１０２−２に対して、時系列でパケット１９３１，１９３２，１９３３を送信している状況をシーケンス図に示している。パケット１９１１，１９１２，１９１３は、ノード１０２−１からノード１０２−２への１つのＲＤＭＡライト要求を構成する一連のパケットである。パケット１９３１，１９３２，１９３３は、ノード１０２−３からノード１０２−２への１つのＲＤＭＡライト要求を構成する一連のパケットである。ノード１０２−２から見ると、ノード１０２−１から送信されたパケットとノード１０２−３から送信されたパケットが混ざって到達しており、ノード１０２−２は２つのＲＤＭＡライト要求を同時並行的に扱わなければならない。図１９で示すパケット１９１１，１９１２，１９１３、１９３１，１９３２，１９３３は、いずれもＡＣＫ要求が無いパケットとする。
【０１４７】
ここで、ノード１０２−２の動作を図１８、図１３、図１９、図２０に基づいて説明する。ノード１０２−２のネットワークインタフェースアダプタ２０１が有する完了状況記憶部３１１は、初期状態として図２０の完了状況２００１の状態になっている。まず、ＲＤＭＡライト要求パケット１９１１がパケット到達１９２１の時点でノード１０２−２に到達する。ここで、ノード１０２−２は図１３に示されるＲＤＭＡライト要求パケットを受信した際の処理を行う。まず、パケットシーケンス番号１４０５及びＣＲＣ１４１０の検査を行い、正常であると確認する。次に、ステップＳ１００１においてＡＣＫ要求の有無を確認するが、ＡＣＫ要求は無いので、ステップＳ１００３のメモリライトトランザクション生成及び送信に移行する。ここでは、ＲＤＭＡライト要求パケット１９１１に含まれるデータを、指定されたアドレスに書き込むための少なくとも１つ以上のメモリライトトランザクションが、メモリトランザクション発行部３０４において生成される。
【０１４８】
そして、生成されたメモリライトトランザクションはメモリトランザクション分配部３０５において、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−２，２０２−３，２０２−４の何れかのインタフェースに分配される。ＲＤＭＡライト要求パケット１９１１から生成されたメモリライトトランザクションは、分配の結果、全てＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１に送信されたものとする。この場合、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１に未完了のメモリライトトランザクションがある可能性が生じたことになるので、メモリトランザクション分配部３０５は完了状況記憶部３１１の状態を完了状況２００２で示すように、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１に対応するビット６０１を１とする。
【０１４９】
次に、ステップＳ１００５、ステップＳ１００６、ステップＳ１００７で示される完了通知のための処理が要求されているかをステップＳ１００４で検査するが、ＲＤＭＡライト要求パケット１９１１は完了通知を要求するフラグは含まれていないものとする。よって、以上でＲＤＭＡライト要求パケット１９１１の処理は完了する。
【０１５０】
これ以降、ノード１０２−２に到達するＲＤＭＡライト要求パケットも同様に処理される。ノード１０２−２はパケット到達１９２２において、ノード１０２−３からのＲＤＭＡライト要求パケット１９３１を受信し、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−３に対してメモリライトトランザクションを送信したとする。この時、完了状況記憶部の内容は、完了状況２００３で示す内容となる。パケット到達１９２３において、ノード１０２−３からのＲＤＭＡライト要求パケット１９３２を受信し、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−２に対してメモリトランザクションを送信したとする。この時、完了状況記憶部３１１の内容は、完了状況２００４で示す内容となる。パケット到達１９２４において、ＲＤＭＡライト要求パケット１９１２を受信し、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−２に対してメモリライトトランザクションを送信したとする。この時、完了状況記憶部は、完了状況２００５で示す内容となる。完了状況２００４と完了状況２００５は同一の内容であるが、完了状況記憶部を書き換える役割を担っているメモリトランザクション分配部３０５としては、メモリトランザクションの分配を行うたびに完了状況記憶部３１１の当該インタフェースのビットを操作している。
【０１５１】
パケット到達１９２５において、ＲＤＭＡライト要求パケット１９３３を受信し、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−２に対してメモリトランザクションを送信したとする。この時、完了状況記憶部３１１の内容は、図２０の完了状況２００６で示す内容となる。ＲＤＭＡライト要求パケット１９３３はラストパケット属性及び完了通知要求属性がフラグとして付与されている。よって、完了通知のための処理、すなわち図１３のステップＳ１００５，Ｓ１００６，Ｓ１００７が実行される。ステップＳ１００５によって行われる完了保証処理は、具体的には図１８のステップＳ９０１、Ｓ９０２、Ｓ９０３、Ｓ９０４である。ステップＳ９０１では、完了状況記憶部で未完了とされているインタフェース（完了状況記憶部３１１のビット６０１〜６０４のうち、値が「１」となっているビットに対応するインタフェース）、すなわち完了状況２００６で未完了とされているＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−２，２０２−３にメモリリードトランザクションを送信し、先行するメモリライトトランザクションを完了させる。ステップＳ９０２において、前記メモリリードトランザクションに対する応答トランザクションが返ってきたインタフェースに関しては完了保証部３１２が先行するメモリライトトランザクションが全て完了したものと判定して、完了状況記憶部３１１に当該インタフェースのメモリライトトランザクションは完了であるという情報を書き込む。
【０１５２】
すなわち、図２０の例では当該インタフェースに対応するビットを「０」とする。これをステップＳ９０３で示すように、前記メモリリードトランザクションに対する応答がすべてそろうまで繰り返すので、メモリリードトランザクションを送信したＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１，２０２−２，２０２−３は、いずれも先行して送信したメモリライトトランザクションが完了したことを保証され、完了状況記憶部３１１のインタフェースに対応するビットは「０」となる。よって、完了状況記憶部３１１は完了状況２００７に示すような内容になる。
【０１５３】
ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１に先行して送信されていたメモリライトトランザクションが全て完了したということは、ＲＤＭＡライト要求パケット１９１１に起因するメモリトランザクションが全て完了したことになる。ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−２に先行して送信されたメモリライトトランザクションが全て完了することで、ＲＤＭＡライト要求パケット１９１２，１９３２，１９３３に起因するメモリライトトランザクションが全て完了したことになる。ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−３に先行して送信されたメモリライトトランザクションが全て完了することで、ＲＤＭＡライト要求パケット１９３１に起因するメモリライトトランザクションが全て完了したことになる。
【０１５４】
よって、ＲＤＭＡライト要求パケット１９３３による完了通知要求により、ＲＤＭＡライト要求パケット１９１１，１９１２，１９３１，１９３２，１９３３に起因するメモリライトトランザクションは全て完了したことになる。ノード１０２−３からの１つのＲＤＭＡライト要求を構成する３つのＲＤＭＡライト要求パケット１９３１，１９３２，１９３３は、前記の通り全て完了しており、ノード１０２−３からのＲＤＭＡライト要求の完了が保証されていることになり、完了を通知することができる。
【０１５５】
パケット到達１９２６において、ＲＤＭＡライト要求パケット１９１３を受信し、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−４に対してメモリトランザクションを送信したとする。この時、完了状況記憶部３１１の内容は、完了状況２００８で示す内容となる。ＲＤＭＡライト要求パケット１９１３はラストパケット属性及び完了通知要求属性がフラグとして付与されている。よって、パケット到達１９２５の時と同様に、完了通知のための処理を行う。完了状況記憶部３１１は完了状況２００８で示されるように、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−４に先行して送信したメモリライトトランザクションが未完了のまま残っている可能性があることを示しているので、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−４に対してメモリリードトランザクションを送信し、それに対する応答のトランザクションを待って完了状況記憶部３１１のＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−４に対応するビットを０にする。これにより、完了状況記憶部３１１は完了状況２００９で示す状態になる。この完了保証で、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−４に先行して送信されていたメモリライトトランザクション、すなわちＲＤＭＡライト要求パケット１９１３に起因するメモリライトトランザクションが完了したことが保証される。ノード１０２−１からの１つのＲＤＭＡライト要求を構成するパケットは、このＲＤＭＡライト要求パケット１９１３以外に、ＲＤＭＡライト要求パケット１９１１、１９１２があるが、この２つのパケットは、パケット到達１９２５の時に行われた完了保証処理によって、すでに完了が保証されている。そして、パケット到達１９２６において、ＲＤＭＡライト要求パケット１９１３の完了が保証されたので、ノード１０２−１からの１つのＲＤＭＡライト要求を構成する３つのパケット１９１１，１９１２，１９１３が全て完了したことが保証され、当該ＲＤＭＡライト要求の完了通知が行えるようになった。
【０１５６】
もし、本発明で開示した完了状況記憶部３１１と、完了状況記憶部３１１の内容に基づいて動作する完了保証部３１２が無ければ、すなわち、図１７で示される処理を行う場合、上記の例において、パケット到達１９２５及びパケット到達１９２６のそれぞれの段階において、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１、２０２−２、２０２−３、２０２−４の全てに完了保証のためのメモリリードトランザクションを送信し、それぞれ全ての応答トランザクションを待つ必要が出てくる。この場合、合計８回のメモリリードトランザクション送信を行うことになる。一方、完了状況記憶部３１１を導入した上記の例では、合計４回のメモリリードトランザクション送信で済んでおり、完了保証処理のための付加的なトランザクション（メモリリードトランザクション）の送信に起因する、インタフェース及び計算機内のＩ／Ｏハブへの影響を低減することができている。
【０１５７】
以上説明したように、本実施の形態のデータ転送装置（ネットワークインタフェースアダプタ２０１）によれば、分配情報記憶部３０８、分配方法設定部３０９及び完了状況記憶部３１１などを有することにより、データ転送装置から主記憶装置へのデータ転送性能の向上を実現できる。計算機２０３の内部構成を考慮した分配情報が記憶された分配情報記憶部３０８に基づいてメモリトランザクション分配部３０５がメモリトランザクションを送信するインタフェースを選択することにより、データ転送装置から計算機の主記憶装置へのデータ転送性能を向上する。メモリトランザクション分配部３０５と完了保証部３１２によって更新される完了状況記憶部３１１に基づいて、未完了のメモリトランザクションが存在する可能性があるインタフェースにのみ、完了保証に必要な付加的なメモリトランザクションを送信することで、完了保証に伴うオーバヘッドを低減させ、データ転送装置から計算機の主記憶装置へのデータ転送性能に与える悪影響を抑えることが出来る。メモリトランザクション分配部３０５の分配方法及び分配先として用いるインタフェースの有効もしくは無効を、データ転送装置に接続される計算機の上で動作するソフトウェアから行うための分配方法設定部３０９によって、ソフトウェアの特性やデバッグ等の目的に応じて適切な分配方法を選択することを可能とし、複数のインタフェースのうちいくつかに異常があった場合に、異常のあるインタフェースを切り離して縮退動作することを実現する。
【０１５８】
上記の通り、本発明により、複数のインタフェースを介して計算機に接続されるデータ転送装置の、計算機の主記憶装置に対するデータ転送性能の向上を実現できる。
【０１５９】
なお、図４で示したように、計算機を構成する各プロセッサが主記憶制御部を有し、プロセッサ間接続ないしはプロセッサ−Ｉ／Ｏハブ間接続に、ＨｙｐｅｒＴｒａｎｓｐｏｒｔやＩｎｔｅｌ社のＱｕｉｃｋＰａｔｈ  Ｉｎｔｅｒｃｏｎｎｅｃｔのような、Ｐｏｉｎｔ−ｔｏ−Ｐｏｉｎｔ型のインターコネクトを用いるのではなく、ＦＳＢ（Ｆｒｏｎｔ  Ｓｉｄｅ  Ｂｕｓ）のような共有型バスによって構成されている計算機においても、本発明を適用したデータ転送装置を接続して、利用することが出来る。
【０１６０】
＜本発明を適用しない場合＞
次に、本発明を適用しなかった場合について検討する。図２１の計算機２０３Ａは、説明を簡易にするため、上記図４に示した計算機２０３を２プロセッサとしたものである。計算機２０３Ａは、ネットワークインタフェースアダプタ２０１を複数のインタフェースを介して接続するために、Ｉ／Ｏハブ５００−１、５００−２を備え、それぞれインターコネクト５０４−１、５０４−２を介して、プロセッサ５０１−１，５０１−２に接続される。Ｉ／Ｏハブ５００−１、５００−２はデータ転送装置を接続するための複数のインタフェース２０２−１，２０２−２，２０２−３，２０２−４を提供する。インタフェース２０２−１，２０２−２，２０２−３，２０２−４は、上記図４の計算機２０３と同様に、ＰＣＩ  Ｅｘｐｒｅｓｓのようなインタフェースである。これらのインタフェース２０２−１，２０２−２，２０２−３，２０２−４がネットワークインタフェースアダプタ２０１に接続される。
【０１６１】
プロセッサ５０１−１、５０２−２はそれぞれ、主記憶制御部を持ち、メモリバス５０３−１、５０３−２を介してそれぞれ主記憶装置に接続される。
【０１６２】
図２１において、プロセッサ５０１−１はメモリバス５０３−１を介して主記憶装置５０２−１へ、プロセッサ５０１−２はメモリバス５０３−２を介して主記憶装置５０２−２へ接続されている。プロセッサ５０１−１、５０１−２はインターコネクト５０５で相互に接続されている。インターコネクト５０４−１，５０４−２，５０５は、例えばＨｙｐｅｒＴｒａｎｓｐｏｒｔや上記ＱｕｉｃｋＰａｔｈ  Ｉｎｔｅｒｃｏｎｎｅｃｔのようなインターコネクトで構成される。計算機２０３Ａは単一の主記憶空間を持っており、主記憶装置５０２−１、５０２−２はそれぞれその一部を担っている。
【０１６３】
よって、図２１に示す計算機２０３Ａ内での、ネットワークインタフェースアダプタ２０１からのメモリトランザクションの処理は、次の４種類に分かれる。
【０１６４】
（１）ネットワークインタフェースアダプタ２０１からインタフェース２０２−１ないしは２０２−２を介して、主記憶装置５０２−１に属するアドレスに対するメモリトランザクションが送信された場合、メモリトランザクションはインタフェース２０２−１ないしは２０２−２、Ｉ／Ｏハブ５００−１、インターコネクト５０４−１、プロセッサ５０１−１を経由してプロセッサ５０１−１内の主記憶制御部に到達し、前記主記憶制御部がメモリバス５０３−１を介して主記憶装置５０２−１へ読み込みないしは書き込みを行う。主記憶装置５０２−１に対する読み込みの場合には、読み込み結果をネットワークインタフェースアダプタ２０１へ転送するためのメモリトランザクションは同じ経路の逆順、すなわち、プロセッサ５０１−１、インターコネクト５０４−１、Ｉ／Ｏハブ５００−１、インタフェース２０２−１ないしは２０２−２を経由してネットワークインタフェースアダプタ２０１に送信される。
【０１６５】
（２）ネットワークインタフェースアダプタ２０１からインタフェース２０２−３ないしは２０２−４を介して、主記憶装置５０２−２に属するアドレスに対してメモリトランザクションが送信された場合、メモリトランザクションはインタフェース２０２−３ないしは２０２−４、Ｉ／Ｏハブ５００−２、インターコネクト５０４−２、プロセッサ５０１−２を経由してプロセッサ５０１−２内の主記憶制御部に到達し、前記主記憶制御部がメモリバス５０３−２を介して主記憶装置５０２−２へ読み込みないしは書き込みを行う。主記憶装置５０２−２に対する読み込みの場合には、読み込み結果をネットワークインタフェースアダプタ２０１に転送するためのメモリトランザクションは同じ経路の逆順、すなわち、プロセッサ５０１−２、インターコネクト５０４−２、Ｉ／Ｏハブ５００−２、インタフェース２０２−３ないしは２０２−４を経由してネットワークインタフェースアダプタ２０１に送信される。
【０１６６】
（３）ネットワークインタフェースアダプタ２０１からインタフェース２０２−１ないしは２０２−２を介して、主記憶装置５０２−２に属するアドレスに対するメモリトランザクションが送信された場合、メモリトランザクションはインタフェース２０２−１ないしは２０２−２、Ｉ／Ｏハブ５００−１、インターコネクト５０４−１、プロセッサ５０１−１、インターコネクト５０５、プロセッサ５０１−２を経由してプロセッサ５０１−２内の主記憶制御部に到達し、前記主記憶制御部がメモリバス５０３−２を介して主記憶装置５０２−２へ読み込みないしは書き込みを行う。主記憶装置５０２−２に対する読み込みの場合には、読み込み結果をネットワークインタフェースアダプタ２０１へ転送するためのメモリトランザクションは同じ経路の逆順、すなわち、プロセッサ５０１−２、インターコネクト５０５、プロセッサ５０１−１、インターコネクト５０４−１、Ｉ／Ｏハブ５００−１、インタフェース２０２−１ないしは２０２−２を経由してネットワークインタフェースアダプタ２０１に送信される。
【０１６７】
（４）ネットワークインタフェースアダプタ２０１からインタフェース２０２−３ないしは２０２−４を介して、主記憶装置５０２−１に属するアドレスに対してメモリトランザクションが送信された場合、メモリトランザクションはインタフェース２０２−３ないしは２０２−４、Ｉ／Ｏハブ５００−２、インターコネクト５０４−２、プロセッサ５０１−２、インターコネクト５０５、プロセッサ５０１−１を経由してプロセッサ５０１−１内の主記憶制御部に到達し、前記主記憶制御部がメモリバス５０３−１を介して主記憶装置５０２−１へ読み込みないしは書き込みを行う。主記憶装置５０２−１に対する読み込みの場合には、読み込み結果をネットワークインタフェースアダプタ２０１へ転送するためのメモリトランザクションは同じ経路の逆順、すなわち、プロセッサ５０１−１、インターコネクト５０５、プロセッサ５０１−２、インターコネクト５０４−２、Ｉ／Ｏハブ５００−２、インタフェース２０２−３ないしは２０２−４を経由してネットワークインタフェースアダプタ２０１に送信される。
【０１６８】
ネットワークインタフェースアダプタ２０１が、主記憶装置５０２−１ないしは５０２−２に属するアドレスに対するメモリトランザクションを、ラウンドロビン、重み付きラウンドロビンもしくはアドレスによるインタリーブにより、インタフェース２０２−１，２０２−２，２０２−３，２０２−４のいずれかに対して送信する。この場合、計算機２０３Ａの内部でのメモリトランザクションの処理は、上記の（１）（２）（３）ないしは（４）のいずれの場合もあり得る。よって、以下に示すような問題が生じる。
【０１６９】
（１）及び（２）と比較して（３）及び（４）はインターコネクト５０５を経由する分、レイテンシが遅くなる。また、（３）及び（４）を同時に処理しようとすると、インターコネクト５０５がインターコネクト５０４−１、５０４−２及びインタフェース２０２−１，２０２−２，２０２−３，２０２−４に対して、十分に大きいスループットを有していない限り、インターコネクト５０５がボトルネックとなってしまう。よって、複数のインタフェースにメモリトランザクションを分散させることによりネットワークインタフェースアダプタ２０１から計算機２０３ＡのＩ／Ｏハブ５００−１，５００−２までのスループットを高めることはできても、ネットワークインタフェースアダプタ２０１から主記憶装置５０２−１，５０２−２までのデータ転送性能を高めることはできない。例えば、上記で示したようにインターコネクト５０４−１，５０４−２及びインターコネクト５０５が同じインターコネクト、すなわち同じスループットを持っている場合、（３）と（４）を同時に処理しようとすると、インターコネクト５０５で競合する可能性がある。よって、インタフェース２０２−１，２０２−２，２０２−３，２０２−４では、メモリトランザクションを分散して送信することで高いスループットを得られているように見えるが、主記憶へのデータ転送性能は前記インターコネクト手段のスループットの以下に落ちることになる。
【０１７０】
また、ネットワークインタフェースアダプタ２０１からインタフェースを介して計算機の主記憶装置ないしは主記憶制御部に対して送信したメモリトランザクションの処理、すなわち主記憶装置へのデータの読み書きが完了したことを保証するためには、インタフェース２０２−１に送信したメモリトランザクション、インタフェース２０２−２に送信したメモリトランザクション、インタフェース２０２−３に送信したメモリトランザクション、及び、インタフェース２０２−４に送信したメモリトランザクションの全てが完了したことを保証する必要がある。完了保証を行う方法としては、例えばＰＣＩ  Ｅｘｐｒｅｓｓの場合、以下の方法が考えられる。
【０１７１】
ＰＣＩ  Ｅｘｐｒｅｓｓでは規格上、メモリリードトランザクションの処理は、先行するメモリライトトランザクションの処理が完了した後でなければ、処理されないと規定されているので、メモリリードトランザクションを発行し、そのメモリリードトランザクションに対する応答が返ってきた時、先行するメモリライトトランザクションが完了したことが保証できる。なお、メモリリードトランザクションには必ず読み込み結果をメモリトランザクション要求元に返すための応答があるので、メモリリードトランザクションの完了を保証するためには、この応答を待てばよい。
【０１７２】
前記ネットワークインタフェースアダプタ２０１は、複数のインタフェースを介して計算機２０３Ａに接続されているので、各インタフェースでそれぞれ完了保証のためのトランザクションを送信しなければならない。しかし、全てのインタフェースに対して完了保証のためのトランザクションを送信すると、何らかの理由でメモリライトトランザクションが送信されていないインタフェースに対しても、完了保証のためのメモリリードトランザクションを送信することになり、インタフェース及びインタフェースを介して接続される計算機のＩ／Ｏハブに余計な負荷を与えてしまう。
【０１７３】
＜本発明を適用した場合＞
図２１の計算機２０３Ａに本発明を適用した場合には、上記図４の計算機２０３と同様に、計算機２０３Ａの複数の主記憶装置５０２−１、５０２−２に対して複数のインタフェースを用いて計算機２０３Ａのリソースの競合を防ぎながら並列的にメモリトランザクションを分配し、データ転送のスループットを向上させることができる。
【０１７４】
図２２は図２１の計算機２０３Ａに本発明を適用した場合の分配情報記憶部３０８の設定の一例を示す説明図である。
【０１７５】
図２２に示す分配情報記憶部３０８の１エントリ目（１行目）の有効ビットを１（有効）、アドレス範囲情報にアドレス範囲Ａ、インタフェース指定情報にＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１、２０２−２を示す情報を記録する。２エントリ目（２行目）の有効ビットを１（有効）、アドレス範囲情報にアドレス範囲Ｂ、インタフェース指定情報にＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−３、２０２−４を示す情報を記録する。なお、アドレス範囲Ａ及びアドレス範囲Ｂのどちらにも属さないアドレスは、ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１を経由して伝送するものとし、そのために必要な情報として３エントリ目（３行目）の有効ビットを１（有効）、アドレス範囲情報にその他のアドレスを示す情報、インタフェース指定情報にＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１を示す情報を記録する。４エントリ目（４行目）以降に関しては利用しないので、有効ビットを０（無効）に設定する。
【０１７６】
上記の設定により、メモリトランザクションがプロセッサ５０１−１と５０１−２を接続するインターコネクト５０５で衝突することがなくなって、複数のインタフェース２０２−１〜４で高速なデータ転送を実現できる。
【０１７７】
このように本発明によれば、複数のインタフェースを介して計算機に接続されるデータ転送装置の、計算機の主記憶装置に対するデータ転送性能の向上を実現できる。
【０１７８】
＜第２実施形態＞
図２３に示すプロセッサ７００は、図４及び図２１で示した計算機２０３に用いられるプロセッサの他の構成を示すブロック図である。
【０１７９】
プロセッサ７００は、少なくとも１つ以上のＣＰＵコア７０１、ルーティング情報記憶部７０２、主記憶制御部７０３、インターコネクト部７０４から構成される。
【０１８０】
主記憶制御部７０３は少なくとも１つ以上のメモリバス７０５を介して主記憶装置と接続する。
【０１８１】
インターコネクト部７０４はプロセッサ間のインターコネクト、もしくは、プロセッサ−Ｉ／Ｏハブ間のインターコネクトを担うインターコネクト７０６を少なくとも１つ以上提供し、他のプロセッサもしくはＩ／Ｏハブと接続する。すなわち、インターコネクト７０６は図４で示されるインターコネクト４０４−１，４０４−２，４０４−３，４０４−４，４０５−１，４０５−２，４０５−３，４０５−４，４０５−５，４０５−６、及び、図２１で示されるインターコネクト５０４−１，５０４−２，５０５に対応付けられる。
【０１８２】
ルーティング情報記憶部７０２は、主記憶アドレス上のある範囲を示す情報と、当該範囲の物理アドレスが属する主記憶装置に接続される主記憶制御部を有するプロセッサを示す情報が対になって記憶されている。また、ルーティング情報記憶部７０２には、プロセッサを示す情報と、当該プロセッサに対するメモリトランザクションを送信する際に、複数あるインターコネクト７０６のうち選択すべきインターコネクトを示す情報が対になって記憶されている。
【０１８３】
前記ルーティング情報記憶部７０２が有する２種類の情報を組み合わせることにより、プロセッサ７００は、図４ないしは図２１に示すような、複数のプロセッサが持つ主記憶制御部に、単一の物理アドレス空間を構成する主記憶装置が分散して接続されている構成においても、メモリトランザクションをその対象アドレスのメモリトランザクションを処理すべき主記憶制御部７０３を有するプロセッサに転送することができる。その処理手順を次に示す。
【０１８４】
あるプロセッサの上で動作するソフトウェアによりメモリアクセスを必要とする命令が実行された時、当該メモリアクセスの対象物理アドレスが、このプロセッサの持つ主記憶制御部７０３に接続されている主記憶装置に属しているものであれば、当該主記憶制御部７０３にメモリアクセスを要求する。当該メモリアクセスの対象物理アドレスが、このプロセッサの持つ主記憶制御部７０３に接続されている主記憶装置に属していないものであれば、当該アドレスが属する主記憶装置が接続されている主記憶制御部７０３を有するプロセッサを示す情報をルーティング情報記憶部７０２から得る。次に、当該プロセッサへ対応付けられているインターコネクトを示す情報をルーティング情報記憶部７０２から得る。そして、主記憶制御部７０３は、当該インターコネクトに対して、当該メモリアクセスを要求するメモリトランザクションを送信する。インターコネクト７０６を経由して、当該メモリトランザクションは、他のプロセッサに到達する。ここで、到達したプロセッサが持つ主記憶制御部７０３に接続された主記憶装置に、当該メモリトランザクションの対象アドレスが属するのであれば、このプロセッサでメモリトランザクションの処理が行われる。
【０１８５】
一方、当該メモリトランザクションの対象アドレスが属さない場合、このプロセッサで再びルーティング情報記憶部７０２を参照して、他のプロセッサにメモリトランザクションを転送する。各プロセッサが有するルーティング情報記憶部７０２が正しく設定されていれば、上記の動作が繰り返されることにより、最終的には当該メモリトランザクションは、対象アドレスを処理することができるプロセッサに到達する。Ｉ／Ｏハブを介して、外部に接続されている装置からプロセッサに送られてくるメモリトランザクションも、同様に処理される。
【０１８６】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【０１８７】
なお、上記各実施形態では、データ転送装置としてネットワークインタフェースアダプタ２０１を開示したが、図３ネットワークインタフェース３０１等を変更することにより、主記憶装置をアクセスする任意のデータ転送装置を構成することができる。例えば、外部の装置と接続するインタフェース３０１をファイバーチャネルのインタフェースとすることでホストバスアダプタを構成することができる。
【産業上の利用可能性】
【０１８８】
本発明のデータ転送装置は、複数のインタフェースを介して計算機に接続され、計算機の主記憶装置ないしは主記憶制御部とデータ転送を行うデータ転送装置に適用することが可能である。
【図面の簡単な説明】
【０１８９】
【図１】本発明の第１の実施の形態のデータ転送装置であるネットワークインタフェースアダプタを搭載したノードとネットワークとの関係を示すブロック図である。
【図２】本発明の第１の実施の形態のデータ転送装置であるネットワークインタフェースアダプタと計算機によって構成するノードの構成を示すブロック図である。
【図３】本発明の第１の実施の形態のデータ転送装置であるネットワークインタフェースアダプタの構成を示すブロック図である。
【図４】本発明の第１の実施の形態のデータ転送装置を接続する計算機の構成の一例を示すブロック図である。
【図５】本発明の第１の実施の形態のデータ転送装置において、完了状況記憶部の構成の一例を示す説明図である。
【図６】本発明の第１の実施の形態のデータ転送装置において、分配情報記憶部の構成の一例を示す説明図である。
【図７】本発明の第１の実施の形態のデータ転送装置において、分配情報記憶部に設定される情報の他の例を示す説明図である。
【図８】本発明の第１の実施の形態のデータ転送装置において、分配方法設定部の構成の一例を示す説明図である。
【図９】本発明の第１の実施の形態のデータ転送装置であるネットワークインタフェースアダプタによって処理される、ＲＤＭＡライト要求パケットの構成を示した説明図である。
【図１０】本発明の第１の実施の形態のデータ転送装置であるネットワークインタフェースアダプタによって処理される、ＲＤＭＡリード要求パケットの構成を示した説明図である。
【図１１】本発明の第１の実施の形態のデータ転送装置であるネットワークインタフェースアダプタによって処理される、ＲＤＭＡリード応答パケットの構成を示した説明図である。
【図１２】本発明の第１の実施の形態のデータ転送装置における、完了通知要求の伝搬の流れの概略を示す説明図である。
【図１３】本発明の第１の実施の形態のデータ転送装置であるネットワークインタフェースアダプタにおいて、ネットワークを介して接続される他のノードからＲＤＭＡライト要求パケットを受信した時の処理の一例を示すフローチャートである。
【図１４】本発明の第１の実施の形態のデータ転送装置であるネットワークインタフェースアダプタにおいて、ネットワークを介して接続される他のノードからＲＤＭＡリード要求パケットを受信した時の処理の一例を示すフローチャートである。
【図１５】本発明の第１の実施の形態のデータ転送装置であるネットワークインタフェースアダプタにおいて、ネットワークを介して接続される他のノードヘＲＤＭＡライト要求パケットを送信する時の処理の一例を示すフローチャートである。
【図１６】本発明の第１の実施の形態のデータ転送装置であるネットワークインタフェースアダプタにおいて、ネットワークを介して接続される他のノードへＲＤＭＡリード要求パケットを送信する時の処理の一例を示すフローチャートである。
【図１７】複数のＰＣＩ  Ｅｘｐｒｅｓｓインタフェースを介して計算機の主記憶装置とデータ転送を行うデータ転送装置において、前記インタフェースを介して送出したメモリトランザクションの処理が完了したことを保証するための手段の一例を示すフローチャートである。
【図１８】本発明の第１の実施の形態のデータ転送装置において、複数のＰＣＩ  Ｅｘｐｒｅｓｓインタフェースを介して送出したメモリトランザクションの処理が完了したことを保証するための手段の一例を示すフローチャートである。
【図１９】本発明の第１の実施の形態のデータ転送装置において、複数のノードからのＲＤＭＡライト要求パケットを処理する動作を表すシーケンス図である。
【図２０】本発明の第１の実施の形態として、４つのＰＣＩ  Ｅｘｐｒｅｓｓインタフェースを介して計算機に接続されているネットワークインタフェースアダプタにおいて、ネットワークを介して接続される複数のノードからのＲＤＭＡライト要求パケットを処理する際の、完了状況記憶部の記憶内容の一例を示す説明図である。
【図２１】本発明の第１の実施の形態のデータ転送装置を接続する計算機の他の構成を示すブロック図である。
【図２２】図２１の計算機を用いたときの分配情報記憶部に設定される情報の一例を示す説明図である。
【図２３】本発明の第１の実施の形態のデータ転送装置を接続する計算機において、プロセッサの構成の一例を示すブロック図である。
【符号の説明】
【０１９０】
１００  ネットワーク
１０１  リンク
１０２  ノード
２０１  ネットワークインタフェースアダプタ
２０２−１、２０２−２、２０２−３、２０２−４  ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース
２０３  計算機
３０１  ネットワークインタフェース
３０２  パケット解読部
３０３  パケット生成部
３０４  メモリトランザクション発行部
３０５  メモリトランザクション分配部
３０６  アドレス変換部
３０７  アドレス変換情報記憶部
３０８  分配情報記憶部
３０９  分配方法設定部
３１０−−１，３１０−２，３１０−３，３１０−４  ＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント
３１１  完了状況記憶部
３１２  完了保証部
４００−１，４００−２  Ｉ／Ｏハブ
４０１−１，４０１−２，４０１−３，４０１−４  プロセッサ
４０２−１，４０２−２，４０２−３，４０２−４  主記憶装置
４０３−１，４０３−２，４０３−３，４０３−４  メモリバス
４０４−１，４０４−２，４０４−３，４０４−４  インターコネクト（プロセッサ−Ｉ／Ｏハブ間）
４０５−１，４０５−２，４０５−３，４０５−４、４０５−５、４０５−６  インターコネクト（プロセッサ間）
５００−１、５００−２  Ｉ／Ｏハブ
５０１−１、５０１−２  プロセッサ
５０２−１、５０２−２  主記憶装置
５０３−１、５０３−２  メモリバス
５０４−１、５０４−２  インターコネクト（プロセッサ−Ｉ／Ｏハブ間）
５０５  インターコネクト（プロセッサ間）
６０１  ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１に送信されたメモリライトトランザクションの完了状況を示すビット
６０２  ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−２に送信されたメモリライトトランザクションの完了状況を示すビット
６０３  ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−３に送信されたメモリライトトランザクションの完了状況を示すビット
６０４  ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−４に送信されたメモリライトトランザクションの完了状況を示すビット
７００  プロセッサ
７０１  ＣＰＵコア
７０２  ルーティング情報記憶部
７０３  主記憶制御部
７０４  インターコネクト部
７０５  メモリバス
７０６  インターコネクト（プロセッサ間、ないしは、プロセッサ−Ｉ／Ｏハブ間）
１７０１  分配情報記憶部のエントリの有効／無効を示すビット
１７０２  計算機の主記憶アドレス空間の中のある範囲を示すアドレス範囲情報
１７０３  データ転送装置が接続される複数のインタフェースのうちの１つを指定するインタフェース指定情報
１８００  データ転送装置が備える複数のメモリトランザクション分配方法のうちの１つを指定する分配方法指定レジスタ
１８０１  ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−１の有効／無効を示すビット
１８０２  ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−２の有効／無効を示すビット
１８０３  ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−３の有効／無効を示すビット
１８０４  ＰＣＩ  Ｅｘｐｒｅｓｓインタフェース２０２−４の有効／無効を示すビット
１０２−１  ネットワークを介してノード１０２−２と接続されており、ノード１０２−２に対してＲＤＭＡライト要求を送出するノード
１０２−２  ネットワークを介してノード１０２−１、１０２−３と接続されており、ノード１０２−１、１０２−３からのＲＤＭＡライト要求を受信するノード
１０２−３  ネットワークを介してノード１０２−２と接続されており、ノード１０２−２に対してＲＤＭＡライト要求を送出するノード
１９１１，１９１２，１９１３  ノード１０２−１からノード１０２−２への１つのＲＤＭＡライト要求を構成する３つのＲＤＭＡライト要求パケット
１９２１、１９２２、１９２３、１９２４、１９２５、１９２６  ノード１０２−２が、ノード１０２−１ないしはノード１０２−３からＲＤＭＡライト要求パケットを受け取った時刻、ないしは、パケットを受け取ったことにより生じるイベント
１９３１，１９３２，１９３３  ノード１０２−３からノード１０２−２への１つのＲＤＭＡライト要求を構成する３つのＲＤＭＡライト要求パケット
１９４１  ノード１０２−１で動作し、ノード１０２−２にＲＤＭＡライト要求を出すプロセスを示す
１９４２  ノード１０２−２で動作し、ノード１０２−１とノード１０２−３からのＲＤＭＡライト要求を受けるプロセスを示す
１９４３  ノード１０２−３で動作し、ノード１０２−２にＲＤＭＡライト要求を出すプロセスを示す
２００１、２００２、２００３、２００４、２００５、２００６、２００７、２００８、２００９  データ転送装置における完了状況記憶部の記憶内容の一例
【図１】
2010061194.tif 000003
【図２】
2010061194.tif 000004
【図３】
2010061194.tif 000005
【図４】
2010061194.tif 000006
【図５】
2010061194.tif 000007
【図６】
2010061194.tif 000008
【図７】
2010061194.tif 000009
【図８】
2010061194.tif 000010
【図９】
2010061194.tif 000011
【図１０】
2010061194.tif 000012
【図１１】
2010061194.tif 000013
【図１２】
2010061194.tif 000014
【図１３】
2010061194.tif 000015
【図１４】
2010061194.tif 000016
【図１５】
2010061194.tif 000017
【図１６】
2010061194.tif 000018
【図１７】
2010061194.tif 000019
【図１８】
2010061194.tif 000020
【図１９】
2010061194.tif 000021
【図２０】
2010061194.tif 000022
【図２１】
2010061194.tif 000023
【図２２】
2010061194.tif 000024
【図２３】
2010061194.tif 000025