(57)【特許請求の範囲】
【請求項１】
複数の記憶制御装置ユニットを有し、
各記憶制御装置ユニットは、１以上のホストに接続された１以上の記憶制御装置で構成され、それら１以上の記憶制御装置が、それら１以上のホストに提供される複数の論理ボリュームを含んだ複数のボリュームを有し、
記憶制御装置ユニット同士が、下記（ａ１）乃至（ａ３）を満たす接続形態である第３の接続形態に従って、互いに接続されている、
（ａ１）１つの記憶制御装置ユニット内の１つの記憶制御装置ともう１つの記憶制御装置ユニット内の１つの記憶制御装置が、記憶制御装置の内部バスと同じ種類の接続媒体である第１種の接続媒体よりも最大通信距離が長く記憶制御装置の内部バスと異なる種類の接続媒体である第２種の接続媒体を介して接続されている、
（ａ２）前記１つの記憶制御装置ユニットが、それに接続されている１以上のホストに、前記もう１つの記憶制御装置ユニットが有する論理ボリュームを仮想化して提供する、
（ａ３）前記もう１つの記憶制御装置ユニットが、それに接続されている１以上のホストに、前記１つの記憶制御装置ユニットが有する論理ボリュームを仮想化して提供する、
記憶システムであって、
前記複数の記憶制御ユニットのそれぞれが、自身に接続されている１以上のホストに提供する論理ボリュームを、論理ボリュームのＩ／Ｏ性能に影響し得る１種類以上のファクターに基づいて定義されたティアに分類して管理するティア管理情報、を有し、
前記１種類以上のファクターは、接続形態種別というファクターを含み、
接続形態種別として、第３接続と、非第３接続があり、
第３接続に対応した論理ボリュームは、その論理ボリュームを提供する記憶制御装置ユニットに前記第３の接続形態で接続されている記憶制御装置ユニット内の論理ボリュームがマッピングされた仮想的な論理ボリュームであり、
非第３接続に対応した論理ボリュームは、前記第３接続に対応した論理ボリューム以外の論理ボリュームである、
記憶システム。
【請求項２】
請求項１記載の記憶システムであって、
前記１種類以上のファクターが、経由する記憶制御装置ユニットの段数、接続距離、またはコントローラ性能のいずれかを含み、
コントローラ性能は、論理ボリュームの制御を担当する前記記憶制御装置のコントローラの性能または機能に基づき分類される値である、
記憶システム。
【請求項３】
請求項１記載の記憶システムであって、
接続形態として、前記第３の接続形態の他に、第１及び／又は第２の接続形態があり、
前記第１の接続形態は、下記（ｂ１）を満たす接続形態であり、
（ｂ１）記憶制御装置ユニットにおいて、記憶制御装置同士が、前記第１種の接続媒体を介して互いに接続されている、
前記第２の接続形態は、下記（ｃ１）乃至（ｃ３）を満たす接続形態であり、
（ｃ１）内部記憶制御装置ユニット内の１つの記憶制御装置と、外部記憶制御装置ユニット内の１つの記憶制御装置が前記第２種の接続媒体を介して互いに接続されている、
（ｃ２）前記内部記憶制御装置ユニットが、それに接続されている１以上のホストに、前記外部記憶制御装置ユニットが有する論理ボリュームを仮想化して提供する、
（ｃ３）前記外部記憶制御装置ユニットが、前記内部記憶制御装置ユニットが有する論理ボリュームを仮想化しない、
前記内部記憶制御装置ユニットは、前記複数の記憶制御装置ユニット内の１つの記憶制御装置ユニットであり、
前記外部記憶制御装置ユニットは、前記複数の記憶制御装置ユニット外の１つの１つの記憶制御装置ユニットであり、
前記非第３接続として、自ユニット又は第２接続があり、
自ユニットに対応した論理ボリュームは、その論理ボリュームを提供する記憶制御装置ユニット内の論理ボリュームであって、その記憶制御装置ユニット以外の記憶制御装置ユニットが有する論理ボリュームがマッピングされた仮想的な論理ボリュームではない論理ボリュームであり、
第２接続に対応した論理ボリュームは、その論理ボリュームを提供する記憶制御装置ユニットに前記第２の接続形態で接続されている記憶制御装置ユニット内の論理ボリュームがマッピングされた仮想的な論理ボリュームである、
記憶システム。
【請求項４】
請求項３記載の記憶システムであって、
前記複数の内部記憶制御装置ユニットが、第３の接続形態で直列に接続されており、
内部記憶制御装置ユニットが複数の記憶制御装置で構成されている場合、それら複数の記憶制御装置が、第１の接続形態で直列に接続されている、
記憶システム。
【請求項５】
請求項１記載のシステムであって、
各記憶制御装置ユニットが、複数のポートを有し、
前記複数のポートは、論理ボリュームが割り当てられているポートである使用ポートと、論理ボリュームが割り当てられていないポートである空きポートとを含み、
第１の記憶制御装置ユニットから第２の記憶制御装置ユニットへのポート単位の負荷分散が行われ、
前記第１の記憶制御装置ユニットは、前記複数の記憶制御装置ユニットにおける或る記憶制御装置ユニットであり、
前記第２の記憶制御装置ユニットは、前記第１の記憶制御装置ユニットに１以上の前記第２種の接続媒体を介して第３の接続形態で接続されている記憶制御装置ユニットであり、
前記ポート単位の負荷分散では、以下の（Ｆ）及び（Ｇ）が行われ、
（Ｆ）前記第１の記憶制御装置ユニットが有する複数のポートから使用ポートが選択される、
（Ｇ）前記（Ｆ）で選択された使用ポートである選択ポートに割り当てられている論理ボリュームが、前記選択ポートから前記第２の記憶制御装置ユニットの空きポートに移動する、
前記（Ｇ）では、以下の（Ｇ１）乃至（Ｇ５）が行われる、
（Ｇ１）前記選択ポートに割り当てられている論理ボリュームである移動元ボリュームが属するティアが特定される、
（Ｇ２）前記第２の記憶制御装置ユニットが有する複数の論理ボリュームから、前記（Ｇ）で特定したティアと同じティアに属する論理ボリュームである移動先ボリュームが選択される、
（Ｇ３）前記移動元ボリュームから前記移動先ボリュームにデータがコピーされる、
（Ｇ４）前記空きポートに前記移動先ボリュームが割り当てられる、
（Ｇ５）前記選択ポートの識別情報が前記空きポートに割り当てられ、且つ、前記移動元ボリュームの識別情報が前記移動先ボリュームに割り当てられる、
記憶システム。
【請求項６】
請求項５記載の記憶システムであって、
前記第１の記憶制御装置ユニットが、複数の第１のプロセッサを有し、
前記第１の記憶制御装置ユニットが有する１以上の使用ポートに割り当てられている各論理ボリュームに、その論理ボリュームを担当する第１のプロセッサが割り当てられており、
前記選択ポートは、負荷が第１の負荷よりも高い第１のプロセッサである高負荷の第１のプロセッサが担当する論理ボリュームが割り当てられているポートである、
記憶システム。
【請求項７】
請求項６記載の記憶システムであって、
前記複数の第１のプロセッサに前記高負荷の第１のプロセッサが含まれている場合、
（Ｘ）前記複数の第１のプロセッサに、負荷が第２の負荷よりも低い第２のプロセッサである低負荷の第１のプロセッサが含まれていれば、前記高負荷の第１のプロセッサが担当する論理ボリュームの担当が、前記高負荷の第１のプロセッサから前記低負荷の第１のプロセッサに変わる、
（Ｙ）前記複数の第１のプロセッサに前記低負荷の第１のプロセッサが含まれていなければ、前記ポート単位の負荷分散が行われる、
記憶システム。
【請求項８】
請求項５記載の記憶システムであって、
前記選択ポートは、そのポートに割り当てられている全ての論理ボリュームについての総負荷である対象負荷を前記第１の記憶制御装置ユニットの負荷から減算することにより得られる第１の負荷と、前記第２の記憶制御装置ユニットの負荷に前記対象負荷を加算することにより得られる第２の負荷とが平均化されるようなポートである、
記憶システム。
【請求項９】
請求項５記載の記憶システムであって、
前記第２の記憶制御装置ユニットが、複数の第２のプロセッサを有し、
前記第２の記憶制御装置ユニットが有する１以上の使用ポートに割り当てられている各論理ボリュームに、その論理ボリュームを担当する第２のプロセッサが割り当てられており、
前記複数の第２のプロセッサの負荷が平均化されるように、前記移動先ボリュームを担当する第２のプロセッサが決定される、
記憶システム。
【請求項１０】
請求項１記載の記憶システムであって、
前記複数の記憶制御装置ユニットのうちの２以上の記憶制御装置ユニットである２以上の対象ユニットが、それぞれ、シンプロビジョニングが適用された論理ボリュームであるシンプロビジョニングボリュームを有し、
各対象ユニットが有する１以上のボリュームとそれが属するティアとを基に、前記２以上の対象ユニットに共有されるプールが構成され、
前記プールは、前記２以上の対象ユニットにそれぞれ関連付けられる２以上のプール領域に分割され、
各プール領域が、複数のページを含み、
前記各対象ユニットは、その対象ユニットが有するシンプロビジョニングボリュームに、その対象ユニットに関連付けられているプール領域から、ページを割り当てる、
記憶システム。
【請求項１１】
請求項１０記載の記憶システムであって、
各プール領域が、各第１のボリュームの一部の記憶領域と各第２のボリュームの一部の記憶領域とで構成され、２以上のページを含み、
前記プールを構成する全てのボリュームが同じティアに属し、
前記ファクターとして、距離又はコマンド応答時間というファクターがあり、
論理ボリュームについて、距離というファクターは、その論理ボリュームを有する記憶制御装置ユニットと、その論理ボリュームにマッピングされている論理ボリュームを有する記憶制御装置ユニットとを接続する１以上の前記第２種の接続媒体の長さに従うファクターであり、
論理ボリュームについて、コマンド応答時間というファクターは、その論理ボリュームに対するＩ／ＯのためのＩ／Ｏコマンドを記憶制御装置ユニットが出してからそのＩ／Ｏコマンドに対する応答をその記憶制御装置ユニットが受けるまでの時間に従うファクターである、
記憶システム。
【請求項１２】
請求項１０記載の記憶システムであって、
（Ｊ）プール領域毎に、シンプロビジョニングボリュームに割り当てられていないがシンプロビジョニングボリュームに割り当てられ得るページである未割当ページの数が特定され、
（Ｋ）前記（Ｊ）で特定された未割当ページ数を基に、１つの対象ユニットに関連付けられているプール領域である対象プール領域について、移動すべき未割当ページの数である移動ページ数が決定され、
（Ｌ）前記対象プール領域と別のプール領域との間で、前記移動ページ数分の未割当ページが移動する、
記憶システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶制御装置、又は複数の当該記憶制御装置を有する記憶システムに関する。
【背景技術】
【０００２】
例えば、特許文献１には、低性能ディスクアレイ装置を高性能ディスクアレイ装置に接続し、高性能ディスクアレイ装置が低性能ディスクアレイ装置内の論理ボリュームを仮想化してホスト装置に提供する技術が記載されている。
【０００３】
また、特許文献２には、相互接続される複数のＲＡＩＤ（Redundant  Array  of  Independent  (or  Inexpensive)  Disks）コントローラや、複数のＲＡＩＤコントローラ間でのデータ転送技術について記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第７４４１０９５号明細書
【特許文献２】米国特許第６６５８４７８号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかるに、これらの文献においては、複数のストレージ装置間の性能の違いや、複数のストレージ装置間の距離、等について考慮されていない。
【０００６】
しかしながら、例えば、既存の記憶制御装置（以下、既存装置）に対してその既存装置と同様なレベルの性能及び／又は機能を有する記憶制御装置を増設する場合と、その既存装置と異なるレベルの性能及び／又は機能を有する記憶制御装置を増設する場合と、を同様な設計で増設してしまっては、個別の記憶制御装置の性能及び／又は機能に必要以上の負荷や無駄が生じることになり、複数の記憶制御装置を有するシステム全体としての適切な性能及び／又は機能実現ことが出来ない事態が生じる恐れがある。
【０００７】
また、例えば、設置スペースの制限を考慮した場合、既存装置が配置されている第一のデータセンタと異なるサイトに記憶制御装置を増設することにより第二のデータセンタを構築する必要性も生じる。この場合、サイト間の距離が性能に影響を及ぼす場合があるため、同一サイトに増設する場合と同様な設計で増設してしまっては、ユーザの要求する性能を満たすことが出来ない事態が生じる恐れがある。
【０００８】
また、このような課題は、増設時のみでなく、複数の記憶制御装置を利用した初期構成の際にも考慮しなければならない共通の課題である。
【０００９】
また、クラウド環境においても、同一又は異なるサイトに設置された複数の記憶制御装置を柔軟且つ効率的に連携させることは、柔軟で且つ効率的な記憶システムの構築、制御及び／又は管理において重要視すべき事柄である。
【００１０】
したがって、本発明の目的は、複数の記憶制御装置間の性能及び／又は機能の違いや、複数の記憶制御装置間の距離、等を考慮した記憶システムを提供することにある。
【課題を解決するための手段】
【００１１】
記憶システムが、複数の記憶制御装置ユニットを有する。各記憶制御装置ユニットは、１以上のホストに接続された１以上の記憶制御装置で構成され、それら１以上の記憶制御装置が、それら１以上のホストに提供される複数の論理ボリュームを含んだ複数のボリュームを有する。記憶制御装置ユニット同士が、下記（ａ１）乃至（ａ３）を満たす接続形態である第３の接続形態に従って、互いに接続されている、
（ａ１）１つの記憶制御装置ユニット内の１つの記憶制御装置ともう１つの記憶制御装置内の１つの記憶制御装置が、記憶制御装置の内部バスと同じ種類の接続媒体である第１種の接続媒体よりも最大通信距離が長く記憶制御装置の内部バスと異なる種類の接続媒体である第２種の接続媒体を介して接続されている、
（ａ２）上記１つの記憶制御装置ユニットが、それに接続されている１以上のホストに、上記もう１つの記憶制御装置ユニットが有する論理ボリュームを仮想化して提供する、
（ａ３）上記もう１つの記憶制御装置ユニットが、それに接続されている１以上のホストに、上記１つの記憶制御装置ユニットが有する論理ボリュームを仮想化して提供する。
【００１２】
記憶制御装置が有するボリュームは、論理ボリュームであっても良いし、物理的な記憶デバイスであっても良い。
【００１３】
複数の論理ボリュームが属する複数のティアを表すティア管理情報があって良い。ティア管理情報は、記憶制御装置ユニット毎にあって良い。記憶制御装置ユニット毎のティア管理情報は、記憶制御装置ユニットにあっても良いし、記憶制御装置ユニットの外（例えば、複数の記憶制御装置ユニットに接続されている共通の記憶装置）にあっても良い。
【００１４】
ティアは、論理ボリュームのＩ／Ｏ性能に影響し得る１種類以上のファクターに基づいて定義されて良い。１種類以上のファクターが、接続形態種別というファクターを含んで良い。接続形態種別として、第３接続と、非第３接続があって良い。第３接続に対応した論理ボリュームは、仮想的な論理ボリュームで良い。ここでいう「仮想的な論理ボリューム」とは、その論理ボリュームを提供する記憶制御装置ユニットに前記第３の接続形態で接続されている記憶制御装置ユニット内の論理ボリュームがマッピングされた論理ボリュームである。非第３接続に対応した論理ボリュームは、第３接続に対応した論理ボリューム以外の論理ボリュームで良い。非第３接続に対応した論理ボリュームは、シンプロビジョニングが適用された論理ボリュームであっても良いし、物理的な記憶デバイスに基づく論理ボリュームであっても良い。
【図面の簡単な説明】
【００１５】
【図１】本発明の実施例１に係る記憶システムの構成を示す。
【図２】第１の接続形態で接続された２つのＨＤＫＣ（高性能及び／又は高機能の記憶制御装置（ＤＫＣ（DisK  Control  Apparatus））を示す。
【図３】第２の接続形態に従うＬＵ（Logical  Unit）マッピングの一例を示す。
【図４】第３の接続形態に従うＬＵマッピングの第１の例を示す。
【図５】第３の接続形態に従うＬＵマッピングの第２の例を示す。
【図６】第１の接続媒体、第２の接続媒体、及び第３の接続媒体の全てが接続されているＨＤＫＣを示す。
【図７】記憶システムが有する管理情報の一例を示す。
【図８】接続管理テーブルの構成を示す。
【図９】図９Ａは、ティア管理テーブルの構成を示す。図９Ｂは、図９Ａに示すテーブルに採用されている性能ファクターとそのポイント（ティアレベルの要素）との関係例を示す。
【図１０】拡張されたティア管理テーブルを示す。
【図１１】図１０に示すテーブルに採用されている性能ファクターとそのポイントとの関係例を示す。
【図１２】ＬＵ／ＰＤＥＶ（Physical  DEVice）変換テーブルの構成を示す。
【図１３】仮想ページ管理テーブルの構成を示す。
【図１４】図１４Ａは、実ページ管理テーブルの構成を示す。図１４Ｂは、キュー先頭管理テーブルの構成を示す。
【図１５】ダイナミックプロビジョニング（シンプロビジョニング）が適用されたＨＤＫＣを示す。
【図１６】ＨＤＫＣが行うＤＫＣ拡張処理の流れを示す。
【図１７】Ｉ／Ｏコマンドの処理の一部（ＨＤＫＣがサーバからＩ／Ｏコマンドを受ける際の処理）の流れを示す。
【図１８】Ｉ／Ｏコマンド処理の一部（第１の接続形態に従うＬＵに対するＩ／Ｏの処理）の流れを示す。
【図１９】第１の接続形態に従う構成の概要の一例を示す。
【図２０】ＤＰ−ＬＵ（ダイナミックプロビジョニング（シンプロビジョニング）に従うＬＵ）に関するリード処理の流れを示す。
【図２１】ＤＰ−ＬＵに関するライト処理の流れを示す。
【図２２】Ｉ／Ｏコマンド処理の一部（第２の接続形態に従うＬＵに対するＩ／Ｏの処理）の流れを示す。
【図２３】第２の接続形態に従う構成の概要の一例を示す。
【図２４】Ｉ／Ｏコマンドの処理の一部（ＨＤＫＣが第３の接続媒体を介して別のＨＤＫＣからＩ／Ｏコマンドを受ける際の処理）の流れを示す。
【図２５】Ｉ／Ｏコマンドの処理の一部（第３の接続形態（ケース３−１）に従うＩ／Ｏの処理）の流れを示す。
【図２６】第３の接続形態（ケース３−１）に従う構成の概要の一例を示す。
【図２７】Ｉ／Ｏコマンドの処理の一部（第３の接続形態（ケース３−２）に従うＩ／Ｏの処理）の流れを示す。
【図２８】第３の接続形態（ケース３−２）に従う構成の概要の一例を示す。
【図２９】Ｉ／Ｏコマンドの処理の一部（第３の接続形態（ケース３−３）に従うＩ／Ｏの処理）の流れを示す。
【図３０】第３の接続形態（ケース３−３）に従う構成の概要の一例を示す。
【図３１】担当ＣＰＵテーブルの構成を示す。
【図３２】ポート単位の負荷分散（第２種の負荷分散処理）の開始前における構成例を示す。
【図３３】ポート単位の負荷分散（第２種の負荷分散処理）の概要を示す。
【図３４】図３４Ａは、実施例２に係る担当ＣＰＵテーブルの構成を示す。図３４Ｂは、負荷閾値管理テーブルの構成を示す。
【図３５】ポート負荷管理テーブルの構成を示す。
【図３６】テンポラリＬＵ管理テーブルの構成を示す。
【図３７】負荷分散制御処理の一部（負荷分散判断処理）の流れを示す。
【図３８】負荷分散制御処理の一部（第１種の負荷分散処理）の流れを示す。
【図３９】図３９Ａは、第１種の負荷分散処理における、負荷分散前の担当ＣＰＵテーブルの一例、を示す。図３９Ｂは、第１種の負荷分散処理における、負荷分散後の担当ＣＰＵテーブルの一例、を示す。
【図４０】負荷分散制御処理の一部（第２種の負荷分散処理の一部）の流れを示す。
【図４１】負荷分散制御処理の一部（第２種の負荷分散処理の一部）の流れを示す。
【図４２】負荷分散制御処理の一部（第２種の負荷分散処理の一部）の流れを示す。
【図４３】図４１のＳ４１０７の処理の一部を示す。
【図４４】図４１のＳ４１０７の処理の残りを示す。
【図４５】図４５Ａは、第２種の負荷分散処理の開始前におけるポート負荷管理テーブル＃Ｈ０を示す。図４５Ｂは、第２種の負荷分散処理の開始前におけるポート負荷管理テーブル＃Ｈ１を示す。
【図４６】図４６Ａは、第２種の負荷分散処理の開始前における担当ＣＰＵテーブル＃Ｈ０を示す。図４６Ｂは、第２種の負荷分散処理の開始前における担当ＣＰＵテーブル＃Ｈ１を示す。
【図４７】図４７Ａは、第２種の負荷分散処理における更新後のポート負荷管理テーブル＃Ｈ０を示す。図４７Ｂは、第２種の負荷分散処理における更新後のポート負荷管理テーブル＃Ｈ１を示す。
【図４８】図４８Ａは、第２種の負荷分散処理における更新後の担当ＣＰＵテーブル＃Ｈ０を示す。図４８Ｂは、第２種の負荷分散処理における更新後の担当ＣＰＵテーブル＃Ｈ１を示す。
【図４９】図４９Ａは、第２種の負荷分散処理における更新前のテンポラリＬＵ管理テーブル＃Ｈ１を示す。図４９Ｂは、第２種の負荷分散処理における更新後のテンポラリＬＵ管理テーブル＃Ｈ１を示す。
【図５０】本発明の実施例３に係るＨＤＫＣユニット間でのプール共有の一例を示す。
【図５１】未割当ページ使用量管理テーブルの構成を示す。
【図５２】図５２Ａは、プールをＨＤＫＣ＃Ｈ０及び＃Ｈ１で共有して差し支えない状況に係るティア管理テーブル＃Ｈ０を示す。図５２Ｂは、プールをＨＤＫＣ＃Ｈ０及び＃Ｈ１で共有することが好ましくない状況に係るティア管理テーブル＃Ｈ０を示す。
【図５３】実施例３に係るプール作成処理の流れを示す。
【図５４】図５３のＳ５３０３で更新された後の実ページ管理テーブル＃Ｈ０を示す。
【図５５】図５３のＳ５３１１で更新された後の実ページ管理テーブル＃Ｈ１を示す。
【図５６】図５６Ａは、図５３のＳ５３０７で更新される前のキュー先頭管理テーブル＃Ｈ０を示す。図５６Ｂは、図５３のＳ５３１４で更新される前のキュー先頭管理テーブル＃Ｈ１を示す。
【図５７】図５３のＳ５３０６で更新された後の実ページ管理テーブル＃Ｈ０を示す。
【図５８】図５３のＳ５３１３で更新された後の実ページ管理テーブル＃Ｈ１を示す。
【図５９】図５９Ａは、図５３のＳ５３０７で更新された後のキュー先頭管理テーブル＃Ｈ０を示す。図５９Ｂは、図５３のＳ５３１４で更新された後のキュー先頭管理テーブル＃Ｈ１を示す。
【図６０】プールメンテナンス処理の流れの一部を示す。
【図６１】プールメンテナンス処理の流れの一部を示す。
【図６２】プールメンテナンス処理の流れの一部を示す。
【図６３】図６３Ａは、図６０のＳ６００２で更新された後の未割当ページ使用量管理テーブル＃Ｈ０を示す。図６３Ｂは、図６０のＳ６０５２で更新された後の未割当ページ使用量管理テーブル＃Ｈ１を示す。
【図６４】第２の接続形態に従うＬＵマッピングの変形例を示す。
【図６５】図６５Ａは、ＨＤＫＣ＃Ｈ０から第３接続ＨＤＫＣ＃Ｈ１へのＬＵ移動前の構成例を示す。図６５Ｂは、ＨＤＫＣ＃Ｈ０から第３接続ＨＤＫＣ＃Ｈ１へＬＵ＃０を移動するとＬＵ＃０が属するティアが変わることを示す。
【図６６】実施例３において、プール作成処理によってプール領域５０１１が作成された後に、ＤＰ−ＬＵ＃１６０の仮想ページ（０ｘ０２）に、プール領域５０１１から、ＲＡＩＤグループ＃Ｈ１５に基づく実ページ（０ｘ０１）が割り当てられたときの、仮想ページ管理テーブル＃Ｈ０を示す。
【図６７】実施例３において、プール作成処理によってプール領域５０１１が作成された後に、ＤＰ−ＬＵ＃１６０の仮想ページ（０ｘ０２）に、プール領域５０１１から、ＲＡＩＤグループ＃Ｈ１５に基づく実ページ（０ｘ０１）が割り当てられたときの、実ページ管理テーブル＃Ｈ０を示す。
【図６８】実施例３において、プール作成処理によってプール領域５０１２が作成された後に、そのプール領域５０１２に関連付けられているＤＰ−ＬＵに初めてデータが書き込まれた場合の、仮想ページ管理テーブル＃Ｈ１を示す。
【図６９】実施例３において、プール作成処理によってプール領域５０１２が作成された後に、そのプール領域５０１２に関連付けられているＤＰ−ＬＵに初めてデータが書き込まれた場合の、実ページ管理テーブル＃Ｈ１を示す。
【発明を実施するための形態】
【００１６】
以下、本発明の幾つかの実施例を説明する。
【００１７】
なお、以下の説明では、「ｘｘｘテーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていてもよい。データ構造に依存しないことを示すために「ｘｘｘテーブル」を「ｘｘｘ情報」と呼ぶことができる。
【００１８】
また、以下の説明では、何らかの対象を識別するための情報として、ＩＤ（識別子）、番号などが用いられるが、それに限らず、他種の識別情報が用いられても良い。
【００１９】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ（Central  Processing  Unit））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又は通信インタフェース装置（例えば通信ポート）を用いながら行うため、処理の主語がプロセッサとされてもよい。プロセッサは、プロセッサが行う処理の一部又は全部を行うハードウェア回路を含んでも良い。コンピュータプログラムは、プログラムソースから各計算機にインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ又は記憶メディアであっても良い。
【実施例１】
【００２０】
＜本発明の実施例１に係る記憶システムの構成＞。
【００２１】
図１は、本発明の実施例１に係る記憶システムの構成を示す。
【００２２】
記憶システム１１０に、１以上のサーバ１０１が接続されている。各サーバ１０１は、例えば、通信ネットワークを介して、記憶システム１１０に接続されている。通信ネットワークは、例えば、ＦＣ（Fibre  Channel）ネットワーク、ＬＡＮ（Local  Area  Network）、或いはインターネットである。
【００２３】
サーバ１０１は、ホスト装置の一例である。サーバ１０１は、例えば、記憶システム１１０に接続される通信インタフェース装置と、コンピュータプログラムを記憶する記憶資源と、通信インタフェース装置及び記憶資源に接続されたプロセッサ（典型的にはＣＰＵ（Central  Processing  Unit））を有する。プロセッサが、記憶資源からコンピュータプログラムを読み出し実行する。コンピュータプログラムとして、典型的には、ＯＳ（Operating  System）、及び、アプリケーションプログラム１１１がある。アプリケーションプログラム１１１は、記憶システム１１０から提供されるＬＵ（Logical  Unit）にアクセスする。ＬＵは、論理的な記憶デバイスであり、論理ボリュームと呼ばれても良い。なお、１つ又は複数のサーバ１０１は、１つ又は複数のサーバ１０１内の１つ又は複数の仮想サーバを有することも良い。
【００２４】
記憶システム１１０は、複数の記憶制御装置を有する。記憶制御装置は、例えば、ＲＡＩＤ（Redundant Array of Inexpensive Disks）制御を利用して複数の物理記憶媒体にデータを記憶させることを制御するコントローラ（以下、内部コントローラ）を含んだ装置（例えば、ディスクアレイ装置）である。物理記憶媒体は、物理記憶デバイスと言うこともできるので、それを略して、以下、「ＰＤＥＶ」（Physical  Device）と言うことがある。ＰＤＥＶは、例えば、ディスク型の記憶媒体（例えば、ＨＤＤ（Hard  Disk  Drive））である。そこで、以下の説明では、記憶制御装置を、ディスク制御装置を略して「ＤＫＣ」（DisK  Control  Apparatus）と言うことがある。そして、特に、高性能及び／又は高機能のＤＫＣを、「ＨＤＫＣ」（High  Performance  and/or  High  functionality  DKC）と言い、低性能及び／又は低機能のＤＫＣ（例えば、ＨＤＫＣより性能及び／又は機能の低いＤＫＣ）を、「ＬＤＫＣ」（Low  Performance  and/or  Low  functionality  DKC）と言うことがあり、ＨＤＫＣ及びＬＤＫＣを特に区別しない場合には、単に「ＤＫＣ」と言うことがある。ＰＤＥＶは、ＨＤＫＣ及び／又はＬＤＫＣに内蔵されても良いし、ＨＤＫＣ及び／又はＬＤＫＣに外付けされても良い。また、ディスク型記憶媒体は、例えば、ＦＣ（Fibre  Channel）、ＳＡＳ（Serial  Attached  SCSI）、ＡＴＡ（Advanced  Technology  Attachment）、ＳＡＴＡ（Serial  ATA）等のドライブで良い。また、ＰＤＥＶは、ディスク型記憶媒体に代えて、他種の物理記憶媒体、例えば、ＳＳＤ（Solid  State  Drive）、半導体メモリ格納装置／ボード等でも良い。
【００２５】
記憶システム１１０は、ＨＤＫＣユニット群１０４と、ＨＤＫＣユニット群１０４より下位にあるＬＤＫＣ群１０５とを有する。
【００２６】
ＨＤＫＣユニット群１０４は、複数のＨＤＫＣユニット１４１を有する。
【００２７】
ＨＤＫＣユニット１４１は、１以上のＨＤＫＣで構成されている。つまり、ＨＤＫＣユニット１４１は、ＨＤＫＣそれ自体でも良いし、複数のＨＤＫＣの集合でも良い。ＨＤＫＣユニット１４１が複数のＨＤＫＣの集合の場合、それら複数のＨＤＫＣは、例えば、直列に接続されている。ＨＤＫＣユニット１４１内において、２つのＨＤＫＣは、互いに、近距離接続可能な接続媒体（以下、内部バス）で接続される。内部バスは、例えば、最大でも数メートル程度と短い。内部バスは、例えば、ＰＣＩバス、又は、ＰＣＩ−Ｅｘｐｒｅｓｓ（ＰＣＩｅ）バスである。ＨＤＫＣユニット１４１における、ＨＤＫＣとＨＤＫＣとの接続形態を、本実施例では、「第１の接続形態」と言う。また、第１の接続形態に従う内部バスは、「第１の接続媒体」（或いは、第１のデータ転送用ライン）と呼ばれても良い。
【００２８】
複数のＨＤＫＣユニット１４１は、例えば、直列に接続されている。ＨＤＫＣユニット１４１内のＨＤＫＣと、別のＨＤＫＣユニット１４１内のＨＤＫＣが、互いに、長距離接続可能な接続媒体（以下、外部バス）で接続される。外部バスは、本実施例では、ＦＣ（Fibre  Channel）ケーブルであるが、それに代えて、ＦＣｏＥ（Fibre  Channel  over  Ethernet）のような別な接続媒体が採用されても良い。ＨＤＫＣユニット１４１内のＨＤＫＣと、別のＨＤＫＣユニット１４１内のＨＤＫＣとの接続形態を、本実施例では、「第３の接続形態」と言う。第３の接続形態に従う外部バスは、「第３の接続媒体」（或いは、第３のデータ転送用ライン）と呼ばれても良い。また、以下、第１のＨＤＫＣに、他のＨＤＫＣを介することなく、外部バス（第３の接続媒体）を介して第２のＨＤＫＣが接続されている場合、第１のＨＤＫＣに第２のＨＤＫＣが直接的に接続されているということであり、第１のＨＤＫＣに、他のＨＤＫＣ及び外部バス（第３の接続形態）を介して第２のＨＤＫＣが接続されている場合、第１のＨＤＫＣに第２のＨＤＫＣが間接的に接続されているということである。
【００２９】
ＬＤＫＣ群１０５は、１以上のＬＤＫＣ１５１を有する。ＬＤＫＣ１５１は、ＨＤＫＣに外部バスで接続されている。ＬＤＫＣ１５１とＨＤＫＣとの接続形態を、本実施例では、「第２の接続形態」と言う。第２の接続形態に従う外部バスは、「第２の接続媒体」（或いは、第２のデータ転送用ライン）と呼ばれても良い。ＬＤＫＣ１５１は、例えば、複数のＰＤＥＶを有し、それらに基づく１以上のＬＵ（Logical  Unit）を管理する。ＬＵは、論理的な記憶デバイス（論理ボリューム）である。ＬＤＫＣ内のＬＵは、仮想的にＨＤＫＣ内のＬＵとして管理される。
【００３０】
サーバ１０１は、１又は複数のＨＤＫＣに外部バス（通信ネットワーク）を介して接続されるが、記憶システム１１０は、そのサーバ１０１には、仮想的に、１台のＤＫＣが接続されているように見せることができる。サーバ１０１には、そのサーバ１０１に接続されているＨＤＫＣ（図１の説明において「対象ＨＤＫＣ」と言う）から複数のＬＵが提供されるが、それら複数のＬＵは、例えば、下記（ｘ１）乃至（ｘ５）のうちの少なくとも１つを含んで良い。
（ｘ１）対象ＨＤＫＣが有するＬＵ。
（ｘ２）第１の接続媒体を介して提供されるＬＵ。すなわち、対象ＨＤＫＣを含んだＨＤＫＣユニット（図１の説明において「対象ＨＤＫＣユニット」と言う）内の他のＨＤＫＣが有するＬＵ、
（ｘ３）第３の接続媒体を介して提供されるＬＵ。すなわち、対象ＨＤＫＣユニットに直接的又は間接的に接続されている他のＨＤＫＣユニットが有するＬＵがマッピングされている仮想的なＬＵ。
（ｘ４）第２の接続媒体を介して提供されるＬＵ。すなわち、対象ＨＤＫＣユニットに接続されているＬＤＫＣが有するＬＵがマッピングされている仮想的なＬＵ、
（ｘ５）第３の接続媒体及び第２の接続媒体を介して提供されるＬＵ。すなわち、他のＨＤＫＣユニットが有する仮想的なＬＵ（他のＨＤＫＣユニットに接続されているＬＤＫＣが有するＬＵがマッピングされた仮想的なＬＵ）がマッピングされている仮想的なＬＵ。
【００３１】
ＤＫＣに搭載されるＰＤＥＶの容量及び／又は搭載台数は、一般に、増加している。そのため、ＤＫＣがサポートする記憶容量も、一般に、増加している。
【００３２】
しかし、ＤＫＣの内部コントローラの性能及び／又は機能は、ＤＫＣがサポートする記憶容量の増加に比べて、向上していない。
【００３３】
また、記憶システムを利用するユーザによって、ＤＫＣに要求されるニーズ（記憶容量、性能、ポートの数）に幅がある。
【００３４】
記憶システムが、ハイエンドユーザのニーズに合わせて構築された場合、ローエンドユーザにとって、記憶システムは、過剰な性能及び／又は機能を有し、且つ、高価である。また、小規模から徐々に規模が大きくなるよう記憶システムを構築するようにしたとしても、初期導入費用が高くなってしまう傾向にある。
【００３５】
前述した特許文献２によれば、複数のＤＫＣ又は内部コントローラを内部バスにより相互接続させ、スケーラビリティを向上させることができる。しかし、この場合、例えば、下記の問題点がある。
（１）ＤＫＣ間及び／又は内部コントローラ間が、近距離（例えば最大で数メートル）でなければならない。記憶システムの規模を大きくしようとすると、同一サイトに大きなスペースが必要となる。スペースが足りない場合、拡張ができない。
（２）インタフェースの種類によっては、接続できるＤＫＣ及び／又は内部コントローラの数に制限がある。
【００３６】
本実施例では、ＨＤＫＣが、第１の接続媒体に代えて又は加えて、長距離接続が可能な第３の接続媒体（外部バス）で接続され、第３の接続媒体で接続された複数のＨＤＫＣが仮想的に１つのＤＫＣとされる。このため、複数のＨＤＫＣをそれぞれ離れた場所に設置することが可能であり、同一サイトに大きなスペースを必要としない。また、接続できるＤＫＣの数に特に制限が無いので、スケーラビリティが向上する。
【００３７】
これにより、初期導入費用を削減しつつ、小規模構成から大規模な構成へと柔軟な且つ効率的なスケールアウトを実現できる技術を提供できる。また、同一又は異なるサイトに設置された複数の記憶制御装置(例えば、ＨＤＫＣユニット１４１、ＨＤＫＣ及び／又はＬＤＫＣ１５１）を柔軟且つ効率的に連携させることは、クラウド環境において柔軟で且つ効率的な記憶システムを構築、制御及び／又は管理する上で必要且つ重要な技術となる。
【００３８】
記憶システム１１０は、ＨＤＫＣ又はＬＤＫＣを有するが、サーバ１０１に、複数のＬＵを有する単一のＤＫＣとして把握させることができる。この場合、ＨＤＫＣが増設されたとしても、ＨＤＫＣの上位のデバイス（例えば、サーバ、又は、通信ネットワークを構成するスイッチ）は、ＨＤＫＣの増設としてではなく、フロントエンドの通信ポート（以下、ＦＥポート）の増設としてしか把握しない。ＦＥポートは、フロントエンドのデバイスに接続される通信ポートであり、ＨＤＫＣが有する。フロントエンドのデバイスとは、ＨＤＫＣの外にあるデバイスであり、例えば、サーバ、通信ネットワーク内のスイッチ、第１の接続形態で接続されるＨＤＫＣ、第３の接続形態で接続されるＨＤＫＣ、或いは、第２の接続形態で接続されるＬＤＫＣである。
【００３９】
なお、記憶システムは、単一のＤＫＣではなく、複数のＤＫＣとして、サーバ１０１から把握されて良い。また、ＨＤＫＣが増設された場合、サーバ１０１から、ＨＤＫＣが増設されたことが把握されて良い。
【００４０】
ＨＤＫＣについて、「高性能及び／又は高機能」とは、第１の性能閾値より高い性能、及び／又は、所定種類の機能でも良いし、他のＤＫＣの性能及び／又は機能に比べて高い性能及び／又は機能（他のＤＫＣとほぼ同じレベルの性能及び／又は機能）でも良い。また、ＨＤＫＣは、ディスクアレイ装置に限らず、他種の記憶制御装置（例えば、ストレージ仮想化機能を有するインテリジェントなスイッチ）でも良い。
【００４１】
ＨＤＫＣに関する技術的な目的は、例えば、下記の（ａ）乃至（ｄ）、
（ａ）複数のＨＤＫＣを接続する際の制御方法や接続後の利用方法等を提供すること、
（ｂ）或るＨＤＫＣと異なるサイトに、同じくＨＤＫＣを接続する際の制御方法や接続後の利用方法等を提供すること、
（ｃ）複数のＨＤＫＣを接続する場合に、各ＤＫＣの間の接続関係や距離に応じて、接続されるＨＤＫＣに作成されるＬＵのティアレベル等の属性を適切に管理し、接続後の適切な利用方法等を提供すること（「ティア」について後述する）、
（ｄ）或るＨＤＫＣと他の複数のＨＤＫＣとを接続する場合に、当該他の複数のＨＤＫＣ間の性能の違いや、当該或るＨＤＫＣからの距離に応じて、他のＨＤＫＣ毎に作成されるＬＵのティアレベル等の属性を適切に管理し、接続後の適切な利用方法等を提供すること、
がある。
【００４２】
ＬＤＫＣについて、「低性能及び／又は低機能」とは、第２の性能閾値より低い性能、及び／又は、所定種類の機能でも良いし、他のＤＫＣの性能及び／又は機能に比べて低い性能及び／又は機能（他のＤＫＣとほぼ同じレベルの性能及び／又は機能）でも良い。第２の性能閾値は、第１の性能閾値以下でよい。また、ＬＤＫＣは、ディスクアレイ装置に限らず、他種の記憶制御装置でも良い。
【００４３】
ＬＤＫＣに関する技術的な目的は、例えば、下記（ｐ）及び（ｑ）、
（ｐ）或るＨＤＫＣとＬＤＫＣとを接続する場合、各ＤＫＣの間の性能の違いや距離に応じて、ＬＤＫＣに作成されるＬＵのティアレベル等の属性を適切に管理し、接続後の適切な利用方法等を提供すること、
（ｑ）或るＨＤＫＣと複数のＬＤＫＣとを接続する場合に、当該複数のＬＤＫＣ間の性能の違いや、ＨＤＫＣからの距離に応じて、ＬＤＫＣ毎に作成されるＬＵのティアレベル等の属性を適切に管理し、接続後の適切な利用方法等を提供すること、
である。
【００４４】
次に、各接続形態を説明する。
【００４５】
＜第１の接続形態＞。
【００４６】
図２は、第１の接続形態で接続された２つのＨＤＫＣを示す。
【００４７】
なお、図２には、ハードウェア要素に、参照符号と、ＩＤが付されている。以下の説明では、同種の要素を区別する場合には、ＩＤを用いて要素を表し（例えば、ＨＤＫＣ＃Ｈ０）、同種の要素を特に区別しない場合には、参照符号を用いて要素を表す（例えば、ＨＤＫＣ２０１）。
【００４８】
また、ＨＤＫＣのＩＤは、アルファベット「Ｈ」と１桁の番号との組合せ（２桁の符号）であるが、ＨＤＫＣに複数の同種のハードウェア要素がある場合、同種の複数のハードウェア要素は、そのＨＤＫＣのＩＤを上位に含んだ３桁の符号（ＩＤ）で区別されて良い。具体的には、例えば、ＨＤＫＣ＃Ｈ０が有する２つのＣＰＵのＩＤは、Ｈ００、Ｈ０１である。なお、「ＣＰＵ＃Ｈ０」と包括表記した場合、ＣＰＵ＃Ｈ０は、ＣＰＵ＃Ｈ００及び＃Ｈ０１のうちの少なくとも１つである。これは、ＣＰＵに限らず、他種のハードウェア要素についても同様である。
【００４９】
ＨＤＫＣ２０１は、ＰＤＥＶ群と、内部コントローラとに大別することができる。
【００５０】
ＰＤＥＶ群は、１以上のＲＧ２３１を含む。ＲＧ２３１は、ＲＡＩＤ（Redundant  Array  of  Independent  （or  Inexpensive）  Disks）グループであり、２以上のＰＤＥＶで構成されている。
【００５１】
内部コントローラは、例えば、２つのコントローラモジュール２１１で構成されている。１つのＨＤＫＣ２０１に存在するコントローラモジュール２１１の数は、１でも良いし、３以上でも良い。
【００５２】
コントローラモジュール２１１は、フロントインターフェース（Ｆ−Ｉ／Ｆ）２２１と、バックエンドインタフェース（Ｂ−Ｉ／Ｆ）２２５と、キャッシュメモリ（ＣＭ）２２４と、ＣＰＵ２２２と、スイッチ（ＳＷ）２２６と、ローカルメモリ（ＬＭ）２２３とを有する。
【００５３】
Ｆ−Ｉ／Ｆ２２１は、サーバ１０１に接続される通信インタフェース装置である。Ｆ−Ｉ／Ｆ２２１は、１又は複数の上位ポートを有する。上位ポートは、サーバ又はスイッチ等の上位のデバイスに接続される通信ポートである。
【００５４】
Ｂ−Ｉ／Ｆ２２５は、１以上のＲＧ２３１に接続される通信インタフェース装置である。
【００５５】
ＣＭ２２４は、ＲＧ２３１に書き込まれるデータ、及び、ＲＧ２３１から読み出されたデータを一時記憶する。少なくとも１つのＣＭ２２４は、キャッシュメモリとして使用される記憶領域（ＣＭ領域）に加えて、複数のコントローラモジュールの共有メモリ（ＳＭ）として使用される記憶領域（ＳＭ領域）を有しても良い。
【００５６】
ＬＭ２２３は、ＣＰＵ２２２に使用される情報や、ＣＰＵ２２２で実行されるコンピュータプログラムを記憶して良い。ＬＭ２２３は、ＣＰＵ２２２に接続されており、ＳＷ２２６には接続されていないが、ＳＷ２２６に接続されていても良い。
【００５７】
ＣＰＵ２２２は、ＬＭ２２３に記憶されているコンピュータプログラム（以下、制御プログラム）を実行することができる。制御プログラムは、ＬＭ２２３に代えて又は加えて、他の記憶資源に記憶されていても良い。
【００５８】
ＳＷ２２６には、Ｆ−Ｉ／Ｆ２２１、ＣＰＵ２２２、ＣＭ２２４、Ｂ−Ｉ／Ｆ２２５、及び他の直近のコントローラモジュール２１１内のＳＷ２２６が接続されている。ＳＷ２２６は、これらの要素間の接続を切り替える。ＳＷ２２６と各要素との間のインタフェースは、例えば、PCI-Express（ＰＣＩｅ）である。
【００５９】
１つのＨＤＫＣにおいて、２つのコントローラモジュール２１１内の２つのＳＷ２２６（例えばＳＷ＃Ｈ００及び＃Ｈ０１）が、内部バス２２７で接続されている。同様に、第１の接続形態で接続されている別々のＨＤＫＣ＃Ｈ０及び＃１内の２つのＳＷ２２６（ＳＷ＃Ｈ０１及び＃Ｈ１０）が、内部バス２２７で接続されている。
【００６０】
このような構成により、ＨＤＫＣユニット１４１では、複数のコントローラモジュール２１１内のハードウェア要素や、複数のＨＤＫＣ２０１内のＲＧ２３１を共有することができる。また、複数のＨＤＫＣ２０１内の管理情報（例えば、後述する１以上のテーブル）も共有できる。このため、１つの内部コントローラ（或いは、１つのコントローラモジュール）で、複数のＨＤＫＣ２０１の情報を管理することができ、ＨＤＫＣユニット１４１は、１つのＨＤＫＣのように振る舞うことが可能である。例えば、ＣＰＵ＃Ｈ０１が、ＣＭ＃Ｈ００、＃Ｈ１０及び＃Ｈ１１のいずれにも、ＣＭ＃Ｈ０１にアクセスするのと同じようにアクセスすることができる。また、ＣＰＵ＃Ｈ０１は、ＲＧ＃Ｈ００〜＃１４に対してＩ／Ｏ（Input/Output）を行うのと同様に、ＲＧ＃Ｈ１０〜＃Ｈ１４のいずれに対してもＩ／Ｏを行うことができる。
【００６１】
具体的には、例えば、サーバ１０１から指定されたＬＵＮ（Logical  Unit  Number）に対応するＬＵに対してライトコマンドを受けたコントローラモジュール２１１と、そのライトコマンドに従うライト先のＲＧ２３１とが、同一のＨＤＫＣ２０１内にある場合、一点鎖線に示す流れで、データがＲＧ２３１に書き込まれて良い。すなわち、ライトコマンドを受けたコントローラモジュール＃Ｈ００（別のコントローラモジュールでも良い）が、ＣＭ＃Ｈ００（別のＣＭでも良い）にデータを書込み、ＣＭ＃Ｈ００内のデータを、ライト先ＲＧ＃Ｈ０１に書き込んでも良い。なお、それに限らず、Ｉ／Ｏコマンドを受けたコントローラモジュールとは別のコントローラモジュールが、Ｉ／Ｏ先のＲＧに対するＩ／Ｏを行っても良い。
【００６２】
また、例えば、ライトコマンドを受けたコントローラモジュール２１１と、そのライト先のＲＧ２３１とが、異なるＨＤＫＣ２０１内にある場合、点線に示す流れで、データがＲＧ２３１に書き込まれて良い。すなわち、ライトコマンドを受けたコントローラモジュール＃Ｈ０１（別のコントローラモジュールでも良い）が、ＳＷ＃Ｈ０１及び＃Ｈ１０を介して、ＣＭ＃Ｈ１０（他のＣＭでも良い）にデータを書き込み、コントローラモジュール＃Ｈ１０（他のコントローラモジュールでも良い）が、ＣＭ＃Ｈ１０内のデータを、ＳＷ＃Ｈ１０及び＃１１を介して、ライト先ＲＧ＃Ｈ１３に書き込んでも良い。
【００６３】
また、ＨＤＫＣユニット１４１がサーバ１０１に提供するＬＵは、シンプロビジョニング（Thin Provisioning)に従う仮想的なＬＵであっても良い。
【００６４】
或るＨＤＫＣ内のコントローラモジュールは、別のＨＤＫＣ内のコントローラモジュール或いはＲＧにアクセスする際、後述のＬＵマッピングテーブルを参照する必要は無い。なぜなら、ＨＤＫＣユニットにおいて、各コントローラモジュールは、そのコントローラモジュールを有するＨＤＫＣとは別のＨＤＫＣ内のハードウェア要素（例えば、ＣＭ、ＲＧ）に、そのコントローラモジュールを有するＨＤＫＣ内のハードウェア要素であるかのようにアクセスすることができるからである。
【００６５】
なお、前述したように、ＨＤＫＣユニット１４１において、コントローラモジュール同士、及び、ＨＤＫＣ同士は、内部バスで接続されているため、コントローラモジュール間の距離、及び、ＨＤＫＣ間の距離は、外部バス接続に比べて短い。
【００６６】
以上が、第１の接続形態に関する説明である。なお、ＬＤＫＣも、内部コントローラと、ＰＤＥＶ群とを有して良い。ＬＤＫＣの構成は、ＨＤＫＣと同様の構成であっても良い。ＬＤＫＣの内部コントローラの構成は、ＨＤＫＣの内部コントローラの構成と異なっていても良い。
【００６７】
＜第２の接続形態＞。
【００６８】
図３は、第２の接続形態に従うＬＵマッピングの一例を示す。なお、以下、ＨＤＫＣ及びそれが有する要素や、ＬＤＫＣ及びそれが有する要素を、参照符号に代えて、要素のＩＤを用いて説明することがある。また、以下の説明では、ＤＫＣ＃ｘが有する内部コントローラを、「内部コントローラ＃ｘ」と言うことがある。
【００６９】
ＤＫＣの内部コントローラは、複数のＦＥポート（フロントエンドの通信ポート）５０１を有する。複数のＦＥポート５０１は、イニシエータになるＦＥポート（イニシエータポート）、ターゲットになるＦＥポート（ターゲットポート）、及び、イニシエータにもターゲットにもなるＦＥポート（イニシエータ／ターゲットポート）の少なくとも１つを含んで良い。以下、図では、イニシエータポートは「ＩＰ」と表され、ターゲットポートは「ＴＰ」と表され、イニシエータ／ターゲットポートは、「ＩＴＰ」と表されることがある。ＨＤＫＣについて言えば、ＦＥポートは、Ｆ−Ｉ／Ｆ（図２参照）にある。
【００７０】
ＨＤＫＣ＃Ｈ０のターゲットポート（例えば＃Ｈ００）には、サーバ（例えば＃０）が接続される。１つのターゲットポートに接続されるサーバの数は、２以上でも良い。
【００７１】
ＨＤＫＣ＃Ｈ０のイニシエータポート＃Ｈ０３が、ＬＤＫＣ＃Ｌ０（それのターゲットポート＃Ｌ０１）に接続される。ＬＤＫＣ＃Ｌ０は、ＬＵ＃Ａ及び＃Ｂを有する。ＬＵ＃Ａ及び＃Ｂのうちの少なくとも１つが、シンプロビジョニングに従う仮想的なＬＵであっても良い。シンプロビジョニングは、ダイナミックプロビジョニングと呼ばれることもある。そこで、以下、シンプロビジョニングに従う仮想的なＬＵを、「ＤＰ−ＬＵ」と言うことがある。
【００７２】
ターゲットポート＃Ｈ０２に、ＬＵ＃４及び＃５が関連付けられており、サーバ＃０２が、ターゲットポート＃Ｈ０２に接続されている。サーバ＃０２は、ＬＵ＃４及び／又は＃５を指定したＩ／Ｏコマンドを発行することができる。
【００７３】
ＬＵ＃４には、外部のＬＵ＃Ａがマッピングされており、ＬＵ＃５には、外部のＬＵ＃Ｂがマッピングされている。つまり、ＬＵ＃４及び＃Ｂは、仮想的なＬＵである。
【００７４】
第２の接続形態によれば、ＨＤＫＣ＃Ｈ０が、イニシエータポート＃Ｈ０３に接続されたＬＤＫＣ＃Ｌ０内の外部ＬＵ＃Ａ及び＃Ｂを、仮想的にＬＵ＃４及び＃５として扱うことができる。仮想ＬＵ＃４（＃５）と外部ＬＵ＃Ａ（＃Ｂ）との対応関係は、ＬＵマッピングテーブル３２２（＃Ｈ０）から特定可能である。ＬＵマッピングテーブル３２２（＃Ｈ０）は、そのテーブルを有するＨＤＫＣ内の仮想ＬＵにマッピングされている外部ＬＵに関する情報を有する。具体的には、ＬＵマッピングテーブル＃０は、仮想ＬＵ毎に、下記の情報、
（＊）仮想ＬＵにマッピングされている外部ＬＵを有するＤＫＣのＩＤ、
（＊）その外部ＬＵのＩＤ、
を有する。ＬＵマッピングテーブル＃Ｈ０は、内部コントローラ＃Ｈ０内の記憶資源（例えば、ＬＭ、ＣＭ）に記憶される。内部コントローラ＃Ｈ０（ＣＰＵ＃Ｈ０（ＣＰＵ＃Ｈ００又は＃Ｈ０１））は、サーバ＃２からのＩ／ＯコマンドでＬＵ＃４が指定されていた場合、ＬＵ＃４にＬＵ＃ＡがマッピングされていることをＬＵマッピングテーブル＃Ｈ０から特定し、特定したＬＵ＃Ａを指定したＩ／ＯコマンドをＬＤＫＣ＃Ｌ０に送信する。それにより、ＬＵ＃４（ＬＵ＃Ａ）に対するＩ／Ｏが行われる。
【００７５】
なお、１つの仮想ＬＵにマッピングされる外部ＬＵは、１つＬＤＫＣが有する１つの外部ＬＵに限られることは無く、１つＬＤＫＣが有する複数の外部ＬＵや、ＬＤＫＣの各々から１つ又は複数づつ提供される外部ＬＵ（複数のＬＤＫＣにまたがって提供される複数の外部ＬＵ）が、１つの仮想ＬＵにマッピングされることも良い。これらの場合、上記外部ＬＵのＩＤには、複数の外部ＬＵのＩＤが含まれることになる。
【００７６】
第２の接続形態によれば、ＨＤＫＣ＃Ｈ０は、ＬＤＫＣ＃Ｌ０を、ＨＤＫＣ＃Ｈ０が有するＰＤＥＶと同等に扱って良い。ＬＤＫＣ＃Ｌ０が有するＦＥポートには、サーバが接続されても良いし、接続されなくても良い。第２の接続形態によれば、ＨＤＫＣ＃Ｈ０が、ＬＤＫＣ＃Ｌ０内のＬＵがマッピングされた仮想ＬＵを有することはあっても、ＬＤＫＣ＃Ｌ０が、ＨＤＫＣ＃Ｈ０内のＬＵがマッピングされた仮想ＬＵを有することは無い。
【００７７】
第２の接続形態によれば、仮想ＬＵ＃４及び＃５は、ＨＤＫＣ＃Ｈ０内のＲＧに基づくＬＵ（例えばＬＵ＃０）に比べ、アクセスが外部バス５０１を経由するというオーバヘッドがある（外部バス５０１は、外部のスイッチ（例えば、ＦＣ（Fibre  Channel）スイッチ）を経由しても良い）。このため、仮想ＬＵ＃４及び＃５は、ＨＤＫＣ＃Ｈ０内のＲＧに基づくＬＵよりも低いティア（例えば、中位ティア又は下位ティア）として使用されて良い。なお、後に説明する実施例２では、負荷分散が行われるが、第２の接続形態に従う仮想ＬＵは、例えば、中位ティア及び／又は下位ティアに属する負荷分散元ＬＵ（データの移動元ＬＵ）、及び／又は、中位ティア及び／又は下位ティアに属する負荷分散先ＬＵ（データの移動先ＬＵ）で良い。負荷分散において、例えば、第１のＨＤＫＣから第３の接続媒体を介して第２のＨＤＫＣに仮想ＬＵが移動された場合、その仮想ＬＵにマッピングされている第１の外部ＬＵ（第１のＬＤＫＣ内のＬＵ）内のデータが、第２のＨＤＫＣに接続されている第２のＬＤＫＣ内の第２のＬＵ（第２のＨＤＫＣ内の仮想ＬＵにマッピングされるＬＵ）に移動されても良い。
【００７８】
また、例えば、第２の接続形態に従いマッピングされた外部ＬＵ（ＬＤＫＣ内のＬＵ）は、図６４に示すように、ＨＤＫＣ＃Ｈ０内のプール＃Ｈ０を構成する少なくとも１つのＬＵにマッピングされても良い。従って、プール＃Ｈ０を構成する１以上のＬＵ（プールＬＵ）のうちの少なくとも１つが、仮想ＬＵで良い。ＨＤＫＣ＃Ｈ０は、ＤＰ−ＬＵ（ダイナミックプロビジョニングに従う仮想ＬＵ）＃０を有する。ＨＤＫＣ＃Ｈ０は、ＤＰ−ＬＵ＃０内の或る仮想ページ６１にデータが書き込まれる場合、その仮想ページ６１に、プール＃０から実ページ６２を割り当てることができる。ＨＤＫＣ＃Ｈ０は、実ページ６２にデータを書き込むことができる。ＬＤＫＣ＃Ｌ０内の外部ＬＵ＃Ｄがマッピングされた仮想ＬＵが、その実ページ６２を含む場合、実ページ６２に書き込まれるデータは、その実ページ６２に対応する、外部ＬＵ＃Ｄ内の記憶領域６３に、書き込まれる。
【００７９】
また、ＬＤＫＣに代えて又は加えて、ＨＤＫＣが、第２の接続媒体を介してＨＤＫＣに接続されて良い。
【００８０】
また、同一の１又は複数のＬＤＫＣが１つのＨＤＫＣユニット１４１内の複数のＨＤＫＣ２０１に接続されても良い。この場合、１つのＨＤＫＣユニット１４１内の複数のＨＤＫＣの各々が、同一の１又は複数のＬＤＫＣ内の同一のＬＵ（第一のＬＵ）を利用することにより、この同一のＬＵ（第一のＬＵ）がマッピングされた複数の仮想ボリューム（第一の仮想ＬＵ、第二の仮想ＬＵ）を１つ又は複数のサーバ１０１に提供することも良い。また、１つのＨＤＫＣユニット１４１内の複数のＨＤＫＣの各々が、同一の１又は複数のＬＤＫＣ内の別々のＬＵ（第二のＬＵ、第三のＬＵ）を利用することにより、この別々のＬＵ（第二のＬＵ、第三のＬＵ）の各々がマッピングされた別々の仮想ボリューム（第三の仮想ＬＵ、第四の仮想ＬＵ）を１つ又は複数のサーバ１０１に提供することも良い。
【００８１】
これらのうち、１つのＨＤＫＣユニット１４１内の複数のＨＤＫＣの各々が、同一のＬＵ（第一のＬＵ）がマッピングされた複数の仮想ボリューム（第一の仮想ＬＵ、第二の仮想ＬＵ）を１つ又は複数のサーバ１０１に提供する場合、この複数の仮想ボリューム（第一の仮想ＬＵ、第二の仮想ＬＵ）は、フェールオーバ、又は負荷分散のために利用される。
【００８２】
このうち、フェールオーバへの利用の具体例としては、１つのＨＤＫＣユニット１４１内の複数のＨＤＫＣ及び／又は管理装置３０１が、１つ又は複数のサーバ１０１から第一の仮想ＬＵを介して第一のＬＵのデータをリード及び／又はライトするアクティブな通常パスと、この１つ又は複数のサーバ１０１から第二の仮想ＬＵを介してこの第一のＬＵのデータをリード及び／又はライトするアクティブ又はパッシブな交代パスと、の両方を管理し、上記通常パスの障害に応じて上記交代パスを利用して１つ又は複数のサーバ１０１から送信されるライトコマンド及び／又はリードコマンドを処理して、第一のＬＵへのデータライト及び／又は第一のＬＵからのデータリードを実施して、１つ又は複数のサーバ１０１へライト完了応答及び／又はリード完了応答を返す。このとき、１つのＨＤＫＣユニット１４１内の複数のＨＤＫＣの各々はキャッシュメモリ２２４を有するので、上記通常パス及び／又は交代パスにおいては、ライトコマンド及び／又はリードコマンドを処理して、ＨＤＫＣ内のキャッシュメモリ２２４へライトデータを書き込み及び／又はデータをリードして、１つ又は複数のサーバ１０１へライト完了応答及び／又はリード完了応答を返した後、第一のＬＵへのデータライト及び／又は第一のＬＵからのデータリードを実施することも良い。米国においては、この具体的な処理について、米国特許第７３３７３５０号（Mimatsu  et  al.）の明細書及び図面を援用することができる。この場合、当該明細書及び図面のHost Computerが本願の１つ又は複数のサーバ１０１、当該明細書及び図面のStorage System 2及びStorage System 3の各々が本願の１つのＨＤＫＣユニット１４１内の複数のＨＤＫＣ、当該明細書及び図面のStorage System 1が本願の同一のＬＵ（第一のＬＵ）を有するＬＤＫＣ、にそれぞれ対応付けて本願技術を適用する。
【００８３】
また、負荷分散への利用の具体例としては、次のようなものが挙げられる。１つのＨＤＫＣユニット１４１内の複数のＨＤＫＣ及び／又は管理装置３０１が、１つ又は複数のサーバ１０１から第一の仮想ＬＵを介して第一のＬＵのデータをリード及び／又はライトするパスと、この１つ又は複数のサーバ１０１から第二の仮想ＬＵを介してこの第一のＬＵのデータをリード及び／又はライトするパスと、の両方を管理し、１つのＨＤＫＣユニット１４１内の複数のＨＤＫＣの各々の負荷に応じて、上記複数のパスの一方のパスを利用して実施していた処理を上記複数のパスの他方のパスを利用して実施するように変更する。ここでいう処理とは、１つ又は複数のサーバ１０１から送信されるライトコマンド及び／又はリードコマンドを処理して、第一のＬＵへのデータライト及び／又は第一のＬＵからのデータリードを実施して、１つ又は複数のサーバ１０１へライト完了応答及び／又はリード完了応答を返すという処理である。このとき、１つのＨＤＫＣユニット１４１内の複数のＨＤＫＣの各々はキャッシュメモリ２２４を有するので、上記複数のパスにおいては、ライトコマンド及び／又はリードコマンドを処理して、ＨＤＫＣ内のキャッシュメモリ２２４へライトデータを書き込み及び／又はデータをリードして、１つ又は複数のサーバ１０１へライト完了応答及び／又はリード完了応答を返した後、第一のＬＵへのデータライト及び／又は第一のＬＵからのデータリードを実施することも良い。米国においては、この具体的な処理について、米国特許公開第２００６／０２７１７５８号（Innan  et  al.）の明細書及び図面を援用することができる。この場合、当該明細書及び図面のHost Deviceが本願の１つ又は複数のサーバ１０１、当該明細書及び図面のVirtualization Storage Device 1及びVirtualization Storage Device 2の各々が本願の１つのＨＤＫＣユニット１４１内の複数のＨＤＫＣ、当該明細書及び図面のExternal Storage Deviceが本願の同一のＬＵ（第一のＬＵ）を有するＬＤＫＣ、にそれぞれ対応付けて本願技術を適用する。なお、フェールオーバ又は負荷分散への利用の具体例において複数のサーバ１０１が利用される場合には、当該複数のサーバ１０１がクラスタ関係を有するサーバに該当することが良く、この場合、上記フェールオーバの交代パスの利用又は上記負荷分散の他方のパスの利用に際して複数のサーバ１０１間で処理が引き継がれる。
【００８４】
このとき、１つ又は複数のサーバ１０１は、１つ又は複数のサーバ１０１内の１つ又は複数の仮想サーバに該当することも良い。１つ又は複数のサーバ１０１間で１つの仮想サーバが利用される場合には、上記フェールオーバの交代パスの利用又は上記負荷分散の他方のパスの利用に際して１つ又は複数のサーバ１０１間で仮想サーバが移行される。１つ又は複数のサーバ１０１間で複数の仮想サーバが利用される場合には、上記フェールオーバの交代パスの利用又は上記負荷分散の他方のパスの利用に際して１つ又は複数のサーバ１０１の複数の仮想サーバ間で処理が引き継がれる。この場合、ＨＤＫＣユニット１４１や管理装置３０１は、１つのＨＤＫＣユニット１４１内の複数のＨＤＫＣの各々の性能、状態（障害の有無、程度等）及び／又は負荷、又は複数のＨＤＫＣ間の性能の違い、状態（障害の有無、程度等）の違い、距離、及び／又は負荷の違いに応じて、複数のＨＤＫＣの何れをフェールオーバや負荷分散のSourceやDestinationにするかを判断や決定して、フェールオーバや負荷分散が実施されることが良い。なお、上記の距離は、実際の距離に限らず、コマンド送受信時間、コマンド応答時間及び／又はコマンド処理時間（詳細については図１０に対応する明細書部分で説明）でも良い。これらの技術は、本願で始めて明らかにされる技術の一つである。
【００８５】
また、同一の１又は複数のＬＤＫＣが複数のＨＤＫＣユニット１４１に接続されても良い。この場合も、上記に記載の、同一の１又は複数のＬＤＫＣが１つのＨＤＫＣユニット１４１内の複数のＨＤＫＣ２０１に接続される場合と同様な態様、具体例及び援用を適用する。ただし、１つのＨＤＫＣユニット１４１内の複数のＨＤＫＣは、複数のＨＤＫＣユニット１４１と読み替えて適用される。この場合、複数のＨＤＫＣユニット１４１や管理装置３０１は、複数のＨＤＫＣユニット１４１の各々の性能、状態（障害の有無、程度等）及び／又は負荷、又は複数のＨＤＫＣユニット１４１間の性能の違い、状態（障害の有無、程度等）の違い、距離、及び／又は負荷の違いに応じて、複数のＨＤＫＣユニット１４１の何れをフェールオーバや負荷分散のSource（フェールオーバ元や負荷分散元）やDestination（フェールオーバ先や負荷分散先）にするか否かを判断や決定して、フェールオーバや負荷分散が実施されることが良い。なお、上記の距離は、実際の距離に限らず、コマンド送受信時間、コマンド応答時間及び／又はコマンド処理時間（詳細については図１０に対応する明細書部分で説明）でも良い。また、１つ又は複数のＨＤＫＣユニット１４１や管理装置３０１は、上記の同一の１又は複数のＬＤＫＣが１つのＨＤＫＣユニット１４１内の複数のＨＤＫＣ２０１に接続される場合では、１つのＨＤＫＣユニット１４１内の複数のＨＤＫＣの各々の状態（障害の有無、程度等）及び／又は負荷、又は複数のＨＤＫＣ間の状態（障害の有無、程度等）の違い及び／又は負荷の違いに応じて、複数のＨＤＫＣの何れをフェールオーバや負荷分散のSourceやDestinationにするかを判断や決定する（性能や距離を考慮しない）のに対して、同一の１又は複数のＬＤＫＣが複数のＨＤＫＣユニット１４１に接続される場合には、複数のＨＤＫＣユニット１４１の各々の性能、状態（障害の有無、程度等）及び／又は負荷、又は複数のＨＤＫＣユニット１４１間の性能の違い、状態（障害の有無、程度等）の違い、距離、及び／又は負荷の違いに応じて、複数のＨＤＫＣユニット１４１の何れをフェールオーバや負荷分散のSourceやDestinationにするかを判断や決定する、ように制御することも良い。これらの技術も、本願で始めて明らかにされる技術の一つである。
【００８６】
＜第３の接続形態＞。
【００８７】
図４は、第３の接続形態に従うＬＵマッピングの第１の例を示す。
【００８８】
ＨＤＫＣ＃Ｈ０及び＃１は、ＦＥポートとして、ターゲットポート、イニシエータ／ターゲットポートを有する。ＦＥポートは、前述したように、Ｆ−Ｉ／Ｆ（図２参照）にある。
【００８９】
ＨＤＫＣ＃Ｈ０のターゲットポート（例えば＃Ｈ０１）にサーバ（例えば＃０）が接続されており、ＨＤＫＣ＃Ｈ１のターゲットポート（例えば＃Ｈ１２）にサーバ（例えば＃２）が接続されている。
【００９０】
ＨＤＫＣ＃Ｈ０のイニシエータ／ターゲットポート＃Ｈ０３と、ＨＤＫＣ＃Ｈ１のイニシエータ／ターゲットポート＃Ｈ１１が、外部バス６０１で接続されている（外部バス６０１は、外部のスイッチ（例えば、ＦＣ（Fibre  Channel）スイッチ）を経由しても良い）。つまり、第３の接続形態によれば、ＨＤＫＣ＃Ｈ０がＨＤＫＣ＃Ｈ１にＩ／Ｏコマンドを発行することもあれば、ＨＤＫＣ＃Ｈ１がＨＤＫＣ＃Ｈ０にＩ／Ｏコマンドを発行することもある。なぜなら、ＨＤＫＣ＃Ｈ０内のＬＵがＨＤＫＣ＃Ｈ１内の仮想ＬＵにマッピングされることもあれば、ＨＤＫＣ＃Ｈ１内のＬＵがＨＤＫＣ＃Ｈ０内の仮想ＬＵにマッピングされることがあるからである。図４によれば、ＬＵ＃１が仮想ＬＵ＃Ａにマッピングされ、ＬＵ＃３が仮想ＬＵ＃Ｃにマッピングされている。また、ＬＵ＃Ｂが仮想ＬＵ＃０にマッピングされ、ＬＵ＃Ｄが仮想ＬＵ＃２にマッピングされている。図４によれば、仮想ＬＵも、仮想ＬＵにマッピングされるＬＵも、ターゲットポートに関連付けられている。
【００９１】
ＨＤＫＣ＃Ｈ０は、ＬＵマッピングテーブル＃Ｈ０を有し、ＨＤＫＣ＃Ｈ１は、ＬＵマッピングテーブル＃Ｈ１を有する。ＬＵマッピングテーブル＃Ｈ０は、ＨＤＫＣ＃Ｈ０が有する仮想ＬＵ＃０（＃２）にマッピングされている外部ＬＵ＃Ｂ（＃Ｄ）に関する情報を有する。ＬＵマッピングテーブル＃Ｈ１は、ＨＤＫＣ＃Ｈ１が有する仮想ＬＵ＃Ａ（＃Ｃ）にマッピングされている外部ＬＵ＃１（＃３）に関する情報を有する。仮想ＬＵ＃０（＃２）にマッピングされている外部ＬＵ＃Ｂ（＃Ｄ）は、ＬＵマッピングテーブル＃Ｈ０から特定可能であり、仮想ＬＵ＃１（＃３）にマッピングされている外部ＬＵ＃Ａ（＃Ｃ）は、ＬＵマッピングテーブル＃Ｈ１から特定可能である。
【００９２】
ＨＤＫＣ＃Ｈ０及び＃Ｈ１に接続されているサーバには、１台のＨＤＫＣであるかのように見せることができる。例えば、サーバ＃０は、ＨＤＫＣ＃Ｈ０内のＬＵ＃０及び＃１を認識することができるが、ＬＵ＃０の実体は、ＬＵ＃Ｂであり、ＨＤＫＣ＃Ｈ０ではなくＨＤＫＣ＃Ｈ１に存在する。しかし、サーバ＃０は、ＬＵ＃０を認識し、そのＬＵ＃０にマッピングされている、ＨＤＫＣ＃Ｈ１内のＬＵ＃Ｂを認識しない。例えば、内部コントローラ＃Ｈ０（ＣＰＵ＃Ｈ０）は、サーバ＃０からのＩ／ＯコマンドでＬＵ＃０が指定されていた場合、ＬＵ＃０にＬＵ＃ＢがマッピングされていることをＬＵマッピングテーブル＃Ｈ０から特定し、特定したＬＵ＃Ｂを指定したＩ／ＯコマンドをＬＤＫＣ＃Ｈ１に送信する。それにより、ＬＵ＃０（ＬＵ＃Ｂ）に対するＩ／Ｏが行われる。
【００９３】
第３の接続形態に従う仮想ＬＵ＃０、＃２、＃Ａ及び＃Ｃは、ＨＤＫＣ内のＬＵにマッピングされることから、上位ティアに属して良い。第３の接続形態に従う仮想ＬＵは、例えば、上位ティアに属する負荷分散元ＬＵ（データの移動元ＬＵ）、及び／又は、上位ティアに属する負荷分散先ＬＵ（データの移動先ＬＵ）で良い。負荷分散おいて、例えば、仮想ＬＵにマッピングされているＬＵ内のデータが、そのＬＵを有するＨＤＫＣから第３の接続媒体を介して別のＨＤＫＣのＬＵに移動されても良い。
【００９４】
図５は、第３の接続形態に従うＬＵマッピングの第２の例を示す。
【００９５】
図５に示すように、仮想ＬＵ（例えばＬＵ＃Ａ）にマッピングされる外部ＬＵ（例えばＬＵ＃４）は、サーバに接続されているＦＥポート（ターゲットポート）に関連付けられているＬＵではなく、サーバに接続されていないＦＥポート（イニシエータ／ターゲットポート）（例えば＃Ｈ０３）に関連付けられているＬＵであっても良い。
【００９６】
＜第１の接続媒体、第２の接続媒体、及び第３の接続媒体の全てに接続されているＨＤＫＣ＞。
【００９７】
図６は、第１の接続媒体、第２の接続媒体、及び第３の接続媒体の全てが接続されているＨＤＫＣ＃Ｈ０を示す。
【００９８】
ＨＤＫＣ＃Ｈ０に、第１の接続媒体（内部バス）２２７を介してＨＤＫＣ＃Ｈ１が接続されており、第２の接続媒体（外部バス）５０１を介してＬＤＫＣ＃Ｌ０が接続されており、第３の接続媒体（外部バス）６０１を介してＨＤＫＣ＃ＨＡが接続されている。
【００９９】
ＨＤＫＣ＃Ｈ０は、下記のＬＵ、
（＊）ＨＤＫＣ＃Ｈ０が有するＲＧに基づくＬＵ＃０、
（＊）第１の接続形態に従うＬＵ＃ｘ（ＨＤＫＣ＃Ｈ０は、ＨＤＫＣ＃Ｈ１内のＬＵ＃ｘに直接アクセスできる）、
（＊）第２の接続形態に従う仮想ＬＵ＃３（第２の接続形態に従い外部ＬＵ＃ｚ（ＬＤＫＣ＃Ｌ０内の外部ＬＵ）がマッピングされた仮想ＬＵ）、
（＊）第３の接続形態に従う仮想ＬＵ＃２（第３の接続形態に従い外部ＬＵ＃ｙ（ＨＤＫＣ＃ＨＡ内の外部ＬＵ）がマッピングされた仮想ＬＵ）、
を有する。上述した複数のＬＵについて、例えば、下記のことが言える。
（＊）ＬＵ＃０、＃ｘ、＃２及び＃３のうちの少なくとも１つは、サーバから認識されるＬＵ（例えば、ＤＰ−ＬＵ）であっても良いし、サーバから認識されないＬＵ（例えばプールＬＵ）であっても良い。
（＊）ＬＵ＃ｘ、＃ｙ及び＃ｚのうちの少なくとも１つは、ＤＰ−ＬＵであっても良い。
（＊）ＬＵ＃ｘ及び＃ｙのうちの少なくとも１つは、第２の接続形態に従う仮想ＬＵ（第２の接続形態に従い外部ＬＵがマッピングされた仮想ＬＵ）であっても良い。
【０１００】
＜管理情報＞。
【０１０１】
図７は、記憶システム１１０が有する管理情報の一例を示す。
【０１０２】
管理情報は、記憶システム１１０が管理する情報である。全てのＨＤＫＣが、全ての種類の管理情報を記憶しても良い。また、管理情報の内容は、全てのＨＤＫＣで同一であっても良いし、ＨＤＫＣ毎に異なっていても良い。例えば、第１のＨＤＫＣが記憶する第１の種類の管理情報は、第１のＨＤＫＣに関係する情報のみを有していて、第１のＨＤＫＣに関係しない情報を有していなくて良い。
【０１０３】
また、複数のＨＤＫＣで共有可能な記憶領域が記憶しても良い管理情報があっても良いし、アクセス性能の低下を防ぐために個々のＨＤＫＣが記憶した方が良い管理情報があっても良い。
【０１０４】
図７によれば、複数のＨＤＫＣが共有可能な記憶領域を含んだ装置（共有情報管理装置）３０１が、複数のＨＤＫＣに接続されている。共有情報管理装置３０１は、以下の管理情報、
（＊）第３の接続形態に関する情報（例えば、ＨＤＫＣの順序、ＨＤＫＣ間毎の距離の長さ、各ＨＤＫＣの状態（正常或いは閉塞等））を有する第３接続管理テーブル３１１、
（＊）仮想ＬＵに関する情報（例えば、仮想ＬＵ毎に、第２と第３の接続形態のどちらに従う外部ＬＵがマッピングされているか、及び、その外部ＬＵを有するＤＫＣのＩＤを有する情報）を有する仮想ＬＵ管理テーブル３１２、
（＊）各ＨＤＫＣの内部コントローラに関する情報（例えば、内部コントローラの性能（例えば、高速、中速或いは低速）を表す情報）を有するコントローラ管理テーブル３１３、
（＊）複数のＬＵの種別に関する情報（例えば、ＬＵ毎に、ＬＵの基になっているＰＤＥＶの種類（例えば、ＳＳＤ、ＳＡＳ、或いはＳＡＴＡ）を表す情報）を有するＬＵ種別管理テーブル３１４、
を記憶することができる。共有情報管理装置３０１は、様々な管理情報を管理及び制御する管理ソフトウェアを有する。各ＨＤＫＣは、必要なタイミング（例えば、ＨＤＫＣにＬＵが追加されたとき、第２又は第３の接続形態に従う仮想ＬＵがＨＤＫＣに追加されたとき、第２又は第３の接続形態で接続されるＨＤＫＣが増えたとき）のみ、共有情報管理装置３０１にアクセスして良い。
【０１０５】
また、図７によれば、個々のＨＤＫＣが、例えば、以下の管理情報、
（＊）ティアに関する情報を有するティア管理テーブル３２１、
（＊）ＬＵの対応関係を表す情報を有するＬＵマッピングテーブル３２２、
（＊）ＬＵとＰＤＥＶとの対応関係を表す情報を有するＬＵ／ＰＤＥＶ変換テーブル３２３、
（＊）どのＬＵに対するＩ／ＯをどのＣＰＵが担当するかを表す情報を有する担当ＣＰＵテーブル３２４、
（＊）ＤＰ−ＬＵを構成する仮想ページに関する情報を有する仮想ページ管理テーブル３２５、
（＊）プールを構成する実ページに関する情報を有する実ページ管理テーブル３２６、
（＊）未割当ての実ページを管理するキューの先頭エントリのポインタを有するキュー先頭管理テーブル３２７、
（＊）ＤＫＣ同士の接続に関する情報を有する接続管理テーブル３２８、
を記憶することができる。これらのテーブル３２１乃至３２８は、共有情報管理装置３０１が記憶するテーブル３１１乃至３１４に比べて、頻繁にＨＤＫＣ内のＣＰＵによってアクセスされて良い。ＨＤＫＣ内のＣＰＵは、そのＨＤＫＣが記憶するテーブル３２１乃至３２８にアクセスすることができる。また、ＨＤＫＣ内のＣＰＵは、そのＨＤＫＣに第１の接続媒体を介して接続されているＨＤＫＣ内のテーブルにアクセスできて良いが、そのＨＤＫＣに第３の接続媒体を介して接続されているＨＤＫＣ内のテーブルにアクセスできないで良い。
【０１０６】
また、各ＨＤＫＣは、図示しないが、そのＨＤＫＣが有するＬＵに関する情報（例えば、ＬＵ毎に、ＬＵ  ＩＤ、ＬＵ種別、記憶容量）を有するＬＵ管理テーブルを記憶して良い。ＬＵ種別としては、例えば、通常のＬＵ（ＨＤＫＣ内のＲＧに基づくＬＵ）、仮想ＬＵ、及び、ＤＰ−ＬＵ（ダイナミックプロビジョニング（シンプロビジョニング）に従うＬＵ）があって良い。ＬＵ  ＩＤは、例えば、サーバが使用する識別情報であるＬＵＮ（Logical  Unit  Number）、サーバが使用しない識別情報（ボリュームＩＤ）、又はそれらの組合せで良い。
【０１０７】
ＨＤＫＣがＤＰ−ＬＵを有しない場合、そのＨＤＫＣ内の記憶資源は、テーブル３２５乃至３２７を記憶しないで良い。
【０１０８】
テーブル３２１乃至３２８の全てが、同一の記憶資源（例えば、ＣＭ（ＳＭ領域））に記憶されても良いし、テーブル３２１乃至３２８が、複数の記憶資源（例えば、ＬＭ及びＣＭ（ＳＭ領域）））に分散していても良い。また、ＨＤＫＣユニットにおいて、或るＨＤＫＣ内の記憶資源が、テーブル３２１乃至３２８の一部を記憶し、別のＨＤＫＣ内の記憶資源が、テーブル３２１乃至３２８の別の一部を記憶しても良い。
【０１０９】
また、ＬＤＫＣの記憶資源（例えば、ＬＭ、ＣＭ（ＳＭ領域））も、そのＬＤＫＣにとって必要な管理情報、例えば、ＬＵ／ＰＤＥＶ変換テーブル（ＬＤＫＣ内のＬＵと、ＬＤＫＣ内のＰＤＥＶとの関係を表す情報を有するテーブル）を記憶して良い。また、ＬＤＫＣ内の外部ＬＵが、ＤＰ−ＬＵであれば、そのＬＤＫＣ内の記憶資源は、仮想ページ管理テーブル及び実ページ管理テーブルを記憶することができる。
【０１１０】
ＤＫＣが、複数のプールを有する場合、そのＤＫＣには、実ページ管理テーブルが、プール毎にあって良い。なお、ＨＤＫＣユニット１４１は、複数の内部ボリューム（自装置内の１つ又は複数の記憶媒体から提供される記憶領域を元にして構成されるボリューム）及び／又は論理ボリューム（他のＨＤＫＣユニット１４１やＬＤＫＣ１５１から提供されるＬＵ）の複数の記憶領域を、プールとして一元的に管理している。
【０１１１】
以下、幾つかの管理情報を、図面を参照して詳細に説明する。
【０１１２】
＜接続管理テーブル３２８＞。
【０１１３】
図８は、接続管理テーブル３２８（例えば＃Ｈ０）の構成を示す。
【０１１４】
接続管理テーブル＃Ｈ０は、ＨＤＫＣ＃Ｈ０及びそれに接続されている各ＤＫＣについて、例えば、以下の情報、
（＊）ＤＫＣの識別子であるＤＫＣ  ＩＤ８０１、
（＊）ＨＤＫＣ＃Ｈ０に接続する媒体の種類を表す接続媒体８０２、
（＊）ＤＫＣの種別（性能及び／又は機能）を表すＤＫＣ種別８０３、
（＊）ＨＤＫＣ＃Ｈ０への接続の形態を表す接続形態８０４、
を有する。このテーブル＃Ｈ０が有する各情報は、管理者によって設定されても良いし、制御プログラム（ＣＰＵ＃Ｈ０が実行するコンピュータプログラム）が行う処理（図１６参照）によって設定されても良い。
【０１１５】
図８によれば、ＨＤＫＣ＃Ｈ０に対応した接続媒体８０２及び接続形態８０４がそれぞれは、それらに対応するＤＫＣがＨＤＫＣ＃Ｈ０（接続管理テーブル＃Ｈ０に対応したＤＫＣそれ自体）であることを意味する「自装置」を表す。
【０１１６】
また、図８によれば、ＨＤＫＣ＃Ｈ０に、第１の接続形態でＨＤＫＣ＃Ｈ１が接続されていて、第２の接続形態でＬＤＫＣ＃Ｌ０が接続されていて、第３の接続形態でＨＤＫＣ＃Ｈ３が接続されていることがわかる。
【０１１７】
＜ティア管理テーブル３２１＞。
【０１１８】
図９Ａは、ティア管理テーブル３２１（例えば＃Ｈ０）の構成を示す。
【０１１９】
ティア管理テーブル＃Ｈ０は、ＬＵ毎に、例えば、下記の情報、
（＊）ＬＵの基になっているＲＧの識別子であるＲＧ  ＩＤ９０１、
（＊）ＬＵの識別子であるＬＵ  ＩＤ９０２、
（＊）どんな接続形態に従うＬＵであるかに対応したポイントである接続形態９０３、
（＊）どんな種別のＰＤＥＶの基になっているＬＵであるかに対応したポイントであるＰＤＥＶ種別９０４、
（＊）接続形態９０３とＰＤＥＶ種別９０４に基づいて算出された値（例えば、接続形態９０３とＰＤＥＶ種別９０４の合計）であるティアレベル９０５、
を有する。
【０１２０】
ＲＧ  ＩＤ９０１は、例えば、ＬＵがＤＰ−ＬＵの場合、そのことを意味する値であって良い。
【０１２１】
ＰＤＥＶ種別９０４は、例えば、ＬＵがＤＰ−ＬＵの場合、そのことを意味する値であっても良いし、ＤＰ−ＬＵが関連付けられているプールを構成する１以上のプールＬＵのうちの少なくとも１つのプールＬＵに対応したＰＤＥＶ種別９０４に基づくポイントであっても良い。また、ＬＵが仮想ＬＵの場合、ＰＤＥＶ種別９０４は、その仮想ＬＵにマッピングされている外部ＬＵの基になっているＰＤＥＶの種別に従うポイントであって良い。
【０１２２】
サーバ１０１及び／又はアプリケーション１１１は、その種類によってデータの重要度やＬＵ（例えば、通常のＬＵ、ＤＰ−ＬＵ、又は外部ＬＵがマッピングされている仮想ＬＵ）へのアクセス特性（例えば、Ｉ／Ｏ頻度）が異なる。また、本願のＬＵ（例えば、通常のＬＵ、ＤＰ−ＬＵ、又は外部ＬＵがマッピングされている仮想ＬＵ）は、ティア（例えば、以下にて説明するティアレベル、又はティアレベルの範囲）の違いによって、ＬＵのアクセス性能及び／又はコストが異なる。したがって、サーバ１０１及び／又はアプリケーション１１１の種類に応じた適切なアクセス性能及び／又はコストを実現するために、管理者及び／又はコンピュータシステム（例えばＨＤＫＣユニット１４１、ＨＤＫＣ及び／又は管理装置３０１）は、サーバ１０１及び／又はアプリケーション１１１の種類に応じたティア（例えば、ティアレベル、又はティアレベルの範囲）のＬＵ（例えば、通常のＬＵ、ＤＰ−ＬＵ、又は外部ＬＵがマッピングされている仮想ＬＵ）を選択して割り当てることが好ましい。例えば、管理者は、実稼動メールサーバやアプリケーション（例えば、電子メールサーバやアプリケーション）、その他のクリティカルなオンラインアクセスを行うサーバやアプリケーションに対して、より上位のティア（例えば、ティアレベル、又はティアレベルの範囲）に属するＬＵを選択して割り当てることが好ましく、よりクリティカルの程度の低いオンラインアクセスを行うサーバやアプリケーションに対して、中位のティアに属するＬＵを選択して割り当てることが好ましく、メールアーカイブ／バックアップサーバやアプリケーションに対して、より下位のティアに属するＬＵを選択して割り当てることが好ましい。
【０１２３】
また、同一種類のサーバ１０１やアプリケーション１１１であっても、アクセスされるデータやファイルによって重要性及び／又はアクセス特性（例えば、Ｉ／Ｏ頻度）が異なる。したがって、データやファイルの重要度及び／又はアクセス特性に応じた適切なアクセス性能及び／又はコストを実現するために、管理者やコンピュータシステム（例えばＨＤＫＣユニット１４１、ＨＤＫＣ及び／又は管理装置３０１）は、データやファイルの重要度及び／又はアクセス特性に応じた適切なティア（例えば、ティアレベル、又はティアレベルの範囲）のＬＵ（例えば、通常のＬＵ、ＤＰ−ＬＵ、又は外部ＬＵがマッピングされている仮想ＬＵ）を選択して割り当てることが好ましい。例えば、重要性及び／又はＩ／Ｏ頻度の高いデータはより上位のティアに属するＬＵを選択して割り当てることが好ましく、重要性及び／又はＩ／Ｏ頻度が中程度のデータは中位のティアに属するＬＵを選択して割り当てることが好ましく、重要性及び／又はＩ／Ｏ頻度の低いデータはより下位のティアに属するＬＵを選択して割り当てることが好ましい。
【０１２４】
なお、ここで言う上位のティア及び下位のティアとは、相対的に上位又は下位のティアであっても良いし、上位のティアは、第１のティアレベル又は第１のティアレベル範囲よりも高いティアレベル又はティアレベル範囲であっても良いし、下位のティアは、第２のティアレベル又は第２のティアレベル範囲よりも低いティアレベル又はティアレベル範囲であっても良い（第２のティアレベルは、第１のティアレベル以下であって、第２のティアレベル範囲は、第１のティアレベル範囲以下であっても良い）。
【０１２５】
このテーブル＃Ｈ０によれば、ＲＧ別に、そのＲＧが基になっている１以上のＬＵのティアレベルに基づくティアレベル（例えば、１以上のＬＵのティアレベルを合計）を算出することで、ＲＧ毎のティアレベルを算出することも可能である。なお、ＲＧのティアレベルは、そのＲＧが基になっている１以上のＬＵのティアレベルを利用する方法とは別の方法で、決定されても良い。
【０１２６】
本実施例において、「ティア」とは、ＬＵのティアである。本実施例では、ＬＵについて「ティアレベル」と呼ばれる値が算出される。複数のティアのうちの、算出されたティアレベルに対応したティアが、ＬＵが属するティアである。ティアレベルは、例えば、ＬＵのＩ／Ｏ性能（例えば、単位時間当たりに入出力できるデータのサイズ、或いは、レスポンスタイム）の大きさを表す値と言うこともできる。
【０１２７】
１つのティアレベルにつき１つのティアが存在しても良いし、１つのティアレベル範囲につき１つのティアが存在しても良いし、或いは、それらの組合せであっても良い。複数の同一の大きさのティアレベル範囲があっても良いし、複数の異なる大きさのティアレベル範囲があっても良い。本実施例では、ティアレベルが小さいほど、ティアは上位である。しかし、ティアレベルの大きさとティアの高さの関係は、それに限られない。例えば、ティアレベルが小さいほど、ティアは下位となって良い。
【０１２８】
ＬＵのティアレベルは、そのＬＵのＩ／Ｏ性能に影響する１以上のファクター（以下、性能ファクター）に依存する。具体的には、例えば、本実施例では、ティアレベルは、１以上の性能ファクターに対応した１以上のポイントを用いて算出された値（例えば合計）である。ＬＵの１以上の性能ファクターは、図９Ａの例によれば、接続形態（すなわち、ＨＤＫＣ＃Ｈ０にどんな接続形態で接続されているＤＫＣ内のＬＵがマッピングされているか）、及び、ＰＤＥＶ種別（どんな種別のＰＤＥＶに基づくＬＵであるか）である。
【０１２９】
図９Ａに例示した性能ファクターとそれのポイントとの対応関係は、図９Ｂに例示されている。
【０１３０】
図９Ｂによれば、Ｉ／Ｏ性能として有利であるほど、ポイントが小さい。このため、同じＰＤＥＶ種別であっても接続形態が異なっていたり、接続形態が同じでもＰＤＥＶ種別が異なっていたりすれば、ティアレベルが異なる。
【０１３１】
図９Ｂによれば、第１乃至第３の接続形態のうち、第１の接続形態、第３の接続形態、第２の接続形態の順で、Ｉ／Ｏ性能が有利である。しかし、例えば、ＨＤＫＣに第２の接続形態で接続されているＤＫＣの性能及び／又は機能が、ＨＤＫＣと同じである場合、第２の接続形態のポイントは、第３の接続形態のポイントと同じであっても良い。
【０１３２】
また、図９Ｂによれば、ＰＤＥＶ種別９０４は、ＰＤＥＶのＩ／Ｏ性能に応じた値である。例えば、ＳＳＤのポイントの方がＳＡＳ−ＨＤＤのポイントよりも小さく、ＳＡＳ−ＨＤＤのポイントの方がＳＡＴＡ−ＨＤＤのポイントよりも小さい。
【０１３３】
なお、ＰＤＥＶ種別９０４は、それに対応するＬＵの基になっているＲＧを構成するＰＤＥＶの種別に加えて、そのＲＧのＲＡＩＤレベル（更に、３Ｄ＋１Ｐといったコンビネーションを含んで良い）を基に決定されても良い。この場合、例えば、ＲＡＩＤ５の方がＲＡＩＤ３よりも性能レベルが高いので、ＲＡＩＤ５のポイントの方がＲＡＩＤ３のポイントよりも小さい。また、ＰＤＥＶ種別９０４は、それに対応するＬＵの基になっているＲＧを構成する媒体の種別に代えて、そのＲＧのＲＡＩＤレベル（更に、３Ｄ＋１Ｐといったコンビネーションを含んで良い）を基に決定されても良い。
【０１３４】
（ａ）接続形態（ＤＫＣの性能を含んで良い）及びＰＤＥＶ種別以外の性能ファクターについては、ティアレベルを違えるほどの差が存在しない、又は、（ｂ）接続形態（ＤＫＣの性能を含んで良い）及びＰＤＥＶ種別のみを基にしてティアレベルが決定される場合、ＬＵのティアレベルは、以下の順番に小さい。すなわち、下記（１）乃至（３）のＬＵのうち、（１）のＬＵが、ティアレベルが最も小さく、より上位のティアとする、（２）のＬＵが、ティアレベルが２番目に小さく、中位のティアとする、（３）のＬＵが、ティアレベルが最も大きく、より下位のティアとする。ここでは、下記（１）乃至（３）のＬＵを有するＤＫＣが、図６に示したＨＤＫＣ＃Ｈ０であることを例に採る。
（１）自ＤＫＣ（ＨＤＫＣ＃Ｈ０）内のＲＧに基づくＬＵであって、自ＤＫＣからサーバに提供されるＬＵ（例えばＬＵ＃０）、
（２）他のＨＤＫＣ（例えばＨＤＫＣ＃ＨＡ）内のＬＵ（例えばＬＵ＃ｙ）が仮想化されたＬＵであって、自ＤＫＣからサーバに提供されるＬＵ（例えばＬＵ＃２）、
（３）ＬＤＫＣ（例えばＬＤＫＣ＃Ｌ０）内のＬＵ（例えばＬＵ＃ｚ）が仮想化されたＬＵであって、自ＤＫＣからサーバに提供される（例えばＬＵ＃３）。
【０１３５】
図６において、ＨＤＫＣ＃Ｈ０と＃Ｈ１は、同一のＨＤＫＣユニットを構成しているので、上記条件（ａ）又は（ｂ）が満される場合、ＬＵ＃０と、ＬＵ＃ｘが仮想化されたＬＵ＃１は、ティアレベルが同じである。
【０１３６】
また、（２）のＬＵの方が（３）のＬＵよりもティアレベルが小さい理由（Ｉ／Ｏ性能の面で有利な理由）は、（２）のＬＵ（仮想ＬＵ）にマッピングされている外部ＬＵを有するＤＫＣの方が、（３）のＬＵ（仮想ＬＵ）にマッピングされている外部ＬＵを有するＤＫＣよりも、性能及び／又は機能が高いからである。
【０１３７】
上記条件（ａ）又は（ｂ）が満たされる場合、本発明は、例えば、下記（Ａ）乃至（Ｇ）のうちの少なくとも１つのケースに適用可能であって良い。また、少なくとも１つのＨＤＫＣが、後述の特有の処理（例えば、図１６に記載の処理等）を実行するため、本発明は、下記（Ａ）乃至（Ｇ）のうちの少なくとも１つのケースに代えて又は加えて、下記（Ｈ）乃至（Ｍ）のうちの少なくとも１つのケースに適用可能であって良い。
（Ａ）図６において、ＨＤＫＣ＃Ｈ０が提供するＬＵ＃０、ＬＵ＃３及びＬＵ＃２（上記（１）乃至（３）のＬＵ）が、いずれも、サーバからのＩ／Ｏコマンドに従うＩ／Ｏ先（データのリード及び／又はライトのターゲット）となり得るケース。
（Ｂ）図６において、ＨＤＫＣ＃Ｈ０が、ＬＵ＃０のようなＬＵ（ＨＤＫＣ＃Ｈ０内のＲＧに基づくＬＵ）を有しないケース。ケース（Ｂ）では、例えば、ＨＤＫＣ＃Ｈ０が、ＬＵ＃０〜＃３のうちＬＵ＃０を有しない。なお、このケース（Ｂ）及び以下に記載の少なくとも１つのケース（例えば、ＬＵ＃０のようなＬＵを有しない少なくとも１つのケース）において、ＨＤＫＣ＃Ｈ０は、ＰＤＥＶを有しない記憶制御装置、例えば、ストレージの仮想化機能を有するインテリジェントスイッチでも良い。
（Ｃ）図６において、ＨＤＫＣ＃Ｈ０が、ＨＤＫＣ＃Ｈ１に接続されていない又はＨＤＫＣ＃Ｈ１に接続されていたとしてもＬＵ＃１のような仮想ＬＵ（第１の接続形態で接続されているＨＤＫＣ内のＬＵがマッピングされた仮想ＬＵ）を有しないケース。ケース（Ｃ）では、例えば、ＨＤＫＣ＃Ｈ０が、ＬＵ＃０〜＃３のうちＬＵ＃１を有しない。
（Ｄ）図６において、次の（ｄ１）及び（ｄ２）に該当するケース。（ｄ１）ＨＤＫＣ＃Ｈ０が、ＬＵ＃０のようなＬＵを有しない。（ｄ２）ＨＤＫＣ＃Ｈ０が、ＨＤＫＣ＃Ｈ１に接続されていない又はＨＤＫＣ＃Ｈ１に接続されていたとしてもＬＵ＃１のような仮想ＬＵを有しない。ケース（Ｄ）では、例えば、ＨＤＫＣ＃Ｈ０が、ＬＵ＃０〜＃３のうちＬＵ＃０及び＃１を有しない。
（Ｅ）図６において、ＨＤＫＣ＃Ｈ０が、ＬＤＫＣ＃Ｌ０に接続されていない又はＬＤＫＣ＃Ｌ０に接続されていたとしてもＬＵ＃３のような仮想ＬＵ（第２の接続形態で接続されているＬＤＫＣ内のＬＵがマッピングされた仮想ＬＵ）を有しないケース。ケース（Ｅ）では、例えば、ＨＤＫＣ＃Ｈ０が、ＬＵ＃０〜＃３のうちＬＵ＃３を有しない。
（Ｆ）図６において、次の（ｆ１）及び（ｆ２）に該当するケース。（ｆ１）ＨＤＫＣ＃Ｈ０が、ＬＵ＃０のようなＬＵを有しない。（ｆ２）ＨＤＫＣ＃Ｈ０が、ＬＤＫＣ＃Ｌ０に接続されていない又はＬＤＫＣ＃Ｌ０に接続されていたとしてもＬＵ＃３のような仮想ＬＵを有しない。ケース（Ｆ）では、例えば、ＨＤＫＣ＃Ｈ０が、ＬＵ＃０〜＃３のうちＬＵ＃０及び＃３を有しない。
（Ｇ）図６において、次の（ｇ１）及び（ｇ２）に該当するケース。（ｇ１）ＨＤＫＣ＃Ｈ０が、ＨＤＫＣ＃Ｈ１に接続されていない又はＨＤＫＣ＃Ｈ１に接続されていたとしてもＬＵ＃１のような仮想ＬＵを有しない。（ｇ２）ＨＤＫＣ＃Ｈ０が、ＬＤＫＣ＃Ｌ０に接続されていない又はＬＤＫＣ＃Ｌ０に接続されていたとしてもＬＵ＃３のような仮想ＬＵを有しない。ケース（Ｇ）では、例えば、ＨＤＫＣ＃Ｈ０が、ＬＵ＃０〜＃３のうちＬＵ＃１及び＃３を有しない。
（Ｈ）図６において、ＨＤＫＣ＃Ｈ０が、ＨＤＫＣ＃ＨＡに接続されていない又はＨＤＫＣ＃ＨＡに接続されていたとしてもＬＵ＃２のような仮想ＬＵ（第３の接続形態で接続されているＨＤＫＣ内のＬＵがマッピングされた仮想ＬＵ）を有しないケース。ケース（Ｈ）では、例えば、ＨＤＫＣ＃Ｈ０が、ＬＵ＃０〜＃３のうちＬＵ＃２を有しない。
（Ｉ）図６において、次の（ｉ１）及び（ｉ２）に該当するケース。（ｉ１）ＨＤＫＣ＃Ｈ０が、ＨＤＫＣ＃ＨＡに接続されていない又はＨＤＫＣ＃ＨＡに接続されていたとしてもＬＵ＃２のような仮想ＬＵを有しない。（ｉ２）ＨＤＫＣ＃Ｈ０が、ＨＤＫＣ＃Ｈ１に接続されていない又はＨＤＫＣ＃Ｈ１に接続されていたとしてもＬＵ＃１のような仮想ＬＵを有しない。ケース（Ｉ）では、例えば、ＨＤＫＣ＃Ｈ０が、ＬＵ＃０〜＃３のうちＬＵ＃１及び＃２を有しない。
（Ｊ）図６において、次の（ｊ１）及び（ｊ２）に該当するケース。（ｊ１）ＨＤＫＣ＃Ｈ０が、ＨＤＫＣ＃ＨＡに接続されていない又はＨＤＫＣ＃ＨＡに接続されていたとしてもＬＵ＃２のような仮想ＬＵを有しない。（ｊ２）ＨＤＫＣ＃Ｈ０が、ＬＤＫＣ＃Ｌ０に接続されていない又はＬＤＫＣ＃Ｌ０に接続されていたとしてもＬＵ＃３のような仮想ＬＵを有しない。ケース（Ｊ）では、例えば、ＨＤＫＣ＃Ｈ０が、ＬＵ＃０〜＃３のうちＬＵ＃２及び＃３を有しない。
（Ｋ）図６において、次の（ｋ１）乃至（ｋ３）に該当するケース。（ｋ１）ＨＤＫＣ＃Ｈ０が、ＨＤＫＣ＃ＨＡに接続されていない又はＨＤＫＣ＃ＨＡに接続されていたとしてもＬＵ＃２のような仮想ＬＵを有しない。（ｋ２）ＨＤＫＣ＃Ｈ０が、ＨＤＫＣ＃Ｈ１に接続されていない又はＨＤＫＣ＃Ｈ１に接続されていたとしてもＬＵ１のような仮想ＬＵを有しない。（ｋ３）ＨＤＫＣ＃Ｈ０が、ＬＤＫＣ＃Ｌ０に接続されていない又はＬＤＫＣ＃Ｌ０に接続されていたとしてもＬＵ＃３のような仮想ＬＵを有しない。ケース（Ｋ）では、例えば、ＨＤＫＣ＃Ｈ０が、ＬＵ＃０〜＃３のうちＬＵ＃１、＃２、及び＃３を有しない。
（Ｌ）図６において、次の（ｌ１）及び（ｌ２）に該当するケース。（ｌ１）ＨＤＫＣ＃Ｈ０が、ＬＵ＃０のようなＬＵを有しない。（ｌ２）ＨＤＫＣ＃Ｈ０が、ＨＤＫＣ＃ＨＡに接続されていない又はＨＤＫＣ＃ＨＡに接続されていたとしてもＬＵ＃２のような仮想ＬＵを有しない。ケース（Ｌ）では、例えば、ＨＤＫＣ＃Ｈ０が、ＬＵ＃０〜＃３のうちＬＵ＃０及び＃２を有しない。
（Ｍ）図６において、次の（ｍ１）及び（ｍ２）に該当するケース。（ｍ１）ＨＤＫＣ＃Ｈ０が、ＬＵ＃０のようなＬＵを有しない。（ｍ２）ＨＤＫＣ＃Ｈ０が、ＤＫＣ＃Ｈ１、＃ＨＡ及び＃Ｌ０のいずれか２つに接続されていない又は、ＤＫＣ＃Ｈ１、＃ＨＡ及び＃Ｌ０のいずれか２つに接続されていたとしてもＬＵ＃１〜＃３のうちのいずれか２つのような２つの仮想ＬＵを有しない。ケース（Ｍ）では、例えば、ＨＤＫＣ＃Ｈ０が、ＬＵ＃０〜＃３のうちＬＵ＃０を有さず、且つ、ＬＵ＃１〜＃３のうちいずれか２つを有しない。
【０１３８】
したがって、本実施例に拠れば、以下の記憶システム、第一の記憶コントローラ及び／又は第一の記憶制御ユニットを新たに提供できる。この記憶システムは、第一の記憶コントローラ(例えば、プロセッサ２２２、コントローラ２１１又はＨＤＫＣ２０１)又は第一の記憶制御ユニット（例えば、ＨＤＫＣユニット１４１）と、第二の記憶コントローラ(例えば、プロセッサ２２２、コントローラ２１１又はＨＤＫＣ２０１)又は第二の記憶制御ユニット（例えば、ＨＤＫＣユニット１４１）と、を有する。この第一の記憶制御ユニットは、上位装置から第一のロジカルユニット（ＬＵ）宛に受信されるデータを制御する上記第一の記憶コントローラを有する。また、上記第二の記憶制御ユニットは、上記第一の記憶コントローラ又は第一の記憶制御ユニットから第二のＬＵ宛に受信されるデータを制御する上記第二の記憶コントローラと、この第二の記憶コントローラの制御に応じてデータを格納する複数の記憶媒体（例えば、ＲＧ２３１）とを有する。上記第一の記憶コントローラは、上記第二の記憶コントローラの性能に応じて前記第一のＬＵのティアのレベルを管理し、上記第一のＬＵのティアのレベルに適合したタイプのアプリケーションによるデータの参照及び／又は更新などの処理に応じて上記上位装置から上記第一のＬＵ宛に受信されるデータを、上記第二のＬＵに宛てて送信するように制御する。
【０１３９】
図６において、ＨＤＫＣ＃Ｈ０がサーバへ提供するＬＵ＃０〜＃３の少なくとも１つは、通常のＬＵでも良いし、ＤＰ−ＬＵでも良い。
【０１４０】
「通常のＬＵ」は、ＬＵ作成時にＬＵの容量と等しい容量の記憶領域がＲＧから割り当てられたＬＵであって良い。通常のＬＵは、外部ＬＵがマッピングされた仮想ＬＵでも良い。
【０１４１】
「ＤＰ−ＬＵ」は、複数の仮想ページに分割された仮想的なＬＵである。未割当ての仮想ページ（実ページが割り当てられていない仮想ページ）に属するアドレスを指定したライトコマンドをＤＫＣが受信した場合に、ＤＫＣは、その未割当ての仮想ページにプールから未割当ての実ページ（仮想ページに割り当てられていない実ページ）を割り当てることができる。プールは、例えば、１以上のＲＧに基づく通常のＬＵ（プールＬＵ）で構成されて良い。プールは、複数存在してよい。各プールＬＵは、２以上の実ページに分割されて良い。仮想ページは、仮想的な記憶領域であり、実ページは、プールを構成する記憶領域である。
【０１４２】
したがって、ＤＰ−ＬＵを構成する全ての仮想ページにそれぞれ実ページが割り当てられた状態を除いて、ＤＰ−ＬＵに割り当てられた実ページのトータル容量は、ＤＰ−ＬＵの容量（仮想的な容量）よりも小さい。ＤＫＣは、複数の実ページをプールという形式で一元管理することができる。１つの実ページは、１以上のＲＧを構成する複数のＰＤＥＶに基づいていて良い。実ページに書き込まれるデータは、その実ページの基になっているＲＧのＲＡＩＤレベルに応じて、そのＲＧを構成する複数のＰＤＥＶに書き込まれて良い。
【０１４３】
なお、１つのプールに、１又は複数のＤＰ−ＬＵが関連付けられ、ＤＰ−ＬＵには、そのＤＰ−ＬＵに関連付けられているプールから実ページが割り当てられて良い。また、プールから割り当てられる実ページは、ｎ回前（ｎは自然数）に割り当てられた実ページの基になっているＲＧとは異なるＲＧが基になっている実ページで良い（例えば、ｎ＝１で良い）。具体的には、例えば、ラウンドロビン形式で、割り当てられる実ページの基になっているＲＧが切り替わって良い。これにより、特定のＲＧにＩ／Ｏが集中してしまうことを回避でき、以って、ＤＫＣのＩ／Ｏ性能の向上が期待できる。１つのプールに関連付けられるＤＰ−ＬＵ又はＤＰ−ＬＵのグループ（ＤＰ−ＬＵグループ）がＤＰ−ＬＵ又はＤＰ−ＬＵグループ毎に異なるティアに属している場合（例えば、第一のＤＰ−ＬＵ又は第一のＤＰ−ＬＵグループは第一のティアに属し、第二のＤＰ−ＬＵ又は第二のＤＰ−ＬＵグループは第二のティアに属している場合）、ティア別に、ｎ回前に割り当てられた実ページの基になっているＲＧと異なるＲＧから実ページが割り当てられて良い（例えば、第一のＤＰ−ＬＵ又は第一のＤＰ−ＬＵグループは第一のティアを構成する複数のＲＧの範囲内において、ラウンドロビン形式で、割り当てられる実ページの基になっているＲＧが切り替わり、第二のＤＰ−ＬＵ又は第二のＤＰ−ＬＵグループは第二のティアを構成する複数のＲＧの範囲内において、ラウンドロビン形式で、割り当てられる実ページの基になっているＲＧが切り替わる）。また、ラウンドロビン形式の適用に際しては、割り当てられる実ページの基になっているＲＧが１つのＲＧ単位に切り替わることに限られず、ＲＧの一部を単位に又は複数のＲＧ単位（ＲＧグループ単位）に切り替わることも良い。複数のＲＧ単位に切り替わる場合、ＨＤＫＣユニット１４１、ＨＤＫＣやＬＤＫＣ１５１のプロセッサ２２２は、ある複数のＲＧ単位（ＲＧグループ単位）から１又は複数の実ページを割り当てた場合には、次に他の複数のＲＧ単位（ＲＧグループ単位）から１又は複数の実ページを割り当てることにより、特定の複数のＲＧ単位（ＲＧグループ単位）にＩ／Ｏが集中してしまうことを回避でき、以って、ＤＫＣのＩ／Ｏ性能の向上が期待できる。
【０１４４】
また、１又は複数のＤＰ−ＬＵの各仮想ページは、各仮想ページのアクセス特性に応じて、このアクセス特性に適する記憶媒体に対応付けられた実ページにマッピングさせることもできる。又は、各仮想ページのアクセス特性に応じて、このアクセス特性に適していない記憶媒体に対応付けられた実ページから、このアクセス特性に適する記憶媒体に対応付けられた実ページにマッピングを変更することもできる。ここでいうアクセス特性とは、例えば、各仮想ページへのアクセスの種類（ランダムアクセスやシーケンスアクセスの別、又はアクセス送信元のサーバ１０１やアプリケーション１１１の上述のような種類）、各仮想ページへのＩ／Ｏ頻度又はライト頻度、又は各仮想ページに書き込まれたデータがキャッシュメモリ２２４から仮想ページにマッピングされた実ページに対応する記憶媒体へ書き込まれる頻度、又は各仮想ページに書き込まれたり読み出されたりするデータがキャッシュメモリ２２４と仮想ページにマッピングされた実ページに対応する記憶媒体との間で書き込まれたり読み出されたりする頻度である。この場合、本実施例でいうところの複数のティア（例えば、ティアレベル又はティアレベル範囲）は、１又は複数のＤＰ−ＬＵの各仮想ページ毎に管理されることになり、上記のようにＬＵのティアという技術ではなく、１又は複数のＤＰ−ＬＵの各仮想ページ毎のティアという技術と捉えることになる。ただし、各仮想ページのアクセス特性に応じてこのアクセス特性に適する記憶媒体に対応付けられた実ページにマッピングさせる場合には、各仮想ページ毎のティアという技術になるが、各仮想ページのアクセス特性に応じて仮想ページにマッピングされる実ページが変更する場合には、予めＬＵとティアとの関係が設定されるため、ＤＰ−ＬＵの作成時等にはＬＵのティアという技術が適用され、その後、アクセス特性に応じた仮想ページへマッピングされる実ページの変更に従って各仮想ページ毎のティアという技術が適用されることになる。
【０１４５】
なお、本実施例では、サーバからのライトコマンドに応じて、このライトコマンドで指定されたアドレスが属する仮想ページに実ページが割り当てられるが、本発明は、ＤＰ−ＬＵの作成時等にＤＰ−ＬＵの全ての領域に実ページが割り当てられていない例に限られないで良い。例えば、下記の例も、本発明に適用されて良い。下記のいずれの例でも、実際に使用される容量を削減可能である。
【０１４６】
（第１の例）
【０１４７】
ＤＰ−ＬＵを構成する複数の仮想ページのうちの少なくとも１つ仮想ページ（又は、仮想ページに含まれる一部の領域）に、予め（そのＤＰ−ＬＵについてサーバからライトコマンドを受信する前に）、記憶領域（例えば物理ページ）が割り当てられていて良い。つまり、プレアロケーションが行われていて良い。ライトコマンドに従うデータを格納するために、既に割当済みの記憶領域では不十分であり更なる記憶領域が必要な場合、ＤＫＣ（内部コントローラ）は、記憶領域をプールからＤＰ−ＬＵに追加的に割り当てて良い。
【０１４８】
（第２の例）
【０１４９】
ＤＰ−ＬＵを構成する複数の仮想ページのうちの少なくとも１つの仮想ページに、予め（そのＤＰ−ＬＵについてサーバからライトコマンドを受信する前に）、ゼロデータ（例えば、ビット値「０」で構成されたデータ）が格納されている実ページ又は制御用の領域が仮に割り当てられていて良い。つまり、仮アロケーションが行われていて良い。ゼロ領域（ゼロデータが格納された実ページ又は制御用の領域）は、例えば、ＳＳＤなどの記憶デバイス上の領域で良い。ＤＫＣ（内部コントローラ）は、ライトコマンドを受信した場合、ライト先の仮想ページへ割り当てられる記憶領域を、ゼロ領域から、データが格納されるべき実ページへ変更して良い。つまり、本アロケーションが行われて良い。ＤＫＣ（内部コントローラ）は、本アロケーションが済んでいない仮想ページに属するアドレスを指定したリードコマンドをサーバから受信した場合、その仮想ページに割り当てられているゼロ領域内のゼロデータをサーバに応答して良い。
【０１５０】
＜ティア管理テーブルの変形例＞。
【０１５１】
ティアレベルに影響する性能ファクターとして、接続形態及びＰＤＥＶ種別の少なくとも１つに代えて又は加えて、１以上の別の性能ファクターを採用することができる。以下、それら１以上の別の性能ファクターを説明する。
【０１５２】
図１０は、拡張されたティア管理テーブル３２１（例えば＃Ｈ０）を示す。図１０に示すテーブル３２１は、図９Ａに示したテーブル３２１の一変形例である。本実施例において、ＨＤＫＣが参照するテーブル３２１は、図９Ａに示したテーブル３２１であっても良いし、図１０に示すテーブル３２１であっても良いし、図９Ａに示すテーブル３２１の別の変形例に従うテーブルであっても良い。
【０１５３】
図１０によれば、拡張されたティア管理テーブル＃Ｈ０は、ＨＤＫＣ＃Ｈ０が有するＬＵ毎に、例えば、情報１００１〜１０１０を有する。情報１００１、１００２、１００６は、図９Ａに示した情報９０１、９０２及び９０４と同じである。情報１００３〜１００５、及び１００７〜１０１０は、以下の通りである。図１０に例示する性能ファクターとそれのポイントとの対応関係は、図１１に例示されている。
（＊）ＬＵが第３の接続形態に従う仮想ＬＵであるか否かに基づくポイントである第３の接続形態１００３、
（＊）ＬＵが第２の接続形態に従う仮想ＬＵであるか否かに基づくポイントである第２の接続形態１００４、
（＊）ＨＤＫＣ＃Ｈ０がプレキャッシュ機能を利用しているか否かに基づくポイントであるプレキャッシュ１００５、
（＊）ＬＵに対するＩ／Ｏのためにデータが経由しなければならないＨＤＫＣユニットの数（段数）に基づくポイントである、カスケードの違い１００７、
（＊）トータル距離（ＬＵに対するＩ／Ｏのためにデータが経由する１以上の第２及び／又は第３の接続媒体の長さの合計）、コマンド送信時間（ＨＤＫＣ＃Ｈ０が他のＤＫＣに対してコマンドを発行してから他のＤＫＣがコマンドを受信するまでにかかる時間）、コマンド応答時間（ＨＤＫＣ＃Ｈ０が他のＤＫＣに対してコマンドを発行してからその応答を受領するまでにかかる時間）、及び／又は、コマンド処理時間（ＨＤＫＣ＃Ｈ０が他のＤＫＣに対してコマンドを発行してから他のＤＫＣがそのコマンドの処理を実行して完了応答を受領するまでにかかる時間）、に基づくポイントである、距離（コマンド応答時間）１００８、
（＊）内部コントローラの性能及び／又は機能に基づくポイントであるコントローラ性能１００９、
（＊）情報１００３〜１００９に基づいて算出された値（例えば、情報１００３〜１００９の合計）であるティアレベル１０１０。
【０１５４】
情報１００３及び１００４は、図９Ａに示した接続形態９０３の拡張である。ＨＤＫＣ＃Ｈ０が受けたＩ／Ｏコマンドから特定されるＬＵが仮想ＬＵの場合、その仮想ＬＵにマッピングされている外部ＬＵ（その外部ＬＵも仮想ＬＵの場合、その外部ＬＵにマッピングされているＬＵ）に対するＩ／Ｏのために、Ｉ／Ｏ対象のデータが、１以上の接続媒体（１以上の第１の接続媒体、１以上の第２の接続媒体、１以上の第３の接続媒体、或いは、それらのうちの２以上の異なる種類の接続媒体）を経由することがある。データが経由する接続媒体の種類（及び／又は数）によって、Ｉ／Ｏ性能が異なる。そのため、情報１００３及び１００４が設けられている。
【０１５５】
データがいずれの接続媒体も経由しない（自ＤＫＣ）又は第１の接続媒体を経由する場合の第３の接続形態１００３（ポイント）の方が、データが第３の接続媒体を経由する場合の第３の接続形態１００３（ポイント）よりも小さい。データが第１及び第３の接続媒体の両方を経由する場合、第３の接続形態１００３（ポイント）は、大きくて良い。
【０１５６】
データが第２の接続媒体を経由しない場合の第２の接続形態１００４（ポイント）の方が、データが第２の接続媒体を経由する場合の第２の接続形態１００４（ポイント）よりも、小さい。また、データが第２の接続媒体を経由する場合の第２の接続形態１００４（ポイント）は、データが第３の接続媒体を経由する場合の第３の接続形態１００３（ポイント）よりも大きくて良い。
【０１５７】
「プレキャッシュ機能」とは、リードコマンドの場合、第３の接続形態に従う仮想ＬＵ（ＨＤＫＣ＃Ｈ０内のＬＵ）を指定したサーバからのリードコマンドに対して、その仮想ＬＵにマッピングされている外部ＬＵを有するＨＤＫＣからリード対象のデータを受けることなく、ＨＤＫＣ＃Ｈ０が有するＣＭ＃Ｈ０内のデータをサーバに返す機能である。また、ライトコマンドの場合、第３の接続形態に従う仮想ＬＵ（ＨＤＫＣ＃Ｈ０内のＬＵ）を指定したサーバからのライトコマンドに対して、その仮想ＬＵにマッピングされている外部ＬＵを有するＨＤＫＣに対してライト対象のデータを書き込むことなく、ＨＤＫＣ＃Ｈ０が有するＣＭ＃Ｈ０内にデータを書き込むことに応じてサーバにライト処理完了の応答を返す機能である。プレキャッシュ機能が利用されれば、ライト性能及び／又はリード性能が高い。このため、プレキャッシュ機能が有る場合のプレキャッシュ１００５（ポイント）の方が、プレキャッシュ機能が無い場合のプレキャッシュ１００５（ポイント）よりも、小さい。
【０１５８】
ＬＵのＩ／Ｏ性能（例えばリード性能）は、Ｉ／Ｏのためにデータが経由するＨＤＫＣユニットの数（段数）が多いほど、低下すると考えられる。このため、データが経由するＨＤＫＣユニットの数（段数）が多いほど、カスケードの違い１００７（ポイント）が、大きくて良い。
【０１５９】
ＬＵのＩ／Ｏ性能（例えばリード性能）は、トータル距離が長いほど、或いは、コマンド応答時間が長いほど、低いと考えられる。このため、トータル距離が長いほど（及び／又は、コマンド応答時間が長いほど）、距離（コマンド応答時間）１００９（ポイント）は大きくて良い。
【０１６０】
ＬＵの１以上の性能ファクターを基にそのＬＵのティアレベルを決定するためには、図９Ｂ又は図１１に示したような情報（すなわち、性能ファクターの値に対応したポイントを性能ファクターの種別毎に表す情報）を管理する必要がある。しかし、記憶システム１１０に存在する全ＤＫＣに関する情報を各ＨＤＫＣが管理することとした場合、各ＨＤＫＣが多くの情報を管理することとなり、且つ、情報の更新にもオーバヘッドが大きくかかると考えられる。
【０１６１】
このため、全ＨＤＫＣが共有する方が好ましい情報（共有情報）と、ＨＤＫＣが個々に管理する方が好ましい情報（個別情報）に分けて良い。共有情報は、前述したように、共有情報管理装置３０１（例えば、特定のＨＤＫＣ、サーバ、或いは、ＨＤＫＣの管理システム（１以上の管理計算機で構成されたシステム））が記憶して良い。ＨＤＫＣは、共有情報が必要な場合にのみ、共有情報管理装置３０１から必要な共有情報を取得して良い。
【０１６２】
例えば、図６において、ＨＤＫＣ＃Ｈ０とＨＤＫＣ＃ＨＡ間の距離が、ＨＤＫＣ＃Ｈ０とＬＤＫＣ＃Ｌ０間の距離に比べて長い場合、ＬＤＫＣ＃Ｌ０内の外部ＬＵにマッピングされた仮想ＬＵのＩ／Ｏ性能は、ＨＤＫＣ＃ＨＡ内の外部ＬＵにマッピングされた仮想ＬＵのＩ／Ｏ性能と同じかそれ以上となるケースもあり得る。拡張されたティア管理テーブル３２１によれば、そのようなケースでも、適切なティアレベルを算出することができる。
【０１６３】
また、例えば、図６において、ＨＤＫＣ＃Ｈ０とＨＤＫＣ＃ＨＡ間の距離が、ＨＤＫＣ＃Ｈ０とＨＤＫＣ＃Ｈ１間の距離に比べてあまり長くなく、且つ、ＨＤＫＣ＃ＨＡがＨＤＫＣ＃Ｈ１に比べて非常に高性能及び／又は高機能である場合、ＨＤＫＣ＃ＨＡ内の外部ＬＵにマッピングされた仮想ＬＵのＩ／Ｏ性能は、ＨＤＫＣ＃Ｈ１内の外部ＬＵにマッピングされた仮想ＬＵのＩ／Ｏ性能と同じかそれ以上となるケースもあり得る。拡張されたティア管理テーブル３２１によれば、そのようなケースでも、適切なティアレベルを算出することができる。
【０１６４】
また、ティア管理テーブルの変形例は、図１０に示した例に限られない。例えば、ティア管理テーブルは、接続形態（ＤＫＣの性能を含んで良い）９０３及びＰＤＥＶ種別９０４という基本項目の他に、プレキャッシュ１００５、カスケードの違い１００７、距離（コマンド応答時間）１００８、コントローラ性能１００９の全てを含んで良い。
【０１６５】
また、プレキャッシュ１００５、カスケードの違い１００７、及び距離（コマンド応答時間）１００８のうちの１又は２つだけを基に、ティアレベルが算出されても良い。
【０１６６】
また、プレキャッシュ１００５、カスケードの違い１００７及び距離（コマンド応答時間）１００８のうちの少なくとも１つ（例えばいずれか１つ）と、ＰＤＥＶ種別９０４との組み合わせのみで、ティアレベルが算出されても良い。
【０１６７】
また、プレキャッシュ１００５、カスケードの違い１００７及び距離（コマンド応答時間）１００８のうちの少なくとも１つ（例えばいずれか１つ）と、接続形態９０３、コントローラ性能１００９及びＰＤＥＶ種別９０４のうちの少なくとも１つ（例えばいずれか１つ）との組み合わせだけで、ティアレベルが算出されても良い。
【０１６８】
さらに、どのようにティアレベルが算出される場合でも、本発明は、前述したケース（Ａ）乃至（Ｍ）の少なくとも１つに適用されて良い。例えば、ケース（Ｍ）において、距離（コマンド応答時間）１００８のみを基にティアレベルが算出されても、距離（コマンド応答時間）１００８に対応した適切なティアレベルのＬＵ＃１、＃２、又は＃３の少なくとも１つのような仮想ＬＵを、データのリード及び／又はライトのターゲットとしてサーバに提供することができる。
【０１６９】
また、例えば、或るＨＤＫＣと他の複数のＨＤＫＣとを接続する場合に、当該或るＨＤＫＣ内のプロセッサ（又は、例えば、当該或るＨＤＫＣに接続された管理システム内のプロセッサ）は、当該他の複数のＨＤＫＣ間の性能の違いや、当該或るＨＤＫＣから他のＨＤＫＣまでの距離に応じて、他のＨＤＫＣ毎に、ＬＵのティアレベル等の属性を適切に管理することができて良い。
【０１７０】
また、例えば、或るＨＤＫＣと複数のＬＤＫＣとを接続する場合に、当該或るＨＤＫＣ内のプロセッサ（又は、例えば、当該或るＨＤＫＣに接続された管理システム内のプロセッサ）は、当該複数のＬＤＫＣ間の性能の違いや、当該或るＨＤＫＣからＬＤＫＣまでの距離に応じて、ＬＤＫＣ毎に、ＬＵのティアレベル等の属性を適切に管理することができて良い。
【０１７１】
また、例えば、性能ファクターとして、下記の少なくとも１つが採用されて良い。
（＊）ＬＵがＤＰ−ＬＵであるか否か。
（＊）そのＤＰ−ＬＵに関連付けられているプールに関する属性（例えば、プールを構成する内部ボリュームが属するティア（例えばティアレベル又はティアレベル範囲）、内部ボリュームについてのＰＤＥＶ種別）。
【０１７２】
＜ＬＵ／ＰＤＥＶ変換テーブル３２３＞。
【０１７３】
図１２は、ＬＵ／ＰＤＥＶ変換テーブル３２３（例えば＃Ｈ０）の構成を示す。
【０１７４】
ＬＵ／ＰＤＥＶ変換テーブル＃Ｈ０は、ＨＤＫＣ＃Ｈ０が有するＬＵ（典型的には通常のＬＵ）毎に、例えば、下記の情報、
（＊）ＬＵの識別子であるＬＵ  ＩＤ１２０１、
（＊）ＬＵが基になっているＲＧの識別子であるＲＧ  ＩＤ１２０２、
（＊）ＬＵが基になっているＲＧのＲＡＩＤレベル（及びコンビネーション）を表すＲＡＩＤレベル（コンビネーション）１２０３、
（＊）ＬＵの記憶容量１２０４、
（＊）ＬＵが基になっているＲＧの記憶領域におけるＬＵスタートアドレス（そのＬＵのスタートのアドレス）を表すスタートアドレス１２０５、
（＊）ＬＵが基になっているＲＧを構成するＰＤＥＶの種別を表すＰＤＥＶ種別１２０６、
（＊）ＬＵが基になっているＲＧを構成する１以上のＰＤＥＶの識別子のリストであるＰＤＥＶ  ＩＤ１２０７、
を有する。
【０１７５】
＜担当ＣＰＵテーブル３２４＞。
【０１７６】
図３１は、担当ＣＰＵテーブル３２４（例えば＃Ｈ０）の構成を示す。
【０１７７】
担当ＣＰＵテーブルＨ０は、ＨＤＫＣ＃Ｈ０（又は、ＨＤＫＣ＃Ｈ０を含んだＨＤＫＣユニット）が有するＬＵ毎に、例えば、下記の情報、
（＊）ＬＵに対するＩ／Ｏコマンドの処理を担当するＣＰＵ（担当ＣＰＵ）の識別子を表す担当ＣＰＵ  ＩＤ３１０１、
（＊）ＬＵの担当ＣＰＵの使用率（負荷の高さ）を表すＣＰＵ使用率３１０２、
（＊）ＬＵの識別子であるＬＵ  ＩＤ３１０３、
を有する。ＣＰＵ使用率３１０２は、例えば、定期的に又は不定期的に、各ＣＰＵ＃Ｈ０又は特定のＣＰＵ＃Ｈ０によって更新されて良い。
【０１７８】
＜仮想ページ管理テーブル３２５＞。
【０１７９】
図１３は、仮想ページ管理テーブル３２５（例えば＃Ｈ０）の構成を示す。
【０１８０】
仮想ページ管理テーブル＃Ｈ０は、ＨＤＫＣ＃Ｈ０が有する仮想ページ毎に、例えば、以下の情報、
（＊）仮想ページを有するＤＰ−ＬＵの識別子であるＤＰ−ＬＵ  ＩＤ１３０１、
（＊）仮想ページのアドレスを表す仮想ページアドレス１３０２、
（＊）仮想ページに物理ページが割り当てられているか否かを表す割当状態１３０３、
（＊）仮想ページに割り当てられている実ページの基になっているＲＧ（プールＲＧ）の識別子であるプールＲＧ  ＩＤ１３０４、
（＊）仮想ページに割り当てられている実ページのアドレスを表す実ページアドレス１３０５、
を有する。
【０１８１】
＜実ページ管理テーブル３２６＞。
【０１８２】
図１４Ａは、実ページ管理テーブル３２６（例えば＃Ｈ０）の構成を示す。
【０１８３】
実ページ管理テーブル＃Ｈ０は、ＨＤＫＣ＃Ｈ０が有する実ページ毎に、例えば、以下の情報、
（＊）実ページに関する情報を有する行へのアドレスを表すテーブルポインタ１４０１、
（＊）実ページの基になっているプールＲＧの識別子であるプールＲＧ  ＩＤ１４０２、
（＊）実ページのアドレスを表す実ページアドレス１４０３、
（＊）実ページが仮想ページに割り当てられているか否かを表す割当状態１４０４、
（＊）実ページの割当先の仮想ページを有するＤＰ−ＬＵの識別子であるＤＰ−ＬＵ１４０５、
（＊）別の未割当て実ページに関する行のテーブルポインタ１４０１を表す未割当キューポインタ１４０６、
を有する。
【０１８４】
未割当ての実ページは、キュー（以下、未割当キュー）で管理されている。未割当キューポインタ１４０６は、そのポインタ１４０６に対応する実ページの次の未割当て実ページに対応した行のテーブルポインタ１４０１を表す。ＣＰＵ＃Ｈ０（制御プログラム＃Ｈ０）は、仮想ページに割り当てる実ページとして、未割当キューの先頭の実ページ（図１４Ｂに示すキュー先頭管理テーブル３２７（＃Ｈ０）が有するポインタと一致するテーブルポインタ１４０１に対応した実ページ）を見つける。
【０１８５】
なお、未割当キューにおいて、複数の未割当実ページは、内部ボリューム（ＲＧ）がラウンドロビンとなるように並んで良い（図１４Ａの複数の未割当キューポインタ１４０６を参照）。全ての内部ボリュームに対して均等にＩ／Ｏが行われ、それにより、特定の内部ボリュームにのみＩ／Ｏが集中することを回避することができる。
【０１８６】
＜ダイナミックプロビジョニング（シンプロビジョニング）＞。
【０１８７】
図１５は、ダイナミックプロビジョニング（シンプロビジョニング）が適用されたＨＤＫＣ（＃Ｈ０）を示す。
【０１８８】
ＨＤＫＣ＃Ｈ０は、図２にも示したように、ＣＰＵ＃Ｈ００とＣＰＵ＃Ｈ０１を有する。ＣＰＵ＃Ｈ００に、ＬＭ＃Ｈ００が接続されており、ＣＰＵ＃Ｈ０１に、ＬＭ＃Ｈ０１が接続されている。また、ＣＰＵ＃Ｈ００及び＃Ｈ０１のいずれも、ＣＭ＃Ｈ０にアクセスできる。ＣＭ＃Ｈ０は、図２に示すＣＭ＃Ｈ００及び／又は＃Ｈ０１である。
【０１８９】
プール１５００（＃Ｈ００）は、複数の内部ボリュームで構成されている。ここで言う「内部ボリューム」とは、物理的な記憶容量が存在しているボリュームのことであり、例えば、通常のＬＵ、第２の接続形態に従う仮想ＬＵ、或いは、ＲＧの一部又は全部で良い。また、内部ボリュームは、サーバからアクセスされない（サーバに認識されない）。この説明では、内部ボリュームがＲＧであるとする。
【０１９０】
ＤＰ−ＬＵは、通常のＬＵと同様、サーバからアクセスされるＬＵである。ＤＰ−ＬＵについて、担当のＣＰＵがいる。図１５に示す例によれば、ＤＰ−ＬＵ＃６０の担当は、
ＣＰＵ＃Ｈ００であり、ＤＰ−ＬＵ＃６１の担当は、ＣＰＵ＃Ｈ０１である。
【０１９１】
ＬＭ＃Ｈ００は、仮想ページ管理テーブル３２５（＃Ｈ００）を記憶し、同様に、ＬＭ＃Ｈ０１は、仮想ページ管理テーブル３２５（＃Ｈ０１）を記憶する。仮想ページ管理テーブル＃Ｈ００（＃Ｈ０１）は、頻繁にアクセスされるため、担当ＣＰＵ＃Ｈ００（＃Ｈ０１）のみが参照及び更新し、テーブルへのアクセスについての排他制御が不要であることが好ましい。仮想ページ管理テーブル＃Ｈ００は、ＣＰＵ＃Ｈ００が担当するＤＰ−ＬＵに関する情報のみを有し、仮想ページ管理テーブル＃Ｈ０１は、ＣＰＵ＃Ｈ０１が担当するＤＰ−ＬＵに関する情報のみを有する。
【０１９２】
ＣＭ＃Ｈ０は、実ページ管理テーブル３２６（＃Ｈ０）及びキュー先頭管理テーブル３２７（＃Ｈ０）を記憶する。この例では、ＣＰＵ＃Ｈ００が担当するＤＰ−ＬＵ＃６０とＣＰＵ＃Ｈ０１が担当するＤＰ−ＬＵ＃６１の両方にプール＃Ｈ００が関連付けられているので、実ページ管理テーブル＃Ｈ０は、全てのＣＰＵ（この例では、ＣＰＵ＃Ｈ００及び＃Ｈ０１）から参照及び更新可能である必要がある。そのため、ＬＭ＃Ｈ００及びＨ０１ではなく、ＣＭ＃Ｈ０が、実ページ管理テーブル＃Ｈ０を記憶する。なお実ページ管理テーブル＃Ｈ０については、排他制御が行われる。
【０１９３】
＜実施例１で行われる処理＞。
【０１９４】
以下、実施例１で行われる種々の処理を説明する。
【０１９５】
＜＜ＤＫＣ拡張処理＞＞。
【０１９６】
図６に示したように、ＨＤＫＣ＃Ｈ０に、第１の接続媒体（内部バス）２２７を介してＨＤＫＣ＃Ｈ０１を接続し、第３の接続媒体（外部バス）６０１を介してＨＤＫＣ＃ＨＡを接続し、且つ、第２の接続媒体（外部バス）５０１を介してＬＤＫＣ＃Ｌ０を接続することができる。ＨＤＫＣ＃Ｈ０に新たにＤＫＣが接続された場合、ＨＤＫＣ＃Ｈ０が有する管理情報が更新される。管理情報は、管理者によって更新されても良いが、本実施例では、図１６に示すように、ＨＤＫＣ＃Ｈ０によって更新される。
【０１９７】
図１６は、ＨＤＫＣ＃Ｈ０が行うＤＫＣ拡張処理の流れを示す。
【０１９８】
ＤＫＣ拡張処理は、ＨＤＫＣ＃Ｈ０に第１乃至第３の接続形態のいずれかに従って新たにＤＫＣが接続されたことを契機に開始されて良い。また、ＤＫＣ拡張処理は、内部コントローラ＃Ｈ０（具体的には、例えば、ＨＤＫＣ＃Ｈ０内の複数のＣＰＵのうちの１以上のＣＰＵ）によって行われて良い。図１６の説明において、新たに接続されたＤＫＣを、「増設ＤＫＣ」と言う。
【０１９９】
Ｓ１６０１で、内部コントローラ＃Ｈ０が、ＨＤＫＣ＃Ｈ０と増設ＤＫＣとを接続する媒体が、外部バスであるか否かを判断する。その接続媒体の種類は、管理者から入力される情報を基に特定されても良いし、その接続媒体が接続されたポートからの電気信号を基に検出されても良い。なお、Ｓ１６０１で、内部コントローラ＃Ｈ０は、増設ＤＫＣの性能及び／又は機能を表す情報を取得して良い。その情報は、管理者から入力されても良いし、増設ＤＫＣから受信しても良い。
【０２００】
Ｓ１６０１の判断の結果が否定的の場合（つまり接続媒体が内部バスの場合）（Ｓ１６０１：Ｎｏ）、ステップ１６０２で、内部コントローラ＃Ｈ０は、接続管理テーブル＃Ｈ０を更新する。具体的には、例えば、内部コントローラ＃Ｈ０は、接続管理テーブル＃Ｈ０に、増設ＤＫＣのＩＤ８０１と、接続媒体８０２「内部バス」と、ＤＫＣ種別８０３「ＨＤＫＣ」と、接続形態８０４「第１接続」とを登録する。
【０２０１】
次に、Ｓ１６０３で、内部コントローラ＃Ｈ０は、増設ＤＫＣ（ＨＤＫＣ）内のＬＵを認識する。例えば、内部コントローラ＃Ｈ０は、増設ＤＫＣ内のメモリ（例えばＬＭ又はＣＭ）が記憶するＬＵ管理テーブル（図示せず）を基に認識しても良い。また、増設ＤＫＣがＬＵを有していなければ、増設ＤＫＣに新たにＬＵが作成され、ＬＵが作成された後に、増設ＤＫＣが有するＬＵが認識されて良い。
【０２０２】
次に、Ｓ１６０４で、内部コントローラ＃Ｈ０は、担当ＣＰＵテーブル＃Ｈ０を更新する。具体的には、例えば、内部コントローラ＃Ｈ０は、Ｓ１６０３で認識されたＬＵのＩＤを、そのＬＵを担当するＣＰＵのＩＤに関連付ける。認識されたＬＵの担当ＣＰＵは、ＨＤＫＣ＃Ｈ０内のＣＰＵであっても良いし、増設ＤＫＣ内のＣＰＵであっても良い。また、認識されたＬＵを担当するＣＰＵは、管理者によって指定されても良いし、ＣＰＵ＃Ｈ０が任意に決定したＣＰＵでも良い。
【０２０３】
さて、Ｓ１６０１の判断の結果が肯定的の場合（つまり接続媒体が外部バスの場合）（Ｓ１６０１：Ｙｅｓ）、ステップ１６０５で、内部コントローラ＃Ｈ０は、増設ＤＫＣがＨＤＫＣか否かを判断する。その判断は、例えば、増設ＤＫＣの性能及び／又は機能を表す情報を基に行われて良い。その情報は、管理者から入力されても良いし、増設ＤＫＣから受信しても良い。
【０２０４】
Ｓ１６０５の判断の結果が否定的の場合（つまり増設ＤＫＣがＬＤＫＣの場合）（Ｓ１６０５：Ｎｏ）、ステップ１６０６で、内部コントローラ＃Ｈ０は、接続管理テーブル＃Ｈ０を更新する。具体的には、例えば、内部コントローラ＃Ｈ０は、接続管理テーブル＃Ｈ０に、増設ＤＫＣのＩＤ８０１と、接続媒体８０２「外部バス」と、ＤＫＣ種別８０３「ＬＤＫＣ」と、接続形態８０４「第２接続」とを登録する。
【０２０５】
次に、Ｓ１６０７で、内部コントローラ＃Ｈ０は、増設ＤＫＣ（ＬＤＫＣ）内のＬＵを認識する。例えば、内部コントローラ＃Ｈ０は、増設ＤＫＣに１以上の照会コマンド（例えば、レポートＬＵＮコマンド、inquiryコマンド）を送信することで、増設ＤＫＣから、増設ＤＫＣが有するＬＵに関する情報を受信して良い。増設ＤＫＣがＬＵを有していなければ、増設ＤＫＣに新たにＬＵが作成され、ＬＵが作成された後に、増設ＤＫＣが有するＬＵが認識されて良い。
【０２０６】
次に、Ｓ１６０８Ａで、内部コントローラ＃Ｈ０は、認識されたＬＵがマッピングされた仮想ＬＵに関する情報（仮想ＬＵのＩＤ、増設ＤＫＣのＩＤ、及び、認識されたＬＵのＩＤの組合せ）を、ＬＵマッピングテーブル＃Ｈ０に登録することができる。
【０２０７】
次に、Ｓ１６０８Ｂで、内部コントローラ＃Ｈ０は、担当ＣＰＵテーブル＃Ｈ０を更新する。具体的には、例えば、内部コントローラ＃Ｈ０は、Ｓ１６０７で認識されたＬＵのＩＤを、そのＬＵを担当するＣＰＵのＩＤに関連付ける。認識されたＬＵの担当ＣＰＵは、ＨＤＫＣ＃Ｈ０内のＣＰＵであっても良いし、ＨＤＫＣ＃Ｈ０を含んだＨＤＫＣユニット内内の別のＣＰＵであっても良い。また、認識されたＬＵを担当するＣＰＵは、管理者によって指定されても良いし、ＣＰＵ＃Ｈ０が任意に決定したＣＰＵでも良い。
【０２０８】
Ｓ１６０５の判断の結果が肯定的の場合（つまり増設ＤＫＣがＨＤＫＣの場合）（Ｓ１６０５：Ｙｅｓ）、ステップ１６０９で、内部コントローラ＃Ｈ０は、接続管理テーブル＃Ｈ０を更新する。具体的には、例えば、内部コントローラ＃Ｈ０は、接続管理テーブル＃Ｈ０に、増設ＤＫＣのＩＤ８０１と、接続媒体８０２「外部バス」と、ＤＫＣ種別８０３「ＨＤＫＣ」と、接続形態８０４「第３接続」とを登録する。
【０２０９】
次に、Ｓ１６１０で、内部コントローラ＃Ｈ０は、増設ＤＫＣ（ＨＤＫＣ）内のＬＵを認識する。例えば、内部コントローラ＃Ｈ０は、増設ＤＫＣに１以上の照会コマンド（例えば、レポートＬＵＮコマンド、inquiryコマンド）を送信することで、増設ＤＫＣから、増設ＤＫＣが有するＬＵに関する情報を受信して良い。増設ＤＫＣがＬＵを有していなければ、増設ＤＫＣに新たにＬＵが作成され、ＬＵが作成された後に、増設ＤＫＣが有するＬＵが認識されて良い。
【０２１０】
次に、Ｓ１６１１Ａで、内部コントローラ＃Ｈ０は、認識されたＬＵがマッピングされた仮想ＬＵに関する情報（仮想ＬＵのＩＤ、増設ＤＫＣのＩＤ、及び、認識されたＬＵのＩＤの組合せ）を、ＬＵマッピングテーブル＃Ｈ０に登録することができる。
【０２１１】
次に、Ｓ１６１１Ｂで、内部コントローラ＃Ｈ０は、担当ＣＰＵテーブル＃Ｈ０を更新する。具体的には、例えば、内部コントローラ＃Ｈ０は、Ｓ１６１０で認識されたＬＵのＩＤを、そのＬＵを担当するＣＰＵのＩＤに関連付ける。認識されたＬＵの担当ＣＰＵは、ＨＤＫＣ＃Ｈ０内のＣＰＵであっても良いし、ＨＤＫＣ＃Ｈ０を含んだＨＤＫＣユニット内内の別のＣＰＵであっても良い。また、認識されたＬＵを担当するＣＰＵは、管理者によって指定されても良いし、ＣＰＵ＃Ｈ０が任意に決定したＣＰＵでも良い。
【０２１２】
Ｓ１６０４、Ｓ１６０８Ｂ又はＳ１６１１Ｂの後、Ｓ１６１２が行われる。Ｓ１６１２で、内部コントローラ＃Ｈ０は、ティア管理テーブル＃Ｈ０を更新する。具体的には、例えば、内部コントローラ＃Ｈ０は、ティア管理テーブル＃Ｈ０（例えば、図９Ａ又は図１０に示したテーブル３２１）に、増設ＤＫＣのＩＤと、ステップ１６０３、Ｓ１６０７又はＳ１６１０で認識されたＬＵのＩＤとを登録する。また、内部コントローラ＃０は、ティア管理テーブル＃０が有する各種の性能ファクター項目について、認識されたＬＵ毎に、下記、
（＊）各種の性能ファクターを特定する、
（＊）特定した性能ファクターを基に、ポイント決定ルール情報（例えば、図９Ｂ又は図１１に示したテーブル）に従い、ポイントを算出する、
（＊）算出したポイントの合計（ティアレベル）を算出する、
（＊）算出されたポイントと、ティアレベルとを、ティア管理テーブル＃Ｈ０に登録する、
を行う。つまり、認識されたＬＵ毎に、ティアレベルが算出される。
【０２１３】
なお、本実施例においては、図１６に示す処理をＨＤＫＣ＃Ｈ０が実施することを記載したが、本実施例は、この場合に限られるものでない。本実施例におけるいずれのＨＤＫＣユニット１４１及び／又はＨＤＫＣも他のＨＤＫＣユニット１４１、ＨＤＫＣ及び／又はＬＤＫＣ１５１の通常のＬＵ、ＤＰ−ＬＵ及び／又は仮想ＬＵをマッピングしたＤＰ−ＬＵ及び／又は仮想ＬＵを提供することができるので、いずれのＨＤＫＣユニット１４１及び／又はＨＤＫＣにおいても、図１６に示す処理が実施されることが良い。それに伴い、図９及び／又は図１０のTier管理テーブルも各々のＨＤＫＣユニット１４１及び／又はＨＤＫＣによって管理されることになる。
【０２１４】
＜Ｉ／Ｏコマンド処理＞。
【０２１５】
図１７乃至図３０を参照して、Ｉ／Ｏコマンド処理を説明する。
【０２１６】
図１７に示すように、Ｓ１７０１で、ＨＤＫＣ＃Ｈ０の内部コントローラ＃Ｈ０（例えば、Ｆ−Ｉ／Ｆ＃Ｈ０（例えば、Ｆ−Ｉ／Ｆ＃Ｈ００、＃Ｈ０１、＃Ｈ１０又は＃Ｈ１１））が、サーバからＩ／Ｏコマンドを受信する。Ｉ／Ｏコマンドは、Ｉ／Ｏ先のＬＵに関する情報、例えば、ＬＵＮと、Ｉ／Ｏ先情報を有する。Ｉ／Ｏ先情報は、例えば、Ｉ／Ｏ先の領域のアドレス（例えば、ＬＢＡ（Logical  Block  Address））を有する。Ｉ／Ｏコマンドがライトコマンドの場合、Ｉ／Ｏ先情報は、ライト対象のデータ長を表す情報を含んで良い。内部コントローラ＃Ｈ０（例えば、Ｆ−Ｉ／Ｆ＃Ｈ０、及び／又は、ＣＰＵ＃Ｈ０）は、Ｉ／Ｏコマンドから、Ｉ／Ｏ先のＬＵと、Ｉ／Ｏ先の領域とを特定することができる。
【０２１７】
次に、Ｓ１７０２で、内部コントローラ＃Ｈ０（例えば、Ｓ１７０１でＩ／Ｏコマンドを受信したＦ−Ｉ／Ｆ＃Ｈ０））が、ティア管理テーブル＃Ｈ０を参照する。内部コントローラ＃Ｈ０は、Ｉ／Ｏ先ＬＵに対応した接続形態９０３（又は、第３の接続形態１００３及び第２の接続形態１００４）を基に、Ｉ／Ｏ先ＬＵについて、接続形態を特定する。言い換えれば、Ｉ／Ｏ先ＬＵが、いずれの接続形態に従うＬＵであるかが特定される。具体的には、例えば、下記のように特定されて良い。
（＊）接続形態９０３（又は、第３の接続形態１００３及び第２の接続形態１００４）が、自ＤＫＣ又は第１接続に対応したポイントである場合、接続形態が、「自ＤＫＣ」又は「第１の接続形態」であると特定されて良い。具体的には、例えば、接続形態９０３が「０」、又は、第３の接続形態１００３が「０」であり且つ第２の接続形態１００４が「０」である場合、接続形態が、「自ＤＫＣ」又は「第１の接続形態」であると特定されて良い。
（＊）接続形態９０３（又は、第３の接続形態１００３及び第２の接続形態１００４）が、第２接続に対応したポイントである場合、接続形態が、「第２の接続形態」であると特定されて良い。具体的には、例えば、接続形態９０３が「５」、又は、第３の接続形態１００３が「０」であり且つ第２の接続形態１００４が「５」である場合、接続形態が、「第２の接続形態」であると特定されて良い。
（＊）接続形態９０３（又は、第３の接続形態１００３及び第２の接続形態１００４）が、第３接続に対応したポイントである場合、接続形態が、「第３の接続形態」であると特定されて良い。具体的には、例えば、接続形態９０３が「１」である場合、接続形態が、「第３の接続形態」であると特定されて良い。また、例えば、接続形態９０３が「１」、又は、第３の接続形態１００３が「１」であり且つ第２の接続形態１００４が「０」である場合、接続形態が、「第３の接続形態」であると特定されて良い。
【０２１８】
接続媒体が「自ＤＫＣ」又は「第１の接続媒体」の場合（Ｓ１７０３：Ｙｅｓ）、図１９に示す処理が行われる。
【０２１９】
接続媒体が「第２の接続媒体」の場合（Ｓ１７０３：Ｎｏ、Ｓ１７０４：Ｙｅｓ）、図２２に示す処理が行われる。
【０２２０】
接続媒体が「第３の接続媒体」の場合（Ｓ１７０３：Ｎｏ、Ｓ１７０４：Ｎｏ）、図２４に示す処理が行われる。
【０２２１】
＜＜第１の接続形態に従うＬＵに対するＩ／Ｏ＞＞。
【０２２２】
これについて、図１８〜図２１を参照して説明する。
【０２２３】
図１８は、第１の接続形態に従うＬＵに対するＩ／Ｏの処理の流れを示す。図１９は、第１の接続形態に従う構成の概要の一例を示す。図１８の説明では、適宜、図１９を参照する。なお、図１９の一点鎖線は、データの流れの一例を示す。
【０２２４】
前述したように、ＨＤＫＣユニット内の１つのＨＤＫＣは、ＨＤＫＣユニット内の他のいずれのＨＤＫＣ内の資源を利用することができる。
【０２２５】
例えば、図１９に示すように、ＨＤＫＣ＃Ｈ０とＨＤＫＣ＃Ｈ１を接続する媒体は、内部バス２２７である。図１９の例によれば、サーバ＃０とＬＵ＃４０間において、Ｉ／Ｏ対象のデータは、一点鎖線で示すように、ＣＭ＃Ｈ１を経由する。ＬＵ＃４０の担当ＣＰＵは、ＣＰＵ＃Ｈ１である。すなわち、ＨＤＫＣ＃Ｈ０が受けた、ＬＵ＃４０に対するデータが、Ｆ−Ｉ／Ｆ＃Ｈ０からＣＭ＃Ｈ１に転送され、ＣＰＵ＃Ｈ１が、そのデータを、ＣＭ＃Ｈ１からＬＵ＃４０に書き込む。しかし、Ｉ／Ｏ対象のデータは、ＣＭ＃Ｈ０を経由しても良いし、ＬＵ＃４０の担当ＣＰＵは、ＣＰＵ＃Ｈ０でも良い（この場合、ＣＰＵ＃Ｈ０が、ＬＵ＃４０に対するデータを、内部バス２２７を介して、ＬＵ＃４０に書き込むことができる）。また、ＣＭとサーバ間でのデータのＩ／Ｏを行うＣＰＵと、ＣＭとＬＵ間でのデータのＩ／Ｏを行うＣＰＵは、同じでも異なっていても良い。
【０２２６】
ＬＭ＃Ｈ０（＃１）、及び／又は、ＣＭ＃Ｈ０（＃Ｈ１）の一部が、ティア管理テーブル３２１、ＬＵマッピングテーブル３２２、ＬＵ／ＰＤＥＶ変換テーブル３２３、担当ＣＰＵテーブル３２４を記憶している。ＣＰＵ＃Ｈ０及び＃Ｈ１は、これらのテーブルにアクセス可能である。
【０２２７】
図１８に示すように、Ｓ１８０１で、Ｆ−Ｉ／Ｆ＃Ｈ０（図１７のＳ１７０１でＩ／Ｏコマンドを受信したＦ−Ｉ／Ｆ）が、Ｉ／Ｏ先ＬＵの担当ＣＰＵ＃Ｈ１（第１の接続形態で接続されているＨＤＫＣ内のＣＰＵ）を、担当ＣＰＵテーブル＃Ｈ０（図３１参照）から特定する。Ｆ−Ｉ／Ｆ＃Ｈ０は、特定した担当ＣＰＵ＃Ｈ１に、Ｉ／Ｏコマンドを受信したことを通知する。ここで、そのＩ／Ｏコマンドが、内部バス２２７を介して担当ＣＰＵ＃Ｈ１に転送されて良い。
【０２２８】
Ｓ１８０２で、担当ＣＰＵ＃Ｈ１が、そのＩ／Ｏコマンドがライトコマンドか否かを判断する。
【０２２９】
Ｓ１８０２の判断の結果が否定的の場合（Ｉ／Ｏコマンドがリードコマンドの場合）（Ｓ１８０２：Ｎｏ）、Ｓ１８０３で、担当ＣＰＵ＃Ｈ１が、Ｉ／Ｏ先ＬＵの種類に応じたリード処理を行う。具体的には、例えば、Ｉ／Ｏ先ＬＵが、通常のＬＵの場合、担当ＣＰＵ＃Ｈ１は、下記、
（＊）リード元論理領域（Ｉ／Ｏ先ＬＵ＃４０における、リードコマンドが指定するアドレスが属する領域）に対応する物理領域（ＲＧにおける領域）を、ＬＵ／ＰＤＥＶ変換テーブル＃Ｈ１を基に特定する、
（＊）特定した物理領域（その物理領域を有するＰＤＥＶ）から、リード対象のデータを読み出し、リード対象データを、ＣＭ＃Ｈ１に書き込む、
（＊）ＣＭ＃Ｈ１内のリード対象データを、内部バス２２７及びＦ−Ｉ／Ｆ＃Ｈ０を通じて、サーバ＃０に送信する、
を行う。Ｉ／Ｏ先ＬＵが、ＤＰ−ＬＵの場合、Ｓ１８０３で、担当ＣＰＵ＃Ｈ１は、図２０に示すリード処理を行う。
【０２３０】
Ｓ１８０２の判断の結果が肯定的の場合（Ｉ／Ｏコマンドがライトコマンドの場合）（Ｓ１８０２：Ｙｅｓ）、Ｓ１８１１で、担当ＣＰＵ＃Ｈ１がＦ−Ｉ／Ｆに指示して、ライト対象データを、ＣＭ＃Ｈ１に書き込ませる。
【０２３１】
次に、Ｓ１８１２で、担当ＣＰＵ＃Ｈ１が、応答（例えば、ライト完了通知）を、内部バス２２７及びＦ−Ｉ／Ｆ＃Ｈ０を介して、サーバ＃０に返す。
【０２３２】
次に、Ｓ１８１３で、担当ＣＰＵ＃Ｈ１が、Ｉ／Ｏ先ＬＵの種類に応じたライト処理を行う。具体的には、例えば、Ｉ／Ｏ先ＬＵが、通常のＬＵの場合、担当ＣＰＵ＃Ｈ１は、下記、
（＊）ライト先論理領域（Ｉ／Ｏ先ＬＵ＃４０における、ライトコマンドが指定するアドレスが属する領域）に対応する物理領域（ＲＧにおける領域）を、ＬＵ／ＰＤＥＶ変換テーブル＃Ｈ１を基に特定する、
（＊）特定した物理領域（その物理領域を有するＰＤＥＶ）に、ＣＭ＃Ｈ１内のライト対象データを書き込む、
を行う。Ｉ／Ｏ先ＬＵが、ＤＰ−ＬＵの場合、Ｓ１８１３で、担当ＣＰＵ＃Ｈ１は、図２１に示すライト処理を行う。
【０２３３】
なお、自ＤＫＣに従うＬＵ（ＨＤＫＣ＃Ｈ０以外のＤＫＣ内のＬＵからマッピングされていないＬＵ）に対するＩ／Ｏの処理（その処理を、この段落において、「処理Ａ」と言う）は、第１の接続形態に従うＬＵに対するＩ／Ｏの処理（その処理を、この段落において、「処理Ｂ」と言う）とほとんど同じで良い。処理Ａと処理Ｂでは、担当ＣＰＵと、使用されるＣＭが異なることがあり得る。例えば、処理Ａでは、担当ＣＰＵは、ＣＰＵ＃Ｈ０で、使用されるＣＭは、ＣＭ＃Ｈ０で良い。しかし、処理Ａにおいて、担当ＣＰＵがＣＰＵ＃Ｈ１であり、及び／又は、使用されるＣＭがＣＭ＃Ｈ１でも良い。逆に、処理Ｂにおいて、担当ＣＰＵがＣＰＵ＃Ｈ０であり、及び／又は、使用されるＣＭがＣＭ＃Ｈ０で良い。
【０２３４】
また、ＬＤＫＣは、Ｉ／ＯコマンドをＨＤＫＣから受けた場合、図１９に示す処理と同様の処理を行うことで、外部ＬＵに対するＩ／Ｏを行って良い。
【０２３５】
第１の接続形態（及び／又は、１つのＨＤＫＣ）によれば、ＬＭ＃Ｈ００（＃Ｈ１０）は、それを有するＣＰＵ＃Ｈ００（＃Ｈ１０）のみが必要とする情報を有した管理情報を記憶して良い。ＣＰＵ＃Ｈ００（＃Ｈ１０）は、ＬＭ＃Ｈ００（＃Ｈ１０）内の管理情報を更新しても、他のＬＭ＃Ｈ１０（＃Ｈ００）内の管理情報を更新しないで良い。ＣＰＵ＃Ｈ００（＃Ｈ１０）は、他のＬＭ＃Ｈ１０（＃Ｈ００）内の管理情報が必要な場合、内部バス２２７を介して、他のＬＭ＃Ｈ１０（＃Ｈ００）内の管理情報にアクセスして良い。
【０２３６】
或いは、第１の接続形態（及び／又は、１つのＨＤＫＣ）によれば、１つのＨＤＫＣユニット（及び／又は、１つのＨＤＫＣ）に存在する全てのＬＭが、同じ内容の管理情報を記憶して良い。この場合、いずれかのＬＭの管理情報がいずれかのＣＰＵによって更新される度に、残り全てのＬＭ内の管理情報が少なくとも１以上のＣＰＵによって更新されて良い。
【０２３７】
米国においては、第１の接続形態に関して、米国特許第７５８７５５１号明細書（Fujibayashi  et  al.）及び／又は、米国公開特許第２００８／０２６３１９０（Serizawa  et  al.）の明細書及び図面を援用する。これらのうちの少なくとも１つの公報に記載のストレージ装置が、ＨＤＫＣ、及び／又は、ＨＤＫＣユニットに適用されて良い。但し、本実施例に従う「ティア」という概念は、本願に特有の概念である。
【０２３８】
＜＜＜ＤＰ−ＬＵに対するＩ／Ｏ＞＞＞。
【０２３９】
Ｉ／Ｏ先ＬＵが第１の接続形態（又は自ＤＫＣ）に従うＬＵの場合、ＤＰ−ＬＵは、Ｉ／Ｏ先ＬＵで良い。
【０２４０】
Ｉ／Ｏ先ＬＵが第２の接続形態に従う仮想ＬＵの場合、ＤＰ−ＬＵは、Ｉ／Ｏ先ＬＵにマッピングされている外部ＬＵ（例えば、図２２（後述）のＬＵ＃１）で良い。
【０２４１】
Ｉ／Ｏ先ＬＵが第３の接続形態に従う仮想ＬＵの場合、ＤＰ−ＬＵは、Ｉ／Ｏ先ＬＵに直接的に又は間接的にマッピングされている外部ＬＵで良い。Ｉ／Ｏ先ＬＵに直接的にマッピングされているＤＰ−ＬＵは、例えば、１つの第３の接続媒体を介して接続されているＨＤＫＣ（又はそのＨＤＫＣを含んだＨＤＫＣユニット）内のＬＵ、例えば、図２６（後述）のＬＵ＃４５で良い。Ｉ／Ｏ先ＬＵに間接的にマッピングされているＤＰ−ＬＵは、例えば、１つの第３の接続媒体と１以上の第２又は第３の接続媒体とを介してマッピングされているＬＵ、例えば、図２８（後述）のＬＵ＃５６、又は、図３０（後述）のＬＵ＃５７で良い。
【０２４２】
図２０は、ＤＰ−ＬＵに関するリード処理の流れを示す。以下、適宜、図１９を例に採り、説明する。その際、ＤＰ−ＬＵのＩＤが、「４０」であり、そのＤＰ−ＬＵを担当するＣＰＵのＩＤが、「Ｈ１１」であるとする。
【０２４３】
Ｓ２００１で、ＤＰ−ＬＵ（＃４０）の担当ＣＰＵ（＃Ｈ１１）が、下記、
（＊）リードコマンドが有するアドレスに属する仮想ページ（リード元仮想ページ）を特定する、
（＊）ＬＭ（＃Ｈ１１）内の仮想ページ管理テーブル（＃Ｈ１１）を基に、特定したリード元仮想ページについての割当状態１３０３（図１３参照）が、「割当」か否かを判断する、
を行う。
【０２４４】
Ｓ２００１の判断の結果が肯定的の場合（Ｓ２００１：Ｙｅｓ）、Ｓ２００２で、担当ＣＰＵ（＃Ｈ１１）が、仮想ページ管理テーブル（＃Ｈ１１）を基に、リード元仮想ページに割り当てられている実ページ（リード元実ページ）を特定する。例えば、担当ＣＰＵ（＃Ｈ１１）は、リード元仮想ページに対応したページアドレス１３０５に実ページのサイズを乗算することで、プール内部ボリューム（ＲＧ）におけるアドレス（例えば、ＬＢＡ）を算出して良い。
【０２４５】
次に、Ｓ２００３で、担当ＣＰＵ（＃Ｈ１１）が、特定したリード元実ページ（具体的には、例えば、算出されたアドレスに属する領域）から、リード対象のデータを読み出し、読み出したデータをＣＭ（＃Ｈ１）に書き込む。
【０２４６】
次に、Ｓ２００４で、担当ＣＰＵ（＃Ｈ１１）が、ＣＭ（＃Ｈ１）内のリード対象データを、Ｉ／Ｏコマンドの送信元（サーバ＃０）に送信する。
【０２４７】
なお、Ｓ２００１の判断の結果が否定的の場合（Ｓ２００１：Ｎｏ）、Ｓ２０１２で、担当ＣＰＵ（＃Ｈ１１）が、ＣＭ（＃Ｈ１）上にゼロデータ（例えば、未割当の仮想ページに関連付けられている記憶領域内のデータ）を生成し（Ｓ２０１１）、ゼロデータを、Ｉ／Ｏコマンドの送信元（サーバ＃０）に送信する（Ｓ２０１２）。なお、Ｓ２００１の判断の結果が否定的の場合に行われる処理は、これに限らないで良い。例えば、予めゼロデータ（他種の初期値データでも良い）を記憶している特定の領域（ＣＭ以外の領域）から、ゼロデータが、Ｉ／Ｏコマンドの送信元に送信されても良い。
【０２４８】
図２１は、ＤＰ−ＬＵに関するライト処理の流れを示す。以下、適宜、図１９を例に採り、説明する。その際、ＤＰ−ＬＵのＩＤが、「４０」であり、そのＤＰ−ＬＵを担当するＣＰＵのＩＤが、「Ｈ１１」であるとする。
【０２４９】
Ｓ２１０１で、ＤＰ−ＬＵ（＃４０）の担当ＣＰＵ（＃Ｈ１１）が、下記、
（＊）ライトコマンドが有するアドレスに属する仮想ページ（ライト先仮想ページ）を特定する、
（＊）ＬＭ（＃Ｈ１１）内の仮想ページ管理テーブル（＃Ｈ１１）を基に、特定したライト先仮想ページについての割当状態１３０３（図１３参照）が、「割当」か否かを判断する、
を行う。
【０２５０】
Ｓ２１０１の判断の結果が肯定的の場合（Ｓ２１０１：Ｙｅｓ）、Ｓ２１０７で、担当ＣＰＵ（＃Ｈ１１）が、仮想ページ管理テーブル（＃Ｈ１１）を基に、ライト先仮想ページに割り当てられている実ページ（ライト先実ページ）を特定する。例えば、担当ＣＰＵ（＃Ｈ１１）は、ライト先仮想ページに対応したページアドレス１３０５に実ページのサイズを乗算することで、プール内部ボリューム（ＲＧ）におけるアドレス（例えば、ＬＢＡ）を算出して良い。
【０２５１】
次に、Ｓ２１０８で、担当ＣＰＵ（＃Ｈ１１）が、ＣＭ（＃Ｈ１）内のライト対象データ（例えば、図１８のＳ１８１１で格納されたデータ）を読み出し、読み出したデータを、特定したライト先実ページ（具体的には、例えば、算出されたアドレスに属する領域）に書き込む。
【０２５２】
Ｓ２１０１の判断の結果が否定的の場合（Ｓ２１０１：Ｎｏ）、つまり、ライト先仮想ページに実ページが割り当てられていない場合、ライト先仮想ページに実ページを割り当てる必要がある。そのため、まず、実ページ管理テーブル（＃Ｈ１）にアクセスする必要がある。実ページ管理テーブル（＃Ｈ１）については、アクセスの排他制御が必要である。このため、Ｓ２１０２で、担当ＣＰＵ（＃Ｈ１１）は、実ページ管理テーブル（＃Ｈ１）にアクセスするためのアクセス権を取得する。
【０２５３】
その後、Ｓ２１０３で、担当ＣＰＵ（＃Ｈ１１）は、キュー先頭管理テーブル（＃Ｈ１）が有するポインタと一致するテーブルポインタ１４０１に対応した未割当実ページを、実ページ管理テーブル（＃Ｈ１）から特定する。
【０２５４】
次に、Ｓ２１０４で、担当ＣＰＵ（＃Ｈ１１）は、実ページ管理テーブル（＃Ｈ１）及びキュー先頭管理テーブル（＃Ｈ１）を更新する。具体的には、例えば、担当ＣＰＵ（＃Ｈ１１）は、下記、
（＊）Ｓ２１０３で特定した実ページに対応する割当状態１４０４を、「割当」に更新する、
（＊）Ｓ２１０３で特定した実ページに対応するＤＰ−ＬＵ  ＩＤ１４０５を、「４０」（ＤＰ−ＬＵ（＃４０）のＩＤ）に更新する、
（＊）Ｓ２１０３で特定した実ページに対応する未割当キューポインタ１４０６を、キュー先頭管理テーブル（＃Ｈ１）にコピーし、且つ、そのポインタ１４０６を、無効値「-」に更新する、
を行う。
【０２５５】
次に、Ｓ２１０５で、担当ＣＰＵ（＃Ｈ１１）は、Ｓ２１０２で取得したアクセス権を解放する。
【０２５６】
次に、Ｓ２１０６で、担当ＣＰＵ（＃Ｈ１１）は、仮想ページ管理テーブル（＃Ｈ１１）を更新する。具体的には、例えば、担当ＣＰＵ（＃Ｈ１１）は、下記、
（＊）ライト先仮想ページに対応する割当状態１３０３を、「割当」に更新する、
（＊）ライト先仮想ページに対応するプールＲＧ  ＩＤ１３０４を、Ｓ２１０３で特定した実ページに対応するプールＲＧ  ＩＤ１４０２と一致するＩＤに更新する、
（＊）ライト先仮想ページに対応する実ページアドレス１３０５を、Ｓ２１０３で特定した実ページに対応する実ページアドレス１４０３と一致するアドレスに更新する、
を行う。
【０２５７】
その後、担当ＣＰＵ（＃Ｈ１１）は、前述したＳ２１０７及びＳ２１０８を行う。なお、ここでは、前述したライト先実ページは、Ｓ２１０３で特定された実ページ（Ｓ２１０６で、ライト先仮想ページに割り当てられた実ページ）である。
【０２５８】
以上が、ＤＰ−ＬＵに対するＩ／Ｏの説明である。
【０２５９】
なお、例えば、プールは、（Ｖ）同一のティア（例えば、同一のティアレベル又は同一のティアレベル範囲）に属する内部ボリュームで構成されていても良いし、（Ｗ）複数の異なるティアに属する内部ボリュームで構成されていても良い。（Ｖ）の場合、例えば、同一の実ページ管理テーブルが、内部ボリューム毎に、内部ボリュームが属するティア（例えば、ティアレベル又はティアレベル範囲）を表す情報を有しても良い。（Ｗ）の場合、ティア毎にプールが管理されて良い（例えば、ティアに対応するプールを表す管理情報がティア毎にあって良い）。
【０２６０】
また、ＬＤＫＣ内の外部ＬＵがＤＰ−ＬＵの場合、ＬＤＫＣ内の内部コントローラ（ＣＰＵ）が、図２０に従うリード処理、及び、図２１に従うライト処理を行うことができる。
【０２６１】
また、例えば、図１９において、ＤＰ−ＬＵが、Ｉ／Ｏコマンドをサーバ＃０から受けたＨＤＫＣ＃Ｈ０内のＩ／Ｏ先ＬＵの場合、ＨＤＫＣ＃Ｈ０内でのみ処理が行われ、ＨＤＫＣ＃Ｈ０を含むＨＤＫＣユニット内の他のＨＤＫＣにＩ／Ｏ対象のデータ及び／又はＩ／Ｏコマンドは転送されないで良い。或いは、例えば、図１９において、ＤＰ−ＬＵが、前述した例の通り、ＨＤＫＣ＃Ｈ１内のＬＵ（＃４０）の場合、ＨＤＫＣ＃Ｈ０からＨＤＫＣ＃Ｈ１にＩ／Ｏコマンド（サーバ＃０から受信したＩ／Ｏコマンド）が転送されて良いし、或いは、Ｉ／Ｏコマンドが転送されることなく、ＣＰＵ＃Ｈ０が、内部バス２２７を介してＤＰ−ＬＵ＃４０に対するＩ／Ｏを行っても良い。或いは、ＤＰ−ＬＵ＃４０に対するＩ／Ｏの処理が、ＣＰＵ＃Ｈ０及び＃Ｈ１に分担されても良い。
【０２６２】
米国においては、ＤＰ−ＬＵに対するＩ／Ｏに関して、米国特許第７５５５６０１号明細書（Yamagami）の明細書及び図面を援用する。この場合、Storage Control Systemは、本願のＨＤＫＣユニット１４１やＬＤＫＣ１５１に対応しており、ＨＤＫＣユニット１４１によるＤＰ−ＬＵに対するＩ／Ｏ処理、ＬＤＫＣユニット１５１によるＤＰ−ＬＵに対するＩ／Ｏ処理に適用される。なお、この援用は、第１の接続形態のみに限らず、以下に具体的な説明のある第２及び第３の接続形態、及び、実施例２及び実施例３のＤＰ−ＬＵに対するＩ／Ｏに関しても援用する。但し、本実施例に従う「ティア」という概念等は、本願に特有の概念である
【０２６３】
＜＜第２の接続形態に従うＬＵに対するＩ／Ｏ＞＞。
【０２６４】
これについて、図２２及び２３を参照して説明する。
【０２６５】
図２２は、第２の接続形態に従うＬＵに対するＩ／Ｏの処理の流れを示す。図２３は、第２の接続形態に従う構成の概要の一例を示す。図２２の説明では、適宜、図２３を参照する。なお、図２３の一点鎖線は、データの流れの一例を示す。
【０２６６】
図２３に示すように、ＨＤＫＣ＃Ｈ０とＬＤＫＣ＃Ｌ０が第２の接続媒体（外部バス）５０１を介して接続されている。ＨＤＫＣ＃Ｈ０が有する内部コントローラ＃Ｈ０内の記憶資源（例えば、ＬＭ＃Ｈ０、又は、ＣＭ＃Ｈ０の一部）が、前述したテーブル３２１〜３２８を記憶することができる。これらのテーブルには、ＣＰＵ＃Ｈ０がアクセス可能であるものの、ＬＤＫＣ＃Ｌ０内のＣＰＵ＃Ｌ０はアクセスできないで良い。
【０２６７】
図２２に示すように、Ｓ２２０１で、Ｆ−Ｉ／Ｆ＃Ｈ０（図１７のＳ１７０１でＩ／Ｏコマンドを受信したＦ−Ｉ／Ｆ）が、Ｉ／Ｏ先ＬＵ（＃３１）の担当ＣＰＵ＃Ｈ０を、担当ＣＰＵテーブル＃Ｈ０（図３１参照）から特定する。Ｆ−Ｉ／Ｆ＃Ｈ０は、特定した担当ＣＰＵ＃Ｈ０に、Ｉ／Ｏコマンドを受信したことを通知する。
【０２６８】
次に、Ｓ２２０２で、担当ＣＰＵ＃Ｈ０が、そのＩ／Ｏコマンドがライトコマンドか否かを判断する。
【０２６９】
Ｓ２２０２の判断の結果が否定的の場合（Ｉ／Ｏコマンドがリードコマンドの場合）（Ｓ２２０２：Ｎｏ）、Ｓ２２０３で、内部コントローラ＃Ｈ０（担当ＣＰＵ＃Ｈ０）が、リード元ＬＵ（＃３１）に対応した外部ＬＵ（＃４１）及びそれを有するＬＤＫＣ（＃Ｌ０）を、ＬＵマッピングテーブル＃Ｈ０から特定する。
【０２７０】
次に、Ｓ２２０４で、Ｓ２２０３で特定された外部ＬＵ（＃４１）に応じた処理が行われる。具体的には、例えば、次の処理が行われる。すなわち、担当ＣＰＵ＃Ｈ０が、リードコマンド（図２２の説明において、第２のリードコマンド）を、特定されたＬＤＫＣ（＃Ｌ０）に送信する。そのリードコマンドは、例えば、特定された外部ＬＵ（＃４１）のＩＤと、Ｓ１７０１で受信したＩ／Ｏコマンド（図２２の説明において、「第１のリードコマンド」）で指定されている第１のアドレスに従う第２のアドレス（例えば、第１のアドレスと同じアドレス）とを有する。第２のリードコマンドは、イニシエータポート及び外部バス５０１を介して、ＬＤＫＣ＃Ｌ０に送信される。ＬＤＫＣ＃Ｌ０の内部コントローラ＃Ｌ０が、例えば、図１８に示した処理を行う（外部ＬＵがＤＰ−ＬＵの場合、更に、図２０に示す処理を行う）。すなわち、内部コントローラ＃Ｌ０が、外部ＬＵ（＃４１）からリード対象のデータを読み出し、そのデータをＣＭ＃Ｌ０に格納し、そのデータを、ＣＭ＃Ｌ０から、ターゲットポート及び外部バス５０１を介して、ＨＤＫＣ＃Ｈ０に送信する。担当ＣＰＵ＃Ｈ０が、ＬＤＫＣ＃Ｌ０からのリード対象データをＣＭ＃Ｈ０に書き込む。担当ＣＰＵ＃Ｈ０が、ＣＭ＃Ｈ０内のリード対象データを、サーバ＃０に送信する。
【０２７１】
Ｓ２２０２の判断の結果が肯定的の場合（Ｉ／Ｏコマンドがライトコマンドの場合）（Ｓ２２０２：Ｙｅｓ）、Ｓ２２１１で、担当ＣＰＵ＃Ｈ０が、ライト対象データを、ＣＭ＃Ｈ０に書き込む。
【０２７２】
次に、Ｓ２２１２で、担当ＣＰＵ＃Ｈ０、応答（例えば、ライト完了通知）を、サーバ＃０に返す。
【０２７３】
次に、Ｓ２２１３で、担当ＣＰＵ＃Ｈ０が、Ｓ２２０４と同様の方法で、ライト先ＬＵに対応した外部ＬＵを特定する。
【０２７４】
次に、Ｓ２２１４で、Ｓ２２１３で特定された外部ＬＵ（＃４１）に応じた処理が行われる。具体的には、例えば、次の処理が行われる。すなわち、担当ＣＰＵ＃Ｈ０が、ライトコマンド（図２２の説明において、第２のライトコマンド）を、外部ＬＵ（＃４１）を有するＬＤＫＣ（＃Ｌ０）に送信する。そのライトコマンドは、例えば外部ＬＵ（＃４１）のＩＤと、Ｓ１７０１で受信したライトコマンド（図２２の説明において、「第１のライトコマンド」）で指定されている第１のアドレスに従う第２のアドレス（例えば、第１のアドレスと同じアドレス）とを有する。第２のライトコマンドと、ＣＭ＃Ｈ０内のライト対象データが、イニシエータポート及び外部バス５０１を介して、ＬＤＫＣ＃Ｌ０に送信される。ＬＤＫＣ＃Ｌ０の内部コントローラ＃Ｌ０が、例えば、図１８に示した処理を行う（外部ＬＵがＤＰ−ＬＵの場合、更に、図２１に示す処理を行う）。すなわち、内部コントローラ＃Ｌ０が、ＨＤＫＣ＃Ｈ０からの第２のライトコマンドに従い、ＨＤＫＣ＃Ｈ０からのライト対象データをＣＭ＃Ｌ０に書込み、応答（例えばライト完了通知）をＨＤＫＣ＃Ｈ０に返し、ＣＭ＃Ｌ０内のライト対象データを外部ＬＵ（＃４１）に書き込む。
【０２７５】
なお、ＨＤＫＣ＃Ｈ０内のＩ／Ｏ先ＬＵがＤＰ−ＬＵの場合、図１８と図２０又は図２１とに従う処理が行われて良い。そして、Ｉ／Ｏ先の実ページを有する内部ボリュームが、第２の接続形態に従う内部ボリュームの場合、担当ＣＰＵ＃Ｈ０は、例えば、その内部ボリューム（例えばＬＵ）に対応する外部ＬＵを、ＬＵマッピングテーブル（＃Ｈ０）から特定し、特定された外部ＬＵを有するＬＤＫＣに、第２のＩ／Ｏコマンドを送信して良い。
【０２７６】
また、例えば、ＨＤＫＣ＃Ｈ０内のプールが、（Ｖ）同一のティア（例えば、同一のティアレベル又は同一のティアレベル範囲）に属する内部ボリュームで構成されていても良いし、（Ｗ）複数の異なるティアに属する内部ボリュームで構成されていても良い。（Ｖ）の場合、例えば、同一の実ページ管理テーブルが、内部ボリューム毎に、内部ボリュームが属するティア（例えば、ティアレベル又はティアレベル範囲）を表す情報を有しても良い。（Ｗ）の場合、ティア毎にプールが管理されて良い（例えば、ティアに対応するプールを表す管理情報がティア毎にあって良い）。
【０２７７】
さらに、例えば、ＨＤＫＣ＃Ｈ０内のプールが、同種の内部ボリュームのみ（例えば、ＨＤＫＣ＃Ｈ０内のＲＧに基づく内部ボリュームのみ、或いは、第２の接続形態に従う内部ボリュームのみ）で構成されていても良いし、異種の内部ボリュームで構成されていても良い。
【０２７８】
米国においては、第２の接続形態に関して、米国特許第７４４１０９５号（Tamura  et  al.）の明細書及び図面を援用する。この場合、First Storage Controllerは、本願のＨＤＫＣユニット１４１に、Second Storage Controllerは、本願のLＤＫＣユニット１５１に、各々対応する。但し、本実施例に従う「ティア」という概念等は、本願に特有の概念である。
【０２７９】
＜＜第３の接続形態に従うＬＵに対するＩ／Ｏ＞＞。
【０２８０】
これについて、図２４乃至図３０を参照して説明する。なお、図２４乃至図３０の説明において、ＨＤＫＣ（＃０）がサーバ（＃０）から受けたＩ／Ｏコマンドを、「第１のＩ／Ｏコマンド」と言い、ＨＤＫＣ（＃０）から送信されるＩ／Ｏコマンドを、「第２のＩ／Ｏコマンド」と言い、ＨＤＫＣ（＃５）からＬＤＫＣ（＃Ｌ３）（又はＨＤＫＣ（＃７））に送信されるＩ／Ｏコマンドを、「第３のＩ／Ｏコマンド」と言うことがある。
【０２８１】
図１７に示したように、Ｆ−Ｉ／Ｆ（＃Ｈ０）は、第１のＩ／Ｏコマンドに従うＩ／Ｏ先ＬＵ（＃３５、＃３６、又は＃３７）が、第３の接続形態に従う仮想ＬＵであると判断した場合、図２４に示す処理が行われる。
【０２８２】
すなわち、図２４に示すように、Ｓ２４０１で、内部コントローラ＃Ｈ０（Ｆ−Ｉ／Ｆ（＃Ｈ０））が、Ｉ／Ｏ先ＬＵに対応した外部ＬＵ（＃４５、＃４６又は＃４７）及びそれを有するＨＤＫＣ（＃Ｈ５）を、ＬＵマッピングテーブル＃Ｈ０から特定する。
【０２８３】
次に、Ｓ２４０２で、内部コントローラ＃Ｈ０（Ｆ−Ｉ／Ｆ（＃Ｈ０））が、特定したＨＤＫＣ（＃５）に、第２のＩ／Ｏコマンドを送信する。第２のＩ／Ｏコマンドは、例えば、特定した外部ＬＵ（＃４５、＃４６又は＃４７）のＩＤと、第１のＩ／Ｏコマンドで指定された第１のアドレスに従う第２のアドレス（例えば第１のアドレスと同じアドレス）を表す情報とを有する。第２のＩ／Ｏコマンドは、ＨＤＫＣ（＃Ｈ０）のイニシエータ／ターゲットポート、及び、第３の接続媒体（外部バス）６０１を介して送信され、ＨＤＫＣ（＃Ｈ５）のＦ−Ｉ／Ｆ（＃Ｈ５）が有するイニシエータ／ターゲットポートが受信する。
【０２８４】
その後、ＨＤＫＣ（＃Ｈ５）では、ＨＤＫＣ（＃Ｈ０）で行われた処理（図１７以降を参照して説明した処理）と同様の処理が行われる。
【０２８５】
例えば、Ｓ２４０３で、内部コントローラ（＃Ｈ５）（Ｆ−Ｉ／Ｆ（＃Ｈ５））が、ティア管理テーブル（＃Ｈ５）を参照する。内部コントローラ（＃Ｈ５）は、第２のＩ／Ｏコマンドで指定されているＬＵ（＃４５、＃４６又は＃４７）に対応した接続形態９０３（又は、第３の接続形態１００３及び第２の接続形態１００４）を基に、そのＬＵについて、接続形態を特定する。
【０２８６】
接続媒体が「自ＤＫＣ」又は「第１の接続媒体」の場合（Ｓ２４０４：Ｙｅｓ）、図２５に示す処理が行われる。
【０２８７】
接続媒体が「第２の接続媒体」の場合（Ｓ２４０４：Ｎｏ、Ｓ２４０５：Ｙｅｓ）、図２７に示す処理が行われる。
【０２８８】
接続媒体が「第３の接続媒体」の場合（Ｓ２４０３：Ｎｏ、Ｓ２４０５：Ｎｏ）、図２９に示す処理が行われる。
【０２８９】
すなわち、Ｉ／Ｏ先ＬＵ（ＨＤＫＣ＃Ｈ０がサーバ＃０から受信したＩ／Ｏコマンドに従うＬＵ）が第３の接続形態に従うＬＵである場合、下記のケースがある。
（ケース３−１（図２５、図２６））：  Ｉ／Ｏが１つの第３の接続媒体のみを経由するケース。具体的には、例えば、Ｉ／Ｏ先ＬＵ（＃３５）と、末端ＬＵ（Ｉ／Ｏ先ＬＵにカスケード状に関連付けられている１以上のＬＵのうちの末端のＬＵ）（＃４５）との間に、ＬＵが介在しない。つまり、末端ＬＵが、Ｉ／Ｏ先ＬＵ（＃３５）に直接的にマッピングされている外部ＬＵ（＃４５）である。
（ケース３−２（図２７、図２８））：  Ｉ／Ｏが１つの第３の接続媒体と１つの第２の接続媒体とを経由するケース。具体的には、例えば、末端ＬＵが、ＬＤＫＣ（＃Ｌ３）内のＬＵ（＃５６）であり、Ｉ／Ｏ先ＬＵ（＃３６）と末端ＬＵ（＃５６）との間に、第３の接続媒体を介して接続されているＨＤＫＣ（＃Ｈ５）内の外部ＬＵ（＃４６）が介在する。つまり、末端ＬＵが、外部ＬＵ（＃４６）を介してＩ／Ｏ先ＬＵ（＃３６）に間接的にマッピングされている、ＬＤＫＣ（＃Ｌ３）内の外部ＬＵ（＃５６）である。
（ケース３−３（図２９、図３０））：  Ｉ／Ｏが２つの第３の接続媒体を経由するケース。具体的には、例えば、Ｉ／Ｏ先ＬＵ（＃３７）と末端ＬＵ（＃５７）との間に、第３の接続媒体を介して接続されているＨＤＫＣ（＃Ｈ５）内の外部ＬＵ（＃４７）が介在する。つまり、末端ＬＵが、外部ＬＵ（＃４７）を介してＩ／Ｏ先ＬＵ（＃３７）に間接的にマッピングされている、ＨＤＫＣ（＃Ｈ７）内の外部ＬＵ（＃５７）である。
【０２９０】
すなわち、第３の接続形態に従うＬＵ（Ｉ／Ｏ先ＬＵ）に対するＩ／Ｏについて、Ｉ／Ｏ先ＬＵと末端ＬＵとの間に、１つの第３の接続媒体の他に、１以上の第１の接続媒体、１以上の第２の接続媒体、１以上の第３の接続媒体、或いは、それらのうちの異なる２種類以上の接続媒体が介在するケースが考えられる。
【０２９１】
以下、上述した（ケース３−１）、（ケース３−２）及び（ケース３−３）を説明する。これらのケースについての説明と、「第１の接続形態に従うＬＵに対するＩ／Ｏ」の説明と、「第２の接続形態に従うＬＵに対するＩ／Ｏ」の説明とを基に、様々な構成の記憶システムを実現することが可能である。
【０２９２】
（ケース３−１：１つの第３の接続媒体のみ）。
【０２９３】
これについて、図２５及び図２６を参照して説明する。
【０２９４】
図２５は、第３の接続形態（ケース３−１）に従うＩ／Ｏの処理の流れを示す。図２６は、第３の接続形態（ケース３−１）に従う構成の概要の一例を示す。図２６の一点鎖線は、データの流れを示す。
【０２９５】
ＨＤＫＣ＃Ｈ０とＨＤＫＣ＃Ｈ５が第３の接続媒体（外部バス）６０１を介して接続されている。ＬＭ＃Ｈ０（＃Ｈ５）、及び、ＣＭ＃Ｈ０（＃Ｈ５）の一部が、ティア管理テーブル＃Ｈ０（＃Ｈ５）、ＬＵマッピングテーブル＃Ｈ０（＃Ｈ５）、ＬＵ／ＰＤＥＶ変換テーブル＃Ｈ０（＃Ｈ５）、及び、担当ＣＰＵテーブル＃Ｈ０（＃Ｈ５）を記憶している。ＨＤＫＣ＃Ｈ５がＤＰ−ＬＵを有していれば、更に、ＬＭ＃Ｈ５が、仮想ページ管理テーブル＃Ｈ５を記憶し、ＣＭ＃Ｈ５の一部が、実ページ管理テーブル＃Ｈ５、及び、キュー先頭管理テーブル＃Ｈ５を記憶する。
【０２９６】
内部コントローラ＃Ｈ０（＃Ｈ５）は、相手のＨＤＫＣ＃Ｈ５（＃Ｈ０）内の管理情報にアクセスすることはできない。
【０２９７】
サーバ＃０と第３の接続媒体６０１は、同じＦ−Ｉ／Ｆ＃Ｈ０に接続されていても良いし、異なるＦ−Ｉ／Ｆ＃Ｈ０に接続されていても良い。
【０２９８】
ＨＤＫＣ＃Ｈ５内の外部ＬＵ＃４５が、ＨＤＫＣ＃Ｈ０内の仮想ＬＵ＃３５に直接的にマッピングされている。
【０２９９】
図２５によれば、図１８を参照して説明した処理（Ｓ１８０１、Ｓ１８０２、Ｓ１８０３、Ｓ１８１１、Ｓ１８１２、Ｓ１８１３）と同様の処理（Ｓ２５０１、Ｓ２５０２、Ｓ２５０３、Ｓ２５１１、Ｓ２５１２、Ｓ２５１３）が行われる。
【０３００】
その際、例えば、Ｓ２５０３及びＳ２５１２では、応答（リード対象のデータ、ライト完了通知）は、ＨＤＫＣ（＃Ｈ５）からＨＤＫＣ（＃Ｈ０）を介してサーバ（＃０）に送信される。
【０３０１】
また、例えば、Ｓ２５０３及びＳ２５１３で、ＬＵ／ＰＤＥＶ変換テーブル＃Ｈ５が参照される。
【０３０２】
また、例えば、外部ＬＵ＃４５がＤＰ−ＬＵの場合、内部コントローラ＃Ｈ５が、Ｓ２５０３で、図２０を参照して説明した処理を行い、Ｓ２５１３で、図２１を参照して説明した処理を行うことができる。その際、仮想ページ管理テーブル＃Ｈ５、実ページ管理テーブル＃Ｈ５、及びキュー先頭管理テーブル＃Ｈ５が、参照及び更新される。
【０３０３】
なお、第３の接続形態に従うＬＵに対するＩ／Ｏにおいて（ケース３−１乃至ケース３−３−のいずれについても）、ＨＤＫＣ＃Ｈ０のＣＭ＃Ｈ０が使用されない。
【０３０４】
具体的には、例えば、内部コントローラ＃Ｈ０がリードコマンドをサーバ＃０から受けた場合、リードコマンドで指定されているアドレスに属する領域内のデータ（リード対象データ）がＣＭ＃Ｈ０に存在するとしても、ＣＭ＃Ｈ０内のリード対象データは、サーバ＃０に送信されない。なぜなら、末端ＬＵ（＃４５）内のリード対象データが、別のサーバ（＃５）から更新されている可能性があり、それ故、ＣＭ＃Ｈ０内のリード対象データと、末端ＬＵ（＃４５）内のリード対象データとが一致していない可能性があるからである。この場合、ＣＭ＃Ｈ０内のデータではなく、末端ＬＵを有するＨＤＫＣ内のＣＭが記憶するデータが、サーバ＃０に送信される。
【０３０５】
また、例えば、内部コントローラ＃Ｈ０がライトコマンドをサーバ＃０から受けた場合、ライトコマンドに従うデータを、ＣＭ＃Ｈ０に格納せず、ＣＭ＃Ｈ１へ転送しても良い。
【０３０６】
ちなみに、末端ＬＵが、サーバ＃０が使用するデータのみを記憶することになっている場合、ＣＭ＃Ｈ０が使用されて良い。すなわち、内部コントローラ＃Ｈ０は、サーバ＃０からの第１のリードコマンドに従うリード対象データ（第３の接続形態に従うＬＵに関連付けられているＬＵ内のデータ）がＣＭ＃Ｈ０にあれば、第３の接続媒体を介して別のＨＤＫＣに第２のリードコマンドを転送せず、ＣＭ＃Ｈ０内のリード対象データをサーバ＃０に返して良い。また、内部コントローラ＃Ｈ０は、サーバ＃０からライトコマンドを受信した場合、そのライトコマンドに従うデータ（ライト対象データ）を、ＣＭ＃Ｈ０に書き込み、サーバ＃０に、ライト処理完了の応答を返しても良い。このような機能が、前述したプレキャッシュ機能である。これにより、ライト性能及び／又はリード性能が向上する。
【０３０７】
（ケース３−２：１つの第３の接続媒体と１つの第２の接続媒体）。
【０３０８】
これについて、図２７及び図２８を参照して説明する。
【０３０９】
図２７は、第３の接続形態（ケース３−２）に従うＩ／Ｏの処理の流れを示す。図２８は、第３の接続形態（ケース３−２）に従う構成の概要の一例を示す。図２８の一点鎖線は、データの流れを示す。
【０３１０】
ＨＤＫＣ＃Ｈ０とＨＤＫＣ＃Ｈ５が第３の接続媒体（外部バス）６０１を介して接続されている。ＬＭ＃Ｈ０（＃Ｈ５）、及び、ＣＭ＃Ｈ０（＃Ｈ５）の一部が、ティア管理テーブル＃Ｈ０（＃Ｈ５）、ＬＵマッピングテーブル＃Ｈ０（＃Ｈ５）、ＬＵ／ＰＤＥＶ変換テーブル＃Ｈ０（＃Ｈ５）、及び、担当ＣＰＵテーブル＃Ｈ０（＃Ｈ５）を記憶している。
【０３１１】
ＨＤＫＣ＃Ｈ５とＬＤＫＣ＃Ｌ３が第２の接続媒体（外部バス）５０１を介して接続されている。ＬＤＫＣ＃Ｌ３が有するターゲットポート（図示しない）が、ＨＤＫＣ＃Ｈ５が有するイニシエータポートに接続されている。そのイニシエータポートは、ＨＤＫＣ＃Ｈ０に接続されているイニシエータ／ターゲットポートを有するＦ−Ｉ／Ｆと同じ又は別のＦ−Ｉ／Ｆにあって良い。
【０３１２】
ＬＤＫＣ＃Ｌ３がＤＰ−ＬＵを有していれば（例えばＬＵ＃５６がＤＰ−ＬＵであれば）、内部コントローラ＃Ｌ３は、仮想ページ管理テーブル＃Ｌ３、実ページ管理テーブル＃Ｌ３、及び、キュー先頭管理テーブル＃Ｌ３を記憶することができる。
【０３１３】
内部コントローラ＃Ｈ０（＃Ｈ５）は、相手のＨＤＫＣ＃Ｈ５（＃Ｈ０）内の管理情報にアクセスすることはできない。同様に、内部コントローラ＃Ｈ５（＃Ｌ３）は、相手のＤＫＣ＃Ｌ３（＃Ｈ５）内の管理情報にアクセスすることはできない。
【０３１４】
サーバ＃０と第３の接続媒体６０１は、同じＦ−Ｉ／Ｆ＃Ｈ０に接続されていても良いし、異なるＦ−Ｉ／Ｆ＃Ｈ０に接続されていても良い。同様に、サーバ＃５と第３の接続媒体６０１は、同じＦ−Ｉ／Ｆ＃Ｈ５に接続されていても良いし、異なるＦ−Ｉ／Ｆ＃Ｈ５に接続されていても良い。サーバ＃５がＨＤＫＣ＃Ｈ５に接続されていなくても良い。
【０３１５】
ＬＤＫＣ＃Ｌ３内の外部ＬＵ＃５６が、ＨＤＫＣ＃Ｈ０内の仮想ＬＵ＃３６に間接的にマッピングされている。具体的には、ＬＤＫＣ＃Ｌ３内の外部ＬＵ＃５６が、ＨＤＫＣ＃Ｈ５内の外部ＬＵ（仮想ＬＵ）＃４６に直接的にマッピングされている。その外部ＬＵ（仮想ＬＵ）＃４６が、ＨＤＫＣ＃Ｈ０内の仮想ＬＵ＃３６に直接的にマッピングされている。
【０３１６】
図２７によれば、図２２を参照して説明した処理（Ｓ２２０１、Ｓ２２０２、Ｓ２２０３、Ｓ２２０４、Ｓ２２１１、Ｓ２２１２、Ｓ２２１３、Ｓ２２１４）と同様の処理（Ｓ２７０１、Ｓ２７０２、Ｓ２７０３、Ｓ２７０４、Ｓ２７１１、Ｓ２７１２、Ｓ２７１３、Ｓ２７１４）が行われる。
【０３１７】
その際、例えば、Ｓ２７０４及びＳ２７１２では、応答（末端ＬＵ＃５６から読み出されたリード対象のデータ、ライト完了通知）は、ＨＤＫＣ（＃Ｈ５）からＨＤＫＣ（＃Ｈ０）を介してサーバ（＃０）に送信される。
【０３１８】
また、例えば、Ｓ２７０３及びＳ２７１３で、ＬＵマッピングテーブル＃Ｈ５が参照される。
【０３１９】
また、Ｓ２７１４で、ライト対象のデータは、末端ＬＵ＃５６に書き込まれる。
【０３２０】
また、例えば、Ｓ２７０４及びＳ２７１４で、第３のＩ／Ｏコマンドが、ＨＤＫＣ＃Ｈ５からＬＤＫＣ＃Ｌ３に送信され、ＬＤＫＣ＃Ｌ３において、ＬＵ／ＰＤＥＶ変換テーブル＃Ｌ３が参照される。第３のＩ／Ｏコマンドは、例えば、ＬＵ＃５６のＩＤと、第２のＩ／Ｏコマンドで指定された第２のアドレスに従う第３のアドレス（例えば、第２のアドレスと同じアドレス）を表す情報とを有する。
【０３２１】
また、例えば、外部ＬＵ＃５６がＤＰ−ＬＵの場合、内部コントローラ＃Ｌ３が、Ｓ２７０４で、図２０を参照して説明した処理を行い、Ｓ２７１４で、図２１を参照して説明した処理を行うことができる。その際、仮想ページ管理テーブル＃Ｌ３、実ページ管理テーブル＃Ｌ３、及びキュー先頭管理テーブル＃Ｌ３が、参照及び更新される。
【０３２２】
（ケース３−３：２つの第３の接続媒体）。
【０３２３】
これについて、図２９及び図３０を参照して説明する。
【０３２４】
図２９は、第３の接続形態（ケース３−３）に従うＩ／Ｏの処理の流れを示す。図３０は、第３の接続形態（ケース３−３）に従う構成の概要の一例を示す。図３０の一点鎖線は、データの流れを示す。
【０３２５】
ＨＤＫＣ＃Ｈ０とＨＤＫＣ＃Ｈ５が第３の接続媒体（外部バス）６０１Ａを介して接続されている。ＬＭ＃Ｈ０（＃Ｈ５）、及び、ＣＭ＃Ｈ０（＃Ｈ５）の一部が、ティア管理テーブル＃Ｈ０（＃Ｈ５）、ＬＵマッピングテーブル＃Ｈ０（＃Ｈ５）、ＬＵ／ＰＤＥＶ変換テーブル＃Ｈ０（＃Ｈ５）、及び、担当ＣＰＵテーブル＃Ｈ０（＃Ｈ５）を記憶している。
【０３２６】
ＨＤＫＣ＃Ｈ５とＨＤＫＣ＃Ｈ７が第３の接続媒体（外部バス）６０１Ｂを介して接続されている。ＬＭ＃Ｈ７、及び、ＣＭ＃Ｈ７の一部が、ティア管理テーブル＃Ｈ７、ＬＵマッピングテーブル＃Ｈ７、ＬＵ／ＰＤＥＶ変換テーブル＃Ｈ７、及び、担当ＣＰＵテーブル＃Ｈ７を記憶している。ＨＤＫＣ＃Ｈ７がＤＰ−ＬＵを有していれば（例えばＬＵ＃５７がＤＰ−ＬＵであれば）、ＬＭ＃Ｈ７が、仮想ページ管理テーブル＃Ｈ７を記憶し、ＣＭ＃Ｈ７の一部が、実ページ管理テーブル＃Ｈ７、及び、キュー先頭管理テーブル＃Ｈ７を記憶することができる。
【０３２７】
内部コントローラ＃Ｈ０（＃Ｈ５）は、相手のＨＤＫＣ＃Ｈ５（＃Ｈ０）内の管理情報にアクセスすることはできない。同様に、内部コントローラ＃Ｈ５（＃Ｈ７）は、相手のＨＤＫＣ＃Ｈ７（＃Ｈ５）内の管理情報にアクセスすることはできない。
【０３２８】
サーバ＃０と第３の接続媒体６０１は、同じＦ−Ｉ／Ｆ＃Ｈ０に接続されていても良いし、異なるＦ−Ｉ／Ｆ＃Ｈ０に接続されていても良い。同様に、サーバ＃５と第３の接続媒体６０１Ａ及び６０１Ｂは、同じＦ−Ｉ／Ｆ＃Ｈ５に接続されていても良いし、異なるＦ−Ｉ／Ｆ＃Ｈ５に接続されていても良い。同様に、サーバ＃６と第３の接続媒体６０１Ｂは、同じＦ−Ｉ／Ｆ＃Ｈ５に接続されていても良いし、異なるＦ−Ｉ／Ｆ＃Ｈ５に接続されていても良い。
【０３２９】
ＨＤＫＣ＃Ｈ７内の外部ＬＵ＃５７が、ＨＤＫＣ＃Ｈ０内の仮想ＬＵ＃３７に間接的にマッピングされている。具体的には、ＨＤＫＣ＃Ｈ７内の外部ＬＵ＃５７が、ＨＤＫＣ＃Ｈ５内の外部ＬＵ（仮想ＬＵ）＃４７に直接的にマッピングされている。その外部ＬＵ（仮想ＬＵ）＃４７が、ＨＤＫＣ＃Ｈ０内の仮想ＬＵ＃３７に直接的にマッピングされている。
【０３３０】
図２９において、Ｓ２９０１及びＳ２９０２は、図２４を参照して説明したＳ２４０１及びＳ２４０２と同様である。すなわち、内部コントローラ＃Ｈ５（Ｆ−Ｉ／Ｆ＃Ｈ５）が、第２のＩ／Ｏコマンドで指定されているＬＵ＃４７に対応したＬＵ＃５７のＩＤとそのＬＵ＃５７を有するＨＤＫＣ＃Ｈ７のＩＤとを特定する（Ｓ２９０１）。そして、内部コントローラ＃Ｈ５（Ｆ−Ｉ／Ｆ＃Ｈ５）が、第３のＩ／Ｏコマンドを、特定したＨＤＫＣ＃Ｈ７に送信する。第３のＩ／Ｏコマンドは、例えば、特定したＬＵ＃５７のＩＤと、第２のＩ／Ｏコマンドで指定された第２のアドレスに従う第３のアドレス（例えば、第２のアドレスと同じアドレス）を表す情報とを有する。
【０３３１】
Ｓ２９０３で、第３のＩ／ＯコマンドがＨＤＫＣ＃Ｈ７で処理される。ＨＤＫＣ＃Ｈ７では、例えば、図２４のＳ２４０３が行われ、その後、Ｓ２４０４：Ｙｅｓであるが故に、図２５に示した処理と同様の処理が行われて良い。その際、例えば、応答（リード対象のデータ、ライト完了通知）は、ＨＤＫＣ＃Ｈ７からＨＤＫＣ＃Ｈ５に届き、ＨＤＫＣ＃５からＨＤＫＣ＃Ｈ０を介してサーバ＃０に送信されて良い。また、Ｓ２５１３で、ライト対象のデータが末端ＬＵ＃５７に書き込まれる。また、例えば、Ｓ２５０３及びＳ２５１３で、ＬＵ／ＰＤＥＶ変換テーブル＃Ｈ７が参照される。また、例えば、末端ＬＵ＃５７がＤＰ−ＬＵの場合、内部コントローラ＃Ｈ７が、Ｓ２５０３で、図２０を参照して説明した処理を行い、Ｓ２５１３で、図２１を参照して説明した処理を行うことができる。その際、仮想ページ管理テーブル＃Ｈ７、実ページ管理テーブル＃Ｈ７、及びキュー先頭管理テーブル＃Ｈ７が、参照及び更新される。
【０３３２】
以上が、ケース３−１〜３−３についての説明である。
【０３３３】
なお、第３の接続形態に従う接続に関して、ＨＤＫＣ＃Ｈ０が他のＨＤＫＣのＬＵへデータを中継しても良い。ＰＤＥＶ種別が同一の場合には、ティアレベルは、ＨＤＫＣ＃Ｈ０が有する、（Ａ）から（Ｃ）のＬＵのうち、（Ａ）のＬＵが最も高く、（Ｂ）のＬＵが２番目に高く、（Ｃ）のＬＵが最も低くて良い。ただし、そのためには、例えば、（Ａ）のＬＵを有するＤＫＣと（Ｂ）のＬＵを有するＤＫＣについての距離（コマンド応答時間）に、ティアレベルを違える根拠と成る程の差が存在すること、及び、（Ｂ）のＬＵを有するＤＫＣと（Ｃ）のＬＵを有するＤＫＣについての距離（コマンド応答時間）に、ティアレベルを違える根拠と成る程の差が存在しないこと、等の条件が必要で良い。
（Ａ）ＨＤＫＣ＃Ｈ０内のＲＧに基づくＬＵであり、サーバ＃０に提供されるＬＵ。
（Ｂ）他のＨＤＫＣを中継してサーバ＃０に提供されるＬＵ。
（Ｃ）ＬＤＫＣのＬＵが仮想化された仮想ＬＵ。
【０３３４】
以上、実施例１によれば、ＨＤＫＣが、第１の接続媒体に代えて又は加えて、長距離接続が可能な第３の接続媒体（外部バス）で接続され、第３の接続媒体で接続された複数のＨＤＫＣが仮想的に１つのＤＫＣとされる。このため、複数のＨＤＫＣをそれぞれ離れた場所に設置することが可能であり、同一サイトに大きなスペースを必要としない。また、接続できるＤＫＣの数に特に制限が無いので、スケーラビリティが向上する。
【実施例２】
【０３３５】
本発明の実施例２を説明する。その際、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略或いは簡略する。
【０３３６】
前述したように、ＨＤＫＣとそのＨＤＫＣに第３の接続形態で接続されたＨＤＫＣとを含んだ記憶システムによれば、複数のＨＤＫＣを仮想的に１台のＤＫＣとしてサーバに見せることができる。
【０３３７】
このような記憶システムにおいて、負荷が高くなる傾向にあるＨＤＫＣ（例えばＣＰＵ）は、実際にＬＵに対するＩ／Ｏを実行することになるＨＤＫＣ（以下、実施例２において「担当ＨＤＫＣ」）、例えば、末端ＬＵを有するＨＤＫＣ、或いは、第２の接続形態でＬＤＫＣが接続されているＨＤＫＣである。そのため、担当ＨＤＫＣ内のＬＵの負荷が高い場合（例えば、そのＬＵにＩ／Ｏが集中している場合）、担当ＨＤＫＣのＩ／Ｏ性能が低下し、担当ＨＤＫＣが、記憶システムのＩ／Ｏ性能のネックとなる。
【０３３８】
そこで、実施例２では、ＨＤＫＣ間にて負荷分散が行われる。これにより、記憶システムのＩ／Ｏ性能の低下を回避することが期待できる。
【０３３９】
負荷は、ＨＤＫＣから、そのＨＤＫＣに第１の接続形態で接続されているＨＤＫＣ（以下、第１接続ＨＤＫＣ）に分散されても良いし、ＨＤＫＣから、そのＨＤＫＣに第３の接続形態で接続されているＨＤＫＣ（以下、第３接続ＨＤＫＣ）に分散されても良い。以下、ＨＤＫＣ＃Ｈ０及びそれを含んだＨＤＫＣユニット（以下、本実施例の説明においてＨＤＫＣユニット＃０）に着目する。ＨＤＫＣユニット＃０が、ＨＤＫＣユニット＃Ｈ０及び＃Ｈ９で構成されているとする。
【０３４０】
各ＨＤＫＣが、図３４Ａ、図３４Ｂ、図３５及び図３６に示す管理情報を記憶して良い。
【０３４１】
図３４Ａは、実施例２に係る担当ＣＰＵテーブル３２１１（＃Ｈ０）の構成を示す。
【０３４２】
担当ＣＰＵテーブル３２１１は、ＬＵ毎に、担当ＣＰＵの使用率のうちの、当該ＬＵについての使用率を表す情報を有する。具体的には、例えば、担当ＣＰＵテーブル３２１１（＃Ｈ０）は、ＬＵ毎に、情報３１０１〜３１０３の他に（図３１参照）、ＬＵ別のＣＰＵ使用率３４０４を有する。ＣＰＵ使用率３１０２及び３４０４は、定期的に又は不定期的に、それに対応するＣＰＵ、又は、ＨＤＫＣユニット＃０内の特定のＣＰＵ（マスタＣＰＵ）によって更新されて良い。
【０３４３】
図３４Ａのテーブル＃Ｈ０によれば、次のことがわかる。すなわち、ＣＰＵ＃Ｈ００の使用率が、６０％である。そのうち、ＬＵ＃０についての使用率が、４０％であり、ＬＵ＃４についての使用率が、２０％であり、ＬＵ＃８についての使用率が、０％である。
【０３４４】
このテーブル＃Ｈ０は、定期的に（又は不定期的に）、ＨＤＫＣユニット＃０（又はＨＤＫＣ＃Ｈ０）が有する少なくとも１つのＣＰＵによって更新されて良い。本実施例では、マスタＣＰＵによって更新される。マスタＣＰＵは、ＬＵに対するＩ／Ｏ処理以外の特定の処理（例えば実施例２に係る負荷分散）を担当するＣＰＵである。マスタＣＰＵは、ＬＵに対するＩ／Ｏ処理も行って良い。
【０３４５】
また、ＬＵについての負荷は、そのＬＵについてのＣＰＵ使用率に代えて又は加えて、他種の負荷指標、例えば、単位時間当たりのＩ／Ｏ数（例えば、リード数、ライト数、又はその合計）によって表されても良い。
【０３４６】
図３４Ｂは、負荷閾値管理テーブル３２１４（＃Ｈ０）の構成を示す。
【０３４７】
負荷閾値管理テーブル３２１４は、高負荷であるか低負荷であるかの基準を表す。テーブル３２１４によれば、その基準は、ＣＰＵ及びＤＫＣの両方について用意されている。しかし、その基準は、他種の要素（例えばＦＥポート）について用意されても良い。また、テーブル３２１４の内容は、複数のＨＤＫＣで同じであっても異なっていても良い。
【０３４８】
図３４Ｂのテーブル＃Ｈ０によれば、次のことがわかる。例えば、ＣＰＵ＃Ｈ０は、ＣＰＵ使用率が７０％以上であれば、高負荷のＣＰＵであり、ＣＰＵ使用率が５０％以下であれば、低負荷のＣＰＵである。また、ＨＤＫＣ＃Ｈ０は、全てのＣＰＵ＃Ｈ０のＣＰＵ使用率に基づく使用率（例えば、ＣＰＵ使用率の平均）が４０％以下であれば、低負荷のＤＫＣである。
【０３４９】
図３４Ｂのテーブル＃Ｈ０に記載の閾値は、ユーザインタフェース（例えば、ＧＵＩ（Graphical  User  Interface））を介して、管理者から変更されても良い。
【０３５０】
また、ＨＤＫＣにおいて高負荷のＣＰＵ（及び／又は、低負荷のＣＰＵ）は、そのＨＤＫＣにおいて負荷が相対的に高い（又は低い）ＣＰＵで良い。例えば、ＨＤＫＣが有する複数のＣＰＵの負荷（ＣＰＵ使用率）の分布を基に、そのＨＤＫＣにおける高負荷のＣＰＵ（又は低負荷のＣＰＵ）が決定されてよい。
【０３５１】
図３５は、ポート負荷管理テーブル３２１２（＃Ｈ０）の構成を示す。
【０３５２】
ポート負荷管理テーブル３２１２は、各ＦＥポートの負荷に関する情報を有する。具体的には、例えば、ポート負荷管理テーブル＃Ｈ０は、ＦＥポートに所属するＬＵ毎に、下記の情報、
（＊）ＬＵの所属先のＦＥポートの識別子であるポートＩＤ３５０１、
（＊）ＬＵの所属先のＦＥポートに所属している全ＬＵについてのＣＰＵ使用率３５０４に基づく値（例えば合計）である、ポート別のＣＰＵ使用率３５０２、
（＊）ＦＥポートに所属するＬＵの識別子である所属ＬＵ  ＩＤ３５０３、
（＊）ＬＵ別のＣＰＵ使用率３５０４、
（＊）ＬＵの担当ＣＰＵの識別子である担当ＣＰＵ  ＩＤ３５０５、
を有する。
【０３５３】
各ＣＰＵ使用率３５０２及び３５０４は、定期的に又は不定期的に、それに対応するＣＰＵ、又は、ＨＤＫＣユニット＃０内のマスタＣＰＵによって更新されて良い。
【０３５４】
図３５のテーブル＃Ｈ０によれば、次のことがわかる。すなわち、ＦＥポート＃Ｈ０Ａに、ＬＵ＃０及び＃１が所属している。ＬＵ＃０についてのＣＰＵ使用率は４０％であり、ＬＵ＃１についてのＣＰＵ使用率は３０％であり、それ故、ＦＥポート＃Ｈ０ＡについてのＣＰＵ使用率は、７０％（４０％＋３０％）である。また、ＬＵ＃０の担当ＣＰＵは、ＣＰＵ＃Ｈ００であり、ＬＵ＃１の担当ＣＰＵは、ＣＰＵ＃Ｈ０１である。
【０３５５】
図３６は、テンポラリＬＵ管理テーブル３２１３（＃Ｈ０）の構成を示す。
【０３５６】
テンポラリＬＵ管理テーブル３２１３は、テンポラリＬＵに関する情報を有する。「テンポラリＬＵ」とは、予め（又は負荷分散時に）生成されるＬＵであり、負荷分散に利用されるＬＵである。具体的には、例えば、テンポラリＬＵは、高負荷のＣＰＵが担当するＬＵ（以下、移動元ＬＵ）内のデータの移動先として選択され得るＬＵである。テンポラリＬＵについてもティアレベルが算出される。或るＨＤＫＣから第３接続ＨＤＫＣへの負荷分散の際には、移動元ＬＵ（或るＨＤＫＣ内のＬＵ）が属するティア（ティアレベル又はティアレベル範囲）と同じティア（ティアレベル又はティアレベル範囲）に属するテンラリＬＵが選択される。
【０３５７】
テンポラリＬＵ管理テーブル３２１３は、具体的には、例えば、テンポラリＬＵ毎に、下記の情報、
（＊）テンポラリＬＵの基になっているＰＤＥＶの種別を表すＰＤＥＶ種別３６０１、
（＊）テンポラリＬＵの基になっているＰＤＥＶ種別に基づく１以上のテンポラリＬＵの記憶容量の合計であるトータル容量３６０２、
（＊）テンポラリＬＵの識別子であるテンポラリＬＵ  ＩＤ３６０３、
（＊）テンポラリＬＵの記憶容量であるテンポラリＬＵ容量３６０４、
を有する。
【０３５８】
図３６のテーブル＃Ｈ０によれば、次のことがわかる。１以上のＳＳＤに基づく１以上のテンポラリＬＵのトータル容量が３５８４ＧＢである。テンポラリＬＵ＃１０００は、ＳＳＤに基づく１つのＬＵであり、その記憶容量は１０２４ＧＢである。
【０３５９】
図３４Ａ〜図３６に示した複数のテーブル＃Ｈ０のうちの全てを、全てのＣＰＵ＃Ｈ０が参照／更新できるよう、ＨＤＫＣ＃Ｈ０内の特定のコントローラモジュール（＃Ｈ００）内のＣＭ（＃Ｈ００）に配置されて良い（或いは、共有情報管理装置３０１に配置されて良い）。特定のＣＰＵ＃Ｈ０（例えばマスタＣＰＵ）のＬＭ＃Ｈ０が、他の全てのＣＰＵ＃Ｈ０から参照／更新が可能であれば、図３４Ａ〜図３６に示した複数のテーブル＃Ｈ０が、特定のＣＰＵ（＃Ｈ００）に接続されたＬＭ（＃Ｈ００）に配置されても良い。また、各コントローラモジュール内のＬＭ及び／又はＣＭが、図３４Ａ〜図３６に示した複数のテーブル＃Ｈ０における、そのコントローラモジュールに関わるテーブル部分のみを記憶しても良い。
【０３６０】
以下、本実施例で行われる負荷分散制御処理を説明する。その処理は、例えば、定期的に又は不定的に開始される。以下の説明では、ＨＤＫＣ＃Ｈ０が負荷分散制御処理を行うことを例に採る。しかし、負荷分散制御処理は、全てのＨＤＫＣが行うことができる。また、以下の説明では、主に、マスタＣＰＵによって処理が行われるが、その処理は、例えば、マスタＣＰＵが所定のコンピュータプログラムを実行することにより、行われる。
【０３６１】
本実施例に係る負荷分散制御処理は、下記の３つ、
（１）負荷分散を実行するか否かを判断する処理（負荷分散判断処理）、
（２）第１接続ＨＤＫＣへ負荷を分散する処理（又は１つのＨＤＫＣ内での負荷を分散する処理）（以下、第１種の負荷分散処理）、
（３）第３接続ＨＤＫＣへ負荷を分散する処理（以下、第２種の負荷分散処理）、
で構成される。
【０３６２】
図３７は、負荷分散判断処理の流れを示す。
【０３６３】
Ｓ３７０１で、マスタＣＰＵが、ＨＤＫＣユニット＃０内の全ての担当ＣＰＵテーブル（＃０及び＃９）を基に、各ＣＰＵのＣＰＵ使用率３１０２を特定する。なお、マスタＣＰＵに代えて、ＨＤＫＣユニット＃０（又は各ＨＤＫＣ）内の各ＣＰＵが、それぞれ、負荷分散制御処理を開始しても良い。但し、各ＣＰＵが負荷分散制御処理を行う場合、動作的な排他が必要になると考えられる。なぜなら、複数のＣＰＵで同時に負荷分散制御処理を行うことで、同一の管理情報を重複して更新してしまうことが考えられるからである。そのため、本実施例では、マスタＣＰＵが、負荷分散制御処理を行う。
【０３６４】
Ｓ３７０２で、マスタＣＰＵが、ＨＤＫＣユニット＃０内の各ＣＰＵのＣＰＵ使用率３１０２と、負荷閾値管理テーブル（＃Ｈ０及び＃Ｈ９）とを基に、高負荷のＣＰＵがＨＤＫＣユニット＃０にあるか否かを判断する。ＣＰＵ使用率３１０２がＣＰＵの高負荷閾値を超えているＣＰＵ（＃Ｈ０又は＃Ｈ９）が、高負荷のＣＰＵである。
【０３６５】
Ｓ３７０２の判断の結果が否定的の場合（高負荷のＣＰＵがない場合）（Ｓ３７０２：Ｎｏ）、マスタＣＰＵが、負荷分散判断の処理を、終了する。
【０３６６】
Ｓ３７０２の判断の結果が肯定的の場合（高負荷のＣＰＵがある場合）（Ｓ３７０２：Ｙｅｓ）、Ｓ３７０３で、マスタＣＰＵが、ＨＤＫＣユニット＃０内の各ＣＰＵのＣＰＵ使用率３１０２と、負荷閾値管理テーブル（＃Ｈ０及び＃Ｈ９）とを基に、低負荷のＣＰＵがＨＤＫＣユニット＃０にあるか否かを判断する。ＣＰＵ使用率３１０２がＣＰＵの低負荷閾値未満であるＣＰＵ（＃Ｈ０又は＃Ｈ９）が、低負荷のＣＰＵである。
【０３６７】
Ｓ３７０３の判断の結果が肯定的（低負荷のＣＰＵがある場合）（Ｓ３７０３：Ｙｅｓ）、図３８に示す処理、すなわち、第１種の負荷分散処理が行われる。
【０３６８】
Ｓ３７０３の判断の結果が否定的の場合（低負荷のＣＰＵがない場合）（Ｓ３７０３：Ｎｏ）、図４０に示す処理、すなわち、第２種の負荷分散処理が行われる。
【０３６９】
図３７によれば、ＨＤＫＣユニット＃０に高負荷のＣＰＵがあっても、そのＨＤＫＣユニット＃０に低負荷のＣＰＵがなければ、そのＨＤＫＣユニット＃０において、第１種の負荷分散処理は行われない。なお、ＣＰＵの負荷（ＣＰＵ使用率）が高負荷であるか低負荷であるかは、例えば、負荷閾値管理テーブル３２１４（図３４Ｂ参照）に記載の高負荷閾値及び低負荷閾値（いずれもＣＰＵ使用率の閾値）を基に決定される。高負荷閾値は、低負荷閾値よりも高い。
【０３７０】
また、図３７によれば、低負荷のＣＰＵが、ＨＤＫＣユニット＃０に直接的又は間接的に接続されている他のＨＤＫＣユニットにあっても、ＨＤＫＣユニット＃０にあれば、第３接続ＨＤＫＣへの負荷分散よりも、第１接続ＨＤＫＣへの負荷分散（又は１つのＨＤＫＣ内での負荷分散）が優先的に行われる。つまり、外部バスを介した負荷分散よりも内部バスを介した負荷分散が優先される。これにより、負荷分散にかかる時間を短くすることが期待できる。なお、必ずしも、第１接続ＨＤＫＣへの負荷分散（又は１つのＨＤＫＣ内での負荷分散）が優先されなくても良い。
【０３７１】
以下、第１種の負荷分散処理と、第２種の負荷分散処理とを説明する。
【０３７２】
＜第１種の負荷分散処理＞。
【０３７３】
図３８は、第１種の負荷分散処理の流れを示す。
【０３７４】
Ｓ３８０１で、マスタＣＰＵが、ＨＤＫＣユニット＃０内の１以上の高負荷ＣＰＵの中から、ＣＰＵ使用率３１０２が最高のＣＰＵを、移動元として選択し、且つ、ＨＤＫＣユニット＃０内の１以上の低負荷ＣＰＵの中から、ＣＰＵ使用率３１０２が最低のＣＰＵを、移動先として選択する。図３９Ａの例によれば、移動元のＣＰＵとして、ＣＰＵ＃Ｈ０２が選択され、移動先のＣＰＵとして、ＣＰＵ＃Ｈ０１が選択される。なお、図３９Ａの例によれば、移動元ＣＰＵも移動先ＣＰＵもＨＤＫＣ＃Ｈ０に存在するが、それらのＣＰＵのうちの少なくとも１つが、ＨＤＫＣユニット＃０内の別のＨＤＫＣに存在するＣＰＵでも良い。
【０３７５】
Ｓ３８０２で、マスタＣＰＵが、ＨＤＫＣユニット＃０内の全ての担当ＣＰＵテーブルを基に、移動元ＣＰＵ（＃Ｈ０２）のＣＰＵ使用率３１０２と移動先ＣＰＵ（＃Ｈ０１）の使用率３１０２が移動後（第１種の負荷分散処理の完了後）に平均化するＬＵを選択する。別の言い方をすれば、マスタＣＰＵは、移動元ＣＰＵ（＃Ｈ０２）が担当ＣＰＵである複数のＬＵ（＃２、＃３、＃６、＃７）から、担当ＣＰＵが移動元ＣＰＵ（＃Ｈ０２）から移動先ＣＰＵ（＃Ｈ０１）に変わることで移動元ＣＰＵ（＃Ｈ０２）のＣＰＵ使用率３１０２と移動先ＣＰＵ（＃Ｈ０１）のＣＰＵ使用率３１０２が実質的に等しくなるようなＬＵを選択する。「ＣＰＵ使用率３１０２が実質的に等しい」とは、例えば、ＣＰＵ使用率３１０２の差がｘ％以下（例えばｘ＝５）であることを意味する。図３９Ａの例によれば、ＣＰＵ使用率３４０４が「２０％」であるＬＵ＃７の担当ＣＰＵがＣＰＵ＃Ｈ０２からＣＰＵ＃Ｈ０１に変われば、ＣＰＵ＃Ｈ０１のＣＰＵ使用率３１０２が、「４０％」から「６０％」に増加すると推測され、且つ、ＣＰＵ＃Ｈ０２のＣＰＵ使用率３１０２が、「８５％」から「６５％」に低下すると推測される。つまり、移動元ＣＰＵ＃Ｈ０２のＣＰＵ使用率３１０２と移動先ＣＰＵ＃Ｈ０１のＣＰＵ使用率３１０２が、実質的に等しくなると推測される。従って、図３９Ａの例によれば、このＳ３８０２で、ＬＵ＃７が選択される。
【０３７６】
Ｓ３８０３で、マスタＣＰＵが、移動元ＣＰＵ（＃Ｈ０２）及び移動先ＣＰＵ（＃Ｈ０１）に、ＬＵ移動指示（移動対象ＬＵ（＃７）を移動することの指示）を出す。
【０３７７】
Ｓ３８０４で、移動先ＣＰＵ（＃Ｈ０１）は、その指示を受け、移動元ＣＰＵ（＃Ｈ０２）のＬＭ（＃Ｈ０２）に記憶されている管理情報のうち、移動対象ＬＵ（＃７）に関する個別情報を、移動元のＬＭ（＃Ｈ０２）から、移動先ＣＰＵ（＃Ｈ０１）のＬＭ（＃Ｈ０１）にコピーする。コピーが完了した時点で、移動先ＣＰＵ（＃Ｈ０１）が、移動元ＣＰＵ（＃Ｈ０２）に、コピー終了を報告する。移動元ＣＰＵ（＃Ｈ０２）は、コピー終了の報告を受けた時点で、移動元のＬＭ（＃Ｈ０２）から、上記コピーされた個別情報を削除する。これにより、移動対象ＬＵ（＃７）に関する個別情報の移動が完了する。ここで、「移動対象ＬＵに関する個別情報」とは、例えば、移動対象ＬＵの担当ＣＰＵのみが参照／更新可能な情報、例えば、ＣＭの管理情報、或いは、ＬＵ（＃７）に対応した仮想ページ管理テーブルなどである。
【０３７８】
Ｓ３８０５で、マスタＣＰＵが、移動対象ＬＵ（＃７）の担当ＣＰＵを、移動元ＣＰＵ（＃Ｈ０２）から移動先ＣＰＵ（＃Ｈ０１）に変更する。図３９Ｂの例によれば、マスタＣＰＵが、下記、
（＊）移動対象ＬＵ（＃７）に対応したＬＵ−ＩＤ３１０３及びＣＰＵ使用率３４０４を、担当ＣＰＵ＃Ｈ０２に代えて、担当ＣＰＵ＃Ｈ０１に関連付ける、
（＊）移動元ＣＰＵ＃Ｈ０２に対応したＣＰＵ使用率３１０２から移動対象ＬＵ（＃７）に対応したＣＰＵ使用率３４０４を減算し、且つ、移動先ＣＰＵ＃Ｈ０１に対応したＣＰＵ使用率３１０２に移動対象ＬＵ（＃７）に対応したＣＰＵ使用率３４０４を加算する、
を行う。
【０３７９】
このように、第１種の負荷分散処理によれば、ＨＤＫＣユニット＃０では、各ＣＰＵが、そのＣＰＵを有しない他のＨＤＫＣ内のハードウェア資源を、そのＣＰＵを有するＨＤＫＣ内のハードウェア資源と同様に利用することができる。第１種の負荷分散処理によれば、管理情報又はその一部の移動だけで、ＬＵの担当ＣＰＵを変更する（負荷分散を行う）ことができる。
【０３８０】
＜第２種の負荷分散処理＞。
【０３８１】
以下、第２種の負荷分散処理を説明する。なお、以下の説明では、ＨＤＫＣ＃Ｈ０に第３の接続形態で接続されているＨＤＫＣを、ＨＤＫＣ＃Ｈ１とする。
【０３８２】
ＨＤＫＣ＃Ｈ０内の高負荷ＣＰＵの負荷を分散する方法として、高負荷ＣＰＵが担当するＬＵを、第３接続ＨＤＫＣ＃Ｈ１に移動する方法が考えられる。
【０３８３】
このようなＬＵ移動が行われても、サーバからこれまでと同じようにしてそのＬＵにアクセスできるようにすることが望ましい。サーバが発行するログインコマンド、Ｉ／Ｏコマンド、その他のＳＣＳＩ（Small  Computer  System  Interface）やＦＣ等に従ったコマンドでは、例えば、ポート識別情報（例えばＷＷＮ（World  Wide  Name）、Ｎ＿Ｐｏｒｔ＿Ｎａｍｅ、Ｎ＿Ｐｏｒｔ＿ＩＤ、Ｓ＿ＩＤ）や、ＬＵ識別情報（例えばＬＵＮ）が指定される。このため、ＬＵの移動前と移動後で、ポート識別情報とＬＵ識別情報が変わらないことが好ましい。
【０３８４】
また、第３接続の複数のＨＤＫＣユニット１４１やＨＤＫＣは、例えば外部バスで接続されており、中距離又は遠距離のサイトに設置されているので、第１接続のようなＬＵ単位の細かな負荷分散を頻繁に繰り返していたのではそれによる処理負荷が大きくなってしまう。したがって、中距離又は遠距離のサイトに設置されている複数のＨＤＫＣユニット１４１やＨＤＫＣにおいて、本来的に負荷分散の必要な状態（閾値）に達した場合に、複数のＬＵを纏めて（複数のＬＵ単位、例えば、ポート単位）負荷分散処理を行うことが良い。以下においては、ポート単位で負荷分散を行う処理について記載するが、本願はより上位の概念である複数のＬＵを纏めて負荷分散を行うことも良い。
【０３８５】
具体的には、例えば、図６５Ａに示すように、サーバ＃０が、ターゲットポート＃Ｈ００に属する２つのＬＵ＃０及び＃１を認識しているとする。
【０３８６】
ここで、内部コントローラ＃Ｈ０が、図６５Ｂに示すように、ＬＵ＃０内のデータを、ＨＤＫＣ＃Ｈ１内のＬＵ＃３に移動することで、ＬＵ＃０を移動したとする。この場合、ＬＵ＃０の移動前と移動後で、ポート識別情報とＬＵ識別情報が変わらないようにするためには、ＬＵ＃０を仮想ＬＵ＃０とし、仮想ＬＵ＃０にＬＵ＃３をマッピングすることが好ましい。なぜなら、サーバ＃０は、ターゲットポート＃Ｈ００に割り当てられているポート識別情報とＬＵ＃０に割り当てられているＬＵ識別情報とを指定したＩ／Ｏコマンドを発行すれば、仮想ＬＵ＃０に対するＩ／Ｏが行われ、それ故、仮想ＬＵ＃０にマッピングされているＬＵ（ＬＵ＃０に記憶されていたデータを記憶するＬＵ）＃３に対するＩ／Ｏが行われるからである。
【０３８７】
しかし、この場合、ＬＵ＃０の移動前と移動後で、ＬＵ＃０に関する接続形態が変わってしまう。すなわち、ＬＵ＃０の移動前は、外部バス６０１を介したＩ／Ｏは不要であるが、ＬＵ＃０の移動後は、外部バス６０１を介したＩ／Ｏが必要になる。つまり、ＬＵ＃０の移動前と移動後で、ＬＵ＃０が属するティア（ティアレベル又はティアレベル範囲）が変わってしまう。ＬＵ＃０が属するティアが変わると、ＬＵ＃０に対するＩ／Ｏの性能が変わってしまう。
【０３８８】
ティアを変えないようにする方法として、例えば、ＬＵ＃３を、ＨＤＫＣ＃Ｈ１内のＦＥポートに割り当て（所属させ）、ＨＤＫＣ＃Ｈ１が、サーバ＃０からＬＵ＃３に対するＩ／Ｏコマンドを受け付けるようにする方法が考えられる。この方法であれば、外部バス６０１の経由が不要である。しかし、この方法によれば、サーバ＃０は、ターゲットポート＃Ｈ００以外のポートの識別情報を認識する必要がある。
【０３８９】
そこで、本実施例に係る第２種の負荷分散処理によれば、ＬＵの移動前後でそのＬＵが属するティア（ティアレベル又はティアレベル範囲）が変わらず、且つ、ＬＵの移動前後でポート識別情報及びＬＵ識別情報が変わらない。具体的には、例えば、第２種の負荷分散処理では、ポート単位の負荷分散が行われる。
【０３９０】
図３２及び図３３を参照して、ポート単位の負荷分散を説明する。
【０３９１】
図３２に示すように、各ＨＤＫＣが、テンポラリＬＵグループ３２０３を有する。グループ３２０３は、複数のテンポラリＬＵ３２０１で構成されている。テンポラリＬＵ３２０１は、ＦＥポートに割り当てられていないＬＵであり、且つ、サーバが入出力するデータが格納されていないＬＵである。
【０３９２】
テンポラリＬＵグループ３２０３は、ティア（例えばティアレベル又はティアレベル範囲）が同じ複数のテンポラリＬＵで構成されていても良いし、ティアが異なる複数のテンポラリＬＵで構成されていても良い。前者の場合、ティア毎に、テンポラリＬＵグループ３２０３が存在しても良い。
【０３９３】
いろいろな種類のテンポラリＬＵがあることが好ましい。例えば、ＰＤＥＶ種別が異なる複数のテンポラリＬＵや、ＬＵ種類（例えば、通常のＬＵ、ＤＰ−ＬＵ、第２の接続形態に従う仮想ＬＵ）が異なる複数のテンポラリＬＵがあって良い。いろいろな種類のテンポラリＬＵがあれば、異なるティアに属する複数のテンポラリＬＵがあるということなので、第２種の負荷分散処理において、移動元ＬＵの移動先とするテンポラリＬＵ（移動元ＬＵが属するティアと同じティアに属するテンポラリＬＵ）が見つかる可能性が高まる。
【０３９４】
ＦＥポートには、ＬＵ（通常のＬＵ、仮想ＬＵ、或いは、ＤＰ−ＬＵ）がマッピングされている。以下、説明を簡単にするため、図３２において、ＦＥポートに割り当てられているＬＵは、自ＤＫＣに従うＬＵ、或いは、第１の接続形態に従うＬＵとする。しかし、ＦＥポートに、第２の接続形態に従う仮想ＬＵ、及び／又は、第３の接続形態に従う仮想ＬＵが割り当てられていても良い。
【０３９５】
ＨＤＫＣが、空きＦＥポートを有する。空きＦＥポートは、第２種の負荷分散処理で使用され得るＦＥポートであり、ＬＵが１つも割り当てられていないＦＥポートである。図３２の例によれば、ＨＤＫＣ＃Ｈ１のＦＥポート＃Ｈ１Ａが、空きＦＥポートである。なお、ＨＤＫＣ＃Ｈ０については、空きＦＥポートが図示されていないが、ＨＤＫＣ＃Ｈ０も、空きＦＥポートを有しても良い。
【０３９６】
図３３の例によれば、ポート単位の負荷分散は、例えば、次のように行われる。
（３３−１）ＨＤＫＣ＃Ｈ０が有する複数のＦＥポートから、対象ＦＥポートが選択される。対象ＦＥポートは、そのＦＥポートに属する全てのＬＵ内のデータがＨＤＫＣ＃Ｈ１に移動することによって、ＨＤＫＣ＃Ｈ０のＤＫＣ負荷（全てのＣＰＵ＃Ｈ０のＣＰＵ使用率３１０２の平均）とＨＤＫＣ＃Ｈ１のＤＫＣ負荷（全てのＣＰＵ＃Ｈ１のＣＰＵ使用率３１０２の平均）が平均化されるようなＦＥポートである。図３３の例によれば、ＦＥポート＃Ｈ０Ｂが選択される。ＦＥポート＃Ｈ０Ｂに属する全てのＬＵ＃２、＃３、＃４内のデータがＨＤＫＣ＃Ｈ１に移動すれば、ＨＤＫＣ＃Ｈ０のＤＫＣ負荷とＨＤＫＣ＃Ｈ１のＤＫＣ負荷が平均化される。
（３３−２）ＨＤＫＣ＃Ｈ１から空きＦＥポート＃Ｈ１Ａが選択される。
（３３−３）ＬＵ＃２の移動先のＬＵとして、ＬＵ＃２が属するティアと同じティア（ティアレベル又はティアレベル範囲）に属するテンポラリＬＵ＃２００２が選択される。テンポラリＬＵ＃２００２の記憶容量は、ＬＵ＃２の記憶容量以上である。
（３３−４）同様に、ＬＵ＃３（＃４）の移動先のＬＵとして、ＬＵ＃３（＃４）が属するティアと同じティアに属するテンポラリＬＵ＃２００１（＃２０００）が選択される。ＬＵ＃２００１（＃２０００）の記憶容量は、テンポラリＬＵ＃３（＃４）の記憶容量以上である。
（３３−５）ＬＵ＃２からテンポラリＬＵ＃２００２にデータが移動する。同様に、ＬＵ＃３（＃４）からテンポラリＬＵ＃２００１（＃２０００）にデータが移動する。
（３３−６）テンポラリＬＵ＃２０００、＃２００１及び＃２００２が、空きＦＥポート＃Ｈ１Ａに割り当てられる。
（３３−７）対象ＦＥポート＃Ｈ０Ｂに割り当てられていたポート識別情報が、対象ＦＥポート＃Ｈ０Ｂに代えて空きＦＥポート＃Ｈ１Ａに割り当てられる。移動元ＬＵ＃２に割り当てられていたＬＵ識別情報（例えばＬＵＮ）が、ＬＵ＃２に代えてＬＵ＃２００２に割り当てられる。同様に、移動元ＬＵ＃３（＃４）に割り当てられていたＬＵ識別情報が、ＬＵ＃３（＃４）に代えてＬＵ＃２００１（＃２０００）に割り当てられる。
【０３９７】
このような第２種の負荷分散処理の完了後、サーバ＃０は、第２種の負荷分散処理の開始前と同様の方法で、ＬＵに対するＩ／Ｏを行うことができる。例えば、サーバ＃０は、ＦＥポート＃Ｈ０Ｂに割り当てられていたポート識別情報とＬＵ＃２に割り当てられていたＬＵ識別情報とを有するＩ／Ｏコマンドを発行することにより、ＦＥポート＃Ｈ１Ａに割り当てられたＬＵ＃２００２に対するＩ／Ｏを行うことができる。
【０３９８】
図４０乃至４２を参照して、第２種の負荷分散処理の流れを説明する。その際、適宜、図３２及び図３３を参照する。なお、図４５Ａ、４５Ｂ、４６Ａ、４６Ｂは、第２種の負荷分散処理の開始前のテーブルを示し、図４７Ａ、４７Ｂ、４８Ａ、４８Ｂは、第２種の負荷分散処理における更新後のテーブルを示す。
【０３９９】
図４０に示すように、Ｓ４００１で、マスタＣＰＵ＃Ｈ０が、ＣＰＵ負荷情報コマンドをＨＤＫＣ＃Ｈ１に送信する。ＨＤＫＣ＃Ｈ１において、Ｆ−Ｉ／Ｆ＃Ｈ１が、ＣＰＵ負荷情報コマンドを受信し、そのコマンドを、マスタＣＰＵ＃Ｈ１に転送する。ＣＰＵ負荷情報コマンドは、担当ＣＰＵテーブルが有する情報を取得するためのコマンドである。
【０４００】
すなわち、ＨＤＫＣ＃Ｈ０とＨＤＫＣ＃Ｈ１は第３の接続形態で接続されているので、ＣＰＵ＃Ｈ０は、ＨＤＫＣ＃Ｈ１内の管理情報を、直接参照できない（内部バス２２７を介してアクセスするかのようにして参照することはできない）。このため、ＣＰＵ＃Ｈ０は、ＨＤＫＣ＃Ｈ１内の管理情報が有する情報を、コマンド（或いは他の方法）により取得する。
【０４０１】
なお、以下の説明では、第２種の負荷分散処理に関わるコマンドは、マスタＣＰＵ＃Ｈ０及び＃Ｈ１間で行われることとする。しかし、その種のコマンドは、マスタＣＰＵ以外のＣＰＵとやり取りされても良い。コマンドは、ＨＤＫＣ＃Ｈ０のイニシエータ／ターゲットポートと、ＨＤＫＣ＃Ｈ１のイニシエータ／ターゲットポートとを介して、送受信される。
【０４０２】
さて、Ｓ４００２で、マスタＣＰＵ＃Ｈ１は、ＣＰＵ負荷情報コマンドを受信し、担当ＣＰＵテーブル＃Ｈ１が有する情報（ＨＤＫＣ＃Ｈ１内の全てのＣＰＵ＃Ｈ１の情報）３１０１、３１０２、３１０３及び３４０４を取得し、それらの情報をＨＤＫＣ＃Ｈ０に送信する。
【０４０３】
Ｓ４００３で、マスタＣＰＵ＃Ｈ０は、ＨＤＫＣ＃Ｈ１からＳ４００２で送信された情報を受信し、その情報を基に、ＨＤＫＣ＃Ｈ１内の全てのＣＰＵ＃Ｈ１のＣＰＵ使用率３１０２の平均（つまり、ＨＤＫＣ＃Ｈ１のＤＫＣ負荷）を算出する。
【０４０４】
Ｓ４００４で、マスタＣＰＵ＃Ｈ０は、Ｓ４００３で算出されたＤＫＣ負荷を基に、ＨＤＫＣ＃Ｈ１が低負荷ＤＫＣか否かを判断する。Ｓ４００３で算出されたＤＫＣ負荷が、ＤＫＣ低負荷閾値（図３４Ｂ参照）未満であれば、ＨＤＫＣ＃Ｈ１は、低負荷ＤＫＣである。
【０４０５】
Ｓ４００４の判断の結果が否定的であれば（Ｓ４００４：Ｎｏ）、第２種の負荷分散処理が終了する。なお、複数の第３接続ＨＤＫＣがあれば、マスタＣＰＵ＃Ｈ０は、Ｓ４００１で、複数の第３接続ＨＤＫＣにＣＰＵ負荷情報コマンドを送信して良い。全ての第３接続ＨＤＫＣが低負荷ＤＫＣでない場合に、Ｓ４００４：Ｎｏとなって良い。
【０４０６】
Ｓ４００４の判断の結果が肯定的であれば（つまり、ＨＤＫＣ＃Ｈ１が低負荷ＤＫＣであれば）（Ｓ４００４：Ｙｅｓ）、下記のＳ４００５以降が行われる。なお、複数の低負荷ＤＫＣ（第３接続ＨＤＫＣ）があれば、それら複数の低負荷ＤＫＣのうちの、ＤＫＣ負荷が最も小さいＨＤＫＣが、下記のＳ４００５以降の対象とされて良い。なお、この例では、ＨＤＫＣ＃Ｈ０の第３接続ＨＤＫＣはＨＤＫＣ＃Ｈ１のみであり、且つ、図４６Ａ及び図４６Ｂに示す例によれば、ＨＤＫＣ＃Ｈ１のＤＫＣ負荷は、１３％であり、それは、ＤＫＣ低負荷閾値「４０％」（図３４Ｂ参照）未満なので、ＨＤＫＣ＃Ｈ１が、Ｓ４００５以降の対象となる低負荷ＤＫＣである。
【０４０７】
Ｓ４００５で、マスタＣＰＵ＃Ｈ０は、ＨＤＫＣ＃Ｈ０が有する複数のＦＥポートから、下記のポート条件（ｘ１）及び（ｘ２）のうちの少なくとも１つを満たすＦＥポート（例えば、少なくとも（ｘ１）を満たすＦＥポート）、
（ｘ１）割り当てられている全てのＬＵがＨＤＫＣ＃Ｈ１に移動すれば、ＨＤＫＣ＃Ｈ０のＤＫＣ負荷とＨＤＫＣ＃Ｈ１のＤＫＣ負荷とが平均化する、
（ｘ２）高負荷ＣＰＵ＃Ｈ０２（ＣＰＵ使用率３１０２がＣＰＵ高負荷閾値を超えているＣＰＵ）（図４６Ａ参照）が担当するＬＵが割り当てられており、割り当てられている全てのＬＵがＨＤＫＣ＃Ｈ１に移動すれば、高負荷ＣＰＵ＃Ｈ０が高負荷でなくなる、
を、移動元として選択する。具体的には、例えば、下記が行われる。
（＊）マスタＣＰＵ＃Ｈ０が、担当ＣＰＵテーブル＃０（図４６Ａ参照）を基に、ＨＤＫＣ＃Ｈ０のＤＫＣ負荷（ＨＤＫＣ＃Ｈ０内の全てのＣＰＵ＃Ｈ０のＣＰＵ使用率３１０２の平均）を算出する。図４６Ａの例によれば、そのＤＫＣ負荷は、「７１％」である。
（＊）マスタＣＰＵ＃Ｈ０が、ポート負荷管理テーブル＃Ｈ０（図４５Ａ参照）と、ＨＤＫＣ＃Ｈ０のＤＫＣ負荷「７１％」と、ＨＤＫＣ＃Ｈ１のＤＫＣ負荷「１３％」とを基に、ＨＤＫＣ＃Ｈ０が有する複数のＦＥポートから、上記（ｘ１）及び（ｘ２）のうちの少なくとも１つを満たすＦＥポートを、移動元として選択する。そのようなＦＥポートとして、ここでは、ＦＥポート＃Ｈ０Ｂ（ポート別ＣＰＵ使用率３５０２「８５％」）（図４５Ａ参照）が選択される。ＦＥポート＃Ｈ０Ｂに割り当てられている全てのＬＵがＨＤＫＣ＃Ｈ１に移動すれば、ＨＤＫＣ＃Ｈ０のＤＫＣ負荷と、ＨＤＫＣ＃Ｈ１のＤＫＣ負荷が平均化され、且つ、高負荷ＣＰＵ＃Ｈ０２が高負荷でなくなる（図４６Ａ、４６Ｂ、４８Ａ及び４８Ｂ参照）。具体的には、ＨＤＫＣ＃Ｈ０のＤＫＣ負荷が、「７１％」から「４３％」に下がり、ＨＤＫＣ＃Ｈ１のＤＫＣ負荷が、「１３％」から「４１％」に上がり、それ故、ＤＫＣ負荷が平均化される（ＤＫＣ負荷の差がｘ％未満（ｘは整数（例えば５）））。また、ＣＰＵ＃Ｈ０２の負荷が、「８５％」から「２５％」（ＣＰＵ高負荷閾値未満のＣＰＵ使用率３１０２（図３４Ｂ参照））に下がる。
【０４０８】
次に、図４１に示すように、Ｓ４１０１で、マスタＣＰＵ＃Ｈ０が、ポート負荷情報コマンドをＨＤＫＣ＃Ｈ１に送信する。ＨＤＫＣ＃Ｈ１において、Ｆ−Ｉ／Ｆ＃Ｈ１が、ポート負荷情報コマンドを受信し、そのコマンドを、マスタＣＰＵ＃Ｈ１に転送する。ポート負荷情報コマンドは、ポート負荷管理テーブルが有する情報を取得するためのコマンドである。
【０４０９】
次に、Ｓ４１０２で、マスタＣＰＵ＃Ｈ１は、ポート負荷情報コマンドを受信し、ポート負荷管理テーブル＃Ｈ１が有する情報（ＨＤＫＣ＃Ｈ１内の全てのＦＥポート＃Ｈ１の情報）３５０１〜３５０５を取得し、それらの情報をＨＤＫＣ＃Ｈ０に送信する。
【０４１０】
次に、Ｓ４１０３で、マスタＣＰＵ＃Ｈ０は、ＨＤＫＣ＃Ｈ１からＳ４１０２で送信された情報を受信し、その情報を基に、ＨＤＫＣ＃Ｈ１の空きＦＥポート（ＬＵが１つも割り当てられていないＦＥポート）を特定し、特定した空きＦＥポートを、移動先として選択する。図４５Ｂのポート負荷管理テーブル＃Ｈ１によれば、ＦＥポート＃Ｈ１Ａが、空きＦＥポートである。
【０４１１】
次に、Ｓ４１０４で、マスタＣＰＵ＃Ｈ０が、ティア情報コマンドをＨＤＫＣ＃Ｈ１に送信する。ＨＤＫＣ＃Ｈ１において、Ｆ−Ｉ／Ｆ＃Ｈ１が、ティア情報コマンドを受信し、そのコマンドを、マスタＣＰＵ＃Ｈ１に転送する。ティア情報コマンドは、ティア管理テーブルが有する情報を取得するためのコマンドである。
【０４１２】
次に、Ｓ４１０５で、マスタＣＰＵ＃Ｈ１は、ティア情報コマンドを受信し、ティア管理テーブル＃Ｈ１が有する情報（例えば、情報９０１〜９０５、或いは、情報１００１〜１０１０）を取得し、それらの情報をＨＤＫＣ＃Ｈ０に送信する。マスタＣＰＵ＃Ｈ１は、ティア管理テーブル＃Ｈ１が有する情報のうち、テンポラリＬＵ（テンポラリＬＵ管理テーブル＃Ｈ１から特定されるＬＵ）に関する情報のみを送信しても良い。
【０４１３】
次に、Ｓ４１０６で、マスタＣＰＵ＃Ｈ０が、ＨＤＫＣ＃Ｈ１からＳ４１０５で送信された情報を受信する。マスタＣＰＵ＃Ｈ０は、その情報を基に、ＨＤＫＣ＃Ｈ１におけるテンポラリＬＵとそれのティアレベルとを特定する。マスタＣＰＵ＃Ｈ０は、Ｓ４００５で選択した移動元ＦＥポート＃Ｈ０Ｂに割り当てられているＬＵ（移動元ＬＵ）毎に、移動元ＬＵが属するティアと同じティアに属するテンポラリＬＵがＨＤＫＣ＃Ｈ１にあるか否かを判断する。そのようなテンポラリＬＵが、移動元ＬＵとペアにされ、移動元ＬＵからのデータの移動先とされる。なお、「移動元ＬＵが属するティアと同じティアに属するテンポラリＬＵ」とは、例えば、下記のうちのいずれかに該当するテンポラリＬＵである。
（＊）テンポラリＬＵのティアレベルが、移動元ＬＵのティアレベルと同じである。
（＊）テンポラリＬＵのティアレベルと移動元ＬＵのティアレベルとの差が、一定値以下である（テンポラリＬＵのティアレベルが属するティアレベル範囲が、移動元ＬＵのティアレベルが属するティアレベル範囲と同じである）。
【０４１４】
Ｓ４１０６において、移動元ＦＥポート＃Ｈ０Ｂに属する少なくとも１つの移動元ＬＵについて、移動元ＬＵが属するティアと同じティアに属するテンポラリＬＵが無ければ（Ｓ４１０６：Ｎｏ）、マスタＣＰＵ＃Ｈ０は、第２種の負荷分散処理を終了する。
【０４１５】
なお、Ｓ４１０６：Ｎｏの場合、別の低負荷ＤＫＣ（第３接続ＨＤＫＣ）があれば、マスタＣＰＵ＃Ｈ０は、別の低負荷ＤＫＣに対して、Ｓ４００５以降を行ってもよい。
【０４１６】
Ｓ４１０６において、移動元ＦＥポート＃Ｈ０Ｂに属する全ての移動元ＬＵについて、移動元ＬＵが属するティアと同じティアに属するテンポラリＬＵがあれば（Ｓ４１０６：Ｙｅｓ）、Ｓ４１０７で、マスタＣＰＵ＃Ｈ０は、各移動元ＬＵについて、移動元ＬＵから移動先ＬＵ（テンポラリＬＵ）へのデータ移動を行う。
【０４１７】
その後、Ｓ４１０８で、マスタＣＰＵ＃Ｈ１が、ＣＰＵ負荷情報コマンドを、ＨＤＫＣ＃Ｈ０（移動元のＨＤＫＣ）に送信する。ＨＤＫＣ＃Ｈ０において、Ｆ−Ｉ／Ｆ＃Ｈ０が、ＣＰＵ負荷情報コマンドを受信し、そのコマンドを、マスタＣＰＵ＃Ｈ０に転送する。
【０４１８】
次に、図４２に示すように、Ｓ４２０１で、マスタＣＰＵ＃Ｈ０は、ＣＰＵ負荷情報コマンドを受信し、担当ＣＰＵテーブル＃Ｈ０が有する情報（ＨＤＫＣ＃Ｈ０内の全てのＣＰＵ＃Ｈ０の情報）３１０１、３１０２、３１０３及び３４０４を取得し、それらの情報をＨＤＫＣ＃Ｈ１に送信する。
【０４１９】
次に、Ｓ４２０２で、マスタＣＰＵ＃Ｈ１は、ＨＤＫＣ＃Ｈ０からＳ４２０１で送信された情報を受信し、その情報を基に、移動先ＬＵ（テンポラリＬＵ）毎に、下記を行う。
（＊）マスタＣＰＵ＃Ｈ１は、移動先ＬＵ（例えば＃２００２）に、移動元ＬＵ（例えば＃２）に割り当てられていたＬＵＮを割り当てる。
（＊）マスタＣＰＵ＃Ｈ１は、移動先ＬＵ（例えば＃２００２）を、移動先ＦＥポート（空きＦＥポート）＃Ｈ１Ａに割り当てる（所属させる）。
【０４２０】
次に、Ｓ４２０３で、マスタＣＰＵ＃Ｈ１は、担当ＣＰＵテーブル＃Ｈ１と、担当ＣＰＵテーブル＃Ｈ０が有する情報（Ｓ４２０２で受信した情報）とを基に、ＨＤＫＣ＃Ｈ１において全てのＣＰＵ＃Ｈ１のＣＰＵ使用率３１０２が平均化するように、移動先ＬＵの担当ＣＰＵ＃Ｈ１を決定する。具体的には、例えば、下記が行われる。
（＊）マスタＣＰＵ＃Ｈ１が、担当ＣＰＵテーブル＃Ｈ０（図４５Ａ参照）が有する情報を基に、移動元ＬＵのＣＰＵ使用率３１０２を特定する。
（＊）マスタＣＰＵ＃Ｈ１が、担当ＣＰＵテーブル＃Ｈ１（図４５Ｂ参照）を基に、各ＣＰＵ＃Ｈ１のＣＰＵ使用率３１０２を特定する。
（＊）マスタＣＰＵ＃Ｈ１が、移動先ＬＵに対応する移動元ＬＵのＣＰＵ使用率３１０２と、各ＣＰＵ＃Ｈ１のＣＰＵ使用率３１０２とを基に、全てのＣＰＵ＃Ｈ１のＣＰＵ使用率３１０２が平均化するように、移動先ＬＵの担当ＣＰＵを決定する。
（＊）マスタＣＰＵ＃Ｈ１が、担当ＣＰＵテーブル＃Ｈ１を更新する（図４８Ｂ参照）。具体的には、例えば、マスタＣＰＵ＃Ｈ１は、移動先ＬＵの担当ＣＰＵのＩＤ３１０１に対応した欄に、移動先ＬＵのＩＤ３１０３と、移動先ＬＵのＣＰＵ使用率３４０４とを登録し、且つ、その担当ＣＰＵのＣＰＵ使用率３１０２に、移動先ＬＵのＣＰＵ使用率３４０４を加算する。
【０４２１】
一方、Ｓ４２０４で、ＨＤＫＣ＃Ｈ０において、マスタＣＰＵ＃Ｈ０が、移動先ＬＵと移動元ＬＵとのペアを解除し、且つ、移動元ＬＵをテンポラリＬＵとする。例えば、マスタＣＰＵ＃Ｈ０は、移動元ＬＵに関する特定の情報（例えばＣＰＵ使用率３４０４等）を破棄し、テンポラリＬＵ管理テーブル＃Ｈ０に、移動元ＬＵに関する情報（例えば情報３６０３及び３６０４）を追加する。
【０４２２】
最後に、移動元ＦＥポート＃Ｈ０Ｂのポート情報（例えば、ＷＷＮ及びinquiry情報）と移動先ＦＥポート＃Ｈ１Ａのポート情報が交換される。
【０４２３】
具体的には、Ｓ４２０５で、マスタＣＰＵ＃Ｈ０が、ポート情報コマンドをＨＤＫＣ＃Ｈ１に送信する。ポート情報コマンドは、ポート情報を取得するためのコマンドである。そのポート情報コマンドでは、移動先ＦＥポート＃Ｈ１ＡのＩＤが指定されて良い。
【０４２４】
Ｓ４２０６で、マスタＣＰＵ＃Ｈ１が、ポート情報コマンドを受信し、移動先ＦＥポート＃Ｈ１Ａに対応したポート情報（例えば、ＷＷＮ及びinquiry情報）を取得し、そのポート情報をＨＤＫＣ＃Ｈ０に送信する。そのポート情報は、例えば、ポート負荷管理テーブル＃Ｈ１又はその他の管理情報が有していて良い。
【０４２５】
Ｓ４２０７で、マスタＣＰＵ＃Ｈ１が、ポート情報コマンドをＨＤＫＣ＃Ｈ０に送信する。そのポート情報コマンドでは、移動元ＦＥポート＃Ｈ０ＢのＩＤが指定されて良い。
【０４２６】
Ｓ４２０８で、マスタＣＰＵ＃Ｈ０が、ポート情報コマンドを受信し、移動元ＦＥポート＃Ｈ０Ｂに対応したポート情報（例えば、ＷＷＮ及びinquiry情報）を取得し、そのポート情報をＨＤＫＣ＃Ｈ１に送信する。そのポート情報は、例えば、ポート負荷管理テーブル＃Ｈ０又はその他の管理情報が有していて良い。
【０４２７】
Ｓ４２０９で、マスタＣＰＵ＃Ｈ０が、移動元ＦＥポート＃Ｈ０Ｂに対応したポート情報を、移動先ＦＥポート＃Ｈ１Ａに対応したポート情報に変更する。
【０４２８】
Ｓ４２１０で、マスタＣＰＵ＃Ｈ１が、移動先ＦＥポート＃Ｈ１Ａに対応したポート情報を、移動元ＦＥポート＃Ｈ０Ｂに対応したポート情報に変更する。
【０４２９】
以上、第２種の負荷分散処理によれば、サーバがＩ／Ｏの際に使用するポート識別情報及びＬＵ識別情報を変えることなく、サーバからＩ／Ｏコマンドを受けるＦＥポートを、移動元ＦＥポート＃Ｈ０Ｂから移動先ＦＥポート＃Ｈ１Ａに変えさせることができる。また、移動元ＬＵの移動先となるテンポラリＬＵが属するティアは、移動元ＬＵが属するティアと同じティアなので、ティアレベルを変えることなく、負荷分散が可能となる。
【０４３０】
なお、Ｓ４００１のコマンドの送信先は、ＨＤＫＣ＃Ｈ０に最も近い第３接続ＨＤＫＣから、順次に、遠くに遷移して良い。具体的には、マスタＣＰＵ＃Ｈ０は、第２種の負荷分散処理における判断（例えば、Ｓ４００４又はＳ４１０６、或いは、後述のＳ４３０４又はＳ４３０５）の結果が否定的となった場合、Ｓ４００４の判断の対象とされていない１以上の第３接続ＨＤＫＣのうち、ＨＤＫＣ＃Ｈ０に最も近いＨＤＫＣ（介在する第３接続ＨＤＫＣの数が最も少ない第３接続ＨＤＫＣ）を選択し、選択した第３接続ＨＤＫＣを相手として、第２種の負荷分散処理を開始して良い。
【０４３１】
図４３及び図４４は、図４１のＳ４１０７の処理の流れを示す。
【０４３２】
Ｓ４３０１で、マスタＣＰＵ＃Ｈ０は、移動開始通知をＨＤＫＣ＃Ｈ１に送信する。ＨＤＫＣ＃Ｈ１のマスタＣＰＵ＃Ｈ１が、移動開始通知を受信する。
【０４３３】
Ｓ４３０２で、マスタＣＰＵ＃Ｈ１が、ＨＤＫＣ＃Ｈ１に、移動元情報コマンドを送信する。移動元情報コマンドは、移動元ＬＵに関する情報である移動元情報（例えば、移動元ＬＵの数、各移動元ＬＵの容量、及び、各移動元ＬＵのＰＤＥＶ種別を表す情報）を取得するためのコマンドである。マスタＣＰＵ＃Ｈ０が、移動元情報コマンドを受信する。
【０４３４】
Ｓ４３０３で、マスタＣＰＵ＃Ｈ０が、移動元情報（例えば、移動元ＬＵの数、各移動元ＬＵの容量、及び、各移動元ＬＵのＰＤＥＶ種別を表す情報）を、ＨＤＫＣ＃Ｈ１に送信する。マスタＣＰＵ＃Ｈ１が、移動元情報を受信する。
【０４３５】
Ｓ４３０４で、マスタＣＰＵ＃Ｈ１が、移動元ＬＵ毎に、移動元ＬＵのＰＤＥＶ種別と同じＰＤＥＶ種別のテンポラリＬＵがあるか否かを判断する。移動元ＬＵのＰＤＥＶ種別は、移動元情報から特定される。テンポラリＬＵのＰＤＥＶ種別は、テンポラリＬＵ管理テーブル＃Ｈ１におけるＰＤＥＶ種別３６０１から特定される。
【０４３６】
少なくとも１つの移動元ＬＵについて、移動元ＬＵのＰＤＥＶ種別と同じＰＤＥＶ種別のテンポラリＬＵが存在しない場合（Ｓ４３０４：Ｎｏ）、マスタＣＰＵ＃Ｈ１が、第２種の負荷分散処理を終了する。マスタＣＰＵ＃Ｈ１は、例えば、第２種の負荷分散処理の終了を、ＨＤＫＣ＃Ｈ０に通知して良い。これは、Ｓ４３０５：Ｎｏでも同様で良い。
【０４３７】
全ての移動元ＬＵについて、移動元ＬＵのＰＤＥＶ種別と同じＰＤＥＶ種別のテンポラリＬＵが存在する場合（Ｓ４３０４：Ｙｅｓ）、Ｓ４３０５で、マスタＣＰＵ＃Ｈ１が、テンポラリＬＵ管理テーブル＃Ｈ１を基に、ＰＤＥＶ種別毎に、そのＰＤＥＶ種別に対応したトータル容量３６０２が、そのＰＤＥＶ種別に対応した１以上の移動元ＬＵのトータル容量以上か否かを判断する。
【０４３８】
全ての移動元ＬＵに関する少なくとも１つのＰＤＥＶ種別について、トータル容量３６０２が１以上の移動元ＬＵのトータル容量未満であれば（Ｓ４３０５：Ｎｏ）、マスタＣＰＵ＃Ｈ１が、第２種の負荷分散処理を終了する。
【０４３９】
全ての移動元ＬＵに関する全てのＰＤＥＶ種別について、トータル容量３６０２が１以上の移動元ＬＵのトータル容量以上であれば（Ｓ４３０５：Ｙｅｓ）、Ｓ４３０６で、マスタＣＰＵ＃Ｈ１が、容量が移動元ＬＵと同じになるテンポラリＬＵを作成する。ここでは、例えば、（ｙ１）既存のテンポラリＬＵが、容量が移動元ＬＵと同じになるテンポラリＬＵと、他のテンポラリＬＵとに分割されても良いし、（ｙ２）複数のテンポラリＬＵが組み合わされることで、容量が移動元ＬＵと同じになるテンポラリＬＵが作成されても良いし、（ｙ３）（ｙ１）と（ｙ２）の両方が行われることで、容量が移動元ＬＵと同じになるテンポラリＬＵが作成されても良い。
【０４４０】
次に、図４４に示すように、Ｓ４４０１で、マスタＣＰＵ＃Ｈ１が、Ｓ４３０６の処理結果を基に、テンポラリＬＵ管理テーブル＃Ｈ１を更新する。図４９Ａに、更新前のテンポラリＬＵ管理テーブル＃Ｈ１の一例を示し、図４９Ｂに、更新後のテンポラリＬＵ管理テーブル＃Ｈ１の一例を示す。図４９Ａ及び図４９Ｂの例によれば、ＰＤＥＶ種別「ＳＳＤ」について、「１０２４ＧＢ」のテンポラリＬＵ＃１０００に「２０４８ＧＢ」のテンポラリＬＵ＃１００１がマージされることで、テンポラリＬＵ＃１０００の容量が「３０７２ＧＢ」に拡張されている。また、ＰＤＥＶ種別「ＳＡＳ」について、「４０９６ＧＢ」のテンポラリＬＵ＃１００３が、「２０４８ＧＢ」のテンポラリＬＵ＃１００３と「２０４８ＧＢ」のテンポラリＬＵ＃１１００に分割されている。
【０４４１】
移動先ＬＵの容量は、移動元ＬＵの容量と同じ（又はそれ以上）である必要がある。しかし、必ずしも移動元ＬＵの容量と同じ容量のテンポラリＬＵが存在しているとは限らない。このため、上記のように、テンポラリＬＵのマージ／分割により、移動元ＬＵと容量が同じテンポラリＬＵが作成される。そして、テンポラリＬＵ管理テーブル＃Ｈ１が更新される。なお、移動元ＬＵの容量と同じ容量のテンポラリＬＵが既に存在している場合には、テンポラリＬＵを作成する処理は、スキップされて良い。
【０４４２】
その後、Ｓ４４０２で、マスタＣＰＵ＃Ｈ１が、作成したテンポラリＬＵの情報（例えば、更新後のテンポラリＬＵ管理テーブル＃Ｈ１が有する情報）を、ＨＤＫＣ＃Ｈ０に送信する。送信される情報は、例えば、少なくとも、移動元ＬＵと容量及びＰＤＥＶ種別が同じテンポラリＬＵの情報を含む。マスタＣＰＵ＃Ｈ０が、テンポラリＬＵの情報を受信する。
【０４４３】
Ｓ４４０３で、マスタＣＰＵ＃Ｈ０が、テンポラリＬＵの情報を基に、移動元ＬＵ毎に、下記、
（＊）移動元ＬＵと、その移動元ＬＵと容量及びＰＤＥＶ種別が同じテンポラリＬＵとのペアを作成する、
（＊）移動元ＬＵから、その移動元ＬＵとペアになっているテンポラリＬＵに、データを移動し始める、
を行う。なお、ここでは、データの「移動」といっても、移動されたデータが移動元ＬＵから削除されなくて良い。つまり、ここで言う「移動」は、「コピー」と同義で良い。
【０４４４】
マスタＣＰＵ＃Ｈ０は、移動元ＬＵからテンポラリＬＵへのデータ移動の最中に、移動元ＬＵにサーバからデータが新たに書き込まれた場合（Ｓ４４０４：Ｙｅｓ）、移動元ＬＵに書き込まれたデータを、移動先のテンポラリＬＵに移動する（Ｓ４４０５）。マスタＣＰＵ＃Ｈ０は、移動元ＬＵを構成する全領域内のデータを移動し終えるまで、データ移動を継続する（Ｓ４４０６：Ｎｏ、Ｓ４４０７）
【０４４５】
マスタＣＰＵ＃Ｈ０は、移動元ＬＵを構成する全領域内のデータを移動し終えた場合（Ｓ４４０６：Ｙｅｓ）、移動元ＬＵとテンポラリＬＵとのペアを解除する（Ｓ４４０８）。
【０４４６】
これにより、図４１のＳ４１０７が完了する。
【０４４７】
なお、移動元ＦＥポート＃Ｈ０Ｂに属する全てのＬＵ（＃２、＃３、＃４）を空きＦＥポート＃Ｈ１Ａに移動させた場合（ポート単位の負荷分散が行われた場合）、移動元のＨＤＫＣ＃Ｈ０（又は、移動先のＨＤＫＣ＃Ｈ１）が、上位のデバイス（例えば、サーバ、又は、サーバとＨＤＫＣ＃Ｈ０（＃Ｈ１）との間に介在するスイッチ（例えばＦＣスイッチ））に、所定の情報を送信して良い。スイッチは、複数のポート（以下、ＳＷポート）と、どの宛先が指定されたコマンドを受けた場合にどのポートから出力するかのルーティング制御情報とを有する。上位のデバイスがスイッチの場合、例えば、次のような処理が行われて良い。例えば、移動元のＨＤＫＣ＃Ｈ０（又は、移動先のＨＤＫＣ＃Ｈ１）が、スイッチに、交換前のＷＷＮと交換後のＷＷＮとを含んだ所定の情報を送信する。スイッチが、その所定の情報に含まれているＷＷＮを基に、ルーティング制御情報を更新する。具体的には、例えば、スイッチは、移動元ＦＥポート＃Ｈ０Ｂに対応した交換前のＷＷＮが、移動先ＦＥポート＃Ｈ１Ａに接続されているＳＷポートに対応するように、ルーティング制御情報を更新する。これにより、その後、スイッチは、移動元ＦＥポート＃Ｈ０Ｂに対応した交換前のＷＷＮを含んだＩ／Ｏコマンドを受けた場合、そのＩ／Ｏコマンドを、移動先ＦＥポート＃Ｈ１Ａに転送することができる。
【０４４８】
上述の通り、第３接続の複数のＨＤＫＣユニット１４１やＨＤＫＣは、本来的に負荷分散の必要な状態（閾値）に達した場合に、複数のＬＵを纏めて（複数のＬＵ単位、例えば、ポート単位）負荷分散処理（移行処理を含む）を行うことが良い。ポート単位での負荷分散を適用することなく複数のＬＵを纏めて負荷分散を行う場合の一例としては、ＦＥポートに接続されている１つ又は複数のサーバ１０１やスイッチ上にパス管理ソフトウェアを搭載して、第３接続の複数のＨＤＫＣユニット１４１やＨＤＫＣの間で複数のＬＵの各々に関する構成情報及び／又は複数のＬＵへのアクセスの処理を担当する権利（複数のＬＵの各々に関するオーナー権）を移行又は通知したとき、又はその後に、移行対象の複数のＬＵの各々に対するパスを移行元のＬＵのパスから移行先のＬＵへ変更させることにより実現できる。この場合、パスの移行前に、移行先の複数のＬＵの各々に関する構成情報を基にして、移行先の複数のＬＵの各々に対する１つ又は複数のサーバ１０１やスイッチからのパスを生成又は設定しておくことが良い。このパスは、移行先のＬＵの識別情報（例えば、ＬＵＮ）と移行先ＬＵが対応付けられているＦＥポートのポート識別情報（例えばＷＷＮ（World  Wide  Name）、Ｎ＿Ｐｏｒｔ＿Ｎａｍｅ、Ｎ＿Ｐｏｒｔ＿ＩＤ及び／又はＳ＿ＩＤ）を用いて生成又は設定される。また、移行元の複数のＬＵから移行先の複数のＬＵへのデータの移行は、上記構成情報やオーナー権の移行と同期して（同様なタイミングで）実施されても良いし、非同期に（後で）実施されても良い。なお、非同期に実施する場合には、移行先の複数のＬＵを有するＨＤＫＣユニット１４１やＨＤＫＣ内のプロセッサ２２２は、１つ又は複数のサーバ１０１やスイッチから移行先のＬＵに対するライトアクセスに対応するライトデータを一時的に保持して、移行先のＬＵに対して移行元のＬＵからのデータが移行された後に、当該ライトデータにて上書きする、等のデータの整合性を確保するための処理が必要となる。１つ又は複数のサーバ１０１やスイッチから移行先のＬＵに対するリードアクセスに対しても、移行元のＬＵからデータを読み出して、１つ又は複数のサーバ１０１やスイッチに対して読み出されたデータを応答することが好ましい。また、移行元のＬＵのパスから移行先のＬＵのパスへ変更させるには、次のいずれの方法をとっても良い。まず、第一の方法としては、第３接続の複数のＨＤＫＣユニット１４１、その内部のＨＤＫＣ及び／又は管理装置３０１のプロセッサが移行元のＬＵのパスと移行先のＬＵのパスを判断及び特定し、１つ又は複数のサーバ１０１やスイッチのパス管理ソフトウェアに対して、移行対象の複数のＬＵの各々について、移行元のＬＵのパスと移行先のＬＵのパスの情報を通知する。これにより、パス管理ソフトフェアが、移行対象の複数のＬＵの各々に対するパスを移行先のＬＵのパスに変更する。第二の方法としては、第３接続の複数のＨＤＫＣユニット１４１、その内部のＨＤＫＣ及び／又は管理装置３０１のプロセッサが移行元のＬＵのパスと移行先のＬＵのパスを判断及び特定し、第３接続の複数のＨＤＫＣユニット１４１やＨＤＫＣの間で複数のＬＵに関する構成情報を移行又は通知す���とき又はした後に、第３接続の複数のＨＤＫＣユニット１４１又はその内部のＨＤＫＣのプロセッサが１つ又は複数のサーバ１０１やスイッチのパス管理ソフトウェアから発行されるコマンド（例えば、Inquiryコマンドや定期的に発行されるその他の問い合わせコマンド）を待ち、特定された複数の移行先のＬＵのパスを利用して対応する各々のＬＵにアクセスするように、そのコマンドに対して、移行対象の複数のＬＵの各々に関して必要な情報(例えば、移行元のＬＵのパスの情報及び／又は移行先のＬＵのパスの情報、及び／又はアクティブ、パッシブ等の状態の情報)を応答する。これにより、パス管理ソフトフェアが、移行対象の複数のＬＵの各々に対するパスを移行先のＬＵのパスに変更する。第三の方法としては、第３接続の複数のＨＤＫＣユニット１４１、その内部のＨＤＫＣ及び／又は管理装置３０１のプロセッサが複数の移行元のＬＵのパスと複数の移行先のＬＵのパスを判断及び特定し、第３接続の複数のＨＤＫＣユニット１４１やＨＤＫＣの間で複数のＬＵに関する構成情報を移行又は通知するとき又はした後に、移行元の複数のＬＵを有するＨＤＫＣユニット１４１やＨＤＫＣが、１つ又は複数のサーバ１０１やスイッチから移行対象の複数のＬＵのいずれに対するアクセスに対しても、当該アクセスを拒否する、又は当該アクセスに対して応答しないことによる。これにより、パス管理ソフトフェアが、移行対象の複数のＬＵの各々に対するパスを移行先のＬＵのパスに変更する。米国においては、１つ又は複数のサーバ１０１やスイッチから移行対象のＬＵに対するアクセスに対してアクセスを拒否する技術について、米国特許公開第２００６／０２７１７５８号（Innan  et  al.）の明細書及び図面を援用することができる。この場合、当該明細書及び図面のHost Deviceが本願の１つ又は複数のサーバ１０１又はスイッチ、当該明細書及び図面のVirtualization Storage Device 1及びVirtualization Storage Device 2の各々が本願の１つのＨＤＫＣユニット１４１やＨＤＫＣとそれと別のＨＤＫＣユニット１４１やＨＤＫＣ、にそれぞれ対応付けて本願技術を適用する。
【０４４９】
また、複数のＬＵを纏めて負荷分散を行う場合、上記説明のように１つのＨＤＫＣユニット１４１やＨＤＫＣから１つのＨＤＫＣユニット１４１やＨＤＫＣへ複数の負荷分散を行う場合に限られず、移行元の複数のＬＵを有するＨＤＫＣユニット１４１やＨＤＫＣから複数のＨＤＫＣユニット１４１やＨＤＫＣに分散させて移行対象の複数のＬＵを移行させることも良い。
【０４５０】
また、本願の技術は、第３接続の複数のＨＤＫＣユニット１４１やＨＤＫＣ間で複数のＬＵを纏めて負荷分散処理（移行処理を含む）を行う場合に限られず、第３接続の複数のＨＤＫＣユニット１４１やＨＤＫＣ間で１つのＬＵだけ（１つのＬＵ単位）の負荷分散処理（移行処理を含む）を行うことも良い。本願に従う「ティア」を維持した状態での１つのＬＵ単位の負荷分散処理（移行処理を含む）であれば、既存の技術にない全く新しい技術であるからである。この場合、ＨＤＫＣユニット１４１やＨＤＫＣや管理装置３０１のプロセッサが、例えば、本願に従う複数の「ティア」の各々に対応するＬＵ（論理ボリュームや仮想ボリューム）の中からティアレベル（ティアレベルの範囲であっても良い）の変更しない適切な「ティア」を有するＬＵを選択、判断及び決定すること、を一例とする新たな処理を行う。
【０４５１】
以上が、実施例２についての説明である。例えば、共通情報管理装置３０１が１つ又は複数のサーバ、１つ又は複数の仮想サーバ（下記）、１つ又は複数のスイッチ、１つ又は複数のＨＤＫＣユニット１４１と１つ又は複数のＬＤＫＣユニット１５１などの処理を総合的に管理することにより、システム全体として、管理コストの低下や、性能向上を図ることができる。この技術と効果は、実施例１及び３についても共通である。さらに、負荷分散処理で分散される１つ以上のLUのＬＵＮセキュリティ情報もまた、負荷分散処理に応じて、分散元のＨＤＫＣユニットから分散先のＨＤＫＣユニットへ移行できる。ＬＵＮセキュリティ情報は、サーバから未承認のLUへの未承認アクセスを回避するためのものであり、サーバのポートアドレスとLUのLUNとの間の対応情報である。米国では、ＬＵＮセキュリティについて、米国特許公報6684209（Ito et al.）の明細書及び図面を援用する。  
【０４５２】
なお、例えば、第１種の負荷分散処理は、自ＤＫＣ内での負荷分散処理も含むので、ＬＤＫＣも、第１種の負荷分散処理を行えても良い。
【０４５３】
また、実施例２（例えば、ＬＵ単位の負荷分散（第１種の負荷分散処理）と、ポート単位の負荷分散（第２種の負荷分散処理）のどちらを行うかの判断及び決定）は、以下のいずれか１つのケースで、ＨＤＫＣユニット１４１、ＨＤＫＣ及び／又は管理装置３０１のプロセッサによって適用されて良い。
（ａ）接続形態（ＤＫＣの性能を含んで良い）及びＰＤＥＶ種別という基本項目（性能ファクター）に加えて又は代えて、「プレキャッシュ」、「カスケードの違い」及び／又は「距離（コマンド応答時間）」等の１以上の他の項目（性能ファクター）も基に、ティアレベルが算出されるケース。
（ｂ）「プレキャッシュ」、「カスケードの違い」及び／又は「距離（コマンド応答時間）」（図１０参照）のうちの１以上の項目（性能ファクター）のみを基にティアレベルが算出されるケース。
（ｃ）「プレキャッシュ」、「カスケードの違い」及び／又は「距離（コマンド応答時間）」（図１０参照）のうちのいずれか１つ以上の項目（性能ファクター）と、ＰＤＥＶ種別（性能ファクター）との組合せを基に、ティアレベルが算出されるケース。
（ｄ）「プレキャッシュ」、「カスケードの違い」及び／又は「距離（コマンド応答時間）」（図１０参照）のうちのいずれか１つ以上の項目（性能ファクター）と、「接続形態」、「内部コントローラの性能」、及び「ＰＤＥＶ種別」のうちのいずれか１つ以上の項目（性能ファクター）との組み合わせを基に、ティアレベルが算出されるケース。
【０４５４】
更に、実施例２に係る負荷分散制御処理において、移動元及び／又は移動先のＨＤＫＣのプロセッサ（ＣＰＵ）は、中位ティア（中位のティアレベル又はティアレベル範囲）に属するＬＵ（他の複数のＨＤＫＣのＬＵを仮想化した仮想ＬＵ）が割り当てられるＦＥポートを、移動元ＦＥポートの候補から外しても良い。
【０４５５】
また、移動元及び／又は移動先のＨＤＫＣのプロセッサは、当該中位ティアに属するＬＵが割り当てられているＦＥポート（この段落において「対象ＦＥポート」）について、移動元ＦＥポートとすることの優先順位を、自ＤＫＣ又は第１の接続形態に従うＬＵのみが割り当てられているＦＥポートに比べて、低くして良い。この場合、対象ＦＥポートに所属するＬＵの移動は（つまり、対象ＦＥポートが移動元ＦＥポートとして選択されることは）、自ＤＫＣ又は第１の接続形態に従うＬＵのみが所属するＦＥポートが存在しない場合にのみ、実施されて良い。
【０４５６】
本実施例は、ＨＤＫＣ内の実ＬＵ（自ＤＫＣ又は第１の接続形態に従うＬＵ、言い換えれば、本実施例で言う仮想ＬＵ（第２の接続形態に従う仮想ＬＵ、又は、第３の接続形態に従う仮想ＬＵ）以外のＬＵ）が他のＨＤＫＣに移動されるケース以外のケースに適用されて良い。例えば、本実施例は、上位ティア（上位ティアレベル又は上位ティアレベル範囲）に属するＬＵのみが割り当てられているＦＥポートに関する移動（そのＦＥポートに所属する全ての実ＬＵの移動）が行われるケースに代えて又は加えて、他のケース、例えば、以下の何れのケース、
（１）中位ティア（例えば中位ティアレベル又は中位ティアレベル範囲）に属するＬＵのみが所属するＦＥポートの移動（ここでいう「中位ティアに属するＬＵ」とは、例えば、第３の接続形態に従う仮想ＬＵのことである）、
（２）下位ティア（例えば下位ティアレベル又は下位ティアレベル範囲）に属するＬＵのみが割り当てられているＦＥポートの移動（ここでいう「下位ティアに属するＬＵ」とは、例えば、第２の接続形態に従う仮想ＬＵのことである）、
（３）上位ティア（例えば上位ティアレベル又は上位ティアレベル範囲）に属するＬＵと中位ティアに属するＬＵのみが割り当てられているＦＥポートの移動、
（４）中位ティアに属するＬＵと下位ティアに属するＬＵのみが割り当てられているＦＥポートの移動、
（５）上位ティアに属するＬＵと中位ティアに属するＬＵと下位ティアに属するＬＵのいずれも割り当てられているＦＥポートの移動、
にも適用されて良い。ただし、移動元及び／又は移動先のＨＤＫＣのプロセッサは、ポート単位で負荷分散（ＬＵ移動）を行う必要があり、さらに、移動元ポートに属するいずれのＬＵについても、ティア（例えば、ティアに影響する性能ファクター）が移動前後において同様である必要がある。
【０４５７】
３つ以上のＨＤＫＣが接続している場合には、管理端末又は特定のＨＤＫＣのプロセッサが、３つ以上のＨＤＫＣから負荷分散元のＨＤＫＣと負荷分散先のＨＤＫＣとを選択して良い。
【０４５８】
また、第３接続形態で接続されているＨＤＫＣが有するテンポラリＬＵとして、（ａ）そのＨＤＫＣが有するＬＵ（自ＤＫＣに従うＬＵ）（ＤＰ−ＬＵでも良い）、（ｂ）そのＨＤＫＣを含んだＨＤＫＣユニット内の他のＨＤＫＣが有するＬＵ（第１の接続形態に従うＬＵ）（ＤＰ−ＬＵでも良い）、（ｃ）第２の接続形態に従う仮想ＬＵ、（ｄ）第３の接続形態に従う仮想ＬＵ、等がある。
【０４５９】
また、移動先として選択されるテンポラリＬＵは、移動元ＬＵと比べて、ティア（例えばティアレベル）が同じであることに加えて、下記の（ｐ）、（ｑ）、及び（ｒ）のうちの少なくとも１つで良い。
（ｐ）同種の性能ファクターについてポイントが違っている、
（ｑ）同種の性能ファクターについてポイントが同じである、
（ｒ）複数種類の性能ファクターのうちの特定の種類の性能ファクターのみポイントが同じである。
【０４６０】
また、本実施例２は、負荷分散について説明したが、本願は負荷分散だけに適用される技術でなく、ＬＵの構成情報及び／又はオーナー権の移行を伴うその他の技術に対しても適用される。ＬＵの構成情報及び／又はオーナー権の移行を伴うその他の技術としては、例えば、データの移行を伴う複数のＬＵ間のコピー、データの移行を伴わない複数のＬＵ間のコピー、データの移行を伴うＬＵの移行、データの移行を伴わないＬＵの移行、等がある。これらの技術において、ＨＤＫＣユニット１４１、ＨＤＫＣ及び／又は管理装置３０１のプロセッサは、上記コピーや移行に応じて（コピーや移行のとき又は前に）、ＬＵ（例えば、通常のＬＵ、ＤＰ−ＬＵ、又は、仮想ＬＵ）の構成情報及び／又はオーナー権の移行又は通知を実施することが良い。なお、オーナー権の移行又は通知は、上記コピーや移行の後でも良い。
【０４６１】
また、データの移行を伴わない複数のＬＵ間のコピーやＬＵの移行においては、図６の説明において既に説明したように、同一の１又は複数のＬＤＫＣが複数のＨＤＫＣユニット１４１に接続されている状態が適用される。この状態は、図６の説明で記載したようなフェールオーバや負荷分散の場合に限られず、データの移行を伴わない複数のＬＵ間のコピーやＬＵの移行のためのその他の場面で適用されることも良い。この場合、予め同一の１又は複数のＬＤＫＣが複数（３つ以上の場合も効果的である）のＨＤＫＣユニット１４１やＨＤＫＣに接続されている状態で、１つ又は複数のサーバ１０１、１つ又は複数のサーバ１０１内の仮想サーバ、１つ又は複数のスイッチ、１つ又は複数のサーバ１０１内の仮想スイッチの交換、コピーや移行に応じて、交換後、コピー後や移行後の１つ又は複数のサーバ１０１、１つ又は複数のサーバ１０１内の仮想サーバ、１つ又は複数のスイッチ、１つ又は複数のサーバ１０１内の仮想スイッチのサイトやロケーションに対応する最適なサイトやロケーションの特定のＨＤＫＣユニット１４１やＨＤＫＣに対して、データの移行を伴わない複数のＬＵ間のコピーやＬＵの移行が実施される。この場合、ＨＤＫＣユニット１４１、ＨＤＫＣ及び／又は管理装置３０１のプロセッサは、上記交換、コピーや移行に応じて（コピーや移行のとき又は前に）、交換後、コピー後や移行後の１つ又は複数のサーバ１０１、１つ又は複数のサーバ１０１内の仮想サーバ、１つ又は複数のスイッチ、１つ又は複数のサーバ１０１内の仮想スイッチのサイトやロケーションを判断し、当該サイトやロケーションに対応する最適なサイトやロケーションを判断及び決定し、特定のＨＤＫＣユニット１４１やＨＤＫＣを判断及び決定した上で、ＬＵ（仮想ボリューム）に関する構成情報、及び／又はＬＵ（仮想ボリューム）に対応するＬＤＫＣのＬＵ（仮想ボリュームにマッピングされた通常のＬＵ又はＤＰ−ＬＵ）へのアクセスの処理を担当する権利（ＬＤＫＣが有するＬＵに関するオーナー権）の移行又は通知を実施することが良い（なお、オーナー権の移行又は通知は、上記コピーや移行の後でも良い）。この場合、１又は複数のＬＤＫＣが複数（３つ以上の場合も効果的である）のＨＤＫＣユニット１４１やＨＤＫＣのＦＥポートに接続されている１つ又は複数のサーバ１０１やスイッチ上にパス管理ソフトウェアを搭載した上で、データの移行を伴わない複数のＬＵ間のコピーやＬＵの移行元のＨＤＫＣユニット１４１やＨＤＫＣと上記判断及び決定によって特定されたＨＤＫＣユニット１４１やＨＤＫＣとの間で、複数のＬＵ（仮想ボリューム）の各々に関する構成情報、及び／又は複数のＬＵ（仮想ボリューム）の各々に対応するＬＤＫＣのＬＵ（仮想ボリュームにマッピングされた通常のＬＵ又はＤＰ−ＬＵ）に関するオーナー権を移行又は通知する。そして、この移行又は通知を実施したとき又はその前に、移行元のＨＤＫＣユニット１４１やＨＤＫＣのＬＵ（仮想ボリューム）への１つ又は複数のサーバ１０１やスイッチからのパスから特定された（移行先の）ＨＤＫＣユニット１４１やＨＤＫＣのＬＵ（仮想ボリューム）への１つ又は複数のサーバ１０１やスイッチからのパスへ、パスを変更させる（なお、オーナー権の移行又は通知は、上記コピーや移行の後でも良い）。米国においては、この具体的な処理について、米国特許公開第２００６／０２７１７５８号（Innan  et  al.）の明細書及び図面を援用することができる。この場合、当該明細書及び図面のHost Deviceが本願の１つ又は複数のサーバ１０１又はスイッチ、当該明細書及び図面のVirtualization Storage Device 1及びVirtualization Storage Device 2の各々が本願の１つのＨＤＫＣユニット１４１やＨＤＫＣとそれと別のＨＤＫＣユニット１４１やＨＤＫＣ、当該明細書及び図面のExternal Storage Deviceが本願の同一のＬＵ（第一のＬＵ）を有するＬＤＫＣ、にそれぞれ対応付けて本願技術を適用する。但し、移行先のＨＤＫＣユニット１４１やＨＤＫＣの特定や、複数のＬＵ（仮想ボリューム）を纏めての移行などや、本願に従う「ティア」については、本願特有の内容であり、全く新しい技術である。
【０４６２】
また、本実施例２は、１つ又は複数のサーバ１０１やスイッチの交換や移行に伴わないＬＵの構成情報及び／又はオーナー権の移行又は通知を伴う技術のみに適用されるものでなく、１つ又は複数のサーバ１０１やスイッチの交換や移行に伴うＬＵの構成情報及び／又はオーナー権の移行又は通知を伴う技術に適用することも良い。この場合、ＨＤＫＣユニット１４１、ＨＤＫＣ及び／又は管理装置３０１のプロセッサは、１つ又は複数のサーバ１０１やスイッチの交換や移行に応じて（交換や移行のとき又は前に）、ＬＵ（例えば、通常のＬＵ、ＤＰ−ＬＵ、又は、仮想ＬＵ）の構成情報及び／又はオーナー権の移行又は通知を実施することが良い。なお、オーナー権の移行又は通知は、上記交換や移行の後でも良い。  また、本実施例２は、１つ又は複数のサーバ１０１内の１つ又は複数の仮想サーバや１つ又は複数のスイッチ内の１つ又は複数の仮想スイッチのコピーや移行に伴う技術に適用することも良い。この場合、ＨＤＫＣユニット１４１、ＨＤＫＣ及び／又は管理装置３０１のプロセッサは、１つ又は複数の仮想サーバや仮想スイッチのコピーや移行に応じて（コピーや移行のとき又は前に）、ＬＵ（例えば、通常のＬＵ、ＤＰ−ＬＵ、又は、仮想ＬＵ）の構成情報及び／又はオーナー権の移行又は通知を実施することが良い。なお、オーナー権の移行又は通知は、上記コピーや移行の後でも良い。
【０４６３】
また、本実施例２は、複数のＬＵの移行などの処理に応じてパスが生成又は設定される場合に限られず、複数（３つ以上の場合も効果的である）のＨＤＫＣユニット１４１やＨＤＫＣの複数のＬＵ（例えば、通常のＬＵ、ＤＰ−ＬＵ、又は、仮想ＬＵ）と１つ又は複数のサーバ１０１、１つ又は複数の仮想サーバ、１つ又は複数のスイッチや１つ又は複数の仮想スイッチとが予めパス生成又は設定された状態で存在しており、フェールオーバ、負荷分散や、１つ又は複数のサーバ１０１、１つ又は複数の仮想サーバ、１つ又は複数のスイッチや１つ又は複数の仮想スイッチの交換、コピーや移行、等に応じて、最適なサイトやロケーションの特定のＨＤＫＣユニット１４１やＨＤＫＣを判断及び決定して、複数のＬＵに関する構成情報、及び／又は複数のＬＵの各々へのアクセスの処理を担当する権利（ＬＵに関するオーナー権）の移行又は通知を実施することもよい。なお、ＨＤＫＣユニット１４１、ＨＤＫＣや管理装置３０１のプロセッサは、フェールオーバに関しては、パス障害に応じて、負荷分散においては負荷の分析結果に応じて、それぞれ最適なサイトやロケーションの特定のＨＤＫＣユニット１４１やＨＤＫＣを判断及び決定する。また、ＨＤＫＣユニット１４１、ＨＤＫＣや管理装置３０１のプロセッサは、１つ又は複数のサーバ１０１、１つ又は複数の仮想サーバ、１つ又は複数のスイッチや１つ又は複数の仮想スイッチの交換、コピーや移行に関しては、交換後、コピー後や移行後の１つ又は複数のサーバ１０１、１つ又は複数の仮想サーバ、１つ又は複数のスイッチや１つ又は複数の仮想スイッチのサイトやロケーションを判断し、そのサイトやロケーションに応じた最適なサイトやロケーションの特定のＨＤＫＣユニット１４１やＨＤＫＣを判断及び決定する。
【０４６４】
また、本実施例の何れの技術（代替案も含む）に対しても、１つのＬＵ単位又は複数のＬＵ単位（例えば、ポート単位）のいずれの単位の技術も適用して良い。さらに、第１の接続形態、第２の接続形態又は第３の接続形態のいずれのＨＤＫＣユニット１４１、ＨＤＫＣやＬＤＫＣに対しても、１つのＬＵ単位又は複数のＬＵ単位（例えば、ポート単位）のいずれの単位の技術も適用して良い。第３の接続形態に限られず、第１の接続形態や第２の接続形態においても、本願に従う「ティア」を維持した状態での処理であれば、既存の技術にない全く新しい技術であるからである。この場合、ＨＤＫＣユニット１４１、ＨＤＫＣ、ＬＤＫＣや管理装置３０１のプロセッサが、例えば、本願に従う複数の「ティア」の各々に対応するＬＵ（例えば、通常のＬＵ、ＤＰ−ＬＵ、又は、仮想ＬＵ）の中からティアレベル（ティアレベルの範囲であっても良い）の変更しない適切な「ティア」を有するＬＵを選択、判断及び決定すること、を一例とする新たな処理を行う。
【０４６５】
なお、本実施例において、仮想ＬＵが移行される場合には、この仮想ＬＵにマッピングされる外部ＬＵのＩＤ等の情報も移行先のＨＤＫＣユニット１４１、ＨＤＫＣやＬＤＫＣ１５１に対して引き継がれるが、この場合、仮想ＬＵにマッピングされる外部ＬＵが１つＬＤＫＣが有する１つの外部ＬＵの場合には、この１つの外部ＬＵのＩＤ等の情報が引き継がれることになり、仮想ＬＵにマッピングされる外部ＬＵがＬＤＫＣの各々から１つ又は複数づつ提供される外部ＬＵ（複数のＬＤＫＣにまたがって提供される複数の外部ＬＵ）の場合には、複数の外部ＬＵのＩＤ等の情報が引き継がれることになる。
【実施例３】
【０４６６】
本発明の実施例３を説明する。その際、実施例１又は実施例２との相違点を主に説明し、実施例１又は実施例２との共通点については説明を省略或いは簡略する。
【０４６７】
第３の接続形態に従うＨＤＫＣ群（複数のＨＤＫＣユニットの集合）にダイナミックプロビジョニング（シンプロビジョニング）が適用された記憶システムにおいて、全てのＨＤＫＣ間でプール（実ページの集合）を共有することで、容量効率の向上、及び、より多くのＰＤＥＶを使用できることによる性能向上が期待できる。複数のＨＤＫＣユニットがプールを共有するためには、プールの未割当キューを共有することを意味し、実ページ管理テーブルを全てのＨＤＫＣユニットで共有する必要がある。
【０４６８】
しかし、実ページ管理テーブルが、特定のＨＤＫＣ内のＣＭ（又は、共有情報管理装置３０１（図７参照））に配置された場合、ＤＰ−ＬＵに対するＩ／Ｏの際に、外部バスを通じて実ページ管理テーブを参照する必要が生じるため、ＤＰ−ＬＵに対するＩ／Ｏの性能が低下してしまう。
【０４６９】
実施例３によれば、ＨＤＫＣユニット間でプールを共有しても、ＤＰ−ＬＵに対するＩ／Ｏの性能の低下を軽減することができる。さらに、これにより、初期導入費用を削減しつつ、小規模構成から大規模な構成へと柔軟な且つ効率的なスケールアウトを実現できる技術を提供できる。
【０４７０】
以下、実施例３を詳細に説明する。
【０４７１】
図５０は、ＨＤＫＣユニット間でのプール共有の一例を示す。以下、説明を分かり易くするため、プールを共有するＨＤＫＣユニットの数は２とするが、プールを共有するＨＤＫＣユニットの数は３以上でも良い。また、ＨＤＫＣユニットを構成するＨＤＫＣの数は１であるとする。具体的には、ＨＤＫＣ＃Ｈ０に、第３の接続媒体（外部バス）６０１を介してＨＤＫＣ＃Ｈ１が接続されているとする。ＨＤＫＣ＃Ｈ０及び＃Ｈ１の少なくとも一方に、第２の接続媒体（外部バス）を介してＬＤＫＣが接続されても良い。しかし、プールを共有するＨＤＫＣユニットを構成するＨＤＫＣの数は、２以上であっても良い。また、プールを共有する２以上のＨＤＫＣユニットの少なくとも１つのＨＤＫＣユニットにおける１以上のＨＤＫＣに、１以上のＬＤＫＣが第２の接続形態で接続されていても良い。
【０４７２】
プール１５００は、ＨＤＫＣ＃Ｈ０とＨＤＫＣ＃Ｈ１に共有される。プール１５００は、ＨＤＫＣ＃Ｈ０が有する１以上の内部ボリュームと、ＨＤＫＣ＃Ｈ１が有する１以上の内部ボリュームで構成される。「内部ボリューム」とは、既に説明した通り、物理的な記憶容量が存在しているボリュームのことであり、例えば、１つの通常のＬＵ、通常のＬＵの一部、複数の通常のＬＵのグループ、第２の接続形態に従う１つの仮想ＬＵ、仮想ＬＵの一部、複数の仮想ＬＵのグループ、１つのＲＧ、ＲＧの一部、或いは、複数のＲＧのグループで良い。ティアの概念（例えば、実施例１で説明されたティアレンジ又はティアレンジ範囲）は、「内部ボリューム」にも適用される。例えば、「内部ボリューム」が１つのＲＧ単位で管理される場合、ティアの概念（例えば、実施例１で説明されたティアレンジ又はティアレンジ範囲）も１つのＲＧ単位で管理される。
【０４７３】
本実施例では、プール１５００を構成する複数の内部ボリュームのうち、ＨＤＫＣ＃Ｈ０が有する１以上の内部ボリュームは、ＲＧ＃Ｈ００、＃Ｈ０１及び＃Ｈ０２であり、ＨＤＫＣ＃Ｈ１が有する１以上の内部ボリュームは、ＲＧ＃Ｈ１３、＃Ｈ１４及び＃Ｈ１５である（つまり、本実施例では、内部ボリュームはＲＧである）。この構成によれば、ＨＤＫＣ＃Ｈ０（内部コントローラ＃Ｈ０（ＣＰＵ＃Ｈ０））が、ＲＧ＃Ｈ１３、＃Ｈ１４及び＃Ｈ１５に第３の接続媒体６０１を介してアクセスすることが可能である。同様に、ＨＤＫＣ＃Ｈ１（内部コントローラ＃Ｈ１（ＣＰＵ＃Ｈ１））が、ＲＧ＃Ｈ００、＃Ｈ０１及び＃Ｈ０２に第３の接続媒体６０１を介してアクセスすることが可能である。プールを共有する複数のＨＤＫＣユニットが有する複数の内部ボリュームには、それぞれ、それら複数のＨＤＫＣユニットにおいてユニークな識別情報が設定されて良い。また、ＨＤＫＣ＃Ｈ０が、ＲＧ＃Ｈ００〜＃Ｈ０２に関する情報に加えて、第３の接続形態で接続されているＨＤＫＣ＃Ｈ１内のＲＧ＃Ｈ１３〜＃Ｈ１５に関する情報を、例えば、ＨＤＫＣ＃Ｈ１が第３の接続形態で接続されたときに取得し保持することができる。
【０４７４】
また、プール１５００は、そのプール１５００を共有するＨＤＫＣユニット１４１の数に応じた数の記憶領域（以下、プール領域）に分割される。例えば、プール領域の数は、プール１５００を共有するＨＤＫＣユニットの数と同じである。図５０に示す例では、プール１５００は、２つのＨＤＫＣユニット１４１（ＨＤＫＣ＃Ｈ０及び＃Ｈ１）に共有されるので、プール１５００は、２つのプール領域５０１１及び５０１２に分割される。プール領域５０１１が、ＨＤＫＣ＃Ｈ０に関連付けられ、プール領域５０１２が、ＨＤＫＣ＃Ｈ１に関連付けられる。具体的には、例えば、プール領域５０１１を構成する全ての実ページは、実ページ管理テーブル＃Ｈ０において、使用不可とは管理されず、実ページ管理テーブル＃Ｈ１において、使用不可と管理される。一方、プール領域５０１２を構成する全ての実ページは、実ページ管理テーブル＃Ｈ０において、使用不可と管理され、実ページ管理テーブル＃Ｈ１において、使用不可と管理されない。
【０４７５】
ＨＤＫＣ＃Ｈ０が有するＤＰ−ＬＵ（例えば＃１６０）の仮想ページには、プール領域５０１１から実ページが割り当てられる。一方、ＨＤＫＣ＃Ｈ１が有するＤＰ−ＬＵ（例えば＃１６１）の仮想ページには、プール領域５０１２から実ページが割り当てられる。
【０４７６】
このように、プール１５００は複数のＨＤＫＣ＃Ｈ０及び＃Ｈ１に共有可能であるが、プール１５００を構成する実ページ毎に、その実ページを使用できるＨＤＫＣは１つに限られている。このため、１つの実ページに対して複数のＨＤＫＣからＩ／Ｏが競合することが無い。
【０４７７】
本実施例の説明においては、各プール領域（５０１１、５０１２）は、プール１５００を構成する複数又は全てのＲＧにまたがる。すなわち、いずれのプール領域も、プール１５００を構成する各ＲＧの一部の記憶領域を含んでいる。言い換えれば、各プール領域は、プール１５００を構成する各ＲＧの一部の記憶領域で構成されている。  １つのＲＧにＩ／Ｏが集中することを防ぐために、仮想ページに割り当てられる実ページのソース（以下、割当元ＲＧ）は、次のように選択されて良い。
（＊）例えば、プールを構成するＮ個のＲＧがあり（Ｎは３以上の整数）、且つ、そのプールをＭ個のＨＤＫＣユニットが共有している場合（Ｍは２以上の整数、且つ、Ｎ＞Ｍ）、Ｍ個のＨＤＫＣから初めに選択されるＭ個の割当元ＲＧ（例えば、Ｍ個の割当元ＲＧの番号（例えば通し番号））が、均等に離れていて良い。図５０の例によれば、Ｎ＝６であり、Ｍ＝２である。このため、ＨＤＫＣ＃Ｈ０（内部コントローラ＃Ｈ０（ＣＰＵ＃Ｈ０））が初めに選択する割当元ＲＧがＲＧ＃Ｈ００の場合、ＨＤＫＣ＃Ｈ１（内部コントローラ＃Ｈ１（ＣＰＵ＃Ｈ１））が初めに選択する割当元ＲＧは、ＲＧ＃１３であって良い。
（＊）その後、少なくとも１つのＨＤＫＣが、ラウンドロビン等の所定の規則に従って、選択する割当元ＲＧを切り替えて良い（例えば、選択する割当元ＲＧを均等に違えて良い）。例えば、ＨＤＫＣ＃Ｈ０は、割当元ＲＧを、ＲＧ＃Ｈ００、＃Ｈ０１、＃Ｈ０２、＃Ｈ１３、＃Ｈ１４及び＃Ｈ１５の順で切り替え、ＨＤＫＣ＃Ｈ１は、割当元ＲＧを、ＲＧ＃Ｈ１３、＃Ｈ１４、＃Ｈ１５、＃Ｈ００、＃Ｈ０１及び＃Ｈ０２の順で切り替えて良い。
（＊）ラウンドロビン等の所定の規則に従って割当元ＲＧを選択していくと、２以上のＨＤＫＣが選択する割当元ＲＧがＫ回（Ｋは自然数）同じになることがあり得る（例えば、Ｋ回連続して同じになることがあり得る）。この場合、それら２以上のＨＤＫＣのうちの少なくとも１つのＨＤＫＣが、所定の規則に従って選択することに割当元ＲＧと異なる割当元ＲＧを選択し、その時点以降に、再び、所定の規則に従って割当元ＲＧを選択して良い。
【０４７８】
なお、これらの選択制御は、共有プールを管理する複数のＨＤＫＣユニット１４１のいずれか１つ以上のプロセッサ２２２や管理装置３０１内のプロセッサによって管理されて、割当元ＲＧの割り当てや変更が生じる場合には、これらのいずれかのプロセッサから割当元ＲＧの割り当てや変更を実際に制御するＨＤＫＣユニット１４１やＨＤＫＣのプロセッサ２２２に対して当該制御の指示コマンドが発行されることにより実施される。
【０４７９】
ＬＭ＃Ｈ０（＃Ｈ１）は、仮想ページ管理テーブル３２５（＃Ｈ０（＃Ｈ１））を記憶する。ＣＭ（ＳＭ領域）＃Ｈ０（＃Ｈ１）は、実ページ管理テーブル３２７（＃Ｈ０（＃Ｈ１））、キュー先頭管理テーブル３２６（＃Ｈ０（＃Ｈ１））、及び、未割当ページ使用量管理テーブル５００１（＃Ｈ０（＃Ｈ１））を記憶する。それらの様々なテーブルをを含む様々な管理情報は、プール１５００にも配置されることもでき、また、プール１５００の外部の１以上のストレージ媒体の1以上のストレージ領域に配置されることもできる。さらに、ＨＤＫＣユニット１４１の各々は、プール１５００の外部の１以上のストレージ媒体の1以上のストレージ領域を有することが出来、プール１５００の外部の１以上のストレージ媒体の1以上のストレージ領域に、管理情報だけでなく、サーバ１０１からプール１５００外のあるLUに対して送られたデータを格納することもできる。
【０４８０】
未割当ページ使用量管理テーブル＃Ｈ０（＃Ｈ１）は、ＨＤＫＣ＃Ｈ０（＃Ｈ１）に割り当てられたプール領域５０１１（５０１２）内の未割当の実ページ（仮想ページに割り当てられていない実ページ）に関する情報を有する。未割当ページ使用量管理テーブル＃Ｈ０（＃Ｈ１）は、具体的には、例えば、図５１に示すように、下記の情報、
（＊）プール領域５０１１（５０１２）内の未割当ての実ページの数である未割当ページ数５１０１、
（＊）直前回のプールメンテナンス処理（後述）で算出された未割当ページ数５１０１である前回未割当ページ数５１０２、
（＊）前回未割当ページ数５１０２から未割当ページ数５１０１を引いた値である未割当ページ使用量５１０３、
を有する。
【０４８１】
なお、本実施例で説明される技術は、１つ又は複数のＤＰ−ＬＵへの割り当てに利用されうる複数の実ページを管理するプール１５００を、複数のプール領域（５０１１、５０１２）に論理的に分割して管理及び／又は制御する技術であり、キャッシュメモリ２２４の記憶領域を論理的に分割してＨＤＫＣユニット１４１、ＨＤＫＣ及び／又はＬＤＫＣ１５１の１つ又は複数の各々に割り当ててデータの格納に利用する技術（例えば、プレキャッシュ技術）、及び／又はキャッシュメモリ２２４の記憶領域を論理的に分割して通常のＬＵ、ＤＰ−ＬＵ及び／又は仮想ＬＵの１つ又は複数の各々に割り当ててデータの格納に利用する技術（例えば、通常のＬＵ、ＤＰ−ＬＵ及び／又は仮想ＬＵの１つ又は複数毎にサービスレベルを確保するためのキャッシュメモリの論理パーティション技術）とは全く異なるものである。本実施例は、これらの技術と独立して利用してもよく、これらの技術のいずれか又は双方と一緒に利用しても良い。
【０４８２】
第３の接続形態におけるシンプロビジョニングでは、プールが多くのＲＧを有する方がＩ／Ｏの性能として有利である。しかし、そのプールにおいて、或るＲＧが属するティア（ティアレベル又はティアレベル範囲）と別のＲＧが属するティアの差が大きいと、ＤＰ−ＬＵに対するＩ／Ｏの性能が、下位のティアに属するＲＧの性能に引きずられてしまう。特に、性能ファクターとして、「距離（コマンド応答時間）」は、本実施例において、ＤＰ−ＬＵに対するＩ／Ｏの性能に大きく影響する。
【０４８３】
そこで、本実施例に係るティア管理テーブルは、例えば、図５２Ａ及び５２Ｂに示すように、内部ボリューム（ＲＧ）毎に、距離（コマンド応答時間）１００８を有する。
【０４８４】
なお、図５２Ａは、プール１５００をＨＤＫＣ＃Ｈ０及び＃Ｈ１で共有して差し支えない状況に係るティア管理テーブル＃Ｈ０を示し、図５２Ｂは、プール１５００をＨＤＫＣ＃Ｈ０及び＃Ｈ１で共有することが好ましくない状況に係るティア管理テーブル＃Ｈ０を示す。なお、図１１には、距離（コマンド応答時間）１００８が「５」となる例は開示されていないが、例えば、ＨＤＫＣ間の距離が４００ｋｍ〜５００ｋｍの場合に、距離（コマンド応答時間）１００８が「５」となって良い。
【０４８５】
図５２Ａによれば、ＨＤＫＣ＃Ｈ０内のＲＧ＃Ｈ００〜＃Ｈ０２のティアレベルと、ＨＤＫＣ＃Ｈ１内のＲＧ＃Ｈ１３〜＃Ｈ１５のティアレベルとの差の最大値「１」が、所定の閾値以下である。この場合、ＨＤＫＣ＃Ｈ０及び＃Ｈ１でプール１５００を使用することが許可される。
【０４８６】
図５２Ｂによれば、ＨＤＫＣ＃Ｈ０内のＲＧ＃Ｈ００〜＃Ｈ０２のティアレベルと、ＨＤＫＣ＃Ｈ１内のＲＧ＃Ｈ１３〜＃Ｈ１５のティアレベルとの差の最大値「６」が、所定の閾値を越えている。この場合、ＨＤＫＣ＃Ｈ０及び＃Ｈ１でプール１５００を使用することが禁止される。
【０４８７】
以下、本実施例で行われる処理を説明する。
【０４８８】
図５３は、実施例３に係るプール作成処理の流れを示す。なお、以下、マスタＣＰＵが処理を行うこととするが、他のＣＰＵが行っても良い。
【０４８９】
Ｓ５３０１で、マスタＣＰＵ＃Ｈ０が、プール作成指示を受信する。その指示は、管理者に対するＧＵＩを通じて受けても良いし、管理計算機から受けても良い。プール作成指示は、複数のＨＤＫＣユニットで共有するプールを作成することの指示である。プール作成指示は、例えば、複数のＨＤＫＣユニットとして、ＨＤＫＣ＃Ｈ０及び＃Ｈ１のＤＫＣ  ＩＤを含んで良い。また、プール作成指示は、プールを構成するＲＧの識別情報、例えば、ＲＧ＃Ｈ００、＃Ｈ０１、＃Ｈ０２、＃Ｈ１３、＃Ｈ１４及び＃Ｈ１５のＲＧ  ＩＤを含んで良い。
【０４９０】
なお、マスタＣＰＵ＃Ｈ０は、プール作成指示を受けたことに代えて、特定の条件が満たされたことを検出したときに、自動的に、Ｓ５３０２以降の処理を行なって良い。
【０４９１】
Ｓ５３０２で、マスタＣＰＵ＃Ｈ０が、ティア管理テーブル＃Ｈ０を基に、複数のプールＲＧ（＃Ｈ００、＃Ｈ０１、＃Ｈ０２、＃Ｈ１３、＃Ｈ１４及び＃Ｈ１５）のティアレベルの差の最大値が所定の閾値以下か否かを判断する。
【０４９２】
ティア管理テーブル＃Ｈ０は、第３の接続形態に従う仮想ＬＵにマッピングされている外部ＬＵの基になっているＲＧのティア（第３の接続形態で接続されているＨＤＫＣ＃Ｈ１内のＲＧのティア）に関する情報を有することができる。そのティア管理テーブル＃Ｈ０から、ＨＤＫＣ＃Ｈ０内のＲＧのティアレベルだけでなく、ＨＤＫＣ＃Ｈ１内のＲＧのティアレベルも分かる。
【０４９３】
なお、マスタＣＰＵ＃Ｈ０は、ＨＤＫＣ＃Ｈ１から、ティア管理テーブル＃Ｈ１が有する情報（例えば、ＨＤＫＣ＃Ｈ０内の仮想ＬＵ（第３の接続形態に従う仮想ＬＵ）にマッピングされている外部ＬＵのティアレベル）を受信し、その情報と、第３の接続形態に従う仮想ＬＵのティアレベルとを基に、ＨＤＫＣ＃Ｈ１内のプールＲＧ毎に、ティアレベルを算出して良い。
【０４９４】
上述のＳ５３０２の判断の結果が否定的の場合（Ｓ５３０２：Ｎｏ）、つまり、複数のプールＲＧのティアレベルの差の最大値が所定の閾値を超えている場合、それら複数のプールＲＧで構成された共有プール（ＨＤＫＣ＃Ｈ０及びＨ１が共有するプール）を作成することが好ましくないということである。そこで、Ｓ５３２０で、マスタＣＰＵ＃Ｈ０が、ＨＤＫＣ毎にプールを作成し直すよう管理者に通知して良い。或いは、管理者への通知を行わず（又は管理者への通知を行って）、マスタＣＰＵ＃Ｈ０及び＃Ｈ１が、自動で、プールを構築して良い。例えば、マスタＣＰＵ＃Ｈ０は、管理者からの指示に従い、或いは、管理者からの指示を受けること無しに自動的に、ＨＤＫＣ＃Ｈ０内のプールとして、複数のプールＲＧのうちのＨＤＫＣ＃Ｈ０が有するＲＧ＃Ｈ００〜＃Ｈ０２で構成されたプールを作成して良い。また、マスタＣＰＵ＃Ｈ１は、管理者からの指示に従い、或いは、管理者からの指示を受けること無しに自動的に、ＨＤＫＣ＃Ｈ１内のプールとして、複数のプールＲＧのうちのＨＤＫＣ＃Ｈ１が有するＲＧ＃Ｈ１３〜＃Ｈ１５で構成されたプールを作成して良い。この場合であっても、次のような例を適用することも良い。ＨＤＫＣ＃Ｈ０は、ＨＤＫＣ＃Ｈ０のＤＰ−ＬＵのアロケーションのために自装置の全ての未割当ページを使用した場合、ＨＤＫＣ＃Ｈ１の未割当ページを使用できる。ＨＤＫＣ＃Ｈ１は、ＨＤＫＣ＃Ｈ１のＤＰ−ＬＵのアロケーションのために自装置の全ての未割当ページを使用した場合、ＨＤＫＣ＃Ｈ０の未割当ページを使用できる。米国においては、US Patent Application Publication No. 2008/0184000 (Kawaguchi et al.)の明細書及び図面を上記未割当ページの使用に対して援用することが出来る。この場合、ＨＤＫＣ＃Ｈ０は、Kawaguchi et al.のストレージモジュール１１１００の処理を制御すして、ＨＤＫＣ＃Ｈ１は、Kawaguchi et al.のストレージモジュール１１２００の処理を制御する。  
【０４９５】
上述のＳ５３０２の判断の結果が肯定的の場合（Ｓ５３０２：Ｙｅｓ）、つまり、複数のプールＲＧのティアレベルの差の最大値が所定の閾値以下の場合、それら複数のプールＲＧで構成された共有プールを作成して差し支えないということである。この場合、以下の処理が行われる。
【０４９６】
すなわち、Ｓ５３０３で、マスタＣＰＵ＃Ｈ０が、実ページ管理テーブル＃Ｈ０を更新する。具体的には、例えば、マスタＣＰＵ＃Ｈ０が、プールＲＧ（＃Ｈ００、＃Ｈ０１、＃Ｈ０２、＃Ｈ１３、＃Ｈ１４及び＃Ｈ１５）について、テーブルポインタ１４０１、プールＲＧ  ＩＤ１４０２、及び実ページアドレス１４０３を設定し、且つ、割当状態１４０４として「未割当」を設定する（図５４参照）。
【０４９７】
Ｓ５３０４で、マスタＣＰＵ＃Ｈ０が、実ページ管理テーブル＃Ｈ０が有する情報（プールＲＧについての情報１４０１〜１４０４）を、ＨＤＫＣ＃Ｈ１に送信する。その情報は、第３の接続媒体（外部バス）を介してＨＤＫＣ＃Ｈ１に届く。
【０４９８】
Ｓ５３１１で、マスタＣＰＵ＃Ｈ１が、実ページ管理テーブル＃Ｈ０が有する情報（プールＲＧについての情報１４０１〜１４０４）をＨＤＫＣ＃Ｈ０から受信し、受信した情報を、実ページ管理テーブル＃Ｈ１に書き込む（図５５参照）。この時点で、実ページ管理テーブル＃Ｈ１の内容は、実ページ管理テーブル＃Ｈ０と同じである（図５４及び図５５参照）。
【０４９９】
Ｓ５３０５で、マスタＣＰＵ＃Ｈ０は、実ページ管理テーブル＃Ｈ０において、偶数ＲＧの奇数実ページに対応した割当状態１４０４を「使用不可」に更新し、且つ、奇数ＲＧの偶数実ページに対応した割当状態１４０４を「使用不可」に更新する（図５７参照）。一方、Ｓ５３１２で、マスタＣＰＵ＃Ｈ１が、実ページ管理テーブル＃Ｈ１において、偶数ＲＧの偶数実ページに対応した割当状態１４０４を「使用不可」に更新し、且つ、奇数ＲＧの奇数実ページに対応した割当状態１４０４を「使用不可」に更新する（図５８参照）。「偶数ＲＧ」とは、プールＲＧ  ＩＤ１４０２の末尾が偶数（０を含む）であるＲＧであり、「奇数ＲＧ」とは、プールＲＧ  ＩＤ１４０２の末尾が奇数であるＲＧである。「偶数実ページ」とは、実ページアドレス１４０３の末尾が偶数（０を含む）である実ページであり、「奇数実ページ」とは、実ページアドレス１４０３の末尾が奇数である実ページである。
【０５００】
Ｓ５３０５及びＳ５３１２によれば、複数のプールＲＧ（＃Ｈ００、＃Ｈ０１、＃Ｈ０２、＃Ｈ１３、＃Ｈ１４及び＃Ｈ１５）で構成されたプールが、半分に２つのプール領域に分割される（例えば、図５０、図５７及び図５８参照）。一方のプール領域が、ＨＤＫＣ＃Ｈ０で使用可能であるがＨＤＫＣ＃Ｈ１で使用不可とされ、他方のプール領域が、ＨＤＫＣ＃Ｈ１で使用可能であるがＨＤＫＣ＃Ｈ０で使用不可とされる。つまり、プールが２つのプール領域に均等に分割され、各実ページについて、ＨＤＫＣ＃Ｈ０及び＃Ｈ１のうちの１つだけが使用可能とされる。
【０５０１】
なお、Ｓ５３０５及びＳ５３１２によれば、２以上の不連続の実ページの割当状態１４０４が「使用不可」とされるが、２以上の連続した実ページの割当状態１４０４が「使用不可」とされても良い。例えば、プールの前半の実ページ群（アドレスが連続した実ページ群（プール領域））が、ＨＤＫＣ＃Ｈ０に割り当てられ、プールの後半の実ページ群（アドレスが連続した実ページ群（プール領域））が、ＨＤＫＣ＃Ｈ１に割り当てられて良い。すなわち、プールを構成する全てのＲＧにまたがるようにプール領域が得られさえすれば、プールはどのように分割されても良い。
【０５０２】
また、複数のＨＤＫＣユニットにそれぞれ割り当てられる複数のプール領域の容量は、均等でなくても良い。例えば、複数のＨＤＫＣユニットにおいて、第１のＨＤＫＣユニットに、第１のプール領域が割り当てられ、第１のＨＤＫＣユニットよりもＩ／Ｏコマンドを受ける頻度の低い第２のＨＤＫＣユニットに、第１のプール領域よりも容量の小さい第２のプール領域が割り当てられて良い。この例は、第２のＨＤＫＣユニットが第１のＨＤＫＣユニットよりもＩ／Ｏコマンドを受ける頻度の低いという条件に代えて又は加えて、図１０のティア管理テーブルのコントローラ性能の値に基づいて第１のＨＤＫＣユニットのコントローラー性能が第２のＨＤＫＣユニットのコントローラ性能に比べて高いという条件でも適する。また、ＨＤＫＣユニット141の各々に含まれる複数の実ストレージエリアの容量は、図８の接続管理テーブルの1以上のエレメント及び／又は図９及び／又は図１０のティア管理テーブルの1以上のエレメントに基づいて決定される重み付けパラメータに応じて、複数のＨＤＫＣユニット１４１に分割及び分配される。例えば、図１０のティア管理テーブルの距離（コマンド応答時間）のちに基づいて複数のＨＤＫＣユニット１４１の第１のＨＤＫＣユニットと第２のＨＤＫＣユニットとの距離が遠い場合（コマンド応答性能に時間がかかる場合）、第１のＨＤＫＣユニットに含まれる複数の実ストレージエリアの容量のうちの第１の容量は、第１のＨＤＫＣユニットに割り当てられ、第１のＨＤＫＣユニットに含まれる複数の実ストレージエリアの容量のうちの第２の容量（第１の容量よりも容量の小さい容量）は、第２のＨＤＫＣユニットに割り当てられる。この例の場合、複数のＨＤＫＣユニット１４１の第２のＨＤＫＣユニットに含まれる複数の実ストレージエリアの容量のうちの第３の容量は、第２のＨＤＫＣユニットに割り当てられ、第２のＨＤＫＣユニットに含まれる複数の実ストレージエリアの容量のうちの第４の容量（第３の容量よりも容量の小さい容量）は、第１のＨＤＫＣユニットに割り当てられる。これらの技術は、ＨＤＫＣユニット１４１、ＨＤＫＣ及び／又は管理装置３０１のプロセッサによって制御される。また、これらの技術は、１つの統合プールを共有する３台以上の複数のＨＤＫＣユニット１４１にも適用でき、３台以上の複数のＨＤＫＣユニット１４１の各々に異なるサイズの容量を割り当てることができる。  
【０５０３】
その後、ＨＤＫＣ＃Ｈ０及び＃Ｈ１は、それぞれ、割当状態１４０４が「未割当」の実ページについて、未割当キューを作成する。未割当キューの実ページの並びは、例えば、実ページ毎にＲＧがラウンドロビンする並び（つまり、実ページを有するＲＧが順次に異なっている並び）とされる。
【０５０４】
具体的には、例えば、Ｓ５３０６で、マスタＣＰＵ＃Ｈ０が、初めに割り当てられる実ページのソースをＲＧ＃Ｈ００とし、且つ、未割当キューの実ページの並びが、実ページ毎にＲＧがラウンドロビンするように、割当状態１４０４が「未割当」に対応した未割当キューポインタ１４０６を更新する。Ｓ５３０７で、マスタＣＰＵ＃Ｈ０が、ＨＤＫＣ＃Ｈ０の未割当キューの先頭に対応したテーブルポインタ１４０１を、キュー先頭管理テーブル＃Ｈ０に登録する。つまり、キュー先頭管理テーブル＃Ｈ０が有する情報（先頭ポインタ）が、図５６Ａに示す先頭ポインタから図５９Ａに示す先頭ポインタに変わる。
【０５０５】
一方、例えば、Ｓ５３１３で、マスタＣＰＵ＃Ｈ１が、初めに割り当てられる実ページのソースをＲＧ＃Ｈ１３とし、且つ、未割当キューの実ページの並びが、実ページ毎にＲＧがラウンドロビンするように、割当状態１４０４が「未割当」に対応した未割当キューポインタ１４０６を更新する。Ｓ５３１４で、マスタＣＰＵ＃Ｈ１が、ＨＤＫＣ＃Ｈ１の未割当キューの先頭に対応したテーブルポインタ１４０１を、キュー先頭管理テーブル＃Ｈ１に登録する。つまり、キュー先頭管理テーブル＃Ｈ１が有する情報（先頭ポインタ）が、図５６Ｂに示す先頭ポインタから図５９Ｂに示す先頭ポインタに変わる。
【０５０６】
Ｓ５３０６及びＳ５３１３によれば、未割当キューの先頭に対応するＲＧは、ＨＤＫＣ＃Ｈ０と＃Ｈ１で別々になる。ＨＤＫＣ＃Ｈ０及び＃Ｈ１は、それぞれ、未割当キューに従い、ラウンドロビンで、仮想ページに割り当てる実ページを選ぶことが良い。これにより、プール内のＲＧが均等に使用され、且つ、ＨＤＫＣ＃Ｈ０及び＃Ｈ１から同一のＲＧから実ページが選択されるといった集中を回避することが期待できる。
【０５０７】
つまり、プール１５００内から分割された各々のプール領域５０１１（又は５０１２）においては、仮想ページに割り当てられる実ページは、ｎ回前（ｎは自然数）に割り当てられた実ページの基になっているＲＧとは異なるＲＧが基になっている実ページで良い（例えば、ｎ＝１で良い）。具体的には、例えば、ラウンドロビン形式で、割り当てられる実ページの基になっているＲＧが切り替わって良い。これにより、特定のＲＧにアロケーションに伴うＩ／Ｏが集中してしまうことを回避でき、以って、ＤＫＣのＩ／Ｏ性能の向上が期待できる。１つのプール１５００に関連付けられるＤＰ−ＬＵ又は複数ＤＰ−ＬＵのグループ（ＤＰ−ＬＵグループ）が、ＤＰ−ＬＵ又はＤＰ−ＬＵグループ毎に異なるティアに属している場合（例えば、第一のＤＰ−ＬＵ又は第一のＤＰ−ＬＵグループは第一のティアに属し、第二のＤＰ−ＬＵ又は第二のＤＰ−ＬＵグループは第二のティアに属している場合）、ティア別に、ｎ回前に割り当てられた実ページの基になっているＲＧと異なるＲＧから実ページが割り当てられて良い（例えば、第一のＤＰ−ＬＵ又は第一のＤＰ−ＬＵグループは第一のティアを構成する複数のＲＧの範囲内において、ラウンドロビン形式で、割り当てられる実ページの基になっているＲＧが切り替わり、第二のＤＰ−ＬＵ又は第二のＤＰ−ＬＵグループは第二のティアを構成する複数のＲＧの範囲内において、ラウンドロビン形式で、割り当てられる実ページの基になっているＲＧが切り替わる）。
【０５０８】
以上が、プール作成処理の流れである。ＨＤＫＣ＃Ｈ０及び＃Ｈ１が、このプール作成処理で作成された実ページ管理テーブル＃Ｈ０及び＃Ｈ１を基にＩ／Ｏ処理（ＤＰ−ＬＵに対するＩ／Ｏ）を行うことで、プール１５００を構成する全ＲＧから均等に未割当実ページを割り当てることができる。これにより、ＤＰ−ＬＵに対するＩ／Ｏの性能の低下を軽減することができる。さらに、本実施例の一つの統合プールとしてのプール１５００によって、複数のＨＤＫＣユニット１４１は各々のＨＤＫＣユニット１４１の負荷を分散できる。さらに、この実施例と第２の実施例を一緒に使用することによって、複数のＨＤＫＣユニット１４１間の負荷分散処理はより効果的なものとになる。さらに、プール作成処理は、複数のＨＤＫＣユニット１４１の未割当ストレージ領域を複数のＨＤＫＣユニット１４１で共有するため、実ストレージ領域の無駄を効果的に削減できるとともに、複数のＨＤＫＣユニット１４１を含むストレージシステムに費やされる費用を効果的に削減できる。
【０５０９】
なお、本実施例で言う「未割当実ページ」とは、仮想ページに割り当てられていない実ページであって、仮想ページに割り当て可能な実ページ（割当状態１４０４が「使用不可」とされていない実ページ）である。
【０５１０】
以下、プール作成処理後のＩ／Ｏ処理（ＤＰ−ＬＵに対するデータのＩ／Ｏの処理）の流れを説明する。その際、適宜、図６６乃至図６９を参照する。なお、以下の説明では、下記の前提があるとする。ＨＤＫＣ＃Ｈ０及＃Ｈ１のいずれも、２つ多くのＤＰ−ＬＵを有することができる。
（＊）ＨＤＫＣ＃Ｈ０は、２つのＤＰ−ＬＵ＃１６０及び＃１６２を有する。
（＊）ＨＤＫＣ＃Ｈ１は、２つのＤＰ−ＬＵ＃１６１及び＃１６３を有する。
（＊）ＤＰ−ＬＵ＃１６０及び＃１６２に、プール領域５０１１が関連付けられている。
（＊）ＤＰ−ＬＵ＃１６１及び＃１６３に、プール領域５０１２が関連付けられている。
【０５１１】
例えば、ＨＤＫＣ＃Ｈ０が、ＤＰ−ＬＵ＃１６０を指定したライトコマンドを受信したとする。この場合、ＨＤＫＣ＃Ｈ０の内部コントローラ＃Ｈ０が、以下の処理の行うことができる。
（ｓ１）内部コントローラ＃Ｈ０は、受信したライトコマンドで指定されているアドレスが属する仮想ページ（以下、仮想ページ（０ｘ０２））を特定する。
（ｓ２）内部コントローラ＃Ｈ０は、仮想ページ管理テーブル＃Ｈ０を基に、仮想ページ（０ｘ０２）に実ページが割り当てられているか否かを判断する。
（ｓ３）内部コントローラ＃Ｈ０は、上記（ｓ２）の判断の結果が否定的の場合に、ＤＰ−ＬＵ＃１６０が関連付けられているプール領域５０１１から、キュー先頭管理テーブル＃Ｈ０の先頭ポインタと一致する未割当てキューポインタに対応した実ページ（ＲＡＩＤグループ＃Ｈ１５に基づく実ページ（０ｘ０１））を、仮想ページ（０ｘ０２）に割り当てる。具体的には、例えば、内部コントローラ＃Ｈ０は、下記の処理、
（＊）ＲＡＩＤグループ＃Ｈ１５に基づく実ページ（０ｘ０１）に対応した割当状態１４０４を「割当」に更新し、その実ページ（０ｘ０１）に対応したＤＰ−ＬＵ  ＩＤ１４０５を「１６０」に更新する（図６７参照）、
（＊）ＤＰ−ＬＵ＃１６０の仮想ページ（０ｘ０２）に対応した割当状態１３０３を「割当」に更新し、その仮想ページ（０ｘ０２）に対応したプールＲＧ  ＩＤ１３０４を「Ｈ１５」に更新し、且つ、その仮想ページ（０ｘ０２）に対応した実ページアドレス１３０５を「０ｘ０１」に更新する（図６６参照）、
（＊）キュー先頭管理テーブル＃Ｈ０の先頭ポインタを、「０ｘ０００２」に更新する、
を行う。
【０５１２】
また、例えば、プール領域５０１２が作成された後、初めて、ＨＤＫＣ＃Ｈ１が、ライトコマンドを受信したとする。この場合、ＨＤＫＣ＃Ｈ１の内部コントローラ＃Ｈ１が、以下の処理の行うことができる。
（ｓ１１）内部コントローラ＃Ｈ１は、受信したライトコマンドで指定されているアドレスが属する仮想ページ（以下、ＤＰ−ＬＵ＃１６１の仮想ページ（０ｘ０２））を特定する。
（ｓ１２）内部コントローラ＃Ｈ１は、仮想ページ管理テーブル＃Ｈ１を基に、仮想ページ（０ｘ０２）に実ページが割り当てられているか否かを判断する。
（ｓ１３）内部コントローラ＃Ｈ１は、上記（ｓ１２）の判断の結果が否定的の場合に、ＤＰ−ＬＵ＃１６１が関連付けられているプール領域５０１２から、キュー先頭管理テーブル＃Ｈ１の先頭ポインタと一致する未割当てキューポインタに対応した実ページ（ＲＡＩＤグループ＃Ｈ１３に基づく実ページ（０ｘ００））を、ＤＰ−ＬＵ＃１６１の仮想ページ（０ｘ０２）に割り当てる。具体的には、例えば、内部コントローラ＃Ｈ１は、下記の処理、
（＊）ＲＡＩＤグループ＃Ｈ１３に基づく実ページ（０ｘ００）に対応した割当状態１４０４を「割当」に更新し、その実ページ（０ｘ００）に対応したＤＰ−ＬＵ  ＩＤ１４０５を「１６１」に更新する（図６９参照）、
（＊）ＤＰ−ＬＵ＃１６１の仮想ページ（０ｘ０２）に対応した割当状態１３０３を「割当」に更新し、その仮想ページ（０ｘ０２）に対応したプールＲＧ  ＩＤ１３０４を「Ｈ１３」に更新し、且つ、その仮想ページ（０ｘ０２）に対応した実ページアドレス１３０５を「０ｘ００」に更新する（図６８参照）、
（＊）キュー先頭管理テーブル＃Ｈの先頭ポインタを、「０ｘ４００１」に更新する、
を行う。
【０５１３】
ところで、本実施例では、共有されているプール内のプール領域別に、未割当実ページが消費される（未割当実ページが仮想ページに割り当てられる）。このため、未割当ページ使用量５１０３（すなわち、消費された未割当実ページの数）（図５１参照）が、プール領域毎に異なり得る。故に、例えば、プール領域５０１１に未割当実ページが不足しており、プール領域５０１２に未割当実ページが余っていることが発生し得る。
【０５１４】
そこで、本実施例では、更なる工夫が採用されている。具体的には、共有されているプール１５００についてのメンテナンス処理（以下、プールメンテナンス処理）が行われる。この処理は、定期的又は不定期的に行われる。これにより、複数のプール領域の未割当ページ使用量５１０３（残りの実ストレ−ジ領域の使用量）が均等になるよう制御される。プールメンテナンス処理は、未割当実ページが不足している特定のＨＤＫＣユニットの発生を効果的に回避することができるために、高い信頼性を実現できる。さらに、プールメンテナンス処理は、複数のＨＤＫＣユニット１４１の未割当ストレージ領域を複数のＨＤＫＣユニット１４１で共有することにより、実ストレージ領域の無駄を効果的に削減できるとともに、複数のＨＤＫＣユニット１４１を含むストレージシステムに費やされる費用を効果的に削減できる。  
【０５１５】
なお、未割当実ページの数は、一般に、数時間のうちに大きく変動することは少ない。そのため、プールメンテナンス処理の実施頻度は、例えば、数日〜数週間に１回で良いと考えられる。この程度の頻度であれば、プールメンテナンス処理が、ＤＰ−ＬＵに対するＩ／Ｏの性能に大きく影響することは無いと考えられる。プールメンテナンス処理は、管理者任意の頻度（管理者が設定したパラメータ）に従って開始されて良いし、管理者から手動で明示的な指示がある都度に開始されても良い。
【０５１６】
図６０乃至図６１は、プールメンテナンス処理の流れを示す。なお、以下、マスタＣＰＵが処理を行うこととするが、他のＣＰＵが行っても良い。つまり、複数のＨＤＫＣユニット１４１、ＨＤＫＣ及び／又は管理装置３０１のプロセッサが行っても良い。この点は、本命最初の何れの実施例においても同様である。
【０５１７】
例えば、プールメンテナンス処理の開始の時点で、マスタＣＰＵ＃Ｈ０が、Ｓ６００１を開始し、マスタＣＰＵＨ０１が、Ｓ６０５１を開始する。
【０５１８】
Ｓ６００１で、マスタＣＰＵ＃Ｈ０が、下記、
（６００１ａ）実ページ管理テーブル＃Ｈ０を基に、ＨＤＫＣ＃Ｈ０の未割当キューに属する実ページの数（つまり、プール領域５０１１内の未割当実ページの数）をカウントする、
（６００１ｂ）未割当ページ使用量管理テーブル＃Ｈ０内の未割当ページ数５１０１を、前回未割当ページ数５１０２として、未割当ページ使用量管理テーブル＃Ｈ０に設定する、
（６００１ｃ）上記（６００１ａ）でカウントされた数を表す情報を、未割当ページ数５１０１として、未割当ページ使用量管理テーブル＃Ｈ０に設定する、
を行う。そして、Ｓ６００２で、マスタＣＰＵ＃Ｈ０が、前回未割当ページ数５１０２（上記（６００１ｂ）で設定した値）から未割当ページ数５１０１（上記（６００１ｃ）で設定した値）を引いた値である未割当ページ使用量５１０３を、未割当ページ使用量管理テーブル＃Ｈ０に設定する。
【０５１９】
同様に、Ｓ６０５１で、マスタＣＰＵ＃Ｈ１が、下記、
（Ｓ６０５１ａ）実ページ管理テーブル＃Ｈ１を基に、ＨＤＫＣ＃Ｈ１の未割当キューに属する実ページの数（つまり、プール領域５０１２内の未割当実ページの数）をカウントする、
（Ｓ６０５１ｂ）未割当ページ使用量管理テーブル＃Ｈ１内の未割当ページ数５１０１を、前回未割当ページ数５１０２として、未割当ページ使用量管理テーブル＃Ｈ１に設定する、
（Ｓ６０５１ｃ）上記（６０５１ａ）でカウントされた数を表す情報を、未割当ページ数５１０１として、未割当ページ使用量管理テーブル＃Ｈ１に設定する、
を行う。そして、Ｓ６０５２で、マスタＣＰＵ＃Ｈ１が、前回未割当ページ数５１０２（上記（６０５１ｂ）で設定した値）から未割当ページ数５１０１（上記（６０５１ｃ）で設定した値）を引いた値である未割当ページ使用量５１０３を、未割当ページ使用量管理テーブル＃Ｈ１に設定する。
【０５２０】
Ｓ６００３で、マスタＣＰＵ＃Ｈ０は、ＨＤＫＣ＃Ｈ１に、使用量情報コマンドを送信する。使用量情報コマンドは、未割当ページ使用量管理テーブル＃Ｈ１が有する情報を取得するためのコマンドである。
【０５２１】
Ｓ６０５３で、マスタＣＰＵ＃Ｈ１が、ＨＤＫＣ＃Ｈ０からの使用量情報コマンドを受信し、未割当ページ使用量管理テーブル＃Ｈ１が有する情報（例えば、情報５１０１〜５１０３）を、ＨＤＫＣ＃Ｈ０に送信する。
【０５２２】
マスタＣＰＵ＃Ｈ０が、未割当ページ使用量管理テーブル＃Ｈ１が有する情報をＨＤＫＣ＃Ｈ１から受信する。マスタＣＰＵ＃Ｈ０は、その受信した情報（未割当ページ使用量管理テーブル＃Ｈ１が有する情報）と、未割当ページ使用量管理テーブル＃Ｈ０とを基に、理想的な未割当実ページ数を算出する。「理想的な未割当実ページ数」は、例えば、下記の（観点Ａ）及び（観点Ｂ）のいずれに従う数でも良いが、プール領域毎に未割当ページ使用量５１０３が異なるため、（観点Ａ）よりも（観点Ｂ）の方が好ましいと考えられる。なぜなら、各プール領域に、そのプール領域の未使用実ページの消費頻度に応じた数の未使用実ページを設置することができるからである。
（観点Ａ）全てのプール領域の未割当実ページ数が同じになるようにする。
（観点Ｂ）プール領域のページ比率と同じ比率でそのプール領域に未割当実ページが存在するように、プール全体についての未割当実ページの数が複数のプール領域に分配される。
【０５２３】
Ｓ６００４で、マスタＣＰＵ＃Ｈ０が、未割当ページ使用量管理テーブル＃Ｈ１が有する情報と、未割当ページ使用量管理テーブル＃Ｈ０とを基に、プール領域５０１１（すなわち、ＨＤＫＣ＃Ｈ０が使用するプール領域）のページ比率を算出する。プール領域５０１１のページ比率は、全てのプール領域の未割当ページ使用量５１０３の合計に対する、プール領域５０１１の未割当ページ使用量５１０３の割合である。従って、例えば、プール領域５０１１のページ比率は、下記の式、
（プール領域５０１１のページ比率）＝
（プール領域５０１１の未割当ページ使用量５１０３）／｛（プール領域５０１１の未割当ページ使用量５１０３）＋（プール領域５０１２の未割当ページ使用量５１０３）｝
で算出される。
【０５２４】
そして、Ｓ６００５で、マスタＣＰＵ＃Ｈ０が、プール領域５０１１について、算出されたページ比率を基に理想未割当ページ数を算出する。例えば、プール領域５０１１の理想未割当ページ数は、プール領域５０１１のページ比率と、全てのプール領域の未割当ページ数５１０１の合計との積である。従って、例えば、プール領域５０１１の理想未割当ページ数は、下記の式、
（プール領域５０１１の理想未割当ページ数）＝
（プール領域５０１１のページ比率）×｛（プール領域５０１１の未割当ページ数５１０１）＋（プール領域５０１２の未割当ページ数５１０１）｝
で算出される（小数点以下は四捨五入されても切り捨てされても良い）。
【０５２５】
なお、プール領域５０１１の未割当ページ使用量５１０３が極端に少ない（又は極端に多い）場合、プール領域５０１１における未割当実ページを極端に少なく（又は極端に多く）してしまう可能性がある。そのため、ページ比率の閾値として、最低比率（及び／又は最高比率）が設けられて良い。Ｓ６００４で算出されたページ比率が最低比率未満（又は最高比率を超えている）場合、マスタＣＰＵ＃Ｈ０は、そのページ比率を最低比率（又は最高比率）と同じ値として、Ｓ６００４で理想未割当ページ数を算出して良い。
【０５２６】
Ｓ６００６で、マスタＣＰＵ＃Ｈ０が、プール領域５０１１の移動未割当ページ数を算出する。プール領域５０１１の移動未割当ページ数は、プール領域５０１１から減らすべき未割当実ページの数、又は、プール領域５０１１に増やすべき未割当実ページの数である。具体的には、例えば、プール領域５０１１の移動未割当ページ数は、下記の式、
（プール領域５０１１の移動未割当ページ数）＝
（プール領域５０１１の未割当ページ数５１０１）−（プール領域５０１１の理想未割当ページ数）
で算出される。
【０５２７】
Ｓ６００４乃至Ｓ６００６によれば、図６３Ａ及び図６３Ｂを例にとると、プール領域５０１１について、下記の通り、
（Ｓ６００４）ページ比率＝１０００／（１０００＋５００）＝２/３
（Ｓ６００５）理想未割当ページ数＝（８５００＋６５００）×２/３＝１００００
（Ｓ６００６）移動未割当ページ数＝８５００−１００００＝−１５００
に算出される。
【０５２８】
移動未割当ページ数が正の値の場合、図６１に示す処理が行われ、移動未割当ページ数が負の値の場合、図６２に示す処理が行われる。移動未割当ページ数が０（ゼロ）の場合、図６１及び図６２のいずれも行われなくて良い。
【０５２９】
図６１によれば（すなわち、移動未割当ページ数が正の値の場合）、ＨＤＫＣ＃Ｈ０がＨＤＫＣ＃Ｈ１に未割当実ページを与える。言い換えれば、プール領域５０１１からプール領域５０１２に移動未割当ページ数と同数の未割当実ページが移動する。
【０５３０】
具体的には、Ｓ６１０１で、マスタＣＰＵ＃Ｈ０が、実ページ管理テーブル＃Ｈ０における、移動未割当ページ数と同数の未割当実ページの割当状態１４０４を、「未割当」から「使用不可」に更新する。且つ、マスタＣＰＵ＃Ｈ０は、割当状態１４０４が「使用不可」に更新された１以上の実ページに対応する１以上のテーブルポインタを退避する。ここで言う「退避する」とは、例えば、マスタＣＰＵ＃Ｈ０が、ＬＭ＃Ｈ０又はＣＭ＃Ｈ０等の記憶領域に、それら１以上のテーブルポインタを書き込むことである。
【０５３１】
Ｓ６１０２で、マスタＣＰＵ＃Ｈ０が、Ｓ６１０１で退避した１以上のテーブルポインタをＨＤＫＣ＃Ｈ１に通知する。
【０５３２】
Ｓ６１５１で、マスタＣＰＵ＃Ｈ１が、ＨＤＫＣ＃Ｈ０から１以上のテーブルポインタを受信する。それら１以上のテーブルポインタに対応した１以上の割当状態１４０４は、実ページ管理テーブル＃Ｈ１において、いずれも、「使用不可」となっている。ＨＤＫＣ＃Ｈ０が使える実ページはＨＤＫＣ＃Ｈ１が使えないように管理されているからである。そこで、マスタＣＰＵ＃Ｈ１は、次のように実ページ管理テーブル＃Ｈ１を更新する。すなわち、マスタＣＰＵ＃Ｈ１は、受信した１以上のテーブルポインタに対応する１以上の割当状態１４０４を、「使用不可」から「未割当」に更新する。また、マスタＣＰＵ＃Ｈ１は、「未割当」とされた実ページに対応する未割当キューポインタ１４０６を更新することで、その実ページをＨＤＫＣ＃Ｈ１の未割当キューに接続する。
【０５３３】
以上のＳ６１０１、Ｓ６１０２及びＳ６１５１で、ＨＤＫＣ＃Ｈ０からＨＤＫＣ＃Ｈ１への、移動未割当ページ数と同数の未割当実ページの移動が完了される。
【０５３４】
一方、図６２によれば（すなわち、移動未割当ページ数が負の値の場合）、ＨＤＫＣ＃Ｈ０がＨＤＫＣ＃Ｈ１から未割当実ページをもらう。言い換えれば、プール領域５０１２からプール領域５０１１に移動未割当ページ数と同数の未割当実ページが移動する。
【０５３５】
具体的には、Ｓ６２０１で、マスタＣＰＵ＃Ｈ０が、移動未割当ページ数を表す情報をＨＤＫＣ＃Ｈ１に送信する。
【０５３６】
Ｓ６２５１で、マスタＣＰＵ＃Ｈ１が、移動未割当ページ数を表す情報をＨＤＫＣ＃Ｈ０から受信する。そして、マスタＣＰＵ＃Ｈ１が、実ページ管理テーブル＃Ｈ１における、移動未割当ページ数と同数の未割当実ページの割当状態１４０４を、「未割当」から「使用不可」に更新する。且つ、マスタＣＰＵ＃Ｈ１は、割当状態１４０４が「使用不可」に更新された１以上の実ページに対応する１以上のテーブルポインタを退避する。ここで言う「退避する」とは、例えば、マスタＣＰＵ＃Ｈ１が、ＬＭ＃Ｈ１又はＣＭ＃Ｈ１等の記憶領域に、それら１以上のテーブルポインタを書き込むことである。
【０５３７】
Ｓ６２５２で、マスタＣＰＵ＃Ｈ１が、Ｓ６２５１で退避した１以上のテーブルポインタをＨＤＫＣ＃Ｈ０に通知する。
【０５３８】
Ｓ６２０２で、マスタＣＰＵ＃Ｈ０が、ＨＤＫＣ＃Ｈ１から１以上のテーブルポインタを受信する。そして、マスタＣＰＵ＃Ｈ０は、次のように実ページ管理テーブル＃Ｈ０を更新する。すなわち、マスタＣＰＵ＃Ｈ０は、受信した１以上のテーブルポインタに対応する１以上の割当状態１４０４を、「使用不可」から「未割当」に更新する。また、マスタＣＰＵ＃Ｈ０は、「未割当」とされた実ページに対応する未割当キューポインタ１４０６を更新することで、その実ページをＨＤＫＣ＃Ｈ０の未割当キューに接続する。
【０５３９】
以上のＳ６２０１、Ｓ６２５１、Ｓ６２５２及びＳ６２０２で、ＨＤＫＣ＃Ｈ１からＨＤＫＣ＃Ｈ０への、移動未割当ページ数と同数の未割当実ページの移動が完了される。
【０５４０】
以上が、プールメンテナンス処理の説明である。プール１５００は一つの統合プールであるので、複数のＨＤＫＣユニット１４１、ＨＤＫＣ及び／又は管理装置３０１のプロセッサが、プール１５００の残り容量（未割り当ての全容量）がある閾値より以下又は同等と判断した場合、そのプロセッサが実ストレージ媒体を追加のために管理装置３０１に警告を表示させるように制御する。この警告に基づいて、ユーザ及び／又は管理者は、実ストレージ媒体を各々のＨＤＫＣユニット１４１へ追加できる。しかしながら、本実施例においては、ユーザは、各々のＨＤＫＣユニット１４１でなく、少なくとも一つのＨＤＫＣユニット１４１へ実ストレージ媒体を追加することもできる。理由は、プールメンテナンス処理が自動的に実ストレージエリアを複数のＨＤＫＣユニット１４１へ割り当て及び分配することができるからである。さらに、この実施例は、ＨＤＫＣユニット１４１の各々が他のＤＨＫＣユニットに対して自装置の実ストレージ領域を配分／割当しない、という例を有することも出来る。この例においては、ＨＤＫＣユニット１４１の各々は、他のＨＤＫＣユニットのPool-RG IDや実ページアドレスに対応する図５７及び５８の割り当て状態を非割当として管理する。この例においても、プールメンテナンス処理を利用することにより、高い信頼性と非高コストを実現できる。  
【０５４１】
なお、上記の説明では、ＨＤＫＣ＃Ｈ０に第３の接続形態で接続されているＨＤＫＣ（第３接続ＨＤＫＣ）の数が１であることを例に採ったが、複数の第３接続ＨＤＫＣがある場合にも、プール作成処理（図５３参照）、及び、プールメンテナンス処理（図６０乃至図６３参照）を行うことができる。なお、複数の第３接続ＨＤＫＣがある場合、例えば、プールメンテナンス処理では、次のいずれかが採用されて良い。
＜＜移動未割当ページ数が正の値＞＞
（＊）ＨＤＫＣ＃Ｈ０が、移動未割当ページ数と同数の未割当実ページを、複数の第３接続ＨＤＫＣのうちの、未割当ページ数５１０１が最も少ないＨＤＫＣに与える。
（＊）ＨＤＫＣ＃Ｈ０が、移動未割当ページ数と同数の未割当実ページを、複数の第３接続ＨＤＫＣに均等に与える。
＜＜移動未割当ページ数が負の値＞＞
（＊）ＨＤＫＣ＃Ｈ０が、移動未割当ページ数と同数の未割当実ページを、複数の第３接続ＨＤＫＣのうちの、未割当ページ数５１０１が最も多いＨＤＫＣからもらう。
（＊）ＨＤＫＣ＃Ｈ０が、移動未割当ページ数と同数の未割当実ページを、複数の第３接続ＨＤＫＣから均等にもらう。
【０５４２】
また、ＨＤＫＣ＃０が、ＨＤＫＣ＃０と複数の第３接続ＨＤＫＣとのそれぞれについて、ページ比率及び理想未割当ページ数を算出して良い。それらのＨＤＫＣにおける、或るＨＤＫＣと別のＨＤＫＣ間で、未割当実ページが受け渡しされても良い。
【０５４３】
本実施例においては、プール１５００がそのプール１５００を共有するＨＤＫＣユニット１４１の数に応じた数の記憶領域（以下、プール領域）に分割されることを説明した。本実施例としては、ＨＤＫＣユニット１４１によってプール１５００を生成又は形成する場合に、複数のＨＤＫＣユニット１４１、ＨＤＫＣ及び／又は管理装置３０１のプロセッサが、プール１５００を共有する各ＨＤＫＣユニット１４１の各々にとって均等な記憶領域のサイズになるようにプール１５００の総記憶領域サイズを分割して複数のプール領域を構成したりすることも良い。この技術は、プールメンテナンス処理にも適用できる。
【０５４４】
又は、ＨＤＫＣユニット１４１、ＨＤＫＣ及び／又は管理装置３０１のプロセッサが、プール１５００を共有する各ＨＤＫＣユニット１４１の各々に対して均等な数の実ページが分配されるようにプール１５００の総実ページ数を分割して、複数のプール領域を構成することも良い。この技術は、プールメンテナンス処理にも適用できる。
【０５４５】
又は、複数のＨＤＫＣユニット１４１によってプール１５００を生成又は形成する場合に、ＨＤＫＣユニット１４１、ＨＤＫＣ及び／又は管理装置３０１のプロセッサが、プール１５００を共有する各ＨＤＫＣユニット１４１の性能の違いに応じて、ＨＤＫＣユニット１４１の性能に適した記憶領域のサイズ又は実ページ数になるようにプール１５００の総記憶領域サイズ又は総実ページ数を分割して複数のプール領域を構成したりすることも良い。この場合、性能が大きいＨＤＫＣユニット１４１が、性能が小さいＨＤＫＣユニット１４１に比べて、より大きな記憶領域のサイズ又は多くの実ページ数になるように、ＨＤＫＣユニット１４１、ＨＤＫＣ及び／又は管理装置３０１のプロセッサが、プール１５００の総記憶領域サイズ又は総実ページ数を分割することになる。この技術は、プールメンテナンス処理にも適用できる。
【０５４６】
又は、複数のＨＤＫＣユニット１４１によってプール１５００を生成又は形成する場合に、ＨＤＫＣユニット１４１、ＨＤＫＣ及び／又は管理装置３０１のプロセッサが、プール１５００を共有する各ＨＤＫＣユニット１４１とその他の各々のＨＤＫＣユニット１４１との間の距離（コマンド応答時間）に応じて、複数のＨＤＫＣユニット１４１間の距離（コマンド応答時間）に適した記憶領域のサイズ又は実ページ数になるようにプール１５００の総記憶領域サイズ又は総実ページ数を分割して複数のプール領域を構成したりすることも良い。この場合、あるＨＤＫＣユニットに着目した場合、距離（コマンド応答時間）が近い他のＨＤＫＣユニット１４１に対しては、距離（コマンド応答時間）が遠い他のＨＤＫＣユニット１４１に比べて、より大きな自ユニット内の記憶領域のサイズ又は多くの自ユニット内の実ページ数を提供することになるように、ＨＤＫＣユニット１４１、ＨＤＫＣ及び／又は管理装置３０１のプロセッサが、プール１５００の総記憶領域サイズ又は総実ページ数を分割することになる。この技術は、プールメンテナンス処理にも適用できる。
【０５４７】
なお、プール１５００の総記憶領域サイズ又は総実ページ数の配分は、ＨＤＫＣユニット１４１の性能と複数のＨＤＫＣユニット１４１間の距離（コマンド応答時間）との両方（複合的な要因）を考慮して実施されることも良い。この技術は、プールメンテナンス処理にも適用できる。
【０５４８】
又は、プール１５００の総記憶領域サイズ又は総実ページ数の配分は、ＨＤＫＣユニット１４１の性能及び／又は複数のＨＤＫＣユニット１４１間の距離（コマンド応答時間）を考慮する又はしないに関わらず、あるＨＤＫＣユニット自身に対しては、他のＨＤＫＣユニット１４１に比べて、より大きな自ユニット内の記憶領域のサイズ又は多くの自ユニット内の実ページ数を割り当てるように、ＨＤＫＣユニット１４１、ＨＤＫＣ及び／又は管理装置３０１のプロセッサが実施することも良い。この技術は、プールメンテナンス処理にも適用できる。
【０５４９】
本実施例のプール１５００の生成又は形成は、複数のＨＤＫＣユニット１４１が導入された場合に、複数のＨＤＫＣユニット１４１、ＨＤＫＣ及び／又は管理装置３０１のプロセッサによって実施されても良く（これらのプロセッサは管理者の指示を受けて実施しても良い）、一部のＨＤＫＣユニット１４１やＨＤＫＣがその他のＨＤＫＣユニット１４１やＨＤＫＣに対して増設や追加された場合に、複数のＨＤＫＣユニット１４１、ＨＤＫＣ及び／又は管理装置３０１のプロセッサによって実施されても良く（これらのプロセッサは管理者の指示を受けて実施しても良い）。この技術は、プールメンテナンス処理にも適用できる。
【０５５０】
本実施例では、複数のＨＤＫＣユニット１４１が１つのプールを管理して、この１つのプールに対して１又は複数のＤＰ−ＬＵが関連付けられる場合を説明した。しかしながら、本実施例は、この場合に限られず、複数のＨＤＫＣユニット１４１が複数のプール（各々が上記１つのプールに対応する）を管理して、その各々のプールに対して、共通又は相違する１又は複数のＤＰ−ＬＵが関連付けられる場合も良い。
【０５５１】
本実施例では、プール１５００を構成する各内部ボリュームの各々がＲＧである場合を用いて技術的な内容を説明したが、上述のとおり、本実施例は、その場合に限られない。例えば、各内部ボリュームの各々が複数ＲＧを有するグループ（ＲＧグループ）である場合、図５４、図５５、図５７及び図５８の各々の実ページ管理テーブルには、Pool-RG IDに代えて、又はPool-RG IDに加えて、各ＲＧグループに関する識別情報が入り、各ＲＧグループ毎に実ページアドレス又は割当状態等が図５４、図５５、図５７及び図５８と同様に管理されることになる。この場合、各プール領域（５０１１、５０１２）は、プール１５００を構成する複数のＲＧグループにまたがることになり、プール１５００を構成する全てのＲＧにまたがることにならない。また、この場合、プール１５００内から分割された各々のプール領域５０１１（又は５０１２）において、仮想ページに割り当てられる実ページは、ｎ回前（ｎは自然数）に割り当てられた実ページの基になっているＲＧグループとは異なるＲＧグループが基になっている実ページで良い（例えば、ｎ＝１で良い）。具体的には、例えば、ラウンドロビン形式で、割り当てられる実ページの基になっているＲＧグループが切り替わって良い。ＨＤＫＣユニット１４１及び／又はＨＤＫＣのプロセッサ２２２は、あるＲＧグループから１又は複数の実ページを割り当てた場合には、次に他の複数のＲＧグループから１又は複数の実ページを割り当てることにより、特定のＲＧグループにアロケーションに伴うＩ／Ｏが集中してしまうことを回避でき、以って、ＤＫＣのＩ／Ｏ性能の向上が期待できる。１つのプール１５００に関連付けられるＤＰ−ＬＵ又は複数ＤＰ−ＬＵのグループ（ＤＰ−ＬＵグループ）が、ＤＰ−ＬＵ又はＤＰ−ＬＵグループ毎に異なるティアに属している場合（例えば、第一のＤＰ−ＬＵ又は第一のＤＰ−ＬＵグループは第一のティアに属し、第二のＤＰ−ＬＵ又は第二のＤＰ−ＬＵグループは第二のティアに属している場合）、ティア別に、ｎ回前に割り当てられた実ページの基になっているＲＧグループ又は複数のＲＧグループと異なるＲＧグループ又は複数のＲＧグループから実ページが割り当てられて良い（例えば、第一のＤＰ−ＬＵ又は第一のＤＰ−ＬＵグループは第一のティアを構成するＲＧグループ又は複数のＲＧグループの範囲内において、ラウンドロビン形式で、割り当てられる実ページの基になっているＲＧグループ又は複数のＲＧグループが切り替わり、第二のＤＰ−ＬＵ又は第二のＤＰ−ＬＵグループは第二のティアを構成するＲＧグループ又は複数のＲＧグループの範囲内において、ラウンドロビン形式で、割り当てられる実ページの基になっているＲＧグループ又は複数のＲＧグループが切り替わる）。
【０５５２】
また、本実施例では、プール１５００を構成する各内部ボリュームの各々が、既に説明した通り、１つの通常のＬＵ、通常のＬＵの一部、複数の通常のＬＵのグループ、第２の接続形態に従う１つの仮想ＬＵ、仮想ＬＵの一部、複数の仮想ＬＵのグループ、或いは、ＲＧの一部の何れかである場合にも、上記同様に、図５４、図５５、図５７及び図５８の各々の実ページ管理テーブルには、Pool-RG IDに代えて、又はPool-RG IDに加えて、タイプの内部ボリュームに関する識別情報が入り、各内部ボリューム毎に実ページアドレス又は割当状態等が図５４、図５５、図５７及び図５８と同様に管理されることになる。
【０５５３】
本実施例においても、１又は複数のＤＰ−ＬＵの各仮想ページは、各仮想ページのアクセス特性に応じて、このアクセス特性に適する記憶媒体に対応付けられた実ページにマッピングさせることもできる。又は、各仮想ページのアクセス特性に応じて、このアクセス特性に適していない記憶媒体に対応付けられた実ページから、このアクセス特性に適する記憶媒体に対応付けられた実ページにマッピングを変更することもできる。ここでいうアクセス特性とは、例えば、各仮想ページへのアクセスの種類（ランダムアクセスやシーケンスアクセスの別、又はアクセス送信元のサーバ１０１やアプリケーション１１１の上述のような種類）、各仮想ページへのＩ／Ｏ頻度又はライト頻度、又は各仮想ページに書き込まれたデータがキャッシュメモリ２２４から仮想ページにマッピングされた実ページに対応する記憶媒体へ書き込まれる頻度、又は各仮想ページに書き込まれたり読み出されたりするデータがキャッシュメモリ２２４と仮想ページにマッピングされた実ページに対応する記憶媒体との間で書き込まれたり読み出されたりする頻度である。この場合、本実施例でいうところの複数のティア（例えば、実施例１で説明されたティアレベル又はティアレベル範囲）は、１又は複数のＤＰ−ＬＵの各仮想ページ毎に管理されることになり、上記のようにＬＵのティアという技術ではなく、１又は複数のＤＰ−ＬＵの各仮想ページ毎のティアという技術と捉えることになる。ただし、各仮想ページのアクセス特性に応じてこのアクセス特性に適する記憶媒体に対応付けられた実ページにマッピングさせる場合には、各仮想ページ毎のティアという技術になるが、各仮想ページのアクセス特性に応じて仮想ページにマッピングされる実ページが変更する場合には、予めＬＵとティアとの関係が設定されるため、ＤＰ−ＬＵの作成時等にはＬＵのティアという技術が適用され、その後、アクセス特性に応じた仮想ページへマッピングされる実ページの変更に従って各仮想ページ毎のティアという技術が適用されることになる。
【０５５４】
実施例３（例えば、プール作成処理、及び／又は、プールメンテナンス処理）は、以下のいずれか１つのケースで、適用されて良い。
（ａ）接続形態（ＤＫＣの性能を含んで良い）及びＰＤＥＶ種別という基本項目（性能ファクター）に加えて又は代えて、「プレキャッシュ」、「カスケードの違い」及び／又は「距離（コマンド応答時間）」等の１以上の他の項目（性能ファクター）も基に、ティアレベルが算出されるケース。
（ｂ）「プレキャッシュ」、「カスケードの違い」及び／又は「距離（コマンド応答時間）」（図１０参照）のうちの１以上の項目（性能ファクター）のみを基にティアレベルが算出されるケース。
（ｃ）「プレキャッシュ」、「カスケードの違い」及び／又は「距離（コマンド応答時間）」（図１０参照）のうちのいずれか１つ以上の項目（性能ファクター）と、ＰＤＥＶ種別（性能ファクター）との組合せを基に、ティアレベルが算出されるケース。
（ｄ）「プレキャッシュ」、「カスケードの違い」及び／又は「距離（コマンド応答時間）」（図１０参照）のうちのいずれか１つ以上の項目（性能ファクター）と、「接続形態」、「内部コントローラの性能」、及び「ＰＤＥＶ種別」のうちのいずれか１つ以上の項目（性能ファクター）との組み合わせを基に、ティアレベルが算出されるケース。
【０５５５】
本実施例に係るプール作成処理及び／又はプールメンテナンス処理は、複数のＨＤＫＣ間に限らず、複数のＬＤＫＣ間にも適用されて良い。
【０５５６】
以上、本発明の幾つかの実施例を説明したが、本発明は、これらの実施例に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。例えば、本実施例においては、図53, 54, 55, 57, 58, 67 及び 69などで説明されたティア管理テーブル#H0 及び #H1 は、Pool-RG ID 1402 と実ページアドレス 1403  の欄内に同一の情報を有する。しかしながら、本実施例はこの場合に限られず、次のような場合でも良い。HDKC ユニット #H0のティア管理テーブル#H0 は、HDKC ユニット #H0がアロケーションに利用できる実ページに関する情報を有し、HDKC ユニット #H0がアロケーションに利用できない実ページに関する情報を有しない。HDKC ユニット #H１のティア管理テーブル#H１は、HDKC ユニット #H１がアロケーションに利用できる実ページに関する情報を有し、HDKC ユニット #H１がアロケーションに利用できない実ページに関する情報を有しない。
【０５５７】
例えば、上述した実施例１乃至３の２以上が組み合わされても良い。実施例１乃至３のいずれか又はそれらの２以上の組み合わのいずれにおいても、複数のHDKC ユニット 141及び／又はLDKC ユニット 151を含むシステムは、同一のLU（通常LU、DP-LU及び/又は仮想LU）を、第１実施例で説明した仮想ボリュームの技術を使うことによって、異なるHDKC ユニット 141の各々を介して複数の異なるアプリケーション、サーバ及び/又は仮想サーバへ提供できる。この場合、例えば、同一のLU（通常LU、DP-LU及び/又は仮想LU）は、上記同一のLUを管理するHDKC ユニット 141からアプリケーション、サーバ及び／又は仮想サーバへ上記同一のLUを提供することと、上記同一のLUにマッピングされた仮想LUを管理するHDKC ユニット 141によって他のアプリケーション、サーバ及び／又は仮想サーバへ上記仮想LUを提供することによって、複数の異なるアプリケーション、サーバ及び/又は仮想サーバへ提供される。この場合、上記同一のLUを管理するマスタHDKC ユニット としてのHDKC ユニット 141が、実ページのDP-LUの仮想ページへのアロケーション（上記同一のLUがDP-LUの場合）と、キャッシュメモリ２２４へのデータのリード/ライトと、を制御することにより、上記同一のLUに関する上記アロケーションとデータキャッシュ管理との各々に関する一貫性の制御を確保することが出来る。
【０５５８】
また、例えば、ＬＵのＩＤとして、サーバが認識する種類の第１のＩＤ（例えばＬＵＮ）と、サーバが認識できない種類の第２のＩＤとがあっても良い。この場合、第１のＩＤと第２のＩＤとの組が、例えば、前述したＬＵ管理テーブルに登録されていて良い。例えば、ＬＵ（ｘ）からＬＵ（ｙ）にデータが移動された場合、ＬＵ（ｘ）及びＬＵ（ｙ）について、第２のＩＤはそれぞれ変更されず、ＬＵ（ｘ）の第１のＩＤ（ｘ）とＬＵ（ｙ）の第２のＩＤ（ｙ）が、交換されて良い。データ移動後、サーバは、第１のＩＤ（ｘ）を指定したＩ／Ｏコマンドを発行すれば、ＬＵ（ｙ）に対するＩ／Ｏを行うことができる。
【０５５９】
また、ライトコマンドに対する応答（例えばライト完了通知）が返されるタイミングは、ライト対象データがＣＭに書き込まれたときに代えて、ＬＵにライト対象データが書き込まれたときでも良い。
【０５６０】
また、上記の説明において、ＣＰＵ＃Ｈ０（＃Ｈ１）（マスタＣＰＵであっても良い）が行う処理は、適宜、内部コントローラ＃Ｈ０（＃Ｈ１）が行う処理とされて良い。ＣＰＵ＃Ｈ０（＃Ｈ１）或いは内部コントローラ＃Ｈ０（＃Ｈ１）が行う処理は、適宜、ＨＤＫＣ＃Ｈ０（＃Ｈ１）が行う処理とされて良い。これは、ＨＤＫＣ＃Ｈ０（＃Ｈ１）に限らず、他のＤＫＣについても同様であって良い。
【０５６１】
また、例えば、実施例２において、ポート単位の負荷分散は、ＨＤＫＣから、そのＨＤＫＣに第２の接続形態で接続されているＤＫＣ（第２接続ＤＫＣ）に対して行われても良い。すなわち、第２接続ＤＫＣが、空きＦＥポート及びテンポラリＬＵを有していても良い。なお、この場合、第３の接続形態に対応したポイント（ティアレベルの要素）と、第２の接続形態に対応したポイントは、同じとされて良い。また、第２接続ＤＫＣは、ＬＤＫＣでも良いし、ＨＤＫＣでも良い。
【０５６２】
また、例えば、第１のサーバからＩ／Ｏコマンドを受信し得る第１のＤＫＣと、第２のサーバからＩ／Ｏコマンドを受信し得る第２のＤＫＣが、第２の接続形態で接続されて良い。第１及び第２のＤＫＣは、いずれも、ＨＤＫＣでもＬＤＫＣでも良い。第１のサーバと第２のサーバは、同一のサーバであっても異なるサーバであっても良い。第２の接続形態によれば、第２のＤＫＣ内のＬＵが第１のＤＫＣによって仮想化されて第１のサーバに提供されること（第２のＤＫＣ内のＬＵが第１のＤＫＣ内の仮想ＬＵ（第１のサーバに提供されるＬＵ）にマッピングされること）があっても、第１のＤＫＣ内のＬＵが第２のＤＫＣによって仮想化されて第２のサーバに提供されること（第１のＤＫＣ内のＬＵが第２のＤＫＣ内の仮想ＬＵ（第２のサーバに提供されるＬＵ）にマッピングされること）は無い。一方、例えば、第１のサーバからＩ／Ｏコマンドを受信し得る第１のＤＫＣと、第３のサーバからＩ／Ｏコマンドを受信し得る第３のＤＫＣが、第３の接続形態で接続されている場合、第３のＤＫＣ内のＬＵが第１のＤＫＣによって仮想化されて第１のサーバに提供されること（第３のＤＫＣ内のＬＵが第１のＤＫＣ内の仮想ＬＵ（第１のサーバに提供されるＬＵ）にマッピングされること）もあれば、第１のＤＫＣ内のＬＵが第３のＤＫＣによって仮想化されて第３のサーバに提供されること（第１のＤＫＣ内のＬＵが第３のＤＫＣ内の仮想ＬＵ（第３のサーバに提供されるＬＵ）にマッピングされること）もある。
【０５６３】
また、第１の接続媒体（内部バス）２２７は、通信可能な最大距離が第２及び第３の接続媒体（外部バス）５０１又は６０１より短い接続媒体である。第１の接続媒体２２７は、通信最高速度が第２及び第３の接続媒体５０１及び６０１より速くて良い。第１のＤＫＣが第１の接続媒体２２７で第２のＤＫＣに接続されている場合、第１のＤＫＣ内のＣＰＵが、第１のＤＫＣ内のハードウェア資源（例えば記憶資源）にアクセスするのと同様に、第２のＤＫＣ内のハードウェア資源（例えば記憶資源）にアクセスできる。第１の接続媒体（例えばＰＣＩ−Ｅｘｐｒｅｓｓバス）２２７は、例えば、ＤＫＣ内の複数のハードウェア資源（例えば、図２において、ＳＷ２２６、ＣＰＵ２２２、Ｆ−Ｉ／Ｆ２２１、Ｂ−Ｉ／Ｆ２２５、ＣＭ２２４）を互いに接続する内部バス（例えばＰＣＩ−Ｅｘｐｒｅｓｓバス）と同じ種類の接続媒体である。
【０５６４】
一方、第２及び第３の接続媒体（外部バス）５０１及び６０１は、通信可能な最大距離が第１の接続媒体２２７より長い接続媒体である。第２及び第３の接続媒体５０１及び６０１は、通信最高速度が第１の接続媒体２２７より遅くて良い。第１のＤＫＣが第３の接続媒体６０１（又は第２の接続媒体５０１）で第２のＤＫＣに接続されている場合、第１のＤＫＣ内のＣＰＵは、第１のＤＫＣ内のハードウェア資源（例えば記憶資源）にアクセスするのと同じようには、第２のＤＫＣ内のハードウェア資源（例えば記憶資源）にアクセスすることはできない。例えば、第１のＤＫＣ内のＣＰＵは、第２のＤＫＣ内の記憶資源が記憶する情報を欲しい場合、第２のＤＫＣにコマンドを発行し、そのコマンドに対する応答として、第２のＤＫＣから、第２のＨＤＫＣ内の記憶資源が記憶する情報を受けることができる。第２及び第３の接続媒体５０１及び６０１及（例えばFibre  Channelケーブル）は、例えば、ＤＫＣ内の複数のハードウェア資源（例えば、図２において、ＳＷ２２６、ＣＰＵ２２２、Ｆ−Ｉ／Ｆ２２１、Ｂ−Ｉ／Ｆ２２５、ＣＭ２２４）を互いに接続する内部バス（例えばＰＣＩ−Ｅｘｐｒｅｓｓバス）とは違う種類の接続媒体である。
【０５６５】
また、実施例１乃至３のうちの少なくとも１つにおいて、第１のＨＤＫＣと第２のＨＤＫＣが１以上のＨＤＫＣユニット（以下、中継ＨＤＫＣユニット）を介して第３の接続形態で直列に接続されている場合、第１のＨＤＫＣと第２のＨＤＫＣ間のやり取りを、１以上の中継ＨＤＫＣユニットが中継して良い。例えば、下記が行われて良い。なお、１つの中継ＨＤＫＣユニットが、第１の接続形態で直列に接続された複数のＨＤＫＣで構成されている場合、その１つの中継ＨＤＫＣユニットを流れるコマンド或いはデータは、それら複数のＨＤＫＣのうちの1以上のＨＤＫＣを経由して良い。
（＊）第１のＨＤＫＣから第２のＨＤＫＣへのコマンドが、１以上の中継ＨＤＫＣユニットを順次に介して第２のＨＤＫＣに届いて良い。
（＊）第１のＨＤＫＣ内のＬＵから第２のＨＤＫＣ内のＬＵへのデータが、１以上の中継ＨＤＫＣユニットを順次に介して第２のＨＤＫＣに届いて良い。
【０５６６】
また、第３の接続形態に対応した仮想ＬＵにマッピングされている外部ＬＵは、その仮想ＬＵを提供するＨＤＫＣに第３の接続形態で接続されているＨＤＫＣに第１の接続形態で接続されているＨＤＫＣが有するＬＵであっても良い。すなわち、第３の接続形態に対応した仮想ＬＵにマッピングされている外部ＬＵは、第３の接続形態で接続されているＨＤＫＣユニットが有するいずれのＨＤＫＣ内のＬＵであっても良い。
【０５６７】
また、第３の接続形態で直列に接続されているＤＫＣユニット群（以下、上位ＤＫＣユニット群）における１以上の上位ＤＫＣユニット内の１以上の上位ＤＫＣ（例えばＨＤＫＣ）に、下位ＤＫＣユニット（例えば、第１の接続形態で直列に接続された１以上のＤＫＣ（例えばＬＤＫＣ）で構成されたＤＫＣ群）が第２の接続形態で接続されて良い。下位ＤＫＣユニット内の１つのＤＫＣが１以上の上位ＤＫＣユニット内の複数のＤＫＣに第２の接続形態で接続されても良い。
【０５６８】
また、予め複数のティアが固定で定義されていても良い。例えば、ティアレベルが０以上５未満のティアと、ティアレベルが５以上１０未満のティアのように、予めティアが決められても良い。或いは、例えば、ティアが同じとは、ティアレベルの差が所定値以下のティアでも良い。
【０５６９】
また、実施例３において、共有されるプールが、異なる複数のティアに属する複数のボリューム群で構成されていて良い。同一ティアに属するボリューム群において、ティアレベルが最低値のボリュームとティアレベルが最高値のボリュームとの差が、所定値以下であることが好ましい。また、共有されるプールが、異なる複数のティアに属する複数のボリューム群で構成されている場合、例えば、アクセス頻度の高い仮想ページには、高位ティアのボリューム群における実ページが割り当てられ、アクセス頻度の低い仮想ページには、低位ティアのボリューム群における実ページが割り当てられても良い。また、ＨＤＫＣ＃Ｈ０が、或る仮想ページのアクセス頻度の変化等に応じて、その仮想ページに割り当てられている実ページ内のデータを、その仮想ページのアクセス頻度等に適したティアに属するボリューム群内の実ページに移動されても良い。その実ページは、ＨＤＫＣ＃０とは別のＨＤＫＣ内の実ページでも良い。また、各ティアに属するボリューム群は、同一のＨＤＫＣにおける複数のボリュームで構成されても良いし、異なる複数のＨＤＫＣにおける複数のボリュームで構成されても良い。
【０５７０】
また、実施例２において、ポート単位の負荷分散等は、以下の（Ｆ）及び（Ｇ）で構成されて良い。
（Ｆ）１以上のコントローラの少なくとも１つが、上記第１の記憶制御装置ユニットが有する複数の通信ポートから使用ポートを選択する。
（Ｇ）上記１以上のコントローラの少なくとも１つが、上記（Ｆ）で選択された使用ポートである選択ポートに割り当てられている論理ボリュームを、上記選択ポートから上記第２の記憶制御装置ユニットの空きポートに移動する。
【０５７１】
上記（Ｇ）は、以下の（Ｇ１）乃至（Ｇ５）で構成されて良い。
（Ｇ１）上記１以上のコントローラの少なくとも１つが、上記選択ポートに割り当てられている論理ボリュームである移動元ボリュームが属するティアを特定する。
（Ｇ２）上記１以上のコントローラの少なくとも１つが、上記第２の記憶制御装置ユニットが有する複数の論理ボリュームから、上記（Ｇ１）で特定したティアと同じティアに属する論理ボリュームである移動先ボリュームを選択する。
（Ｇ３）上記１以上のコントローラの少なくとも１つが、上記移動元ボリュームから上記移動先ボリュームにデータをコピーする。
（Ｇ４）上記１以上のコントローラの少なくとも１つが、上記空きポートに上記移動先ボリュームを割り当てる。
（Ｇ５）上記１以上のコントローラの少なくとも１つが、上記選択ポートの識別情報を上記空きポートに割り当て、且つ、上記移動元ボリュームの識別情報を上記移動先ボリュームに割り当てる。
【０５７２】
さらに、実施例３において、プールメンテナンス処理は、下記の（Ｊ）乃至（Ｌ）で構成されて良い。
（Ｊ）上記１以上のコントローラの少なくとも１つが、プール領域毎に、シンプロビジョニングボリュームに割り当てられていないがシンプロビジョニングボリュームに割り当てられ得るページである未割当ページの数を特定する。
（Ｋ）上記１以上のコントローラの少なくとも１つが、上記（Ｊ）で特定された未割当ページ数を基に、１つの対象ユニットに関連付けられているプール領域である対象プール領域について、移動すべき未割当ページの数である移動ページ数を決定する。
（Ｌ）上記１以上のコントローラの少なくとも１つが、上記対象プール領域と別のプール領域との間で、上記移動ページ数分の未割当ページを移動する。
【０５７３】
上記（Ｋ）において、以下の（Ｋ１）乃至（Ｋ４）が行われて良い。
（Ｋ１）上記１以上のコントローラの少なくとも１つが、プール領域毎に、前回の未割当ページ数から今回の未割当ページ数を減算した使用ページ数が算出して良い。
（Ｋ２）上記１以上のコントローラの少なくとも１つが、上記対象プール領域について、上記２以上のプール領域に対応した使用ページ数の合計に対する、上記対象プール領域に対応した使用ページ数の割合、を算出する。
（Ｋ３）上記１以上のコントローラの少なくとも１つが、上記対象プール領域について、上記２以上のプール領域に対応した未割当ページ数の合計と、上記割合との積、に従うページ数である理想未割当ページ数を算出する。
（Ｋ４）上記１以上のコントローラの少なくとも１つが、上記対象プール領域に対応した今回の未割当ページ数から上記理想未割当ページ数を減算することで上記移動ページ数を算出する。
【０５７４】
上記（Ｌ）において、下記の（Ｌ１）及び（Ｌ２）が行われて良い。
（Ｌ１）上記移動ページ数が正の値の場合、上記１以上のコントローラの少なくとも１つが、上記対象プール領域から別のプール領域に上記移動ページ数分の未割当ページが移動する。
（Ｌ２）上記移動ページ数が負の値の場合、上記１以上のコントローラの少なくとも１つが、別のプール領域から上記対象プール領域に上記移動ページ数分の未割当ページが移動する。
【０５７５】
上記１以上のコントローラは、１以上のＤＫＣユニットにあっても良いし、複数のＤＫＣユニットに分散していても良いし、複数のＤＫＣユニットの外にあっても良いし、少なくとも１つのＤＫＣユニットと複数のＤＫＣユニットの外とに分散していても良い。上記１以上のコントローラの一部又は全部は、ＤＫＣの内部コントローラであっても良いし、ＤＫＣユニットにおいて複数のＤＫＣを管理する装置であっても良いし、複数のＤＫＣに接続された管理システム（例えば管理計算機）であっても良い。
【符号の説明】
【０５７６】
１１０…記憶システム
【図１】
0005567147.tif 000002
【図２】
0005567147.tif 000003
【図３】
0005567147.tif 000004
【図４】
0005567147.tif 000005
【図５】
0005567147.tif 000006
【図６】
0005567147.tif 000007
【図７】
0005567147.tif 000008
【図８】
0005567147.tif 000009
【図９】
0005567147.tif 000010
【図１０】
0005567147.tif 000011
【図１１】
0005567147.tif 000012
【図１２】
0005567147.tif 000013
【図１３】
0005567147.tif 000014
【図１４】
0005567147.tif 000015
【図１５】
0005567147.tif 000016
【図１６】
0005567147.tif 000017
【図１７】
0005567147.tif 000018
【図１８】
0005567147.tif 000019
【図１９】
0005567147.tif 000020
【図２０】
0005567147.tif 000021
【図２１】
0005567147.tif 000022
【図２２】
0005567147.tif 000023
【図２３】
0005567147.tif 000024
【図２４】
0005567147.tif 000025
【図２５】
0005567147.tif 000026
【図２６】
0005567147.tif 000027
【図２７】
0005567147.tif 000028
【図２８】
0005567147.tif 000029
【図２９】
0005567147.tif 000030
【図３０】
0005567147.tif 000031
【図３１】
0005567147.tif 000032
【図３２】
0005567147.tif 000033
【図３３】
0005567147.tif 000034
【図３４】
0005567147.tif 000035
【図３５】
0005567147.tif 000036
【図３６】
0005567147.tif 000037
【図３７】
0005567147.tif 000038
【図３８】
0005567147.tif 000039
【図３９】
0005567147.tif 000040
【図４０】
0005567147.tif 000041
【図４１】
0005567147.tif 000042
【図４２】
0005567147.tif 000043
【図４３】
0005567147.tif 000044
【図４４】
0005567147.tif 000045
【図４５】
0005567147.tif 000046
【図４６】
0005567147.tif 000047
【図４７】
0005567147.tif 000048
【図４８】
0005567147.tif 000049
【図４９】
0005567147.tif 000050
【図５０】
0005567147.tif 000051
【図５１】
0005567147.tif 000052
【図５２】
0005567147.tif 000053
【図５３】
0005567147.tif 000054
【図５４】
0005567147.tif 000055
【図５５】
0005567147.tif 000056
【図５６】
0005567147.tif 000057
【図５７】
0005567147.tif 000058
【図５８】
0005567147.tif 000059
【図５９】
0005567147.tif 000060
【図６０】
0005567147.tif 000061
【図６１】
0005567147.tif 000062
【図６２】
0005567147.tif 000063
【図６３】
0005567147.tif 000064
【図６４】
0005567147.tif 000065
【図６５】
0005567147.tif 000066
【図６６】
0005567147.tif 000067
【図６７】
0005567147.tif 000068
【図６８】
0005567147.tif 000069
【図６９】
0005567147.tif 000070