(57)【要約】書き込みおよび読み取りデータコマンドを実行し、読み取りおよび書き込みデータの一時的な記憶のためのブロックのバッファプールを有するシステムにおいて、読み取りおよび書き込みデータ輻輳の管理方法が、開示される。バッファプール、かつ、読み取りおよび書き込みコマンドの開始の管理は、フリーブロックがホストバスアダプタ（ＨＢＡ）に届く読み取りデータの一時的な記憶の可能を確実にする。利用可能なブロックが、要求される全未処理の入ってくる読み取りデータによって実質的に消費される場合、それ以上の書き込みコマンドは、開始されない。入ってくる読み取りデータがバッファプールにて受信され、次にイニシエータへバッファプールから移動される間、バッファプールにあるブロックは、開放される。読み取りデータ移動が終わり、十分なバッファリソースの開放時、読み取りおよび書き込みデータコマンド送信は、再び始まり得る。【特許請求の範囲】
【請求項１】
書き込みおよび読み取りコマンドを実行するためのシステムにおいて、該システムは、ピア装置へ送信される書き込みデータ、および該ピア装置から受信される読み取りデータを一時的に記憶するためのブロックのバッファプールを有し、該バッファプール内において読み取り、および書き込みデータの輻輳を管理するための装置であって、該装置は、
処理待ちの読み取り、および、書き込みデータコマンドが、新しい読み取り、および新しい書き込みデータコマンドのデータを収容するために、該バッファプールにおいて十分なブロックを開放するために十分に処理されるまで、該新しい読み取りおよび書き込みデータコマンドの開始を防ぐためにプログラムされているプロセッサを備える、装置。
【請求項２】
前記プロセッサは、
前記新しい読み取りまたは書き込みコマンドのための前記読み取りまたは書き込みデータを記憶するために要求されるブロック数を決定し、
前記バッファプールにおいて、フリーブロック数を決定し、
該フリーブロック数が、該新しい読み取りまたは書き込みコマンドのための該読み取りおよび書き込みデータを記憶するために不十分な場合、該新しい読み取りまたは書き込みデータコマンドを抑制するために
さらにプログラムされている、請求項１に記載の装置。
【請求項３】
前記システムは、フリーブロックを指す記述子ポインタおよび読み取りデータを有するブロックを指す記述子ポインタを含む受信リストメモリ、ならびに、該受信リストメモリにおいて参照されないフリーブロックを指す記述子ポインタを含むフリーリストメモリを備え、前記プロセッサは、
該受信リストメモリおよび該フリーリストメモリ内の、前記フリーブロック数を合計することによって、前記バッファプール内の該フリーブロック数を決定をするためにさらにプログラムされている、請求項２に記載の装置。
【請求項４】
前記プロセッサは、前記フリーブロック数が前記新しい読み取りまたは書き込みデータコマンドのための前記読み取りまたは書き込みデータを記憶するために十分な場合、前記新しい読み取りまたは書き込みデータコマンドを開始するために、さらにプログラムされている、請求項２に記載の装置。
【請求項５】
前記システムは、前記フリーブロックを指す記述子ポインタおよび読み取りデータを有するブロックを指す記述子ポインタを含む受信リストメモリ、ならびに、該受信リストメモリにおいて参照されないフリーブロックを指す記述子ポインタを含むフリーリストメモリを備え、前記プロセッサは、
該受信リストメモリおよび該フリーリストメモリ内の、前記フリーブロック数を合計することと、
任意の処理待ちの読み取りデータコマンドのために入ってくる読み取りデータを記憶するために推定されるブロック数に、該合計を足すことと
によって前記バッファプール内の該フリーブロック数を決定するために、さらにプログラムされている、請求項２に記載の装置。
【請求項６】
前記プロセッサは、前記フリーブロック数が、前記新しい読み取りまたは書き込みデータコマンドのための前記読み取りまたは書き込みデータを記憶するために十分な場合、該新しい読み取りまたは書き込みデータコマンドを実行するために、さらにプログラムされている、請求項５に記載の装置。
【請求項７】
前記プロセッサは、
前記抑制された新しい読み取りまたは書き込みデータコマンド、および、任意の次の新しい読み取りおよび書き込みデータコマンドを、先入先出（ＦＩＦＯ）読み取り／書き込みコマンド要求待ち行列内に記憶し、
前記バッファプールにおいてブロックを開放するために処理待ちの読み取りデータコマンドを完了へ処理し、
前記フリーブロック数が、次の読み取りまたは書き込みデータコマンドのための前記読み取りまたは書き込みデータを記憶するのに十分な状態になる場合、該読み取り／書き込みコマンド要求待ち行列からの該次の読み取りまたは書き込みデータコマンドを実行するために
さらにプログラムされている、請求項２に記載の装置。
【請求項８】
請求項１に記載の前記装置を備えるホストバスアダプタ（ＨＢＡ）であって、上位層プロトコル（ＵＬＰ）を実行する、ＨＢＡ。
【請求項９】
インターネット小型コンピュータシステムインタフェース（ｉＳＣＳＩ）コントローラ回路をさらに備える、請求項８に記載のＨＢＡ。
【請求項１０】
請求項９に記載のＨＢＡを備える、ホストコンピュータ。
【請求項１１】
請求項１０に記載のホストコンピュータを備えるストレージ・エリア・ネットワーク（ＳＡＮ）であって、ｉＳＣＳＩネットワークが前記ｉＳＣＳＩコントローラ回路に結合され、１つ以上の記憶装置が該ｉＳＣＳＩネットワークに結合される、ストレージ・エリア・ネットワーク（ＳＡＮ）。
【請求項１２】
書き込みおよび読み取りデータコマンドを実行し、ならびに、ピア装置へ送信される書き込みデータおよび該ピア装置から受信される読み取りデータを一時的に記憶するためのブロックのバッファプールを有するシステムにおいて、読み取りおよび書き込みデータの輻輳を防ぐコンピュータプログラムであって、該コンピュータプログラムは、機械読み取り可能媒体にて記憶され、
処理待ちの読み取りおよび書き込みデータコマンドが、新しい読み取りおよび書き込みデータコマンドのデータを収容するために、該バッファプールにおいて十分なブロックを開放するために十分に処理されるまで、該新しい読み取りおよび書き込みデータコマンドの開始を防ぐこと
を含むアクトを実行可能な、コンピュータプログラム。
【請求項１３】
前記コンピュータプログラムは、
前記新しい読み取りまたは書き込みデータコマンドのための前記読み取りおよび書き込みデータを記憶するために必要なブロック数を決定することと、
前記バッファプールにおいて、フリーブロック数を決定することと、
該フリーブロック数が、該新しい読み取りまたは書き込みコマンドのための該読み取りおよび書き込みデータを記憶するために不十分な場合、該新しい読み取りまたは書き込みデータコマンドを抑制することと
をさらに含むアクトを実行可能な、請求項１２に記載のコンピュータプログラム。
【請求項１４】
前記システムは、前記フリーブロックを指す記述子ポインタおよび読み取りデータを有するブロックを指す記述子ポインタを含む受信リストメモリ、ならびに、該受信リストメモリにおいて参照されないフリーブロックを指す記述子ポインタを含むフリーリストメモリを備え、前記コンピュータプログラムは、
該受信リストメモリおよび該フリーリストメモリ内の、フリーブロック数を合計することによって、前記バッファプール内の該フリーブロック数を決定することを含むアクトをさらに実行可能な、請求項１３に記載のコンピュータプログラム。
【請求項１５】
前記コンピュータプログラムは、前記フリーブロック数が前記新しい読み取りまたは書き込みデータコマンドのための前記読み取りまたは書き込みデータを記憶するために十分な場合、前記新しい読み取りまたは書き込みデータコマンドを開始することを含むアクトをさらに実行可能な、請求項１３に記載のコンピュータプログラム。
【請求項１６】
前記システムは、前記フリーブロックを指す記述子ポインタおよび読み取りデータを有するブロックを指す記述子ポインタを含む受信リストメモリ、ならびに、該受信リストメモリにおいて参照されないフリーブロックを指す記述子ポインタを含むフリーリストメモリを備え、前記コンピュータプログラムは、
該受信リストメモリおよび前記フリーリストメモリ内の、フリーブロック数を合計することと、
任意の処理待ちの読み取りデータコマンドのために入ってくる読み取りデータを記憶するために推定されるブロック数に、前記合計を足すことと
によって前記バッファプール内の該フリーブロック数を決定することを含むアクトをさらに実行可能な、請求項１３に記載のコンピュータプログラム。
【請求項１７】
前記コンピュータプログラムは、前記フリーブロック数が前記新しい読み取りまたは書き込みデータコマンドのための前記読み取りまたは書き込みデータを記憶するために十分な場合、該新しい読み取りまたは書き込みデータコマンドを実行することを含むアクトをさらに実行可能な、請求項１６に記載のコンピュータプログラム。
【請求項１８】
前記コンピュータプログラムは、
前記抑制された新しい読み取りまたは新しい書き込みデータコマンド、および、任意の次の新しい読み取りおよび書き込みデータコマンドを、先入先出（ＦＩＦＯ）読み取り／書き込みコマンド要求待ち行列内に記憶することと、
前記バッファプールにおいてブロックを開放するために処理待ちの読み取りデータコマンドを完了へ処理することと、
前記フリーブロック数が、次の読み取りまたは書き込みデータコマンドのための前記読み取りまたは書き込みデータを記憶するのに十分な状態になる場合、該読み取り／書き込みコマンド要求待ち行列からの該次の読み取りまたは書き込みデータコマンドを実行することと
を含むアクトをさらに実行可能な、請求項１３に記載のコンピュータプログラム。
【請求項１９】
請求項１２に記載の前記コンピュータプログラムを備えるホストバスアダプタ（ＨＢＡ）であって、上位層プロトコル（ＵＬＰ）を実行する、ＨＢＡ。
【請求項２０】
インターネット小型コンピュータシステムインタフェース（ｉＳＣＳＩ）コントローラ回路をさらに備える、請求項１９に記載のＨＢＡ。
【請求項２１】
請求項２０に記載のＨＢＡを備える、ホストコンピュータ。
【請求項２２】
請求項２１に記載のホストコンピュータを備えるストレージ・エリア・ネットワーク（ＳＡＮ）であって、ｉＳＣＳＩネットワークが前記ｉＳＣＳＩコントローラ回路に結合され、１つ以上の記憶装置が該ｉＳＣＳＩネットワークに結合される、ストレージ・エリア・ネットワーク（ＳＡＮ）。
【請求項２３】
書き込みおよび読み取りデータコマンドを実行し、ならびに、ピア装置へ送信される書き込みデータおよび該ピア装置から受信される読み取りデータを一時的に記憶するためのブロックのバッファプールを有するシステムにおいて、読み取りデータおよび書き込みデータの輻輳を防ぐ方法であって、該方法は、
処理待ちの読み取りおよび書き込みデータコマンドが、新しい読み取りおよび書き込みデータコマンドのデータを収容するために、該バッファプールにおいて十分なブロックを開放するために十分に処理されるまで、該新しい読み取りおよび書き込みデータコマンドの開始を防ぐこと
を包含する、方法。
【請求項２４】
前記方法は、
前記新しい読み取りまたは書き込みコマンドのための前記読み取りおよび書き込みデータを記憶するために必要なブロック数を決定することと、
前記バッファプールにおいて、フリーブロック数を決定することと、
該フリーブロック数が、該新しい読み取りまたは書き込みコマンドのための該読み取りおよび書き込みデータを記憶するために不十分な場合、該新しい読み取りまたは書き込みデータコマンドを抑制することと
をさらに包含する、請求項２３に記載の方法。
【請求項２５】
前記システムは、フリーブロックを指す記述子ポインタおよび読み取りデータを有するブロックを指す記述子ポインタを含む受信リストメモリ、ならびに、該受信リストメモリにおいて参照されないフリーブロックを指す記述子ポインタを含むフリーリストメモリを備え、前記バッファプールにおいてフリーブロック数を決定するステップは、
該受信リストメモリおよび該フリーリストメモリ内の、該フリーブロック数を合計することをさらに包含する、請求項２４に記載の方法。
【請求項２６】
前記方法は、前記フリーブロック数が前記新しい読み取りまたは書き込みデータコマンドのための前記読み取りまたは書き込みデータを記憶するために十分な場合、前記新しい読み取りまたは書き込みデータコマンドを開始することをさらに包含する、請求項２４に記載の方法。
【請求項２７】
前記システムは、フリーブロックを指す記述子ポインタおよび読み取りデータを有するブロックを指す記述子ポインタを含む受信リストメモリ、ならびに、該受信リストメモリにおいて参照されないフリーブロックを指す記述子ポインタを含むフリーリストメモリを備え、前記バッファプールにおいてフリーブロック数を決定するステップは、
該受信リストメモリおよび該フリーリストメモリにおいて、前記フリーブロック数を合計することと、
任意の処理待ちの読み取りデータコマンドのために入ってくる読み取りデータを記憶するために推定されるブロック数に、該合計を足すことと
をさらに包含する、請求項２４に記載の方法。
【請求項２８】
前記方法は、前記フリーブロック数が前記新しい読み取りまたは書き込みデータコマンドのための前記読み取りまたは書き込みデータを記憶するために十分な場合、前記新しい読み取りまたは新しい書き込みデータコマンドを実行することをさらに包含する、請求項２７に記載の方法。
【請求項２９】
前記方法は、
前記抑制された新しい読み取りまたは書き込みデータコマンド、および、任意の次の新しい読み取りおよび書き込みデータコマンドを、先入先出（ＦＩＦＯ）読み取り／書き込みコマンド要求待ち行列内に記憶することと、
前記バッファプールにおいてブロックを開放するために処理待ちの読み取りデータコマンドを完了へ処理することと、
前記フリーブロック数が、次の読み取りまたは書き込みデータコマンドのための前記読み取りまたは書き込みデータを記憶するのに十分な状態になる場合、該読み取り／書き込みコマンド要求待ち行列からの該次の読み取りまたは書き込みデータコマンドを実行することと
をさらに包含する、請求項２４に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、ホストバスアダプタ（ＨＢＡ）カードにおいての読み取り／書き込みコマンドの実行を容易にするために必要なメモリの管理に関する。一実施形態において、本発明は、性能を改善するための、また、トランスポート層においてのパケットデータの喪失に因するリソースの使いすぎを減少するためのアプリケーション層においての読み取り／書き込みコマンドデータの輻輳（ｃｏｎｇｅｓｔｉｏｎ）を管理する装置、および方法に関する。
【背景技術】
【０００２】
ＨＢＡは、ホストコンピュータのバスと、インターネットまたはファイバチャンネルループのような外部ネットワークとを接続するインプット／アウトプット（Ｉ／Ｏ）である。ＨＢＡは、バスと外部のネットワークとの間においての情報の移動を管理する。ＨＢＡは、通常、ホストコンピュータのバックプレーンに差し込むことができるサーキットカードにおいて、実施される。例えば、図１に示すように、ＨＢＡ１００は、例えば、ファイバチャンネル、またはインターネット小型コンピュータシステムインタフェース（ｉＳＣＳＩ）プロトコルを用いてストレージ・エリア・ネットワーク（ＳＡＮ）１０８内の装置と通信するためにＰＣＩバス１０４と接続された装置を動作可能にするために、ホストコンピュータ１０６の周辺構成要素相互接続（ＰＣＩ）バス１０４にインターフェースで接続されるコネクタ１０２へ挿入される。
【０００３】
ホストコンピュータ１０６内に、初期化においてＰＣＩバス１０４に取り付けられる全てのＳＣＳＩ装置を列挙するＳＣＳＩドライバ１１０がある。ＨＢＡ１００が、ｉＳＣＳＩ  ＨＢＡの場合、ＨＢＡ１００は、ＳＣＳＩドライバ１１０によって列挙される１つ以上のＳＣＳＩ装置のリスト内のＳＣＳＩ装置として現れる。ＨＢＡは、マイクロプロセッサ１１４、メモリ１１６、およびファームウェア１１８のような構成部分を含む。また、ホストコンピュータ１０６内に、ＳＡＮ１０８にあるＳＣＳＩ装置を検出するｉＳＣＳＩドライバ１１２がある。検出されるＳＣＳＩ装置は、ＰＣＩバス１０４に局部的に取り付けられているかのように、ＨＢＡ１００を介してＰＣＩバス１０４に提示される。
【０００４】
ＳＣＩＳ装置の初期化および識別が完了すると、プロトコルデータユニット（ＰＤＵ）へフォーマットされたｉＳＣＳＩコマンドは、ＰＣＩバス１０４に接続される装置とＳＡＮ１０８内のＳＣＳＩ装置との間において、通信し得る。ここに規定されるように、ｉＳＣＳＩコマンドは、ＴＣＰ／ＩＰフレームに規格化されるＳＣＳＩデータ、およびコマンドを含み、両方向に行き来する通信制御プロトコル（ＴＣＰ／ＩＰ）パケットである。しかし、通信制御プロトコル（ＴＣＰ／ＩＰ）は、また、ｉＳＣＳＩロギングシーケンス（制御）、およびイニシエータとターゲットとの間の非同期な制御メッセージをも含み得る。パケット内に含まれるｉＳＣＳＩコマンドの実施例は、特定のターゲットが制御する装置を列挙する要求、処理中のコマンドを強制終了する要求、またはログオフの要求である。
【０００５】
上記されたように、ＳＡＮ１０８においてｉＳＣＳＩプロトコルの通信を容易にするために、ｉＳＣＳＩコマンドは、ＴＣＰ／ＩＰパケットへ規格化されなければならない。例えば、特定のターゲットＳＣＳＩにタグを付けられるｉＳＣＳＩコマンドがＨＢＡ１００に示される場合、ｉＳＣＳＩコマンドは、ＴＣＰ／ＩＰパケットへ先ず符号化され、そして、それはターゲットへ送信される。ターゲットは、ＴＣＰ／ＩＰからＳＣＳＩ情報を取り出し、ＰＤＵを再構成する。ターゲットＳＣＳＩは、また、ＨＢＡ１００へＴＣＰ／ＩＰパケットへ規格化される応答を再送信し得る。ＨＢＡ１００は、ＴＣＰ／ＩＰパケットからＳＣＳＩ情報を取り出し、それをローカルＰＣＩバス１０４上のイニシエータへ送り返す。
【０００６】
図２は、ネットワークのための開放型システム間相互接続（ＯＳＩ）モデルに従うＨＢＡ２００内のプロトコルスタック２０２を図示する。ＨＢＡにおいてのファームウェアは、プロトコルスタックの機能を制御し得る。ＯＳＩモデルにおいて、総数７つの層がある。下物理層またはメディア・アクセス制御（ＭＡＣ）２０４は、ＳＡＮにおいて装置２０８にある同様のプロトコルスタック２０６と通信する。ＭＡＣ２０４の上部は、リンク層２１０である。最上層は、ソケットと呼ばれるスタックへのインターフェースを用いるアプリケーション層２１２であるため、ソケット層と考えられる。データまたはコマンドは、アプリケーション層２１２を介して送受信される。例えば、書き込みコマンド、およびそれに関するデータは、（概念上）スタック２０２を介して下方へとフィルターするソケットコールを用いて、ワイヤまたは他のリンク２１６を通してターゲット２０８内の同様のスタック２０６への送受信をする。ターゲット２０８はまた、ワイヤ２１６を横切り、スタック２０２を介しＰＣＩバスと通信するアプリケーション層２１２へと上方へ戻る応答ソケットコールをイニシエータへ送信もする。
【０００７】
ｉＳＣＳＩ書き込みコマンドがターゲットと通信する場合、ＳＣＳＩドライバは、書き込みコマンドを先ずフォーマットする。図３において示されるように、フォーマットされた書き込みコマンド内において、スキャッタ・ギャザリスト３００があり、そのリストは、各々に、書き込みされるデータの位置を識別するためのアドレスフィールド、その位置においてのデータ量を示す長さフィールド、および、他のスキャッタ・ギャザ要素に対するオプションのポインターを含むスキャッタ・ギャザ要素３０２のリストから成る。スキャッタ・ギャザリスト３００は、特定の書き込みコマンドである書き込みデータを別の位置において記憶されることを可能にする。
【０００８】
図４を参照し、書き込みコマンドが処理される場合、イニシエータからの書き込みデータは、スキャッタ・ギャザリストにおいてのアドレスフィールドを用いて取り出され、限定されたサイズのバッファプール４１２内にある１つ以上のバッファまたは、ブロックへ記憶される。そしてそれは、ＨＢＡのメモリの一部分になる。限定されたサイズのバッファプールは、固定されたサイズのバッファプールであり得、または、設定可能なサイズであり得るが、メモリが指示することを必要する際、容易に拡張できない。バッファプール４１２は、通常、固定されたサイズである多数のバッファ、またはブロック（例えば、４ｋＢ）を備える。バッファプール４１２は、スタックによって管理され（図２参照）、スタックから利用可能である。
【０００９】
書き込みデータが、バッファプール４１２にあるブロックに記憶される場合、ローカル記述子と呼ばれるブロックを指すポインタは、送信（Ｔｘ）リスト４００において次々と記憶される。各々のローカル記述子４０４は、一ブロックのみを指し、記述子内のリンクは、どれだけのブロックが有効なデータを占められているかを識別する。Ｔｘリストの最後は、Ｔｘリストの最後を示す「ｓｔｏｐ」マーカである。従って、ローカル記述子数、および、Ｔｘリストにおいてのリンク数は、どれだけのバッファプールが書き込みデータで占められているのかを示す。
【００１０】
書き込みコマンドが、ターゲットへ送信されるよう準備される時、Ｔｘリスト４００にあるローカル記述子４０４は、次々に同期的に処理される。各々のローカル記述子４０４が処理されると同時に、ローカル記述子４０４によって識別され、ブロック内に記憶されるデータは、ＴＣＰ／ＩＰパケットへフォーマットされる。ターゲットアドレス情報は、また、ターゲット自身が指定されたターゲットとして認識するように、ＴＣＰ／ＩＰラッパーにおいて配置されなければならない。フォーマットされた書き込みデータは、次に、プロトコルスタック内に送信され、ネットワーク上に送信される。そして、書き込みデータのブロックを指したローカル記述子は、Ｔｘリスト４００から除去される。最後の記述子が届いた時、この処理は、終了する。書き込み処理が完了する場合、ターゲットは、イニシエータへ、書き込みコマンドが完了したことを示す認知応答を送信する。
【００１１】
ｉＳＣＳＩ読み取りコマンドがターゲットと通信をする場合、ＳＣＳＩドライバは、読み取りコマンドを先ずフォーマットする。読み取りコマンドは、スキャッタ・ギャザリストを含み、そのスキャッタ・ギャザリストのアドレスフィールドは、読み取りデータが記憶されるイニシエータ内にある位置を識別する。読み取りコマンドがＨＢＡにおいて受信される場合、読み取りコマンドは、ＴＣＰ／ＩＰパケットに規格化され、概念上スタックを介して下方へとフィルターし、ターゲットへワイヤを通して送信される。そして、ターゲットは、データの位置を検出、データを規格化、およびそれをＨＢＡへ送信する。
【００１２】
読み取りデータがターゲットから受信される場合、ＨＢＡは、その読み取りデータを記憶する場所を決定するためにＲｘリスト４０２を使用する。Ｒｘリスト４０２は、バッファプール４１２内にあるフリーブロックを通常示すローカル記述子４０６を含む。読み取りデータがＨＢＡ内へ受信される間、読み取りデータは、Ｒｘリスト４０２にあるローカル記述子４０６によって識別されるバッファプール４１２内にあるフリーブロック内にて記憶される。そして、ローカル記述子のステータスは、ローカル記述子が現在、満ブロックを指していることを示すように変更される。
【００１３】
一部の施行において、一度、全ての読み取りデータがバッファプール４１２において記憶される場合、読み取りデータは、読み取りコマンドスキャッタ・ギャザリストにおいてのアドレス位置に従う直接メモリアドレッシング（ＤＭＡ）を用いてメモリを移動させることが可能である。読み取りデータが、バッファプール４１２外へ移動させられる場合、バッファプールにあるバッファは、開放され、読み取りデータを以前指していたＲｘリスト４０２内のローカル記述子は、フリーブロックを指すように再明示される。
【００１４】
代替的に、読み取りデータが到着し、バッファプール４１２において記憶される間、ルックアヘッドＤＭＡは、全ての読み取りデータの受け取りに先立って、スキャッタ・ギャザリストによって特定される目的地へデータを移動させることを処理し得る。
【００１５】
しかしながら、ターゲットからのデータの読み取りが開始され、けれども、読み取りデータを収容するフリーブロックを指すＲｘリスト内のローカル記述子が不十分である場合、ＭＡＣは、任意の入ってくる読み取りデータを廃棄する。
【００１６】
一般的に、ホストコンピュータメモリとバッファプールとの間の読み取り、または、書き込みデータの移動は、ＰＣＩバスの制御をすることが可能な、および、ホストコンピュータのメインプロセッサの介入なしにバックグラウンドにおいてＰＣＩを通しデータを移動することが可能な特別なＤＭＡプロセッサの制御の下において、ＤＭＡを使用して起こり得る。付け加えて、複数の読み取り、および、書き込みが、同時に起こり得る。
【００１７】
Ｔｘリスト４００およびＲｘリスト４０２は、固定された最大数のエントリー（記述子）、例えば、２５６を含み得ることは、理解されべきである。何故なら、ＲｘおよびＴｘリスト内のエントリーにおいてブロック数が識別される以上に、バッファプール４１２（例えば、５０００）において全ブロック数が上回り得、記述子の「フリー」リスト４１４が、ＴｘおよびＲｘリストにおいて識別されないフリーブロック数を追うＨＢＡメモリにおいて維持もされるからである。
【００１８】
図４に示されるように、ＭＡＣは、２つのリスト、送信（Ｔｘ）リスト４００および受信（Ｒｘ）リスト４０２を管理する。一実施例において、３２ＭＢのメモリは、ＨＢＡにて利用可能であり得、その３２ＭＢ中の１９ＭＢのメモリは、バッファプールのために利用可能である。残りの１３ＭＢは、ＴｘおよびＲｘリストを含む他の機能のために確保される。ＨＢＡにおいてファームウェアは、ＲｘおよびＴｘリスト、およびバッファプールを制御する。通常、ＳＣＳＩドライバは、ＰＣＩバス上にて、読み取り、または書き込みコマンドを利用可能にし、ＨＢＡへ信号を送信する。そして、ＳＣＳＩドライバは、ホストコンピュータが受動の間、ＴｘおよびＲｘリスト、および、バッファの占有およびバッファを空にする動作を制御する。
【００１９】
従来の上記の構造において、ＨＢＡにある大部分のバッファプールが、外に行く書き込みデータおよび受信される読み取りデータを一時的に記憶するために利用され、それ以上の入ってくる読み取りデータを記憶するために十分なフリーブロックが無い場合、入ってくるデータパケットは、ドロップされる。さらに、ＴＣＰ／ＩＰは、コマンド、またはデータパケットの送信の間、ターゲットから受信されるパケットヘッダーを数えるメカニズムを提供するために、従って、カウントが予期値数を満たさないことをターゲットが検出する場合、再送信は、開始され、それがいっそうの減速を起こす。それ以上に、一連の特定のパケットが送信されない場合、失われたパケットが完璧に再送信されるまで全送信は、遅らされ得る。従って、入ってくる読み取りデータパケットの喪失は、ターゲットによってのタイムアウト、および再送信を結果として生じ、それは、スループットの性能を激しく低下させる。
【００２０】
付加的に、バッファプール内においての上記のブロックの不足が起こる場合、読み取りデータの輻輳、および読み取りコマンドの不完全処理を引き起こし、それにもかかわらず、ＨＢＡが新しい書き込みコマンドの受信、開始を続行し、バッファプール内にある任意の残りのフリーブロックは、書き込みデータによって利用される。しかしながら、処理待ちの（ｐｅｎｄｉｎｇ）読み取りコマンドは、完了のための十分なバッファを有していないため、完了されない。新しい書き込みコマンドは、処理待ちの読み取りコマンドの完了なしに処理されない。そのような状況において、バッファプールにある残りのフリーブロックは、成功不可な書き込みコマンドのために使用される。これが起こる場合、受信するための利用可能なフリーブロックが存在しないため、ターゲットによっての読み取りデータの次の再送信は、また、失敗に終わる。この閉鎖状態は、ターゲットがその再送信を中断し、接続を止め、やり直しをするまで続く。したがって、ボトルネックが激しくなり過ぎる場合、性能問題（低下）は、機能問題（閉鎖）になり得る。
【００２１】
このような問題を克服するため、および、性能低下または閉鎖の可能性を最低限にするために、一部の以前のデザインにおいて、バッファプールは、二つに分割される。そのうちの一つは、送信（書き込み）データのために予備され、もう一つは、受信（読み取り）データのために予備される。この構成は、管理するのに容易であるが、特にバッファプールの使用が平等でない場合、無駄が多く、非効率的である。二つに分割されるバッファプールにおいて、送信路が、例えば、より多くのメモリを必要とする場合、メモリが使用されていなくても、受信路のためにそのメモリを使用することができない。
【００２２】
したがって、性能を改善するために、また、トランスポート層においてのパケットデータの喪失に因するリソースの使いすぎを減少するためにアプリケーション層においての読み取り／書き込みコマンドデータの輻輳を管理する装置、および方法の必要性が存在する。
【発明の開示】
【課題を解決するための手段】
【００２３】
本発明の実施形態は、フリーブロックがＨＢＡに到着する読み取りデータを一時的に記憶することが可能であることを確実にするために、ＨＢＡにおいてプロトコルスタックを用いて読み取りおよび書き込みコマンドの実行、および、バッファプールを管理する。アプリケーション層においての読み取り／書き込みコマンドデータの輻輳の管理は、性能を改善し、また、トランスポート層においてのパケットデータの喪失に因するリソースの使いすぎを減少させる。読み取りデータの再送信量を減少させるために、書き込みデータ送信は、現在満たされていない読み取りデータ要求量に基いて抑制（ｔｈｒｏｔｔｌｅ）され得る。現在利用可能なブロックが、要求される全ての未処理の入ってくる読み取りデータによって、実質的に消費される場合、それ以上の読み取り、または書き込みコマンドＰＤＵは、アプリケーション層によって送信されない。入ってくる読み取りデータに必要な先行するバッファプールリソースの計算は、予期されるデータサイズおよび、予期される応答ＰＤＵをも含む。出て行く書き込みデータもが、バッファプールにあるブロックにて一時的に記憶されるので、出て行く書き込みデータのブロックの使用は、バッファプールにおいての現在利用できるブロック数を影響する。抑制された（ｔｈｒｏｔｔｌｅｄ）状況が存在する場合、十分なバッファリソースが利用可能になるまで、読み取り、または、書き込みデータコマンドＰＤＵは、発生させられない。入ってくる読み取りデータが、割当てられるバッファに受信され、イニシエータに移動される間、バッファプールにあるブロックは、開放される。読み取りデータ移動が終わり、十分なバッファリソースが開放される場合、読み取り、および書き込みデータコマンドＰＤＵ送信は、再び始まり得る。
【発明を実施するための最良の形態】
【００２４】
後述の最良の実施形態において、参照は、本出願の一部であり、および、図示することにより本発明が実行され得る特定の実施形態を示す添付図である。他の実施形態が、本発明の最良の実施形態の範囲から離れることなく利用されること、および、構成上の変化が、本発明の最良の実施形態の範囲から離れることなく為されることは、理解される。
【００２５】
本発明は、図示、および論述目的のためにのみ本明細書にてｉＳＣＳＩ  ＨＢＡの点から主として記載されるが、本発明の実施形態は、読み取り要求が、増強する機能を提供するために利用可能なリソースに関連することができる他の上位層プロトコル（ＵＬＰ）へ適用可能であり、特に、本発明の実施形態は、宛先へ送信される前に、データが送信路と受信路上のＨＢＡにて一時的に記憶されることが必要であり、その送信路と受信路との間にて共有されている固定された、または、制限されたサイズのバッファプールを有するストアフォワードシステムへ適用可能である。
【００２６】
ターゲットへ送信される書き込みデータが、ホストコンピュータへ取り付けられるイニシエータからＨＢＡへ達する場合、または、イニシエータへ送信される読み取りデータが、ターゲットからＨＢＡへ達する場合、宛先へ送信される前に、データは、ＨＢＡ内のメモリー部においての共有の、固定された、または制限されたサイズのバッファプールにあるブロックにまず配置される。バッファプールは、記憶断片化によって起こる非効率性を避けるために、読み取りデータ路と書き込みデータ路との間にて共有される。ＨＢＡ内の利用可能な全メモリー（例えば、３２ＭＢ）は、固定されたサイズ（例えば、４ｋＢ）であり得るバッファ、またはブロックへ分割される。全てのブロックは、必要に応じて割当てられ、または開放される。ＨＢＡそのものは、機能のために特定量のメモリー（例えば、１３ＭＢ）を必要とし、そして、残りのメモリー（例えば、１９ＭＢ）を、バッファプールにて利用可能にしておく。
【００２７】
十分数のブロックが、読み取り、または書き込みデータパケットを記憶するのに利用できない場合、そのパケットは、失われてしまう。読み取りパケットの喪失は、通常、ターゲットによって再送信という結果になり、システムの処理量を低下させる。加えて、入ってくる書き込みデータ要求の誤った管理は、システムの処理量をさらに低下させ、さらには、閉鎖（ｌｏｃｋｕｐ）を引き起こす。
【００２８】
本発明の実施形態は、利用できるブロックがＨＢＡへ達する読み取り、または書き込みデータを一時的に記憶するために利用可能であることを確実にするために、ＨＢＡにあるプロトコルスタックを用いて、バッファプール、および、読み取りおよび書き込みコマンドの実行を管理する。プロトコルスタックのアプリケーション層においての読み取り／書き込みコマンドデータの輻輳の管理は、機能を改善し、トランスポート層においてのパケットデータ喪失につながるリソースの使いすぎを減少させる。読み取りデータの再送信量を減少させるために、読み取りおよび書き込みコマンドＰＤＵ送信は、現在満たされていない読み取りデータ要求量に基いて抑制され得る。現在利用可能なブロックが、要求される全ての未処理の入ってくる読み取りデータによって、実質的に消費される場合、それ以上の読み取り、または書き込みコマンドＰＤＵは、アプリケーション層によって送信されない。入ってくる読み取りデータに必要な先行するバッファプールリソースの計算は、予期されるデータサイズおよび、予期される応答ＰＤＵをも含む。
【００２９】
出て行く書き込みデータもが、バッファプールにあるブロックにて一時的に記憶されるので、出て行く書き込みデータのブロックの使用は、バッファプールにおいての現在利用できるブロック数に影響する。抑制される状況が存在する場合、十分なバッファリソースが利用可能になるまで、書き込みデータコマンドＰＤＵは、発生させられない。入ってくる読み取りデータが、割当てられるバッファに受信され、イニシエータに移動される間、バッファプールにあるブロックは、開放される。読み取りデータ移動が終わり、十分なバッファリソースが開放される場合、書き込みデータコマンドＰＤＵ送信は、再び始まり得る。
【００３０】
言い換えれば、ＨＢＡメモリ部が、読み取り路と書き込み路との間にて共有されることを理解し、本発明の実施形態は、読み取りデータ要求中によって、ターゲットから戻らされる読み取りデータのために必要なメモリ部を考慮して、利用可能なメモリ部のために、新しい多すぎる読み取り、または書き込みコマンドの処理を避ける。新しい読み取り、または書き込みコマンドが現れる場合、本発明の実施形態は、それの処理をする決断をする前に、そのコマンドの予期される結果のための利用可能なメモリ空間を計算する。本質的には、処理中のコマンドがバッファプールにて十分なメモリを開放するために十分に処理されるまで、本発明の実施形態は、新しい読み取り、および書き込みコマンドの始動を防ぐことによって、書き込み、および読み取りコマンドの、容量に基づく処理を実施する。ＨＢＡは、新しい作業を達成するためだけではなく、既に開始された作業を終えるためにも、十分なメモリが開放されるまで任意の新しい仕事を（読み取り、および書き込みコマンドの形にて）始動しない。
【００３１】
図５は、本発明の実施形態に従うバッファプールリソースに従う読み取り、および書き込みコマンドの処理のためのプロトコルスタック５００の例示である。図５は、ＨＢＡのプロトコルスタック５００にあるアプリケーション層５０４によって受信されることを始める読み取り、および書き込み要求（コマンド）５０２を示す。処理待ちの（既に始動されている）読み取り要求が処理される間、これらの処理待ちの読み取り要求を満たすために割り当てられるバッファプールリソース量、および利用可能なバッファプールリソース量は、監視される。始動される次の書き込み要求が利用可能なリソースを上回る（または、不十分な余白を残す）場合、全ての後続の書き込み要求は、待機させられる（抑制される）。この前処理確認によって、ＭＡＣ  Ｒｘ層５０６が処理中（処理待ち）の読み取り要求から読み取りデータ５０８を受信する場合、バッファプールリソースは、利用可能である。入ってくる読み取りデータ５０８が処理される間、バッファプールリソースは開放され、利用可能なバッファプールリソース量は更新される。十分なバッファリソースが開放される場合、これらの新しい利用可能なリソースは、書き込みデータ５１０をターゲットへ送信するために抑制された書き込み要求の始動を可能にする。
【００３２】
同様に、始動される次の読み取り要求に関連する読み取りデータを記憶するのに必要なブロック数が、利用可能なリソースを上回る（または、不十分な余白を残す）場合、処理待ちの読み取り要求が、バッファプールリソースを開放するために完了へと処理される間、全ての後続の読み取り要求は、待機させられる（抑制される）。入ってくる読み取りデータ５０８が処理される間、バッファプールリソースは開放され、利用可能なバッファプールリソース量は更新される。十分なバッファリソースが開放される場合、これらの新しい利用可能なリソースは、読み取りデータ５０８をターゲットへ送信するために抑制された読み取り要求の始動を可能にする。
【００３３】
図６は、本発明に従う監視されるバッファプールリソースに従う読み取り、および書き込みコマンドの処理のための、ＨＢＡ６００内のプロトコルスタックにおいてのアプリケーション層の制御の下にある、Ｔｘリスト６０６、Ｒｘリスト６０８、フリーリスト６１０およびバッファプール６１２を含むＨＢＡ６００の例示である。
【００３４】
アプリケーション層は、フリーブロックを示すＲｘリスト６０８内の記述子数とフリーリスト６１０内の記述子数とを足すことによって、読み取りデータを受信するために利用可能なバッファプール６１２内のフリーブロック数を監視する。合計数は、バッファプール６１２内の全フリーブロック数を表す。
【００３５】
本発明の最良の実施形態において、アプリケーション層は、また、処理待ちの読み取りデータ要求数を監視し、処理待ちの読み取りデータ要求のための読み取りデータを受信するのにいくつのフリーブロックを必要とするかを決定する。処理待ちの読み取りデータ要求は、ターゲットへ送信されたが、まだターゲット６１４によってＨＢＡ６００へバック送信される読み取りデータを有さない読み取りデータ要求である。処理待ちの読み取りデータ要求のコマンドサイズに基づいて、特定数の読み取りは、ＨＢＡ６００へバック送信されることを予期される。例えば、処理待ち読み取りデータ要求のコマンドサイズが、６４ｋＢを示す場合、１６４ｋＢブロックが、その読み取りデータを記憶するのに必要である。
【００３６】
新たな書き込みデータ要求が受信される場合、アプリケーション層は、その新たな書き込みデータ要求のための、書き込みデータを一時的に記憶するのにいくつのフリーブロックを必要とするかを決定する。新たな書き込みデータ要求のための、全書き込みデータを受信する十分なフリーブロックが、バッファプール内にある場合、その新しい書き込みデータ要求は、始動される。書き込みデータは、バッファプールにおいてのフリーブロックへと割り当てられ、満ブロック（ｆｉｌｌｅｄ  ｂｌｏｃｋ）を示す記述子が、Ｔｘリスト６０６へ足される。書き込みデータは、そして、ターゲットへ送信される。
【００３７】
しかしながら、新たな書き込みデータ要求のための、全書き込みデータを受信する十分なフリーブロックがバッファプール６１２内にない場合、その書き込みデータ要求は、抑制され、先入先出（ＦＩＦＯ）読み取り／書き込みコマンド要求待ち行列６１６に配置される。そして、十分な読み取りデータ要求が完了され、十分なフリーブロックが、新たな書き込みデータ要求のための全ての書き込みデータを受信するために利用可能になるまで、それ以上の後続の書き込みデータ要求は、始動されない。この抑制時間の間に受信される次の新たな書き込みデータ要求もまた、読み取り／書き込みコマンド要求待ち行列６１６へ入れられる。それ以上の後続の書き込みデータ要求は、この間に始動はされないが、処理待ちの書き込みデータ要求（既に始動された書き込みデータ要求）は、完了へと続行されることに留意されたい。
【００３８】
処理待ちの読み取りデータ要求が処理され、入ってくる読み取りデータがバッファプール６１２内に受信され、そして、バッファプール外へ移動される間、バッファリソースは開放され、利用可能なバッファプールリソース数は更新される。読み取り／書き込みコマンド要求待ち行列６１６から、次の書き込みデータ要求の始動のために、全ての書き込みデータを受信する十分なフリーブロックが、バッファプール内にある場合、次の書き込みデータ要求は、始動される。
【００３９】
新たな読み取りデータ要求が受信される場合、アプリケーション層は、その新たな読み取りデータ要求のための、読み取りデータを一時的に記憶するのにいくつのフリーブロックを必要とするかを決定する。新たな読み取りデータ要求のための、全ての読み取りデータを受信する十分なフリーブロックが、バッファプール６１２内にある場合、その新しい読み取りデータ要求は、始動される。読み取りデータが、ターゲット６１４から受信される場合、ＨＢＡは、どこへ読み取りデータを記憶するのかを決定するためにＲｘリスト６０８を使用する。Ｒｘリスト６０８は、バッファプール６１２において、通常フリーブロックを示すローカル記述子を含む。読み取りデータがＨＢＡ内に受信される間、読み取りデータは、Ｒｘリスト６０８にあるローカル記述子によって識別されるバッファプール６１２においてのフリーブロックにて記憶され、ローカル記述子のステータスは、ローカル記述子が満ブロックを示すように変更される。そして、読み取りデータは、イニシエータへ移動される。
【００４０】
しかしながら、新たな読み取りデータ要求のための、全読み取りデータを受信する十分なフリーブロックがバッファプール６１２内にない場合、その読み取りデータ要求は、抑制され、読み取り／書き込みコマンド要求待ち行列６１６に配置される。そして、十分な読み取りデータ要求が完了され、十分なフリーブロックが、新たな読み取りデータ要求のための全ての読み取りデータを受信するために利用可能になるまで、それ以上の後続の読み取りデータ要求は、始動されない。この抑制時間の間に受信される次の新たな読み取りデータ要求もまた、読み取り／書き込みコマンド要求待ち行列６１６へ入れられる。それ以上の後続の読み取りデータ要求は、この間に始動はされないが、処理待ちの読み取りデータ要求（既に始動された読み取りデータ要求）は、完了へと続行されることに留意されたい。
【００４１】
処理待ちの読み取りデータ要求が処理され、入ってくる読み取りデータがバッファプール６１２内に受信され、そして、バッファプール外へ移動される間、バッファリソースは開放され、利用可能なバッファプールリソース数は更新される。読み取り／書き込みコマンド要求待ち行列６１６から、次の読み取りデータ要求の始動のために、全ての読み取りデータを受信する十分なフリーブロックが、バッファプール内にある場合、次の読み取りデータ要求は、始動される。
【００４２】
図７は、本発明の実施形態に従う抑制状態にあるバッファプールにおいての１０バッファ（ブロック）の例示ブロック図である。内部の読み取り／書き込みコマンド要求待ち行列７００は、抑制された書き込み、および読み取り要求を記憶する。図７の実施例において、各々５ブロックずつ使われると予測される２つの処理待ちの読み取りデータ要求７０４および７０６が始動されたために（実質の要求に必要な４バッファに加え、応答ＰＤＵが１バッファ使用するため）、書き込みデータ要求７０８、および、読み取りデータ要求７１０は、抑制される。しかしながら、１０バッファのみ利用可能であり、したがって、ターゲットからの入ってくる読み取りデータは、全ての１０ブロックを使用してしまい、２つの抑制された読み取り、および書き込みデータ要求に関連する８つのブロックのデータを記憶するフリーブロックを残さない。
【００４３】
本発明の一実施形態において、内部のカウンターは、全ての読み取りデータ要求によって必要とされる全推測ブロック数を決定するために使用される。読み取りデータ要求が始動される度、カウンターは、読み取りデータ要求に対してのその読み取りデータを記憶するのに必要とされる推測ブロック数だけインクリメントされる。従って、カウンターの様子は、常に、全ての処理待ちの読み取りデータ要求によって必要とされる全推測ブロック数を表す。
【００４４】
上記の最良の実施形態とは異なり、本発明の代替的な実施形態において、処理待ちの読み取り要求のメモリの必要性は、考慮されない。この代替的な実施形態において、書き込みデータは、ファームウェアがＴｘリスト、および、フリーリスト内にて示されるフリーブロック数を数えることによってバッファプール内において、十分なフリーブロック数が明白であることを決定した後にのみ、バッファプールにあるフリーブロックへ記憶される。書き込みデータを記憶するための十分なブロックが無い場合、書き込みデータ要求は抑制される。処理待ちの読み取りデータ要求の予測されるメモリの必要性は、考慮されない。
【００４５】
図８は、本発明の上記の代替的な実施形態を用いない時間に対するデータスループットのイーサネット（登録商標）プロットの例示を示す。ｙ軸は、ターゲットへ送信された、およびターゲットから戻ったデータ量（例えば、パケットまたはバイト）を示し、表示されるデータ量によって変化する各々の縦の線は、特定の短期間にてターゲットへ送信された、およびターゲットから戻ったデータ量を示す。ｘ軸は、時間を示す。
【００４６】
図８のプロットは、本発明の代替的な実施形態を用いないＨＢＡのスループットを示す。しかしながら、図８の短い縦の線は、その期間のターゲットからの入ってくる読み取りデータの不足を示す。これが起こり得るのは、ターゲットが、読み取りデータの送信をまだ要求していない場合、または、Ｒｘリストおよびフリーリストが、入ってくる読み取りデータを記憶するための十分なフリーブロックを含んでいない場合であり、よって、入ってくる読み取りデータパケットの喪失という結果になる。これが起こる場合、ターゲットは、パケットが受信されたことを認識せず、読み取りデータを再送信し得る。しかし、図８は、スループットの測定において再送信を示さない。ターゲットからの入ってくる読み取りデータの不足の他の可能性のある理由は、認識されないデータ量が特定の限界を超える場合（例えば、６４ｋ）、十分な認識が受信されるまで、または接続が中断されるまで、ターゲットはＨＢＡへデータを送信することを止める。
【００４７】
図９は、本発明の上記の代替的な実施形態を用いる時間に対するデータスループットのイーサネット（登録商標）プロットの例示を示す。図９は、より多くのデータが、抑制を用いることでターゲットから帰ってくることが出来ることを示し、したがって、スループットは、より多くなる。
【００４８】
本発明の実施形態は、読み取り要求が向上された機能を提供するために、利用可能なリソースと関連付けられることが出来る、および、入ってくるデータ路および出て行くデータ路がメモリリソースを共有するＵＬＰ設定（例えば、ｉＳＣＳＩ、ファイバチャンネル、または同様物）において、通常適用可能である。本発明の実施形態は、始めにデータをカードへ移動し、そしてターゲットへ移動する、およびその反対に、始めにデータをターゲットへ移動し、そしてカードへ移動するストアフォアード技術に対しても、通常適用可能である。
【００４９】
図６のリストおよびバッファを監視することによって留保されたバッファ数、およびフリーバッファ数を決定する上記の方法は、性能を改善し、およびリソースの使いすぎを減らすための、プロトコルスタックのアプリケーション層においての読み取り／書き込みコマンドデータ輻輳を管理する一実施例にすぎないことに、留意されたい。他の実施形態において、カウンタ、レジスタ、および、読み取り／書き込みコマンドおよび利用可能なメモリの把握のための待ち行列のような他の手段は、利用され得る。加えて、最良な実施形態において、ファームウェアが本発明を実施するにあたり、利用されるが、ソフトウェア、ステートマシン、および同様物のような他の手段も、使用され得る。
【００５０】
本発明は、添付の図面の参照と共に実施形態との関係にて全記載されるが、多様な変更、および修正が、当業者にとって明瞭であることに留意されたい。そのような変更、および修正は、添付の請求項内にて規定される本発明の範囲内に含まれることとして理解される。
【図面の簡単な説明】
【００５１】
【図１】ホストバスアダプタを介するストレージ・エリア・ネットワークに結合されるホストコンピュータを備えるシステム環境を示す例示ブロック図である。
【図２】ネットワークのための開放型システム間相互接続（ＯＳＩ）モデルに従う、ＨＢＡにあるプロトコルスタックを示す例示ブロック図である。
【図３】読み取り、および書き込みコマンド内において、スキャッタ・ギャザ要素から成るスキャッタ・ギャザリストを示す例示ブロック図である。
【図４】ＨＢＡにあるプロトコルスタックのメディアアクセス制御層によって管理される送信リスト、受信リスト、および、フリーリストを示す例示ブロック図である。
【図５】本発明の実施形態に従うバッファプールリソースに従う読み取り、および書き込みコマンドの処理のためのプロトコルスタックの例示である。
【図６】本発明に従う監視されるバッファプールリソースに従う読み取り、および書き込みコマンドの処理のための、ＨＢＡ内のプロトコルスタックにおいてのアプリケーション層の制御の下にある、Ｔｘリスト、Ｒｘリスト、フリーリストおよびバッファプールを含むＨＢＡを示す例示ブロック図である。
【図７】本発明の実施形態に従う抑制状態にあるバッファプールにおいての１０バッファ（ブロック）の例示ブロック図である。
【図８】本発明の実施形態を用いない時間に対するデータスループットのイーサネット（登録商標）プロットの例示を示す。
【図９】本発明の最良の実施形態を用いる時間に対するデータスループットのイーサネット（登録商標）プロットの例示を示す
【図１】
2007521748.tif 000002
【図２】
2007521748.tif 000003
【図３】
2007521748.tif 000004
【図４】
2007521748.tif 000005
【図５】
2007521748.tif 000006
【図６】
2007521748.tif 000007
【図７】
2007521748.tif 000008
【図８】
2007521748.tif 000009
【図９】
2007521748.tif 000010
【手続補正書】
【提出日】平成19年5月11日(2007.5.11)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
書き込みおよび読み取りデータコマンドを実行するためのシステムであって、ピア装置へ送信される書き込みデータと該ピア装置から受信される読み取りデータとを一時的に記憶するためのブロックの共有書き込み／読み取りバッファプールを有しているシステムにおいて、該バッファプール内において読み取りおよび書き込みデータの輻輳を管理するための装置であって、該装置は、
処理待ちの読み取りデータ要求が、新しい書き込みデータコマンドのデータを収容するために、該バッファプールにおいて十分なブロックを開放するのに十分に処理されるまで、該新しい書き込みデータコマンドの開始を防ぐためにプログラムされているプロセッサを備える、装置。
【請求項２】
前記プロセッサは、
前記処理待ちの読み取りデータ要求および前記新しい書き込みデータコマンドに対する前記読み取りまたは書き込みデータを記憶するのに要求されるブロック数を決定し、
前記バッファプールにおけるフリーブロック数を決定し、
該フリーブロック数が、該処理待ちの読み取りデータ要求に対する該読み取りデータと該新しい書き込みデータコマンドに対する該書き込みデータとを記憶するのに不十分な場合、該新しい書き込みデータコマンドを抑制する
ためにさらにプログラムされている、請求項１に記載の装置。
【請求項３】
前記システムは、フリーブロックを指す記述子ポインタと読み取りデータで満たされているブロックを指す記述子ポインタとを含む受信リストメモリと、該受信リストメモリにおいて参照されないフリーブロックを指す記述子ポインタを含むフリーリストメモリとを備え、前記プロセッサは、
該受信リストメモリおよび該フリーリストメモリ内のフリーブロック数を合計することによって、前記バッファプール内の該フリーブロック数を決定するためにさらにプログラムされている、請求項２に記載の装置。
【請求項４】
前記プロセッサは、前記フリーブロック数が前記処理待ちの読み取りデータ要求に対する前記読み取りデータと前記新しい書き込みデータコマンドに対する前記書き込みデータとを記憶するのに十分な場合、該新しい書き込みデータコマンドを開始するためにさらにプログラムされている、請求項２に記載の装置。
【請求項５】
前記システムは、フリーブロックを指す記述子ポインタと読み取りデータで満たされているブロックを指す記述子ポインタとを含む受信リストメモリと、該受信リストメモリにおいて参照されないフリーブロックを指す記述子ポインタを含むフリーリストメモリとを備え、前記プロセッサは、
該受信リストメモリおよび該フリーリストメモリ内のフリーブロック数を合計することと、
任意の処理待ちの読み取りデータ要求に対して入ってくる読み取りデータを記憶するために推定されるブロック数を該合計から引くことと
によって、前記バッファプール内の該フリーブロック数を決定するためにさらにプログラムされている、請求項２に記載の装置。
【請求項６】
前記プロセッサは、前記フリーブロック数が前記処理待ちの読み取りデータ要求に対する前記読み取りデータと前記新しい書き込みデータコマンドに対する前記書き込みデータとを記憶するのに十分な場合、該新しい読み取りまたは書き込みデータコマンドを開始するために、さらにプログラムされている、請求項５に記載の装置。
【請求項７】
前記プロセッサは、
前記抑制された新しい書き込みデータコマンドと、任意の次の新しい読み取りまたは書き込みデータコマンドとを、先入先出（ＦＩＦＯ）読み取り／書き込みコマンド要求待ち行列内に記憶し、
前記バッファプールにおいてブロックを開放するために処理待ちの読み取りデータ要求を完了へ処理し、
前記フリーブロック数が、該読み取り／書き込みコマンド要求待ち行列からの次の読み取りまたは書き込みデータコマンドに対する前記読み取りまたは書き込みデータを記憶するのに十分になる場合、該次の読み取りまたは書き込みデータコマンドを実行する
ためにさらにプログラムされている、請求項２に記載の装置。
【請求項８】
請求項１に記載の装置を備えるホストバスアダプタ（ＨＢＡ）であって、上位層プロトコル（ＵＬＰ）をインプリメントするＨＢＡ。
【請求項９】
インターネット小型コンピュータシステムインタフェース（ｉＳＣＳＩ）コントローラ回路をさらに備える、請求項８に記載のＨＢＡ。
【請求項１０】
請求項９に記載のＨＢＡを備える、ホストコンピュータ。
【請求項１１】
請求項１０に記載のホストコンピュータを備えるストレージ・エリア・ネットワーク（ＳＡＮ）であって、ｉＳＣＳＩネットワークが前記ｉＳＣＳＩコントローラ回路に結合されており、１つ以上の記憶装置が該ｉＳＣＳＩネットワークに結合されている、ＳＡＮ。
【請求項１２】
書き込みおよび読み取りデータコマンドを実行するためのシステムであって、ピア装置へ送信される書き込みデータと該ピア装置から受信される読み取りデータとを一時的に記憶するためのブロックの共有書き込み／読み取りバッファプールを有しているシステムにおいて、読み取りおよび書き込みデータの輻輳を防ぐためのコンピュータプログラムであって、該コンピュータプログラムは、機械読み取り可能媒体上に記憶されており、
処理待ちの読み取りデータ要求が、新しい書き込みデータコマンドのデータを収容するために、該バッファプールにおいて十分なブロックを開放するのに十分に処理されるまで、該新しい書き込みデータコマンドの開始を防ぐこと
を含む動作を実行するように実行可能である、コンピュータプログラム。
【請求項１３】
前記コンピュータプログラムは、
前記処理待ちの読み取りデータ要求および前記新しい書き込みデータコマンドに対する前記読み取りまたは書き込みデータを記憶するのに要求されるブロック数を決定することと、
前記バッファプールにおけるフリーブロック数を決定することと、
該フリーブロック数が、該処理待ちの読み取りデータ要求に対する該読み取りデータと該新しい読み取りまたは書き込みデータコマンドに対する該書き込みデータとを記憶するのに不十分な場合、該新しい書き込みデータコマンドを抑制することと
を含む動作を実行するようにさらに実行可能である、請求項１２に記載のコンピュータプログラム。
【請求項１４】
前記システムは、フリーブロックを指す記述子ポインタと読み取りデータで満たされているブロックを指す記述子ポインタとを含む受信リストメモリと、該受信リストメモリにおいて参照されないフリーブロックを指す記述子ポインタを含むフリーリストメモリとを備え、前記コンピュータプログラムは、
該受信リストメモリおよび該フリーリストメモリ内のフリーブロック数を合計することによって、前記バッファプール内の該フリーブロック数を決定することを含む動作を実行するようにさらに実行可能である、請求項１３に記載のコンピュータプログラム。
【請求項１５】
前記コンピュータプログラムは、前記フリーブロック数が前記処理待ちの読み取りデータ要求に対する前記読み取りデータと前記新しい書き込みデータコマンドに対する前記書き込みデータとを記憶するのに十分な場合、該新しい書き込みデータコマンドを開始することを含む動作を実行するようにさらに実行可能である、請求項１３に記載のコンピュータプログラム。
【請求項１６】
前記システムは、フリーブロックを指す記述子ポインタと読み取りデータで満たされているブロックを指す記述子ポインタとを含む受信リストメモリと、該受信リストメモリにおいて参照されないフリーブロックを指す記述子ポインタを含むフリーリストメモリとを備え、前記コンピュータプログラムは、
該受信リストメモリおよび該フリーリストメモリ内のフリーブロック数を合計することと、
任意の処理待ちの読み取りデータ要求に対して入ってくる読み取りデータを記憶するために推定されるブロック数を該合計から引くことと
によって、前記バッファプール内の該フリーブロック数を決定することを含む動作を実行するようにさらに実行可能である、請求項１３に記載のコンピュータプログラム。
【請求項１７】
前記コンピュータプログラムは、前記フリーブロック数が前記処理待ちの読み取りデータ要求に対する前記読み取りデータと前記新しい書き込みデータコマンドに対する前記書き込みデータとを記憶するのに十分な場合、該新しい読み取りまたは書き込みデータコマンドを開始することを含む動作を実行するようにさらに実行可能である、請求項１６に記載のコンピュータプログラム。
【請求項１８】
前記コンピュータプログラムは、
前記抑制された新しい書き込みデータコマンドと、任意の次の新しい読み取りまたは書き込みデータコマンドとを、先入先出（ＦＩＦＯ）読み取り／書き込みコマンド要求待ち行列内に記憶することと、
前記バッファプールにおいてブロックを開放するために処理待ちの読み取りデータ要求を完了へ処理することと、
前記フリーブロック数が、該読み取り／書き込みコマンド要求待ち行列からの次の読み取りまたは書き込みデータコマンドに対する前記読み取りまたは書き込みデータを記憶するのに十分になる場合、該次の読み取りまたは書き込みデータコマンドを実行することと
を含む動作を実行するようにさらに実行可能である、請求項１３に記載のコンピュータプログラム。
【請求項１９】
請求項１２に記載のコンピュータプログラムを備えるホストバスアダプタ（ＨＢＡ）であって、上位層プロトコル（ＵＬＰ）をインプリメントするＨＢＡ。
【請求項２０】
インターネット小型コンピュータシステムインタフェース（ｉＳＣＳＩ）コントローラ回路をさらに備える、請求項１９に記載のＨＢＡ。
【請求項２１】
請求項２０に記載のＨＢＡを備える、ホストコンピュータ。
【請求項２２】
請求項２１に記載のホストコンピュータを備えるストレージ・エリア・ネットワーク（ＳＡＮ）であって、ｉＳＣＳＩネットワークが前記ｉＳＣＳＩコントローラ回路に結合されており、１つ以上の記憶装置が該ｉＳＣＳＩネットワークに結合されている、ＳＡＮ。
【請求項２３】
書き込みおよび読み取りデータコマンドを実行するためのシステムであって、ピア装置へ送信される書き込みデータと該ピア装置から受信される読み取りデータとを一時的に記憶するためのブロックの共有書き込み／読み取りバッファプールを有しているシステムにおいて、読み取りおよび書き込みデータの輻輳を防ぐ方法であって、該方法は、
処理待ちの読み取りデータ要求が、新しい書き込みデータコマンドのデータを収容するために、該バッファプールにおいて十分なブロックを開放するのに十分に処理されるまで、該新しい書き込みデータコマンドの開始を防ぐこと
を包含する、方法。
【請求項２４】
前記方法は、
前記処理待ちの読み取りデータ要求および前記新しい書き込みデータコマンドに対する前記読み取りまたは書き込みデータを記憶するのに要求されるブロック数を決定することと、
前記バッファプールにおけるフリーブロック数を決定することと、
該フリーブロック数が、該処理待ちの読み取りデータ要求に対する該読み取りデータと該新しい書き込みデータコマンドに対する該書き込みデータとを記憶するのに不十分な場合、該新しい書き込みデータコマンドを抑制することと
をさらに包含する、請求項２３に記載の方法。
【請求項２５】
前記システムは、フリーブロックを指す記述子ポインタと読み取りデータで満たされているブロックを指す記述子ポインタとを含む受信リストメモリと、該受信リストメモリにおいて参照されないフリーブロックを指す記述子ポインタを含むフリーリストメモリとを備え、前記バッファプールにおいてフリーブロック数を決定するステップは、
該受信リストメモリおよび該フリーリストメモリ内のフリーブロック数を合計することをさらに包含する、請求項２４に記載の方法。
【請求項２６】
前記方法は、前記フリーブロック数が前記処理待ちの読み取りデータ要求に対する前記読み取りデータと前記新しい書き込みデータコマンドに対する前記書き込みデータとを記憶するのに十分な場合、該新しい書き込みデータコマンドを開始することをさらに包含する、請求項２４に記載の方法。
【請求項２７】
前記システムは、フリーブロックを指す記述子ポインタと読み取りデータで満たされているブロックを指す記述子ポインタとを含む受信リストメモリと、該受信リストメモリにおいて参照されないフリーブロックを指す記述子ポインタを含むフリーリストメモリとを備え、前記バッファプールにおいてフリーブロック数を決定するステップは、
該受信リストメモリおよび該フリーリストメモリ内のフリーブロック数を合計することと、
任意の処理待ちの読み取りデータ要求に対して入ってくる読み取りデータを記憶するために推定されるブロック数を該合計から引くことと
をさらに包含する、請求項２４に記載の方法。
【請求項２８】
前記方法は、前記フリーブロック数が前記処理待ちの読み取りデータ要求に対する前記読み取りデータと前記新しい書き込みデータコマンドに対する前記書き込みデータとを記憶するのに十分な場合、該新しい読み取りまたは新しい書き込みデータコマンドを開始することをさらに包含する、請求項２７に記載の方法。
【請求項２９】
前記方法は、
前記抑制された新しい書き込みデータコマンドと、任意の次の新しい読み取りまたは書き込みデータコマンドとを、先入先出（ＦＩＦＯ）読み取り／書き込みコマンド要求待ち行列内に記憶することと、
前記バッファプールにおいてブロックを開放するために処理待ちの読み取りデータ要求を完了へ処理することと、
前記フリーブロック数が、該読み取り／書き込みコマンド要求待ち行列からの次の読み取りまたは書き込みデータコマンドに対する前記読み取りまたは書き込みデータを記憶するのに十分になる場合、該次の読み取りまたは書き込みデータコマンドを実行することと
をさらに包含する、請求項２４に記載の方法。
【国際調査報告】
2007521748.tif 000011