(57)【要約】【課題】データ転送におけるスループットを向上させる。【解決手段】データ転送装置は、データ転送装置から受信したパケットを格納し、格納したパケットを受信した順序とは異なる順序で取り出すことができる受信パケット格納部を備える。データ転送装置は、転送先の要求に応じて受信パケット格納部からパケットを取り出す。そして、データ転送装置は、受信パケット格納部に格納されているパケットの中で、転送元の装置から最初に受信したパケットが取り出されたとき、受信パケット格納部で格納できるデータの大きさに比例したクレジット更新値を転送元の装置に送信する。【選択図】図１
2014049936.tif 000002
【特許請求の範囲】
【請求項１】
転送元の装置から受信したパケットを格納し、該格納したパケットを受信した順序とは異なる順序で取り出すことができる受信パケット格納部と、
前記受信パケット格納部に格納されているパケットの中で、前記転送元の装置から最初に受信したパケットである最古パケットが取り出されたとき、前記受信パケット格納部が受信可能なデータの大きさを示すクレジット値の更新要求を出力するクレジット制御部と、
前記クレジット制御部から出力された前記クレジット値の更新要求を前記転送元の装置に送信する送信部と、
を備えることを特徴とするデータ転送装置。
【請求項２】
前記クレジット制御部は、
前記最古パケットよりも後に前記転送元の装置から受信したパケットである後続パケットの中で、前記最古パケットよりも先に前記受信パケット格納部から取り出された追抜パケットがあるとき、前記最古パケットが前記受信パケット格納部から取り出され、かつ、前記追抜パケットの中で、前記転送元の装置から受信した順序が最後である最新追抜パケットより先に受信した後続パケットが全て取り出された状態になると、前記クレジット値の更新要求を出力する
ことを特徴とする請求項１に記載のデータ転送装置。
【請求項３】
前記パケットに含まれるデータを格納する記憶領域として、前記受信パケット格納部が有するデータ格納領域において、前記データを格納する記憶領域を指定するデータアドレスを設定するデータアドレス設定部と、
前記各パケットについて、前記データアドレス設定部で設定された、前記データアドレスと、前記データアドレスの指定する記憶領域に格納されたデータを識別するデータ識別情報とを関連付けて格納したアドレステーブルを生成するアドレステーブル生成部と、
前記受信パケット格納部からパケットが取り出されたとき、前記アドレステーブルを参照して、該パケットに含まれるデータのデータアドレスを抽出し、該抽出したデータアドレスを前記クレジット制御部に通知する通知部と、
を備え、
前記クレジット制御部は、
前記データ通知部からデータアドレスが通知されたとき、アドレステーブルを参照し、該通知されたデータアドレスが前記最古パケットに含まれたデータのデータアドレスと同じ場合、前記最古パケットが前記受信パケット格納部から取り出されたと判定する
ことを特徴とする請求項１または２に記載のデータ転送装置。
【請求項４】
前記転送元の装置から前記パケットを受信するごとに、前記パケットに含まれるデータの大きさを前記各データアドレスに割り当てられた記憶領域の大きさで除算した値を、前記データ格納領域に設定された前記データアドレスの数と同じ値に、最上位ビットとして１ｂｉｔを付加し、前記データアドレスの数の２倍の値までサイクリックにカウントするデータカウント部を備え、
前記データアドレス設定部は、
前記受信したパケットに含まれるデータのデータアドレスを、前記転送元の装置から前回パケットを受信したとき、前記データカウント部でカウントされた値から最上位ビットを除いた値に設定し、
前記アドレステーブル生成部は、
前記各パケットについて、前記最上位ビットと、前記データアドレスと、前記データ識別情報とを関連付けて格納したアドレステーブルを生成し、
前記通知部は、
前記受信パケット格納部からパケットが取り出されたとき、前記アドレステーブルを参照して、該パケットに含まれるデータの最上位ビットとデータアドレスとを抽出し、該抽出した最上位ビットとデータアドレスとを前記クレジット制御部に通知し、
前記クレジット制御部は、
前記受信パケット格納部に格納されている各データのデータアドレスと関連付けられた最上位ビットが１種類のとき、前記データアドレスが一番古いデータを含むパケットを最古パケットと判定し、
前記受信パケット格納部に格納されている各データのデータアドレスと関連付けられた最上位ビットが２種類のとき、前記転送元の装置から最後に受信した最新パケットのデータアドレスに関連付けられた最上位ビットと異なる最上位ビットが関連付けられた前記データアドレスの中で、前記データアドレスが一番古いデータを含むパケットを最古パケットと判定し、
前記データ通知部から最上位ビットとデータアドレスとが通知されたとき、アドレステーブルを参照し、該通知された最上位ビットとデータアドレスとが前記最古パケットに含まれたデータの最上位ビットとデータアドレスとに同じ場合、前記最古パケットが前記受信パケット格納部から取り出されたと判定する
ことを特徴とする請求項３に記載のデータ転送装置。
【請求項５】
前記クレジット制御部は、
前記クレジット値の更新要求として、前記最古パケットに含まれるデータのデータアドレスから、次にデータが格納されているデータアドレスまでに関連付けられた記憶領域の大きさに比例した値であるデータのクレジット更新値を、前記転送元の装置が有するデータのクレジット値に加算させる要求を出力する
ことを特徴とする請求項３または４に記載のデータ転送装置。
【請求項６】
前記パケットに含まれるヘッダーを格納する記憶領域として、前記受信パケット格納部が有するヘッダー格納領域において、前記ヘッダーを格納する記憶領域を指定するヘッダーアドレスを設定するヘッダーアドレス設定部を備え、
前記アドレステーブル生成部は、
前記各パケットについて、前記ヘッダーアドレス設定部で設定された、前記ヘッダーアドレスと、前記ヘッダーアドレスの指定する記憶領域に格納されたヘッダーを識別するヘッダー識別情報と、前記データアドレス設定部で設定された、前記データアドレスと、前記データ識別情報とを関連付けて格納したアドレステーブルを生成する
ことを特徴とする請求項３〜５のいずれか一つに記載のデータ転送装置。
【請求項７】
前記転送元の装置から前記パケットを受信するごとに、前記ヘッダー格納領域に設定された前記ヘッダーアドレスの数と同じ値まで、前記受信したヘッダーの大きさに比例した値をサイクリックにカウントするヘッダーカウント部を備え、
前記ヘッダーアドレス設定部は、
前記受信したパケットに含まれるヘッダーのヘッダーアドレスを、前記転送元の装置から前回パケットを受信したとき、前記ヘッダーカウント部でカウントされた値に設定する
ことを特徴とする請求項６に記載のデータ転送装置。
【請求項８】
前記クレジット制御部は、
前記クレジット値の更新要求として、前記最古パケットに含まれるヘッダーのヘッダーアドレスから、次にヘッダーが格納されているヘッダーアドレスまでに関連付けられたヘッダーの数であるヘッダーのクレジット更新値を、前記転送元の装置が有するヘッダーのクレジット値に加算させる要求を出力する
ことを特徴とする請求項６または７に記載のデータ転送装置。
【請求項９】
パケットの取り出しが可能になった時に、前記アドレステーブルを参照し、前記取り出し要求されたパケットのヘッダーとデータとを抽出し、該抽出したヘッダーとデータとを含むパケットを生成し、前記転送先の装置に送信する処理部を備えることを特徴とする請求項６〜８のいずれか一つに記載のデータ転送装置。
【請求項１０】
転送先の装置へ送信するパケットを格納する送信パケット格納部と、
前記転送先の装置から受信した、前記転送先の装置が受信可能なデータの大きさに比例した値であるデータのクレジット更新値をカウントしてデータのクレジット値を求めるデータクレジットカウント部と、
前記転送先の装置から受信した、前記転送先の装置が受信可能なヘッダーの数であるヘッダーのクレジット更新値をカウントしてヘッダーのクレジット値を求めるヘッダークレジットカウント部と、
前記データのクレジット値が前記送信するパケットに含まれるデータの大きさよりも大きいデータを送信可能であることを示し、かつ、前記ヘッダーのクレジット値が１以上であるとき、前記送信パケット格納部からパケットを取り出して、送信部に出力する送信制御部と、
を備えることを特徴とする請求項１〜９のいずれか一つに記載のデータ転送装置。
【請求項１１】
転送元の装置から受信したパケットを、該パケットを格納する受信パケット格納部に格納し、
前記受信パケット格納部に格納したパケットを取り出し可能になった順序で取り出し、
前記受信パケット格納部に格納されているパケットの中で、前記転送元の装置から最初に受信したパケットである最古パケットが取り出されたとき、前記受信パケット格納部が受信可能なデータの大きさを示すクレジット値の更新要求を出力する、
ことを特徴とするデータ転送方法。
【請求項１２】
転送元の装置から受信したパケットを、該パケットを格納する受信パケット格納部に格納し、
前記受信パケット格納部に格納したパケットを取り出し可能になった順序で取り出し、
前記受信パケット格納部に格納されているパケットの中で、前記転送元の装置から最初に受信したパケットである最古パケットが取り出されたとき、前記受信格納部が受信可能なデータの大きさを示すクレジット値の更新要求を出力する、
処理をコンピュータに実行させることを特徴とするデータ転送プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータの転送を制御する技術に関する。
【背景技術】
【０００２】
転送元の装置から受信したパケットをバッファに格納したあと、バッファに格納されているパケットを受信した順序で転送先の装置に送信するデータ転送装置がある。このようなデータ転送装置では、バッファに空き領域ができるとバッファが受信可能なパケット数を転送元の装置に通知し、通知したバッファが受信可能なパケット数に応じたパケットを転送元の装置から受信するクレジット方式のフロー制御が行なわれる。
【０００３】
関連する技術として、送信側は、受信側が誤りなく受信したデータの順序番号を知らせる情報と、受信側が解放したバッファを占有していたデータの順序番号を知らせる情報とを受信側から受信する。また、送信側は、受信した情報を用いて、受信側が誤りなく受信したデータの占有している受信バッファ数を求める。そして、送信側は、受信バッファ数が上位しきい値を上回る場合は最大値を減らし、受信バッファ数が下位しきい値を下回る場合は最大値を増やすことにより、バッファの開放速度に見合った最大スループットを実現する技術が知られている。また、受信側の装置は、受信側の装置から初期クレジット値を送信した後、受信側で最初のパケットを受信するまでの時間Ｔａを測定する。また、受信側の装置は、１パケット分の送信時間をＴｐ、初期クレジットの値をＣｉ、また通信時のクレジット値をＣｎとした時に、Ｔａ＋Ｔｐ×（Ｃｎ−１）＜Ｔｐ×Ｃｉを満足するクレジット値Ｃｎを求める。そして、受信側の装置は、クレジット値Ｃｎの最大値をパケット転送に使用することにより、接続の度に、通信相手との距離と通信速度とから最適なクレジット値を設定し、常に最大スループットでの通信を行う技術が知られている（例えば、特許文献１および特許文献２参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特公平８−２１９６９号公報
【特許文献２】特開平９−２０５４４２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
前述した転送技術では、例えば、転送元の装置からパケットを受信した順序と、転送先の装置へ送信するパケットの順序が異なるとき、後に受信したパケットの送信を保留するのでデータ転送のスループットが低下することがある。
【０００６】
上述した問題に鑑み、本明細書で後述するデータ転送装置は、データの転送におけるスループットを向上させることを目的とする。
【課題を解決するための手段】
【０００７】
本明細書で開示するデータ転送装置のひとつに、受信パケット格納部と、クレジット制御部と、送信部とを備えたデータ転送装置がある。ここで、受信パケット格納部は、転送元の装置から受信したパケットを格納し、格納したパケットを受信した順序とは異なる順序で取り出すことができる。そして、クレジット制御部は、受信パケット格納部に格納されているパケットの中で、転送元の装置から最初に受信したパケットである最古パケットが取り出されたとき、受信パケット格納部が受信可能なデータの大きさを示すクレジット値の更新要求を出力する。送信部は、クレジット制御部から出力されたクレジット値の更新要求を転送元の装置に送信する。
【発明の効果】
【０００８】
本明細書で後述するデータ転送装置は、データ転送におけるスループットを向上させるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】データ転送装置の一実施例を示す機能ブロック図である。
【図２】受信パケット格納部の一実施例を示す機能ブロック図である。
【図３】送信パケット格納部の一実施例を示す機能ブロック図である。
【図４】データ転送装置の一実施例を示すブロック図である。
【図５】データ転送の処理内容を示すフローチャートである。
【図６】アドレステーブルのデータ例を表したテーブルである。
【図７】最古データのアドレスを特定する処理内容を示すフローチャートである。
【図８】最古データのアドレスを特定する処理の説明図である。
【図９】クレジット値の更新の処理内容を示すフローチャートである。
【図１０】クレジット値の更新判定を時系列に説明する説明図である。
【図１１】クレジット値の更新判定をパターンごとに説明する説明図である。
【図１２】最新追抜パケットの更新を時系列に説明する説明図である。
【図１３】最新追抜パケットの更新をパターンごとに説明する説明図である。
【図１４】データ転送時のアドレステーブルの格納値を示すテーブルである。
【図１５】データ転送時のアドレステーブルの格納値を示すテーブルである。
【図１６】データ転送時のアドレステーブルの格納値を示すテーブルである。
【図１７】データ転送時のアドレステーブルの格納値を示すテーブルである。
【図１８】データ転送時のアドレステーブルの格納値を示すテーブルである。
【図１９】実施形態のデータ転送装置をＰＣＩｅに適用したときの機能ブロック図である。
【図２０】実施形態のデータ転送装置をＰＣＩｅに適用したときのメモリライト時におけるデータ転送の処理内容を示すフローチャートである。
【図２１】実施形態のデータ転送装置が奏する効果を説明する説明図である。
【図２２】実施形態のデータ転送装置が奏する効果を説明する説明図である。
【発明を実施するための形態】
【００１０】
［実施形態］
実施形態のデータ転送装置について説明する。
データ転送装置は、転送元の装置から受信したパケットを転送先の装置へ転送する装置である。
【００１１】
実施形態のデータ転送装置は、格納したパケットを受信した順序とは異なる順序で取り出すことができる受信バッファ（以下、受信パケット格納部という。）を備える。そして、データ転送装置は、送信元の装置からパケットを受信し、受信したパケットを受信パケット格納部に格納する。また、データ転送装置は、転送先の装置から要求された順に受信パケット格納部からパケットを取り出し、転送先の装置に送信する。
【００１２】
データ転送装置は、受信パケット格納部に格納されているパケットの中で、転送元の装置から最初に受信したパケット（以下、最古パケットという。）が取り出されたか否かを判定する。データ転送装置は、最古パケットが受信パケット格納部から取り出されたと判定すると、受信可能な（格納可能な）データの大きさを伝えるために、新たに格納可能となったパケットの大きさに対応する値のクレジット更新値を転送元の装置に送信する。
【００１３】
上記のように、実施形態のデータ転送装置は、転送先の装置の要求に応じて、最古パケットよりも後に転送元の装置から受信した後続パケットの取り出しを、最古パケットを追い越して行なうことができるので、後続パケットの送信を保留しなくて良い。したがって、実施形態のデータ転送装置は、データ転送のスループットを向上することができる。
【００１４】
図１は、データ転送装置の一実施例を示す機能ブロック図である。
図１において、データ転送装置１は、受信部１１、受信パケット格納部１２、処理部１３、送信パケット格納部１４、クレジット制御部１５、および送信部１６を備えている。なお、データ転送装置２は、データ転送装置１と同じ機能を有している。以下の説明においては、データ転送装置１の機能を説明する。データ転送装置２の機能については、データ転送装置１と同じ機能の名称を統一し、説明を省略する。また、データ転送装置２を送信元の装置として説明する。転送先の装置については、図示しないが、処理部１３に含まれる、処理部１３に接続されているものとする。また、データ転送装置１は、例えば、ＰＣＩｅ（ＰＣＩ  Ｅｘｐｒｅｓｓ）のルート・コンプレックスや、周辺装置(グラフィックカード、ディスク・ドライブおよび外部入出力カード)等に適用される。
【００１５】
受信部１１は、データ転送装置２から処理部１３へのデータ処理の要求（リクエスト）を含むパケットを受信する。
データ転送装置２から送信されるパケットには、例えば、転送先の装置が転送元の装置に対して何も応答を返さないポステッドパケット、および転送先の装置が転送元の装置に対して応答を返すノンポステッドパケットがある。
そして、ポステッドパケット、およびノンポステッドパケットには、それぞれヘッダーとデータとが含まれるパケット、およびヘッダーのみでデータがないパケットがある。
【００１６】
受信パケット格納部１２は、データ転送装置２から受信したパケットを格納する。そして、受信パケット格納部１２は、格納したパケットを受信した順序とは異なる順序で取り出すことができ、処理部１３からのパケットの取出要求に応じて、格納しているパケットを出力する。また、受信パケット格納部１２において、パケットに含まれるヘッダーを格納する記憶領域をヘッダー格納領域という。受信パケット格納部１２において、パケットに含まれるデータを格納する記憶領域をデータ格納領域という。
【００１７】
そして、受信パケット格納部１２は、例えば、データ転送装置２からポステッドパケットと、ノンポステッドパケットとを受信する。受信パケット格納部１２は、ポステッドパケットのヘッダーとデータ、およびノンポステッドパケットのヘッダーとデータとをそれぞれ別々の領域に格納する。以下の説明では、説明の簡単化のため、データ転送装置１がデータ転送装置２からポステッドパケットまたは、ノンポステッドパケットのどちらか一方のみを受信するものとして説明する。また、ポステッドパケット、およびノンポステッドパケットのことを、特に断らない限り単にパケットという。なお、データ転送装置１がポステッドパケットやノンポステッドパケットのように、複数種類のパケットを受信する場合には、受信する種類のパケットごとにヘッダー格納領域とデータ格納領域とを設ければ良い。
【００１８】
処理部１３は、受信パケット格納部１２に格納されたパケットのヘッダーに含まれるデータ処理の要求にしたがいデータ処理をする。そして、処理部１３は、１つのパケットに含まれるデータのデータ処理が終了し、終了したデータ処理に連続するデータ処理があるとき、受信パケット格納部１２から次のデータ処理に必要なパケットを取り出す処理をする。このとき、処理部１３は、受信パケット格納部１２にパケットの取り出し要求を出力する。そして、受信パケット格納部１２は、処理部１３からのパケットの取り出し要求が入力された順番で、取り出し要求されたパケットを処理部１３に出力するので、データ転送装置２から受信した順序と異なる順序でパケットを出力することがある。
【００１９】
一例として、処理部１３は、書込み要求を含むヘッダーと、書込むデータとが含まれたポステッドパケットが受信パケット格納部１２から入力されたとき、処理部１３にホストバスを介して接続された、図示しないメモリ（転送先の装置）にデータを書込む処理をする。また、処理部１３は、例えば、接続されたメモリから次に読み込むべきパケットの識別子を含むパケットを受信すると、受信パケット格納部１２から識別子に対応するヘッダーとデータとを取り出す処理をする。そして、処理部１３は、受信パケット格納部１２から取り出したヘッダーとデータとを含むパケットを生成し、ホストバスを介してメモリに送信する。なお、次に読み込むパケットの識別子としては、例えば、パケットのアドレスや、ヘッダーに含まれるシーケンス番号などがある。また、受信パケット格納部１２から識別子に対応するヘッダーとデータとを取り出す処理では、パケットのアドレスや、ヘッダーに含まれるシーケンス番号などを格納する、後述のアドレステーブルを参照し、ヘッダーとデータとを抽出して取り出す。
【００２０】
送信パケット格納部１４は、パケット格納領域を有し、データ転送装置２に送信するパケットをパケット格納領域に格納する。そして、送信パケット格納部１４は、パケット格納領域に格納したパケットを格納した順序で出力する。なお、パケットごとに優先度を設け、送信パケット格納部１４は、パケット格納領域に格納したパケットを、優先度の高い順に出力しても良い。
【００２１】
また、送信パケット格納部１４は、データ転送装置２の受信部２１に格納されたパケットが取り出されたことにより、受信部２１に新たに受信可能となった（取り出されたパケットの数に対応する）ヘッダーの数であるヘッダーのクレジット更新値を受信する。そして、送信パケット格納部１４は、受信したヘッダーのクレジット更新値を積算（カウント）して、送信可能なヘッダーの大きさを示すクレジット値を算出する。なお、送信パケット格納部１４は、データ転送装置２で受信可能であるヘッダーの数を示すヘッダーのクレジット更新値を受信し、受信したヘッダーのクレジット更新値をクレジット値としても良い。以下の説明において、ヘッダーのクレジット更新値は、受信部２１に新たに受信可能となった（取り出されたパケットの数に対応する）ヘッダーの数とする。
【００２２】
また、送信パケット格納部１４は、データ転送装置２の受信部２１に格納されたパケットが取り出されたことにより、受信部２１に新たに受信可能となった（取り出されたパケットに対応する）データの大きさに比例した値であるデータのクレジット更新値を受信する。そして、送信パケット格納部１４は、受信したデータのクレジット更新値を積算（カウント）して、送信可能なデータの大きさを示すクレジット値を算出する。なお、送信パケット格納部１４は、データ転送装置２で受信可能であるデータの大きさに比例した値を示すデータのクレジット更新値を受信し、受信したデータのクレジット更新値をクレジット値としても良い。以下の説明において、データのクレジット更新値は、受信部２１に新たに受信可能となった（取り出されたパケットに対応する）データの大きさに比例した値とする。
【００２３】
送信パケット格納部１４は、データのクレジット値が送信するパケットに含まれるデータの大きさよりも大きいデータを送信可能であることを示し、かつ、ヘッダーのクレジット値が１以上であるときパケットを出力する。
【００２４】
そして、送信パケット格納部１４は、パケットを出力すると、ヘッダーのクレジット値をデクリメントする。また、送信パケット格納部１４は、パケットを出力すると、データの大きさに比例した値をデータのクレジット値から減算する。
【００２５】
また、クレジット制御部１５は、受信パケット格納部に格納されているパケットの中で、転送元の装置から最初に受信したパケットである最古パケットが取り出されたとき、転送元の装置にクレジット値の更新要求を出力する。
【００２６】
クレジット制御部１５は、後続パケットの中で最古パケットよりも先に受信パケット格納部１２から取り出されたパケット（以下、追抜パケットという。）があるか判定する。また、クレジット制御部１５は、追抜パケットがあるとき、追抜パケットの中で、転送元の装置から受信した順序が最後であるパケット（以下、最新追抜パケットという。）を判定する。そして、クレジット制御部１５は、最古パケットが受信パケット格納部１２から取り出され、かつ、最新追抜パケットより先に受信した後続パケットが全て取り出された状態になると、クレジット値の更新要求を出力しても良い。
【００２７】
送信部１６は、クレジット制御部１５から出力されたクレジット値の更新要求をデータ転送装置２に送信する。また、送信部１６は、クレジット制御部１５から出力されたヘッダーのクレジット更新値とデータのクレジット更新値とをデータ転送装置２に送信する。さらに、送信部１６は、送信パケット格納部１４から出力されたパケットをデータ転送装置２に送信する。
【００２８】
図２は、受信パケット格納部の一実施例を示す機能ブロック図である。
図２を参照して、実施形態の受信パケット格納部１２の機能をより詳細に説明する。
図２において、受信パケット格納部１２は、パケット分割部２０１、ヘッダーカウント部２０２、ヘッダーアドレス設定部２０３、ヘッダー格納領域２０４、データカウント部２０５、データアドレス設定部２０６、データ格納領域２０７、アドレステーブル生成部２０８、アドレステーブル２０９、および通知部２１０を備えている。
【００２９】
パケット分割部２０１は、データ転送装置２から受信したパケットを受信するごとに、パケットをヘッダーと、データとに分割する。そして、パケット分割部２０１は、分割したヘッダーをヘッダーカウント部２０２に出力する。また、パケット分割部２０１は、分割したデータをデータカウント部２０５に出力する。
【００３０】
ヘッダーカウント部２０２は、パケット分割部２０１からヘッダーが入力されると、ヘッダー格納領域２０４において、ヘッダーを格納する記憶領域を指定するヘッダーアドレスの数と同じ値まで、入力されたヘッダーの大きさに比例した値をサイクリックにカウントする。
【００３１】
一例として、ヘッダーカウント部２０２は、ヘッダー格納領域２０４の大きさが１２８Ｂｙｔｅであり、ヘッダーアドレスごとに割り振られている格納領域の大きさが８Ｂｙｔｅであるとき、１２８Ｂｙｔｅ／８Ｂｙｔｅ＝１６までカウントすることができる。このとき、ヘッダー格納領域２０４に設定されたヘッダーアドレスの数は１６である。
【００３２】
さらに、ヘッダーカウント部２０２は、ヘッダーの大きさが１６Ｂｙｔｅであるとき、ヘッダーが入力されるたびに、ヘッダー１つを記憶するのに必要な記憶領域に対応するヘッダーアドレスの数である１６Ｂｙｔｅ／８Ｂｙｔｅ＝２をカウント値に加算する。なお、このときヘッダー格納領域２０４の大きさが１２８Ｂｙｔｅであるとき、最大のクレジット値は、１２８Ｂｙｔｅ／１６Ｂｙｔｅ＝８である。
【００３３】
そして、ヘッダーカウント部２０２は、ヘッダーが入力され、新たなカウント値（ヘッダーカウント値）がカウントされるごとに、ヘッダーカウント値をヘッダーアドレス設定部２０３に出力する。なお、ヘッダーカウント部２０２は、入力されたヘッダーもヘッダーアドレス設定部２０３に出力する。
【００３４】
ヘッダーアドレス設定部２０３は、ヘッダーカウント部２０２から入力されたヘッダーを格納する記憶領域を指定するヘッダーアドレスを設定する。
また、ヘッダーアドレス設定部２０３は、ヘッダーカウント部２０２から入力されたヘッダーカウント値を保持する。そして、ヘッダーアドレス設定部２０３は、ヘッダーカウント部２０２から入力されたヘッダーに対して設定するヘッダーアドレスを、データ転送装置２から前回パケットを受信したときにヘッダーカウント部２０２でカウントしたヘッダーカウント値にしても良い。これにより、ヘッダーアドレス設定部２０３は、他のヘッダーに上書きすることなく、入力されたヘッダーをヘッダー格納領域２０４に格納することができる。
【００３５】
また、ヘッダーアドレス設定部２０３は、設定したヘッダーアドレスとヘッダーとをヘッダー格納領域２０４に出力する。さらに、ヘッダーアドレス設定部２０３は、設定したヘッダーアドレスをアドレステーブル生成部２０８に出力する。
【００３６】
ヘッダー格納領域２０４は、データ転送装置２から受信したパケットに含まれるヘッダーを格納するための記憶領域である。そして、ヘッダー格納領域２０４は、ヘッダーアドレス設定部２０３からヘッダーとヘッダーアドレスが入力されると、入力されたヘッダーアドレスの指定する領域に、入力されたヘッダーを格納する。また、ヘッダー格納領域２０４は、処理部１３からのパケットの取り出し要求に応じて、取り出し要求されたパケットに含まれるヘッダーを処理部１３に出力する。
【００３７】
データカウント部２０５は、データ格納領域２０７に設定されたデータアドレスの数と同じ値に、最上位ビットとして１ｂｉｔを付加し、データを格納する記憶領域を指定するデータアドレスの数の２倍の値までサイクリックに値をカウントする。そして、データカウント部２０５は、パケット分割部２０１からデータが入力されると、入力されたデータの大きさを、各データアドレスに割り当てられた記憶領域の大きさで除算し、カウント値に加算する。なお、データカウント部２０５は、入力されたデータの大きさを、各データアドレスに割り当てられた記憶領域の大きさで除算したとき、少数以下の値が算出されると、少数以下の値を切り捨てて、カウント値の１の位を繰り上げる。また、データカウント部２０５は、最上位ビットの付加をなくした簡易な構成としても良い。
【００３８】
一例として、データカウント部２０５は、例えば、データ格納領域２０７の大きさが１６３８４Ｂｙｔｅであり、データアドレスごとに割り振られている記憶領域の大きさが８Ｂｙｔｅであるとき、２（最上位ビット）＊１６３８４Ｂｙｔｅ／８Ｂｙｔｅ＝４０９６まで値をカウントする。このとき、パケットに含まれるデータを格納する領域として、受信パケット格納部１２が有するデータ格納領域２０７のデータアドレスの数は２０４８である。
【００３９】
また、データカウント部２０５は、例えば、入力されたデータの大きさが２０４８Ｂｙｔｅであり、データアドレスごとに割り振られている格納領域の大きさが８Ｂｙｔｅであるとき、カウント値を２０４８Ｂｙｔｅ／８Ｂｙｔｅ＝２５６加算する。なお、データカウント部２０５は、例えば、入力されたデータの大きさが２０４４Ｂｙｔｅであるとき、２０４４Ｂｙｔｅ／８Ｂｙｔｅ＝２５５．５であるが、データアドレスごとに格納領域は割り当てられているので、カウント値を２５６加算する。
【００４０】
データカウント部２０５は、例えば、データ格納領域の大きさが１６３８４Ｂｙｔｅであり、データアドレスごとに割り振られている格納領域の大きさが８Ｂｙｔｅであるとき、カウント値が２０４８（＝０）に達すると、最上位ビットの０と１とを切替える。そして、データカウント部２０５は、最上位ビットより下位のビットをサイクリックにカウントする。
【００４１】
また、データカウント部２０５は、データが入力され、新たなカウント値（以下、データカウント値という。）が算出されるごとに、データカウント値をデータアドレス設定部２０６に出力する。なお、データカウント部２０５は、入力されたデータもデータアドレス設定部２０６に出力する。
【００４２】
データアドレス設定部２０６は、データカウント部２０５から入力されたデータを格納する記憶領域を指定するデータアドレスを設定する。
また、データアドレス設定部２０６は、データカウント部２０５から入力されたデータカウント値を保持する。そして、データアドレス設定部２０６は、データカウント部２０５から入力されたデータに設定するデータアドレスを、データ転送装置２から前回パケットを受信したときにデータカウント部２０５でカウントした値から最上位ビットを除いた値に設定する。これにより、データアドレス設定部２０６は、他のデータに上書きすることなく、入力されたデータをデータ格納領域２０７に格納することができる。
【００４３】
また、データアドレス設定部２０６は、設定したデータアドレスとデータとをデータ格納領域２０７に出力する。さらに、データアドレス設定部２０６は、設定した最上位ビットとデータアドレスとをアドレステーブル生成部２０８に出力する。
【００４４】
データ格納領域２０７は、データ転送装置２から受信したパケットに含まれるデータを格納するための記憶領域である。そして、データ格納領域２０７は、データアドレス設定部２０６からデータとデータアドレスとが入力されると、入力されたデータアドレスの指定する領域に、入力されたデータを格納する。また、データ格納領域２０７は、処理部１３からのパケットの取り出し要求に応じて、取り出し要求されたパケットに含まれるデータを処理部１３に出力する。
【００４５】
アドレステーブル生成部２０８は、ヘッダーアドレス設定部２０３で設定されたヘッダーアドレスと、ヘッダーアドレスの指定する記憶領域に格納されたヘッダーを識別するヘッダー識別情報とを関連付けてアドレステーブル２０９に出力する。さらに、アドレステーブル生成部２０８は、データアドレス設定部２０６で設定された最上位ビットおよびデータアドレスと、データアドレスの指定する記憶領域に格納されたデータを識別するデータ識別情報とを関連付けてアドレステーブル２０９に出力する。なお、アドレステーブル生成部２０８は、ヘッダー識別情報として、例えば、ヘッダーを識別することができる名称情報等の情報をヘッダーから抽出すれば良い。また、アドレステーブル生成部２０８は、データ識別情報として、例えば、データを識別することができる名称情報等の情報をデータから抽出すれば良い。
【００４６】
また、アドレステーブル生成部２０８は、データアドレス設定部２０６から前回入力されたデータアドレスを、今回入力されたデータアドレスから減算し、得られた値に各データアドレスに割り当てた記憶領域の大きさを乗算する。これにより、アドレステーブル生成部２０８は、今回入力されたデータの大きさを算出する。そして、アドレステーブル生成部２０８は、今回入力されたデータの大きさを、アドレステーブル２０９に出力しても良い。
【００４７】
なお、アドレステーブル生成部２０８は、ヘッダーアドレス設定部２０３から前回入力されたヘッダーアドレスを、今回入力されたヘッダーアドレスから減算することにより、今回入力されたヘッダーの大きさを算出し、アドレステーブル２０９に出力しても良い。
【００４８】
アドレステーブル２０９は、アドレステーブル生成部２０８から入力された情報を格納する。また、アドレステーブル２０９は、データアドレスに対応する記憶領域に格納されたデータが取り出し済みであるか否かを示す情報（以下、有効性という。）を格納する。
【００４９】
アドレステーブル２０９は、例えば、パケットごとに、ヘッダーアドレス、ヘッダー識別情報、ヘッダーの大きさ、データアドレス、データ識別情報、データの大きさ、および有効性を関連付けた情報を格納する。なお、アドレステーブル２０９には、必要に応じて、ディレクトリエントリ（パケットの名前、格納日、格納時間、および属性など）やアロケーション情報（パケットの格納領域の使用状況など）などの他のデータを格納しても良い。
【００５０】
通知部２１０は、受信パケット格納部１２からパケットが取り出されたとき、アドレステーブル２０９を参照して、取り出されたパケットに含まれるデータのデータアドレスをクレジット制御部１５に通知する。
【００５１】
図３は、送信パケット格納部の一実施例を示す機能ブロック図である。
図３を参照して、実施形態の送信パケット格納部１４の機能をより詳細に説明する。
図３において、送信パケット格納部１４は、ヘッダークレジットカウント部３０１、データクレジットカウント部３０２および送信制御部３０３を備えている。以下の説明では、データ転送装置１とデータ転送装置２との間で、パケットの送受信をしているものとして説明する。このとき、データ転送装置１とデータ転送装置２とは、互いに送信元の装置、および送信先の装置の２つの役割を果たしている。
【００５２】
ヘッダークレジットカウント部３０１は、データ転送装置２から受信した、ヘッダーのクレジット更新値をカウントしてヘッダーのクレジット値を算出する。
また、ヘッダークレジットカウント部３０１は、データ転送装置２へパケットを送信すると、ヘッダーのクレジット値をデクリメントする。
【００５３】
データクレジットカウント部３０２は、データ転送装置２から受信した、データのクレジット更新値をカウントしてデータのクレジット値を算出する。
また、データクレジットカウント部３０２は、データ転送装置２へパケットを送信すると、パケットに含まれるデータの大きさに比例した値をデータのクレジット値から減算する。
【００５４】
送信制御部３０３は、データのクレジット値が送信するパケットに含まれるデータの大きさよりも大きいデータを送信可能であることを示し、かつ、ヘッダーのクレジット値が１以上であるとき、図示しないパケット格納領域からパケットを取り出す。そして、送信制御部３０３は、取り出したパケットを送信部１６に出力し、送信部１６を介して転送先の装置へパケットを送信する制御をする。
【００５５】
図４は、データ転送装置の一実施例を示すブロック図である。
図４において、データ転送装置１は、制御回路４０１、記憶装置４０２および通信インターフェイス４０３を備えている。なお、データ転送装置２は、データ転送装置１と同じ構成を有している。よって、以下の説明においては、データ転送装置１の構成を説明し、データ転送装置２の構成について説明を省略する。
【００５６】
制御回路４０１は、データ転送装置１全体の制御をする。そして、制御回路４０１は、例えば、ＣＰＵ、マルチコアＣＰＵ、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）およびＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ Ｄｅｖｉｃｅ）などである。制御回路４０１は、図１において、処理部１３、受信パケット格納部１２の一部、送信パケット格納部１４の一部およびクレジット制御部１５として機能する。また、制御回路４０１は、図２において、パケット分割部２０１、ヘッダーカウント部２０２、ヘッダーアドレス設定部２０３、データカウント部２０５、データアドレス設定部２０６、アドレステーブル生成部２０８および通知部２１０として機能する。さらに、制御回路４０１は、図３において、ヘッダークレジットカウント部３０１、データクレジットカウント部３０２、および送信制御部３０３として機能する。
【００５７】
記憶装置４０２は、各種データを記憶する。そして、記憶装置４０２は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）およびＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などのメモリや、ＨＤ（Ｈａｒｄ  Ｄｉｓｋ）などである。そして、ＲＯＭは、ブートプログラムなどのプログラムを記憶している。ＲＡＭは、制御回路４０１のワークエリアとして使用される。ＨＤは、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）、アプリケーションプログラム、ファームウェアなどのプログラム、および各種データを記憶している。記憶装置４０２は、図２において、ヘッダー格納領域２０４、データ格納領域２０７、およびアドレステーブル２０９として機能する。なお、アドレステーブル２０９は、ヘッダー格納領域２０４またはデータ格納領域２０７の一部の領域に記憶されても良いし、記憶装置４０２の別の記憶領域に記憶されても良い。
【００５８】
また、記憶装置４０２は、制御回路４０１を処理部１３、受信パケット格納部１２の一部、送信パケット格納部１４の一部、クレジット制御部１５、パケット分割部２０１、ヘッダーカウント部２０２、ヘッダーアドレス設定部２０３、データカウント部２０５、データアドレス設定部２０６、アドレステーブル生成部２０８、通知部２１０、ヘッダークレジットカウント部３０１、データクレジットカウント部３０２、および送信制御部３０３として機能させるためのデータ転送プログラムを記憶する。そして、データ転送装置１がデータ転送を開始するとき、制御回路４０１は、記憶装置４０２に記憶されたデータ転送プログラムをＲＡＭに読み出す。これにより、制御回路４０１は、ＲＡＭをワークスペースとして動作することにより、データ転送装置１全体の制御をする。なお、データ転送プログラムは、制御回路４０１が通信インターフェイス４０３を介してアクセス可能であれば、ネットワーク上のサーバに記憶されていても良いし、読取装置を介して各種記録媒体に記憶されていても良い。なお、記録媒体は、例えば、図示しない読取装置を介してバスに接続され、制御回路４０１が読取装置を制御することにより、データのリード／ライトが行なわれる。また、記録媒体は、例えば、ＦＤ（Ｆｌｏｐｐｙ  Ｄｉｓｋ）、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｋ：登録商標）、およびフラッシュメモリなどである。
【００５９】
通信インターフェイス４０３は、バス、電力線通信、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、無線通信、またはインターネットなどのネットワークを介してデータ転送装置１と他の装置とを通信可能に接続する。そして、通信インターフェイス４０３は、図１において、受信部１１、および送信部１６として機能する。
【００６０】
図５は、データ転送の処理内容を示すフローチャートである。
図５は、データ転送装置１がデータ転送装置２から受信したパケットをヘッダーとデータとに分割して、それぞれを受信パケット格納部１２のヘッダー格納領域２０４とデータ格納領域２０７とに格納するまでの処理内容を示している。
【００６１】
データ転送装置２からデータ転送装置１の処理部１３に対するリクエストを有するパケットの送信要求があると、データ転送装置１は起動する（Ｓ５０１）。
データ転送装置１は、起動すると、データ転送装置２にヘッダーのクレジット値と、データのクレジット値とを含む、クレジット値の初期化信号を送信する（Ｓ５０２）。データ転送装置２は、クレジット値の初期化信号を受信すると、受信パケット格納部２２（ヘッダークレジットカウント部３０１、およびデータクレジットカウント部３０２）に格納されている、ヘッダーのクレジット値と、データのクレジット値とをクレジット値の初期化信号に示される値に更新する。クレジット値の初期化信号に示される値とは、受信パケット格納部１２が格納できるヘッダー数、およびデータの大きさに応じたクレジット値の最大値であっても良いし、適宜選択された値でも良い。
【００６２】
そして、データ転送装置２の送信制御部３０３は、データのクレジット値が送信するパケットに含まれるデータの大きさよりも大きいデータを送信可能であることを示し、かつ、ヘッダーのクレジット値が１以上であるとき、１パケットずつデータを転送する。これにより、データ転送装置１は、データ転送装置２から送信されるパケットの受信を開始する（Ｓ５０３）。
【００６３】
データ転送装置１のパケット分割部２０１は、パケットを受信すると、受信したパケットをヘッダーとデータとに分割する（Ｓ５０４）。
そして、ヘッダーアドレス設定部２０３は、ヘッダーアドレスを設定して分割したヘッダーをヘッダー格納領域２０４に格納する（Ｓ５０５）。
【００６４】
また、データアドレス設定部２０６は、データアドレスを設定して分割したデータをデータ格納領域２０７に格納する（Ｓ５０６）。
【００６５】
次に、データ転送装置１は、転送が終了したか否かを判定（Ｓ５０７）し、データ転送が継続すると判定（Ｓ５０７にてＮｏ）すると、Ｓ５０３〜Ｓ５０７の処理を繰り返す。
Ｓ５０７において、データ転送装置１は、データ転送が終了したと判定（Ｓ５０７にてＹｅｓ）すると、データ転送処理を終了する。なお、データ転送装置１は、例えば、データ転送装置２からのデータ信号の転送を終了することを示す転送終了信号を受信することにより、データ転送が終了したと判断しても良い。
【００６６】
図６は、アドレステーブルのデータ例を表したテーブルである。
図６において、アドレステーブル２０９は、ヘッダーアドレス、データ管理アドレス（最上位ビット、およびデータアドレス）、有効性、およびデータサイズを格納している。また、図示していないが、アドレステーブル２０９には、ヘッダー識別情報と、データ識別情報も格納されているものとする。なお、図６において、ヘッダーアドレスとデータアドレスとは、説明の簡単化のため、１０進数で表している。また、以下の説明において、アドレスごとに割り振られている格納領域の大きさは、８Ｂｙｔｅであるものとする。ヘッダーの大きさは、１６Ｂｙｔｅであるものとする。ヘッダー格納領域の大きさは、１２８Ｂｙｔｅであるものとする。データ格納領域の大きさは、１６３８４Ｂｙｔｅであるものとする。
【００６７】
図６（ａ）において、ヘッダーアドレスは、１つのヘッダーを格納するのに８Ｂｙｔｅ×２アドレス＝１６ｂｙｔｅの記憶領域を提供していることを示している。また、ヘッダーアドレスは、１２８Ｂｙｔｅ／８Ｂｙｔｅ＝１６が最大値である。よって、ヘッダー格納領域には、最大８つのヘッダーが格納可能であることを示している。
【００６８】
図６（ａ）において、データ管理アドレスは、最上位ビットとデータアドレスとを含む。データアドレスは、データ転送装置２から受信したパケットに含まれるデータを受信パケット格納部１２に格納するごとに、使用したアドレス数を加算した値となっている。最上位ビットは、データアドレスが１６３８４Ｂｙｔｅ／８Ｂｙｔｅ＝２０４８になるごとに０と１とが切替えられる。そして、データアドレスは、０〜２０４７をサイクリックにカウントする。
【００６９】
有効性とは、対応するヘッダーアドレスに格納されているヘッダーと、対応するデータアドレスに格納されているデータ（以下、対応するパケットという。）とが取り出し済みであるか否かを示している。有効性が０のとき、対応するパケットは取り出し済みである。有効性が１のとき、対応するパケットは格納後取り出されていないことを示している。また、有効性が０のとき、受信パケット格納部１２は、対応する記憶領域にパケットを上書きすることができるようにしても良い。
【００７０】
データサイズとは、対応するデータアドレスに格納されているデータの大きさを示している。
図６（ｂ）は、図６（ａ）の状態から、ヘッダーアドレス６〜１３に格納されているヘッダーと、データアドレス７４０〜１７２９に格納されているデータとが取り出された後のアドレステーブル２０９の値を示している。さらに、図６（ｂ）は、図６（ａ）の状態から、ヘッダーアドレス０〜７に新しいヘッダーと、データアドレス２０００〜９２６に新しいデータとが格納された後のアドレステーブル２０９の値を示している。以下説明では、簡単化のため、例えば、ヘッダーアドレス６〜１３に格納されているヘッダーと、データアドレス７４０〜１７２９に格納されているデータとが取り出されたことを、ヘッダーアドレス６〜１３に対応するパケットが取り出されたという。
【００７１】
図６（ｂ）において、最上位ビットは、データアドレス２０００〜１７０の間で切り替わっている。これは、ヘッダーアドレス０に対応するパケットのデータは、データ格納領域２０７の２０００〜２０４７、０〜１７０に格納されていることを示す。
【００７２】
図７は、最古データのアドレスを特定する処理内容を示すフローチャートである。
図７は、クレジット制御部１５が受信パケット格納部１２に格納されているパケットの中から、最古パケットを判定するときの処理内容を示すフローチャートである。
【００７３】
クレジット制御部１５は、データ転送が開始される、またはクレジット値の更新要求が出力されると、受信パケット格納部１２にパケットが格納されているか否かを判定する（Ｓ７０１）。クレジット制御部１５は、受信パケット格納部１２にパケットが格納されるまで、Ｓ７０１を繰り返す（Ｓ７０１にてＮｏ）。
【００７４】
そして、クレジット制御部１５は、受信パケット格納部１２にパケットが格納されているとき（Ｓ７０１にてＹｅｓ）、格納されているデータの最上位ビット（ＭＳＢ：Most Significant Bit）が１種類であるか否かを判定する（Ｓ７０２）。
【００７５】
クレジット制御部１５は、最上位ビットが１種類のとき（Ｓ７０２にてＹｅｓ）、最後に受信したパケットに含まれたデータである最新データを格納したアドレスの最上位ビットと、同じ最上位ビットを持つデータアドレス群を最古パケットの検索対象に選択する（Ｓ７０３）。そして、クレジット制御部１５は、選択したデータアドレス群の中で最も小さいデータアドレスのデータを含むパケットを最古パケットと判定する（Ｓ７０５）。
【００７６】
クレジット制御部１５は、最上位ビットが２種類のとき（Ｓ７０２にてＮｏ）、最後に受信したパケットに含まれたデータである最新データのアドレスの最上位ビットと異なる最上位ビットを持つデータアドレス群を最古パケットの検索対象に選択する（Ｓ７０４）。その後、クレジット制御部１５は、Ｓ７０５の処理を行なう。
【００７７】
図８は、最古データのアドレスを特定する処理の説明図である。
図８（ａ）、（ｂ）は、受信パケット格納部１２に格納されている最上位ビットが、全て同じ（１種類）であるときについて、クレジット制御部１５が受信パケット格納部１２に格納されているパケットの中から最古パケットを判定するときの処理の説明図である。
【００７８】
クレジット制御部１５は、アドレステーブル２０９を参照して、最新パケットが含むデータの最上位ビットと同じ最上位ビットのデータアドレス群の中から、最も小さいデータアドレスを抽出する。そして、クレジット制御部１５は、抽出した最も小さいデータアドレスのデータを含むパケットを最古パケットと判定する。
【００７９】
図８（ｃ）、（ｄ）は、受信パケット格納部１２に格納されている最上位ビットが、０と１（２種類）であるときについて、クレジット制御部１５が受信パケット格納部１２に格納されているパケットの中から最古パケットを判定するときの処理の説明図である。
【００８０】
クレジット制御部１５は、アドレステーブル２０９を参照して、最新パケットが含むデータの最上位ビットと異なる最上位ビットのデータアドレス群の中から、最も小さいデータアドレスを抽出する。そして、クレジット制御部１５は、抽出した最も小さいデータアドレスのデータを含むパケットを最古パケットと判定する。
【００８１】
なお、クレジット制御部１５は、受信パケット格納部１２に格納されている最上位ビットが１種類か２種類かであるかの判定は、アドレステーブル２０９を参照することにより行なえば良い。
【００８２】
図９は、クレジット値の更新の処理内容を示すフローチャートである。
図９は、図７に示す処理において、クレジット制御部１５が最古パケットを判定した後、最古パケットが取りだされたとき、クレジット値の更新要求を出力するまでの処理内容を示すフローチャートである。
【００８３】
クレジット制御部１５は、受信パケット格納部１２からパケットが取り出され、通知部２１０から取り出されたデータに関連付けられたデータ管理アドレスの最上位ビット（以下、取り出しパケットの最上位ビットという。）とデータアドレス（以下、取り出しパケットのアドレスという。）とが通知されたか否かを判定する（Ｓ９０１）。そして、通知部２１０から取り出しパケットの最上位ビットと取り出しパケットのアドレスとが通知されるまで、クレジット制御部１５は、Ｓ９０１の処理を繰り返す（Ｓ９０１にてＮｏ）。
【００８４】
また、通知部２１０から取り出しパケットの最上位ビットとアドレスとが通知されると、クレジット制御部１５は、取り出しパケットの最上位ビットが、最古パケットに含まれたデータのデータ管理アドレスの最上位ビット（以下、最古パケットの最上位ビットという。）と同じであるか判定する（Ｓ９０２）。ここで、クレジット制御部１５は、取り出しパケットの最上位ビットと、最古パケットの最上位ビットとが異なるとき、Ｓ９０１〜Ｓ９０２の処理を繰り返す（Ｓ９０２にてＮｏ）。
【００８５】
クレジット制御部１５は、取り出しパケットの最上位ビットと、最古パケットの最上位ビットが同じとき（Ｓ９０２にてＹｅｓ）、取り出しパケットのアドレスが、最古パケットに含まれたデータのデータアドレス（以下、最古パケットのアドレス、または最古パケットのデータアドレスともいう。）と同じであるか判定する（Ｓ９０３）。ここで、クレジット制御部１５は、取り出しパケットのアドレスと、最古パケットのアドレスとが異なるとき、Ｓ９０１〜Ｓ９０３の処理を繰り返す（Ｓ９０３にてＮｏ）。
【００８６】
クレジット制御部１５は、取り出しパケットのアドレスと、最古パケットのアドレスが同じとき（Ｓ９０３にてＹｅｓ）、最新追抜パケットより前に受信した追抜きパケットが全て取り出し済みであるか否かを判定する（Ｓ９０４）。なお、クレジット制御部１５は、最新追抜パケットがどのパケットであるかを判定し、その判定結果を用いてＳ９０４の処理を実行するが、その判定方法については図１０を参照して後述する。
【００８７】
最新追抜パケットより前に受信した追抜きパケットが全て取り出し済みでないとき（Ｓ９０４にてＮｏ）、最新追抜パケットよりも後に受信したパケットが取り出されたか否かを判定する（Ｓ９０５）。
【００８８】
Ｓ９０５において、最新追抜パケットよりも後に受信したパケットが取り出されていないとき（Ｓ９０５にてＮｏ）、クレジット制御部１５は、Ｓ９０４の処理を実行する。
Ｓ９０５において、最新追抜パケットよりも後に受信したパケットが取り出されているとき（Ｓ９０５にてＹｅｓ）、クレジット制御部１５は、最新追抜パケットを最新追抜パケットよりも後に受信したパケットに更新する（Ｓ９０６）。そして、クレジット制御部１５は、Ｓ９０４の処理を実行する。
【００８９】
Ｓ９０４において、最新追抜パケットより前に受信した追抜きパケットが全て取り出し済みのとき、クレジット制御部１５は、クレジット値の更新要求を出力する（Ｓ９０７）。これにより、送信部１６を介してヘッダー、およびデータのクレジット更新値がデータ転送装置２に送信され、データ転送装置２のヘッダークレジットカウント部３０１、およびデータクレジットカウント部３０２でクレジット値がカウントされる。すなわち、データ転送装置２では、ヘッダー、およびデータのクレジット値が更新されることになる。
【００９０】
次に、データ転送装置１は、データ転送が終了したか否かを判定する（Ｓ９０８）。そして、データ転送装置１は、データ転送を継続すると判定すると（Ｓ９０８にてＮｏ）、Ｓ７０１の処理を実行する。
【００９１】
また、データ転送装置１は、データ転送が終了したと判定（Ｓ９０８にてＹｅｓ）すると、データ転送処理を終了する。
なお、データカウント部２０５において、最上位ビットをカウントしない場合には、Ｓ９０２の処理を省略する。
【００９２】
図１０は、クレジット値の更新判定を時系列に説明する説明図である。
図１０は、最古パケットの最上位ビットが０、最新パケットの最上位ビットが１のとき、クレジット制御部１５がクレジット値の更新要求を出力するまでの処理を説明する説明図である。図１０（ａ）〜（ｄ）は、それぞれ、データ格納領域２０７に格納されているパケットを示す。図１０において、受信順とは、データ転送装置２からパケットを受信した順序のことである。ＭＳＢ＝０とは、最上位ビット０に対応するパケットが含むデータのデータアドレス群に対応する。また、ＭＳＢ＝１とは、最上位ビット１に対応するパケットが含むデータのデータアドレス群に対応する。以下、図１１〜図１３においても同様であるものとする。なお、時間軸は、図１０（ａ）→（ｂ）→（ｃ）→（ｄ）の順である。
【００９３】
図１０（ａ）において、クレジット制御部１５は、最新パケットの最上位ビットと異なるデータアドレス群の中で最も小さいデータアドレスのデータを含むパケットを最古パケットと判定している。
【００９４】
図１０（ｂ）において、最古パケットが取り出されたとき（Ｓ９０１、Ｓ９０２、Ｓ９０３にてＹｅｓ）、クレジット制御部１５は、最新追抜パケットを判定する。クレジット制御部１５は、例えば、最新パケットと同じ最上位ビットであり、かつ追抜きパケットの中で最も大きいデータアドレスに対応するパケット２を最新追抜パケットと判定する。そして、クレジット制御部１５は、パケット１が取り出されるか否かを判定することになる（Ｓ９０４にてＮｏ）。なお、最新パケットと最新パケットと同じ最上位ビットの追抜パケットが無いとき、クレジット制御部１５は、追抜パケットの中で最も大きいデータアドレスに対応する追抜パケットを最新追抜パケットと判定する。クレジット制御部１５の最新追抜パケットの判定は、以下の説明においても同じ方法であるものとする。
【００９５】
図１０（ｃ）において、パケット１が取り出され、図１０（ｄ）のように、最新追抜パケットより前に受信した追抜きパケットが全て取り出し済みのとき、クレジット制御部１５は、クレジット値の更新要求を出力する（Ｓ９０１〜Ｓ９０４がＹｅｓ）。そして、図１０（ｃ）において、パケット１が取り出されたことにより、最古パケットがパケット３となっているので、図１０（ｄ）のように、クレジット制御部１５は、パケット３を最古パケットと判定する（Ｓ７０１〜Ｓ７０５）。
【００９６】
なお、図１０において、取り出されたパケットが空白になっているが、実際の記憶領域には、パケットを保持したままとし、アドレステーブル２０９の有効性を０にした状態でも良い。
【００９７】
図１１は、クレジット値の更新判定をパターンごとに説明する説明図である。
図１１（ａ）は、最古パケットの最上位ビットが０、最新パケットの最上位ビットが０のとき、クレジット制御部１５がクレジット値の更新要求を出力するときに、取り出し済みのパケットを示す図である。図１１（ｂ）は、最古パケットの最上位ビットが１、最新パケットの最上位ビットが１のとき、クレジット制御部１５がクレジット値の更新要求を出力するときに、取り出し済みのパケットを示す図である。図１１（ｃ）は、最古パケットの最上位ビットが０、最新パケットの最上位ビットが１のとき、クレジット制御部１５がクレジット値の更新要求を出力するときに、取り出し済みのパケットを示す図である。図１１（ｄ）は、最古パケットの最上位ビットが１、最新パケットの最上位ビットが０のとき、クレジット制御部１５がクレジット値の更新要求を出力するときに、取り出し済みのパケットを示す図である。
【００９８】
図１１（ａ）〜（ｄ）に示すように、クレジット制御部１５は、最古パケットと最新追抜パケットと、最古パケットと最新追抜パケットとの間に受信したパケットが全て取り出されたとき、クレジット値の更新要求を出力する。
【００９９】
図１２は、最新追抜パケットの更新を時系列に説明する説明図である。
図１２は、最古パケットの最上位ビットが０、最新パケットの最上位ビットが０のとき、クレジット制御部１５が最新追抜パケットを更新する処理を説明する説明図である。
【０１００】
図１２（ａ）において、クレジット制御部１５は、通知部２１０からパケット１が取り出されたことが通知されると、最新追抜パケットをパケット１であると判定する。
【０１０１】
図１２（ｂ）において、クレジット制御部１５は、通知部２１０からパケット０が取り出されたことが通知されると、パケット０の方がパケット１よりも先に受信したパケットであるので最新追抜パケットをパケット１に維持する。
【０１０２】
図１２（ｃ）において、パケット３が取り出されて、図１２（ｄ）のようになると、パケット３の方がパケット１よりも後に受信したパケットであるので、最新追抜パケットをパケット３に更新する。
【０１０３】
なお、図１２において、取り出されたパケットが空白になっているが、実際の記憶領域には、パケットを保持したままとし、アドレステーブル２０９の有効性を０にした状態でも良い。
【０１０４】
図１３は、最新追抜パケットの更新をパターンごとに説明する説明図である。
図１３（ａ）は、最古パケットの最上位ビットが０、最新パケットの最上位ビットが０のときについて、クレジット制御部１５の最新追抜パケットの更新を説明する説明図である。図１３（ｂ）は、最古パケットの最上位ビットが１、最新パケットの最上位ビットが１のときについて、クレジット制御部１５の最新追抜パケットの更新を説明する説明図である。図１３（ｃ）は、最古パケットの最上位ビットが０、最新パケットの最上位ビットが１のときについて、クレジット制御部１５の最新追抜パケットの更新を説明する説明図である。図１３（ｄ）は、最古パケットの最上位ビットが１、最新パケットの最上位ビットが０のときについて、クレジット制御部１５の最新追抜パケットの更新を説明する説明図である。
【０１０５】
図１３（ａ）〜（ｄ）に示す右矢印は、パケットが取り出されたことを示す。
図１３（ａ）〜（ｄ）に示すように、クレジット制御部１５は、最新追抜パケットよりも後に受信したパケット２、または３が受信パケット格納部１２から取り出されたとき、取り出されたパケット２、または３を最新追抜パケットとする。なお、パケット２が取り出されたとき、クレジット制御部１５は、パケット２を最新追抜パケットに設定する。次に、パケット３が取り出されたとき、クレジット制御部１５は、パケット２よりもパケット３の方が転送元の装置から後に受信されたパケットであるので、パケット３を最新追抜パケットに設定する。
【０１０６】
図１４〜１８は、データ転送時のアドレステーブルの格納値を示すテーブルである。
図１４〜１８を参照し、図９の処理の一実施例を説明する。なお、図１４〜図１７は、一連の処理におけるアドレステーブル２０９の格納値を示している。
【０１０７】
図１４（ａ）において、最古パケットのデータアドレスは、１７３０である。そして、最古パケットに含まれるヘッダーのヘッダーアドレス（以下、最古パケットのヘッダーアドレスという。）は、１４である。
【０１０８】
一例として、クレジット制御部１５による最古パケットのデータアドレス、および最古パケットのヘッダーアドレスの判定を説明する。クレジット制御部１５は、図１４（ａ）のアドレステーブル２０９を参照して、有効性１に関連付けられたデーアアドレスを抽出する。さらに、クレジット制御部１５は、抽出したデータアドレスと関連付けられた最上位ビットが２種類有るので、最新パケットの最上位ビットと異なる最上位ビットと関連付けられたデータアドレスを抽出する。そして、クレジット制御部１５は、抽出したデータアドレスの中で一番小さいデータアドレスに該当する１７３０を最古パケットのデータアドレスと判定する。さらに、クレジット制御部１５は、データアドレス１７３０に関連付けられたヘッダーアドレスを参照し、最古パケットのヘッダーアドレスを１４と判定する。
【０１０９】
図１４（ａ）において、クレジット制御部１５は、クレジット値の更新要求を出力した直後であり、データ転送装置２にヘッダーのクレジット値として３、データのクレジット値として８０４が格納されているものとする。なお、ヘッダーのクレジット値は、一例として、クレジット値の更新要求時の有効性０の数と同じとしている。よって、図１４（ａ）のとき、ヘッダーのクレジット値は、３である。
【０１１０】
また、データのクレジット値は、一例として、データ格納領域２０７の未使用の記憶領域に対応するデータアドレスの数に対応している。よって、図１４（ａ）のとき、データのクレジット値は、１７３０−（６７０＋２５６）＝８０４である。以下、ヘッダーのクレジット値と、データのクレジット値とは、クレジット制御部１５により同様に算出されているものとする。
【０１１１】
図１４（ｂ）において、ヘッダーアドレス４に格納されたヘッダーを含むパケットが取り出されると、アドレステーブル生成部２０８は、アドレステーブル２０９におけるヘッダーアドレス４に対応する有効性を０とする。
【０１１２】
図１５（ａ）において、パケットを受信すると、ヘッダーアドレス設定部２０３は、パケットに含まれるヘッダーをヘッダーアドレス８の記憶領域に格納する。
また、図１５（ａ）において、データアドレス設定部２０６は、前回パケットに含まれた２０４８Ｂｙｔｅのデータをデータアドレス６７０に格納したとき、今回パケットに含まれるデータを格納するデータアドレスを６７０＋２０４８／８＝９２６にする。そして、アドレステーブル生成部２０８は、アドレステーブル２０９におけるヘッダーアドレス８に対応する有効性を１とする。
【０１１３】
図１５（ｂ）において、ヘッダーアドレス０に格納されたヘッダーを含むパケットが取り出されると、アドレステーブル生成部２０８は、アドレステーブル２０９におけるヘッダーアドレス０に対応する有効性を０とする。
【０１１４】
図１６（ａ）において、ヘッダーアドレス１４に格納されたヘッダーを含むパケットが取り出されると、アドレステーブル生成部２０８は、アドレステーブル２０９におけるヘッダーアドレス１４に対応する有効性を０とする。
【０１１５】
図１６（ｂ）において、パケットを受信すると、ヘッダーアドレス設定部２０３は、パケットに含まれるヘッダーをヘッダーアドレス１０の記憶領域に格納する。
また、図１６（ｂ）において、データアドレス設定部２０６は、前回パケットに含まれた２０００Ｂｙｔｅのデータをデータアドレス９２６に格納したとき、今回パケットに含まれるデータを格納するデータアドレスを９２６＋２０００／８＝１１７６にする。そして、アドレステーブル生成部２０８は、アドレステーブル２０９におけるヘッダーアドレス１０に対応する有効性を１とする。
【０１１６】
図１７において、ヘッダーアドレス２に格納されたヘッダーを含むパケットが取り出されると、アドレステーブル生成部２０８は、アドレステーブル２０９におけるヘッダーアドレス１４に対応する有効性を０とする。そして、クレジット制御部１５は、Ｓ９０２〜Ｓ９０４がＹｅｓと判定し、クレジット値の更新要求を出力する。
【０１１７】
このとき、クレジット制御部１５は、ヘッダー格納領域２０４で有効性が新たに０となった、ヘッダーアドレス１４、１５、０〜５に格納可能なアドレス数８に格納可能なヘッダーの数４を、ヘッダーのクレジット更新値としてデータ転送装置２へ送信する。
【０１１８】
すなわち、クレジット制御部１５は、クレジット値の更新要求として、最古パケットに含まれるヘッダーのヘッダーアドレスから、次にヘッダーが格納されているヘッダーアドレスまでに関連付けられたヘッダーの数をヘッダーのクレジット更新値とする。そして、クレジット制御部１５は、ヘッダーのクレジット更新値をデータ転送装置２が有するヘッダークレジットカウント部３０１のヘッダーのクレジット値に加算させる要求を出力する。
【０１１９】
また、クレジット制御部１５は、データ格納領域２０７で有効性が新たに０となったデータアドレスに対応するデータアドレスである、１７３０〜２０４７、０〜６６９に対応するデータアドレス数をデータのクレジット更新値としてデータ転送装置２へ送信する。なお、クレジット制御部１５は、（２０４７−１７３０＋１）＋（６６９−０＋１）＝９８８をデータのクレジット更新値とする。
【０１２０】
すなわち、クレジット制御部１５は、クレジット値の更新要求として、最古パケットに含まれるデータのデータアドレスから、次にデータが格納されているデータアドレスまでに指定される記憶領域の大きさに比例した値を、データのクレジット更新値とすれば良い。そして、クレジット制御部１５は、データのクレジット更新値をデータ転送装置２が有するデータクレジットカウント部３０２のデータのクレジット値に加算させる要求を出力する。
【０１２１】
これにより、送信部１６を介してヘッダー、およびデータのクレジット更新値がデータ転送装置２に送信され、データ転送装置２のヘッダークレジットカウント部３０１、およびデータクレジットカウント部３０２でクレジット値がカウントされる。そして、データ転送装置２では、ヘッダーのクレジット値として５、データのクレジット値として１３４２を格納することになる。
【０１２２】
図１８（ａ）は、図１６（ｂ）の次に、ヘッダーアドレス８に格納されたヘッダーを含むパケットが取り出されたときを示している。この場合、アドレステーブル生成部２０８は、アドレステーブル２０９におけるヘッダーアドレス８に対応する有効性を０とする（Ｓ９０５にてＹｅｓ）。
【０１２３】
このとき、クレジット制御部１５は、最新追抜パケットをヘッダーアドレス８に格納されるヘッダーを含むパケットに更新する（Ｓ９０６）。
そして、図１８（ｂ）において、ヘッダーアドレス２とヘッダーアドレス６とに格納されたヘッダーを含むパケットが取り出されると、アドレステーブル生成部２０８は、それぞれに対応する有効性を０とする。そして、クレジット制御部１５は、Ｓ９０２〜Ｓ９０４がＹｅｓと判定し、クレジット値の更新要求を出力する。
【０１２４】
このとき、クレジット制御部１５は、ヘッダー格納領域２０４で有効性が新たに０となった、ヘッダーアドレス１４、１５、０〜９に格納可能なアドレス数１２に格納可能なヘッダーの数６を、ヘッダーのクレジット更新値としてデータ転送装置２へ送信する。
【０１２５】
また、クレジット制御部１５は、データ格納領域２０７で有効性が新たに０となったデータアドレスに対応するデータアドレスである、１７３０〜２０４７、０〜１１７５に対応するデータアドレス数をデータのクレジット更新値としてデータ転送装置２へ送信する。なお、クレジット制御部１５は、（２０４７−１７３０＋１）＋（１１７５−０＋１）＝１４９４をデータのクレジット更新値とする。
【０１２６】
これにより、送信部１６を介してヘッダー、およびデータのクレジット更新値がデータ転送装置２に送信され、データ転送装置２のヘッダークレジットカウント部３０１、およびデータクレジットカウント部３０２でクレジット値がカウントされる。そして、データ転送装置２では、ヘッダーのクレジット値として７、データのクレジット値として１８４８を格納することになる。
【０１２７】
図１９は、実施形態のデータ転送装置をＰＣＩｅに適用したときの機能ブロック図である。
図１９は、図１のデータ転送装置１の処理部１３が、アドレス変換部１３１、ホストバス送信部１３２、およびホストバス受信部１３３を備えるものである。また、ホストバス送信部１３２と、ホストバス受信部１３３は、例えば、ホストバス３を介してメモリ４に接続されているものとする。また、ホストバス３は、要求受信部３１、応答送信部３２を有する。そして、メモリ４は、アドレス変換テーブル３３を有する。
【０１２８】
また、図１９において、データ転送装置１は、ルート・コンプレックスであるものとする。また、データ転送装置２は、エンドポイントであるものとする。
図１９において、図１にはない機能について説明する。
【０１２９】
アドレス変換部１３１は、仮想アドレスが入力されると、メモリ４上のアドレス変換テーブル３３をフェッチする（読み込む）要求を、ホストバス送信部１３２を介してメモリ４に送信する。そして、メモリ４からの応答として取得したアドレス変換テーブル３３のエントリを参照して、仮想アドレスを物理アドレスに変換する。さらに、受信パケット格納部１２に格納されているデータをメモリ４上の対応する物理アドレスが指定する記憶領域に記憶する要求を、ホストバス送信部１３２を介して送信する。
【０１３０】
ホストバス送信部１３２は、データ転送装置１から出力されるデータ処理の要求を含むパケットを、ホストバス３を介してメモリ４に送信する。
ホストバス受信部１３３は、ホストバス３を介して送信される、メモリ４からのデータ処理の要求を含むパケットに対する応答を受信する。
【０１３１】
要求受信部３１は、ホストバス送信部１３２から送信されたデータ処理の要求を含むパケットを受信して、メモリ４に転送する。
応答送信部３２は、メモリ４から出力されたデータ処理の要求を含むパケットに対する応答をホストバス受信部１３３に転送する。
【０１３２】
アドレス変換テーブル３３は、仮想アドレスを物理アドレスに変換するための、仮想アドレスと物理アドレスとを対応させたテーブルである。
なお、要求受信部３１と、応答送信部３２として、実施形態のデータ転送装置を用いても良い。
【０１３３】
図２０は、実施形態のデータ転送装置をＰＣＩｅに適用したときのメモリライト時におけるデータ転送の処理内容を示すフローチャートである。
データ転送装置２から、データ転送装置１にメモリ４にデータを書き込みする要求するメモリライト要求パケットが送信される。データ転送装置１は、メモリライト要求パケットを受信する（Ｓ２００１にてＹｅｓ）と、パケット分割部２０１でヘッダーとデータとにパケットを分割して、それぞれをヘッダー格納領域２０４とデータ格納領域２０７に格納する（Ｓ２００２）。なお、データ転送装置１は、メモリライト要求パケットを受信するまで、Ｓ２００１の処理を繰り返す（Ｓ２００１にてＮｏ）。
【０１３４】
受信パケット格納部１２は、メモリライト要求パケットに含まれる仮想アドレスを含むアドレス変換要求をアドレス変換部１３１に出力する（Ｓ２００３）。
そして、アドレス変換部からメモリ４上のアドレス変換テーブルを読み込むためのメモリリード要求を出力し（Ｓ２００４）、ホストバス送信部１３２を介してホストバス３の要求受信部３１にメモリリード要求を送信する（Ｓ２００５）。
【０１３５】
要求受信部３１は、受信したメモリリード要求をメモリ４に転送する（Ｓ２００６）。
応答送信部３２は、アドレス変換テーブル３３を読み込むためのメモリリード要求に対する応答として、アドレス変換テーブル３３に格納されている仮想アドレスと物理アドレスとの対応関係を示すアドレス変換エンティティを含む応答（応答パケット）をメモリ４から受信する。そして、応答送信部３２は、ホストバス３を介して、アドレス変換エンティティを含む応答をホストバス受信部１３３に送信する（Ｓ２００７）。
【０１３６】
ホストバス受信部１３３は、アドレス変換エンティティを含む応答をアドレス変換部１３１に転送する（Ｓ２００８）。
アドレス変換部１３１は、入力されたアドレス変換エンティティの情報を解釈し、仮想アドレスを物理アドレスに変換し、受信パケット格納部１２に通知する（Ｓ２００９）。
【０１３７】
処理部１３は、受信パケット格納部１２からメモリライト要求パケットのヘッダーとデータと物理アドレスとを抽出する。処理部１３は、抽出したヘッダーとデータとを取り出し、物理アドレスを保持するメモリライト要求パケットを、ホストバス送信部１３２に出力する（Ｓ２０１０）。
【０１３８】
そして、データ転送装置１は、Ｓ７０１〜Ｓ７０５、およびＳ９０１〜Ｓ９０８で説明した、最古データのアドレスを特定する処理とクレジット値を更新する処理とを行なう（Ｓ２０１１）。なお、最古パケットを特定する処理は、Ｓ２０１１の前に予め行なっていても良い。
【０１３９】
ホストバス送信部１３２は、ホストバス３を介して要求受信部３１にメモリライト要求パケットを送信する（Ｓ２０１２）。
要求受信部３１が受信したメモリライト要求パケットをメモリ４に転送することで、メモリライト要求パケットに含まれるデータは、メモリ４上のメモリライト要求パケットに保持された物理アドレスに対応する記憶領域に書き込まれる（Ｓ２０１３）。
【０１４０】
以上に説明したデータ転送装置１は、受信パケット格納部１２からのパケットの取り出しの順序を、データ転送装置２からのパケットの受信順とは異なる順序で取り出せるようにした。すなわち、データ転送装置１は、先に受信したパケットを追い抜いて後に受信したパケットを転送先の装置に転送可能な構成を有する。
【０１４１】
上記の構成により、図２１に示すように、例えば、データ転送装置１は、データ転送装置２からパケット０、パケット１の順でパケットを受信したとする。さらに、データ転送装置１は、転送先の装置（処理部１３）からパケット１の取り出し要求を、パケット０の取り出し要求よりも先に受信したとする。
【０１４２】
このとき、図２１に示すように従来技術のデータ転送装置では、常に受信順でパケットを処理部に取り出すので、パケット０を取り出した後にパケット１を取り出す。これに対して、実施形態のデータ転送装置１は、転送先の装置からのパケットの取り出し要求に応じて、パケット１を取り出した後にパケット０を取り出す。すなわち、実施形態のデータ転送装置１は、転送先の装置のデータ処理で必要なパケットを、必要なときに送信する。よって、実施形態のデータ転送装置１は、パケットの取り出しのレイテンシを改善させることができる。これにより、実施形態のデータ転送装置１は、転送先の装置のデータ処理において、必要なパケットの受信待ちに起因するデータ処理の保留時間を減少させ、転送先の装置から次のパケットの受信要求を受信するまでの時間を短くすることができる。したがって、実施形態のデータ転送装置１は、データ転送におけるスループットを向上させることができる。
【０１４３】
また、以上に説明したデータ転送装置１は、データ格納領域２０７に一つのデータを格納する記憶領域を固定の大きさではなく、データの大きさに応じた大きさにする構成を有する。以下に、実施形態のデータ転送装置１の構成による効果を従来技術と比較して説明する。
【０１４４】
図２２に示すように、従来技術のデータ転送装置では、パケットに含まれるデータの大きさの最大値（ＭＰＳ：Ｍaximum Ｐayload Ｓize）と同じ大きさの記憶領域を用いて１つのデータを格納していた。この場合、データの大きさが最大値よりも小さい場合でも、データ格納領域２０７の記憶領域をデータの大きさの最大値と同じだけ使用する。しかし、実際には、パケットに含まれるデータの大きさは、最大値の半分程度であることが多く、データ格納領域２０７の資源を有効活用できていなかった。
【０１４５】
これに対して、実施形態のデータ転送装置１は、受信したパケットに含まれるデータの大きさに応じて、使用するデータ格納領域２０７の記憶領域の大きさ（アドレス数）を設定するので、データ格納領域２０７の資源を有効活用することができる。これにより、実施形態のデータ転送装置１は、データ格納領域２０７を、ヘッダーのクレジット値×ＭＰＳ／２程度としても、従来技術のデータ転送装置と同程度のデータを格納することができる。
【０１４６】
また、実施形態のデータ転送装置１は、最古パケットが取り出されたときに、追抜パケットに対応するクレジット値も一括して更新するようにした。これにより、従来技術のように、１つのパケットを取り出すたびにクレジット値の更新をするのに比較して、実施形態のデータ転送装置１は、クレジット値の更新の回数が少なくなる。このため、実施形態のデータ転送装置１は、クレジット値の更新によるオーバーヘッドを従来技術のデータ転送装置と比較して少なくすることができる。よって、実施形態のデータ転送装置１は、データ転送におけるスループットを向上させることができる。
【符号の説明】
【０１４７】
１、２        データ転送装置
３            ホストバス
１１、２１    受信部
１２、２２    受信パケット格納部
１３、２３    処理部
１４、２４    送信パケット格納部
１５、２５    クレジット制御部
１６、２６    送信部
３１          要求受信部
３２          応答送信部
３３          アドレス変換テーブル
１３１          アドレス変換部
１３２          ホストバス送信部
１３３          ホストバス受信部
２０１          パケット分割部
２０２          ヘッダーカウント部
２０３          ヘッダーアドレス設定部
２０４          ヘッダー格納領域
２０５          データカウント部
２０６          データアドレス設定部
２０７          データ格納領域
２０８          アドレステーブル生成部
２０９          アドレステーブル
２１０          通知部
３０１          ヘッダークレジットカウント部
３０２          データクレジットカウント部
３０３          送信制御部
４０１、４１１  制御回路
４０２、４１２  記憶装置
４０３、４１３  通信インターフェイス
【図１】
2014049936.tif 000003
【図２】
2014049936.tif 000004
【図３】
2014049936.tif 000005
【図４】
2014049936.tif 000006
【図５】
2014049936.tif 000007
【図６】
2014049936.tif 000008
【図７】
2014049936.tif 000009
【図８】
2014049936.tif 000010
【図９】
2014049936.tif 000011
【図１０】
2014049936.tif 000012
【図１１】
2014049936.tif 000013
【図１２】
2014049936.tif 000014
【図１３】
2014049936.tif 000015
【図１４】
2014049936.tif 000016
【図１５】
2014049936.tif 000017
【図１６】
2014049936.tif 000018
【図１７】
2014049936.tif 000019
【図１８】
2014049936.tif 000020
【図１９】
2014049936.tif 000021
【図２０】
2014049936.tif 000022
【図２１】
2014049936.tif 000023
【図２２】
2014049936.tif 000024
【手続補正書】
【提出日】平成25年8月5日(2013.8.5)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
転送元の装置から受信したパケットを格納し、該格納したパケットを受信した順序とは異なる順序で取り出すことができる受信パケット格納部と、
前記受信パケット格納部に格納されているパケットの中で、前記転送元の装置から最初に受信したパケットである最古パケットが取り出されたとき、前記受信パケット格納部が受信可能なデータの大きさを示すクレジット値の更新要求を出力するクレジット制御部と、
前記クレジット制御部から出力された前記クレジット値の更新要求を前記転送元の装置に送信する送信部と、
を備えることを特徴とするデータ転送装置。
【請求項２】
前記クレジット制御部は、
前記最古パケットよりも後に前記転送元の装置から受信したパケットである後続パケットの中で、前記最古パケットよりも先に前記受信パケット格納部から取り出された追抜パケットがあるとき、前記最古パケットが前記受信パケット格納部から取り出され、かつ、前記追抜パケットの中で、前記転送元の装置から受信した順序が最後である最新追抜パケットより先に受信した後続パケットが全て取り出された状態になると、前記クレジット値の更新要求を出力する
ことを特徴とする請求項１に記載のデータ転送装置。
【請求項３】
前記パケットに含まれるデータを格納する記憶領域として、前記受信パケット格納部が有するデータ格納領域において、前記データを格納する記憶領域を指定するデータアドレスを設定するデータアドレス設定部と、
前記各パケットについて、前記データアドレス設定部で設定された、前記データアドレスと、前記データアドレスの指定する記憶領域に格納されたデータを識別するデータ識別情報とを関連付けて格納したアドレステーブルを生成するアドレステーブル生成部と、
前記受信パケット格納部からパケットが取り出されたとき、前記アドレステーブルを参照して、該パケットに含まれるデータのデータアドレスを抽出し、該抽出したデータアドレスを前記クレジット制御部に通知する通知部と、
を備え、
前記クレジット制御部は、
前記データ通知部からデータアドレスが通知されたとき、アドレステーブルを参照し、該通知されたデータアドレスが前記最古パケットに含まれたデータのデータアドレスと同じ場合、前記最古パケットが前記受信パケット格納部から取り出されたと判定する
ことを特徴とする請求項１または２に記載のデータ転送装置。
【請求項４】
前記転送元の装置から前記パケットを受信するごとに、前記パケットに含まれるデータの大きさを前記各データアドレスに割り当てられた記憶領域の大きさで除算した値を、前記データ格納領域に設定された前記データアドレスの数と同じ値に、最上位ビットとして１ｂｉｔを付加し、前記データアドレスの数の２倍の値までサイクリックにカウントするデータカウント部を備え、
前記データアドレス設定部は、
前記受信したパケットに含まれるデータのデータアドレスを、前記転送元の装置から前回パケットを受信したとき、前記データカウント部でカウントされた値から最上位ビットを除いた値に設定し、
前記アドレステーブル生成部は、
前記各パケットについて、前記最上位ビットと、前記データアドレスと、前記データ識別情報とを関連付けて格納したアドレステーブルを生成し、
前記通知部は、
前記受信パケット格納部からパケットが取り出されたとき、前記アドレステーブルを参照して、該パケットに含まれるデータの最上位ビットとデータアドレスとを抽出し、該抽出した最上位ビットとデータアドレスとを前記クレジット制御部に通知し、
前記クレジット制御部は、
前記受信パケット格納部に格納されている各データのデータアドレスと関連付けられた最上位ビットが１種類のとき、前記データアドレスが一番古いデータを含むパケットを最古パケットと判定し、
前記受信パケット格納部に格納されている各データのデータアドレスと関連付けられた最上位ビットが２種類のとき、前記転送元の装置から最後に受信した最新パケットのデータアドレスに関連付けられた最上位ビットと異なる最上位ビットが関連付けられた前記データアドレスの中で、前記データアドレスが一番古いデータを含むパケットを最古パケットと判定し、
前記データ通知部から最上位ビットとデータアドレスとが通知されたとき、アドレステーブルを参照し、該通知された最上位ビットとデータアドレスとが前記最古パケットに含まれたデータの最上位ビットとデータアドレスとに同じ場合、前記最古パケットが前記受信パケット格納部から取り出されたと判定する
ことを特徴とする請求項３に記載のデータ転送装置。
【請求項５】
前記クレジット制御部は、
前記クレジット値の更新要求として、前記最古パケットに含まれるデータのデータアドレスから、次にデータが格納されているデータアドレスまでに関連付けられた記憶領域の大きさに比例した値であるデータのクレジット更新値を、前記転送元の装置が有するデータのクレジット値に加算させる要求を出力する
ことを特徴とする請求項３または４に記載のデータ転送装置。
【請求項６】
前記パケットに含まれるヘッダーを格納する記憶領域として、前記受信パケット格納部が有するヘッダー格納領域において、前記ヘッダーを格納する記憶領域を指定するヘッダーアドレスを設定するヘッダーアドレス設定部を備え、
前記アドレステーブル生成部は、
前記各パケットについて、前記ヘッダーアドレス設定部で設定された、前記ヘッダーアドレスと、前記ヘッダーアドレスの指定する記憶領域に格納されたヘッダーを識別するヘッダー識別情報と、前記データアドレス設定部で設定された、前記データアドレスと、前記データ識別情報とを関連付けて格納したアドレステーブルを生成する
ことを特徴とする請求項３〜５のいずれか一つに記載のデータ転送装置。
【請求項７】
前記転送元の装置から前記パケットを受信するごとに、前記ヘッダー格納領域に設定された前記ヘッダーアドレスの数と同じ値まで、前記受信したヘッダーの大きさに比例した値をサイクリックにカウントするヘッダーカウント部を備え、
前記ヘッダーアドレス設定部は、
前記受信したパケットに含まれるヘッダーのヘッダーアドレスを、前記転送元の装置から前回パケットを受信したとき、前記ヘッダーカウント部でカウントされた値に設定する
ことを特徴とする請求項６に記載のデータ転送装置。
【請求項８】
前記クレジット制御部は、
前記クレジット値の更新要求として、前記最古パケットに含まれるヘッダーのヘッダーアドレスから、次にヘッダーが格納されているヘッダーアドレスまでに関連付けられたヘッダーの数であるヘッダーのクレジット更新値を、前記転送元の装置が有するヘッダーのクレジット値に加算させる要求を出力する
ことを特徴とする請求項６または７に記載のデータ転送装置。
【請求項９】
パケットの取り出しが可能になった時に、前記アドレステーブルを参照し、前記取り出し要求されたパケットのヘッダーとデータとを抽出し、該抽出したヘッダーとデータとを含むパケットを生成し、前記転送先の装置に送信する処理部を備えることを特徴とする請求項６〜８のいずれか一つに記載のデータ転送装置。
【請求項１０】
転送先の装置へ送信するパケットを格納する送信パケット格納部と、
前記転送先の装置から受信した、前記転送先の装置が受信可能なデータの大きさに比例した値であるデータのクレジット更新値をカウントしてデータのクレジット値を求めるデータクレジットカウント部と、
前記転送先の装置から受信した、前記転送先の装置が受信可能なヘッダーの数であるヘッダーのクレジット更新値をカウントしてヘッダーのクレジット値を求めるヘッダークレジットカウント部と、
前記データのクレジット値が前記送信するパケットに含まれるデータの大きさ以上のデータを送信可能であることを示し、かつ、前記ヘッダーのクレジット値が１以上であるとき、前記送信パケット格納部からパケットを取り出して、送信部に出力する送信制御部と、
を備えることを特徴とする請求項１〜９のいずれか一つに記載のデータ転送装置。
【請求項１１】
転送元の装置から受信したパケットを、該パケットを格納する受信パケット格納部に格納し、
前記受信パケット格納部に格納したパケットを取り出し可能になった順序で取り出し、
前記受信パケット格納部に格納されているパケットの中で、前記転送元の装置から最初に受信したパケットである最古パケットが取り出されたとき、前記受信パケット格納部が受信可能なデータの大きさを示すクレジット値の更新要求を出力する、
ことを特徴とするデータ転送方法。
【請求項１２】
転送元の装置から受信したパケットを、該パケットを格納する受信パケット格納部に格納し、
前記受信パケット格納部に格納したパケットを取り出し可能になった順序で取り出し、
前記受信パケット格納部に格納されているパケットの中で、前記転送元の装置から最初に受信したパケットである最古パケットが取り出されたとき、前記受信格納部が受信可能なデータの大きさを示すクレジット値の更新要求を出力する、
処理をコンピュータに実行させることを特徴とするデータ転送プログラム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００２３
【補正方法】変更
【補正の内容】
【００２３】
送信パケット格納部１４は、データのクレジット値が送信するパケットに含まれるデータの大きさ以上のデータを送信可能であることを示し、かつ、ヘッダーのクレジット値が１以上であるときパケットを出力する。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００５４
【補正方法】変更
【補正の内容】
【００５４】
送信制御部３０３は、データのクレジット値が送信するパケットに含まれるデータの大きさ以上のデータを送信可能であることを示し、かつ、ヘッダーのクレジット値が１以上であるとき、図示しないパケット格納領域からパケットを取り出す。そして、送信制御部３０３は、取り出したパケットを送信部１６に出力し、送信部１６を介して転送先の装置へパケットを送信する制御をする。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００６２
【補正方法】変更
【補正の内容】
【００６２】
そして、データ転送装置２の送信制御部３０３は、データのクレジット値が送信するパケットに含まれるデータの大きさ以上のデータを送信可能であることを示し、かつ、ヘッダーのクレジット値が１以上であるとき、１パケットずつデータを転送する。これにより、データ転送装置１は、データ転送装置２から送信されるパケットの受信を開始する（Ｓ５０３）。