(57)【特許請求の範囲】
【請求項１】
ホスト・システムから少なくとも２つのコントローラのうちの一方へのパスを選択するための方法であって、各コントローラが、記憶装置中の記憶領域へのアクセスを提供することができ、
前記ホスト・システムが、
各記憶領域にアクセスするために使用され且つ前記少なくとも２つのコントローラ間の入出力作業負荷の平衡をとるように実行することを許す好ましいコントローラと、各記憶領域にアクセスするために使用される少なくとも１つの好ましくないコントローラとを示すパス情報を前記コントローラから受け取るステップであって、各記憶領域は論理装置番号によって識別され、各論理装置番号は前記コントローラのうちの１つに割り当てられ、記憶領域のための前記パス情報はその記憶領域のための論理装置番号が割り当てられている好ましいコントローラを示す、前記受け取るステップと、
ターゲット論理装置番号への入出力コマンドを受け取り、前記パス情報を含む論理装置番号パステーブルを走査して、ターゲット記憶領域のために好ましいコントローラとして、前記パス情報中に示されたコントローラの一つを決定するステップと、
前記決定されたコントローラに、前記入出力コマンドを送るステップであって、前記入出力コマンドを受け取る前記コントローラが、前記ターゲット記憶領域に対して前記入出力コマンドを実行する、前記送るステップと
を含む、方法。
【請求項２】
前記好ましいコントローラに送られた前記入出力コマンドが実行を完了できなかった後に、前記入出力コマンドを前記ターゲット記憶領域に関する前記パス情報中に示される１つの好ましくないコントローラに送るステップをさらに含む、請求項１に記載の方法。
【請求項３】
記憶領域識別子、コントローラ識別子、およびエントリ中の前記識別されるコントローラが、前記好ましいコントローラかそれとも１つの好ましくないコントローラかを示す前記エントリを含む論理装置番号パステーブルを作成するステップと、
前記入出力コマンドを処理する際に、前記ターゲット記憶領域に関する、前記識別されるコントローラが前記好ましいコントローラであることを示す１つのエントリを求めて前記論理装置番号パステーブルを走査するステップと、
前記好ましいコントローラに送られた前記入出力コマンドが実行を完了できなかった後に、前記識別されるコントローラが前記好ましくないコントローラであることを示す、前記ターゲット記憶領域についての１つのエントリを求めて前記論理装置番号パステーブルを走査するステップと
をさらに含み、
前記入出力コマンドが前記エントリ中で識別される前記コントローラに送られる、請求項２に記載の方法。
【請求項４】
各エントリが、コンピュータに対して前記記憶領域を識別するために使用される記憶領域番号および前記記憶領域の固有識別子を含み、異なるコンピュータが、同じ記憶領域に異なる記憶領域番号を割り当てることができる、請求項３に記載の方法。
【請求項５】
各記憶領域に関する前記パス情報を要求するコントローラに入出力コマンドを送ることによって前記論理装置番号パステーブルが前記ホスト・システム内に作成され、前記コントローラが、前記エントリ中で識別されるコントローラが前記好ましいコントローラかそれとも前記好ましくないコントローラかを示す情報で前記パス情報をエンコードする、請求項３に記載の方法。
【請求項６】
前記入出力コマンドが初期化中に前記コントローラに送られる、請求項５に記載の方法。
【請求項７】
前記入出力コマンドが読み取りコマンドおよび書き込みコマンドを含むことができる、請求項１に記載の方法。
【請求項８】
ホスト・システムを少なくとも２つのコントローラに接続するパスを定義するパス情報をエンコードするための方法において、各コントローラが記憶装置中の記憶領域へのアクセスを提供し、前記コントローラと前記記憶装置は記憶サブシステムに含まれ、
前記記憶サブシステムが、
前記少なくとも２つのコントローラ間の入出力作業負荷の平衡をとるように実行することを許す１つのコントローラを好ましいコントローラとして、及び別の１つを好ましくないコントローラとして指定するステップと、
前記指定された好ましいコントローラおよび前記指定された好ましくないコントローラの指定の情報を前記パス情報中にエンコードするステップと、
前記エンコードされたパス情報を前記ホスト・システムに戻すステップと
を含み、
前記ホスト・システムが、前記パス情報中に示された好ましいコントロールを決定し、最初に入出力コマンドを前記好ましいコントローラに送り、前記好ましいコントローラが前記入出力コマンドを実行できない場合に前記好ましくないコントローラに前記入出力コマンドを送る方法。
【請求項９】
前記コントローラを指定する前記ステップが前記コントローラの初期化中に実行される、請求項８に記載の方法。
【請求項１０】
ホスト・システムから少なくとも２つのコントローラのうちの一方へのパスを選択するためのシステムにおいて、各コントローラが、記憶装置中の記憶領域へのアクセスを提供することができ、
前記ホスト・システムが、
各記憶領域にアクセスするために使用され且つ前記少なくとも２つのコントローラ間の入出力作業負荷の平衡をとるように実行することを許す好ましいコントローラと、各記憶領域にアクセスするために使用される少なくとも１つの好ましくないコントローラとを示すパス情報を前記コントローラから受け取る手段であって、各記憶領域は論理装置番号によって識別され、各論理装置番号は前記コントローラのうちの１つに割り当てられ、記憶領域のための前記パス情報はその記憶領域のための論理装置番号が割り当てられている好ましいコントローラを示す、前記受け取る手段と、
ターゲット論理装置番号への入出力コマンドを受け取り、前記パス情報を含む論理装置番号パステーブルを走査して、ターゲット記憶領域のために好ましいコントローラとして、前記パス情報中に示されたコントローラの一つを決定する手段と、
前記決定されたコントローラに、前記入出力コマンドを送る手段と
を含み、前記入出力コマンドを受け取る前記コントローラが、前記ターゲット記憶領域に対して前記入出力コマンドを実行するシステム。
【請求項１１】
前記好ましいコントローラに送られた前記入出力コマンドが実行を完了できなかった後に、前記入出力コマンドを前記ターゲット記憶領域に関する前記パス情報中に示される１つの好ましくないコントローラに送る手段をさらに含む、請求項１０に記載のシステム。
【請求項１２】
記憶領域識別子、コントローラ識別子、およびエントリ中の前記識別されるコントローラが、前記好ましいコントローラかそれとも１つの好ましくないコントローラかを示す前記エントリを含む論理装置番号パステーブルを作成する手段と、
前記入出力コマンドを処理する際に、前記ターゲット記憶領域に関する、前記識別されるコントローラが前記好ましいコントローラであることを示す１つのエントリを求めて前記論理装置番号パステーブルを走査する手段と、
前記好ましいコントローラに送られた前記入出力コマンドが実行を完了できなかった後に、前記識別されるコントローラが前記好ましくないコントローラであることを示す、前記ターゲット記憶領域に関する１つのエントリを求めて前記論理装置番号パステーブルを走査する手段と
をさらに含み、
前記入出力コマンドが前記エントリ中で識別されるコントローラに送られる、請求項１１に記載のシステム。
【請求項１３】
各エントリが、コンピュータに対して前記記憶領域を識別するために使用される記憶領域番号および前記記憶領域の固有識別子を含み、異なるコンピュータが、同じ記憶領域に異なる記憶領域番号を割り当てることができる、請求項１２に記載のシステム。
【請求項１４】
各記憶領域に関する前記パス情報を要求するコントローラに入出力コマンドを送ることによって前記論理装置番号パステーブルが前記ホスト・システム内に作成され、前記コントローラが、前記エントリ中で識別されるコントローラが前記好ましいコントローラかそれとも前記好ましくないコントローラかを示す情報で前記パス情報をエンコードする、請求項１２に記載のシステム。
【請求項１５】
前記入出力コマンドが初期化中に前記コントローラに送られる、請求項１４に記載のシステム。
【請求項１６】
前記入出力コマンドが読み取りコマンドおよび書き込みコマンドを含むことができる、請求項１０に記載のシステム。
【請求項１７】
パスを定義するパス情報をエンコードするための記憶サブシステムにおいて、
前記記憶サブシステムが、２つのコントローラ及び記憶装置を含み、前記パスがホスト・システムから前記コントローラへの接続を提供し、各コントローラが前記記憶装置中の記憶領域へのアクセスを提供し、
前記記憶サブシステムが、
前記２つのコントローラ間の入出力作業負荷の平衡をとるように実行することを許す１つのコントローラを好ましいコントローラとして、及び別の１つを好ましくないコントローラとして指定する手段と、
前記指定された好ましいコントローラおよび前記指定された好ましくないコントローラの指定の情報を前記パス情報中にエンコードする手段と、
前記エンコードされたパス情報を前記ホスト・システムに戻す手段と
をさらに含み、
前記ホスト・システムが、前記パス情報中に示された好ましいコントロールを決定し、最初に入出力コマンドを前記好ましいコントローラに送り、前記好ましいコントローラが前記入出力コマンドを実行できない場合に前記好ましくないコントローラに前記入出力コマンドを送るシステム。
【請求項１８】
前記コントローラの前記指定が前記コントローラの初期化中に実行される、請求項１７に記載のシステム。
【請求項１９】
ホスト・システムから少なくとも２つのコントローラのうちの一方へのパスを選択するプログラムを記録したコンピュータ読取可能な記録媒体であって、各コントローラが、記憶装置中の記憶領域へのアクセスを提供することができ、
前記ホスト・システムに、請求項１〜７のいずれか一項に記載の方法の各ステップを実行させるプログラムを記録した前記コンピュータ読取可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、記憶装置に至る好ましいパスの選択、詳細には、記憶装置にアクセスするために使用することができる好ましいコントローラおよび好ましくないコントローラを示すパス情報を提供するための方法、システム、プログラム、およびデータ構造に関する。
【０００２】
【従来の技術】
関連出願の相互参照
本出願は、そのすべてが、本出願と同日に出願され、その全体が参照により本明細書に組み込まれる、本願譲受人に譲渡された以下の同時係属特許出願に関係する。
デービッド・エイ・バートン（David A. Burton）およびロバート・エル・モートン（Robert L. Morton）の「Method, System, and Program for Modifying Preferred Path Assignments to a Storage Device」、整理番号ＴＵＣ００００１０ＵＳ１、および
デービッド・エイ・バートンおよびロバート・エル・モートンの「Method, System, and Program for Updating Firmware to a Storage System Comprised of Multiple Controllers」、整理番号ＴＵＣ０００００７ＵＳ１。
【０００３】
従来技術の記憶システムでは、１つまたは複数のホスト・コンピュータが、記憶域コントローラを介して記憶装置中に維持される記憶空間にアクセスする。大容量記憶システムでは、記憶装置は、相互接続されたハード・ディスク・ドライブから成る１つまたは複数の直接アクセス記憶装置（ＤＡＳＤ）を備えることができる。記憶域コントローラは、ホスト・システムからＤＡＳＤに至るデータのフローを管理する。ホスト・システムは、物理記憶空間を論理装置番号（ＬＵＮ）のパーティションとみなす。ホストは、特定のＬＵＮに入出力コマンドを提示し、記憶域コントローラは、ターゲットＬＵＮを物理記憶域に変換することになる。
【０００４】
１つのシステム構成要素が障害を起こした場合にシステム全体がダウンするのを避けるため、記憶域コントローラ・サブシステムは、冗長なハードウェア要素を組み込んでいる。例えば、１つの典型的な従来技術の記憶サブシステムは、ホストに同じＤＡＳＤやＬＵＮへの複数のパスを提供するための複数の記憶域コントローラ・プロセッサを含んでいる。１つの記憶域コントローラ・パスが障害を起こした場合に、他の記憶域コントローラへのパスを、ＤＡＳＤにアクセスするために使用できる。
【０００５】
インターナショナル・ビジネス・マシーンズ・コーポレーション（ＩＢＭ）３９９０やエンタープライズ・システム・ストーレッジ・サーバなどのハイ・エンド記憶域コントローラでは、ホストは、入出力コマンドをどのホストまたはサブシステム中のコントローラ入出力アダプタにも送ることができ、入出力アダプタは、次いで入出力のパスをその入出力動作のターゲットＬＵＮを操作するコントローラに経路指定することになる。そのような従来技術のハイ・エンド・システムでは、コントローラは、入出力を主コントローラに経路指定するインターフェース回路を含むため、ホストは、特定のＬＵＮを最初に管理しているコントローラを知る必要がない。そのような解決法では、低価格記憶サブシステムでは実現できない高価なインターフェース・ハードウェアが必要となる。
【０００６】
低価格記憶サブシステムは、スモール・コンピュータ・システム・インターフェース（ＳＣＳＩ）やファイバ・チャネル・コントローラなど同じＤＡＳＤへの別々のパスを提供する２つのコントローラも使用する。しかし、そのようなシステムは、コントローラがコントローラ間で入出力を経路指定することを可能にする、よりハイ・エンドのコントローラで使用されるインターフェース回路および拡張ポートを含まない。その代わり、低価格記憶サブシステムでは、ホストは、入出力動作のための記憶域コントローラへのパスを選択することになり、ＬＵＮに到達するためのコントローラを切り替えることができる。低価格モデルでのこの解決法についての問題は、記憶域コントローラ同士が通信し、同じＬＵＮに対しての入出力動作の実行を調整して、データの整合性が維持される（すなわち新しいデータのインスタンスを有するコントローラは、古いデータのインスタンスを有する他のコントローラと同じ記憶位置には書き込まない）ように保証する必要があることである。このような相互コントローラ通信では、入出力動作を調整するために高待ち時間通信パスを使用する。これらの調整活動は、入出力実行処理に著しいオーバヘッドを引き起こし、サブシステムにおけるすべての入出力動作に関する応答時間に不利な影響を及ぼす可能性がある。
【０００７】
【発明が解決しようとする課題】
したがって、入出力コマンドを処理する際のシステム・オーバヘッドを減少させ、コントローラの１つへのパスに沿って障害があった場合にフェイルオーバおよびフェイルバックを行う、適切な入出力パスを選択するための改良された機構が当技術分野で必要である。
【０００８】
【課題を解決するための手段】
上述の従来技術の制限を克服するために、好ましい実施形態は、少なくとも２つのコントローラのうちの一方へのパスを選択するための方法、システム、プログラム、およびデータ構造を開示する。各コントローラは、論理装置番号（ＬＵＮ）などの記憶域へのアクセスを提供することができる。各記憶域にアクセスするために使用される好ましいコントローラを示すパス情報を、コントローラから受け取る。ターゲット記憶域に送られた入出力コマンドは、処理され、パス情報中でターゲット記憶域に対する好ましいコントローラとして示されるコントローラに送られる。入出力コマンドを受け取ったコントローラは、入出力コマンドをターゲット記憶域に対して実行する。好ましい実施形態では、記憶域へのアクセスを提供する記憶域コントローラへのパス情報は、１つのコントローラを好ましいコントローラ、別の１つを好ましくないコントローラとして指定する情報でエンコードされる。エンコードされたパス情報は、要求側コンピュータに戻される。要求側コンピュータは、最初に好ましいコントローラに入出力コマンドを送り、好ましいコントローラが入出力コマンドを実行できない場合に、好ましくないコントローラにその入出力コマンドを送る。
【０００９】
さらに、受け取ったパス情報は、各記憶域にアクセスするために使用される少なくとも１つの好ましくないコントローラを示す。好ましいコントローラに送られた入出力コマンドが実行の完了に失敗した場合、その入出力コマンドは、ターゲット記憶域に対するパス情報中で示される１つの好ましくないコントローラに送られる。
【００１０】
好ましい実施形態では、少なくとも１つのホスト・システムから、記憶域へのアクセスを提供する少なくとも２つの記憶域コントローラに至るパス情報は、１つのコントローラを好ましいコントローラ、別の１つを好ましくないコントローラとして指定する情報でエンコードされる。エンコードされたパス情報は、要求側コンピュータに戻される。要求側コンピュータは、最初に好ましいコントローラに入出力コマンドを送り、好ましいコントローラが入出力コマンドを実行できない場合に、好ましくないコントローラにその入出力コマンドを送る。
【００１１】
さらに、パス情報をエンコードするとき、１つのコントローラを好ましいコントローラとして指定することは、コントローラ間の入出力作業負荷の平衡をとるように実行される。
【００１２】
好ましい実施形態は、サーバや他のコンピューティング・システムなどのホスト・システムに、ＬＵＮなどのターゲット記憶域への入出力コマンドを、好ましいコントローラとして指定される１つのコントローラに送るよう指令する技術を提供する。これにより、ある記憶域に対する入出力コマンドが両方のコントローラに送られないことが保証される。入出力コマンドが両方のコントローラに送られると、同じ記憶域またはＬＵＮに対する入出力コマンドの別々の実行をそれらのコントローラ調整することが必要となるため、入出力コマンドを処理する際に遅延が生じる可能性がある。好ましい実施形態はさらに、好ましいコントローラへの接続が機能しない場合に使用するための好ましくないコントローラを提供する。したがって、好ましい実施形態は、コントローラでの入出力処理が最小限に抑えられる、入出力コマンドのために使用するコントローラおよびパスを選択するための技術を提供し、１つのコントローラに障害があった場合にフェイルオーバ中に使用するためのコントローラを提供する。
【００１３】
好ましい実施形態では、好ましいステータスと好ましくないステータスの指定は、記憶域コントローラ・レベルで行われる。あるコントローラをある記憶域に対する好ましいまたは好ましくないコントローラとして指定する際に、ロード・バランシングを考慮に入れることができる。
【００１４】
【発明の実施の形態】
以下の記述では、添付の図面を参照する。図面は、本明細書の一部をなし、本発明のいくつかの実施形態を例示する。本発明の範囲から逸脱することなく、他の実施形態を利用し、あるいは構造上および動作上の変更が行えることを理解されたい。
【００１５】
図１に、好ましい実施形態が実装されるコンピューティング環境を示す。ホスト４ａ、ｂは、他のクライアント・コンピュータがそれを介してストーレッジまたはクライアントにアクセスできるサーバを含めて、当技術分野で周知のどんなコンピューティング装置も備えることができる。ホスト４ａ、ｂは、それぞれ２つのホスト・バス・アダプタ（ＨＢＡ）６ａ、ｂおよび６ｃ、ｄを含む。ＨＢＡ６ａ、ｂ、ｃ、ｄはファイバ・チャネルまたはスモール・コンピュータ・システム・インターフェース（ＳＣＳＩ）アダプタ・カードあるいは当技術分野で周知の他の何らかのネットワーク・アダプタ・カードを備えることができる。ＨＢＡ  ６ａ、ｂ、ｃ、ｄにより、ホスト４ａ、ｂは、記憶域コントローラ１４ａ、ｂとハブ１０ａ、ｂを介して通信することが可能となる。ハブ１０ａ、ｂは、ＩＢＭファイバ・チャネル・ストーレッジ・ハブまたはスイッチ、ＩＢＭ  ＳＡＮファイバ・チャネル・スイッチあるいは当技術分野で周知の他の何らかのスイッチング装置を備えることができる。記憶サブシステム１２は、ＤＡＳＤなどの記憶装置１６へのアクセスを提供する２つのコントローラ１４ａ、ｂを含む。コントローラ１４ａ、ｂは、それぞれ少なくとも１つのポート１８ａ、ｂを含み、それを介してホスト４ａ、ｂは、コントローラ１４ａ、ｂにアクセスする。好ましい実装では、コントローラ１４ａ、ｂのどちらも、記憶装置１６中のどんな記憶位置にもアクセスすることができる。コントローラ１４ａ、ｂは、ＩＢＭファイバ・チャネル・レイド（Raid）・ストーレッジ・コントローラ、または単一の記憶空間または記憶装置に対する１つまたは複数のホスト・アクセスを提供する当技術分野で周知の他の何らかの記憶域コントローラを含むことができる。線２０ａ、ｂは、コントローラ１４ａ、ｂのいずれかが線２０ａ、ｂを使用して記憶装置１６のどの部分にもアクセスできるように、コントローラ１４ａ、ｂから記憶装置１６に至る通信を提供する。線２０ａ、ｂをファイバ・チャネル・インターフェースを使用して実装することができる。その場合、コントローラ１４ａ、ｂは、ファイバ・チャネル・アダプタを含み、線２０ａ、ｂは、コントローラ１４ａ、ｂに接続されたケーブルを含み、ファイバ・チャネル・アービトレーション・ループ（ＦＣＡＬ）を形成し、コントローラ１４ａ、ｂを記憶装置１６の構成要素、例えばハード・ディスク・ドライブなどに相互接続する。
【００１６】
代替実施形態では、複数のホストを、ＤＡＳＤへのアクセスを提供する単一記憶域コントローラへ接続することができる。複数のホストへのアクセスを提供する記憶サブシステムとしては、ＩＢＭ３９９０、エンタープライズ・ストーレッジ・サーバ記憶域コントローラ製品などや他のハイ・エンド記憶域コントローラが含まれる。したがって、本明細書で使用する「記憶域コントローラ」または「コントローラ」という用語は、任意の記憶域コントローラ、記憶域サーバ、コントロール・ユニット、あるいは複数のホスト・システムからの入出力要求を管理する他の任意のコンピューティング装置を指す。
【００１７】
好ましい実施形態は、ＳＣＳＩプロトコルを使用して実装される。その場合、コントローラ１４ａ、ｂは、コントローラ１４ａ、ｂおよびＬＵＮのパラメータに関係する情報を含む照会データを各ＬＵＮに提供することになる。図２に好ましい実施形態による照会データ５０を示す。照会データ５０のバイト０〜３５は、「SCSI 3 Primary Commands (SPC)」提案Ｔ１０／９９５Ｄ、改訂１１ａ版、１９９７年３月２８日付（ＡＮＳＩ発行）記載の照会データ・レコード中で見つかるフィールドを含む。好ましい実施形態では、そのための照会データ５０が維持されるＬＵＮの世界規模で固有の識別子を提供する、８バイトの固有シリアル番号フィールド５２をバイト３６〜４３に追加する。照会データ５０中の好ましいパス・フィールド５４は、コントローラ１４ａ、ｂのどちらが照会データ５０によって表されるＬＵＮに向かう入出力動作の好ましいターゲットかを示す。好ましいパス割り当ては、構成データ中に維持される。
【００１８】
構成の際に、コントローラ１４ａまたはｂの一方が、ＬＵＮをコントローラ１４ａ、ｂのどちらかに割り振る。ＬＵＮが割り振られるコントローラ１４ａ、ｂは、そのＬＵＮに対する好ましいパスを含む。好ましいコントローラへのこのＬＵＮの割り振りは、各ＬＵＮに対する好ましいコントローラおよび好ましくないコントローラを示す構成データ中に維持される。ＬＵＮのコントローラ１４ａ、ｂへの割り振りは、ロード・バランシング・アルゴリズムを使用して決定され、コントローラ１４ａ、ｂの一方に入出力動作で過重負担をかけないようコントローラ間で入出力処理の負荷が等しく分布するようにＬＵＮがコントローラ１４ａ、ｂに割り当てられる。ユーザ指定の構成、ランダムな割り当てなど、ＬＵＮをコントローラ１４ａ、ｂに割り振るための代替技術を使用することもできる。各コントローラ１４ａ、ｂが処理する、入出力動作およびＬＵＮ上で予想される作業負荷に関してアクセスされる合計バイトが同数になるようにＬＵＮを割り振ることが好ましい。各コントローラは、すべてのホストが各ＬＵＮに対する好ましいパスの同じビューを有するよう保証するために、不揮発性ストーレッジ中にＬＵＮの好ましいパス割り振りを維持する。照会データをホスト４ａ、ｂに戻すと、コントローラ１４ａ、ｂは、好ましいパス割り当てを示す構成データを使用して、照会データ５０の好ましいパス・フィールド５４を、ＬＵＮへの好ましいパスを示すように更新することになる。サブシステム１２が２つのコントローラ１４ａ、ｂを含む場合、好ましいパス・フィールド５４は１ビットを含むことができる。０は一方のコントローラを示し、１は他方を示す。好ましいパス・フィールド５４で識別されないコントローラ１４ａ、ｂは、好ましくないコントローラとなる。
【００１９】
各ホスト・システム４ａ、ｂは、入出力処理に使用するパスを選択するために使用されるデバイス・ドライバ２２ａ、ｂを含む。コントローラ・パスは、ホスト４ａ、ｂの一方から特定のコントローラ１４ａ、ｂに接続されるハブ１０ａ、ｂに至るパスを含む。初期化中に、デバイス・ドライバ２２ａ、ｂは、ＬＵＮパス・テーブル２４ａ、ｂを作成する。図３にホスト４ａ、ｂで維持されるＬＵＮパス・テーブル２４ａ、ｂのエントリ７０中のフィールドを示す。ＬＵＮパス・テーブル２４ａ、ｂ中のエントリ７０は、ＬＵＮ番号を示すＬＵＮ  ＩＤフィールド７２を含む。ホスト・フィールド７４およびコントローラ・フィールド７６は、ホストからそのためのエントリ７０が維持されるコントローラに至るパスを示す。固有シリアル番号フィールド７８は、世界規模の名前など、ＬＵＮの固有識別子を示す。記憶空間に対する固有シリアル番号を維持するのは、異なるホスト４ａ、ｂが異なるＬＵＮ番号を同じ物理記憶空間に割り当てる可能性があるからである。好ましいパス・フィールド８０は、フィールド７４および７６で指定されるホストからコントローラへのパスがそのＬＵＮに対する好ましいパスであるかどうかを（すなわち好ましいパスか否かを示すブール値を）示す。ＬＵＮパス・テーブル中の情報を使用して、ホスト４ａ、ｂは、異なるコントローラ１４ａ、ｂを使用する同じＬＵＮへの複数のパス、およびエントリ中で識別される特定のコントローラ１４ａ、ｂが好ましいコントローラかそれとも好ましくないコントローラかを決定することができる。
【００２０】
図４に、ホスト・デバイス・ドライバ２２ａ、ｂ中で実装される、ホスト４ａ、ｂの初期化中にＬＵＮへのパスに関する好ましいパス情報を示すＬＵＮパス・テーブル２４ａ、ｂを作成するための論理を示す。制御は、初期化中に、ブロック１００で、デバイス・ドライバ２２ａ、ｂが発見フェーズを開始することから始まる。デバイス・ドライバ２２ａ、ｂは、次いで各ホスト・バス・アダプタ６ａ、ｂ、および６ｃ、ｄについてブロック１０２〜１１０のループを実行し、次いで可能な各ＬＵＮ番号ｉについてブロック１０４〜１０８のループを実行する。各ＬＵＮ番号ｉごとに、デバイス・ドライバ２２ａ、ｂは、（ブロック１０４で）ＳＣＳＩ照会コマンドなど、ＬＵＮ番号ｉに関する照会コマンドを各コントローラ１４ａ、ｂに送る。ブロック１０４で送られた照会コマンドに応答して、ブロック１２０で、ホスト４ａ、ｂは、ＬＵＮ番号に関する照会データ５０を受け取る。照会データ５０を受け取ると、デバイス・ドライバ２２ａ、ｂは、フィールド７２中にＬＵＮ番号を、フィールド７４および７６中にそれぞれホストからコントローラに至るパスを指定するホストおよびコントローラＩＤ情報を、フィールド７８中にＬＵＮに対する固有シリアル番号を、好ましいパス・フィールド８０中にホストからコントローラへのパスが好ましいパスかどうか、すなわちコントローラ・フィールド７６中で識別されるコントローラ１４ａ、ｂが好ましいコントローラであるかどうかを示す、エントリ７０をＬＵＮパス・テーブル２４ａ、ｂ中に挿入する。
【００２１】
図５に、入出力動作のためにコントローラ１４ａ、ｂへのパスを選択するため、ホスト・デバイス・ドライバ２２ａ、ｂ中で実装される論理を示す。制御は、ブロック１５０で、デバイス・ドライバ２２ａ、ｂがターゲットＬＵＮへの入出力コマンドを受け取ることから始まる。デバイス・ドライバ２２ａ、ｂは、ＬＵＮパス・テーブル２４ａ、ｂを走査し、ターゲットＬＵＮ  ＩＤへの好ましいパスに対する（好ましいパス・フィールド８０が「ＯＮ」である）、入出力処理を駆動するイニシエータ・ホストのホストＩＤを含むホスト・フィールド７４を有するエントリを（ブロック１５２で）見つける。デバイス・ドライバ２２ａ、ｂは、次いでコントローラ・フィールド７６から、好ましいコントローラである（すなわち、好ましいパス・フィールド５４が「ＯＮ」であるエントリに対する）コントローラ１４ａ、ｂを（ブロック１５４で）決定する。デバイス・ドライバ２２ａ、ｂは、次いで実行のために入出力コマンドを、決定されたコントローラ１４ａまたはｂに至るパスに沿って（ブロック１５６で）送る。
【００２２】
ホスト４ａ、ｂが、入出力が失敗したことを示すメッセージをブロック１７０で受け取った場合、デバイス・ドライバ２２ａ、ｂは、障害条件の有無について、すなわち所与の入出力コマンドに関して連続して失敗した再試行の回数が最大数に既に達したかどうかを（ブロック１７２で）チェックする。障害条件に遭遇しなかった場合、デバイス・ドライバ２２ａ、ｂは、好ましいパスに沿って入出力動作を（ブロック１７４で）再試行することになる。そうでない場合、デバイス・ドライバ２２ａ、ｂは、ターゲットＬＵＮ  ＩＤおよび好ましくないパスを有する開始ホストに対するＬＵＮパス・テーブル２４ａ、ｂ中のエントリを（ブロック１７６で）見つけることになる。デバイス・ドライバ２２ａ、ｂは、次いで（コントローラ・フィールド７６から）このエントリに対するコントローラ１４ａまたはｂを（ブロック１７８で）決定し、入出力動作を、決定されたコントローラ１４ａまたはｂへ至る好ましくないパスに沿って（ブロック１８０で）送る。
【００２３】
好ましい実施形態では、ホスト４ａ、ｂに対する特定ＬＵＮへの好ましいパスを示すＬＵＮパス・テーブル２４ａ、ｂを作成するために、デバイス・ドライバ２２ａ、ｂの動作を修正する。デバイス・ドライバ２２ａ、ｂは、コントローラ１４ａ、ｂのどちらを介してもアクセスすることができるＬＵＮに対して、このＬＵＮパス・テーブル２４ａ、ｂを使用して、入出力動作のためコントローラ１４ａ、ｂの一方を選択することになる。好ましいコントローラを使用することにより、ホスト４ａ、ｂは、同じターゲットＬＵＮまたは記憶装置への入出力動作を管理するためにコントローラ１４ａ、ｂが相互通信する必要を軽減する。ホスト４ａ、ｂは、すべての入出力をただ１つの記憶域コントローラに送るからである。
【００２４】
好ましい実施形態では、入出力処理を完了させるため試みに何回か失敗した後に、ホスト４ａ、ｂは好ましくないコントローラを選択することになる。したがって、ホスト４ａ、ｂからハブ１０ａ、ｂに至り、コントローラ１４ａ、ｂに至るパス中のどの点で障害が生じても、ホスト４ａ、ｂは、障害を含むコントローラへのパスを避けて、代替の、好ましくないコントローラを選択することができる。この時点で、好ましくないコントローラを選択することにより、コントローラ１４ａ、ｂが当技術分野で周知の方法で、同じＬＵＮに対して入出力コマンドの実行を管理するために相互通信に従事することが必要になり、それにより入出力処理に遅延が生じることがある。しかし、好ましい技術では、相互コントローラ１４ａ、ｂが同じＬＵＮへの入出力を管理するのに必要な遅延を最小限に抑える。好ましい実施形態では、特定のＬＵＮへの入出力に対して障害がない限り常に同じパスまたは一方のコントローラ１４ａ、ｂを使用する傾向があるからである。
【００２５】
好ましい実施形態では、コントローラ１４ａ、ｂ間の入出力処理のロード・バランシングがさらに向上する。というのは、コントローラ１４ａ、ｂは、ロード・バランシング最適化を使用してＬＵＮ番号をコントローラ１４ａ、ｂに割り振り、ホスト４ａ、ｂは、ロード・バランシング方法に従って指定されたこの好ましいコントローラを使用してＬＵＮにアクセスするからである。
【００２６】
したがって、好ましい実施形態は、好ましいパスを使用して、ロード・バランシング最適化に従って選択されたＬＵＮにアクセスすることによって入出力処理を最適化し、同時に、パス中のいずれかの地点で障害があった場合に、代替フェイルバック・コントローラおよびパスのための機構を提供する。
【００２７】
さらに、好ましい実施形態は、各コントローラ１４ａ、ｂに専用ポート１８ａ、ｂのみを含む低価格サブシステムのための生き残っているコントローラに対するロード・バランシング、入出力処理の最適化、フェイルオーバ、およびフェイルバックを可能にする。
【００２８】
結論
以下に本発明を実施するためのいくつかの代替実施形態を示す。
【００２９】
好ましい実施形態は、標準のプログラミングまたはエンジニアリング技術あるいはその両方を使用してソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを生成する方法、装置、または情報担持媒体として実装することができる。好ましい実施形態の機能を定義するプログラムは、様々な情報運搬媒体を介してコンピュータに送達することができる。こうした情報運搬媒体には、磁気記憶媒体、「フロッピー(R)・ディスク」、ＣＤ−ＲＯＭ、ネットワーク伝送線を介してプログラムへのアクセスを提供するファイル・サーバ、無線伝送媒体、空間、電波、赤外線信号などを介して伝播する信号などの、コンピュータ可読装置、キャリア、または媒体が含まれるが、それだけには限定されない。もちろん、本発明の範囲から逸脱することなく、この構成に多くの修正を行えることは、当業者には理解されよう。そのような情報運搬媒体は、本発明の機能を指示するコンピュータ可読命令を担持するとき、本発明の代替実施形態となる。
【００３０】
好ましい実施形態では、記憶サブシステム１２は、２つのコントローラ１４ａ、ｂおよび各コントローラごとに１つのポート１８ａ、ｂを含む。他の実施形態では、サブシステム１２は、３つ以上のコントローラおよび各コントローラごとに複数のポートを含むことができる。さらに、１つのホストから各コントローラに至る経路が複数存在することもできる。
【００３１】
図４および図５の好ましい論理は、特定の順序で起こる特定の動作を示したものである。代替実施形態では、論理動作の一部を、異なる順序で実行し、修正し、または削除することができ、それでも本発明の好ましい実施形態を実装する。さらに、上述の論理にステップを追加することもができるが、それでも好ましい実施形態に従う。
【００３２】
好ましい実施形態を、ＳＣＳＩサーバから照会データを得るために使用されるＳＣＳＩ照会コマンドなどのＳＣＳＩコマンドに関して述べた。ＳＣＳＩでない実施形態では、ＬＵＮに関する照会データを得るために異なるコマンドを使用することができる。そのような場合、コントローラが返す照会データのフォーマットは異なることがある。
【００３３】
要約すると、好ましい実施形態は、少なくとも２つのコントローラのうちの一方へのパスを選択するための方法、システム、プログラム、およびデータ構造を開示する。各コントローラは、論理装置番号（ＬＵＮ）などの記憶域へのアクセスを提供することができる。各記憶域にアクセスするために使用される好ましいコントローラを示すパス情報を、コントローラから受け取る。ターゲット記憶域に送られた入出力コマンドは、処理され、パス情報中でターゲット記憶域に対する好ましいコントローラとして示されるコントローラに送られる。入出力コマンドを受け取ったコントローラは、入出力コマンドをターゲット記憶域に対して実行する。好ましい実施形態では、記憶域へのアクセスを提供する記憶域コントローラへのパス情報が、１つのコントローラを好ましいコントローラ、別の１つを好ましくないコントローラとして指定する情報でエンコードされる。エンコードされたパス情報は、要求側コンピュータに戻される。要求側コンピュータは、最初に好ましいコントローラに入出力コマンドを送り、好ましいコントローラが入出力コマンドを実行できない場合に、好ましくないコントローラにその入出力コマンドを送る。
（ウィンドウズ(R)およびＮＴ（Windows(R) and NT）はマイクロソフト・コーポレーション（Microsoft Corporation）の登録商標。ＡＩＸおよびＯＳ／３９０はＩＢＭの登録商標。ＭＶＳおよびファイバ・チャネル・レイド・ストーレッジ・コントローラ（Fiber Channel Raid Storage Controller）はＩＢＭの商標。）
【００３４】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００３５】
（１）少なくとも２つのコントローラのうちの一方へのパスを選択するための方法であって、各コントローラが、記憶装置中の記憶領域へのアクセスを提供することができ、
各記憶領域にアクセスするために使用される好ましいコントローラを示すパス情報を前記コントローラから受け取るステップと、
ターゲット記憶領域に送られたコマンドを処理するステップと、
前記コマンドを、前記パス情報中で前記ターゲット記憶領域への前記好ましいコントローラとして示される前記コントローラに送るステップとを含み、前記コマンドを受け取るコントローラが、前記ターゲット記憶領域に対して前記コマンドを実行する方法。
（２）前記受け取ったパス情報が、各記憶領域にアクセスするために使用される少なくとも１つの好ましくないコントローラを示し、
前記好ましいコントローラに送られた前記コマンドが実行を完了できなかった後に、前記コマンドを前記ターゲット記憶領域に関する前記パス情報中に示される１つの好ましくないコントローラに送るステップをさらに含む上記（１）に記載の方法。
（３）記憶領域識別子、コントローラ識別子、およびエントリ中の前記識別されるコントローラが、前記好ましいコントローラかそれとも１つの好ましくないコントローラかを示す前記エントリを含むテーブルを作成するステップと、
前記コマンドを処理する際に、前記ターゲット記憶領域に関する、前記識別されるコントローラが前記好ましいコントローラであることを示す１つのエントリを求めて前記テーブルを走査するステップと、
前記好ましいコントローラに送られた前記コマンドが実行を完了できなかった後に、前記識別されるコントローラが前記好ましくないコントローラであることを示す、前記ターゲット記憶域についての１つのエントリを求めて前記テーブルを走査するステップとをさらに含み、
前記コマンドが前記エントリ中で識別される前記コントローラに送られる上記（２）に記載の方法。
（４）各エントリが、コンピュータに対して前記記憶領域を識別するために使用される記憶領域番号および前記記憶領域の固有識別子を含み、異なるコンピュータが、同じ記憶領域に異なる記憶領域番号を割り当てることができる上記（３）に記載の方法。
（５）各記憶領域に関する前記パス情報を要求するコントローラにコマンドを送ることによって前記テーブルが作成され、前記コントローラが、前記エントリ中で識別されるコントローラが前記好ましいコントローラかそれとも前記好ましくないコントローラかを示す情報で前記パス情報をエンコードする上記（３）に記載の方法。
（６）前記コマンドが初期化中に前記コントローラに送られる上記（５）に記載の方法。
（７）前記記憶領域が論理装置番号によって識別され、前記コマンドが読み取りコマンドおよび書き込みコマンドを含むことができる上記（１）に記載の方法。
（８）ホスト・システムを少なくとも２つのコントローラに接続するパスを定義するパス情報をエンコードするための方法において、各コントローラが記憶装置中の記憶領域へのアクセスを提供し、
１つのコントローラを好ましいコントローラ、別の１つを好ましくないコントローラとして指定するステップと、
前記好ましいコントローラおよび好ましくないコントローラの指定の情報を前記パス情報中にエンコードするステップと、
前記エンコードされたパス情報を前記ホスト・システムに戻すステップとを含み、前記ホスト・システム・コンピュータが、最初に入出力コマンドを前記好ましいコントローラに送り、前記好ましいコントローラが前記入出力コマンドを実行できない場合に前記好ましくないコントローラに前記入出力コマンドを送る方法。
（９）１つのコントローラを前記好ましいコントローラとして指定する前記ステップが、前記コントローラ間の入出力作業負荷の平衡をとるようにして実行される上記（８）に記載の方法。
（１０）前記コントローラを指定する前記ステップが前記コントローラの初期化中に実行される上記（８）に記載の方法。
（１１）少なくとも２つのコントローラのうちの一方へのパスを選択するためのシステムにおいて、各コントローラが、記憶装置中の記憶領域へのアクセスを提供することができ、
各記憶領域にアクセスするために使用される好ましいコントローラを示すパス情報を前記コントローラから受け取る手段と、
ターゲット記憶領域に送られたコマンドを処理する手段と、
前記コマンドを、前記パス情報中で前記ターゲット記憶領域に対する好ましいコントローラとして示されるコントローラに送る手段とを備え、前記コマンドを受け取る前記コントローラが、前記ターゲット記憶域に対して前記コマンドを実行するシステム。
（１２）前記受け取ったパス情報が、各記憶領域にアクセスするために使用される少なくとも１つの好ましくないコントローラを示し、
前記好ましいコントローラに送られた前記コマンドが実行を完了できなかった後に、前記コマンドを前記ターゲット記憶領域に関する前記パス情報中に示される１つの好ましくないコントローラに送る手段をさらに備える上記（１１）に記載のシステム。
（１３）記憶領域識別子、コントローラ識別子、および前記エントリ中の前記識別されるコントローラが前記好ましいコントローラかそれとも１つの好ましくないコントローラかを示すエントリを含むテーブルを作成する手段と、
コマンドを処理する際に、前記ターゲット記憶領域に関する、前記識別されるコントローラが前記好ましいコントローラであることを示す１つのエントリを求めて前記テーブルを走査する手段と、
前記好ましいコントローラに送られた前記コマンドが実行を完了できなかった後に、前記識別されるコントローラが前記好ましくないコントローラであることを示す、前記ターゲット記憶域に関する１つのエントリを求めて前記テーブルを走査する手段とをさらに備え、
前記入出力コマンドが前記エントリ中で識別されるコントローラに送られる上記（１２）に記載のシステム。
（１４）各エントリが、前記記憶領域をコンピュータ識別するために使用される記憶領域番号および前記記憶領域の固有識別子を含み、異なるコンピュータが、同じ記憶領域に異なる記憶領域番号を割り当てることができる上記（１３）に記載のシステム。
（１５）各記憶領域に関する前記パス情報を要求するコントローラにコマンドを送ることによって前記テーブルが作成され、前記コントローラが、前記エントリ中で識別されるコントローラが前記好ましいコントローラかそれとも前記好ましくないコントローラかを示す情報で前記パス情報をエンコードする上記（１３）に記載のシステム。
（１６）前記コマンドが初期化中に前記コントローラに送られる上記（１５）に記載のシステム。
（１７）前記記憶領域が論理装置番号によって識別され、前記コマンドが読み取りコマンドおよび書き込みコマンドを含むことができる上記（１１）に記載のシステム。
（１８）パスを定義するパス情報をエンコードするためのシステムにおいて、
２つのコントローラを備え、前記パスがホスト・システムから前記コントローラへの接続を提供し、各コントローラが記憶装置中の記憶領域へのアクセスを提供し、
さらに、１つのコントローラを好ましいコントローラ、別の１つを好ましくないコントローラとして指定する手段と、
前記好ましいコントローラおよび好ましくないコントローラの指定の情報を前記パス情報中にエンコードする手段と、
前記エンコードされたパス情報を前記ホスト・システムに戻す手段とを備え、前記ホスト・システム・コンピュータが、最初に入出力コマンドを前記好ましいコントローラに送り、前記好ましいコントローラが前記入出力コマンドを実行できない場合に前記好ましくないコントローラに前記入出力コマンドを送るシステム。
（１９）１つのコントローラを前記好ましいコントローラとして指定することが、前記コントローラ間の入出力作業負荷の平衡をとるようにして実行される上記（１８）に記載のシステム。
（２０）前記コントローラの前記指定が前記コントローラの初期化中に実行される上記（１８）に記載のシステム。
（２１）ホスト・システムを少なくとも２つのコントローラに接続するパスを定義するパス情報をエンコードするための情報担持媒体において、各コントローラが記憶装置中の記憶領域へのアクセスを提供し、前記情報担持媒体が、
各記憶装置にアクセスするために使用される好ましいコントローラを示すパス情報を前記コントローラから受け取るステップと、
ターゲット記憶領域に送られたコマンドを処理するステップと、
前記コマンドを、前記パス情報中で前記ターゲット記憶領域に対する前記好ましいコントローラとして示されるコントローラに送るステップとをコンピュータに実行させることができるコードを含み、前記コマンドを受け取るコントローラが、前記ターゲット記憶域に対して前記コマンドを実行する情報担持媒体。
（２２）前記受け取ったパス情報が、各記憶領域にアクセスするために使用される少なくとも１つの好ましくないコントローラを示し、
前記好ましいコントローラに送られた前記コマンドが実行を完了できなかった後に、前記コマンドを前記ターゲット記憶領域に関する前記パス情報中に示される１つの好ましくないコントローラに送るステップをさらに含む上記（２１）に記載の情報担持媒体。
（２３）記憶領域識別子、コントローラ識別子、およびエントリ中の前記識別されるコントローラが前記好ましいコントローラかそれとも１つの好ましくないコントローラかを示すエントリを含むテーブルを作成するステップと、
前記コマンドを処理する際に、前記ターゲット記憶領域に関する、前記識別されるコントローラが前記好ましいコントローラであることを示す１つのエントリを求めて前記テーブルを走査するステップと、
前記好ましいコントローラに送られた前記コマンドが実行を完了できなかった後に、前記識別されるコントローラが前記好ましくないコントローラであることを示す、前記ターゲット記憶域に関する１つのエントリを求めて前記テーブルを走査するステップとをさらに含み、
前記入出力コマンドが前記エントリ中で識別されるコントローラに送られる上記（２２）に記載の情報担持媒体。
（２４）各エントリが、コンピュータに対して前記記憶領域を識別するために使用される記憶領域番号および前記記憶領域の固有識別子を含み、異なるコンピュータが、同じ記憶領域に異なる記憶領域番号を割り当てることができる上記（２３）に記載の情報担持媒体。
（２５）各記憶領域に関する前記パス情報を要求するコントローラにコマンドを送ることによって前記テーブルが作成され、前記コントローラが、前記エントリ中で識別されるコントローラが前記好ましいコントローラかそれとも前記好ましくないコントローラのどちらであるかを示す情報で前記パス情報をエンコードする上記（２３）に記載の情報担持媒体。
（２６）前記コマンドが初期化中に前記コントローラに送られる上記（２５）に記載の情報担持媒体。
（２７）前記記憶領域が論理装置番号によって識別され、前記コマンドが読み取りコマンドおよび書き込みコマンドを含むことができる上記（２１）に記載の情報担持媒体。
（２８）ホスト・システムを少なくとも２つのコントローラに接続するパスを定義するパス情報をエンコードするための情報担持媒体において、各コントローラが記憶装置中の記憶領域へのアクセスを提供し、前記情報担持媒体が、
１つのコントローラを好ましいコントローラ、別の１つを好ましくないコントローラとして指定するステップと、
前記好ましいコントローラおよび好ましくないコントローラの指定の情報を前記パス情報中にエンコードするステップと、
前記エンコードされたパス情報を要求側コンピュータに戻すステップとをコンピュータに実行させることができるコードを含み、前記要求側コンピュータが、最初に入出力コマンドを前記好ましいコントローラに送り、前記好ましいコントローラが前記入出力コマンドを実行できない場合に前記好ましくないコントローラに前記入出力コマンドを送る情報担持媒体。
（２９）１つのコントローラを前記好ましいコントローラとして指定する前記ステップが、前記コントローラ間の入出力作業負荷の平衡をとるようにして実行される上記（２８）に記載の情報担持媒体。
（３０）前記コントローラを指定する前記ステップが前記コントローラの初期化中に実行される上記（２８）に記載の情報担持媒体。
（３１）記憶装置中の各記憶領域にアクセスするために使用される少なくとも２つのコントローラのうちの一方を示すパス情報を含むコンピュータ可読媒体において、１つのコントローラが好ましいコントローラ、別の１つが好ましくないコントローラとして指定され、各コントローラが、記憶装置中の記憶領域へのアクセスを提供でき、ターゲット記憶領域へのコマンドが、前記パス情報中で前記ターゲット記憶領域に対する好ましいコントローラとして示されるコントローラに送られるコンピュータ可読媒体。
（３２）前記パス情報が、各記憶領域にアクセスするために使用される少なくとも１つの好ましくないコントローラをさらに示し、前記好ましいコントローラに送られたコマンドが実行を完了できなかった後に、前記コマンドが前記ターゲット記憶領域に関する前記パス情報中で示される１つの好ましくないコントローラに送られる上記（３０）に記載のコンピュータ可読媒体。
（３３）前記パス情報が、記憶領域識別子、コントローラ識別子、および前記エントリ中の前記識別されるコントローラが前記好ましいコントローラかそれとも１つの好ましくないコントローラかを示す情報を示すエントリを含むテーブルをさらに含み、前記テーブルが走査されて記憶領域にアクセスするために使用される１つの好ましいまたは好ましくないコントローラが識別され、前記入出力コマンドがエントリ中で識別されるコントローラに送られる上記（３２）に記載のコンピュータ可読媒体。
（３４）各エントリが、コンピュータに対して前記記憶領域を識別するために使用される記憶領域番号と前記記憶領域の固有識別子とを含み、異なるコンピュータが、同じ記憶領域に異なる記憶領域番号を割り当てることができる上記（３３）に記載のコンピュータ可読媒体。
（３５）つのコントローラが好ましいコントローラ、別の１つが好ましくないコントローラとして指定され、
前記好ましいコントローラおよび好ましくないコントローラの指定の情報を前記パス情報中にエンコードし、
前記エンコードされたパス情報を前記ホスト・システムに戻し、前記ホスト・システム・コンピュータが、最初に入出力コマンドを前記好ましいコントローラに送り、前記好ましいコントローラが前記入出力コマンドを実行できない場合に前記好ましくないコントローラに前記入出力コマンドを送る上記（３２）に記載のコンピュータ可読媒体。
（３６）１つのコントローラを前記好ましいコントローラとして指定することが、前記コントローラ間の入出力作業負荷の平衡をとるようにして実行される上記（３２）に記載のコンピュータ可読媒体。
【図面の簡単な説明】
【図１】好ましい実施形態が実装されるコンピューティング環境を示すブロック・ダイアグラムである。
【図２】本発明の好ましい実施形態による照会データのフォーマットを示す図である。
【図３】本発明の好ましい実施形態によるＬＵＮパス・テーブルのエントリを示す図である。
【図４】本発明の好ましい実施形態に従ってＬＵＮパス・テーブルを作成するためホスト・デバイス・ドライバ中で実装される論理を示す図である。
【図５】本発明の好ましい実施形態に従って入出力動作についてパスを選択するためのホスト・デバイス・ドライバ中で実装される論理を示す図である。
【符号の説明】
４ａ  ホスト
４ｂ  ホスト
６ａ  ホスト・バス・アダプタ（ＨＢＡ）
６ｂ  ホスト・バス・アダプタ（ＨＢＡ）
６ｃ  ホスト・バス・アダプタ（ＨＢＡ）
６ｄ  ホスト・バス・アダプタ（ＨＢＡ）
１０ａ  ハブ
１０ｂ  ハブ
１２  記憶サブシステム
１４ａ  記憶域コントローラ
１４ｂ  記憶域コントローラ
１６  記憶装置
１８ａ  ポート
１８ｂ  ポート
２０ａ  線
２０ｂ  線
２２ａ  デバイス・ドライバ
２２ｂ  デバイス・ドライバ
２４ａ  ＬＵＮパス・テーブル
２４ｂ  ＬＵＮパス・テーブル
５０  照会データ
５２  固有シリアル番号フィールド
５４  好ましいパス・フィールド
７０  エントリ
７２  ＬＵＮ  ＩＤフィールド
７４  ホスト・フィールド
７６  コントローラ・フィールド
７８  固有シリアル番号フィールド
８０  好ましいパス・フィールド
【図１】
0004299474.tif 000002
【図２】
0004299474.tif 000003
【図３】
0004299474.tif 000004
【図４】
0004299474.tif 000005
【図５】
0004299474.tif 000006