(57)【特許請求の範囲】
【請求項１】
オペレーティングシステムと、
前記オペレーティングシステムと通信するドライバと、
前記ドライバと通信する複数のホストバスアダプタと
を備えるシステムであって、
前記ホストバスアダプタは、前記オペレーティングシステムと複数のストレージアレイとの間に複数のデータ伝送パスを提供し、前記複数のストレージアレイの各々は、複数のポートと、複数の論理装置番号（ＬＵＮ）記憶装置とを含み、前記ドライバは、前記複数のホストバスアダプタのうちの１つのホストバスアダプタから、前記複数のデータ伝送パスのうちの１つのデータ伝送パスにおける障害を示すリモート状態変化通知（ＲＳＣＮ）を受信することと、前記オペレーティングシステムに負担をかけることなく全ての現在の入力／出力動作を中止して、それらをセカンダリパス上でやり直すことにより、自動的にフェイルオーバーすることとを実行するように動作可能である、システム。
【請求項２】
前記ドライバは、前記複数のホストバスアダプタのうちの１つのホストバスアダプタから、以前に障害が発生したプライマリパスの修復を示すＲＳＣＮを受信することと、前記オペレーティングシステムに通知することなく、データ伝送を前記セカンダリパスから前記プライマリパスへ変更することとを実行するように動作可能である、請求項１に記載のシステム。
【請求項３】
前記ドライバは、ホストバスアダプタ内に実装される、請求項１に記載のシステム。
【請求項４】
前記ホストバスアダプタは、複数のファイバチャネルスイッチを介して前記複数のストレージアレイと通信するように動作可能である、請求項１に記載のシステム。
【請求項５】
前記ホストバスアダプタは、複数のファイバチャネルハブを介して前記複数のストレージアレイと通信するように動作可能である、請求項１に記載のシステム。
【請求項６】
前記ホストバスアダプタは、ファイバチャネルファブリックを介して前記複数のストレージアレイと通信するように動作可能である、請求項１に記載のシステム。
【請求項７】
前記ホストバスアダプタは、インターネット小型コンピュータシステムインターフェース（ｉＳＣＳＩ）リンクを介して前記記憶装置と通信する、請求項１に記載のシステム。
【請求項８】
前記ホストバスアダプタは、インターネット小型コンピュータシステムインターフェース（ｉＳＣＳＩ）ホストバスアダプタである、請求項１に記載のシステム。
【請求項９】
複数のパスを介して前記ホストバスアダプタと前記複数のストレージアレイとの間でデータを転送するように動作可能なスイッチのファブリックをさらに備える、請求項１に記載のシステム。
【請求項１０】
前記システムは、前記オペレーティングシステムに負荷をかけることなく、通電中のシステムファームウェアのアップグレードをホストバスアダプタで受信するように動作可能である、請求項１に記載のシステム。
【請求項１１】
前記ドライバは、ホストバスアダプタと前記複数のストレージアレイとの間のリンクが所定の時間正常に機能なくなった後に、入力／出力コマンドを中止するように動作可能である、請求項１に記載のシステム。
【請求項１２】
前記ドライバは、前記複数のストレージアレイが所定の時間前記ホストバスアダプタとの通信を停止した後に、入力／出力コマンドを中止するように動作可能である、請求項１に記載のシステム。
【請求項１３】
前記ドライバは、リモート状態変化通知を受信することと、障害のあるパスの情報を要求することとを実行するように動作可能である、請求項１に記載のシステム。
【請求項１４】
前記ドライバは、各パス上の一方の方向へのデータ伝送と、当該パス上のもう一方の方向へのデータ伝送とを独立して制御するように動作可能である、請求項１に記載のシステム。
【請求項１５】
前記ドライバは、データを失うことなく、データ伝送パスを変更する、請求項１に記載のシステム。
【請求項１６】
前記オペレーティングシステムは、ソフトウェアアプリケーションと、オペレーティングシステムファイルシステムと、オペレーティングシステム小型コンピュータシステムインターフェース（ＳＣＳＩ）ドライバとを備える、請求項１に記載のシステム。
【請求項１７】
コマンドを前記ドライバに送信するように動作可能な管理アプリケーションをさらに備える、請求項１に記載のシステム。
【請求項１８】
管理アプリケーションと前記ドライバとの間にアプリケーションプログラムインターフェースをさらに備える、請求項１に記載のシステム。
【請求項１９】
オペレーティングシステムと、
前記オペレーティングシステムと通信するドライバと、
前記ドライバと通信する複数のホストバスアダプタと
を備えるシステムであって、
前記ホストバスアダプタは、前記オペレーティングシステムと複数のストレージアレイとの間に複数のデータ伝送パスを提供し、前記複数のストレージアレイの各々は、複数のポートと、複数の論理装置番号（ＬＵＴ）記憶装置とを含み、前記ドライバは、前記複数のホストバスアダプタのうちの１つのホストバスアダプタから、前記複数のデータ伝送パスのうちの１つのデータ伝送パスにおけるデータ伝送状態を示すリモート状態変化通知（ＲＳＣＮ）を受信することと、前記オペレーティングシステムに負荷をかけることなく前記データ伝送パス上のトラフィックをリダイレクトすることによって前記データ伝送パスのデータ伝送負荷を自動的に調整することとを実行するように動作可能である、システム。
【請求項２０】
前記ドライバは、前記オペレーティングシステムから前記複数のストレージアレイへの第１の方向の伝送パスのデータ伝送負荷を、前記記憶装置から前記オペレーティングシステムへの第２の方向の伝送パスの伝送負荷の調整と独立して調整するように動作可能である、請求項１９に記載のシステム。
【請求項２１】
前記ドライバは、データを失うことなく、伝送負荷を調整する、請求項１９に記載のシステム。
【請求項２２】
前記オペレーティングシステムは、入力／出力コマンドに対して特定のストレージアレイを識別し、前記ドライバは、パスの状態に基づいて前記複数のパスから１つのパスを選択し、前記ドライバは、前記選択されたパス上に入力／出力コマンドを送信する、請求項１９に記載のシステム。
【請求項２３】
前記ドライバが、どのパスを利用できるかを判定するように動作可能である、請求項１９に記載のシステム。
【請求項２４】
前記ドライバとホストバスアダプタとの間にファイバチャネルポートドライバをさらに備え、前記ファイバチャネルポートドライバは、前記ホストバスアダプタに対するファイバチャネルコマンドとして要求を処理するように動作可能である、請求項１９に記載のシステム。
【請求項２５】
コマンドを前記ドライバに送信するように動作可能な管理アプリケーションをさらに備える、請求項１９に記載のシステム。
【請求項２６】
前記ドライバは、前記オペレーティングシステムに負荷をかけることなく、アクティブ伝送パスからイナクティブ伝送パスへのデータ伝送負荷を調整するように動作可能である、請求項１９に記載のシステム。
【請求項２７】
前記ドライバは、あるホストバスアダプタから別のホストバスアダプタへと入力／出力動作を切り換えるように動作可能である、請求項１９に記載のシステム。
【請求項２８】
前記ドライバは、ホストバスアダプタのセット内の１つのホストバスアダプタからスタンバイホストバスアダプタへと入力／出力動作を切り換えるように動作可能である、請求項１９に記載のシステム。
【請求項２９】
前記ドライバは、第１の伝送パスに対するデータ伝送負荷の第１の比率と、第２の伝送パスに対するデータ伝送負荷の第２の比率とを構成するように動作可能である、請求項１９に記載のシステム。
【請求項３０】
送信された前記データは、入力／出力動作を含む、請求項２９に記載のシステム。
【請求項３１】
前記ドライバは、オペレータが、前記システムが稼働中に、第１の伝送パス上の第１のデータ伝送負荷と第２の伝送パス上の第２のデータ伝送負荷とを構成することを可能にする、請求項１９に記載のシステム。
【請求項３２】
前記ドライバは、前記オペレーティングシステムに通知することなく、１つの伝送パス上のデータ伝送負荷を、別の伝送パス上の少なくとも１つのデータトラフィックの状態を検出した後に、増加させるように動作可能である、請求項１９に記載のシステム。
【請求項３３】
送信された前記データは、入力／出力動作を含む、請求項３２に記載のシステム。
【請求項３４】
前記ドライバは、前記オペレーティングシステムに通知することなく、別の伝送パスよりも少ない装置に対してデータを伝送する伝送パスのデータ伝送負荷を増加させるように動作可能である、請求項１９に記載のシステム。
【請求項３５】
前記ドライバは、前記オペレーティングシステムに通知することなく、別の伝送パスに接続された第２のストレージアレイよりも少ない数の入力／出力用の動作を有する第１のストレージアレイに接続された伝送パスのデータ伝送負荷を増加させるように動作可能である、請求項１９に記載のシステム。
【請求項３６】
前記ドライバは、前記第１のストレージアレイおよび前記第２のストレージアレイの入力／出力用の動作の待ち行列を維持する、請求項３５に記載のシステム。
【請求項３７】
前記ドライバは、別の伝送パスに対応付けられた別のホストバスアダプタよりも待ち状態のコマンドが少ないホストバスアダプタに対応付けられた伝送パスのデータ伝送負荷を増加させるように動作可能である、請求項１９に記載のシステム。
【請求項３８】
前記ドライバは、前記ホストバスアダプタの入力／出力用の動作の待ち行列を維持する、請求項３７に記載のシステム。
【請求項３９】
前記ドライバは、前記オペレーティングシステムに負荷をかけることなく、別の伝送パスに接続された別の対象ポートよりも待ち状態の入力／出力コマンドが少ない対象ポートに接続された伝送パスのデータ伝送負荷を増加させるように動作可能である、請求項１９に記載のシステム。
【請求項４０】
前記ドライバは、前記対象ポートの入力／出力用の動作の待ち行列を維持する、請求項３９に記載のシステム。
【請求項４１】
前記ドライバは、各パス上のデータ伝送のレベルを追跡するように動作可能である、請求項１９に記載のシステム。
【請求項４２】
前記システムは、前記オペレーティングシステムに負荷をかけることなく、ホストバスアダプタで通電中のシステムファームウェアのアップグレードを受信するように動作可能である、請求項１９に記載のシステム。
【請求項４３】
前記ドライバは、オペレータが、前記システムが稼働中に複数のモードから選択することを可能にし、
第１のモードでは、前記ドライバは、前記オペレーティングシステムに負荷をかけることなく、アクティブ伝送パスからイナクティブ伝送パスへデータ伝送負荷を調整するように動作可能であり、
第２のモードでは、前記ドライバは、第１の伝送パス上の第１のデータ伝送負荷と第２の伝送パス上の第２のデータ伝送負荷とを設定するように動作可能であり、
第３のモードでは、前記ドライバは、前記オペレーティングシステムに負荷をかけることなく、１つの伝送パスのデータ伝送負荷を、別の伝送パス上のデータトラフィックの状態を検出した後に、増加させるように動作可能である、請求項１９に記載のシステム。
【請求項４４】
各パスは、当該パスが前記第１のモード、前記第２のモードまたは前記第３のモードで構成されるかどうかを指定するフラグを有する、請求項４３に記載のシステム。
【請求項４５】
前記ドライバは、各ストレージアレイの入力／出力用のコマンドの数により、前記複数のストレージアレイへの伝送パスのデータ伝送負荷を調整するように動作可能である、請求項１９に記載のシステム。
【請求項４６】
前記ドライバは、前記ホストバスアダプタと前記ストレージアレイとの間に接続されたスイッチのファブリックからのデータ伝送状態を受信するように動作可能であり、前記ドライバは、前記オペレーティングシステムに負荷をかけることなく、前記状態を用いて前記伝送パスのデータ伝送負荷を調整する、請求項１９に記載のシステム。
【請求項４７】
前記状態は、前記ファブリック内の複数のスイッチ間の通信機能レベルを含む、請求項４６に記載のシステム。
【請求項４８】
前記ドライバは、前記通信機能レベルを用いて前記パスのデータ伝送比率を設定する、請求項４７に記載のシステム。
【請求項４９】
前記状態は、入力／出力動作を転送する機能が変化したパスのアラートを含む、請求項４６に記載のシステム。
【請求項５０】
前記状態は、パス上の輻輳のリポートを含む、請求項４６に記載のシステム。
【請求項５１】
前記状態は、前記スイッチのファブリック内でスイッチにより選択されるパスを含む、請求項４６に記載のシステム。
【請求項５２】
コンピュータ実行可能な命令を含むコンピュータ読み取り可能な媒体であって、前記コンピュータ実行可能な命令は、オペレーティングシステムおよび複数のホストバスアダプタと通信するソフトウェアドライバを含み、前記ホストバスアダプタは、前記オペレーティングシステムと複数のストレージアレイとの間に複数のデータ伝送パスを提供し、前記複数のストレージアレイの各々は、複数のポートと、複数の論理装置番号（ＬＵＮ）記憶装置とを含み、前記ドライバは、前記複数のホストバスアダプタのうちの１つのホストバスアダプタから、前記複数のデータ伝送パスのうちの１つのデータ伝送パスにおける障害を示すリモート状態変化通知（ＲＳＣＮ）を受信することと、前記オペレーティングシステムに負担をかけることなく全ての現在の入力／出力動作を中止して、それらをセカンダリパス上でやり直すことにより、自動的にフェイルオーバーすることとを実行するように動作可能である、コンピュータ読み取り可能な媒体。
【請求項５３】
前記ソフトウェアドライバは、ファイバチャネルプロトコルホストバスアダプタドライバモジュールと、フェイルオーバードライバモジュールとを備える、請求項５２に記載のコンピュータ読み取り可能な媒体。
【請求項５４】
前記ソフトウェアドライバは、小型コンピュータシステムインターフェース（ＳＣＳＩ）ホストバスアダプタドライバモジュールと、フェイルオーバードライバモジュールとを備える、請求項５２に記載のコンピュータ読み取り可能な媒体。
【請求項５５】
前記ソフトウェアドライバは、管理アプリケーションからのコマンドを受信するように動作可能である、請求項５２に記載のコンピュータ読み取り可能な媒体。
【請求項５６】
コンピュータ実行可能な命令を含むコンピュータ読み取り可能な媒体であって、前記コンピュータ実行可能な命令は、オペレーティングシステムおよび複数のホストバスアダプタと通信するソフトウェアドライバを含み、前記ホストバスアダプタは、前記オペレーティングシステムと複数のストレージアレイとの間に複数のデータ伝送パスを提供し、前記複数のストレージアレイの各々は、複数のポートと、複数の論理装置番号（ＬＵＴ）記憶装置とを含み、前記ドライバは、前記複数のホストバスアダプタのうちの１つのホストバスアダプタから、前記複数のデータ伝送パスのうちの１つのデータ伝送パスにおけるデータ伝送状態を示すリモート状態変化通知（ＲＳＣＮ）を受信することと、前記オペレーティングシステムに負荷をかけることなく前記データ伝送パス上のトラフィックをリダイレクトすることによって前記データ伝送パスのデータ伝送負荷を自動的に調整することとを実行するように動作可能である、コンピュータ読み取り可能な媒体。
【請求項５７】
前記ソフトウェアドライバは、ファイバチャネルプロトコルホストバスアダプタドライバモジュールと、負荷分散ドライバモジュールとを備える、請求項５６に記載のコンピュータ読み取り可能な媒体。
【請求項５８】
前記ソフトウェアドライバは、小型コンピュータシステムインターフェース（ｉＳＣＳＩ）ホストバスアダプタドライバモジュールと、負荷分散ドライバモジュールとを備える、請求項５６に記載のコンピュータ読み取り可能な媒体。
【請求項５９】
前記ソフトウェアドライバは、管理アプリケーションからのコマンドを受信するように動作可能である、請求項５６に記載のコンピュータ読み取り可能な媒体。
【請求項６０】
オペレーティングシステムの複数のホストバスアダプタと、対象システムの複数のポートとに接続されたスイッチファブリックであって、前記スイッチファブリックは、複数のスイッチを備え、前記スイッチファブリックは、データ伝送状態を検出することと、前記データ伝送状態を示すリモート状態変化通知（ＲＳＣＮ）をソフトウェアドライバに送信することとを実行するように動作可能であり、前記ソフトウェアドライバは、前記オペレーティングシステムに負荷をかけることなく、前記データ伝送状態を用いて前記ドライバと前記対象システムのポートとの間の少なくとも１つのパス上のデータ伝送負荷を自動的に調整するように動作可能である、スイッチファブリック。
【請求項６１】
前記スイッチは、ファイバチャネルスイッチである、請求項６０に記載のスイッチファブリック。
【請求項６２】
複数のスイッチ間にスイッチ間リンクをさらに備える、請求項６０に記載のスイッチファブリック。
【請求項６３】
前記スイッチが、ファイバチャネル拡張リンクサービスコマンドを介して前記ドライバと通信する、請求項６０に記載のスイッチファブリック。
【請求項６４】
前記スイッチが、ファイバチャネルコモントランスポートコマンドを介して前記ドライバと通信する、請求項６０に記載のスイッチファブリック。
【請求項６５】
データを伝送する方法であって、
前記方法は、
オペレーティングシステムの複数のホストバスアダプタと、複数のストレージアレイとの間に複数のデータ伝送パスを提供することであって、前記複数のストレージアレイの各々は、複数のポートと、複数の論理装置番号（ＬＵＮ）記憶装置とを含む、ことと、
特定のストレージアレイにコマンドを送信することにより、当該ストレージアレイ上の前記複数のポートのうちのどのポートを介してどのＬＵＮ記憶装置がアクセス可能であるかを判定することによって、どのデータ伝送パスが利用できるかを判定することと、
前記複数のホストバスアダプタのうちの１つのホストバスアダプタから、前記オペレーティングシステムと前記ストレージアレイとの間の第１の伝送パス上の障害を示すリモート状態変化通知（ＲＳＣＮ）を受信することと、
前記オペレーティングシステムに負担をかけることなく前記第１の伝送パスにおける全ての現在の入力／出力動作を中止して、それらを第２の伝送パス上でやり直すことにより、自動的にフェイルオーバーすることと
を含む、方法。
【請求項６６】
前記オペレーティングシステムと前記ストレージアレイとの間の可能な各データ伝送パスを識別することをさらに含む、請求項６５に記載の方法。
【請求項６７】
前記オペレーティングシステムに負荷をかけることなく、前記複数のホストバスアダプタのうちの１つのホストバスアダプタから前記第１の伝送パスの修復を示すＲＳＣＮを受信したことに応答して、データ伝送を前記第２の伝送パスから前記第１の伝送パスに戻すことをさらに含む、請求項６５に記載の方法。
【請求項６８】
データを伝送する方法であって、
前記方法は、
複数のホストバスアダプタを用いて、オペレーティングシステムと複数のストレージアレイとの間に複数のデータ伝送パスを提供することであって、前記複数のストレージアレイの各々は、複数のポートと、複数の論理装置番号（ＬＵＴ）記憶装置とを含む、ことと、
特定のストレージアレイにコマンドを送信することにより、当該ストレージアレイ上の前記複数のポートのうちのどのポートを介してどのＬＵＮ記憶装置がアクセス可能であるかを判定することによって、どのデータ伝送パスが利用できるかを判定することと、
前記複数のホストバスアダプタのうちの１つのホストバスアダプタから、前記オペレーティングシステムと前記ストレージアレイとの間の第１の伝送パス上のデータ伝送状態を示すリモート状態変化通知（ＲＳＣＮ）を受信することと、
前記オペレーティングシステムに負荷をかけることなく、残りのデータ伝送パス内でトラフィックをリダイレクトすることによって前記第１の伝送パスのデータ伝送負荷を自動的に調整することと
を含む、方法。
【請求項６９】
前記データ伝送状態は、前記ストレージアレイの特定のポートに向けられている入力／出力動作の数である、請求項６８に記載の方法。
【請求項７０】
前記データ伝送状態は、複数の記憶装置を有するシステム内の特定の記憶装置に向けられている入力／出力動作の数である、請求項６８に記載の方法。
【請求項７１】
前記データ伝送状態は、特定のホストバスアダプタに向けられている入力／出力動作の数である、請求項６８に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
（背景）
負荷分散とは、総伝送速度を最大化できるように、別々のネットワークセグメントを介して送信したデータ量を均衡化するソフトウェア技術である。
【背景技術】
【０００２】
フェイルオーバーおよびフェイルバックとは、セグメントエラー（例えば、回線停止、損傷等）を検出した後で、ネットワークセグメントを介してデータ伝送を転送する技術である。”フェイルオーバー”とは、プライマリセグメント上に問題を検出した場合に、プライマリネットワークセグメントからセカンダリネットワークセグメントへ切り換えることを言う。”フェイルバック”とは、エラーを修正した後で、プライマリセグメントを再接続することを言う。
【０００３】
（要約）
負荷分散、フェイルオーバーおよびフェイルバックを行う技術は、通常ホストコンピュータオペレーティングシステムレベルで実行していた。これらの技術は、ホストコンピュータに負担をかけ、ネットワークセグメントのトラフィックレベルにおける動的な変化に対して反応時間が遅い。さらに、現在のオペレーティングシステムは、アプリケーションレイヤを低位のプロトコルの詳細から分離するようにしているので、アプリケーションレイヤベースのフェイルオーバー手法により適切な決定を行うことはますます困難になっている。これらの技術はまた、ネットワークセグメントのエラーや修復に対する反応時間がさらに遅い。
【発明の開示】
【課題を解決するための手段】
【０００４】
本出願は、ネットワークセグメントに直接接続するインテリジェントホストバスアダプタ（ＨＢＡ）を用いるシステムに関する。これらのＨＢＡには、いくつかの利点や機能がある。
【０００５】
例えば、これらのＨＢＡは、セグメントパフォーマンス（例えば、セグメントデータ伝送負荷レベル）を知的に監視して、セグメントエラーや修復を検出することができる。これらのＨＢＡはまた、データ伝送を選択的に転送して１つ以上の代替えのセグメントに対しフェイルオーバーを行うことにより、セグメントエラーに対応することもできる。セグメントを修復する際に、ＨＢＡは、オリジナルセグメントにフェイルバックすることにより対応することもできる。フェイルオーバーおよびフェイルバックに関連して、あるいはこれらと別に、総データスループットを増加したり最大化したりするように、これらのＨＢＡにより伝送負荷を均衡化することもできる。これらのＨＢＡは、ネットワーク上でデータ伝送時間を無駄にしたり、ホストコンピュータに負荷をかけたりすることなく、リアルタイムで素早くこれらの機能を実行することもできる。
【０００６】
各アダプタがネットワークセグメントエラー、修復、負荷レベルに対してよりタイムリーなやり方で対応するので、（フェイルオーバー、フェイルバックおよび負荷分散の機能を持つ）これらのインテリジェントホストバスアダプタを用いるコンピュータネットワークにより、より速い総速度でデータを送信することができる。
【０００７】
これらのインテリジェントホストバスアダプタは、フェイルオーバー、フェイルバックおよび負荷分散の機能を備えたドライバソフトウェアを有する。ホストバスアダプタのドライバソフトウェアは、ホストコンピュータのオペレーティングシステムからの動的な操作を必要とすることなく、スイッチファブリックからの動作状態フィードバックを用いて、１つ以上のバスアダプタの動きを自動的に、動的に調整することもできる。
【０００８】
システムアドミニストレータは、ファイバチャネル装置に対するフォールトトレラントデータ接続として、１つ以上のホストバスアダプタをセットアップすることもできる。このシステムにより、ミッションクリティカルの機能やデータの頑強性を備えることができる。
【０００９】
本出願の一面は、オペレーティングシステムと、オペレーティングシステムと通信するドライバと、ドライバと通信する複数のホストバスアダプタとを備えるシステムに関する。ホストバスアダプタにより、オペレーティングシステムと記憶装置との間に複数のデータ伝送路を構成する。ドライバが、オペレーティングシステムに負荷をかけることなく、プライマリパスからセカンダリパスへのデータ伝送を変更するように動作する。
【００１０】
別の面は、オペレーティングシステムと、オペレーティングシステムと通信するドライバと、ドライバと通信する複数のホストバスアダプタとを備えるシステムに関する。ホストバスアダプタにより、オペレーティングシステムと記憶装置との間に複数のデータ伝送路を構成する。ドライバが、オペレーティングシステムに負荷をかけることなく、伝送路のデータ伝送負荷を調整するように動作する。
【００１１】
別の面は、オペレーティングシステムと複数のホストバスアダプタと通信するソフトウェアドライバに関する。ホストバスアダプタにより、オペレーティングシステムと記憶装置との間に複数のデータ伝送路を構成する。ドライバが、オペレーティングシステムに負荷をかけることなく、プライマリパスからセカンダリパスへのデータ伝送を変更するように動作する。
【００１２】
別の面は、オペレーティングシステムと複数のホストバスアダプタと通信するソフトウェアドライバに関する。ホストバスアダプタにより、オペレーティングシステムと記憶装置との間に複数のデータ伝送路を構成する。ドライバが、オペレーティングシステムに負荷をかけることなく、伝送路のデータ伝送負荷を調整するように動作する。
【００１３】
別の面は、オペレーティングシステムの複数のホストバスアダプタと、対象システムの複数のポートとに接続したスイッチファブリックに関する。スイッチファブリックは複数のスイッチを備える。スイッチファブリックが、データ伝送状態を検出して、データ伝送状態をソフトウェアドライバに送信するように動作する。ソフトウェアドライバが、オペレーティングシステムに負荷をかけることなく、データ伝送状態を用いてドライバと対象システムのポートとの間の少なくとも１つの伝送路上のデータ伝送負荷を調整するように動作する。
【００１４】
別の面は、オペレーティングシステムの複数のホストバスアダプタと、対象システムの複数のポートとに接続したスイッチファブリックに関する。スイッチファブリックが複数のスイッチを備える。スイッチファブリックが、オペレーティングシステムに負荷をかけることなく、ホストバスアダプタと対象システムのポートとの間の少なくとも１つのデータ伝送路上のデータ伝送状態を検出して、伝送路のデータ伝送負荷を調整するように動作する。
【００１５】
本発明の別の面は、オペレーティングシステムの複数のホストバスアダプタと、対象システムの複数のポートとに接続されたスイッチファブリックに関する。スイッチファブリックが複数のスイッチを備える。スイッチファブリックが、オペレーティングシステムに負荷をかけることなく、ホストバスアダプタと対象システムのポートとの間の障害のあるデータ伝送路を検出して、２つ以上の伝送路のデータ伝送負荷を調整するように動作する。
【００１６】
別の面は、ホストポートと対象ポートとの間のプライマリパスと、ホストポートと対象ポートとの間の少なくとも１つのセカンダリパスと、プライマリパス上のデータ伝送に対応付けられた第１の変数と、セカンダリパス上のデータ伝送に対応付けられた第２の変数とを備えるデータ構造に関する。
【００１７】
別の面は、データ伝送方法に関する。この方法は、オペレーティングシステムの複数のホストバスアダプタと、記憶装置との間に複数のデータ伝送路を構成して、オペレーティングシステムと記憶装置との間の第１の伝送路上のエラーを検出して、オペレーティングシステムに負荷をかけることなく、第１の伝送路から第２の伝送路へのオペレーティングシステムと記憶装置との間のデータ伝送を変更することを含む。
【００１８】
別の面は、データ伝送方法に関する。この方法は、複数のホストバスアダプタを用いて、オペレーティングシステムと記憶装置との間に複数のデータ伝送路を構成して、オペレーティングシステムと記憶装置との間の第１の伝送路上のデータ伝送状態を検出して、オペレーティングシステムに負荷をかけることなく、第１の伝送路のデータ伝送負荷を調整することを含む。
【００１９】
１つ以上の実施の形態の詳細は、添付の図面と以下の説明に述べられている。他の特徴、目的および利点は、説明、図面、請求の範囲から明らかになるであろう。
【００２０】
各種図面の類似の参照記号は、同じ構成要素を示す。
【発明を実施するための最良の形態】
【００２１】
（詳細な説明）
図１は、フェイルオーバー、フェイルバックおよび負荷分散を行うように動作する、記憶領域ネットワークの一実施の形態１００を示す。システム１００は、フェイルオーバー／負荷分散ＨＢＡソフトウェアドライバスタック１０３（以下、”マルチパルスドライバ１０３”または”ドライバ１０３”と言う）を備えるサーバ１０２と、複数のホストバスアダプタ（ＨＢＡ）１０４、１０６、１０８と、複数のファブリックスイッチまたはハブ１１０、１１２、１１４と、複数の装置１１６、１１８、１２０、１２２（例えば、ディスクドライブ）とを備える。他の実施の形態では、システム１００は、任意の数のサーバと、ドライバと、ＨＢＡと、ファブリックスイッチまたはハブと、装置とを備えることもできる。他の実施の形態では、システム１００は、図１に示す構成部品の他に、あるいはこれらに代えて、他の構成部品を備えることもできる。
【００２２】
サーバ１０２は、ドライバ１０３により装置１１６、１１８、１２０および１２２と通信するオペレーティングシステム（例えば、Ｓｕｎ  Ｓｏｌａｒｉｓ）を含む。ドライバ１０３により、以下に述べるように複数の伝送路に対してフェイルオーバー、フェイルバックおよび／または負荷分散を行う。
【００２３】
アダプタ１０４、１０６、１０８は、カリフォルニア州コスタメーサ、エミュレックス社（Ｅｍｕｌｅｘ  Ｃｏｒｐｏｒａｔｉｏｎ）製ＬｉｇｈｔＰｕｌｓｅ（登録商標）アダプタとすることもできる。
【００２４】
図２は、複数のホストバスアダプタ２０４Ａ〜２０４Ｃを用いるソフトウェアドライバ２０２の一実施の形態を示す。一実施の形態では、ＨＢＡ２０４Ａ〜２０４Ｃは、エミュレックス社製のＨＢＡとすることもできる。３つのＨＢＡ２０４Ａ〜２０４Ｃが図２に示されているが、システム２００は任意の数のＨＢＡを有することもできる。
【００２５】
ドライバ２０２は、フェイルオーバー／負荷分散ドライバモジュール２０８と、ファイバチャネルプロトコル／小型コンピュータシステムインターフェース（ＦＣＰ／ＳＣＳＩ）ＨＢＡドライバモジュール２０６とを備えることもできる。ドライバ２０２により、複数のＨＢＡ２０４Ａ〜２０４Ｃを制御する。ドライバ２０２は、オペレーティングシステムのＳＣＳＩドライバ２１０と共に動作することもでき、オペレーティングシステムのファイルシステム２１２と交互に動作することもできる。ソフトウェアアプリケーション２１４は、オペレーティングシステムのファイルシステム２１２と共に動作することもできる。ドライバ２０２は、アダプタ２０４Ａ〜２０４Ｃがフェイルバック、フェイルオーバーおよび負荷分散の機能を備えるように動作することもできる。
【００２６】
また、図２のシステムは、アプリケーションプログラムインターフェース（ＡＰＩ）ライブラリ２１６を含み、管理アプリケーション２１８とドライバモジュール２０６、２０８との間のステータスや構成情報の通信を容易にする。
【００２７】
図２のシステムは、複数のＨＢＡのドライバの１つのインスタンスをロードするオペレーティングシステムとして動作する。
【００２８】
図３は、複数のホストバスアダプタ３１２〜３１６とホストソフトウェアとを用いて動作する、ソフトウェアドライバ３０２の別の実施の形態を示す。図３のシステム３００は、フェイルオーバー／負荷分散フィルタドライバ３０２と、ＳＣＳＩポートドライバ３０４と、複数のミニポートドライバ３０８〜３１０と、複数のＨＢＡ３１２〜３１６と、フルポートドライバ３０６とを備える。一構成としては、ＳＣＳＩポートドライバ３０４は、マイクロソフト社製である。
【００２９】
フィルタドライバ３０２は、ＳＣＳＩポートドライバソフトウェア３０４の上位で用いて、ミニポートドライバ３０８、３１０を介してＨＢＡ３１２、３１４に接続した伝送路の間での通信を可能にすることもできる。ミニポートドライバ３０８、３１０は、ＳＣＳＩポートドライバ３０４からのＳＣＳＩコマンドやステータスをＨＢＡ３１２、３１４に適した形式に変換することもできる。ＨＢＡ３１２、３１４はファイバチャネルまたはｉＳＣＳＩアダプタとすることもできる。
【００３０】
ＨＢＡ３１６は、ファイバチャネルポートドライバ３０６を介してフィルタドライバ３０２に接続したファイバチャネルアダプタとすることもでき、ＨＢＡ３３１６の固有ファイバチャネルコマンドとしてファイルシステム要求を処理する。
【００３１】
また、図３のシステムはＡＰＩライブラリ３２４を含み、管理アプリケーション３２２とフィルタドライバ３０２との間のステータスおよび構成情報の通信を容易にする。
【００３２】
図３のシステムは、各ＨＢＡのドライバのインスタンスをロードするオペレーティングシステムとして動作する。この場合、それぞれのドライバ３０６、３０８、３１０は、それらドライバ自体は理解しているが、ＨＢＡについては理解せず、またアクセスすることもできない。従って、フィルタドライバ３０２を用いて、Ｉ／Ｏトラフィックを所望のＨＢＡへの別の伝送路に切換えることもできる。
【００３３】
図４は、マルチスイッチファブリック４０２と、第１のシステム４０４と、第２のシステム４０６と、第２の対象４１２と、第１の対象４３０とを備えるストレージネットワークシステム４００の一実施の形態を示し、ストレージアレイを備えることもできる。
【００３４】
スイッチファブリック４０２は、複数のスイッチ４１０Ａ〜４１０Ｅを備える。ファブリック４０２の２つのスイッチ４１０Ａ、４１０Ｃは、それぞれリンク４４０、４４２を介してシステム４０４の２つのＨＢＡ４０８Ｂ、４０８Ａに接続している。スイッチ４１０はまた、第２のシステム４０６に接続している。
【００３５】
ファブリック４０２の２つの他のスイッチ４１０Ｂ、４１０Ｄは、それぞれリンク４４４、４４６を介して第１の対象ストレージアレイ４３０の２つのポートＡ４２０Ａ、ポートＢ４２０Ｂに接続している。スイッチ４１０Ｂはまた、第２の対象４１２に接続している。
【００３６】
対象ストレージアレイ４３０は複数の論理装置番号（ＬＵＮ）装置４５０を備えることもでき、ＬＵＮ０〜ＬＵＮＮとして示されている。ＬＵＮのこの集まりにより、アレイ４２２を形成する。各ＬＵＮは、ディスクドライブ等の記憶装置を識別することもできる。
【００３７】
（フォールトトレランスおよび冗長パス）
図１のドライバ１０３により、システムアドミニストレータは、複数のファイバチャネル装置１１６〜１２２に対するフォールトトレラントデータ接続として、１つ以上のホストバスアダプタ１０４、１０８をセットアップすることができる。例えば、ホストバスアダプタ１０６を装置１１６〜１２２の冗長パスを形成するように構成することもできる。各装置１１６〜１２２は複数のポートを有して、冗長接続をサポートすることもできる。
【００３８】
ドライバ１０３により、記憶装置１１６〜１２２に対するパス１３０Ａ、１３０Ｂ、１３２Ａ、１３２Ｂ、１３４Ａ、１３４Ｂ、１３６Ａ、１３６Ｂを定義することができる。ドライバ１０３と共に用いられる冗長パス１３０Ａ、１３０Ｂ、１３２Ａ、１３２Ｂ、１３４Ａ、１３４Ｂ、１３６Ａ、１３６Ｂにより、ネットワーク内のエラーいずれの一点のに対しても耐故障性になる。伝送路間のフェイルオーバーおよびフェイルバックをドライバ１０３により全面的に処理することもでき、このような動作は上位層のソフトウェアモジュールまたはアプリケーション２１４（図２）、３２０（図３）等のアプリケーションのいずれに対してもトランスペアレントとすることもできる。
【００３９】
ドライバ１０３は、システム１００内のマルチポート記憶装置１１６〜１２２への複数のパス１３０Ａ〜１３８Ｂを利用するように動作することもできる。”伝送路制御”とは、ディスクドライブ１１６へのパス１３０Ａ，１３０Ｂといった、１つの装置への複数の伝送路を介してＩ／Ｏ動作を送受信するドライバ１０３の機能のことを言う。ドライバ１０３を、以下に述べるようないくつかのフェイルオーバーおよびフェイルバック伝送路制御の機能と共に構成することもできる。
【００４０】
ドライバ１０３がプライマリパス上の問題を検出した場合、セカンダリパスに対する”フェイルオーバー”を自動的に行うこともできる。オペレータまたはホストシステムの介入、割込み、通知、介在または負担が全く不要になる。ドライバ１０３は、プライマリパスで検出した問題に対応して、セカンダリパスへＩ／Ｏ動作を転送する。また、プライマリパスが復旧した場合、プライマリパスに対する”フェイルバック”についても自動的に行うこともでき、ドライバ１０３はプライマリパスを介してＩ／Ｏ動作を送信するように戻る。
【００４１】
システム１００は、複数の形態を用いることもできる。一実施の形態では、ドライバ１０３がスイッチファブリックを介するように構成することもでき、また別の実施の形態では、ドライバをハブベースのループ形態ように構成することもできる。
【００４２】
”１：Ｎスタンバイ”とは、例えば図１のアダプタ１０４、１０８といったＮ個の複数のアダプタのことをいい、冗長パスとして図１の同じフェイルオーバーアダプタ１０６を用いるように構成することもできる。従って、図１の別のアダプタ１０６をシステム１００に加えて、他の全アダプタにフォールトトレランスおよびフェイルオーバー機能を備えるようにすることもできる。この特徴により、費用対効果の高い機構を構成して、全ストレージサブシステム１００をフォールトトレランスにすることもできる。
【００４３】
”１：１”スタンバイは、各ホストバスアダプタに対し１つのスタンバイアダプタが存在することを意味する。
【００４４】
（負荷分散）
冗長パスの他に、あるいはこの代わりに、ドライバ１０３（図１）はまた、異なるパス１３０Ａ、１３０Ｂ、１３２Ａ、１３２Ｂ、１３４Ａ、１３４Ｂ、１３６Ａ、１３６Ｂの間で負荷分散を行うようにすることもできる。”負荷分散”とは、装置に対する複数の伝送路に渡るトラフィックを分散する機能である。一実施の形態では、ドライバ１０３により、２つの異なるレベルの負荷分散である、静的分散と動的分散とを行うこともできる。これらの２つのレベルでは、各冗長パスを単に静止したままにしておくだけでなく、プライマリパスの負荷を積極的に低減することもできる。
【００４５】
（静的分散）
静的分散により、ドライバ１０３を特定の伝送路をトラフィックに使用できるように構成することがきる。また、”トラフィック比”を各伝送路に対して指定することもできる。トラフィック比により、ドライバ１０３は、セカンダリパスに対してデータのうちの何パーセントについてプライマリパスを介して送信すれればよいかわかる。例えば、２：１のトラフィック比とは、セカンダリパスを介して送信する各Ｉ／Ｏに対して、プライマリパスを介して２つの入力／出力動作（Ｉ／Ｏ）を送信することを意味する。
【００４６】
（動的分散）
動的分散は、ドライバ１０３が輻輳の最も少ない伝送路を自動的に選択できる内蔵インテリジェンスを特徴としている。ドライバ１０３、アダプタ１０４、１０６、１０８またはファブリックスイッチまたはハブ１１０〜１１４内でわかる情報に基づいて、例えば図１の１３０Ａ〜１３６Ｂといった、全ての利用可能な伝送路に関するトラフィックの状態をドライバ１０３で分析することもできる。この分析の結果、ドライバ１０３は、最も輻輳していない伝送路で確実にデータを送信することができる。
【００４７】
静的分散でのトラフィック比と共に、異なるレベルの負荷分散を、構成可能なパラメータとすることもできる。これらのパラメータを立ち上げの間に初期化することもできるが、これらを通電中の稼働しているシステム上で動的に変更することもできる。従って、アドミニストレータは、１つのレベルの負荷分散を構成して、再起動することなくこのレベルまたはトラフィック比を動的に変更することができる。
【００４８】
（伝送路およびルート）
ドライバ１０３により、２つの概念上のオブジェクトである伝送路とルートとを操作することにより、そのフェイルオーバーおよび負荷分散の機能を実行する。
【００４９】
”伝送路”を、ホスト内のポートから対象装置内のポートへの接続として定義する。ドライバ１０３の観点から、伝送路を特定のＨＢＡ（例えば、ＨＢＡＩＤ番号で識別される）（例えば、ＨＢＡ１０４）と、特定の対象装置の特定のポート（例えば、ポート１３０Ａ）と、対象装置上の特定のＬＵＮとから定義する。システムを再起動する際に伝送路を正確に確実に記述するために、パーシステントバインディングを利用することもできる。”パーシステントバインディング”とは、ストレージ関連のドライバの周知の機能であり、オペレーティングシステムと共に動作してシステムが再起動する間、対象とＬＵＮとの組み合わせを絶えず確実に識別する。
【００５０】
装置への”ルート”は、以下の点から表されるものである：
−プライマリパス
−複数のセカンダリパス
−トラフィック比の設定
−特定の動作をイネーブルし制御するフラグおよび変数。
【００５１】
このような伝送路およびルート情報について、ドライバ１０３が必ず利用できるようにする必要がある。このような情報を、ユーティリティアプリケーションを使用することによりユーザが入力することもできる。ユーティリティアプリケーションは、情報をオペレーティングシステムが構成する機構に格納してこのようなデータを登録したり、またはドライバ１０３が読み取り可能な単純な構成ファイルを介して格納したりする。
【００５２】
”トラフィック比”フラグにより、任意のルートの全伝送路に渡って静的負荷分散を生じさせることもできる。トラフィック比”ｔｒ１：ｔｒ２：・・・：ｔｒＮ”は、プライマリパスを介した”ｔｒ１”コマンドの送信対第１の別の伝送路を介した各”ｔｒ２”コマンドの送信対、・・・、Ｎ−１番目の別の経路を介した各ｔｒＮコマンドの送信を意味する。
【００５３】
”ＬＵＮ待ち行列”フラグにより、伝送路のＬＵＮ待ち行列の深度に基づく動的負荷分散を生じさせることもできる。このような設定により、各待ち行列が特定のＬＵＮ向けのＩ／Ｏ動作を含むルートで、各伝送路への待ち行列をドライバ１０３に維持させることもできる。最低位のＬＵＮ待ち行列深度を有する伝送路を、Ｉ／Ｏ動作に選択することもできる。
【００５４】
”対象待ち行列”フラグにより、別の種類の動的負荷分散を生じさせることもできる。このような設定により、各待ち行列が特定の対象向けのＩ／Ｏ動作を含むルートで、各伝送路への待ち行列をドライバ１０３に維持させることもできる。最低位の対象待ち行列深度を有する伝送路を、Ｉ／Ｏ動作に選択することもできる。
【００５５】
”ＨＢＡ待ち行列”フラグにより、別の種類の動的負荷分散を生じさせることもできる。このような設定により、各待ち行列が特定のＨＢＡ向けのＩ／Ｏ動作を含むルートで、各伝送路への待ち行列をドライバ１０３に維持させることもできる。最低位のＨＢＡ待ち行列深度を有する伝送路を、Ｉ／Ｏ動作に選択することもできる。
【００５６】
”自動フェイルバック”フラグにより、プライマリパスに対するフェイルバックを生じさせて自動的に行うこともできる。このフラグを設定していない場合、フェイルバックを行うには、ドライバ１０３に対して適切なコマンドを発行するアプリケーションが介入する必要がある。
【００５７】
”照会確認”フラグにより、ログインセッションをリモート装置（例えば、図１のディスク１１６）と確立する際の”照会確認”の機能を起動することもできる。この機能により、ルートの各伝送路に構成時間でリモート装置への”照会”コマンドを発行させることもできる。各伝送路上の全照会からの一意の装置識別子は、ルートを起動する前にルートの全伝送路で一致する必要がある。
【００５８】
”ハートビート”フラグにより、”照会確認”の機能を各伝送路上で６０秒毎に起動することもできる。
【００５９】
”リンクダウンタイムアウト”変数により、伝送路が使えないことを宣言する前にどのくらいの時間ドライバ１０３が待つ（例えば、１〜２５５秒）か決定することもできる。その伝送路を使うために待機しているＩ／Ｏ動作を中止して、次に同じルートに対してセカンダリパス上でやり直す。
【００６０】
リンクダウンタイムアウト値が低くなればなるほど、ドライバ１０３がより素早くセカンダリパスをフェイルオーバーする。しかしながら、トレードオフがある。小さい値のリンクダウンタイムアウトでは、プライマリパスが間欠的の場合は、伝送路間で”スラッシング”を起こす危険がある。大きな値のリンクダウンタイムアウトでは、Ｉ／Ｏ動作を長時間保持するので、上位層のソフトウェアモジュール（例えば、図２の２１０〜２１４および図３の３０２、３１８、３２０）自体がタイムアウトしてドライバ１０３の動作を中断してしまうエラー修復を開始するようになる。リンクダウンタイムアウトのために調整可能な値を用意しておくことにより、システム毎に適切な値を設定することができる。
【００６１】
（拡張使用）
ドライバ１０３のある拡張使用により、リモート記憶装置１１６〜１２２に関する明白な知識を利用する。多くの記憶装置がコマンドを受け付けて、どのＬＵＮがどのポートからアクセスできるか決定する。例えば、ドライバ１０３が記憶装置１１６に対するこれらのコマンドを理解している場合は、ドライバ１０３は装置１１６にコマンドを発行してポート１３０Ａ，１３０Ｂを介して所望のＬＵＮにアクセスすることができる。これにより、ドライバ１０３が、選択したＬＵＮへのアクセスに利用できる２つの冗長パスを確実に持てるようになる。
【００６２】
さらに、拡張使用には、アプリケーションプログラムインターフェース（ＡＰＩ）２１６（図２）、３２４（図３）が必要で、アプリケーション特定ストレージ管理アプリケーション２１８（図２）、３２２（図３）をイネーブルして、ドライバ１０３の機能を”制御”する。管理アプリケーションの例としては、オラクルまたはマイクロソフト（ＭＳ）エクスチェンジ”アプリケーションセントリック”ストレージリソース管理アプリケーションを含むこともできる。例としては、大規模データベースまたは電子メールシステム等を制御するストレージ管理アプリケーションを含むこともできる。このような管理アプリケーションは、ストレージに関する詳細な知識と、そのアプリケーションの利用可能性のニーズとを有する。このような知識を有することにより、管理アプリケーション２１８、３２２は、ドライバ２０２（図２）、３０２（図３）の動作を最適化することが可能である。従って、ＡＰＩ２１６、３２４が行うアクセスにより、これらの管理アプリケーション２１８、３２２は、それらがサポートするアプリケーションのニーズに最も適するようにフェイルオーバーおよび負荷分散を調整することができる。
【００６３】
別の可能な拡張使用は、ＡＰＩ２１６（図２）または３２４（図３）で、システムレベルの高可用性（ＨＡ）アプリケーションをサポートする。今日の高可用性システムの例としては、ベリタス社（Ｖｅｒｉｔａｓ）のＤＭＰ、ＰｏｗｅｒＰａｔｈ、ＡＴＦまたはコンパック社のＳｅｃｕｒｅＰａｔｈを含むこともできる。このようなアプリケーション２１８（図２）または３２２（図３）により、高い信頼性が要求されるシステムのストレージを管理する。このようなアプリケーションは通常ホストシステムをどのように管理するか知っており、しばしば対象についても知っているが、ホストシステムをそのストレージに接続するネットワークに関してはほとんど知識がなく、そのネットワークを介してほとんど制御を行わない。ＡＰＩ２１６、３２４に接続した上述のＨＢＡおよびドライバにより、ＨＡアプリケーション２１８、３２２にさらにインテリジェンスおよびパフォーマンスを与えることができる。
【００６４】
例えば、このようなアプリケーション２１８、３２２は、ＡＰＩ２１６、３２４を介してネットワークステータス情報（スループット／パフォーマンス、待ち行列深度、エラー情報等）を得ることもできる。でなければアプリケーション２１８、３２２は情報を得ることができない。アプリケーション２１８、３２２は、コマンドを発行して、ＡＰＩ２１６、３２４を介して上述のドライバおよびＨＢＡにフェイルオーバー、フェイルバック等を行わせることもできる。
【００６５】
別の可能な拡張使用は、ファブリック／スイッチルーティングフィードバックである。ファブリックスイッチ１１０〜１１４により、伝送路輻輳、伝送路パフォーマンス（スループット、利用または待ち時間）、伝送路エラーに基づいて、ドライバ１０３への負荷分散または伝送路フィードバックを実行することもできる。
【００６６】
スイッチ１１０等のスイッチは、ファイバチャネル拡張リンクサービス（ＥＬＳ）コマンドを介してドライバと通信することもできる。別の実施例では、ファイバチャネルコモントランスポート（ＣＴ）コマンドを用いて、スイッチ１１０とＨＢＡ１０４との間の通信を容易にすることもできる。認証およびセキュリティを追加することもできる。システムは、ＣＴトラフィックを起動するように動作することもできる。
【００６７】
（図４ファブリック動作）
図４は、マルチスイッチファブリック４０２と、複数のホストシステム４０４、４０６と、対象４１２、４３０とを有する記憶領域ネットワークシステム４００の一実施の形態を示す。
【００６８】
図４のサブシステム４００のＨＢＡドライバ４６０は、フェイルオーバー／フェイルバックおよび負荷分散等の複数の基本モードの動作を有することもできる。負荷分散には、ここで述べる静的、動的負荷分散を含まれる。
【００６９】
双方向伝送路として、１つの伝送路で各方向に別々に負荷分散を実行することもできる。
【００７０】
図４では、ホストシステムＩ４０４のホストバスアダプタ（ＨＢＡ）４０８Ａ、４０８Ｂと対象Ｉ４３０のポート４２０Ａ、４２０Ｂとの間の１つの双方向伝搬路を形成している各伝送路として、ホストシステムＩ４０４から対象Ｉ４３０へ４つの別々の伝送路がある。これらの伝送路は次の通りである：
伝送路Ａ：リンク４４０からリンク４４４
伝送路Ｂ：リンク４４０からリンク４４６
伝送路Ｃ：リンク４４２からリンク４４４
伝送路Ｄ：リンク４４２からリンク４４６。
【００７１】
ファブリック４０２内部では、各伝送路が各種のスイッチ間リンク（ＩＳＬ）４７０〜４８４を横断している。スイッチ４１０Ａ〜４１０Ｅにより、ＨＢＡドライバ４６０とファブリック４０２との間で通信することなく、ファブリック４０２内でのデータの内部伝送を決定する。ＨＢＡドライバ４６０は、エンドポイントリンク４４０〜４４６に関わっているだけである。
【００７２】
サーバ４０７内のオペレーティングシステムの観点からは、ＨＢＡドライバ４６０が選択する異なる伝送路を認識することはない。実際、ドライバ４６０が、デフォルト伝送路により要求した装置（ＬＵＮ４５０からの所望のＬＵＮ）の識別だけをすることもでき、用いられる実際の伝送路を選択するのはＨＢＡドライバ４６０である。
【００７３】
（フェイルオーバー／フェイルバック）
１：１またはスタンバイモードでは、ＨＢＡドライバ４６０は周知のファイバチャネルディスカバリプロセスを用いて、どの伝送路が対象Ｉ４３０に行くことができるか識別することもできる。図４で上述したように、伝送路Ａ、Ｂ、ＣまたはＤが利用できる。次に、ＨＢＡドライバ４６０は、デフォルトとして１つの伝送路を選択して（またはユーザに選択させて）、スタンバイ伝送路として１つ以上の別の伝送路を選択することもできる。例えば、伝送路Ａをデフォルト伝送路とし、伝送路Ｂ、Ｃ、Ｄをセカンダリパスとすることもできる。
【００７４】
ＨＢＡ４０８Ａ、４０８Ｂの１つがリンクダウン（信号ロス）を検出したり、別のリンク上のエラーを示すリモート状態変化通知（ＲＳＣＮ）を受信したりすると、ＨＢＡ４０８Ａ、４０８Ｂはこの情報をＨＢＡドライバ４６０に送信する。この情報を受信すると、ＨＢＡドライバ４６０は直ちに影響を受けた伝送路上の全ての現在のＩ／Ｏ動作を中止して、これらとセカンダリパス上の次の全Ｉ／Ｏ動作をやり直すことにより、自動的にフェイルオーバーを行うこともできる。同様に、セカンダリパス上のエラーにより、ＨＢＡドライバ４６０が第３の伝送路へフェイルオーバーを行うこともある。ＨＢＡドライバ４６０は、データを失うことなく、サーバ４０７上のオペレーティングシステムに問題を通信する必要なく、これを行うことができる。
【００７５】
ＨＢＡドライバ４６０がファブリック４０２からＲＳＣＮを受信した場合、どの伝送路が影響を受けたか判定するために、ＨＢＡドライバ４６０はファブリック４０２内のネームサーバ４６２からリポートを要求することもできる。リンクダウンが修復された場合、または影響を受けた伝送路が使えるようになったことを示す別のＲＳＣＮを受信した場合には、ＨＢＡドライバ４６０は次に以前の伝送路に戻すことにより、フェイルバックする。
【００７６】
問題をオペレーティングシステムに通信する必要のない、セカンダリパスへの、そしてセカンダリパスからのこの自動的な切換は、従来のフェイルオーバー方法とは異なっている。従来のフェイルオーバー方法は、フェイルオーバーシステムにリンクダウンまたはＲＳＣＮバックを報告する手段を備えていない。このようなフェイルオーバーシステムでは、待ち状態のＩ／Ｏのタイムアウトエラーの後でこのようなイベントが発生したことを推測しなければならず、失ったデータをオペレーティングシステムが再送信する必要があるので、さらに遅延することになる。
【００７７】
（静的負荷分散）
また、サブシステム４００は、各種のモードで負荷分散を実行することができる。最も単純なものは、静的分散と呼ばれる固定の均衡化である。ＨＢＡドライバ４６０はまず、上述のように利用できる伝送路を判定して、この情報を人間のオペレータに示す。オペレータは、各伝送路に送信する必要があるメッセージトラフィックの相対的パーセンテージ（トラフィック比）を選択する。このトラフィック比は、人間のオペレータが変更するまでずっと固定したままにすることもできる。
【００７８】
リンクがダウンしたり、特定の伝送路に関する障害を示すＲＳＣＮを受信したりすると、ＨＢＡドライバ４６０は次に、特定のホストシステム、例えば、ホストシステムＩ４０４と、対象、例えば対象Ｉ４３０との間の通信に利用できる残りの伝送路に、トラフィックを自動的に転送する。本システムでは、ホストシステムＩ４０４は、１つの伝送路（デフォルト伝送路）上に情報を送信しているかのように動作することもできる。しかし、ＨＢＡドライバ４６０は、ホストの介入を必要とせずに、他の事前に選択した伝送路にデータを選択的に転送している。
【００７９】
（動的負荷分散）
固定負荷分散の簡略化した方法の代わりに、ＨＢＡドライバ４６０は、各種の伝送路の動作に関するそれ自体が持つ内部情報を用いて、負荷分散を最適化する方法を決定することもできる。ＨＢＡドライバ４６０は、内部待ち行列または待ち行列に対するポインタを維持して、各伝送路上で通信することもできる。ＨＢＡドライバ４６０は上述のように、”ＬＵＮ待ち行列”、”対象待ち行列”、または”ＨＢＡ待ち行列”型の動的負荷分散を用いることもできる。ドライバ４６０は、待ち行列の大きさを比較して、最適の負荷分散を決定する。
【００８０】
ＨＢＡドライバ４６０により、人間のオペレータが負荷分散を行うのにどのアルゴリズムを用いるか選択できるようになる。
【００８１】
（ファブリック入力）
図４のファブリック４０２は、ブロケード社（Ｂｒｏｃａｄｅ）製等の５つの記憶領域ネットワークスイッチ４１０Ａ〜４１０Ｅを含むこともできる。このようなスイッチ４１０Ａ〜４１０Ｅにより、スイッチ４１０Ａ〜４１０Ｅ間でファブリック４０２内での通信ルーティングを制御する。このようなスイッチ４１０Ａ〜４１０Ｅにより、通信の動作レベルを監視して、ＨＢＡドライバ４６０への情報を変更することもできる。
【００８２】
このような情報に対するあるモードを初期セットアップ伝送路重み付けとすることができ、スイッチ４１０Ａ〜４１０Ｅが、スイッチ４１０Ａ〜４１０Ｅ（図４のスイッチ２４１０Ｃとスイッチ５４１０Ｄとの間の３つのトランク４７０等）の間で通信を処理する相対帯域幅機能をリポートする。このリポートにより、人間のオペレータが介入する必要なく、ＨＢＡドライバ４６０がファブリック４０２内のスイッチ４１０Ａ〜４１０Ｅからの情報に基づく固定のトラフィック比を自動的に設定することができる。
【００８３】
また、ファブリック４０２内のスイッチ４１０Ａ〜４１０Ｅにより、ＨＢＡドライバ４６０への情報として、伝送路アラートと輻輳リポートとを送信することもできる。ＨＢＡドライバ４６０は、ファブリック４０２と共に用いる伝送路を登録して、伝送路アラートと輻輳リポートとに対するファブリック４０２への要求を発行することもできる。ファブリック４０２は次に、所定の閾値を越えるタイムアウトまたは輻輳レベル等の所定の状態と一致する場合にこのようなアラートおよびリポートを用意する。
【００８４】
伝送路アラートは、伝送路がＩ／Ｏをサポートする機能に大きな変化があったことを示すものである。伝送路アラートの一例としては、スイッチ間リンク（ＩＳＬ）４７２の喪失とすることもできる。ファブリック４０２は伝送路４７８、４８０を介してＩ／Ｏを別の伝送路に切換えることができるが、これには余分な”ホップ”が必要で、その伝送路を介して任意のデータを送信すると待ち時間が増加してしまうことになる。従って、伝送路アラートにより、ＨＢＡドライバ４６０が別の伝送路にフェイルオーバーしたり、負荷分散を変化させたりすることもできる。
【００８５】
輻輳リポートにより、ファブリック４０２はドライバ４６０に、伝送路の任意のセグメント内の過剰な輻輳を通知することができる。ＨＢＡドライバ４６０は次に、選択した伝送路を自動的に変更したり、もっと効率的な伝送路となるように負荷分散を調整したりする。
【００８６】
さらに変化させると、（伝送路の選択や伝送路の変更の）意志決定手順をファブリック４０２に移行することもできる。例えば、フェイルオーバーおよび負荷分散の決定をファブリック４０２内のソフトウェアで行って、（伝送路選択、転送、負荷分散等のための）ＨＢＡドライバ４６０へのコマンドとして通信することもできる。
【００８７】
ファブリック４０２とＨＢＡドライバ４６０との間で通信する情報やコマンドは、ＦＣネットワーク内の帯域内信号とすることもできる。一方、データやコマンドを帯域外信号とすることもできる。例えば、これらをファブリック４０２とホストシステムＩ４０４との間の独立したイーサネット（登録商標）接続を介して送信することもできる。
【００８８】
（双方向伝送路での独立した方向の制御）
ファイバチャネルプロトコルにより、２つの独立した通信信号を１つの伝送路上で反対方向に伝搬できる。１つの伝送路で、一方の方向で輻輳しているがもう一方の方向では輻輳していないことが考えられる。上述の負荷分散の各方法を、各伝送路上の２つの方向を独立して処理するために行うこともできる。
【００８９】
例えば、図４では、ホストシステムＩＩ４０６は、ファブリック４０２を介して対象ＩＩ４１２に大量のデータを送信することができるが、リンク４４４上に輻輳を起こす可能性がある。しかし、これは一方向だけである。このことは、これらのリンクの戻り方向は輻輳しておらず、対象Ｉ４３０からホストシステムＩ４０４への通信は利用できるままになっている。伝送路上の輻輳のレベルは、方向上対称的でないことが多い。負荷分散の調整を向上させる際に、上述の各技術を用いて、各伝送路のそれぞれの方向を別々に考えることもできる。
【００９０】
要約すると、上述の機能には次のことが含まれる：
１）ホストシステム４０４上に常駐するオペレーティングシステムは、オペレーティングシステムが従来用いていたのと同じやり方で１つの装置識別子を用いて、伝送路を指定することができる。しかし、ＨＢＡドライバ４６０とＨＢＡ４０８Ａ、４０８Ｂとにより、フェイルオーバー／フェイルバックまたは負荷分散をサポートするデータを失うことなく、伝送路上の通信を１つ以上の別の伝送路に自動的に転送させることができる。
【００９１】
２）ＨＢＡドライバ４６０内の待ち行列動作を用いて、状態の変化に対応して、負荷分散の度合いを動的に設定することができる。
【００９２】
３）記憶領域ネットワークスイッチ４１０Ａ〜４１０Ｅによる動作レベルをファブリックが検出することにより、（ａ）フェイルオーバー／フェイルバックまたは負荷分散を制御するためにＨＢＡドライバ４６０に、あるいは（ｂ）ファブリック４０２内のソフトウェアに、情報を提供することができる。後者の場合では、スイッチ４１０Ａ〜４１０Ｅ自体が適切な伝送路を決定することができる。このような適切な伝送路でＨＢＡドライバ４６０と通信することができる。
【００９３】
４）図４の双方向ＦＣ伝送路は、負荷分散を別々に独立して制御するそれぞれの方向を有することができる。
【００９４】
５）記憶装置（例えば、ＬＵＮ４５０の１つ）への複数の伝送路が存在するファイバチャネル記憶領域ネットワーク（ＳＡＮ）では、ＨＢＡドライバ４６０はファブリック４０２からの入力を利用して、最も良い伝送路を判定してＩ／Ｏ要求を送信することができる。
【００９５】
６）記憶装置への複数の伝送路が存在するファイバチャネル環境では、ＨＢＡドライバ４６０はその待ち行列深度情報を利用して、最も良い伝送路を判定してＩ／Ｏ要求を送信することができる。
【００９６】
７）上述のシステムをファイバチャネルおよびｉＳＣＳＩネットワークを用いて適合することができるが、他の記憶領域ネットワークを用いることもできる。
【００９７】
一実施の形態では、アドミニストレータは、”通電した状態の”システムファームウェアを、１：Ｎまたは１：１フェイルオーバーを用いてＨＢＡを低下させることにより、説明したシステムを用いてアップグレードすることができる。セカンダリＨＢＡが一時的にそのＩ／Ｏトラフィックを処理する間に、ファームウェアをアップグレードして、ＨＢＡ上に再ロードすることができる。ファームウェアのダウンロードが完了した後で、フェイルバックを用いてトラフィックをプライマリアダプタに戻すことができる。これにより、システムの利用可能性に影響を与えることなくシステムのアップグレードを行うことができる。
【００９８】
図５は、図１〜４のシステムの１つを用いるデータ伝送方法を示す。ブロック５００では、複数のホストバスアダプタを用いることにより、この方法で、ホストシステムと記憶装置との間に複数のデータ伝送路を構成する。ブロック５０２では、この方法でホストシステムと記憶装置との間の第１の伝送路上のエラーを検出する。ブロック５０４では、ホストシステムに割り込むことなく、この方法で、第１の伝送路から第２の伝送路へのホストシステムと記憶装置との間のデータ伝送を変化させる。
【００９９】
図６は、図１〜４のシステムの１つを用いる別のデータ伝送方法を示す。ブロック６００では、複数のホストバスアダプタを用いることにより、この方法でホストシステムと記憶装置との間に複数のデータ伝送路を構成する。ブロック６０２では、この方法で、ホストシステムと記憶装置との間の第１の伝送路上の輻輳のレベルを検出する。ブロック６０４では、ホストシステムに割り込むことなく、この方法で、伝送路のデータ伝送負荷を調整する。
【０１００】
多くの実施の形態について説明してきたが、各種の変更が可能であることが理解できるであろう。従って、他の実施の形態も以下の請求の範囲内に含まれる。
【図面の簡単な説明】
【０１０１】
【図１】図１は、フェイルオーバー、フェイルバックおよび負荷分散を行うように動作する記憶領域ネットワークの一実施の形態を示す。
【図２】図２は、複数のホストバスアダプタとホストソフトウェアとを用いて動作するソフトウェアドライバの一実施の形態を示す。
【図３】図３は、複数のホストバスアダプタとホストソフトウェアとを用いて動作するソフトウェアドライバの別の実施の形態を示す。
【図４】図４は、マルチスイッチファブリックと、複数のホストシステムおよび対象とを有する記憶領域ネットワークシステムの一実施の形態を示す。
【図５】図５は、データ伝送方法を示す。
【図６】図６は、別のデータ伝送方法を示す。
【図１】
0004511936.tif 000002
【図２】
0004511936.tif 000003
【図３】
0004511936.tif 000004
【図４】
0004511936.tif 000005
【図５】
0004511936.tif 000006
【図６】
0004511936.tif 000007