(57)【要約】【課題】新規論理ボリュームを管理するためのストレージコントローラの選択を、好ましい入出力性能が得られるように適正化する。【解決手段】各々が１つ以上の物理的記憶装置の集まりである第１の数の論理ユニットのうちの２つ以上に断片化された論理ボリュームの作成を求める作成要求が受信される（Ｓ１）。そして、それぞれ１つ以上の論理ボリュームを管理する第２の数のストレージコントローラの１つが選択される（Ｓ２）。選択されたストレージコントローラは、新たな論理ボリュームを作成するように命令される（Ｓ３）。具体的には、各ストレージコントローラについて内部処理時間を示す時間情報に基づいて、上記選択が行われる。上記内部処理時間は、ストレージコントローラが論理ボリュームに対する入出力要求を受信してから、入出力要求に対する応答を送信するまでの時間のうち、ストレージコントローラの内部での処理にかかる時間である。【選択図】図１
2014130387.tif 000002
【特許請求の範囲】
【請求項１】
各々が１つ以上の物理的記憶装置の集まりである第１の数の論理ユニットのうちの２つ以上に断片化された論理ボリュームの作成を求める作成要求を受信する作成要求受信部と、
それぞれ１つ以上の論理ボリュームを管理する第２の数のストレージコントローラの各々について、当該ストレージコントローラが、当該ストレージコントローラの管理する前記１つ以上の論理ボリュームのうちの１つの論理ボリュームに対する入出力要求を受信する要求受信時点から、当該ストレージコントローラが、前記入出力要求に応じて、当該１つの論理ボリュームが断片化されている先の２つ以上の論理ユニットのうちの少なくとも１つの論理ユニットにアクセスした後、前記少なくとも１つの論理ユニットへのアクセスの結果にしたがって、前記入出力要求に対する応答を送信する応答送信時点までの時間のうち、当該ストレージコントローラの内部での処理にかかる内部処理時間を示す時間情報を記憶する時間記憶部と、
前記作成要求受信部が前記作成要求を受信すると、前記時間記憶部に記憶された前記時間情報に基づいて、前記第２の数のストレージコントローラのうちで前記内部処理時間が相対的に短いストレージコントローラを選択し、選択した前記ストレージコントローラに、前記第１の数の論理ユニットのうちの２つ以上に断片化した新たな論理ボリュームを作成するよう命令する選択部と、
を備えるストレージコントローラ選択システム。
【請求項２】
前記作成要求受信部と前記選択部が、前記第２の数のストレージコントローラのうちの１つに含まれ、
前記第２の数のストレージコントローラの各々は、
当該ストレージコントローラが受信する複数の入出力要求の各々について、当該入出力要求に応じてかかる前記内部処理時間を計測し、
当該ストレージコントローラに関して前記時間記憶部に記憶されている前記時間情報を、計測した前記内部処理時間に基づいて更新するか、または、前記時間情報の算出用の別の情報を、前記選択部からアクセス可能な記憶装置に記憶する
ことを特徴とする請求項１に記載のストレージコントローラ選択システム。
【請求項３】
前記時間情報は、過去のある期間内に生じた複数の入出力要求それぞれに対応する前記内部処理時間から得られる統計量である
ことを特徴とする請求項１または２に記載のストレージコントローラ選択システム。
【請求項４】
前記内部処理時間は、前記要求受信時点から前記応答送信時点までの時間から、前記少なくとも１つの論理ユニットへの前記アクセスの前記結果の受信を待つ時間を除外した時間である
ことを特徴とする請求項１から３のいずれか１項に記載のストレージコントローラ選択システム。
【請求項５】
コンピュータが、
各々が１つ以上の物理的記憶装置の集まりである第１の数の論理ユニットのうちの２つ以上に断片化された論理ボリュームの作成を求める作成要求を受信し、
それぞれ１つ以上の論理ボリュームを管理する第２の数のストレージコントローラの各々について、当該ストレージコントローラが、当該ストレージコントローラの管理する前記１つ以上の論理ボリュームのうちの１つの論理ボリュームに対する入出力要求を受信する要求受信時点から、当該ストレージコントローラが、前記入出力要求に応じて、当該１つの論理ボリュームが断片化されている先の２つ以上の論理ユニットのうちの少なくとも１つの論理ユニットにアクセスした後、前記少なくとも１つの論理ユニットへのアクセスの結果にしたがって、前記入出力要求に対する応答を送信する応答送信時点までの時間のうち、当該ストレージコントローラの内部での処理にかかる内部処理時間を示す時間情報を取得し、
前記時間情報に基づいて、前記第２の数のストレージコントローラのうちで前記内部処理時間が相対的に短いストレージコントローラを選択し、
選択した前記ストレージコントローラに、前記第１の数の論理ユニットのうちの２つ以上に断片化した新たな論理ボリュームを作成するよう命令する
ストレージコントローラ選択方法。
【請求項６】
コンピュータに、
各々が１つ以上の物理的記憶装置の集まりである第１の数の論理ユニットのうちの２つ以上に断片化された論理ボリュームの作成を求める作成要求を受信し、
それぞれ１つ以上の論理ボリュームを管理する第２の数のストレージコントローラの各々について、当該ストレージコントローラが、当該ストレージコントローラの管理する前記１つ以上の論理ボリュームのうちの１つの論理ボリュームに対する入出力要求を受信する要求受信時点から、当該ストレージコントローラが、前記入出力要求に応じて、当該１つの論理ボリュームが断片化されている先の２つ以上の論理ユニットのうちの少なくとも１つの論理ユニットにアクセスした後、前記少なくとも１つの論理ユニットへのアクセスの結果にしたがって、前記入出力要求に対する応答を送信する応答送信時点までの時間のうち、当該ストレージコントローラの内部での処理にかかる内部処理時間を示す時間情報を取得し、
前記時間情報に基づいて、前記第２の数のストレージコントローラのうちで前記内部処理時間が相対的に短いストレージコントローラを選択し、
選択した前記ストレージコントローラに、前記第１の数の論理ユニットのうちの２つ以上に断片化した新たな論理ボリュームを作成するよう命令する
ことを含む処理を実行させるためのストレージコントローラ選択プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージコントローラを選択する技術に関する。
【背景技術】
【０００２】
データセンタや個々の企業内などで、多くのストレージシステムが使われている。ストレージシステムの中には、複数のストレージコントローラを含むシステムもある。
【０００３】
複数のストレージコントローラを含むシステムにおいて、新規論理ボリュームを作成する場合、どのストレージコントローラが新規論理ボリュームを管理するかによって、入出力性能が影響を受ける。つまり、新規論理ボリュームの作成後、新規論理ボリュームに対する入出力要求が発生すると、当該入出力要求に関する性能（例えばレイテンシ）は、「どのストレージコントローラが新規論理ボリュームを管理するのか」ということによって異なり得る。
【０００４】
よって、好ましい入出力性能が得られるように、適切なストレージコントローラを選択することが望ましい。選択のための一つの観点は、負荷分散である。
【０００５】
負荷分散は、ストレージシステムの分野のみならず、サーバクラスタ、複数のコンピュータ間でのデータの分配など、様々な分野において研究されている。
【０００６】
例えば、あるデータ分配方法は、複数のコンピュータで処理されるデータを、各コンピュータへ分配するための方法である。当該データ分配方法は、各コンピュータの処理性能に応じた適切なサイズのデータを複数のコンピュータに分配し、データを処理する際に各コンピュータの処理性能を最大限に活用できるようにすることを目的とする。
【０００７】
具体的には、当該データ分配方法は、データの分配される各コンピュータの処理性能を取得して記憶装置に格納するステップを含む。また、当該データ分配方法は、複数のコンピュータに分配される各データのサイズを取得して記憶装置に格納するステップを含む。さらに、当該データ分配方法は、格納した処理性能とデータサイズを記憶装置から読み出し、各コンピュータでの当該データの処理に必要な予想所要時間を算出し、算出した結果に基づきデータの分配先を決定するステップを含む。
【０００８】
ここで、処理性能の取得のためには、例えば、テストデータに対する処理時間を測定して記憶装置に格納し、その処理時間の値から処理性能を算出する方法が採用されてもよい。広義の処理時間の測定は、例えばある種のエージェントプログラム監視方法においても、負荷状態の判定などのために行われることがある。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００３−３６２１０号公報
【特許文献２】特開２００６−１１３８６８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
負荷分散は様々な分野で研究されている。しかし、どの分野にとっても一律に同じ方法が有効だとは限らない。ストレージコントローラの選択においては、ストレージシステムとは異なる分野のために開発された負荷分散手法を応用するよりも、ストレージシステムに適した手法を利用する方が、より好ましいストレージコントローラが選択されると期待される。
【００１１】
本発明は、１つの側面では、新規論理ボリュームを管理するためのストレージコントローラの選択を、好ましい入出力性能が得られるように適正化することを目的とする。
【課題を解決するための手段】
【００１２】
一態様によるストレージコントローラ選択システムは、作成要求受信部と時間記憶部と選択部を有する。
【００１３】
前記作成要求受信部は、各々が１つ以上の物理的記憶装置の集まりである第１の数の論理ユニットのうちの２つ以上に断片化された論理ボリュームの作成を求める作成要求を受信する。
【００１４】
前記時間記憶部は、それぞれ１つ以上の論理ボリュームを管理する第２の数のストレージコントローラの各々について、内部処理時間を示す時間情報を記憶する。ここで、当該ストレージコントローラが、当該ストレージコントローラの管理する前記１つ以上の論理ボリュームのうちの１つの論理ボリュームに対する入出力要求を受信する時点を、要求受信時点ということにする。また、当該ストレージコントローラが、前記入出力要求に応じて、当該１つの論理ボリュームが断片化されている先の２つ以上の論理ユニットのうちの少なくとも１つの論理ユニットにアクセスした後、前記少なくとも１つの論理ユニットへのアクセスの結果にしたがって、前記入出力要求に対する応答を送信する時点を、応答送信時点ということにする。前記内部処理時間は、前記要求受信時点から前記応答送信時点までの時間のうち、当該ストレージコントローラの内部での処理にかかる時間である。
【００１５】
前記選択部は、前記作成要求受信部が前記作成要求を受信すると、前記時間記憶部に記憶された前記時間情報に基づいて、前記第２の数のストレージコントローラのうちで前記内部処理時間が相対的に短いストレージコントローラを選択する。そして、前記選択部は、選択した前記ストレージコントローラに、前記第１の数の論理ユニットのうちの２つ以上に断片化した新たな論理ボリュームを作成するよう命令する。
【発明の効果】
【００１６】
上記のストレージコントローラ選択システムによれば、新規論理ボリュームを管理するためのストレージコントローラの選択を、好ましい入出力性能が得られるように適正化することが可能となる。
【図面の簡単な説明】
【００１７】
【図１】ストレージコントローラ選択方法のフローチャートである。
【図２】ストレージシステムでの新規論理ボリュームの追加について説明する図である。
【図３】論理ボリュームの断片化とアクティブパスとスタンバイパスについて説明する図である。
【図４】ストレージとストレージコントローラのハードウェア構成図である。
【図５】システム構成図である。
【図６】内部処理時間について説明するシーケンス図（その１）である。
【図７】内部処理時間について説明するシーケンス図（その２）である。
【図８】内部処理時間について説明するシーケンス図（その３）である。
【図９】内部処理時間について説明するシーケンス図（その４）である。
【図１０】各種データを例示する図（その１）である。
【図１１】第１実施形態のストレージコントローラがＩ／Ｏ要求の受信に応じて行う処理のフローチャートである。
【図１２】ストレージコントローラが定期的に行う処理のフローチャートである。
【図１３】新規論理ボリュームの追加を示すシーケンス図である。
【図１４】各種データを例示する図（その２）である。
【図１５】各種データを例示する図（その３）である。
【図１６】内部処理時間について説明するシーケンス図（その５）である。
【図１７】内部処理時間について説明するシーケンス図（その６）である。
【図１８】第２実施形態のストレージコントローラがＩ／Ｏ要求の受信に応じて行う処理のフローチャート（その１）である。
【図１９】第２実施形態のストレージコントローラがＩ／Ｏ要求の受信に応じて行う処理のフローチャート（その２）である。
【発明を実施するための形態】
【００１８】
以下、実施形態について、図面を参照しながら詳細に説明する。具体的には、まず、図１を参照して第１実施形態によるストレージコントローラ選択方法の概要を説明する。次に、図２〜５を参照して、システム構成について説明する。その後、図６〜９を参照して、ストレージコントローラの内部処理時間の例をいくつか説明する。さらに、図１０〜１５を参照して、第１実施形態で行われる処理と、各種データについて説明する。その後、図１６〜１９を参照して第２実施形態について説明する。最後に、その他の変形例についても説明する。
【００１９】
さて、図１は、ストレージコントローラ選択方法のフローチャートである。図１の方法は、第１の数の論理ユニットと第２の数のストレージコントローラを含むストレージシステムにおいて、新規論理ボリュームを作成する際に、新規論理ボリュームを管理するストレージコントローラを選択するための方法である。第１の数は２以上であり、第２の数も２以上である。第１の数と第２の数は、等しくてもよいし、異なっていてもよい。
【００２０】
第１の数の論理ユニットの各々は、１つ以上の物理的記憶装置の集まりである。換言すれば、１つの論理ユニットは、１つ以上の物理的記憶装置により実現される。各論理ユニットは、１つのＬＵＮ（Logical Unit Number）により識別されてもよい。
【００２１】
物理的記憶装置は、具体的にはランダムアクセス式の記憶装置である。物理的記憶装置は、例えばＨＤＤ（Hard Disk Drive）でもよいし、ＳＳＤ（Solid-State Drive）でもよい。以下では説明の簡単化のため、物理的記憶装置がＨＤＤであるものとする。
【００２２】
図１の方法は、例えば、作成要求受信部と時間記憶部と選択部を有するストレージコントローラ選択システムにおいて実行される。作成要求受信部と選択部は、具体的には、プログラムを実行するコンピュータにより実現されてもよい。
【００２３】
ストレージコントローラ選択システムは、ストレージコントローラの１つとハードウェアを共有していてもよい。具体的には、例えば、作成要求受信部と選択部は、第２の数のストレージコントローラのうちの１つに含まれていてもよい。例えば、後述の図５の例では、作成要求受信部３０８と選択部３０９がストレージコントローラ１２０ａに含まれており、時間記憶部の一例としての共有ディスク１７０が、ストレージコントローラ１２０ａとネットワーク１３０を介して接続される。
【００２４】
このように、作成要求受信部と選択部がストレージコントローラに含まれる場合は、当該ストレージコントローラが、図１の方法を実行する。より詳しくは、ある１つのストレージコントローラ内のコンピュータ（つまり当該ストレージコントローラ内のプロセッサ）が、図１の方法を実行してもよい。
【００２５】
具体的には、ステップＳ１で作成要求受信部が、新規論理ボリュームの作成を求める作成要求を受信する。作成要求は、例えば、端末の入力装置を介したユーザからの入力に応じて、端末から作成要求受信部へと送信されてもよい。
【００２６】
第１実施形態における各論理ボリュームは、第１の数の論理ユニットのうちの２つ以上に断片化された（fragmented）ボリュームである。換言すれば、各論理ボリュームは、２つ以上の論理ユニットに分散している。また、上記第２の数のストレージコントローラの各々は、１つ以上の論理ボリュームを管理する。
【００２７】
上記のとおりステップＳ１で作成要求が受信されると、次に、ステップＳ２では、選択部が、新規論理ボリュームを管理するためのストレージコントローラを選択する。つまり、選択部は、「新規論理ボリュームに対する入出力要求を、どのストレージコントローラが仲介する（interface）のか」を決定する。なお、以下では「入出力要求」（input-output request）を「Ｉ／Ｏ要求」と略す。
【００２８】
具体的には、選択部は、時間記憶部に記憶された時間情報に基づいて、第２の数のストレージコントローラのうちで内部処理時間が相対的に短いストレージコントローラを選択する。例えば、選択部は、Ｉ／Ｏ要求１件あたりの内部処理時間が最短のストレージコントローラを選択することが好ましい。しかし、選択部は、例えば、内部処理時間が２番目に短いストレージコントローラを選択してもよい。
【００２９】
また、選択部は、時間情報と適宜の閾値の双方に基づいてストレージコントローラを選択してもよい。例えば、適宜の閾値Ｘ１が決められている場合、選択部は、内部処理時間が短い方からＸ１番目以内の任意のストレージコントローラを選択してもよい。同様に、適宜の閾値Ｘ２が決められている場合、選択部は、内部処理時間が短い方からＸ２％以内の任意のストレージコントローラを選択してもよい。また、適宜の閾値Ｘ３が決められている場合、選択部は、内部処理時間がＸ３以下の任意のストレージコントローラを選択してもよい。
【００３０】
内部処理時間の詳細については、図６〜９とともに後述するが、概要を説明すれば以下のとおりである。
【００３１】
あるストレージコントローラが、当該ストレージコントローラの管理する１つ以上の論理ボリュームのうちの１つの論理ボリュームに対するＩ／Ｏ要求を受信する時点を、「要求受信時点」ということにする。当該ストレージコントローラは、受信した当該Ｉ／Ｏ要求に応じて、当該１つの論理ボリュームが断片化されている先の２つ以上の論理ユニットのうちの少なくとも１つの論理ユニットにアクセスする。
【００３２】
例えば、４つの論理ユニットに断片化されている論理ボリュームに対するＩ／Ｏ要求を受信すると、当該ストレージコントローラは、４つの論理ユニットのうちの１つにだけアクセスする場合もあり得る。Ｉ／Ｏ要求の内容によっては、当該ストレージコントローラは、４つの論理ユニットのうちの２つにアクセスする場合もあり得るし、３つにアクセスする場合もあり得るし、４つにアクセスする場合もあり得る。
【００３３】
いずれにせよ、当該ストレージコントローラは、論理ボリュームが断片化されている先の２つ以上の論理ユニットのうちの少なくとも１つの論理ユニットにアクセスする。そして、当該ストレージコントローラは、当該少なくとも１つの論理ユニットへのアクセスの結果にしたがって、Ｉ／Ｏ要求に対する応答を送信する。こうして当該ストレージコントローラが応答を送信する時点を、「応答送信時点」ということにする。
【００３４】
内部処理時間は、要求受信時点から応答送信時点までの時間のうち、当該ストレージコントローラの内部での処理にかかる時間である。換言すれば、内部処理時間は、当該ストレージコントローラの内部での処理に起因する遅延時間である。
【００３５】
より詳しくは、内部処理時間は、要求受信時点から応答送信時点までの時間から、上記少なくとも１つの論理ユニットへのアクセスの結果の受信を待つ時間を、除外した時間であってもよい。なぜなら、待ち時間はストレージコントローラの性能とは無関係だからである。
【００３６】
他方、内部処理時間は、Ｉ／Ｏ要求がストレージコントローラ内でキューイングされている（queued）時間を含んでいてもよい。なぜなら、Ｉ／Ｏ要求がキューイングされている時間は、（ストレージコントローラの性能以外の要因の影響も受けるものの）ストレージコントローラの性能（例えば、ストレージコントローラ内のプロセッサのクロック周波数など）に影響されるからである。
【００３７】
時間記憶部は、具体的には、第２の数のストレージコントローラの各々について、内部処理時間を示す時間情報を記憶する。よって、ステップＳ２で選択部は、時間記憶部に記憶された時間情報に基づいて、内部処理時間が相対的に短いストレージコントローラを選択することができる。
【００３８】
時間情報は、１つのＩ／Ｏ要求に対応する内部処理時間そのものを示す情報であってもよい。しかし、時間情報は、過去のある期間内に生じた複数のＩ／Ｏ要求それぞれに対応する内部処理時間から得られる統計量（statistic）であることが好ましい。統計量の一例は、算術平均であり、統計量の他の例は、Ｉ／Ｏ要求の受信時刻に応じた重みによる重み付け平均である。
【００３９】
例えば、各ストレージコントローラは、当該ストレージコントローラが受信する複数のＩ／Ｏ要求の各々について、当該Ｉ／Ｏ要求に応じてかかる内部処理時間を計測してもよい。そして、各ストレージコントローラは、当該ストレージコントローラに関して時間記憶部に記憶されている時間情報を、計測した内部処理時間に基づいて更新してもよい。
【００４０】
この場合、時間記憶部は、第２の数のストレージコントローラとネットワークを介して接続されていてもよい。また、この場合、統計量としての時間情報を、Ｉ／Ｏ要求の発生のたびに更新することが可能である。つまり、この場合、内部処理時間の実測値の変動に時間情報を追従させることが可能である。したがって、実測値の変動を反映した時間情報に基づいて、ステップＳ２では、より適切なストレージコントローラが選択される。
【００４１】
さて、次のステップＳ３で選択部は、選択したストレージコントローラに、新規論理ボリューム（つまり、第１の数の論理ユニットのうちの２つ以上に断片化した新たなボリューム）を作成するよう命令する。すると、図１の処理は終了する。
【００４２】
なお、詳細は後述するが、ストレージコントローラに関する冗長構成が採用されてもよい。つまり、ステップＳ２で選択されるストレージコントローラは、具体的にはアクティブ・ストレージコントローラであってもよく、選択部は、さらに、スタンバイ・ストレージコントローラを選択してもよい。
【００４３】
スタンバイ・ストレージコントローラは、ステップＳ２で選択されたアクティブ・ストレージコントローラが将来故障した場合に、アクティブ・ストレージコントローラの故障に応じて、アクティブ・ストレージコントローラ代わって、論理ボリュームを管理する。選択部は、１台以上の適宜の台数のスタンバイ・ストレージコントローラを選択してもよい。選択部は、スタンバイ・ストレージコントローラも時間情報に基づいて選択してもよいし、ランダムにスタンバイ・ストレージコントローラを選択してもよい。
【００４４】
以上説明した図１のストレージコントローラ選択方法によれば、好ましい入出力性能が得られるように、適切なストレージコントローラが選択される。その理由を以下に説明する。
【００４５】
上記のとおり各論理ボリュームは、２つ以上の論理ユニットに断片化されている。そして、各論理ユニットは、１つ以上の物理的記憶装置の集まりである。したがって、ストレージシステムは複数の物理的記憶装置を含む。しかし、それらの複数の物理的記憶装置のハードウェア性能は同じとは限らない。また、ストレージコントローラ同士でも、ハードウェア性能が同じとは限らない。
【００４６】
例えば、物理的記憶装置のハードウェア性能は、以下のような項目により表される。
・シークタイム（例えば、平均シークタイム、最小シークタイム、最大シークタイムなど）
・ディスクの回転速度
・データ転送速度
・キャッシュメモリの容量
また、ストレージコントローラのハードウェア性能は、例えば、以下のような項目により表される。
・ストレージコントローラに含まれる、ＣＰＵ（Central Processing Unit）等のプロセッサの数
・各プロセッサのクロック周波数
・各プロセッサに含まれるコアの数
・各プロセッサ内のキャッシュメモリの容量
・ストレージコントローラに含まれる、ＤＲＡＭ（Dynamic Random Access Memory）等のメモリの容量
・ストレージコントローラ内のＤＲＡＭ等のメモリのアクセス速度
【００４７】
ここで、仮に、ある論理ボリュームが断片化される先の論理ユニットが、いずれも、ハードウェア性能の低い物理的記憶装置により実現されているものとする。この場合、当該論理ボリュームに対するＩ／Ｏ要求に関するＩ／Ｏ性能は低い。逆に、ある論理ボリュームの断片化される先の論理ユニットが、いずれも、ハードウェア性能の高い物理的記憶装置により実現されている場合、当該論理ボリュームに対するＩ／Ｏ要求に関するＩ／Ｏ性能は高い。
【００４８】
なお、あるＩ／Ｏ要求に関するＩ／Ｏ性能は、具体的には、例えばレイテンシにより測られる性能であってもよい。レイテンシが短いほど、Ｉ／Ｏ性能は高い。
【００４９】
さて、上記のように、物理的記憶装置のハードウェア性能の差は、Ｉ／Ｏ性能の差を招く可能性がある。しかし、この可能性は、論理ボリュームと論理ユニットを適切に対応づけることによって、ある程度軽減することが可能である。
【００５０】
なぜなら、上記のとおり個々の論理ボリュームは２つ以上の論理ユニットに断片化されるからである。したがって、「１つの論理ボリュームを、何個の、どの論理ユニットに断片化するか」を適切に決めることにより、物理的記憶装置のハードウェア性能の差をある程度吸収することが可能となる。その結果、論理ボリューム間でＩ／Ｏ性能をある程度平準化することが可能となる。
【００５１】
ところが、以上のようにして物理的記憶装置のハードウェア性能の差を吸収するだけでは、Ｉ／Ｏ性能が十分に平準化されるとは限らない。なぜなら、第１に、論理ボリューム間でＩ／Ｏ要求の量に差があり得るからである。そして、第２に、上記のとおり、ストレージコントローラ間にはハードウェア性能の差があり得るからである。
【００５２】
上記のとおり各ストレージコントローラは、１つ以上の論理ボリュームを管理する。しかし、各論理ボリュームに対するＩ／Ｏ要求の量は、異なり得る。Ｉ／Ｏ要求の量は、例えば、単位時間あたりのＩ／Ｏ要求の数、Ｉ／Ｏ要求に応じて転送されるデータの単位時間あたりの量、などによって測られてもよい。いずれにしろ、論理ボリュームごとにＩ／Ｏ要求の量が異なり得る。複数の論理ボリュームそれぞれの用途によっては、論理ボリュームごとにＩ／Ｏ要求の量が大幅に異なる場合もあり得る。
【００５３】
ある論理ボリュームに対するＩ／Ｏ要求が非常に多ければ、当該論理ボリュームを管理するストレージコントローラの負荷も高まり、当該論理ボリュームが断片化された先の論理ユニットを実現する物理的記憶装置の負荷も高まる。そして、そのような負荷の上昇が原因で、当該論理ボリュームに対するＩ／Ｏ要求に関するＩ／Ｏ性能は悪化する。他方、ある論理ボリュームに対するＩ／Ｏ要求が非常に少なければ、当該論理ボリュームに対するＩ／Ｏ要求に関するＩ／Ｏ性能は、負荷による悪影響をあまり受けない。
【００５４】
別の観点から述べれば、Ｉ／Ｏ要求の多い論理ボリュームを管理するストレージコントローラの負荷は高い。逆に、Ｉ／Ｏ要求の少ない論理ボリュームしか管理しないストレージコントローラの負荷は低い。つまり、ストレージコントローラの負荷は、ストレージコントローラが管理する（換言すれば、担当する）論理ボリュームの数だけに依存するのではなく、各論理ボリュームに対するＩ／Ｏ要求の量にも依存する。
【００５５】
しかも、ストレージコントローラの負荷は、単にＩ／Ｏ要求の量の影響を受けるだけではない。Ｉ／Ｏ要求の量自体が同じであっても、ハードウェア性能の低いストレージコントローラにとっての負荷は、ハードウェア性能が高いストレージコントローラにとっての負荷よりも、相対的に高い。
【００５６】
そして、負荷の高いストレージコントローラによって処理されるＩ／Ｏ要求に関するＩ／Ｏ性能は、負荷の低いストレージコントローラによって処理されるＩ／Ｏ要求に関するＩ／Ｏ性能よりも低い。例えば、ストレージコントローラが高負荷であるほど、レイテンシは長くなりがちである。
【００５７】
したがって、仮に、Ｉ／Ｏ要求の量が論理ボリューム間で平準化され得るとしても、ストレージコントローラ間のハードウェア性能の差に起因するＩ／Ｏ性能の偏り（imbalance）は、依然として残り得る。
【００５８】
例えば、仮に、次のような場合を想定する。
・Ｉ／Ｏ要求の量が、論理ボリューム間で平準化されている。
・各ストレージコントローラが、それぞれ同じ個数の論理ボリュームを管理する。
【００５９】
このような場合であっても、ハードウェア性能の低いストレージコントローラの負荷は、ハードウェア性能の高いストレージコントローラの負荷よりも高い。したがって、ハードウェア性能の低いストレージコントローラが管理する論理ボリュームに対するＩ／Ｏ要求に関するＩ／Ｏ性能は、ハードウェア性能の高いストレージコントローラが管理する論理ボリュームに対するＩ／Ｏ要求に関するＩ／Ｏ性能よりも低い。
【００６０】
つまり、ある論理ボリュームを管理するストレージコントローラのハードウェア性能が低い場合、当該論理ボリュームに対するＩ／Ｏ要求に関しては、Ｉ／Ｏ性能が低い。なぜなら、ストレージコントローラのハードウェア性能の低さがボトルネックになるからである。逆に、ある論理ボリュームを管理するストレージコントローラのハードウェア性能が高ければ、当該論理ボリュームに対するＩ／Ｏ要求に関しては、Ｉ／Ｏ性能が高い。
【００６１】
以上から理解されるように、Ｉ／Ｏ性能の平準化のためには、ストレージコントローラ間のハードウェア性能の差を考慮することが望ましい。そして、ストレージコントローラのハードウェア性能は、具体的には、ストレージコントローラの内部処理時間に反映される。
【００６２】
したがって、図１のように内部処理時間が相対的に短いストレージコントローラを選ぶ方法によれば、ハードウェア性能に応じた負荷が相対的に低いストレージコントローラが選ばれる。その結果、新規論理ボリュームの追加に起因するＩ／Ｏ性能の偏りは、小さく抑えられる。より詳しく説明すると、以下のとおりである。
【００６３】
既に１つ以上の論理ボリュームを管理しているストレージコントローラが、さらに新規論理ボリュームを管理するために選ばれると、当該ストレージコントローラの負荷は増える。よって、新規論理ボリュームの追加に起因するＩ／Ｏ性能の偏りを小さく抑えるためには、全ストレージコントローラの中で相対的に低負荷のストレージコントローラを、新規論理ボリュームを管理するストレージコントローラとして選択することが望ましい。
【００６４】
ここで、ストレージコントローラのハードウェア性能に応じた負荷が低いほど、内部処理時間が短い。よって、ステップＳ２のように内部処理時間が相対的に短いストレージコントローラを選択することは、相対的に低負荷のストレージコントローラ（つまり、偏りの少ない好適なＩ／Ｏ性能を得るのに適切なストレージコントローラ）を選択することを意味する。
【００６５】
よって、図１のストレージコントローラ選択方法によれば、ストレージコントローラのハードウェア性能の差を考慮することで、Ｉ／Ｏ性能が一層平準化される。Ｉ／Ｏ性能の平準化は、複数の論理ユニットと複数のストレージコントローラを含むストレージシステムにとって好ましい特徴である。
【００６６】
続いて、図２〜５を参照して、第１実施形態のシステム構成について説明する。図２は、ストレージシステムでの新規論理ボリュームの追加について説明する図である。
【００６７】
図２の仮想ストレージシステム１００は、１つ以上のストレージと複数のストレージコントローラを含む。各ストレージは、１つ以上の論理ユニットを含む。具体的には、図２には、仮想ストレージシステム１００が３つのストレージ１１０ａ〜１１０ｃと３つのストレージコントローラ１２０ａ〜１２０ｃを含む場合が例示されている。
【００６８】
ストレージ１１０ａ〜１１０ｃとストレージコントローラ１２０ａ〜１２０ｃは、ネットワーク１３０に接続されている。したがって、仮想ストレージシステム１００中の任意のストレージと、仮想ストレージシステム１００中の任意のストレージコントローラは、ネットワーク１３０を介して通信することが可能である。ネットワーク１３０は、例えば、イーサネット（登録商標）ベースのＬＡＮ（Local Area Network）でもよいし、ファイバチャネルベースのネットワークでもよい。
【００６９】
図２の例では、ストレージ１１０ａが３つの論理ユニット１１１ａ、１１２ａ、および１１３ａを提供する。紙幅の都合上、図２では、「論理ユニット（logical unit）」が「ＬＵ」と略されている。より具体的には、ストレージ１１０ａは、以下のコンポーネントを含む。
【００７０】
・論理ユニット１１１ａ〜１１３ａを実現するための、何台かの物理的記憶装置（例えば何台かのＨＤＤ）
・それら何台かの物理的記憶装置とネットワーク１３０との間の通信のための、通信インタフェイス（例えば、ネットワーク１３０がＬＡＮの場合は、「ＰＨＹチップ」および「ＭＡＣ（Media Access Control）チップ」と呼ばれる回路を含む通信回路）
・筐体（エンクロージャ）
【００７１】
ストレージ１１０ａに含まれる各ＨＤＤは、ＲＡＩＤ（Redundant Array of Independent Disks）構成のものでもよいし、非ＲＡＩＤ構成の単純なＨＤＤであってもよい。ＨＤＤの代わりにＳＳＤが物理的記憶装置として利用されてもよいし、１つのストレージの中にＨＤＤとＳＳＤの双方が含まれていてもよい。
【００７２】
また、図２の例では、ストレージ１１０ｂが３つの論理ユニット１１１ｂ、１１２ｂ、および１１３ｂを提供する。ストレージ１１０ｂも、何台かの物理的記憶装置と、通信インタフェイスと、筐体を含む。
【００７３】
また、図２の例では、ストレージ１１０ｃが３つの論理ユニット１１１ｃ、１１２ｃ、および１１３ｃを提供する。ストレージ１１０ｃも、何台かの物理的記憶装置と、通信インタフェイスと、筐体を含む。
【００７４】
なお、図２の例では、ストレージ１１０ａ〜１１０ｃがそれぞれ提供する論理ユニットの数が等しい。しかし、各ストレージが提供する論理ユニットの数は、互いに異なっていてもよい。
【００７５】
ストレージコントローラ１２０ａ〜１２０ｃは、ネットワーク１３０だけでなく、ネットワーク１４０にも接続される。ネットワーク１４０は、イーサネット（登録商標）ベースのＬＡＮ（Local Area Network）でもよいし、ファイバチャネルベースのネットワークでもよい。
【００７６】
そして、ネットワーク１４０には、１台以上のコンピュータが接続される。図２には、具体的には、コンピュータの例として、サーバ１５０ａが例示されているが、ワークステーションやＰＣ（Personal Computer）などのコンピュータがネットワーク１４０に接続されてもよい。
【００７７】
サーバ１５０ａの用途は任意である。サーバ１５０ａは、例えば、企業内またはデータセンタで使われる業務サーバ（business server）であってもよい。
【００７８】
図２に示すように、サーバ１５０ａにはマルチパスドライバ１５１ａが実装される。マルチパスドライバ１５１ａは、ストレージコントローラを介してストレージ内の記憶領域にアクセスするためのデバイスドライバである。サーバ１５０ａのＯＳ（Operating System）およびマルチパスドライバ１５１ａは、ストレージ内の論理ユニットを直接認識するのではなく、ストレージコントローラにより管理される論理ボリュームを、ブロックデバイスとして認識する。
【００７９】
図２では、理解の助けとするために、便宜上、各ストレージコントローラが管理する１つ以上の論理ボリュームを、当該ストレージコントローラの中に図示してある。しかし、上記のとおり、各論理ボリュームの実体は、２つ以上の論理ユニットに断片化された記憶領域の集まりである。なお、紙幅の都合上、図２では、「論理ボリューム（logical volume）」が「ＬＶ」と略されている。
【００８０】
図２の例では、ストレージコントローラ１２０ａが２つの論理ボリューム１２１ａと１２２ａを管理し、ストレージコントローラ１２０ｂが２つの論理ボリューム１２１ｂと１２２ｂを管理する。また、ストレージコントローラ１２０ｃは１つの論理ボリューム１２１ｃを管理する。
【００８１】
さらに、図２に破線で描かれているように、新たに論理ボリューム１２２ｃが作成されるときには、論理ボリューム１２２ｃを管理するためのストレージコントローラとして、ストレージコントローラ１２０ｃが選ばれてもよい。つまり、論理ボリューム１２２ｃを作成するための作成要求に応じて、図１のステップＳ２でストレージコントローラ１２０ｃが選ばれてもよく、ストレージコントローラ１２０ｃが、ステップＳ３の命令に応じて、論理ボリューム１２２ｃを作成してもよい。
【００８２】
なお、ある論理ボリュームを管理するストレージコントローラとは、換言すれば、当該論理ボリュームを担当するストレージコントローラのことである。ある論理ボリュームを管理するストレージコントローラは、当該論理ボリュームに対するＩ／Ｏ要求（換言すればアクセス要求）の受信に応じて、当該論理ボリュームが断片化された先の２つ以上の論理ユニットのうちの少なくとも１つにアクセスする。そして、当該ストレージコントローラは、アクセス結果に基づく応答を返す。
【００８３】
さて、図２において、各論理ボリュームからストレージへの矢印は、「論理ボリュームが断片化される先の論理ユニットが、どのストレージに含まれるか」ということを示す。換言すれば、論理ボリュームからストレージへの矢印は、「当該論理ボリュームに対するＩ／Ｏ要求をストレージコントローラが受信したときに、ストレージコントローラがどのストレージにＩ／Ｏ要求を送信するのか」ということを示す。具体的には、以下のとおりである。
【００８４】
論理ボリューム１２１ａからストレージ１１０ａと１１０ｂへの矢印は、論理ボリューム１２１ａが、ストレージ１１０ａ内の１つ以上の論理ユニットと、ストレージ１１０ｂ内の１つ以上の論理ユニットに断片化されていることを示す。よって、ストレージコントローラ１２０ａは、論理ボリューム１２１ａに対するＩ／Ｏ要求をサーバ１５０ａのマルチパスドライバ１５１ａから受信すると、ストレージ１１０ａと１１０ｂの一方または双方にＩ／Ｏ要求を送信する。また、論理ボリューム１２２ａからストレージ１１０ａと１１０ｃへの矢印は、論理ボリューム１２２ａが、ストレージ１１０ａ内の１つ以上の論理ユニットと、ストレージ１１０ｃ内の１つ以上の論理ユニットに断片化されていることを示す。
【００８５】
論理ボリューム１２１ｂからストレージ１１０ａと１１０ｂへの矢印は、論理ボリューム１２１ｂが、ストレージ１１０ａ内の１つ以上の論理ユニットと、ストレージ１１０ｂ内の１つ以上の論理ユニットに断片化されていることを示す。また、論理ボリューム１２２ｂからストレージ１１０ｂと１１０ｃへの矢印は、論理ボリューム１２２ｂが、ストレージ１１０ｂ内の１つ以上の論理ユニットと、ストレージ１１０ｃ内の１つ以上の論理ユニットに断片化されていることを示す。
【００８６】
論理ボリューム１２１ｃからストレージ１１０ａと１１０ｂへの矢印は、論理ボリューム１２１ｃが、ストレージ１１０ａ内の１つ以上の論理ユニットと、ストレージ１１０ｂ内の１つ以上の論理ユニットに断片化されていることを示す。また、論理ボリューム１２２ｃからストレージ１１０ｂと１１０ｃへの矢印は、論理ボリューム１２２ｃが、ストレージ１１０ｂ内の１つ以上の論理ユニットと、ストレージ１１０ｃ内の１つ以上の論理ユニットに断片化されていることを示す。
【００８７】
場合によっては、ある１つの論理ボリュームが、ある１つのストレージ内の２つ以上の論理ユニットにだけ断片化されていてもよい。いずれにせよ、各論理ボリュームは、２つ以上の論理ユニットに断片化される。断片化により、耐障害性とスループットが向上すると期待される。
【００８８】
ところで、仮想ストレージシステム１００は、スケールアウト型の（scale-out）ストレージシステムである。つまり、ユーザが使用したい記憶容量の増加に合わせて、ストレージとストレージコントローラを、適宜、仮想ストレージシステム１００に追加することにより、仮想ストレージシステム１００を拡張することが可能である。仮想ストレージシステム１００において、以下に示す数は、任意に定められていてよい。
【００８９】
・仮想ストレージシステム１００内のストレージの数
・各ストレージ内の論理ユニットの数
・仮想ストレージシステム１００内の論理ユニットの総数
・仮想ストレージシステム１００内のストレージコントローラの数
・各ストレージコントローラが管理する論理ボリュームの数
・仮想ストレージシステム１００内の論理ボリュームの総数
【００９０】
仮想ストレージシステム１００はスケールアウト型なので、ストレージの数、論理ユニットの総数、ストレージコントローラの数、および論理ボリュームの総数は、可変である。図２には、論理ボリューム１２２ｃの追加によって論理ボリュームの総数が増える例が示されている。
【００９１】
ところで、図１に関して少し説明したとおり、ストレージコントローラに関する冗長構成が採用されてもよい。具体的には、第１実施形態では、ストレージコントローラの故障に応じたフェイルオーバを可能とするために、各論理ボリュームについて、「アクティブパス」だけでなく「スタンバイパス」も決められる。
【００９２】
ある論理ボリュームがサーバ１５０ａからアクセス可能だとする。この場合、当該論理ボリュームについてのアクティブパスは、サーバ１５０ａから、当該論理ボリュームを管理するストレージコントローラを経由して、当該論理ボリュームが断片化された先の各論理ユニットに至るパスである。当該論理ボリュームを管理するストレージコントローラは、換言すれば、アクティブ・ストレージコントローラである。他方、当該論理ボリュームについてのスタンバイパスは、サーバ１５０ａからスタンバイ・ストレージコントローラを経由して、当該論理ボリュームが断片化された先の各論理ユニットに至るパスである。
【００９３】
アクティブ・ストレージコントローラの故障に備えて、スタンバイ・ストレージコントローラが１台以上予め選ばれる。そして、アクティブ・ストレージコントローラが故障すると、スタンバイ・ストレージコントローラのうちの１台が、新たにアクティブ・ストレージコントローラとなり、以後、当該論理ボリュームを担当する。つまり、今までのアクティブ・ストレージコントローラの故障に応じて、アクティブパスが切り換わり、アクティブパスの切り換えにより、フェイルオーバが実現される。
【００９４】
図３は、論理ボリュームの断片化とアクティブパスとスタンバイパスについて、より具体的に説明する図である。図３には、図２と同様の、ストレージ１１０ａ〜１１０ｃと、ストレージコントローラ１２０ａ〜１２０ｃと、ネットワーク１３０〜１４０と、サーバ１５０ａが示されている。ただし、図２に例示した６つの論理ボリュームのうち、論理ボリューム１２１ａのみが図３には示されており、残りの５つの論理ボリュームは、図３では省略されている。
【００９５】
その代わり、図３では、ストレージコントローラ１２０ａが管理する論理ボリューム１２１ａの詳細が例示されている。具体的には、論理ボリューム１２１ａは、図３に示すように、４つの記憶領域Ａ〜Ｄを含む。そして、記憶領域Ａの実体は論理ユニット１１１ａにあり、記憶領域Ｂの実体は論理ユニット１１２ａにあり、記憶領域Ｃの実体は論理ユニット１１１ｂにあり、記憶領域Ｄの実体は論理ユニット１１２ｂにある。すなわち、論理ボリューム１２１ａは、４つの論理ユニット１１１ａ、１１２ａ、１１１ｂ、１１２ｂに断片化している。
【００９６】
例えば、サーバ１５０ａは、「／ｄｅｖ／ｓｄａ」などの絶対パスで識別されるデバイスファイルに対応するブロックデバイスとして、論理ボリューム１２１ａを認識する。しかし、サーバ１５０ａは、ＬＵＮによってそれぞれ識別される論理ユニット１１１ａ、１１２ａ、１１１ｂ、１１２ｂ自体は認識しない。論理ボリューム１２１ａがどの論理ユニットに断片化されているのかということは、サーバ１５０ａに対して隠蔽される。
【００９７】
さて、論理ボリューム１２１ａに関するアクティブパスは、以下のとおりである。
・サーバ１５０ａから、論理ボリューム１２１ａを管理するストレージコントローラ１２０ａを経由して、論理ユニット１１１ａに至るパス
・サーバ１５０ａから、論理ボリューム１２１ａを管理するストレージコントローラ１２０ａを経由して、論理ユニット１１２ａに至るパス
・サーバ１５０ａから、論理ボリューム１２１ａを管理するストレージコントローラ１２０ａを経由して、論理ユニット１１１ｂに至るパス
・サーバ１５０ａから、論理ボリューム１２１ａを管理するストレージコントローラ１２０ａを経由して、論理ユニット１１２ｂに至るパス
【００９８】
図示の便宜上、図３では、各パスを、サーバ１５０ａから論理ボリューム１２１ａへの矢印と、論理ボリューム１２１ａから、論理ボリューム１２１ａの断片化された先の論理ユニットを含むストレージへの矢印により、示している。
【００９９】
図３に示すように、論理ボリューム１２１ａを担当するアクティブ・ストレージコントローラは、ストレージコントローラ１２０ａである。しかし、ストレージコントローラ１２０ａがいつか故障する可能性もあり得る。そこで、ストレージコントローラ１２０ａの故障に備えて、論理ボリューム１２１ａに関するスタンバイ・ストレージコントローラが選ばれる。
【０１００】
図３の例では、ストレージコントローラ１２０ｂと１２０ｃが、論理ボリューム１２１ａに関するスタンバイ・ストレージコントローラとして予め選ばれている。スタンバイ・ストレージコントローラが２台以上選ばれる場合、スタンバイ・ストレージコントローラ間に優先度が決められていてもよい。そして、アクティブ・ストレージコントローラが故障したときには、優先度の最も高いスタンバイ・ストレージコントローラが新たなアクティブ・ストレージコントローラになってもよい。
【０１０１】
なお、図３では、ストレージコントローラ１２０ｂの箱の中に、破線で論理ボリューム１２１ａが示されている。破線で示したこの論理ボリューム１２１ａは、「仮にストレージコントローラ１２０ａが故障し、故障に応じてストレージコントローラ１２０ｂがアクティブになると、ストレージコントローラ１２０ｂが論理ボリューム１２１ａを管理する」ということを示す。換言すれば、論理ボリューム１２１ａに関するスタンバイパスのうちの１組は、以下のとおりである。
【０１０２】
・サーバ１５０ａからストレージコントローラ１２０ｂを経由して論理ユニット１１１ａに至るパス
・サーバ１５０ａからストレージコントローラ１２０ｂを経由して論理ユニット１１２ａに至るパス
・サーバ１５０ａからストレージコントローラ１２０ｂを経由して論理ユニット１１１ｂに至るパス
・サーバ１５０ａからストレージコントローラ１２０ｂを経由して論理ユニット１１２ｂに至るパス
【０１０３】
同様に、図３には、ストレージコントローラ１２０ｃの箱の中にも、破線で論理ボリューム１２１ａが示されている。破線で示したこの論理ボリューム１２１ａは、「仮にストレージコントローラ１２０ａが故障し、故障に応じてストレージコントローラ１２０ｃがアクティブになると、ストレージコントローラ１２０ｃが論理ボリューム１２１ａを管理する」ということを示す。換言すれば、論理ボリューム１２１ａに関するスタンバイパスのうちの１組は、以下のとおりである。
【０１０４】
・サーバ１５０ａからストレージコントローラ１２０ｃを経由して論理ユニット１１１ａに至るパス
・サーバ１５０ａからストレージコントローラ１２０ｃを経由して論理ユニット１１２ａに至るパス
・サーバ１５０ａからストレージコントローラ１２０ｃを経由して論理ユニット１１１ｂに至るパス
・サーバ１５０ａからストレージコントローラ１２０ｃを経由して論理ユニット１１２ｂに至るパス
【０１０５】
このように、仮想ストレージシステム１００では、各論理ボリュームに関して、予め、アクティブパスのほかにスタンバイパスも決められる。サーバ１５０ａのマルチパスドライバ１５１ａは、アクティブパスとスタンバイパスを予め認識している。そして、マルチパスドライバ１５１ａは、論理ボリュームに対するＩ／Ｏ要求を、当該論理ボリュームに関するアクティブパス上のストレージコントローラに送信する。
【０１０６】
なお、フェイルオーバが起きると、今までのスタンバイパスが新たにアクティブパスとなる。マルチパスドライバ１５１ａは、Ｉ／Ｏ要求の送信時のアクティブパスに応じて、アクティブパス上のストレージコントローラにＩ／Ｏ要求を送信する。
【０１０７】
例えば、ストレージコントローラ１２０ａが正常に動作している間は、マルチパスドライバ１５１ａは、論理ボリューム１２１ａに対するＩ／Ｏ要求を、ストレージコントローラ１２０ａに送信する。ストレージコントローラ１２０ａが故障してストレージコントローラ１２０ｂが新たなアクティブ・ストレージコントローラとなると、マルチパスドライバ１５１ａは、論理ボリューム１２１ａに対するＩ／Ｏ要求を、ストレージコントローラ１２０ｂに送信する。
【０１０８】
例えば、マルチパスドライバ１５１ａは、論理ボリューム１２１ａに対するＩ／Ｏ要求をストレージコントローラ１２０ａに送信すると、ストレージコントローラ１２０ａからの応答の受信を待つ。Ｉ／Ｏ要求の送信後に所定の時間が経過しても、ストレージコントローラ１２０ａから応答が受信されない場合、マルチパスドライバ１５１ａは、「現在のアクティブパス上のストレージコントローラ１２０ａが故障した」と判断してもよい。さらに、マルチパスドライバ１５１ａは、例えば、「論理ボリューム１２１ａに関するアクティブ・ストレージコントローラが、ストレージコントローラ１２０ａからストレージコントローラ１２０ｂに切り換わった」と判断してもよい。そして、マルチパスドライバ１５１ａは、ストレージコントローラ１２０ｂにＩ／Ｏ要求を送信してもよい。フェイルオーバは、例えば以上のようにして実現される。
【０１０９】
なお、図３では省略されているが、仮想ストレージシステム１００は、各ストレージコントローラからアクセス可能な共有記憶装置（例えば図５の共有ディスク１７０）を含む。そして、「論理ボリューム１２１ａの記憶領域Ａ〜Ｄが、それぞれどの論理ユニットに対応するのか」を示す対応関係情報が、論理ボリューム１２１ａの作成時に共有記憶装置に記憶される。
【０１１０】
よって、フェイルオーバが生じると、新たにアクティブとなったストレージコントローラ１２０ｂは、共有記憶装置上の対応関係情報を参照することで、「論理ボリューム１２１ａがどの論理ユニットに断片化されているのか」を認識することができる。この認識にしたがい、ストレージコントローラ１２０ｂは、以後、論理ボリューム１２１ａを管理することができる。つまり、この認識に基づいて、ストレージコントローラ１２０ｂは、論理ボリューム１２１ａに対するＩ／Ｏ要求の受信に応じて、ストレージ１１０ａと１１０ｂの一方または双方に適宜Ｉ／Ｏ要求を送信することができる。
【０１１１】
ところで、図３に例示したような論理ボリュームの断片化により、耐障害性が向上すると期待され、スループットも向上すると期待される。そして、断片化にはさらなる効果もある。つまり、断片化には、「物理的記憶装置のハードウェア性能の差をある程度吸収することにより、Ｉ／Ｏ性能をある程度平準化することができる」という上述の効果もある。この効果は、仮想ストレージシステム１００のようなスケールアウト型のシステムにおいて、特に有意義である。
【０１１２】
なぜなら、スケールアウト型のストレージシステムにおいては、ストレージのハードウェア性能が不均一になりがちだからである。ストレージのハードウェア性能は年々進化するので、後からシステムに追加されるストレージのハードウェア性能は、以前からシステムに含まれるストレージのハードウェア性能より高い場合が多い。よって、ハードウェア性能が不均一な複数のストレージを含むシステム内でＩ／Ｏ性能を平準化するためには、図３に例示したように、各論理ボリュームが２つ以上の論理ユニットに断片化されることが望ましい。
【０１１３】
しかし、上述のとおり、物理的記憶装置のハードウェア性能の差を吸収するだけでは、Ｉ／Ｏ性能が十分に平準化されるとは限らない。その１つ目の理由は、上述のとおり、各論理ボリュームに対するＩ／Ｏ要求の量が異なり得るからである。
【０１１４】
例えば、図２の例では、論理ボリューム１２２ｃが追加される前の状態は以下のとおりである。
【０１１５】
・ストレージコントローラ１２０ａは、２つの論理ボリューム１２１ａと１２２ａを担当する。つまり、ストレージコントローラ１２０ａは、論理ボリューム１２１ａに関するアクティブパス上にあり、論理ボリューム１２２ａに関するアクティブパス上にもある。
・ストレージコントローラ１２０ｂは、２つの論理ボリューム１２１ｂと１２２ｂを担当する。つまり、ストレージコントローラ１２０ｂは、論理ボリューム１２１ｂに関するアクティブパス上にあり、論理ボリューム１２２ｂに関するアクティブパス上にもある。
・ストレージコントローラ１２０ｃは、１つの論理ボリューム１２１ｃを担当する。つまり、ストレージコントローラ１２０ｃは、論理ボリューム１２１ｃに関するアクティブパス上にある。
【０１１６】
もし、どの論理ボリュームに対するＩ／Ｏ要求の量もほぼ等しいのであれば、単純に「各ストレージコントローラが現在いくつの論理ボリュームを担当しているか」に応じて、新たな論理ボリューム１２２ｃを管理するストレージコントローラを決めればよい。しかし、多くの場合、論理ボリューム間でＩ／Ｏ要求の量は不均一である。よって、ストレージコントローラ間での負荷分散と、負荷分散によるＩ／Ｏ性能の平準化のためには、単に各ストレージコントローラが現在担当する論理ボリュームの数に注目する方法では不十分である。
【０１１７】
また、仮に論理ボリューム間でＩ／Ｏ要求の量がほぼ等しいとしても、ストレージコントローラ間にハードウェア性能の差がある場合は、ストレージコントローラのハードウェア性能の差に起因するＩ／Ｏ性能の偏りがある。特に、仮想ストレージシステム１００のようなスケールアウト型のストレージシステムにおいては、ストレージコントローラ間でハードウェア性能が不均一になりがちである。なぜなら、ストレージコントローラのハードウェア性能は年々進化するので、後からシステムに追加されるストレージコントローラのハードウェア性能は、以前からシステムに含まれるストレージコントローラのハードウェア性能より高い場合が多いからである。
【０１１８】
つまり、ある一定量のＩ／Ｏ要求に起因する負荷は、ストレージコントローラのハードウェア性能に応じて異なり得る。よって、図１のとおり、ストレージコントローラのハードウェア性能を反映する値（具体的には内部処理時間を示す値）に基づき、相対的に低負荷のストレージコントローラを、新規論理ボリューム用のアクティブ・ストレージコントローラとして選ぶことが望ましい。図１の選択方法によれば、ストレージコントローラ間にハードウェア性能の差に起因するＩ／Ｏ性能の偏りを小さくすることができ、Ｉ／Ｏ性能の一層の平準化が達成される。
【０１１９】
さて、図４は、ストレージとストレージコントローラのハードウェア構成図である。図２と３に示すストレージ１１０ａ〜１１０ｃのそれぞれは、図４のストレージ１１０のように構成されていてもよい。また、図２と３に示すストレージコントローラ１２０ａ〜１２０ｃのそれぞれは、図４のストレージコントローラ１２０のように構成されていてもよい。
【０１２０】
ストレージ１１０は、２台の物理ＨＤＤ２０１と２０２を含む。しかし、ストレージ１１０に含まれる物理ＨＤＤの台数は任意である。また、ストレージ１１０は、ＨＤＤの代わりに（またはＨＤＤとともに）ＳＳＤを含んでもよい。図４では省略されているが、物理ＨＤＤ２０１および２０２と、ネットワーク１３０との間の通信のための通信インタフェイスも、ストレージ１１０には含まれる。そして、物理ＨＤＤ２０１および２０２と、通信インタフェイスは、筐体に収められる。
【０１２１】
ストレージコントローラ１２０は、ＣＰＵ２１１と、ＲＡＭ（Random Access Memory）２１２と、不揮発性記憶装置２１３と、通信インタフェイス２１４と、通信インタフェイス２１５を含む。ストレージコントローラ１２０内のこれらの構成要素同士は、バス２１６で接続されている。なお、紙面の都合上、図４では「インタフェイス」が「Ｉ／Ｆ」と略されている。
【０１２２】
ＣＰＵ２１１は、シングルコアまたはマルチコアのプロセッサである。ストレージコントローラ１２０は、２台以上のＣＰＵ２１１を含んでいてもよい。
【０１２３】
ＣＰＵ２１１は、不揮発性記憶装置２１３にインストールされたプログラムをＲＡＭ２１２にロードし、ＲＡＭ２１２をワーキングエリアとしても用いながら、プログラムを実行する。なお、実施形態によっては、汎用プロセッサであるＣＰＵ２１１の代わりに（またはＣＰＵ２１１とともに）、ＡＳＩＣ（Application-Specific Integrated Circuit）などのハードウェア回路が利用されてもよい。
【０１２４】
不揮発性記憶装置２１３は、例えばフラッシュメモリでもよいし、ストレージコントローラ１２０内の内蔵ＨＤＤであってもよいし、内蔵ＳＳＤであってもよい。
【０１２５】
通信インタフェイス２１４は、ストレージコントローラ１２０がネットワーク１４０を介して通信を行うための回路である。例えば、ネットワーク１４０がイーサネット（登録商標）ベースのＬＡＮである場合、通信インタフェイス２１４は、ＰＨＹチップとＭＡＣチップを含む通信回路であってもよい。ネットワーク１４０がファイバチャネルベースのネットワークである場合、通信インタフェイス２１４は、ファイバチャネル用のホストバスアダプタであってもよい。
【０１２６】
また、通信インタフェイス２１５は、ストレージコントローラ１２０がネットワーク１３０を介して通信を行うための回路である。例えば、ネットワーク１３０がイーサネット（登録商標）ベースのＬＡＮである場合、通信インタフェイス２１５は、ＰＨＹチップとＭＡＣチップを含む通信回路であってもよい。ネットワーク１３０がファイバチャネルベースのネットワークである場合、通信インタフェイス２１５は、ファイバチャネル用のホストバスアダプタであってもよい。
【０１２７】
さて、図５は、システム構成図である。図５には、図２および３と同様に、ストレージ１１０ａと１１０ｂが示されている。しかし、紙幅の都合上、図５では、ストレージ１１０ｃは省略されており、ストレージ１１０ａと１１０ｂの詳細も省略されている。
【０１２８】
また、図５には、図２および３と同様に、ストレージコントローラ１２０ａと１２０ｂが示されている。しかし、紙幅の都合上、図５では、ストレージコントローラ１２０ｃは省略されている。なお、図２および３では、ストレージコントローラと論理ボリュームの対応関係についての理解の助けとするために、便宜上、ストレージコントローラの箱の中に論理ボリュームを図示したが、図５では、論理ボリュームの図示は省略されている。その代わり、図５では、ストレージコントローラ１２０ａと１２０ｂの内部の機能ブロックが図示されている。
【０１２９】
さらに、図５には、図２および３と同様のネットワーク１３０、ネットワーク１４０、およびサーバ１５０ａが示されている。なお、図２および３では省略されているが、図５に示すとおり、ネットワーク１４０には、さらに別のサーバ１５０ｂが接続されていてもよい。また、仮想ストレージシステム１００中の任意のストレージコントローラに対して命令を送信するための端末１６０も、ネットワーク１４０に接続される。
【０１３０】
そして、仮想ストレージシステム１００内のどのストレージコントローラからもアクセス可能な共有記憶装置の一例として、図５には、ネットワーク１３０に接続された共有ディスク１７０が示されている。共有ディスク１７０は、具体的には、１台の物理的ＨＤＤであってもよい。
【０１３１】
さて、図５に示すように、ストレージコントローラ１２０ａは、Ｉ／Ｏ要求受信部３０１ａと、Ｉ／Ｏキュー３０２ａと、Ｉ／Ｏ実行部３０３ａと、制御部３０４ａと、記憶部３０５ａを含む。図５には、記憶部３０５ａに記憶される時間記録テーブル３０６ａも図示されている。
【０１３２】
Ｉ／Ｏ要求受信部３０１ａは、サーバ１５０ａ（より詳しくはマルチパスドライバ１５１ａ）またはサーバ１５０ｂから、ネットワーク１４０を介して、ストレージコントローラ１２０ａが管理するいずれかの論理ボリュームに対するＩ／Ｏ要求を受信する。そして、Ｉ／Ｏ要求受信部３０１ａは、受信したＩ／Ｏ要求をＩ／Ｏキュー３０２ａに入れる（enqueue）。
【０１３３】
Ｉ／Ｏ実行部３０３ａは、Ｉ／Ｏキュー３０２ａから先頭のＩ／Ｏ要求を取り出し（dequeue）、取り出したＩ／Ｏ要求に応じてＩ／Ｏ処理を実行する。例えば、Ｉ／Ｏ実行部３０３ａは、論理ボリュームに対するＩ／Ｏ要求のパラメタから、どの論理ユニットのどのアドレスにアクセスするのかを決定し、決定に応じて、適宜のストレージに対するＩ／Ｏ要求を生成する。後述の図８や９の例のように、Ｉ／Ｏ実行部３０３ａは、サーバ１５０ａから受信する１つのＩ／Ｏ要求に応じて、ストレージに対するＩ／Ｏ要求を２つ以上生成する場合もあり得る。
【０１３４】
Ｉ／Ｏ実行部３０３ａは、生成した各Ｉ／Ｏ要求を、ネットワーク１３０を介して適宜のストレージに送信し、ストレージから応答を受信する。そして、Ｉ／Ｏ実行部３０３ａは、受信した各応答に基づいて、Ｉ／Ｏキュー３０２ａから取り出した元のＩ／Ｏ要求（つまりサーバ１５０ａまたは１５０ｂからのＩ／Ｏ要求）に対する応答を生成する。こうして生成された応答は、Ｉ／Ｏ要求受信部３０１ａにより、ネットワーク１４０を介してサーバ１５０ａまたは１５０ｂに送信される。
【０１３５】
例えば、サーバ１５０ａからのＩ／Ｏ要求が具体的にはライト要求である場合、サーバ１５０ａには、データの書き込みが成功したか否かを示す応答が返されてもよい。逆に、サーバ１５０ａからのＩ／Ｏ要求がリード要求である場合、ストレージから読み出されたデータを含む応答が、サーバ１５０ａに返される。
【０１３６】
制御部３０４ａは、Ｉ／Ｏ要求受信部３０１ａとＩ／Ｏ実行部３０３ａによる、Ｉ／Ｏ要求の受信から応答の送信までの処理の流れを制御しつつ、ストレージコントローラ１２０ａの内部処理時間を計測する。そして、制御部３０４ａは、計測した内部処理時間を時間記録テーブル３０６ａに記録する。さらに、制御部３０４ａは、時間記録テーブル３０６ａに基づいて、定期的に集計処理を行う。
【０１３７】
時間記録テーブル３０６ａの詳細は、図１０とともに後述する。また、Ｉ／Ｏ要求受信部３０１ａ、Ｉ／Ｏ実行部３０３ａ、および制御部３０４ａが行う処理の詳細は、図１１〜１２とともに後述する。
【０１３８】
Ｉ／Ｏ要求受信部３０１ａは、通信インタフェイス２１４とＣＰＵ２１１により実現されてもよい。Ｉ／Ｏキュー３０２ａは、ＲＡＭ２１２により実現されることが望ましいが、不揮発性記憶装置２１３により実現されてもよい。Ｉ／Ｏ実行部３０３ａは、ＣＰＵ２１１と通信インタフェイス２１５により実現されてもよい。制御部３０４ａも、ＣＰＵ２１１と通信インタフェイス２１５により実現されてもよい。記憶部３０５ａは、ＲＡＭ２１２と不揮発性記憶装置２１３の一方または双方により実現されてもよい。
【０１３９】
さて、以上のごときストレージコントローラ１２０ａと同様に、ストレージコントローラ１２０ｂも、Ｉ／Ｏ要求受信部３０１ｂと、Ｉ／Ｏキュー３０２ｂと、Ｉ／Ｏ実行部３０３ｂと、制御部３０４ｂと、記憶部３０５ｂを含む。記憶部３０５ｂは、時間記録テーブル３０６ｂを記憶する。図５では省略されているストレージコントローラ１２０ｃも、ストレージコントローラ１２０ｂと同様のコンポーネントを有する。
【０１４０】
なお、第１実施形態では、仮想ストレージシステム１００内のどのストレージコントローラのＩ／Ｏキューも、同じ容量である。これは、「Ｉ／Ｏキューの容量の差に応じてキューイング時間がストレージコントローラ間でばらつくことで、Ｉ／Ｏ性能がストレージコントローラ間でばらつく」という事態を防ぐためである。
【０１４１】
また、第１実施形態では、仮想ストレージシステム１００中の複数のストレージコントローラのうちの１つが、図１に概要を示した処理を行うための管理部３０７を含む。図５の例では、ストレージコントローラ１２０ａが管理部３０７を含む。管理部３０７は作成要求受信部３０８と選択部３０９を含む。
【０１４２】
作成要求受信部３０８は、図１のステップＳ１の処理を実行する。具体的には、作成要求受信部３０８は、端末１６０からネットワーク１４０を介して、新規論理ボリュームを作成するための作成要求を受信する。また、選択部３０９は、図１のステップＳ２〜Ｓ３の処理を実行する。つまり、選択部３０９は、仮想ストレージシステム１００内の複数のストレージコントローラの中から１つを選択し、選択したストレージコントローラに新規論理ボリュームの作成を命令する。選択部３０９がステップＳ２の選択の際に参照する時間情報は、第１実施形態では、具体的には、後述の２次集計テーブル３１２のデータである。
【０１４３】
管理部３０７の動作の詳細と、管理部３０７が利用するデータの具体例は、図１３〜１５とともに後述する。また、作成要求受信部３０８は、通信インタフェイス２１４とＣＰＵ２１１により実現されてもよく、選択部３０９は、ＣＰＵ２１１と通信インタフェイス２１５により実現されてもよい。
【０１４４】
そして、図５に示すように、共有ディスク１７０には、例えば、１次集計テーブル群３１１、２次集計テーブル３１２、ストレージコントローラ管理テーブル３１３、論理ボリューム管理テーブル３１４、およびサーバ管理テーブル３１５が記憶される。これらのテーブルの具体例は、図１０、１４、および１５とともに後述する。
【０１４５】
また、図５では省略されているが、共有ディスク１７０には、各論理ボリュームがどの論理ユニットに断片化されているかを示す対応関係情報がさらに記憶されているものとする。対応関係情報は、図３に関して説明したとおり、フェイルオーバの際に、新たにアクティブになったストレージコントローラにより参照される。
【０１４６】
続いて、図６〜９のシーケンス図を参照して、ストレージコントローラの内部処理時間についてさらに詳しく説明する。
【０１４７】
図６のシーケンス図は、以下のような場合の例を示す。
・ストレージコントローラ１２０ａが管理する、ある論理ボリュームに対するＩ／Ｏ要求を、サーバ１５０ａが送信する。
・当該Ｉ／Ｏ要求によりアクセスされる領域は、具体的には、ストレージ１１０ａのいずれか１つの論理ユニットに含まれる。
・当該論理ユニットに対するストレージコントローラ１２０ａからのアクセスは、１回だけである。
【０１４８】
具体的には、ステップＳ１１に示すように、時刻Ｔ１０にサーバ１５０ａがストレージコントローラ１２０ａにネットワーク１４０を介してＩ／Ｏ要求を送信する。すると、ストレージコントローラ１２０ａは、時刻Ｔ１１にＩ／Ｏ要求を受信する。
【０１４９】
なお、ステップＳ１１で送信されるＩ／Ｏ要求は、具体的には、ストレージコントローラ１２０ａにより管理される、ある論理ボリュームに対するＩ／Ｏ要求である。Ｉ／Ｏ要求は、リード要求であってもよいし、ライト要求であってもよい。
【０１５０】
その後、ステップＳ１２に示すように、ストレージコントローラ１２０ａは、時刻Ｔ１２に、ネットワーク１３０を介してＩ／Ｏ要求をストレージ１１０ａに送信する。すると、ストレージ１１０ａは、時刻Ｔ１３にＩ／Ｏ要求を受信する。
【０１５１】
なお、ステップＳ１１とＳ１２で送信されるＩ／Ｏ要求は、どちらも、例えば、ｉＳＣＳＩ（Internet Small Computer System Interface）コマンドであってもよい。実施形態によっては、ｉＳＣＳＩ以外のネットワーク・ストレージ・プロトコル（例えばファイバチャネル・プロトコル）が利用されてもよい。
【０１５２】
ストレージ１１０ａは、受信したＩ／Ｏ要求に応じて、物理的記憶装置（例えばＨＤＤ）にアクセスする。そして、ステップＳ１３に示すように、時刻Ｔ１４に、ストレージ１１０ａは、ネットワーク１３０を介して応答をストレージコントローラ１２０ａに返す。
【０１５３】
例えば、ストレージ１１０ａが受信したＩ／Ｏ要求がリード要求の場合、応答は、読み取られたデータを含む。また、ストレージ１１０ａが受信したＩ／Ｏ要求がライト要求の場合、応答は、ライト要求が成功したか否かを示すステータス情報を含む。
【０１５４】
ストレージ１１０ａから返された応答は、時刻Ｔ１５にストレージコントローラ１２０ａに受信される。その後、ステップＳ１４に示すように、ストレージコントローラ１２０ａは、ネットワーク１４０を介して応答をサーバ１５０ａに返す。すると、サーバ１５０ａは、時刻Ｔ１７に応答を受信する。
【０１５５】
サーバ１５０ａにとってのＩ／Ｏ性能は、例えば、レイテンシ（すなわち、時刻Ｔ１０から時刻Ｔ１７までの時間）により表される。しかし、レイテンシは、ネットワーク１３０と１４０それぞれの帯域幅、ストレージコントローラ１２０ａのハードウェア性能、ストレージ１１０ａのハードウェア性能など、様々な要因の影響を受ける。
【０１５６】
一方、図１に関して説明したとおり、第１実施形態では、新規論理ボリュームの追加の際に、各ストレージコントローラの内部処理時間に基づく選択が行われる。図６の例におけるストレージコントローラ１２０ａの内部処理時間Ｄは、式（１）のとおりであり、この内部処理時間Ｄは、ストレージコントローラ１２０ａのハードウェア性能を反映している。
D=D11+D12=(T12-T11)+(T16-T15)    (1)
【０１５７】
例えば、内部処理時間Ｄ１１は、ステップＳ１１でサーバ１５０ａから送られたＩ／Ｏ要求がＩ／Ｏキュー３０２ａ内でキューイングされている時間と、ステップＳ１２で送信するためのＩ／Ｏ要求をＩ／Ｏ実行部３０３ａが生成する時間を含む。また、内部処理時間Ｄ１２は、ステップＳ１３で受信された応答から、サーバ１５０ａに返すための応答をＩ／Ｏ実行部３０３ａが生成する時間を含む。
【０１５８】
ところで、図６では、説明の簡単化のため、Ｉ／Ｏ要求または応答の受信開始から受信完了までの時間の長さは無視されており、同様に、Ｉ／Ｏ要求または応答の送信開始から送信完了までの時間の長さは無視されている。しかし、実際には、Ｉ／Ｏ要求または応答の受信開始から受信完了までには何らかの時間がかかり、Ｉ／Ｏ要求または応答の送信開始から送信完了までにも何らかの時間がかかる。図７は、図６の動作シーケンスの詳細を示す。
【０１５９】
図７に示すように、ステップＳ１１でのＩ／Ｏ要求の送受信は、詳しくは以下のとおりである。
【０１６０】
・サーバ１５０ａは、時刻Ｔ１０ａにＩ／Ｏ要求を送信しはじめ、時刻Ｔ１０ｂにＩ／Ｏ要求の送信を完了する。
・ストレージコントローラ１２０ａは、時刻Ｔ１１ａにＩ／Ｏ要求を受信しはじめ、時刻Ｔ１２ｂにＩ／Ｏ要求の受信を完了する。
【０１６１】
また、ステップＳ１２でのＩ／Ｏ要求の送受信は、詳しくは以下のとおりである。
・ストレージコントローラ１２０ａは、時刻Ｔ１２ａにＩ／Ｏ要求を送信しはじめ、時刻Ｔ１２ｂにＩ／Ｏ要求の送信を完了する。
・ストレージ１１０ａは、時刻Ｔ１３ａにＩ／Ｏ要求を受信しはじめ、時刻Ｔ１３ｂにＩ／Ｏ要求の受信を完了する。
【０１６２】
そして、ステップＳ１３での応答の送受信は、詳しくは以下のとおりである。
・ストレージ１１０ａは、時刻Ｔ１４ａに応答を送信しはじめ、時刻Ｔ１４ｂに応答の送信を完了する。
・ストレージコントローラ１２０ａは、時刻Ｔ１５ａに応答を受信しはじめ、時刻Ｔ１５ｂに応答の受信を完了する。
【０１６３】
また、ステップＳ１４での応答の送受信は、詳しくは以下のとおりである。
・ストレージコントローラ１２０ａは、時刻Ｔ１６ａに応答を送信しはじめ、時刻Ｔ１６ｂに応答の送信を完了する。
・サーバ１５０ａは、時刻Ｔ１７ａに応答を受信しはじめ、時刻Ｔ１７ｂに応答の受信を完了する。
【０１６４】
さて、第１実施形態では、内部処理にかかる時間Ｄ１１として、具体的には、時刻Ｔ１１ｂから時刻Ｔ１２ａまでの時間が計測される。つまり、図６における時刻Ｔ１１は、より具体的には図７の時刻Ｔ１１ｂであり、図６における時刻Ｔ１２は、より具体的には図７の時刻Ｔ１２ａである。
【０１６５】
また、第１実施形態では、内部処理にかかる時間Ｄ１２として、具体的には、時刻Ｔ１５ｂから時刻Ｔ１６ａまでの時間が計測される。つまり、図６における時刻Ｔ１５は、より具体的には図７の時刻Ｔ１５ｂであり、図６における時刻Ｔ１６は、より具体的には図７の時刻Ｔ１６ａである。
【０１６６】
すなわち、図６では、送信開始時刻（例えば時刻Ｔ１２ａ）が送信時刻（例えばＴ１２）として示されており、受信完了時刻（例えば時刻Ｔ１１ｂ）が受信時刻（例えばＴ１１）として示されている。以下、図８、９、１６、および１７においても、図６と同様に、送信時刻は送信開始時刻を示し、受信時刻は受信完了時刻を示すものとする。
【０１６７】
さて、図８は、図６〜７とは別の例を示すシーケンス図である。具体的には、図８のシーケンス図は、以下のような場合の例を示す。
【０１６８】
・ストレージコントローラ１２０ａが管理する、ある論理ボリュームに対するＩ／Ｏ要求を、サーバ１５０ａが送信する。
・当該Ｉ／Ｏ要求によりアクセスされる領域は、具体的には、ストレージ１１０ａ内のいずれか１つの論理ユニットに含まれるか、または、ストレージ１１０ａ内の２つ以上の論理ユニットにまたがる。
・上記の１つの論理ユニット、または上記の２つ以上の論理ユニットに対する、ストレージコントローラ１２０ａからのアクセスは、３回に分けて行われる。
【０１６９】
例えば、図２の論理ボリューム１２２ａは、ストレージ１１０ａの３つの論理ユニット１１１ａ〜１１３ａとストレージ１１０ｃ中の１つ以上の論理ユニットに断片化していてもよい。また、論理ボリューム１２２ａに対するあるＩ／Ｏ要求がアクセスを要求する領域は、たまたま、３つの論理ユニット１１１ａ〜１１３ａにまたがる場合があり得る。
【０１７０】
例えばそのような場合には、ストレージコントローラ１２０ａは、サーバ１５０ａからのＩ／Ｏ要求の受信に応じて、１回目、２回目、３回目のアクセスで、それぞれ、論理ユニット１１１ａ、１１２ａ、１１３ａにアクセスしてもよい。それ以外の場合であっても、何らかの理由により、サーバ１５０ａから送信された１つのＩ／Ｏ要求に応じて、ストレージコントローラ１２０ａが複数回ストレージ１１０ａにアクセスする場合があり得る。
【０１７１】
以下、図８を参照して、ストレージ１１０ａへの複数回のアクセスをともなうＩ／Ｏ処理の際の、ストレージコントローラ１２０ａの内部処理時間の具体例を説明する。
【０１７２】
ステップＳ２１に示すように、時刻Ｔ２０にサーバ１５０ａがストレージコントローラ１２０ａにＩ／Ｏ要求を送信する、すると、ストレージコントローラ１２０ａは、時刻Ｔ２１にＩ／Ｏ要求を受信する。
【０１７３】
その後、ステップＳ２２に示すように、ストレージコントローラ１２０ａは、時刻Ｔ２２に１つ目のＩ／Ｏ要求をストレージ１１０ａに送信する。すると、ストレージ１１０ａは、時刻Ｔ２３に１つ目のＩ／Ｏ要求を受信する。
【０１７４】
ストレージ１１０ａは、受信した１つ目のＩ／Ｏ要求に応じて、物理的記憶装置にアクセスする。そして、ステップＳ２３に示すように、時刻Ｔ２４に、ストレージ１１０ａは、１つ目の応答をストレージコントローラ１２０ａに返す。ストレージ１１０ａから返された１つ目の応答は、時刻Ｔ２５にストレージコントローラ１２０ａに受信される。
【０１７５】
その後、ステップＳ２４に示すように、ストレージコントローラ１２０ａは、時刻Ｔ２６に２つ目のＩ／Ｏ要求をストレージ１１０ａに送信する。すると、ストレージ１１０ａは、時刻Ｔ２７に２つ目のＩ／Ｏ要求を受信する。
【０１７６】
ストレージ１１０ａは、受信した２つ目のＩ／Ｏ要求に応じて、物理的記憶装置にアクセスする。そして、ステップＳ２５に示すように、時刻Ｔ２８に、ストレージ１１０ａは、２つ目の応答をストレージコントローラ１２０ａに返す。ストレージ１１０ａから返された２つ目の応答は、時刻Ｔ２９にストレージコントローラ１２０ａに受信される。
【０１７７】
その後、ステップＳ２６に示すように、ストレージコントローラ１２０ａは、時刻Ｔ３０に３つ目のＩ／Ｏ要求をストレージ１１０ａに送信する。すると、ストレージ１１０ａは、時刻Ｔ３１に３つ目のＩ／Ｏ要求を受信する。
【０１７８】
ストレージ１１０ａは、受信した３つ目のＩ／Ｏ要求に応じて、物理的記憶装置にアクセスする。そして、ステップＳ２７に示すように、時刻Ｔ３２に、ストレージ１１０ａは、３つ目の応答をストレージコントローラ１２０ａに返す。ストレージ１１０ａから返された３つ目の応答は、時刻Ｔ３３にストレージコントローラ１２０ａに受信される。
【０１７９】
最後に、ステップＳ２８に示すように、ストレージコントローラ１２０ａは、時刻Ｔ３４において、ステップＳ２１のＩ／Ｏ要求に対する応答をサーバ１５０ａに返す。すると、サーバ１５０ａは、時刻Ｔ３５に応答を受信する。
【０１８０】
以上のごとき図８の例において、ストレージコントローラ１２０ａの内部処理時間Ｄは、具体的には、式（２）に示すとおり、時間Ｄ２１〜Ｄ２４の和である。
D=D21+D22+D23+D24=(T22-T21)+(T26-T25)+(T30-T29)+(T34-T33)    (2)
【０１８１】
例えば、内部処理時間Ｄ２１は、ステップＳ２１でサーバ１５０ａから送られたＩ／Ｏ要求がＩ／Ｏキュー３０２ａ内でキューイングされている時間と、ステップＳ２２で送信するためのＩ／Ｏ要求をＩ／Ｏ実行部３０３ａが生成する時間を含む。また、内部処理時間Ｄ２２は、ステップＳ２４で送信するためのＩ／Ｏ要求をＩ／Ｏ実行部３０３ａが生成する時間を含み、内部処理時間Ｄ２３は、ステップＳ２６で送信するためのＩ／Ｏ要求をＩ／Ｏ実行部３０３ａが生成する時間を含む。
【０１８２】
そして、内部処理時間Ｄ２４は、ステップＳ２３、Ｓ２５およびＳ２７で受信された３つの応答から、サーバ１５０ａに返すための１つの応答をＩ／Ｏ実行部３０３ａが生成する時間を含む。場合によっては、Ｉ／Ｏ実行部３０３ａは、時刻Ｔ２５から時刻Ｔ２６までの期間の一部において、サーバ１５０ａに応答を返すための準備をしてもよい。同様に、Ｉ／Ｏ実行部３０３ａは、時刻Ｔ２９から時刻Ｔ３０までの期間の一部において、サーバ１５０ａに応答を返すための準備をしてもよい。そして、Ｉ／Ｏ実行部３０３ａは、時刻Ｔ３３から時刻Ｔ３４までの期間で、サーバ１５０ａに返すための応答の生成処理を完了してもよい。
【０１８３】
ところで、サーバ１５０ａが送信した１つのＩ／Ｏ要求に応じて、ストレージコントローラが複数のストレージにアクセスする場合もあり得る。図９は、そのような場合の一例を示すシーケンス図である。具体的には、図９は、以下のような場合の例を示す。
【０１８４】
・ストレージコントローラ１２０ａが管理する、ある論理ボリュームに対するＩ／Ｏ要求を、サーバ１５０ａが送信する。
・当該Ｉ／Ｏ要求によりアクセスされる領域は、具体的には、ストレージ１１０ａのいずれかの論理ユニットと、ストレージ１１０ｂのいずれかの論理ユニットにまたがる。
・よって、ストレージコントローラ１２０ａは、ストレージ１１０ａと１１０ｂの双方にアクセスする。
【０１８５】
例えば、図３に示すように、論理ボリューム１２１ａの領域Ａ〜Ｄは、それぞれ、論理ユニット１１１ａ、１１２ａ、１１１ｂ、および１１２ｂにある。よって、サーバ１５０ａが、領域ＢとＣにまたがるアクセスをともなうようなＩ／Ｏ要求を発行すると、ストレージコントローラ１２０ａは、領域Ｂを含む論理ユニット１１２ａと、領域Ｃを含む論理ユニット１１１ｂにアクセスする。つまり、ストレージコントローラ１２０ａは、ストレージ１１０ａと１１０ｂの双方にアクセスする。
【０１８６】
このように、サーバ１５０ａから送信された１つのＩ／Ｏ要求に応じて、ストレージコントローラ１２０ａが複数のストレージにアクセスする場合があり得る。以下、図９を参照して、複数のストレージへのアクセスをともなうＩ／Ｏ処理の際の、ストレージコントローラ１２０ａの内部処理時間の具体例を説明する。
【０１８７】
ステップＳ４１に示すように、時刻Ｔ４０にサーバ１５０ａがストレージコントローラ１２０ａにＩ／Ｏ要求を送信する。すると、ストレージコントローラ１２０ａは、時刻Ｔ４１にＩ／Ｏ要求を受信する。
【０１８８】
その後、ステップＳ４２に示すように、ストレージコントローラ１２０ａは、時刻Ｔ４２に１つ目のＩ／Ｏ要求をストレージ１１０ａに送信する。すると、ストレージ１１０ａは、時刻Ｔ４３にＩ／Ｏ要求を受信する。
【０１８９】
ストレージ１１０ａは、受信したＩ／Ｏ要求に応じて、物理的記憶装置にアクセスする。そして、ステップＳ４３に示すように、時刻Ｔ４４に、ストレージ１１０ａは、応答をストレージコントローラ１２０ａに返す。ストレージ１１０ａから返された応答は、時刻Ｔ４５にストレージコントローラ１２０ａに受信される。
【０１９０】
その後、ステップＳ４４に示すように、ストレージコントローラ１２０ａは、時刻Ｔ４６に２つ目のＩ／Ｏ要求をストレージ１１０ｂに送信する。すると、ストレージ１１０ｂは、時刻Ｔ４７にＩ／Ｏ要求を受信する。
【０１９１】
ストレージ１１０ｂは、受信したＩ／Ｏ要求に応じて、物理的記憶装置にアクセスする。そして、ステップＳ４５に示すように、時刻Ｔ４８に、ストレージ１１０ｂは、応答をストレージコントローラ１２０ａに返す。ストレージ１１０ｂから返された応答は、時刻Ｔ４９にストレージコントローラ１２０ａに受信される。
【０１９２】
最後に、ステップＳ４６に示すように、ストレージコントローラ１２０ａは、時刻Ｔ５０において、ステップＳ４１のＩ／Ｏ要求に対する応答をサーバ１５０ａに返す。すると、サーバ１５０ａは、時刻Ｔ５１に応答を受信する。
【０１９３】
以上のごとき図９の例において、ストレージコントローラ１２０ａの内部処理時間は、具体的には、式（３）に示すとおり、時間Ｄ４１〜Ｄ４３の和である。
D=D41+D42+D43=(T42-T41)+(T46-T45)+(T50-T49)    (3)
【０１９４】
例えば、内部処理時間Ｄ４１は、ステップＳ４１でサーバ１５０ａから送られたＩ／Ｏ要求がＩ／Ｏキュー３０２ａ内でキューイングされている時間と、ステップＳ４２で送信するためのＩ／Ｏ要求をＩ／Ｏ実行部３０３ａが生成する時間を含む。また、内部処理時間Ｄ４２は、ステップＳ４４で送信するためのＩ／Ｏ要求をＩ／Ｏ実行部３０３ａが生成する時間を含む。
【０１９５】
そして、内部処理時間Ｄ４３は、ステップＳ４３とＳ４５で受信された２つの応答から、サーバ１５０ａに返すための１つの応答をＩ／Ｏ実行部３０３ａが生成する時間を含む。場合によっては、Ｉ／Ｏ実行部３０３ａは、時刻Ｔ４５から時刻Ｔ４６までの期間の一部において、サーバ１５０ａに応答を返すための準備をしてもよい。
【０１９６】
以上、図６〜９を参照して説明したように、ストレージコントローラ１２０ａの内部処理時間は、ストレージコントローラ１２０ａがＩ／Ｏ要求を受信してからサーバ１５０ａに応答を送信するまでの時間のうちの一部である。内部処理時間は、Ｉ／Ｏ要求がストレージコントローラ１２０ａ内でキューイングされている時間や、ストレージコントローラ１２０ａがストレージ１１０ａ宛のＩ／Ｏ要求を生成するのにかかる時間を含み得る。しかし、内部処理時間は、待ち時間（例えば図６の時刻Ｔ１２から時刻Ｔ１５までの時間）を含まない。なぜなら、待ち時間は、ネットワーク帯域幅やストレージのハードウェア性能に依存する時間であって、ストレージコントローラ自体のハードウェア性能とは無関係だからである。
【０１９７】
続いて、図１０〜１５を参照して、第１実施形態で行われる処理と、各種データについてより具体的に説明する。
【０１９８】
図１０は、各種データを例示する図である。具体的には、図１０には、図５の時間記録テーブル３０６ａと１次集計テーブル群３１１と２次集計テーブル３１２が例示されている。
【０１９９】
時間記録テーブル３０６ａは、図５のとおり、ストレージコントローラ１２０ａの記憶部３０５ａに記憶される。時間記録テーブル３０６ａの各エントリは、「Ｉ／Ｏ要求番号」と「内部処理時間」という２つのフィールドを含む。
【０２００】
Ｉ／Ｏ要求番号は、Ｉ／Ｏ要求を識別するための識別情報の具体例である。内部処理時間は、Ｉ／Ｏ要求番号により識別されるＩ／Ｏ要求の処理にかかった時間のうち、ストレージコントローラ１２０ａの内部処理にかかった時間を示す。図１０には、例えば、「１番のＩ／Ｏ要求の内部処理に５２１７マイクロ秒かかった」ということが示されている。
【０２０１】
詳しくは図１２とともに後述するが、時間記録テーブル３０６ａは第１の所定時間（例えば１分間）ごとにクリアされる。したがって、時間記録テーブル３０６ａの個々のエントリは、現在から第１の所定時間以内の過去に含まれるいずれかの時点においてストレージコントローラ１２０ａが処理を完了したＩ／Ｏ要求についての内部処理時間を示す。
【０２０２】
なお、第１の所定時間の長さは、実施形態に応じて任意に決められていてよい。例えば、時間記録テーブル３０６ａを保持する記憶部３０５ａが具体的にはＲＡＭ２１２である場合、第１の所定時間の長さは、ＲＡＭ２１２の容量に応じて決められることが好ましい。
【０２０３】
１次集計テーブル群３１１は、図５のとおり共有ディスク１７０に記憶され、具体的には、仮想ストレージシステム１００内の各ストレージコントローラに対応する１次集計テーブルを含む。例えば、１次集計テーブル３１１ａはストレージコントローラ１２０ａに対応し、１次集計テーブル３１１ｂはストレージコントローラ１２０ｂに対応する。図１０では、１次集計テーブル３１１ａについてのみ、詳細が示されている。
【０２０４】
１次集計テーブル３１１ａの各エントリは、「日付」、「時刻」、「平均内部処理時間」、および「Ｉ／Ｏの数」という４つのフィールドを含む。１次集計テーブル３１１ａは、時間記録テーブル３０６ａのデータを集計した結果を記憶するためのテーブルである。１次集計テーブル３１１ａの各エントリは、長さが第１の所定時間であるような１つの期間に対応する。つまり、１次集計テーブル３１１ａの各エントリは、第１の所定時間ごとに１回行われる１回の集計に対応する。
【０２０５】
例えば、図１０の例は、第１の所定時間が１分間の例である。そのため、１次集計テーブル３１１ａには、１分間ごとに別々のエントリが記録される。
【０２０６】
例えば、図１０の１次集計テーブル３１１ａの１番目のエントリは、「２０１１年２月３日」という日付と、「１０時００分」という時刻が記録されている。これは、１番目のエントリが、２０１１年２月３日の１０時００分００秒に終わる長さ１分間の期間に対応することを示す。そして、１番目のエントリには、「３４１２マイクロ秒」という平均内部処理時間と、「５６回」というＩ／Ｏの数が記録されている。したがって、１番目のエントリは、以下のことを示す。
【０２０７】
・２０１１年２月３日の９時５９分００秒より後、かつ１０時００分００秒までの１分間の期間中のいずれかの時点において、ストレージコントローラ１２０ａが処理を完了したＩ／Ｏ要求は、５６件あった。
・ストレージコントローラ１２０ａにおける内部処理時間の、それら５６件のＩ／Ｏ要求に関する平均は、３４１２マイクロ秒である。
【０２０８】
同様に、２番目のエントリは、以下のことを示す。
・２０１１年２月３日の１０時００分００秒より後、かつ１０時０１分００秒までの１分間の中のいずれかの時点において、ストレージコントローラ１２０ａが処理を完了したＩ／Ｏ要求は、１２３件あった。
・ストレージコントローラ１２０ａにおける内部処理時間の、それら１２３件のＩ／Ｏ要求に関する平均は、６１７６マイクロ秒である。
【０２０９】
３番目と４番目のエントリが示す意味も、同様に図１０から明らかである。なお、詳しくは図１２とともに後述するとおり、１次集計テーブル３１１ａ内の各エントリは、第２の所定時間（例えば１週間）の間のみ有効である。
【０２１０】
例えば、１次集計テーブル３１１ａの各エントリは、追加されてから第２の所定時間が経過すると削除されてもよい。あるいは、１次集計テーブル３１１ａがリングバッファにより実現されてもよく、その場合、１次集計テーブル３１１ａの各エントリは、第２の所定時間が経過するたびに、全フィールドが書き換えられる。
【０２１１】
２次集計テーブル３１２は、図５のとおり、共有ディスク１７０に記憶される。２次集計テーブル３１２の各エントリは、「ストレージコントローラ番号」と「平均内部処理時間」という２つのフィールドを含む。
【０２１２】
ストレージコントローラ番号は、ストレージコントローラを識別するための識別情報の具体例である。つまり、２次集計テーブル３１２の各エントリは各ストレージコントローラに対応する。
【０２１３】
平均内部処理時間は、ストレージコントローラ番号により識別されるストレージコントローラにおいて、１件のＩ／Ｏ要求あたりに平均してかかる内部処理時間を示す。より具体的には、２次集計テーブル３１２における平均内部処理時間は、第２の所定時間（例えば１週間）における内部処理時間の算術平均を示す。図１０には、例えば、「１番のストレージコントローラにおいて、１件のＩ／Ｏ要求あたり、平均で８１７６マイクロ秒かかった」ということが示されている。
【０２１４】
例えば、ストレージコントローラ１２０ａの番号が１であるとする。この場合、２次集計テーブル３１２の１番目のエントリは、ストレージコントローラ１２０ａに対応する。つまり、この場合、２次集計テーブル３１２の１番目のエントリは、「ストレージコントローラ１２０ａに対応する１次集計テーブル３１１ａのデータを集計した結果が８１７６マイクロ秒である」ということを示す。
【０２１５】
なお、１つのストレージコントローラに対応する１つの１次集計テーブルから、２次集計テーブル３１２において当該ストレージコントローラに対応するエントリにおける平均内部処理時間を算出するために、第１実施形態では、具体的には、式（４）が使われる。
【０２１６】
【数１】
2014130387.tif 000003
【０２１７】
式（４）中の記号の意味は以下のとおりである。式（４）によれば、１枚の１次集計テーブルを用いて、第２の所定時間における内部処理時間の算術平均を算出することができる。
【０２１８】
・「ｃ」は、ストレージコントローラ番号である。
・「ｎｕｍ（ｃ，ｉ）」は、ｃ番のストレージコントローラに対応する１次集計テーブルのｉ番目のエントリにおけるＩ／Ｏの数である。
・「Ｎ」は１つの１次集計テーブル中のエントリの総数である。なお、Ｎは、ｃに依存しない定数である。
・「ａｖｒ１（ｃ，ｉ）」は、ｃ番のストレージコントローラに対応する１次集計テーブルのｉ番目のエントリにおける平均内部処理時間である。
・「ａｖｒ２（ｃ）」は、２次集計テーブル３１２においてｃ番のストレージコントローラに対応するエントリにおける平均内部処理時間である。
【０２１９】
さて、続いて、図１１〜１２を参照して、図１０に例示したようなデータがどのようにして得られるかを具体的に説明する。
【０２２０】
図１１は、第１実施形態のストレージコントローラがＩ／Ｏ要求の受信に応じて行う処理のフローチャートである。仮想ストレージシステム１００内の各ストレージコントローラは、いずれかのサーバからＩ／Ｏ要求を受信すると図１１の処理を開始する。
【０２２１】
以下では説明の便宜上、ストレージコントローラ１２０ａがサーバ１５０ａ（より詳しくはサーバ１５０ａのマルチパスドライバ１５１ａ）からＩ／Ｏ要求を受信した場合を例にして、図１１の処理について説明する。ストレージコントローラ１２０ａは、Ｉ／Ｏ要求ごとに別々のスレッドでそれぞれ図１１の処理を実行してもよい。
【０２２２】
まず、Ｉ／Ｏ要求受信部３０１ａが、ネットワーク１４０を介してサーバ１５０ａのマルチパスドライバ１５１ａから、ストレージコントローラ１２０ａの管理するいずれかの論理ボリュームに対するＩ／Ｏ要求を受信する。Ｉ／Ｏ要求の受信が完了すると、図１１の処理が開始され、ステップＳ１０１で制御部３０４ａが内部処理時間の測定を開始する。
【０２２３】
内部処理時間の測定には、例えば、ＣＰＵ２１１に内蔵されるハードウェアタイマが利用されてもよい。しかし、図１１の例では、制御部３０４ａは、具体的には、測定開始時刻を示す変数Ｔと内部処理時間を示す変数Ｄを使って、内部処理時間を測定する。つまり、ステップＳ１０１で制御部３０４ａは、変数Ｔに現在時刻を代入し、変数Ｄを０に初期化する。なお、図１１において「Ｎｏｗ（）」は現在時刻を示すものとする。例えば、図６〜７の例では、ステップＳ１０１で、時刻Ｔ１１（すなわち時刻Ｔ１１ｂ）が変数Ｔに代入される。
【０２２４】
次に、ステップＳ１０２でＩ／Ｏ要求受信部３０１ａは、受信したＩ／Ｏ要求をＩ／Ｏキュー３０２ａに入れる。その後、ステップＳ１０３に示すとおり、Ｉ／Ｏ実行部３０３ａは、ステップＳ１０２でＩ／Ｏキュー３０２ａに入れられたＩ／Ｏ要求がＩ／Ｏキュー３０２ａの先頭に来るまで待つ。
【０２２５】
そして、ステップＳ１０２でＩ／Ｏキュー３０２ａに入れられたＩ／Ｏ要求がＩ／Ｏキュー３０２ａの先頭に来ると、ステップＳ１０４でＩ／Ｏ実行部３０３ａが、Ｉ／Ｏキュー３０２ａの先頭からＩ／Ｏ要求を取り出す。
【０２２６】
次に、ステップＳ１０５でＩ／Ｏ実行部３０３ａは、適宜の内部処理を行う。例えば、Ｉ／Ｏ実行部３０３ａは、ステップＳ１０５で、どのストレージに対してＩ／Ｏ要求を送信するかを決めたり、ストレージに対するＩ／Ｏ要求を生成したりする。
【０２２７】
そして、ステップＳ１０５での内部処理の結果として、いずれかのストレージに対してＩ／Ｏ実行部３０３ａがＩ／Ｏ要求を送信するための準備が完了すると、次に、ステップＳ１０６で制御部３０４ａが変数Ｄを更新する。つまり、内部処理時間の測定は、ステップＳ１０６で一旦中断する。
【０２２８】
具体的には、制御部３０４ａは、変数Ｔの示す測定開始時刻を現在時刻から引き、減算の結果を、変数Ｄの示す時間に足す。そして、制御部３０４ａは、加算の結果を、新たに変数Ｄに代入する。図１１には、ステップＳ１０６での変数Ｄの更新が次の式（５）のように示されている（なお、式（５）の等号は代入を示す）。
D=D+(Now()-T)    (5)
【０２２９】
例えば、図６〜７の例では、式（５）における現在時刻Ｎｏｗ（）は時刻Ｔ１２（すなわち時刻Ｔ１２ａ）である。よって、図６〜７の例では、ステップＳ１０６で更新された変数Ｄの値は、具体的にはＤ１１（＝Ｔ１２−Ｔ１１＝Ｔ１２ａ−Ｔ１１ｂ）である。
【０２３０】
次に、ステップＳ１０７でＩ／Ｏ実行部３０３ａは、ステップＳ１０５の内部処理により生成したＩ／Ｏ要求を、ネットワーク１３０を介してストレージに送信する。その後、ステップＳ１０８に示すように、Ｉ／Ｏ実行部３０３ａは、ストレージからの応答の受信を待つ。
【０２３１】
そして、ストレージからの応答の受信が完了すると、ステップＳ１０９で制御部３０４ａが内部処理時間の測定を再開する。具体的には、制御部３０４ａは、変数Ｔに現在時刻を代入する。例えば、図６〜７の例では、ステップＳ１０９で、時刻Ｔ１５（すなわち時刻Ｔ１５ｂ）が変数Ｔに代入される。
【０２３２】
ところで、図８〜９を参照して説明したとおり、サーバ１５０ａからの１つのＩ／Ｏ要求に対応して、ストレージコントローラ１２０ａが２つ以上のＩ／Ｏ要求を送信する場合があり得る。そこで、ステップＳ１１０で制御部３０４ａは、Ｉ／Ｏ実行部３０３ａへの問い合わせを介して、「いずれかのストレージに送信するＩ／Ｏ要求がさらにあるのか否か」を判断する。
【０２３３】
ストレージに送信するＩ／Ｏ要求がもうなければ、図１１の処理はステップＳ１１１に移行する。逆に、いずれかのストレージに送信するＩ／Ｏ要求がさらにあれば、図１１の処理はステップＳ１０５に戻る。なお、ステップＳ１１０からステップＳ１０５に処理が戻る場合には、ステップＳ１０５の内部処理は、ストレージコントローラ１２０ａからサーバ１５０ａに対する応答を準備するための処理を含んでいてもよい。
【０２３４】
例えば、図６〜７の例では、ステップＳ１１０の１回目の実行のときに、処理がステップＳ１１０からステップＳ１１１へと移行する。それに対して、図８の例では、処理がステップＳ１１０からステップＳ１０５へと戻る。より詳しくは、図８の例では、ステップＳ１０５〜Ｓ１１０が３回繰り返される。また、図９の例では、ステップＳ１０５〜Ｓ１１０が２回繰り返される。
【０２３５】
例えば、図８の例では、以下のようにして制御部３０４ａが変数Ｔと変数Ｄの更新を繰り返す。
【０２３６】
・時刻Ｔ２１において、ステップＳ１０１により、Ｔ＝Ｔ２１かつＤ＝０である。
・時刻Ｔ２２において、ステップＳ１０６により、Ｄ＝Ｄ２１（＝０＋（Ｔ２２−Ｔ２１））である。
・時刻Ｔ２５において、ステップＳ１０９により、Ｔ＝Ｔ２５である。
・時刻Ｔ２６において、ステップＳ１０６により、Ｄ＝Ｄ２１＋Ｄ２２（＝Ｄ２１＋（Ｔ２６−Ｔ２５））である。
・時刻Ｔ２９において、ステップＳ１０９により、Ｔ＝Ｔ２９である。
・時刻Ｔ３０において、ステップＳ１０６により、Ｄ＝Ｄ２１＋Ｄ２２＋Ｄ２３（＝Ｄ２１＋Ｄ２２＋（Ｔ３０−Ｔ２９））である。
・時刻Ｔ３３において、ステップＳ１０９により、Ｔ＝Ｔ３３である。
【０２３７】
また、図９の例では、以下のようにして制御部３０４ａが変数Ｔと変数Ｄの更新を繰り返す。
・時刻Ｔ４１において、ステップＳ１０１により、Ｔ＝Ｔ４１かつＤ＝０である。
・時刻Ｔ４２において、ステップＳ１０６により、Ｄ＝Ｄ４１（＝０＋（Ｔ４２−Ｔ４１））である。
・時刻Ｔ４５において、ステップＳ１０９により、Ｔ＝Ｔ４５である。
・時刻Ｔ４６において、ステップＳ１０６により、Ｄ＝Ｄ４１＋Ｄ４２（＝Ｄ４１＋（Ｔ４６−Ｔ４５））である。
・時刻Ｔ４９において、ステップＳ１０９により、Ｔ＝Ｔ４９である。
【０２３８】
さて、Ｉ／Ｏ実行部３０３ａが１つ以上のＩ／Ｏ要求をすべてそれぞれ適宜のストレージに送信し終わり、最後に送信したＩ／Ｏ要求に対する応答も受信し終わると、上記のとおりステップＳ１１１が実行される。ステップＳ１１１でＩ／Ｏ実行部３０３ａは、サーバ１５０ａに応答を返すための内部処理を実行する。例えば、Ｉ／Ｏ実行部３０３ａは、上記のようにして１台以上のストレージから得た各応答から、サーバ１５０ａに返すための応答を生成し、生成した応答をＩ／Ｏ要求受信部３０１ａに出力してもよい。
【０２３９】
そして、ステップＳ１１１での内部処理の結果として、サーバ１５０ａに応答を返すための準備が完了すると、次に、ステップＳ１１２で制御部３０４ａが変数Ｄを更新する。つまり、内部処理時間の測定は、ステップＳ１１２で終了する。具体的には、制御部３０４ａは、ステップＳ１０６と同様にして変数Ｄを更新する。
【０２４０】
例えば、図６〜７の例では、時刻Ｔ１６（つまり時刻Ｔ１６ａ）にステップＳ１１２が実行されるので、ステップＳ１１２で変数Ｄの値が、Ｄ１１から（Ｄ１１＋Ｄ１２）に更新される。また、図８の例では、時刻Ｔ３４にステップＳ１１２が実行されるので、ステップＳ１１２で変数Ｄの値が、（Ｄ２１＋Ｄ２２＋Ｄ２３）から（Ｄ２１＋Ｄ２２＋Ｄ２３＋Ｄ２４）に更新される。そして、図９の例では、時刻Ｔ５０にステップＳ１１２が実行されるので、ステップＳ１１２で変数Ｄの値が、（Ｄ４１＋Ｄ４２）から（Ｄ４１＋Ｄ４２＋Ｄ４３）に更新される。
【０２４１】
次に、ステップＳ１１３でＩ／Ｏ要求受信部３０１ａは、ネットワーク１４０を介してサーバ１５０ａに応答を返す。
【０２４２】
最後に、ステップＳ１１４で制御部３０４ａは、変数Ｄの値を時間記録テーブル３０６ａに書き込む。より具体的には、制御部３０４ａは、以下の２つの値を含む新たなエントリを時間記録テーブル３０６ａに追加する。
【０２４３】
・図１１の処理のトリガとなったサーバ１５０ａからのＩ／Ｏ要求に含まれるＩ／Ｏ要求番号
・変数Ｄの値
【０２４４】
さて、図１１についての以上の説明から明らかなように、ストレージコントローラ１２０ａがいずれかのサーバからのＩ／Ｏ要求を１つ処理するたびに、時間記録テーブル３０６ａには１つのエントリが追加される。そして、追加されたエントリには、当該１つのＩ／Ｏ要求の処理にかかった時間のうちの内部処理時間が記録される。
【０２４５】
こうして得られた時間記録テーブル３０６ａのデータを２段階に分けて集計することにより、図１のステップＳ２で使われる時間情報（すなわち、２次集計テーブル３１２における平均内部処理時間）が得られる。以下、図１２を参照して、平均内部処理時間の算出と記録について具体的に説明する。
【０２４６】
図１２は、ストレージコントローラが定期的に行う処理のフローチャートである。仮想ストレージシステム１００内の各ストレージコントローラは、定期的に図１２の処理を実行する。より具体的には、図１０に関して説明した第１の所定時間ごとに、各ストレージコントローラ内の制御部が、図１２の処理を実行する。以下では説明の便宜上、第１の所定時間が１分間であるものとし、第２の所定時間が１週間であるものとする。そして、ストレージコントローラ１２０ａの制御部３０４ａが図１２の処理を実行する場合を例にして、図１２について説明する。
【０２４７】
ステップＳ２０１で制御部３０４ａは、ストレージコントローラ１２０ａ内の時間記録テーブル３０６ａを参照し、直近１分間の、Ｉ／Ｏ要求１件あたりのストレージコントローラ１２０ａの平均内部処理時間を算出する。第１実施形態では、時間記録テーブル３０６ａには、直近１分間に含まれるいずれかの時点において、ストレージコントローラ１２０ａが処理を完了したＩ／Ｏ要求についての内部処理時間のみが記録されている。よって、ステップＳ２０１で制御部３０４ａは、具体的には、時間記録テーブル３０６ａの全エントリの内部処理時間の総和を、時間記録テーブル３０６ａのエントリの数で割ることにより、平均内部処理時間を算出する。
【０２４８】
次に、ステップＳ２０２で制御部３０４ａは、共有ディスク１７０上の１次集計テーブル群３１１のうち、ストレージコントローラ１２０ａに対応する１次集計テーブル３１１ａを更新する。具体的には、制御部３０４ａは、１次集計テーブル３１１ａ内の、現在時刻に対応するエントリに、ステップＳ２０１で算出した平均内部処理時間と、直近１分間にストレージコントローラ１２０ａが処理したＩ／Ｏ要求の数を書き込む。
【０２４９】
例えば、制御部３０４ａは、日付と時刻のフィールドの値が現在の１週間前の日時を示すエントリを１次集計テーブル３１１ａから削除し、代わりに新たなエントリを追加してもよい。この場合、上記の「現在時刻に対応するエントリ」は、追加される新たなエントリである。
【０２５０】
あるいは、１次集計テーブル３１１ａがリングバッファにより実現されてもよい。この場合、上記の「現在時刻に対応するエントリ」は、日付と時刻のフィールドの値が現在の１週間前の日時を示すエントリである。例えば、現在時刻が２０１１年２月１０日１０時００分００秒である場合、現在時刻に対応するエントリは、図１０の１番目に示されているエントリである。
【０２５１】
いずれにせよ、制御部３０４ａは、現在時刻に対応するエントリにおいて、各フィールドに以下のように値を設定する。
【０２５２】
・制御部３０４ａは、日付のフィールドに今日の日付を書き込む。
・制御部３０４ａは、時刻のフィールドに現在の時刻を書き込む。
・制御部３０４ａは、平均内部処理時間のフィールドに、ステップＳ２０１で算出した平均内部処理時間を書き込む。
・制御部３０４ａは、Ｉ／Ｏの数のフィールドに、時間記録テーブル３０６ａのエントリの総数（すなわち、直近１分間にストレージコントローラ１２０ａが処理したＩ／Ｏ要求の数）を書き込む。
【０２５３】
さらに、ステップＳ２０３で制御部３０４ａは、以上のようにして更新した共有ディスク１７０上の１次集計テーブル３１１ａを参照し、直近１週間の、Ｉ／Ｏ要求１件あたりのストレージコントローラ１２０ａの平均内部処理時間を算出する。具体的には、制御部３０４ａは、図１０に関して説明した式（４）にしたがって、平均内部処理時間を算出する。
【０２５４】
そして、ステップＳ２０４で制御部３０４ａは、共有ディスク１７０上の２次集計テーブル３１２内の、ストレージコントローラ１２０ａに対応するエントリに、ステップＳ２０３で算出した平均内部処理時間を書き込む。
【０２５５】
また、ステップＳ２０５で制御部３０４ａは、ストレージコントローラ１２０ａ内の時間記録テーブル３０６ａをクリアする。すなわち、制御部３０４ａは、時間記録テーブル３０６ａの全エントリを削除する。そして、図１２の処理は終了する。
【０２５６】
続いて、以上の図１２の処理による効果について説明する。
時間記録テーブル３０６ａは、制御部３０４ａにより頻繁にアクセスされる。つまり、時間記録テーブル３０６ａは、ストレージコントローラ１２０ａがＩ／Ｏ要求の処理を完了するたびにアクセスされ、さらに、第１の所定時間ごとにもアクセスされる。制御部３０４ａから頻繁にアクセスされる時間記録テーブル３０６ａは、ストレージコントローラ１２０ａのＲＡＭ２１２上に記憶されることが望ましい。
【０２５７】
なお、時間記録テーブル３０６ａは、ストレージコントローラ１２０ａの不揮発性記憶装置２１３に記憶されていてもよい。しかし、いずれにしろ、時間記録テーブル３０６ａは、ストレージコントローラ１２０ａの外部の記憶装置（例えば共有ディスク１７０など）ではなく、ストレージコントローラ１２０ａの内部にローカルに記憶されることが望ましい。
【０２５８】
一方で、ストレージコントローラ１２０ａのＲＡＭ２１２は、例えばサーバ１５０ａのＲＡＭと比べて小容量である場合が多い。また、ストレージコントローラ１２０ａの不揮発性記憶装置２１３も、例えば物理ＨＤＤ２０１や共有ディスク１７０などと比べて小容量である場合が多い。よって、ストレージコントローラ１２０ａが時間記録テーブル３０６ａのために消費する記憶容量は、小さいことが望ましい。
【０２５９】
ここで、図１２の処理によれば、ストレージコントローラ１２０ａが時間記録テーブル３０６ａのために消費する記憶容量は、比較的短い第１の所定時間（例えば１分間）に応じた容量であるから、比較的小さい。すなわち、図１２の処理によれば、「時間記録テーブル３０６ａの記憶容量が比較的小さくて済む」という有利な効果が得られる。同様に、図１２の処理によれば、「ストレージコントローラ１２０ｂが時間記録テーブル３０６ｂのために消費する記憶容量も、比較的小さい」という有利な効果が得られる。
【０２６０】
一方、個々の１次集計テーブルがアクセスされる頻度は、個々の時間記録テーブルがアクセスされる頻度に比べてかなり低い。同様に、２次集計テーブル３１２がアクセスされる頻度も、個々の時間記録テーブルがアクセスされる頻度に比べてかなり低い。よって、１次集計テーブル群３１１と２次集計テーブル３１２は、図５に示すように、ストレージコントローラの外部の共有ディスク１７０にあっても構わない。
【０２６１】
また、共有ディスク１７０は、例えばストレージコントローラ１２０ａのＲＡＭ２１２と比べてかなり容量が大きい。したがって、共有ディスク１７０には、比較的大きな記憶容量を消費するデータが記憶されていても問題ない。具体的には、共有ディスク１７０に記憶される１次集計テーブル群３１１の容量は大きくても問題ない。
【０２６２】
ここで、第１と第２の所定時間の長さは、実施形態に応じて決められていてよいが、第２の所定時間の方が第１の所定時間よりも長い。例えば、上記の例では、第２の所定時間は１週間であり、第１の所定時間は１分間であるから、第２の所定時間は第１の所定時間と比べて十分に長い。
【０２６３】
そして、図１０と１２の説明から分かるとおり、個々の１次集計テーブルの記憶容量は、第２の所定時間の第１の所定時間に対する比に応じた容量である。よって、第２の所定時間が第１の所定時間と比べて十分に長い場合、個々の１次集計テーブルの記憶容量は比較的大きい。また、１次集計テーブル群３１１の記憶容量は、ストレージコントローラの総数に応じて大きくなる。
【０２６４】
しかし、たとえ１次集計テーブル群３１１が比較的大きな記憶容量を消費するとしても、問題はない。なぜなら、上記のとおり共有ディスク１７０の容量は比較的大きいからである。そして、第２の所定時間が十分に長いことには、有意義な効果がある。
【０２６５】
なぜなら、ある程度長い第２の所定時間での平均内部処理時間を図１のステップＳ２における時間情報として使うことで、時間情報の信頼性が高まり、ステップＳ２の選択の適切さも向上するからである。例えば、１分間といった短期間における平均内部処理時間は、偶発的な要因に左右されやすい。しかし、例えば、１週間といった比較的長い期間における平均内部処理時間は、偶発的な要因の影響が少ないので、信頼性が高い。そのため、第２の所定時間での平均内部処理時間を図１のステップＳ２における時間情報として使う第１実施形態では、適切なストレージコントローラが選択される見込みが高い。
【０２６６】
つまり、図１２のように２段階の集計を行うこと（具体的には、第１の所定時間での平均内部処理時間を求める集計と、第２の所定時間での平均内部処理時間を求める集計を行うこと）には、以下のような効果がある。
【０２６７】
・信頼性の高い（つまり偶発的な要因に左右されにくい）時間情報として２次集計テーブル３１２のデータが得られる。そのため、信頼性の高い時間情報に基づいて、図１のステップＳ２では適切なストレージコントローラが選択される。
・各ストレージコントローラ内の記憶容量が比較的小さくても、信頼性の高い時間情報が得られる。
・２次集計テーブル３１２に記録される平均内部処理時間は、比較的短い第１の所定時間ごとに再計算され、更新される。そのため、ステップＳ２で使われる時間情報は、信頼性が高いだけでなく、状況の変化への追従性も良い。つまり、例えば「１２日前から５日前までの１週間の平均内部処理時間」のような古い情報ではなく、直近の１週間の平均内部処理時間が利用可能なので、状況の変化への追従性が良い。
【０２６８】
また、第１実施形態では、各ストレージコントローラの平均内部処理時間を得るために、テスト用のＩ／Ｏ要求を各ストレージコントローラに処理させる必要がない。よって、テストデータを用いて装置の性能を計測するシステムと比べると、第１実施形態には、「テスト用のＩ／Ｏ要求に起因する余計な負荷をかけなくても、ストレージコントローラの性能を示す値として平均内部処理時間が得られる」という利点がある。
【０２６９】
また、第１実施形態では、時間情報は、限られた数のテスト用のＩ／Ｏ要求それぞれについての内部処理時間からではなく、比較的長い第２の所定時間（例えば１週間）にわたって処理される大量のＩ／Ｏ要求それぞれについての内部処理時間から、得られる。したがって、テストデータを用いて装置の性能を計測するシステムと比べると、第１実施形態には、「得られる時間情報が、偶発的な要因の影響を受けにくく、信頼性が高い」という利点もある。
【０２７０】
続いて、新規論理ボリュームの追加の具体例について、図１３〜１５を参照して詳しく説明する。図１に概要を示したとおり、新規論理ボリュームの追加の際には、時間情報（具体的には以上の図１１〜１２の処理により得られる２次集計テーブル３１２）に基づいて、新規論理ボリューム用のアクティブ・ストレージコントローラが選択される。
【０２７１】
図１３は、新規論理ボリュームの追加を示すシーケンス図である。また、図１４〜１５は、図１３の動作シーケンス中で使われる各種データの例を示す図である。なお、紙幅の都合上、図１３では「ストレージコントローラ（storage controller）」が「ＳＣ」と略されている。
【０２７２】
ステップＳ３０１で端末１６０は、新規論理ボリュームを作成するための命令の入力をユーザから受け取る。当該命令は、新規論理ボリュームを識別するための識別情報である論理ボリュームＩＤ（identification）を含む。説明の便宜上、ステップＳ３０１では「ＶＯＬ＿５」という論理ボリュームＩＤが指定されるものとする。
【０２７３】
端末１６０は、ユーザからの入力にしたがって、ネットワーク１４０を介して管理部３０７に、新規論理ボリュームの作成要求を送信する。作成要求には、上記の「ＶＯＬ＿５」という論理ボリュームＩＤが含まれる。また、作成要求には、論理ボリュームの容量など、その他のパラメタも含まれる。
【０２７４】
すると、管理部３０７（より詳しくは、管理部３０７内の作成要求受信部３０８）は、作成要求を受信する。ステップＳ３０１における作成要求の受信は、図１のステップＳ１に対応する。
【０２７５】
次に、ステップＳ３０２で管理部３０７（より詳しくは、管理部３０７内の選択部３０９）は、新規論理ボリュームを担当する１つのアクティブ・ストレージコントローラと、新規論理ボリューム用の１つ以上のスタンバイ・ストレージコントローラを選択する。ステップＳ３０２におけるアクティブ・ストレージコントローラの選択は、図１のステップＳ２に対応する。
【０２７６】
具体的には、選択部３０９は、ネットワーク１３０を介して共有ディスク１７０上の２次集計テーブル３１２を参照する。そして、選択部３０９は、仮想ストレージシステム１００に含まれる複数のストレージコントローラの中で、平均内部処理時間が相対的に短い１つのストレージコントローラを、アクティブ・ストレージコントローラとして選択する。選択部３０９は、平均内部処理時間が最短のストレージコントローラを、アクティブ・ストレージコントローラとして選択することが望ましい。
【０２７７】
このように、第１実施形態では、２次集計テーブル３１２に記憶された平均内部処理時間が、図１のステップＳ２における時間情報として使われる。つまり、第１実施形態における時間情報は、過去のある期間内（すなわち第２の所定時間の長さの期間内）に生じた複数のＩ／Ｏ要求それぞれに対応する内部処理時間から得られる統計量（具体的には算術平均）である。
【０２７８】
説明の便宜上、ステップＳ３０２では「仮想ストレージシステム１００内のストレージコントローラのうち、ストレージコントローラ１２０ｂの平均内部処理時間が最短である」と判明したものとする。よって、選択部３０９は、新規論理ボリュームを管理するアクティブ・ストレージコントローラとして、ステップＳ３０２でストレージコントローラ１２０ｂを選択する。
【０２７９】
ところで、ステップＳ３０２におけるスタンバイ・ストレージコントローラの選択は、ランダムな選択であってもよいし、２次集計テーブル３１２に記憶された平均内部処理時間に基づく選択であってもよい。また、選択部３０９が選択するスタンバイ・ストレージコントローラの台数は任意である。
【０２８０】
例えば、選択部３０９は、２次集計テーブル３１２を参照して、平均内部処理時間が２番目と３番目に短いストレージコントローラを、新規論理ボリューム用の２台のスタンバイ・ストレージコントローラとして選択してもよい。選択部３０９は、アクティブ・ストレージコントローラ以外のストレージコントローラの中から、ランダムに２台のスタンバイ・ストレージコントローラを選択してもよい。もちろん、スタンバイ・ストレージコントローラの台数は、１台でもよいし３台以上でもよい。
【０２８１】
以下では説明の便宜上、次のように仮定する。
・ストレージコントローラ１２０ａには、「１」というストレージコントローラ番号が割り当てられている。
・ストレージコントローラ１２０ｂには、「２」というストレージコントローラ番号が割り当てられている。
・ストレージコントローラ１２０ｃには、「３」というストレージコントローラ番号が割り当てられている。
・紙幅の都合上、図２と３には３つの、図５には２つのストレージコントローラのみが図示されているが、仮想ストレージシステム１００には、少なくとも４つのストレージコントローラが含まれる。
・ある不図示のストレージコントローラには、「４」というストレージコントローラ番号が割り当てられている。
・選択部３０９は、上記のとおりステップＳ３０２で、ストレージコントローラ１２０ｂをアクティブ・ストレージコントローラとして選択した。
・選択部３０９は、ストレージコントローラ１２０ａと１２０ｃを、ステップＳ３０２でスタンバイ・ストレージコントローラとして選択した。
【０２８２】
さて、選択部３０９は、上記のようにストレージコントローラ１２０ｂをアクティブ・ストレージコントローラとして選ぶと、ステップＳ３０３において、ストレージコントローラ１２０ｂに新規論理ボリュームの作成を命令する。具体的には、選択部３０９は、新規論理ボリューム用の「ＶＯＬ＿５」という論理ボリュームＩＤや、論理ボリュームの容量などのパラメタを含む命令を、ネットワーク１３０を介してストレージコントローラ１２０ｂに送信する。
【０２８３】
また、ステップＳ３０４で選択部３０９は、スタンバイ・ストレージコントローラとして選択したストレージコントローラ１２０ａに対して通知を送信する。当該通知は、「ＶＯＬ＿５」という論理ボリュームＩＤで識別される新規論理ボリュームのスタンバイ・ストレージコントローラとして、ストレージコントローラ１２０ａが選ばれたことを示す。なお、選択部３０９自体がストレージコントローラ１２０ａ内にあるので、ステップＳ３０４での通知は、具体的にはストレージコントローラ１２０ａ内での、選択部３０９と制御部３０４ａの間のプロセス間通信などにより実現されてもよい。
【０２８４】
また、ステップＳ３０５で選択部３０９は、スタンバイ・ストレージコントローラとして選択したストレージコントローラ１２０ｃに対して、ネットワーク１３０を介して通知を送信する。当該通知は、「ＶＯＬ＿５」という論理ボリュームＩＤで識別される新規論理ボリュームのスタンバイ・ストレージコントローラとして、ストレージコントローラ１２０ｃが選ばれたことを示す。
【０２８５】
なお、ステップＳ３０３〜Ｓ３０５の実行順序は任意に入れ替えられても構わない。また、ステップＳ３０３の命令は、ストレージコントローラ１２０ｂの制御部３０４ｂにより受信される。そして、ステップＳ３０４の通知は、ストレージコントローラ１２０ａの制御部３０４ａにより受信され、ステップＳ３０５の通知は、ストレージコントローラ１２０ｃの不図示の制御部により受信される。
【０２８６】
さて、ステップＳ３０３の命令を受信したストレージコントローラ１２０ｂにおいて、制御部３０４ｂは、命令にしたがって、新規論理ボリュームを構築する。具体的には、制御部３０４ｂは、まず、適宜のポリシにしたがって、「新規論理ボリュームを、何個の、どの論理ユニットに断片化するのか」を決定する。そして、制御部３０４ｂは、当該決定に応じて、１つ以上のストレージとネットワーク１３０を介して通信し、新規論理ボリュームと２つ以上の論理ユニットとを対応づける対応関係情報を共有ディスク１７０に書き込む。
【０２８７】
説明の便宜上、例えば、制御部３０４ｂが、新規論理ボリュームを、次の４個の論理ユニットに断片化することに決めたとする。
・ストレージ１１０ｂ内の論理ユニット１１２ｂと１１３ｂ
・ストレージ１１０ｃ内の論理ユニット１１１ｃと１１２ｃ
【０２８８】
この場合、ステップＳ３０６で制御部３０４ｂは、ストレージ１１０ｂと通信し、新規論理ボリューム用の記憶領域を論理ユニット１１２ｂと１１３ｂ上にそれぞれ確保（allocate）するよう、ストレージ１１０ｂに要求する。記憶領域の確保に成功すると、ストレージ１１０ｂから制御部３０４ｂへ、成功を示す通知が返される。
【０２８９】
同様に、ステップＳ３０７で制御部３０４ｂは、ストレージ１１０ｃと通信し、新規論理ボリューム用の記憶領域を論理ユニット１１１ｃと１１２ｃ上にそれぞれ確保するよう、ストレージ１１０ｃに要求する。記憶領域の確保に成功すると、ストレージ１１０ｃから制御部３０４ｂへ、成功を示す通知が返される。
【０２９０】
ステップＳ３０６とステップＳ３０７の実行順は逆でもよい。いずれにせよ、ステップＳ３０６〜Ｓ３０７の結果として、新規論理ボリュームが構築される。
【０２９１】
また、上記のとおり、制御部３０４ｂは、新規論理ボリュームと論理ユニットとを対応づける対応関係情報を、共有ディスク１７０に書き込む。例えば、新規論理ボリュームが上記のように論理ユニット１１２ｂ、１１３ｂ、１１１ｃ、および１１２ｃに断片化される場合、制御部３０４ｂは、これら４つの論理ユニットを新規論理ボリュームと対応づける対応関係情報を、共有ディスク１７０に書き込む。
【０２９２】
そして、以上のようにして新規論理ボリュームの作成が完了すると、次に、ステップＳ３０８で制御部３０４ｂは、新規論理ボリュームの作成完了を管理部３０７に通知する。
【０２９３】
なお、図１３の例では、管理部３０７を含むストレージコントローラ１２０ａとは別のストレージコントローラ１２０ｂが、アクティブ・ストレージコントローラとして選ばれる。そのため、管理部３０７と制御部３０４ｂの間の通信は、ネットワーク１３０を介して行われる。しかし、選択部３０９がストレージコントローラ１２０ａをアクティブ・ストレージコントローラとして選んだ場合には、管理部３０７と制御部３０４ａの間の通信は、ストレージコントローラ１２０ａ内の通信（例えばプロセス間通信）であってもよい。
【０２９４】
管理部３０７は、ステップＳ３０８の完了通知を受信すると、次に、ステップＳ３０９で、新規論理ボリュームの追加に応じた適宜の処理を行う。例えば、第１実施形態では、管理部３０７は、共有ディスク１７０上のストレージコントローラ管理テーブル３１３と論理ボリューム管理テーブル３１４を更新する。
【０２９５】
図１４には、ストレージコントローラ管理テーブル３１３と論理ボリューム管理テーブル３１４が例示されている。ストレージコントローラ管理テーブル３１３の各エントリは、１台のストレージコントローラに対応し、以下の４つのフィールドを含む。
【０２９６】
・ストレージコントローラを識別するための「ストレージコントローラ番号」フィールド
・ストレージコントローラ番号により識別されるストレージコントローラが正常か否かを示す「ストレージコントローラの状態」フィールド
・ストレージコントローラ番号により識別されるストレージコントローラに割り当てられているＩＰ（Internet Protocol）アドレスを示す「ＩＰアドレス」フィールド
・ストレージコントローラ番号により識別されるストレージコントローラがアクティブ・ストレージコントローラとして担当する論理ボリュームを示す「論理ボリュームＩＤ」フィールド
【０２９７】
例えば、図１４に例示したストレージコントローラ管理テーブル３１３は、以下のことを示す。
・「１」というストレージコントローラ番号が割り当てられたストレージコントローラ１２０ａは、正常である。ストレージコントローラ１２０ａには「１０．２０．４０．５０」というＩＰアドレスが割り当てられている。また、ストレージコントローラ１２０ａは、現在、「ＶＯＬ＿１」という論理ボリュームＩＤで識別される論理ボリュームと、「ＶＯＬ＿４」という論理ボリュームＩＤで識別される論理ボリュームを担当している。
・「２」というストレージコントローラ番号が割り当てられたストレージコントローラ１２０ｂも、正常である。ストレージコントローラ１２０ｂには「１０．２０．４０．５１」というＩＰアドレスが割り当てられている。また、ストレージコントローラ１２０ｂは、現在、「ＶＯＬ＿２」という論理ボリュームＩＤで識別される論理ボリュームと、「ＶＯＬ＿５」という論理ボリュームＩＤで識別される論理ボリュームを担当している。
・「３」というストレージコントローラ番号が割り当てられたストレージコントローラ１２０ｃも、正常である。ストレージコントローラ１２０ｃには「１０．２０．４０．５２」というＩＰアドレスが割り当てられている。また、ストレージコントローラ１２０ｃは、現在、「ＶＯＬ＿３」という論理ボリュームＩＤで識別される論理ボリュームを担当している。
・「４」というストレージコントローラ番号が割り当てられた不図示のストレージコントローラにはエラーが発生しており、当該ストレージコントローラは正常ではない。そのため、当該ストレージコントローラが現在アクティブ・ストレージコントローラとして担当している論理ボリュームはない。なお、当該ストレージコントローラには「１０．２０．４０．５３」というＩＰアドレスが割り当てられている。
【０２９８】
仮想ストレージシステム１００に新たなストレージコントローラが追加されるたびに、管理部３０７は、ストレージコントローラ管理テーブル３１３に１つエントリを追加する。
【０２９９】
また、ストレージコントローラの状態が正常から異常に変化したことが検出されると、「ストレージコントローラの状態」フィールドが書き換えられる。例えば、ある論理ボリュームに関するフェイルオーバにともなって、新たにアクティブ・ストレージコントローラとなったストレージコントローラが、管理部３０７にフェイルオーバの発生を通知してもよい。管理部３０７は、新たなアクティブ・ストレージコントローラからの通知に基づいて、エラーの発生したストレージコントローラについての「ストレージコントローラの状態」フィールドの値を更新してもよい。
【０３００】
また、図１３のステップＳ３０９では、ストレージコントローラ管理テーブル３１３が具体的には次のように更新される。管理部３０７は、ステップＳ３０２で選んだアクティブ・ストレージコントローラのエントリにおいて、「論理ボリュームＩＤ」フィールドに、ステップＳ３０１で指定された新規論理ボリュームの論理ボリュームＩＤを追加する。
【０３０１】
例えば、図１３の例では、新規論理ボリュームの論理ボリュームＩＤは「ＶＯＬ＿５」であり、ステップＳ３０２では、「２」というストレージコントローラ番号を持つストレージコントローラ１２０ｂがアクティブ・ストレージコントローラとして選ばれる。よって、管理部３０７は、ステップＳ３０９で、ストレージコントローラ管理テーブル３１３においてストレージコントローラ番号が「２」のエントリの「論理ボリュームＩＤ」フィールドに、「ＶＯＬ＿５」という論理ボリュームＩＤを追加する。図１４には、こうして更新されたストレージコントローラ管理テーブル３１３が例示されている。
【０３０２】
また、ステップＳ３０９では上記のとおり論理ボリューム管理テーブル３１４も更新される。図１４に例示した論理ボリューム管理テーブル３１４において、各エントリは、１つの論理ボリュームに対応し、以下の５つのフィールドを含む。
【０３０３】
・論理ボリュームに割り当てられたＩＱＮ（iSCSI Qualified Name）を示す「論理ボリュームＩＱＮ」フィールド
・論理ボリュームＩＱＮの割り当てられた論理ボリュームを識別するための「論理ボリュームＩＤ」フィールド
・論理ボリュームＩＤにより識別される論理ボリュームが通常の状態にあるか否かを示す「論理ボリュームの状態」フィールド
・論理ボリュームＩＤにより識別される論理ボリュームを管理するアクティブ・ストレージコントローラを識別する番号を示す「アクティブ・ストレージコントローラ番号」フィールド
・論理ボリュームＩＤにより識別される論理ボリューム用のスタンバイ・ストレージコントローラとして選ばれた１台以上のストレージコントローラの各々を識別する番号のリストを示す「スタンバイ・ストレージコントローラ番号」フィールド
【０３０４】
なお、第１実施形態では、ｉＳＣＳＩプロトコルが使われるため、各論理ボリュームにはＩＱＮが割り当てられる。一方で、ユーザの利便性のため、第１実施形態では、論理ボリュームＩＤも使われる。しかし、ＩＱＮと論理ボリュームＩＤはどちらも識別情報であるから、実施形態によっては、論理ボリュームＩＤが省略されてもよい。また、ｉＳＣＳＩ以外のプロトコル（例えばファイバチャネル・プロトコル）が使われる場合は、プロトコルに応じた識別情報がＩＱＮの代わりに使われる。
【０３０５】
管理部３０７は、新規論理ボリュームの追加のたびに、論理ボリューム管理テーブル３１４に１つエントリを追加する。例えば、図１３の例では、「ＶＯＬ＿５」という論理ボリュームＩＤを持つ論理ボリュームが追加される。よって、この論理ボリュームの追加に応じて、ステップＳ３０９で管理部３０７は、論理ボリューム管理テーブル３１４に、図１４において５番目に示したエントリを追加する。
【０３０６】
５番目のエントリによれば、新規論理ボリュームのＩＱＮは「ＩＱＮ−ＴＧＴ５５５５５」であり、新規論理ボリュームの論理ボリュームＩＤは「ＶＯＬ＿５」であり、新規論理ボリュームの状態は正常である。
【０３０７】
また、上記のとおり、ステップＳ３０２で管理部３０７内の選択部３０９は、ストレージコントローラ１２０ｂをアクティブ・ストレージコントローラとして選択する。よって、管理部３０７は、「アクティブ・ストレージコントローラ番号」フィールドに、ストレージコントローラ１２０ｂの番号である「２」を書き込む。
【０３０８】
そして、上記のとおり、ステップＳ３０２で選択部３０９は、ストレージコントローラ１２０ａと１２０ｃをスタンバイ・ストレージコントローラとして選択する。よって、管理部３０７は、「スタンバイ・ストレージコントローラ番号」フィールドに、ストレージコントローラ１２０ａと１２０ｃの番号である「１」と「３」を書き込む。
【０３０９】
図１４には、以上のようにしてステップＳ３０９で設定された５番目のエントリが例示されている。また、１番目、３番目、および４番目のエントリの意味は、図１４から明らかであろう。
【０３１０】
なお、２番目のエントリでは「論理ボリュームの状態」フィールドに「ＤＥＬＥＴＩＮＧ」という値が記憶されている。これは、「ＶＯＬ＿２」という論理ボリュームＩＤで識別される論理ボリュームに関してフェイルオーバが進行中であり、当該論理ボリュームが通常の状態にはないことを示す。
【０３１１】
ストレージコントローラのフェイルオーバのための具体的手法は、例えば公知の手法であってもよいが、フェイルオーバ処理の進行にともなって、第１実施形態では、２番目のエントリが例えば以下のようにして管理部３０７により書き換えられてもよい。管理部３０７は、新たなアクティブ・ストレージコントローラと通信することにより、フェイルオーバ処理の進捗を認識してもよい。
【０３１２】
「４」という番号で識別される今までのアクティブ・ストレージコントローラの故障にともない、「スタンバイ・ストレージコントローラ番号」フィールドに書かれた「１」という番号で識別されるストレージコントローラ１２０ａへのフェイルオーバが生じる。例えば、第１実施形態では、フェイルオーバ処理の進行にともなって、「ＤＥＬＥＴＩＮＧ」という値は「ＣＲＥＡＴＩＮＧ」という値に書き換えられる。「ＤＥＬＥＴＩＮＧ」という値は、「４」という番号で識別される今までのアクティブ・ストレージコントローラと、「ＶＯＬ＿２」という論理ボリュームＩＤで識別される論理ボリュームとの対応づけが無効化されることを示す。「ＣＲＥＡＴＩＮＧ」という値は、ストレージコントローラ１２０ａがスタンバイ状態からアクティブ状態へと遷移中であることを示す。
【０３１３】
また、フェイルオーバ処理の進行にともなって、「アクティブ・ストレージコントローラ番号」フィールドは、「４」から「１」へと書き換えられ、「スタンバイ・ストレージコントローラ番号」フィールドからは「１」という番号が削除される。さらに、新たにもう１つのスタンバイ・ストレージコントローラが選択され、選択されたストレージコントローラの番号が「スタンバイ・ストレージコントローラ番号」フィールドに追加される。
【０３１４】
なお、以上、図１４を参照して説明したような、ステップＳ３０９におけるストレージコントローラ管理テーブル３１３と論理ボリューム管理テーブル３１４の更新の処理は、実施形態に応じて適宜変形されてよい。ストレージコントローラ管理テーブル３１３と論理ボリューム管理テーブル３１４の構造も、実施形態に応じて適宜変形されてよい。
【０３１５】
いずれにせよ、以上説明したステップＳ３０１〜Ｓ３０９の実行結果として、新規論理ボリュームが作成される。すると、ステップＳ３１０で管理部３０７（より具体的には管理部３０７内の作成要求受信部３０８）は、ネットワーク１４０を介して端末１６０に、新規論理ボリュームの作成完了を通知する。ステップＳ３１０の通知は、ステップＳ３０１の作成要求に対する応答である。
【０３１６】
さて、その後のステップＳ３１１〜Ｓ３１７は、サーバから論理ボリュームへのアクセスを可能にするための手順の例を示す。具体的には、まずステップＳ３１１で、端末１６０が、作成された新規論理ボリュームのサーバへの割り当てを指示する命令の入力をユーザから受け取る。当該命令は、新規論理ボリュームの論理ボリュームＩＤと、サーバを識別する識別情報を含む。以下では説明の便宜上、次のように仮定する。
【０３１７】
・ネットワーク１４０には、図２〜３には不図示のサーバ１５０ｃがさらに接続されている。
・サーバ１５０ｃを識別する識別情報としてのサーバＩＤは、「ＳＲＶ＿３」である。
・ステップＳ３０１〜Ｓ３１０の結果として作成された新規論理ボリュームを、サーバ１５０ｃに割り当てるための命令の入力を、端末１６０がステップＳ３１１でユーザから受け取る。
【０３１８】
端末１６０は、ユーザからの入力に応じて、管理部３０７に対して、「ＶＯＬ＿５」という論理ボリュームＩＤで識別される新規論理ボリュームを「ＳＲＶ＿３」というサーバＩＤで識別されるサーバ１５０ｃに割り当てるよう、要求する。この要求は、ステップＳ３１１の矢印により示すように、ネットワーク１４０を介して送信される。
【０３１９】
すると、ステップＳ３１２で管理部３０７は、受信した要求に応じて、共有ディスク１７０上のサーバ管理テーブル３１５を更新する。例えば、第１実施形態では、図１５に例示するようなサーバ管理テーブル３１５が使われる。
【０３２０】
図１５に示すように、サーバ管理テーブル３１５の各エントリは、ネットワーク１４０を介して仮想ストレージシステム１００と接続された個々のサーバに対応する。サーバ管理テーブル３１５の各エントリは、以下の３つのフィールドを含む。
【０３２１】
・サーバを識別するための「サーバＩＤ」フィールド
・サーバＩＤにより識別されるサーバに割り当てられたＩＱＮを示す「サーバＩＱＮ」フィールド
・サーバＩＤにより識別されるサーバに割り当てられた（つまり、サーバＩＤにより識別されるサーバからアクセス可能な）各論理ボリュームのＩＤのリストを示す「論理ボリュームＩＤ」フィールド
【０３２２】
論理ボリューム管理テーブル３１４と同様に、サーバ管理テーブル３１５でも、ユーザの利便性のため、ＩＱＮのほかにさらにＩＤが利用される。また、ｉＳＣＳＩ以外のプロトコル（例えばファイバチャネル・プロトコル）が使われる場合は、プロトコルに応じた識別情報がＩＱＮの代わりに使われる。
【０３２３】
例えば、図１５の例では、サーバ管理テーブル３１５の１番目のエントリに示すとおり、「ＳＲＶ＿１」というサーバＩＤにより識別されるサーバには、「ＩＱＮ１１１１１１１」というＩＱＮが割り当てられている。そして、当該サーバには、「ＶＯＬ＿１」と「ＶＯＬ＿２」というＩＤでそれぞれ識別される２つの論理ボリュームが割り当てられている。
【０３２４】
また、図１５の例では、サーバ管理テーブル３１５の２番目のエントリに示すとおり、「ＳＲＶ＿２」というサーバＩＤにより識別されるサーバには、「ＩＱＮ２２２２２２２」というＩＱＮが割り当てられている。そして、当該サーバには、「ＶＯＬ＿３」と「ＶＯＬ＿４」というＩＤでそれぞれ識別される２つの論理ボリュームが割り当てられている。
【０３２５】
さらに、図１５の例では、サーバ管理テーブル３１５の３番目のエントリに示すとおり、「ＳＲＶ＿３」というサーバＩＤにより識別されるサーバには、「ＩＱＮ３３３３３３３」というＩＱＮが割り当てられている。図１３のステップＳ３１２で管理部３０７は、ステップＳ３１１の要求に応じて、３番目のエントリの「論理ボリュームＩＤ」フィールドに、「ＶＯＬ＿５」というＩＤを追加する。
【０３２６】
続いて、ステップＳ３１３では、サーバ１５０ｃ（より具体的には、サーバ１５０ｃ内の不図示のマルチパスドライバ）が、ユーザからの入力に応じて、仮想ストレージシステム１００内のいずれかのストレージコントローラに対して、検索要求を送信する。当該検索要求は、サーバ１５０ｃからアクセス可能な（すなわちサーバ１５０ｃに割り当てられている）論理ボリュームを検索するための要求である。換言すれば、当該検索要求は、ｉＳＣＳＩイニシエータとしてのサーバ１５０ｃから使用可能な、ｉＳＣＳＩターゲットとしての論理ボリュームを検索するための要求である。
【０３２７】
検索要求は、どのストレージコントローラに送信されてもよい。以下では説明の便宜上、サーバ１５０ｃが、何らかのポリシにしたがい、ストレージコントローラ１２０ａを検索要求の送信先に選んだものとする。例えば、サーバ１５０ｃは、ラウンドロビン式に検索要求の送信先を選んでもよいし、ランダムに検索要求の送信先を選んでもよいし、予め決められた特定のストレージコントローラを検索要求の送信先として選んでもよい。
【０３２８】
具体的には、ステップＳ３１３でサーバ１５０ｃは、選んだストレージコントローラ１２０ａのＩＰアドレスを宛先として指定して、ネットワーク１４０を介して検索要求を送信する。すると、ストレージコントローラ１２０ａのＩ／Ｏ要求受信部３０１ａが検索要求を受信する。
【０３２９】
そして、ステップＳ３１４でＩ／Ｏ要求受信部３０１ａは、ネットワーク１３０を介して共有ディスク１７０を参照し、図１５に示すようなボリューム情報３１６を生成する。
【０３３０】
ボリューム情報３１６は、検索要求の送信元のサーバに割り当てられている（つまり、検索要求の送信元のサーバからアクセス可能な）各論理ボリュームについて、以下のことを示す情報である。
【０３３１】
・当該論理ボリュームを識別する論理ボリュームＩＤ
・当該論理ボリュームに割り当てられている論理ボリュームＩＱＮ
・検索要求の送信元のサーバから当該論理ボリュームへのアクセスに使用可能な各パスについての情報
【０３３２】
ここで、上記リストの３番目に示した「各パスについての情報」とは、より具体的には、以下のような情報である。
・各パス上のストレージコントローラのＩＰアドレス
・各パスがアクティブ状態かスタンバイ状態かを示す情報（つまり、当該パス上のストレージコントローラが、アクティブ・ストレージコントローラなのかスタンバイ・ストレージコントローラなのかを示す情報）
【０３３３】
具体的には、Ｉ／Ｏ要求受信部３０１ａは、検索要求を受信すると、サーバ管理テーブル３１５を参照する。検索要求には、検索要求の送信元のサーバ１５０ｃの「ＳＲＶ＿３」というサーバＩＤが含まれている。よって、Ｉ／Ｏ要求受信部３０１ａは、「ＳＲＶ＿３」というサーバＩＤを含むエントリを探し、見つけたエントリの「論理ボリュームＩＤ」フィールドを参照する。
【０３３４】
図１５の例によれば、「論理ボリュームＩＤ」フィールドには、「ＶＯＬ＿５」という１つのＩＤのみが含まれるが、場合によっては、「論理ボリュームＩＤ」フィールドには２つ以上のＩＤが含まれることがある。Ｉ／Ｏ要求受信部３０１ａは、サーバ管理テーブル３１５の「論理ボリュームＩＤ」フィールドに含まれる各ＩＤについて、論理ボリュームＩＱＮと、当該ＩＤで識別される論理ボリュームへのアクセスに使用可能な各パスについての情報を取得する。
【０３３５】
例えば、上記のようにサーバ管理テーブル３１５の「論理ボリュームＩＤ」フィールドで「ＶＯＬ＿５」というＩＤが見つかると、Ｉ／Ｏ要求受信部３０１ａは、論理ボリューム管理テーブル３１４を参照する。そして、Ｉ／Ｏ要求受信部３０１ａは、「ＶＯＬ＿５」というＩＤを持つエントリを論理ボリューム管理テーブル３１４において検索する。
【０３３６】
Ｉ／Ｏ要求受信部３０１ａは、見つかったエントリから、論理ボリュームＩＱＮと、アクティブ・ストレージコントローラ番号と、スタンバイ・ストレージコントローラ番号を読み取る。図１４の論理ボリューム管理テーブル３１４によれば、論理ボリュームＩＱＮとして「ＩＱＮ−ＴＧＴ５５５５５」が得られる。また、アクティブ・ストレージコントローラ番号として「２」が得られ、スタンバイ・ストレージコントローラ番号として、「１」と「３」が得られる。
【０３３７】
さらに、Ｉ／Ｏ要求受信部３０１ａは、上記のようにして得られた「２」という番号を含むエントリを、ストレージコントローラ管理テーブル３１３において探す。そして、Ｉ／Ｏ要求受信部３０１ａは、見つかったエントリから、ＩＰアドレスを読み出す。同様に、Ｉ／Ｏ要求受信部３０１ａは、「１」と「３」という番号にそれぞれ対応するＩＰアドレスも、ストレージコントローラ管理テーブル３１３から読み出す。
【０３３８】
以上のような処理の結果として、Ｉ／Ｏ要求受信部３０１ａは、次のように認識し、認識した結果から図１５のボリューム情報３１６を生成する。
【０３３９】
・検索要求の送信元のサーバ１５０ａには、「ＶＯＬ＿５」というＩＤで識別される論理ボリュームが割り当てられており、当該論理ボリュームのＩＱＮは「ＩＱＮ−ＴＧＴ５５５５５」である。
・当該論理ボリュームへアクセスするためのパスのうちの１つは、「１０．２０．４０．５０」というＩＰアドレスのストレージコントローラ（つまりストレージコントローラ１２０ａ）を介したパスであり、当該パスはスタンバイ状態である。すなわち、ストレージコントローラ１２０ａは、スタンバイ・ストレージコントローラである。
・当該論理ボリュームへアクセスするためのパスのうちの別の１つは、「１０．２０．４０．５１」というＩＰアドレスのストレージコントローラ（つまりストレージコントローラ１２０ｂ）を介したパスであり、当該パスはアクティブ状態である。すなわち、ストレージコントローラ１２０ｂは、アクティブ・ストレージコントローラである。
・当該論理ボリュームへアクセスするためのパスのうちのさらに別の１つは、「１０．２０．４０．５２」というＩＰアドレスのストレージコントローラ（つまりストレージコントローラ１２０ｃ）を介したパスであり、当該パスはスタンバイ状態である。すなわち、ストレージコントローラ１２０ｃは、スタンバイ・ストレージコントローラである。
【０３４０】
Ｉ／Ｏ要求受信部３０１ａは、生成したボリューム情報３１６を、ネットワーク１４０を介してサーバ１５０ｃに送信する。すると、サーバ１５０ｃ（より具体的には、サーバ１５０ｃ内の不図示のマルチパスドライバ）がボリューム情報３１６を受信する。サーバ１５０ｃは、受信したボリューム情報３１６をディスプレイなどの出力装置に出力してもよい。
【０３４１】
すると、ステップＳ３１５〜Ｓ３１７で、ユーザは、ボリューム情報３１６に基づいて、各パスについて、ログイン処理のためのコマンド（例えば「ｉｓｃｓｉａｄｍ」コマンド）をサーバ１５０ｃに入力する。サーバ１５０ｃは、入力されたコマンドにしたがい、各パス上のストレージコントローラに対してログイン処理を実行する。
【０３４２】
具体的には、ステップＳ３１５では、少なくとも以下の２つのパラメタが引数として指定されたコマンドが、ユーザによりサーバ１５０ｃに入力される。
・「ＩＱＮ−ＴＧＴ５５５５５」という論理ボリュームＩＱＮ
・アクティブ・ストレージコントローラであるストレージコントローラ１２０ｂのＩＰアドレス（つまり「１０．２０．４９．５１」というＩＰアドレス）
【０３４３】
よって、ステップＳ３１５では、サーバ１５０ｃは、ストレージコントローラ１２０ｂに対してログイン処理を行う。
【０３４４】
同様に、ステップＳ３１６では、少なくとも以下の２つのパラメタが引数として指定されたコマンドが、ユーザによりサーバ１５０ｃに入力される。
【０３４５】
・「ＩＱＮ−ＴＧＴ５５５５５」という論理ボリュームＩＱＮ
・スタンバイ・ストレージコントローラであるストレージコントローラ１２０ａのＩＰアドレス（つまり「１０．２０．４９．５０」というＩＰアドレス）
【０３４６】
よって、ステップＳ３１６では、サーバ１５０ｃは、ストレージコントローラ１２０ａに対してログイン処理を行う。
【０３４７】
同様に、ステップＳ３１７では、少なくとも以下の２つのパラメタが引数として指定されたコマンドが、ユーザによりサーバ１５０ｃに入力される。
【０３４８】
・「ＩＱＮ−ＴＧＴ５５５５５」という論理ボリュームＩＱＮ
・スタンバイ・ストレージコントローラであるストレージコントローラ１２０ｃのＩＰアドレス（つまり「１０．２０．４９．５２」というＩＰアドレス）
【０３４９】
よって、ステップＳ３１７では、サーバ１５０ｃは、ストレージコントローラ１２０ｃに対してログイン処理を行う。なお、ステップＳ３１５〜Ｓ３１７の実行順序は任意に入れ替えられてよい。ステップＳ３１５〜Ｓ３１７の実行結果として、サーバ１５０ｃのマルチパスドライバから、「ＶＯＬ＿５」というＩＤで識別される論理ボリュームへのアクセスが可能となる。
【０３５０】
したがって、その後は、「ＶＯＬ＿５」というＩＤで識別される論理ボリュームに対するＩ／Ｏ要求がサーバ１５０ｃ上で発生すると、サーバ１５０ｃのマルチパスドライバを介して、当該論理ボリュームへのアクセスが実行される。Ｉ／Ｏ要求は、ユーザがサーバ１５０ｃの入力装置を介して与える入力に応じて生じることもあるし、サーバ１５０ｃによるアプリケーション・プログラムの実行に応じて自動的に生じることもある。いずれにせよ、サーバ１５０ｃ上のアプリケーション層で生じたＩ／Ｏ要求は、サーバ１５０ｃのマルチパスドライバへと受け渡される。
【０３５１】
そして、サーバ１５０ｃのマルチパスドライバから、アクティブ・ストレージコントローラであるストレージコントローラ１２０ｂに対して、ネットワーク１４０を介してＩ／Ｏ要求が送信される。すると、ストレージコントローラ１２０ｂは、Ｉ／Ｏ要求に応じて、「ＶＯＬ＿５」というＩＤで識別される論理ボリュームが断片化されている先の論理ユニットのうちの１つまたは複数にアクセスする。そして、ストレージコントローラ１２０ｂは、論理ユニットへのアクセス結果に基づいて、サーバ１５０ｃに応答を返す。Ｉ／Ｏ要求を受信した際のストレージコントローラ１２０ｂの動作は、図１１のフローチャートに示したとおりである。
【０３５２】
例えば、ステップＳ３１８では、サーバ１５０ｃのマルチパスドライバが、「ＶＯＬ＿５」というＩＤで識別される論理ボリュームに対するＩ／Ｏ要求を、ストレージコントローラ１２０ｂに送信する。Ｉ／Ｏ要求は、ストレージコントローラ１２０ｂのＩ／Ｏ要求受信部３０１ｂにより受信され、Ｉ／Ｏキュー３０２ｂにキューイングされる。
【０３５３】
説明の便宜上、このＩ／Ｏ要求によりアクセスが要求される記憶領域は、ストレージ１１０ｂ内の論理ユニットにあるものとする。すると、ステップＳ３１９に示すように、ストレージコントローラ１２０ｂのＩ／Ｏ実行部３０３ｂは、ストレージ１１０ｂに対してＩ／Ｏ要求を送信する。そして、ストレージ１１０ｂは、ストレージ１１０ｂ内の適宜の物理的記憶装置（つまり、アクセスが要求される記憶領域を物理的に含む記憶装置）にアクセスする。
【０３５４】
その後、ステップＳ３２０に示すように、ストレージ１１０ｂは、ストレージコントローラ１２０ｂに応答を返す。すると、ストレージコントローラ１２０ｂのＩ／Ｏ実行部３０３ｂは、ストレージ１１０ｂからの応答に基づいて、サーバ１５０ｃに対する応答を生成する。そして、ステップＳ３２１に示すように、ストレージコントローラ１２０ｂのＩ／Ｏ要求受信部３０１ｂからサーバ１５０ｃに対して応答が返される。
【０３５５】
以上説明した第１実施形態によれば、新規論理ボリュームを追加する際に、ストレージコントローラ間のハードウェア性能の差が考慮されて、適宜のストレージコントローラが選択される。したがって、第１実施形態によれば、ストレージコントローラ間のハードウェア性能の差に応じた負荷分散が可能であり、Ｉ／Ｏ性能がより一層平準化される。
【０３５６】
続いて、図１６〜１９を参照して、第２実施形態について説明する。第１実施形態と第２実施形態では、サーバからの１つのＩ／Ｏ要求に応じてストレージコントローラが２つ以上のＩ／Ｏ要求を１つまたは複数のストレージに送信する場合の、ストレージコントローラの動作シーケンスが異なる。他の点は、第１実施形態と第２実施形態で共通である。以下、第１実施形態との違いを中心に、第２実施形態について説明する。
【０３５７】
図１６〜１７は、内部処理時間について説明するシーケンス図である。具体的には、図１６〜１７は、どちらも、以下のような場合の例を示す。
【０３５８】
・ストレージコントローラ１２０ａが管理する、ある論理ボリュームに対するＩ／Ｏ要求を、サーバ１５０ａが送信する。
・当該Ｉ／Ｏ要求によりアクセスされる領域は、具体的には、ストレージ１１０ａ内のいずれかの論理ユニットと、ストレージ１１０ｂ内のいずれかの論理ユニットにまたがる。
・よって、ストレージコントローラ１２０ａは、ストレージ１１０ａと１１０ｂの双方にアクセスする。
【０３５９】
図１６の例では、まず、ステップＳ６１に示すように、時刻Ｔ６０にサーバ１５０ａがストレージコントローラ１２０ａにＩ／Ｏ要求を送信する。すると、ストレージコントローラ１２０ａは、時刻Ｔ６１にＩ／Ｏ要求を受信する。
【０３６０】
その後、ステップＳ６２に示すように、ストレージコントローラ１２０ａは、時刻Ｔ６２に１つ目のＩ／Ｏ要求をストレージ１１０ａに送信する。すると、ストレージ１１０ａは、時刻Ｔ６３にＩ／Ｏ要求を受信する。
【０３６１】
ところで、第１実施形態の図９の例では、ストレージコントローラ１２０ａは、ステップＳ４３でのストレージ１１０ａからの応答の受信を待ってから、ストレージ１１０ｂにステップＳ４４でＩ／Ｏ要求を送信する。しかし、第２実施形態では、ストレージコントローラ１２０ａは、ストレージ１１０ａからの応答の受信を待たない。具体的には、ステップＳ６３に示すように、ストレージコントローラ１２０ａは、時刻Ｔ６４に２つ目のＩ／Ｏ要求をストレージ１１０ｂに送信する。すると、ストレージ１１０ｂは、時刻Ｔ６５にＩ／Ｏ要求を受信する。
【０３６２】
一方、ストレージ１１０ａは、上記のように時刻Ｔ６３にＩ／Ｏ要求を受信すると、受信したＩ／Ｏ要求に応じて、物理的記憶装置にアクセスする。その結果、ステップＳ６４に示すように、時刻Ｔ６６に、ストレージ１１０ａは、応答をストレージコントローラ１２０ａに返す。ストレージ１１０ａから返された応答は、時刻Ｔ６７にストレージコントローラ１２０ａに受信される。
【０３６３】
図１６の例では、ストレージコントローラ１２０ａは、受信した応答に応じて適宜の内部処理を行う。内部処理は時刻Ｔ６８に終了する。
【０３６４】
一方、ストレージ１１０ｂは、上記のように時刻Ｔ６５にＩ／Ｏ要求を受信すると、受信したＩ／Ｏ要求に応じて、物理的記憶装置にアクセスする。その結果、ステップＳ６５に示すように、時刻Ｔ６９に、ストレージ１１０ｂは、応答をストレージコントローラ１２０ａに返す。ストレージ１１０ｂから返された応答は、時刻Ｔ７０にストレージコントローラ１２０ａに受信される。
【０３６５】
最後に、ステップＳ６６に示すように、ストレージコントローラ１２０ａは、時刻Ｔ７１において、ステップＳ６１のＩ／Ｏ要求に対する応答をサーバ１５０ａに返す。すると、サーバ１５０ａは、時刻Ｔ７２に応答を受信する。
【０３６６】
以上のごとき図１６の例において、ストレージコントローラ１２０ａの内部処理時間Ｄは、具体的には、式（６）に示すとおり、時間Ｄ６１、Ｄ６２、Ｄ６３、およびＤ６５の和である。
D=D61+D62+D63+D65=(T62-T61)+(T64-T62)+(T68-T67)+(T71-T70)    (6)
【０３６７】
なお、内部処理時間Ｄには、時刻Ｔ６８から時刻Ｔ７０までの待ち時間Ｄ６４は含まれない。なぜなら、待ち時間Ｄ６４はストレージコントローラ１２０ａのハードウェア性能に依存しないからである。他方、時間Ｄ６１、Ｄ６２、Ｄ６３、およびＤ６５は、ストレージコントローラ１２０ａのハードウェア性能に依存する。そのため、図１６の例における内部処理時間Ｄは式（６）のように定義される。
【０３６８】
例えば、内部処理時間Ｄ６１は、ステップＳ６１でサーバ１５０ａから送られたＩ／Ｏ要求がＩ／Ｏキュー３０２ａ内でキューイングされている時間と、ステップＳ６２で送信するためのＩ／Ｏ要求をＩ／Ｏ実行部３０３ａが生成する時間を含む。また、内部処理時間Ｄ６２は、ステップＳ６３で送信するためのＩ／Ｏ要求をＩ／Ｏ実行部３０３ａが生成する時間を含む。そして、内部処理時間Ｄ６３は、ステップＳ６４で受信された応答をＩ／Ｏ実行部３０３ａが処理する時間を含む。また、内部処理時間Ｄ６５は、ステップＳ６４とＳ６５で受信された２つの応答から、サーバ１５０ａに返すための１つの応答をＩ／Ｏ実行部３０３ａが生成する時間を含む。
【０３６９】
なお、場合によっては、ストレージコントローラ１２０ａは、時刻Ｔ６８で内部処理を完了する前に、ストレージ１１０ｂからの応答を受信することもあり得る。その場合は、待ち時間Ｄ６４はゼロである。また、その場合、ストレージ１１０ｂからの応答は、時刻Ｔ６８までストレージコントローラ１２０ａの受信バッファに保持されて、ストレージ１１０ａからの応答に関する内部処理が時刻Ｔ６８に完了した後に、処理されてもよい。あるいは、ストレージ１１０ｂからの応答に関する内部処理は、ストレージ１１０ａからの応答に関する内部処理と並行して実行されてもよい。
【０３７０】
しかし、いずれにせよ、時刻Ｔ６４から時刻Ｔ６７までの待ち時間は内部処理時間Ｄに含まれない。また、上記のとおり、待ち時間Ｄ６４が生じた場合であっても、待ち時間Ｄ６４は内部処理時間Ｄには含まれない。
【０３７１】
ところで、図１６の例では、ストレージコントローラ１２０ａが先にＩ／Ｏ要求を送信したストレージ１１０ａが、ストレージ１１０ｂよりも先に応答を返す。しかし、場合によっては、ストレージ１１０ａからの応答よりも、ストレージ１１０ｂからの応答の方が、先にストレージコントローラ１２０ａに受信され得る。図１７はそのような場合の例を示す。
【０３７２】
図１７の例では、まず、ステップＳ８１に示すように、時刻Ｔ８０にサーバ１５０ａがストレージコントローラ１２０ａにＩ／Ｏ要求を送信する。すると、ストレージコントローラ１２０ａは、時刻Ｔ８１にＩ／Ｏ要求を受信する。
【０３７３】
その後、ステップＳ８２に示すように、ストレージコントローラ１２０ａは、時刻Ｔ８２に１つ目のＩ／Ｏ要求をストレージ１１０ａに送信する。すると、ストレージ１１０ａは、時刻Ｔ８３にＩ／Ｏ要求を受信する。
【０３７４】
また、ステップＳ８３に示すように、ストレージコントローラ１２０ａは、時刻Ｔ８４に２つ目のＩ／Ｏ要求をストレージ１１０ｂに送信する。すると、ストレージ１１０ｂは、時刻Ｔ８５にＩ／Ｏ要求を受信する。
【０３７５】
一方、ストレージ１１０ａは、上記のように時刻Ｔ８３にＩ／Ｏ要求を受信すると、受信したＩ／Ｏ要求に応じて、物理的記憶装置にアクセスする。同様に、ストレージ１１０ｂは、時刻Ｔ８５にＩ／Ｏ要求を受信すると、受信したＩ／Ｏ要求に応じて、物理的記憶装置にアクセスする。
【０３７６】
図１７の例では、ストレージ１１０ｂの方がストレージ１１０ａよりも短時間で物理的記憶装置へのアクセスを終える。そのため、ステップＳ８４に示すように、時刻Ｔ８６にはストレージ１１０ｂが応答をストレージコントローラ１２０ａに返す。
【０３７７】
ストレージ１１０ｂから返された応答は、時刻Ｔ８７にストレージコントローラ１２０ａに受信される。そして、ストレージコントローラ１２０ａは、受信した応答に応じて適宜の内部処理を行う。内部処理は時刻Ｔ８８に終了する。
【０３７８】
一方、上記のように物理的記憶装置にアクセスしたストレージ１１０ａは、ステップＳ８５に示すように、アクセス結果に応じた応答を、時刻Ｔ８９になってやっとストレージコントローラ１２０ａに返す。ストレージ１１０ａから返された応答は、時刻Ｔ９０にストレージコントローラ１２０ａに受信される。
【０３７９】
最後に、ステップＳ８６に示すように、ストレージコントローラ１２０ａは、時刻Ｔ９１において、ステップＳ８１のＩ／Ｏ要求に対する応答をサーバ１５０ａに返す。すると、サーバ１５０ａは、時刻Ｔ９２に応答を受信する。
【０３８０】
以上のごとき図１７の例において、ストレージコントローラ１２０ａの内部処理時間Ｄは、具体的には、式（７）に示すとおり、時間Ｄ８１、Ｄ８２、Ｄ８３、およびＤ８５の和である。
D=D81+D82+D83+D85=(T82-T81)+(T84-T82)+(T88-T87)+(T91-T90)    (7)
【０３８１】
なお、内部処理時間Ｄには、時刻Ｔ８８から時刻Ｔ９０までの待ち時間Ｄ８４は含まれない。なぜなら、待ち時間Ｄ８４はストレージコントローラ１２０ａのハードウェア性能に依存しないからである。他方、時間Ｄ８１、Ｄ８２、Ｄ８３、およびＤ８５は、ストレージコントローラ１２０ａのハードウェア性能に依存する。そのため、図１７の例における内部処理時間Ｄは式（７）のように定義される。
【０３８２】
例えば、内部処理時間Ｄ８１は、ステップＳ８１でサーバ１５０ａから送られたＩ／Ｏ要求がＩ／Ｏキュー３０２ａ内でキューイングされている時間と、ステップＳ８２で送信するためのＩ／Ｏ要求をＩ／Ｏ実行部３０３ａが生成する時間を含む。また、内部処理時間Ｄ８２は、ステップＳ８３で送信するためのＩ／Ｏ要求をＩ／Ｏ実行部３０３ａが生成する時間を含む。そして、内部処理時間Ｄ８３は、ステップＳ８４で受信された応答をＩ／Ｏ実行部３０３ａが処理する時間を含む。また、内部処理時間Ｄ８５は、ステップＳ８４とＳ８５で受信された２つの応答から、サーバ１５０ａに返すための１つの応答をＩ／Ｏ実行部３０３ａが生成する時間を含む。
【０３８３】
なお、場合によっては、ストレージコントローラ１２０ａは、時刻Ｔ８８で内部処理を完了する前に、ストレージ１１０ａからの応答を受信することもあり得る。その場合は、待ち時間Ｄ８４はゼロである。また、その場合、ストレージ１１０ａからの応答は、時刻Ｔ８８までストレージコントローラ１２０ａの受信バッファに保持されて、ストレージ１１０ｂからの応答に関する内部処理が時刻Ｔ８８に完了した後に、処理されてもよい。あるいは、ストレージ１１０ａからの応答に関する内部処理は、ストレージ１１０ｂからの応答に関する内部処理と並行して実行されてもよい。
【０３８４】
しかし、いずれにせよ、時刻Ｔ８４から時刻Ｔ８７までの待ち時間は内部処理時間Ｄに含まれない。また、上記のとおり、待ち時間Ｄ８４が生じた場合であっても、待ち時間Ｄ８４は内部処理時間Ｄには含まれない。
【０３８５】
続いて、図１８〜１９を参照して、第２実施形態における内部処理時間の計測と時間記録テーブルの更新について、具体的に説明する。図１８〜１９は、第２実施形態のストレージコントローラがＩ／Ｏ要求の受信に応じて行う処理のフローチャートである。
【０３８６】
図１８〜１９の処理は図１１の処理と似ているので、以下では違いを中心に説明する。また、説明の便宜上、ストレージコントローラ１２０ａがサーバ１５０ａからＩ／Ｏ要求を受信した場合を例にして、図１８〜１９の処理について説明する。
【０３８７】
ステップＳ４０１〜Ｓ４０５は、図１１のステップＳ１０１〜Ｓ１０５と同様である。しかし、第２実施形態では、ステップＳ４０５の内部処理が完了したときには、図１１のステップＳ１０６のように内部処理時間の測定が中断されることはない。
【０３８８】
具体的には、ステップＳ４０５での内部処理の完了後、ステップＳ４０６でＩ／Ｏ実行部３０３ａは、ステップＳ４０５の内部処理により生成したＩ／Ｏ要求を、ネットワーク１３０を介してストレージに送信する。ステップＳ４０６の送信は図１１のステップＳ１０７の送信と同様である。
【０３８９】
しかし、第２実施形態では、ストレージコントローラ１２０ａは、ステップＳ４０５で送信されるＩ／Ｏ要求に対する応答の受信を待たない。具体的には、制御部３０４ａは、ステップＳ４０６の次に、ステップＳ４０７において、「いずれかのストレージに送信するＩ／Ｏ要求がさらにあるのか否か」を判断する。ステップＳ４０７の判断は、図１１のステップＳ１１０の判断と同様である。
【０３９０】
ストレージに送信するＩ／Ｏ要求がもうなければ、図１８〜１９の処理はステップＳ４０８に移行する。逆に、いずれかのストレージに送信するＩ／Ｏ要求がさらにあれば、図１８〜１９の処理はステップＳ４０５に戻る。
【０３９１】
例えば、図６〜７の例は第２実施形態にも当てはまり、この図６〜７の例では、ステップＳ４０７の１回目の実行のときに、処理がステップＳ４０７からステップＳ４０８へと移行する。それに対して、図１６の例と図１７の例では、いずれも、処理がステップＳ４０７からステップＳ４０５へと戻る。
【０３９２】
例えば、図１６の例では、時刻Ｔ６２でステップＳ４０６が実行され、その後、処理がステップＳ４０７からステップＳ４０５に戻る。そして、時刻Ｔ６４で再度ステップＳ４０６が実行され、さらに処理がステップＳ４０７からステップＳ４０８に移行する。
【０３９３】
同様に、図１７の例では、時刻Ｔ８２でステップＳ４０６が実行され、その後、処理がステップＳ４０７からステップＳ４０５に戻る。そして、時刻Ｔ８４で再度ステップＳ４０６が実行され、さらに処理がステップＳ４０７からステップＳ４０８に移行する。
【０３９４】
さて、ステップＳ４０８では、内部処理時間の測定が一旦中断される。具体的には、制御部３０４ａは、図１１のステップＳ１０６と同様にして変数Ｄを更新する。
【０３９５】
例えば、図１６の例では、時刻Ｔ６１でのステップＳ４０１により変数Ｔと変数Ｄが初期化される。したがって、ステップＳ４０８で更新された変数Ｄの値は、（Ｔ６４−Ｔ６１）＝（Ｄ６１＋Ｄ６２）である。同様に、図１７の例では、ステップＳ４０８で更新された変数Ｄの値は、（Ｔ８４−Ｔ８１）＝（Ｄ８１＋Ｄ８２）である。
【０３９６】
そして、ステップＳ４０９に示すように、Ｉ／Ｏ実行部３０３ａは、いずれかのストレージからの応答の受信を待つ。いずれかのストレージから応答が受信されると（あるいは、いずれかのストレージから既に受信された応答が受信バッファに存在すると）、ステップＳ４１０で制御部３０４ａは、内部処理時間の測定を再開する。つまり、図１１のステップＳ１０９と同様に、制御部３０４ａは、変数Ｔに現在時刻を代入する。
【０３９７】
そして、ステップＳ４１１でＩ／Ｏ実行部３０３ａは、適宜の内部処理を実行する。例えば、Ｉ／Ｏ実行部３０３ａは、ストレージからの応答に基づいて、サーバ１５０ａに対する応答を準備してもよい。
【０３９８】
ステップＳ４１１での内部処理の完了後、ステップＳ４１２で制御部３０４ａは、「ステップＳ４０５〜Ｓ４０７の１回以上の繰り返しにより送信した、１個以上のＩ／Ｏ要求のすべてに対して、応答が受信済みであるか否か」を判断する。そして、未受信の応答が残っていれば、処理はステップＳ４０８に戻る。逆に、全応答が受信済みであれば、処理はステップＳ４１３に移行する。ステップＳ４１３〜Ｓ４１６は、図１１のステップＳ１１１〜Ｓ１１４と同様である。
【０３９９】
例えば、図１６の例では、時刻Ｔ６４でＩ／Ｏ要求の送信が完了すると、ステップＳ４０８で内部処理時間の計測が一旦中断される。このとき、変数Ｄの値は、上記のとおり（Ｄ６１＋Ｄ６２）である。
【０４００】
そして、時刻Ｔ６７でのストレージ１１０ａからの応答の受信を機に、図１８〜１９の処理がステップＳ４０９からステップＳ４１０へと移行し、ステップＳ４１０で内部処理時間の計測が再開される。その後、ステップＳ４１１の内部処理が時刻Ｔ６８に完了する。
【０４０１】
ここで、ストレージ１１０ｂからの応答が未受信なので、図１８〜１９の処理はステップＳ４１２からステップＳ４０８に戻り、ステップＳ４０８で内部処理時間の計測が一旦中断される。このとき、変数Ｄの値は、（Ｄ６１＋Ｄ６２＋Ｄ６３）である。
【０４０２】
その後、時刻Ｔ７０でのストレージ１１０ｂからの応答の受信を機に、図１８〜１９の処理はステップＳ４０９からステップＳ４１０へと移行し、ステップＳ４１０で内部処理時間の計測が再開される。その後、図１８〜１９の処理は、ステップＳ４１１からステップＳ４１２へ、さらに、ステップＳ４１２からステップＳ４１３へと進む。そして、時刻Ｔ７１にステップＳ４１３の内部処理が完了する。
【０４０３】
したがって、ステップＳ４１４で（つまり、内部処理時間の計測が終了した時点で）、変数Ｄの値は、（Ｄ６１＋Ｄ６２＋Ｄ６３＋Ｄ６５）へと更新される。こうして得られた内部処理時間（すなわち、式（６）の内部処理時間Ｄ）が、ステップＳ４１６で時間記録テーブル３０６ａに書き込まれる。
【０４０４】
また、図１７の例では、時刻Ｔ８４でＩ／Ｏ要求の送信が完了すると、ステップＳ４０８で内部処理時間の計測が一旦中断される。このとき、変数Ｄの値は、上記のとおり（Ｄ８１＋Ｄ８２）である。
【０４０５】
そして、時刻Ｔ８７でのストレージ１１０ｂからの応答の受信を機に、図１８〜１９の処理がステップＳ４０９からステップＳ４１０へと移行し、ステップＳ４１０で内部処理時間の計測が再開される。その後、ステップＳ４１１の内部処理が時刻Ｔ８８に完了する。
【０４０６】
ここで、ストレージ１１０ａからの応答が未受信なので、図１８〜１９の処理はステップＳ４１２からステップＳ４０８に戻り、ステップＳ４０８で内部処理時間の計測が一旦中断される。このとき、変数Ｄの値は、（Ｄ８１＋Ｄ８２＋Ｄ８３）である。
【０４０７】
その後、時刻Ｔ９０でのストレージ１１０ａからの応答の受信を機に、図１８〜１９の処理はステップＳ４０９からステップＳ４１０へと移行し、ステップＳ４１０で内部処理時間の計測が再開される。その後、図１８〜１９の処理は、ステップＳ４１１からステップＳ４１２へ、さらに、ステップＳ４１２からステップＳ４１３へと進む。そして、時刻Ｔ９１にステップＳ４１３の内部処理が完了する。
【０４０８】
したがって、ステップＳ４１４で（つまり、内部処理時間の計測が終了した時点で）、変数Ｄの値は、（Ｄ８１＋Ｄ８２＋Ｄ８３＋Ｄ８５）へと更新される。こうして得られた内部処理時間（すなわち、式（７）の内部処理時間Ｄ）が、ステップＳ４１６で時間記録テーブル３０６ａに書き込まれる。
【０４０９】
時間記録テーブル３０６ａのデータに基づく２段階の集計処理は、第２実施形態においても、図１２にしたがって実行される。したがって、第２実施形態でも第１実施形態と同様の種々の効果が得られる。
【０４１０】
なお、本発明は上記の第１〜第２実施形態に限られるものではない。上記の説明においてもいくつかの変形について説明したが、上記実施形態は、さらに例えば下記の観点から変形することもでき、上記および下記の変形は、相互に矛盾しない限り、任意に組み合わせることが可能である。
【０４１１】
図１０、１４、および１５には、テーブル形式で各種データを示した。しかし、実施形態に応じて、テーブル以外のデータ形式が使われてもよい。また、ｉＳＣＳＩプロトコルが使われる場合について主に説明したが、他のプロトコルが利用されてもよく、利用されるプロトコルに応じて適宜のデータが使われる。
【０４１２】
また、第１〜第２実施形態では、ストレージコントローラにおける、あるメッセージの受信完了から、別のメッセージの送信開始までの時間が、内部処理時間として計測される。例えば、図７の例では、時刻Ｔ１１ｂから時刻Ｔ１２ａまでの時間や、時刻Ｔ１５ｂから時刻Ｔ１６ａまでの時間が、内部処理時間として計測される。しかし、「ストレージコントローラが、メッセージの送受信と並行して内部処理を行うか否か」など、ストレージコントローラの処理特性によっては、内部処理時間の定義が図７における定義とは異なっていてもよい。
【０４１３】
また、図１１、１８、および１９には、ストレージコントローラによる内部処理時間の計測の具体例として、変数Ｔと変数Ｄを使った計測が例示されている。しかし、実施形態に応じて、例えば「ストレージコントローラ１２０内のＣＰＵ２１１に含まれるハードウェアタイマを利用する」などの、他の方法によって、内部処理時間が計測されてもよい。例えば、ストレージコントローラ１２０ａの制御部３０４ａは、タイマに対して、計測開始、計測中断、計測終了などの命令を与えることにより、内部処理時間を計測してもよい。
【０４１４】
実施形態によっては、図１０の２次集計テーブル３１２内の平均内部処理時間以外の時間情報が、図１のステップＳ２で使われてもよい。例えば、ある特定の時間帯（例えば「月曜日の１３時から１５時」など）に負荷が集中すると予測されるサービス用に、新規論理ボリュームを作成したい場合があり得る。そのような場合には、直近の１週間全体での平均内部処理時間の代わりに、直近の１週間のうち当該特定の時間帯での平均内部処理時間が算出されてもよく、そのようにして算出された値が、ステップＳ２で時間情報として使われてもよい。
【０４１５】
なお、上記の「直近の１週間のうち当該特定の時間帯での平均内部処理時間」における「１週間」という期間の長さは、単なる例示に過ぎず、期間の長さは任意である。例えば、直近の１ヶ月間のうちの当該特定の時間帯での平均内部処理時間が、時間情報として算出されて使われてもよい。
【０４１６】
実施形態によっては、図１２のステップＳ２０４が省略されてもよい。その代わり、選択部３０９が、図１のステップＳ２のように新規論理ボリューム用のアクティブ・ストレージコントローラを選ぶ際に、１次集計テーブル群３１１内の各１次集計テーブルから、式（４）にしたがって平均内部処理時間を算出してもよい。そして、選択部３０９は、各ストレージコントローラについて算出した平均内部処理時間を、２次集計テーブル３１２に書き込んでもよい。すると、選択部３０９は、こうして更新した２次集計テーブル３１２に基づいて、ステップＳ２の選択を実行することができる。
【０４１７】
つまり、各ストレージコントローラは、ステップＳ２０４のように当該ストレージコントローラ自体に関する時間情報（例えば直近の１週間でのＩ／Ｏ要求１件あたりの平均内部処理時間）を更新してもよい。あるいは、各ストレージコントローラは、単に、時間情報の算出用の別の情報を、選択部３０９からアクセス可能な記憶装置（共有ディスク１７０）に記憶するだけでもよい。
【０４１８】
図１０には、「時間情報の算出用の別の情報」の具体例として、１次集計テーブル群３１１が例示されている。より詳しくは、各ストレージコントローラが時間情報の算出用に共有ディスク１７０に書き出す情報とは、当該ストレージコントローラに対応する１次集計テーブル中の各平均内部処理時間であってもよい。
【０４１９】
例えば、図１０のように、直近の１週間以内での長さ１分間の各期間における、Ｉ／Ｏ要求１件あたりの平均内部処理時間が、時間情報の算出用に、ストレージコントローラにより共有ディスク１７０に書き出されてもよい。そして、１次集計テーブル群３１１から２次集計テーブル３１２への集計自体は、選択部３０９が実行してもよい。
【０４２０】
つまり、選択部３０９は、予め各ストレージコントローラにより算出された時間情報を読み出すことにより、時間情報を取得してもよいし、自ら時間情報を算出することにより時間情報を取得してもよい。
【０４２１】
また、以上のように、各ストレージコントローラの制御部ではなく選択部３０９が２次集計テーブル３１２の更新を行う場合は、２次集計テーブル３１２は、共有ディスク１７０以外の記憶装置に記憶されていてもよい。例えば、２次集計テーブル３１２は、管理部３０７を含むストレージコントローラのＲＡＭ２１２に記憶されていてもよい。つまり、時間情報を記憶する時間記憶部は、ＲＡＭ２１２により実現されてもよい。
【０４２２】
ところで、Ｉ／Ｏ要求受信部３０１ａ、Ｉ／Ｏ実行部３０３ａ、および制御部３０４ａを実現するためには、図４のＣＰＵ２１１のような汎用的なプロセッサ、ＡＳＩＣなどの専用のハードウェア回路、両者の組み合わせのうち、いずれが使われてもよい。同様に、作成要求受信部３０８と選択部３０９を含む管理部３０７を実現するためには、ＣＰＵ２１１のような汎用的なプロセッサ、ＡＳＩＣなどの専用のハードウェア回路、両者の組み合わせのうち、いずれが使われてもよい。
【０４２３】
ＣＰＵ２１１のような汎用的なプロセッサが使われる場合、プロセッサが実行するプログラムは、不揮発性記憶装置（例えば図４の不揮発性記憶装置２１３）に予め記憶されていてもよい。プログラムは、ネットワーク（例えばネットワーク１４０）からダウンロードされて、プロセッサを含む装置（例えばストレージコントローラ１２０ａ）にインストールされてもよい。
【０４２４】
実施形態によっては、プロセッサが実行するプログラムは、コンピュータ読み取り可能な可搬型の記憶媒体に格納されて提供されてもよい。可搬型の記憶媒体としてはＣＤ（Compact Disc）、ＤＶＤ（Digital Versatile Disk）などの光ディスク、光磁気ディスク、磁気ディスク、半導体メモリカードなどが利用可能である。なお、これらの可搬型の記憶媒体や、例えば図４のＲＡＭ２１２や不揮発性記憶装置２１３は、いずれも、有形の（tangible）記憶媒体の一種であり、信号搬送波のような一時的な（transitory）媒体ではない。
【０４２５】
ところで、図５の例では、管理部３０７が、仮想ストレージシステム１００内の複数のストレージコントローラのうちの特定の１つ（つまりストレージコントローラ１２０ａ）に含まれている。したがって、図５の例では、時間記憶部としての共有ディスク１７０と管理部３０７とを含むストレージコントローラ選択システムは、仮想ストレージシステム１００と一部のハードウェアを共有している。しかし、管理部３０７は、どのストレージコントローラとも異なる装置に含まれていてもよい。
【０４２６】
例えば、管理部３０７を含む管理コントローラが、複数のストレージコントローラとは独立して設けられていてもよい。管理コントローラは、ネットワーク１３０と１４０の双方に接続される。管理コントローラのハードウェア構成は、例えば図４のストレージコントローラ１２０と同様であってもよい。
【０４２７】
ただし、第１〜第２実施形態のように、あるストレージコントローラの中に管理部３０７を含む実施形態は、独立した管理コントローラを使う実施形態と比べて、コストの面で優れており、耐障害性の点でも優れている。その理由は以下のとおりである。
【０４２８】
複数のストレージコントローラのほかに、さらに、管理部３０７専用の管理コントローラを使う実施形態では、ユーザにとって、管理コントローラを購入するコストが生じる。しかし、図５のように管理部３０７がストレージコントローラ１２０ａに含まれる場合、管理コントローラのコストは不要である。
【０４２９】
また、管理コントローラを使う実施形態において、仮に管理コントローラが１台しかないとすると、管理コントローラがＳＰｏＦ（Single Point of Failure）になってしまう。つまり、１台の管理コントローラが故障している間には、新規論理ボリュームが作成不能である。２台以上の管理コントローラを使う冗長構成が採用されてもよいが、そのような冗長構成にはさらにコストがかかる。
【０４３０】
ところで、管理部３０７は、プログラムを実行するＣＰＵ２１１と、通信インタフェイス２１４と、通信インタフェイス２１５により実現可能である。そして、ＣＰＵ２１１と、通信インタフェイス２１４と、通信インタフェイス２１５は、管理部３０７を含まないストレージコントローラにも含まれるコンポーネントである。つまり、ストレージコントローラに管理部３０７としての機能を果たさせるためだけに、新たなハードウェア要素をストレージコントローラに追加する必要性は、ないのである。そのため、第１〜第２実施形態は、独立した管理コントローラを使う実施形態よりもコスト面で優れている。
【０４３１】
そして、第１〜第２実施形態は、以下に述べる仕組みにより容易に耐障害性を向上させることができる。よって、第１〜第２実施形態は、耐障害性の面でも優れている。
【０４３２】
管理部３０７用のプログラムを、２台以上のストレージコントローラ（例えば、仮想ストレージシステム１００内のすべてのストレージコントローラ）に予めインストールしておくものとする。そして、上記２台以上のストレージコントローラのうち、特定の１台（図５の例ではストレージコントローラ１２０ａ）でのみ、管理部３０７用のプログラムを有効にしておくものとする。それにより、特定の１台のストレージコントローラは、管理部３０７としても動作する。
【０４３３】
他方、他のストレージコントローラでは、管理部３０７用のプログラムをディセーブル（disable）しておくものとする。例えば、図５の例では、ストレージコントローラ１２０ｂにおいて管理部３０７用のプログラムはディセーブルされている。よって、ストレージコントローラ１２０ｂは管理部３０７として動作しない。そのため、図５では、ストレージコントローラ１２０ｂの箱には管理部３０７が図示されていない。
【０４３４】
上記の特定の１台のストレージコントローラが故障した場合には、論理ボリュームに関するフェイルオーバだけでなく、管理部３０７に関するフェイルオーバも行われる。例えば、ストレージコントローラ１２０ａが故障すると、故障の検出に応じて、ストレージコントローラ１２０ｂにおいて、インストール済みの管理部３０７用のプログラムが有効にされてもよい。その結果、ストレージコントローラ１２０ｂは、以後、管理部３０７としても動作するようになる。もちろん、場合によっては、ストレージコントローラ１２０ｂ以外の他のストレージコントローラが、新たに管理部３０７としても動作するようになってもよい。
【０４３５】
管理部３０７に関するフェイルオーバは、例えば以上のようにして行われてもよい。そして、管理部３０７に関するフェイルオーバが可能であることは、管理部３０７に関する耐障害性に優れていることを意味する。よって、第１〜第２実施形態は、コストの面だけでなく、耐障害性の面においても、独立した管理コントローラを使う実施形態より優れている。
【０４３６】
最後に、上記の種々の実施形態に関して、さらに下記の付記を開示する。
（付記１）
各々が１つ以上の物理的記憶装置の集まりである第１の数の論理ユニットのうちの２つ以上に断片化された論理ボリュームの作成を求める作成要求を受信する作成要求受信部と、
それぞれ１つ以上の論理ボリュームを管理する第２の数のストレージコントローラの各々について、当該ストレージコントローラが、当該ストレージコントローラの管理する前記１つ以上の論理ボリュームのうちの１つの論理ボリュームに対する入出力要求を受信する要求受信時点から、当該ストレージコントローラが、前記入出力要求に応じて、当該１つの論理ボリュームが断片化されている先の２つ以上の論理ユニットのうちの少なくとも１つの論理ユニットにアクセスした後、前記少なくとも１つの論理ユニットへのアクセスの結果にしたがって、前記入出力要求に対する応答を送信する応答送信時点までの時間のうち、当該ストレージコントローラの内部での処理にかかる内部処理時間を示す時間情報を記憶する時間記憶部と、
前記作成要求受信部が前記作成要求を受信すると、前記時間記憶部に記憶された前記時間情報に基づいて、前記第２の数のストレージコントローラのうちで前記内部処理時間が相対的に短いストレージコントローラを選択し、選択した前記ストレージコントローラに、前記第１の数の論理ユニットのうちの２つ以上に断片化した新たな論理ボリュームを作成するよう命令する選択部と、
を備えるストレージコントローラ選択システム。
（付記２）
前記作成要求受信部と前記選択部が、前記第２の数のストレージコントローラのうちの１つに含まれ、
前記第２の数のストレージコントローラの各々は、
当該ストレージコントローラが受信する複数の入出力要求の各々について、当該入出力要求に応じてかかる前記内部処理時間を計測し、
当該ストレージコントローラに関して前記時間記憶部に記憶されている前記時間情報を、計測した前記内部処理時間に基づいて更新するか、または、前記時間情報の算出用の別の情報を、前記選択部からアクセス可能な記憶装置に記憶する
ことを特徴とする付記１に記載のストレージコントローラ選択システム。
（付記３）
前記時間記憶部が、前記第２の数のストレージコントローラとネットワークを介して接続されている
ことを特徴とする付記２に記載のストレージコントローラ選択システム。
（付記４）
前記時間情報は、過去のある期間内に生じた複数の入出力要求それぞれに対応する前記内部処理時間から得られる統計量である
ことを特徴とする付記１から３のいずれか１項に記載のストレージコントローラ選択システム。
（付記５）
前記選択部は、前記第２の数のストレージコントローラのうちで、前記内部処理時間が最短のストレージコントローラを選択する
ことを特徴とする付記１から４のいずれか１項に記載のストレージコントローラ選択システム。
（付記６）
前記内部処理時間は、前記要求受信時点から前記応答送信時点までの時間から、前記少なくとも１つの論理ユニットへの前記アクセスの前記結果の受信を待つ時間を除外した時間である
ことを特徴とする付記１から５のいずれか１項に記載のストレージコントローラ選択システム。
（付記７）
前記内部処理時間は、前記入出力要求がキューイングされている時間を含む
ことを特徴とする付記６に記載のストレージコントローラ選択システム。
（付記８）
前記選択部により選択された前記ストレージコントローラの故障に応じて、前記選択部により選択された前記ストレージコントローラに代わって前記新たな論理ボリュームを管理するためのスタンバイ・ストレージコントローラを、前記第２の数のストレージコントローラの中から、前記選択部がさらに選択する
ことを特徴とする付記１から７のいずれか１項に記載のストレージコントローラ選択システム。
（付記９）
前記選択部が、前記スタンバイ・ストレージコントローラも、前記時間情報に基づいて選択する
ことを特徴とする付記８に記載のストレージコントローラ選択システム。
（付記１０）
コンピュータが、
各々が１つ以上の物理的記憶装置の集まりである第１の数の論理ユニットのうちの２つ以上に断片化された論理ボリュームの作成を求める作成要求を受信し、
それぞれ１つ以上の論理ボリュームを管理する第２の数のストレージコントローラの各々について、当該ストレージコントローラが、当該ストレージコントローラの管理する前記１つ以上の論理ボリュームのうちの１つの論理ボリュームに対する入出力要求を受信する要求受信時点から、当該ストレージコントローラが、前記入出力要求に応じて、当該１つの論理ボリュームが断片化されている先の２つ以上の論理ユニットのうちの少なくとも１つの論理ユニットにアクセスした後、前記少なくとも１つの論理ユニットへのアクセスの結果にしたがって、前記入出力要求に対する応答を送信する応答送信時点までの時間のうち、当該ストレージコントローラの内部での処理にかかる内部処理時間を示す時間情報を取得し、
前記時間情報に基づいて、前記第２の数のストレージコントローラのうちで前記内部処理時間が相対的に短いストレージコントローラを選択し、
選択した前記ストレージコントローラに、前記第１の数の論理ユニットのうちの２つ以上に断片化した新たな論理ボリュームを作成するよう命令する
ストレージコントローラ選択方法。
（付記１１）
コンピュータに、
各々が１つ以上の物理的記憶装置の集まりである第１の数の論理ユニットのうちの２つ以上に断片化された論理ボリュームの作成を求める作成要求を受信し、
それぞれ１つ以上の論理ボリュームを管理する第２の数のストレージコントローラの各々について、当該ストレージコントローラが、当該ストレージコントローラの管理する前記１つ以上の論理ボリュームのうちの１つの論理ボリュームに対する入出力要求を受信する要求受信時点から、当該ストレージコントローラが、前記入出力要求に応じて、当該１つの論理ボリュームが断片化されている先の２つ以上の論理ユニットのうちの少なくとも１つの論理ユニットにアクセスした後、前記少なくとも１つの論理ユニットへのアクセスの結果にしたがって、前記入出力要求に対する応答を送信する応答送信時点までの時間のうち、当該ストレージコントローラの内部での処理にかかる内部処理時間を示す時間情報を取得し、
前記時間情報に基づいて、前記第２の数のストレージコントローラのうちで前記内部処理時間が相対的に短いストレージコントローラを選択し、
選択した前記ストレージコントローラに、前記第１の数の論理ユニットのうちの２つ以上に断片化した新たな論理ボリュームを作成するよう命令する
ことを含む処理を実行させるためのストレージコントローラ選択プログラム。
（付記１２）
前記コンピュータが、前記第２の数のストレージコントローラのうちの１つに含まれる
ことを特徴とする付記１１に記載のストレージコントローラ選択プログラム。
【符号の説明】
【０４３７】
１００  仮想ストレージシステム
１１０、１１０ａ〜１１０ｃ  ストレージ
１１１ａ〜１１３ｃ  論理ユニット
１２０、１２０ａ〜１２０ｃ  ストレージコントローラ
１２１ａ〜１２２ｃ  論理ボリューム
１３０、１４０  ネットワーク
１５０ａ〜１５０ｃ  サーバ
１５１ａ  マルチパスドライバ
１６０  端末
１７０  共有ディスク
２０１、２０２  物理ＨＤＤ
２１１  ＣＰＵ
２１２  ＲＡＭ
２１３  不揮発性記憶装置
２１４、２１５  通信インタフェイス
２１６  バス
３０１ａ、３０１ｂ  Ｉ／Ｏ要求受信部
３０２ａ、３０２ｂ  Ｉ／Ｏキュー
３０３ａ、３０３ｂ  Ｉ／Ｏ実行部
３０４ａ、３０４ｂ  制御部
３０５ａ、３０５ｂ  記憶部
３０６ａ、３０６ｂ  時間記録テーブル
３０７  管理部
３０８  作成要求受信部
３０９  選択部
３１１  １次集計テーブル群
３１１ａ、３１１ｂ  １次集計テーブル
３１２  ２次集計テーブル
３１３  ストレージコントローラ管理テーブル
３１４  論理ボリューム管理テーブル
３１５  サーバ管理テーブル
３１６  ボリューム情報
【図１】
2014130387.tif 000004
【図２】
2014130387.tif 000005
【図３】
2014130387.tif 000006
【図４】
2014130387.tif 000007
【図５】
2014130387.tif 000008
【図６】
2014130387.tif 000009
【図７】
2014130387.tif 000010
【図８】
2014130387.tif 000011
【図９】
2014130387.tif 000012
【図１０】
2014130387.tif 000013
【図１１】
2014130387.tif 000014
【図１２】
2014130387.tif 000015
【図１３】
2014130387.tif 000016
【図１４】
2014130387.tif 000017
【図１５】
2014130387.tif 000018
【図１６】
2014130387.tif 000019
【図１７】
2014130387.tif 000020
【図１８】
2014130387.tif 000021
【図１９】
2014130387.tif 000022
【手続補正書】
【提出日】平成25年12月10日(2013.12.10)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のストレージコントローラのそれぞれについて、論理ボリュームに対する入出力要求に応じて当該ストレージコントローラにおいて行われる処理にかかる内部処理時間に関する内部処理時間情報を記憶する時間情報記憶部と、
新たな論理ボリュームの作成要求を受信する作成要求受信部と、
前記内部処理時間情報に基づいて、前記複数のストレージコントローラの中から特定のストレージコントローラを選択し、前記特定のストレージコントローラに新たな論理ボリュームを作成させる選択部と、
を備えるストレージコントローラ選択システム。
【請求項２】
前記作成要求受信部と前記選択部が、前記複数のストレージコントローラのいずれか１つに含まれ、
前記複数のストレージコントローラの各々は、
当該ストレージコントローラが受信する複数の入出力要求の各々に応じて当該ストレージコントローラにおいて行われる処理にかかる各内部処理時間を計測し、
当該ストレージコントローラについての前記内部処理時間情報を、計測した前記内部処理時間に基づいて更新するか、または、前記内部処理時間情報の算出用の別の情報を、前記選択部からアクセス可能な記憶装置に記憶する
ことを特徴とする請求項１に記載のストレージコントローラ選択システム。
【請求項３】
前記内部処理時間情報は、過去のある期間内に生じた複数の入出力要求それぞれに対応する前記内部処理時間から得られる統計量である
ことを特徴とする請求項１または２に記載のストレージコントローラ選択システム。
【請求項４】
各ストレージコントローラは、前記入出力要求に応じて、前記入出力要求により入力または出力が要求される論理ボリュームが断片化されている先の論理ユニットのうちの少なくとも１つにアクセスし、
前記内部処理時間は、前記少なくとも１つの論理ユニットへのアクセスの結果の受信を待つ時間を含まない
ことを特徴とする請求項１から３のいずれか１項に記載のストレージコントローラ選択システム。
【請求項５】
コンピュータが、
新たな論理ボリュームの作成要求を受信し、
複数のストレージコントローラのそれぞれについて、論理ボリュームに対する入出力要求に応じて当該ストレージコントローラにおいて行われる処理にかかる内部処理時間に関する内部処理時間情報を取得し、
前記内部処理時間情報に基づいて、前記複数のストレージコントローラの中から特定のストレージコントローラを選択し、
前記特定のストレージコントローラに新たな論理ボリュームを作成させる
ストレージコントローラ選択方法。
【請求項６】
コンピュータに、
新たな論理ボリュームの作成要求を受信し、
複数のストレージコントローラのそれぞれについて、論理ボリュームに対する入出力要求に応じて当該ストレージコントローラにおいて行われる処理にかかる内部処理時間に関する内部処理時間情報を取得し、
前記内部処理時間情報に基づいて、前記複数のストレージコントローラの中から特定のストレージコントローラを選択し、
前記特定のストレージコントローラに新たな論理ボリュームを作成させる
ことを含む処理を実行させるためのストレージコントローラ選択プログラム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０３４２
【補正方法】変更
【補正の内容】
【０３４２】
具体的には、ステップＳ３１５では、少なくとも以下の２つのパラメタが引数として指定されたコマンドが、ユーザによりサーバ１５０ｃに入力される。
・「ＩＱＮ−ＴＧＴ５５５５５」という論理ボリュームＩＱＮ
・アクティブ・ストレージコントローラであるストレージコントローラ１２０ｂのＩＰアドレス（つまり「１０．２０．４０．５１」というＩＰアドレス）
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０３４５
【補正方法】変更
【補正の内容】
【０３４５】
・「ＩＱＮ−ＴＧＴ５５５５５」という論理ボリュームＩＱＮ
・スタンバイ・ストレージコントローラであるストレージコントローラ１２０ａのＩＰアドレス（つまり「１０．２０．４０．５０」というＩＰアドレス）
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】０３４８
【補正方法】変更
【補正の内容】
【０３４８】
・「ＩＱＮ−ＴＧＴ５５５５５」という論理ボリュームＩＱＮ
・スタンバイ・ストレージコントローラであるストレージコントローラ１２０ｃのＩＰアドレス（つまり「１０．２０．４０．５２」というＩＰアドレス）