(57)【特許請求の範囲】
【請求項１】
第１の情報処理装置から要求されたデータである入出力リクエストを送信する第２の情報処理装置に接続され、ＲＤＭＡ通信を行う通信装置において、
前記要求されたデータを、前記第１の情報処理装置が有する主記憶装置又は前記第２の情報処理装置が有する主記憶装置のどちらに位置合わせするのかを示す位置合わせ指定情報を受信する受信部と、
前記要求されたデータの分割位置が、前記受信した位置合わせ指定情報により指定される情報処理装置が有する主記憶装置上において、キャッシュラインの整数倍である整列境界となるように、前記要求されたデータの分割位置を算出する分割位置計算部と、
前記分割位置計算部が算出した分割位置に基づき、前記第２の情報処理装置が有する主記憶装置が保持する前記要求されたデータを分割して、前記第１の情報処理装置に送信する送信部を有することを特徴とする通信装置。
【請求項２】
前記通信装置において、
前記位置合わせ指定情報は、ＲＤＭＡ通信におけるＰｕｔ通信のディスクリプタ又はＧｅｔ通信のディスクリプタに対応するＧｅｔ通信のリクエストパケットに含まれることを特徴とする請求項１記載の通信装置。
【請求項３】
前記通信装置において、
前記Ｐｕｔ通信のディスクリプタ又は前記Ｇｅｔ通信のリクエストパケットは、前記受信した位置合わせ指定情報により指定される情報処理装置が有する主記憶装置上における整列境界のサイズを示す整列サイズ情報を含み、
前記分割位置計算部は、前記要求されたデータの分割位置が、前記受信した位置合わせ指定情報により指定される情報処理装置が有する主記憶装置上において、前記整列サイズ情報で指定される整列境界となるように、前記要求されたデータの分割位置を算出することを特徴とする請求項２記載の通信装置。
【請求項４】
前記通信装置において、
前記分割位置計算部で算出された分割位置は、前記Ｇｅｔ通信のリクエストパケットで送信されることを特徴とする請求項２又は３記載の通信装置。
【請求項５】
他の情報処理装置から要求されたデータである入出力リクエストを送信すると共にＲＤＭＡ通信を行う情報処理装置において、
前記要求されたデータを保持する主記憶装置と、
前記要求されたデータを、前記他の情報処理装置が有する主記憶装置又は前記情報処理装置が有する主記憶装置のどちらに位置合わせするのかを示す位置合わせ指定情報を受信する受信部と、
前記要求されたデータの分割位置が、前記受信した位置合わせ指定情報により指定される情報処理装置が有する主記憶装置上において、キャッシュラインの整数倍である整列境界となるように、前記要求されたデータの分割位置を算出する分割位置計算部と、
前記分割位置計算部が算出した分割位置に基づき、前記要求されたデータを分割して、前記他の情報処理装置に送信する送信部を有することを特徴とする情報処理装置。
【請求項６】
第１の情報処理装置から要求されたデータである入出力リクエストを送信する第２の情報処理装置に接続されると共にＲＤＭＡ通信を行う通信装置の制御方法において、
前記通信装置が有する受信部が、前記要求されたデータを、前記第１の情報処理装置が有する主記憶装置又は前記第２の情報処理装置が有する主記憶装置のどちらに位置合わせするのかを示す位置合わせ指定情報を受信するステップと、
前記通信装置が有する分割位置計算部が、前記要求されたデータの分割位置が、前記受信した位置合わせ指定情報により指定される情報処理装置が有する主記憶装置上において、キャッシュラインの整数倍である整列境界となるように、前記要求されたデータの分割位置を算出するステップと、
前記通信装置が有する送信部が、前記分割位置計算部が算出した分割位置に基づき、前記第２の情報処理装置が有する主記憶装置が保持する前記要求されたデータを分割して、前記第１の情報処理装置に送信するステップを有することを特徴とする通信装置の制御方法。
【請求項７】
第１の情報処理装置から要求されたデータである入出力リクエストを送信する第２の情報処理装置に接続されると共にＲＤＭＡ通信を行う通信装置の制御プログラムにおいて、
コンピュータに、
前記通信装置が有する受信部が、前記要求されたデータを、前記第１の情報処理装置が有する主記憶装置又は前記第２の情報処理装置が有する主記憶装置のどちらに位置合わせするのかを示す位置合わせ指定情報を受信するステップと、
前記通信装置が有する分割位置計算部が、前記要求されたデータの分割位置が、前記受信した位置合わせ指定情報により指定される情報処理装置が有する主記憶装置上において、キャッシュラインの整数倍である整列境界となるように、前記要求されたデータの分割位置を算出するステップと、
前記通信装置が有する送信部が、前記分割位置計算部が算出した分割位置に基づき、前記第２の情報処理装置が有する主記憶装置が保持する前記要求されたデータを分割して、前記第１の情報処理装置に送信するステップを実行させることを特徴とする通信装置の制御プログラム。
【請求項８】
前記分割位置計算部は、最初のデータ転送で送信されるデータの末尾アドレスを前記キャッシュラインの倍数から１を減じた値に切り下げることを特徴とする請求項１乃至４のいずれか１項に記載の通信装置。
【請求項９】
前記分割位置計算部は、最初のデータ転送で送信されるデータの末尾アドレスを前記キャッシュラインの倍数から１を減じた値に切り下げることを特徴とする請求項５に記載の情報処理装置。
【請求項１０】
前記分割位置の算出において、最初のデータ転送で送信されるデータの末尾アドレスを前記キャッシュラインの倍数から１を減じた値に切り下げることを特徴とする請求項６に記載の通信装置の制御方法。
【請求項１１】
前記分割位置の算出において、最初のデータ転送で送信されるデータの末尾アドレスを前記キャッシュラインの倍数から１を減じた値に切り下げることを特徴とする請求項７に記載の通信装置の制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置、情報処理装置、通信装置の制御方法及び制御プログラムに関する。
【背景技術】
【０００２】
従来より、ローカルノードとリモートノードとの間でRDMA（Remote Direct Memory Access）通信を行う技術が知られている。
【０００３】
図１に、ローカルノードの主記憶装置装置からリモートノードの主記憶装置装置へデータを送信する場合の例（Put通信の例）を示す。図１の例では、DMA(Direct Memory Access)の転送単位は１２８Byteであり、プロセッサによって指定された転送開始アドレスは、ローカルノードが４０であり、リモートノードが８８の例である。また、データ長は１３４８Byteであり、MTU（Maximum Transmission Unit;１パケットあたりの最大転送サイズ）は５１２Byteとする。この例では、データは３つのパケットに分割され、リモートノードの主記憶装置に送信される。しかし、ローカルノード及びリモートノードのいずれの主記憶装置においても、パケット１〜３のデータ領域は、DMA転送単位にアライン（位置合わせ、配列）されない。従って、データを先頭から１２８Byte毎に読み出し（リード）及び書き込み（ライト）をすると、データの読み出し及び書き込みについてデータ転送効率が悪化する。
【０００４】
例えば、パケット１のデータをローカルノードの主記憶装置から読み出す際、ローカルノードのプロセッサはアドレス範囲４０〜１６７のデータを読み出すために、アドレス範囲０〜１２７及びアドレス範囲１２８〜２５５に対し、それぞれ１２８Byteのデータの読み出しが必要となる。さらに、ローカルノードのプロセッサはアドレス範囲１６８〜２９５のデータを読み出すために、アドレス範囲１２８〜２５５及びアドレス範囲２５６〜３８３に対し、それぞれ１２８Byteのデータの読み出しが必要となる。このように、ローカルノードのプロセッサは同じアドレス（アドレス範囲１２８〜２５５）に対し、２回データの読み出しを実行しなければならず、データの読み出しの効率が悪化する。尚、アドレス２５６以降についても、同様に、ローカルノードのプロセッサは同じアドレスに対し２回データの読み出しをしなければならない。
【０００５】
同様に、パケット１のデータをリモートノードの主記憶装置に書き込む際も、データの書き込み効率が悪化する。例えば、パケット１のデータをリモートノードの主記憶装置に書き込む際、リモートノードのプロセッサはアドレス範囲８８〜２１５へデータを書き込むために、アドレス範囲０〜１２７及びアドレス範囲１２８〜２５５に対し、それぞれ１２８Byteのデータの書き込みが必要となる。リモートノードのプロセッサはアドレス範囲２１６〜３４３へデータを書き込むために、アドレス範囲１２８〜２５５及びアドレス範囲２５６〜３８３に対し、それぞれ１２８Byteのデータの書き込みが必要となる。このように、リモートノードのプロセッサは同じアドレス（アドレス範囲１２８〜２５５）に対し、２回データの書き込みを実行しなければならず、データの書き込みの効率が悪化する。尚、アドレス２５６以降についても、リモートノードのプロセッサは同じアドレスに対し２回データの書き込みをしなければならない。さらに、２回目の書き込みの際には、前に書き込んだデータを上書きしないようにする必要がある。
【０００６】
また、従来より、受信したリードライトなどのI/Oリクエスト（Input Output request：入出力リクエスト）の先頭をキャッシュラインの境界で分割し、後続のI/Oリクエストをキャッシュラインに位置合わせする分割方法やシステムが知られている。
【０００７】
図２は、図１のPut通信の例について、上述したI/Oリクエストの先頭をキャッシュラインの境界で分割し、後続のI/Oリクエストをキャッシュラインに位置合わせする分割方法を適用した結果を示す図である。
【０００８】
ローカルノードがパケット１のデータを読み出す場合は、パケット１の先頭部分をアドレス１２７とアドレス１２８との境界で分割し、パケット１の残り部分は、１２８Byte境界に位置合わせ（アライン）するように分割する。これによって、パケット１の先頭と末尾のデータを除けば、パケット１のデータは１２８Byte境界に位置合わせされ、１つのパケットのデータを読み出す際に、同じアドレスに対し２回読み出しを２回実行することはなくなる。
【０００９】
リモートノードがパケット１のデータを書き込む場合も、パケット１の先頭部分をアドレス１２７とアドレス１２８との境界で分割し、パケット１の残り部分は、１２８Byte境界に位置合わせ（アライン）するように分割する。これによって、パケット１の先頭と末尾を除けば、パケット１のデータは１２８Byte境界に位置合わせされ、１つのパケットのデータを書き込む際に、同じアドレスに対し２回書き込みを実行することはなくなる。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００５−１８２４９１号公報
【特許文献２】米国特許出願公開第２００８／０２３５４８４号明細書
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかしながら、上述したI/Oリクエストの先頭をキャッシュラインの境界で分割し、後続のI/Oリクエストをキャッシュラインに位置合わせする分割方法でも、パケットの分割点を含むアドレスのデータの読み出し及び／又は書き込みについてのデータ転送の効率は悪化する。例えば、ローカルノードがパケット１の末尾のデータを読み出す際は、ローカルノードのプロセッサは、アドレス５１２〜６３９に対し、１２８Byteのデータの読み出しを実行する。また、ローカルノードがパケット２の先頭データを読み出す際は、ローカルノードのプロセッサは、アドレス範囲５１２〜６３９に対し、１２８Byteのデータの読み出しを実行する。このように、パケットの分割点を含むアドレス（アドレス５１２〜６３９）では、２回データの読み出しを実行する必要がある。同様に、リモートノードがパケット１の末尾データとパケット２の先頭データとを書き込む際も、リモートノードのプロセッサは、アドレス範囲５１２〜６３９に対し、１２８Byteのデータの書き込みを２回実行する必要がある。
【００１２】
上記課題に鑑み、明細書に開示された通信装置、情報処理装置、通信装置の制御方法及び制御プログラムは、分割点を含むアドレスのデータの読み出し及び／又は書き込みの効率を向上することを目的とする。
【課題を解決するための手段】
【００１３】
上記目的を達成するため、明細書に開示された通信装置は、第１の情報処理装置から要求されたデータである入出力リクエストを送信する第２の情報処理装置に接続され、ＲＤＭＡ通信を行う通信装置において、前記要求されたデータを、前記第１の情報処理装置が有する主記憶装置又は前記第２の情報処理装置が有する主記憶装置のどちらに位置合わせするのかを示す位置合わせ指定情報を受信する受信部と、前記要求されたデータの分割位置が、前記受信した位置合わせ指定情報により指定される情報処理装置が有する主記憶装置上において、キャッシュラインの整数倍である整列境界となるように、前記要求されたデータの分割位置を算出する分割位置計算部と、前記分割位置計算部が算出した分割位置に基づき、前記第２の情報処理装置が有する主記憶装置が保持する前記要求されたデータを分割して、前記第１の情報処理装置に送信する送信部を有することを特徴とする。
【００１４】
明細書に開示された情報処理装置は、他の情報処理装置から要求されたデータである入出力リクエストを送信すると共にＲＤＭＡ通信を行う情報処理装置において、前記要求されたデータを保持する主記憶装置と、前記要求されたデータを、前記他の情報処理装置が有する主記憶装置又は前記情報処理装置が有する主記憶装置のどちらに位置合わせするのかを示す位置合わせ指定情報を受信する受信部と、前記要求されたデータの分割位置が、前記受信した位置合わせ指定情報により指定される情報処理装置が有する主記憶装置上において、キャッシュラインの整数倍である整列境界となるように、前記要求されたデータの分割位置を算出する分割位置計算部と、前記分割位置計算部が算出した分割位置に基づき、前記要求されたデータを分割して、前記他の情報処理装置に送信する送信部を有することを特徴とする。
【００１５】
明細書に開示された通信装置の制御方法は、第１の情報処理装置から要求されたデータである入出力リクエストを送信する第２の情報処理装置に接続されると共にＲＤＭＡ通信を行う通信装置の制御方法において、前記通信装置が有する受信部が、前記要求されたデータを、前記第１の情報処理装置が有する主記憶装置又は前記第２の情報処理装置が有する主記憶装置のどちらに位置合わせするのかを示す位置合わせ指定情報を受信するステップと、前記通信装置が有する分割位置計算部が、前記要求されたデータの分割位置が、前記受信した位置合わせ指定情報により指定される情報処理装置が有する主記憶装置上において、キャッシュラインの整数倍である整列境界となるように、前記要求されたデータの分割位置を算出するステップと、前記通信装置が有する送信部が、前記分割位置計算部が算出した分割位置に基づき、前記第２の情報処理装置が有する主記憶装置が保持する前記要求されたデータを分割して、前記第１の情報処理装置に送信するステップを有することを特徴とする。
【００１６】
明細書に開示された制御プログラムは、第１の情報処理装置から要求されたデータである入出力リクエストを送信する第２の情報処理装置に接続されると共にＲＤＭＡ通信を行う通信装置の制御プログラムにおいて、コンピュータに、前記通信装置が有する受信部が、前記要求されたデータを、前記第１の情報処理装置が有する主記憶装置又は前記第２の情報処理装置が有する主記憶装置のどちらに位置合わせするのかを示す位置合わせ指定情報を受信するステップと、前記通信装置が有する分割位置計算部が、前記要求されたデータの分割位置が、前記受信した位置合わせ指定情報により指定される情報処理装置が有する主記憶装置上において、キャッシュラインの整数倍である整列境界となるように、前記要求されたデータの分割位置を算出するステップと、前記通信装置が有する送信部が、前記分割位置計算部が算出した分割位置に基づき、前記第２の情報処理装置が有する主記憶装置が保持する前記要求されたデータを分割して、前記第１の情報処理装置に送信するステップを実行させることを特徴とする。
【発明の効果】
【００１７】
明細書に開示された通信装置、情報処理装置、通信装置の制御方法及び制御プログラムは、分割点を含むアドレスのデータの読み出し及び／又は書き込みの効率を向上する。
【図面の簡単な説明】
【００１８】
【図１】ローカルノードの主記憶装置からリモートノードの主記憶装置へデータを送信する例（Put通信の例）を示す図である。
【図２】図１の例に特許文献２の分割方法を適用した結果を示す図である
【図３】第１実施例にかかるネットワークインタフェース装置の構成図である。
【図４】ディスクリプタのフォーマットを示す図である。
【図５】Getリクエストパケットのフォーマットを示す図である。
【図６】分割位置計算部で実行される処理を示すフローチャートである。
【図７】Put通信でアライメントタイプがローカルノードである場合のデータの分割方法を示す図である。
【図８】Put通信でアライメントタイプがリモートノードである場合のデータの分割方法を示す図である。
【図９】第２実施例にかかるディスクリプタのフォーマットを示す図である。
【図１０】Getリクエストパケットのフォーマットを示す図である。
【図１１】分割位置計算部で実行される処理を示すフローチャートである。
【図１２】Put通信でアライメントタイプがリモートノードである場合のデータの分割方法を示す図である。
【図１３】第３実施例にかかるGetリクエストパケットのフォーマットを示す図である。
【図１４】ネットワークインタフェース装置２の構成図である。
【図１５】ローカルノード側の分割位置計算部で実行される処理を示すフローチャートである。
【発明を実施するための形態】
【００１９】
以下、図面を参照しながら、開示の通信装置、情報処理装置、通信装置の制御方法及び制御プログラムについて、実施の形態を説明する。
【００２０】
まず、以下の実施例で使用される用語の定義を説明する。ローカルノードとは、ノード間通信において、通信を要求した情報処理装置等のノードである。リモートノードとは、ノード間通信において、ローカルノードからの通信要求を受け付けた情報処理装置等のノードである。RDMA通信とは、ローカルノードがローカルノード自身の主記憶装置とリモートノードの主記憶装置を指定し、指定した主記憶装置間でデータ転送を行う通信方式である。RDMA通信には、ローカルノードのデータをリモートノードへ送信するPut通信と、リモートノードのデータをローカルノードに送信するGet通信とがある。Getリクエストパケットとは、 Get通信において、ローカルノードがリモートノードへ送るパケットである。Getリクエストパケットは、ローカルノード及びリモートノードの転送領域の情報を持つ。Getレスポンスパケットとは、 Get通信において、リモートノードがローカルノードへ送るパケットである。Getレスポンスパケットは、Getリクエストパケットで指定されたデータを持つ。ディスクリプタとは、ＣＰＵ（Central Processing Unit）等の演算処理装置としてのプロセッサが通信装置としてのネットワークインタフェース装置に対して処理の開始を伝えるコマンド、又はネットワークインタフェース装置がプロセッサに対して処理の完了を伝えるコマンドである。ディスクリプタは、処理の種類の情報や、処理がデータ転送の場合は転送領域などの情報を持つ。
【００２１】
（第１実施例）
図３は、第１実施例にかかるネットワークインタフェース装置の構成図である。図４は、ディスクリプタのフォーマットの例を示す図である。図５は、Getリクエストパケットのフォーマットの例を示す図である。
【００２２】
図３において、ノード１は、ネットワークインタフェース装置２を介してネットワーク３に接続されている。ノード１は、ネットワーク３を介して他のノード（不図示）と接続されており、他のノードに対し通信を要求する場合は、ローカルノードとなり、他のノードから通信要求を受け付ける場合は、リモートノードになる。
【００２３】
ノード１は、ノード１全体の動作、主記憶装置１２へのデータの書き込み及び主記憶装置１２からのデータの読み出しを制御するプロセッサ１１と、パケットのデータやディスクリプタを記憶する主記憶装置１２とを備えている。ノード１はバス４を介してネットワークインタフェース装置２に接続されている。
【００２４】
ネットワークインタフェース装置２は、ディスクリプタ受信部２１、分割位置計算部２２、パケット送信部２３、DMAコントローラ２４及びパケット受信部２５を備えている。ディスクリプタ受信部２１、パケット送信部２３及びパケット受信部２５は、不図示の入出力回路で構成されている。分割位置計算部２２及びDMAコントローラ２４は、不図示のマイコン（Micro Computer）等で構成されている。
【００２５】
ディスクリプタ受信部２１は、主記憶装置１２からディスクリプタを受信し、分割位置計算部２２に送信する。パケット受信部２５は、リモートノードからパケットを受信し、そのパケットがGetリクエストパケットであれば、分割位置計算部２２に送る。分割位置計算部２２は、ディスクリプタ又はGetリクエストパケットに基づいてデータの分割位置を算出し、各分割されたデータのDMAアドレス及びデータ長をDMAコントローラ２４に送信する。DMAアドレスは、各分割されたデータの先頭アドレスを示す。また、分割位置計算部２２は、分割されたデータに対応するパケットヘッダを生成しパケット送信部２３に送信する。DMAコントローラ２４は、受信したDMAアドレス及びデータ長に基づいてDMAリクエストをノード１に送信し、各データを主記憶装置１２から読み出し、パケット送信部２３に送信する。つまり、DMAコントローラ２４は、受信したDMAアドレス及びデータ長に基づいてデータの分割を行う。パケット送信部２３は、パケットヘッダ及びDMAコントローラ２４からのデータをパケットにし、リモートノードへ送信する。尚、分割位置計算部２２による、ディスクリプタ又はGetリクエストパケットに基づいたデータの分割位置の詳細な算出方法は、後述の図６において説明する。
【００２６】
図４において、ディスクリプタは、コマンド４１、リモートノードアドレス４２、MTU４３、ローカルノード転送開始アドレス４４、リモートノード転送開始アドレス４５、データ長４６及びアライメントタイプ４７（第１フィールド）のフィールドを有する。コマンド４１は、「Put」や「Get」などの通信の種類を指定する。リモートノードアドレス４２は、リモートノードのネットワーク上のアドレスを指定する。MTU４３は、１パケットあたりの最大転送サイズを指定する。ローカルノード転送開始アドレス４４は、ローカルノードのデータ転送開始アドレスを指定する。リモートノード転送開始アドレス４５は、リモートノードのデータ転送開始アドレスを指定する。データ長４６は、転送されるデータの長さを指定する。アライメントタイプ４７は、データをローカルノード又はリモートノードのいずれの主記憶装置のアドレスに位置合わせ（アライン）するかを指定する。尚、コマンド４１で「Put」通信が指定されている場合は、ディスクリプタは、Putディスクリプタと呼ばれる。また、コマンド４１で「Get」通信が指定されている場合は、ディスクリプタは、Getディスクリプタと呼ばれる。ディスクリプタは、プログラマ等により予め作成され、複数のディスクリプタが主記憶装置１２に格納されている。
【００２７】
図５において、Getリクエストパケットは、パケットタイプ５１、ローカルノードアドレス５２、リモートノードアドレス５３、MTU５４、ローカルノード転送開始アドレス５５、リモートノード転送開始アドレス５６、データ長５７及びアライメントタイプ５８（第１フィールド）のフィールドを有する。パケットタイプ５１は、Getリクエストパケットなどのパケットの種類を指定する。ローカルノードアドレス５２は、ローカルノードのネットワーク上のアドレスを指定する。リモートノードアドレス５２は、リモートノードのネットワーク上のアドレスを指定する。MTU５４は、１パケットあたりの最大転送サイズを指定する。ローカルノード転送開始アドレス５５は、ローカルノードのデータ転送開始アドレスを指定する。リモートノード転送開始アドレス５６は、リモートノードのデータ転送開始アドレスを指定する。データ長５７は、転送されるデータの長さを指定する。アライメントタイプ５８は、データをローカルノード又はリモートノードのいずれの主記憶装置のアドレスに位置合わせ（アライン）するかを指定する。
【００２８】
図４のアライメントタイプ４７及び図５のアライメントタイプ５８は、プロセッサ１１がデータをローカルノード又はリモートノードのいずれの主記憶装置のアドレスに位置合わせ（アライン）するかを選択できるようにするために設けられている。例えば、Get通信において、１つのローカルノードが複数のリモートノードからデータをそれぞれ取得する場合、ローカルノードによるデータの書き込み回数が多い。よって、アライメントタイプとしてローカルノードが指定されていれば、データをローカルノードの主記憶装置のアドレスに位置合わせ（アライン）することができ、データの書き込み効率が向上する。逆に、１つのリモートノードが複数のローカルノードにデータを送る場合、リモートノードによるデータの読み出し回数が多い。よって、アライメントタイプとしてリモートノードが指定されていれば、データをリモートノードの主記憶装置のアドレスに位置合わせ（アライン）することができ、データの読み出し効率が向上する。
【００２９】
ここで、Put通信の場合とGet通信の場合のネットワークインタフェース装置２の動作を説明する。
【００３０】
Put通信の場合は、ディスクリプタ受信部２１がローカルノードの主記憶装置１２からPutディスクリプタを受信する。ディスクリプタ受信部２１は、Putディスクリプタ内のローカルノード転送開始アドレス４４、リモートノード転送開始アドレス４５、データ長４６、及びアライメントタイプ４７を分割位置計算部２２に送信する。分割位置計算部２２は、これらのフィールドの値に基づいてデータの分割位置を算出し、DMAコントローラ２４へ各データのDMAアドレス及びデータ長を送信する。また、分割位置計算部２２は、分割された各データに対応するパケットヘッダを生成しパケット送信部２３に送信する。DMAコントローラ２４は、ローカルノードへDMAリクエストを送信し、各データを主記憶装置１２から読み出し、パケット送信部２３に送信する。パケット送信部２３は、分割位置計算部２２からのパケットヘッダ及びDMAコントローラ２４からのデータからパケットを作成し、リモートノードへ送信する。
【００３１】
Get通信の場合は、ローカルノードのネットワークインタフェース装置は、Getディスクリプタ内のアライメントタイプ４７をGetリクエストパケットでリモートノードに送信する。リモートノード側のネットワークインタフェース装置のパケット受信部２５は、Getリクエストパケットを受信する。パケット受信部２５は、Getリクエストパケットのローカルノード転送開始アドレス５５、リモートノード転送開始アドレス５６、データ長５７及びアライメントタイプ５８を分割位置計算部２２に送信する。その後、Put通信と同様に、分割位置計算部２２がこれらのフィールドの値に基づいてデータの分割位置を算出し、DMAコントローラ２４へ各データのDMAアドレス及びデータ長を送信する。また、分割位置計算部２２は、分割された各データに対応するパケットヘッダを生成しパケット送信部２３に送信する。DMAコントローラ２４は、ローカルノードへDMAリクエストを送信し、各データを主記憶装置１２から読み出し、パケット送信部２３に送信する。パケット送信部２３は、分割位置計算部２２からのパケットヘッダ及びDMAコントローラ２４からのデータからパケットを作成し、ローカルノードへ送信する。尚、分割位置計算部２２による、ディスクリプタ又はGetリクエストパケットに基づいたデータの分割位置の詳細な算出方法は、後述の図６において説明する。
【００３２】
図６は、分割位置計算部２２で実行される処理を示すフローチャートである。
【００３３】
分割位置計算部２２は、受信したディスクリプタのコマンドがGetであるか否かを判別する（ステップＳ１）。受信したディスクリプタのコマンドがGetである場合には（ステップＳ１でＹＥＳ）、ローカルノード側の分割位置計算部２２は、分割位置の計算の処理を行わないので、Getリクエストパケットを生成し、パケット送信部２５へ送信する（ステップＳ２）。その後、本処理を終了する。
【００３４】
受信したディスクリプタのコマンドがGetでない場合には（ステップＳ１でＮＯ）、分割位置計算部２２は、ディスクリプタコマンド又はパケットタイプの種類に応じてDMAアドレス（分割データを主記憶装置からリードする際の先頭アドレス）を設定する。具体的には、分割位置計算部２２は、受信した対象がGetリクエストパケットであるか否かを判別する（ステップＳ３）。受信した対象がGetリクエストパケットである場合には（ステップＳ３でＹＥＳ）、分割位置計算部２２は、DMAアドレスをGetリクエストパケットのリモートノード転送開始アドレスに設定する（ステップＳ４）。受信した対象がPutディスクリプタである場合には（ステップＳ３でＮＯ）、分割位置計算部２２は、DMAアドレスをPutディスクリプタのローカルノード転送開始アドレスに設定する（ステップＳ５）。
【００３５】
次に、分割位置計算部２２は、Putディスクリプタ又はGetリクエストパケットのフィールドの値に基づいてデータ先頭アドレスと終点アドレスを設定する。具体的には、分割位置計算部２２は、Putディスクリプタ又はGetリクエストパケットに基づいてアライメントタイプがローカルノードを指定するか否かを判別する（ステップＳ６）。データ先頭アドレスは、アラインする側（位置合わせする側）のノードの主記憶装置上での分割データの先頭アドレスを示す。初回の分割データ先頭アドレスは、ローカルノード転送開始アドレス又はリモートノード転送開始アドレスのどちらかである。分割位置計算部２２は、アライメントタイプがローカルノードを指定する場合には（ステップＳ６でＹＥＳ）、データ先頭アドレスをローカルノード転送開始アドレスに設定する（ステップＳ７）。また、分割位置計算部２２は、終点アドレスを、ローカルノード転送開始アドレスにデータ長−１を加算した値に設定する（ステップＳ８）。分割位置計算部２２は、アライメントタイプがリモートノードを指定する場合には（ステップＳ６でＮＯ）、データ先頭アドレスをリモートノード転送開始アドレスに設定する（ステップＳ９）。また、分割位置計算部２２は、終点アドレスを、リモートノード転送開始アドレスにデータ長−１を加算した値に設定する（ステップＳ１０）。尚、終点アドレスは、アラインする側（位置合わせする側）のノードの主記憶装置上での転送領域の末尾アドレスを示す。
【００３６】
次に、分割位置計算部２２は、データ末尾アドレスを設定することで、パケットの分割位置を算出する。具体的には、分割位置計算部２２は、データ末尾アドレスが終点アドレスであるか否かを判別する（ステップＳ１１）。データ末尾アドレスは、アラインする側（位置合わせする側）のノードの主記憶装置上での分割データの末尾アドレスを示す。データ末尾アドレスが終点アドレスである場合には（ステップＳ１１でＹＥＳ）、本処理を終了する。データ末尾アドレスが終点アドレスでない場合には（ステップＳ１１でＮＯ）、分割位置計算部２２は、データ末尾アドレスを、ステップＳ５又はステップＳ９で設定したデータ先頭アドレスにMTU−１を加算した値に仮設定する（ステップＳ１２）。次いで、分割位置計算部２２は、仮設定されたデータ末尾アドレスを、(データ末尾アドレス ＆ 〜(DMA転送単位−１)) −1に切り下げる。（ステップＳ１３）。ここで、「&」はビット毎に論理積演算を行う演算子であり、「~」はビット毎に否定演算を行う演算子である。ステップＳ１３により、データ末尾アドレスは、DMA転送単位の倍数−１の値となり、後続の分割データをアライメント境界で（例えば１２８byte単位で）アラインできる。次いで、分割位置計算部２２は、データ末尾アドレスが終点アドレスを超えていればデータ末尾アドレスを終点アドレスに設定する（ステップＳ１４）。
【００３７】
以上のステップにより、分割データの位置が求まるため、分割位置計算部２２は、分割データを主記憶装置１２から読み出すための処理を実行する。具体的には、分割位置計算部２２は、データ長を（データ末尾アドレス−データ先頭アドレス＋１）によって算出し、DMAアドレス及びデータ長をDMAコントローラ２４へ送信する（ステップＳ１５）。分割位置計算部２２は、さらに分割データに対応したPutパケットヘッダ又はGetレスポンスパケットヘッダを生成し、パケット送信部２３へ送信する（ステップＳ１６）。分割位置計算部２２は、次の分割位置を求めるため、データの先頭アドレス及びDMAアドレスに（データ末尾アドレス−データ先頭アドレス＋１（即ち分割データのデータ長））を加算する（ステップＳ１７）。分割位置計算部２２は、データの末尾アドレスが終点アドレスと等しくなるまで、ステップＳ１１〜Ｓ１７のループ処理を続ける。
【００３８】
図７は、Put通信でアライメントタイプがローカルノードである場合のデータの分割方法を示す図である。
【００３９】
図７では、DMA転送単位は１２８Byteとする。先頭のパケット１のデータ領域は、MTUの通りに分割されると、アドレス４０〜５５１となる。分割位置計算部２２は、データ領域の末尾を（DMA転送単位の倍数−１）に切り下げる。ここでは、DMA転送単位が１２８Byteなので、分割位置計算部２２は、データ領域の末尾をアドレス５５１からアドレス５１１に切り下げる。これによって、後続のパケット２のデータ領域がアドレス５１２から始まり、アライメント境界（１２８Byte単位）でアラインされる。以降、分割位置計算部２２は、後続のパケットのデータも、データ領域の末尾がDMA転送単位の倍数−１となるようにデータを分割する。図７の例では、MTUはDMA転送サイズの倍数であるため、データをMTU通りに分割すれば、データ領域の末尾がDMA転送単位の倍数−１となる。パケット２のデータ領域は、アドレス５１２〜１０２３となり、パケット３のデータ領域はアドレス１０２４から転送領域末尾のアドレス１３８７までとなる。この分割方法により、先頭と最後パケット以外のデータはローカルノード上の主記憶装置上でアライメント境界（１２８Byte単位）にアラインされるため、効率よくデータを主記憶装置から読み出すことができる。
【００４０】
図８は、Put通信でアライメントタイプがリモートノードである場合のデータの分割方法を示す図である。
【００４１】
図８では、DMA転送単位は１２８Byteとする。先頭のパケット１のデータ領域は、MTU通りに分割されると、アドレス４０〜５５１となる。リモートノードの転送開始アドレスは８８であるため、データは、アドレス範囲８８〜５９９の領域に書き込まれる。分割位置計算部２２は、このデータ領域の末尾がリモートノードの主記憶装置上でDMA転送単位の倍数−１となるようにデータ領域の末尾を切り下げる。ここでは、DMA転送単位は１２８Byteであるので、リモートノードの主記憶装置上でデータ領域がアドレス範囲８８〜５１１となるように、分割位置計算部２２はローカルノードの主記憶装置上でデータ領域をアドレス範囲４０〜４６３に切り下げる。これによって、後続のパケット２のデータ領域が、リモートノードの主記憶装置上でアドレス５１２から始まり、アライメント境界（１２８Byte単位）でアラインされる。以降、分割位置計算部２２は、データ領域の末尾がリモートノードの主記憶装置上でDMA転送単位の倍数−１になるように、データを分割する。図８の例では、１パケットあたりの最大転送サイズを表すMTUはDMA転送サイズの倍数であるため、データをMTUが表すサイズの通りに分割すれば、データ領域の末尾はDMA転送単位の倍数−１となる。パケット２のデータ領域はMTUの通り、アドレス範囲４６４〜９８３となり、パケット３のデータ領域はアドレス９８４からアドレス１３８７までの範囲の領域となる。この分割方法により、先頭パケットと末尾パケットの以外のデータは、リモートノード上での主記憶装置上でアライメント境界（１２８Byte単位）にアラインされるため、効率よくデータをリモートノードの主記憶装置に書き込むことができる。
【００４２】
尚、図７及び図８のDMA転送単位、MTU及びPutディスクリプタのフィールド値は一例である。DMA転送単位がローカルノードとリモートノードとで等しければ、常に上述した分割方法が適用できる。Get通信でのデータ分割方法は、（１）リモートノード側のネットワークインタフェース装置２がデータの分割位置を算出する点、及び（２）Getリクエストパケット内のフィールド値に基づいてデータの分割位置を算出する点を除けば、Put通信のデータ分割方法と同様である。
【００４３】
以上説明したように、第１実施例によれば、転送対象のデータの分割位置が、指定されたノードの主記憶装置のアドレス上でアライメント境界となるように、転送対象のデータがパケットに分割される。よって、パケットの分割点を含むアドレスのデータの読み出し及び／又は書き込みの効率が向上する。
【００４４】
（第２実施例）
第２実施例は、データの分割位置を切り下げる方法において、第１実施例と異なる。第１実施例では、DMA転送サイズに基づいてデータの分割位置を切り下げていたが、第２実施例では、ディスクリプタで指定されたアライメントサイズに基づいてデータの分割位置を切り下げる。第２実施例は、ノード間通信を行う情報処理装置等のノードに適用される。また、第２実施例は、Put通信又はGet通信で、ローカルノード及びリモートノードのアライメントサイズが互いに異なっている場合でも、適用可能である。尚、第２実施例にかかるネットワークインタフェース装置の構成は、図３のネットワークインタフェース装置の構成と同様である。
【００４５】
以下、第１実施例と異なる部分を説明する。
【００４６】
図９は、第２実施例にかかるディスクリプタのフォーマットを示す図である。図１０は、第２実施例にかかるGetリクエストパケットのフォーマットを示す図である。
【００４７】
図９において、第２実施例にかかるディスクリプタは、図４の第１実施例にかかるディスクリプタにアライメントサイズ４８のフィールド（第２フィールド）が追加されている。アライメントサイズ４８は、データを位置合わせ（アライン）するノードのアライメントサイズを指定する。アライメントサイズ４８以外のフィールドは図４と同一なので、その説明は省略する。図１０において、第２実施例にかかるGetリクエストパケットは、図５の第１実施例にかかるGetリクエストパケットにアライメントサイズ５９のフィールド（第２フィールド）が追加されている。アライメントサイズ５９は、データを位置合わせ（アライン）するノードのアライメントサイズを指定する。アライメントサイズ５９以外のフィールドは図５と同一なので、その説明は省略する。分割位置計算部２２は、Put通信でアライメントタイプがリモートノードのとき、アライメントサイズ４８のフィールドの値を使いデータの分割位置を算出する。また、分割位置計算部２２は、Get通信でアライメントタイプがローカルノードのとき、アライメントサイズ５９のフィールドの値を使いデータの分割位置を算出する。
【００４８】
図１１は、分割位置計算部２２で実行される処理を示すフローチャートである。尚、図６の処理と同一のステップには、同一のステップ番号を付し、その説明は省略する。
【００４９】
分割位置計算部２２は、ステップＳ１２で仮設定されたデータ末尾アドレスを、(データ末尾アドレス ＆ 〜(DMA転送単位−１)) −1に切り下げる。（ステップＳ１３A）。ここで、「&」はビット毎に論理積演算を行う演算子であり、「~」はビット毎に否定演算を行う演算子である。ステップＳ１３Ａにより、データ末尾アドレスは、アライメントサイズの倍数−１の値となり、後続の分割データをアライメント境界で（例えば１２８byte単位で）アラインできる。
【００５０】
図１２は、Put通信でアライメントタイプがリモートノードである場合のデータの分割方法を示す図である。
【００５１】
図１２では、ローカルノードのDMA転送単位は１２８Byteとし、リモートノードのDMA転送単位は２５６Byteとする。先頭のパケット１のデータ領域は、MTU通りに分割されると、アドレス範囲４０〜５５１となる。リモートノードの転送開始アドレスは８８であるため、データは、アドレス範囲８８〜５９９の領域に書き込まれる。分割位置計算部２２は、このデータ領域の末尾がリモートノードの主記憶装置上でアライメントサイズの倍数−１となるようにデータ領域の末尾を切り下げる。ここでは、リモートノードのアライメントサイズは３８４Byteのため、リモートノードの主記憶装置上でデータ領域がアドレス範囲８８〜３８３となるように、分割位置計算部２２はローカルノードの主記憶装置上でデータ領域を範囲アドレス４０〜３３５に切り下げる。これによって、後続のパケット２のデータ領域が、リモートノードの主記憶装置上ではアドレス３８４から始まり、アライメント境界（３８４Byte単位）でアラインされる。以降、分割位置計算部２２は、データ領域の末尾がリモートノードの主記憶装置上でリモートノードのアライメントサイズの倍数−１となるように、データを分割する。ここでは、リモートノードのアライメントサイズは、ローカルノードのDMA転送サイズの倍数であるため、データをリモートノードのアライメントサイズの通りに分割すれば、データ領域の末尾はリモートノードのアライメントサイズの倍数−１となる。分割位置計算部２２は、パケット２及びパケット３のデータ領域を、リモートノードのアライメントサイズの通りに、アドレス範囲３３６〜７１９及びアドレス範囲７２０〜１１０３にそれぞれ分割する。パケット４のデータ領域はアドレス１１０４からアドレス１３８７までの範囲となる。この分割方法により、先頭パケットと末尾パケット以外のデータは、リモートノード上での主記憶装置上でアライメント境界（３８４Byte単位）にアラインされるため、効率良くデータをリモートノードの主記憶装置に書き込むことができる。
【００５２】
尚、Get通信でのデータ分割方法は、（１）リモートノード側のネットワークインタフェース装置２がデータの分割位置を算出する点、及び（２）Getリクエストパケット内のフィールド値に基づいてデータの分割位置を算出する点を除けば、Put通信のデータ分割方法と同一である。
【００５３】
以上説明したように、第２実施例によれば、ローカルノード及びリモートノードの主記憶装置のアライメントサイズが互いに異なる場合でも、転送対象のデータを指定されたサイズのアライメント境界に位置合わせすることができる。
【００５４】
（第３実施例）
第３実施例は、ローカルノード側のネットワークインタフェース装置２がGet通信のデータの分割位置を算出し、リモートノード側のネットワークインタフェース装置２がGet通信のデータの分割位置の算出を省略する点で、第１実施例と異なる。第３実施例は、ノード間通信を行う情報処理装置等の各ノードに適用される。リモートノード側のネットワークインタフェース装置２は、Get通信のデータの分割位置の算出を省略するので、分割位置計算部２２を備えていなくてもよい。また、第３実施例では、ローカルノード側の分割位置計算部２２が、受信したGetディスクリプタに基づいてデータの分割位置を算出する。パケット送信部２３は、Getリクエストパケットでデータの分割位置をリモートノード側のネットワークインタフェース装置２に送る。
【００５５】
図１３は、第３実施例にかかるGetリクエストパケットのフォーマットを示す図である。
【００５６】
図１３のGetリクエストパケットは、パケットタイプ５１、ローカルノードアドレス５２、リモートノードアドレス５３、ローカルノード転送開始アドレス５５、リモートノード転送開始アドレス５６及びデータ長５７のフィールドを有する。各フィールドの説明は図５の説明と同様なので、省略する。
【００５７】
図１４は、第３実施例にかかるネットワークインタフェース装置２の構成図である。
【００５８】
図１４のネットワークインタフェース装置２の構成は、図３のネットワークインタフェース装置２の構成と同様である。しかし、図１４のネットワークインタフェース装置２は、パケット受信部２５がGetリクエストパケットを分割位置計算部２２に送信しない点で、図３のネットワークインタフェース装置２と異なる。
【００５９】
図１４では、パケット受信部２５がGetリクエストパケットのリモートノード開始アドレス及びデータ長に基づいて、Getレスポンスパケットの分割位置を直接指定する。そのため、パケット受信部２５は、Getリクエストパケットを分割位置計算部２２に送信する必要がなく、リモートノード開始アドレス及びデータ長をそのままＤＭＡコントローラ２４に送信し、Getレスポンスパケットのヘッダをパケット送信部２３に送信する。
【００６０】
また、ディスクリプタ受信部２１は、Putディスクリプ又はGetディスクリプ内のローカルノード転送開始アドレス、リモートノード転送開始アドレス、データ長及びアライメントタイプのフィールドの値を受信し、分割位置計算部２２に送信する。
【００６１】
Get通信の場合、ローカルノード側の分割位置計算部２２は、Getディスクリプタの各フィールド値を受信すると、これらのフィールドの値に基づいてデータの分割位置を算出し、パケット送信部２３へ各データのDMAアドレス及びデータ長を送信する。パケット送信部２３は、DMAアドレス及びデータ長からGetリクエストパケットを作成し、リモートノード側のネットワークインタフェース装置２へ送信する。
【００６２】
リモートノード側のネットワークインタフェース装置２内のパケット受信部２５は、Getリクエストパケットを受信し、Getリクエストパケット内のDMAアドレス及びデータ長をDMAコントローラ２４に送信する。また、パケット受信部２５は、Getレスポンスパケットのヘッダをパケット送信部２３に送信する。DMAコントローラ２４は、DMAアドレス及びデータ長に基づいて、各データを主記憶装置１２から読み出し、パケット送信部２３に送信する。パケット送信部２３は、Getレスポンスパケットのヘッダを使って、受信した各データからGetレスポンスパケットを作成し、ローカルノードに送信する。このように、ローカルノード側のネットワークインタフェース装置２がデータの分割位置を求めているので、リモートノード側のネットワークインタフェース装置２でのデータの分割位置の算出を省略できる。
【００６３】
図１５は、ローカルノード側の分割位置計算部２２で実行される処理を示すフローチャートである。図６のステップと同一のステップには、同一のステップ番号を付し、その説明を省略する。
【００６４】
図１５では、分割位置計算部２２は、Get通信のディスクリプタのアライメントタイプのフィールドが指定するノードの主記憶装置上でデータの分割位置がアライメント境界となるように、データの分割位置を算出する（ステップＳ６〜Ｓ１４）。ステップＳ１４の工程が実行された後、分割位置計算部２２は、分割データに対応するDMAアドレス及びデータ長をパケット送信部２３に送信する（ステップＳ１８）。手順はステップＳ１１に戻る。尚、パケット送信部２３は、受信したDMAアドレス及びデータ長からGetリクエストパケットを作成し、リモートノード側のネットワークインタフェース装置２へ送信する。このように、Getリクエストパケットでデータの分割位置がリモートノード側のネットワークインタフェース装置２へ送信されるので、リモートノード側のネットワークインタフェース装置２でのデータの分割位置の算出を省略できる。
【００６５】
ローカルノード側のネットワークインタフェース装置２が実行する分割位置の計算方法は、各フィールドの値をGetディスクリプタから受信することを除いて、実施例１のリモートノード側のネットワークインタフェース装置２が実行する分割位置の計算方法と同様である。また、第３実施例では、Put通信時の分割位置の計算方法は、実施例１のPut通信時の分割位置の計算方法と同様である。
【００６６】
以上説明したように、第３実施例によれば、リモートノード側のネットワークインタフェース装置２でのデータの分割位置の算出を省略できる。
【００６７】
尚、ネットワークインタフェース装置２の機能を実現するためのソフトウェアのプログラムをコンピュータ又はネットワークインタフェース装置が実行することによっても、上記第１〜第３の実施例と同様の効果を奏する。
【００６８】
尚、本発明は、上述した実施の形態に限定されるものではなく、その要旨を逸脱しない範囲内で種々変形して実施することが可能である。
【００６９】
以上の実施の形態に関し、更に以下の付記を開示する。
【００７０】
（付記１）第１の情報処理装置から要求されたデータを送信する第２の情報処理装置に接続される通信装置において、前記要求されたデータを、前記第１の情報処理装置が有する主記憶装置又は前記第２の情報処理装置が有する主記憶装置のどちらに位置合わせするのかを示す位置合わせ指定情報を受信する受信部と、前記要求されたデータの分割位置が、前記受信した位置合わせ指定情報により指定される情報処理装置が有する主記憶装置上において、所定のデータ幅の整数倍である整列境界となるように、前記要求されたデータの分割位置を算出する分割位置計算部と、前記分割位置計算部が算出した分割位置に基づき、前記第２の情報処理装置が有する主記憶装置が保持する前記要求されたデータを分割して、前記第１の情報処理装置に送信する送信部を有することを特徴とする通信装置。かかる構成によれば、第１の情報処理装置から要求されたデータの分割位置が、指定された情報処理装置の主記憶装置のアドレス上で整列境界となるように、第１の情報処理装置から要求されたデータが分割されるので、分割点を含むアドレスのデータの読み出し及び／又は書き込みの効率が向上する。
【００７１】
（付記２）前記通信装置において、前記位置合わせ指定情報は、RDMA通信におけるPut通信のディスクリプタ又はGet通信のディスクリプタに対応するGet通信のリクエストパケットに含まれることを特徴とする付記１記載の通信装置。かかる構成によれば、RDMA通信におけるPut通信又はGet通信においてパケットの分割点を含むアドレスのデータの読み出し及び／又は書き込みの効率が向上する。
【００７２】
（付記３）前記通信装置において、前記Put通信のディスクリプタ又は前記Get通信のリクエストパケットは、前記受信した位置合わせ指定情報により指定される情報処理装置が有する主記憶装置上における整列境界のサイズを示す整列サイズ情報を含み、前記分割位置計算部は、前記要求されたデータの分割位置が、前記受信した位置合わせ指定情報により指定される情報処理装置が有する主記憶装置上において、前記整列サイズ情報で指定される整列境界となるように、前記要求されたデータの分割位置を算出することを特徴とする付記２記載の通信装置。かかる構成によれば、第１の情報処理装置及び第２の情報処理装置の主記憶装置の整列境界のサイズが互いに異なる場合でも、要求されたデータを指定されたサイズの整列境界に位置合わせすることができる。
【００７３】
（付記４）前記通信装置において、前記分割位置計算部は、前記要求されたデータの分割位置が、前記受信した位置合わせ指定情報により指定される情報処理装置が有する主記憶装置上において、アライメント境界となるように、所定のデータ幅の整数倍である整列境界となるように、前記要求されたデータの分割位置を算出し、当該算出された分割位置は、前記Get通信のリクエストパケットで送信されることを特徴とする付記２又は３記載の通信装置。かかる構成によれば、Get通信のリクエストパケットを受信する情報処理装置でデータの分割位置を算出する処理を省略することができる。
【００７４】
（付記５）他の情報処理装置から要求されたデータを送信する情報処理装置において、前記要求されたデータを保持する主記憶装置と、  前記要求されたデータを、前記他の情報処理装置が有する主記憶装置又は前記情報処理装置が有する主記憶装置のどちらに位置合わせするのかを示す位置合わせ指定情報を受信する受信部と、前記要求されたデータの分割位置が、前記受信した位置合わせ指定情報により指定される情報処理装置が有する主記憶装置上において、所定のデータ幅の整数倍である整列境界となるように、前記要求されたデータの分割位置を算出する分割位置計算部と、前記分割位置計算部が算出した分割位置に基づき、前記要求されたデータを分割して、前記他の情報処理装置に送信する送信部を有することを特徴とする情報処理装置。かかる構成によれば、付記１と同様の効果を奏する。
【００７５】
（付記６）第１の情報処理装置から要求されたデータを送信する第２の情報処理装置に接続される通信装置の制御方法において、前記通信装置が有する受信部が、前記要求されたデータを、前記第１の情報処理装置が有する主記憶装置又は前記第２の情報処理装置が有する主記憶装置のどちらに位置合わせするのかを示す位置合わせ指定情報を受信するステップと、前記通信装置が有する分割位置計算部が、前記要求されたデータの分割位置が、前記受信した位置合わせ指定情報により指定される情報処理装置が有する主記憶装置上において、所定のデータ幅の整数倍である整列境界となるように、前記要求されたデータの分割位置を算出するステップと、前記通信装置が有する送信部が、前記分割位置計算部が算出した分割位置に基づき、前記第２の情報処理装置が有する主記憶装置が保持する前記要求されたデータを分割して、前記第１の情報処理装置に送信するステップを有することを特徴とする通信装置の制御方法。かかる構成によれば、付記１と同様の効果を奏する。
【００７６】
（付記７）第１の情報処理装置から要求されたデータを送信する第２の情報処理装置に接続される通信装置の制御プログラムにおいて、  コンピュータに、前記通信装置が有する受信部が、前記要求されたデータを、前記第１の情報処理装置が有する主記憶装置又は前記第２の情報処理装置が有する主記憶装置のどちらに位置合わせするのかを示す位置合わせ指定情報を受信するステップと、前記通信装置が有する分割位置計算部が、前記要求されたデータの分割位置が、前記受信した位置合わせ指定情報により指定される情報処理装置が有する主記憶装置上において、所定のデータ幅の整数倍である整列境界となるように、前記要求されたデータの分割位置を算出するステップと、  前記通信装置が有する送信部が、前記分割位置計算部が算出した分割位置に基づき、前記第２の情報処理装置が有する主記憶装置が保持する前記要求されたデータを分割して、前記第１の情報処理装置に送信するステップを実行させることを特徴とする通信装置の制御プログラム。かかる構成によれば、付記１と同様の効果を奏する。
【符号の説明】
【００７７】
２  ネットワークインタフェース装置
１１  プロセッサ
１２  主記憶装置
２１  ディスクリプタ受信部
２２  分割位置計算部
２３  パケット送信部
２４  DMAコントローラ
２５  パケット受信部
【図１】
0005482230.tif 000002
【図２】
0005482230.tif 000003
【図３】
0005482230.tif 000004
【図４】
0005482230.tif 000005
【図５】
0005482230.tif 000006
【図６】
0005482230.tif 000007
【図７】
0005482230.tif 000008
【図８】
0005482230.tif 000009
【図９】
0005482230.tif 000010
【図１０】
0005482230.tif 000011
【図１１】
0005482230.tif 000012
【図１２】
0005482230.tif 000013
【図１３】
0005482230.tif 000014
【図１４】
0005482230.tif 000015
【図１５】
0005482230.tif 000016