(57)【要約】  本発明は、フェイルオーバの技術と静的および動的な負荷分散の技術とに関する。フィルタドライバは、第１のネットワークアダプタおよび第１のネットワークアダプタを通過するデータパスのうち少なくとも１つが障害状態となったことを示すパス障害通知を受信し、第１のネットワークアダプタに送信されたパケットを第２のネットワークアダプタにリルートする。ミニポートドライバは、ネットワークアダプタおよびそのネットワークアダプタを通過するデータパスのうち少なくとも１つが障害状態となったことを判定し、フィルタドライバに対して、ネットワークアダプタおよびそのネットワークアダプタを通過するデータパスのうち少なくとも１つが障害状態となったことを通知する。フィルタドライバは、複数のデータパスの各データパスに対するデータ分担量を決定し、あるターゲット論理ユニットに対する最大コマンド数を決定し、データ分担量と最大コマンド数に基づいてパケットを送信するデータパスを選択する。フィルタドライバは、複数のデータパスの各データパスにおけるデータ転送速度を決定し、複数のデータパスの各データパスにおけるデータ転送速度に基づいて複数のデータパスの各データパスに対する負荷分散シェアを更新し、複数のデータパスの各データパスに対する負荷分散シェアに基づいてパケットを送信するデータパスを選択する。
2007527172.tif 000002
【特許請求の範囲】
【請求項１】
第２のネットワークアダプタに接続された第１のネットワークアダプタ、および前記第１のネットワークアダプタを通過するデータパスのうちの少なくとも１つが障害状態となった場合に、フィルタドライバを有するコンピュータシステムがフェイルオーバを行う方法であって、
前記方法は、
前記フィルタドライバによって、前記第１のネットワークアダプタおよび前記第１のネットワークアダプタを通過する前記データパスのうちの少なくとも１つが障害状態となったことを示すパス障害通知を受信することと、
前記フィルタドライバによって、前記第１のネットワークアダプタに送信されたパケットを前記第２のネットワークアダプタにリルートすることと
を備える方法。
【請求項２】
前記フィルタドライバによって、前記パス障害通知が受信される前に前記第１のネットワークアダプタに対して送信された各パケットの成功ステータスをビジーステータスに変更することを更に備える請求項１に記載の方法。
【請求項３】
前記フィルタドライバによって、前記第２のネットワークアダプタを含む新規データパスを決定することを更に備える請求項１に記載の方法。
【請求項４】
前記フィルタドライバによって、前記第１のネットワークアダプタが修復されたことを示す通知を受信することと、
前記フィルタドライバによって、前記通知が新規データパスを指定したかどうかに基づいて新規データパケットを送信するデータパス決定することと
を更に備える請求項１に記載の方法。
【請求項５】
前記フィルタドライバによって、論理ユニットに対する第１のストレージデバイス・スタックが構築されたことに応じて前記第１のストレージデバイス・スタックをプライマリ・ストレージデバイス・スタックとして指定することと、
前記フィルタドライバによって、前記論理ユニットに対する次のストレージデバイス・スタックが構築されたことに応じて前記次のストレージデバイス・スタックをセカンダリ・ストレージデバイス・スタックとして指定することと
を更に備える請求項１に記載の方法。
【請求項６】
前記フィルタドライバによって、前記セカンダリ・ストレージデバイス・スタック上へのファイルシステムのマウントを防ぐことを更に備える請求項５に記載の方法。
【請求項７】
フィルタドライバに接続されたミニポートドライバに接続されたネットワークアダプタ、および前記ネットワークアダプタを通過するデータパスのうちの少なくとも１つが障害状態となった場合に、フェイルオーバを行う方法であって、
前記方法は、
前記ミニポートドライバによって、前記ネットワークアダプタが障害状態となったことを判定することと、
前記ミニポートドライバによって、前記ネットワークアダプタが障害状態となったことを前記フィルタドライバに通知することと
を備える方法。
【請求項８】
前記ミニポートドライバによって、パケットをリルートすることを目的として前記フィルタドライバによって使用される新規データパスを指定することを更に備える請求項７に記載の方法。
【請求項９】
前記ミニポートドライバによって、前記第１のネットワークアダプタに送信されたペンディングパケットの処理を成功ステータスで完了することを更に備える請求項７に記載の方法。
【請求項１０】
前記ミニポートドライバによって、前記ネットワークアダプタが修復されたことを判定することと、
前記ミニポートドライバによって、前記ネットワークアダプタが修復されたことを前記フィルタドライバに通知することと
を更に備える請求項７に記載の方法。
【請求項１１】
フィルタドライバに実装される、静的な負荷分散を行う方法であって、
前記フィルタドライバは
複数のデータパスの各データパスに対するデータ分担量を決定することと、
ターゲット論理ユニットに対する最大コマンド数を特定することと、
前記データ分担量および前記最大コマンド数に基づいてパケットを送信するデータパスを選択することと
を実行する方法。
【請求項１２】
前記フィルタドライバは、
チームの各データパスに関連する負荷分散シェアを決定することと、
各データパスに対して送信されるパケットの平均データ長を決定することと
を更に実行する請求項１１に記載の方法。
【請求項１３】
前記データパスに対する前記データ分担量および最大コマンド数のうちの少なくとも１つに達するまで、パケットが選択されたデータパスに送信されるラウンドロビン技術を使用して、前記データパスが選択される請求項１１に記載の方法。
【請求項１４】
フィルタドライバに実装される動的な負荷分散を行う方法であって、
前記フィルタドライバは
複数のデータパスの各データパスに対するデータ転送速度を決定することと、
前記複数のデータパスの各データパスに対する前記データ転送速度に基づいて前記複数のテータパスの各データパスに対する負荷分散シェアを更新することと、
前記複数のデータパスの各データパスに対する前記負荷分散シェアに基づいてパケットを送信するデータパスを選択することと
を実行する方法。
【請求項１５】
前記複数のデータパスの各データパスに対する前記データ転送速度が、転送されたデータの合計に対するデータ転送に費やした時間の合計の比率として計算される請求項１４に記載の方法。
【請求項１６】
前記データ転送速度が決定される頻度は調整可能である請求項１４に記載の方法。
【請求項１７】
ネットワークおよびデータストレージに接続されたシステムであって、
前記システムは
ホストコンピュータと、
前記ホストコンピュータに接続された、前記データストレージへの入力／出力（Ｉ／Ｏ）アクセスを管理するストレージコントローラと、
第１のネットワークアダプタと、
第２のネットワークアダプタと、
前記第１のネットワークアダプタおよび前記第１のネットワークアダプタを通過するデータパスのうち少なくも１つが障害状態となったことを示すパス障害通知を受信し、前記第１のネットワークアダプタに送信されたパケットを前記第２のネットワークアダプタにリルートすることができる前記ホストコンピュータ内のフィルタドライバと
を備えるシステム。
【請求項１８】
前記フィルタドライバは、更に、前記パス障害通知が受信される前に前記第１のネットワークアダプタに送信された各パケットの成功ステータスをビジーステータスに変更することができる請求項１７に記載のシステム。
【請求項１９】
前記フィルタドライバは、更に、前記第２のネットワークアダプタを含む新規データパスを決定することができる請求項１７に記載のシステム。
【請求項２０】
前記フィルタドライバは、
前記第１のネットワークアダプタが修復されたことを示す通知の受信と、
前記通知が新規データパスを指定したかどうかに基づく新規データパケット用のデータパスの決定と
を更に行うことができる請求項１７に記載のシステム。
【請求項２１】
前記フィルタドライバは、
論理ユニットに対して第１のストレージデバイス・スタックが構築されたことに応じて、前記第１のストレージデバイス・スタックをプライマリ・ストレージデバイス・スタックとして指定することと、
前記論理ユニットに対して次のストレージデバイス・スタックが構築されたことに応じて、前記次のストレージデバイス・スタックをセカンダリ・ストレージデバイス・スタックとして指定することと
を更に行うことができる請求項１７に記載のシステム。
【請求項２２】
前記フィルタドライバは、更に、前記セカンダリ・ストレージデバイス・スタック上へのファイルシステムのマウントを防ぐ請求項２１に記載のシステム。
【請求項２３】
ネットワークおよびデータストレージに接続されたシステムであって、
前記システムは、
ホストコンピュータと、
前記ホストコンピュータに接続された、前記データストレージへの入力・出力（Ｉ／Ｏ）アクセスを管理するストレージコントローラと、
前記ホストコンピュータ内のフィルタドライバと、
前記ホストコンピュータ内の少なくとも２つのネットワークアダプタと、
複数の前記ネットワークアダプタのうち少なくとも１つが障害状態となったことを判定し、前記フィルタドライバに対して前記ネットワークアダプタが障害状態となったことを通知することができる前記ホストコンピュータ内のミニポートドライバと
を備えるシステム。
【請求項２４】
前記ミニポートドライバは、更に、
パケットをリルートすることを目的として前記フィルタドライバによって使用される新規データパスを指定することができる請求項２３に記載のシステム。
【請求項２５】
前記ミニポートドライバは、更に、
障害状態となった前記ネットワークアダプタに送信されたペンディングパケットの処理を成功ステータスで完了することができる請求項２３に記載のシステム。
【請求項２６】
前記ミニポートドライバは、更に、
障害状態となった前記ネットワークアダプタが修復されたことを判定し、
前記フィルタドライバに対して障害状態となった前記ネットワークアダプタが修復されたことを通知することができる請求項２３に記載のシステム。
【請求項２７】
ネットワークおよびデータストレージに接続されたシステムであって、
前記システムは
ホストコンピュータと、
前記ホストコンピュータに接続された、前記データストレージへの入・出力（Ｉ／Ｏ）アクセスを管理するストレージコントローラと、
複数のデータパスの各データパスに対してデータ分担量を決定し、ターゲット論理ユニットに対する最大コマンド数を特定し、前記データ分担量および前記最大コマンド数に基づいてパケットを送信するデータパスを選択することができるフィルタドライバと
を備えるシステム。
【請求項２８】
前記フィルタドライバは、更に、
チーム内の各データパスに関連する負荷分散シェアを決定することと、
各データパスに対して送信するパケットの平均データ長を決定することと
を行う請求項２７に記載のシステム。
【請求項２９】
前記データパスに対するデータ分担量および最大コマンド数のうちの少なくとも１つに達するまで選択されたデータパスにパケットが送信されるラウンドロビン技術を使用して
前記データパスが選択される請求項２７に記載のシステム。
【請求項３０】
ネットワークおよびデータストレージに接続されたシステムであって、
前記システムは
ホストコンピュータと、
前記ホストコンピュータに接続された、前記データストレージへの入・出力（Ｉ／Ｏ）アクセスを管理するストレージコントローラと、
複数のデータパスの各データパスに対するデータ転送速度を決定し、複数のデータパスの各データパスに対する前記データ転送速度に基づいて複数のデータパスの各データパスに対する負荷分散シェアを更新し、複数のデータパスの各データパスに対する前記負荷分散シェアに基づいてパケットを送信するデータパスを選択することができるフィルタドライバと
を備えるシステム。
【請求項３１】
前記データ転送速度が、転送されたデータの合計に対するデータ転送に費やした時間の合計の比率として、前記複数のデータパスの各データパスに対して計算される請求項３０に記載のシステム。
【請求項３２】
前記データ転送速度が決定される頻度は調整可能である請求項３０に記載のシステム。
【請求項３３】
命令群を記録したストレージ媒体を備える製品であって、
コンピュータデバイスによって実行されることにより、
第１のネットワークアダプタおよび前記第１のネットワークアダプタを通過するデータパスのうち少なくとも１つが障害状態となったことを示すパス障害通知を受信し、
前記第１のネットワークアダプタに送信されたパケットを前記第２のネットワークアダプタにリルートする
製品。
【請求項３４】
前記命令群がコンピュータデバイスによって実行されることにより、更に、
前記パス障害通知が受信される前に前記第１のネットワークアダプタに送信された各パケットの成功ステータスをビジーステータスに変更する
請求項３３に記載の製品。
【請求項３５】
前記命令群がコンピュータデバイスによって実行されることにより、更に、
前記第２のネットワークアダプタを含む新規データパスを決定する
請求項３３に記載の製品。
【請求項３６】
前記命令群がコンピュータデバイスによって実行されることにより、更に、
前記第１のネットワークアダプタが修復されたことを示す通知を受信し、
前記通知が新規データパスを指定したかどうかに基づいて新規データパケット用のデータパスを決定する
請求項３３に記載の製品。
【請求項３７】
前記命令群がコンピュータデバイスによって実行されることにより、更に、
論理ユニットに対する第１のストレージデバイス・スタックの構築に応じて前記第１のストレージデバイス・スタックをプライマリ・ストレージデバイス・スタックに指定し、
前記論理ユニットに対する次のストレージデバイス・スタックの構築に応じて前記次のストレージデバイス・スタックをセカンダリ・ストレージデバイス・スタックに指定する
請求項３３に記載の製品。
【請求項３８】
前記命令群がコンピュータデバイスによって実行されることにより、更に、
前記第２のストレージデバイス・スタック上へのファイルシステムのマウントを防ぐ
請求項３７に記載の製品。
【請求項３９】
命令群を記録したストレージ媒体を備える製品であって、
コンピュータデバイスによって実行されることにより、
前記ネットワークアダプタが障害状態となったことを判定し、
前記ネットワークアダプタが障害状態となったことを前記フィルタドライバに対して通知する
製品。
【請求項４０】
前記命令群がコンピュータデバイスによって実行されることにより、更に、
パケットをリルートすることを目的として前記フィルタドライバによって使用される新規データパスを指定する
請求項３９に記載の製品。
【請求項４１】
前記命令群がコンピュータデバイスによって実行されることにより、更に、
前記第１のネットワークアダプタに送信されたペンディングパケットの処理を成功ステータスで完了する
請求項３９に記載の製品。
【請求項４２】
前記命令群がコンピュータデバイスによって実行されることにより、更に、
前記ネットワークアダプタが修復されたことを判定し、
前記ネットワークアダプタが修復されたことを前記フィルタドライバに通知する
請求項３９に記載の製品。
【請求項４３】
命令群を記録したストレージ媒体を備える製品であって、
コンピュータデバイスによって実行されることにより、
複数のデータパスのうち各データパスに対するデータ分担量を決定し、
ターゲット論理ユニットに対する最大コマンド数を特定し、
前記データ分担量および前記最大コマンド数に基づいてパケットを送信するデータパスを選択する
製品。
【請求項４４】
前記命令群がコンピュータデバイスによって実行されることにより、更に、
チーム内の各データパスに関連する負荷分散シェアを決定し、
各データパスに対して送信されるパケットの平均データ長を決定する
請求項４３に記載の製品。
【請求項４５】
前記データパスに対するデータ分担量および最大コマンド数のうちの少なくとも１つに達するまで選択されたデータパスにパケットが送信されるラウンドロビン技術を使用して、前記データパスが選択される請求項４３に記載の製品。
【請求項４６】
命令群を記録したストレージ媒体を備える製品であって、
コンピュータデバイスによって実行されることにより、
複数のデータパスの各データパスに対するデータ転送速度を決定し、
複数のデータパスの各データパスに対する前記データ転送速度に基づいて複数のデータパスの各データパスに対する負荷分散シェアを更新し、
複数のデータパスの各データパスに対する前記負荷分散シェアに基づいてパケットを送信するデータパスを選択する
製品。
【請求項４７】
前記データ転送速度は、転送されたデータの合計に対するデータ転送に費やした時間の合計の比率として、前記複数のデータパスの各データパスに対して計算される請求項４６に記載の製品。
【請求項４８】
前記データ転送速度が決定される頻度は調整可能である請求項４６に記載の製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示内容は、フェイルオーバおよび負荷分散の方法、システム、およびプログラムに関する。
【背景技術】
【０００２】
Ｉ＿Ｔ  ｎｅｘｕｓは、イニシエータ・デバイスとターゲット・デバイスとの組み合わせである。入力／出力（Ｉ／Ｏ）処理を要求するデバイスはイニシエータと呼ばれ、これらの処理を実行するデバイスはターゲットと呼ばれる。例えば、ホストコンピュータはイニシエータでありうるし、ストレージデバイスはターゲットでありうる。ターゲットは１つ以上の独立したストレージデバイスを有してもよい。
【０００３】
ホストバスアダプタ（ＨＢＡ）は、オペレーティングシステムとスモール・コンピュータ・システム・インタフェース（ＳＣＳＩ）バスとを「接続」するハードウェアデバイスである。ＨＢＡは、ホストコンピュータと通信パスの間のデータ転送を管理する。ＨＢＡチーミングは、「チーム」を形成することを目的として集められたいくつかのＨＢＡのグループを指し、チーム内の各ＨＢＡは、特定のターゲットに接続されかつ特定のターゲットにデータを送信しうる。ＨＢＡチームは、インターネット・スモール・コンピュータ・システム・インタフェース（ｉＳＣＳＩ）（ＩＥＴＦ  ＲＦＣ  ３３４７，ｐｕｂｌｉｓｈｅｄ  Ｆｅｂｒｕａｒｙ  ２００３）のポータル・グループ・コンセプト上に構築されてもよい。ｉＳＣＳＩは、２００３年２月にＩＥＴＦによって標準として定義された。ポータル・グループ・コンセプトは、ポータル間に広がる接続におけるセッションの調整機能を集合的にサポートする、ｉＳＣＳＩネットワークエンティティ内のネットワークポータルの集合と定義されうる。
【０００４】
ＨＢＡチーミングは、Ｗｉｎｄｏｗｓ（登録商標）  ２０００、Ｗｉｎｄｏｗｓ  ＸＰ、Ｗｉｎｄｏｗｓ  ．ＮＥＴオペレーティングシステムを実行するスモール・コンピュータ・システム・インタフェース（ＳＣＳＩ）（Ａｍｅｒｉｃａｎ  Ｎａｔｉｏｎａｌ  Ｓｔａｎｄａｒｄｓ  Ｉｎｓｔｉｔｕｔｅ  （ＡＮＳＩ）  ＳＣＳＩ  Ｃｏｎｔｒｏｌｌｅｒ  Ｃｏｍｍａｎｄｓ−２（ＳＣＣ−２）  ＮＣＩＴＳ．３１８：１９９８）イニシエータと共に使用されてもよい。Ｉ＿Ｔ  ｎｅｘｕｓの接続を回復する方法は、複数のトランスミッション・コントロール・プロトコル（ＴＣＰ）接続（Ｉｎｔｅｒｎｅｔ  Ｅｎｇｉｎｅｅｒｉｎｇ  Ｔａｓｋ  Ｆｏｒｃｅ  （ＩＥＴＦ）  Ｒｅｑｕｅｓｔ  ｆｏｒ  Ｃｏｍｍｅｎｔｓ  （ＲＦＣ）  ７９３，  ｐｕｂｌｉｓｈｅｄ  Ｓｅｐｔｅｍｂｅｒ  １９８１）に基づいてもよい。すなわち、Ｗｉｎｄｏｗｓオペレーティングシステム上で実行されるｉＳＣＳＩイニシエータから送信されたパケットは、複数のイニシエータとターゲットの間の接続によって送信および／または受信される。１つのＨＢＡ内で同一ターゲットに対して複数の接続が確立されると、ミニポートドライバは、フェイルオーバ（すなわち、１つの接続が障害状態になった場合に、他の接続にパケットをルーティングすること）および負荷分散（すなわち、複数のＨＢＡ接続間で負荷を分散すること）を処理しうる。
【０００５】
しかし、従来技術では、それぞれが同一ターゲットに対して１つ以上の接続を有する、いくつかのＨＢＡ間におけるフェイルオーバおよび負荷分散を行うことが必要とされている。
【０００６】
明細書全体において参照番号が対応する部分を表す図面について、以下に説明する。
【図面の簡単な説明】
【０００７】
【図１Ａ】いくつかの実施形態が実装されるコンピュータ環境を示す図である。
【図１Ｂ】特定の実施形態が実装されるコンピュータ環境を示す図である。
【図２Ａ】任意のクラス下位フィルタドライバを含む、Ｗｉｎｄｏｗｓストレージデバイス・ドライバスタックを示すブロック図である。
【図２Ｂ】いくつかの実施形態によるＳＣＳＩ環境において使用されうる、フェイルオーバおよび負荷分散機能を有するストレージデバイス・ドライバスタックを示すブロック図である。
【図３】いくつかの実施形態によるフェイルオーバおよび負荷分散機能を有するイニシエータの構成例を示すブロック図である。
【図４Ａ】いくつかの実施形態による第２のストレージデバイス・スタックを隠蔽する処理を示す第１の図である。
【図４Ｂ】いくつかの実施形態による第２のストレージデバイス・スタックを隠蔽する処理を示す第２の図である。
【図５Ａ】いくつかの実施形態による通知機構の処理を示す第１の図である。
【図５Ｂ】いくつかの実施形態による通知機構の処理を示す第２の図である。
【図５Ｃ】いくつかの実施形態による通知機構の処理を示す第３の図である。
【図６Ａ】いくつかの実施形態による負荷分散の処理を示す第１の図である。
【図６Ｂ】いくつかの実施形態による負荷分散の処理を示す第２の図である。
【発明を実施するための最良の形態】
【０００８】
以下の説明では、本明細書の一部でありいくつかの実施形態を説明する、添付の図面が参照される。実施形態の範囲から逸脱することなく、その他の実施形態が利用されてもよく、また、構造および処理が変更されてもよいと理解されるべきである。
【０００９】
図１Ａは、いくつかの実施形態が実装されうるコンピュータ環境を示す。コンピュータ１０２はイニシエータとして動作し、データストレージ１４０はターゲットとして動作して、Ｉ＿Ｔ  ｎｅｘｕｓを形成する。コンピュータ１０２は、１つ以上の中央演算処理装置（ＣＰＵ）１０４、揮発性メモリ１０６、非揮発性ストレージ１０８（例：磁気ディスクドライブ、光ディスクドライブ、テープドライブ、など）、オペレーティングシステム１１０（例：Ｗｉｎｄｏｗｓ  ２０００、Ｗｉｎｄｏｗｓ  ＸＰ、Ｗｉｎｄｏｗｓ  ．ＮＥＴ）、および１つ以上のネットワークアダプタ１２８を有する。いくつかの実施形態では、各ネットワークアダプタはホストバスアダプタ（ＨＢＡ）である。更に、フィルタドライバ１１２、ミニポートドライバ１１４、およびアプリケーションプログラム１２４は、メモリ１０６において実行される。
【００１０】
コンピュータ１０２は、メインフレーム、サーバ、パーソナルコンピュータ、ワークステーション、ラップトップ、ハンドヘルドコンピュータなどのような、従来技術のコンピュータデバイスを含んでもよい。いかなるＣＰＵ１０４およびオペレーティングシステム１１０が使用されてもよい。メモリ管理操作の一部として、メモリ１０６内のプログラムおよびデータは、ストレージ１０８にスワップされてもよい。
【００１１】
データストレージ１４０は、１つ以上の論理ユニット（すなわち、ｎが正の整数である場合は、ｎ個の論理ユニット。いくつかの実施形態では、ｎは１２８より小さい。）を有する。理解を容易にすることを目的として、論理ユニット０、論理ユニット１、および論理ユニットｎが示される。各論理ユニットは、独立したストレージデバイスとして説明されてもよい。更に、論理ユニット番号（ＬＵＮ）は、各論理デバイスに対して関連付けられる。いくつかの実施形態では、ＨＢＡチームは、ターゲットおよびＬＵＮに基づいて構成され（すなわち、あるターゲットの特定のＬＵＮに対してデータを送信できるＨＢＡが１つのＨＢＡチームにグループ化される）、また、１つのＨＢＡは、異なる複数のＨＢＡチームに属してもよい。
【００１２】
各ネットワークアダプタ１２８は、ネットワークアダプタ１２８のハードウェアに実装された種々のコンポーネントを有する。各ネットワークアダプタ１２８は、ローカルエリアネットワーク（ＬＡＮ）、インターネット、ワイドエリアネットワーク（ＷＡＮ）、ストレージエリアネットワーク（ＳＡＮ）、ＷｉＦｉ（Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｅｌｅｃｔｒｉｃａｌ  ａｎｄ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｅｎｇｉｎｅｅｒｓ  （ＩＥＥＥ）  ８０２．１１ｂ，  ｐｕｂｌｉｓｈｅｄ  Ｓｅｐｔｅｍｂｅｒ  １６，  １９９９）、ワイヤレスＬＡＮ（ＩＥＥＥ  ８０２．１１ｂ，  ｐｕｂｌｉｓｈｅｄ  Ｓｅｐｔｅｍｂｅｒ  １６，  １９９９）などを含むネットワーク１７６によって、データのパケットを送受信することができる。
【００１３】
ストレージドライバ１２０は、メモリ１６０内で実行され、各ネットワークアダプタ１２８と通信をすることおよびオペレーティングシステム１１０と各ネットワークアダプタ１２８の間をインタフェースで接続することを目的として、ネットワークアダプタ１２８特有のコマンドを有する。ネットワークアダプタ１２８およびストレージドライバ１２０は、ＳＣＳＩコマンドがｉＳＣＳＩパケットにラップされてｉＳＣＳＩパケットがＴＣＰパケットにラップされるように、ｉＳＣＳＩパケットを処理するロジックを実装する。トランスポート・プロトコル・レイヤは、受信したトランスミッション・コントロール・プロトコル（ＴＣＰ）（Ｉｎｔｅｒｎｅｔ  Ｅｎｇｉｎｅｅｒｉｎｇ  Ｔａｓｋ  Ｆｏｒｃｅ  （ＩＥＴＦ）  Ｒｅｑｕｅｓｔ  ｆｏｒ  Ｃｏｍｍｅｎｔｓ  （ＲＦＣ）  ７９３，  ｐｕｂｌｉｓｈｅｄ  Ｓｅｐｔｅｍｂｅｒ  １９８１）パケットからペイロードを取り出して、例えばアプリケーションプログラム１２４にデータを渡すことを目的として、ストレージドライバ１２０にデータを転送する。更に、アプリケーションプログラム１２４は、ストレージドライバ１２０にデータを送信し、ストレージドライバ１２０は、ネットワーク１７６を介してデータを送信する前にＴＣＰ／ＩＰパケット内にデータをパッケージすることを目的として、データをトランスポート・プロトコル・レイヤに送信する。
【００１４】
バスコントローラ１３４は、各ネットワークアダプタ１２８がコンピュータバス１６０と通信できるようにする。コンピュータバス１６０は、Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）バス、ＰＣＩ  ｅｘｐｒｅｓｓバス、Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＩＳＡ）、Ｅｘｔｅｎｄｅｄ  ＩＳＡ、ＭｉｃｒｏＣｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＭＣＡ）などのような、いかなる従来技術のバスインタフェースを含んでもよい。ネットワークアダプタ１２８は、ネットワーク１７６によってリモートデータストレージとのネットワークパケットの送受信を行うメディアアクセスコントロール（ＭＡＣ）機能を実装することを目的として、物理通信レイヤ１３２を有する。いくつかの実施形態では、ネットワークアダプタ１２８は、イーサネットプロトコル（ＩＥＥＥ  ｓｔｄ．８０２．３，  ｐｕｂｌｉｓｈｅｄ  Ｍａｒｃｈ  ８，  ２００２）、ファイバーチャネル（ＩＥＴＦ  ＲＦＣ  ３６４３，  ｐｕｂｌｉｓｈｅｄ  Ｄｅｃｅｍｂｅｒ  ２００３）、または従来技術のいかなるネットワーク通信プロトコルを実装してもよい。
【００１５】
ストレージ１０８は、内部ストレージデバイス、接続されたストレージデバイス、またはネットワーク経由でアクセス可能なストレージを含んでもよい。ストレージ１０８内のプログラムは、メモリ１０６にロードされてＣＰＵ１０４によって実行される。入力デバイス１５０は、ＣＰＵ１０４に対するユーザ入力を提供することを目的として使用され、キーボード、マウス、ペンスタイラス、マイクロフォン、タッチ・センシティブ・ディスプレイスクリーン、または従来技術の他のいかなる有効化または入力機構を含んでもよい。出力デバイス１５２は、ＣＰＵ１０４、または、ディスプレイモニタ、プリンタ、ストレージなどのような他のコンポーネントから転送される情報をレンダリングすることができるデバイスである。
【００１６】
いくつかの実施形態では、ストレージドライバ１２０に加えて、コンピュータ１０２は他のドライバも有してもよい。
【００１７】
ネットワークアダプタ１２８は、コンピュータ１０２またはネットワーク１７６から受信するパケットを処理することを目的とした追加の操作を行う、追加のハードウェアロジックを有してもよい。更に、ネットワークアダプタ１２８は、コンピュータ１０２にかかる処理の負荷を更に軽減することを目的としてトランスポート・プロトコル・レイヤをコンピュータストレージドライバ１２０ではなくネットワークアダプタに実装するために、トランスポート・レイヤ・オフロード・エンジン（ＴＯＥ）を実装してもよい。あるいは、トランスポート・レイヤは、ストレージドライバまたは他のドライバ１２０（例：オペレーティングシステムにより提供される）に実装されてもよい。
【００１８】
いくつかの実施形態では、種々の構造および／またはバッファ（図示なし）がメモリ１０６に存在してもよく、また、メモリ１０６から独立したストレージユニットに存在してもよい。
【００１９】
図１Ｂは、特定の実施形態が実装されるコンピュータ環境を示す。図１Ｂを参照すると、コンピュータ１０２は、ホストバスアダプタ（ＨＢＡ）１２８ａ、１２８ｂ、および１２８ｃと相互に作用するストレージドライバ１２０を有する。各ＨＢＡ１２８ａ、１２８ｂ、および１２８ｃは、ネットワークアダプタ１２８（図１Ａ）として説明されうる。コンピュータ１０２およびＨＢＡ１２８ａ、１２８ｂ、および１２８ｃは、イニシエータとして説明されてもよく、データストレージ１４０は、ターゲットとして説明されてもよい。データストレージ１４０は、論理ユニットを表す論理ユニット番号（ＬＵＮ）を図示する。
【００２０】
図２Ａは、任意のクラス下位フィルタドライバを含むＷｉｎｄｏｗｓストレージデバイス・ドライバスタック２００を示すブロック図である。ストレージデバイス・ドライバスタック２００は、ストレージクラスドライバ２１２に対してパケットを送受信しうる上位レイヤプロトコル（ＵＬＰ）２１０を有する。ストレージクラスドライバ２１２は、クラス下位フィルタドライバ２１４に対してパケットを送受信しうる。いくつかの実施形態では、クラス下位フィルタドライバは任意である。クラス下位フィルタドライバ２１４は、ポートドライバ２１６に対してパケットを送受信しうる。ポートドライバ２１６は、ミニポートドライバ２１８と通信する。ミニポートドライバ２１８は、実施形態により提供されるコールバックインタフェースによって、クラス下位フィルタドライバ２１４と通信することができる。
【００２１】
実施形態は、ＨＢＡ接続間のフェイルオーバおよび負荷分散を提供することを目的として、クラス下位フィルタドライバ２１４に基づく特別なフィルタドライバをポートドライバ２１６の上に提供する。フィルタドライバは、ＨＢＡコンテキスト・スイッチングおよびパス・コントロールを処理する。また、フィルタドライバはパケットの分散も提供する。特に、フィルタドライバは、ストレージクラスドライバ２１２とポートドライバ２１６の間の入力／出力リクエストパケット（ＩＲＰ）に含まれるＳＣＳＩリクエストブロック（ＳＲＢ）を探索する。いくつかの実施形態では、フィルタドライバは下位レベルのクラスフィルタドライバとして実装される。フィルタドライバは、ストレージデバイスのインスタンスが作成されるとすぐに通知される。そして、フィルタドライバは、ストレージドライバスタック２００のクラス下位フィルタドライバ２１４の下に設置される。
【００２２】
図２Ｂは、いくつかの実施形態によるＳＣＳＩ環境において使用されうる、フェイルオーバおよび負荷分散機能を有するストレージデバイス・ドライバスタック２５０を示すブロック図である。ストレージデバイス・ドライバスタック２５０は、Ｗｉｎｄｏｗｓ  ２０００、Ｗｉｎｄｏｗｓ  ＸＰ、またはＷｉｎｄｏｗｓ  ．ＮＥＴオペレーティングシステムと共に使用されてもよい。ストレージデバイス・ドライバスタック２５０は、ＳＣＳＩディスククラスドライバ２６２に対してＩＲＰを送受信しうる上位レイヤプロトコル（ＵＬＰ）２６０を有する。ＳＣＳＩディスククラスドライバ２６２は、下位レベルクラスフィルタドライバ２６４に対してＳＲＢ／ＩＲＰを送受信しうる。下位レベルクラスフィルタドライバ２６４は、ＳＣＳＩポートドライバ２６６に対してＳＲＢ／ＩＲＰを送受信しうる。ＳＣＳＩポートドライバ２６６は、ＳＣＳＩミニポートドライバ２６８と通信を行う。ＳＣＳＩミニポートドライバ２６８は、コールバックインタフェースによって下位レベルクラスフィルタドライバ２６４と通信することができる。
【００２３】
図３は、いくつかの実施形態によるフェイルオーバおよび負荷分散機能を有するイニシエータの構成例を示すブロック図である。図３を参照すると、ストレージクラスドライバは、ポート／ミニポートドライバと通信するフィルタドライバと通信する。例えば、ストレージクラスドライバは、ストレージクラスドライバ１デバイスオブジェクト３１０およびフィルタドライバ１デバイスオブジェクト３１２を使用してフィルタドライバと通信し、フィルタドライバは、フィルタドライバ１デバイスオブジェクト３１２およびポート／ミニポートドライバデバイスオブジェクト３１６、３１４を使用してポート／ミニポートドライバと通信する。ミニポートドライバは、ポートドライバのエクスポートルーチンによってＨＢＡと通信する。各ＨＢＡは、１つ以上のターゲットへの通信パスを有する。例えば、ＨＢＡ１  ３１８は、ターゲット１  ３２０およびターゲット２  ３４０への通信パスを有する。ＨＢＡ２  ３３８は、ターゲット１  ３２０およびターゲット２  ３４０への通信パスを有する。ＨＢＡ３  ３５８は、ターゲット２  ３４０およびターゲット３３６０への通信パスを有する。実施形態は、いくつかのＨＢＡが同一ターゲットへの接続を有する複数のＨＢＡ３１８、３３８、および３５８間におけるフェイルオーバおよび負荷分散を提供する。いくつかの実施形態では、提案されるフェイルオーバおよび負荷分散の手法は、ｉＳＣＳＩポータル・グループ・コンセプト上に構築されるＨＢＡチーミングに基づく。
【００２４】
また、いくつかの実施形態では、１つのＨＢＡチームは、ターゲットおよびＬＵＮに基づいて構成され（すなわち、ターゲットの特定のＬＵＮに対してデータを送信できるＨＢＡがＨＢＡチームにグループ化される）、１つのＨＢＡは、それぞれ異なる複数のＨＢＡチームに属してもよい。例えば、データは、ターゲット２  ３４０内の同一のＬＵＮ（図示なし）に対して、フィルタドライバ１デバイスオブジェクト３１２、フィルタドライバ４デバイスオブジェクト３３２、およびフィルタドライバ５デバイスオブジェクト３５２を含むデータパスを通過しうる。これらの各データパスは、異なるＨＢＡ（それぞれＨＢＡ１  ３１８、ＨＢＡ２  ３３８、ＨＢＡ３  ３５８）を通過するので、ＨＢＡ１  ３１８、ＨＢＡ２  ３３８、およびＨＢＡ３  ３５８は、１つのＨＢＡチームに属する。すなわち、ＨＢＡチームの各ＨＢＡに対して、ターゲット２  ３４０内のＬＵＮに送信されるデータは、ＨＢＡチーム内の各ＨＢＡを通過してもよく（フェイルオーバ）、また、ＨＢＡチーム内の各ＨＢＡを同時に通過してもよい（負荷分散）。他の例としては、ターゲット１  ３２０のＬＵＮ（図示なし）へのデータパスは、ＨＢＡ１  ３１８およびＨＢＡ２  ３３８を通過するので、ＨＢＡチームは、ＨＢＡ１  ３１８およびＨＢＡ２  ３３８によっても形成される。
【００２５】
実施形態は、フィルタドライバにフェイルオーバおよび負荷分散機能を実装することを目的として、新しいコールバックインタフェースを提供する。
【００２６】
フェイルオーバ技術は、第１のＨＢＡまたは第１のＨＢＡを通過するデータパスが障害状態になった場合に、ターゲットへの通信パスにおける高可用性（すなわち、同一のターゲットに接続された第２のＨＢＡにパケットが送信される）を提供する。フェイルオーバを行うことを目的として、実施形態は、第２のストレージデバイス・スタックの隠蔽、および、通知機構を提供する。
【００２７】
図４Ａおよび４Ｂは、いくつかの実施形態による第２のストレージデバイス・スタックの隠蔽の処理を示す。制御は、論理ユニットに対してストレージデバイス・スタックが構築される、ブロック４００から開始する。ブロック４０２において、このストレージデバイス・スタックは論理ユニットに対する第１のストレージデバイス・スタックであるかどうかが判定される。それが第１のストレージデバイス・スタックである場合、処理はブロック４０４に進み、そうでない場合、処理はブロック４０４に進む。すなわち、同一のターゲットに対していくつかのＨＢＡが接続されている場合には、各ＨＢＡに対してフィルタドライバがＳＲＢを処理およびリダイレクトできるように、各ＨＢＡのターゲットにある各ＳＣＳＩ  ＬＵＮに対してストレージデバイス・スタックが作成される。同一ターゲットに対して構築された各ストレージデバイス・スタック上にファイルシステムがマウントされると、同一ストレージデバイスのインスタンスに対する複数のアクセスによる、同期の問題に至る可能性がある。このため、各ＬＵＮに対する第１のストレージデバイス・スタックは、「プライマリ」ストレージデバイス・スタックとなる。その後、そのＬＵＮに対して構築されたその他すべてのストレージデバイス・スタックは、「セカンダリ」ストレージデバイス・スタックとして扱われる。このように、ブロック４０４において、ストレージデバイス・スタックは、プライマリ・ストレージデバイス・スタックとして指名される。ブロック４０６において、ストレージデバイス・スタックは、セカンダリ・ストレージデバイス・スタックとして指名される。
【００２８】
例えば、ストレージクラスドライバ１デバイスオブジェクト３１０、フィルタドライバ１デバイスオブジェクト３１２、ポート／ミニポートドライバデバイスオブジェクト３１４および３１６のストレージデバイス・スタックは、この例では、プライマリ・ストレージデバイス・スタックとして指名される。ストレージクラスドライバ１ａデバイスオブジェクト３３０、フィルタドライバ４デバイスオブジェクト３３２、ポート／ミニポートドライバデバイスオブジェクト３３４および３３６のストレージデバイス・スタックは、この例では、セカンダリ・ストレージデバイス・スタックとして指名される。ストレージクラスドライバ１ａデバイスオブジェクト３５０、フィルタドライバ５デバイスオブジェクト３５２、ポート／ミニポートドライバデバイスオブジェクト３５４および３５６のストレージデバイス・スタックは、この例では、セカンダリ・ストレージデバイス・スタックとして指名される。フィルタドライバは、１つのプライマリ・ストレージデバイス・スタック（例：ストレージデバイス・スタック３１０、３１２、３１４、および３１６）上へのファイルシステムのマウントを可能にし、セカンダリ・ストレージデバイス・スタック（例：ストレージデバイス・スタック３３０、３３２、３３４、および３３６、ストレージデバイス・スタック３５０、３５２、３５４、および３５６）上へのファイルシステムのマウントを防ぐ。同様に、ストレージクラスドライバ２デバイスオブジェクトから始まるストレージデバイス・スタックは、プライマリ・ストレージデバイス・スタックであり、ストレージクラスドライバ２ａから始まるストレージデバイス・スタックは、セカンダリ・ストレージデバイス・スタックである。セカンダリ・ストレージデバイス・スタックの隠蔽により、データは、プライマリ・ストレージデバイス・スタックを経由して送信され、また、セカンダリ・ストレージデバイス・スタックを経由しない。
【００２９】
図４Ｂを参照すると、制御は、セカンダリ・ストレージデバイス・スタックからのパケットの処理が成功ステータスで完了される、ブロック４２０から開始する。ブロック４２２において、フィルタドライバは、成功ステータスをエラーステータスに変更する。ブロック４２４において、フィルタドライバは、センスキーの値を準備未完了にセットする。ブロック４２６において、フィルタドライバは、ストレージデバイスにメディアが存在しないことを示すセンスコードをセットする。このように、いくつかの実施形態では、セカンダリ・ストレージデバイス・スタック上へのファイルシステムのマウントを阻止することを目的として、フィルタドライバは、セカンダリ・ストレージデバイス・スタックからの処理が完了したＳＲＢのステータスを成功ステータスからエラーステータス（例：ＳＲＢ＿ＳＴＡＴＵＳ＿ＥＲＲＯＲ）にフリップし、センスキーの値をＳＣＳＩ＿ＳＥＮＳＥ＿ＮＯＴ＿ＲＥＡＤＹにセットし、追加のセンスコードをＳＣＳＩ＿ＡＤＳＥＮＳＥ＿ＮＯ＿ＭＥＤＩＡ＿ＩＮ＿ＤＥＶＩＣＥにセットする。
【００３０】
図５Ａ、５Ｂ、および５Ｃは、いくつかの実施形態による通知機構の処理を示す。フィルタドライバおよびミニポートドライバは、相互に作用するためのプロトコルを実装する。
【００３１】
図５Ａは、いくつかの実施形態によるミニポートドライバに実装されたフェイルオーバ処理の動作を示す。図５Ａを参照すると、制御は、ミニポートドライバにおいて特定のＨＢＡデータパスに対するパケットが受信される、ブロック５００から開始する。「ＨＢＡデータパス」は、ＨＢＡを経由するミニポートからターゲットに至るデータパスとして説明されてもよい。パケットの１つのタイプはＳＲＢでもよい。パケットの１つのタイプは、ＳＲＢであってもよい。ブロック５０２において、ＨＢＡデータパスが障害状態となると処理はブロック５０４に進み、ＨＢＡデータパスが障害状態でない場合は、処理はブロック５０８に進む。
【００３２】
ブロック５０４において、ミニポートドライバは、通知コールバックメソッドを使用してＨＢＡデータパスが障害状態となったことをフィルタドライバに通知する。任意に、ミニポートドライバは、フィルタドライバに新規のＨＢＡデータパス識別子を提供し、フィルタドライバは、パケットを新規のＨＢＡデータパスにリダイレクトする。例えば、ＨＢＡ１  ３１８、ＨＢＡ２  ３３８、およびＨＢＡ３  ３５８によって形成されるＨＢＡチームに対しては、ＨＢＡ１  ３１８が障害状態となった場合、ミニポートは、ＨＢＡ２  ３３８およびＨＢＡ３  ３５８のいずれかを含む新規のＨＢＡデータパスを指定してもよい。いくつかの実施形態では、フィルタドライバのデバイス追加方法として、通知コールバックメソッドへのポインタおよび現在のＨＢＡデータパスに対するフィルタデバイス・エクステンションへのポインタが、Ｉ／Ｏコントロール（ＩＯＣＴＬ）によってミニポートドライバに送信されてもよい。いくつかの実施形態では、ＨＢＡデータパスが障害状態となると、ミニポートドライバは、状態パラメータと現在のパスに相当するフィルタドライバのデバイスエクステンションを指すポインタパラメータと共に、通知コールバックメソッドをコールすることによって、ＨＢＡデータパスが障害状態となったことをフィルタドライバに通知する。
【００３３】
ミニポートドライバは、ポートドライバにＳＲＢキューをフリーズまたはバスリセットを開始させる可能性があるので、エラー状態ではパケットの処理を完了しない。その代わり、ブロック５０６において、ミニポートドライバは、障害状態となったＨＢＡデータパスに対するペンディング（すなわち、未処理）および新規パケットに対する処理を成功ステータスで完了する。ブロック５０８では、ＨＢＡデータパスが障害状態ではないので、ミニポートドライバは、そのＨＢＡデータパスによってターゲットにパケットを送信する。
【００３４】
例えば、ミニポート３１６において、ＨＢＡ１  ３１８に送信するＳＲＢが受信されかつＨＢＡ１  ３１８が障害状態にあると、ミニポートドライバ３１６は、ＳＲＢを他のＨＢＡにリダイレクトするようにフィルタドライバ３１２に通知することを目的として、ＨＢＡ１  ３１８に対する全てのペンディングＳＲＢの処理をプロトコルの一部として完了する。例えば、フィルタドライバ３１２は、ＳＲＢをＨＢＡ２  ３３８またはＨＢＡ３  ３５８にリダイレクトしてもよい。
【００３５】
図５Ｂは、いくつかの実施形態によるフェイルオーバを行うことを目的としてフィルタドライバに実装される動作を示す。制御は、フィルタドライバがＨＢＡデータパス障害通知を受信する、ブロック５１０から開始する。ブロック５１２において、新規ＨＢＡデータパスがミニポートドライバによって指定された場合、処理はブロック５１４に進み、指定されなかった場合、処理はブロック５１８に進む。ブロック５１４において、フィルタドライバは、障害状態のパスから処理が完了された各パケットのステータスを成功からビジーに変更する。このステータスの変更により、クラスドライバは、パケットを再送信する。パケットが再送信されると、フィルタドライバは、それらを新規の要求として扱い、可能であれば、それらを新規パスにリダイレクトする。
【００３６】
ブロック５１６において、フィルタドライバは、クラスドライバによってミスされたパケットを指定されたＨＢＡデータパスに送信する。ブロック５１８においては、新規パスの識別子が指定されていないので、フィルタドライバは、新規パスを選択する。いくつかの実施形態では、ＨＢＡチームにパスが１つだけ存在する場合には、フィルタドライバは、障害状態となったＨＢＡデータパスに新規パケットを送信し続ける（例：ＰＡＴＨ＿ＴＨＲＯＵＧＨモードで運用）。
【００３７】
図５Ｃは、いくつかの実施形態による、ＨＢＡが修復されたときにミニポートドライバに実装される動作を示す。制御は、ＨＢＡデータパスが修復される（例：ＨＢＡがオンライン状態となる、または、このＨＢＡを経由する以前障害状態だったデータパスが修復される）、ブロック５２０から開始する。ＨＢＡデータパスが修復されると、ミニポートドライバは、通知コールバックメソッド（ブロック５２２）をコールすることによってフィルタドライバに通知する。いくつかの実施形態では、ミニポートドライバは、状態パラメータおよび現在のパスに相当するフィルタドライバのデバイスエクステンションを指すポインタパラメータと共に通知コールバックメソッドをコールすることによって、ＨＢＡデータパスが修復されたことをフィルタドライバに通知する。ミニポートドライバは、フィルタドライバが新規パケットをリダイレクトすべき新規パスの識別子をフィルタドライバに送信してもよい。ブロック５２４において、新規ＨＢＡデータパスが指定された場合、処理はブロック５２６に進み、指定されない場合には、処理はブロック５２８に進む。
【００３８】
修復通知のあと、新規ＨＢＡデータパスが指定された場合は、フィルタドライバは、新規パケットを新規ＨＢＡデータパスに送信する（ブロック５２６）。新規ＨＢＡデータパスが指定されない場合は、フィルタドライバは、現在のアクティブパスにパケットを送信し続ける。
【００３９】
フェイルオーバ処理に加えて、実施形態は、複数のＨＢＡに及ぶ複数のＨＢＡデータパス間におけるＩ／Ｏ負荷の分散を行うフィルタドライバを提供する。実施形態は、静的な負荷分散および動的な負荷分散を提供する。
【００４０】
図６Ａおよび図６Ｂは、いくつかの実施形態による負荷分散の動作を示す。負荷分散を行うことを目的として、ＨＢＡチームの各ＨＢＡデータパスは、各データパスが処理することができる負荷の全Ｉ／Ｏ負荷に対する割合を表す、負荷分散シェアと呼ばれる値を有する。
【００４１】
図６Ａは、いくつかの実施形態による静的な負荷分散の動作を示す。制御は、フィルタドライバにおいて送信されるデータパケットが受信される、ブロック６００から開始する。ブロック６０２において、フィルタドライバは、ＨＢＡチームの各ＨＢＡデータパスに関連する負荷分散シェアを決定する。静的な負荷分散を行うことを目的として、負荷分散シェアは、手動で指定され、例えばＷｉｎｄｏｗｓレジストリなどに保存されてもよい。ミニポートドライバは、負荷分散シェアの値を取得し、通知コールバックメソッドによってそれらをフィルタドライバに転送する。負荷分散シェアの値を受信すると、フィルタドライバは、負荷分散シェアを新しい値に更新する。
【００４２】
ブロック６０４において、フィルタドライバは、各ＨＢＡデータパスに対して送信するパケットの可変平均データ長（ＭＤＬ）を決定する（例：パケットのＳＣＳＩ転送の長さ）。いくつかの実施形態では、負荷分散は、パケットの数ではなく転送されたパケットの実際のデータ長に基づいてもよい。ブロック６０６において、フィルタドライバは、各ＨＢＡデータパスに対するデータ分担量を決定する。いくつかの実施形態では、ＨＢＡデータパスのデータ分担量は、ＨＢＡデータパスのＭＤＬと、ＨＢＡデータパスの負荷分散シェアとＨＢＡチームにおける負荷分散シェアの最小値の割合との積（すなわち、データ分担量＝ＭＤＬ＊（負荷分散シェア／チームにおける負荷分散シェアの最小値））である。
【００４３】
いくつかの実施形態では、ＭＤＬは、各パケットまたはパケットの各グループに対して再計算され、データ分担量は、定期的に再計算される（例：一定数のパケットが転送された後）。定期的な再計算の間隔は、ＨＢＡチームのＨＢＡデータパスの数と調整可能な負荷分散の更新頻度の係数との積によって決定されてもよい。負荷分散の更新頻度の係数は、負荷分散の調整および性能の向上を可能にする。負荷分散の更新頻度は、例えばシステム管理者によって設定されてもよい。データ分担量を更新する頻度が高いほど、指定された負荷分散シェアと実際の負荷分散シェア間の違いは小さくなる。また、より頻繁な更新は、プロセッサ時間をより消費する可能性がある。
【００４４】
ブロック６０８において、フィルタドライバは、ターゲット論理ユニットに対する最大コマンド数を決定する。ブロック６１０において、フィルタドライバは、データ分担量またはターゲット論理ユニットに対する最大コマンド数に達するまでパケットが１つのＨＢＡデータパスに送信されるラウンドロビン技術を使用して、パケットを送信するＨＢＡデータパスを選択する。
【００４５】
すなわち、静的な負荷分散を行うことを目的として、ラウンドロビン技術が使用されてもよい。いくつかの実施形態では、ラウンドロビンの処理を行うことを目的として、現在のＨＢＡチームの正常なＨＢＡデータパスは、ダブルリンクドリストに集められる。そして、ＨＢＡデータパスは、負荷分散処理の間、このリストを使って切り替えられる。あるいは、パケットフローは、次のＨＢＡチームメンバに切り替えられる。すなわち、いくつかの実施形態では、送信されたデータ量がＨＢＡデータパスに対して以前計算されたデータ転送量またはターゲットＬＵＮ単位の最大ＳＣＳＩコマンド数に達するまで、そのパスに対するパケットの送信は継続する。
【００４６】
静的な負荷分散においては、ＨＢＡデータパス間における実際のパケットの分散は、指定された分散（例：例えばシステム管理者によって指定された負荷分散シェア）とは異なってもよい。実際の分散と指定された分散の違いが小さいほど、静的な負荷分散の品質は高くなる。指定された負荷分散シェアの値は、静的な負荷分散の性能に影響を与える。
【００４７】
図６Ｂは、いくつかの実施形態による動的な負荷分散の動作を示す。動的な負荷分散は、パス間におけるＩ／Ｏ負荷を動的に調整することにより、他のパスに使用可能な帯域が存在する間は１つのＨＢＡデータパスに対する混雑を回避する。このように、動的な負荷分散は、ストレージ／ネットワークの利用可能な帯域の、より効率的な使用を実現しようとする。
【００４８】
制御は、フィルタドライバがデータパケットを受信する、ブロック６２０から開始する。ブロック６２２において、フィルタドライバは、ＨＢＡチームの各ＨＢＡデータパスに対するデータ転送速度を決定する。いくつかの実施形態では、各ＨＢＡデータパスのデータ転送スピードは、転送されたデータの合計に対するデータ転送に費やした時間の合計の比率として計算される。更新ルーチンは、転送速度が更新される頻度を決定する。動的な負荷分散における調整可能なパラメータは、更新ルーチンが起動される頻度を定義する転送速度の更新頻度の係数である。転送速度の更新頻度の係数は、サブシステム特有の動作に基づいて調整されてもよい。
【００４９】
ブロック６２４において、フィルタドライバは、各ＨＢＡデータパスの負荷分散シェアを更新する。ＨＢＡチームの各パスに対する負荷分散シェアは、そのデータ転送速度に比例して更新されてもよい（例：選択されたＨＢＡデータパスのデータ転送速度／ＨＢＡチームのデータ転送速度）。ブロック６２６において、フィルタドライバは、負荷分散シェアに基づいてパケットを送信するＨＢＡデータパスを選択する。
【００５０】
フェイルオーバおよび負荷分散モードで動作している場合には、ＨＢＡの障害は、１つ以上のＨＢＡチームメンバを使用不可能にする。いくつかの実施形態では、残りのＨＢＡチームメンバは、動作を継続して指定された負荷分散シェア間において同一の割合を維持する。
【００５１】
このように、いくつかの実施形態は、高可用性と静的および動的な負荷分散との組み合わせを提供する。このソリューションを実装するソフトウェアモジュールは、比較的小規模でありシステムに対して小さいオーバヘッドしか課さない。いくつかの実施形態は、デバイススタックに対するフィルタドライバの挿入・削除によって、実施形態のソリューションによって提供される機能を迅速かつ容易に有効化および無効化する能力を提供する。実施形態は、種々のプラットフォーム（例：Ｗｉｎｄｏｗｓプラットフォーム（３２ビットまたは６４ビット））と共用できる。また、実施形態は、いかなるＳＣＳＩおよび／またはｉＳＣＳＩベースのＳＡＮおよび／またはネットワー・アタッチト・ストレージ（ＮＡＳ）システムに対しても適用可能である。更に、フェイルオーバおよび負荷分散に関する実施形態は、複数（２つ以上）のＨＢＡをサポートする。
本発明の実施例に関する追加の詳細な説明
【００５２】
上述のフェイルオーバおよび負荷分散の技術は、標準的なプログラミングおよび／またはソフトウェア、ファームウェア、ハードウェア、またはそのいかなる組み合わせを開発する工業技術を使用した方法、装置、または製品として実装されてもよい。本明細書における「製品」は、ハードウェアによって制御される論理（例：統合回路チップ、プログラマブル・ゲート・アレイ（ＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）、など）に実装されたコードまたは論理、または、磁気ストレージ媒体（例：ハードディスクドライブ、フロッピーディスク、テープ、など）、光ストレージ（ＣＤ−ＲＯＭ、光ディスク、など）、揮発性および非揮発性メモリデバイス（例：ＥＥＰＲＯＭ、ＲＯＭ、ＰＲＯＭ、ＲＡＭ、ＤＲＡＭ、ＳＲＡＭ、ファームウェア、プログラマブルロジック、など）などの、コンピュータ読み取り可能な媒体を指す。コンピュータ読み取り可能な媒体内のコードは、プロセッサによってアクセスされ実行される。好ましい実施形態が実装されたコードは、更に、転送メディアまたはネットワーク上のファイルサーバからアクセス可能であってもよい。このような場合、コードが実装される製品は、ネットワーク転送線、ワイヤレス転送メディア、空間を伝播する信号、ラジオ波、赤外線信号などの転送メディアを備えてもよい。このように、「製品」は、コードが埋め込まれた媒体を含んでもよい。更に、製品は、コードが埋め込まれ、処理され、実行されるハードウェアおよびソフトウェアコンポーネントの組み合わせを含んでもよい。当然のことながら、当業者は、本発明の実施形態の範囲から逸脱することなくこの構成に対して多くの修正が加えられうること、および、製品はいかなる従来技術の情報を担う媒体を含んでもよいことを認識するであろう。
【００５３】
上述の実施形態では、一定のロジックは、ドライバに実装された。代わりの実施形態では、ドライバおよび／またはネットワークアダプタに実装されたロジックは、その全てまたは一部がネットワークハードウェアに実装されてもよい。
【００５４】
いくつかの実施形態では、ネットワークアダプタは、ＰＣＩカードとして実装されてもよい。代わりの実施形態では、ネットワークアダプタは、コンピュータ１０２のマザーボードに設置された集積回路コンポーネントを含んでもよい。
【００５５】
いくつかの実施形態では、ネットワークアダプタは、ネットワークアダプタのポートに接続されたケーブルを介してデータを転送するように設定されてもよい。代わりの実施形態では、ネットワークアダプタの実施形態は、ワイヤレスＬＡＮのようなワイヤレスネットワークまたは接続によってデータを転送するように設定されてもよい。
【００５６】
図４Ａ、図４Ｂ、図５Ａ、図５Ｂ、図５Ｃ、図６Ａ、および図６Ｃに示される論理は、一定のイベントが一定の順番で発生することを示す。代わりの実施形態では、ある動作は、異なる順番で実行されてもよく修正または削除されてもよい。更に、上述の論理に動作を追加しても、上述の実施形態と同じである。また、上述の処理は、順次に実行されてもよくまたは並列に実行されてもよい。更に、動作は、１つのプロセッシングユニットまたは分散プロセッシングユニットによって実行されてもよい。
【００５７】
上述の種々の実施形態に関する説明は、本発明を図示および説明することを目的として提供された。これらの説明は、本発明の実施形態の全てを説明していないし、また、これらに限定されない。上記の説明により、多くの修正またはバリエーションが可能である。本発明の実施形態の範囲は、上述の詳細な説明によってではなく、添付の特許請求の範囲によって限定されることが意図される。上述の明細書、例、およびデータは、本発明の実施形態における構成の製造および使用に関する完全な説明を提供している。本発明の実施形態の本質および範囲から逸脱することなく、多くの実施形態が構築されうることから、本発明の実施形態は下記に添付の特許請求の範囲に属する。
【図１Ａ】
2007527172.tif 000003
【図１Ｂ】
2007527172.tif 000004
【図２Ａ】
2007527172.tif 000005
【図２Ｂ】
2007527172.tif 000006
【図３】
2007527172.tif 000007
【図４Ａ】
2007527172.tif 000008
【図４Ｂ】
2007527172.tif 000009
【図５Ａ】
2007527172.tif 000010
【図５Ｂ】
2007527172.tif 000011
【図５Ｃ】
2007527172.tif 000012
【図６Ａ】
2007527172.tif 000013
【図６Ｂ】
2007527172.tif 000014
【国際調査報告】
2007527172.tif 000015
2007527172.tif 000016
2007527172.tif 000017
2007527172.tif 000018