以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一の部材には原則として同一の符号を付し、その繰り返しの説明は省略する。
本発明は、複数のインタフェースを介して計算機の主記憶装置ないしは主記憶制御部とデータ転送を行うデータ転送装置に適用することが可能であり、一例としては、ネットワークインタフェースアダプタ、ストレージインタフェースアダプタ、及び、グラフィックスアダプタなどに適用することが可能である。以下に説明する本発明の一実施の形態は、RDMA(Remote Direct Memory Access)転送を行うネットワークインタフェースアダプタに本発明を適用したものであるが、これは、本発明を実施するための最良の形態を示すために好適な適用先であるためであり、本発明の適用先をネットワークインタフェースアダプタに限定するものではない。
図1に、本発明の一実施の形態のデータ転送装置であるネットワークインタフェースアダプタによって実現するネットワークを示す。
ネットワーク100は例えばInfiniBandにより構成されるネットワークである。ネットワーク100を介して相互にRDMA転送を行うノード102は、リンク101を介してネットワークへ接続されている。これ以降の説明において、あるノードに注目して説明を行う場合、そのノードをローカルノードと称し、ローカルノードとネットワーク100を介して接続される他のノードをリモートノードと称する。
図2に、ノード102の構成の一例を示す。ノード102は計算機203、及び、リンク101を介して計算機203とネットワーク100を接続するためのネットワークインタフェースアダプタ201を有する。計算機203とネットワークインタフェースアダプタ201は少なくとも2本以上のインタフェース202−1、202−2、202−3、202−4を介して接続される。図2ではインタフェースは4本として図示されているが、2本以上の任意の本数で構成することができる。インタフェース202−1、202−2、202−3、202−4は本実施例ではPCI Expressとする。ネットワークインタフェースアダプタ201は、信号処理を行うコントローラ20を主体に構成される。
データ転送装置としてのネットワークインタフェースアダプタ201は計算機203で動作するソフトウェアからの要求に応じて、リモートノードへのRDMA転送要求パケットを生成し、ネットワーク100を介してリモートノードへ送信する。また、リモートノードからローカルノードへのRDMA転送要求パケットを受け取った時には、当該RDMA転送要求を実行するために必要なメモリトランザクション及びパケットの生成と送信を行う。RDMA転送を要求するパケットは、図9に示すRDMAライト要求パケット1400、図10に示すRDMAリード要求パケット1500及び図11に示すRDMAリード応答パケット1600の3種類がある。各パケットの詳細に関しては後述する。
図3は、本発明の一実施の形態のデータ転送装置であるネットワークインタフェースアダプタ201の構成の一例を示すブロック図である。図3は、上記図2に示したコントローラ20の詳細な機能要素を示すものである。図3に示す各部はコントローラ20の各機能として動作する。このため、コントローラ20は、プロセッサとメモリ及び信号処理回路を含んで構成される。
図3において、ネットワークインタフェースアダプタ201は、ネットワークインタフェース301、パケット解読部302、パケット生成部303、メモリトランザクション発行部304、メモリトランザクション分配部305、アドレス変換部306、アドレス変換情報記憶部307、分配情報記憶部308、分配方法設定部309、少なくとも2個以上のPCI Expressエンドポイント310−1,310−2,310−3,310−4、完了状況記憶部311、完了保証部312から構成される。
PCI Expressエンドポイント310−−1,310−2,310−3,310−4は、ネットワークインタフェースアダプタ201をPCI Expressインタフェース202−1,202−2,202−3,202−4に接続するために必要となる、PCI Expressの規格で規定された、物理層、データリンク層、トランザクション層の処理を担う。
例えば、PCI Expressエンドポイント310−1について説明する。PCI Expressエンドポイント310−1は、ネットワークインタフェースアダプタ201内の機能要素によって生成されたPCI Expressパケットを、制御・データパス373−1を介して受け取り、当該パケットをPCI Expressインタフェース202−1に送信する役割を担う。また、PCI Expressエンドポイント310−1は、計算機203がPCI Expressインタフェース202−1を介してネットワークインタフェースアダプタ201に送信したPCI Expressパケットを受け取り、制御・データパス371−1を介して接続されるネットワークインタフェースアダプタ201内の機能要素に、受け取ったパケットを送信する役割を担う。PCI Expressエンドポイント310−1は、PCI Expressインタフェース202−1を介して接続される計算機203のI/Oハブ400−1と、パケットの送受に際してフロー制御やパケットに付与された誤り訂正符号によるエラー訂正を行うなど、個々のパケットの転送を正常に行うための処理を行う。
以上、PCI Expressエンドポイント310−1に関して説明したが、これはPCI Expressエンドポイント310−2,310−3,310−4に関しても同様である。すなわち、PCI Expressエンドポイント310−2に関しては、ネットワークインタフェースアダプタ201内の機能要素が制御・データパス373−2に送信したパケットをPCI Expressインタフェース202−2に送信する役割と、計算機203がPCI Expressインタフェース202−2に送信したパケットを、制御・データパス371−2に送信する役割を持つ。PCI Expressエンドポイント310−3に関しては、ネットワークインタフェースアダプタ201内の機能要素が制御・データパス373−3に送信したパケットをPCI Expressインタフェース202−3に送信する役割と、計算機203がPCI Expressインタフェース202−3に送信したパケットを、制御・データパス37−1,3に送信する役割を持つ。PCI Expressエンドポイント310−4に関しては、ネットワークインタフェースアダプタ201内の機能要素が制御・データパス373−4に送信したパケットをPCI Expressインタフェース202−4に送信する役割と、計算機203がPCI Expressインタフェース202−4に送信したパケットを、制御・データパス371−4に送信する役割を持つ。
上記の様に、PCI Expressエンドポイント310−−1,310−2,310−3,310−4は、ネットワークインタフェースアダプタ201内部の機能要素が送信したパケットをPCI Expressインタフェース202−1,202−2,202−3,202−4に送信する役割と、計算機203内部のI/Oハブ400−1,400−2がPCI Expressインタフェース202−1,202−2,202−3,202−4に送信したパケットを、ネットワークインタフェースアダプタ201内部の機能要素に送信する役割を持つ。PCI Expressエンドポイント310−−1,310−2,310−3,310−4と、PCI Expressインタフェース202−1,202−2,202−3,202−4は、それぞれ1対1の関係になっている。よって、ネットワークインタフェースアダプタ201内の機能要素がメモリトランザクションをPCI Expressエンドポイント310−1に送信することと、前記機能要素がメモリトランザクションをPCI Expressインタフェース202−1に送信することは同じ意味を持つ。この関係は、他のPCI Expressエンドポイント310−2,310−3,310−4とPCI Expressインタフェース202−2,202−3,202−4の間でも同様である。
制御・データパス371−1はパケット生成部303、完了保証部312、分配情報記憶部308、及び、分配方法設定部309に接続されており、これら4つの機能要素が、PCI Expressインタフェース202−1からのパケットを、PCI Expressエンドポイント310−1経由で受信する。
制御・データパス371−2,37−1,3,371−4はパケット生成部303、及び、完了保証部312に接続されており、これら2つの機能要素が、PCI Expressインタフェース202−2,202−3,202−4からのパケットを、PCI Expressエンドポイント310−2,310−3,310−4経由で受信する。
制御・データパス373−−1,373−2,373−3,373−4はメモリトランザクション分配部305、及び、完了保証部312に接続されており、これら2つの機能要素がPCI Expressパケットを、PCI Expressエンドポイント310−−1,310−2,310−3,310−4経由で、PCI Expressインタフェース202−1,202−2,202−3,202−4に送信する。
ネットワークインタフェース301は、リンク101を介してネットワーク100に接続する。ネットワークインタフェース301は、データパス351を介してネットワークインタフェース301に入力されたパケットをネットワーク100に送信する。一方、ネットワーク100から受信したパケットは、データパス352を介してパケット解読部302に転送する。
パケット解読部302は、ネットワークインタフェース301を介して受信したパケットを解読し、パケットで指示されるデータ転送を行うために必要となる制御及び情報を他のブロックに伝達する。
パケット生成部303は、データ転送に必要となるパケットを生成し、ネットワークインタフェース301を介して送信する。また、パケットの生成に必要となるデータを得るために、必要な制御及び情報を他のブロックに伝達する。
パケット解読部302及びパケット生成部303は、前述したRDMAライト要求パケット1400、RDMAリード要求パケット1500及びRDMAリード応答パケット1600の他に、これらのパケットの送信元ノードに対してパケットが完全な形で到着したことを通知するためのACKパケットや、到達したパケットに欠損があるときなどにパケットの送信元に異常を通知するNACKパケットの解読ないしは生成を行う。
パケット解読部302はネットワークインタフェース301から、データパス352を介して、受信したパケットを受け取る。パケット解読部302はCRCやパケットシーケンス番号などを検査することで、パケットが欠損なく正常に到達したかを判定する。その結果、パケットが正常と判定されれば、制御パス353を介してパケット生成部303に、ACKパケットを当該パケットの送信元に送信するよう要求する。パケットが正常でないと判定されれば、制御パス353を介してパケット生成部303にNACKパケットの送信を要求する。
パケット解読部302は、前記したパケットの検査を行った後、当該パケットで要求される処理を判断し、判定された処理を実現するために必要なメモリトランザクションの発行を制御・データパス358を介してメモリトランザクション発行部304に要求する。このとき、メモリトランザクションを発行する上で必要となるアドレスやデータもメモリトランザクション発行部304に転送される。
パケット解読部302が解釈できるパケットは、前述した通り、図9に示すRDMAライト要求パケット1400、図10に示すRDMAリード要求パケット1500、図11に示すRDMAリード応答パケット1600などである。各パケットの詳細については後述する。以下に、パケット解読部302が各パケットを解釈したときの処理を述べる。
パケット解読部302が、RDMAライト要求パケット1400を受け取ると、当該パケットに含まれるライト先アドレス1406(仮想アドレス)を物理アドレスに変換するために、データパス355を介してアドレス変換部306にライト先アドレス1406を送り、データパス355を介してアドレス変換部306が変換した物理アドレスを受け取る。そして、当該物理アドレスに対してデータ1409を書き込むメモリライトトランザクションの発行を、制御・データパス358を介してメモリトランザクション発行部304に要求する。
パケット解読部302が、RDMAリード要求パケット1500を受け取った場合も同様に、当該パケットに含まれるリード先アドレス1506(仮想アドレス)を、アドレス変換部306で物理アドレスに変換する。そして、当該物理アドレスに対するメモリリードトランザクションの発行を、メモリトランザクション発行部304に要求する。このとき、当該メモリリードトランザクションで得られたデータを含んだ、RDMAリード応答パケット1600の生成と送信を、パケット生成部303に制御パス353を介して要求する。
パケット解読部302が、RDMAリード応答パケット1600を受け取った場合、予め計算機203がネットワークインタフェースアダプタ201に指定した主記憶空間のアドレスで指定される領域に、RDMAリード応答パケット1600に含まれるデータ1607を書き込むためのメモリライトトランザクションの発行を、制御・データパス358を介してメモリトランザクション発行部304に要求する。前記主記憶空間のアドレスが仮想アドレスで指定されている場合、データパス355を介してアドレス変換部306に前記仮想アドレスのアドレス変換を要求し、データパス355を介してアドレス変換部306から変換された物理アドレスを得た後、メモリトランザクション発行部304に要求する。
なお、パケット解読部302は、RDMAライト要求パケット、ないしは、RDMAリード応答パケットに、完了通知を要求する属性がつけられていた場合、制御・データパス358を経由してメモリトランザクション発行部304に出すメモリトランザクション発行要求に、完了通知を要求する属性を付ける。
アドレス変換部306は、リモートノードからのRDMA要求パケットに含まれるローカルノードのアドレスが仮想アドレスである場合に、アドレス変換情報記憶部307が保持する仮想アドレスから物理アドレスへの変換情報を元に、物理アドレスへ変換する。また、パケットを生成してネットワークに送信するために、必要となるデータを主記憶装置から取得する際にも、前記アドレス変換部306で仮想アドレスから物理アドレスへの変換を行う。
アドレス変換情報記憶部307は、アドレス変換部306での仮想アドレスから物理アドレスへの変換に必要となる変換情報を保持する。アドレス変換情報記憶部307の実装の一形態としては、キャッシュメモリとすることが挙げられる。ネットワークインタフェースアダプタ201が接続される計算機203の構成にもよるが、全てのアドレス変換情報をネットワークインタフェースアダプタ201内で保持することは、必要となる記憶容量の大きさから困難である。よって、計算機203のライブラリ、デバイスドライバもしくはオペレーティングシステムなどのソフトウェアが、主記憶装置上の所定の領域にアドレス変換情報を用意し、ネットワークインタフェースアダプタ201は該アドレス変換情報を参照してアドレス変換を行う。しかし、アドレス変換の度に主記憶装置からアドレス変換情報を取得するのは時間が掛かりすぎて性能を低下させるため、キャッシュメモリを用いて、アドレス変換情報をネットワークインタフェースアダプタ201の中のアドレス変換情報記憶部307に格納しておく。
メモリトランザクション発行部304は、パケット解読部302ないしはパケット生成部303の要求に応じて、データ転送に必要となる計算機203の主記憶装置ないしは主記憶制御部に対するメモリリードトランザクション及びメモリライトトランザクションを発行する。発行されたメモリトランザクションは、データパス359を介してメモリトランザクション分配部に転送される。
パケット解読部302ないしはパケット生成部303からメモリトランザクション発行部304へのメモリトランザクション発行要求が1回だったとしても、メモリトランザクション発行部304は複数個のメモリトランザクションに分けて発行することがある。その理由は2種類ある。
1つ目の理由はメモリトランザクションを受ける側である計算機203の制約に起因するものである。例えば、パケット解読部302が4KBのデータを含むRDMAライト要求パケットを受け取り、メモリトランザクション発行部304に当該データの主記憶への書き込みをするためのメモリライトトランザクションの発行を要求したとする。ここで、計算機203の制約上、1個のメモリライトトランザクションに含まれるデータの最大量が256Bとされていれば、メモリトランザクション発行部304は当該データを16分割し、256Bデータのメモリライトトランザクションを16個発行しなければならない。
2つ目の理由は、後述するメモリトランザクション分配部305を有効に機能させるためである。後述するように、メモリトランザクション分配部305は、複数のメモリトランザクションを、複数のPCI Expressインタフェースに分散させて送信することで、各インタフェースにかかる負荷を分散し、スループットを向上させる。よって、メモリトランザクションが1つだけでは、メモリトランザクション分配部305は有効に機能できない。そのため、巨大なデータを書き込むためには、先の例と同様に小さなデータに分割して、複数個のメモリライトトランザクションを並列的に発行する。
なお、メモリトランザクション発行部304は、パケット解読部302からのメモリトランザクション発行要求に、完了通知を要求する属性が付与されていた場合、データパス359を介してメモリトランザクション分配部305にメモリトランザクションを送信した後、それに続けて完了通知を要求する情報をメモリトランザクション分配部305に送る。
メモリトランザクション分配部305は、複数のPCI Expressインタフェース202−1,202−2,202−3,202−4のうち、いずれか1つを選択し、選択されたインタフェースに、メモリトランザクション発行部304で発行されたメモリトランザクションの1つを送信する。複数のPCI Expressインタフェース202−1,202−2,202−3,202−4のうち、いずれか1つを選択する方法として、ラウンドロビン、重み付きラウンドロビン、ないしは、メモリトランザクションの対象アドレスによるインタリーブを適用することが考えられるが、本明細書の発明が解決しようとする課題において示したように、計算機203の構成とメモリトランザクションを送信するパターンによっては、これらの方法ではネットワークインタフェースアダプタ201から計算機203の主記憶装置へのデータ転送性能を低下させてしまう。
そこで、本発明においては、ネットワークインタフェースアダプタ201内に新しく分配情報記憶部308を設け、メモリトランザクション分配部305は前記分配情報記憶部308の記憶する、主記憶アドレスとPCI Expressインタフェースとの対応関係を用いて、メモリトランザクションを送信すべきPCI Expressインタフェースを選択する。
分配情報記憶部308に、計算機203の複数の主記憶装置ないしは主記憶制御部が担う主記憶アドレスの範囲と、当該主記憶装置ないしは主記憶制御部に相対的に短い経路でメモリトランザクションを伝送できるインタフェースを示す情報の組を1つのエントリとして、少なくとも1つ以上のエントリを格納しておく。メモリトランザクション分配部305は、データパス360を介して分配情報記憶部308のデータを参照することが出来る。
メモリトランザクション分配部305は、データパス359を介してメモリトランザクション発行部304から発行されたメモリトランザクションを受け取ると、分配情報記憶部308を参照して、当該メモリトランザクションの対象アドレスが属する主記憶アドレス範囲のエントリを抽出する。当該エントリが存在した場合には、当該エントリで指定されているPCI Expressインタフェースに、当該メモリトランザクションを送信する。エントリが存在しない場合には、デフォルトで送信先とされているインタフェースに対して、当該メモリトランザクションを送信する。
分配情報記憶部308の内容は、ネットワークインタフェースアダプタ201の初期化時に、計算機203の上で動作するライブラリ、デバイスドライバないしはオペレーティングシステムのようなソフトウェアが設定する。分配情報記憶部308は計算機の主記憶アドレス空間に割り当てられているメモリマップドレジスタであり、PCI Expressエンドポイント310−1にデータパス371−1で接続されている。よって、前記ソフトウェアはPCI Expressインタフェース202−1に対して、分配情報記憶部308のアドレスを対象としたメモリライトトランザクションを発行することで、分配情報記憶部308の内容を設定することが可能である。分配情報記憶部308のさらに詳細な構成の一例、及び、前記分配情報記憶部308に記録される情報の一例は後述する。
なお、メモリトランザクション分配部305は、データパス359を介してメモリトランザクション発行部304から完了通知要求を受け取ると、それまでに受け取ったメモリトランザクションの分配を完了した後に、制御パス365を介して完了保証部312に、既に送信したメモリトランザクションの完了を保証し、完了を通知する処理を行うよう要求する。なお、ここまでに完了通知要求が伝搬してきた流れの全体像を図12に示す。図12は、パケット解読部302が完了通知要求のパケットを受け付けてからメモリトランザクション分配部305でメモリトランザクションを分配する様子を示す説明図である。
以上の構成によって、メモリトランザクションを短い時間で目的地まで転送し、かつ、計算機203内のインターコネクトの混雑を減少させることができる。
複数のPCI Expressインタフェース202−1,202−2,202−3,202−4のうち、いずれか1つを選択する方法は複数あり得る。本発明で開示する分配情報記憶部308を用いたメモリトランザクションの分配は、本実施形態で示されるように、計算機203の構成によっては、ラウンドロビン、重み付きラウンドロビン、及び、アドレスによるインタリーブなどの分配方法を用いるより、高いデータ転送性能を実現し得る。しかし、前述したとおり、分配情報記憶部308の内容を予め設定しておく必要がある。そのため、ライブラリ、デバイスドライバ、及び、オペレーティングシステムなどが対応しない限り、分配情報記憶部308に基づいたメモリトランザクションの分配は不可能である。よって、データ転送性能が低下するおそれはあるが、こうした状況でもネットワークインタフェースアダプタ201が正常に動作するためには、メモリトランザクション分配部305は、前述したような複数の分配方法をサポートし、そのうちの実際に分配に用いる分配方法を、計算機203で動作するソフトウェアから設定できるようにする必要がある。また、ソフトウェアのデバッグや、ネットワークインタフェースアダプタ201の性能を犠牲にしてでも単一のPCI Expressインタフェースを介して計算機203に接続しようとする場合、複数のPCI Expressインタフェース202−1,202−2,202−3,202−4のうち、計算機203で動作するソフトウェアで指定される1つのインタフェースに固定的にメモリトランザクションを送信できるようにする必要がある。さらには、故障等の理由により、PCI Expressエンドポイント310−−1,310−2,310−3,310−4のうち何れかが利用できなくなった場合、各エンドポイントに接続されているPCI Expressインタフェース202−1,202−2,202−3,202−4のうち何れかが利用できなくなった場合、もしくは、計算機内のI/Oハブ400−1,400−2の何れかに障害が発生した場合に、縮退して動作し続けるために、利用できないPCI ExpressエンドポイントないしはPCI Expressインタフェースに対しては分配を行わないように設定できる必要がある。本発明ではこれらの要求を満たすために、ネットワークインタフェースアダプタ201は上記に示したメモリトランザクション分配部305の分配方法を、計算機203のソフトウェアから指定するための分配方法設定部309を備える。
分配方法設定部309は、PCI Expressエンドポイント310−1にデータパス371−1で接続されており、計算機203の主記憶アドレス空間上にマッピングされたメモリマップドレジスタとして機能する。計算機203で動作するソフトウェアは、PCI Expressインタフェース202−1に、当該アドレスに対するメモリライトトランザクションを発行することで、分配方法設定部309の内容を設定することができる。
メモリライトトランザクションを送信すると、送信先として選択されたインタフェースには、処理が完了していない可能性があるメモリライトトランザクションが少なくとも1つ以上あることになるので、メモリトランザクション分配部305は、データパス363を介して完了状況記憶部311に、当該PCI Expressインタフェース上に未完了のメモリライトトランザクションが存在することを示す情報を記録する。
本発明で開示する、完了状況記憶部311は、ネットワークインタフェースアダプタ201が有する複数のPCI Expressエンドポイント301−−1,310−2,310−3,310−4それぞれに接続されているPCI Expressインタフェース202−1,202−2,202−3,202−4において、既に発行されたメモリライトトランザクションが全て完了しているか、もしくは、完了していないメモリライトトランザクションが残っている可能性があるかを記憶する。完了状況記憶部311のさらに詳細な構成の一例、及び、ネットワークインタフェースアダプタ201がRDMA転送要求を処理する際の、完了状況記憶部311の記憶内容の一例は後述する。
完了保証部312は、計算機203で動くソフトウェアの要求、ないしは、リモートノードからの要求に応じて、ネットワークインタフェースアダプタ201がPCI Expressインタフェース202−1,202−2,202−3,202−4を介して計算機203の主記憶装置ないしは主記憶制御部に対して送信したメモリトランザクションの処理が完了したことを保証し、計算機203で動くソフトウェアないしはリモートノードに通知する。その際、完了保証に必要となる付加的なトランザクションの送信量を必要最小限に抑えるために、本発明では、ネットワークインタフェースアダプタ201は完了状況記憶部311を備える。
完了保証部312は、制御パス365を介してメモリトランザクション分配部305から完了通知の要求があったときに、完了保証に必要な処理を、完了状況記憶部311において、メモリライトトランザクションが未完了であると示されるインタフェースのみに行う。当該インタフェースでメモリライトトランザクションの完了が保証できるようになった段階で、完了状況記憶部311に、当該インタフェースに送信されたメモリライトトランザクションの処理は完了したことを示す情報を記録する。また、全てのインタフェースのメモリライトトランザクションの完了が保証できた段階、すなわち前述した完了状況記憶部311で未完了であるとされ、完了保証に必要な処理を行ったインタフェースが全て完了となった段階で、メモリライトトランザクションが完了したことを計算機203またはリモートノードに通知する。完了保証部312は、このメモリライトトランザクションの完了保証のために必要な、計算機203へのメモリトランザクションの発行を、データパス364を介してメモリトランザクション発行部304に要求する。
本実施形態のネットワークインタフェースアダプタ201では、4本のPCI Expressインタフェース202−1,202−2,202−3,202−4を介して計算機203に接続している。より多くのPCI Expressインタフェースを介して計算機203に接続するためには、PCI Expressインタフェースの数を増やし、それに合わせて、ネットワークインタフェースアダプタ201が持つPCI Expressエンドポイントの個数も増やす。増やしたPCI Expressエンドポイントは、メモリトランザクション分配部305、パケット生成部303、及び、完了保証部312へ接続し、メモリトランザクション分配部305は接続されている全てのPCI Expressエンドポイント(及び、当該PCI Expressエンドポイントに接続されるPCI Expressインタフェース)をメモリトランザクションの分配先として扱うものとする。
図4は、ネットワークインタフェースアダプタ201と接続してノード102を構成する計算機203の一例を示すブロック図である。
図4に示す計算機203は、ネットワークインタフェースアダプタ201を複数のインタフェースを介して接続するために、I/Oハブ400−1,400−2を備える。I/Oハブ400−1はインターコネクト404−1,404−3を介して、プロセッサ404−1,404−3に接続される。I/Oハブ400−2はインターコネクト404−2,404−4を介して、プロセッサ404−2,404−4に接続される。なお、インターコネクト405−1,405−2,405−3,405−4、405−5、405−6はプロセッサ401−1,401−2,401−3,401−4を接続する。
I/Oハブ400−1,400−2はネットワークインタフェースアダプタ201を接続するための複数のPCI Expressインタフェース202−1、202−2、202−3、202−4を提供する。これらのインタフェースがネットワークインタフェースアダプタ201に接続される。すなわち、I/Oハブ400−1は、PCI Expressインタフェース202−1,202−2を介して、ネットワークインタフェースアダプタ201のPCI Expressエンドポイント310−−1,310−2と接続される。同様に、I/Oハブ400−2は、PCI Expressインタフェース202−3,202−4を介して、ネットワークインタフェースアダプタ201のPCI Expressエンドポイント310−3,310−4と接続される。
プロセッサ401−1,401−2,401−3,401−4はそれぞれ、主記憶制御部を有し、メモリバス403−1,403−2,403−3,403−4を介して主記憶装置402−1,402−2,402−3,402−4に接続される。インターコネクト404−1,404−2,404−3,404−4、405−1,405−2,405−3,405−4、405−5、405−6は例えばHyperTransport(上記非特許文献3)や上記QuickPath Interconnectのようなインターコネクトである。
計算機203は単一の主記憶空間を備えており、主記憶装置402−1,402−2,402−3,402−4はそれぞれ主記憶空間の一部を担っている。
図4に示す計算機203の場合、I/Oハブ400−1を介して到達したメモリトランザクションが、I/Oハブ400−2に近いプロセッサ401−2,401−4へ伝送される経路、あるいは逆に、I/Oハブ400−2を介して到達したメモリトランザクションがI/Oハブ400−1に近いプロセッサ401−1,401−3へ伝送される経路が、インターコネクト405−1,405−2,405−5、405−6と複数ありうる。よって、図21のインターコネクト505と異なり、複数のトランザクションを同時並行的に別経路でI/Oハブ400−1からプロセッサ401−2,401−4へ、ないしは、I/Oハブ400−2からプロセッサ401−1,401−3へ伝送することが可能となり、インターコネクト上での複数メモリトランザクション競合によるデータ転送性能低下の度合いは小さい。
しかし、トランザクションを転送する経路によってレイテンシがばらつくという問題は依然として残る。特にレイテンシが長大になる事例として、I/Oハブ400−1からインターコネクト404−1、プロセッサ401−1、インターコネクト405−1、プロセッサ401−2、インターコネクト405−4を経由してプロセッサ401−4に到達する場合もあり得る。また、プロセッサ間のインターコネクト405−1,405−2,405−3,405−4、405−5、405−6ではI/Oハブとのメモリトランザクションの転送のみならず、プロセッサ間のデータ転送も行われるので、競合を避けるためには、プロセッサ間のインターコネクトをI/Oハブによるメモリトランザクションの転送に使われないようにすることが望ましい。特に、ネットワークインタフェースアダプタ201をはじめとするDMA転送を行うデータ転送装置は、プロセッサに負荷をかけずに主記憶装置にデータ転送をすることで、その間、プロセッサが別の処理を実行できるようにすることを目的としてDMA転送を行っている。
よって、データ転送装置に起因するメモリトランザクションがプロセッサ間インターコネクトを混雑させることによって、プロセッサが行う処理のうち、プロセッサ間通信を伴うものの性能が低下してしまうことは避けたい。プロセッサ間通信を伴う処理の例としては、複数のプロセッサが協調して演算を行い、必要となるデータの転送やバリア同期にプロセッサ間インターコネクトを用いた通信を行う場合が挙げられる。こうした処理の一方で、演算された結果をネットワーク経由で他のノードに伝送する場合や、ストレージ装置に記憶する場合には、DMA転送を用いてプロセッサの演算を阻害しないように主記憶装置からデータを転送する必要がある。こうした状況を鑑みると、図4に示すような計算機においても、本発明で開示する手段が必要となる。
図5は完了状況記憶部311の構成の一例を示す説明図である。完了状況記憶部311は、ネットワークインタフェースアダプタ201が接続されるPCI Expressインタフェースの数と同数のビット数を有するレジスタとして構成することが考えられる。本実施形態の場合、ネットワークインタフェースアダプタ201はPCI Expressエンドポイント310−−1,310−2,310−3,310−4を介して4本のPCI Expressインタフェース202−1,202−2,202−3,202−4と接続されているので、完了状況記憶部311は4ビットのレジスタ600とする。
レジスタ600の各ビット601,602,603,604は、それぞれ個々のPCI Expressインタフェース202−1,202−2,202−3,202−4に対応している。各ビット601、602、603、604はそれぞれ0もしくは1の2値を保持する。0の場合には、当該ビットに対応するインタフェースに既に送信されたメモリライトトランザクションの処理が完了していることを示す。処理が完了しているとは、メモリライトトランザクションの場合、当該メモリライトトランザクションで書き込まれるべきデータが、計算機のプロセッサから観測可能になっていることを示す。1の場合には当該ビットに対応するインタフェースに既に送信されたメモリライトトランザクションのうち、処理が完了していないメモリトランザクションが存在する可能性があることを示す。
完了状況記憶部311は、実装形態の一例としては、ビット数と同数のフリップフロップで実装することができる。ネットワークインタフェースアダプタ201が接続されるPCI Expressインタフェースと同数のフリップフロップを、ネットワークインタフェースアダプタ201内に用意すれば良いので、ハードウェアの物量という面では、大きな負担にならない。
図6に分配情報記憶部308の構成の一例を示す。分配情報記憶部は、主記憶アドレス上のある範囲を示すアドレス範囲情報1702と、ネットワークインタフェースアダプタ201が接続される複数のPCI Expressインタフェース202−1,202−2,202−3,202−4の何れか1つ、ないしは、複数の組み合わせを示すインタフェース指定情報1703、及び、前記アドレス範囲情報1702及び前記インタフェース指定情報1703の組が有効か無効かを示す有効フラグ1701、の3つの情報を1つの組としたエントリを最低1エントリ以上記憶している。図6の例では5エントリ(5行)の情報を有している。5エントリ未満しか使用しない場合には、未使用のエントリには有効フラグ1701に0(無効)をセットしておく。図6に示す分配情報記憶部308の3エントリ目(3行目)のエントリは無効化されているエントリである。
アドレス範囲情報1702は、例えばベースアドレスとリミット値の組で構成することができる。この場合、あるアドレスAが与えられたとして、ベースアドレス<=アドレスA<=(ベースアドレス+リミット値)の関係を満たせば、アドレスAが当該アドレス範囲に属しているものと判定できる。
但し、主記憶アドレス空間全体を網羅するようにアドレス範囲情報1702が指定されるとは限らないので、いずれのアドレス範囲にも属さなかった時に送信先として選択すべきインタフェースを定めておく必要がある。図6の場合は、5エントリ目(5行目)で、アドレス範囲情報としてその他のアドレスとなっているように、他のどのアドレス範囲にも属さなかった対象アドレスのメモリトランザクションが送信されるべきインタフェースを示す情報を記憶できるようにしている。
この分配情報記憶部308で設定する分配情報は、アプリケーションソフトウェアの特性等に適したものにすることが可能であるが、一般的な使用方法としては、メモリトランザクションがその対象アドレスを担う主記憶装置が接続されている主記憶制御部に、短い時間で到達し、かつ、計算機203内のインターコネクトの混雑を防ぐような設定とする。その設定の一例を、図4で示す計算機203の場合を例にして説明する。
図4の計算機203で、主記憶装置402−1がアドレス範囲Aを、主記憶装置402−2がアドレス範囲Bを、主記憶装置402−3がアドレス範囲Cを、主記憶装置402−4がアドレス範囲Dを担っているものとする。なお、ネットワークインタフェースアダプタの構成は図3の通りである。この場合は、アドレス範囲Aとアドレス範囲CがI/Oハブ400−1、アドレス範囲Bとアドレス範囲DがI/Oハブ400−2に、それぞれ相対的に近いことになる。よって、アドレス範囲Aないしはアドレス範囲Cに属する主記憶アドレスに対するメモリトランザクションはPCI Expressインタフェース202−1ないしは202−2、アドレス範囲Bないしはアドレス範囲Dに属する主記憶アドレスに対するメモリトランザクションはPCI Expressインタフェース202−3ないしは202−4に送信されれば、データ転送のスループットを向上させることができる。そのためには、分配情報記憶部308の設定を、アドレス範囲Aないしはアドレス範囲Cに属する主記憶アドレスに対するメモリトランザクションはPCI Expressインタフェース202−1ないしは202−2、アドレス範囲Bないしはアドレス範囲Dに属する主記憶アドレスに対するメモリトランザクションはPCI Expressインタフェース202−3ないしは202−4に送信する設定にすれば良い。
上記した、図4の計算機203での分配情報記憶部308の設定例の説明図を図7に示す。上記図6では、アドレス範囲Cに属する場合にPCI Expressインタフェース202−3に分配する設定を無効にする例を示したが、図4の経路の全てを実現するための分配情報記憶部308のエントリは図7に示すようになる。すなわち、1エントリ目(1行目)の有効ビットを1(有効)、アドレス範囲情報にアドレス範囲A、インタフェース指定情報にPCI Experssインタフェース202−1、202−2を示す情報を記録する。2エントリ目(2行目)の有効ビットを1(有効)、アドレス範囲情報にアドレス範囲B、インタフェース指定情報にPCI Experssインタフェース202−3、202−4を示す情報を記録する。3エントリ目(3行目)の有効ビットを1(有効)、アドレス範囲情報にアドレス範囲C、インタフェース指定情報にPCI Experssインタフェース202−1、202−2を示す情報を記録する。4エントリ目(4行目)の有効ビットを1(有効)、アドレス範囲情報にアドレス範囲D、インタフェース指定情報にPCI Experssインタフェース202−3、202−4を示す情報を記録する。5エントリ目(5行目)の有効ビットを1(有効)、アドレス範囲情報にその他のアドレスを示す情報、インタフェース指定情報にPCI Experssインタフェース202−1を示す情報を記録する。
図8に分配方法設定部309の構成の一例を示す。図8で示す一例では、分配方法設定部309は、分配方法指定レジスタ1800とインタフェース有効/無効ビット1801,1802,1803,1804を備える。インタフェース有効/無効ビットのビット数は、ネットワークインタフェースアダプタ201と計算機203を接続するPCI Expressインタフェースの数と同数(すなわち、ネットワークインタフェースアダプタ201が持つPCI Expressエンドポイントとも同数)であり、図3で示されるネットワークインタフェースアダプタ201の一例ではPCI Expressインタフェース202−1,202−2,202−3,202−4の数に合わせて4個としている。
分配方法指定レジスタ1800はメモリトランザクション分配部305が、複数のPCI Expressインタフェース202−1,202−2,202−3,202−4に対してメモリトランザクションを分配する方法を指定するレジスタである。分配方法指定レジスタ1800のビット数が3ビットだった場合、例えばレジスタの記憶内容が2進数で000の時は分配を行わずPCI Expressインタフェース202−1に固定的にメモリトランザクションを送信し、レジスタの記憶内容が2進数で001の時にはPCI Expressインタフェース202−2に固定的にメモリトランザクションを送信し、レジスタの記憶内容が2進数で010の時にはPCI Expressインタフェース202−3に固定的にメモリトランザクションを送信し、レジスタの記憶内容が2進数で011の時にはPCI Expressインタフェース202−4に固定的にメモリトランザクションを送信し、2進数で100の時には分配情報記憶部308に記憶されているアドレス範囲情報とメモリトランザクションの対象アドレスを比較することによりメモリトランザクションを送信するインタフェースを選択する分配方法とする。さらに、レジスタの記憶内容が2進数で101の時にはラウンドロビン方式でインタフェースを選択する分配方法、というように、分配方法指定レジスタ1803に設定した値の内容により、メモリトランザクション分配部305の動作を変更させることを可能とする。
インタフェース有効/無効ビット1801,1802,1803,1804は、PCI Expressインタフェース202−1,202−2,202−3,202−4それぞれを、メモリトランザクションの分配先として使うか否かを指定する。例えば、ラウンドロビン方式でメモリトランザクションの分配を行っているところで、PCI Expressインタフェース202−1の有効/無効ビット1801が1(有効)、PCI Expressインタフェース202−2の有効/無効ビット1802が0(無効)、PCI Expressインタフェース202−3の有効/無効ビット1803が1(有効)、PCI Expressインタフェース202−4の有効/無効ビットが0(無効)の場合、ラウンドロビン方式での分配において、PCI Expressインタフェース202−2の有効/無効ビット1802に対応するPCI Expressインタフェース202−2と、PCI Expressインタフェース202−4有効/無効ビット1804に対応するPCI Expressインタフェース202−4は選択されず、他の有効なインタフェースのみでラウンドロビン方式による分配を行う。すなわち、PCI Expressインタフェース202−1,202−3のみに、ラウンドロビン方式によるメモリトランザクションの分配が行われる。分配方法指定レジスタ1800でラウンドロビン方式が指定されている場合に限らず、例えば分配情報記憶部308に記憶されているアドレス変換情報に基づく分配の場合などでも、上記の例と同様に、インタフェース有効/無効ビット1801,1802,1803,1804で選択された特定のインタフェースを使わずに動作させることができる。これにより、いずれかのエンドポイント、エンドポイントに接続されるインタフェース、ないしは、I/Oハブに故障等の問題が生じた場合にでも、当該インタフェースをメモリトランザクションが分配される対象から外すことによって、縮退して動作し続けることが可能になる。
分配方法指定レジスタ1800に対する各ビット及び有効/無効ビットの設定は、計算機203のソフトウェアから行うことができる。
図9、図10、図11に、ネットワークインタフェースアダプタ201でRDMA転送を行うためのパケットの一例を示す。図9はRDMA書き込みを要求するためのRDMAライト要求パケットの一例を示す説明図である。図10はRDMA読み込みを要求するためのRDMAリード要求パケットの一例を示す説明図である。図11はRDMA読み込み要求に対して、読み込みを要求されたデータを返すためのRDMAリード応答パケットの一例を示す説明図である。
図9のRDMAライト要求パケット1400は、コマンド1401、送信先ノードID1402、送信元ノードID1403、フラグ1404、パケットシーケンス番号1405、ライト先アドレス1406、認証キー1407、データ長1408、データ1409、CRC1410を含んでいる。
コマンド1401は、パケットによって送信元から送信先へ要求する処理の内容を示す。RDMAライト要求パケット1400であれば、コマンド1401にはRDMAライト要求であることを示す情報を含む。
送信先ノードID1402は、本パケットの送信先のノードを識別する情報である。送信元ノードID1403は、本パケットの送信元のノードを識別する情報である。
フラグ1404は、パケットの属性を表す情報を含む。フラグ1404で示されるパケットの属性としては、単一のRDMA要求を構成する一連のパケットの最初のパケットであることを示すファーストパケット属性、単一のRDMA要求を構成する一連のパケットの最後のパケットであることを示すラストパケット属性、単一のRDMA要求を構成する唯一つパケットであることを示すオンリーパケット属性、パケット送達確認のためのACKを要求するパケットであることを示すACK要求属性、パケットで要求される処理が完了したことを通知することを要求する完了通知要求属性を含む。これらの属性は複数を組み合わせて用いることがあり、例えば、複数のパケットで構成される単一のRDMA要求で、当該RDMA要求が完了したときに通知を行いたい場合、前記パケット群の最後のパケットのフラグ1404はラストパケット属性と完了通知要求属性を持つことになる。
パケットシーケンス番号1405は、パケットの送信元がパケット毎に順番に付加していく。パケットを受信した側は、パケットシーケンス番号1405を検査し、順番通りに到達していることを確認する。もし、パケットシーケンス番号の抜けがあった場合には、当該パケットの送信元にNACKパケットを送信し、再送を要求する。
データ1409は送信先ノードの主記憶に書き込みたいデータであり、ライト先アドレス1406で書き込み先の仮想アドレスを指定する。データ長1408は、データ1409の大きさである。
RDMAライト要求パケットを受信したノード、すなわち送信先ノードID1402で示されるノードは、RDMAライト要求パケットの送信を要求した送信元ノードID1403で示されるノード上のソフトウェアが、ライト先アドレス1406で示される主記憶上の領域に対して、データの書き込む権限を有するかを、認証キー1407を用いて検査する。
CRC1410は、RDMAライト要求パケット1400のビット列に誤りがないかどうかの検査を行う巡回冗長検査符号であり、誤りが検出された場合には、当該パケットは受信側に到達していないものとみなし、当該パケットの送信元にNACKパケットを送信し、再送を要求する。
図10のRDMAリード要求パケット1500と、図11のRDMAリード応答パケット1600は、RDMAリード要求とそれに対する応答を行うために対になって用いられる。
図10のRDMAリード要求パケット1500は、コマンド1501、送信先ノードID1502、送信元ノードID1503、フラグ1504、パケットシーケンス番号1505、リード先アドレス1506、認証キー1507、データ長1508、CRC1509を含んでいる。
図11のRDMAリード応答パケット1600は、コマンド1601、送信先ノードID1602、送信元ノードID1603、フラグ1604、パケットシーケンス番号1605、データ長1606、データ1607、CRC1608を含んでいる。
RDMAリード要求パケット1500及びRDMAリード応答パケット1600のいずれも、フラグ1504、1604、パケットシーケンス番号1505、1605、CRC1509、1608と、それに付随する完了通知、ACKパケット及びNACKパケットの取り扱いに関しては、RDMAライト要求パケット1400の場合と共通であるので、説明を省略する。
RDMAリード要求パケット1500を受信したノード、すなわち、送信先ノードID1502で示されるノードは、認証キー1507を検査し、リード先アドレス1506に対する読み込みを認証できれば、リード先アドレス1506からデータ長1508で示される長さのデータを読み込み、RDMAリード応答パケットによって、RDMAリードの要求元にデータを返す。よって、RDMAリード応答パケットの送信先ノードID1602はRDMAリード要求パケットの送信元ノードID1503になり、RDMAリード応答パケットの送信元ノードID1603はRDMAリード要求パケットの送信先ノードID1502になる。読み込まれたデータはデータ1607に格納されて、RDMAリード要求元のノードへ返される。
図13、図14、図15、図16に、ネットワークインタフェースアダプタ201が、ネットワークを介して接続される他のノードに対してRDMA転送を要求する場合の動作、及び、他のノードからRDMA転送を要求された場合の動作を、フローチャートの形で示す。なお、このフローチャートは、ネットワークインタフェースアダプタ201全体としての動作を示しており、フローチャートを構成する各ステップはそれぞれネットワークインタフェースアダプタ201を構成する1つもしくは複数の構成要素によって担われる。
図13は、ネットワークインタフェースアダプタ201のコントローラ20が、他のノードからRDMAライト要求パケット1400を受け取ったときの処理を示すフローチャートである。ネットワークインタフェースアダプタ201が、他のノードからRDMAライト要求パケットを受け取り、CRC1410及びパケットシーケンス番号1405の検査を完了すると、コントローラ20は、まずステップS1001でパケットの送達確認のためのACKが要求されているかを調べる。
RDMAライト要求パケットの送信元ノードが、当該パケットが送信先に到達したことを確認したい時、フラグ1404にACKを要求するフラグを付加してRDMAライト要求パケットを送信する。ステップS1001で、コントローラ20がフラグ1404にACK要求が有ると判定した場合、ステップS1002において当該RDMAライト要求パケットの送信元に対してACKパケットを返す。
ステップS1003では、コントローラ20が認証キー1407を検査し、ライト先アドレス1406に書き込みを行う権限を有しているかどうかを確認した後に、ライト先アドレス1406を仮想アドレスから物理アドレスにアドレス変換し、当該物理アドレスに対してデータ1409を書き込むメモリライトトランザクションを生成する。なお、このとき、PCI Expressエンドポイント310−−1,310−2,310−3,310−4や計算機203内のI/Oハブ400−1,400−2、インターコネクト、ないしは、主記憶制御部などの制約により、単一のRDMAライト要求パケットに含まれるデータを、複数のメモリライトトランザクションに分割することがある。例えば、RDMAライト要求パケットに4KBのデータが含まれており、計算機203のI/Oハブ400−1,400−2が一つのメモリトランザクションに含まれるデータの大きさを最大256Bとしている場合に、前記RDMAライト要求パケットは、少なくとも16個以上のメモリライトトランザクションに分割される。このメモリトランザクションを、メモリトランザクション分配部305でPCI Expressインタフェース202−1、202−2、202−3、202−4に分配し、計算機203に対して送信する。
ステップS1004では、コントローラ20が計算機203に送信した、RDMAライト要求パケットに含まれるデータを主記憶に書き込むためのメモリライトトランザクションによる計算機203の主記憶装置への書き込みが、全て完了したことを確認し、完了したことを計算機203で動作するソフトウェア、ないしは、RDMAライト要求パケットの送信元に通知する完了通知要求があるかどうかを、フラグ1404から判断する。RDMAライト要求パケットの送信元がフラグ1404に完了通知要求を示すフラグを付加している場合には、ステップS1005、ステップS1006、及び、ステップS1007においてコントローラ20が、完了保証及び完了の通知を行う。
ステップS1005では、コントローラ20が、図17ないしは図18で示される完了保証処理を行う。図17及び図18で示される完了保証処理の詳細な説明は後述する。ステップS1006では、ステップS1005においてメモリライトトランザクションによる計算機203の主記憶装置への書き込みの完了が保証されたことを判断し、この完了が保証された時に、コントローラ20はステップS1007において計算機203で動作するソフトウェア、ないしは、RDMAライト要求パケットの送信元にメモリライトトランザクションによるデータ書き込みの完了を通知する。
ステップS1007では、計算機203で動作するソフトウェアにメモリライトトランザクションによるデータ書き込みの完了を通知する場合、RDMAライト要求パケットによってデータが書き込まれた仮想アドレス空間を使っているユーザアプリケーションに対して、コントローラ20が当該ユーザアプリケーションの領域内にRDMAライト要求によるデータの書き込みを行ったことを通知する。また、RDMAライト要求パケットの送信元にメモリライトトランザクションによるデータ書き込みの完了を通知する場合、コントローラ20がデータ書き込み完了を示すパケットを生成し、当該ノードに送信する。
図14は、ネットワークインタフェースアダプタ201のコントローラ20が、他のノードからRDMAリード要求パケット1500を受け取ったときの処理を示すフローチャートである。ネットワークインタフェースアダプタ201のコントローラ20が、他のノードからRDMAリード要求パケット1500を受け取り、CRC1509及びパケットシーケンス番号1505の検査を完了すると、まずステップS1101でパケットの送達確認のためのACKが要求されているかを調べる。
RDMAリード要求パケットの送信元ノードが、当該パケットが送信先に到達したことを確認したい時、送信元ノードはフラグ1504にACKを要求するフラグを付加してRDMAリード要求パケットを送信する。ステップS1101で、コントローラ20はACK要求が有ると判定した場合、ステップS1102において当該RDMAリード要求パケットの送信元に対してACKパケットを返す。ステップS1103では、認証キー1507を検査し、リード先アドレス1506に読み込みを行う権限を有しているかどうかを確認した後に、リード先アドレス1506を仮想アドレスから物理アドレスにアドレス変換し、当該物理アドレスに対してデータ長1508で示される長さのデータの読み込みを要求するメモリリードトランザクションを発行する。
なお、このとき、PCI Expressエンドポイント310−1,310−2,310−3,310−4や計算機203のインターコネクト、ないしは、主記憶制御部などの制約により、単一のRDMAリード要求パケットで要求されているデータ長のメモリリードを、複数のメモリリードトランザクションに分割することがある。このメモリリードトランザクションを、メモリトランザクション分配部305でPCI Expressインタフェース202−1,202−2,202−3,202−4に分配し、計算機203に対して送信する。
ステップS1104でコントローラ20は前記メモリリードトランザクションに対する応答のトランザクションを計算機203から受信すると、応答のトランザクションに含まれるデータを元にRDMAリード応答パケット1600を生成してRDMAリード要求パケットの送信元に送信する。RDMAリード応答パケットが送信先に正しく到着したか送達確認をしたい場合、フラグ1604にACK要求を入れる。この処理をステップS1105で示すように、前記メモリリードトランザクションに対する応答のトランザクションが全て揃うまで続け、全て完了したところで、他のノード(送信元)からのRDMAリード要求に対する処理は完了となる。
図15は、ネットワークインタフェースアダプタ201のコントローラ20が、他のノードにRDMAライト要求パケットを送るときの処理を示すフローチャートである。
ネットワークインタフェースアダプタ201が接続されている計算機203の上で動作しているソフトウェアから、他のノードへのRDMAライト要求があると、ステップS1201において、コントローラ20は、当該RDMAライト要求において指定されているローカルノード上の主記憶アドレス、すなわちリモートノードに転送するデータが格納されているアドレスに対するメモリリードトランザクションを生成して計算機203に送信する。このとき、単一のメモリリードトランザクションで要求できるデータ長に制約があり、それゆえ、複数のメモリリードトランザクションに分割しなければならない場合があるのは、前述したネットワークインタフェースアダプタ201がRDMAリード要求パケットを受信した場合の処理と同様である。
ステップS1202において、前記メモリリードトランザクションに対する応答のトランザクションを計算機203から受信すると、コントローラ20は、そのデータを含むRDMAライト要求パケットを生成して他のノードへ送信する。この処理をステップS1203で示すように、前記メモリリードトランザクションに対する応答のトランザクションが全てそろうまで繰り返して実行し、全て完了したところで、他のノードへのRDMAライト要求が完了する。
図16は、ネットワークインタフェースアダプタ201のコントローラ20が、他のノードにRDMAリード要求パケットを送るときの処理、及び、当該ノードから送られてくるRDMAリード応答パケットを受け取ったときの処理を示すフローチャートである。
ネットワークインタフェースアダプタ201が接続されている計算機203の上で動作するソフトウェアの要求に応じて、コントローラ20は、ステップS1301でRDMAリード要求パケットを生成して他のノードへ送信する。
RDMAリード要求パケットを受信したノードは、図14に示す処理によりRDMAリード応答パケットを返信してくるが、コントローラ20はステップS1302においてRDMAリード応答が返ってくるのを待つ。コントローラ20はRDMAリード応答パケットを受信すると、RDMAリード応答パケット1600のCRC1608及びパケットシーケンス番号1605の検査を行う。この検査が完了すると、コントローラ20はステップS1303において、RDMAリード応答パケット1600のフラグ1604を検査し、ACK要求がある場合にはステップS1304においてACKパケットを送信元へ返信し、RDMAリード応答パケットを受け取ったことを通知する。
その後、コントローラ20は、ステップS1305において、受信したRDMAリード応答パケットに含まれるデータを主記憶装置に書き込むためのメモリライトトランザクションを発行する。なお、このとき、PCI Expressエンドポイント310−−1,310−2,310−3,310−4や計算機203のインターコネクトないしは主記憶制御部などの制約により、単一のRDMAリード応答パケットに含まれるデータを、複数のメモリライトトランザクションに分割することがある。この場合、コントローラ20は、メモリトランザクションを、メモリトランザクション分配部305でPCI Expressインタフェース202−1,202−2,202−3,202−4に分配し、計算機203に対して送信する。
ステップS1306において、コントローラ20は、RDMAリード応答パケットに含まれるデータの主記憶への書き込みが完了したことを、計算機203で動作するソフトウェア、ないしは、RDMAリード応答パケットの送信元ノードに通知する完了通知要求があるかどうかを、フラグ1604から判断する。RDMAリード応答パケットの送信元がフラグ1604に完了通知要求を示すフラグを付加している場合には、コントローラ20はステップS1307、ステップS1308、及び、ステップS1309において完了保証及び完了の通知を行う。ステップS1307では、図17ないしは図18で示される完了保証処理を行う。ステップS1308では、ステップS1307において書き込みの完了が保証されたことを判断し、書き込み完了が保証された時に、コントローラ20はステップS1309において計算機203で動作するソフトウェア、ないしは、RDMAリード応答パケットの送信元ノードに書き込みの完了を通知する。
ステップS1309では、計算機203で動作するソフトウェアに対して書き込みの完了を通知する場合には、当該RDMAリード応答パケットに対応するRDMAリード要求パケットを送信する元となったRDMAリード要求をネットワークインタフェースアダプタ201に対して行った、計算機203上で動作するソフトウェアに対して、コントローラ20が主記憶装置に対するデータの書き込み終わったことを通知する。また、RDMAリード応答パケットの送信元ノードに対して書き込みの完了を通知する場合には、コントローラ20は当該ノードに対して書き込みの完了を通知するパケットを生成し、送信する。
図17及び図18に、PCI Expressインタフェースのプロトコルを利用してネットワークインタフェースアダプタ201で完了保証を行うための、完了保証部312で行われる完了保証の動作をフローチャートとして示している。以下に図17及び図18それぞれの動作に関して、詳しく説明する。なお、図17ないしは図18で示される完了保証の動作を行っている最中は、完了保証のためのメモリトランザクションの送信が乱されることを防ぐために、コントローラ20は他のメモリトランザクションの分配と送信は行われないものとする。
図17に示すコントローラ20の完了保証部312の処理は、計算機203に接続される全てのインタフェースに対して一律に完了保証用のメモリトランザクションを送信することで、先行するメモリトランザクションの完了を保証しようというものである。PCI Expressでは、メモリリードトランザクションに対しては必ず応答のトランザクションがあるため、この応答のトランザクションを待つことで、メモリリードトランザクションの完了を知ることが出来る。一方、メモリライトトランザクションに関しては、応答のトランザクションが無いため、メモリライトトランザクションを出した側が、その完了を知ることはできない。よって、PCI Expressインタフェースのプロトコルで規定される、メモリライトトランザクションとメモリリードトランザクションの順序関係を利用して、メモリライトトランザクションに関しても、当該メモリトランザクションを送信した側が、その完了を知る手段を実現する。
完了保証が要求されると、コントローラ20はステップS801において、ネットワークインタフェースアダプタ201に接続される全てのPCI Expressインタフェース、すなわち、PCI Expressインタフェース202−1,202−2,202−3,202−4にメモリリードトランザクションをそれぞれ送信する。すなわち、各PCI Expressインタフェースに接続されている、ネットワークインタフェースアダプタ201内の4個のPCI Expressエンドポイント310−1,310−2,310−3,310−4のそれぞれに1個ずつ、合計4個のメモリリードトランザクションを送信する。このとき、メモリリードトランザクションで読み込む主記憶装置のアドレスは、メモリライトトランザクションの完了保証用に予め設定した値を用いればよい。
PCI Expressの規格において、メモリリードトランザクションは先行して送信されたメモリライトトランザクションを追い越すことは出来ないとされている。よって、PCI Expressの規格に沿って構成されているI/Oハブを有する計算機203であれば、先行するメモリライトトランザクションを全て処理した後に、当該メモリリードトランザクションを処理し、当該メモリリードトランザクションに対する応答のトランザクションを返す。すなわち、ネットワークインタフェースカード201から見ると、前記メモリリードトランザクションに対応する応答のトランザクションが返ってきた時点では、当該メモリリードトランザクションを送信したPCI Expressインタフェースに、当該メモリリードトランザクションに先行して送信したメモリライトトランザクションは書き込みが完了しているものと見なせる。よって、ステップS802において、ステップS801で送信した全てのメモリリードトランザクションに対する応答を待つ。
全てのメモリリードトランザクションに対する応答のトランザクションを受信すると、完了保証部312はS803にて完了保証を要求した計算機203のソフトウェアまたはリモートノードに対して完了通知を送信して処理を完了する。
また、ステップS801で送信した完了保証のためのメモリリードトランザクションに先行して送信されたメモリリードトランザクション(完了保証のためのメモリリードトランザクションではなく、RDMA要求の処理のために必要となる、データを主記憶から読み出すためのメモリリードトランザクション)も全て処理済であることを保証するためには、先行して送信されたメモリリードトランザクションに対する応答が全て到着するまで待てばよい。上記のステップにより、先行するメモリトランザクションの完了を保証できる。
しかし、前述したように、この方法では、先行するメモリライトトランザクションが無いインタフェースに対しても完了保証のためのメモリリードトランザクションを送信してしまい、インタフェース及び計算機内のインターコネクトに無用の負荷をかけてしまう。
そこで、完了保証に必要となるメモリリードトランザクションの送信量を低減させるために、本発明ではネットワークインタフェースアダプタ201に完了状況記憶部311を備える。完了状況記憶部311を用いた完了保証を行う完了保証部312の動作を図18に示す。
図18は本発明のネットワークインタフェースアダプタ201のコントローラ20で行われるメモリライトトランザクションの完了保証の一例を示すフローチャートである。なお、この処理は図3においては完了保証部312が行う処理となる。
ステップS901で、コントローラ20の完了保証部312は、メモリライトトランザクションの書き込みの完了保証のためのメモリリードトランザクションを計算機203に送信する。上記図17に示した完了保証のステップS801と異なるのは、全てのインタフェースに対して送信するのではなく、完了状況記憶部311において、未完了なメモリライトトランザクションが残っている可能性があると示されているインタフェースに対してのみ、完了保証のためのメモリリードトランザクションを送信することである。なお、完了状況記憶部311に各インタフェースに先行して発行されているメモリライトトランザクションのうち、未完了のものがあるかどうかを設定する役割は、メモリトランザクション分配部305が担っており、その動作については既に述べた通りである。
すなわち、メモリトランザクション分配部305は、PCI Expressインタフェース202−1,202−2,202−3,202−4のいずれかを介して、計算機203の主記憶装置ないしは主記憶制御部に対してメモリライトトランザクションを発行すると、完了状況記憶部311のビット601,602,603,604のうち、メモリライトトランザクションを発行したPCI Expressインタフェースに対応するビットを「1」に設定する。
メモリトランザクションの完了保証を行う完了保証部312は、完了状況記憶部311のビット601,602,603,604のうち、「1」が設定されているPCI Expressインタフェースにメモリトランザクションの完了保証のメモリリードトランザクションを送信する。ステップS902で、コントローラ20は送信した完了保証用のメモリリードトランザクションに対応する応答のトランザクションを受信すると、当該メモリリードトランザクションを送信したインタフェースに、先行して送信されているメモリライトトランザクションが全て完了したことが保証できる。このため、コントローラ20の完了保証部312は、ステップS902において、完了状況記憶部311に当該メモリリードトランザクションを送信し、それに対する応答トランザクションが返ってきたインタフェースに関して、先行して送信したメモリライトトランザクションが全て完了したことを示す情報を記憶させる。具体的には、完了状況記憶部311のビット601,602,603,604のうち、完了保証用に送信したメモリリードトランザクションに対する応答トランザクションが返ってきたインタフェースに対応するビットを「0」にする。そして、コントローラ20の完了保証部312はステップS903において、ステップS901で送信した完了保証用のメモリリードトランザクションに対する応答のトランザクションを全て受信するまで待つ。すなわち、完了状況記憶部311のビット601,602,603,604全てが「0」になるまで待つ。
そして、コントローラ20の完了保証部312が送信した完了保証のためのメモリリードトランザクションに対する応答トランザクションを全てを受信すると、S904でコントローラ20は完了通知を計算機203またはリモートノードに通知し、計算機203のソフトウェアまたはリモートノードが要求したメモリトランザクション(特にメモリライトトランザクション)が完了したことを保証する。
上記のステップにより、完了保証部312は、完了状況記憶部311を参照することで先行して送信された、まだ書き込み処理が完了していない可能性があるメモリライトトランザクションが存在するPCI Expressインタフェースのみに完了保証のためのメモリリードトランザクションを発行することができ、先行するメモリライトトランザクションのないインタフェースに完了保証用のメモリリードトランザクションを送信することがなくなって、図17の場合よりメモリトランザクションの発行数を削減して、完了保証を行うことが可能になる。
図13で示したRDMAライト要求パケットの処理において、メモリトランザクション分配部305が完了状況記憶部311に設定する内容と、完了状況記憶部311の内容に基づいて図18に示す方法で完了保証を行う完了保証部312の動作を、図19のシーケンス図1900と、図20の完了状況記憶部311の状態を示す説明図を基にして説明する。
図19に示すシーケンス図1900は、2つのノード102−1、102−3がそれぞれ独立して、ノード102−2にRDMAライト要求パケットを送信しているとき、前記RDMAライト要求パケットがノード102−2に到着する時間的な順序を示すシーケンス図である。なお、図中ノード102−1〜102−3は、図1に示したノード102に添え字を付したものである。
シーケンス図の上下方向で時間の変化を示し、左右方向でノードないはプロセスの違いを示している。ノード102−1上ではプロセス1941が動作しており、ノード102−2に対して、時系列でパケット1911,1912,1913を送信している状況をシーケンス図で説明している。同様に、ノード102−3上ではプロセス1943が動作しており、ノード102−2に対して、時系列でパケット1931,1932,1933を送信している状況をシーケンス図に示している。パケット1911,1912,1913は、ノード102−1からノード102−2への1つのRDMAライト要求を構成する一連のパケットである。パケット1931,1932,1933は、ノード102−3からノード102−2への1つのRDMAライト要求を構成する一連のパケットである。ノード102−2から見ると、ノード102−1から送信されたパケットとノード102−3から送信されたパケットが混ざって到達しており、ノード102−2は2つのRDMAライト要求を同時並行的に扱わなければならない。図19で示すパケット1911,1912,1913、1931,1932,1933は、いずれもACK要求が無いパケットとする。
ここで、ノード102−2の動作を図18、図13、図19、図20に基づいて説明する。ノード102−2のネットワークインタフェースアダプタ201が有する完了状況記憶部311は、初期状態として図20の完了状況2001の状態になっている。まず、RDMAライト要求パケット1911がパケット到達1921の時点でノード102−2に到達する。ここで、ノード102−2は図13に示されるRDMAライト要求パケットを受信した際の処理を行う。まず、パケットシーケンス番号1405及びCRC1410の検査を行い、正常であると確認する。次に、ステップS1001においてACK要求の有無を確認するが、ACK要求は無いので、ステップS1003のメモリライトトランザクション生成及び送信に移行する。ここでは、RDMAライト要求パケット1911に含まれるデータを、指定されたアドレスに書き込むための少なくとも1つ以上のメモリライトトランザクションが、メモリトランザクション発行部304において生成される。
そして、生成されたメモリライトトランザクションはメモリトランザクション分配部305において、PCI Expressインタフェース202−1,202−2,202−3,202−4の何れかのインタフェースに分配される。RDMAライト要求パケット1911から生成されたメモリライトトランザクションは、分配の結果、全てPCI Expressインタフェース202−1に送信されたものとする。この場合、PCI Expressインタフェース202−1に未完了のメモリライトトランザクションがある可能性が生じたことになるので、メモリトランザクション分配部305は完了状況記憶部311の状態を完了状況2002で示すように、PCI Expressインタフェース202−1に対応するビット601を1とする。
次に、ステップS1005、ステップS1006、ステップS1007で示される完了通知のための処理が要求されているかをステップS1004で検査するが、RDMAライト要求パケット1911は完了通知を要求するフラグは含まれていないものとする。よって、以上でRDMAライト要求パケット1911の処理は完了する。
これ以降、ノード102−2に到達するRDMAライト要求パケットも同様に処理される。ノード102−2はパケット到達1922において、ノード102−3からのRDMAライト要求パケット1931を受信し、PCI Expressインタフェース202−3に対してメモリライトトランザクションを送信したとする。この時、完了状況記憶部の内容は、完了状況2003で示す内容となる。パケット到達1923において、ノード102−3からのRDMAライト要求パケット1932を受信し、PCI Expressインタフェース202−2に対してメモリトランザクションを送信したとする。この時、完了状況記憶部311の内容は、完了状況2004で示す内容となる。パケット到達1924において、RDMAライト要求パケット1912を受信し、PCI Expressインタフェース202−2に対してメモリライトトランザクションを送信したとする。この時、完了状況記憶部は、完了状況2005で示す内容となる。完了状況2004と完了状況2005は同一の内容であるが、完了状況記憶部を書き換える役割を担っているメモリトランザクション分配部305としては、メモリトランザクションの分配を行うたびに完了状況記憶部311の当該インタフェースのビットを操作している。
パケット到達1925において、RDMAライト要求パケット1933を受信し、PCI Expressインタフェース202−2に対してメモリトランザクションを送信したとする。この時、完了状況記憶部311の内容は、図20の完了状況2006で示す内容となる。RDMAライト要求パケット1933はラストパケット属性及び完了通知要求属性がフラグとして付与されている。よって、完了通知のための処理、すなわち図13のステップS1005,S1006,S1007が実行される。ステップS1005によって行われる完了保証処理は、具体的には図18のステップS901、S902、S903、S904である。ステップS901では、完了状況記憶部で未完了とされているインタフェース(完了状況記憶部311のビット601〜604のうち、値が「1」となっているビットに対応するインタフェース)、すなわち完了状況2006で未完了とされているPCI Expressインタフェース202−1,202−2,202−3にメモリリードトランザクションを送信し、先行するメモリライトトランザクションを完了させる。ステップS902において、前記メモリリードトランザクションに対する応答トランザクションが返ってきたインタフェースに関しては完了保証部312が先行するメモリライトトランザクションが全て完了したものと判定して、完了状況記憶部311に当該インタフェースのメモリライトトランザクションは完了であるという情報を書き込む。
すなわち、図20の例では当該インタフェースに対応するビットを「0」とする。これをステップS903で示すように、前記メモリリードトランザクションに対する応答がすべてそろうまで繰り返すので、メモリリードトランザクションを送信したPCI Expressインタフェース202−1,202−2,202−3は、いずれも先行して送信したメモリライトトランザクションが完了したことを保証され、完了状況記憶部311のインタフェースに対応するビットは「0」となる。よって、完了状況記憶部311は完了状況2007に示すような内容になる。
PCI Expressインタフェース202−1に先行して送信されていたメモリライトトランザクションが全て完了したということは、RDMAライト要求パケット1911に起因するメモリトランザクションが全て完了したことになる。PCI Expressインタフェース202−2に先行して送信されたメモリライトトランザクションが全て完了することで、RDMAライト要求パケット1912,1932,1933に起因するメモリライトトランザクションが全て完了したことになる。PCI Expressインタフェース202−3に先行して送信されたメモリライトトランザクションが全て完了することで、RDMAライト要求パケット1931に起因するメモリライトトランザクションが全て完了したことになる。
よって、RDMAライト要求パケット1933による完了通知要求により、RDMAライト要求パケット1911,1912,1931,1932,1933に起因するメモリライトトランザクションは全て完了したことになる。ノード102−3からの1つのRDMAライト要求を構成する3つのRDMAライト要求パケット1931,1932,1933は、前記の通り全て完了しており、ノード102−3からのRDMAライト要求の完了が保証されていることになり、完了を通知することができる。
パケット到達1926において、RDMAライト要求パケット1913を受信し、PCI Expressインタフェース202−4に対してメモリトランザクションを送信したとする。この時、完了状況記憶部311の内容は、完了状況2008で示す内容となる。RDMAライト要求パケット1913はラストパケット属性及び完了通知要求属性がフラグとして付与されている。よって、パケット到達1925の時と同様に、完了通知のための処理を行う。完了状況記憶部311は完了状況2008で示されるように、PCI Expressインタフェース202−4に先行して送信したメモリライトトランザクションが未完了のまま残っている可能性があることを示しているので、PCI Expressインタフェース202−4に対してメモリリードトランザクションを送信し、それに対する応答のトランザクションを待って完了状況記憶部311のPCI Expressインタフェース202−4に対応するビットを0にする。これにより、完了状況記憶部311は完了状況2009で示す状態になる。この完了保証で、PCI Expressインタフェース202−4に先行して送信されていたメモリライトトランザクション、すなわちRDMAライト要求パケット1913に起因するメモリライトトランザクションが完了したことが保証される。ノード102−1からの1つのRDMAライト要求を構成するパケットは、このRDMAライト要求パケット1913以外に、RDMAライト要求パケット1911、1912があるが、この2つのパケットは、パケット到達1925の時に行われた完了保証処理によって、すでに完了が保証されている。そして、パケット到達1926において、RDMAライト要求パケット1913の完了が保証されたので、ノード102−1からの1つのRDMAライト要求を構成する3つのパケット1911,1912,1913が全て完了したことが保証され、当該RDMAライト要求の完了通知が行えるようになった。
もし、本発明で開示した完了状況記憶部311と、完了状況記憶部311の内容に基づいて動作する完了保証部312が無ければ、すなわち、図17で示される処理を行う場合、上記の例において、パケット到達1925及びパケット到達1926のそれぞれの段階において、PCI Expressインタフェース202−1、202−2、202−3、202−4の全てに完了保証のためのメモリリードトランザクションを送信し、それぞれ全ての応答トランザクションを待つ必要が出てくる。この場合、合計8回のメモリリードトランザクション送信を行うことになる。一方、完了状況記憶部311を導入した上記の例では、合計4回のメモリリードトランザクション送信で済んでおり、完了保証処理のための付加的なトランザクション(メモリリードトランザクション)の送信に起因する、インタフェース及び計算機内のI/Oハブへの影響を低減することができている。
以上説明したように、本実施の形態のデータ転送装置(ネットワークインタフェースアダプタ201)によれば、分配情報記憶部308、分配方法設定部309及び完了状況記憶部311などを有することにより、データ転送装置から主記憶装置へのデータ転送性能の向上を実現できる。計算機203の内部構成を考慮した分配情報が記憶された分配情報記憶部308に基づいてメモリトランザクション分配部305がメモリトランザクションを送信するインタフェースを選択することにより、データ転送装置から計算機の主記憶装置へのデータ転送性能を向上する。メモリトランザクション分配部305と完了保証部312によって更新される完了状況記憶部311に基づいて、未完了のメモリトランザクションが存在する可能性があるインタフェースにのみ、完了保証に必要な付加的なメモリトランザクションを送信することで、完了保証に伴うオーバヘッドを低減させ、データ転送装置から計算機の主記憶装置へのデータ転送性能に与える悪影響を抑えることが出来る。メモリトランザクション分配部305の分配方法及び分配先として用いるインタフェースの有効もしくは無効を、データ転送装置に接続される計算機の上で動作するソフトウェアから行うための分配方法設定部309によって、ソフトウェアの特性やデバッグ等の目的に応じて適切な分配方法を選択することを可能とし、複数のインタフェースのうちいくつかに異常があった場合に、異常のあるインタフェースを切り離して縮退動作することを実現する。
上記の通り、本発明により、複数のインタフェースを介して計算機に接続されるデータ転送装置の、計算機の主記憶装置に対するデータ転送性能の向上を実現できる。
なお、図4で示したように、計算機を構成する各プロセッサが主記憶制御部を有し、プロセッサ間接続ないしはプロセッサ−I/Oハブ間接続に、HyperTransportやIntel社のQuickPath Interconnectのような、Point−to−Point型のインターコネクトを用いるのではなく、FSB(Front Side Bus)のような共有型バスによって構成されている計算機においても、本発明を適用したデータ転送装置を接続して、利用することが出来る。
<本発明を適用しない場合>
次に、本発明を適用しなかった場合について検討する。図21の計算機203Aは、説明を簡易にするため、上記図4に示した計算機203を2プロセッサとしたものである。計算機203Aは、ネットワークインタフェースアダプタ201を複数のインタフェースを介して接続するために、I/Oハブ500−1、500−2を備え、それぞれインターコネクト504−1、504−2を介して、プロセッサ501−1,501−2に接続される。I/Oハブ500−1、500−2はデータ転送装置を接続するための複数のインタフェース202−1,202−2,202−3,202−4を提供する。インタフェース202−1,202−2,202−3,202−4は、上記図4の計算機203と同様に、PCI Expressのようなインタフェースである。これらのインタフェース202−1,202−2,202−3,202−4がネットワークインタフェースアダプタ201に接続される。
プロセッサ501−1、502−2はそれぞれ、主記憶制御部を持ち、メモリバス503−1、503−2を介してそれぞれ主記憶装置に接続される。
図21において、プロセッサ501−1はメモリバス503−1を介して主記憶装置502−1へ、プロセッサ501−2はメモリバス503−2を介して主記憶装置502−2へ接続されている。プロセッサ501−1、501−2はインターコネクト505で相互に接続されている。インターコネクト504−1,504−2,505は、例えばHyperTransportや上記QuickPath Interconnectのようなインターコネクトで構成される。計算機203Aは単一の主記憶空間を持っており、主記憶装置502−1、502−2はそれぞれその一部を担っている。
よって、図21に示す計算機203A内での、ネットワークインタフェースアダプタ201からのメモリトランザクションの処理は、次の4種類に分かれる。
(1)ネットワークインタフェースアダプタ201からインタフェース202−1ないしは202−2を介して、主記憶装置502−1に属するアドレスに対するメモリトランザクションが送信された場合、メモリトランザクションはインタフェース202−1ないしは202−2、I/Oハブ500−1、インターコネクト504−1、プロセッサ501−1を経由してプロセッサ501−1内の主記憶制御部に到達し、前記主記憶制御部がメモリバス503−1を介して主記憶装置502−1へ読み込みないしは書き込みを行う。主記憶装置502−1に対する読み込みの場合には、読み込み結果をネットワークインタフェースアダプタ201へ転送するためのメモリトランザクションは同じ経路の逆順、すなわち、プロセッサ501−1、インターコネクト504−1、I/Oハブ500−1、インタフェース202−1ないしは202−2を経由してネットワークインタフェースアダプタ201に送信される。
(2)ネットワークインタフェースアダプタ201からインタフェース202−3ないしは202−4を介して、主記憶装置502−2に属するアドレスに対してメモリトランザクションが送信された場合、メモリトランザクションはインタフェース202−3ないしは202−4、I/Oハブ500−2、インターコネクト504−2、プロセッサ501−2を経由してプロセッサ501−2内の主記憶制御部に到達し、前記主記憶制御部がメモリバス503−2を介して主記憶装置502−2へ読み込みないしは書き込みを行う。主記憶装置502−2に対する読み込みの場合には、読み込み結果をネットワークインタフェースアダプタ201に転送するためのメモリトランザクションは同じ経路の逆順、すなわち、プロセッサ501−2、インターコネクト504−2、I/Oハブ500−2、インタフェース202−3ないしは202−4を経由してネットワークインタフェースアダプタ201に送信される。
(3)ネットワークインタフェースアダプタ201からインタフェース202−1ないしは202−2を介して、主記憶装置502−2に属するアドレスに対するメモリトランザクションが送信された場合、メモリトランザクションはインタフェース202−1ないしは202−2、I/Oハブ500−1、インターコネクト504−1、プロセッサ501−1、インターコネクト505、プロセッサ501−2を経由してプロセッサ501−2内の主記憶制御部に到達し、前記主記憶制御部がメモリバス503−2を介して主記憶装置502−2へ読み込みないしは書き込みを行う。主記憶装置502−2に対する読み込みの場合には、読み込み結果をネットワークインタフェースアダプタ201へ転送するためのメモリトランザクションは同じ経路の逆順、すなわち、プロセッサ501−2、インターコネクト505、プロセッサ501−1、インターコネクト504−1、I/Oハブ500−1、インタフェース202−1ないしは202−2を経由してネットワークインタフェースアダプタ201に送信される。
(4)ネットワークインタフェースアダプタ201からインタフェース202−3ないしは202−4を介して、主記憶装置502−1に属するアドレスに対してメモリトランザクションが送信された場合、メモリトランザクションはインタフェース202−3ないしは202−4、I/Oハブ500−2、インターコネクト504−2、プロセッサ501−2、インターコネクト505、プロセッサ501−1を経由してプロセッサ501−1内の主記憶制御部に到達し、前記主記憶制御部がメモリバス503−1を介して主記憶装置502−1へ読み込みないしは書き込みを行う。主記憶装置502−1に対する読み込みの場合には、読み込み結果をネットワークインタフェースアダプタ201へ転送するためのメモリトランザクションは同じ経路の逆順、すなわち、プロセッサ501−1、インターコネクト505、プロセッサ501−2、インターコネクト504−2、I/Oハブ500−2、インタフェース202−3ないしは202−4を経由してネットワークインタフェースアダプタ201に送信される。
ネットワークインタフェースアダプタ201が、主記憶装置502−1ないしは502−2に属するアドレスに対するメモリトランザクションを、ラウンドロビン、重み付きラウンドロビンもしくはアドレスによるインタリーブにより、インタフェース202−1,202−2,202−3,202−4のいずれかに対して送信する。この場合、計算機203Aの内部でのメモリトランザクションの処理は、上記の(1)(2)(3)ないしは(4)のいずれの場合もあり得る。よって、以下に示すような問題が生じる。
(1)及び(2)と比較して(3)及び(4)はインターコネクト505を経由する分、レイテンシが遅くなる。また、(3)及び(4)を同時に処理しようとすると、インターコネクト505がインターコネクト504−1、504−2及びインタフェース202−1,202−2,202−3,202−4に対して、十分に大きいスループットを有していない限り、インターコネクト505がボトルネックとなってしまう。よって、複数のインタフェースにメモリトランザクションを分散させることによりネットワークインタフェースアダプタ201から計算機203AのI/Oハブ500−1,500−2までのスループットを高めることはできても、ネットワークインタフェースアダプタ201から主記憶装置502−1,502−2までのデータ転送性能を高めることはできない。例えば、上記で示したようにインターコネクト504−1,504−2及びインターコネクト505が同じインターコネクト、すなわち同じスループットを持っている場合、(3)と(4)を同時に処理しようとすると、インターコネクト505で競合する可能性がある。よって、インタフェース202−1,202−2,202−3,202−4では、メモリトランザクションを分散して送信することで高いスループットを得られているように見えるが、主記憶へのデータ転送性能は前記インターコネクト手段のスループットの以下に落ちることになる。
また、ネットワークインタフェースアダプタ201からインタフェースを介して計算機の主記憶装置ないしは主記憶制御部に対して送信したメモリトランザクションの処理、すなわち主記憶装置へのデータの読み書きが完了したことを保証するためには、インタフェース202−1に送信したメモリトランザクション、インタフェース202−2に送信したメモリトランザクション、インタフェース202−3に送信したメモリトランザクション、及び、インタフェース202−4に送信したメモリトランザクションの全てが完了したことを保証する必要がある。完了保証を行う方法としては、例えばPCI Expressの場合、以下の方法が考えられる。
PCI Expressでは規格上、メモリリードトランザクションの処理は、先行するメモリライトトランザクションの処理が完了した後でなければ、処理されないと規定されているので、メモリリードトランザクションを発行し、そのメモリリードトランザクションに対する応答が返ってきた時、先行するメモリライトトランザクションが完了したことが保証できる。なお、メモリリードトランザクションには必ず読み込み結果をメモリトランザクション要求元に返すための応答があるので、メモリリードトランザクションの完了を保証するためには、この応答を待てばよい。
前記ネットワークインタフェースアダプタ201は、複数のインタフェースを介して計算機203Aに接続されているので、各インタフェースでそれぞれ完了保証のためのトランザクションを送信しなければならない。しかし、全てのインタフェースに対して完了保証のためのトランザクションを送信すると、何らかの理由でメモリライトトランザクションが送信されていないインタフェースに対しても、完了保証のためのメモリリードトランザクションを送信することになり、インタフェース及びインタフェースを介して接続される計算機のI/Oハブに余計な負荷を与えてしまう。
<本発明を適用した場合>
図21の計算機203Aに本発明を適用した場合には、上記図4の計算機203と同様に、計算機203Aの複数の主記憶装置502−1、502−2に対して複数のインタフェースを用いて計算機203Aのリソースの競合を防ぎながら並列的にメモリトランザクションを分配し、データ転送のスループットを向上させることができる。
図22は図21の計算機203Aに本発明を適用した場合の分配情報記憶部308の設定の一例を示す説明図である。
図22に示す分配情報記憶部308の1エントリ目(1行目)の有効ビットを1(有効)、アドレス範囲情報にアドレス範囲A、インタフェース指定情報にPCI Expressインタフェース202−1、202−2を示す情報を記録する。2エントリ目(2行目)の有効ビットを1(有効)、アドレス範囲情報にアドレス範囲B、インタフェース指定情報にPCI Expressインタフェース202−3、202−4を示す情報を記録する。なお、アドレス範囲A及びアドレス範囲Bのどちらにも属さないアドレスは、PCI Expressインタフェース202−1を経由して伝送するものとし、そのために必要な情報として3エントリ目(3行目)の有効ビットを1(有効)、アドレス範囲情報にその他のアドレスを示す情報、インタフェース指定情報にPCI Expressインタフェース202−1を示す情報を記録する。4エントリ目(4行目)以降に関しては利用しないので、有効ビットを0(無効)に設定する。
上記の設定により、メモリトランザクションがプロセッサ501−1と501−2を接続するインターコネクト505で衝突することがなくなって、複数のインタフェース202−1〜4で高速なデータ転送を実現できる。
このように本発明によれば、複数のインタフェースを介して計算機に接続されるデータ転送装置の、計算機の主記憶装置に対するデータ転送性能の向上を実現できる。
<第2実施形態>
図23に示すプロセッサ700は、図4及び図21で示した計算機203に用いられるプロセッサの他の構成を示すブロック図である。
プロセッサ700は、少なくとも1つ以上のCPUコア701、ルーティング情報記憶部702、主記憶制御部703、インターコネクト部704から構成される。
主記憶制御部703は少なくとも1つ以上のメモリバス705を介して主記憶装置と接続する。
インターコネクト部704はプロセッサ間のインターコネクト、もしくは、プロセッサ−I/Oハブ間のインターコネクトを担うインターコネクト706を少なくとも1つ以上提供し、他のプロセッサもしくはI/Oハブと接続する。すなわち、インターコネクト706は図4で示されるインターコネクト404−1,404−2,404−3,404−4,405−1,405−2,405−3,405−4,405−5,405−6、及び、図21で示されるインターコネクト504−1,504−2,505に対応付けられる。
ルーティング情報記憶部702は、主記憶アドレス上のある範囲を示す情報と、当該範囲の物理アドレスが属する主記憶装置に接続される主記憶制御部を有するプロセッサを示す情報が対になって記憶されている。また、ルーティング情報記憶部702には、プロセッサを示す情報と、当該プロセッサに対するメモリトランザクションを送信する際に、複数あるインターコネクト706のうち選択すべきインターコネクトを示す情報が対になって記憶されている。
前記ルーティング情報記憶部702が有する2種類の情報を組み合わせることにより、プロセッサ700は、図4ないしは図21に示すような、複数のプロセッサが持つ主記憶制御部に、単一の物理アドレス空間を構成する主記憶装置が分散して接続されている構成においても、メモリトランザクションをその対象アドレスのメモリトランザクションを処理すべき主記憶制御部703を有するプロセッサに転送することができる。その処理手順を次に示す。
あるプロセッサの上で動作するソフトウェアによりメモリアクセスを必要とする命令が実行された時、当該メモリアクセスの対象物理アドレスが、このプロセッサの持つ主記憶制御部703に接続されている主記憶装置に属しているものであれば、当該主記憶制御部703にメモリアクセスを要求する。当該メモリアクセスの対象物理アドレスが、このプロセッサの持つ主記憶制御部703に接続されている主記憶装置に属していないものであれば、当該アドレスが属する主記憶装置が接続されている主記憶制御部703を有するプロセッサを示す情報をルーティング情報記憶部702から得る。次に、当該プロセッサへ対応付けられているインターコネクトを示す情報をルーティング情報記憶部702から得る。そして、主記憶制御部703は、当該インターコネクトに対して、当該メモリアクセスを要求するメモリトランザクションを送信する。インターコネクト706を経由して、当該メモリトランザクションは、他のプロセッサに到達する。ここで、到達したプロセッサが持つ主記憶制御部703に接続された主記憶装置に、当該メモリトランザクションの対象アドレスが属するのであれば、このプロセッサでメモリトランザクションの処理が行われる。
一方、当該メモリトランザクションの対象アドレスが属さない場合、このプロセッサで再びルーティング情報記憶部702を参照して、他のプロセッサにメモリトランザクションを転送する。各プロセッサが有するルーティング情報記憶部702が正しく設定されていれば、上記の動作が繰り返されることにより、最終的には当該メモリトランザクションは、対象アドレスを処理することができるプロセッサに到達する。I/Oハブを介して、外部に接続されている装置からプロセッサに送られてくるメモリトランザクションも、同様に処理される。
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
なお、上記各実施形態では、データ転送装置としてネットワークインタフェースアダプタ201を開示したが、図3ネットワークインタフェース301等を変更することにより、主記憶装置をアクセスする任意のデータ転送装置を構成することができる。例えば、外部の装置と接続するインタフェース301をファイバーチャネルのインタフェースとすることでホストバスアダプタを構成することができる。