(57)【特許請求の範囲】
【請求項１】
受信パケットに含まれるペイロードデータをアプリケーションメモリ領域に直接転送する通信装置において、前記ペイロードデータのエラーチェックを行うエラーチェック部と、前記アプリケーションメモリ領域への前記ペイロードデータの書込処理を行う書込処理部と、前記エラーチェックの処理の完了を待たずに前記書込処理部による前記アプリケーションメモリ領域への前記ペイロードデータの書込処理を開始させ、エラー検出時に、前記書込処理によって上書きされた前記アプリケーションメモリ領域中の有効領域を未だ正常なデータを受信していない無効領域に戻すプロトコル処理部とを備えることを特徴とする通信装置。
【請求項２】
前記プロトコル処理部は、前記アプリケーションメモリ領域中の有効領域を未だ正常なデータを受信していない無効領域に戻した際、有効領域及び無効領域の情報を通知する応答パケットを送信側に送出することを特徴とする請求項１記載の通信装置。
【請求項３】
受信パケットに含まれるペイロードデータをアプリケーションメモリ領域に直接転送する通信装置において、前記ペイロードデータのエラーチェックを行うエラーチェック部と、前記アプリケーションメモリ領域への前記ペイロードデータの書込処理を行う書込処理部と、前記アプリケーションメモリ領域中の有効領域が上書きされない範囲内において、前記エラーチェックの処理の完了を待たずに前記書込処理部による前記アプリケーションメモリ領域への前記ペイロードデータの書込処理を開始させるプロトコル処理部とを備えることを特徴とする通信装置。
【請求項４】
前記プロトコル処理部は、前記アプリケーションメモリ領域中の有効領域と有効領域の間に無効領域が存在せず有効領域が連続している場合、前記ペイロードデータの全てを、前記エラーチェックの処理の完了を待たずに前記書込処理部によって前記アプリケーションメモリ領域へ書き込むことを特徴とする請求項３記載の通信装置。
【請求項５】
前記プロトコル処理部は、前記アプリケーションメモリ領域中の有効領域と書込予定の前記ペイロードデータとの重なりをチェックし、重なりが存在しないとき、前記ペイロードデータの全てを、前記エラーチェックの処理の完了を待たずに前記書込処理部によって前記アプリケーションメモリ領域へ書き込むことを特徴とする請求項３記載の通信装置。
【請求項６】
前記プロトコル処理部は、前記アプリケーションメモリ領域中の有効領域と書込予定の前記ペイロードデータとの重なりをチェックし、前記ペイロードデータの少なくとも一部が有効領域と重ならないとき、前記ペイロードデータ中の有効領域と重ならないデータ部分を、前記エラーチェックの処理の完了を待たずに前記書込処理部によって前記アプリケーションメモリ領域へ書き込むことを特徴とする請求項３記載の通信装置。
【請求項７】
前記プロトコル処理部は、前記ペイロードデータ中の有効領域と重なるデータ部分を、前記エラーチェックの処理の完了後にエラーが発生していないことを条件に前記書込処理部によって前記アプリケーションメモリ領域に書き込むことを特徴とする請求項６記載の通信装置。
【請求項８】
前記プロトコル処理部は、前記アプリケーションメモリ領域中の有効領域と書込予定の前記ペイロードデータとの重なりをチェックし、前記ペイロードデータの少なくとも一部が有効領域と重ならないとき、前記ペイロードデータの先頭から最初の重なりの直前までのデータ部分を、前記エラーチェックの処理の完了を待たずに前記書込処理部によって前記アプリケーションメモリ領域へ書き込むことを特徴とする請求項３記載の通信装置。
【請求項９】
前記プロトコル処理部は、前記ペイロードデータの残りのデータ部分を、前記エラーチェックの処理の完了後にエラーが発生していないことを条件に前記書込処理部によって前記アプリケーションメモリ領域に書き込むことを特徴とする請求項８記載の通信装置。
【請求項１０】
前記書込処理部は、書込処理を行っている前記ペイロードデータについて前記エラーチェック部でエラーが検出された場合、当該ペイロードデータの書込処理を中断することを特徴とする請求項１乃至９の何れか１項に記載の通信装置。
【請求項１１】
前記プロトコル処理部は、前記エラーチェックの処理の完了を待たずに、エラーが発生した場合に行うべき後処理と発生しなかった場合に行うべき後処理とを事前に算出することを特徴とする請求項１乃至９の何れか１項に記載の通信装置。
【請求項１２】
前記プロトコル処理部は、前記エラーチェックの処理の完了を待たずに、エラーが発生しなかった場合に行うべき後処理を事前に算出し、予想に反してエラーが発生した場合にはその時点でエラーが発生した場合に行うべき後処理を算出することを特徴とする請求項１乃至９の何れか１項に記載の通信装置。
【請求項１３】
再送されてきたパケットのペイロードの格納先が過去に受信したパケットのペイロードの格納先と一部もしくは全てが重なってしまう可能性があるレイヤ４プロトコルを使用することを特徴とする請求項１乃至９の何れか１項に記載の通信装置。
【請求項１４】
RDMA over TCPプロトコルを使用することを特徴とする請求項１乃至９の何れか１項に記載の通信装置。
【請求項１５】
受信パケットに含まれるペイロードデータをアプリケーションメモリ領域に直接転送する通信方法において、前記ペイロードデータのエラーチェックを行う第１のステップと、前記エラーチェックの処理の完了を待たずに前記ペイロードデータを前記アプリケーションメモリ領域へ書き込む第２のステップと、エラー検出時に、前記ペイロードデータによって上書きされた前記アプリケーションメモリ領域中の有効領域を未だ正常なデータを受信していない無効領域に戻す第３のステップとを含むことを特徴とする通信方法。
【請求項１６】
前記アプリケーションメモリ領域中の有効領域を未だ正常なデータを受信していない無効領域に戻した際、有効領域及び無効領域の情報を通知する応答パケットを送信側に送出する第４のステップを含むことを特徴とする請求項１５記載の通信方法。
【請求項１７】
受信パケットに含まれるペイロードデータをアプリケーションメモリ領域に直接転送する通信方法において、前記ペイロードデータのエラーチェックを行う第１のステップと、前記ペイロードデータの書込処理によって前記アプリケーションメモリ領域中の有効領域が上書きされるかどうかをチェックする第２のステップと、前記アプリケーションメモリ領域中の有効領域が上書きされない範囲内において、前記エラーチェックの処理の完了を待たずに前記書込処理部による前記アプリケーションメモリ領域への前記ペイロードデータの書込処理を開始させる第３のステップとを含むことを特徴とする通信方法。
【請求項１８】
受信パケットに含まれるペイロードデータをアプリケーションメモリ領域に直接転送する通信装置を構成するコンピュータに、前記ペイロードデータのエラーチェックを行う第１のステップと、前記エラーチェックの処理の完了を待たずに前記ペイロードデータを前記アプリケーションメモリ領域へ書き込む第２のステップと、エラー検出時に、前記ペイロードデータによって上書きされた前記アプリケーションメモリ領域中の有効領域を未だ正常なデータを受信していない無効領域に戻す第３のステップとを行わせるためのプログラム。
【請求項１９】
前記コンピュータに、さらに、前記アプリケーションメモリ領域中の有効領域を未だ正常なデータを受信していない無効領域に戻した際、有効領域及び無効領域の情報を通知する応答パケットを送信側に送出する第４のステップを行わせることを特徴とする請求項１８記載のプログラム。
【請求項２０】
受信パケットに含まれるペイロードデータをアプリケーションメモリ領域に直接転送する通信装置を構成するコンピュータに、前記ペイロードデータのエラーチェックを行う第１のステップと、前記ペイロードデータの書込処理によって前記アプリケーションメモリ領域中の有効領域が上書きされるかどうかをチェックする第２のステップと、前記アプリケーションメモリ領域中の有効領域が上書きされない範囲内において、前記エラーチェックの処理の完了を待たずに前記書込処理部による前記アプリケーションメモリ領域への前記ペイロードデータの書込処理を開始させる第３のステップとを行わせるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は通信装置に関し、特に受信パケットに含まれるペイロードデータをアプリケーションプログラムのバッファに直接書き込む機能を有する通信装置に関する。
【背景技術】
【０００２】
一般的に、コンピュータは、ネットワークインタフェースカードを有し、ネットワークインタフェースカード経由で他のコンピュータや機器と通信を行う。
【０００３】
特に通信性能がシステムに大きく影響する並列コンピューティングの分野では、RDMA(リモートダイレクトメモリアクセス)という技術が利用されている。RDMAは、データを受信する側が、受信したパケットのペイロードデータを、オペレーティングシステム(OS)が管理するOS空間を介することなく、アプリケーションプログラム(以下、アプリケーションと称す)で利用するメモリ空間に直接転送する技術である。このように転送データに対するバッファコピー回数を削減することで、プロセッサ処理負荷の削減による性能の向上および通信レイテンシの削減が可能になる。特に最近では、インターネットの標準プロトコルでTCP/IP上でRDMAを利用するためのプロトコルであるiWARPが、RDMA Consortium(http://www.rdmaconsortium.org/home)にて標準化されている(例えば非特許文献１および２)。
【０００４】
RDMAを使って通信を行うRDMA通信装置の構成例を図８に示す。図８を参照すると、RDMA通信装置９は、ネットワークアダプタ１、プロセッサ２、メインメモリ３、I/O装置４と、これらを接続するシステムバス５とにより構成される。
【０００５】
メインメモリ３は、アプリケーションが処理を実施するためのメモリ領域であるアプリケーションメモリ領域３１と、通信プロトコルが制御情報を管理するためのメモリ領域である制御情報メモリ領域３２との２つのメモリ領域を有する。ネットワークアダプタ１は、受信処理部８、送信処理部１３、コネクション管理メモリ１２より構成される。
【０００６】
RDMA通信装置９と他のRDMA通信装置９とでRDMAを利用した通信を行う場合、送信側のRDMA通信装置９内のプロセッサ２は、アプリケーションメモリ領域３１内の送信用データを送出することを制御情報メモリ領域３２に設定し、ネットワークアダプタ１に対してパケット送信を要求する。ネットワークアダプタ１内の送信処理部１３は、制御情報メモリ領域３２から送信用データの格納先を判別し、アプリケーションメモリ領域３１から送信用データを読み出す。さらに、送信処理部１３は、コネクション管理メモリ１２から、パケットを送出するために必要なコネクション情報を読み出し、送出用パケットを作成し、受信側のRDMA通信装置９宛に、パケットを送出する。コネクション管理メモリ１２は、必要に応じてコネクション情報の更新を行い、コネクション管理メモリ１２に格納する。
【０００７】
受信側のRDMA通信装置９では、送信側のRDMA通信装置９から受信したパケットは、ネットワークアダプタ１の受信処理部８に入力される。受信処理部８は、受信パケットのヘッダ部分からコネクションを識別し、コネクション管理メモリ１２からコネクション情報の読み出しを行う。さらに、受信処理部８は、受信パケットのヘッダに記述された情報とコネクション情報とから、当該受信パケットのペイロード部分をアプリケーションメモリ領域３１のどのアドレスに書き込むかを判定して、受信パケットのペイロード部分をアプリケーションメモリ領域３１に書き込む。受信処理部８は、必要に応じてコネクション情報の更新を行い、コネクション管理メモリ１２を更新する。
【０００８】
送信側RDMA通信装置９と受信側RDMA通信装置９との間に確立されるコネクションに関し、アプリケーションメモリ領域３１を特定する情報（アプリケーションメモリ領域３１として使うバッファの識別子、先頭アドレス、サイズ）と、アプリケーションメモリ領域３１の現在の書き込み状況（例えば、正常に受信したシーケンス番号のリスト）とをコネクション管理メモリ１２に保持し、受信パケットのヘッダ部分に、ペイロードデータに含まれるデータの先頭シーケンス番号とサイズとを含ませておけば、受信パケットのヘッダに記述された情報とコネクション情報からペイロードデータの書込位置を特定することができる。受信パケットのヘッダに記述された情報とコネクション情報から具体的にどのようにしてペイロード書込位置を特定するか等、RDMA通信の標準的な実現方法に関しては、非特許文献１および２に詳細に記載されている。
【０００９】
図９に、RDMA通信装置９内の受信処理部８の従来の構成例を示す。従来の受信処理部８は、パケット受信処理部８１、パケットエラーチェック部８３、コネクション情報読出部８２、プロトコル処理部８４、コネクション情報書込要求部８７、パケット送信要求部８９、ペイロードデータ書込要求部８５、制御情報書込要求部８８、メインメモリ書込処理部８６から構成される。
【００１０】
パケット受信処理部８１は、送信側のRDMA通信装置９からパケットを受信すると、パケット内のヘッダ部分からプロトコル種別を判定した上で、パケットエラーチェック部８３に対してパケットにエラーが存在しないかどうかのチェックを要求する。パケットエラーチェック部８３は、パケット全体もしくはパケットのペイロード部分にデータエラーが存在しないかどうかのチェックを行う。エラーチェック処理とは、具体的には、レイヤ２でイーサネット（登録商標）を利用している場合のFCS演算や、レイヤ４でTCPを利用している場合のTCPチェックサム演算である。パケットにエラーが発生している場合は、そのパケットは廃棄され、以後の処理は行われない。
【００１１】
パケットの末尾まで検査してパケットにエラーが存在しない場合、コネクション情報読出部８２は、パケット内のヘッダ部分から抽出可能なコネクションを一意に識別するためのコネクション識別子を元に、コネクション管理メモリ１２からコネクション情報の読み出しを行う。コネクション情報の読み出しが完了すると、プロトコル処理部８４は、読み出されたコネクション情報と受信パケットのペイロード情報とから、プロトコル処理を実施する。プロトコル処理とは、具体的には、ペイロードデータをアプリケーションメモリ領域３１のどのアドレスに書き込むかを判定する処理と、コネクション情報の更新内容を決定する処理と、応答パケットの送出が必要かどうかを判定し、応答パケットの送出が必要な場合に応答パケットの情報を生成する処理と、制御情報メモリ領域３２に制御情報の書き込みが必要かどうかを判定して、必要な場合は制御情報の内容を決定する処理である。応答パケットの典型的な例はTCPのACK(Acknowledgement)パケットである。
【００１２】
プロトコル処理部８４が、ペイロードデータの書込位置を決定した時点で、ペイロードデータ書込要求部８５は、メインメモリ書込処理部８６経由でペイロードデータのアプリケーションメモリ領域３１への書込処理を行う。コネクション情報書込要求部８７は、プロトコル処理部８４が更新したコネクション情報をコネクション管理メモリ１２に対して書き込む。パケット送信要求部８９は、プロトコル処理部８４が応答パケットの送出が必要と判定した場合に、送信処理部１３に対して応答パケットの送出を要求する。制御情報書込要求部８８は、プロトコル処理部８４が、制御情報の書き込みが必要と判定した場合に、ペイロードデータの書込完了を待ってから、メインメモリ書込処理部８６経由で、制御情報メモリ領域３２に対して制御情報の書込を行う。
【００１３】
RDMA通信における制御情報の典型的な例は、RDMA読出制御を行った際の読み出し完了通知である。RDMA通信では、転送データの全てがデータ送信側のRDMA通信装置９のアプリケーションメモリ領域３１からデータ受信側のRDMA通信装置９のアプリケーションメモリ領域３１に転送された時点で、RDMA読出制御が完了したという制御情報を書き込むことで、プロセッサ２に対してRDMA読み出しの完了を通知する。一度のRDMA通信に転送される転送データの総容量は、パケットのペイロード長よりも大きいことが多く、その場合、RDMA通信は、転送データを複数パケットのペイロードに分割して実行される。RDMA読み出し制御が完了したことを通知する制御情報の書き込みは、RDMA転送のためのパケットの全ての受信が完了し、アプリケーションメモリ領域３１へのペイロードデータの転送が完了した時点で実施されることになる。
【００１４】
次に、RDMA通信装置９における従来の受信動作を図１０のタイミングチャートを参照して説明する。
【００１５】
パケット受信処理部８１は、送信側のRDMA通信装置９からパケットを受信すると、ヘッダ部分を受信し、プロトコルの種別が確定した時点で、パケットエラーチェック部８３に対して処理の要求を行う。パケットエラーチェック部８３は、パケットに異常が無いかどうかをパケット全体、もしくは、パケット内のペイロードデータ全体を検査することで判定する。パケットエラーチェック部８３が、パケットにエラーが存在するかどうかの判定を完了するまでには、必ずパケットを末尾まで受信する必要がある。パケットエラーチェック部８３でのエラーチェックが完了すると、コネクション情報読出部８２がコネクション情報の読み出しを行い、プロトコル処理部８４へ受け渡す。プロトコル処理部８４が、パケットのヘッダ情報とコネクション情報とからペイロードの書込位置を判定した時点で、メインメモリ書込処理部８６にてペイロードデータの書込処理が実行される。プロトコル処理部８４において、その他のプロトコル処理が完了すると、コネクション情報書込要求部８７とパケット送信要求部８９の処理が実行される。メインメモリ書込処理部８６での制御情報の書込処理は、プロトコル処理部８４のその他プロトコル処理と、メインメモリ書込処理部８６のペイロードデータの書き込みの両方の完了後に実行される。
【００１６】
受信パケットに含まれるペイロードデータをアプリケーションプログラムのバッファに直接書き込む機能を有する通信装置は、特許文献１にも記載されている。ただし、特許文献１に記載される通信装置では、RDMA通信専用に定義されたレイヤ４プロトコルを使用している。
【００１７】
他方、通信に関連する他の従来技術として、特許文献２に示されるように、受信バッファの残量に応じて、エラーチェックを伴うデータ転送とエラーチェックを省略したデータ転送とを切り替える技術がある。また別の従来技術として、特許文献３に示されるように、パケットのエラーチェックの完了を待たずにメモリへの書き込みを開始し、エラー検出時、それまでに書き込まれたエラーの含まれるデータを破棄するようにした技術がある。
【００１８】
【特許文献１】特開２００４-７３５４号公報
【特許文献２】特開平９−１４９０６７号公報
【特許文献３】特開平１０−３４１４１９号公報
【非特許文献１】RDMA Protocol Verbs Specification (Version 1.0) pp191-201、［平成１８年２月２１日検索］、インターネット＜URL:http://www.rdmaconsortium.org/home/draft-hilland-iwarp-verbs-v1.0-RDMAC.pdf＞
【非特許文献２】An RDMA Protocol Specification (Version 1.0) pp4-7、［平成１８年２月２１日検索］、インターネット＜URL:http://www.rdmaconsortium.org/home/draft-recio-iwarp-rdmap-v1.0.pdf＞
【発明の開示】
【発明が解決しようとする課題】
【００１９】
上述したように従来のRDMA通信装置は、受信したパケットにエラーが無いかどうかをチェックした上で、パケットにエラーが存在しないと分かってからペイロードをアプリケーションのバッファに書き込んでいる。パケットにエラーが存在するかどうかをチェックする代表的な例は、FCSやCRCであるが、FCSやCRCを計算してパケットにエラーが無いかどうかをチェックするためには、パケットデータの末尾までデータを受信する必要がある。インターネットで標準的に使われているイーサネット（登録商標）では通常パケットサイズは1500バイトである。よって、受信側のRDMA通信装置は、1500バイトのパケットデータを全て受け取って、パケットにエラーが無いことを確認してから、始めてペイロードデータをアプリケーションバッファに書き込む。当然ながら、転送効率を上げるためにより大きなパケットサイズで通信を行っている場合は、パケットのエラーが無いかどうかを確認するための待ち時間はさらに大きくなる。
【００２０】
このように従来のRDMA通信装置では、受信側RDMA通信装置９がパケットを受信してからアプリケーションバッファに書き込むまでの遅延が大きいという課題がある。その理由は、前述したように、受信側RDMA通信装置９が、パケットの全てを受信し終わってパケットにエラーが無いことを確認してから、コネクション情報の読み出し、ペイロードデータの書込位置判定に代表されるプロトコル処理、及び、ペイロードデータをアプリケーションバッファに書き込む処理を実施するためである。
【００２１】
このような問題を解決するために、特許文献３に記載される技術をRDMA通信に適用し、受信パケットに対するエラーチェックの完了を待たずにアプリケーションメモリへの書き込みを開始し、エラー検出時、それまでに書き込まれたエラーの含まれるデータを破棄することが考えられる。しかしながら、レイヤ４にTCPの様な通信プロトコルを利用している場合、再送されてきたパケットのペイロードの格納先が過去に受信したパケットのペイロードの格納先と一部もしくは全てが重なってしまう可能性があるため、エラーチェック前にペイロードデータの書き込みを行ってしまうと、アプリケーションメモリ領域３１内の有効データを上書きしてしまう可能性があり、エラーパケットを破棄するだけではアプリケーションメモリ領域３１上の有効領域がエラーパケットで破壊されたままアプリケーションに渡される危険性がある。勿論、特許文献１に見られるようなRDMA通信専用に定義されたレイヤ４プロトコルを利用して、受信パケットのペイロードの格納先が過去に受信したパケットのペイロードの格納先と重複しないことを保証するプロトコルであれば問題はないが、インターネットで標準的に利用されているTCP/IPを使うことで、RDMA通信装置の低価格化、他の通信プロトコル及びアプリケーションとの共存が可能となるため、TCP/IPを利用してRDMA通信を実現すること、つまりRDMA over TCP/IPは重要である。
【００２２】
本発明はこのような事情に鑑みて発案されたものであり、その目的は、受信側RDMA通信装置がパケットを受信してからアプリケーションバッファに書き込むまでの遅延を小さくし、且つ、再送されてきたパケットのペイロードの格納先が過去に受信したパケットのペイロードの格納先と一部もしくは全てが重なってしまう可能性があるレイヤ４プロトコルを利用する場合であっても、アプリケーションプログラムに破壊されたデータが渡されないようにすることにある。
【課題を解決するための手段】
【００２３】
本発明の第１の通信装置は、受信パケットに含まれるペイロードデータをアプリケーションメモリ領域に直接転送する通信装置において、前記ペイロードデータのエラーチェックを行うエラーチェック部と、前記アプリケーションメモリ領域への前記ペイロードデータの書込処理を行う書込処理部と、前記エラーチェックの処理の完了を待たずに前記書込処理部による前記アプリケーションメモリ領域への前記ペイロードデータの書込処理を開始させ、エラー検出時に、前記書込処理によって上書きされた前記アプリケーションメモリ領域中の有効領域を未だ正常なデータを受信していない無効領域に戻すプロトコル処理部とを備えることを特徴とする。
【００２４】
本発明の第２の通信装置は、受信パケットに含まれるペイロードデータをアプリケーションメモリ領域に直接転送する通信装置において、前記ペイロードデータのエラーチェックを行うエラーチェック部と、前記アプリケーションメモリ領域への前記ペイロードデータの書込処理を行う書込処理部と、前記アプリケーションメモリ領域中の有効領域が上書きされない範囲内において、前記エラーチェックの処理の完了を待たずに前記書込処理部による前記アプリケーションメモリ領域への前記ペイロードデータの書込処理を開始させるプロトコル処理部とを備えることを特徴とする。
【００２５】
『作用』
本発明にあっては、受信パケットのペイロードデータのエラーチェックと並行してアプリケーションメモリ領域への書き込みを行うことでパケット処理の遅延を削減し、エラーが検出されたら書込処理によって上書きされた前記アプリケーションメモリ領域中の有効領域を未だ正常なデータを受信していない無効領域に戻すか、あるいはアプリケーションメモリ領域中の有効領域が上書きされない範囲内においてペイロードデータをアプリケーションメモリ領域に書き込むことにより、破壊されたデータがアプリケーションプログラムに渡されるのを防止する。
【発明の効果】
【００２６】
本発明によれば、パケットを受信してからアプリケーションメモリ領域へペイロードデータを書き込むまでの遅延を小さくすることができる。その理由は、エラーチェックの処理の完了を待たずにアプリケーションメモリ領域へのペイロードデータの書込処理を開始するからである。
【００２７】
また本発明によれば、再送されてきたパケットのペイロードの格納先が過去に受信したパケットのペイロードの格納先と一部もしくは全てが重なってしまう可能性があるTCPなどのレイヤ４プロトコルを利用する場合であっても、アプリケーションプログラムに破壊されたデータが渡されることがない。その理由は、エラーが検出されたら書込処理によって上書きされたアプリケーションメモリ領域中の有効領域を未だ正常なデータを受信していない無効領域に戻すか、あるいはアプリケーションメモリ領域中の有効領域が上書きされない範囲内においてペイロードデータをアプリケーションメモリ領域に書き込むようにしているからである。
【発明を実施するための最良の形態】
【００２８】
『第１の実施の形態』
本発明のRDMA通信装置９の全体構成は、従来のRDMA通信装置９の構成と同様に、図８に示されるように、ネットワークアダプタ１、プロセッサ２、メインメモリ３、I/O装置４と、これらを接続するシステムバス５とにより構成され、メインメモリ３は、アプリケーションが処理を実施するためのメモリ領域であるアプリケーションメモリ領域３１と、通信プロトコルが制御情報を管理するためのメモリ領域である制御情報メモリ領域３２との２つのメモリ領域を有し、ネットワークアダプタ１は、受信処理部８、送信処理部１３およびコネクション管理メモリ１２より構成される。本発明のRDMA通信装置は、受信処理部８の構成に従来のRDMA通信装置９との違いがある。
【００２９】
図１を参照すると、本発明の第１の実施の形態にかかるRDMA通信装置９における受信処理部８は、パケット受信処理部８１、コネクション情報読出部８２、プロトコル処理部８４、パケットエラーチェック部８３、ペイロードデータ書込要求部８５、後処理部９０、制御情報書込要求部８８、コネクション情報書込要求部８７、メインメモリ書込処理部８６、パケット送信要求部８９より構成される。
【００３０】
送信側のRDMA通信装置９から受信したパケットは、受信側のRDMA通信装置９のパケット受信処理部８のパケット受信処理部８１に入力される。パケット受信処理部８１では、受信パケットのヘッダ情報から、パケットの種別、及び、コネクションの識別を行う。パケット受信処理部８１でコネクションが識別されると、コネクション情報読出部８２においてコネクション管理メモリ１２から該当コネクションを処理するために必要な情報が読み出される。また、同時に、パケットエラーチェック部８３では、受信したパケットにエラーが含まれていないかどうかのチェック処理が実行される。
【００３１】
コネクション情報読出部８２でのコネクション情報の読み出しが完了すると、プロトコル処理部８４は、受信パケットのヘッダ情報とコネクション情報とからプロトコル処理を実施し、受信パケットのペイロードをアプリケーションメモリ領域３１のどこのアドレスに書き込むかを判定し、ペイロードデータ書込要求部８５に対してペイロードデータの書込処理を要求する。また、プロトコル処理部８４は、受信パケットにエラーがない場合を仮定して、コネクション情報の更新内容、必要に応じて受信パケットに対する応答として送出する応答パケットの情報、必要に応じて制御情報メモリ領域３２に書き込みを行う制御情報を算出する。さらに、プロトコル処理部８４は、パケットにエラーが発生した場合を仮定して、コネクション情報の更新内容、必要に応じて送出する応答パケットの情報、必要に応じて制御情報メモリ領域３２に書き込む制御情報の内容を算出する。
【００３２】
メインメモリ書込処理部８６は、ペイロードデータ書込要求部８５からペイロード書込要求を受信すると、ペイロードデータを指定されたアプリケーションメモリ領域３１のアドレスに書き込む。この書込処理は、パケットエラーチェック部８３の処理結果に関係なく実行される。このため、パケット受信後、低遅延でペイロードデータをアプリケーションメモリ領域３１に書き込むことが可能である。
【００３３】
後処理部９０は、プロトコル処理部８４より、受信パケットにエラーが発生した場合と、受信パケットにエラーが発生しない場合の二通りに対する後処理情報を受信する。後処理情報とは、具体的には、コネクション管理メモリ１２を更新するためのコネクション情報と、応答のために送出するパケットのパケット情報と、制御情報メモリ領域３２に書き込む制御情報との３つである。但し、コネクション管理メモリ１２を更新するためのコネクション情報は、コネクション情報を更新しない旨の情報も含む。また、応答のために送出するパケットのパケット情報は、応答パケットを送出しない旨の情報も含む。制御情報メモリ領域３２に書き込む制御情報は、制御情報を書き込まない旨の情報も含む。
【００３４】
後処理部９０は、後処理情報とパケットエラーチェック部８３のエラーチェック処理結果の両方を受信後に、後処理を開始する。具体的には、受信パケットにエラーが発生した場合と受信パケットにエラーが発生しない場合の二通りに対する後処理情報のうち、エラーチェック処理結果がエラー無しであれば前者を選択し、エラー有りであれば後者を選択し、選択した後処理情報に従って、コネクション管理メモリ１２に対してコネクション情報の更新を要求する処理と、パケット送信要求部８９に対して応答パケットの送出を要求する処理と、制御情報書込要求部８８に対して制御情報メモリ領域３２への制御情報書き込みを要求する処理との３つの処理を実施する。その際、後処理部９０は、コネクション情報の更新が必要な場合は、コネクション情報書込要求部８７経由にて、コネクション管理メモリ１２のコネクション情報を更新する。また、後処理部９０は、応答パケットの送出が必要と判定した場合は、パケット送信要求部８９経由にて、送信処理部１３に対して応答パケットの送出を要求する。また、後処理部９０は、制御情報の書き込みが必要な場合は、制御情報書込要求部８８経由でメインメモリ書込処理部８６に対して、制御情報の書き込みを要求する。メインメモリ書込処理部８６は、制御情報書込要求部８８からの要求に従って、制御情報を制御情報メモリ領域３２に書き込む。メインメモリ書込処理部８６は、書き込み予定の制御情報に対応する受信パケットのペイロードデータの書き込みが完了していない場合は、書込処理の完了を待って制御情報の書き込みを実施する必要がある。
【００３５】
なお、後処理部９０は、パケットエラーチェック部８３でのエラーチェック結果に従って、パケット送信要求部８９に対して応答パケットの送出を要求するが、パケットエラーチェック部８３でのエラーチェック結果に関係なく、同一の応答パケットを送出する場合には、エラーチェックの結果を待たずに応答パケットの送出要求を行っても良い。また、後処理部９０は、パケットエラーチェック部８３でのエラーチェック結果に従って、コネクション情報書込要求部８７に対するコネクション情報の更新要求を行うが、コネクション情報の一部、もしくは、全てがエラーチェック結果に関係なく同一の更新内容となる場合は、同一の更新部分に関しては、エラーチェックの結果を待たずにコネクション情報書込要求部８７に対して更新要求を通知しても良い。
【００３６】
次に、本実施の形態にかかるRDMA通信装置９の動作を、図２の受信制御部８のタイミングチャートを参照して説明する。
【００３７】
パケット受信処理部８１は、受信したパケットを処理する際に、ヘッダ部分を受信した時点でパケットエラーチェック部８３とコネクション情報読出部８２とに対して処理の要求を行う。コネクション情報読出部８２がヘッダ情報を読み出した後、プロトコル処理部８４がペイロード書込位置を判定すると、ペイロードデータ書込要求部８５からの要求を契機にメインメモリ書込処理部８６がペイロードデータの書き込みを開始する。また、プロトコル処理部８４がその他のプロトコル処理を完了し、かつ、パケットエラーチェック部８３がパケット末尾までのエラーチェックを完了すると、後処理部９０が、エラーが発生したかどうかに従って、実行すべき処理を選択する。処理選択の結果、必要に応じて、コネクション情報書込要求部８７でコネクション情報の更新が行われ、パケット送信要求部８９において応答パケットの送出要求が行われる。メインメモリ書込処理部８６での制御情報の書込動作は、後処理部９０での実行処理の選択とメインメモリ書込処理部８６でのペイロードデータの書込処理との双方が完了した後に実行される。
【００３８】
このように、コネクション情報読み出し処理、プロトコル処理部８４でのペイロード書込位置判定処理、及び、メインメモリ書込処理部８６でのペイロードデータ書込処理という一連の処理が、パケットエラーチェック部８３でのエラーチェック結果を待たずに即時に実施されることにより、全体としてのパケット処理遅延を削減することが可能である。
【００３９】
『詳細な動作例』
次に本実施の形態にかかるRDMA通信装置９の詳細な動作例について、図面を参照して説明する。なお、以下の動作例においては、RDMA通信装置９のレイヤ４プロトコルとしてTCPを利用するものとする。
【００４０】
『詳細な動作例１』
図３に本発明にかかるRDMA通信装置９のパケット受信時におけるアプリケーションメモリ領域３１の管理内容の変化例１を示す。
【００４１】
アプリケーションメモリ領域３１に、データ１とデータ２が書き込まれており、それぞれ有効領域１、有効領域２となっていたとする。それ以外の未受信の領域は無効領域とする。なお、有効領域とは、アプリケーションメモリ領域３１内で有効にデータを受信したものとして管理されているメモリ領域であり、RDMA通信完了時にプロセッサ２に正常データとして通知される予定のデータ領域である。これに対して無効領域は、アプリケーションメモリ領域３１内でまだ有効なデータを受信しておらず、送信側のRDMA通信装置９からの正常データ受信が必要なメモリ領域である。なお、この有効領域、無効領域はネットワークアダプタ１が受信データを管理するための領域である。よって、プロセッサ２が、RDMA通信完了前にメモリ領域が有効であるか無効であるかを参照して、有効領域に対する処理を開始することはない。プロセッサ２が、最終的な有効領域にアクセスするのは、RDMA通信における転送データ全体の受信が完了して、RDMA通信完了をネットワークアダプタ１が制御情報メモリ領域３２を通じてプロセッサ２に通知した後である。この特性により、ネットワークアダプタ１は、一端、有効領域となったデータ領域を上書きして、無効領域にすることが可能である。
【００４２】
なお、図３では、説明を分かりやすくするためデータ１とデータ２とに対応付けて有効領域１と有効領域２を別々の領域として管理しているように記載しているが、このような連続した２つ以上の領域は、一つの連続した有効領域として管理しても良い。
【００４３】
上記の状態において、送信側のRDMA通信装置９からペイロードデータにデータ３の入ったパケットを受信したとする。ここで、データ３は、データ２の直ぐ後ろに続くデータであるとすると、受信側のRDMA通信装置９は、受信パケットにエラーがあるかどうかのチェックが完了する前に、このデータ３をアプリケーションメモリ領域３１に書き込む。その後、受信パケットのエラーチェックが完了し、エラーが発生していない場合は、書き込んだデータ３を有効データとして管理し、また、送信側のRDMA通信装置９に対して応答パケットとしてデータ３まで受信したことを通知する。
【００４４】
他方、受信側のRDMA装置９は、受信パケットにエラーが存在した場合、書き込んだデータ３を無効領域として管理する。受信側のRDMA装置９が、特に応答パケットを送出しなければ、送信側のRDMA通信装置９は、パケットが廃棄されたものと判定し、データ３を含むペイロード付きパケットを再送する。受信側のRDMA通信装置９は、データ３を含むペイロード付きパケットを再度受信すると、一度目と同様の処理を実行する。受信側のRDMA通信装置９は、再受信したデータ３を含むペイロードのパケットにエラーが存在しなければ、データ部分を有効領域として管理する。最終的にRDMA通信での転送データの全てが有効領域に書き込まれた後に、制御情報メモリ領域３２にデータの受信完了が通知され、RDMA通信装置９内のプロセッサ２はデータを受信したことを認識する。
【００４５】
なお、本実施の形態においては、最初のデータ３を含むペイロード付きパケットを受信した際に、パケットにエラーが発生した場合、応答パケットを返さないことにより、データ３を含むペイロード付きパケットが再送されるが、あえて、データ２まで受信したという応答パケットを返すことにより、データ３を含むペイロード付きパケットの再送パケットが早く送出されるようにする工夫も可能である。
【００４６】
『詳細な動作例２』
図４に本実施の形態にかかるRDMA通信装置９におけるパケット受信時のアプリケーションメモリ領域３１の管理内容の変化例２を示す。
【００４７】
最初の段階では、アプリケーションメモリには、データ１、データ２、データ３、データ４がそれぞれ有効領域１、２、３、４として書き込まれている状態とする。データ１、データ２は、連続した領域であるが、データ２とデータ３間及びデータ３とデータ４間には無効領域が存在する。なお、図中の「有」は有効領域、「無」は無効領域、「デ」はデータ、「未」は未受信を意味する。このように有効領域が非連続な状態になる主原因はパケットロスである。
【００４８】
この状態で、データ５のペイロードを有する再送パケットを受信したとする。ここで、データ５は、データ２の末尾からデータ３の領域を含み、データ４の途中まで続くデータ領域を占めているものとする。受信側のRDMA通信装置９は、データ５のペイロード付きパケットを受信すると、パケットにエラーが存在するかどうかを確認する前に、アプリケーションメモリ領域３１にデータ５を書き込む。データ５の書込処理において、既に有効データとなっていた部分、つまり、データ３の全てとデータ４の先頭からの一部データは、データ５で上書きされることになる。
【００４９】
データ５のパケットのエラーチェックが完了して、パケットにエラーが存在しない場合には、書き込んだデータ５のメモリ領域が新たに有効領域となる。結果として、有効領域は、データ１から始まりデータ４の末尾までの連続した領域となる。よって、TCPのACKパケットとして、データ４の末尾まで受信したというACKシーケンス番号をつけて、応答パケットを送信側のRDMA通信装置９宛に送出する。
【００５０】
他方、データ５のパケットにエラーが存在した場合は、データ５の書き込まれた部分は、新たに無効領域として定義される。結果として、元は、有効領域であったデータ３の格納されていた有効領域３の範囲、及び、データ４の格納されていた有効領域４の範囲の先頭部分に関して、無効領域に変更されることになる。受信側RDMA通信装置９内の受信制御部８内のプロトコル処理部８４では、受信パケットにエラーが発生しない場合の通常のプロトコル処理とは別に、受信パケットにエラーが発生した場合に整合性を取るためのプロトコル処理を実行する機能を有する。
【００５１】
受信パケットにエラーが発生することにより整合性を取るためのプロトコル処理の具体例としては、エラーパケットのペイロードデータが書き込まれた部分を無効領域として管理するデータを生成することである。レイヤ４がTCPでありSACKオプション(RFC2018)を利用しない場合、エラーの発生したデータ５の部分を無効領域として管理し、無効領域を含まない連続した有効領域の末尾部分を示す正しいACKパケットを送出していれば、新たに無効領域として定義された部分に関しては、再送パケットが送出されることになるので、最終的には正常なパケットを受信することが可能である。
【００５２】
また、レイヤ４プロトコルとして、どこが有効領域であり、また、どこが無効領域であるかを通知するようなTCP SACKオプションのようなプロトコルを利用する場合、受信パケットにエラーが発生することにより整合性を取るためのプロトコル処理の他の具体例としては、パケットをエラーとして廃棄することによる有効領域と無効領域の変化をACK応答パケットとして、送信側のRDMA通信装置９に通知する処理がある。
【００５３】
次に図５を参照して、アプリケーションメモリ領域３１に書き込まれるデータの有効領域、無効領域を管理するコネクション情報の例を説明する。図５の例では、rcv_nxt、rcv_wnd、受信中データSEQ番号の３種類のデータで、データの有効領域および無効領域を管理する。ここで、rcv_nxtは、データをどこまで連続して正常に受信しているかをデータSEQ番号で表示し、rcv_wndは、有効な受信範囲をrcv_nxtからのデータSEQ番号で表示し、受信中データSEQ番号は、rcv_wndのうち正常に受信したデータの範囲をデータSEQ番号で表示する。例えば図５の上段の状態は、SEQ番号100まで正常にデータを受信しており、残りの有効な受信範囲が1000−100＝900であり、そのうち、SEQ番号200から400までのデータと、600〜850までのデータを正常に受信している状態にあるため、rcv_nxt＝100、rcv_wnd＝900、受信中データSEQ番号＝200−400，600−850となっている。
【００５４】
この状態で、先頭SEQ番号＝500、レングス＝200（SEQ番号）がヘッダに設定された再送パケットを受信し、そのパケットに誤りがあったとすると、図５の下段に示すように当該パケットのペイロードが上書きされたSEQ番号＝500〜700の箇所が無効領域となり、その結果、コネクション情報のうち、受信中データSEQ番号が、200−400，600−850から、200−400，700−850に書き換えられる。因みに、当該再送パケットにエラーがない場合には、受信中データSEQ番号は、200−400、500−850となる。
【００５５】
次に本実施の形態の効果を説明する。
【００５６】
本実施の形態によれば、メインメモリ書込処理部８６によるペイロードデータの書込処理が、パケットエラーチェック部８３でのエラーチェック結果を待たずに即時に実施されるため、図２のタイミングチャートに示されるように全体としてのパケット処理遅延を削減することが可能である。
【００５７】
また本実施の形態によれば、パケットエラーが検出された場合には、当該パケットのペイロードデータを無効にするだけでなく、既に正常に受信していたデータのうち当該ペイロードデータによって上書きされた部分を無効な状態に戻すことにより、アプリケーションプログラムに破壊されたデータが渡されてしまう事態を回避することができる。
【００５８】
さらに本実施の形態によれば、レイヤ４プロトコルとして、どこが有効領域であり、また、どこが無効領域であるかを通知するようなTCP SACKオプションのようなプロトコルを利用する場合に、パケットをエラーとして廃棄することによる有効領域と無効領域の変化をACK応答パケットとして送信側のRDMA通信装置９に通知することにより、一旦有効領域として通知したメモリ領域を後に無効領域として送信側に認識させることが可能となる。
【００５９】
『第２の実施の形態』
第１の実施の形態では、エラーチェック結果が出るのを待たずにペイロードデータの全てをアプリケーションメモリ領域に書き込むようにしたが、本実施の形態である第２の実施の形態から後述する第６の実施の形態までは、有効領域が上書きされない範囲内においてペイロードデータの書き込みを実施する。
【００６０】
図６を参照すると、本発明の第２の実施の形態にかかるRDMA通信装置９の受信処理部８は、パケットエラーチェック部８３からプロトコル処理部８４に対してエラーチェック結果が通知されるようになっており、プロトコル処理部８４は、図３で示したように全ての有効領域が連続し、有効領域と有効領域の間に無効領域が存在しない場合にのみ、パケットエラーチェック部８３の処理結果を待たずに、ペイロードデータ書込要求部８５に対してペイロードデータの書き込みを要求し、図４で示したように有効領域と有効領域の間に無効領域が存在するような場合、プロトコル処理部８４は、パケットエラーチェック部８３でのエラーチェックの結果を待ち、エラーが発生していないときのみペイロードデータの書込要求を行う。すなわち、本実施の形態は、TCPの仕様RFC793によれば、有効領域が連続している状態において、アプリケーションメモリ領域３１に書き込まれるペイロードデータは、既に存在する有効領域と重ならないことが保証される点に着目している。その他の構成と動作は第１の実施の形態と同じである。
【００６１】
次に本実施の形態の効果を説明する。
【００６２】
本実施の形態によれば、パケットエラーチェック部８３でのエラーチェックが完了する前に、プロトコル処理部８４からペイロードデータの書込要求処理を実施する条件を、有効領域が連続している場合に限定することで、後処理部９０で実行される後処理が単純になるという効果が得られる。すなわち、書き込まれるペイロードデータが既に存在する有効領域と重ならないことが保証されるため、パケットにエラーが発生した際に必要な後処理は、単純にパケットを受信しなかったものとして、コネクション情報の更新を行わず、応答パケットを送出しなければよく、第１の実施の形態のように、エラーが発生した場合に、既存のデータが有効領域から無効領域に変更されることに付随する専用の整合処理を実行する必要が無くなる分だけ、処理が簡単になるからである。
【００６３】
また、本実施の形態によれば、受信側のRDMA通信装置９が生成する応答パケットが、有効領域と無効領域を送信側のRDMA通信装置９に通知するプロトコルを利用し、かつ、その一貫性を保つ必要がある場合、すなわち、一度有効領域と判定したメモリ領域を後から無効領域と判定できない場合にも適用可能であるというメリットがある。
【００６４】
なお、ネットワークが安定して２台のRDMA通信装置９間のパケット廃棄がほとんど発生しない状態においては、ほとんどの状態において有効領域が連続した状態であり、有効領域と有効領域の間が無効領域となっていることは少ないと考えられ、有効領域と有効領域の間に無効領域が存在する場合に、パケットエラーチェック部８３でのエラーチェック完了前にペイロードデータが書き込みされて通信遅延を削減するという効果が得られない点に関しては、システム全体としての影響は少ないと考えられる。
【００６５】
また、有効領域と有効領域の間に無効領域が存在する状況というのは、ネットワークが安定しておらず再送が発生しやすい状況であり、システム全体としては、エラーチェック完了前にペイロードデータを書き込むことによる遅延時間削減の効果より、パケット再送による通信遅延時間の増大の影響の方が格段に大きいため、有効領域と有効領域の間の無効領域が存在する状況では、エラーチェック完了前にペイロードデータを書き込む処理を行わなくてもシステムへの影響は小さいと考えられる。
【００６６】
『第３の実施の形態』
【００６７】
本実施の形態にかかるRDMA通信装置９の受信処理部８は、第２の実施の形態にかかるRDMA通信装置９の受信処理部８と同様に図６に示される構成を備えており、第２の実施の形態と比較して、パケットエラーチェック部８３からプロトコル処理部８４に対してエラーチェック結果が通知される点は同じであるが、本実施の形態のプロトコル処理部８４は、ペイロードデータ書込位置を判定する際に、アプリケーションメモリ領域３１への書込予定のデータと既に存在する有効領域との間に重なっている部分があるかどうかをチェックし、重なっている部分が存在しない場合には、パケットエラーチェック部８３でのエラーチェックの結果を待たずに、ペイロードデータ書込要求部８５に対してペイロードデータの書き込みを要求し、重なっている部分が存在する場合には、パケットエラーチェック部８３でのエラーチェック結果を待ち、エラーが発生していないことを確認してから、ペイロードデータ書込要求部８５に対してペイロードデータの書き込みを要求する点で相違する。その他の構成と動作は第２の実施の形態と同じである。
【００６８】
次に本実施の形態の効果を説明する。
【００６９】
本実施の形態によれば、第２の実施の形態と同様に、エラーチェックの完了前にペイロードデータを書き込む際に、既存の有効領域を上書きしないことが保証されるため、後処理部９０において、パケットにエラーが発生した場合の後処理を単純にすることができるという効果が得られる。
【００７０】
また、本実施の形態では、有効領域と有効領域の間に無効領域が存在する場合においても、新たに書き込むペイロードデータと有効領域との間に重なりが生じなければ、エラーチェックの完了を待たずにペイロードの書き込みが開始されるので、第２の実施の形態では通信遅延を削減できない状況でも通信遅延を削減できるという効果が得られる。
【００７１】
なお、プロトコル処理部８４が、ペイロードデータ書込要求部８５に対して要求するペイロードデータは、受信したパケットのペイロード全体とは限らず、利用するレイヤ４プロトコルに依存して異なる。例えば、TCPの場合は、受信したパケット内のペイロードの先頭部分が、既存の有効領域と重なる場合は、既存の有効領域を優先するため受信したパケットの先頭の重なっている部分は除去してペイロードデータの書込要求を行う。逆に、受信したパケットのペイロードの先頭部分よりも後ろ側から開始されるデータ部分が有効データと重なる場合は、受信したパケットを優先して、既存のペイロードデータに上書き処理を行う。具体例を挙げて説明すると、例えば図５の上段の状況において、SEQ番号＝300、レングス＝400がヘッダに設定された再送パケットを受信した場合、SEQ番号300〜400の部分は上書きされず、SEQ番号600〜700の部分は上書きされる。
【００７２】
『第４の実施の形態』
本実施の形態にかかるRDMA通信装置９の受信処理部８は、第１の実施の形態にかかるRDMA通信装置９の受信処理部８と同様に図１に示される構成を備えており、第１の実施の形態と比較して、プロトコル処理部８４が、受信したパケットをペイロードデータ書込要求部８５に書込要求する際に、アプリケーションメモリ領域３１内の有効領域との比較を行い、データに重なりがある場合は、全て、アプリケーションメモリ領域３１内に存在する有効領域を優先するものとして、重なっていないデータ部分だけを、エラーチェックの完了前にペイロードデータ書込要求部８５に対して書き込みを要求する点で相違する。ここで、要求されるデータは、連続している場合もあれば、不連続の場合もありうる。不連続の場合には、ペイロードデータ書込要求部８５は、不連続なデータに対する書込要求を処理する必要がある。その他の構成および動作は第１の実施の形態と同じである。
【００７３】
次に本実施の形態の効果を説明する。
【００７４】
本実施の形態によれば、第２および第３の実施の形態と同様に、既存の有効領域を上書きしないことが保証されるため、後処理部９０において、パケットにエラーが発生した場合の後処理を単純化することができるという効果が得られる。また、有効領域の状態に関係なく、常にエラーチェック前にペイロードデータの書込要求が行われるため、通信時間を削減できるという効果が得られる。
【００７５】
また、受信パケットのペイロードと有効領域との間に重なりがあった際に、重なった部分のペイロードデータを書き込む必要がないため、ペイロード書込時間、及び、ペイロード書込最中のシステムバス５の占有時間を削減できるという効果が得られる。
【００７６】
反面、ペイロードデータに重なりが生じた場合に、既に書き込まれていた有効領域の方をすべて優先するという動作は、TCPの仕様と違反することになる点には注意が必要である。すなわち、TCPの場合は、受信したパケット内のペイロードの先頭部分より後ろ側から開始されるデータ部分が既存の有効領域と重なる場合は、受信したパケットを優先して上書きするが、本実施の形態ではその部分も上書きしない。但し、通常の通信装置では、最初に書き込んだデータと後から書き込まれるデータのペイロードの内容が異なることは無いため、どちらのデータを優先しても、実際の結果に違いないと想定されるため、このような動作を行っても実用上の問題は無いと判断される。
【００７７】
『第５の実施の形態』
【００７８】
本実施の形態にかかるRDMA通信装置９の受信処理部８は、第２および第３の実施の形態にかかるRDMA通信装置９の受信処理部８と同様に図６に示される構成を備えており、プロトコル処理部８４が、受信したパケットをペイロードデータ書込要求部８５に書込要求する際に、アプリケーションメモリ領域３１内の有効領域との比較を行い、データに重なりがある場合は、重なっていないデータ部分だけを、エラーチェックの完了前にペイロードデータ書込要求部８５に対して書き込みを要求する点で第４の実施の形態と同じであるが、さらに、パケットエラーチェックが完了しエラーが存在しない場合には、本来、書き込む必要があったが、データに重なりがあったために書き込めなかったデータ部分の書込処理を行う点で、第４の実施の形態と相違する。
【００７９】
次に本実施の形態の効果を説明する。
【００８０】
本実施の形態では、パケットのペイロードとアプリケーションメモリ領域３１中の有効領域とに重なりがある場合に、重なりの無い部分をエラーチェック前に書き込み、重なっている部分はエラーチェック後に書き込むことで、エラーチェック後には重なっている部分だけの転送で済み、第２および第３の実施の形態よりも通信時間を削減できるという効果がある。
【００８１】
『第６の実施の形態』
【００８２】
本実施の形態にかかるRDMA通信装置９の受信処理部８は、第２、第３および第５の実施の形態にかかるRDMA通信装置９の受信処理部８と同様に図６に示される構成を備えており、プロトコル処理部８４は、受信したパケットをペイロードデータ書込要求部８５に書込要求する際に、アプリケーションメモリ領域３１内の有効領域との比較を行い、データに重なりがある場合は、書込予定データの先頭から最初の重なりがあるところまでを、エラーチェック完了前に書き込みを行い、そして、パケットエラーチェックが完了し、エラーが存在しない場合には、残りの書込予定データの書き込みを行う点で、第４、第５の実施の形態と相違する。その他の構成および動作は第４、第５の実施の形態と同じである。
【００８３】
次に本実施の形態の効果を説明する。
【００８４】
本実施の形態では、第４および第５の実施の形態のように、ペイロードデータ書込要求部８５での一回の書込処理を複数回に分けて処理する必要がないため、第４および第５の実施の形態に比べて処理を単純化でき、また、複数回転送することにより発生する転送毎の処理およびペイロード転送のオーバヘッドを削減できるという効果が得られる。
【００８５】
『第７の実施の形態』
【００８６】
図７を参照すると、本発明の第７の実施の形態にかかるRDMA通信装置９の受信処理部８は、パケットエラーチェック部８３からペイロードデータ書込要求部８５に対してエラーチェック結果が通知されるようになっており、ペイロードデータ書込要求部８５は、パケットエラーチェック部８３から、受信パケットにエラーがあることが通知されると、該当する受信パケットのペイロードデータ書込処理を書込途中であってもキャンセルする機能を有する点で、第１の実施の形態と相違する。その他の構成および動作は第１の実施の形態と同じである。
【００８７】
次に本実施の形態の効果を説明する。
【００８８】
本実施の形態では、受信パケットにエラーが発生した際にペイロードの書込処理をキャンセルすることで、無駄なペイロードデータ転送を削減し、受信処理部８の処理量、及び、システムバス５の占有時間を削減できるという効果がある。なお、受信パケットにエラーが発生した際にペイロードの書込処理をキャンセルする構成は、第２ないし第６の実施の形態に対しても適用可能である。
【００８９】
『第８の実施の形態』
【００９０】
本実施の形態にかかるRDMA通信装置９の受信処理部８は、第１の実施の形態にかかるRDMA通信装置９の受信処理部８と同様に図１に示される構成を備えており、プロトコル処理部８４が、パケットエラーが発生した場合の後処理の算出を行わずに、パケットエラーが発生した場合の後処理に必要な情報を後処理部９０に対して通知し、後処理部９０は、パケットエラーチェック部８３でエラーが発生した場合に、始めて、エラーが発生した際に必要な後処理の算出を行って、後処理を実行する点で、第１の実施の形態と相違する。つまり、受信処理部８は、有効領域との重なり部分が存在する状態でペイロードデータを書き込んだ際に、エラーが発生したときの新しい有効領域を算出する処理が必要であるが、本処理に関して、第１の実施の形態では、プロトコル処理部８４がパケットエラーチェック部８３でのエラーチェックの結果を待たずに実施していたのに対し、本実施の形態では、後処理部９０がパケットエラーチェック部８３でのエラーチェック完了後にパケットにエラーが発生していた場合にのみ実施する。その他の構成および動作は第１の実施の形態と同じである。
【００９１】
次に本実施の形態の効果を説明する。
【００９２】
本実施の形態では、実際にパケットにエラーが発生していた場合のみ、後処理でエラー発生時に必要な処理を実施するため、第１の実施の形態に比べてエラーが発生していない場合の処理負荷を削減できるという効果が得られる。
【００９３】
また本実施の形態では、ネットワークが安定している通常のRDMA通信装置９間のデータ転送においては、パケットにエラーが発生すること自体がまれであると考えられるため、通常状態で上記のプロトコル処理部８４がエラー発生時の処理を算出する必要がないという効果が得られる。
【００９４】
以上、本発明の実施の形態について説明したが、本発明は以上の実施の形態にのみ限定されず、その他各種の付加変更が可能である。また、本発明の通信装置は、その有する機能をハードウェア的に実現することは勿論、コンピュータと通信プログラムとで実現することができる。通信プログラムは、磁気ディスクや半導体メモリ等のコンピュータ可読記録媒体に記録されて提供され、コンピュータの立ち上げ時などにコンピュータに読み取られ、そのコンピュータの動作を制御することにより、そのコンピュータを前述した各実施の形態におけるRDMA通信装置として機能させる。
【図面の簡単な説明】
【００９５】
【図１】本発明の第１、第４および第８の実施の形態にかかるRDMA通信装置内の受信処理部の構成例を示すブロック図である。
【図２】本発明の第１の実施の形態における受信制御のタイミングチャートである。
【図３】本発明のRDMA通信装置におけるパケット受信時のアプリケーションメモリ領域の管理内容の変化例を示す図である。
【図４】本発明のRDMA通信装置におけるパケット受信時のアプリケーションメモリ領域の管理内容の別の変化例を示す図である。
【図５】本発明のRDMA通信装置におけるパケット受信時のアプリケーションメモリ領域の管理内容の更に別の変化例を示す図である。
【図６】本発明の第２、第３、第５、第６の実施の形態にかかるRDMA通信装置内の受信処理部の構成例を示すブロック図である。
【図７】本発明の第７の実施の形態にかかるRDMA通信装置内の受信処理部の構成例を示すブロック図である。
【図８】RDMA通信装置の構成例を示すブロック図である。
【図９】従来のRDMA通信装置内の受信処理部の構成例を示すブロック図である。
【図１０】従来のRDMA通信装置における受信制御のタイミングチャートである。
【符号の説明】
【００９６】
１…ネットワークアダプタ
２…プロセッサ
３…メインメモリ
４…I/O装置
５…システムバス
８…受信処理部
９…RDMA通信装置
１２…コネクション管理メモリ
１３…送信処理部
３１…アプリケーションメモリ領域
３２…制御情報メモリ領域
８１…パケット受信部
８２…コネクション情報読み出し部
８３…パケットエラーチェック部
８４…プロトコル処理部
８５…ペイロードデータ書込要求部
８６…メインメモリ書込処理部
８７…コネクション情報書込要求部
８８…パケット送信要求部
８９…制御情報書込要求部
９０…後処理部
【図１】
0004736859.tif 000002
【図２】
0004736859.tif 000003
【図３】
0004736859.tif 000004
【図４】
0004736859.tif 000005
【図５】
0004736859.tif 000006
【図６】
0004736859.tif 000007
【図７】
0004736859.tif 000008
【図８】
0004736859.tif 000009
【図９】
0004736859.tif 000010
【図１０】
0004736859.tif 000011