(57)【特許請求の範囲】
【請求項１】
第１の装置から送出される転送要求に応じて第２の装置から送出されるデータである応答データを前記第２の装置から受信すると、受信した応答データを、該応答データに含まれる識別情報として、前記第２の装置に対する命令を表す情報と、前記転送要求と前記応答データとを対応付けるための情報との組合せを用いて、当該識別情報ごとにバッファに格納する格納制御部と、
前記格納制御部によりバッファに格納された応答データの数を前記識別情報ごとに計数する計数部と、
前記計数部により計数された応答データの数が前記識別情報ごとに予め定められた所定値である前記応答データの分割数に達するか否かを判定する判定部と、
前記識別情報ごとに前記バッファに格納された前記応答データのうち、前記判定部により応答データの数が前記応答データの分割数に達したと判定された前記識別情報に対応する前記応答データを前記バッファから読み出して前記第１の装置へ転送する転送部と
を備えたことを特徴とするデータ転送装置。
【請求項２】
第１の装置から送出される転送要求に応じて第２の装置から送出されるデータである応答データを前記第２の装置から受信すると、受信した応答データを該応答データに含まれる識別情報ごとにバッファに格納する格納制御部と、
前記格納制御部によりバッファに格納された応答データの数を前記識別情報ごとに計数する計数部と、
前記計数部により計数された応答データの数が前記識別情報ごとに予め定められた所定値に達するか否かを判定する判定部と、
前記判定部により応答データの数が所定値に達したと判定された前記識別情報に対応する前記応答データを前記バッファから読み出して前記第１の装置へ転送する転送部と
前記識別情報と前記識別情報で識別される応答データの分割数とを含む前記転送要求を前記第１の装置から受信すると、受信した前記転送要求に含まれる前記分割数を前記所定値として前記識別情報に対応付けて記憶する分割数記憶部と
を備え、
前記計数部は、前記分割数記憶部に記憶されている前記分割数の中から前記格納制御部により受信された応答データの前記識別情報に対応する前記分割数を取得し、取得した前記分割数を用いてカウンタの初期値を設定し、前記格納制御部により応答データが受信される毎に該カウンタの値をデクリメントしていくことにより、前記応答データの数を前記識別情報ごとに計数し、
前記判定部は、前記カウンタの値が０となった場合に、前記応答データの数が前記所定値としての前記分割数に達したと判定し、
前記転送部は、前記判定部により応答データの数が前記分割数に達したと判定された前記識別情報に対応する前記応答データを前記バッファから読み出して前記第１の装置へ転送することを特徴とするデータ転送装置。
【請求項３】
前記バッファは、前記識別情報を格納するレスポンスヘッダ格納領域と、前記識別情報ごとの受信した応答データを格納するレスポンスデータ格納領域と、前記識別情報ごとの受信した応答データの数の計数値を格納するカウント値格納領域とを一組のグループとして関連付けたデータのグループであるエントリを複数有し、
前記格納制御部は、受信した応答データの識別情報が前記いずれかのレスポンスヘッダ格納領域に格納されている場合には、当該レスポンスヘッダ格納領域に対応するエントリのレスポンスデータ格納領域に応答データを格納し、受信した応答データの識別情報が前記いずれのレスポンスヘッダ格納領域にも格納されていない場合には、空いているエントリのレスポンスヘッダ格納領域及びレスポンスデータ格納領域のそれぞれに受信した応答データの識別情報及び応答データを格納し、
前記計数部は、受信した応答データの識別情報が格納されたレスポンスヘッダ格納領域に対応するエントリのカウント値格納領域に格納された値を更新する
ことを特徴とする請求項１又は２に記載のデータ転送装置。
【請求項４】
データ転送装置によって実行されるデータ転送方法であって、
前記データ転送装置が、
第１の装置から送出される転送要求に応じて第２の装置から送出されるデータである応答データを前記第２の装置から受信すると、受信した応答データを、該応答データに含まれる識別情報として、前記第２の装置に対する命令を表す情報と、前記転送要求と前記応答データとを対応付けるための情報との組合せを用いて、当該識別情報ごとにバッファに格納する格納制御ステップと、
前記格納制御ステップによりバッファに格納された応答データの数を前記識別情報ごとに計数する計数ステップと、
前記計数ステップにより計数された応答データの数が前記識別情報ごとに予め定められた所定値である前記応答データの分割数に達するか否かを判定する判定ステップと、
前記識別情報ごとに前記バッファに格納された前記応答データのうち、前記判定ステップにより応答データの数が前記応答データの分割数に達したと判定された前記識別情報に対応する前記応答データを前記バッファから読み出して前記第１の装置へ転送する転送ステップと
を含むことを特徴とするデータ転送方法。
【請求項５】
データ転送装置によって実行されるデータ転送方法であって、
第１の装置から送出される転送要求に応じて第２の装置から送出されるデータである応答データを前記第２の装置から受信すると、受信した応答データを該応答データに含まれる識別情報ごとにバッファに格納する格納制御ステップと、
前記格納制御ステップによりバッファに格納された応答データの数を前記識別情報ごとに計数する計数ステップと、
前記計数ステップにより計数された応答データの数が前記識別情報ごとに予め定められた所定値に達するか否かを判定する判定ステップと、
前記判定ステップにより応答データの数が所定値に達したと判定された前記識別情報に対応する前記応答データを前記バッファから読み出して前記第１の装置へ転送する転送ステップと
前記識別情報と前記識別情報で識別される応答データの分割数とを含む前記転送要求を前記第１の装置から受信すると、受信した前記転送要求に含まれる前記分割数を前記所定値として前記識別情報に対応付けて分割数記憶部に記憶する分割数記憶ステップと
を含み、
前記計数ステップは、前記分割数記憶部に記憶されている前記分割数の中から前記格納制御ステップにより受信された応答データの前記識別情報に対応する前記分割数を取得し、取得した前記分割数を用いてカウンタの初期値を設定し、前記格納制御ステップにより応答データが受信される毎に該カウンタの値をデクリメントしていくことにより、前記応答データの数を前記識別情報ごとに計数し、
前記判定ステップは、前記カウンタの値が０となった場合に、前記応答データの数が前記所定値としての前記分割数に達したと判定し、
前記転送ステップは、前記判定ステップにより応答データの数が前記分割数に達したと判定された前記識別情報に対応する前記応答データを前記バッファから読み出して前記第１の装置へ転送することを特徴とするデータ転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ転送装置及びデータ転送方法に関する。
【背景技術】
【０００２】
従来、第１の装置から送出される転送要求に応じて第２の装置から送出される応答データを第２の装置から受信し、受信した応答データを第１の装置へ転送するデータ転送装置が知られている。
【０００３】
このようなデータ転送装置では、制御の容易性に鑑みて、データの転送方式としてＦＩＦＯ（First In First Out）方式を採用しているものが多い。ＦＩＦＯ方式とは、バッファ等の記憶領域に格納したデータを古く格納した順番に読み出して転送するデータの転送方式である。
【０００４】
具合的には、ＦＩＦＯ方式を採用するデータ転送装置は、応答データを第２の装置から受信すると、受信した応答データを該応答データを識別するタグごとにバッファに格納する。そして、データ転送装置は、最初に受信した応答データのタグに対応するバッファから順番にデータを読み出して第１の装置へ転送する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−１３５５７２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した従来のデータ転送装置では、装置のスループットが低下するという問題がある。
【０００７】
具体的には、上述した従来のデータ転送装置では、ＦＩＦＯ方式を採用しているため、ある応答データのタグに対応するバッファのデータ格納量が予め定められた上限値に到達したとしても当該応答データを読み出して第１の装置へ転送できない場合がある。例えば、応答データＡに対応するバッファのデータ格納量が上限値に到達しても、応答データＡよりも以前に受信した応答データＢに対応するバッファのデータ格納量が上限値に到達していないと、応答データＢよりも先に応答データＡを転送することができない。この場合、上述した従来のデータ転送装置では、第１の装置への応答データの転送が遅延し、装置のスループットが低下する。
【０００８】
開示の技術は、上記に鑑みてなされたものであって、装置のスループットを向上することができるデータ転送装置及びデータ転送方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本願の開示するデータ転送装置は、第１の装置から送出される転送要求に応じて第２の装置から送出されるデータである応答データを前記第２の装置から受信すると、受信した応答データを該応答データに含まれる識別情報ごとにバッファに格納する格納制御部を備える。また、データ転送装置は、前記格納制御部によりバッファに格納された応答データの数を前記識別情報ごとに計数する計数部を備える。また、データ転送装置は、前記計数部により計数された応答データの数が前記識別情報ごとに予め定められた所定値に達するか否かを判定する判定部を備える。また、データ転送装置は、前記判定部により応答データの数が所定値に達したと判定された前記識別情報に対応する前記応答データを前記バッファから読み出して前記第１の装置へ転送する転送部を備える。
【発明の効果】
【００１０】
本願の開示するデータ転送装置の一つの態様によれば、装置のスループットを向上することができるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】図１は、本実施例に係るデータ転送装置を含むシステム構成例を示す説明図である。
【図２】図２は、ＰＣＩｅにおけるデータ転送の階層構造を示す図である。
【図３】図３は、ＰＣＩｅにおけるパケット構造を示す図である。
【図４】図４は、本実施例に係るデータ転送装置の構成を示すブロック図である。
【図５】図５は、パケットスコアボードの一例を示す図である。
【図６】図６は、受信バッファの一例を示す図である。
【図７】図７は、本実施例に係るデータ転送装置によるデータ転送処理の処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下に、本願の開示するデータ転送装置及びデータ転送方法の実施例を図面に基づいて詳細に説明する。以下の実施例では、本願の開示するデータ転送装置を、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）規格に準拠したＲｏｏｔ  Ｃｏｍｐｌｅｘ等のデータ転送装置に適用する例を説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例】
【００１３】
まず、図１を用いて、本実施例に係るデータ転送装置を含むシステム構成例について説明する。図１は、本実施例に係るデータ転送装置を含むシステム構成例を示す説明図である。同図に示すように、本実施例に係るシステム１０は、データ転送装置１００、入出力デバイス２０及びホストブリッジ装置３０を備える。
【００１４】
データ転送装置１００は、入出力デバイス２０とホストブリッジ装置３０との間のデータ通信を制御する。データ転送装置１００は、入出力デバイス２０から送出されるリクエストパケットから所定のプロトコルに従った複数のリクエストを生成し、生成したリクエストをホストブリッジ装置３０へ順次送出する。また、データ転送装置１００は、リクエストに応じてホストブリッジ装置３０から送出されるデータを含めたレスポンスパケットを生成し、生成したレスポンスパケットを入出力デバイス２０へ送出する。
【００１５】
入出力デバイス２０は、ディスク装置やネットワークインターフェース装置等の各種デバイスである。入出力デバイス２０は、データの送出を要求するリクエストパケットを生成し、生成したリクエストパケットをデータ転送装置１００へ送出する。リクエストパケットには、コマンド、タグなどの情報が含まれる。コマンドは、ホストブリッジ装置３０に対する種々の命令を表す情報である。タグは、リクエストパケットとレスポンスパケットとを対応付けるための情報であって、リクエストパケットを識別する識別情報である。
【００１６】
ホストブリッジ装置３０は、ＣＰＵ３１とメモリコントローラ３２とを接続し両者間のデータ通信を制御する装置である。ＣＰＵ３１は、各種演算処理を実行する演算装置である。メモリコントローラ３２は、ＣＰＵ３１からの指示に応じてメモリ３２ａへのデータの読み書きを制御する制御装置である。ホストブリッジ装置３０は、データ転送装置１００からリクエストを受信すると、ＣＰＵ３１に依頼してリクエストに応じたデータをメモリ３２ａから取得させ、取得したデータをデータ転送装置１００へ送出する。以下では、リクエストに応じてホストブリッジ装置３０からデータ転送装置１００へ送出されるデータを「応答データ」、また、データ転送装置１００へ送出されるコマンド、タグ、データすべて含めて「応答パケット」と呼ぶこととする。
【００１７】
なお、現在広く利用されている入出力バスの仕様であるＰＣＩｅの用語に従えば、データ転送装置１００は、Ｒｏｏｔ  Ｃｏｍｐｌｅｘに対応する。また、入出力デバイス２０は、Ｅｎｄ  Ｐｏｉｎｔに対応する。また、ホストブリッジ装置３０は、Ｓｙｓｔｅｍ  Ｃｏｎｔｒｏｌｌｅｒに対応する。
【００１８】
ここで、ＰＣＩｅにおけるデータ転送の階層構造、及び、ＰＣＩｅにおけるパケット構造について簡単に説明する。図２は、ＰＣＩｅにおけるデータ転送の階層構造を示す図であり、図３は、ＰＣＩｅにおけるパケット構造を示す図である。
【００１９】
ＰＣＩｅでは、データ転送に関して、図２に示すように、トランザクションレイヤ（Transaction Layer）ＴＬ、データリンクレイヤ（Data Link Layer）ＤＬ、物理レイヤ（Physical Layer）ＰＬの３層構造が定義されている。ＰＣＩｅ規格に準拠したデータ転送装置１００、ホストブリッジ装置３０及び入出力デバイス２０等のデバイスでは、この３層構造の通信機能を備える。
【００２０】
トランザクションレイヤＴＬでは、図３に示すように、ヘッダー情報（Header）ＨＥ、データペイロード（Data Payload）ＤＰ、ＥＣＲＣ（End-to-end Cyclic Redundancy Checking）データＥＣとを含むトランザクションレイヤパケット（ＴＬＰ）が生成される。ヘッダー情報ＨＥには、コマンド、タグ等の各種情報が含まれる。データペイロードＤＰには、送信すべきデータが含まれる。ＥＣＲＣデータＥＣは、ヘッダー情報ＨＥ及びデータペイロードＤＰに基づいて算出されたエラー訂正符号（巡回符号）である。
【００２１】
データリンクレイヤＤＬでは、図３に示すように、ＴＬＰの先頭にシーケンス番号（SeqNum）ＳＮが付加される。また、シーケンス番号ＳＮ及びＴＬＰに基づいて算出されたエラー訂正符号（巡回符号）であるＬＣＲＣ（Link Cyclic Redundancy Checking）データＬＣがＴＬＰの最後に付加される。これにより、データリンクレイヤパケット（ＤＬＬＰ）が生成される。
【００２２】
物理層ＰＬでは、図３に示すように、ＤＬＬＰの先頭に開始符号（Ｓｔａｒｔ）Ｓが付加されると共に、ＤＬＬＰの最後に終了符号（Ｅｎｄ）Ｅが付加される。これにより、物理レイヤパケット（ＰＬＰ）が生成される。
【００２３】
次に、図４を参照して、本実施例に係るデータ転送装置１００の構成を説明する。図４は、本実施例に係るデータ転送装置１００の構成を示すブロック図である。同図に示すように、データ転送装置１００は、パケット分割部１１０、パケット解析部１２０、リクエストＦＩＦＯ部１３０、パケットスコアボード１４０、レスポンス受信部１５０、受信バッファ１６０及び転送制御部１７０を有する。
【００２４】
パケット分割部１１０は、入出力デバイス２０からリクエストパケットを受信すると、受信したリクエストパケットを所定のサイズのパケットに分割してパケット解析部１２０に受け渡す。例えば、パケット分割部１１０は、ホストブリッジ装置３０が一度に受信可能なパケットサイズとなるようにリクエストパケットを分割してパケット解析部１２０に受け渡す。また、パケット分割部１１０は、分割した各リクエストパケットのヘッダ部に、該リクエストパケットの分割数をホストブリッジ装置３０から送出される応答データの分割数として含ませる。
【００２５】
パケット解析部１２０は、パケット分割部１１０により分割された各リクエストパケットを解析してデータの転送を要求するリクエストを生成し、生成したリクエストをリクエストＦＩＦＯ部１３０に送出する。また、パケット解析部１２０は、パケット分割部１１０により分割された各リクエストパケットを解析してコマンド、タグ及び応答データの分割数を抽出し、抽出したコマンド、タグ及び応答データの分割数をパケットスコアボード１４０に書き込む。
【００２６】
リクエストＦＩＦＯ部１３０は、ＦＩＦＯ方式でリクエストを入出力する。具体的には、リクエストＦＩＦＯ部１３０は、パケット解析部１２０から送出されるリクエストを順番に入力させ、入力させた順番にリクエストをホストブリッジ装置３０へ送出する。
【００２７】
パケットスコアボード１４０は、リクエストパケットに含まれる各種情報を記憶する。具体的には、パケットスコアボード１４０は、パケット分割部１１０により分割されたリクエストパケットに含まれる応答データの分割数をタグに対応付けて記憶する。パケットスコアボード１４０は、分割数記憶部の一例である。
【００２８】
図５は、パケットスコアボード１４０の一例を示す図である。同図に示すように、パケットスコアボード１４０は、エントリ番号、コマンド、タグ、分割数といった項目を対応付けて記憶する。エントリ番号は、リクエストパケットのエントリを一意に特定するための識別番号を示す。コマンドは、リクエストパケットに含まれたコマンドであり、パケット解析部１２０により書き込まれる。タグは、リクエストパケットに含まれたタグであり、パケット解析部１２０により書き込まれる。分割数は、リクエストパケットに含まれた応答データの分割数であり、パケット解析部１２０により書き込まれる。
【００２９】
図５に示す例では、エントリ番号「０」のリクエストパケットは、「コマンド０」及び「タグ０」を含み、応答データの分割数が「２０」であることを示す。また、エントリ番号「１」のリクエストパケットは、「コマンド１」及び「タグ１」を含み、応答データの分割数が「６０」であることを示す。また、エントリ番号「２」のリクエストパケットは、「コマンド２」及び「タグ２」を含み、応答データの分割数が「４０」であることを示す。
【００３０】
レスポンス受信部１５０は、ホストブリッジ装置３０から送出される応答データを受信し、受信した応答データを転送制御部１７０に受け渡す。
【００３１】
受信バッファ１６０は、転送制御部１７０から受け渡された応答データを記憶する。図６は、受信バッファ１６０の一例を示す図である。同図に示すように、受信バッファ１６０は、エントリごとに、レスポンスヘッダ格納領域とレスポンスデータ格納領域とステートマシンとカウント値格納領域とに分割されたバッファである。
【００３２】
エントリは、レスポンスヘッダ格納領域とレスポンスデータ格納領域とカウント値格納領域とを関連付けた一組のグループである。レスポンスヘッダ格納領域は、エントリのうち応答パケットに含まれるコマンド及びタグを記憶する記憶領域である。レスポンスデータ格納領域は、エントリのうち応答パケットのデータ部を記憶する記憶領域である。ステートマシンは、レスポンスヘッダ格納領域及びレスポンスデータ格納領域が応答パケットを記憶しているか否かを示すフラグである。例えば、ステートマシンが「ｖａｌｉｄ」である場合には、レスポンスヘッダ格納領域及びレスポンスデータ格納領域が応答パケットを記憶していることを示す。また、例えば、ステートマシンが「ｉｎｖａｌｉｄ」である場合には、レスポンスヘッダ格納領域及びレスポンスデータ格納領域が応答パケットを記憶していない空の状態であることを示す。カウント値格納領域に格納される値は、レスポンスデータ格納領域に記憶された応答データ量を計数するために用いられる数値である。
【００３３】
図４に戻り、転送制御部１７０は、入出力デバイス２０に対する応答データの転送を制御する。具体的には、転送制御部１７０は、格納制御部１７１と、計数部１７２と、判定部１７３と、転送部１７４とを有する。
【００３４】
格納制御部１７１は、レスポンス受信部１５０から受け渡された応答パケットを該応答パケットを識別する識別情報ごとに受信バッファ１６０に格納する。本実施例では、格納制御部１７１は、応答パケットを識別する識別情報として、応答パケットに含まれるコマンド及びタグの組合せを採用する。
【００３５】
具体的には、格納制御部１７１は、応答パケットに含まれるコマンド及びタグと、受信バッファ１６０の各エントリ内のレスポンスヘッダ格納領域に格納されたコマンド及びタグとを比較する。そして、格納制御部１７１は、コマンド及びタグの組合せが一致しない場合には、応答パケットに含まれるコマンド及びタグを受信バッファ１６０のエントリのうち空のレスポンスヘッダ格納領域に格納する。さらに、格納制御部１７１は、応答パケットに含まれるデータを空のレスポンスデータ格納領域に格納する。そして、格納制御部１７１は、受信バッファ１６０の対応するステートマシンを「ｖａｌｉｄ」に設定する。
【００３６】
一方、格納制御部１７１は、コマンド及びタグの組合せが一致した場合には、受信バッファ１６０のエントリのうちコマンド及びタグの組合せが一致したエントリ内のレスポンスデータ格納領域に応答データを格納する。
【００３７】
計数部１７２は、格納制御部１７１により受信バッファ１６０に格納された応答データ量を応答データを識別する識別情報ごとに計数する。具体的には、計数部１７２は、格納制御部１７１により受信バッファ１６０のうち空のレスポンスヘッダ格納領域に格納されたコマンド及びタグの組合せに対応する分割数をパケットスコアボード１４０から取得する。そして、計数部１７２は、取得した分割数から１を減算した数値を受信バッファ１６０内の対応するカウント値格納領域の初期値に設定する。そして、計数部１７２は、格納制御部１７１により受信バッファ１６０のエントリ内のレスポンスデータバッファに応答データが格納される毎に、対応するカウント値格納領域の値をデクリメントしていく。
【００３８】
判定部１７３は、計数部１７２により計数された応答データ量が応答データの分割数に一致するか否かを判定する。具体的には、判定部１７３は、計数部１７２により設定されたカウント値格納領域の値が０となったか否かを判定し、カウント値格納領域の値が０となった場合に、受信バッファ１６０に格納された応答データ量が応答データの分割数に一致したと判定し、その旨を転送部１７４に通知する。
【００３９】
転送部１７４は、判定部１７３により応答データ量が応答データの分割数に一致したと判定された識別情報に対応する応答データを受信バッファ１６０から読み出して入出力デバイス２０へ転送する。具体的には、転送部１７４は、受信バッファ１６０に格納された応答データ量が応答データの分割数に一致した旨の通知を判定部１７３から受け取ると、カウント値格納領域の値が０となった応答データを受信バッファ１６０のエントリ内から読み出す。すなわち、転送部１７４は、カウント値格納領域の値が０となったレスポンスヘッダ格納領域からコマンド及びタグを読み出すとともに、レスポンスデータ格納領域から応答データのデータ部を読み出す。図６に示す受信バッファ１６０を例に挙げて説明すると、転送部１７４は、カウント値格納領域の値が０となったエントリ２のレスポンスヘッダ格納領域からコマンド２及びタグ２を読み出すとともに、エントリ２のレスポンスデータ格納領域からデータ２を読み出す。
【００４０】
そして、転送部１７４は、読み出したコマンド及びタグをヘッダ部として応答データに付加してレスポンスパケットを生成し、生成したレスポンスパケットを入出力デバイス２０へ転送する。なお、転送部１７４は、レスポンスパケットを転送した後、受信バッファ１６０の対応するステートマシンを「ｉｎｖａｌｉｄ」に変更する。
【００４１】
次に、図７を参照して、本実施例に係るデータ転送装置１００によるデータ転送処理について説明する。図７は、本実施例に係るデータ転送装置１００によるデータ転送処理の処理手順を示すフローチャートである。
【００４２】
同図に示すように、応答データを受信すると（ステップＳ１０１肯定）、格納制御部１７１は、応答パケットに含まれるコマンド及びタグと、受信バッファ１６０の各エントリ内のレスポンスヘッダ格納領域に格納されたコマンド及びタグとを比較する（ステップＳ１０２）。
【００４３】
そして、格納制御部１７１は、コマンド及びタグの組合せが一致しない場合には（ステップＳ１０３否定）、応答パケットに含まれるコマンド及びタグを受信バッファ１６０のエントリのうち空のレスポンスヘッダ格納領域に格納する。さらに、格納制御部１７１は、応答データを空のレスポンスデータ格納領域に格納する（ステップＳ１０４）。そして、格納制御部１７１は、受信バッファ１６０の対応するステートマシンを「ｖａｌｉｄ」に設定する。
【００４４】
続いて、計数部１７２は、受信バッファ１６０の空のレスポンスヘッダ格納領域に格納されたコマンド及びタグの組合せに対応する分割数をパケットスコアボード１４０から取得する（ステップＳ１０５）。そして、計数部１７２は、取得した分割数から１を減算した数値を受信バッファ１６０内の対応するカウント値格納領域の初期値に設定し（ステップＳ１０６）、処理をステップＳ１０９に進める。
【００４５】
一方、格納制御部１７１は、コマンド及びタグの組合せが一致した場合には（ステップＳ１０３肯定）、コマンド及びタグの組合せが一致した受信バッファ１６０のエントリ内のレスポンスデータ格納領域に応答データを格納する（ステップＳ１０７）。
【００４６】
続いて、計数部１７２は、格納制御部１７１により受信バッファ１６０のエントリ内のレスポンスデータ格納領域に応答データが格納されたため、対応するカウント値格納領域の値をデクリメントし（ステップＳ１０８）、処理をステップＳ１０９に進める。
【００４７】
続いて、判定部１７３は、計数部１７２により設定されたカウント値格納領域の値が０となったか否かを判定する（ステップＳ１０９）。判定部１７３は、カウント値格納領域の値が０となっていない場合には（ステップＳ１０９否定）、処理をステップＳ１０１に戻し、応答データの受信待ちとなる。
【００４８】
一方、判定部１７３は、カウント値格納領域の値が０となったと場合には（ステップＳ１０９肯定）、受信バッファ１６０に格納された応答データ量が応答データの分割数に一致したと判定し、その旨を転送部１７４に通知する。受信バッファ１６０に格納された応答データ量が応答データの分割数に一致した旨の通知を受け取った転送部１７４は、カウント値格納領域の値が０となった応答データを受信バッファ１６０のエントリ内から読み出して入出力デバイス２０へ転送する（ステップＳ１１０）。すなわち、転送部１７４は、カウント値格納領域の値が０となったレスポンスヘッダ格納領域からコマンド及びタグを読み出すとともに、レスポンスデータ格納領域から応答データを読み出す。そして、転送部１７４は、読み出したコマンド及びタグをヘッダ部として応答データに付加してレスポンスパケットを生成し、生成したレスポンスパケットを入出力デバイス２０へ転送する。なお、転送部１７４は、レスポンスパケットを転送した後、受信バッファ１６０の対応するステートマシンを「ｉｎｖａｌｉｄ」に変更する。
【００４９】
上述してきたように、データ転送装置１００は、入出力デバイス２０からのリクエストパケットに応じてホストブリッジ装置３０から送出される応答パケットをコマンド及びタグの組合せ毎に受信バッファ１６０に格納する。そして、データ転送装置１００は、応答データ量が応答データの分割数に一致したコマンド及びタグに対応する応答データを受信バッファ１６０から読み出して入出力デバイス２０へ転送する。このため、データ転送装置１００は、ＦＩＦＯ方式を採用する従来技術のように応答データの受信順番通りに応答データを転送する必要がなくなり、応答データ量が応答データの分割数に一致しさえすれば即座に応答データを転送することができる。その結果、データ転送装置１００は、応答データ間での追い越しを行うことができるため、装置のスループットを向上することができる。
【００５０】
また、本実施例に係るデータ転送装置１００は、応答データの分割数を用いてカウント値格納領域の初期値を設定し、応答データを受信バッファ１６０に格納する毎に、カウント値格納領域の値をデクリメントする。そして、データ転送装置１００は、カウント値格納領域の値が０となった場合に、応答データ量が応答データの分割数に一致したと判定して対応する応答データを受信バッファ１６０から読み出して入出力デバイス２０へ転送する。このため、データ転送装置１００は、カウント値格納領域の値をデクリメントするという容易な処理により応答データ量を計数することができるため、応答データ間での追い越しを迅速化することができ、装置のスループットを一層向上することができる。
【００５１】
ところで、本実施例では、入出力デバイス２０からリクエストパケットを受信したパケット分割部１１０が、受信したリクエストパケットを所定のサイズのパケットに分割してパケット解析部１２０に受け渡す例を説明した。しかし、入出力デバイス２０が予め所定サイズに分割されたリクエストパケットをデータ転送装置１００に送出する場合も想定され得る。この場合、データ転送装置１００からパケット分割部１１０を省略した構成を採用することができる。このように、パケット分割部１１０を省略した構成によっても、本実施例と同様の効果を奏することができる。
【００５２】
また、本実施例では、応答データを識別する識別情報として、応答パケットに含まれるコマンド及びタグの組合せを採用したが、タグのみを採用してもよい。この場合、格納制御部１７１は、応答パケットに含まれるタグと、受信バッファ１６０の各エントリ内のレスポンスヘッダ格納領域に格納されたタグとを比較し、その比較結果に応じて応答データを受信バッファ１６０に格納する。
【符号の説明】
【００５３】
１０  システム
２０  入出力デバイス
３０  ホストブリッジ装置
３２ａ  メモリ
３２  メモリコントローラ
１００  データ転送装置
１１０  パケット分割部
１２０  パケット解析部
１３０  リクエストＦＩＦＯ部
１４０  パケットスコアボード
１５０  レスポンス受信部
１６０  受信バッファ
１７０  転送制御部
１７１  格納制御部
１７２  計数部
１７３  判定部
１７４  転送部
【図１】
0005732806.tif 000002
【図２】
0005732806.tif 000003
【図３】
0005732806.tif 000004
【図４】
0005732806.tif 000005
【図５】
0005732806.tif 000006
【図６】
0005732806.tif 000007
【図７】
0005732806.tif 000008