(57)【要約】【課題】データ転送要求によって主記憶装置に書き込まれるべきデータが、関係する全てのソフトウェアによって読み出せるようになった段階で、ソフトウェアがデータ転送の完了を認識できるようにする。【解決手段】複数のインタフェースを介してコンピュータと接続するデータ転送装置において、主記憶装置に対するデータの書き込み完了通知を複数の部分完了通知に分割して定義し、複数のインタフェースのそれぞれから部分完了通知を主記憶装置に書き込む。コンピュータ上で動作するソフトウェアは、その完了通知を構成する全ての部分完了通知が主記憶装置から読み出せた段階で、当該完了通知が読み出せたものと見做し、データの転送が完了したと判断する。【選択図】図４
2011008678.tif 000002
【特許請求の範囲】
【請求項１】
主記憶装置を有するコンピュータと第１のインタフェースを介して接続され、かつ外部の装置と第２のインタフェースを介して接続され、該外部の装置からの要求に応じて該主記憶装置に対してデータの転送制御を行うデータ転送装置であって、
該第１のインタフェースまたは第２のインタフェースが該コンピュータの主記憶装置へのアクセス要求を受け付けた時に、該主記憶装置に対するデータ転送要求を発行するデータ転送要求生成部と、
該データ転送要求生成部が該データ転送要求を発行した後に、データ転送完了を示す完了通知を該主記憶装置に転送する完了通知転送要求を発行する完了通知転送要求生成部と、
該データ転送要求又は該完了通知転送要求を、該第１のインタフェースを構成する複数のインタフェースの少なくとも１つに発行する転送要求分配部とを有し、
該完了通知は、複数の部分完了通知から構成され、かつ該部分完了通知は、該部分完了通知が有効又は無効であることを示すフラグを有して構成されることを特徴とするデータ転送装置。
【請求項２】
請求項１に記載のデータ転送装置において、
前記転送要求分配部は、前記第１のインタフェースを構成する複数の各インタフェースに対応して、該主記憶装置に転送する部分完了通知転送要求をそれぞれ発行することを特徴とするデータ転送装置。
【請求項３】
請求項１に記載のデータ転送装置において、
主記憶装置に対するデータの書込みの完了状況を記憶して管理する記憶部を有し、
前記転送要求分配部は、該データ転送要求を該複数のインタフェースの１つに発行する際に、フラグセット要求を該記憶部に発行し、
該フラグセット要求は、該複数のインタフェースのうち少なくとも１つを識別するインタフェース識別子を含むものであり、
該記憶部は、完了状況記憶フラグ、フラグセット部、フラグクリア部、及び、フラグ読出し部を有し、
該完了状況記憶フラグは、該複数のインタフェースの数と少なくとも同数以上のフラグを有するものであり、
該フラグセット部は、該フラグセット要求を受けた時に、該フラグセット要求に含まれるインタフェース識別子で示されるインタフェースに対応する該完了状況記憶フラグの少なくとも１つ以上のフラグをセットするものであり、
該フラグクリア部は、フラグクリア要求を受けた時に、該フラグクリア要求に含まれるインタフェース識別子で示されるインタフェースに対応する該完了状況記憶フラグの少なくとも１つ以上のフラグをクリアするものであり、
該フラグ読出し部は、フラグ読出し要求を受けた時に、該完了状況記憶フラグを読み出して該転送要求分配部に転送するものであり、
該フラグクリア要求は、該複数のインタフェースのうち少なくとも１つを識別するインタフェース識別子を含むものであり、
該転送要求分配部は、該記憶部に該フラグ読出し要求を発行し、該記憶部から得られたフラグで示される該複数のインタフェースのそれぞれに、該部分完了通知を転送する部分完了通知転送要求を少なくとも１個以上発行し、
該部分完了通知要求を発行したインタフェースを示すインタフェース識別子を含むフラグクリア要求を発行するものである、ことを特徴とするデータ転送装置。
【請求項４】
請求項１に記載のデータ転送装置において、
主記憶装置に対するデータの書込みの完了状況を示す情報を記憶して管理する記憶部を有し、
該転送要求分配部は、該データ転送要求を該複数のインタフェースの１つに発行する際に、フラグセット要求を該記憶部へ送出し、該フラグセット要求は、該複数のインタフェースのうち少なくとも１つを識別するインタフェース識別子と、該エンドポイントの１つを識別するエンドポイント識別子を含むものであり、
該記憶部は、フラグセット部、フラグクリア部、フラグ読出し部、及び該データ転送装置が該第１のインタフェース、ないしは、該第２のインタフェースを介して接続されるエンドポイントの最大数と少なくとも同数以上の完了状況記憶フラグを有し、
該完了状況記憶フラグは、該複数のインタフェースの数と少なくとも同数以上のフラグを有するものであり、
該フラグセット部は、該フラグセット要求を受けた時に、該フラグセット要求に含まれるエンドポイント識別子、及び、インタフェース識別子に対応する該完了状況記憶フラグの少なくとも１つ以上のフラグをセットするものであり、
該フラグクリア部は、フラグクリア要求を受けた時に、該フラグクリア要求に含まれるエンドポイント識別子、及び、インタフェース識別子に対応する該完了状況記憶フラグの少なくとも１つ以上のフラグをクリアするものであり、
該フラグ読出し部は、フラグ読出し要求を受けた時に、フラグ読出し要求に含まれるエンドポイント識別子に対応するフラグを読み出して該転送要求分配部に転送するものであり、
該フラグクリア要求は、該複数のインタフェースのうち少なくとも１つを識別するインタフェース識別子と、該エンドポイントの１つを識別するエンドポイント識別子を含むものであり、
該フラグ読出し要求は、該エンドポイント識別子を含むものであり、
該転送要求分配部は、該記憶部に該フラグ読出し要求を発行し、該記憶部から得られたフラグで示される該複数のインタフェースのそれぞれに、該部分完了通知を転送する部分完了通知転送要求を少なくとも１個以上発行し、
該部分完了通知を発行したインタフェースを示すインタフェース識別子を含むフラグクリア要求を発行するものである、ことを特徴とするデータ転送装置。
【請求項５】
請求項１に記載のデータ転送装置において、
該主記憶装置に対するデータの書込みの完了状況を示す情報を記憶して管理する記憶部を有し、
該転送要求分配部は、該データ転送要求を該複数のインタフェースの１つに発行する際に、フラグセット要求を該記憶部へ送出し、該フラグセット要求は、該複数のインタフェースのうち少なくとも１つを識別するインタフェース識別子と、該エンドポイントの１つを識別するエンドポイント識別子を含むものであり、
該記憶部は、フラグセット部、フラグクリア部、フラグ読出し部、完了状況記憶フラグ、エンドポイント識別子記憶部、及び、少なくとも１つ以上のエンドポイント識別子比較器を有し、
該完了状況記憶フラグは、該複数のインタフェースの数と少なくとも同数以上のフラグを有するものであり、
該エンドポイント識別子記憶部は、該エンドポイント識別子を記憶保持するものであり、
該エンドポイント識別子比較器は、該エンドポイント識別子記憶部の記憶するエンドポイント識別子と、他の１つのエンドポイント識別子が一致しているか判定し、一致ないしは不一致を出力するものであり、
該フラグセット部は、該フラグセット要求を受けた時に、該フラグセット要求に含まれるエンドポイント識別子を該エンドポイント識別子比較器に入力し、比較結果が一致している場合には、該フラグセット要求に含まれるインタフェース識別子に対応するフラグをセットし、不一致の場合には、全てのフラグをセットするものであり、
該フラグクリア部は、フラグクリア要求を受けた時に、該フラグクリア要求に含まれるエンドポイント識別子を該エンドポイント識別子比較器に入力し、比較結果が一致している場合には、該フラグクリア要求に含まれるインタフェース識別子に対応するフラグをクリアし、不一致の場合には、該フラグクリア要求に含まれるインタフェース識別子に対応するフラグをクリアし、それ以外のフラグはセットするものであり、
該フラグクリア要求は、該エンドポイント識別子、及び、該インタフェース識別子を含むものであり、
該フラグ読出し要求部は、フラグ読出し要求を受けた時に、該フラグ読出し要求に含まれるエンドポイント識別子を該エンドポイント識別子比較器に入力し、比較結果が一致している場合には、該フラグを読み出して該転送要求分配部に転送し、不一致の場合には全てのフラグがセットされていることを該転送要求分配部に転送するものであり、
該フラグ読出し要求は、該エンドポイント識別子を含むものであり、
該転送要求分配部は、該記憶部に該フラグ読出し要求を発行し、該記憶部から得られたフラグで示される該複数のインタフェースのそれぞれに、該部分完了通知を転送する部分通知転送要求を少なくとも１個以上発行し、
該部分完了通知を発行したインタフェースを示すインタフェース識別子を含むフラグクリア要求を発行するものである、ことを特徴とするデータ転送装置。
【請求項６】
請求項１に記載のデータ転送装置において、
該主記憶装置に対するデータの書込みの完了状況を示す情報を記憶して管理する記憶部を有し、
該転送要求分配部は、該テータ転送要求を該複数のインタフェースの１つに発行する際に、フラグセット要求を記憶部に発行し、
該フラグセット要求は、該複数のインタフェースのうち少なくとも１つを識別するインタフェース識別子と、該エンドポイントの１つを識別するエンドポイント識別子を含むものであり、
該記憶部は、エンドポイント対応記憶部、エントリ決定部、フラグセット部、フラグクリア部、フラグ読出し部、及び、該複数のインタフェースの数と同数のフラグを記憶する完了状況記憶フラグを少なくとも１つ以上を有し、
該完了状況記憶フラグは、該複数のインタフェースの数と少なくとも同数以上のフラグを有するものであり、
該エンドポイント対応記憶部は、該完了状況記憶フラグの数と少なくとも同数以上のエントリを有するものであり、
該エントリは、該エンドポイント識別子及び当該エントリの有効ないしは無効を示す有効フラグを含むものであり、
該エントリ決定部は、エントリ割当要求を受けて、該エントリ割当要求に含まれるエンドポイント識別子と同一のエンドポイント識別子を有するエンドポイント対応記憶部のエントリを検索し、一致するエントリがあった場合には当該エントリを示すエントリ識別子と検索が成功したことを示すヒット情報を要求元に転送し、一致するエントリが無かった場合には、エンドポイント対応記憶部のいずれかのエントリを置き換えて当該エンドポイント識別子を有するエントリを新規に作成し、そのエントリを示すエントリ識別子と検索が失敗したことを示すミス情報を要求元に転送するものであり、
該エントリ割当要求は、該エンドポイント識別子を含むものであり、
該フラグセット部は、該フラグセット要求を受けた時に、該フラグセット要求に含まれるエンドポイント識別子を含むエントリ割当要求を発行し、ヒット情報が得られた場合には、得られたエントリ識別子に対応する該完了状況記憶フラグのうち、該フラグセット要求に含まれるインタフェース識別子に対応するフラグをセットし、ミス情報が得られた場合には、得られたエントリ識別子に対応する該完了状況記憶フラグを全てセットするものであり、
該フラグクリア部は、フラグクリア要求を受けた時に、該フラグクリア要求に含まれるエンドポイント識別子を含むエントリ割当要求を発行し、ヒット情報が得られた場合には、得られたエントリ識別子に対応する該完了状況記憶フラグのうち、該フラグクリア要求に含まれるインタフェース識別子に対応するフラグをクリアし、ミス情報が得られた場合には、得られたエントリ識別子に対応する該完了状況記憶フラグのうち、該フラグクリア要求に含まれるインタフェース識別子に対応するフラグのみクリアし、それ以外のフラグをセットするものであり、
該フラグクリア要求は、該エンドポイント識別子、及び、該インタフェース識別子を含むものであり、
該フラグ読出し要求部は、フラグ読出し要求を受けた時に、該フラグ読出し要求に含まれるエンドポイント識別子を含むエントリ割当要求を発行し、ヒット情報が得られた場合には、得られたエントリ識別子に対応する該完了状況記憶フラグを該転送要求分配部に転送し、ミス情報が得られた場合には、得られたエントリ識別子に対応する前期完了状況記憶フラグを全てセットし、セットされたフラグを該転送要求分配部に転送するものであり、
該フラグ読出し要求は、該エンドポイント識別子を含むものであり、
該転送要求分配部は、該記憶部に該フラグ読出し要求を発行し、該記憶部から得られたフラグで示される該複数のインタフェースのそれぞれに、該部分完了通知を転送する部分通知転送要求を少なくとも１個以上発行し、
該部分完了通知を発行したインタフェースを示すインタフェース識別子を含むフラグクリア要求を発行するものである、ことを特徴とするデータ転送装置。
【請求項７】
請求項１乃至６のいずれかの請求項に記載のデータ転送装置において、
該部分完了通知は固定長のデータであり、
該完了通知は、該部分完了通知を少なくとも１つ以上含む可変長のデータであり、
該完了通知又は該完了通知を構成する少なくとも１つ以上の部分完了通知は、完了通知のサイズないしは完了通知を構成する部分完了通知の個数を示す情報を含むことを特徴とするデータ転送装置。
【請求項８】
請求項１乃至６のいずれかの請求項に記載のデータ転送装置において、
前記部分完了通知は固定長のデータであり、
前記完了通知は、前記部分完了通知を少なくとも１つ以上含む固定長のデータであり、
前記完了通知又は前記完了通知を構成する少なくとも１つ以上の部分完了通知は、完了通知を構成する部分完了通知の個数を示す情報を含むことを特徴とするデータ転送装置。
【請求項９】
請求項１乃至８のいずれかの請求項に記載のデータ転送装置において、
前記第１のインタフェースはＰＣＩ Ｅｘｐｒｅｓｓであることを特徴とするデータ転送装置。
【請求項１０】
請求項１乃至８のいずれかの請求項に記載のデータ転送装置において、
前記第２のインタフェースは、コンピュータ間を接続するネットワークに接続されることを特徴とするデータ転送装置。
【請求項１１】
主記憶装置を有するコンピュータと、該コンピュータと第１のインタフェースを介して接続され、かつ外部の装置と第２のインタフェースを介して接続され、該外部の装置からの要求に応じて該主記憶装置に対してデータの転送制御を行うデータ転送装置とを含むコンピュータシステムにおいて、
該データ転送装置は：
該第１のインタフェースまたは第２のインタフェースが該コンピュータの主記憶装置へのアクセス要求を受け付けた時に、該主記憶装置に対するデータ転送要求を発行するデータ転送要求生成部と、
該データ転送要求生成部が該データ転送要求を発行した後に、データ転送完了を示す完了通知を該主記憶装置に転送する完了通知転送要求を発行する完了通知転送要求生成部と、
該データ転送要求又は該完了通知転送要求を、該第１のインタフェースを構成する複数のインタフェースの少なくとも１つに発行する転送要求分配部と、を有し、
該完了通知は、複数の部分完了通知から構成され、かつ該部分完了通知は、該部分完了通知が有効又は無効であることを示すフラグを有して構成され、
該コンピュータは：
データ処理するプロセッサと、先入れ先出し（ＦＩＦＯ）される完了通知を記憶する所定領域を有する前記主記憶装置と、該主記憶装置と接続されると共に、第１のインタフェースを介して該データ転送装置と接続されるＩ／Ｏハブを有し、
該プロセッサは、プログラムの実行によって、該所定領域における完了通知の状況を監視する完了判定手段と、該主記憶装置からデータを読み出すデータ読出手段とを実現し、
該完了判定手段は、該完了通知を構成する全ての部分完了通知が該所定領域から読み出せた時に、データ転送完了であることを該データ読出手段に通知することを特徴とするコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ転送装置及びコンピュータシステムに係り、特にコンピュータ内の主記憶装置に対してＤＭＡデータ転送を行うデータ転送装置における受信データの転送制御、及びそれを適用するコンピュータシステムに関する。
【背景技術】
【０００２】
ネットワークアダプタ、ストレージアダプタ、及び、グラフィックスアダプタなどのコンピュータのデータ入出力を担うデータ転送装置は、通常、コンピュータの主記憶装置に対してＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）によりデータ転送している。ＤＭＡ転送は、プロセッサを介在しないで主記憶装置に対してデータ転送することができるので、プロセッサの負荷軽減とデータ転送の高速化が図れる（特許文献１参照）。
【０００３】
また、ＤＭＡ転送を用いるネットワークアダプタにおいては、ネットワーク経由でＤＭＡ転送を行う、ＲＤＭＡ（Ｒｅｍｏｔｅ  Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送が用いられている。ＲＤＭＡ転送は、ネットワークで接続された複数のネットワークアダプタどうしが、プロセッサを介在せずに、各ネットワークアダプタが接続されているコンピュータの主記憶装置へデータ転送する。これにより、プロセッサに負荷をかけずにネットワーク経由でのデータ転送が実現でき、ネットワークのスループット向上とレイテンシ低減が図れる（特許文献２参照）。
【０００４】
データ転送装置は、ＤＭＡ転送を実現するために、一般的にはＰＣＩやＰＣＩ Ｅｘｐｒｅｓｓのような業界標準規格で定められたインタフェースを用いてコンピュータと接続する。これらのインタフェースは業界標準規格で定められていることから、サーバやパーソナルコンピュータなどの幅広い種類のコンピュータで採用されており、データ転送装置の適用範囲を拡大する効果を持つ（非特許文献１及び非特許文献２参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特表２００７−５２０７７０号公報
【特許文献２】特開２００８−２１７２１４号公報
【特許文献３】特開２０００−３３０９２４号公報
【非特許文献】
【０００６】
【非特許文献１】ＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂａｓｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  Ｒｅｖｉｓｉｏｎ  ２．０、  ＰＣＩ−ＳＩＧ、  Ｄｅｃｅｍｂｅｒ  ２０、  ２００６．
【非特許文献２】Ｍｉｎｄｓｈａｒｅ  Ｉｎｃ．、  Ｒａｖｉ  Ｂｕｄｒｕｋ、  Ｄｏｎ  Ａｎｄｅｒｓｏｎ  ａｎｄ  Ｔｏｍ  Ｓｈａｎｌｅｙ、  ＰＣＩ  Ｅｘｐｒｅｓｓ  Ｓｙｓｔｅｍ  Ａｒｃｈｉｔｅｃｔｕｒｅ、  Ａｄｄｉｓｏｎ−Ｗｅｓｌｅｙ、  ２００３．
【発明の概要】
【発明が解決しようとする課題】
【０００７】
一般に、コンピュータの主記憶装置に対してデータを転送するデータ転送装置では、コンピュータのプロセッサないしはプロセッサ上で動作するソフトウェアが、データ転送装置によるデータ転送が完了したことを知る手段が必要となる。
【０００８】
上述したようなデータ転送装置を用いるコンピュータシステムでは、データ転送装置がコンピュータの主記憶装置に転送したデータを、コンピュータ上で動作しているソフトウェアが使用する。コンピュータ上で使用しているソフトウェアはプロセッサの備えるロード命令によって、主記憶装置上のデータを読み出す。この時、ソフトウェアはデータ転送装置によるデータ転送が完了し、そのデータが主記憶装置上に書き込まれた後でロード命令を発行しなければならない。データ転送完了前にロード命令を発行すると、データ転送装置が主記憶装置に書き込んだデータではなく、それ以前に主記憶装置にあったデータを読み出してしまうことになり、ソフトウェアは正常に動作することができない。
【０００９】
ところが、ＤＭＡ転送ではプロセッサを介在せずデータ転送を行うため、そのままではプロセッサないしはプロセッサ上で動作するソフトウェアがデータ転送の進捗状況を知ることが出来ない。そのため、データ転送装置は、自身が発行したデータ転送要求による主記憶装置へのデータ書込みが完了した後に、データ転送が完了したことをソフトウェアに通知する。ソフトウェアは通知を受けた後に、当該データを主記憶装置から読み出すことで、データ転送装置によって書き込まれたデータを正しく読み出すことが出来る。
【００１０】
主記憶装置に対するデータの書込み完了通知を行う方法は幾つかあるが、その代表的な例を、図２６に示す。データ転送装置はデータ転送のための転送要求（以下単にデータ転送要求という）をＰＣＩ  Ｅｘｐｒｅｓｓ（以下、ＰＣＩeという）インタフェースに発行した後に、それに引き続いて、ソフトウェアに対してデータ転送の完了を通知する「完了通知」と称する特殊なデータを、主記憶装置上の所定のアドレスに書込む。ソフトウェアは完了通知が書き込まれるアドレスを常時監視していて、完了通知を読み出すことが出来たら、完了通知の転送要求以前にＰＣＩeに発行されたデータ転送要求は全て完了し、主記憶装置上に当該データが書き込まれているものと判断して、データの読出しを行う。
【００１１】
ＰＣＩeでは、データ転送装置が主記憶装置にデータないし完了通知を書込むために、Ｍｅｍｏｒｙ  Ｗｒｉｔｅと呼ばれるトランザクションを用いる。このＭｅｍｏｒｙ  Ｗｒｉｔｅトランザクションには、さらにＤｅｆａｕｌｔ  ＯｒｄｅｒｉｎｇないしはＲｅｌａｘｅｄ  Ｏｒｄｅｒｉｎｇという２種類の順序保証規則の異なるトランザクションがある。一般的に用いられるＤｅｆａｕｌｔ  ＯｒｄｅｒｉｎｇのＭｅｍｏｒｙ  Ｗｒｉｔｅトランザクションでは、先行するＭｅｍｏｒｙ Ｗｒｉｔｅを後続のＭｅｍｏｒｙ  Ｗｒｉｔｅが追い越すことは出来ないことが保証されている。すなわち、後続のＭｅｍｏｒｙ Ｗｒｉｔｅによって主記憶装置にデータが書き込まれ、当該データをソフトウェアがプロセッサのロード命令を用いて観測出来たときには、先行するＭｅｍｏｒｙ  Ｗｒｉｔｅによる主記憶装置へのデータ書込みは既に完了しており、当然ソフトウェアからもロード命令を用いて観測できるようになっている。
【００１２】
このＰＣＩeのＭｅｍｏｒｙ  Ｗｒｉｔｅにおける順序保証を利用することで、完了通知の書込みによりデータ転送の完了をプロセッサないしプロセッサ上で動作するソフトウェアに通知することが出来る。すなわち、データ転送装置はＰＣＩeインタフェースを備え、Ｄｅｆａｕｌｔ  Ｏｒｅｒｉｎｇ  Ｍｅｍｏｒｙ  Ｗｒｉｔｅトランザクションでデータの主記憶装置への書込みを発行した後に、同様に、Ｄｅｆａｕｌｔ  Ｏｒｄｅｒｉｎｇ  Ｍｅｍｏｒｙ  Ｗｒｉｔｅで完了通知の主記憶装置への書込みを発行する。
【００１３】
ここで、特許文献３に開示される、複数のインタフェースを用いることで、データ転送装置のスループットを高める技術を、上述のような完了通知の主記憶装置への書き込みを以って、データ転送の完了をソフトウェアに通知するデータ転送装置に適用すると、問題が生じる。
複数のインタフェースを用いたデータ転送装置による完了通知の問題を理解するために、複数系統（例えば４ポート）のＰＣＩeを介してコンピュータと接続されるネットワークアダプタの動作例を図２７に示す。
【００１４】
ネットワークから受信したメッセージを、４ポートのインタフェースを介して高速に転送するために、ネットワークアダプタはデータを５分割して、Ｉ／Ｏハブの各ポートで同時並行的に転送する。ここで、先ほどと同様に、データ転送のためのＤｅｆａｕｌｔ  Ｏｒｄｅｒｉｎｇ  Ｍｅｍｏｒｙ  Ｗｒｉｔｅトランザクションを送出した後に、完了通知を主記憶装置に書込むためのメモリトランザクションを発行する。
【００１５】
４ポートのＰＣＩeを介してコンピュータに到達するトランザクションは、コンピュータ内部のＩ／Ｏハブによって処理され、主記憶装置へデータ転送される。この例のように、複数ポートを有するＩ／Ｏハブは、複数のＰＣＩeからの処理を何らかのアービトレーションによって順序だてて処理するスイッチとしての役割を持つ。すなわち、図２７の例に従えば、１本しかない主記憶装置へのデータ転送パスを、４ポートのＰＣＩeで共有するために、その間に存在する切替スイッチがＩ／Ｏハブとなる。ここで、各ＰＣＩeポートそれぞれの転送においては追越が生じることが無く、トランザクションの発行順に主記憶装置に書き込まれることは、既に述べたとおりである。しかし、複数のＰＣＩeポート間での順序保証は規定されておらず、４ポートのＰＣＩeに分配されたトランザクションは、ポート間ではどのような順序で処理されるか分からない。
【００１６】
その結果、図２７に示すように、ネットワークアダプタによって細分化されたデータの一部が書き込まれた後に、完了通知が書き込まれ、さらにその後に残りのデータが書き込まれるような状況が生じうる。上述したとおり、ソフトウェアは完了通知が読み出せたことを以って、主記憶装置からデータを読み込もうとするが、この例ではその時点ではまだ書き込まれていないデータが残っている。よって、ソフトウェアは正しくデータを読み出すことはできない。
【００１７】
本発明の目的は、複数のインタフェースを介してコンピュータと接続するデータ転送装置において、データ転送要求によって主記憶装置に書き込まれるべきデータが、関係する全てのソフトウェアによって読み出せるようになった段階で、ソフトウェアがデータ転送の完了を認識できるようにすることにある。
【課題を解決するための手段】
【００１８】
上記の課題を解決するために、本発明は、主記憶装置に対するデータの書き込み完了通知を複数の部分完了通知に分割して定義し、複数のインタフェースのそれぞれから部分完了通知を主記憶装置に書込む。そして、コンピュータ上で動作するソフトウェアは、その完了通知を構成する全ての部分完了通知が主記憶装置から読み出せた段階で、当該完了通知が読み出せたものと見做し、データの転送が完了したと判断する。
【００１９】
好ましい例によれば、本発明に係るデータ転送装置は、主記憶装置を有するコンピュータと第１のインタフェースを介して接続され、かつ外部の装置と第２のインタフェースを介して接続され、該外部の装置からの要求に応じて該主記憶装置に対してデータの転送制御を行うデータ転送装置であって、
該第１のインタフェースまたは第２のインタフェースが該コンピュータの主記憶装置へのアクセス要求を受け付けた時に、該主記憶装置に対するデータ転送要求を発行するデータ転送要求生成部と、
該データ転送要求生成部が該データ転送要求を発行した後に、データ転送完了を示す完了通知を該主記憶装置に転送する完了通知転送要求を発行する完了通知転送要求生成部と、
該データ転送要求又は該完了通知転送要求を、該第１のインタフェースを構成する複数のインタフェースの少なくとも１つに発行する転送要求分配部と、を有し、
該完了通知は複数の部分完了通知から構成され、かつ該部分完了通知は、該部分完了通知が有効又は無効であることを示すフラグを有して構成されるデータ転送装置として構成される。
【００２０】
また好ましくは、本発明に係るコンピュータシステムは、主記憶装置を有するコンピュータと、該コンピュータと第１のインタフェースを介して接続され、かつ外部の装置と第２のインタフェースを介して接続され、該外部の装置からの要求に応じて該主記憶装置に対してデータの転送制御を行うデータ転送装置とを含むコンピュータシステムにおいて、
該データ転送装置は：
該第１のインタフェースまたは第２のインタフェースが該コンピュータの主記憶装置へのアクセス要求を受け付けた時に、該主記憶装置に対するデータ転送要求を発行するデータ転送要求生成部と、
該データ転送要求生成部が該データ転送要求を発行した後に、データ転送完了を示す完了通知を該主記憶装置に転送する完了通知転送要求を発行する完了通知転送要求生成部と、
該データ転送要求又は該完了通知転送要求を、該第１のインタフェースを構成する複数のインタフェースの少なくとも１つに発行する転送要求分配部と、を有し、
該完了通知は複数の部分完了通知から構成され、かつ該部分完了通知は、該部分完了通知が有効又は無効であることを示すフラグを有して構成され、
該コンピュータは：
データ処理するプロセッサと、先入れ先出し（ＦＩＦＯ）される完了通知を記憶する所定領域を有する前記主記憶装置と、該主記憶装置と接続されると共に、第１のインタフェースを介して該データ転送装置と接続されるＩ／Ｏハブを有し、
該プロセッサは、プログラムの実行によって、該所定領域における完了通知の状況を監視する完了判定手段と、該主記憶装置からデータを読み出すデータ読出手段とを実現し、
該完了判定手段は、該完了通知を構成する全ての部分完了通知が該所定領域から読み出せた時に、データ転送完了であることを該データ読出手段に通知するコンピュータシステムとして構成される。
【発明の効果】
【００２１】
本発明によれば、複数のインタフェースを介してコンピュータと接続され、コンピュータの主記憶装置に対してデータを書込むデータ転送装置において、データ転送の完了を、コンピュータないしはコンピュータ上で動作するソフトウェアに通知することができ、ソフトウェアは正しくデータを読み出すことが可能となる。
【図面の簡単な説明】
【００２２】
【図１】一実施形態によるネットワークアダプタを用いたコンピュータシステムを示す図である。
【図２】一実施形態によるネットワークアダプタの構成例を示すブロック図である。
【図３】一実施形態によるコンピュータの構成例を示すブロック図である。
【図４】一実施形態によるネットワークアダプタとコンピュータ間のデータ及び完了通知の転送を示す概念図である。
【図５】一実施形態によるネットワークアダプタの転送要求分配部の構成例を示すブロック図である。
【図６】一実施形態によるネットワークアダプタの完了通知転送要求生成部の構成例を示すブロック図である。
【図７】一実施形態によるネットワークアダプタの転送要求分配部においてアドレスインタリーブによって形成される、計算機の主記憶装置のアドレス空間とインタフェースとの関係を示すアドレスマップである。
【図８】一実施形態によるネットワークアダプタの記憶部による完了状況記憶フラグの構成例を示す図である。
【図９】一実施形態（第１の例）によるネットワークアダプタの記憶部の構成例を示すブロック図である。
【図１０】一実施形態（第２の例）によるネットワークアダプタの記憶部の構成例を示すブロック図である。
【図１１】一実施形態（第３の例）によるネットワークアダプタの記憶部の構成例を示すブロック図である。
【図１２】一実施形態（第４の例）によるネットワークアダプタの記憶部の構成例を示すブロック図である。
【図１３】上記第２の例におけるネットワークアダプタの完了状況記憶フラグの構成例を示す概念図である。
【図１４】上記第４の例におけるネットワークアダプタの完了状況記憶フラグの構成例を示す概念図である。
【図１５】上記第４の例におけるネットワークアダプタのエンドポイント対応記憶部の構成例を示す概念図である。
【図１６】一実施形態による完了通知のフォーマットを示す図である。
【図１７】一実施形態による完了通知キューの構成を示す図である。
【図１８】一実施形態（例１）による４ポート構成の場合の完了通知のフォーマットを示す図である。
【図１９】一実施形態（例２）による４ポート構成で２ポートを使用している場合の固定長完了通知のフォーマットを示す図である。
【図２０】一実施形態による主記憶装置に書き込まれた完了通知要求を処理するプログラムの処理フローを示す図である。
【図２１】一実施形態によるネットワークアダプタで処理されるＲＤＭＡ Ｗｒｉｔｅ要求メッセージの構成例を示す図である。
【図２２】一実施形態（第１の例）によるネットワークアダプタとコンピュータの主記憶装置間のデータ転送における完了通知の処理の流れを示す図である。
【図２３】一実施形態（第２の例）によるネットワークアダプタとコンピュータの主記憶装置間のデータ転送における完了通知の処理の流れを示す図である。
【図２４】一実施形態（第３の例）によるネットワークアダプタとコンピュータの主記憶装置間のデータ転送における完了通知の処理の流れを示す図である。
【図２５】一実施形態（第４の例）によるネットワークアダプタとコンピュータの主記憶装置間のデータ転送における完了通知の処理の流れを示す図である。
【図２６】従来の、ネットワークアダプタとコンピュータの主記憶装置間のデータ転送における完了通知の処理の流れを示す図である。
【図２７】従来の、複数のインタフェースを用いた、ネットワークアダプタとコンピュータの主記憶装置間のデータ転送における完了通知の処理の流れを示す図である。
【発明を実施するための形態】
【００２３】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。
本発明は、複数のインタフェースを介してコンピュータの主記憶装置にデータ転送を行うデータ転送装置に適用することが可能である。一実施形態では、ＲＤＭＡ転送を行うネットワークアダプタに適用したものである。しかし、本発明はネットワークアダプタへの適用に限定されず、ストレージアダプタ、及び、グラフィックスアダプタなどに適用することが可能である。
【００２４】
図１は、一実施形態によるデータ転送装置であるネットワークアダプタを用いたコンピュータシステムを示す。
複数のノード１０２は、リンク１０１を介して、例えばＩｎｆｉｎｉＢａｎｄにより構成されるネットワーク１００に接続され、各ノード１０２間で相互にＲＤＭＡ転送を行う。
各ノード１０２は、例示のように、リンク１０１に接続されるネットワークアダプタ１０３と、コンピュータ１０４を有する。ネットワークアダプタ１０３とコンピュータ１０４の間は例えばＰＣＩeインタフェース１０５によって接続され、その場合ネットワークアダプタ１０３はＰＣＩカードによって構成される。コンピュータ１０４は、通常、複数のサーバ又はプロセッサから構成され、主記憶装置を備える。ＰＣＩeインタフェース１０４にはパケットの形式のデータが転送され、ＰＣＩeインタフェース１０４に転送された順番に、そのデータは主記憶装置に書き込まれる。
なお、以後の説明において、あるノードに注目して説明を行う場合、そのノードをローカルノードと称し、ローカルノードとネットワーク１００を介して接続される他のノードをリモートノードと言うことがある。
【００２５】
図２は、データ転送装置であるネットワークアダプタ１０３の構成例を示す。
ネットワークアダプタ１０３は、リンク１０１に接続されるネットワークインタフェース２０１及びコンピュータ１０４に接続される複数のＰＣＩeインタフェース２０８を有する。動作的に言えば、ネットワークアダプタ１０３は、ネットワークインタフェース２０１を介して、ＲＤＭＡ  Ｗｒｉｔｅ要求（図２１）を受信し、複数のＰＣＩeインタフェース２０８を介して、分割された受信データをコンピュータの主記憶装置（図３）に格納するためのデータ転送要求及び主記憶装置に対するデータの書き込み完了を示す完了通知（図１６）を転送する。これを実現するために、以下のような特徴的な構成乃至機能を有する。
【００２６】
ネットワークアダプタ１０３は、その内部構成として、受信パケットのヘッダを認識して、受信データのＤＭＡ転送を行う受信処理部２０２、ＰＣＩeインタフェース２０８からデータパス２０９を介して得られるデータやパラメータをＲＤＭＡ Ｗｒｉｔｅメッセージに組み立て、パケット化して、ネットワークインタフェースから送出する送信処理部２０３、受信データを、ＰＣＩeの1個のパケットで転送できる大きさに細分化し、複数のポートに分配するために1乃至複数個のデータ転送要求を生成するデータ転送要求生成部２０４、ＤＭＡ転送により受信データの主記憶装置への記憶が完了したことを示す完了通知転送要求を生成する完了通知転送要求生成部２０５、データ転送要求生成部２０４で作成されたデータ転送要求、並びに完了通知転送要求生成部２０５で生成された完了通知転送要求を、複数のＰＣＩeインタフェース２０８の数分に分配する転送要求分配部２０６、及び受信データ及び完了通知の発行状況に関する情報を記憶する記憶部２０７を有して構成される。なお、データ転送要求生成部２０４で受信データが細分化されるが、細分化の数はポートの数と無関係である。例えば、コンピュータ１０４のサポートするＰＣＩｅのパケットサイズの制約に合わせて、受信データを細分化する。
本発明に特徴的な、完了通知転送要求生成部２０５の機能動作及び記憶部２０７における完了通知の記憶管理等については、図４以降を参照して詳述する。
【００２７】
図３はコンピュータ１０４の構成例を示す。
コンピュータ１０４は、システムバス３０１に、一方がＰＣＩeインタフェースに接続されたＩ／Ｏハブ３０２、主記憶装置３０４を制御する主記憶制御部３０３、及び１又は複数のプロセッサ３０５がそれぞれ、システムバス３０１に接続して構成される。ＰＣＩeインタフェースからＩ／Ｏハブ３０２を介してＤＭＡ転送されたデータは、システムバス３０１を通り、主記憶制御部３０３の制御により主記憶装置３０４に書き込まれる。主記憶装置３０４には、種々のデータやプログラム等が記憶される。１つの特徴として、受信データをＤＭＡ転送にて格納するデータ領域及び当該データ領域にデータの書き込みが完了したことを示す完了通知を保管するキュー領域を有している。
プロセッサ３０５は種々のデータ処理を行うが、少なくともその１つは通信ライブラリ用のプログラムの実行によって、主記憶装置３０４へのデータの書き込みの完了の監視制御を行う。その制御については、図２０を参照して後述する。
【００２８】
次に、図４を参照して、ネットワークアダプタとコンピュータの間のデータ及び完了通知の転送について概念的に説明する。
主記憶装置３０４には、データを格納するデータ領域３０４１と、完了通知を格納するキュー領域３０４２が確保されている。
ネットワークアダプタ１０３において、受信処理部２０２が受信データ（メッセージ）を受信すると、データ転送要求生成部２０４はデータをデータ領域３０４１に順次格納する。また、完了通知転送要求生成部２０５は、データが分配されたインタフェースの数に応じた、完了通知（以後、部分完了通知という）を生成して、その完了通知をキュー領域３０４２に順次格納する。
なお、データ領域３０４１及びキュー領域３０４２は、ネットワークアダプタがサポートするエンドポイントの数に対応して複数プレーンが用意されている。なお、エンドポイントとは仮想的な通信経路（詳細は後述）である。
【００２９】
プロセッサ３０５又はそのプロセッサ上で動作するソフトウェア（例えば通信ライブラリプログラム）４０は、完了判定部４０１及びデータ読み出し部４０２の各機能を有している。完了判定部４０１が、分割された複数の部分完了通知の全てが主記憶装置３０４にエンキューされたことを判定すると、その旨をデータ読み出し部４０２へ通知し、その後、データ読み出し部４０２は主記憶装置に格納された当該データを読み出すことができる。
【００３０】
図５は、ネットワークアダプタの転送要求分配部２０６の構成例を示す。
アービタ５０１は、データ転送要求生成部２０４との信号Ｓ５１又は完了通知転送要求生成部２０５との信号Ｓ５２を切り替える機能と有し、データ転送要求生成部２０４又は完了通知転送要求生成部２０５からデータを受入れて、スイッチ５０４及び出力ポート判定部５０２へ宛先アドレスやエンドポイント識別子等のパラメータとデータの組から構成される信号（データ転送要求）Ｓ５３を送る。なお、出力ポート判定部５０２では、受信した信号Ｓ５３からアドレスインタリーブによる出力ポートの判定のために宛先アドレスを用い、記憶部へのフラグセット要求のために、エンドポイント識別子と出力ポートを示すインタフェース識別子を送る。
【００３１】
インタリーブ粒度設定部５０３は、インタリーブの粒度を設定するレジスタから構成され、外部（例えばドライバなど）が設定する、インタリーブ空間1個の大きさ（例えば図７では１ＫＢ）を、当該レジスタに設定する。
出力ポート判定部５０２は、インタリーブ粒度設定部５０３から指示されたインタリーブ粒度（例えば１ＫＢなど）に基づいて、データ転送対象アドレスから出力ポートを決定し、そのポートを識別する情報Ｓ５４をスイッチ５０４へ送る。スイッチ５０４は、出力ポート判定部５０２からの情報に基づいて、データ転送要求Ｓ５３を複数のポートのうちの１つに出力する。
【００３２】
この構成により、データ転送要求生成部２０４で複数に細分化された受信データは、インタリーブ粒度設定部５０３で設定された粒度に従って、出力ポート判定部５０２により指定されスイッチ５０４で選択されたＰＣＩeインタフェースを介して、コンピュータ１０４の選択されたポートへ転送される。
なお、ここで、データ転送要求生成部２０３からのデータ転送要求は、出力ポートの設定（インタフェース識別子）は含まれておらず、転送要求分配部２０６で決定されるものとする（アドレスインタリーブ）。また、完了通知転送要求生成部２０４からの完了通知転送要求（部分完了通知転送要求）には、出力ポートの設定（インタフェース識別子）が含まれており、転送要求分配部２０６はアドレスインタリーブを行わずに、単に指定された出力ポートに完了通知転送要求（部分完了通知転送要求）を出力する。
【００３３】
図６は、ネットワークアダプタの完了通知転送要求生成部２０５の構成例を示す。
完了通知転送要求生成部２０５は、受信処理部２０２からエンドポイント毎の書込み要求Ｓ６１を得て、記憶部２０７に書込みの完了通知をいずれのポートに対して出すべきかの問合せ（Ｓ６２，Ｓ６３）を行い、完了通知を出すべきポートを識別する情報（インタフェース識別子）Ｓ６４１，エンドポイント識別子Ｓ６４２，データを書き込むべき主記憶装置上の宛先アドレスＳ６４３，及び完了通知データＳ６４４の各信号を転送要求分配部２０６へ送出する機能を有する。
より具体的に言えば、フラグ読出し要求部６０１は、記憶部２０７に対してエンドポイント毎の完了状況の問い合せＳ６２を出し、記憶部２０７からの応答Ｓ６３として完了通知を出すべきポート（インタフェース識別子）を受領して、インタフェース識別子Ｓ６４１を転送要求分配部２０６へ送出する。
【００３４】
完了通知フォーマット生成部６０２は、図１８、図１９に示す完了通知のデータ構造のうちフラグ読出し要求部６０１がＳ６５で指定した個数のものを生成する。完了通知管理用ポインタ６０３は、図１７に示す完了通知キューのポインタを保持する。即ち、完了通知転送要求生成部２０５は、キューに書き込む（エンキューする）側なので、テールポインタを管理することになる。逆に、読み出す（デキューする）側であるプロセッサ３０５又はその上で動作するソフトウェアは、ヘッドポインタを管理することになる。アドレス計算部６０４は、主記憶装置にデータを書き込むときの宛先アドレスを計算する。
【００３５】
なお、エンドポイントとは、仮想的な通信経路と考えてよい。即ち、１つの物理ノードに複数のエンドポイントを配置でき、１つの物理ノードは複数のエンドポイント毎にメッセージを同時並行的に送受信することができる。また、同一のエンドポイント内ではメッセージの順序性が保証されているので、あるメッセージを送り終わるまで次のメッセージを送ることが出来ない。そのため、異なるメッセージのパケットが混じることはない。一方、異なるエンドポイント間では、同一の通信経路を共有し、かつ異なるエンドポイント間ではメッセージの発行が同時並行的に行われるので、異なるエンドポイントから送信されるメッセージを構成するパケットは混ざる。
【００３６】
図７は、ネットワークアダプタにおいて、転送要求分配部２０６のアドレスインタリーブによって形成される、コンピュータ１０４の主記憶装置３０４のアドレス空間とインタフェースとの関係を示すアドレスマップである。
アドレス空間は、例えば１Ｋバイト単位に分けられ、各インタリーブ空間は４つのポート（＃０〜３）毎に、インタリーブ空間＃１〜＃１０４８５７６の数、形成されている。各インタリーブ空間の先頭を表す１６進のアドレス（先頭アドレス）のうち、２ビットが４つのポートのいずれかと対応している。
【００３７】
図８は、ネットワークアダプタの記憶部２０７による完了状況記憶フラグの構成例を示す。
完了状況記憶フラグは、主記憶装置のデータ領域にデータの書込みが完了したかの状況を管理するフラグであり、４つのポートに対応してそれぞれ１ビットずつ用意される。ポートにデータを送出する度に、フラグは“１”にセットされ、部分完了通知の送出によって“０”にリセットされる。
【００３８】
図９は、ネットワークアダプタの記憶部２０７の構成例（第１の例）を示す。
記憶部２０７は、主記憶装置３０４に対するデータの書込みの完了状況を示す情報を記憶して管理する。そのために、フラグセット部９０１、フラグクリア部９０２、完了状況記憶フラグ９０３、及びフラグ読出し部９０４を有する。
フラグセット部９０１は、転送要求分配部２０６が複数のインタフェースの１つにデータ転送要求を発行した時に発せられる、インタフェース識別子を含むフラグセット要求Ｓ５５１を受け付ける。そして、フラグセット要求を受けた時に、フラグセット要求に含まれるインタフェース識別子で示されるインタフェースに対応する完了状況記憶フラグのうち１又は複数のフラグをセットする。
【００３９】
フラグクリア部９０２は、転送要求分配部２０６から送られる、インタフェース識別子を含むフラグクリア要求Ｓ５５２を受け付け、そのフラグクリア要求に含まれるインタフェース識別子で示されるインタフェースに対応する完了状況記憶フラグのうち１又は複数のフラグをクリアする。
完了状況記憶フラグ９０３は、図８に示すように、４つのインタフェースのそれぞれに対応したフラグを有し、対応するポートに対するデータ転送の完了状況を、セット“１”又はリセット“０”として記憶管理する。
フラグ読出し部９０４は、完了通知転送要求生成部２０５から送られるフラグ読出し要求Ｓ６２を受けて、完了状況記憶フラグ９０３を読み出し、そのフラグを読出し要求に対する応答Ｓ６３として完了通知転送要求生成部２０５へ転送する。
【００４０】
図１０は、ネットワークアダプタの記憶部２０７の構成例（第２の例）を示す。
この例は図９の変形例である。図９の例と相違する主な点は、複数ｎ面の完了状況記憶フラグ９０３を有する点、及びフラグセット部９０１に入力されるフラグセット要求Ｓ５５、フラグクリア部９０２に入力されるフラグクリア要求Ｓ５５２に、それぞれインタフェース識別子に加えて、エンドポイントを識別するための情報であるエンドポイント識別子が含まれる点と、フラグ読出し部９０４に入力されるフラグ読出し要求Ｓ６２に、読み出し要求に加えてエンドポイント識別子が含まれる点、にある。
【００４１】
完了状況記憶フラグ９０３は、このネットワークアダプタ１０３が外部インタフェースを介して接続されるエンドポイントの最大数と同じかそれ以上の数の面数を持ち、各面の完了状況記憶フラグ９０３はそれぞれのエンドポイントと対応している。図１３に示すように、完了状況記憶フラグ９０３は、各インタフェースに対応したポート（４つのポート）の完了状況を示すフラグ、（即ち完了“０”又は未完了“１”）から成る多数（２１６−１）のエントリを記憶する。
【００４２】
フラグセット部９０１は、転送要求分配部２０６からのフラグセット要求Ｓ５５１を受けた時に、そのフラグセット要求に含まれるエンドポイント識別子、及びインタフェース識別子に対応する完了状況記憶フラグの１又は複数のフラグをセットする。
フラグクリア部９０２は、転送要求分配部２０６からのフラグクリア要求Ｓ５５２を受けた時に、そのフラグクリア要求に含まれるエンドポイント識別子、及びインタフェース識別子に対応する完了状況記憶フラグの１又は複数のフラグをクリアする。
【００４３】
フラグ読出し部９０４は、完了通知転送要求生成部２０５からフラグ読出し要求Ｓ６２を受けた時に、そのフラグ読出し要求に含まれるエンドポイント識別子に対応するフラグを読み出して、読出し要求に対する応答Ｓ６３として完了通知転送要求生成部２０５へ転送する。
なお、転送要求分配部２０６は、完了通知転送要求生成部２０５を介して、記憶部２０７から得られたフラグで示される各のインタフェースに、部分完了通知を転送する部分完了通知転送要求を発行する。
【００４４】
図１１は、ネットワークアダプタの記憶部２０７の構成例（第３の例）を示す。
この例において、記憶部２０７は、フラグセット部９０１、フラグクリア部９０２、完了状況記憶フラグ９０３、フラグ読出し部９０４に加えて、エンドポイント識別子記憶部１１０１及びエンドポイント識別子比較器１１０２を有している。
ここで、フラグセット部９０１、フラグクリア部９０２、完了状況記憶フラグ９０３、フラグ読出し部９０４は、図９等に示した例における機能と同様であり、複数のインタフェースに対応した数のフラグを有する。フラグセット要求、及びフラグクリア要求は、エンドポイントを識別するエンドポイント識別子、及び複数のＰＣＩeインタフェースをそれぞれ識別するインタフェース識別子を含む。フラグ読出し要求は、読出し要求に加えて、エンドポイント識別子を有する。
【００４５】
エンドポイント識別子記憶部１１０１はエンドポイント識別子を記憶する。また、エンドポイント識別子比較器１０２は、エンドポイント識別子記憶部１１０１に記憶するエンドポイント識別子と、他の１つのエンドポイント識別子が一致しているかを判定し、その結果、一致又は不一致を出力する。
【００４６】
フラグセット部９０１は、転送要求分配部２０６からのフラグセット要求Ｓ５５１を受けた時に、そのフラグセット要求に含まれるエンドポイント識別子及びエンドポイント識別子比較要求をエンドポイント識別子比較器１１０２へ送り、そこで、エンドポイント識別子記憶部１１０１に記憶されたエンドポイント識別子と比較する。比較の結果として、フラグセット部９０１はエンドポイント識別子比較器１１０２から一致又は不一致を示す情報を受領する。そして、両者が一致している場合には、フラグセット要求に含まれるインタフェース識別子に対応するフラグをセットし、不一致の場合には、全てのフラグをセットする。その理由は、処理しているエンドポイントをエンドポイント識別子記憶部に記憶しておき、同じエンドポイントを処理している時は上記第１の例と同様に動作させ、一方処理しているエンドポイントと異なるエンドポイントの処理が始まった場合（同時並行的に別のエンドポイントの転送が始まった場合）、フラグの中身は使えないので、フラグが無いものと看做して動作する、即ち全フラグをセットする（つまり全ポートに部分完了通知を送出する）。
【００４７】
フラグクリア部９０２は、転送要求分配部２０６からのフラグクリア要求Ｓ５５２を受けた時に、そのフラグクリア要求に含まれるエンドポイント識別子及びエンドポイント識別子比較要求をエンドポイント識別子比較器１１０２へ送り、そこで、エンドポイント識別子記憶部１１０１に記憶されたエンドポイント識別子と比較する。比較の結果として、フラグセット部９０１はエンドポイント識別子比較器１１０２から一致又は不一致を示す情報を受領し、両者が一致している場合には、フラグクリア要求に含まれるインタフェース識別子に対応するフラグをクリアし、不一致の場合には、フラグクリア要求に含まれるインタフェース識別子に対応するフラグをクリアし、それ以外のフラグはセットする。この理由も上述と同様に、同時並行的に別のエンドポイントの転送が始まった場合、フラグは無いものと看做して、過去の履歴は分からないものと扱い、今クリアしたフラグ以外はセットする。
【００４８】
フラグ読出し要求部９０４は、完了通知転送要求生成部２０５からフラグ読出し要求Ｓ６２を受けた時に、フラグ読出し要求に含まれるエンドポイント識別子及びエンドポイント識別子比較要求をエンドポイント識別子比較器へ送り、そこで、エンドポイント識別子記憶部１１０１に記憶されたエンドポイント識別子と比較する。比較の結果として、フラグセット部９０１はエンド識別子比較器１１０２から一致又は不一致を示す情報を受領する。一致していた場合には、読出し要求に対する応答Ｓ６３として完了通知転送要求生成部２０５へ転送する。不一致の場合には、全てがセットされているフラグを、読出し要求に対する応答Ｓ６３として完了通知転送要求生成部２０５へ転送する。
【００４９】
なお、転送要求分配部２０６は、完了通知転送要求生成部２０５を介して記憶部２０７から得られたフラグで示される該複数のインタフェースのそれぞれに、部分完了通知を転送する部分完了通知転送要求を１又は複数発行し、部分完了通知を発行したインタフェースを示すインタフェース識別子を含むフラグクリア要求を発行する。
なお、上記の例では、単一のエンドポイント識別子比較器１１０２を設けているが、フラグセット部９０１、フラグクリア部９０２、フラグ読出し部９０４の各々に対応して、1個ずつ（合計３つ）エンドポイント識別子比較器を設けるようにしてもよい。
【００５０】
図１２は、ネットワークアダプタの記憶部２０７の構成例（第４の例）を示す。
この例では、記憶部２０７は、フラグセット部９０１、フラグクリア部９０２、完了状況記憶フラグ９０３、フラグ読出し部９０４に加えて、エンドポイント対応記憶部１２０１及びエントリ決定部１２０２を有している。
完了状況記憶フラグ９０３は、このネットワークアダプタ１０３が対応するエンドポイントの最大数未満のエントリを持つ。例えば、図１４に示すように、完了状況記憶フラグ９０３は、各インタフェースに対応したポート（４つのポート）の完了状況を示すフラグ、（即ち完了“０”又は未完了“１”）から成る、８つのエントリを記憶する。
【００５１】
エンドポイント対応記憶部１２０１は、図１５に示すように、完了状況記憶フラグ９０３のエントリ数に対応して、８つのエントリを有し、各エントリは、当該エントリが有効か無効かを示す有効フラグと、エンドポイント識別子と、及び当該エントリの使用頻度を示すリプレースメント情報を記憶する。エントリ決定部１２０２はこのリプレースメント情報を監視することで、更新されていないエントリを認識して、そのエントリを利用してエンドポイント識別子を管理することができる。これにより、少ない数のエントリを有効に利用することができる。リプレースメント情報としては、例えばＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）を用いることが出来る。この例の様に８エントリであれば、２８ビットでＬＲＵを構成することができる。
【００５２】
転送要求分配部２０６がデータ転送要求を各ポートに分配して送出した時に発行するフラグセット要求、同じく転送要求分配部２０６が完了通知転送要求（或いは部分完了通知転送要求）を指定されたポートに送出した時に発行するフラグクリア要求は、複数の各インタフェースを識別するインタフェース識別子と、各エンドポイントを識別するエンドポイント識別子を含む。また、完了通知転送要求生成部２０５からのフラグ読出し要求は、各エンドポイントを識別するエンドポイント識別子を含む。
エントリ決定部１２０２は、フラグセット部９０１、フラグクリア部９０２、ないしは、フラグ読出し部９０４からのエンドポイント識別子を含むエントリ割当要求を受けて、エントリ割当要求に含まれるエンドポイント識別子と同一のエンドポイント識別子を有するエンドポイント対応記憶部１２０１のエントリを検索する。その結果、一致するエントリがあった場合には当該エントリを示すエントリ識別子と検索が成功したことを示すヒット情報を要求元（即ちフラグセット部９０１、フラグクリア部９０２、フラグ読出し要求部９０４）に転送する。一方、一致するエントリが無かった場合には、エンドポイント対応記憶部１２０１のいずれかのエントリを置き換えて当該エンドポイント識別子を有するエントリを新規に作成し、そのエントリを示すエントリ識別子と検索が失敗したことを示すミス情報を要求元に転送する。
【００５３】
フラグセット部９０１は、転送要求分配部２０６からのフラグセット要求Ｓ５５１を受けた時に、フラグセット要求に含まれるエンドポイント識別子を含むエントリ割当要求を発行する。そして、ヒット情報が得られた場合には、得られたエントリ識別子に対応する完了状況記憶フラグ９０３のうち、フラグセット要求に含まれるインタフェース識別子に対応するフラグをセットする。一方、ミス情報が得られた場合には、得られたエントリ識別子に対応する完了状況記憶フラグを全てセットする。
【００５４】
フラグクリア部９０２は、転送要求分配部２０６からのフラグクリア要求Ｓ５５２を受けた時に、フラグクリア要求に含まれるエンドポイント識別子を含むエントリ割当要求を発行する。そして、ヒット情報が得られた場合には、得られたエントリ識別子に対応する完了状況記憶フラグ９０３のうち、フラグクリア要求に含まれるインタフェース識別子に対応するフラグをクリアする。一方、ミス情報が得られた場合には、得られたエントリ識別子に対応する完了状況記憶フラグのうち、フラグクリア要求に含まれるインタフェース識別子に対応するフラグのみクリアし、それ以外のフラグをセットする。
【００５５】
フラグ読出し要求部９０４は、完了通知転送要求生成部２０５からフラグ読出し要求Ｓ６２を受けた時に、フラグ読出し要求に含まれるエンドポイント識別子を含むエントリ割当要求を発行する。そして、ヒット情報が得られた場合には、得られたエントリ識別子に対応する完了状況記憶フラグ９０３を完了通知転送要求生成部２０５に転送し、ミス情報が得られた場合には、得られたエントリ識別子に対応する完了状況記憶フラグを全てセットし、セットされたフラグを読出し要求に対する応答Ｓ６３として完了通知転送要求生成部２０５へ転送する。
【００５６】
なお、転送要求分配部２０６は、記憶部２０７から得られたフラグで示される複数の各インタフェースに、部分完了通知を転送する部分完了通知転送要求を発行し、その部分完了通知を発行したインタフェースを示すインタフェース識別子を含むフラグクリア要求を発行する。
【００５７】
図１６は完了通知のフォーマットを示す。
この完了通知は、ネットワークアダプタ１０３からコンピュータ１０４へ完了通知要求によって送られて、コンピュータの主記憶装置３０４に書き込まれる。
完了通知は４バイトから成り、バイト０：有効／無効フラグ（Ｖ）及び転送データの書き込み状況が正常終了かエラー終了かを示すフラグデータ、バイト１：完了通知（部分完了通知）がｎ個中ｍ個目であること（部分完了通知の個数はデータを送出したインタフェースの数に対応している）を識別する完了通知種別、バイト２，３：何れのエンドポイントかを識別するエンドポイント識別子、から成る。
【００５８】
図１７は、完了通知キューの構成を示す。
完了通知キューには、当該ポートに分割されたデータを全て書き終わった後に、部分完了通知の書き込みが行われる。例えば図２２において分割されたデータ１、データ５が出力されているポートでは、２つのデータ１、データ５が全て書き終わった段階で、完了通知キューに部分完了通知１が書き込まれる。
プロセッサ３０５上で動作するプログラムは、キュー領域への書き込みポインタ（テールポインタ）、及びデキュー済みの完了通知キューの場所を示すヘッドポインタを監視している。ここで、テールポインタはネットワークアダプタが持っており、プロセッサからは見えず、プロセッサは読出しポインタ（ヘッドポインタ）で示される箇所をポーリングし続ける。
【００５９】
図１８は、４ポート構成の場合の完了通知のフォーマットを示す。
４ポート構成の場合、受信データは４つに分割され、分割データは各ポートを通って転送される。そこで、各ポートを通って転送される分割データの主記憶装置への書込み完了を示す部分完了通知が、各ポートに対応して規定される。部分完了通知のフォーマットは、図１６に示したフォーマットの完了通知のものと同様である。
なお、４ポート構成に限らず、一般的に複数ｎポート構成の場合も同様に、ポートの数ｎに応じて、部分完了通知が規定されることが理解されるであろう。
【００６０】
図１９は、他の例による複数ポート構成の場合の完了通知のフォーマットを示す。
図１８に示した例は可変長の場合の例であるが、図１９に示す例は、４ポート構成で２ポートしか使用していない場合の完了通知であって、固定長の例である。図１６に示したフォーマットと同様の、２ポート用部分完了通知の保管領域が確保される。その余はリザーブ領域となる。なお、固定長の場合でも、２ポートに限らず、一般的に複数ｎポート構成の場合も同様に、ポートの数ｎに応じて部分完了通知が規定される。
【００６１】
次に、図２０を参照して、主記憶装置に書き込まれた完了通知要求を処理するプログラムの処理動作について説明する。このプログラムはコンピュータ１０４のプロセッサ３０５上で実行される。
プログラムの完了判定部４０１(図４)は、主記憶装置３０４のキュー領域に書き込まれる完了通知キュー及びそのデキューの状況（図１７〜図１９）を監視している（Ｓ２００１）。その監視において、デキューに成功したか否か（デキュー済みか）を判断する（Ｓ２００２）。判断の結果、デキューに失敗したら、再び監視を続ける。一方、デキューに成功したら、プログラムが自ら持つカウンタに完了通知の個数を設定する（Ｓ２００３）。部分完了通知の個数は、分割されたデータを転送するために使用したポートの個数に対応する。例えば、４つポートに対して４分割されたデータを転送する場合、部分完了通知の数は“４”となる。この“４”がカウンタに設定される。この情報は、図１６に示す完了通知のフォーマットのうち、完了通知種別から得ることが出来る。
【００６２】
カウンタの値は減算されるものであり、まず、カウンタ値が“１”か、判定される（Ｓ２００４）。その判定の結果、“１”の場合、完了通知成立と判断して（Ｓ２００５）、終了する。一方、“１”でなければ、完了通知キーからデキューして（Ｓ２００６）、デキューが成功したか判定する（Ｓ２００７）。その結果、失敗ならば、成功するまで再度デキューを繰り返す。デキューが成功ならば、カウンタの値を“１”減算して（Ｓ２００８）、ステップＳ２００４へ移る。
このようにして、当初セットしたカウンタ値（例えば“４”）が順次減算されて、最終的に“１”になれば、完了通知が全て成立と判定する。これにより、プログラムは、ＲＤＭＡ  Ｗｒｉｔｅ要求によって転送されて来て複数に分割されたデータが、全て主記憶装置のデータ領域に書き込まれと判断する。
その後、プログラムのデータ読出し部４０２は、データ領域に格納された当該データを読み出すことが可能となる。
【００６３】
次に、図２２〜図２５を参照して、ネットワークアダプタとコンピュータの主記憶装置間のデータ転送における完了通知の処理の例について説明する。
これらの例はいずれも、ネットワークアダプタとコンピュータのＩ／Ｏハブ間は複数のＰＣＩeインタフェース（４ポート）で接続されている。また、ネットワークからネットワークアダプタ１０３で受信されるＲＤＭＡ  Ｗｒｉｔｅ要求メッセージは、図２１に示すような構成を成している。即ち、ＲＤＭＡ Ｗｒｉｔｅ要求メッセージは、ヘッダ部とデータ部から成り、ヘッダ部は、コマンド（ＲＤＭＡＷｒｉｔｅ要求）、送信先ノードＩＤ（ＲＤＭＡＷｒｉｔｅ要求先ノードＩＤ）、送信元ノードＩＤ（ＲＤＭＡＷｒｉｔｅ要求元ノードＩＤ）、宛先エンドポイント識別子、Ｗｒｉｔｅ先仮想アドレス、データ長、等から構成される。
【００６４】
図２２〜図２４の例は、いずれも複数のポートに対応した数の部分完了通知（部分完了通知１〜４）をそれぞれ発行するものである。
図２２の例は、受信データの容量が多い場合であって、５つに分割したデータ（分割データ）を、４つの各ポートに転送する。その場合、４つの各ポートに対応した部分完了通知１〜４は各ポートに発行される。Ｉ／Ｏハブは、適当な順位で受信した分割データ１〜５及び部分完了通知１〜４を主記憶装置へ転送する。
【００６５】
図２３の例は、受信データの容量が少ない場合であり、分割データ１及び分割データ２は２つのポート（Ｐ０，Ｐ１）に転送される。この場合、部分完了通知１〜４は各ポートに対応しているので、データ転送が行われないポート（Ｐ２，Ｐ３）に対しても発行される。
【００６６】
図２４の例は、図２３と同様に、受信データの容量が少ない場合であり、転送すべきデータは分割データ１及び分割データ２の２つに分割され、２つのポート（Ｐ０，Ｐ１）に転送される。この場合でも、部分完了通知１〜４はポートの数に対応した数分発行されるが、使用されないポート（Ｐ２，Ｐ３）には転送されず、現に使用されるポート（Ｐ０，Ｐ１）を通して転送される。
【００６７】
図２５の例は、予め使用されるポートの数が限定されている場合（例えば２つのポート）である。図２４の例と相違する点は、ポートの数に対応した数分の部分完了通知１〜４が発行されるのではなくて、現に使用されているポートの数分（Ｐ０，Ｐ１の２つ）の部分完了通知１，２がポートＰ０，Ｐ１に対して発行される。
【００６８】
上記いずれの例でも、部分完了通知は図１７〜図１９のように、主記憶装置のキュー領域に格納される。コンピュータ１０４のプロセッサ３０５はプログラムの実行によって（図２０）、主記憶装置に格納される部分完了通知（完了通知キュー）を監視して、関係する全ての部分完了通知が書き込まれたことを判定して、主記憶装置のデータ領域に格納されたデータの読出しを行うことができる。
【符号の説明】
【００６９】
１００：ネットワーク  １０１：リンク  １０２：ノード  １０３：ネットワークアダプタ  １０４：コンピュータ  １０５：ＰＣＩeインタフェース  ２０１：ネットワークインタフェース  ２０２：受信処理部  ２０３：送信処理部  ２０４：データ転送要求生成部  ２０５：完了通知転送要求生成部  ２０６：転送要求分配部  ２０７：記憶部  ２０８：ＰＣＩeインタフェース  ３０２：Ｉ／Ｏハブ  ３０３：主記憶制御部  ３０４：主記憶装置  ３０５：プロセッサ。
【図１】
2011008678.tif 000003
【図２】
2011008678.tif 000004
【図３】
2011008678.tif 000005
【図４】
2011008678.tif 000006
【図５】
2011008678.tif 000007
【図６】
2011008678.tif 000008
【図７】
2011008678.tif 000009
【図８】
2011008678.tif 000010
【図９】
2011008678.tif 000011
【図１０】
2011008678.tif 000012
【図１１】
2011008678.tif 000013
【図１２】
2011008678.tif 000014
【図１３】
2011008678.tif 000015
【図１４】
2011008678.tif 000016
【図１５】
2011008678.tif 000017
【図１６】
2011008678.tif 000018
【図１７】
2011008678.tif 000019
【図１８】
2011008678.tif 000020
【図１９】
2011008678.tif 000021
【図２０】
2011008678.tif 000022
【図２１】
2011008678.tif 000023
【図２２】
2011008678.tif 000024
【図２３】
2011008678.tif 000025
【図２４】
2011008678.tif 000026
【図２５】
2011008678.tif 000027
【図２６】
2011008678.tif 000028
【図２７】
2011008678.tif 000029