(57)【要約】【課題】適切なタイミングで通信経路の切り替えを行うこと。【解決手段】ストレージ装置１０は、ストレージ制御装置１１，１２を有する。ストレージ制御装置１１は、データの入出力のコマンドの送信に用いられるポート１１ｃ，１１ｄを備える。ストレージ制御装置１２は、当該コマンドの送信に用いられるポート１２ｃ，１２ｄを備える。ストレージ装置２０は、ポート１１ｃ，１１ｄ，１２ｃ，１２ｄとの間で複数の通信経路を形成するポート２１ｃ，２１ｄ，２２ｃ，２２ｄを備える。ストレージ装置２０は、ストレージ制御装置１１から受信したコマンドに基づいてデータの入出力を実行する。ストレージ制御装置１１は、ストレージ装置２０へのコマンドの送信に現在使用中の第１の通信経路を介した入出力の処理状況に基づいて、ストレージ装置２０への次のコマンドの送信に使用するポートを、第２の通信経路に属するポートに切り替える。【選択図】図１
2019095971.tif 000002
【特許請求の範囲】
【請求項１】
データの入出力を指示するコマンドの送信に用いられる第１のポートを備え、情報処理装置から受信したアクセス要求に応じて前記コマンドを送信する第１のストレージ制御装置と、前記コマンドの送信に用いられる第２のポートを備える第２のストレージ制御装置とを有する第１のストレージ装置と、
前記第１および前記第２のポートとの間で複数の通信経路を形成する複数の第３のポートを備え、何れかの第３のポートを介して前記コマンドを受信し、前記コマンドに基づいて前記データの入出力を実行する第２のストレージ装置と、を有し、
前記第１のストレージ制御装置は、前記複数の通信経路のうち、前記第２のストレージ装置への前記コマンドの送信に現在使用中の第１の通信経路を介した入出力の処理状況に基づいて、前記第２のストレージ装置への次の前記コマンドの送信に使用するポートを、第２の通信経路に属するポートに切り替える、
ストレージシステム。
【請求項２】
前記第１のストレージ制御装置は、前記第１の通信経路を介して送信済である前記コマンドのうち、応答を未受信である前記コマンドの数が第１の閾値に達している場合に、前記第２のストレージ装置への次の前記コマンドの送信に使用するポートの切り替えを行い、前記数が前記第１の閾値に達していない場合に、前記切り替えを行わない、請求項１記載のストレージシステム。
【請求項３】
前記第１のストレージ制御装置は、前記数が前記第１の閾値に達していない場合でも、前記第１の通信経路を介した前記第２のストレージ装置に対する通信の応答時間が第２の閾値に達している場合には前記切り替えを行う、請求項２記載のストレージシステム。
【請求項４】
前記第１のストレージ制御装置は、前記応答時間と前記第２の閾値との比較結果に基づいて前記切り替えを行った場合、前記第１の通信経路を介して監視コマンドを前記第２のストレージ装置に送信して前記応答時間の監視を行い、前記応答時間が前記第２の閾値未満になると、前記第２のストレージ装置への前記コマンドの送信に使用するポートを、前記第１の通信経路に属するポートに戻す、請求項３記載のストレージシステム。
【請求項５】
前記第１のストレージ制御装置は、前記複数の通信経路のうち、前記第２のストレージ装置の論理ユニットへのアクセスのために推奨される通信経路を示す推奨パス情報を前記論理ユニット毎に前記第２のストレージ装置から取得し、前記推奨パス情報に基づいて、ポートの切り替え先を選択する際の前記複数の通信経路それぞれの優先度を前記論理ユニット毎に決定する、請求項１乃至４の何れか１項に記載のストレージシステム。
【請求項６】
前記第１のストレージ制御装置は、前記複数の通信経路のうち、前記第１のポートを介する通信経路の優先度を、前記第２のポートを介する通信経路の優先度よりも高くする、請求項５記載のストレージシステム。
【請求項７】
前記第２のストレージ装置は、第３のストレージ制御装置と前記論理ユニットに対する前記データの入出力を実行する第４のストレージ制御装置とを有し、
前記第１のストレージ制御装置は、前記複数の通信経路のうち、前記第１のストレージ制御装置から前記第４のストレージ制御装置までに経由するストレージ制御装置の数が少ないほど、優先度を高くする、請求項５または６記載のストレージシステム。
【請求項８】
自装置が属する第１のストレージ装置以外の第２のストレージ装置に対してデータの入出力を指示するコマンドの送信に用いられる第１のポートと、
前記第１のポートと前記第２のストレージ装置が備える複数の第３のポートとの間および前記第１のストレージ装置に属する他のストレージ制御装置が備える第２のポートと前記複数の第３のポートとの間の複数の通信経路のうち、前記第２のストレージ装置への前記コマンドの送信に現在使用中の第１の通信経路を介した入出力の処理状況に基づいて、前記第２のストレージ装置への次の前記コマンドの送信に使用するポートを、第２の通信経路に属するポートに切り替える処理部と、
を有するストレージ制御装置。
【請求項９】
自装置が属する第１のストレージ装置以外の第２のストレージ装置に対してデータの入出力を指示するコマンドの送信に用いられる第１のポートと前記第２のストレージ装置が備える複数の第３のポートとの間、および、前記第１のストレージ装置に属する他のストレージ制御装置が備える第２のポートと前記複数の第３のポートとの間の複数の通信経路を示す情報を取得し、
前記複数の通信経路のうち、前記第２のストレージ装置への前記コマンドの送信に現在使用中の第１の通信経路を介した入出力の処理状況に基づいて、前記第２のストレージ装置への次の前記コマンドの送信に使用するポートを、第２の通信経路に属するポートに切り替える、
処理をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はストレージシステム、ストレージ制御装置およびプログラムに関する。
【背景技術】
【０００２】
データの保存にストレージ装置が利用されている。ストレージ装置は、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）などの記憶デバイスを複数搭載可能であり、大容量の記憶領域を提供する。ストレージ装置は、例えば、記憶デバイスに対するデータの書き込みや読み出しのアクセス制御を行うストレージ制御装置を内蔵する。
【０００３】
例えば、ループ接続されたディスクに対してコマンドを発行するディスクコントローラと、発行されたコマンドをディスクに対して中継する中継装置とを備えるストレージ装置が提案されている。提案のストレージ装置では、中継装置が、ループに対するコマンドの発行数を監視し、監視結果に基づいて、ディスクコントローラによるコマンドの発行数を制御することで、中継装置が処理するコマンド数の偏りが出ないようにする。
【０００４】
また、コントロールユニットを２重化した記憶制御装置の提案もある。提案の記憶制御装置では、コントローラ間のパスを利用して、ホストからのＩＯ（Input/Output）要求を受領したコントローラが、他のコントロールユニットのイニシエータにＩＯ要求を発行する。そして、当該ＩＯ要求を受領したイニシエータが、ＩＯ要求に基づき、接続経路を介して目的とする記憶デバイスにアクセスする。これにより、コントロールユニットから記憶デバイスへのアクセスを交代パスに切り替える場合でも、ホストからのＩＯ要求を中断することなく、記憶デバイスへのＩＯアクセスを継続可能にする。
【０００５】
なお、他のストレージ仮想化装置との情報交換により各ストレージポート内の処理未完コマンド総数を管理するストレージ仮想化装置の提案がある。提案のストレージ仮想化装置は、アクセス対象ストレージポートに関する処理未完コマンド総数が規定数を超えていなかった場合、アクセス対象ストレージポートに対するコマンドの発行処理を含むアクセス要求応答処理をその完了を遅らせずに実行する。また、ストレージ仮想化装置は、処理未完コマンド総数が規定数を超えている場合には、アクセス要求応答処理をその完了を遅らせる形で実行する。これにより、ストレージポートのQueue Fullの発生を抑制する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−２１１４２８号公報
【特許文献２】特開２００７−２８０２５８号公報
【特許文献３】特開２０１４−１０４７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、あるストレージ装置に別のストレージ装置（外部ストレージ装置と称する）を直接または中継装置を介して接続することが考えられる。この場合、ストレージ装置は、ホスト装置から外部ストレージ装置に対するアクセス要求を受信し、当該アクセス要求に応じて、外部ストレージ装置に対するアクセスを実行し、アクセス結果をホスト装置に応答する。こうして、ホスト装置に提供する記憶領域を拡張し得る。
【０００８】
このとき、ストレージ装置から外部ストレージ装置への通信経路を複数用意し、通信経路を切り替えて、複数の通信経路にアクセスを分散することで、データアクセスの高速化を図ることが考えられる。しかし、ストレージ装置は、例えば、外部ストレージ装置が備える物理構成（ストレージ制御装置、ストレージ装置との通信用のポートおよび記憶デバイスなど）の動作状況を監視できない。このため、ストレージ装置側で、外部ストレージ装置の動作状態の変化を観測して通信経路の切り替えのタイミングを判断することは難しい。そこで、通信経路の切り替えのタイミングをストレージ装置側でどのように判断するかが問題となる。
【０００９】
１つの側面では、本発明は、適切なタイミングで通信経路の切り替えを行うことを目的とする。
【課題を解決するための手段】
【００１０】
１つの態様では、ストレージシステムが提供される。ストレージシステムは、第１のストレージ装置と第２のストレージ装置とを有する。第１のストレージ装置は、第１のストレージ制御装置と第２のストレージ制御装置とを有する。第１のストレージ制御装置は、データの入出力を指示するコマンドの送信に用いられる第１のポートを備え、情報処理装置から受信したアクセス要求に応じてコマンドを送信する。第２のストレージ制御装置は、コマンドの送信に用いられる第２のポートを備える。第２のストレージ装置は、第１および第２のポートとの間で複数の通信経路を形成する複数の第３のポートを備え、何れかの第３のポートを介してコマンドを受信し、コマンドに基づいてデータの入出力を実行する。第１のストレージ制御装置は、複数の通信経路のうち、第２のストレージ装置へのコマンドの送信に現在使用中の第１の通信経路を介した入出力の処理状況に基づいて、第２のストレージ装置への次のコマンドの送信に使用するポートを、第２の通信経路に属するポートに切り替える。
【００１１】
また、１つの態様では、ストレージ制御装置が提供される。ストレージ制御装置は、第１のポートと処理部とを有する。第１のポートは、自装置が属する第１のストレージ装置以外の第２のストレージ装置に対してデータの入出力を指示するコマンドの送信に用いられる。処理部は、第１のポートと第２のストレージ装置が備える複数の第３のポートとの間および第１のストレージ装置に属する他のストレージ制御装置が備える第２のポートと複数の第３のポートとの間の複数の通信経路のうち、第２のストレージ装置へのコマンドの送信に現在使用中の第１の通信経路を介した入出力の処理状況に基づいて、第２のストレージ装置への次のコマンドの送信に使用するポートを、第２の通信経路に属するポートに切り替える。
【００１２】
また、１つの態様では、プログラムが提供される。プログラムは、自装置が属する第１のストレージ装置以外の第２のストレージ装置に対してデータの入出力を指示するコマンドの送信に用いられる第１のポートと第２のストレージ装置が備える複数の第３のポートとの間、および、第１のストレージ装置に属する他のストレージ制御装置が備える第２のポートと複数の第３のポートとの間の複数の通信経路を示す情報を取得し、複数の通信経路のうち、第２のストレージ装置へのコマンドの送信に現在使用中の第１の通信経路を介した入出力の処理状況に基づいて、第２のストレージ装置への次のコマンドの送信に使用するポートを、第２の通信経路に属するポートに切り替える、処理をコンピュータに実行させる。
【発明の効果】
【００１３】
１つの側面では、適切なタイミングで通信経路の切り替えを行える。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態のストレージシステムを示す図である。
【図２】第２の実施の形態のストレージシステムの例を示す図である。
【図３】ストレージ装置のハードウェア例を示す図である。
【図４】外部ストレージ装置に対するアクセス例を示す図である。
【図５】パスの例を示す図である。
【図６】ＣＭの機能例を示す図である。
【図７】ＣＭおよびポートの識別情報の例を示す図である。
【図８】外部ＬＵ＃０に対する推奨パス情報の取得例を示す図である。
【図９】外部ＬＵ＃０に対するアクセスパス設定の例を示す図である。
【図１０】外部ＬＵパス情報の例を示す図である。
【図１１】ＩＯ管理テーブルの例を示す図である。
【図１２】パス選択論理の例を示す図である。
【図１３】パス選択の例を示すフローチャートである。
【図１４】他ＣＭ経由のパスの選択の例を示すフローチャートである。
【図１５】ＩＯ発行待ちキューのデキュー処理の例を示すフローチャートである。
【図１６】ＣＭ間通信待ちキューのデキュー処理の例を示すフローチャートである。
【図１７】性能閾値テーブルの例を示す図である。
【図１８】ＩＯ性能に応じたパス切り替えの例を示すフローチャートである。
【図１９】パス復旧制御の例を示すフローチャートである。
【発明を実施するための形態】
【００１５】
以下、本実施の形態について図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態のストレージシステムを示す図である。ストレージシステム１は、ストレージ装置１０，２０を有する。ストレージ装置１０，２０は、ＨＤＤやＳＳＤなどの記憶デバイスを複数搭載可能である。ストレージ装置１０，２０は、情報処理装置３０の処理に用いられる各種のデータを記憶する。ストレージ装置２０は、ストレージ装置１０の外部に接続された外部ストレージ装置である。なお、ここで示すストレージシステムは、別々のストレージ装置を統合管理するものであり、マスタのストレージ装置もしくはマスタのストレージ制御筐体が複数のデバイス筐体を一元管理するものとは接続構成や管理方法が異なる。
【００１６】
ストレージ装置１０および情報処理装置３０は、ネットワーク４０に接続されている。ストレージ装置１０，２０は、複数の通信経路で接続されている。
ストレージ装置１０は、ストレージ制御装置１１，１２および収納部１３を有する。ストレージ制御装置１１，１２は、収納部１３に収納された複数の記憶デバイスに対するデータの書き込みや読み出しを行う。ストレージ制御装置１１，１２それぞれが平常時にアクセスを担当するボリューム（例えば、論理的なボリューム）は予め定められる。収納部１３は、記憶デバイス１３ａ，１３ｂ，１３ｃ，・・・を搭載する筐体である。記憶デバイス１３ａ，１３ｂ，１３ｃ，・・・は、例えば、ＨＤＤである。ＨＤＤに代えて、または、ＨＤＤと合わせてＳＳＤなどの他の種類の記憶デバイスを用いることもできる。
【００１７】
ストレージ制御装置１１は、記憶部１１ａ、処理部１１ｂおよびポート１１ｃ，１１ｄ，１１ｅを有する。記憶部１１ａは、ＲＡＭ（Random Access Memory）などの揮発性記憶装置でもよいし、フラッシュメモリなどの不揮発性記憶装置でもよい。処理部１１ｂは、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）などを含み得る。処理部１１ｂはプログラムを実行するプロセッサでもよい。「プロセッサ」は、複数のプロセッサの集合（マルチプロセッサ）も含み得る。
【００１８】
記憶部１１ａは、ストレージ装置１０，２０の間の複数の通信経路を示す第１の経路情報をストレージ装置２０内のボリューム毎に記憶する。第１の経路情報は、該当のボリュームにアクセスするための通信経路毎の優先度の情報を含む。優先度は、ストレージ制御装置１１から該当のボリュームにアクセスするために経由するストレージ制御装置の数が小さいほど高い。経由するストレージ制御装置の数が小さいほど、アクセスに伴うオーバーヘッドが小さいからである。
【００１９】
処理部１１ｂは、情報処理装置３０から所定のボリュームに対するデータの書き込み、または、データの読み出しのアクセス要求を受け付ける。アクセス要求で指定されたアクセス先がストレージ装置１０内の記憶デバイスに対応するボリュームであれば、処理部１１ｂは、ストレージ装置１０内の当該ボリュームへのアクセスを行い、情報処理装置３０にアクセス結果を応答する。一方、アクセス要求で指定されたアクセス先がストレージ装置２０内の記憶デバイスに対応するボリュームであれば、処理部１１ｂは、該当のボリュームに対するデータの入出力のコマンドを生成し、ストレージ装置２０に送信する。処理部１１ｂは、送信したコマンドに応じたアクセス結果をストレージ装置２０から受信し、情報処理装置３０に応答する。
【００２０】
また、処理部１１ｂは、ストレージ装置２０に対してコマンドを送信する場合に、記憶部１１ａに記憶された第１の経路情報に基づいて、コマンドの送信に用いるポートを決定する。
【００２１】
ポート１１ｃ，１１ｄは、ストレージ装置２０と接続される通信用のポートである。ポート１１ｅは、ストレージ制御装置１２と接続される通信用のポートである。
ストレージ制御装置１２は、記憶部１２ａ、処理部１２ｂおよびポート１２ｃ，１２ｄ，１２ｅを有する。記憶部１２ａは、記憶部１１ａと同様に、第２の経路情報を記憶する。ただし、第２の経路情報に含まれる通信経路毎の優先度は、ストレージ制御装置１２からストレージ装置２０内のボリュームにアクセスするときの優先度であり、第１の経路情報に含まれる優先度とは異なる。
【００２２】
処理部１２ｂは、処理部１１ｂと同様に、情報処理装置３０からのアクセス要求に応じて、ストレージ装置１０内のボリュームへのアクセスまたはストレージ装置２０へのコマンドの送信を行う。処理部１２ｂは、ストレージ制御装置１１からストレージ装置２０に対するコマンドの送信を指示されることもある。
【００２３】
ポート１２ｃ，１２ｄは、ストレージ装置２０と接続される通信用のポートである。ポート１２ｅは、ストレージ制御装置１１と接続される通信用のポートである。例えば、ポート１１ｅ，１２ｅはケーブルを介して（あるいは、ストレージ装置１０が備える所定の中継装置を介して）接続される。
【００２４】
ストレージ装置２０は、ストレージ制御装置２１，２２および収納部２３を有する。ストレージ制御装置２１，２２は、収納部２３に収納された複数の記憶デバイスに対するデータの書き込みや読み出しを行う。ストレージ制御装置２１，２２それぞれが平常時にアクセスを担当するボリュームは予め定められる。収納部２３は、収納部１３と同様に、ＨＤＤやＳＳＤなどの記憶デバイス２３ａ，２３ｂ，２３ｃ，・・・を搭載する筐体である。
【００２５】
ストレージ制御装置２１は、記憶部２１ａ、処理部２１ｂおよびポート２１ｃ，２１ｄ，２１ｅを有する。記憶部２１ａは、処理部２１ｂの処理に用いられる情報を記憶する。処理部２１ｂは、ストレージ装置１０から受信したコマンドに応じて、ストレージ制御装置２１がアクセスを担当するボリュームに対するアクセスを実行し、アクセス結果をストレージ装置１０に応答する。処理部２１ｂは、ストレージ装置１０から受信したコマンドのアクセス先がストレージ制御装置２２により担当される場合、当該コマンドをストレージ制御装置２２に転送する。
【００２６】
ポート２１ｃ，２１ｄは、ストレージ装置１０と接続される通信用のポートである。例えば、ポート１１ｃ，２１ｃはケーブルを介して接続される。また、ポート１２ｃ，２１ｄはケーブルを介して接続される。ポート２１ｅは、ストレージ制御装置２２と接続される通信用のポートである。
【００２７】
ストレージ制御装置２２は、記憶部２２ａ、処理部２２ｂおよびポート２２ｃ，２２ｄ，２２ｅを有する。記憶部２２ａは、処理部２２ｂの処理に用いられる情報を記憶する。処理部２２ｂは、ストレージ装置１０から受信したコマンドに応じて、ストレージ制御装置２２がアクセスを担当するボリュームに対するアクセスを実行し、アクセス結果をストレージ装置１０に応答する。処理部２２ｂは、ストレージ装置１０から受信したコマンドのアクセス先がストレージ制御装置２１により担当される場合、当該コマンドをストレージ制御装置２１に転送する。
【００２８】
ポート２２ｃ，２２ｄは、ストレージ装置１０と接続される通信用のポートである。例えば、ポート１１ｄ，２２ｃはケーブルを介して接続される。また、ポート１２ｄ，２２ｄはケーブルを介して接続される。ポート２２ｅは、ストレージ制御装置２１と接続される通信用のポートである。ポート２１ｅ，２２ｅはケーブルを介して（あるいは、ストレージ装置２０が備える所定の中継装置を介して）接続される。
【００２９】
なお、記憶部１２ａ，２１ａ，２２ａは、記憶部１１ａと同様に、例えばＲＡＭまたはフラッシュメモリである。また、処理部１２ｂ，２１ｂ，２２ｂは、処理部１１ｂと同様に、ＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどでもよいし、プログラムを実行するプロセッサ（マルチプロセッサを含む）でもよい。
【００３０】
上記のように、ストレージ装置２０は、ストレージ制御装置１１のポート１１ｃ，１１ｄおよびストレージ制御装置１２のポート１２ｃ，１２ｄとの間で複数の通信経路を形成するポート２１ｃ，２１ｄ，２２ｃ，２２ｄを備える。ストレージ装置２０は、ポート２１ｃ，２１ｄ，２２ｃ，２２ｄの何れかのポートを介してストレージ装置１０からコマンドを受信し、当該コマンドに基づいて収納部２３に格納された記憶デバイスに対するデータの入出力を実行する。
【００３１】
ここで、一例として、ストレージ装置２０内に存在するボリュームＶ１に対するアクセスをストレージ制御装置２１が担当する場合を考える。更に、以下では、ストレージ制御装置１１がボリュームＶ１に対するアクセス要求を情報処理装置３０から受信する場合を例示する。ただし、ストレージ制御装置１２もストレージ制御装置１１と同様の機能を有する。
【００３２】
上記の各ポートの接続例によれば、ストレージ制御装置１１からストレージ制御装置２１へコマンドを送信する通信経路は全部で４つ存在する。
１つ目は、ポート１１ｃ，２１ｃを経由する通信経路（通信経路Ａとする）である。２つ目は、ポート１１ｄ，２２ｃ，２２ｅ，２１ｅを経由する通信経路（通信経路Ｂとする）である。３つ目は、ポート１１ｅ，１２ｅ，１２ｃ，２１ｄを経由する通信経路（通信経路Ｃとする）である。４つ目は、ポート１１ｅ，１２ｅ，１２ｄ，２２ｄ，２２ｅ，２１ｅを経由する通信経路（通信経路Ｄとする）である。
【００３３】
処理部１１ｂは、これらの４つの通信経路のうち、ボリュームＶ１へのアクセスに最も推奨されるパスを、例えば、所定のプロトコルによって特定する。当該プロトコルの一例として、ＳＣＳＩ（Small Computer System Interface）が考えられる。具体的には、処理部１１ｂは、ＳＣＳＩのＲＥＰＯＲＴ  ＴＡＲＴＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳコマンドを、ボリュームＶ１を指定して、ストレージ装置２０に対して発行する。
【００３４】
この場合、ストレージ装置２０は、ＲＥＰＯＲＴ  ＴＡＲＴＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳコマンドに対し、ポート１１ｃ，２１ｃを経由する通信経路Ａおよびポート１２ｃ，２１ｄを経由する通信経路（通信経路Ｃに相当）を推奨とする旨を応答する。一方、ストレージ装置２０は、ポート１１ｄ，２２ｃを経由する通信経路（通信経路Ｂに相当）およびポート１２ｄ，２２ｄを経由する通信経路（通信経路Ｄに相当）を非推奨とする旨を応答する。
【００３５】
ストレージ装置２０がこのような応答を返す理由は、ボリュームＶ１へのアクセスをストレージ制御装置２１が担当しているためである。すなわち、ストレージ装置２０は、ストレージ制御装置２２ではなく、ストレージ制御装置２１側のポートに外部から直接コマンドが入る通信経路を推奨として応答する。推奨として応答された通信経路は、該当のボリュームＶ１にアクセスするためにストレージ装置２０側で経由するストレージ制御装置の数が最小になる通信経路であるといえる。
【００３６】
すると、処理部１１ｂは、ストレージ装置２０によるＲＥＰＯＲＴ  ＴＡＲＴＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳコマンドに対する応答から、ボリュームＶ１へのアクセスを行う際に最も推奨されるポートを特定する。具体的には、処理部１１ｂは、推奨と応答された通信経路Ａ，Ｃに属するストレージ装置１０のポート１１ｃ，１２ｃのうち、処理部１１ｂが属するストレージ制御装置１１のポート１１ｃを特定する。ポート１１ｃは、ボリュームＶ１へのアクセス時のポート選択において、最も優先度が高いポートである。
【００３７】
次に、処理部１１ｂは、ストレージ制御装置１１のポート１１ｄを、２番目に優先度が高いポートとする。ストレージ制御装置１２を介さずにコマンド送信できた方が、ストレージ装置１０内でのオーバーヘッドを低減できるからである。
【００３８】
次に、処理部１１ｂは、ストレージ制御装置１２のポート１２ｃを、３番目に優先度が高いポートとする。ストレージ制御装置１２のポート１２ｃ，２１ｄを経由する通信経路およびポート１２ｄ，２２ｄを経由する通信経路の中で、ポート１２ｃ，２１ｄを経由する通信経路が、ストレージ装置２０により推奨の応答を得ているからである。
【００３９】
そして、処理部１１ｂは、残りのポート１２ｄを、４番目に優先度が高い（ポート１１ｃ，１１ｄ，１２ｃ，１２ｄの中で最も優先度が低い）ポートとする。
処理部１１ｂは、通信経路および当該通信経路に属するポートの優先度の情報を記憶部１１ａに格納する。ボリュームＶ１へのアクセスにポート１１ｃが最も優先されるので、通常、ボリュームＶ１にアクセスする際には、ポート１１ｃが使用されることになる。
【００４０】
ここで、ストレージ装置１０，２０の間の複数の通信経路のうち、ストレージ装置２０へのコマンドの送信に現在使用中の通信経路（例えば、ポート１１ｃを経由する通信経路Ａ）を、第１の通信経路と呼ぶこととする。
【００４１】
処理部１１ｂは、第１の通信経路を介した入出力の処理状況に基づいて、ストレージ装置２０への次のコマンドの送信に使用するポートを、複数の通信経路のうちの第２の通信経路に属するポートに切り替える。例えば、処理部１１ｂは、ポート（例えば、ポート１１ｃ）に対して発行した応答未受信のコマンドの発行数により、該当のポートが属する通信経路（例えば、通信経路Ａ）を介した入出力の処理状況を把握する。応答未受信のコマンドの発行数は、未完了のコマンドの数に相当する。処理部１１ｂは、ポート１１ｃ，１１ｄ，１１ｅそれぞれについて、応答未受信のコマンドの発行数をカウントし、記憶部１１ａに格納しておくことが考えられる。応答未受信のコマンドの発行数が多いほど、何らかの要因によって、該当の通信経路を介したデータ入出力の処理が滞っていることになる。
【００４２】
そこで、例えば、処理部１１ｂは、該当のポートについて、応答未受信のコマンドの発行数が閾値に達している場合に、ストレージ装置２０への次のコマンドの送信に使用するポートを、第２の通信経路に属するポートに切り替える。
【００４３】
より具体的には、処理部１１ｂは、コマンドの送信に現在使用中である通信経路Ａに属するポート１１ｃについて、応答未受信のコマンドの発行数が閾値に達した場合、ポート１１ｃよりも優先度の低いポート１１ｄ，１２ｃ，１２ｄの何れかを、次のコマンドの送信に使用するポートとして決定する。このとき、処理部１１ｂは、ポート毎の優先度に従って、次のコマンドの送信に使用するポートを決定してもよい。例えば、処理部１１ｂは、応答未受信のコマンドの発行数が閾値に達していないポートを、次のコマンドの送信に使用するポートとして決定してもよい。ただし、ポート１２ｃ，１２ｄは、ストレージ制御装置１２のポートである。このため、処理部１１ｂは、ポート１１ｅにおける応答未受信のコマンドの発行数を基に、ストレージ制御装置１２のポート１２ｃまたはポート１２ｄを経由してストレージ装置２０に次のコマンドを送信するか否かを決定してもよい。
【００４４】
ここで、ストレージシステム１のように、ストレージ装置１０からストレージ装置２０への通信経路を複数用意し、通信経路を切り替えて、複数の通信経路にアクセスを分散することが考えられる。しかし、ストレージ装置１０は、ストレージ装置２０が備える物理構成（ストレージ制御装置２１，２２やストレージ装置１０との通信用のポート２１ｃ，２１ｄ，２２ｃ，２２ｄや記憶デバイス２３ａ，２３ｂ，２３ｃ，・・・など）の動作状況を監視できない。このため、ストレージ装置１０側で、ストレージ装置２０の動作状態の変化を観測して通信経路の切り替えのタイミングを判断することは難しい。
【００４５】
そこで、ストレージ装置１０は、現在使用中の第１の通信経路を介した入出力の処理状況に基づいて、次のコマンドの送信に使用するポートを、第１の通信経路とは異なる第２の通信経路に属するポートに切り替える。例えば、ストレージ装置１０は、第１の通信経路に属するポートにおける応答未受信のコマンドの発行数により、何らかの要因によって、ストレージ装置２０に対するデータの入出力処理に遅滞が生じる可能性があることを検出し、使用ポートの切り替えを行う。これにより、ストレージ装置１０は、ストレージ装置２０側の動作状況を直接把握できなくても、コマンド送信に使用するポート（あるいは通信経路）を、適切なタイミングで切り替えることができる。また、ストレージ装置２０に対するデータの入出力処理に遅滞が生じる前に、別の通信経路（別のポート）に入出力処理を分散させることができる。
【００４６】
特に、応答未受信のコマンドの発行数が多いほど、各ポートのために使用されているメモリリソースの量も多くなる。一方、各ポートに対して割り当てられるメモリリソースには上限がある。このため、上記のようにしてストレージ装置２０への通信経路を切り替えることで、ストレージ装置１０の各ポートに対応するメモリリソースを分散して使用可能になるという利点もある。優先度の高い通信経路を優先して使用することで、ストレージ装置２０に対するＩＯ性能を確保し、また、ストレージ装置２０へのアクセス流量をストレージ制御装置１１により適切に制御し、ストレージ制御装置１１のリソースを効率的に使用できる。
【００４７】
なお、ストレージ装置１０，２０は、それぞれ３以上のストレージ制御装置を備えてもよい。例えば、同一ストレージ装置内の３以上のストレージ制御装置は、所定の中継装置に接続される。すると、同一ストレージ装置内の２つのストレージ制御装置は、中継装置を介して相互に通信可能である。また、ストレージ装置１０，２０がそれぞれ３以上のストレージ制御装置を備える場合でも、ストレージ装置１０，２０の間に複数の通信経路を設けることができる。このため、ストレージ装置１０は、３以上のストレージ制御装置を備える場合でも、現在使用中の第１の通信経路を介した入出力の処理状況に基づいて、次のコマンドの送信に使用するポートを、第２の通信経路に属するポートに切り替える制御を行える。また、ストレージ装置１０の各ポートとストレージ装置２０の各ポートとは、ケーブルで直接接続されてもよいし、スイッチを介して接続されてもよい。
【００４８】
次に、より具体的なストレージシステムを例示して、ストレージ装置１０の機能を更に詳細に説明する。
［第２の実施の形態］
図２は、第２の実施の形態のストレージシステムの例を示す図である。第２の実施の形態のストレージシステムは、ストレージ装置１００および外部ストレージ装置２００を有する。外部ストレージ装置２００は、ストレージ装置１００に接続されている。ストレージ装置１００は、ＳＡＮ（Storage Area Network）５０に接続されている。ＳＡＮ５０には、サーバ３００が接続されている。例えば、ＳＡＮ５０やストレージ装置１００と外部ストレージ装置２００との間のインタフェースには、ファイバチャネル（ＦＣ：Fibre Channel）が用いられる。
【００４９】
ストレージ装置１００は、サーバ３００の処理に用いられるデータを記憶する。ストレージ装置１００は、ストレージ装置１００または外部ストレージ装置２００により提供される論理ボリュームに対するアクセス要求をサーバ３００から受信する。例えば、アクセス要求は、論理ボリュームに対するデータの書き込みや論理ボリュームからのデータの読み出しなどの要求である。
【００５０】
ストレージ装置１００は、アクセス要求のアクセス先がストレージ装置１００内の論理ボリュームである場合、当該論理ボリュームに対するアクセスを実行し、アクセス結果をサーバ３００に応答する。
【００５１】
一方、アクセス要求のアクセス先が外部ストレージ装置２００内の論理ボリュームである場合、ストレージ装置１００は、該当の論理ボリュームに対するデータのＩＯ（入出力）を指示するコマンド（ＩＯコマンド）を発行し、外部ストレージ装置２００に送信する。ストレージ装置１００は、外部ストレージ装置２００からＩＯコマンドに応じたアクセス結果を受信し、当該アクセス結果をサーバ３００に応答する。すなわち、ストレージ装置１００はイニシエータとして機能し、外部ストレージ装置２００はターゲットとして機能する。なお、ストレージ装置１００は、第１の実施の形態のストレージ装置１０の一例である。
【００５２】
外部ストレージ装置２００は、サーバ３００の処理に用いられるデータを記憶する。外部ストレージ装置２００は、ストレージ装置１００からＩＯコマンドを受信し、ＩＯコマンドに応じてデータにアクセスし、アクセス結果をストレージ装置１００に送信する。外部ストレージ装置２００は、第１の実施の形態のストレージ装置２０の一例である。
【００５３】
サーバ３００は、ストレージ装置１００および外部ストレージ装置２００に格納されたデータにアクセスするサーバコンピュータである。サーバ３００は、第１の実施の形態の情報処理装置３０の一例である。
【００５４】
図３は、ストレージ装置のハードウェア例を示す図である。ストレージ装置１００は、コントローラモジュール（ＣＭ：Controller Module）１１０，１２０およびドライブ収納部１３０を有する。外部ストレージ装置２００もストレージ装置１００と同様のハードウェアを有する。
【００５５】
ＣＭ１１０，１２０は、ドライブ収納部１３０に収納された複数のＨＤＤに対するアクセスを制御するストレージ制御装置である。例えば、ドライブ収納部１３０は、ＨＤＤ１３１，１３２，１３３，・・・を有する。ドライブ収納部１３０は、ＨＤＤに代えて、または、ＨＤＤに加えて、ＳＳＤなどの他の種類の記憶デバイスを収納してもよい。
【００５６】
ＣＭ１１０，１２０は、ドライブ収納部１３０に収納された複数のＨＤＤを組合せて、ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）の技術により、論理的な記憶領域を構築し、サーバ３００の処理に用いられるデータを当該記憶領域に格納する。例えば、サーバ３００は、論理的な記憶領域を１つの論理的なボリュームとして認識する。ＣＭ１１０，１２０は、サーバ３００から指定されたアクセス先ボリュームの識別情報を、ストレージ装置１００，２００において管理される論理ユニット（ＬＵ：Logical Unit）の識別情報（ＬＵＮ：Logical Unit Number）に対応付ける。
【００５７】
なお、ＣＭ１１０，１２０は、第１の実施の形態のストレージ制御装置１１，１２の一例である。
ＣＭ１１０は、プロセッサ１１１、ＲＡＭ１１２、フラッシュメモリ１１３、ＤＩ（Drive Interface）１１４、ホストポート１１５、ＮＡ（Network Adapter）１１６、外部ストレージアクセスポート１１７、媒体リーダ１１８およびＣＭ間通信ポート１１９を有する。これらのハードウェアは、ＣＭ１１０内のバスに接続されている。ＣＭ１２０もＣＭ１１０と同様のハードウェアを有する。
【００５８】
プロセッサ１１１は、ＣＭ１１０の情報処理を制御するハードウェアである。プロセッサ１１１は、マルチプロセッサであってもよい。プロセッサ１１１は、例えばＣＰＵ、ＤＳＰ、ＡＳＩＣまたはＦＰＧＡなどである。プロセッサ１１１は、ＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどのうちの２以上の要素の組み合わせであってもよい。
【００５９】
ＲＡＭ１１２は、ＣＭ１１０の主記憶装置である。ＲＡＭ１１２は、揮発性の半導体メモリである。ＲＡＭ１１２として、例えば、ＳＲＡＭ（Static RAM）やＤＲＡＭ（Dynamic RAM）などが用いられる。ＲＡＭ１１２は、プロセッサ１１１により実行されるＯＳやファームウェアのプログラムの少なくとも一部を一時的に記憶する。また、ＲＡＭ１１２は、プロセッサ１１１による処理に用いられる各種データを記憶する。
【００６０】
フラッシュメモリ１１３は、ＣＭ１１０の補助記憶装置である。フラッシュメモリ１１３は、不揮発性の半導体メモリであり、ＯＳやファームウェアを含むプログラムや各種データなどを記憶する。
【００６１】
ＤＩ１１４は、ドライブ収納部１３０と通信するためのインタフェースである。例えば、ＤＩ１１４として、ＳＡＳ（Serial Attached SCSI）などのインタフェースを用いることができる。
【００６２】
ホストポート１１５は、ＳＡＮ５０に接続される通信インタフェースである。ホストポート１１５は、ＳＡＮ５０を介して、ＳＡＮ５０に接続されているサーバ３００と通信する。ホストポート１１５として、例えばＦＣのインタフェースを用いることができる。なお、ＣＭ１１０は、ホストポート１１５を複数有する。ホストポート１１５は、チャネルアダプタと呼ばれてもよい。
【００６３】
ＮＡ１１６は、ＬＡＮ（Local Area Network）６０を介して他のコンピュータと通信する通信インタフェースである。ＮＡ１１６として、例えばイーサネット（登録商標）のインタフェースを用いることができる。
【００６４】
外部ストレージアクセスポート１１７は、外部ストレージ装置２００と接続される通信インタフェースである。外部ストレージアクセスポート１１７として、例えば、ＦＣのインタフェースを用いることができる。また、外部ストレージアクセスポート１１７は、所定のスイッチ（例えば、ＦＣスイッチ）を介して、外部ストレージ装置２００と接続することもできる。なお、ＣＭ１１０は、外部ストレージアクセスポート１１７を複数有する。ここで、外部ストレージアクセスポート１１７は、ドライブ収納部１３０（内部ストレージ）と接続するためのＤＩ１１４とは、異なるインタフェース（あるいは、ＤＩ１１４の種類とは異なる種類のインタフェース）である。外部ストレージアクセスポート１１７は、ホストポート（チャネルアダプタ）と呼ばれてもよい。
【００６５】
媒体リーダ１１８は、記録媒体７０に記憶されたプログラムやデータを読み取る装置である。記録媒体７０として、例えば、フラッシュメモリカードなどの不揮発性の半導体メモリを使用することができる。媒体リーダ１１８は、例えば、プロセッサ１１１からの命令に従って、記録媒体７０から読み取ったプログラムやデータを、ＲＡＭ１１２やフラッシュメモリ１１３に格納する。
【００６６】
ＣＭ間通信ポート１１９は、ＣＭ１２０と接続するためのインタフェースである。ＣＭ１１０は、ＣＭ間通信ポート１１９を介してＣＭ１２０と通信することで、ＣＭ１２０と連携してデータアクセスを行える。例えば、ＣＭ１１０，１２０の両方を運用系として、ＣＭ１１０，１２０によりデータアクセスを分散して行う。一方の故障時には、他方でデータアクセスを引き継ぐことができ、ユーザの業務が停止されることを防げる。なお、以下の説明では、ＣＭ１１０に関して主に説明するが、ＣＭ１２０も、ＣＭ１１０と同様の機能を有する。
【００６７】
図４は、外部ストレージ装置に対するアクセス例を示す図である。ＣＭ１１０は、ホストポート１１５および外部ストレージアクセスポート１１７に加えて、ホストポート１１５ａおよび外部ストレージアクセスポート１１７ａを有する。
【００６８】
ここで、ＣＭ１１０は、ＲＡＭ１１２の所定の記憶領域により実現されるキャッシュによりＩＯ制御を行う。例えば、ＣＭ１１０は、サーバ３００からの読み出しのアクセス要求（ホストＩＯ）に対して、キャッシュに格納されたデータを読み出し、サーバ３００に応答する。また、ＣＭ１１０は、サーバ３００からの書き込みのアクセス要求に対して、書き込み対象のデータをキャッシュに書き込み、サーバ３００に書き込み完了を応答する。この場合、ＣＭ１１０は、ＨＤＤなどの不揮発性記憶媒体へのデータ書き込みを、サーバ３００によるアクセス要求とは非同期に実行する。
【００６９】
このようなＩＯ制御を行うため、ＲＡＭ１１２は、ＩＯ用の制御資源として、ＣＭ用ＩＯ制御資源１１２ａおよびポート用ＩＯ制御資源１１２ｂを有する。
ＣＭ用ＩＯ制御資源１１２ａは、ＣＭ１１０によるＩＯ処理を行うためのメモリリソースの一単位である。
【００７０】
ポート用ＩＯ制御資源１１２ｂは、ホストポート１１５，１１５ａおよび外部ストレージアクセスポート１１７，１１７ａによるＩＯ処理を行うためのメモリリソースの一単位である。
【００７１】
例えば、ＣＭ１１０がホストポート１１５によりホストＩＯを受信し、外部ストレージアクセスポート１１７ａにより外部ストレージ装置２００に対するＩＯアクセスを行う場合、次のように各資源が利用される。
【００７２】
第１に、ホストＩＯを受信したホストポート１１５は、ＩＯ処理を行うために、ポート用ＩＯ制御資源１１２ｂを１つ獲得する。
第２に、ホストポート１１５によりＩＯ処理を依頼されたＣＭ１１０は、内部でコマンドを処理するためにＣＭ用ＩＯ制御資源１１２ａを１つ獲得する。
【００７３】
第３に、外部ストレージ装置２００へのＩＯアクセスを行うために、ＣＭ１１０は、外部ストレージアクセスポート１１７ａに対してＩＯ指示を依頼する。
第４に、ＩＯ指示の依頼を受けた外部ストレージアクセスポート１１７ａは、ＩＯ発行のためにポート用ＩＯ制御資源１１２ｂを１つ獲得する。
【００７４】
このため、高頻度に使用される外部ストレージアクセスポートに対しては、比較的多くのポート用ＩＯ制御資源１１２ｂが割かれることになる。ただし、ポート用ＩＯ制御資源１１２ｂに割り当て可能なメモリリソースは有限であり、１つの外部ストレージアクセスポートで発行可能なＩＯ数には上限がある。このため、特定の外部ストレージアクセスポートのみを使用し続けると、ＣＭ１１０において外部ストレージ装置２００に対するＩＯアクセスを処理しきれない可能性がある。
【００７５】
図５は、パスの例を示す図である。外部ストレージ装置２００は、ＣＭ２１０，２２０を有する。ＣＭ２１０，２２０は、ＣＭ２１０，２２０それぞれが備えるＣＭ間通信ＩＦ（図示を省略している）によって相互に接続されている。ＣＭ２１０は、ホストポート２１５，２１５ａを有する。ＣＭ２２０は、ホストポート２２５，２２５ａを有する。
【００７６】
ストレージ装置１００および外部ストレージ装置２００は、ケーブルにより次のように接続されている。外部ストレージアクセスポート１１７とホストポート２１５とが接続されている。外部ストレージアクセスポート１１７ａとホストポート２２５とが接続されている。外部ストレージアクセスポート１２７とホストポート２１５ａとが接続されている。外部ストレージアクセスポート１２７ａとホストポート２２５ａとが接続されている。
【００７７】
ここで、各ＣＭがアクセスを担当するＬＵは、予め定められている。ＣＭ２１０は、アクセスボリューム２５０（外部ＬＵ）に対するアクセスを担当するものとする。外部ＬＵは、外部ストレージ装置２００内に存在するＬＵである。
【００７８】
この場合、ＣＭ１１０からアクセスボリューム２５０に対してアクセスするためのパス（通信経路）は、パス＃１，＃２，＃３，＃４の４つである。
パス＃１は、外部ストレージアクセスポート１１７およびホストポート２１５を経由するパスである。パス＃２は、外部ストレージアクセスポート１１７ａおよびホストポート２２５を経由するパスである。パス＃３は、外部ストレージアクセスポート１２７およびホストポート２１５ａを経由するパスである。パス＃４は、外部ストレージアクセスポート１２７ａおよびホストポート２２５ａを経由するパスである。なお、外部ストレージ装置２００からの応答も、アクセス時と同じパスを経由して返される。
【００７９】
あるＣＭから外部ＬＵに対するアクセス性能を向上させるには、両者の間に介在するＣＭの数が少ない方が望ましい。ストレージ装置１００内のＣＭ１１０，１２０の間の通信や外部ストレージ装置２００内のＣＭ２１０，２２０の間の通信が生じると、これらの通信のオーバーヘッドによりアクセス性能が低下するためである。
【００８０】
図５の例において、ＣＭ１１０からアクセスボリューム２５０へアクセスする場合、パス＃１を使用した場合、最もアクセス性能が高い。一方、パス＃４を使用した場合、最もアクセス性能が低い。
【００８１】
例えば、ＣＭ１１０からアクセスボリューム２５０にアクセスするために、常にパス＃１を使用することが考えられる。しかし、図４で説明したように、ＲＡＭ１１２のメモリリソースは有限であるため、１つの外部ストレージアクセスポートで発行可能なＩＯ数には上限が設けられている。このため、外部ストレージ装置２００が高負荷状態にあるなどの何らかの理由により未処理のＩＯが増えたり、該当の外部ＬＵへのアクセス数が高まったりして、当該上限を超えたアクセスが生じると、パス＃１によるアクセス性能が低下する可能性がある。これに対し、ＣＭ１１０は、各外部ストレージアクセスポートをラウンドロビンで使用してアクセスボリューム２５０にアクセスすることも考えられる。しかし、上記のように、ＣＭ１１０からアクセスボリューム２５０までに経由するＣＭの数が多いほど、ＣＭ間の通信のオーバーヘッドによりアクセス性能が低下する。
【００８２】
また、ＣＭ１１０は、外部ストレージ装置２００のハードウェア（例えば、ＣＭ２１０，２２０など）の動作状態を直接監視することはできない。このため、外部ストレージ装置２００のハードウェアの負荷を監視して、外部ＬＵへのＩＯアクセスに用いる外部ストレージアクセスポートを切り替えることは難しい。
【００８３】
そこで、ＣＭ１１０は、各外部ＬＵへのＩＯアクセスに用いる外部ストレージアクセスポート１１７，１１７ａ，１２７，１２７ａを適切なタイミングで切り替える機能を提供する。
【００８４】
図６は、ＣＭの機能例を示す図である。ＣＭ１１０は、記憶部１５０、パス情報収集部１６０、パス制御部１７０およびＩＯ処理部１８０を有する。記憶部１５０は、ＲＡＭ１１２やフラッシュメモリ１１３の記憶領域を用いて実現される。パス情報収集部１６０、パス制御部１７０およびＩＯ処理部１８０は、プロセッサ１１１により実現される。例えば、プロセッサ１１１は、ＲＡＭ１１２に記憶されたプログラムを実行することで、パス情報収集部１６０、パス制御部１７０およびＩＯ処理部１８０の機能を発揮する。あるいは、パス情報収集部１６０、パス制御部１７０およびＩＯ処理部１８０は、ＦＰＧＡやＡＳＩＣなどのハードワイヤードロジックにより実現されてもよい。
【００８５】
記憶部１５０は、各外部ＬＵにアクセスするための複数のパスに関する外部ＬＵパス情報を記憶する。また、記憶部１５０は、自ＣＭ（ＣＭ１１０）が備える外部ストレージアクセスポート１１７，１１７ａのＩＯ実行数およびＣＭ間通信ポート１１９の通信実行数を記憶する。
【００８６】
また、記憶部１５０は、外部ストレージアクセスポート１１７，１１７ａによるＩＯコマンドの発行待ちを管理するためのＩＯ発行待ちキューを含む。更に、記憶部１５０は、ＣＭ１２０を介したＩＯコマンドの発行待ちを管理するためのＣＭ間通信待ちキューを含む。
【００８７】
パス情報収集部１６０は、ストレージ装置１００および外部ストレージ装置２００の間に形成される複数のパスに関する情報を収集する。例えば、パス情報収集部１６０は、ＳＣＳＩの所定のコマンドを用いて、複数のパスのうち、外部ＬＵに対するアクセス用に推奨されるパスおよび推奨されないパスの情報（推奨パス情報）を外部ストレージ装置２００から収集する。パス情報収集部１６０は、推奨パス情報を外部ＬＵ毎に収集する。具体的には、パス情報収集部１６０は、外部ＬＵを指定したＲＥＰＯＲＴ  ＴＡＲＴＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳコマンドを外部ストレージ装置２００に対して送信することで、外部ＬＵ毎の推奨パス情報を収集することができる。
【００８８】
パス情報収集部１６０は、収集した推奨パス情報を基に、外部ＬＵパス毎の外部ＬＵパス情報を生成し、記憶部１５０に格納する。外部ＬＵパス情報は、外部ＬＵパスへのアクセスに利用可能なパスを示すパス情報を含む。また、外部ＬＵパス情報は、異常パス情報を含む。異常パス情報は、アクセス異常（無応答や異常な応答がある場合など）やリンクダウンなどの異常が検出されたパスを示す情報である。
【００８９】
パス制御部１７０は、外部ストレージアクセスポート１１７，１１７ａのＩＯ実行数およびＣＭ間通信ポート１１９の通信実行数を監視し、記憶部１５０に格納する。ここで、外部ストレージアクセスポートのＩＯ実行数は、該当の外部ストレージアクセスポートに対して発行したＩＯコマンドのうち、外部ストレージ装置２００からの応答を未取得であるＩＯコマンドの数に相当する。また、ＣＭ間通信ポート１１９の通信実行数は、ＣＭ間通信ポート１１９に対して発行したＩＯコマンドのうち、外部ストレージ装置２００からの応答（ＣＭ１２０を介した応答となる）を未取得であるＩＯコマンドの数に相当する。
【００９０】
パス制御部１７０は、外部ＬＵへのアクセス用のパスの切り替えを行う。パス制御部１７０は、記憶部１５０に記憶された外部ＬＵパス情報、外部ストレージアクセスポート１１７，１１７ａのＩＯ実行数およびＣＭ間通信ポート１１９の通信実行数に基づいて、パスの切り替えを行う。具体的には、パス制御部１７０は、外部ストレージ装置２００内のある外部ＬＵへのコマンドの送信に現在使用中のパスを介した入出力の処理状況に基づいて、外部ストレージ装置２００内の当該外部ＬＵへの次のコマンドの送信に使用する外部ストレージアクセスポートを、他のパスに属する他の外部ストレージアクセスポートに切り替える。
【００９１】
ＩＯ処理部１８０は、サーバ３００のアクセス要求に応じて、ストレージ装置１００に格納されたデータおよび外部ストレージ装置２００の外部ＬＵに格納されたデータへのアクセスを行う。ＩＯ処理部１８０は、ストレージ装置１００に格納されたデータにアクセスすると、アクセス結果（読み出したデータやデータの書き込み結果など）をサーバ３００に応答する。ＩＯ処理部１８０は、外部ＬＵに格納されたデータにアクセスする場合、前述のように、イニシエータとして機能し、ターゲットとなる外部ストレージ装置２００に、外部ＬＵに対するＩＯコマンドを発行する。ＩＯ処理部１８０は、外部ストレージ装置２００からＩＯコマンドに応じたアクセス結果を受信し、当該アクセス結果をサーバ３００に応答する。
【００９２】
ＩＯ処理部１８０は、外部ＬＵにアクセスする場合、通常は、当該外部ＬＵに対する推奨パスを使用してＩＯコマンドを送信する。ここで、推奨パスは、現在、該当の外部ＬＵに対するアクセス性能が最も高いと考えられるパスである。ただし、外部ＬＵにアクセスするためのパスは、パス制御部１７０によって切り替えられることがある。その場合、ＩＯ処理部１８０は、切り替え後のパスを使用して、外部ＬＵにアクセスするためのＩＯコマンドを、外部ストレージ装置２００に送信する。
【００９３】
ここで、各ＣＭおよび各ポートの識別情報を例示する。
図７は、ＣＭおよびポートの識別情報の例を示す図である。ストレージ装置１００におけるＣＭ１１０の識別情報は、“ＣＭ＃０”である。ストレージ装置１００におけるＣＭ１２０の識別情報は、“ＣＭ＃１”である。外部ストレージ装置２００におけるＣＭ２１０の識別情報は、“ＣＭ＃０”である。外部ストレージ装置２００におけるＣＭ２２０の識別情報は、“ＣＭ＃１”である。
【００９４】
外部ストレージアクセスポート１１７の識別情報は、“Ｐｏｒｔ０”である。外部ストレージアクセスポート１１７ａの識別情報は“Ｐｏｒｔ１”である。外部ストレージアクセスポート１２７の識別情報は、“Ｐｏｒｔ２”である。外部ストレージアクセスポート１２７ａの識別情報は、“Ｐｏｒｔ３”である。
【００９５】
ホストポート２１５の識別情報は、“ＰｏｒｔＡ”である。ホストポート２１５ａの識別情報は、“ＰｏｒｔＢ”である。ホストポート２２５の識別情報は、“ＰｏｒｔＣ”である。ホストポート２２５ａの識別情報は、“ＰｏｒｔＤ”である。
【００９６】
ストレージ装置１００の外部ストレージアクセスポート１１７，１１７ａ，１２７，１２７ａと、外部ストレージ装置２００のホストポート２１５，２１５ａ，２２５，２２５ａとの間に形成される複数のパスは、各ポートの識別情報の組合せで表せる。
【００９７】
例えば、外部ストレージアクセスポート１１７とホストポート２１５とが属するパスは、“Ｐｏｒｔ０−ＰｏｒｔＡ”である。ここで、ＣＭ２１０がアクセスを担当する外部ＬＵの１つを外部ＬＵ＃０とする。すると、“Ｐｏｒｔ０−ＰｏｒｔＡ”のパスは、ＣＭ１１０から外部ＬＵ＃０へのパス＃１に相当する。
【００９８】
また、外部ストレージアクセスポート１１７ａとホストポート２２５とが属するパスは、“Ｐｏｒｔ１−ＰｏｒｔＣ”である。“Ｐｏｒｔ１−ＰｏｒｔＣ”のパスは、ＣＭ１１０から外部ＬＵ＃０へのパス＃２に相当する。
【００９９】
また、外部ストレージアクセスポート１２７とホストポート２１５ａとが属するパスは、“Ｐｏｒｔ２−ＰｏｒｔＢ”である。“Ｐｏｒｔ２−ＰｏｒｔＢ”のパスは、ＣＭ１１０から外部ＬＵ＃０へのパス＃３に相当する。
【０１００】
更に、外部ストレージアクセスポート１２７ａとホストポート２２５ａとが属するパスは、“Ｐｏｒｔ３−ＰｏｒｔＤ”である。“Ｐｏｒｔ３−ＰｏｒｔＤ”のパスは、ＣＭ１１０から外部ＬＵ＃０へのパス＃４に相当する。
【０１０１】
図８は、外部ＬＵ＃０に対する推奨パス情報の取得例を示す図である。パス情報収集部１６０は、ＲＥＰＯＲＴ  ＴＡＲＴＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳコマンドを外部ＬＵ＃０を指定し、外部ストレージ装置２００に送信する。外部ストレージ装置２００は、外部ＬＵ＃０に対する各パスの推奨／非推奨を示す推奨パス情報をパス情報収集部１６０に応答する。当該応答を、ＲＥＰＯＲＴ  ＴＡＲＴＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳ応答と呼ぶ。
【０１０２】
例えば、図７で例示したパス構成の場合、“Ｐｏｒｔ０−ＰｏｒｔＡ”のパスは、推奨である。“Ｐｏｒｔ１−ＰｏｒｔＣ”のパスは、非推奨である。“Ｐｏｒｔ２−ＰｏｒｔＢ”のパスは、推奨である。“Ｐｏｒｔ３−ＰｏｒｔＤ”のパスは、非推奨である。
【０１０３】
このような応答を外部ストレージ装置２００が返す理由は、外部ストレージ装置２００では外部ＬＵ＃０へのアクセスを担当するＣＭがＣＭ２１０であり、ＣＭ２１０にＩＯコマンドが（ＣＭ２２０を介さずに）直接入力されるパスを推奨と判断するためである。すなわち、ＲＥＰＯＲＴ  ＴＡＲＴＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳ応答では、外部ＬＵ＃０へアクセスする際に、外部ストレージ装置２００内でのＣＭ間の通信によるオーバーヘッドがないパスが推奨となり、それ以外のパスが非推奨となる。推奨として応答されたパスは、外部ストレージ装置２００内で経由するＣＭの数が最小のパスである。
【０１０４】
パス情報収集部１６０は、ＲＥＰＯＲＴ  ＴＡＲＴＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳ応答で推奨とされた“Ｐｏｒｔ０−ＰｏｒｔＡ”のパス、および、“Ｐｏｒｔ２−ＰｏｒｔＢ”のパスのうち、自ＣＭ（ＣＭ１１０）の外部ストレージアクセスポート１１７（“Ｐｏｒｔ０”）を含むパス“Ｐｏｒｔ０−ＰｏｒｔＡ”を最高優先度のパスと決定する。
【０１０５】
図９は、外部ＬＵ＃０に対するアクセスパス設定の例を示す図である。パス情報収集部１６０は、ストレージ装置１００と外部ストレージ装置２００との間に形成される各パスに対して、次のように優先度を決定する。
【０１０６】
まず、パス情報収集部１６０は、“Ｐｏｒｔ０−ＰｏｒｔＡ”のパスを最高優先度とする。ここで、一例として、優先度を１以上の整数値で表し、数値が小さいほど、優先度が高いものとする。したがって、最高優先度は“１”である。最高優先度のパスのパス名は、“自装置ストレート−外部ストレージストレート”である。ここでいう“自装置”とは、ストレージ装置１００を示す。また、“自装置ストレート”とは、ストレージ装置１００内でＣＭ１１０，１２０間の通信が発生しないパスであることを示す。同様に、“外部ストレージストレート”とは、外部ストレージ装置２００内でＣＭ２１０，２２０間の通信が発生しないパスであることを示す。
【０１０７】
次に、パス情報収集部１６０は、ＲＥＰＯＲＴ  ＴＡＲＴＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳ応答で収集したパス（優先度“１”のパスを除く）のうち、ＣＭ１１０のポートが属する“Ｐｏｒｔ１−ＰｏｒｔＣ”のパスを、優先度“２”とする。“Ｐｏｒｔ１−ＰｏｒｔＣ”のパスのパス名は、“自装置ストレート−外部ストレージクロス”である。ここで、“外部ストレージクロス”とは、外部ストレージ装置２００内でＣＭ２１０，２２０間の通信を行うパスであることを示す。残りのパスのうち、“Ｐｏｒｔ１−ＰｏｒｔＣ”のパスを優先度“２”とする理由は、ＣＭ１２０を介さずにコマンド送信できた方が、ストレージ装置１００内でのオーバーヘッドを低減できるからである。サーバ３００に対してバックエンド側（外部ストレージ装置２００）よりもフロントエンド側（ストレージ装置１００）のオーバーヘッドを低減した方が、サーバ３００のアクセス要求に対するレスポンスを高速化できる。
【０１０８】
次に、パス情報収集部１６０は、ＲＥＰＯＲＴ  ＴＡＲＴＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳ応答で収集したパス（優先度“１”、“２”のパスを除く）のうち、当該応答で推奨とされた“Ｐｏｒｔ２−ＰｏｒｔＢ”のパスを、優先度“３”とする。“Ｐｏｒｔ２−ＰｏｒｔＢ”のパスのパス名は、“自装置クロス−外部ストレージストレート”である。ここで、“自装置クロス”とは、ストレージ装置１００内でＣＭ１１０，１２０間の通信を行うパスであることを示す。残りのパスのうち、“Ｐｏｒｔ２−ＰｏｒｔＢ”のパスを優先度“３”とする理由は、外部ストレージ装置２００側でのＣＭ間の通信によるオーバーヘッドを発生させずに、外部ＬＵ＃０にアクセスできるからである。
【０１０９】
そして、パス情報収集部１６０は、ＲＥＰＯＲＴ  ＴＡＲＴＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳ応答で収集したパス（優先度“１”、“２”、“３”のパスを除く）のうち、当該応答で非推奨とされた“Ｐｏｒｔ３−ＰｏｒｔＤ”のパスを、優先度“４”とする。“Ｐｏｒｔ３−ＰｏｒｔＤ”のパスのパス名は、“自装置クロス−外部ストレージクロス”である。
【０１１０】
このように、パス情報収集部１６０は、複数のパスのうち、外部ストレージ装置２００の外部ＬＵへのアクセスのために推奨されるパスを示す推奨パス情報を外部ＬＵ毎に外部ストレージ装置２００から取得する。パス情報収集部１６０は、推奨パス情報に基づいて、ポートの切り替え先を選択する際の複数のパスそれぞれの優先度を外部ＬＵ毎に決定する。
【０１１１】
このとき、パス情報収集部１６０は、アクセス先の外部ＬＵに到達するまでに経由するＣＭの数が少ないほど、優先度を高くする。また、パス情報収集部１６０は、複数のパスのうち、自ＣＭ（ＣＭ１１０）の外部アクセスポートを介するパスの優先度を、ＣＭ１２０の外部アクセスポートを介するパスの優先度よりも高くする。
【０１１２】
パス情報収集部１６０は、こうして決定したパスに関する情報を、外部ＬＵ＃０の識別情報に対応付けて、外部ＬＵパス情報に登録する。パス情報収集部１６０は、外部ＬＵ毎に、外部ＬＵパス情報を生成する。
【０１１３】
図１０は、外部ＬＵパス情報の例を示す図である。外部ＬＵパス情報１５１は、記憶部１５０に格納される。外部ＬＵパス情報１５１は、一例として、外部ＬＵ＃０に関する情報を示している。
【０１１４】
例えば、外部ＬＵパス情報１５１は、外部ＬＵ、“自装置ストレート−外部ストレージストレート”のパス情報、“自装置ストレート−外部ストレージクロス”のパス情報、“自装置クロス−外部ストレージストレート”のパス情報、“自装置クロス−外部ストレージクロス”のパス情報および異常パス情報のフィールドを含む。
【０１１５】
外部ＬＵのフィールドには、外部ＬＵ＃０を示す識別情報が設定される。“自装置ストレート−外部ストレージストレート”のパス情報のフィールドには、当該パスに属するポートの組“Ｐｏｒｔ０−ＰｏｒｔＡ”および優先度“１”が設定される。“自装置ストレート−外部ストレージクロス”のパス情報のフィールドには、当該パスに属するポートの組“Ｐｏｒｔ１−ＰｏｒｔＣ”および優先度“２”が設定される。“自装置クロス−外部ストレージストレート”のパス情報のフィールドには、当該パスに属するポートの組“Ｐｏｒｔ２−ＰｏｒｔＢ”および優先度“３”が設定される。“自装置クロス−外部ストレージクロス”のパス情報のフィールドには、当該パスに属するポートの組“Ｐｏｒｔ３−ＰｏｒｔＤ”および優先度“４”が設定される。異常パス情報のフィールドには、外部ＬＵへのアクセス異常やリンクダウンなどの物理的な切断事象を検出した外部ストレージアクセスポートが属するパスの識別情報が設定される。何れの外部ストレージアクセスポートも異常を検出していない場合、異常パス情報のフィールドは、設定なしとなる。
【０１１６】
他の外部ＬＵに関しても、外部ＬＵパス情報１５１と同様の情報が記憶部１５０に格納される。
図１１は、ＩＯ管理テーブルの例を示す図である。ＩＯ管理テーブル１５２は、記憶部１５０に格納される。ＩＯ管理テーブル１５２は、ＣＭ１１０の外部ストレージアクセスポート１１７，１１７ａおよびＣＭ間通信ポート１１９それぞれに対するＩＯコマンドの発行数を管理するための情報である。例えば、ＣＭ１２０は、外部ストレージアクセスポート１２７，１２７ａおよびＣＭ１２０のＣＭ間通信ポートそれぞれに対するＩＯコマンドの発行数を管理するためのＩＯ管理テーブルを保持する。
【０１１７】
ＩＯ管理テーブル１５２は、ＣＭ間通信実行数、Ｐｏｒｔ０−ＩＯ実行数、Ｐｏｒｔ１−ＩＯ実行数、・・・、ＰｏｒｔＮ−ＩＯ実行数のフィールドを含む（Ｎは１以上の整数であり、本例ではＮ＝１である）。
【０１１８】
ＣＭ間通信実行数のフィールドには、ＣＭ１１０からＣＭ間通信ポート１１９に対して発行されたＩＯコマンドのうち、応答を未受信であるＩＯコマンドの数が記録される。Ｐｏｒｔ０−ＩＯ実行数のフィールドには、ＣＭ１１０により外部ストレージアクセスポート１１７（Ｐｏｒｔ０）を介して発行されたＩＯコマンドのうち、応答を未受信であるＩＯコマンドの数が記録される。Ｐｏｒｔ１−ＩＯ実行数のフィールドには、ＣＭ１１０により外部ストレージアクセスポート１１７ａ（Ｐｏｒｔ１）を介して発行されたＩＯコマンドのうち、応答を未受信であるＩＯコマンドの数が記録される。
【０１１９】
なお、ＣＭ１１０が３以上の外部ストレージアクセスポートを有する場合にも、同様に、外部ストレージアクセスポート毎にＩＯ実行数が記録される。
パス制御部１７０は、外部ＬＵパス情報１５１およびＩＯ管理テーブル１５２に基づいて、ＩＯコマンドの送信に用いるパスを選択する。次に、パス制御部１７０によるパス選択論理を説明する。
【０１２０】
図１２は、パス選択論理の例を示す図である。パス選択論理表８０は、パス制御部１７０によるパス選択処理の内容を表形式で示す。パス選択論理表８０は、項番、優先パス、パスの状態、ＩＯ実行数、ＣＭ間通信実行数、使用パスおよび処理内容の列を含む。
【０１２１】
項番の列には、１つの選択論理を示す番号が記載されている。優先パスの列には、現在選択されているパス（優先パスと称する）を示す識別情報が記載されている。パスの状態の列には、優先パスの状態が記載されている。優先パスの状態は、正常または異常である。ＩＯ実行数の列には、優先パスに属する外部ストレージアクセスポートのＩＯ実行数に対する条件が記載されている。当該条件を用いない選択論理の場合、ＩＯ実行数の欄にはハイフン記号“−”が記載されている。ＣＭ間通信実行数の列には、優先パスに属するＣＭ間通信ポートの通信実行数に対する条件が記載されている。当該条件を用いない選択論理の場合、ＣＭ間通信実行数の欄には、ハイフン記号“−”が記載されている。使用パスの列には、該当の選択論理において選択されるパスの識別情報が記載されている。該当の選択論理において選択されるパスがない場合、使用パスの欄にはハイフン記号“−”が記載されている。処理内容の列には、使用パスが選択されない（使用パスの欄の記載が“−”である）場合の処理内容が記載されている。使用パスが選択され、処理内容がない場合、処理内容の欄にはハイフン記号“−”が記載されている。
【０１２２】
ここで、項番１，２，３の行は、優先パス＝パス＃１の場合の選択論理である。項番４，５，６，７の行は、優先パス＝パス＃２の場合の選択論理である。項番８，９の行は、優先パス＝パス＃３の場合の選択論理である。項番１０，１１の行は、優先パス＝パス＃４の場合の選択論理である。
【０１２３】
項番１の行は、パス＃１の状態が正常、かつ、外部ストレージアクセスポート１１７のＩＯ実行数が上限未満の場合に、使用パスをパス＃１とすることを示す。
項番２の行は、パス＃１の状態が正常、かつ、外部ストレージアクセスポート１１７のＩＯ実行数が上限以上の場合に、優先パスをパス＃２に変更することを示す。
【０１２４】
項番３の行は、パス＃１の状態が異常の場合に、優先パスをパス＃２に変更することを示す。
パス制御部１７０は、優先パスをパス＃２に変更した場合、項番４，５，６，７の何れかの選択論理を実行する。
【０１２５】
項番４の行は、パス＃２の状態が正常、かつ、外部ストレージアクセスポート１１７ａのＩＯ実行数が上限未満の場合に、使用パスをパス＃２とすることを示す。
項番５の行は、パス＃２の状態が正常、かつ、外部ストレージアクセスポート１１７ａのＩＯ実行数が上限以上の場合に、今回のＩＯをＩＯ発行待ちキューにキューイングすることを示す。
【０１２６】
項番６の行は、パス＃２の状態が異常、かつ、ＣＭ間通信ポート１１９のＣＭ間通信実行数が上限未満の場合に、優先パスをパス＃３に変更することを示す。
項番７の行は、パス＃２の状態が異常、かつ、ＣＭ間通信ポート１１９のＣＭ間通信実行数が上限以上の場合に、今回のＩＯをＣＭ間通信待ちキューにキューイングすることを示す。
【０１２７】
パス制御部１７０は、優先パスをパス＃３に変更した場合、項番８，９の何れかの選択論理を実行する。
項番８の行は、パス＃３の状態が正常の場合に、使用パスをパス＃３とすることを示す。
【０１２８】
項番９の行は、パス＃３の状態が異常の場合に、優先パスをパス＃４に変更することを示す。
パス制御部１７０は、優先パスをパス＃４に変更した場合、項番１０，１１の何れかの選択論理を実行する。
【０１２９】
項番１０の行は、パス＃４の状態が正常の場合に、使用パスをパス＃４とすることを示す。
項番１１の行は、パス＃４の状態が異常の場合に、ＩＯ異常終了とすることを示す。
【０１３０】
次に、ＣＭ１１０により外部ＬＵにアクセスする際の処理手順を説明する。
図１３は、パス選択の例を示すフローチャートである。以下、図１３に示す処理をステップ番号に沿って説明する。以下の手順は、ＣＭ１１０が外部ＬＵ＃０をアクセス先とするアクセス要求をサーバ３００から受信した際に実行される。ただし、他の外部ＬＵをアクセス先とするアクセス要求を受信した場合も同様の手順となる。
【０１３１】
（Ｓ１１）パス制御部１７０は、外部ＬＵパス情報１５１を参照して、“自装置ストレート−外部ストレージストレート”のパスがあるか否かを判定する。“自装置ストレート−外部ストレージストレート”のパスがある場合、パス制御部１７０は、ステップＳ１２に処理を進める。“自装置ストレート−外部ストレージストレート”のパスがない場合、パス制御部１７０は、ステップＳ１６に処理を進める。
【０１３２】
（Ｓ１２）パス制御部１７０は、“自装置ストレート−外部ストレージストレート”のパスを１つ選択し、外部ＬＵパス情報１５１の異常パス情報を参照して、選択したパス（選択パス）が正常であるか否かを判定する。選択パスが正常である場合、パス制御部１７０は、ステップＳ１５に処理を進める。選択パスが正常でない場合、パス制御部１７０は、ステップＳ１３に処理を進める。
【０１３３】
（Ｓ１３）パス制御部１７０は、外部ＬＵパス情報１５１を参照して、“自装置ストレート−外部ストレージストレート”の他パスがあるか否かを判定する。“自装置ストレート−外部ストレージストレート”の他パスがある場合、パス制御部１７０は、ステップＳ１４に処理を進める。“自装置ストレート−外部ストレージストレート”の他パスがない場合、パス制御部１７０は、ステップＳ１６に処理を進める。
【０１３４】
（Ｓ１４）パス制御部１７０は、“自装置ストレート−外部ストレージストレート”の他パスを１つ選択し、外部ＬＵパス情報１５１の異常パス情報を参照して、選択したパス（選択パス）が正常であるか否かを判定する。選択パスが正常である場合、パス制御部１７０は、ステップＳ１５に処理を進める。選択パスが正常でない場合、パス制御部１７０は、ステップＳ１３に処理を進める。
【０１３５】
（Ｓ１５）パス制御部１７０は、ＩＯ管理テーブル１５２の選択パスに対するＩＯ実行数を参照して、当該選択パスに対するＩＯ実行数がＩＯ発行上限に達しているか否かを判定する。ＩＯ実行数がＩＯ発行上限に達している場合、パス制御部１７０は、ステップＳ１３に処理を進める。ＩＯ実行数がＩＯ発行上限に達していない場合、パス制御部１７０は、該当の選択パスを使用パスに確定して、パス選択処理を終了する。
【０１３６】
（Ｓ１６）パス制御部１７０は、外部ＬＵパス情報１５１を参照して、“自装置ストレート−外部ストレージクロス”のパスがあるか否かを判定する。“自装置ストレート−外部ストレージクロス”のパスがある場合、パス制御部１７０は、ステップＳ１７に処理を進める。“自装置ストレート−外部ストレージクロス”のパスがない場合、パス制御部１７０は、ステップＳ２１に処理を進める。
【０１３７】
（Ｓ１７）パス制御部１７０は、“自装置ストレート−外部ストレージクロス”のパスを１つ選択し、外部ＬＵパス情報１５１の異常パス情報を参照して、選択したパス（選択パス）が正常であるか否かを判定する。選択パスが正常である場合、パス制御部１７０は、ステップＳ２０に処理を進める。選択パスが正常でない場合、パス制御部１７０は、ステップＳ１８に処理を進める。
【０１３８】
（Ｓ１８）パス制御部１７０は、外部ＬＵパス情報１５１を参照して、“自装置ストレート−外部ストレージクロス”の他パスがあるか否かを判定する。“自装置ストレート−外部ストレージクロス”の他パスがある場合、パス制御部１７０は、ステップＳ１９に処理を進める。“自装置ストレート−外部ストレージクロス”の他パスがない場合、パス制御部１７０は、ステップＳ２１に処理を進める。
【０１３９】
（Ｓ１９）パス制御部１７０は、“自装置ストレート−外部ストレージクロス”の他パスを１つ選択し、外部ＬＵパス情報の異常パス情報を参照して、選択したパス（選択パス）が正常であるか否かを判定する。選択パスが正常である場合、パス制御部１７０は、ステップＳ２０に処理を進める。選択パスが正常でない場合、パス制御部１７０は、ステップＳ１８に処理を進める。
【０１４０】
（Ｓ２０）パス制御部１７０は、ＩＯ管理テーブル１５２の選択パスに対するＩＯ実行数を参照して、当該選択パスに対するＩＯ実行数がＩＯ発行上限に達しているか否かを判定する。ＩＯ実行数がＩＯ発行上限に達している場合、パス制御部１７０は、ステップＳ１８に処理を進める。ＩＯ実行数がＩＯ発行上限に達していない場合、パス制御部１７０は、該当の選択パスを使用パスに確定して、パス選択処理を終了する。
【０１４１】
（Ｓ２１）パス制御部１７０は、外部ＬＵパス情報の異常パス情報を参照して、“自装置ストレート−外部ストレージストレート”のパス、および、“自装置ストレート−外部ストレージクロス”のパスのうち、ＩＯ発行可能な正常パスがあるか否かを判定する。“自装置ストレート−外部ストレージストレート”のパス、および、“自装置ストレート−外部ストレージクロス”のパスのうち、正常パスがある場合、パス制御部１７０は、ステップＳ２２に処理を進める。“自装置ストレート−外部ストレージストレート”のパス、および、“自装置ストレート−外部ストレージクロス”のパスのうち、正常パスがない場合、パス制御部１７０は、ステップＳ２３に処理を進める。
【０１４２】
（Ｓ２２）パス制御部１７０は、自ＣＭ（ＣＭ１１０）のＩＯ発行待ちキューに外部ＬＵに対するＩＯコマンドをエンキューする。そして、パス制御部１７０は、パス選択処理を終了する。
【０１４３】
（Ｓ２３）パス制御部１７０は、他ＣＭ（ＣＭ１２０）経由のパスの選択を行う。他ＣＭ経由のパスの選択の詳細は、後述される。
ここで、ステップＳ１５，Ｓ２０の判定に用いられるＩＯ発行上限は、選択パスに属する外部ストレージアクセスポートに対して割り当てられたメモリリソースの上限に応じて予め設定される。
【０１４４】
また、パス制御部１７０は、使用パスを確定した場合、当該使用パスを使用したＩＯコマンドの送信をＩＯ処理部１８０に指示する。ＩＯ処理部１８０は、指示された使用パスを介して、アクセス先の外部ＬＵに対するＩＯコマンドを、外部ストレージ装置２００に送信する。
【０１４５】
上記の手順によれば、ＣＭ１１０は、通常時は、利用可能なパスのうちの最高優先度のパスを使用することになる。そして、ＣＭ１１０は、当該パスを介して送信済であるＩＯコマンドのうち、応答を未受信であるＩＯコマンドの数が閾値（ＩＯ発行上限）に達している場合に、外部ストレージ装置２００への次のＩＯコマンドの送信に使用するポートの切り替えを行う。一方、ＣＭ１１０は、当該数が閾値に達していない場合に、使用するポートの切り替えを行わない。
【０１４６】
図１４は、他ＣＭ経由のパスの選択の例を示すフローチャートである。以下、図１４に示す処理をステップ番号に沿って説明する。なお、以下に示す手順は、図１３のステップＳ２３に相当する。
【０１４７】
（Ｓ３１）パス制御部１７０は、外部ＬＵパス情報１５１を参照して、アクセス先の外部ＬＵに対する他ＣＭを使用したアクセスパスがあるか否かを判定する。該当の外部ＬＵに対する他ＣＭを使用したアクセスパスがある場合、パス制御部１７０は、ステップＳ３３に処理を進める。該当の外部ＬＵに対する他ＣＭを使用したアクセスパスがない場合、パス制御部１７０は、ステップＳ３２に処理を進める。ここで、他ＣＭを使用したアクセスパスは、“自装置クロス−外部ストレージストレート”のパス、または、“自装置クロス−外部ストレージクロス”のパスである。
【０１４８】
（Ｓ３２）パス制御部１７０は、エラー情報を作成し、ＩＯ処理を異常終了する。そして、パス制御部１７０は、他ＣＭ経由のパスの選択を終了する。
（Ｓ３３）パス制御部１７０は、ＩＯ管理テーブル１５２を参照して、ＣＭ間通信実行数が上限に達しているか否かを判定する。ＣＭ間通信実行数が上限に達している場合、パス制御部１７０は、ステップＳ３４に処理を進める。ＣＭ間通信実行数が上限に達していない場合、パス制御部１７０は、ステップＳ３５に処理を進める。
【０１４９】
（Ｓ３４）パス制御部１７０は、自ＣＭ（ＣＭ１１０）のＣＭ間通信待ちキューに外部ＬＵに対するＩＯコマンドをエンキューする。そして、パス制御部１７０は、他ＣＭ経由のパスの選択を終了する。
【０１５０】
（Ｓ３５）パス制御部１７０は、外部ＬＵパス情報を参照して、“自装置クロス−外部ストレージストレート”のパスがあるか否かを判定する。“自装置クロス−外部ストレージストレート”のパスがある場合、パス制御部１７０は、ステップＳ３６に処理を進める。“自装置クロス−外部ストレージストレート”のパスがない場合、パス制御部１７０は、ステップＳ３７に処理を進める。
【０１５１】
（Ｓ３６）パス制御部１７０は、“自装置クロス−外部ストレージストレート”のパスを使用パスとして選択する。そして、パス制御部１７０は、他ＣＭ経由のパスの選択を終了する。
【０１５２】
（Ｓ３７）パス制御部１７０は、“自装置クロス−外部ストレージクロス”のパスを使用パスとして選択する。そして、パス制御部１７０は、他ＣＭ経由のパスの選択を終了する。ただし、ステップＳ３７において、“自装置クロス−外部ストレージクロス”のパスがない場合、パス制御部１７０は、ＩＯ処理を異常終了する。
【０１５３】
上記の手順によれば、ＣＭ１１０は、アクセス先の外部ＬＵに対して選択された推奨パス（使用パス）を優先的に使用し、推奨パスに対するＩＯ発行数が上限に達したタイミングで、推奨パスよりも優先度の低いパスに切り替えて、外部ＬＵにアクセス可能になる。
【０１５４】
次に、図１３のステップＳ２２において、ＩＯ発行待ちキューにエンキューされたＩＯコマンドのデキュー処理の手順を説明する。
図１５は、ＩＯ発行待ちキューのデキュー処理の例を示すフローチャートである。以下、図１５に示す処理をステップ番号に沿って説明する。
【０１５５】
（Ｓ４１）パス制御部１７０は、ＩＯ処理部１８０による外部ＬＵに対するＩＯ処理完了を検出し、当該ＩＯ処理が完了した外部ストレージアクセスポートのＩＯ実行数（ＩＯ管理テーブル１５２に記録されているＩＯ実行数）に所定数を減算する。パス制御部１７０は、今回検出したＩＯ処理完了の検出数（１以上の数）を減算してもよい。
【０１５６】
（Ｓ４２）パス制御部１７０は、ＩＯ発行待ちキューにＩＯコマンドがあるか否かを判定する。ＩＯ発行待ちキューにＩＯコマンドがある場合、パス制御部１７０は、ステップＳ４３に処理を進める。ＩＯ発行待ちキューにＩＯコマンドがない場合、パス制御部１７０は、ＩＯ発行待ちキューのデキュー処理を終了する。
【０１５７】
（Ｓ４３）パス制御部１７０は、ＩＯコマンドのアクセス先の外部ＬＵに対応する外部ＬＵパス情報を参照して、“自装置ストレート−外部ストレージストレート”のパスがあるか否かを判定する。“自装置ストレート−外部ストレージストレート”のパスがある場合、パス制御部１７０は、ステップＳ４４に処理を進める。“自装置ストレート−外部ストレージストレート”のパスがない場合、パス制御部１７０は、ステップＳ４７に処理を進める。
【０１５８】
（Ｓ４４）パス制御部１７０は、アクセス先の外部ＬＵに対応する外部ＬＵパス情報を参照して、“自装置ストレート−外部ストレージストレート”の正常なパスを１つ選択する。パス制御部１７０は、ＩＯ管理テーブル１５２を参照して、当該パスに属する外部ストレージアクセスポートのＩＯ実行数がＩＯ発行上限に達しているか否かを判定する。ＩＯ実行数がＩＯ発行上限に達している場合、パス制御部１７０は、ステップＳ４６に処理を進める。ＩＯ実行数がＩＯ発行上限に達していない場合、パス制御部１７０は、ステップＳ４５に処理を進める。
【０１５９】
（Ｓ４５）パス制御部１７０は、ＩＯ処理部１８０によるＩＯ処理を起動し、選択したパスに対応する外部ストレージアクセスポートのＩＯ実行数（ＩＯ管理テーブル１５２に記録されているＩＯ実行数）に所定数を加算する。例えば、パス制御部１７０は、ＩＯ処理部１８０により今回送信されるＩＯコマンドの数（１以上の数）を加算することができる。また、パス制御部１７０は、ＩＯ処理部１８０により今回送信されたＩＯコマンドを、ＩＯ発行待ちキューから削除する。そして、パス制御部１７０は、ステップＳ４２に処理を進める。
【０１６０】
（Ｓ４６）パス制御部１７０は、ＩＯコマンドのアクセス先の外部ＬＵに対応する外部ＬＵパス情報を参照して、“自装置ストレート−外部ストレージストレート”の他パスがあるか否かを判定する。“自装置ストレート−外部ストレージストレート”の他パスがある場合、パス制御部１７０は、ステップＳ４４に処理を進める。“自装置ストレート−外部ストレージストレート”の他パスがない場合、パス制御部１７０は、ステップＳ４７に処理を進める。
【０１６１】
（Ｓ４７）パス制御部１７０は、ＩＯコマンドのアクセス先の外部ＬＵに対応する外部ＬＵパス情報を参照して、“自装置ストレート−外部ストレージクロス”のパスがあるか否かを判定する。“自装置ストレート−外部ストレージクロス”のパスがある場合、パス制御部１７０は、ステップＳ４８に処理を進める。“自装置ストレート−外部ストレージクロス”のパスがない場合、パス制御部１７０は、ステップＳ５０に処理を進める。
【０１６２】
（Ｓ４８）パス制御部１７０は、アクセス先の外部ＬＵに対応する外部ＬＵパス情報を参照して、“自装置ストレート−外部ストレージクロス”の正常なパスを１つ選択する。パス制御部１７０は、ＩＯ管理テーブル１５２を参照して、当該パスに属する外部ストレージアクセスポートのＩＯ実行数がＩＯ発行上限に達しているか否かを判定する。ＩＯ実行数がＩＯ発行上限に達している場合、パス制御部１７０は、ステップＳ４９に処理を進める。ＩＯ実行数がＩＯ発行上限に達していない場合、パス制御部１７０は、ステップＳ４５に処理を進める。
【０１６３】
（Ｓ４９）パス制御部１７０は、ＩＯコマンドのアクセス先の外部ＬＵに対応する外部ＬＵパス情報を参照して、“自装置ストレート−外部ストレージクロス”の他パスがあるか否かを判定する。“自装置ストレート−外部ストレージクロス”の他パスがある場合、パス制御部１７０は、ステップＳ４８に処理を進める。“自装置ストレート−外部ストレージクロス”の他パスがない場合、パス制御部１７０は、ステップＳ５０に処理を進める。
【０１６４】
（Ｓ５０）パス制御部１７０は、着目するＩＯコマンドのエンキュー状態を維持する。
（Ｓ５１）パス制御部１７０は、更にＩＯ発行待ちキューにＩＯコマンドがあるか否かを判定する。ＩＯ発行待ちキューにＩＯコマンドがある場合、パス制御部１７０は、ステップＳ４３に処理を進める。ＩＯ発行待ちキューにＩＯコマンドがない場合、パス制御部１７０は、ＩＯ発行待ちキューのデキュー処理を終了する。
【０１６５】
このようにして、パス制御部１７０は、外部ＬＵからのＩＯ応答時に、ＩＯ発行待ちキューにキューイングされたＩＯコマンドのデキュー処理を行う。このとき、パス制御部１７０は、ＩＯ発行待ちキューの先頭にキューイングされているコマンドについては、自ＣＭ（ＣＭ１１０）の外部ストレージアクセスポートの中でＩＯ実行数が閾値に達していないポートを選択する。
【０１６６】
次に、図１４のステップＳ３４において、ＣＭ間通信待ちキューにエンキューされたＩＯコマンドのデキュー処理の手順を説明する。
図１６は、ＣＭ間通信待ちキューのデキュー処理の例を示すフローチャートである。以下、図１６に示す処理をステップ番号に沿って説明する。
【０１６７】
（Ｓ６１）パス制御部１７０は、ＩＯ処理部１８０によるＣＭ間通信の完了を検出する。例えば、１つのＩＯコマンドは、１つのＣＭ間通信に対応する。ＩＯ処理部１８０は、あるＩＯコマンドに対して、ＣＭ１２０から外部ＬＵに対するアクセス結果を受信すると当該ＩＯコマンドに対応するＣＭ間通信の完了を検出する。パス制御部１７０は、１以上のＣＭ間通信の完了を検出してもよい。
【０１６８】
（Ｓ６２）パス制御部１７０は、ＣＭ間通信待ちキューにＩＯコマンドがあるか否かを判定する。ＣＭ間通信待ちキューにＩＯコマンドがある場合、パス制御部１７０は、ステップＳ６３に処理を進める。ＣＭ間通信待ちキューにＩＯコマンドがない場合、パス制御部１７０は、ＣＭ間通信待ちキューのデキュー処理を終了する。
【０１６９】
（Ｓ６３）パス制御部１７０は、ＣＭ間通信待ちキューからＩＯコマンドをデキューする。パス制御部１７０は、ステップＳ６１で完了を検出したＣＭ間通信の数に応じて、１以上のＩＯコマンドをデキューすることができる。
【０１７０】
（Ｓ６４）パス制御部１７０は、ステップＳ６１で完了を検出したＣＭ間通信の数の分だけ、ＩＯ管理テーブル１５２に記録されているＣＭ間通信実行数を減算する。
（Ｓ６５）パス制御部１７０は、ＩＯ処理部１８０によるＩＯ処理を起動する。ＩＯ処理部１８０は、ＣＭ１２０に対してＩＯコマンドを送信し、当該ＩＯコマンドによる外部ＬＵに対するＩＯ処理を依頼する。例えば、ＣＭ１２０は、ＩＯ処理の依頼を受け付けるとイニシエータとして機能し、外部ＬＵに対するＩＯ処理を実行する。
【０１７１】
（Ｓ６６）パス制御部１７０は、ＩＯ管理テーブル１５２に記録されているＣＭ間通信実行数を加算する。パス制御部１７０は、ステップＳ６３でデキューしたＩＯコマンドの数の分だけ、ＣＭ間通信実行数を加算する。そして、パス制御部１７０は、ＣＭ間通信待ちキューのデキュー処理を終了する。
【０１７２】
このように、ＣＭ１１０は、ＣＭ１１０の外部ストレージアクセスポートを介した外部ＬＵへのパスがある場合と、ＣＭ１１０の外部ストレージアクセスポートを介した外部ＬＵへのパスがない場合とで、ＩＯコマンドをキューイングするキューを別個にする。これにより、ＣＭ１１０において外部ストレージアクセスポートを利用可能である場合には、ＣＭ間通信によるオーバーヘッドを低減できる。また、ＣＭ１１０において外部ストレージアクセスポートを利用できない場合には、ＣＭ１１０は、ＣＭ１２０に対して適切にＩＯ処理を依頼できる。
【０１７３】
ここで、ＣＭ１１０によりＩＯコマンドを送信するための推奨パスを選択したとしても、当該推奨パスで伝送路の遅延などが発生することもある。この場合、必ずしも推奨パスを使用することが適切とは限らない。他のパスを選択した方が、ＩＯコマンドに対する外部ストレージ装置２００からの応答時間を短縮できる可能性もある。
【０１７４】
そこで、ＣＭ１１０は、下記の機能により、推奨パスを動的に補正してもよい。
図１７は、性能閾値テーブルの例を示す図である。性能閾値テーブルセット１５３および外部ＬＵ＃０性能閾値テーブル１５４は、記憶部１５０に格納される。性能閾値テーブルセット１５３は、外部ＬＵ毎の性能閾値テーブルを含む集合である。外部ＬＵ＃０性能閾値テーブル１５４は、性能閾値テーブルセット１５３の１つの要素である。
【０１７５】
例えば、性能閾値テーブルセット１５３は、外部ＬＵ＃０性能閾値テーブル１５４，外部ＬＵ＃１性能閾値テーブル，・・・を含む。以下では、外部ＬＵ＃０性能閾値テーブル１５４を主に説明するが、外部ＬＵ＃１性能閾値テーブル，・・・などの性能閾値テーブルにも同様の情報が設定される。
【０１７６】
外部ＬＵ＃０性能閾値テーブル１５４は、各パスに対する性能閾値および推奨パス異常補正中フラグが設定されるテーブルである。性能閾値は、例えば、ＩＯコマンドに対する応答時間（レスポンスタイム）として許容される上限値である。性能閾値は、ＲＥＡＤ（読み出し）およびＷＲＩＴＥ（書き込み）のそれぞれに対して設定される。ＲＥＡＤに対する性能閾値をＲＥＡＤ性能閾値と称し、ＷＲＩＴＥに対する性能閾値をＷＲＩＴＥ性能閾値と称する。推奨パス異常補正中フラグは、推奨パスを補正中の状態であるか否かを示すフラグである。推奨パス異常補正中フラグ“ｏｎ”は補正中を示す。推奨パス異常補正中フラグ“ｏｆｆ”は補正中でないことを示す。推奨パス異常補正中フラグのデフォルト値は“ｏｆｆ”である。
【０１７７】
例えば、外部ＬＵ＃０性能閾値テーブル１５４には、外部ＬＵ＃０への“自装置ストレート−外部ストレージストレート”のパスに対するＲＥＡＤ性能閾値およびＷＲＩＴＥ性能閾値が設定される。また、外部ＬＵ＃０性能閾値テーブル１５４には、外部ＬＵ＃０への“自装置ストレート−外部ストレージクロス”のパスに対するＲＥＡＤ性能閾値およびＷＲＩＴＥ性能閾値が設定される。また、外部ＬＵ＃０性能閾値テーブル１５４には、外部ＬＵ＃０への“自装置クロス−外部ストレージストレート”のパスに対するＲＥＡＤ性能閾値およびＷＲＩＴＥ性能閾値が設定される。また、外部ＬＵ＃０性能閾値テーブル１５４には、外部ＬＵ＃０への“自装置クロス−外部ストレージクロス”のパスに対するＲＥＡＤ性能閾値およびＷＲＩＴＥ性能閾値が設定される。また、外部ＬＵ＃０性能閾値テーブル１５４には、外部ＬＵ＃０へのパスについて、推奨パスを補正中の状態であるか否かを示す推奨パス異常補正中フラグも設定されている。
【０１７８】
パス制御部１７０は、性能閾値テーブルセット１５３に含まれる各外部ＬＵに対応する性能閾値テーブルに基づいて、ＩＯコマンドの送信に用いるパスを選択する。次に、当該選択の手順を説明する。
【０１７９】
図１８は、ＩＯ性能に応じたパス切り替えの例を示すフローチャートである。以下、図１８に示す処理をステップ番号に沿って説明する。以下では、外部ＬＵ＃０に対するＩＯ処理を想定するが、他の外部ＬＵでも同様の手順となる。
【０１８０】
（Ｓ７１）パス制御部１７０は、外部ＬＵ＃０に対して現在使用中の推奨パス（現パス）でのＩＯ性能の低下を検出する。例えば、パス制御部１７０は、外部ＬＵ＃０へのＩＯコマンドの送信から応答までの時間（レスポンスタイム）をＲＥＡＤ／ＷＲＩＴＥ別個に計測する。ＲＥＡＤのＩＯコマンドのレスポンスタイムがＲＥＡＤ性能閾値を超過する場合、および、ＷＲＩＴＥのＩＯコマンドのレスポンスタイムがＷＲＩＴＥ性能閾値を超過する場合の少なくとも一方の場合に、パス制御部１７０は、現パスでのＩＯ性能の低下を検出する。例えば、現パスがパス＃１の場合、パス制御部１７０は、外部ＬＵ＃０性能閾値テーブル１５４のうち、“自装置ストレート−外部ストレージストレート”のパスに対するＲＥＡＤ性能閾値およびＷＲＩＴＥ性能閾値を用いて、ＩＯ性能の低下を検出する。
【０１８１】
（Ｓ７２）パス制御部１７０は、外部ＬＵ＃０性能閾値テーブル１５４の推奨パス異常補正中フラグを“ｏｎ”に設定する。
（Ｓ７３）パス制御部１７０は、現パスを示す異常パス情報を、外部ＬＵパス情報１５１に設定する。例えば、現パスがパス＃１の場合、パス制御部１７０は、異常パス情報として、パス＃１を示す情報を外部ＬＵパス情報１５１に設定する。その結果、パス制御部１７０は、パス＃１をパス選択の対象外とする。
【０１８２】
（Ｓ７４）パス制御部１７０は、残りのパス（未選択かつ正常なパス）を優先度に従って１つ選択する。例えば、優先度の高い方から順に各パスを並べると、“自装置ストレート−外部ストレージストレート”、“自装置ストレート−外部ストレージクロス”、“自装置クロス−外部ストレージストレート”、“自装置クロス−外部ストレージクロス”である。
【０１８３】
（Ｓ７５）パス制御部１７０は、選択したパスのＲＥＡＤ／ＷＲＩＴＥのＩＯ性能が外部ＬＵ＃０性能閾値テーブル１５４に設定されたＲＥＡＤ／ＷＲＩＴＥの性能閾値未満であるか否かを判定する。ＲＥＡＤ／ＷＲＩＴＥのＩＯ性能の両方が性能閾値未満の場合、パス制御部１７０は、ステップＳ７９に処理を進める。ＲＥＡＤ／ＷＲＩＴＥのＩＯ性能の少なくとも一方が性能閾値以上の場合、パス制御部１７０は、ステップＳ７６に処理を進める。
【０１８４】
（Ｓ７６）パス制御部１７０は、残りパス（現パス以外のパス）を全て検査済であるか否かを判定する。残りパスを全て検査済である場合、パス制御部１７０は、ステップＳ７７に処理を進める。残りパスを全て検査済でない場合、パス制御部１７０は、ステップＳ７４に処理を進める。
【０１８５】
（Ｓ７７）パス制御部１７０は、ステップＳ７３で設定した外部ＬＵパス情報１５１の異常パス情報および外部ＬＵ＃０性能閾値テーブル１５４の異常補正中フラグをクリアする。その結果、外部ＬＵパス情報１５１の異常パス情報からステップＳ７３で設定したパスの情報が削除される。また、外部ＬＵ＃０性能閾値テーブル１５４の推奨パス補正中フラグは、“ｏｆｆ”となる。
【０１８６】
（Ｓ７８）パス制御部１７０は、元のパス（現パス）でＩＯを継続する。そして、パス制御部１７０は、ＩＯ性能に応じたパス切り替えを終了する。
（Ｓ７９）パス制御部１７０は、ＩＯに使用するパスを、現パスからステップＳ７４で選択したパスに切り替える。そして、パス制御部１７０は、ＩＯ性能に応じたパス切り替えを終了する。
【０１８７】
こうして、ＣＭ１１０は、推奨パスのＩＯ性能が性能閾値を満たしていない場合に、ＩＯ性能が性能閾値を満たす別のパスに切り替えることで、外部ストレージ装置２００に対するアクセスを高速化できる。ただし、ＣＭ１１０における各パスで観測したＩＯ性能が性能閾値を超過している場合、アクセスを中断させないために、現パスを継続して使用する。
【０１８８】
例えば、ＣＭ１１０は、図１３の手順により最高優先度のパスを使用中に、当該パスのＩＯ実行数が閾値（ＩＯ発行上限）に達していない場合でも、当該パスを介した外部ストレージ装置２００に対する通信の応答時間が性能閾値に達している場合には、ＩＯコマンドの送信に使用するポートの切り替えを行う。
【０１８９】
また、前述のように、ＣＭ１１０は、なるべく優先度の高いパスを使用した方が、より高速なアクセスを実現可能である。そこで、ＣＭ１１０は、図１８の手順により使用するパスを変更した後、下記のパス復旧制御を行う。
【０１９０】
図１９は、パス復旧制御の例を示すフローチャートである。以下、図１９に示す処理をステップ番号に沿って説明する。
（Ｓ８１）パス制御部１７０は、推奨パス異常補正フラグｏｎのパス（監視対象パス）について監視ＲＥＡＤコマンドにより該当の外部ＬＵに対するレスポンスタイムの監視を実行する。監視ＲＥＡＤコマンドは、該当の外部ＬＵに対するＲＥＡＤを行う監視用のコマンド（監視コマンド）である。パス制御部１７０は、監視対象パスに対して、監視ＲＥＡＤコマンドによる監視を定期的に行う。
【０１９１】
（Ｓ８２）パス制御部１７０は、外部ＬＵ＃０性能閾値テーブル１５４を参照して、外部ＬＵ＃０への監視対象パスを介したＲＥＡＤ性能（レスポンスタイム）が性能閾値未満であるか否かを判定する。ＲＥＡＤ性能が性能閾値未満である場合、パス制御部１７０は、ステップＳ８３に処理を進める。ＲＥＡＤ性能が性能閾値以上の場合、パス制御部１７０は、ステップＳ８１に処理を進める。
【０１９２】
（Ｓ８３）パス制御部１７０は、ステップＳ７３で設定した外部ＬＵパス情報１５１の異常パス情報および外部ＬＵ＃０性能閾値テーブル１５４の異常補正中フラグをクリアする。その結果、外部ＬＵパス情報１５１の異常パス情報からステップＳ７３で設定したパスの情報が削除される。また、外部ＬＵ＃０性能閾値テーブル１５４の推奨パス補正中フラグは、“ｏｆｆ”となる。
【０１９３】
（Ｓ８４）パス制御部１７０は、外部ＬＵ＃０に対して使用するパスを、監視対象パスに切り替える。パス制御部１７０は、ＩＯ処理部１８０によるＩＯ処理を起動し、外部ＬＵ＃０に対して該当パス（監視対象パスであったパス）を使用してＩＯコマンドを送信させる（ＩＯ実行）。
【０１９４】
（Ｓ８５）パス制御部１７０は、外部ＬＵ＃０性能閾値テーブル１５４を参照して、ＲＥＡＤ／ＷＲＩＴＥ性能（ＲＥＡＤ性能およびＷＲＩＴＥ性能の両方）が性能閾値未満であるか否かを判定する。ＲＥＡＤ性能およびＷＲＩＴＥ性能の両方が性能閾値未満である場合、パス制御部１７０は、パス復旧制御を終了する。ＲＥＡＤ性能およびＷＲＩＴＥ性能の少なくとも一方が性能閾値未満でない場合、パス制御部１７０は、ステップＳ８６に処理を進める。
【０１９５】
（Ｓ８６）パス制御部１７０は、ＩＯ性能に応じたパス切り替えの処理（図１８）を実行する。そして、パス制御部１７０は、パス復旧制御を終了する。
このように、ＣＭ１１０は、応答時間と性能閾値との比較結果に基づいて使用するポートの切り替えを行った場合、切り替え前のポートを介して監視コマンドを外部ストレージ装置２００に送信して応答時間の監視を行う。ＣＭ１１０は、当該応答時間が性能閾値未満になると、外部ストレージ装置２００へのＩＯコマンドの送信に使用するポートを、切り替え前のポートに戻す。こうして、ＣＭ１１０は、外部ＬＵへのアクセスに関してオーバーヘッドが比較的小さいパスを用いることで、外部ストレージ装置２００に対するアクセスを高速化できる。
【０１９６】
ここで、第２の実施の形態のストレージシステムのように、ストレージ装置１００から外部ストレージ装置２００へのパスを複数用意し、パスを切り替えて、複数のパスにアクセスを分散することが考えられる。しかし、ストレージ装置１００は、外部ストレージ装置２００が備える物理構成（ＣＭ２１０，２２０、ホストポート２１５，２１５ａ，２２５，２２５ａおよびＨＤＤなど）の動作状況を監視できない。このため、ストレージ装置１００側で、外部ストレージ装置２００の動作状態の変化を観測してパスの切り替えのタイミングを判断することは難しい。
【０１９７】
そこで、ストレージ装置１００は、現在使用中の第１のパスを介した入出力の処理状況に基づいて、次のコマンドの送信に使用するポートを、第１のパスとは異なる第２のパスに属するポートに切り替える。例えば、ストレージ装置１００は、第１のパスに属する外部ストレージアクセスポートにおける応答未受信のＩＯコマンドの発行数により、何らかの要因で外部ストレージ装置２００に対するデータの入出力処理に遅滞が生じる可能性（前兆）があることを検出する。ストレージ装置１００は、当該前兆の検出に応じて、使用ポートの切り替えを行う。これにより、ストレージ装置１００は、外部ストレージ装置２００側の動作状況を直接把握できなくても、コマンド送信に使用するポート（あるいはパス）を、適切なタイミングで切り替えることができる。特に、外部ストレージ装置２００に対するデータの入出力処理に遅滞が生じる前に、別のパス（別の外部ストレージアクセスポートまたはＣＭ間通信ポート）に入出力処理を分散させることができる。こうして、何らかの原因で使用中のパスを使用したＩ／Ｏ処理が溜まってきたことを判断し、他のパスに切り替えることで、パスの最適化を図れる。
【０１９８】
また、応答未受信のコマンドの発行数（ＩＯ実行数）が多いほど、各ポートのために使用されているメモリリソース（ＲＡＭ１１２のリソース）の量も多くなる。一方、各ポートに対して割り当てられるメモリリソースには上限がある。このため、上記のようにして外部ストレージ装置２００へのパスを切り替えることで、ストレージ装置１００の各ポートに対応するメモリリソースを分散して使用可能になる。更に、ＣＭ間通信のオーバーヘッドが小さいパス（優先度の高い）パスを優先して使用することで、外部ストレージ装置２００に対するＩＯ性能を確保し、また、外部ストレージ装置２００へのアクセス流量をＣＭ１１０により適切に制御できる。これにより、ＣＭ１１０のリソースを効率的に使用できる。
【０１９９】
なお、第１の実施の形態の情報処理は、処理部１１ｂにプログラムを実行させることで実現できる。また、第２の実施の形態の情報処理は、プロセッサ１１１にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体７０に記録できる。
【０２００】
例えば、プログラムを記録した記録媒体７０を配布することで、プログラムを流通させることができる。記録媒体７０として、フレキシブルディスク（ＦＤ：Flexible Disk）、ＣＤ（Compact Disc）、ＤＶＤ（Digital Versatile Disc）およびＢｌｕ−ｒａｙ（登録商標）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）などを使用してもよい。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体７０に記録されたプログラムまたは他のコンピュータから受信したプログラムを、ＲＡＭ１１２やフラッシュメモリ１１３などの記憶装置に格納し（インストールし）、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【０２０１】
１  ストレージシステム
１０，２０  ストレージ装置
１１，１２，２１，２２  ストレージ制御装置
１１ａ，１２ａ，２１ａ，２２ａ  記憶部
１１ｂ，１２ｂ，２１ｂ，２２ｂ  処理部
１１ｃ，１１ｄ，１１ｅ，１２ｃ，１２ｄ，１２ｅ，２１ｃ，２１ｄ，２１ｅ，２２ｃ，２２ｄ，２２ｅ  ポート
１３，２３  収納部
１３ａ，１３ｂ，１３ｃ，２３ａ，２３ｂ，２３ｃ  記憶デバイス
３０  情報処理装置
４０  ネットワーク
Ｖ１  ボリューム
【図１】
2019095971.tif 000003
【図２】
2019095971.tif 000004
【図３】
2019095971.tif 000005
【図４】
2019095971.tif 000006
【図５】
2019095971.tif 000007
【図６】
2019095971.tif 000008
【図７】
2019095971.tif 000009
【図８】
2019095971.tif 000010
【図９】
2019095971.tif 000011
【図１０】
2019095971.tif 000012
【図１１】
2019095971.tif 000013
【図１２】
2019095971.tif 000014
【図１３】
2019095971.tif 000015
【図１４】
2019095971.tif 000016
【図１５】
2019095971.tif 000017
【図１６】
2019095971.tif 000018
【図１７】
2019095971.tif 000019
【図１８】
2019095971.tif 000020
【図１９】
2019095971.tif 000021