(57)【特許請求の範囲】
【請求項１】
送信側転送開始アドレスと受信側転送開始アドレスとを少なくとも含むデータ転送命令に基づいて、送信側メモリアクセス単位で転送データを読み出すことを送信側メモリに要求する、データ読出要求を出力する転送命令実行部と、
前記送信側転送開始アドレスと前記受信側転送開始アドレスと受信側メモリアクセス単位と前記データを送信側から受信側へ転送する際の転送パケットサイズに基づいて、前記データ読出要求に応答して前記送信側メモリから出力された前記転送データを、前記受信側メモリアクセス単位の境界で分割して、前記転送パケットサイズを超えない範囲で最大限の当該分割した転送データと当該転送データの受信側メモリへの書き込みアドレスとを含むパケット交換網用の転送パケットを生成し、出力する転送パケット生成部と、を含む
【請求項２】
前記転送データに、前記送信側転送開始アドレスとなり得るアドレス境界の単位で区切られるデータを要素データとして、前記送信側メモリアクセス単位内での要素データ順を示す要素番号を各要素データに付与する要素番号付与部と、
前記送信側転送開始アドレスとこれを含む前記送信側メモリアクセス単位の境界アドレスとの差分に含まれる前記要素データの数と、前記受信側転送開始アドレスとこれを含む前記受信側メモリアクセス単位の境界アドレスとの差分に含まれる前記要素データの数との差分の数を補正情報として算出する補正情報生成部と、を更に含み、
前記転送パケット生成部は、前記補正情報に基づいて、前記要素番号を補正して格納要素番号に変換し、
前記格納要素番号に基づいて、前記転送データを前記転送パケットに格納するパケットデータ整列部とを含む
請求項１記載のデータ転送制御装置。
【請求項３】
前記要素番号付与部は、前記転送パケットサイズが前記送信側メモリアクセス単位のｎ（ｎは自然数）倍である場合に、前記送信側メモリから読み出された前記送信側メモリアクセス単位の前記転送データ毎に０からｎ−１のリクエスト番号を周期的に対応させて、各前記要素データに付与し、
前記要素番号補正部は、前記要素番号に前記リクエスト番号と前記送信側メモリアクセス単位に対応する前記要素データの数とを乗算した数を加算し、前記加算された要素番号を前記補正情報に基づいて補正して前記格納要素番号に変換する
請求項２記載のデータ転送制御装置。
【請求項４】
パケット交換網を介してデータ転送を行う装置が、
送信側転送開始アドレスと受信側転送開始アドレスとを少なくとも含むデータ転送命令に基づいて、送信側メモリアクセス単位で転送データを読み出すことを送信側メモリに要求する、データ読出要求を出力し、
前記送信側転送開始アドレスと前記受信側転送開始アドレスと受信側メモリアクセス単位と前記データを送信側から受信側へ転送する際の転送パケットサイズに基づいて、前記データ読出要求に応答して前記送信側メモリから出力された前記転送データを、前記受信側メモリアクセス単位の境界で分割して、前記転送パケットサイズを超えない範囲で最大限の当該分割した転送データと当該転送データの受信側メモリへの書き込みアドレスとを含むパケット交換網用の転送パケットを生成し、出力する
【請求項５】
パケット交換網を介してデータ転送を行う装置が、
前記転送データに、前記送信側転送開始アドレスとなり得るアドレス境界の単位で区切られるデータを要素データとして、前記送信側メモリアクセス単位内での要素データ順を示す要素番号を各要素データに付与し、
前記送信側転送開始アドレスとこれを含む前記送信側メモリアクセス単位の境界アドレスとの差分に含まれる前記要素データの数と、前記受信側転送開始アドレスとこれを含む前記受信側メモリアクセス単位の境界アドレスとの差分に含まれる前記要素データの数との差分の数を補正情報として算出し、
前記補正情報に基づいて、前記要素番号を補正して格納要素番号に変換し、
前記格納要素番号に基づいて、前記転送データを前記転送パケットに格納する
請求項４記載のデータ転送制御方法。
【請求項６】
パケット交換網を介してデータ転送を行う装置が、
前記転送パケットサイズが前記送信側メモリアクセス単位のｎ（ｎは自然数）倍である場合に、前記送信側メモリから読み出された前記送信側メモリアクセス単位の前記転送データ毎に０からｎ−１のリクエスト番号を周期的に対応させて、各前記要素データに付与し、
前記要素番号の補正は、前記要素番号に前記リクエスト番号と前記送信側メモリアクセス単位に対応する前記要素データの数とを乗算した数を加算し、前記加算された要素番号を前記補正情報に基づいて補正して前記格納要素番号に変換する
請求項５記載のデータ転送制御方法。
【請求項７】
送信側転送開始アドレスと受信側転送開始アドレスとを少なくとも含むデータ転送命令に基づいて、送信側メモリアクセス単位で転送データを読み出すことを送信側メモリに要求する、データ読出要求を出力し、
前記送信側転送開始アドレスと前記受信側転送開始アドレスと受信側メモリアクセス単位と前記データを送信側から受信側へ転送する際の転送パケットサイズに基づいて、前記データ読出要求に応答して前記送信側メモリから出力された前記転送データを、前記受信側メモリアクセス単位の境界で分割して、前記転送パケットサイズを超えない範囲で最大限の当該分割した転送データと当該転送データの受信側メモリへの書き込みアドレスとを含むパケット交換網用の転送パケットを生成し、出力する処理
をコンピュータに実行させるプログラム。
【請求項８】
前記転送データに、前記送信側転送開始アドレスとなり得るアドレス境界の単位で区切られるデータを要素データとして、前記送信側メモリアクセス単位内での要素データ順を示す要素番号を各要素データに付与し、
前記送信側転送開始アドレスとこれを含む前記送信側メモリアクセス単位の境界アドレスとの差分に含まれる前記要素データの数と、前記受信側転送開始アドレスとこれを含む前記受信側メモリアクセス単位の境界アドレスとの差分に含まれる前記要素データの数との差分の数を補正情報として算出し、
前記補正情報に基づいて、前記要素番号を補正して格納要素番号に変換し、
前記格納要素番号に基づいて、前記転送データを前記転送パケットに格納する処理
をコンピュータに実行させる請求項７記載のプログラム。
【請求項９】
前記転送パケットサイズが前記送信側メモリアクセス単位のｎ（ｎは自然数）倍である場合に、前記送信側メモリから読み出された前記送信側メモリアクセス単位の前記転送データ毎に０からｎ−１のリクエスト番号を周期的に対応させて、各前記要素データに付与し、
前記要素番号の補正は、前記要素番号に前記リクエスト番号と前記送信側メモリアクセス単位に対応する前記要素データの数とを乗算した数を加算し、前記加算された要素番号を前記補正情報に基づいて補正して前記格納要素番号に変換する処理
をコンピュータに実行させる請求項８記載のプログラム。
【請求項１０】
請求項１乃至３のいずれかに記載のデータ転送制御装置を搭載した通信ノードを含む
データ転送システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、装置間のデータ転送に係る、データ転送制御装置、データ転送制御方法、及びそのためのプログラムに関する。
【背景技術】
【０００２】
記憶装置間のデータ転送に係るさまざまな関連技術が知られている。
【０００３】
例えば、２つの記憶装置間においてデータの転送を行う場合、転送するデータがアドレス境界条件を満たす場合のほうが、満たさない場合に比べて、制御方法が簡単であり、かつ高速な転送が行えることは、周知である。ここで、転送するデータがアドレス境界条件を満たすとは、各記憶装置間における転送開始アドレスが、それぞれの記憶装置における転送データの読み出し書き込みのアドレス境界に一致するということである。
【０００４】
しかし、記憶装置のハードウェアの制限（例えば、使用するメモリ素子の構成による制限）や、ソフトウェアのメモリ使用方法（例えば、転送データの格納場所の決定方法）によっては、必ずしもアドレス境界条件が満たされるとは限らない。そのような場合、必要なメモリアクセス性能を得られない場合があった。
【０００５】
このような問題点を解決する技術が特許文献１に記載されている。特許文献１に記載のデータ転送装置は、転送データを一時的に蓄えるための、バッファを３つ以上備えている。このバッファは、任意のサイズのデータを、送信側と受信側で競合しない限り任意のタイミングで、アクセス可能なバッファである。更に、このデータ転送装置は、それらバッファを転送元記憶装置と転送先記憶装置との間で順次切り替えてデータ転送を行う、転送元側制御手段と転送先側制御手段とを有している。このような構成を有するこのデータ転送装置は、転送元及び転送先の、いずれか一方または両方の、記憶装置の転送開始アドレスがアドレス境界条件を満たしていない場合であっても、転送元記憶装置からデータ転送装置へのデータ転送と、データ転送装置から転送先記憶装置へのデータ転送を並列に実行する。こうして、このデータ転送装置は、高速なデータ転送を実現する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平７−１０５１２８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、特許文献１に記載の技術は、パケット交換網を介してデータ転送を行う装置において、転送するデータがアドレス境界条件を満たしていない場合に、転送するデータのメモリアクセス性能を低下させないようにするという課題を解決していない。その理由は、特許文献１のデータ転送装置は、転送元と転送先とがバッファを直接介してデータ転送を行うものであって、所定のサイズの転送データをパケットに格納して順次転送するパケット交換方式には対応していないためである。
【０００８】
本発明の目的は、上述した課題を解決するデータ転送制御装置、データ転送制御方法、及びそのためのプログラムを提供することにある。
【課題を解決するための手段】
【０００９】
本発明のデータ転送制御装置は、送信側転送開始アドレスと受信側転送開始アドレスとを少なくとも含むデータ転送命令に基づいて、送信側メモリアクセス単位で転送データを読み出すことを送信側メモリに要求する、データ読出要求を出力する転送命令実行部と、
前記送信側転送開始アドレスと前記受信側転送開始アドレスと受信側メモリアクセス単位と前記データを送信側から受信側へ転送する際の転送パケットサイズに基づいて、前記データ読出要求に応答して前記送信側メモリから出力された前記転送データを、前記受信側メモリアクセス単位の境界で分割して転送パケットを生成し、出力する転送パケット生成部と、を含む。
【００１０】
本発明のデータ転送制御方法は、パケット交換網を介してデータ転送を行う装置が、
送信側転送開始アドレスと受信側転送開始アドレスとを少なくとも含むデータ転送命令に基づいて、送信側メモリアクセス単位で転送データを読み出すことを送信側メモリに要求する、データ読出要求を出力し、
前記送信側転送開始アドレスと前記受信側転送開始アドレスと受信側メモリアクセス単位と前記データを送信側から受信側へ転送する際の転送パケットサイズに基づいて、前記データ読出要求に応答して前記送信側メモリから出力された前記転送データを、前記受信側メモリアクセス単位の境界で分割して転送パケットを生成し、出力する。
【００１１】
本発明のプログラムは、送信側転送開始アドレスと受信側転送開始アドレスとを少なくとも含むデータ転送命令に基づいて、送信側メモリアクセス単位で転送データを読み出すことを送信側メモリに要求する、データ読出要求を出力し、
前記送信側転送開始アドレスと前記受信側転送開始アドレスと受信側メモリアクセス単位と前記データを送信側から受信側へ転送する際の転送パケットサイズに基づいて、前記データ読出要求に応答して前記送信側メモリから出力された前記転送データを、前記受信側メモリアクセス単位の境界で分割して転送パケットを生成し、出力する処理
をコンピュータに実行させる。
【発明の効果】
【００１２】
本発明は、パケット交換網を介してデータ転送を行う装置において、転送するデータがアドレス境界条件を満たしていない場合に、転送するデータのメモリアクセス性能を低下させないようにするという課題を解決することが可能になるという効果がある。
【図面の簡単な説明】
【００１３】
【図１】本発明の第１の実施形態の構成を示すブロック図である。
【図２】本発明の第１の実施形態における、データ転送命令の例を示す図である。
【図３】本発明の第１の実施形態における、データ読出要求の例を示す図である。
【図４】本発明の第１の実施形態の送信側メモリの一部の例を示す図である。
【図５】本発明の第１の実施形態の受信側メモリの一部の例を示す図である。
【図６】本発明の第１の実施形態の動作を示すフローチャートである。
【図７】本発明の第１の実施形態の動作を示すフローチャートである。
【図８】本発明の第１の実施形態における、カレントアドレスとリミットアドレスとの具体的な例を示す図である。
【図９】本発明の第１の実施形態における、１つ目の転送パケット６３１の例を示す図である。
【図１０】本発明の第１の実施形態における、２つ目の転送パケット６３２の例を示す図である。
【図１１】本発明の第１の実施形態における、３つ目の転送パケット６３３の例を示す図である。
【図１２】本発明の第１の実施形態における、４つ目の転送パケット６３４の例を示す図である。
【図１３】本発明の第１の実施形態のプログラムにより所定の処理をコンピュータに実行させるデータ転送制御装置の構成を示すブロック図である。
【図１４】本発明の第２の実施形態のデータ転送システムの構成を示すブロック図である。
【図１５】本発明の第２の実施形態における、データ転送命令６５０の例を示す図である。
【図１６】本発明の第２の実施形態のデータ転送制御装置の構成を示すブロック図である。
【図１７】本発明の第２の実施形態における、データバッファ番号の例を示す図である。
【図１８】本発明の第２の実施形態における、１パケット情報の例を示す図である。
【図１９】本発明の第２の実施形態における、受信側パケットアドレスの例を示す図である。
【図２０】本発明の第２の実施形態における、補正情報の例を示す図である。
【図２１】本発明の第２の実施形態における、メモリリクエスト情報の例を示す図である。
【図２２】本発明の第２の実施形態における、送信側メモリアクセス単位データの例を示す図である。
【図２３】本発明の第２の実施形態における、データバッファ格納データの例を示す図である。
【図２４】本発明の第２の実施形態の動作を示すフローチャートである。
【図２５】本発明の第２の実施形態における、転送データをデータバッファに格納する動作を示す図である。
【図２６】本発明の第２の実施形態の送信側メモリの一部の例を示す図である。
【図２７】本発明の第２の実施形態の受信側メモリの一部の例を示す図である。
【図２８】本発明の第２の実施形態における、格納要素番号の算出と格納バッファ番号の決定との手順を示す図である。
【図２９】本発明の第２の実施形態における、格納要素番号の算出と格納バッファ番号の決定との手順を示す図である。
【図３０】関連技術の、課題が解決されていない場合の記憶装置間のデータ転送において、生成される転送パケットを示す図である。
【図３１】関連技術の、課題が解決されていない場合の記憶装置間のデータ転送において、転送パケットデータの受信側メモリへの書き込みの動作を示す図である。
【発明を実施するための形態】
【００１４】
次に、本発明の実施形態について図面を参照して詳細に説明する。
【００１５】
［第１の実施形態］
図１は、本発明の第１の実施形態の構成を示すブロック図である。図１に示すように本実施形態に係るデータ転送制御装置３００は、転送命令実行部３３０と転送パケット生成部３５０とを含む。
【００１６】
転送命令実行部３３０は、送信側転送開始アドレスと受信側転送開始アドレスとを少なくとも含むデータ転送命令に基づいて、送信側メモリアクセス単位で転送データを読み出すことを送信側メモリ（図示しない）に要求する、データ読出要求を出力する。また、転送命令実行部３３０は、データ転送命令に含まれる送信側転送開始アドレスと受信側転送開始アドレスとを転送パケット生成部３５０に出力する。図２は、データ転送命令の例を示す図である。図２に示すように、データ転送命令６１０は、送信側転送開始アドレス６１１と受信側転送開始アドレス６１２とを少なくとも含む。図３は、データ読出要求の例を示す図である。図３に示すように、データ読出要求６２０は、少なくとも読出アドレス６２１を含む。
【００１７】
転送パケット生成部３５０は、送信側転送開始アドレス６１１と受信側転送開始アドレス６１２と受信側メモリアクセス単位（例えば、６４バイト）と転送データを送信側から受信側へ転送する際の転送パケットサイズ（例えば、１２８バイト）に基づいて、データ読出要求６２０に応答して送信側メモリから出力された転送データを、受信側メモリアクセス単位の境界で分割して転送パケットを生成し、出力する。
【００１８】
次に、本実施形態の動作について、以下の前提に基づいて、図１〜５を参照して詳細に説明する。
【００１９】
送信側転送開始アドレス６１１及び受信側転送開始アドレス６１２のアドレス境界は、８バイト境界である。
【００２０】
送信側メモリアクセス単位及び受信側メモリアクセス単位は、６４バイトである。従って、送信側メモリアクセス境界アドレス及び受信側メモリアクセス境界アドレスのアドレス境界は、６４バイト境界である。
【００２１】
送信側転送開始アドレス６１１は、ある送信側メモリアクセス境界アドレス［Ａ］に、「８（８バイト分のアドレス増分値）」を加えた「Ａ＋８」である。尚、“［Ａ］”は、“Ａ”がある送信側メモリアクセス境界アドレスの値であることを表している（以下、他の要素についても同様のことを意味する）。
【００２２】
受信側転送開始アドレス６１２は、ある受信側メモリアクセス境界アドレス［Ｂ］に、「４０（４０バイト分のアドレス増分値）」を加えた「Ｂ＋４０」である。
【００２３】
転送パケットサイズは、１２８バイトである。即ち、転送パケット生成用のデータバッファ（図示しない）のサイズは、１２８バイトである。尚、転送パケット生成部３５０は、複数のデータバッファを含んでいる。
【００２４】
以下の説明において、データ転送命令６１０に基づいて転送するデータの量を示す総転送サイズは、６４×５８＝３７１２バイトである。尚、転送サイズは、データ転送命令に含まれていても良いし、データ転送制御装置３００の図示しない記憶部に予め保持されていてもよい。
【００２５】
図４は、転送データが格納されている、送信側メモリの一部の例を示す図である。
【００２６】
図４において、転送データを、送信側転送開始アドレス６１１のアドレス境界である８バイト境界のデータ単位（以後、このデータ単位を要素データと呼ぶ）毎に、Ｄ０〜Ｄ５７の識別子を付して示す。図４を参照すると、要素データＤ０（Ｄ０の識別子が付された要素データ、以下同様）〜要素データＤ５７は、送信側メモリ３７０の送信側メモリアクセス境界アドレス３７１［Ａ］から送信側メモリアクセス境界アドレス３７１［Ａ＋６４＊７］それぞれで始まる８つの送信側メモリアクセス単位に含まれている。
【００２７】
図５は、転送データが格納された、受信側メモリの一部の例を示す図である。図５を参照すると、要素データＤ０〜要素データＤ５７は、受信側メモリ３８０の送信側メモリアクセス境界アドレス３８１［Ｂ］から送信側メモリアクセス境界アドレス３８１［Ｂ＋６４＊７］それぞれで始まる８つの受信側メモリアクセス単位に含まれている。
【００２８】
本動作の説明において、先に送信する転送パケットの転送データを格納するデータバッファをカレントデータバッファと、その次に送信する転送パケットの転送データを格納するデータバッファをネクストデータバッファと呼ぶ。
【００２９】
以上を前提として、以下に動作を説明する。
【００３０】
図６及び図７は、本実施形態の動作を示すフローチャートである。
【００３１】
最初に、転送命令実行部３３０は、送信側転送開始アドレス６１１［Ａ＋８］を含む送信側メモリアクセス境界アドレス３７１［Ａ］を、読出アドレス６２１として取得する（Ｓ４０２）。
【００３２】
次に、転送命令実行部３３０は、読出アドレス６２１を含むデータ読出要求６２０を出力する（Ｓ４０４）。
【００３３】
次に、転送パケット生成部３５０は、Ｓ４０４で出力されたデータ読出要求６２０に応答して送信側メモリ３７０から出力された、転送データを受け取る（Ｓ４０６）。前述の前提に基づいて例を示すと、例えば１回目にこのステップを実施する場合、受け取る転送データは、要素データＤ０〜Ｄ６である。また例えば２回目にこのステップを実施する場合、受け取る転送データは、要素データＤ７〜Ｄ１４である。また例えば３回目にこのステップを実施する場合、受け取る転送データは、要素データＤ１５〜Ｄ２２である。
【００３４】
次に、転送パケット生成部３５０は、受信側転送開始アドレス６１２［Ｂ＋４０］と既にカレントデータバッファに書き込んだ転送データのサイズに対応するアドレス増分値とを加算し、カレントアドレスを算出する（Ｓ４０８）。前述の前提に基づいて例を示すと、例えば１回目にこのステップを実施する場合、カレントアドレスは、Ｂ＋４０である。また例えば２回目にこのステップを実施する場合、カレントアドレスは、Ｂ＋４０＋５６である。また例えば３回目にこのステップを実施する場合、カレントアドレスは、Ｂ＋４０＋５６＋６４である。
【００３５】
次に、転送パケット生成部３５０は、次の転送データを書き込むカレントデータバッファ内のアドレスをカレントアドレスに対応させた場合に、カレントデータバッファの「カレントアドレスに対応するアドレス」から「最大のアドレス＋１」までの内で、最も大きな「受信側メモリアクセス境界アドレスに対応するアドレス」に対応するカレントデータバッファアドレスを、リミットアドレスとして算出する（Ｓ４１０）。図８は、カレントアドレスとリミットアドレスとの具体的な例を示す図である。
【００３６】
図８を参照して、前述の前提に基づいて例を示すと、例えば１回目にこのステップを実施する場合、次の転送データは要素データＤ０である。この転送データを書き込むカレントデータバッファアドレス３５２は、「０」である。このカレントデータバッファアドレス３５２をカレントアドレス３５３［Ｂ＋４０］に対応させた場合に、カレントデータバッファアドレス３５２「０」からカレントデータバッファ最大＋１アドレス３５４［８＊１６］までの内で対応する受信側メモリアクセス境界アドレスの内の、最も大きな受信側メモリアクセス境界アドレスである最大対応受信側メモリアクセス境界アドレス３５５は、「Ｂ＋６４＊２」である。この最大対応受信側メモリアクセス境界アドレス３５５に対応するカレントデータバッファアドレス３５６、即ちリミットアドレス３５７は「８＊１１」である。
【００３７】
また例えば２回目にこのステップを実施する場合、次の転送データは要素データＤ７である。そして、リミットアドレスは、受信側メモリアクセス境界アドレス［Ｂ＋６４＊２］に対応するカレントデータバッファアドレスである、「８＊１１」である。また例えば３回目にこのステップを実施する場合、次の転送データは要素データＤ１５であり、リミットアドレスは受信側メモリアクセス境界アドレス［Ｂ＋６４＊４］に対応するカレントデータバッファ最大＋１アドレス３５４である、「８＊１６」である。
【００３８】
次に、転送パケット生成部３５０は、Ｓ４０６で受け取った転送データが、リミットアドレス未満に収まるか否かを確認する（Ｓ４１２）。リミットアドレス未満に収まる場合（Ｓ４１２でＹＥＳ）、処理はＳ４１４へ進む。リミットアドレス未満に収まらない場合（Ｓ４１２でＮＯ）、処理はＳ４２０へ進む。前述の前提に基づいて例を示すと、例えば１回目、２回目及び３回目にこのステップを実施する場合、それぞれ、Ｓ４１２でＹＥＳ、Ｓ４１２でＮＯ及びＳ４１２でＹＥＳである。
【００３９】
Ｓ４１４において、転送パケット生成部３５０は、Ｓ４０４で出力されたデータ読出要求６２０に応答して送信側メモリ３７０から出力された転送データを、パケット生成用のカレントデータバッファに書き込む（Ｓ４１４）。前述の前提に基づいて例を示すと、例えば１回目にこのステップを実施する場合、カレントデータバッファに書き込む転送データは要素データＤ０〜Ｄ６である。また例えば２回目にこのステップを実施する場合、カレントデータバッファは次のデータバッファであり、カレントデータバッファに書き込む転送データは要素データＤ１５〜Ｄ１８である。
【００４０】
次に、転送パケット生成部３５０は、カレントデータバッファのリミットアドレスの直前のアドレスまで転送データを書き込んだ（転送データ書き込み完了）か否かを確認する（Ｓ４１６）。書き込んだ場合（Ｓ４１６でＹＥＳ）、処理はＳ４３０へ進む。書き込んでない場合（Ｓ４１６でＮＯ）、処理はＳ４１８へ進む。前述の前提に基づいて例を示すと、例えば１回目、２回目及び３回目にこのステップを実施する場合、それぞれ、Ｓ４１６でＮＯ、Ｓ４１６でＹＥＳ及びＳ４１６でＮＯである。
【００４１】
次に、転送パケット生成部３５０は、最後の転送データ（即ち、要素データＤ５７）を書き込んだ（最後の書き込み完了）か否かを確認する（Ｓ４１８）。書き込んだ場合（Ｓ４１８でＹＥＳ）、処理はＳ４３０へ進む。書き込んでない場合（Ｓ４１８でＮＯ）、処理はＳ４３２へ進む。
【００４２】
Ｓ４２０において、転送パケット生成部３５０は、Ｓ４０４で出力されたデータ読出要求６２０に応答して送信側メモリ３７０から出力された転送データを、リミットアドレス未満に収まる分の転送データと、収まらない分の転送データとに分割する（Ｓ４２０）。続けて転送パケット生成部３５０は、リミットアドレス未満に収まる分の転送データをカレントデータバッファに書き込む（Ｓ４２１）。更に続けて、転送パケット生成部３５０は、カレントデータバッファに書き込まなかった分の転送データ、即ちリミットアドレス未満に収まらない分の転送データをネクストデータバッファに書き込む（Ｓ４２２）。前述の前提に基づいて例を示すと、例えば１回目にこのステップを実施する場合、カレントデータバッファに書き込む転送データは要素データＤ０〜Ｄ６である。また例えば２回目にこのステップを実施する場合、カレントデータバッファに書き込む転送データは要素データＤ７〜Ｄ１０であり、ネクストデータバッファに書き込む転送データは要素データＤ１１〜Ｄ１４である。
【００４３】
次に、転送パケット生成部３５０は、カレントデータバッファの転送データ（例えば、要素データＤ０〜Ｄ１０）に、先頭データ（例えば、要素データＤ０）の受信側メモリ書込アドレスを付加した転送パケットを生成し、出力する（Ｓ４２３）。図９は、１つ目の転送パケット６３１の例を示す図である。図９に示すように、転送パケット６３１は、受信側メモリ書込アドレスとして、受信側転送開始アドレス６１２である「Ｂ＋４０」が付加され、要素データＤ０からＤ１０が格納されている。図１０は、２つ目の転送パケット６３２の例を示す図である。図１０に示すように、転送パケット６３２は、受信側メモリ書込アドレスとして、受信側転送開始アドレス６１２［Ｂ＋４０］に１つ目の転送パケット６３１で転送した転送データ長（例えば、８８）を加算した値（即ち、受信側メモリアクセス境界アドレスである「Ｂ＋６４＊２」が付加され、要素データＤ１１からＤ２６が格納されている。
図１１は、３つ目の転送パケット６３３の例を示す図である。転送パケット６３３の詳細は、転送パケット６３２と同様に考えればよいため説明を省略する。
【００４４】
次に、転送パケット生成部３５０は、ネクストデータバッファに最後の転送データ（即ち、要素データＤ５７）を書き込んだか否かを確認する（Ｓ４２４）。書き込んだ場合（Ｓ４２４でＹＥＳ）、処理はＳ４３０へ進む。書き込んでない場合（Ｓ４２４でＮＯ）、処理はＳ４２６へ進む。
【００４５】
Ｓ４２６において、転送パケット生成部３５０は、ネクストデータバッファをカレントデータバッファとし、更に次のデータバッファをネクストデータバッファとする（Ｓ４２６）。そして、処理は、Ｓ４３４へ進む。
【００４６】
Ｓ４３０において、転送パケット生成部３５０は、カレントデータバッファの転送データ（例えば、要素データＤ０〜Ｄ１０）に、先頭データ（即ち、要素データＤ０）の受信側メモリへの書き込みアドレスとして受信側転送開始アドレス６１２を付加した転送パケットを生成し出力する（Ｓ４３０）。図１２は、４つ目の転送パケット６３４の例を示す図である。転送パケット６３３の詳細は、転送パケット６３２と同様に考えればよいため説明を省略する。
【００４７】
次に、転送命令実行部３３０は、このデータ転送命令６１０の処理で転送する総転送サイズ分の転送データの読み出しを完了したか否かを確認する（Ｓ４３２）。完了した場合（Ｓ４３２でＹＥＳ）、処理は終了する。完了していない場合（Ｓ４３２でＮＯ）、処理はＳ４３４へ進む。
【００４８】
Ｓ４３４において、転送命令実行部３３０は、読出アドレス６２１を更新し、データ読出要求６２０を出力する（Ｓ４３４）。そして、処理は、Ｓ４０４に進む。尚、転送命令実行部３３０は、先に出力したデータ読出要求６２０の読出アドレス６２１に送信側メモリアクセス単位（６４バイト）分のアドレス増分値（例えば、６４）を加算することで、読出アドレス６２１を更新する。
【００４９】
本実施形態に係るデータ転送制御装置３００は、以上説明したように動作する。
【００５０】
尚、上述のデータ転送制御装置３００が送信する転送パケットを受信した場合、受信側の記憶装置は、以下のように動作する。
【００５１】
最初に、受信側の記憶装置は、例えばノード間ネットワーク網を介して、データ転送制御装置３００が送信する転送パケット６３１を受信する。
【００５２】
次に、受信側の記憶装置は、転送パケット６３１に基づいて、受信側メモリ３８０の受信側メモリ書込アドレスとして示される「Ｂ＋４０」に基づいて、要素データＤ０〜Ｄ１０を書き込む。要素データＤ０〜Ｄ２及び要素データＤ３〜Ｄ１０それぞれを書き込む領域は、受信側メモリアクセス境界アドレスをまたいでいない、即ち１つの受信側メモリアクセス単位に含まれる。従って、受信側の記憶装置は、転送パケット６３１で受け取った転送データを、最少の２回の書き込み動作で書き込む。
【００５３】
以後、受信側の記憶装置は、転送パケット６３２〜６３４についても同様に処理する。
【００５４】
次に、データ転送制御装置３００を、プログラムにより所定の処理をコンピュータに実行させるように構成する場合を説明する。
【００５５】
図１３は、プログラムにより所定の処理をコンピュータに実行させるデータ転送制御装置３００（コンピュータとも呼ばれる）の構成を示すブロック図である。
【００５６】
図１３を参照すると、データ転送制御装置３００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３０２、ディスク装置３０３、記憶部３０４、上位インタフェース部３０５及びノード間ネットワークインタフェース部３０６を含む。
【００５７】
ＣＰＵ３０２は、ディスク装置３０３に格納されたプログラムを、例えば記憶部３０４に展開し、展開したプログラムに基づいて図６、図７に示すフローチャートに基づく処理を実行する。
【００５８】
ディスク装置３０３は、上述したデータ転送制御装置３００の処理をコンピュータに実行させるプログラムを記憶する。
【００５９】
記憶部３０４は、そのプログラム及びプログラムが動作するための制御情報を記憶し、また上述の送信側メモリとして転送データを、及びデータバッファとして転送パケットを記憶する。
【００６０】
上位インタフェース部３０５は、ＣＰＵ３０２の指示に基づいて、データ転送命令を発行する回路デバイスまたは装置と送受信する。
【００６１】
ノード間ネットワークインタフェース部３０６は、ＣＰＵ３０２の指示に基づいて、ノード間ネットワークと送受信する。ここで、ノードとは、図１に示すデータ転送装置３００を収納する送信側ノードまたは受信側ノードに対応し、ノード間ネットワークは、送信側ノードまたは受信側ノードが接続されるネットワークである。
【００６２】
上述した本実施形態における効果は、パケット交換網を介してデータ転送を行う装置において、転送するデータがアドレス境界条件を満たしていない場合に、転送するデータのメモリアクセス性能を低下させないようにすることが可能になる点である。
【００６３】
その理由は、転送命令実行部３３０が、送信側転送開始アドレス６１１と受信側転送開始アドレス６１２とに基づいて、送信側メモリアクセス単位で転送データを読み出し、転送パケット生成部３５０が、送信側転送開始アドレス６１１と受信側転送開始アドレス６１２と受信側メモリアクセス単位と転送パケットサイズに基づいて、転送データを、受信側メモリアクセス単位の境界で分割して転送パケットを生成するようにしたからである。
［第２の実施形態］
次に、本発明の第２の実施形態について図面を参照して詳細に説明する。以下、本実施形態の説明が不明確にならない範囲で、前述の説明と重複する内容については説明を省略する。
【００６４】
まず、本実施形態に係るデータ転送制御装置を適用したデータ転送システムの動作の概要を説明する。
【００６５】
図１４は、本実施形態に係るデータ転送制御装置を適用したデータ転送システム１０の構成を示すブロック図である。図１４を参照すると、データ転送システム１０は、通信ノード１００と通信ノード１１０とがノード間ネットワーク網１２０で接続されている。
【００６６】
通信ノード１００は、リクエスタ１０１とメモリ１０３とデータ転送制御装置２００とを含む。
【００６７】
リクエスタ１０１は、データ転送制御装置２００にデータ転送命令を発行して、転送指示を行う。
【００６８】
メモリ１０３は、転送データ１０４を記憶する。
【００６９】
通信ノード１１０は、メモリ１１３と受信側パケット転送制御部１１２とを含む。
【００７０】
メモリ１１３は、転送データ１１４を記憶する。
【００７１】
ノード間ネットワーク網１２０は、少なくともパケット交換による通信を行う。
【００７２】
尚、通信ノード１００は、通信ノード１１０が含む要素と同様の要素を更に含んでもよい。また、通信ノード１１０は、通信ノード１００が含む要素と同様の要素を更に含んでもよい。
【００７３】
通信ノード１００及び通信ノード１１０それぞれは、１以上の任意の台数であってよい。
【００７４】
以下の説明では、通信ノード１００を送信側ノードとして、通信ノード１１０を受信側ノードとして説明する。従って、以下の説明において、メモリ１０３は図４に示すような送信側メモリ３７０であり、メモリ１１３は図５に示すような受信側メモリ３８０である。
【００７５】
まず、リクエスタ１０１は、データ転送命令をデータ転送制御装置２００に出力する。図１５は、データ転送命令６５０の例を示す図である。図１５に示すように、データ転送命令６５０は、送信側転送開始アドレス６１１と、受信側転送開始アドレス６１２と、総転送サイズ６１３とを含む。
【００７６】
次に、データ転送命令６５０を受け取ったデータ転送制御装置２００は、総転送サイズ６１３を、ノード間転送の転送パケットのサイズに分解して、メモリ１０３から転送データ１０４を読み出す。
【００７７】
続けて、データ転送制御装置２００は、例えば転送パケット１０５〜１０８（図９から図１２に示す転送パケット６３１〜６３４に対応、但し要素データの格納位置は必ずしも同一ではない）を生成しノード間ネットワーク網１２０に送信する。
【００７８】
次に、通信ノード１１０の受信側パケット転送制御部１１２は、送信側ノードが送信した転送パケット１０５〜１０８を、ノード間ネットワーク網１２０から転送パケット１１５〜１１８として受け取る。
【００７９】
次に、受信側パケット転送制御部１１２は、受け取った転送データ１０４を、転送パケット単位に、転送データ１１４としてメモリ１１３へ書き込む。
【００８０】
上述の転送パケット１０５〜１０８の生成において、まず、データ転送制御装置２００は、メモリ１０３から読み出した転送データ１０４について、８バイトを１単位とする要素データ毎に、転送パケットへの相対的な格納位置を示す番号（以下、要素番号と呼ぶ）を付加する。尚、この要素番号は、メモリ１０３が読出データに付加してデータ転送制御装置２００に対して出力するようにしてもよい。
【００８１】
続けて、データ転送制御装置２００は、転送パケット１０５〜１０８の境界がメモリ１１３のメモリアクセス境界に一致するように要素番号を補正する。
【００８２】
続けて、データ転送制御装置２００は、この補正した要素番号に基づいて、転送データ１０４を分割し、転送パケットに格納する。
【００８３】
以上が、本実施形態に係るデータ転送制御装置２００を適用したデータ転送システムの動作の概要の説明である。
【００８４】
次に、本実施形態に係るデータ転送制御装置２００の詳細について説明する。
【００８５】
図１６は、本実施形態に係るデータ転送制御装置２００の構成を示すブロック図である。
【００８６】
図１６を参照すると、本実施形態に係るデータ転送制御装置２００は、命令受信発行部２１０、パケット分割部２２０、メモリリクエスト発行部２３０、要素番号補正部２４０、パケットデータ整列部２５０、転送パケット発行部２６０、補正情報生成部２８０及び要素番号付与部２９０を含む。第１の実施形態と比較すると、本実施形態に係るデータ転送制御装置２００は、命令受信発行部２１０、パケット分割部２２０及びメモリリクエスト発行部２３０が第１の実施形態の転送命令実行部３３０に対応し、パケットデータ整列部２５０及び転送パケット発行部２６０が第１の実施形態の転送パケット生成部３５０に対応している。更に、本実施形態に係るデータ転送制御装置２００は、第１の実施形態と比べて、要素番号補正部２４０、補正情報生成部２８０及び要素番号付与部２９０が追加されている
命令受信発行部２１０は、図１４に示すリクエスタ１０１から、データ転送命令６５０を受け取る。そして、命令受信発行部２１０は、受け取ったデータ転送命令６１０に基づいて、パケット分割部２２０に送信側転送開始アドレス６１１と受信側転送開始アドレス６１２と総転送サイズ６１３とを出力する。また、命令受信発行部２１０は、補正情報生成部２８０に送信側転送開始アドレス６１１と受信側転送開始アドレス６１２とを出力する。
【００８７】
パケット分割部２２０は、受け取った送信側転送開始アドレス６１１と受信側転送開始アドレス６１２と総転送サイズ６１３とに基づいて、ノード間転送の転送パケットサイズ単位に、図１４に示すメモリ１０３の読出アドレス（以後、送信側パケットアドレスと呼ぶ）と受信側メモリの書込アドレス（以後、受信側パケットアドレスと呼ぶ）とを生成する。
【００８８】
また、パケット分割部２２０は、パケットデータ整列部２５０に対し、１パケット分の転送データを整列させるデータバッファ要求を出力する。次に、パケット分割部２２０は、パケットデータ整列部２５０がデータバッファ要求への応答として出力したデータバッファ番号を受け取る。図１７は、パケットデータ整列部２５０が出力するデータバッファ番号６４１の例を示す図である。
【００８９】
尚、送信側メモリアクセス単位で読み出された転送データは、２つのパケットに分割されて格納される場合がある。このため、パケット分割部２２０は、カレントデータバッファ番号用とネクストデータバッファ番号用の２つのデータバッファ番号６４１を要求し、取得する。そして、以後、パケット分割部２２０は、現ネクストデータバッファ番号を次の転送パケットのカレントデータバッファ番号とし、新たにデータバッファ番号６４１を取得してネクストデータバッファ番号とし、使用する。
【００９０】
次に、パケット分割部２２０は、パケット単位のメモリアクセス情報である、１パケット情報６４３をメモリリクエスト発行部２３０に出力する。図１８は、１パケット情報６４３の例を示す図である。図１８に示すように、１パケット情報６４３は、送信側パケットアドレス６７１とカレントデータバッファ番号６７２とネクストデータバッファ番号６７３とから成る、
同時に、パケット分割部２２０は、転送パケットのヘッダ情報となるパケット単位の受信側パケットアドレスをパケットデータ整列部２５０に出力する。図１９は、パケット分割部２２０が出力する受信側パケットアドレス６４２の例を示す図である。
【００９１】
補正情報生成部２８０は、送信側転送開始アドレス６１１と受信側転送開始アドレス６１２とに基づいて、補正情報（ｍとも呼ぶ）を算出する。図２０は、補正情報生成部２８０が算出する補正情報６７５の例を示す図である。補正情報６７５は、送信側転送開始アドレス６１１とこれを含む送信側メモリアクセス単位のメモリアクセス境界アドレスとの差分を要素数で示す値と、受信側転送開始アドレス６１２とこれを含む受信側メモリアクセス単位のメモリアクセス境界アドレスとの差分を要素数で示す値、との差分である。そして、補正情報生成部２８０は、算出した補正情報６７５を要素番号補正部２４０に出力する。
【００９２】
メモリリクエスト発行部２３０は、受け取った１パケット情報６４３に基づいて、送信側メモリアクセス単位にメモリリクエスト情報を生成する。図２１は、メモリリクエスト情報６４４の例を示す図である。図２１に示すように、メモリリクエスト情報６４４は、カレントデータバッファ番号６７２とネクストデータバッファ番号６７３とパケット内リクエスト番号６７４とを含む。パケット内リクエスト番号６７４は、１パケットの転送サイズが送信側メモリアクセス単位よりも大きい場合にメモリリクエスト発行部２３０が複数回発行する、１パケット内のメモリ読出リクエストの順番を０オリジンで示す番号である。
【００９３】
続けて、メモリリクエスト発行部２３０は、送信側パケットアドレス６７１に基づいて、メモリ１０３に送信側メモリアクセス境界アドレス３７１を含むメモリ読出リクエストを出力する。同時に、メモリリクエスト発行部２３０は、メモリリクエスト情報６４４を、要素番号付与部２９０に出力する。
【００９４】
メモリ１０３は、受け取ったメモリ読み出しリクエストに応答して、メモリ読出リクエストで指定されたアドレスに基づいて読み出した、送信側メモリアクセス単位の転送データをデータ転送制御装置２００の要素番号付与部２９０に出力する。
【００９５】
要素番号付与部２９０は、メモリ１０３から受け取った転送データから送信側メモリアクセス単位データを生成し、要素番号補正部２４０に出力する。図２２は、送信側メモリアクセス単位データ６４５の例を示す図である。図２２に示すように、送信側メモリアクセス単位データ６４５は、要素番号６８６及び対応する要素データ６４０の複数の組とカレントデータバッファ番号６７２とネクストデータバッファ番号６７３とパケット内リクエスト番号６７４とを含む。
【００９６】
要素番号付与部２９０は、メモリ１０３から送信された送信側メモリアクセス単位の転送データを受信し、例えば以下のように、送信側メモリアクセス単位データ６４５を生成する。最初に、要素番号付与部２９０は、受け取った転送データに含まれる要素データ６４０に、メモリ１０３に格納されていた際のアドレスの若い順に、０オリジンで要素番号６８６を付与する。次に、要素番号付与部２９０は、付与した要素番号６８６と対応する要素データ６４０とを組にして並べ、更に、カレントデータバッファ番号６７２とネクストデータバッファ番号６７３とパケット内リクエスト番号６７４とを付加する。
【００９７】
尚、要素番号付与部２９０は、メモリ１０３に含まれてもよい。
【００９８】
要素番号補正部２４０は、データバッファ格納データを生成し、パケットデータ整列部２５０に出力する。
【００９９】
図２３は、データバッファ格納データ６４７の例を示す図である。図２３を参照すると、データバッファ格納データ６４７は、格納バッファ番号６４９と格納要素番号６８８と要素データ６４０との組を複数含む。
【０１００】
要素番号補正部２４０は、要素番号付与部２９０から受け取った送信側メモリアクセス単位データ６４５と、補正情報生成部２８０から受け取った補正情報６７５とに基づいて、以下のように、データバッファ格納データ６４７を生成する。最初にデータバッファ格納データ６４７は、パケット内リクエスト番号６７４と補正情報６７５とに基づいて、要素番号６８６を補正して格納要素番号６８８を算出する。続けて、要素番号補正部２４０は、カレントデータバッファ番号６７２とネクストデータバッファ番号６７３と格納要素番号６８８とに基づいて、要素データ６４０それぞれを格納するデータバッファの格納バッファ番号６４９を決定する。続けて、要素番号補正部２４０は、各要素データ６４０に格納要素番号６８８及び格納バッファ番号６４９を付加する。
【０１０１】
要素番号補正部２４０は、例えば、送信側メモリアクセス単位に含まれる要素データそれぞれに対応するデータバッファ格納要素番号演算回路を含み、各要素データに対応する格納要素番号６８８を並列に算出するようにしてもよい。
【０１０２】
パケットデータ整列部２５０は、データバッファ２５１〜２５４を含む。データバッファ２５１〜２５４それぞれは、「０」〜「４」のデータバッファ番号６４１を有する。
【０１０３】
パケットデータ整列部２５０は、受け取ったデータバッファ要求に応答して、未使用状態のデータバッファ２５１〜２５４の内のいずれかのデータバッファ番号６４１を出力する。また、パケットデータ整列部２５０は、データバッファ格納データ６４７を受信し、要素データ６４０毎に付加されている格納バッファ番号６４９と格納要素番号６８８とに基づいて、対応するデータバッファの対応する位置に要素データ６４０を格納する。
【０１０４】
転送パケット発行部２６０は、要素データの格納が完了したデータバッファのデータに、ヘッダ情報として受信側パケットアドレス６４２を付加し、転送パケットとして図１２に示すノード間ネットワーク網１２０に送信する。そして、転送パケット発行部２６０は、送信処理を完了すると、データバッファを解放する。
【０１０５】
次に、本実施形態の動作について、図を参照して詳細に説明する。尚、本実施形態の動作の説明における前提は、第１の実施形態の動作の説明における前提と比べて、データバッファ２５１〜２５４がパケットデータ整列部２５０に含まれていることと、送信側メモリ３７０及び受信側メモリ３８０がメモリ１０３及びメモリ１１３にそれぞれ対応していることとである。
【０１０６】
図２４は、本実施形態の動作を示すフローチャートである。
【０１０７】
まず、命令受信発行部２１０は、受け取ったデータ転送命令６５０に基づいて、パケット分割部２２０に送信側転送開始アドレス６１１と受信側転送開始アドレス６１２と総転送サイズ６１３とを、補正情報生成部２８０に送信側転送開始アドレス６１１と受信側転送開始アドレス６１２とを出力する（Ｓ５０２）。
【０１０８】
次に、パケット分割部２２０は、受け取った送信側転送開始アドレス６１１と受信側転送開始アドレス６１２と総転送サイズ６１３とに基づいて、送信側パケットアドレス６７１と受信側パケットアドレス６４２とを生成する（Ｓ５０４）。具体的には、パケット分割部２２０は、転送データが含まれる６４バイト境界アドレスから、１２８バイト単位の送信側パケットアドレス６７１及び受信側パケットアドレス６４２を総転送サイズ分生成する。
【０１０９】
前述の前提に基づいて例を示すと、パケット分割部２２０は、送信側パケットアドレス６７１［Ａ＋６４＊ｎ（ｎ＝０、２、４、６）］を生成し、受信側パケットアドレス６４２［Ｂ＋６４＊ｎ（ｎ＝０、２、４、６）］を生成する。
【０１１０】
次に、パケット分割部２２０は、パケットデータ整列部２５０からデータバッファ番号を取得する（Ｓ５０６）。尚、パケット分割部２２０は、Ｓ５０６を１回目に実行する場合は、カレントデータバッファ番号６７２用とネクストデータバッファ番号６７３用の２つのデータバッファ番号６４１を取得する。そして、パケット分割部２２０は、Ｓ５０６を２回目以降に実行する場合は、現在のネクストデータバッファ番号６７３を次のカレントデータバッファ番号６７２とし、次のネクストデータバッファ番号６７３用の１つのデータバッファ番号６４１を新たに取得する。
【０１１１】
ここで、カレントデータバッファとネクストデータバッファの２つのデータバッファ２５１〜２５４が必要な場合を具体的に説明する。
【０１１２】
図２５は、メモリ１０３から読み出された転送データをデータバッファに格納する動作を示す図である。
【０１１３】
メモリ読出データ６５１〜６５４それぞれは、メモリ１０３（即ち、図４に示す送信側メモリ３７０）から、送信側パケットアドレス６７１に基づいて読み出された転送データである。
【０１１４】
転送パケットデータ６６１〜６６３は、メモリ１１３（即ち、図５に示す受信側メモリ３８０）へ書き込む単位で、データバッファ２５１〜２５４に格納された転送データである。
【０１１５】
図４と図５に示すように、送信側転送開始アドレス６１１［Ａ＋８］と受信側転送開始アドレス６１２［Ｂ＋４０］とは、メモリアクセス境界内の８バイト境界位置にずれがある。
【０１１６】
このような場合、パケットデータ整列部２５０は、例えば、メモリ読出データ６５２を転送パケットデータ６６１と転送パケットデータ６６２とに分割し、データバッファ２５１〜２５４に格納する。
【０１１７】
このため、パケット分割部２２０は、１パケット情報６４３にカレントデータバッファ番号６７２及びネクストデータバッファ番号６７３を含めて出力する。
【０１１８】
次に、パケット分割部２２０は、パケット単位のメモリアクセス情報である、１パケット情報６４３を生成し、メモリリクエスト発行部２３０に出力する（Ｓ５０８）。
【０１１９】
続けて、パケット分割部２２０は、受信側パケットアドレス６４２をパケットデータ整列部２５０に出力する（Ｓ５１０）。
【０１２０】
次に、補正情報生成部２８０は、送信側転送開始アドレス６１１と受信側転送開始アドレス６１２とに基づいて、補正情報６７５を算出し、要素番号補正部２４０に算出した補正情報６７５を出力する。（Ｓ５１２）。以下に、前述の前提に基づいて例を示す。
【０１２１】
図４に示すように送信側転送開始アドレス６１１は「Ａ＋８」であり、これを含む送信側メモリアクセス単位のメモリアクセス境界アドレス［Ａ］との差分「８」の要素数は、「１」である。
【０１２２】
図５に示すように受信側転送開始アドレス６１２は「Ｂ＋４０」であり、これを含む受信側メモリアクセス単位のメモリアクセス境界アドレス［Ｂ］との差分「４０」の要素数は、「５」である。従って、補正情報生成部２８０は、補正情報６７５［４（５−１＝４）］を算出する。
【０１２３】
また、例えば、図２６に示すように転送データが送信側メモリ３７０に格納され、図２７に示すように転送データが受信側メモリ３８０に格納される場合、補正情報生成部２８０は、補正情報６７５を以下のよう算出する。但し、図２６は、送信側メモリ３７０の一部の例を示す図である。また、図２７は、受信側メモリ３８０の一部の例を示す図である。図２６に示すように送信側転送開始アドレス６１１が「Ａ＋４０」、図２７に示すように受信側転送開始アドレス６１２が「Ｂ＋８」の場合、補正情報生成部２８０は、補正情報６７５［−４（１−５＝−４）］を算出する。
【０１２４】
次に、メモリリクエスト発行部２３０は、送信側メモリアクセス単位にメモリリクエスト情報６４４を生成して要素番号付与部２９０に出力し、メモリ１０３にメモリ読出リクエストを出力する（Ｓ５１４）。尚、前述の前提の場合、メモリリクエスト発行部２３０は、受け取った１パケット情報６４３に基づいて、メモリアクセス単位のメモリリクエスト情報６４４と対応するメモリ読出リクエストとの送信を、２回実行する。
【０１２５】
メモリ１０３は、受け取ったメモリ読出リクエストに応答して、メモリ読出リクエストで指定されたアドレスに基づいて読み出した、送信側メモリアクセス単位の転送データをデータ転送制御装置２００に出力する（Ｓ５１６）。
【０１２６】
次に、要素番号付与部２９０は、送信側メモリアクセス単位データ６４５を生成し、要素番号補正部２４０に出力する（Ｓ５１８）。
【０１２７】
次に、要素番号補正部２４０は、データバッファ格納データ６４７を生成し、パケットデータ整列部２５０に出力する（Ｓ５２０）。
【０１２８】
以下に、前述の前提に基づいて、データバッファ格納データ６４７に含まれる、格納要素番号６８８の算出と格納バッファ番号６４９の決定とについて、以下に具体的な例を説明する。図２８及び図２９は、格納要素番号６８８の算出と格納バッファ番号６４９の決定との手順を示す図である。
【０１２９】
まず、要素番号補正部２４０は、受け取った送信側メモリアクセス単位データ６４５に含まれる要素番号６８６（ｊ）とパケット内リクエスト番号６７４（ｈ）とから、送信側パケットアドレス６７１で読み出された１パケット分要素番号６８７（ｋ）を算出（ｋ＝ｊ＋ｈ＊８）する。具体的には、要素番号補正部２４０は、メモリ読出データ６５１の要素データそれぞれの１パケット分要素番号６８７として「０」〜「７」を算出し、メモリ読出データ６５２の要素データそれぞれの１パケット分要素番号６８７として「８」〜「１５」を算出する。
【０１３０】
次に、要素番号補正部２４０は、１パケット分要素番号６８７を補正情報６７５で補正（ｋ＋ｍ）し、格納要素番号６８８を算出する。具体的には、要素番号補正部２４０は、メモリ読出データ６５１の要素データそれぞれの格納要素番号６８８として「４」〜「１１」を算出し、メモリ読出データ６５２の要素データそれぞれの格納要素番号６８８として「１２」〜「１９」を算出する。
【０１３１】
ここで、パケットサイズの最大は１２８バイトであるため、格納要素番号６８８の最大値は、「１５」である。そこで、要素番号補正部２４０は、「１６」〜「１９」と算出した格納要素番号６８８を「０」〜「３」に変換する。
【０１３２】
こうして、要素番号補正部２４０は、格納要素番号６８８を算出する。
【０１３３】
次に、要素番号補正部２４０は、先頭の要素データ６４０から格納要素番号６８８が「１５」の要素データ６４０までの格納バッファ番号６４９として、カレントデータバッファ番号６７２である「０」を決定する。同時に、要素番号補正部２４０は、格納要素番号６８８が「０」の要素データ６４０から最後の要素データ６４０までの格納バッファ番号６４９として、ネクストデータバッファ番号６７３である「１」を決定する。
【０１３４】
以下、要素番号補正部２４０は、次の１パケット情報６４３に対応するメモリ読出データ６５３以後についても同様に処理する。メモリ読出データ６５３に対応するカレントデータバッファ番号６７２は、メモリ読出データ６５１とメモリ読出データ６５２とに対応するネクストデータバッファ番号６７３と同一である。従って、メモリ読出データ６５３の格納要素番号６８８が「４」〜「１１」の要素データ６４０は、メモリ読出データ６５２の格納要素番号６８８が「０」〜「３」の要素データ６４０に続けて、データバッファ番号６４１が「１」のデータバッファ２５２に格納される。
【０１３５】
パケットデータ整列部２５０は、データバッファ格納データ６４７を受け取り、要素データ６４０毎に付加されている格納バッファ番号６４９と格納要素番号６８８とに基づいて、対応するデータバッファに要素データ６４０を格納する。
【０１３６】
次に、転送パケット発行部２６０は、要素データの格納が完了したデータバッファのデータに、ヘッダ情報として受信側パケットアドレス６４２を付加し、転送パケットとしてノード間ネットワーク網１２０に送信する（Ｓ５２２）。尚、転送パケット発行部２６０は、送信処理を完了すると、データバッファを解放する。
【０１３７】
次に、パケット分割部２２０は、Ｓ５０４で生成した全ての送信側パケットアドレス６７１について、１パケット情報６４３を出力した（転送データ送信完了）か否かを確認する（Ｓ５２４）。送信を完了した場合（Ｓ５２４でＹＥＳ）、処理は終了する。送信を完了していない場合（Ｓ５２４でＮＯ）、処理は、Ｓ５０６へ進む。
【０１３８】
上述した本実施形態における効果は、第１の実施形態の効果に加えて、転送パケットを生成する時間を短縮することが可能になる点である。
【０１３９】
その理由は、要素番号付与部２９０が各要素データ６４０に要素番号６８６を付与し、要素番号補正部２４０が各要素番号６８６を並列に補正して格納要素番号６８８を算出し、パケットデータ整列部２５０が格納要素番号６８８に基づいて転送パケットを生成するようにしたからである。
【０１４０】
以下に、パケット交換網を介してデータ転送を行う装置において、例えば前述の実施形態１或いは実施形態２のように構成されていないために、転送するデータのメモリアクセス性能を低下させないようにするという課題が解決されていない場合について、具体的に説明する。前提条件は、前述の前提条件と同様である。
【０１４１】
図３０は、課題が解決されていない記憶装置間のデータ転送において、生成される転送パケットを示す図である。
【０１４２】
図３０に示すように、まず、送信側記憶装置（図示しない）は、送信側転送開始アドレス６１１に基づいて、送信側メモリ３７０からデータを読み出す。次に、送信側記憶装置は、第１転送パケットデータ〜第４転送パケットデータのように、その読み出したデータ単位で区切った転送パケットデータを生成する。
【０１４３】
次に、送信側記憶装置は、第１転送パケットデータ〜第４転送パケットデータそれぞれを含む第１転送パケット〜第４転送パケット（図示しない）を、パケット交換網（図示しない）を介して、受信側記憶装置（図示しない）へ転送する。
【０１４４】
図３１は、受信側記憶装置における、転送パケットデータの受信側メモリ３８０への書き込みの動作を示す図である。
【０１４５】
受信側記憶装置は、受信側転送開始アドレス６１２に基づいて、例えば第１転送パケットのメモリ書き込みを３回（第１転送パケットのメモリ書き込み１〜３）実行し、例えば第２パケットのメモリ書き込みを３回（第２転送パケットのメモリ書き込み１〜３）実行する。また、例えば、第１転送パケットのメモリ書き込み３と第２転送パケットのメモリ書き込み１とは、同一メモリアクセス単位への書き込みを行うことになり、一方のメモリ書き込み中は他方のメモリ書き込みが待たされる。
【０１４６】
尚、例えば、受信側転送開始アドレスに基づいて、受信側記憶装置での書き込み回数を少なくなるような転送パケットを生成する場合、送信側記憶装置は同一アドレスに対して２回のメモリ読み出しを行う必要がある。その結果、送信側記憶装置側におけるメモリアクセス性能が低下する。
【０１４７】
上述のように、パケット交換網を介して記憶装置間のデータ転送を行う記憶装置において、例えば前述の実施形態１或いは実施形態２のように構成されていない場合、転送するデータのメモリアクセス性能を低下させないようにするという課題が解決されない。
【０１４８】
以上の各実施形態で説明した各構成要素は、必ずしも個々に独立した存在である必要はない。例えば、各構成要素は、複数の構成要素が１個のモジュールとして実現されたり、一つの構成要素が複数のモジュールで実現されたりしてもよい。また、各構成要素は、ある構成要素が他の構成要素の一部であったり、ある構成要素の一部と他の構成要素の一部とが重複していたり、といったような構成であってもよい。
【０１４９】
また、以上説明した各実施形態では、複数の動作をフローチャートの形式で順番に記載してあるが、その記載の順番は複数の動作を実行する順番を限定するものではない。このため、各実施形態を実施するときには、その複数の動作の順番は内容的に支障しない範囲で変更することができる。
【０１５０】
更に、以上説明した各実施形態では、複数の動作は個々に相違するタイミングで実行されることに限定されない。例えば、ある動作の実行中に他の動作が発生したり、ある動作と他の動作との実行タイミングが部分的に乃至全部において重複していたりしていてもよい。
【０１５１】
更に、以上説明した各実施形態では、ある動作が他の動作の契機になるように記載しているが、その記載はある動作と他の動作の全ての関係を限定するものではない。このため、各実施形態を実施するときには、その複数の動作の関係は内容的に支障のない範囲で変更することができる。また各構成要素の各動作の具体的な記載は、各構成要素の各動作を限定するものではない。このため、各構成要素の具体的な各動作は、各実施形態を実施する上で機能的、性能的、その他の特性に対して支障をきたさない範囲内で変更されて良い。
【０１５２】
尚、以上説明した各実施形態における各構成要素は、必要に応じ可能であれば、ハードウェアで実現されても良いし、ソフトウェアで実現されても良いし、ハードウェアとソフトウェアの混在により実現されても良い。
【０１５３】
また、各構成要素の物理的な構成は、以上の実施形態の記載に限定されることはなく、独立して存在しても良いし、組み合わされて存在しても良いしまたは分離して構成されても良い。
【符号の説明】
【０１５４】
１００    通信ノード
１０１    リクエスタ
１０３    メモリ
１０４    転送データ
１０５〜１０８    転送パケット
１１０    通信ノード
１１２    受信側パケット転送制御部
１１３    メモリ
１１４    転送データ
１１５    転送パケット
１２０    ノード間ネットワーク網
２００    データ転送制御装置
２１０    命令受信発行部
２２０    パケット分割部
２３０    メモリリクエスト発行部
２４０    要素番号補正部
２５０    パケットデータ整列部
２５１〜２５４    データバッファ
２６０    転送パケット発行部
２８０    補正情報生成部
２９０    要素番号付与部
３００    データ転送制御装置
３０２    ＣＰＵ
３０３    ディスク装置
３０４    記憶部
３０５    上位インタフェース部
３０６    ノード間ネットワークインタフェース部
３３０    転送命令実行部
３５０    転送パケット生成部
３５２    カレントデータバッファアドレス
３５３    カレントアドレス
３５４    カレントデータバッファ最大＋１アドレス
３５５    最大対応受信側メモリアクセス境界アドレス
３５６    カレントデータバッファアドレス
３５７    リミットアドレス
３７０    送信側メモリ
３７１    送信側メモリアクセス境界アドレス
３８０    受信側メモリ
３８１    送信側メモリアクセス境界アドレス
６１０    データ転送命令
６１１    送信側転送開始アドレス
６１２    受信側転送開始アドレス
６１３    総転送サイズ
６２０    データ読出要求
６２１    読出アドレス
６３１    転送パケット
６３２    転送パケット
６３３    転送パケット
６３４    転送パケット
６４０    要素データ
６４１    データバッファ番号
６４２    受信側パケットアドレス
６４３    １パケット情報
６４４    メモリリクエスト情報
６４５    送信側メモリアクセス単位データ
６４７    データバッファ格納データ
６４９    格納バッファ番号
６５０    データ転送命令
６５１〜６５４    メモリ読出データ
６６１〜６６３    転送パケットデータ
６７１    送信側パケットアドレス
６７２    カレントデータバッファ番号
６７３    ネクストデータバッファ番号
６７４    パケット内リクエスト番号
６７５    補正情報
６８６    要素番号
６８７    １パケット分要素番号
６８８    格納要素番号
【図１】
0005314056.tif 000002
【図２】
0005314056.tif 000003
【図３】
0005314056.tif 000004
【図４】
0005314056.tif 000005
【図５】
0005314056.tif 000006
【図６】
0005314056.tif 000007
【図７】
0005314056.tif 000008
【図８】
0005314056.tif 000009
【図９】
0005314056.tif 000010
【図１０】
0005314056.tif 000011
【図１１】
0005314056.tif 000012
【図１２】
0005314056.tif 000013
【図１３】
0005314056.tif 000014
【図１４】
0005314056.tif 000015
【図１５】
0005314056.tif 000016
【図１６】
0005314056.tif 000017
【図１７】
0005314056.tif 000018
【図１８】
0005314056.tif 000019
【図１９】
0005314056.tif 000020
【図２０】
0005314056.tif 000021
【図２１】
0005314056.tif 000022
【図２２】
0005314056.tif 000023
【図２３】
0005314056.tif 000024
【図２４】
0005314056.tif 000025
【図２５】
0005314056.tif 000026
【図２６】
0005314056.tif 000027
【図２７】
0005314056.tif 000028
【図２８】
0005314056.tif 000029
【図２９】
0005314056.tif 000030
【図３０】
0005314056.tif 000031
【図３１】
0005314056.tif 000032