(57)【要約】【課題】キャッシュメモリを有効に利用しながら、アクセス負荷を分散する、高性能なストレージシステムを提供する。【解決手段】コンピュータと、前記コンピュータと通信可能に接続されたストレージ装置と、を備えるストレージシステムにおいて、前記ストレージ装置は、前記コンピュータと通信する一つ以上のチャネルアダプタと、データを格納する複数の論理ユニットと、を備え、前記コンピュータは、前記ストレージ装置と通信する一つ以上のホストバスアダプタと、前記コンピュータが前記論理ユニットにアクセスする経路を管理する経路管理部と、を備え、前記経路管理部は、前記論理ユニットごとのアクセス負荷を測定する負荷測定部と、前記測定されたアクセス負荷に基づいて、前記論理ユニットごとに、前記コンピュータからのアクセスが経由する一つ以上のアクティブ経路を設定するアクティブ経路設定部と、を備える。【選択図】      図１
2006040026.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータと、
前記コンピュータと通信可能に接続されたストレージ装置と、を備えるコンピュータシステムにおいて、
前記ストレージ装置は、
前記コンピュータと通信する一つ以上のチャネルアダプタと、
データを格納する複数の論理ユニットと、を備え、
前記コンピュータは、
前記ストレージ装置と通信する一つ以上のホストバスアダプタと、
前記コンピュータが前記論理ユニットにアクセスする経路を管理する経路管理部と、を備え、
前記経路管理部は、
前記論理ユニットごとのアクセス負荷を測定する負荷測定部と、
前記測定されたアクセス負荷に基づいて、前記コンピュータからのアクセスが経由する一つの前記チャネルアダプタ及び一つ以上の前記ホストバスアダプタ、又は、一つ以上の前記チャネルアダプタ及び一つの前記ホストバスアダプタを、前記論理ユニットごとに選択し、当該チャネルアダプタ及び当該ホストバスアダプタを経由するアクティブ経路を設定するアクティブ経路設定部と、を備えることを特徴とするコンピュータシステム。
【請求項２】
前記アクティブ経路設定部は、
前記チャネルアダプタ及び／又は前記ホストバスアダプタごとに、前記測定されたアクセス負荷を合計し、
前記アクセス負荷の合計値が最も小さい前記チャネルアダプタ及び／又は前記ホストバスアダプタを経由するアクティブ経路を設定することを特徴とする請求項１に記載のコンピュータシステム。
【請求項３】
前記アクティブ経路設定部は、
前記アクセス負荷の合計値が最も小さい前記チャネルアダプタ及び／又は前記ホストバスアダプタが複数存在する場合は、
当該チャネルアダプタ及び／又は当該ホストバスアダプタごとに、設定されたアクティブ経路の数を算出し、
前記アクセス負荷の合計値が最も小さく、かつ、前記算出されたアクティブ経路の数が最も小さい前記チャネルアダプタ及び／又は前記ホストバスアダプタを経由するアクティブ経路を設定することを特徴とする請求項２に記載のコンピュータシステム。
【請求項４】
前記アクティブ経路設定部は、
前記論理ユニットごとに測定されたアクセス負荷を比較し、
前記測定されたアクセス負荷が大きい論理ユニットの前記アクティブ経路を、前記測定されたアクセス負荷が小さい論理ユニットの前記アクティブ経路より先に設定することを特徴とする請求項２に記載のコンピュータシステム。
【請求項５】
前記測定されたアクセス負荷は、所定の時間当たりのアクセス回数であることを特徴とする請求項１に記載のコンピュータシステム。
【請求項６】
前記測定されたアクセス負荷は、所定の時間当たりのアクセスデータ量であることを特徴とする請求項１に記載のコンピュータシステム。
【請求項７】
ストレージ装置と通信可能に接続されたコンピュータにおいて実行されるプログラムであって、
前記ストレージ装置は、前記コンピュータと通信する一つ以上のチャネルアダプタと、データを格納する複数の論理ユニットと、を備え、
前記コンピュータは、前記ストレージ装置と通信する一つ以上のホストバスアダプタを備え、
前記プログラムは、
前記論理ユニットごとのアクセス負荷を測定する第１の手順と、
前記測定されたアクセス負荷に基づいて、前記コンピュータからのアクセスが経由する一つの前記チャネルアダプタ及び一つ以上の前記ホストバスアダプタを、前記論理ユニットごとに選択し、当該チャネルアダプタ及び当該ホストバスアダプタを経由するアクティブ経路を設定する第２の手順と、を含むことを特徴とするプログラム。
【請求項８】
前記第２の手順は、
前記チャネルアダプタ及び／又は前記ホストバスアダプタごとに、前記測定されたアクセス負荷を合計する手順と、
前記アクセス負荷の合計値が最も小さい前記チャネルアダプタ及び／又は前記ホストバスアダプタが各々一つ存在する場合は、前記合計されたアクセス負荷が最も小さい前記チャネルアダプタ及び／又は前記ホストバスアダプタを経由するアクティブ経路を設定する手順と、
前記アクセス負荷の合計値が最も小さい前記チャネルアダプタ及び／又は前記ホストバスアダプタが複数存在する場合は、当該チャネルアダプタ及び／又は当該ホストバスアダプタごとに設定されたアクティブ経路の数を算出し、前記アクセス負荷の合計値が最も小さく、かつ、前記算出されたアクティブ経路の数が最も小さい前記チャネルアダプタ及び／又は前記ホストバスアダプタを経由するアクティブ経路を設定する手順と、を含むことを特徴とする請求項７に記載のプログラム。
【請求項９】
コンピュータと、
前記コンピュータと通信可能に接続されたストレージ装置と、を備え、
前記ストレージ装置は、前記コンピュータと通信する一つ以上のチャネルアダプタと、データを格納する複数の論理ユニットと、を備え、
前記コンピュータは、前記ストレージ装置と通信する一つ以上のホストバスアダプタを備えるコンピュータシステムにおいて、前記コンピュータが前記論理ユニットにアクセスするアクティブ経路を設定する方法であって、
前記論理ユニットごとのアクセス負荷を測定する第１の手順と、
前記測定されたアクセス負荷に基づいて、前記コンピュータからのアクセスが経由する一つの前記チャネルアダプタ及び一つ以上の前記ホストバスアダプタを、前記論理ユニットごとに選択し、当該チャネルアダプタ及び当該ホストバスアダプタを経由するアクティブ経路を設定する第２の手順と、を含むことを特徴とする方法。
【請求項１０】
前記第２の手順は、
前記チャネルアダプタ及び／又は前記ホストバスアダプタごとに、前記測定されたアクセス負荷を合計する手順と、
前記アクセス負荷の合計値が最も小さい前記チャネルアダプタ及び／又は前記ホストバスアダプタが各々一つ存在する場合は、前記合計されたアクセス負荷が最も小さい前記チャネルアダプタ及び／又は前記ホストバスアダプタを経由するアクティブ経路を設定する手順と、
前記アクセス負荷の合計値が最も小さい前記チャネルアダプタ及び／又は前記ホストバスアダプタが複数存在する場合は、当該チャネルアダプタ及び／又は当該ホストバスアダプタごとに設定されたアクティブ経路の数を算出し、前記アクセス負荷の合計値が最も小さく、かつ、前記算出されたアクティブ経路の数が最も小さい前記チャネルアダプタ及び／又は前記ホストバスアダプタを経由するアクティブ経路を設定する手順と、を含むことを特徴とする請求項９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータシステムのアクセス負荷分散に関する。
【背景技術】
【０００２】
ストレージ装置とコンピュータとの間に、複数のアクセス可能なパスを設け、これらのパスにコンピュータ装置からのアクセスを分散させることによって、システムの性能向上を図る技術が知られている（例えば、特許文献１参照）。このような負荷分散技術によれば、複数のパスにアクセス（Ｉ／Ｏ）の負荷が分散されるため、特定のパスにアクセスが集中することによる性能低下を防止することができる。さらに、一つのパスに障害が発生したときに、他の正常なパスにアクセスが割り当てられるため、アクセスを継続することができる。
【０００３】
一方、ストレージ装置に搭載したキャッシュメモリを利用して、システムの性能向上を図る技術が知られている。例えば、読み出し要求に関するブロックのデータと共に、その次のブロックのデータも読み出してキャッシュメモリに格納しておくことによってアクセス性能の向上を図る、キャッシュ先読み技術が知られている（例えば、特許文献２参照）。
【特許文献１】特開２０００−３３０９２４号公報
【特許文献２】特開２００２−１８２９７８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
従来の負荷分散技術は、データ先読み機能のような、ストレージ装置のキャッシュメモリを利用した機能を利用することを考慮していない。このため、同一の論理ユニット（ＬＵ）に対するアクセスが、同一のキャッシュメモリを利用できない複数のパスに分散され、キャッシュヒット率が低下する。その結果、データ先読み機能等が十分に活用されず、性能の向上が抑制される問題があった。
【課題を解決するための手段】
【０００５】
本発明は、コンピュータと、前記コンピュータと通信可能に接続されたストレージ装置と、を備えるコンピュータシステムにおいて、前記ストレージ装置は、前記コンピュータと通信する一つ以上のチャネルアダプタと、データを格納する複数の論理ユニットと、を備え、前記コンピュータは、前記ストレージ装置と通信する一つ以上のホストバスアダプタと、前記コンピュータが前記論理ユニットにアクセスする経路を管理する経路管理部と、を備え、前記経路管理部は、前記論理ユニットごとのアクセス負荷を測定する負荷測定部と、前記測定されたアクセス負荷に基づいて、前記コンピュータからのアクセスが経由する一つの前記チャネルアダプタ及び一つ以上の前記ホストバスアダプタ、又は、一つ以上の前記チャネルアダプタ及び一つの前記ホストバスアダプタを、前記論理ユニットごとに選択し、当該チャネルアダプタ及び当該ホストバスアダプタを経由するアクティブ経路を設定するアクティブ経路設定部と、を備えることを特徴とする。
【発明の効果】
【０００６】
本発明によれば、アクセス負荷が分散するために、負荷の集中によるシステムの性能低下を防ぐことができる。さらに、同一の論理ユニットＬＵに対するアクセスの際に、同一のキャッシュメモリを利用することができるため、データ先読み等によって、システムの性能が向上する。
【発明を実施するための最良の形態】
【０００７】
以下、本発明の実施の形態を図面に基づいて説明する。
【０００８】
図１は、本発明の実施の形態のコンピュータシステムの構成を示すブロック図である。
【０００９】
本発明の実施の形態のコンピュータシステムは、ホスト１０１、ストレージ装置１０８及びこれらを相互に通信可能に接続するStorage Area Network（ＳＡＮ）１０６によって構成される。
【００１０】
ホスト１０１は、コンピュータであり、ストレージ装置１０８にデータを書き込み、又は、ストレージ装置１０８からデータを読み出す。ホスト１０１は、少なくとも、ＣＰＵ１０２、メモリ１０３、入出力装置１０４及びホストバスアダプタ（ＨＢＡ）１０５からなる。
【００１１】
ＣＰＵ１０２は、メモリ１０３に格納されたプログラムを実行するプロセッサである。
【００１２】
メモリ１０３は、例えば、半導体メモリであり、ＣＰＵ１０２が実行するプログラムが格納される（図２参照）。さらに、メモリ１０３には、図４から図７に示すテーブルが格納される。
【００１３】
入出力装置１０４は、例えば、表示画面及びキーボードであり（図示省略）、マウスやプリンタ等の他の入出力手段を含んでもよい。
【００１４】
ＨＢＡ１０５は、ホスト１０１に一つ又は複数個設けられ、ＳＡＮ１０６を介してストレージ装置１０８と通信する。図１の例では、ホスト１０１に二つのＨＢＡ１０５が設けられる。ここで、ＨＢＡ１及びＨＢＡ２は、それぞれ、ＨＢＡ識別子（ＨＢＡ−ＩＤ）が「１」及び「２」のＨＢＡ１０５である。ホスト１０１は、いずれのＨＢＡ１０５を使用してもストレージ装置１０８と通信することができる。
【００１５】
ストレージ装置１０８は、例えば、複数のディスクドライブ及びそれらを制御するコントローラ（図示省略）によって構成されるディスクアレイ装置である。ストレージ装置１０８には、一つ以上の論理ユニット（ＬＵ）１０９が設定される。
【００１６】
ＬＵ１０９は、ホスト１０１が一つのディスクドライブとして認識する単位である。ＬＵ１０９は、論理的には一つのディスクドライブであるが、物理的には、一つのディスクドライブの一部の領域又は複数のディスクドライブの一部若しくは全部の領域であってよい。図１の例では、ストレージ装置１０８に４つのＬＵ１０９が設定される。ここで、ＬＵ１からＬＵ４は、それぞれ、ＬＵ識別子（ＬＵ−ＩＤ）が「１」から「４」のＬＵ１０９である。
【００１７】
ストレージ装置１０８は、さらに、一つ以上のチャネルアダプタ（ＣＨＡ）１０７を備える。ＣＨＡ１０７は、ＳＡＮ１０６を介してホスト１０１と通信する。図１の例では、ストレージ装置１０８に三つのＣＨＡ１０７が設けられる。ここで、ＣＨＡ１からＣＨＡ３は、それぞれ、ＣＨＡ識別子（ＣＨＡ−ＩＤ）が「１」から「３」のＣＨＡ１０７である。ストレージ装置１０８は、いずれのＣＨＡ１０７を使用してもホスト１０１と通信することができる。
【００１８】
ＣＨＡ１０７は、通常、キャッシュメモリ（図示省略）を備える。ＣＨＡ１０７は、ホスト１０１からデータの読み出し要求を受けたとき、その読み出し要求の対象のデータがキャッシュメモリ内に存在すれば、ＬＵ１０９へアクセスせず、キャッシュメモリ内のデータをホスト１０１に返送する。その結果、ＬＵ１０９へのアクセス（すなわち、ＬＵ１０９を構成するディスクドライブへのアクセス）が省略され、アクセス速度が向上する。
【００１９】
なお、同様のキャッシュメモリがＨＢＡ１０５に設けられてもよい。
【００２０】
ＳＡＮ１０６は、ホスト１０１のＨＢＡ１０５とストレージ装置１０８のＣＨＡ１０７とを通信可能に接続する。各ＨＢＡ１０５は、いずれのＣＨＡ１０７とも通信することができる。同様に、各ＣＨＡ１０７は、いずれのＨＢＡとも通信することができる。典型的なＳＡＮ１０６は、ファイバーチャネルスイッチ及びケーブルによって構成される。
【００２１】
ここで、パスとは、ホスト１０１からＬＵ１０９までのデータアクセス経路である。図１の例では、二つのＨＢＡ１０５と三つのＣＨＡ１０７があるため、ホスト１０１から一つのＬＵに至るパスは、６通り存在する。パスは、パスＩＤによって識別される。パスＩＤは、経由するＨＢＡ、ＣＨＡ及びＬＵの識別子（ＨＢＡ−ＩＤ、ＣＨＡ−ＩＤ、ＬＵ−ＩＤ）によって定められる。例えば、ＨＢＡ１及びＣＨＡ３を経由してＬＵ２に至るパスのパスＩＤは、「１３２」である。
【００２２】
図２は、本発明の実施の形態のメモリ１０３に格納されるプログラムの説明図である。
【００２３】
メモリ１０３には、アプリケーションプログラム２０１、交代パス管理設定プログラム２０２及び交代パス管理プログラム２０３が格納される。いずれのプログラムも、ＣＰＵ１０２によって実行される。
【００２４】
交代パス管理設定プログラム２０２は、交代パス管理プログラム２０３のパラメータ等を設定するプログラムである。
【００２５】
交代パス管理プログラム２０３は、本発明の負荷分散を実現するプログラムである。交代パス管理プログラム２０３は、後述するアルゴリズムによって各ＬＵ１０９に対するアクセスパスを設定する。アプリケーションプログラム２０１から要求されたデータアクセス（Ｉ／Ｏ）は、交代パス管理プログラム２０３によって設定されたパスを経由して実行される。
【００２６】
交代パス管理プログラム２０３には、負荷測定サブプログラム２０４、アクティブパス設定サブプログラム２０５及びレポートサブプログラム２０９が含まれる。
【００２７】
レポートサブプログラム２０９は、アクティブパスの設定に関する情報及び各パスの負荷の状態に関する情報等を、入出力装置１０４に出力する。レポートサブプログラム２０９は、少なくとも、アクティブパスが再設定されたときには、これらの情報を出力する。
【００２８】
なお、アクティブパスについては、図３において説明する。
【００２９】
アクティブパス設定サブプログラム２０５には、さらに、初期アクティブパス設定サブプログラム２０６、アクティブパス再設定サブプログラムＡ２０７及びアクティブパス再設定サブプログラムＢ２０８が含まれる。
【００３０】
これらのサブプログラムについては、後で詳細に説明する。
【００３１】
図３は、本発明の実施の形態のパステーブルの説明図である。
【００３２】
パステーブル３００は、メモリ１０３に格納されるテーブルであり、図１のコンピュータシステム（すなわち、ホスト１０１と、これに接続されたストレージ装置１０８）に存在する全てのパスの状態を示す情報を含む。パステーブル３００は、初期アクティブパス設定サブプログラム２０６によって作成され、負荷測定サブプログラム２０４、アクティブパス再設定サブプログラムＡ２０７及びアクティブパス再設定サブプログラムＢ２０８によって更新される。
【００３３】
パステーブル３００において、パス番号３０１は、全てのパスに一意に付与されたパスの番号である。
【００３４】
障害状態３０２は、パスに障害が発生しているか否かを示す。パスを構成するＨＢＡ１０５、ＣＨＡ１０７及びＬＵ１０９のいずれにも障害が発生していない場合、障害状態３０２の値は「Ｎｏ」となる。一方、これらのうちいずれかに障害が発生している場合、障害状態３０２の値は「Ｙｅｓ」となる。
【００３５】
アクティブ情報３０３は、パスがアクティブパスとして設定されているか否かを示す。パスがアクティブパスとして設定されている場合、アクティブ情報３０３の値は「Ｙｅｓ」となり、アクティブパスとして設定されていない場合、アクティブ情報３０３の値は「Ｎｏ」となる。
【００３６】
ここで、アクティブパスとは、ホスト１０１からＬＵ１０９へのアクセス（Ｉ／Ｏ）が経由するパスである。アクティブパスでないパスは、データアクセスに寄与しないスタンバイパスである。例えば、図３において、ホスト１０１とＬＵ１との間には、パス番号３０１が「１」のパスから「６」のパスまで、６本のアクセス可能なパスがある。しかし実際には、ホスト１０１は、アクティブパス（図３の例では、パス番号３０１が「１」のパス）のみを経由してＬＵ１にアクセスする。
【００３７】
アクティブパスは、初期アクティブパス設定サブプログラム２０６によって最初に作成される。その後、必要に応じて（例えば、アクティブパスに障害が発生した場合又は特定の部位に負荷が集中した場合）、アクティブパス再設定サブプログラムＡ２０７又はアクティブパス再設定サブプログラムＢ２０８によって、スタンバイパスの一つが新たなアクティブパスとして設定（再設定）され、元のアクティブパスがスタンバイパスとして設定される。アクティブパスの設定及び再設定については、後で詳細に説明する。
【００３８】
ＨＢＡ−ＩＤ３０４は、パスが経由するＨＢＡ１０５の識別子（ＨＢＡ−ＩＤ）である。
【００３９】
ＣＨＡ−ＩＤ３０５は、パスが経由するＣＨＡ１０７の識別子（ＣＨＡ−ＩＤ）である。
【００４０】
ＬＵ−ＩＤ３０６は、パスが到達するＬＵ１０９の識別子（ＬＵ−ＩＤ）である。
【００４１】
測定負荷３０７は、各パスについて実際に測定された負荷の量を示す。この負荷の量は、負荷測定サブプログラム２０４によって測定される所定時間当たりのアクセス（Ｉ／Ｏ）回数又はアクセスデータ量である（図１０参照）。
【００４２】
アクティブパス設定ＬＵ数３０８は、各パスをアクティブパスとして設定しているＬＵの数を示す。アクティブ情報３０３が「Ｙｅｓ」であるパスのアクティブパス設定ＬＵ数３０８は、「１」であり、アクティブ情報３０３が「Ｎｏ」であるパスのアクティブパス採用ＬＵ数３０８は、「０」である。
【００４３】
パステーブル３００の設定については、後で詳細に説明する。
【００４４】
図４は、本発明の実施の形態のＬＵテーブルの説明図である。
【００４５】
ＬＵテーブル４００は、メモリ１０３に格納されるテーブルであり、図１のホスト１０１に接続されたストレージ装置１０８に存在する全てのＬＵ１０９の状態を示す情報を含む。ＬＵテーブル４００は、初期アクティブパス設定サブプログラム２０６によって作成され、負荷測定サブプログラム２０４、アクティブパス再設定サブプログラムＡ２０７及びアクティブパス再設定サブプログラムＢ２０８によって更新される。
【００４６】
ＬＵテーブル４００において、ＬＵ−ＩＤ４０１は、各ＬＵを識別するＬＵ−ＩＤである。図４の例では、ＬＵ−ＩＤ４０１の値は、「１」から「４」までとなる。
【００４７】
測定負荷４０２は、各ＬＵについて実際に測定された負荷の量を示す。各ＬＵの測定負荷４０２の値は、パステーブル３００の測定負荷３０７の値を、該当するＬＵ−ＩＤ３０６について合計した値である。例えば、ＬＵ−ＩＤ４０１が「１」であるＬＵ１０９（すなわち、ＬＵ１）の測定負荷４０２は、パステーブル３００のＬＵ−ＩＤ３０６が「１」であるパスの測定負荷３０７の合計値（図３及び図４の例では、「５０」）である。
【００４８】
現アクティブパスのパスＩＤ４０３は、各ＬＵについて現在アクティブパスとして設定されているパスのパスＩＤを示す。すなわち、パステーブル３００において、アクティブパス設定ＬＵ数３０８が「１」であるパスのパスＩＤである。
【００４９】
新アクティブパスのパスＩＤ４０４は、各ＬＵについて次にアクティブパスとして設定されるパスのパスＩＤを示す。次にアクティブパスとして設定されるパスが未定である場合、新アクティブパスのパスＩＤ４０４の値は、「−１」となる。
【００５０】
ＬＵテーブル４００の設定については、後で詳細に説明する。
【００５１】
図５は、本発明の実施の形態のＨＢＡテーブルの説明図である。
【００５２】
ＨＢＡテーブル５００は、メモリ１０３に格納されるテーブルであり、図１のホスト１０１に存在する全てのＨＢＡ１０５の状態を示す情報を含む。ＨＢＡテーブル５００は、初期アクティブパス設定サブプログラム２０６によって作成され、負荷測定サブプログラム２０４、アクティブパス再設定サブプログラムＡ２０７及びアクティブパス再設定サブプログラムＢ２０８によって更新される。
【００５３】
ＨＢＡテーブル５００において、ＨＢＡ−ＩＤ５０１は、各ＨＢＡを識別するＨＢＡ−ＩＤである。図５の例では、ＨＢＡ−ＩＤ５０１の値は、「１」から「２」までとなる。
【００５４】
測定負荷５０２は、各ＨＢＡについて実際に測定された負荷の量を示す。各ＨＢＡの測定負荷５０２の値は、パステーブル３００の測定負荷３０７の値を、該当するＨＢＡ−ＩＤ３０４について合計した値である。例えば、ＨＢＡ−ＩＤ５０１が「１」であるＨＢＡ１０５（すなわち、ＨＢＡ１）の測定負荷５０２は、パステーブル３００のＨＢＡ−ＩＤ３０４が「１」であるパスの測定負荷３０７の合計値（図３及び図５の例では、「６０」）である。
【００５５】
割当済み負荷５０３には、アクティブパスを再設定する際に、各ＨＢＡ１０５に既に割り当てられたアクティブパスの負荷の値が格納される。
【００５６】
アクティブパス設定ＬＵ数５０４は、各ＨＢＡ１０５をアクティブパスとして設定しているＬＵ１０９の数を示す。各ＨＢＡ１０５のアクティブパス設定ＬＵ数５０４の値は、パステーブル３００のアクティブパス設定ＬＵ数３０８の値を、該当するＨＢＡ−ＩＤ３０４について合計した値である。例えば、ＨＢＡ−ＩＤ５０１が「１」であるＨＢＡ１０５（すなわち、ＨＢＡ１）のアクティブパス設定ＬＵ数５０４は、パステーブル３００のＨＢＡ−ＩＤ３０４が「１」であるパスのアクティブパス設定ＬＵ数３０８の合計値（図３及び図５の例では、「２」）である。
【００５７】
ＨＢＡテーブル５００の設定については、後で詳細に説明する。
【００５８】
図６は、本発明の実施の形態のＣＨＡテーブルの説明図である。
【００５９】
ＣＨＡテーブル６００は、メモリ１０３に格納されるテーブルであり、図１のホスト１０１に接続されたストレージ装置１０８に存在する全てのＣＨＡ１０７の状態を示す情報を含む。ＣＨＡテーブル６００は、初期アクティブパス設定サブプログラム２０６によって作成され、負荷測定サブプログラム２０４、アクティブパス再設定サブプログラムＡ２０７及びアクティブパス再設定サブプログラムＢ２０８によって更新される。
【００６０】
ＣＨＡテーブル６００において、ＣＨＡ−ＩＤ６０１は、各ＣＨＡを識別するＣＨＡ−ＩＤである。図６の例では、ＣＨＡ−ＩＤ６０１の値は、「１」から「３」までとなる。
【００６１】
測定負荷６０２は、各ＣＨＡについて実際に測定された負荷の量を示す。各ＣＨＡの測定負荷６０２の値は、パステーブル３００の測定負荷３０７の値を、該当するＣＨＡ−ＩＤ３０５について合計した値である。例えば、ＣＨＡ−ＩＤ６０１が「１」であるＣＨＡ１０７（すなわち、ＣＨＡ１）の測定負荷６０２は、パステーブル３００のＣＨＡ−ＩＤ３０５が「１」であるパスの測定負荷３０７の合計値（図３及び図６の例では、「１１０」）である。
【００６２】
割当済み負荷６０３には、アクティブパスを再設定する際に、各ＣＨＡ１０７に既に割り当てられたアクティブパスの負荷の値が格納される。
【００６３】
アクティブパス設定ＬＵ数６０４は、各ＣＨＡ１０７をアクティブパスとして設定しているＬＵ１０９の数を示す。各ＣＨＡ１０７のアクティブパス設定ＬＵ数６０４の値は、パステーブル３００のアクティブパス設定ＬＵ数３０８の値を、該当するＣＨＡ−ＩＤ３０５について合計した値である。例えば、ＣＨＡ−ＩＤ６０１が「１」であるＣＨＡ１０７（すなわち、ＣＨＡ１）のアクティブパス設定ＬＵ数６０４は、パステーブル３００のＣＨＡ−ＩＤ３０５が「１」であるパスのアクティブパス設定ＬＵ数３０８の合計値（図３及び図６の例では、「２」）である。
【００６４】
ＣＨＡテーブル６００の設定については、後で詳細に説明する。
【００６５】
なお、ＬＵテーブル４００、ＨＢＡテーブル５００及びＣＨＡテーブル６００は、次のような方法で作成することができる。
【００６６】
例えば、ホスト１０１のＨＢＡ１０５がＬＵ１０９を検出し、その検出されたＬＵ１０９に関する情報をホスト１０１のオペレーティングシステム（ＯＳ）がＨＢＡ１０５から取得してもよい。ホスト１０１は、検出されたＬＵ１０９に対してＳＣＳＩのコマンドを使用することによって、パスに関する情報（例えば、どのＨＢＡ１０５及びＣＨＡ１０７を経由するかを示す情報等）を取得することができる。ホスト１０１は、この情報に基づいて、使用可能なＬＵ１０９、ＨＢＡ１０５及びＣＨＡ１０７を把握し、ＬＵテーブル４００、ＨＢＡテーブル５００及びＣＨＡテーブル６００を作成することができる。以上のように、ホスト１０１は、使用可能なＬＵ１０９及びＣＨＡ１０７を検出することができる。
【００６７】
複数のホスト１０１が同一のＬＵ１０９及びＣＨＡ１０７を検出することができる場合、これらの複数のホスト１０１は、検出された同一のＬＵ１０９及びＣＨＡ１０７を共有する。
【００６８】
一方、ＳＡＮ１０６のファイバーチャネルスイッチ（図示省略）のゾーニング又はストレージ装置１０８のＬＵＮマスキング等の機能によって、ホスト１０１のＯＳが検出することができないＬＵ１０９を設定することもできる。したがって、これらの機能によって、複数のホスト１０１がそれぞれ別のＬＵ１０９を使用するように設定することもできる。
【００６９】
図７は、本発明の実施の形態の交代パス管理プログラム２０３のフローチャートである。
【００７０】
ホスト１０１が起動することによって交代パス管理プログラム２０３の実行が開始すると（７０１）、最初に、初期アクティブパスを設定する（７０２）。具体的には、交代パス管理プログラム２０３によって呼び出された初期アクティブパス設定サブプログラム２０６が、初期アクティブパスを設定する（図８〜図９参照）。
【００７１】
次に、測定負荷種別及び測定期間が設定される（７０３）。測定負荷種別とは、負荷測定サブプログラム２０４が測定する対象であり、ホスト１０１のユーザによって、「Ｉ／Ｏ数」又は「Ｉ／Ｏデータ量」のいずれかが設定される。測定期間とは、負荷測定サブプログラム２０４が、設定された測定対象を測定する期間であり、ホスト１０１のユーザによって、任意の期間が設定される。この設定は、交代パス管理設定プログラム２０２によって実行される。
【００７２】
次に、ステップ７０３の設定に従って負荷を測定する（７０４）。具体的には、交代パス管理プログラム２０３によって呼び出された負荷測定サブプログラム２０４が、ステップ７０３の設定に従って負荷を測定する（図１０参照）。なお、Ｉ／Ｏ（すなわち、データアクセス）が発生するたびに、負荷測定サブプログラム２０４が負荷を測定する。
【００７３】
次に、ホスト１０１がシャットダウンされるか否かを判定する（７０５）。具体的には、ホスト１０１のユーザがホスト１０１をシャットダウンするコマンドを発行したか否かを判定する。ホスト１０１がシャットダウンされる場合は、交代パス管理プログラム２０３を終了する（７０６）。
【００７４】
一方、ホスト１０１がシャットダウンされない場合は、次に、パス数に変動があったか否かを判定する（７０７）。ここで、パス数に変動があった場合とは、ＨＢＡ１０５、ＣＨＡ１０７若しくはＬＵ１０９に障害が発生して一つ以上のパスが使用できなくなった場合、ＨＢＡ１０５、ＣＨＡ１０７若しくはＬＵ１０９に発生していた障害が復旧した場合、又は、ＨＢＡ１０５、ＣＨＡ１０７若しくはＬＵ１０９が新たに追加された場合等である。パス数に変動があった場合は、アクティブパスを再設定する（７０８）。具体的には、交代パス管理プログラム２０３によって呼び出されたアクティブパス再設定サブプログラムＡ２０７が、アクティブパスを再設定する（図１１〜図１２参照）。
【００７５】
一方、パス数に変動がない場合は、アクティブパスを再設定するタイミングであるか否かを判定する（７０９）。ホスト１０１のユーザは、予め、アクティブパスを再設定する間隔（例えば、１時間、１日、１週間、１ヶ月又は１年）を設定することができる。ユーザが「１時間」と設定した場合、ステップ７０９において、前回アクティブパスが再設定（又は初期設定）されてから１時間経過したか否かを判定する。１時間経過している場合は、アクティブパスを再設定するタイミングであるため、アクティブパスを再設定する（７１０）。具体的には、交代パス管理プログラム２０３によって呼び出されたアクティブパス再設定サブプログラムＢ２０８が、アクティブパスを再設定する（図１３〜図１６参照）。
【００７６】
なお、アクティブパスの再設定は、上記のように所定の間隔で実行するだけでなく、ホスト１０１のユーザからの要求を受けて実行してもよい。この場合、ステップ７０９において、ユーザがアクティブパス再設定要求を発行したか否かを判定し、再設定要求が発行されている場合は、アクティブパスを再設定するタイミングであるため、ステップ７１０に進む。
【００７７】
一方、上記の所定の間隔が経過しておらず、かつ、ユーザからの再設定要求も発行されていない場合は、アクティブパスを再設定するタイミングでないため、ステップ７０４に戻る。
【００７８】
一方、アクティブパス再設定サブプログラムＡ２０７又はアクティブパス再設定サブプログラムＢ２０８が実行された場合は、その後、レポートを出力する（７１１）。具体的には、レポートサブプログラム２０９が、再設定されたアクティブパスに関する情報をホスト１０１の入出力装置１０４に表示する。レポートを出力した後、ステップ７０４に戻る。
【００７９】
図８は、本発明の実施の形態の初期アクティブパス設定サブプログラム２０６のフローチャートである。
【００８０】
図７のステップ７０２において呼び出されることによって、初期アクティブパス設定サブプログラム２０６の実行が開始する（８０１）。このとき、交代パス管理プログラム２０３は、ホスト１０１からアクセス可能な全てのＬＵ１０９（すなわち、ＬＵ１〜ＬＵ４）を認識している。
【００８１】
最初に、初期アクティブパス設定サブプログラム２０６は、パステーブル３００を作成する（８０２）。この時点では、パステーブル３００の値は全て初期値である。すなわち、障害状態３０２及びアクティブ情報３０３の値は全て「Ｎｏ」であり、測定負荷３０７及びアクティブパス設定ＬＵ数３００の値は全て「０」である。
【００８２】
次に、初期アクティブパス設定サブプログラム２０６は、ＬＵテーブル４００、ＨＢＡテーブル５００及びＣＨＡテーブル６００を作成する（８０３）。この時点では、各テーブルの値は全て初期値である。すなわち、測定負荷４０２、５０２、６０２、割当済み負荷５０３、６０３、アクティブパス設定ＬＵ数５０４及び６０４の値は、全て「０」である。また、現アクティブパスのパスＩＤ４０３及び新アクティブパスのパスＩＤ４０４の値は、未定である。
【００８３】
次に、全ＬＵ１０９のアクティブパスが決定したか否かを判定する（８０４）。
【００８４】
全ＬＵ１０９のアクティブパスが決定していない場合は、未処理かつＬＵ−ＩＤが最も小さい値のＬＵ１０９（ＬＵｍ、「ｍ」はＬＵ−ＩＤ）を選択する（８０５）。
【００８５】
次に、ＬＵｍへのパスのうち、未処理のパスがあるか否かを判定する（８０６）。未処理のパスがない場合は、その時点のＬＵｍのアクティブパス候補がアクティブパスに決定したので、そのＬＵｍを処理済みとして（８１５）、次のＬＵ１０９のアクティブパスを決定するために、ステップ８０４に戻る。
【００８６】
一方、未処理のパスがある場合は、ＬＵｍのアクティブパスが決定していないため、これを決定するために、ＬＵｍへのパスのうち、未処理かつ最もパスＩＤが小さいパスＡを選択する（８０７）。
【００８７】
次に、パスＡがそのＬＵｍについて最初に選択されたパスであるか否かを判定する（８０８）。最初に選択されたパスである場合は、そのパスＡをＬＵｍのアクティブパス候補として設定するために、ステップ８１２に進む。
【００８８】
一方、パスＡがそのＬＵｍについて最初に選択されたパスでない場合は、パスＡをアクティブパス候補として設定するか否かを判定するために、値αが値Ｂより大きいか否かを判定する（８０９）。ここで、値αは、その時点のアクティブパス候補のＨＢＡ１０５のアクティブパス採用ＬＵ数５０４と、その時点のアクティブパス候補のＣＨＡ１０７のアクティブパス採用ＬＵ数６０４との合計値である。値Ｂは、パスＡのＨＢＡ１０５のアクティブパス採用ＬＵ数５０４と、パスＡのＣＨＡ１０７のアクティブパス採用ＬＵ数６０４との合計値である。
【００８９】
その結果、値αが値Ｂより大きくない場合は、パスＡはＬＵｍのアクティブパス候補とはならないため、パスＡをスタンバイパスに設定し（８１０）、ステップ８０６に戻る。具体的には、ステップ８１０において、パステーブル３００のパスＡに対応するアクティブ情報３０３を「Ｎｏ」とする。
【００９０】
一方、値αが値Ｂより大きい場合は、パスＡをＬＵｍのアクティブパス候補とするため、まず、現時点でのＬＵｍのアクティブパス候補をスタンバイパスにする（８１１）。具体的には、パステーブル３００において、そのパスに対応するアクティブ情報３０３を「Ｎｏ」とする。さらに、パステーブル３００において、そのパスに対応するアクティブパス設定ＬＵ数３０８を１減少させる。さらに、そのパスに対応するＨＢＡ１０５について、ＨＢＡテーブル５００のアクティブパス設定ＬＵ数５０４を１減少させる。さらに、そのパスに対応するＣＨＡ１０７について、ＣＨＡテーブル６００のアクティブパス設定ＬＵ数６０４を１減少させる。
【００９１】
次に、パスＡをＬＵｍのアクティブパス候補として設定する（８１２）。具体的には、パステーブル３００において、パスＡに対応するアクティブ情報３０３を「Ｙｅｓ」とする。さらに、パステーブル３００において、パスＡに対応するアクティブパス設定ＬＵ数３０８を１増加させる。さらに、パスＡに対応するＨＢＡ１０５について、ＨＢＡテーブル５００のアクティブパス設定ＬＵ数５０４を１増加させる。さらに、パスＡに対応するＣＨＡ１０７について、ＣＨＡテーブル６００のアクティブパス設定ＬＵ数６０４を１増加させる。さらに、ＬＵテーブル４００において、ＬＵｍに対応する新アクティブパスのパスＩＤ４０４の値を、パスＡのパスＩＤの値に設定する。
【００９２】
その後、次のパスについて処理するため、ステップ８０６に戻る。
【００９３】
一方、ステップ８０４において、全ＬＵ１０９のアクティブパスが決定した場合は、決定したアクティブパスを実際に運用するため、ＬＵテーブル４００の新アクティブパスのパスＩＤ４０４の値を、現アクティブパスのパスＩＤ４０３に複写する（８１３）。その結果、交代パス管理プログラム２０３は、新しいアクティブパスの運用を開始する。すなわち、交代パス管理プログラム２０３は、アプリケーションプログラム２０１から要求されたデータアクセス（Ｉ／Ｏ）を、新しいアクティブパスに割り当てる。
【００９４】
以上で、初期アクティブパス設定サブプログラムの実行が終了する。
【００９５】
図９は、本発明の実施の形態の設定されたアクティブパスを示すブロック図である。
【００９６】
図９は、例として、図１において初期アクティブパス設定サブプログラム２０６（図８）を実行した結果を示す。
【００９７】
図９において、設定されたアクティブパスのパスＩＤは、それぞれ、「１１１」、「２２２」、「１３３」及び「２１４」である。すなわち、ＬＵ１へのアクティブパス９０２ａは、ＨＢＡ１及びＣＨＡ１を経由する。ＬＵ２へのアクティブパス９０２ｂは、ＨＢＡ２及びＣＨＡ２を経由する。ＬＵ３へのアクティブパス９０２ｃは、ＨＢＡ１及びＣＨＡ３を経由する。ＬＵ４へのアクティブパス９０２ｄは、ＨＢＡ２及びＣＨＡ１を経由する。
【００９８】
なお、図９において、測定負荷９０１は、負荷測定サブプログラム２０４によって測定された負荷の例である。これについては、図１０以降で詳細に説明する。
【００９９】
図１０は、本発明の実施の形態の負荷測定サブプログラム２０４のフローチャートである。
【０１００】
図７のステップ７０４において呼び出されることによって、負荷測定サブプログラム２０４の実行が開始する（１００１）。
【０１０１】
最初に、負荷測定サブプログラム２０４は、ホスト１０１からいずれかのＬＵ１０９へのデータアクセス（Ｉ／Ｏ）を、そのＬＵ１０９について設定されたアクティブパスＡに割り当てる（１００２）。
【０１０２】
次に、測定負荷種別を判定する（１００３）。この測定負荷種別は、図７のステップ７０３において設定されたものである。
【０１０３】
測定負荷種別として「Ｉ／Ｏ数」が設定されていると判定した場合は、アクティブパスＡについて発行されたデータＩ／Ｏの回数を測定する（１００４）。
【０１０４】
一方、測定負荷種別として「Ｉ／Ｏデータ量」が設定されていると判定した場合は、アクティブパスＡについて発行されたデータＩ／Ｏのデータ量を測定する（１００５）。
【０１０５】
次に、各テーブルの値を更新する（１００６）。すなわち、パステーブル３００のアクティブパスＡに該当する測定負荷３０７の値に、ステップ１００４又は１００５において測定された値を加算する。さらに、ＬＵテーブル４００、ＨＢＡテーブル５００及びＣＨＡテーブル６００において、アクティブパスＡに含まれるＬＵ、ＨＢＡ及びＣＨＡの測定負荷４０２、５０２及び６０２の値に、ステップ１００４又は１００５において測定された値を加算する。
【０１０６】
以上で、負荷測定サブプログラム２０４の実行が終了する（１００７）。負荷測定サブプログラム２０４によって測定された値の例を、図９の測定負荷９０１に示す。
【０１０７】
なお、図３から図６に示す各テーブルの値は、図９の測定負荷９０１が測定された時点の値である。
【０１０８】
図１１は、本発明の実施の形態のアクティブパス再設定サブプログラムＡ２０７のフローチャートである。
【０１０９】
図１のコンピュータシステムにおいて、パスの数が変動したときに、図７のステップ７０８において呼び出されることによって、アクティブパス再設定サブプログラムＡ２０７の実行が開始する（１１０１）。ここで、パスの数が変動したときとは、アクティブパスに含まれるＨＢＡ１０５又はＣＨＡ１０７に障害が発生したとき、新たなＬＵ１０９が追加されたとき、又は、障害が発生していたＨＢＡ１０５又はＣＨＡ１０７が復帰したとき等である。
【０１１０】
最初に、本発明の実施の形態のアクティブパス再設定サブプログラムＡ２０７は、該当するＬＵｍに至る全てのパスの測定負荷を算出する（１１０２）。ただし、ステップ１１０２において、該当するＬＵｍとは、アクティブパスに障害が発生した場合は、そのアクティブパスに関するＬＵ１０９である。また、新たなＬＵ１０９が追加された場合は、その追加されたＬＵ１０９である。また、ＨＢＡ１０５又はＣＨＡ１０７が障害から復帰した場合は、そのＨＢＡ１０５又はＣＨＡ１０７を経由してアクセス可能なＬＵ１０９である。また、ステップ１１０２において、該当するＬＵｍに至る全てのパスの測定負荷とは、各パスに含まれるＨＢＡ１０５及びＣＨＡ１０７の測定負荷５０２及び６０２の値をパスごとに合計した値である。ただし、障害が発生したアクティブパスについて測定された値は含まない。
【０１１１】
次に、ステップ１１０２で算出された測定負荷の値を比較し、測定負荷の値が最小になるパスが複数存在するか否かを判定する（１１０３）。測定負荷の値が最小になるパスが複数存在しない場合は、測定負荷の値が最小になるパスをアクティブパスとして設定する（１１０７）。
【０１１２】
一方、ステップ１１０２で算出された測定負荷の値が最小になるパスが複数存在する場合は、それらのパスについて、値αを算出する（１１０４）。ここで、値αは、各パスに関するＨＢＡテーブル５００及びＣＨＡテーブル６００のアクティブパス設定ＬＵ数５０４及び６０４を合計した値である。
【０１１３】
次に、各パスについて算出された値αを比較して、値αが最小になるパスが複数存在するか否かを判定する（１１０５）。値αが最小になるパスが複数存在しない場合は、値αが最小になるパスをアクティブパスとして設定する（１１０７）。
【０１１４】
一方、値αが最小になるパスが複数存在する場合は、それらのパスのうち、パスＩＤの値が最小になるパスをアクティブパスとして設定する（１１０６）。
【０１１５】
次に、各テーブルの値を更新する（１１０８）。すなわち、パステーブル３００において、アクティブパスに設定されたパスのアクティブ情報３０３を「Ｙｅｓ」に変更する。さらに、ＬＵテーブル４００において、該当するＬＵｍの新アクティブパスのパスＩＤ４０４の値を、アクティブパスに設定されたパスのパスＩＤの値に変更する。
【０１１６】
このようにして、該当するＬＵｍのアクティブパスが再設定される。
【０１１７】
次に、全ての該当するＬＵｍについて、アクティブパスが再設定されたか否かを判定する（１１０９）。その結果、全ての該当するＬＵｍについてアクティブパスが再設定されていない（すなわち、アクティブパスが再設定されていないＬＵｍが存在する）と判定された場合は、次のＬＵｍについてアクティブパスを再設定するために、ステップ１１０２に戻る。
【０１１８】
一方、全ての該当するＬＵｍについてアクティブパスが再設定されたと判定された場合は、再設定されたアクティブパスの運用を開始するため、ＬＵテーブル４００の新アクティブパスのパスＩＤ４０４の値を、現アクティブパスのパスＩＤ４０３に複写する（１１１０）。
【０１１９】
以上で、アクティブパス再設定サブプログラムＡ２０７の実行が終了する（１１１１）。
【０１２０】
図１２は、本発明の実施の形態の再設定されたアクティブパスの例を示すブロック図である。
【０１２１】
図１２は、例として、図９においてＣＨＡ３に障害が発生した場合に、アクティブパス再設定サブプログラムＡ２０７（図１１）によって再設定されたアクティブパスを示す。この例において、障害が発生したアクティブパスは、ＨＢＡ１及びＣＨＡ３を経由してＬＵ３に至るパスであり、そのパスの測定負荷の値は「１０」である。
【０１２２】
図９においてＣＨＡ３に障害が発生した場合、ステップ１１０２の「該当するＬＵｍ」は、ＣＨＡ３を含むアクティブパスに関するＬＵｍ、すなわち、ＬＵ３である。
【０１２３】
このため、ＬＵ３に至る全てのパスについて、現時点の測定負荷を比較する（１１０２）。ＬＵ３に至るパスは、パステーブル３００に示すパス番号が「１３」から「１８」までの６本である。これらのうち、障害が発生したＣＨＡ３に関するパス（パス番号が「１５」及び「１８」のパス）は使用できないため、残りの４本のパスについて、測定負荷を比較する。
【０１２４】
パス番号が「１３」のパスは、ＨＢＡ１及びＣＨＡ１を経由してＬＵ３に至るパスである。ＨＢＡテーブル５００において、ＨＢＡ１の測定負荷の値は「６０」である。ここで、障害が発生したアクティブパスはＨＢＡ１を経由する。このため、ＨＢＡ１の測定負荷の値から、障害が発生したアクティブパスの測定負荷の値を除いた値「５０」を算出する。一方、ＣＨＡテーブルにおいて、ＣＨＡ１の測定負荷の値は「１１０」である。以上から、パス番号が「１３」のパスの現時点の測定負荷は、「５０」と「１１０」の合計値「１６０」である。
【０１２５】
同様に、パス番号が「１４」、「１６」及び「１７」のパスの現時点の測定負荷は、それぞれ、「７０」、「１９０」及び「１００」である。これらの値を比較すると（１１０２）、測定負荷の値が最小値「７０」であるパスは、パス番号が「１４」のパスのみである。すなわち、測定負荷の値が最小になるパスが複数存在しないため（１１０３）、パス番号が「１４」のパスをアクティブパスとして設定する（１１０７）。
【０１２６】
その結果、図１２に示すように、ＨＢＡ１及びＣＨＡ２を経由するパス１２０２ｃがＬＵ３に至るアクティブパスとして再設定される。
【０１２７】
図１３は、本発明の実施の形態のアクティブパス再設定サブプログラムＢ２０８のフローチャートである。
【０１２８】
図１のコンピュータシステムにおいて、アクティブパスを再設定するタイミングが到来したときに、図７のステップ７１０において呼び出されることによって、アクティブパス再設定サブプログラムＢ２０８の実行が開始する（１３０１）。ここで、アクティブパスを再設定するタイミングが到来したときとは、予め設定されたアクティブパス再設定間隔（例えば、１時間）が経過したとき、又は、ホスト１０１のユーザがアクティブパス再設定要求を発行したとき等である。
【０１２９】
最初に、アクティブパス再設定サブプログラムＢ２０８は、アクティブパスの負荷が適度に分散しているか否かを判定する。具体的には、全てのＨＢＡ１０５及びＣＨＡ１０７の測定負荷の最小値と最大値を比較し、最小値が最大値の９０％以上であるか否かを判定する（１３０２）。その結果、最小値が最大値の９０％以上である場合は、アクティブパスの負荷が適度に分散しているため、アクティブパスを再設定せずに、ステップ１３１６に進む。
【０１３０】
一方、最小値が最大値の９０％以上でない場合は、負荷に偏りがあるため、アクティブパスを再設定して負荷を分散させるために、ステップ１３０３に進む。
【０１３１】
なお、図１３の例では、負荷が適度に分散されているか否かを判定する閾値として、「測定負荷の最大値の９０％」を設定したが、ユーザは、他の閾値（例えば、最大値の５０％）を設定してもよい。
【０１３２】
次に、全てのＬＵ１０９について、アクティブパスを変更するか否かの決定が終了したか否かを判定する（１３０３）。終了したと判定された場合は、アクティブパスを変更するＬＵ１０９について、アクティブパスを決定するために、ステップ１３０９に進む。
【０１３３】
一方、全てのＬＵ１０９について、アクティブパスを変更するか否かの決定が終了していない場合は、これを終了させるために、ステップ１３０４に進む。すなわち、アクティブパスを変更するか否かが決定していないＬＵ１０９の測定負荷の値を比較し、その値が最も大きいＬＵ１０９（ＬＵｍ、「ｍ」はＬＵ−ＩＤ）を選択する（１３０４）。
【０１３４】
次に、ＬＵｍに至る現アクティブパスに障害が発生しているか否かを判定する（１３０５）。
【０１３５】
ステップ１３０５において、ＬＵｍに至る現アクティブパスに障害が発生していないと判定された場合は、次に、ＬＵｍの現アクティブパスが他のＬＵ１０９の新アクティブパスとして使用されているか否かを判定する（１３０６）。具体的には、ＬＵｍの現アクティブパスに関するＨＢＡ１０５又はＣＨＡ１０７のいずれかが他のＬＵ１０９の新アクティブパスに含まれるか否かを判定する。
【０１３６】
ステップ１３０６において、ＬＵｍの現アクティブパスに関するＨＢＡ１０５及びＣＨＡ１０７のいずれも他のＬＵ１０９の新アクティブパスに含まれないと判定された場合は、ＬＵｍのアクティブパスを変更しないことを決定する（１３０８）。すなわち、ＬＵテーブル４００のＬＵｍに対応する新アクティブパスのパスＩＤ４０４の値を、現アクティブパスのパスＩＤ４０３と同一にする。さらに、ＨＢＡテーブル５００及びＣＨＡテーブル６００において、ＬＵｍに対応する割当済み負荷５０３及び６０３の値に、ＬＵｍの測定負荷の値（すなわち、パステーブル３００のＬＵｍに関するアクティブパスの測定負荷３０７の値）を加算する。さらに、ＨＢＡテーブル５００及びＣＨＡテーブル６００において、ＬＵｍに対応するアクティブパス設定ＬＵ数５０４及び６０４の値に「１」を加算する。その後、ステップ１３０３に戻る。
【０１３７】
一方、ステップ１３０５において、ＬＵｍに至る現アクティブパスに障害が発生していると判定された場合、及び、ステップ１３０６において、ＬＵｍの現アクティブパスに関するＨＢＡ１０５又はＣＨＡ１０７のいずれかが他のＬＵ１０９の新アクティブパスに含まれると判定された場合は、ＬＵｍのアクティブパスを変更することを決定して（１３０７）、ステップ１３０３に戻る。
【０１３８】
ステップ１３０３において、全てのＬＵ１０９について、アクティブパスを変更するか否かの決定が終了したと判定された場合は、全てのＬＵ１０９について、新アクティブパスが決定したか否かを判定する（１３０９）。全てのＬＵ１０９について新アクティブパスが決定したと判定された場合は、ステップ１３１５に進む。
【０１３９】
一方、全てのＬＵ１０９について新アクティブパスが決定していないと判定された場合は、新アクティブパスが決定していないＬＵ１０９の測定負荷の値を比較し、その値が最も大きいＬＵ１０９（ＬＵｍ）を選択する（１３１０）。
【０１４０】
次に、ＬＵｍに関して使用可能な（すなわち、障害が発生していない）パスが複数存在するか否かを判定する（１３１１）。
【０１４１】
使用可能なパスが一つしか存在しない場合は、そのパスを新アクティブパスに決定する（１３１２）。
【０１４２】
一方、使用可能なパスが複数存在する場合は、ＨＢＡテーブル５００及びＣＨＡテーブル６００において、ＬＵｍに対応する割当済み負荷５０３及び６０３の値を参照し、これらの値の合計値が最小となるパスを新アクティブパスに決定する（１３１３）。
【０１４３】
次に、ステップ１３１２又は１３１３で決定された新アクティブパスに関するＨＢＡ１０５及びＣＨＡ１０７について、ＨＢＡテーブル５００及びＣＨＡテーブル６００の割当済み負荷５０３及び６０３の値に、ＬＵｍの測定負荷の値を加算する。さらに、アクティブパス設定ＬＵ数５０４及び６０４の値に「１」を加算する。さらに、ＬＵテーブル４００のＬＵｍに対応する新アクティブパスのパスＩＤ４０４の値を、ステップ１３１２又は１３１３で決定された新アクティブパスのパスＩＤの値に変更する（１３１４）。その後、ステップ１３０９に戻る。
【０１４４】
ステップ１３０９において、全てのＬＵ１０９について新アクティブパスが決定したと判定された場合は、ＬＵテーブル４００の新アクティブパスのパスＩＤ４０４の値を、現アクティブパスのパスＩＤ４０３に複写する（１３１５）。その結果、新アクティブパスの運用が開始される。
【０１４５】
次に、パステーブル３００、ＬＵテーブル４００、ＨＢＡテーブル５００及びＣＨＡテーブル６００の測定負荷３０７、４０２、５０２及び６０２の値をクリアする（１３１６）。すなわち、これらの値を「０」にする。
【０１４６】
以上で、アクティブパス再設定サブプログラムＢ２０８の実行が終了する（１３１７）。
【０１４７】
図１４は、本発明の実施の形態の再設定されたアクティブパスの例を示すブロック図である。
【０１４８】
図１４は、例として、図９においてアクティブパス再設定サブプログラムＢ２０８（図１３）を実行することによって再設定されたアクティブパスを示す。この再設定の手順を、図４から図６、図９、図１３及び図１４を参照して説明する。なお、以下の説明において、ループによって同様の動作を繰り返す場合は、特に必要な場合を除いて、説明を省略する。
【０１４９】
図９において、アクティブパス再設定サブプログラムＢ２０８の実行が開始すると（１３０１）、最初に、アクティブパスの負荷が適度に分散しているか否かを判定する（１３０２）。例えば、図６において、ＣＨＡ１０７の測定負荷６０２の最大値「１１０」の９０％の値「９９」は、最小値「１０」よりずっと大きい。このことは、負荷が大きく偏って配分されていることを意味する。従って、アクティブパスを再設定して負荷を分散するために、ステップ１３０３に進む。
【０１５０】
この時点では、全てのＬＵ１０９について、アクティブパスを変更するか否かの決定が終了していないため（１３０３）、ステップ１３０４に進む。
【０１５１】
ステップ１３０４において、アクティブパスを変更するか否かが決定していないＬＵ１０９のうち、測定負荷の値が最も大きいＬＵ４を選択する。ＬＵ４に至る現アクティブパス９０２ｄに障害が発生していないため（１３０５）、ステップ１３０６に進む。
【０１５２】
ＬＵ４の前に新アクティブパスが決定しているＬＵ１０９はないため、ＬＵ４の現アクティブパス９０２ｄに含まれるＨＢＡ１０５及びＣＨＡ１０７のいずれも、他のＬＵ１０９の新アクティブパスに決定していない（１３０６）。したがって、ステップ１３０８に進む。
【０１５３】
ステップ１３０８において、ＬＵ４の現アクティブパス９０２ｄ（ＨＢＡ２及びＣＨＡ１を経由してＬＵ４に至るパス）を新アクティブパスに決定する。このとき、ＬＵテーブル４００のＬＵ４の新アクティブパスのパスＩＤの値を、「２１４」とする。さらに、ＨＢＡテーブル５００のＨＢＡ２の割当済み負荷５０３の値「０」（初期値）に「６０」（ＬＵ４の測定負荷）を加算して、「６０」とする。さらに、ＣＨＡテーブル６００のＣＨＡ１の割当済み負荷６０３の値「０」（初期値）に「６０」（ＬＵ４の測定負荷）を加算して、「６０」とする。
【０１５４】
次に、測定負荷が２番目に大きいＬＵ１を選択する（１３０４）。ＬＵ１の現アクティブパス９０１ａ（ＨＢＡ１及びＣＨＡ１を経由してＬＵ１に至るパス）のうち、ＣＨＡ１は、ＬＵ４の新アクティブパスとして決定している（１３０６）。このため、ＬＵ１のアクティブパスを変更することを決定する（１３０７）。
【０１５５】
ＬＵ２についても、同様にして、アクティブパスを変更することを決定する（１３０７）。
【０１５６】
ＬＵ３の現アクティブパス９０２ｃ（ＨＢＡ１及びＣＨＡ３を経由してＬＵ３に至るパス）は、既に決定しているＬＵ４の新アクティブパス９０２ｄ（ＨＢＡ２及びＣＨＡ１を経由してＬＵ４に至るパス）に含まれないため、変更しないことを決定する（１３０６、１３０８）。このとき、ＬＵテーブル４００のＬＵ３の新アクティブパスのパスＩＤの値を、「１３３」とする。さらに、ＨＢＡテーブル５００のＨＢＡ１の割当済み負荷５０３の値「０」（初期値）に「１０」（ＬＵ３の測定負荷）を加算して、「１０」とする。さらに、ＣＨＡテーブル６００のＣＨＡ３の割当済み負荷６０３の値「０」（初期値）に「１０」（ＬＵ３の測定負荷）を加算して、「１０」とする。
【０１５７】
次に、ステップ１３０９に進む。
【０１５８】
この時点では、ＬＵ１及びＬＵ２の新アクティブパスが決定していないため、これらのうち測定負荷の値が大きいＬＵ１を選択する（１３１０）。
【０１５９】
ＬＵ１に関して使用可能なパスが複数あるため（１３１１）、ステップ１３１３に進む。
【０１６０】
ステップ１３１３において、最初に、ＨＢＡテーブル５００を参照する。この時点で、ＨＢＡ１の割当済み負荷５０３の値は「１０」であり、ＨＢＡ２の割当済み負荷５０３の値は「６０」である。このため、割当済み負荷５０３の値が小さいＨＢＡ１をＬＵ１の新アクティブパスに決定する。
【０１６１】
次に、ＣＨＡテーブル６００を参照する。この時点で、ＣＨＡ１の割当済み負荷６０３の値は「６０」であり、ＣＨＡ２の割当済み負荷６０３の値は「０」であり、ＣＨＡ３の割当済み負荷６０３の値は「１０」（初期値）である。このため、割当済み負荷６０３の値が最も小さいＣＨＡ２をＬＵ１の新アクティブパスに決定する。
【０１６２】
次に、ステップ１３１４において、ＨＢＡテーブル５００のＨＢＡ１の割当済み負荷５０３の値「１０」に「５０」（ＬＵ１の測定負荷）を加算して、「６０」とする。さらに、ＣＨＡテーブル６００のＣＨＡ２の割当済み負荷６０３の値「０」に「５０」（ＬＵ１の測定負荷）を加算して、「５０」とする。
【０１６３】
次に、ＬＵ２を選択する（１３１０）。
【０１６４】
ステップ１３１３において、最初に、ＨＢＡテーブル５００を参照する。この時点で、ＨＢＡ１の割当済み負荷５０３の値は「６０」であり、ＨＢＡ２の割当済み負荷５０３の値は「６０」である。このように割当済み負荷５０３の値が同じである場合は、どちらを新アクティブパスに決定してもよい。本実施の形態では、ＨＢＡ−ＩＤの値が小さいＨＢＡ１をＬＵ２の新アクティブパスに決定する。
【０１６５】
次に、ＣＨＡテーブル６００を参照する。この時点で、ＣＨＡ１の割当済み負荷６０３の値は「６０」であり、ＣＨＡ２の割当済み負荷６０３の値は「５０」であり、ＣＨＡ３の割当済み負荷６０３の値は「１０」である。このため、割当済み負荷６０３の値が最も小さいＣＨＡ３をＬＵ１の新アクティブパスに決定する。
【０１６６】
次に、ステップ１３１４において、ＨＢＡテーブル５００のＨＢＡ１の割当済み負荷５０３の値「６０」に「２０」（ＬＵ２の測定負荷）を加算して、「８０」とする。さらに、ＣＨＡテーブル６００のＣＨＡ３の割当済み負荷６０３の値「１０」に「２０」（ＬＵ２の測定負荷）を加算して、「３０」とする。
【０１６７】
以上のようにして、各ＬＵ１０９の新アクティブパスが決定する。結局、図１４に示すように、ＬＵ１に至る新アクティブパス１４０２ａは、ＨＢＡ１及びＣＨＡ２を経由する。ＬＵ２に至る新アクティブパス１４０２ｂは、ＨＢＡ１及びＣＨＡ３を経由する。ＬＵ３に至る新アクティブパス９０２ｃは、ＨＢＡ１及びＣＨＡ３を経由する。ＬＵ４に至る新アクティブパス９０２ｄは、ＨＢＡ２及びＣＨＡ１を経由する。
【０１６８】
このとき、各ＣＨＡの割当済み負荷６０３の最大値は「６０」であり、最小値は「３０」である。一方、現アクティブパスに関するＣＨＡの測定負荷６０２の最大値は「１１０」であり、最小値は「１０」である。したがって、負荷の偏りが改善されていることがわかる。
【０１６９】
なお、以上の本発明の実施の形態において、アクティブパスは、ＨＢＡ１０５及びＣＨＡ１０７の負荷を分散するように、ＨＢＡ１０５及びＣＨＡ１０７を特定して設定される。しかし、アクティブパスは、ＨＢＡ１０５又はＣＨＡ１０７のいずれか一方のみの負荷を分散するように、ＨＢＡ１０５又はＣＨＡ１０７のいずれか一方のみを特定して設定されてもよい。例えば、重み付けをすることによって、ユーザがＨＢＡ１０５又はＣＨＡ１０７のいずれの負荷を優先して分散するか選択できるようにしてもよい。
【０１７０】
例えば、ＣＨＡ１０７のみを指定してアクティブパスを設定する場合、図８のステップ８０９において、ＣＨＡテーブル６００のアクティブパス設定ＬＵ数６０４の値のみを比較して、初期アクティブパスを設定する。さらに、図１１のステップ１１０２及び１１０３において、ＣＨＡテーブル６００の測定負荷６０２のみを比較して、アクティブパスを再設定する。さらに、図１３のステップ１３１３において、ＣＨＡテーブル６００の割当済み負荷６０３のみを比較して、アクティブパスを再設定する。
【０１７１】
このようにして設定（又は再設定）されたアクティブパスは、ＣＨＡ１０７のみを特定し、ＨＢＡ１０５を特定しない。その結果、例えば、ＬＵ１に至るアクティブパスがＣＨＡ１に設定された場合、ホスト１０１は、任意のＨＢＡ１０５とＣＨＡ１とを経由してＬＵ１にアクセス（Ｉ／Ｏ）する。言い換えると、ＣＨＡ１を経由する複数のパスがＬＵ１に対するアクティブパスとして設定される。すなわち、ホスト１０１は、ＬＵ１にアクセスするときに、必ずＣＨＡ１を使用する。一方、ホスト１０１は、アクセス（Ｉ／Ｏ）ごとに異なるＨＢＡ１０５を使用することができる。例えば、ホスト１０１は、ＨＢＡ１０５については従来の負荷分散を適用してもよい。
【０１７２】
このようにアクティブパスを設定した場合にも、ＣＨＡ１０７がキャッシュメモリを備えていれば、キャッシュメモリが有効に利用され、データの先読み機能等によって性能が向上する。
【０１７３】
同様にして、ＨＢＡ１０５がキャッシュメモリを備えている場合には、ＨＢＡ１０５のみを特定してアクティブパスを設定してもよい。その結果、ＨＢＡ１０５のキャッシュメモリが有効に利用され、性能が向上する。
【０１７４】
以上の本発明によれば、各ＬＵ１０９についてアクティブパスが設定され、ホスト１０１は、アクティブパスを経由してＬＵ１０９にアクセスする。アクティブパスは、ホスト１０１からのアクセスの負荷が分散するように設定される。その結果、アクセスの集中による性能低下が改善される。
【０１７５】
さらに、アクティブパスが設定（又は再設定）された後、次に再設定されるまでの間、ホスト１０１は、一つのＬＵ１０９に、同一のパスを経由してアクセスする。すなわち、一回のアクセスごとにアクティブパスが変更されないため、アクティブパスに含まれるＣＨＡ１０７等のキャッシュメモリが有効に利用される。特に、シーケンシャルアクセスの際に、キャッシュメモリに格納された先読みデータが有効に利用される。その結果、性能が向上する。
【０１７６】
さらに、アクセス負荷に偏りが生じたときには、偏りを解消するために、アクティブパスが再設定されるため、常に良好な性能が維持される。
【０１７７】
さらに、アクティブパスを再設定する際には、負荷が大きいＬＵ１０９から順に再設定されるため、負荷が適切に分散される。
【図面の簡単な説明】
【０１７８】
【図１】本発明の実施の形態のコンピュータシステムの構成を示すブロック図である。
【図２】本発明の実施の形態のメモリに格納されるプログラムの説明図である。
【図３】本発明の実施の形態のパステーブルの説明図である。
【図４】本発明の実施の形態のＬＵテーブルの説明図である。
【図５】本発明の実施の形態のＨＢＡテーブルの説明図である。
【図６】本発明の実施の形態のＣＨＡテーブルの説明図である。
【図７】本発明の実施の形態の交代パス管理プログラムのフローチャートである。
【図８】本発明の実施の形態の初期アクティブパス設定サブプログラムのフローチャートである。
【図９】本発明の実施の形態の設定されたアクティブパスを示すブロック図である。
【図１０】本発明の実施の形態の負荷測定サブプログラムのフローチャートである。
【図１１】本発明の実施の形態のアクティブパス再設定サブプログラムＡのフローチャートである。
【図１２】本発明の実施の形態の再設定されたアクティブパスの例を示すブロック図である。
【図１３】本発明の実施の形態のアクティブパス再設定サブプログラムＢのフローチャートである。
【図１４】本発明の実施の形態の再設定されたアクティブパスの例を示すブロック図である。
【符号の説明】
【０１７９】
１０１  ホスト
１０２  ＣＰＵ
１０３  メモリ
１０４  入出力装置
１０５  ホストバスアダプタ（ＨＢＡ）
１０６  Storage Area Network（ＳＡＮ）
１０７  チャネルアダプタ（ＣＨＡ）
１０８  ストレージ装置
１０９  論理ユニット（ＬＵ）
２０１  アプリケーションプログラム
２０２  交代パス管理設定プログラム
２０３  交代パス管理プログラム
２０４  負荷測定サブプログラム
２０５  アクティブパス設定サブプログラム
２０６  初期アクティブパス設定サブプログラム
２０７  アクティブパス再設定サブプログラムＡ
２０８  アクティブパス再設定サブプログラムＢ
２０９  レポートサブプログラム
３００  パステーブル
４００  ＬＵテーブル
５００  ＨＢＡテーブル
６００  ＣＨＡテーブル
【図１】
2006040026.tif 000003
【図２】
2006040026.tif 000004
【図３】
2006040026.tif 000005
【図４】
2006040026.tif 000006
【図５】
2006040026.tif 000007
【図６】
2006040026.tif 000008
【図７】
2006040026.tif 000009
【図８】
2006040026.tif 000010
【図９】
2006040026.tif 000011
【図１０】
2006040026.tif 000012
【図１１】
2006040026.tif 000013
【図１２】
2006040026.tif 000014
【図１３】
2006040026.tif 000015
【図１４】
2006040026.tif 000016