(57)【特許請求の範囲】
【請求項１】
複数の記憶領域の基になる複数の記憶デバイスで構成された複数の記憶デバイスグループと、
前記複数の記憶デバイスグループに接続されており異なる記憶デバイスグループに基づく記憶領域間でデータを移動するバランス処理を実行するコントローラと
を有し、
前記コントローラは、
複数の記憶デバイスの内のいずれかの記憶デバイスのみに問題が発生することを回避することの複数の回避要求の内の第１の回避要求を満たすためのバランス処理の実行をすべきか否かを、前記第１の回避要求を満たすための第１のバランス処理よりも先に実行された第２のバランス処理により満たされた、前記複数の回避要求の内の第２の回避要求、に基づいて判定し、
前記判定の結果が肯定的であった場合に、前記第１のバランス処理を実行する、
ストレージシステム。
【請求項２】
前記判定の結果が否定的である場合は、前記第１のバランス処理が実行されると前記第２の回避要求が満たされなくなる場合である
請求項１に記載のストレージシステム。
【請求項３】
複数の記憶デバイスの各々にはデータのライト回数又は消去回数の限界値があり、
前記第２の回避要求は、前記複数の記憶デバイスグループにそれぞれ対応した複数のライト値が平準化されることであり、１つの記憶デバイスグループについて、前記ライト値は、その記憶デバイスグループに対するデータのライト回数又は消去回数に関する値であり、
前記第１の回避要求は、前記複数の記憶デバイスグループにそれぞれ対応した複数のＩ／Ｏ値が平準化されることであり、１つの記憶デバイスグループについて、前記Ｉ／Ｏ値は、その記憶デバイスグループに対するデータのＩ／Ｏ回数に関する値である
請求項２に記載のストレージシステム。
【請求項４】
前記判定の結果が否定的である場合は、前記第１のバランス処理が実行されると１つの記憶デバイスグループに係るライト値が前記第２の回避要求に係る閾値よりも大きくなる場合であり、
前記第２の回避要求に係る閾値は、前記記憶デバイスグループを構成する複数の記憶デバイスのデータのライト回数又は消去回数の限界値に基づく値である
請求項３に記載のストレージシステム。
【請求項５】
前記コントローラは、
前記複数の記憶領域の各々に対するＩ／Ｏ頻度を管理し、
前記第１のバランス処理において、移動元の記憶デバイスグループに基づく複数の記憶領域のうち或るＩ／Ｏ頻度よりもＩ／Ｏ頻度の高い記憶領域を、優先的に移動元の記憶領域とする
請求項４に記載のストレージシステム。
【請求項６】
前記コントローラは、
前記第２のバランス処理と前記第１のバランス処理とを繰り返し実行し、
前記複数の記憶デバイスグループの各々について、前回の第２のバランス処理に係るライト値と前回の第１のバランス処理に係るＩ／Ｏ値に基づいて算出される前回の指標と、今回の第２のバランス処理に係るライト値と今回の第１のバランス処理に係るＩ／Ｏ値に基づいて算出される今回の指標と、を比較し、１つの記憶デバイスグループにおいて、前記今回の指標が前記前回の指標よりも大きい場合には、今回の第１のバランス処理を実行しないと判定し、
前記前回の指標及び前記今回の指標はそれぞれ、ライト値とＩ／Ｏ値の比率に関する値である
請求項２に記載のストレージシステム。
【請求項７】
複数の記憶デバイスの各々にはデータのライト回数又は消去回数の限界値があり、
前記第２の回避要求は、前記複数の記憶デバイスグループにそれぞれ対応した複数のライト値が平準化されることであり、１つの記憶デバイスグループについて、前記ライト値は、その記憶デバイスグループに対するデータのライト回数又は消去回数に関する値であり、
前記第１の回避要求は、前記複数の記憶デバイスグループにそれぞれ対応した複数のＩ／Ｏ値が平準化されることであり、１つの記憶デバイスグループについて、前記Ｉ／Ｏ値は、その記憶デバイスグループに対するデータのＩ／Ｏ回数に関する値である
請求項６に記載のストレージシステム。
【請求項８】
前記判定の結果が否定的である場合は、前記第１のバランス処理が実行されると１つの記憶デバイスグループに係るライト値が前記第２の回避要求に係る閾値よりも大きくなる場合であり、
前記第２の回避要求に係る閾値は、前記記憶デバイスグループを構成する複数の記憶デバイスのデータのライト回数又は消去回数の限界値に基づく値である
請求項７に記載のストレージシステム。
【請求項９】
前記コントローラは、
前記複数の記憶領域の各々に対するＩ／Ｏ頻度を管理し、
前記第１のバランス処理において、移動元の記憶デバイスグループに基づく複数の記憶領域のうち或るＩ／Ｏ頻度よりもＩ／Ｏ頻度の高い記憶領域を、優先的に移動元の記憶領域とする
請求項８に記載のストレージシステム。
【請求項１０】
複数の記憶領域の基になる複数の記憶デバイスで構成された複数の記憶デバイスグループであって、前記複数の記憶デバイスグループに接続されており異なる記憶デバイスグループに基づく記憶領域間でデータを移動するバランス処理を実行するコントローラにおいて、
複数の記憶デバイスの内のいずれかの記憶デバイスのみに問題が発生することを回避することの複数の回避要求の内の第１の回避要求を満たすためのバランス処理の実行をすべきか否かを、前記第１の回避要求を満たすための第１のバランス処理よりも先に実行された第２のバランス処理により満たされた、前記複数の回避要求の内の第２の回避要求、に基づいて判定し、
前記判定の結果が肯定的であった場合に、前記第１のバランス処理を実行する、
ストレージ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム内でのデータの配置の制御に関する。
【背景技術】
【０００２】
フラッシュメモリを有する記憶デバイス（以下「フラッシュデバイス」という）は書き換え回数が限られている。そこで、複数のフラッシュデバイスを備えるストレージシステムにおいて、そのフラッシュデバイス間でデータを移動させることにより、ストレージシステム全体のフラッシュデバイスの使用寿命を延ばす技術が知られている（特許文献１）。【０００３】
ストレージシステムにおいて、いずれかの記憶デバイスにアクセスが集中してしまうと、その記憶デバイスの性能がストレージシステム全体のボトルネックとなってしまう。そこで、ストレージシステムにおいて、記憶デバイス間でデータを移動させることにより、このようなボトルネックが発生することを予防する技術が知られている。【０００４】
ストレージシステムにおいて、記憶デバイス間でデータを移動させることにより、記憶デバイス間の記憶容量の消費量を均等化させる技術が知られている（特許文献２）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】ＷＯ２０１１／０１０３４４
【特許文献２】ＷＯ２０１０／１２２６７４
【発明の概要】
【発明が解決しようとする課題】
【０００６】
一般に、ストレージシステムは、複数の記憶デバイスを有するが、複数の記憶デバイスのうちのいずれかの記憶デバイスのみに問題が発生すること（局所的に問題が発生すること）を回避することが要求される。以下、そのような要求を「回避要求」と言う。
回避要求に従う局所的な問題としては、様々な観点に従う問題がある。具体的には、例えば、回避要求として、いずれかのフラッシュデバイスの使用寿命のみが短くなることを回避するという要求（寿命回避要求）、いずれかの記憶デバイスのみにアクセスが集中することを回避するという要求（ボトルネック回避要求）、及び、いずれかの記憶デバイスの記憶容量のみが多く消費されることを回避するという要求（消費量回避要求）といった要求が考えられる。
これら３つの回避要求のうちの１つの回避要求だけであれば、上述した技術を採用することで、満たすことができる。
しかし、上述した３つの回避要求を含む複数の回避要求のうちの２以上の回避要求を並行して満たすことは難しい。
【課題を解決するための手段】
【０００７】
一実施形態に係るストレージシステムは、複数の記憶領域の基になる複数の記憶デバイスで構成された複数の記憶デバイスグループと、複数の記憶デバイスグループに接続されており異なる記憶デバイスグループに基づく記憶領域間でデータを移動するバランス処理を実行するコントローラとを有する。コントローラは、複数の記憶デバイスの内のいずれかの記憶デバイスのみに問題が発生することを回避することの複数の回避要求の内の第１の回避要求を満たすためのバランス処理の実行をすべきか否かを判定する。この判定は、第１の回避要求を満たすための第１のバランス処理よりも先に実行された第２のバランス処理により満たされた、複数の回避要求の内の第２の回避要求、に基づいて行われる。その判定の結果が肯定的であった場合に、コントローラは、第１のバランス処理を実行する。
【発明の効果】
【０００８】
ストレージシステムにおいて、複数の回避要求のうちの２以上の回避要求を並行して満たすことができる。
【図面の簡単な説明】
【０００９】
【図１】第１の実施形態に係るストレージシステムを含む計算機システムの構成を示すブロック図である。
【図２】仮想ボリュームとストレージシステムとの関係を示す模式図である。
【図３】パリティグループ間の書き換え回数を平準化するバランス処理を説明するための模式図である。
【図４】パリティグループ間のＩ／Ｏ負荷を平準化するバランス処理を説明するための模式図である。
【図５】ストレージコントローラで管理される情報を示すブロック図である。
【図６】仮想−論理アドレス変換テーブルの構成例を示す。
【図７】論理−物理アドレス変換テーブルの構成例を示す。
【図８】回避要求情報テーブルの構成例を示す。
【図９】バランス情報テーブルの構成例を示す。
【図１０】ページモニタ情報テーブルの構成例を示す。
【図１１】グループモニタ情報テーブルの構成例を示す。
【図１２】ライトバランス化のグループ特性情報テーブルの構成例を示す。
【図１３】Ｉ／Ｏ負荷バランス化のグループ特性情報テーブルの構成例を示す。
【図１４】スケジュール情報テーブルの構成例を示す。
【図１５】ストレージコントローラで実行される処理を示すブロック図である。
【図１６】ホストリード処理の一例を示すフローチャートである。
【図１７】ホストライト処理の一例を示すフローチャートである。
【図１８】バランス処理の一例を示すフローチャートである。
【図１９】ライトバランス化のスケジュール処理の一例を示すフローチャートである。
【図２０】上限ライト値の算出方法の一例を示すフローチャートである。
【図２１】グループ間移動量の算出方法の一例を示すフローチャートである。
【図２２】移動予定ページ数と移動閾値の算出方法の一例を示すフローチャートである。
【図２３】バランス処理の実行可否の判定方法の一例を示す。
【図２４】Ｉ／Ｏ負荷バランス化のスケジュール処理の一例を示すフローチャートである。
【図２５】ページ移動処理の一例を示すフローチャートである。
【図２６】第２の実施形態に係るストレージコントローラに管理される情報を示すブロック図である。
【図２７】相対指標情報テーブルの構成例を示す。
【図２８】ストレージコントローラで実行される処理を示すブロック図である。
【図２９】バランス処理の一例を示すフローチャートである。
【図３０】実行結果表示処理によって生成される画面の一例を示す模式図である。
【図３１】実行結果表示処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下、幾つかの実施形態を説明する。
なお、以後の説明では、「ａａａテーブル」等の表現にて情報を説明することがあるが、これら情報はテーブル等のデータ構造以外で表現されていてもよい。そのため、データ構造に依存しないことを示すために「ａａａテーブル」等について「ａａａ情報」と呼ぶことがある。
また、各情報の内容を説明する際に、「番号」、「名称」という表現の識別情報が採用されるが、他種の識別情報が使用されて良い。
また、以後の説明では「プログラム」を主語として説明を行う場合があるが、プログラムは、プロセッサによって実行されることで定められた処理をメモリ及び通信ポート（ネットワークＩ／Ｆ）を用いながら行うため、プロセッサを主語とした説明としてもよい。また、プログラムを主語として開示された処理は、監視システム等の計算機が行う処理としてもよい。また、プログラムの一部または全ては、専用ハードウェアによって実現されてもよい。また、各種プログラムは、プログラム配布サーバや、計算機が読み取り可能な記憶媒体によって各計算機にインストールされてもよい。
また、以後の説明では、複数の同種の要素の参照符号は、同一の親番号と異なる子符号の組合せである。同種の要素を区別しないで説明する場合には、参照符号のうちの親番号のみを用いて説明し、同種の要素を区別して説明する場合には、参照符号を用いて説明することがある。
【００１１】
（第１の実施形態）
図１は、ストレージシステム１２０を含む計算機システムの構成を示すブロック図である。
計算機システムは、ホスト１００と、管理サーバ１１０と、ストレージシステム１２０と、外部ストレージシステム１２１とを有する。
【００１２】
ホスト１００は、ストレージシステム１２０に格納されたデータを用いて業務を行う計算機である。ホスト１００は、ストレージシステム１２０と双方向のデータ通信が可能な通信ネットワーク１３０で接続されている。通信ネットワーク１３０は、例えば、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）であって、ＦＣ（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ）又はＥｔｈｅｒｎｅｔ（登録商標）等によって構成される。
【００１３】
管理サーバ１１０は、ストレージシステム１２０を管理する計算機である。管理サーバ１１０は、ユーザに対するインタフェースデバイス（例えば、マウス、キーボード、ディスプレイ等）を備える。管理サーバ１１０は、ストレージシステム１２０と双方向のデータ通信が可能なネットワーク１３１で接続されている。通信ネットワーク１３１は、例えば、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）によって構成される。通信ネットワーク１３１と通信ネットワーク１３０とは、１つの通信ネットワークであっても良い。ユーザは、管理サーバ１１０を使用してストレージシステム１２０を管理することができる。
【００１４】
ストレージシステム１２０は、複数の記憶デバイス１５０と、複数の記憶デバイス１５０に通信可能に接続されておりホスト１００と記憶デバイス１５０との間のデータ転送等を制御するストレージコントローラ１４０とを有する。ストレージコントローラ１４０は複数であっても良い。
【００１５】
記憶デバイス１５０は、例えば、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）又はＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）等の不揮発性記憶媒体によって構成される。つまり、記憶デバイス１５０は、典型的には不揮発性の記憶デバイスである。
【００１６】
ストレージコントローラ１４０は、プロセッサ１４１と、メインメモリ１４２と、キャッシュメモリ１４３と、ホストＩ／Ｆ１４４と、管理Ｉ／Ｆ１４５と、ドライブＩ／Ｆ１４６と、外部接続Ｉ／Ｆ１４７とを備える。各デバイス１４１〜１４７は、それぞれ２以上であっても良い。各デバイス１４１〜１４７は、双方向のデータ通信が可能な内部ネットワーク１４８によって接続されている。
【００１７】
プロセッサ１４１は、コンピュータプログラムを実行して、ストレージシステム１２０の有する様々な機能を実現する。例えば、プロセッサ１４１は、ホスト１００からの要求（コマンド）を実現するためのプログラムを実行する。例えば、プロセッサ１４１は、ホスト１００へ仮想ボリューム４１０を提供するためのプログラムを実行する。ストレージコントローラ１４０の有する機能の一部は、所定の演算回路を利用して実現されても良い。
【００１８】
メインメモリ１４２は、プロセッサ１４１から利用されるデータ及びプログラム等を格納する。
キャッシュメモリ１４３は、記憶デバイス１５０に対してリード又はライトされるデータを一時的に格納（キャッシュ）する。
メインメモリ１４２及びキャッシュメモリ１４３は、例えば、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等の揮発性記憶媒体によって構成される。
【００１９】
ホストＩ／Ｆ１４４は、ストレージコントローラ１４０とホスト１００との間のデータ通信を制御する。ホストＩ／Ｆ１４４は、例えば、ＳＡＮの規格に基づいてデータ通信を制御する。
管理Ｉ／Ｆ１４５は、ストレージコントローラ１４０と管理サーバ１１０との間のデータ通信を制御する。管理Ｉ／Ｆ１４５は、例えば、Ｅｔｈｅｒｎｅｔ（登録商標）の規格に基づいてデータ通信を制御する。
ドライブＩ／Ｆ１４６は、ストレージコントローラ１４０と記憶デバイス１５０との間のデータ通信を制御する。ドライブＩ／Ｆ１４６は、例えば、ＦＣ、ＳＡＳ又はＳＡＴＡ等の規格に基づいてデータ通信を制御する。
外部接続Ｉ／Ｆ１４７は、ストレージコントローラ１４０と外部ストレージシステム１２１との間のデータ通信を制御する。例えば、ストレージシステム１２０と、外部ストレージシステム１２１とが、ＳＡＮに基づく通信ネットワーク１３２で接続されている場合、外部接続Ｉ／Ｆ１４７は、ＳＡＮの規格に基づいてデータ通信を制御する。
通信ネットワーク１３０と通信ネットワーク１３２とは、１つの通信ネットワークであっても良い。
【００２０】
図２は、仮想ボリューム４１０とストレージシステム１２０との関係を示す模式図である。
複数の記憶デバイス１５０が、複数のパリティグループ４３０を有する。各パリティグループ４３０は、２以上の記憶デバイス１５０で構成されている。パリティグループ４３０は、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）グループと呼ばれることもあり、指定されたＲＡＩＤレベルに従いデータを記憶する。
【００２１】
複数のパリティグループ４３０、例えば３つのパリティグループ＃１、＃２及び＃３がある。３つのパリティグループ＃１、＃２及び＃３に基づいて、プール４２０が形成される。プール４２０は、複数の論理的な記憶領域（以下「ページ」という）４４０の集合である。ストレージコントローラ１４０は、パリティグループ４３０の論理的な記憶領域空間を、複数のページ４４０に分割して管理する。
【００２２】
ストレージコントローラ１４０は、ホスト１００に仮想ボリューム４１０を提供する。ストレージコントローラ１４０は、仮想ボリューム４１０を、複数の記憶領域（以下「仮想領域」という）４１１に分割して管理する。仮想ボリューム４１０は、仮想的な論理ボリュームである。
【００２３】
仮想ボリューム４１０は、ホスト１００から論理ボリュームとして認識される。例えば、ストレージコントローラ１４０は、ホスト１００から仮想領域４１１に属する仮想アドレスに対するライトコマンドを受けると、プール４２０から未使用のページ４４０を特定し、その未使用のページ４４０を仮想領域４１１に割り当てる。ストレージコントローラ１４０は、割り当てたページ４４０に、ライトコマンドに従うライト対象のデータを書き込む。
【００２４】
図３は、パリティグループ４３０間の書き換え回数を平準化するバランス処理を説明するための模式図である。
【００２５】
記憶デバイス１５０内の記憶媒体は、不揮発性メモリでよい。不揮発性メモリは、追記型のメモリ、例えば、フラッシュメモリ、ＭＲＡＭ（Ｍａｇｎｅｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ：磁気抵抗メモリ）、ＰＲＡＭ（Ｐｈａｓｅ  Ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ：相変化メモリ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔａｎｃｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ：抵抗変化メモリ）などであっても良い。
【００２６】
記憶デバイス１５０内の記憶媒体がフラッシュメモリである場合、フラッシュメモリは、複数のブロックで構成され、各ブロックは、複数のページで構成されている。ページは、Ｉ／Ｏ単位であり、プール内の単位領域である「ページ」とは対象が異なる。以下、フラッシュメモリ内のページを「フラッシュページ」と言う。ブロックは、消去単位である。フラッシュメモリは、その特性上、旧データ（有効データ）がライトされているフラッシュページに対して、新データをオーバライトすることができない。したがって、フラッシュメモリを有する記憶デバイス（フラッシュデバイス）１５０は、旧データが格納されているアドレスと同じアドレスに対して新データをオーバライトする場合は、空きのフラッシュページに新データ（有効データ）をライトし、旧データを無効データとして管理する。フラッシュデバイス１５０は、ブロック単位でしかデータを消去できない。よって、フラッシュデバイス１５０は、ブロック内の旧データ（無効データ）を消去する場合は、そのブロック内の使用中のページのデータ（有効データ）を他のブロックの空きのページに移動させ、その後、移動元のブロック内のデータを全て消去する。
【００２７】
また、フラッシュメモリは、その特性上、書き換え回数（ライト回数又は消去回数としても良い）に限界値がある。書き換え回数の限界値に達したフラッシュメモリには、それ以上データをライトすることができない（つまり、使用寿命に達してしまう）。したがって、フラッシュメモリから構成されているパリティグループ４３０において、一のパリティグループ４３０の書き換え回数が他のパリティグループ４３０に比べて多い場合、一のパリティグループ４３０が短期間で使用寿命に達してしまう。そこで、ストレージコントローラ１４０は、パリティグループ４３０間で書き換え回数が偏らないようにバランス処理を実行し、パリティグループ４３０間の使用寿命を平準化する。以下、バランス処理の一例を示す。なお、本明細書において、「バランス処理」とは、ページ間データ移動の処理であって、特に、規定された回避要求を満たすためのページ間データ移動の処理を言う。規定された回避要求としては、後述するように、ライトバランス化（寿命回避要求）、Ｉ／Ｏ負荷バランス化（ボトルネック回避要求）及び消費量バランス化（消費量回避要求）等がある。パリティグループ４３０間の使用寿命を平準化する回避要求は、ライトバランス化に相当する。
【００２８】
ストレージコントローラ１４０は、パリティグループ＃１、＃２の各々に対するライト回数（以下「ライト値」という）をカウントして管理する。ライト値は、一定期間におけるライト回数の累計でも良いし、一定期間における１以上のライト頻度（単位時間当たりのライト回数）に基づいて決定された値（例えば、ライト頻度の最大値、最小値又は平均値）でも良い。
【００２９】
ここで、パリティグループ＃１に対するライト値が大きく、パリティグループ＃２に対するライト値が小さいとする。この場合、ストレージコントローラ１４０は、例えば、以下の（１）及び（２）を含むバランス処理、
（１）ライト値の大きいパリティグループ＃１に基づく使用中ページ４４０ａからライト値の小さいパリティグループ＃２に基づく未割当ページ４４１ａにデータを移動する（Ｓ１１）、
（２）仮想領域４１１ａに対するページの割り当てを、ページ４４０ａからページ４４１ａに変更する（Ｓ１２）、
を実行する。なお、使用中ページ４４０ａは、所定の条件に適合したページで良く、そのようなページがパリティグループ＃１に基づくページ群に複数含まれていれば、それら複数のページの各々について（１）及び（２）が行われて良い。
【００３０】
一般的にライト値の大きいパリティグループ４３０では書き換えが多く発生するので、この処理により、パリティグループ４３０間の書き換え回数を平準化することができる。したがって、パリティグループ４３０間の書き換え回数を平準化することを、パリティグループ４３０間のライト値を平準化するといっても良い。
【００３１】
なお、ストレージコントローラ１４０は、各ページに対するライト値をカウントして管理しておき、上記（１）において、ライト値が第１閾値より大きいページを優先的に移動対象としても良い。これにより、移動させるページ数を削減することができる。なお、第１閾値は、固定値でも良いし、可変値（例えば、パリティグループ＃１に基づく複数のページのライト値の統計に基づいて決定された値）でも良い。
【００３２】
また、上記の処理のみでは、パリティグループ＃２にデータが偏ってしまい、パリティグループ＃２の記憶容量の使用可能量が不足してしまう恐れがある。よって、ストレージコントローラ１４０は、上記の処理によってパリティグループ＃１から＃２へ移動したページデータ（ページ単位のデータ）の数に基づいて決定された数（例えば、パリティグループ＃１から＃２へ移動したページデータと同数）のページデータを、ライト値の小さいパリティグループ＃２からライト値の大きいパリティグループ＃１へ移動させても良い。図３の例では、ライト値の小さいページ内のデータが、パリティグループ＃２に基づくページ４４０ｂであり、そのページ４４０ｂ内のデータの移動先が、パリティグループ＃１に基づく未割当てページ４４１ｂである（Ｓ１３）。仮想領域４１１ｂには、ページ４４０ｂに代えてページ４４１ｂが割り当てられる（Ｓ１４）。このとき、ストレージコントローラ１４０は、ライト値が第２閾値より小さいページを優先的に移動対象としても良い。なお、第２閾値は、固定値でも良いし、可変値（例えば、パリティグループ＃２に基づく複数のページのライト値の統計に基づいて決定された値）でも良い。
【００３３】
なお、ストレージコントローラ１４０は、ライトの「回数」をライト値として管理する代わりに、例えば、ライトされたデータの「量」をライト値として管理しても良い。
【００３４】
図４は、パリティグループ４３０間のＩ／Ｏ負荷を平準化するバランス処理を説明するための模式図である。
【００３５】
特定のパリティグループ４３０にアクセス（Ｉ／Ｏ）が集中すると、そのパリティグループ４３０のＩ／Ｏ性能がボトルネックとなり、プール４２０全体のＩ／Ｏ性能が低下する。よって、ストレージコントローラ１４０は、特定のパリティグループ４３０にアクセスが集中しないようにすることが望ましい。以下、パリティグループ４３０間でＩ／Ｏ負荷を平準化するバランス処理（Ｉ／Ｏ負荷バランス化のためのバランス処理）の一例を示す。
【００３６】
ストレージコントローラ１４０は、パリティグループ＃１、＃２の各々に対する単位時間当たりのＩ／Ｏ回数（以下「Ｉ／Ｏ値」という）をカウントして管理する。Ｉ／Ｏ値には、単位時間当たりのリード及びライトの回数が含まれる。ここで、パリティグループ＃１に対するＩ／Ｏ値が小さく、パリティグループ＃２に対するＩ／Ｏ値が大きいとする。この場合、ストレージコントローラ１４０は、例えば、以下の（１）及び（２）を含むバランス処理、
（１）Ｉ／Ｏ値の大きいパリティグループ＃２に基づく使用中ページ４４０ｃに格納されているデータを、Ｉ／Ｏ値の小さいパリティグループ４３０＃１に基づく未割当ページ４４１ｃに移動する（Ｓ２１）、
（２）仮想領域４１１ａに対するページに割り当てを、ページ４４０ｅからページ４４０ａに変更する（Ｓ２２）、
を実行する。この処理により、パリティグループ４３０間のＩ／Ｏ負荷を平準化することができる。使用中ページ４４０ｃは、所定の条件に適合したページで良く、そのようなページがパリティグループ＃１に基づくページ群に複数含まれていれば、それら複数のページの各々について（１）及び（２）が行われて良い。
【００３７】
なお、ストレージコントローラ１４０は、各ページに対するＩ／Ｏ値をカウントして管理しておき、上記（１）において、Ｉ／Ｏ値が第３閾値より大きいページを優先的に移動対象としても良い。これにより、移動させるページ数を削減することができる。なお、第３閾値は、固定値であっても良いし、可変値（例えば、パリティグループ＃２に基づく複数のページのＩ／Ｏ値の統計に基づいて決定された値）でも良い。
【００３８】
また、上記の処理のみでは、パリティグループ＃１にデータが偏ってしまい、パリティグループ＃２の記憶容量の使用可能量が不足してしまう恐れがある。よって、ストレージコントローラ１４０は、上記の処理によってパリティグループ＃２から＃１へ移動させたページデータの数に基づいて決定された数（例えば、パリティグループ＃２から＃１へ移動させたページデータの数と同数）のページデータを、Ｉ／Ｏ値の小さいパリティグループ＃１からＩ／Ｏ値の大きいパリティグループ＃２へ移動させても良い。図４の例では、Ｉ／Ｏ値の大きいページが、パリティグループ＃１に基づくページ４４０ｄであり、そのページ４４０ｄ内のデータの移動先が、パリティグループ＃２に基づく未割当てページ４４１ｄである（Ｓ２３）。仮想領域４１１ｄには、ページ４４０ｄに代えてページ４４１ｄが割り当てられる（Ｓ２４）。このとき、ストレージコントローラ１４０は、Ｉ／Ｏ値の第４閾値より小さいページを優先的に移動対象としても良い。なお、第４閾値は、固定値であっても良いし、可変値（例えば、パリティグループ＃１に基づく複数のページのＩ／Ｏ値の統計に基づいて決定された値）でも良い。
【００３９】
ストレージコントローラ１４０は、Ｉ／Ｏの「回数」をＩ／Ｏ値として管理する代わりに、例えば、Ｉ／Ｏのデータの「量」をＩ／Ｏ値として管理しても良い。
【００４０】
ライト値の大きいパリティグループ４３０が必ずしもＩ／Ｏ値が大きいとは限らない。なぜなら、例えば、リードが特に多いパリティグループ４３０は、Ｉ／Ｏ値も大きくなるからである。よって、上記図３及び図４に示したように、パリティグループ４３０間において、ライト値を平準化することと、Ｉ／Ｏ負荷を平準化することとは、必ずしも両立するわけではない。
【００４１】
そこで、以下、このような複数の異なる回避要求（ライトバランス化及びＩ／Ｏ負荷バランス化等）を適切に両立させるストレージコントローラ１４０について説明する。
【００４２】
図５は、ストレージコントローラ１４０で管理される情報を示すブロック図である。
ストレージコントローラ１４０は、仮想−論理アドレス変換テーブル３０１と、論理−物理アドレス変換テーブル３０２と、回避要求情報テーブル３０３と、ページモニタ情報テーブル３０４と、グループモニタ情報テーブル３０５と、グループ特性情報テーブル３０６と、スケジュール情報テーブル３０７と、バランス情報テーブル３０８とを管理する。例えば、これらの情報は、メインメモリ１４２に保持されても良いし、所定の記憶デバイスに保持されても良い。以下、各情報について図面を参照しながら説明する。
【００４３】
図６は、仮想−論理アドレス変換テーブル３０１の構成例を示す。
仮想−論理アドレス変換テーブル３０１は、仮想ボリューム４１０内の仮想アドレスと、プール４２０に含まれるパリティグループ４３０内のページ及び論理アドレスとの対応関係を管理する。仮想−論理アドレス変換テーブル３０１は、仮想アドレスに割り当て済みのページのみを管理するとしても良い。
【００４４】
仮想−論理アドレス変換テーブル３０１は、１以上の仮想アドレス変換情報５００をレコード５００として管理する。仮想−論理アドレス変換テーブル３０１は、１つのレコード５００を１つのページに対応させて管理しても良い。仮想アドレス変換情報５００は、項目として、ページ番号５０１と、仮想ボリューム番号５０２と、仮想アドレス５０３と、プール番号５０４と、グループ番号５０５と、論理アドレス５０６とを有する。
【００４５】
ページ番号５０１には、ページの識別番号が格納される。
仮想ボリューム番号５０２には、仮想ボリューム４１０の識別番号が格納される。その識別番号は、仮想ボリューム番号５０２のＬＵＮ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ  Ｎｕｍｂｅｒ）であってホスト１００に認識されるＬＵＮであっても良いし、ホスト１００に認識されずストレージコントローラ１４０が認識する番号であっても良い。
仮想アドレス５０３には、仮想ボリューム４１０内の仮想領域４１１の開始アドレスが格納される。
プール番号５０４には、プール４２０の識別番号が格納される。
グループ番号５０５には、パリティグループ４３０の識別番号が格納される。
論理アドレス５０６には、パリティグループ４３０内のページ４４０の開始アドレスが格納される。
【００４６】
例えば、ページ番号５０１が「１」のレコード５００に対応するページ４４０は、仮想ボリューム番号５２０が「１」の仮想ボリューム４１０の開始アドレスを「０ｘ００００」とする仮想領域４１１に割り当てられていることを示す。さらに、そのページ４４０は、プール番号５０４が「１」のプール４２０に含まれるグループ番号５０５が「３」のパリティグループ４３０の開始アドレスを「０ｘ００４０」とする記憶領域に対応することを示す。
【００４７】
図７は、論理−物理アドレス変換テーブル３０２の構成例を示す。
論理−物理アドレス変換テーブル３０２は、パリティグループ４３０内の論理アドレスと、記憶デバイスの物理アドレスとの対応関係を管理する。論理−物理アドレス変換テーブル３０２は、１以上の論理アドレス変換情報６００をレコード６００として管理する。論理アドレス変換情報６００は、項目として、グループ番号６０１と、ＲＡＩＤ種別６０２と、物理ドライブ番号６０３とを有する。グループ番号６１０は、上記で説明したグループ番号５０５と同じである。
【００４８】
ＲＡＩＤ種別６０２には、パリティグループ４３０が構成するＲＡＩＤの種別（ＲＡＩＤレベル）が格納される。
物理ドライブ番号６０３には、パリティグループ４３０を構成する１又は２以上の物理ドライブのそれぞれの識別番号が格納される。
【００４９】
例えば、グループ番号６１０が「１」のレコード６００は、パリティグループ４３０のＲＡＩＤ種別６０２が「ＲＡＩＤ５」であることを示す。さらに、そのレコード６００は、そのパリティグループ４３０が、物理ドライブ番号６０３が「１０００」、「１００１」、「１００２」及び「１００３」の４つの物理ドライブから構成されていることを示す。
【００５０】
ＲＡＩＤ種別と物理ドライブの構成に基づいて、パリティグループ４３０内には、論理アドレス空間と、その論理アドレス空間と対応関係を有する物理アドレス空間（物理ドライブの領域を示すアドレス空間）とが形成される。したがって、グループ番号と論理アドレスとが特定されると、論理−物理アドレス変換テーブル３０２によって、その論理アドレスに対応する物理アドレスの領域が特定される。
【００５１】
図８は、回避要求情報テーブル３０３の構成例を示す。
回避要求情報テーブル３０３は、１以上の回避要求情報９００をレコード９００として管理する。回避要求情報９００には、回避要求を満たすためのバランス処理の実行の状況が格納されても良い。回避要求情報９００は、項目として、回避要求名９０１と、優先度９０２と、実行状況９０３と、完了時刻９０４とを有する。
【００５２】
回避要求名９０１には、回避要求の名称が格納される。回避要求名９０１には、例えば、「ライトバランス化」、「Ｉ／Ｏ負荷バランス化」、及び「消費量バランス化」等が格納される。ライトバランス化は、上述の通り、パリティグループ４３０間におけるライト値を平準化するという回避要求である。Ｉ／Ｏ負荷バランス化は、上述の通り、パリティグループ４３０間におけるＩ／Ｏ負荷を平準化するという回避要求である。消費量バランス化は、パリティグループ４３０間におけるデータの消費量を平準化するという回避要求である。
【００５３】
優先度９０２には、回避要求を満たすためのバランス処理の優先度が格納される。例えば、図８に示す回避要求情報テーブル３０３では、ライトバランス化の回避要求の優先度は、Ｉ／Ｏ負荷バランス化の回避要求の優先度よりも高い。
【００５４】
実行状況９０３には、回避要求を満たすためのバランス処理の実行の状況が格納される。例えば、回避要求を満たすためのバランス処理が完了している場合、この実行状況９０３には「完了」が格納される。回避要求を満たすためのバランス処理が完了していない場合、この実行状況９０３には「未完了」が格納される。回避要求を満たすためのバランス処理を実行中の場合、この実行状況９０３には「実行中」が格納される。実行状況９０３が「実行中」の場合、その実行の進捗度を示す情報が合わせて格納されても良い。
【００５５】
完了時刻９０４には、回避要求を満たすためのバランス処理の最近の完了時刻が格納される。
【００５６】
例えば、回避要求名９０１が「ライトバランス化」のレコード９００は、優先度９０２が「１」であり、当該回避要求を満たすためのバランス処理は「完了」しており、その完了時刻は「２０１３年１月１２日１１時２１分」であることを示す。
【００５７】
図９は、バランス情報テーブル３０８の構成例を示す。
バランス情報テーブル３０８は、１以上のバランス情報１０００をレコード１０００として管理する。バランス情報テーブル１０００は、パリティグループ４３０毎に、回避要求に関する各種指標を管理する。このパリティグループ４３０毎の各種指標が、パリティグループ間でバランス処理を行うか否かの判定及びデータ移動量の算出に用いられる。バランス情報１０００は、項目として、グループ番号１００１と、上限指標１００２と、計画指標１００３とを有する。グループ番号１００１は、上記で説明したグループ番号５０５と同じである。
【００５８】
上限指標１００２には、回避要求を満たすための指標として、入出力回数に関する上限値が格納される。例えば、「ライトバランス化」という回避要求には、上限ライト値１０１１が対応する。例えば、「Ｉ／Ｏ負荷バランス化」という回避要求には、上限Ｉ／Ｏ値１０１２が対応する。上限指標１００２は、適宜算出されても良いし、予め定められても良い。未算出の上限指標１００２には「ＮＵＬＬ」が格納されても良い。
【００５９】
計画指標１００３には、回避要求を満たすためのバランス処理を計画的に実行するための指標として、入出力に関する値が格納される。計画指標１００３は、適宜算出されても良い。未算出の計画指標１００３には「ＮＵＬＬ」が格納されても良い。
【００６０】
上限ライト値１０１１には、その上限ライト値１０１１を有するレコード１０００に対応したパリティグループ４３０についての上限ライト値が格納される。計画ライト値１０１３には、その計画ライト値１０１３を有するレコード１０００に対応したパリティグループ４３０についての予想ライト値が格納される。予想ライト値は、パリティグループ４３０のライト値と比較される閾値であり、そのパリティグループ４３０のライト値がその上限ライト値を超えないためのバランス処理を開始するタイミングを定義する値である。つまり、パリティグループ４３０のライト値が予想ライト値を超えたときにバランス処理を開始すれば、そのパリティグループ４３０のライト値が上限ライト値を超えないことが期待される。
【００６１】
上限ライト値１０１１及び計画ライト値１０１３は、或る期間におけるライト値の合計であっても良いし、或る時点からのライト値の累計であっても良い。
【００６２】
上限Ｉ／Ｏ値１０１２には、その上限Ｉ／Ｏ値１０１２を有するレコード１０００に対応したパリティグループ４３０についての上限Ｉ／Ｏ値が格納される。計画Ｉ／Ｏ値１０１４には、その計画Ｉ／Ｏ値１０１３を有するレコード１０００に対応したパリティグループ４３０についての予想Ｉ／Ｏ値が格納される。予想Ｉ／Ｏ値は、パリティグループ４３０のＩ／Ｏ値と比較される閾値でありそのパリティグループ４３０のＩ／Ｏ値がその上限Ｉ／Ｏ値を超えないためのバランス処理を開始するタイミングを定義する値である。つまり、パリティグループ４３０のＩ／Ｏ値が予想Ｉ／Ｏ値を超えたときにバランス処理を開始すれば、そのパリティグループ４３０のＩ／Ｏ値が上限Ｉ／Ｏ値を超えないことが期待される。
【００６３】
上限Ｉ／Ｏ値１０１２及び計画Ｉ／Ｏ値１０１４は、或る期間におけるＩ／Ｏ値の合計であっても良いし、或る時点からのＩ／Ｏ値の累計であっても良い。
【００６４】
例えば、グループ番号１００１が「１」のレコード１０００は、グループ番号「１」のパリティグループ４３０の上限ライト値１０１１は「５００」であり、計画ライト値１０１３は「２００」であることを示す。また、このレコード１０００は、グループ番号「１」のパリティグループ４３０の上限Ｉ／Ｏ値１０１２は「１０００」であり、計画Ｉ／Ｏ値１０１４は「１０００」であることを示す。
【００６５】
図１０は、ページモニタ情報テーブル３０４の構成例を示す。
ページモニタ情報テーブル３０４は、１以上のページモニタ情報１３００をレコード１３００として管理する。ページモニタ情報テーブル１３００は、割り当て済みのページのみを管理するとしても良い。ページモニタ情報テーブル３０４は、定期的に又は任意のタイミングで更新されても良い。ページモニタ情報１３００は、項目として、ページ番号１３０１と、ページライト値１３０２と、ページＩ／Ｏ値１３０３と、ページ消費量とを有する。
【００６６】
ページ番号１３０１は、上記で説明したページ番号５０１と同じである。
ページライト値１３０２には、ページ番号１３０１に対応するページのライト値が格納される。ページライト値１３０２は、そのページに対する、単位時間当たりのライトの回数（回／秒）であっても良いし、或る時点からのライトの回数の合計（回）であっても良い。
ページＩ／Ｏ値１３０３には、ページ番号１３０１に対応するページのＩ／Ｏ値が格納される。ページＩ／Ｏ値１３０３は、そのページに対する、単位時間当たりのＩ／Ｏの回数（回／秒）であっても良いし、単位時間当たりのＩ／Ｏのデータ量（ｋＢ／秒）であっても良いし、或る時点からのＩ／Ｏの回数の合計（回）であっても良いし、或る時点からのＩ／Ｏのデータ量（ｋＢ）であっても良い。
ページ消費量には、ページ番号１３０１に対応するページの消費量（言い換えれば、当該ページに格納されている有効なデータの総量（ｋＢ））が格納される。
【００６７】
例えば、ページ番号１３０１が「１」のレコード１３００は、ページ番号１３０１が「１」のページのページライト値は「１０００」であり、ページＩ／Ｏ値１３０３は「１５００」であり、ページ消費量１３０４は「２００」であることを示す。
【００６８】
図１１は、グループモニタ情報テーブル３０５の構成例を示す。
グループモニタ情報テーブル３０５は、１以上のグループモニタ情報１４００をレコード１４００として管理する。グループモニタ情報テーブル３０５は、プール４２０毎に作成されても良い。グループモニタ情報テーブル３０５は、ページモニタ情報テーブル３０４の更新に合わせて更新されても良い。グループモニタ情報１４００は、項目として、グループ番号１４０１と、グループライト値１４０２と、グループＩ／Ｏ値１４０３と、グループ消費量１４０４とを有する。
【００６９】
グループ番号１４０１は、上記で説明したグループ番号５０５と同じである。
グループライト値１３０２には、グループ番号１４０１に対応するパリティグループ４３０のライト値が格納される。グループライト値１３０２は、例えば、パリティグループ４３０に属する割り当て済みページのページライト値１３０２の合計である。
グループＩ／Ｏ値１３０３には、グループ番号１４０１に対応するパリティグループ４３０のＩ／Ｏ値が格納される。グループＩ／Ｏ値は、例えば、パリティグループ４３０に属する割り当て済みページに対するページＩ／Ｏ値１３０３の合計である。
グループ消費量１４０４には、グループ番号１４０１に対応するパリティグループ４３０のデータによる消費量（言い換えれば、当該パリティグループ４３０に格納されている有効なデータの総量）が格納される。グループ消費量１４０４は、例えば、パリティグループ４３０に属する割り当て済みページのページ消費量１３０４の合計である。
【００７０】
図１２は、ライトバランス化のグループ特性情報テーブル３０６ａ（以下、「ライト用特性テーブル３０６ａ」という）の構成例を示す。
ライト用特性テーブル３０６ａは、パリティグループ４３０に含まれる割り当て済みページを、ページライト値１３０２に基づいて区分したものである。ライト用特性テーブル３０６ａは、例えば、パリティグループ４３０毎に生成される。ライト用特性テーブル３０６ａは、ページモニタ情報テーブル３０４に格納された情報を用いて算出されても良い。ライト用特性テーブル３０６ａは、ページモニタ情報テーブル３０４の更新に合わせて更新されても良い。
【００７１】
ライト用特性テーブル３０６ａは、複数の区間情報１５００をそれぞれレコード１５００として管理する。区間情報１５００は、項目として、ページライト値の区間１５０１と、ページ数１５０２と、総ページライト値１５０３とを有する。
ページライト値の区間１５０１には、ページライト値１３０２の区間を示す値が格納される。
ページ数１５０２には、ページライト値の区間１５０１に含まれるページライト値１３０２を有するページの数が格納される。
総ページライト値１５０３には、ページライト値の区間１５０１に含まれるページライト値１３０２を有するページ（つまり、ページ数１５０２に該当するページ）の、ページライト値１３０２の合計が格納される。
【００７２】
例えば、ページライト値の区間１５０１が「０〜１００」に対応するレコード１５００は、ページライト値の区間１５０１「０〜１００」に含まれるページライト値１３０２を有するページ（１５０２）が「１００ページ」存在し、このページ数１５０２に該当するページのページライト数の合計（１５０３）が「５０００」であることを示す。
【００７３】
図１３は、Ｉ／Ｏ負荷バランス化のグループ特性情報テーブル３０６ｂ（以下、「Ｉ／Ｏ負荷用特性テーブル３０６ｂ」という）の構成例を示す。
Ｉ／Ｏ負荷用特性テーブル３０６ｂは、パリティグループ４３０に含まれる割り当て済みページを、ページＩ／Ｏ値１３０３に基づいて区分したものである。Ｉ／Ｏ負荷用特性テーブル３０６ｂは、例えば、パリティグループ４３０毎に生成される。Ｉ／Ｏ負荷用特性テーブル３０６ｂは、ページモニタ情報テーブル３０４に格納された情報を用いて算出されても良い。Ｉ／Ｏ負荷用特性テーブル３０６ｂは、ページモニタ情報テーブル３０４の更新に合わせて更新されても良い。
【００７４】
Ｉ／Ｏ負荷用特性テーブル３０６ｂは、複数の区間情報２０００をそれぞれレコード２０００として管理する。区間情報２０００は、項目として、ページＩ／Ｏ値の区間２００１と、ページ数２００２と、総ページＩ／Ｏ値２００３とを有する。さらに、区間情報２０００は、総ページライト値２００４を有しても良い。つまり、区間情報２０００は、自己のテーブルに係る回避要求よりも優先度の高い他の回避要求に係る項目を有するとしても良い。この項目は、例えば、自己のテーブルに係る回避要求を満たすためのバランス処理が、自己のテーブルに係る回避要求よりも優先度の高い他の回避要求にどのくらいの影響を与えるかを示す。
ページＩ／Ｏ値の区間２００１には、ページＩ／Ｏ値１３０３の区間を示す値が格納される。
ページ数２００２には、ページＩ／Ｏ値の区間２００１に含まれるページＩ／Ｏ値１３０３を有するページの数が格納される。
総ページＩ／Ｏ値２００３には、ページＩ／Ｏ値の区間２００１に含まれるページＩ／Ｏ値１３０３を有するページ（つまり、ページ数２００２に該当するページ）の、ページＩ／Ｏ値の合計が格納される。
総ページライト値２００４には、ページＩ／Ｏ値の区間２００１に含まれるページＩ／Ｏ値１３０３を有するページ（つまり、ページ数２００２に該当するページ）の、ページライト値１３０２の合計が格納される。
【００７５】
例えば、ページＩ／Ｏ値の区間２００１が「０〜１００」に対応するレコード２０００は、ページＩ／Ｏ値の区間２００１「０〜１００」に含まれるページＩ／Ｏ値１３０３を有するページ（２００２）が「１００ページ」存在し、このページ数２００２に該当するページの総ページＩ／Ｏ値２００３が「５４００」であり、このページ数２００２に該当するページの総ページライト値２００４が「２５００」であることを示す。
【００７６】
図１４は、スケジュール情報テーブル３０７の構成例を示す。
スケジュール情報テーブル３０７は、パリティグループ４３０間のページ移動に関する情報を管理する。スケジュール情報テーブル３０７は、回避要求を満たすためのバランス処理毎に生成されても良い。スケジュール情報テーブル３０７は、１以上のスケジュール情報１６００をレコード１６００として管理する。
【００７７】
スケジュール情報１６００は、項目として、移動元グループ番号１６０１と、移動種別１６０２と、移動閾値１６０３と、移動先グループ番号１６０４と、移動予定ページ数１６０５と、移動済みページ数１６０６とを有する。
【００７８】
移動元グループ番号１６０１には、ページの移動元のパリティグループ４３０の番号が格納される。
【００７９】
移動種別１６０２には、このスケジュール情報１６００が、移動元グループ番号１６０１に対応するパリティグループ４３０の回避要求に関連する指標（例えば、グループライト値１４０２又はグループＩ／Ｏ値１４０３）を、減少（流出）させるものであるのか、それとも増加（流入）させるものであるのか、を示す情報が格納される。例えば、スケジュール情報１６００が、移動元グループ番号１６０１に対応するパリティグループ４３０のグループライト値１４０２を減少させるものである場合、この移動種別１６２０には「流出」が格納される。例えば、スケジュール情報１６００が、移動元グループ番号１６０１に対応するパリティグループ４３０のグループライト値１４０２を増加させるものである場合、この移動種別１６０２には「流入」が格納される。
【００８０】
移動閾値１６０３には、ページ移動に関する閾値が格納される。移動種別１６０２が「流出」の場合、移動閾値１６０３には下限の移動閾値が格納される。移動種別１６０２が「流入」の場合、移動閾値１６０３には上限の移動閾値が格納される。例えば、回避要求がライトバランス化（寿命回避要求）であって、移動種別１６０２が「流出」の場合、この下限の移動閾値１６０３よりも大きいページライト値１３０２を有するページが移動対象となる。また、移動種別１６０２が「流入」の場合、この上限の移動閾値１６０３よりも小さいページライト値１０３２を有するページが移動対象となる。これにより上述の通り、移動させるページ数を少なくすることができる。
【００８１】
移動先グループ番号１６０４には、ページの移動先のパリティグループ４３０の番号が格納される。
移動予定ページ数１６０５には、移動元のパリティグループ４３０から移動先のパリティグループ５３０へ移動させる予定のページ数が格納される。
移動済みページ数１６０６には、移動元のパリティグループ４０３から移動先のパリティグループ４３０へ移動済みのページ数が格納される。
【００８２】
例えば、移動元グループ番号１６０１が「１」のレコード１６００は、移動元グループ番号１６０１「１」に対応するパリティグループ４３０から、移動先グループ番号１６０４「２」に対応するパリティグループ４３０へ移動させる予定のページ数は「１００」であり、移動先グループ番号１６０４「３」に対応するパリティグループ４３０へ移動させる予定のページ数は「７０」であることを示す。そして、このレコード１６００は、移動閾値１６０３の「１００」よりも大きいページライト値１３０２を有するページが移動対象であることを示す。さらに、移動先グループ番号１６０４「２」に対応するパリティグループ４０３へ移動済みのページ数は「１００」であり（つまり、全てページを移動済みであり）、移動先グループ番号１６０４「３」に対応するパリティグループ４０３へ移動済みのページ数は「５０」であることを示す。
以上のことは、回避要求がグループＩ／Ｏ負荷バランス化（ボトルネック回避要求）の場合であっても同様である。
【００８３】
図１５は、ストレージコントローラ１４０で実行される処理を示すブロック図である。
ストレージコントローラ１４０は、例えば、ホストリード処理２０１と、ホストライト処理２０２と、バランス処理２０３と、スケジュール処理２０４と、ページ移動処理２０５とを実行することができる。例えば、ストレージコントローラ１４０の備えるプロセッサ１４１が、これらの処理に対応するプログラムをメインメモリから読み出して実行することができる。
【００８４】
ホストリード処理２０１は、ホスト１００から受信したリードコマンドに対応するデータをキャッシュメモリ１４３又はパリティグループ４３０からリードして、ホスト１００に返す。例えば、リードコマンドには、仮想ボリューム４１０の仮想ボリューム番号５０２及び仮想アドレス５０３と、リードするデータ長とが含まれる。
【００８５】
ホストライト処理２０２は、ホスト１００から受信したライトコマンドに対応するデータをキャッシュメモリ１４３に一旦格納し、完了応答を返す。キャッシュメモリ１４３に一旦格納されたそのデータは、後に（非同期で）パリティグループ４３０にライトされる。例えば、ライトコマンドには、仮想ボリューム４１０番号及び仮想アドレス５０３と、ライトするデータ長及びライトデータの実体とが含まれる。
【００８６】
ストレージコントローラ１４０は、上述の通り、複数の記憶デバイス１５０から構成される複数のパリティグループ４３０（記憶デバイスグループ）と、そのパリティグループ４３０に含まれる複数のページ（記憶領域）とを管理している。また、ストレージコントローラ１４０は、異なるパリティグループ４３０に基づくページ間でデータを移動するバランス処理を実行する。そして、ストレージコントローラ１４０は、複数の記憶デバイス１５０の内のいずれかの記憶デバイス１５０のみに問題が発生することを回避する複数の回避要求の内のボトルネック回避要求（第１の回避要求）を満たすためのＩ／Ｏ負荷バランス化の処理（第１のバランス処理）の実行をすべきか否かを、ボトルネック回避要求を満たすためのＩ／Ｏ負荷バランス化の処理よりも先に実行されたライトバランス化の処理により満たされた寿命回避要求（第２の回避要求）に基づいて、判定し、その判定の結果が肯定的であった場合に、Ｉ／Ｏ負荷バランス化の処理（第１のバランス処理）を実行する。
【００８７】
ストレージコントローラ１４０は、プール４２０に含まれるパリティグループ４３０間で２以上の回避要求が満たされるようにバランス処理３０３を実行しても良い。ストレージコントローラ１４０は、優先度の高い回避要求が優先的に満たされるようにバランス処理３０３を実行しても良い。以下、各処理について図面を参照しながら説明する。
【００８８】
図１６は、ホストリード処理２０１の一例を示すフローチャートである。
以下、ストレージコントローラ１４０で実行されるホストリード処理２０１の一例を示す。
【００８９】
ストレージコントローラ１４０は、ホスト１００からリードコマンドを受信すると、仮想アドレス５０３に対応するデータがキャッシュメモリ１４３に格納されているか否かを判定する（Ｓ１０１）。
仮想アドレス５０３に対応するデータがキャッシュメモリ１４３に格納されている場合（Ｓ１０１：ＹＥＳ）、ストレージコントローラ１４０は、キャッシュメモリ１４３に格納されているデータをホスト１００に返し（Ｓ１０４）、当該処理を終了する（終了）。
【００９０】
仮想アドレス５０３に対応するデータがキャッシュメモリ１４３に格納されていない場合（Ｓ１０１：ＮＯ）、ストレージコントローラ１４０は、仮想−論理アドレス変換テーブル３０１及び論理−物理アドレス変換テーブル３０２を参照し、リード先の記憶デバイス１５０及び記憶領域を特定する（Ｓ１０２）。
次に、ストレージコントローラ１４０は、その特定した記憶デバイス１５０及び記憶領域からデータをリードし、キャッシュメモリ１４３へ一旦格納する（Ｓ１０３）。
次に、ストレージコントローラ１４０は、キャッシュメモリ１４３からそのデータをリードしてホスト１００に送信し（Ｓ１０４）、当該処理を終了する（終了）。
【００９１】
図１７は、ホストライト処理２０２の一例を示すフローチャートである。
以下、ストレージコントローラ１４０で実行されるホストライト処理２０２の一例を示す。
【００９２】
ストレージコントローラ１４０は、ホスト１００からライトコマンドを受信すると、そのライトコマンドに含まれる仮想ボリューム４１０番号及び仮想アドレス５０３等と仮想−論理アドレス変換テーブル３０１とを参照し、仮想アドレス５０３に対応する仮想領域４１１に、ページ４４０が割り当て済みであるか否かを判定する（Ｓ２０１）。例えば、ストレージコントローラ１４０は、仮想−論理アドレス変換テーブル３０１に当該仮想アドレス５０３を含むレコード５００が登録済みである場合、ページ４４０が割り当て済みであると判定し、当該仮想アドレス５０３を含むレコード５００が未登録である場合、ページ４４０が未割り当て割り当てであると判定しても良い。
【００９３】
その仮想領域４１１にページ４４０が未割り当てである場合（Ｓ２０１：ＮＯ）、ストレージコントローラ１４０は、未使用のページ４４０を当該仮想領域４１１に割り当てて仮想−論理アドレス変換テーブル３０１を更新し（Ｓ２０２）、ステップＳ２０３に進む。
【００９４】
その仮想領域４１１にページ４４０が割り当て済みである場合（Ｓ２０１：ＹＥＳ）、ストレージコントローラ１４０は、そのままステップＳ２０３に進む。
【００９５】
ステップＳ２０３において、ストレージコントローラ１４０は、キャッシュメモリ１４３にライトデータを一旦格納する（Ｓ２０３）。
そして、ストレージコントローラ１４０は、ホスト１００へライトの完了応答を返す（Ｓ２０４）。上述の通り、キャッシュメモリ１４３に一旦格納されたライトデータは、その後（非同期で）、割り当て済みのページ４４０に格納される。
【００９６】
図１８は、バランス処理３０３の一例を示すフローチャートである。
以下、ストレージコントローラ１４０で実行されるバランス処理３０３の一例を示す。
【００９７】
ストレージコントローラ１４０は、実行状況９０３が「未完了」且つ優先度の高い回避要求を今回の回避要求に選択する（Ｓ３０１）。
ストレージコントローラ１４０は、今回の回避要求を満たすためのスケジュール情報テーブル３０７を生成する（Ｓ３０２）。スケジュール情報テーブル３０７は、スケジュール処理２０４によって生成される。スケジュール処理２０４の詳細については、後述する。
【００９８】
ストレージコントローラ１４０は、このスケジュール情報テーブル３０７に基づいて、今回の回避要求を満たすためのバランス処理３０３を実行した場合に、前回の回避要求を満たし続けるか否かを判定する（Ｓ３０３）。この判定方法の詳細については後述する。
【００９９】
ステップＳ３０３の判定が否定的であった場合（Ｓ３０３：ＮＯ）、ストレージコントローラ１４０は、今回の回避要求を満たすためのバランス処理３０３を実行せずに、当該処理を終了する（終了）。
【０１００】
ステップＳ３０３の判定が肯定的であった場合（Ｓ３０３：ＹＥＳ）、ストレージコントローラ１４０は、スケジュール情報テーブル３０７に基づいて、今回の回避要求を満たすためのバランス処理３０３を実行する（Ｓ３０４）。バランス処理３０３の実行が完了した場合、実行状況９０３は「完了」に更新される。
【０１０１】
ストレージコントローラ１４０は、実行状況９０３に「未完了」の回避要求が残っているか否かを判定し（Ｓ３０５）、残っている場合は（Ｓ３０５：ＹＥＳ）、ステップＳ３０１に戻り、残っていない場合は（Ｓ３０５：ＮＯ）、当該処理を終了する（終了）。
【０１０２】
図１９は、ライトバランス化のスケジュール処理２０４の一例を示すフローチャートである。
以下、ストレージコントローラ１４０で実行されるスケジュール処理２０４の一例を示す。
【０１０３】
ストレージコントローラ１４０は、回避要求を満たすための指標に基づいて、スケジュール情報テーブル３０７を生成する。ストレージコントローラ１４０は、例えば、ページモニタ情報テーブル３０４、グループモニタ情報テーブル３０５及びグループ特性情報テーブル３０６に格納されている情報を用いて、回避要求毎にスケジュール情報テーブル３０７を生成しても良い。
【０１０４】
ストレージコントローラ１０４は、ライトバランス化の回避要求（寿命回避要求）に対して、ページライト値１３０２及びグループライト値１４０２等の情報を用いて、ライトバランス化用のスケジュール情報テーブル３０７を生成しても良い。
【０１０５】
ストレージコントローラ１４０は、Ｉ／Ｏ負荷バランス化の回避要求（ボトルネック回避要求）に対して、ページＩ／Ｏ値１３０３及びグループＩ／Ｏ値１４０３等の情報を用いて、Ｉ／Ｏ負荷バランス化用のスケジュール情報テーブル３０７を生成しても良い。
以下では、ライトバランス化の回避要求に対する処理を一例に説明するが、他のＩ／Ｏ負荷バランス化の回避要求等に対する処理であっても同様である。
【０１０６】
ストレージコントローラ１４０は、プール４２０を構成する各パリティグループ４３０について、バランス情報テーブル３０８における上限ライト値１０１１を算出する（Ｓ４０１）。上限ライト値１０１１の算出方法の詳細については後述する。
次に、ストレージコントローラ１４０は、パリティグループ４３０間における「グループ間移動量」を算出する（Ｓ４０２）。グループ間移動量の算出方法の詳細については後述する。
次に、ストレージコントローラ１４０は、移動予定ページ数１６０５及び移動閾値１６０３を算出し、スケジュール情報テーブル３０７に登録し（Ｓ４０３）、当該処理を終了する（終了）。移動予定ページ数１６０５及び移動閾値１６０３の算出方法の詳細については後述する。
【０１０７】
以上の処理により、ライトバランス化の回避要求に対するスケジュール情報テーブル１６０５が生成される。
【０１０８】
図２０は、上限ライト値１００１の算出方法の一例を示すフローチャートである。
ストレージコントローラ１４０は、パリティグループ４３０を構成する複数の記憶デバイス１５０を特定し（Ｓ５０１）、記憶デバイス１５０毎に以下の情報を取得する（Ｓ５０２）。
・書き換えの上限回数（Ｃｍ）
・現在までの書き換え回数（Ｃａ）
・単位時間当たりの書き換え回数（Ｃ）
・単位時間あたりのライト回数（Ｗ）
【０１０９】
ストレージコントローラ１４０は、記憶デバイス１５０毎に、「記憶デバイスのライト値＝（Ｃｍ−Ｃａ）×（Ｗ／Ｃ）」を算出する（Ｓ５０３）。
そして、ストレージコントローラ１４０は、記憶デバイス１５０毎に算出した「記憶デバイスのライト値」の内の最小値を、そのパリティグループ４３０の上限ライト値１０１１とし（Ｓ５０４）、当該処理を終了する（終了）。
【０１１０】
図２１は、グループ間移動量の算出方法の一例を示すフローチャートである。
以下では、ライトバランス化の回避要求に対する処理を一例に説明するが、他のＩ／Ｏ負荷バランス化の回避要求等に対する処理であっても同様である。
【０１１１】
ストレージコントローラ１４０は、プール４２０を構成する複数のパリティグループ４３０を、グループライト値１４０２が減少する「流出」と、グループライト値１４０２が増加する「流入」とに分類する。例えば、ストレージコントローラ１４０は、「グループライト値１４０２＞上限ライト値１０１１」のパリティグループ４３０を「流出」に、「グループライト値１４０２≦上限ライト値１０１１」のパリティグループ４３０を「流入」に分類する（Ｓ６０１）。
【０１１２】
ストレージコントローラ１４０は、分類した「流出」と「流入」とから、それぞれ１つずつパリティグループ４３０を抽出する（Ｓ６０２）。
【０１１３】
ストレージコントローラ１４０は、「流出」の分類から抽出したパリティグループ４３０について、「超過量＝グループライト値１４０２−上限ライト値１０１１」を算出する（Ｓ６０３）。
また、ストレージコントローラ１４０は、「流入」の分類から抽出したパリティグループ４３０について、「余剰量＝上限ライト値１０１１−グループライト値１４０２」を算出する（Ｓ６０４）。
【０１１４】
ストレージコントローラ１４０は、上記で算出した「超過量」と「余剰量」とではどちらが小さいかを比較する（Ｓ６０５）。
【０１１５】
「超過量＜余剰量」の場合（Ｓ６０５：超過量）、ストレージコントローラ１４０は、その「超過量」を「グループ間移動量」とし（Ｓ６０６）、ステップＳ６０８に進む。
【０１１６】
「超過量≧余剰量」の場合（Ｓ６０５：余剰量）、ストレージコントローラ１４０は、その「余剰量」を「グループ間移動量」とし（Ｓ６０７）、ステップＳ６０８に進む。
【０１１７】
そして、ストレージコントローラ１４０は、「流出」の分類に未処理のパリティグループ４３０が残っているか否かを判定し（Ｓ６０８）、未処理のパリティグループ４０３が残っている場合（Ｓ６０８：ＹＥＳ）、ステップＳ６０２に戻り、未処理のパリティグループ４０３が残っていない場合（Ｓ６０８：ＮＯ）、当該処理を終了する（終了）。
【０１１８】
ステップＳ６０２において、どのパリティグループ４３０を優先的に抽出するかについては、所定の目的に応じて変更されても良い。例えば、「流出」の分類に属するパリティグループ４３０のグループライト値の超過量の合計が、「流入」の分類に属するパリティグループ４３０のグループライト値の余剰量の合計よりも大きい場合は、ステップＳ６０１において「流出」の分類に属するパリティグループ４３０をゼロにすることができない。このような場合、ストレージコントローラ１４０は、ステップＳ６０２において、「流出」の分類から超過量の小さいパリティグループ４３０を優先的に抽出しても良い。これにより、上限ライト値を超えるパリティグループ４３０の数を最小にすることができる。
【０１１９】
図２２は、移動予定ページ数と移動閾値の算出方法の一例を示すフローチャートである。
以下、ライトバランス化の回避要求に対する処理を一例に説明するが、他のＩ／Ｏ負荷バランス化の回避要求等に対する処理であっても同様である。
【０１２０】
ストレージコントローラ１４０は、「流出」に対応するパリティグループ４３０のライト用特性テーブル３０６ａから、ページライト値の区間１５０１の大きい順に今回の処理対象のレコード１５００を選択する（Ｓ７０１）。
【０１２１】
ストレージコントローラ１４０は、前回までに処理されたレコード１５００による「ページ数の合計」に、今回のレコード１５００のページ数１５０２を加算する（Ｓ７０２）。
ストレージコントローラ１４０は、前回までに処理されたレコード１５００による「総ページライト値の合計」に、今回のレコード１５００の総ページライト値１５０３を加算する（Ｓ７０３）。
【０１２２】
ストレージコントローラ１４０は、「総ページライト値の合計＞グループ間移動量」であるか否かを判定する（Ｓ７０４）。
【０１２３】
「総ページライト値の合計≦グループ間移動量」である場合（Ｓ７０４：ＮＯ）、ストレージコントローラ１４０は、ステップＳ７０１に戻り、次のレコード１５００を処理の対象とする。
【０１２４】
「総ページライト値の合計＞グループ間移動量」である場合（Ｓ７０４：ＹＥＳ）、ストレージコントローラ１４０は、今回のレコード１５００のページライト値の区間１５０１の最小値を、移動閾値１６０３とする（Ｓ７０５）。
そして、ストレージコントローラ１４０は、「ページ数の合計」を移動予定ページ数１６０５とし（Ｓ７０６）、当該処理を終了する（終了）。
【０１２５】
このように算出された移動閾値１６０３及び移動予定ページ数１６０５が、スケジュール情報テーブル３０７に登録される。
【０１２６】
図２３は、バランス処理の実行可否の判定方法（つまり、ステップＳ３０３の判定方法）の一例を示す。
以下では、ライトバランス化の回避要求を満たすためのバランス処理が実行された後、Ｉ／Ｏ負荷バランス化の回避要求を満たすためのバランス処理が実行された場合を例に説明する。
【０１２７】
ストレージコントローラ１４０は、今回の処理対象のパリティグループ４３０を抽出する（Ｓ７５１）。
ストレージコントローラ１４０は、今回のパリティグループ４３０の移動種別１６０２が「流出」であるか「流入」であるかを判定する（Ｓ７５２）。
【０１２８】
まず、移動種別１６０２が「流出」の場合（Ｓ７５２：流出）について説明する。
ストレージコントローラ１４０は、Ｉ／Ｏ負荷用特性テーブル３０６ｂから、ページＩ／Ｏ値の区間２００１の値が、今回のパリティグループ４３０の下限の移動閾値１６０３よりも大きいレコード２０００を抽出し、その抽出したレコード２０００の総ページライト値２００４を全て加算する（Ｓ７５３）。この値を「流出加算値」という。
【０１２９】
ストレージコントローラ１４０は、バランス情報テーブル３０８の今回のパリティグループ４３０のレコード１０００を参照し、「計画ライト値１０１３−流出加算値＞上限ライト値１０１１」であるか否かを判定する（Ｓ７５４）。
【０１３０】
「計画ライト値１０１３−流出加算値＞上限ライト値１０１１」である場合（Ｓ７５４：ＹＥＳ）、ストレージコントローラ１４０は、今回のＩ／Ｏ負荷バランス化の回避要求を満たすためのバランス処理を実行せずに終了する（終了）。Ｉ／Ｏ負荷バランス化の回避要求を満たすためのバランス処理を実行した場合、先に実行されたライトバランス化の回避要求が満たされなくなってしまうからである。
【０１３１】
「計画ライト値１０１３−流出加算値≦上限ライト値１０１１」である場合（Ｓ７５４：ＮＯ）、ストレージコントローラ１４０は、ステップＳ７５１に戻る。
【０１３２】
次に、移動種別１６０２が「流入」の場合（Ｓ７５４：流入）について説明する。
ストレージコントローラ１４０は、Ｉ／Ｏ負荷用特性テーブル３０６ｂから、ページＩ／Ｏ値の区間２０１１の値が、今回のパリティグループ４３０の上限の移動閾値１６０３よりも小さいレコード２０００を抽出し、その抽出したレコード２０００の総ページライト値２００４の値を全て加算する（Ｓ７５５）。この値を「流入加算値」という。
【０１３３】
ストレージコントローラ１４０は、バランス情報テーブル３０８の今回のパリティグループ４３０のレコード１０００を参照し、「計画ライト値１０１３＋流入加算値＞上限ライト値１０１１」であるか否かを判定する（Ｓ７５６）。
【０１３４】
「計画ライト値１０１３＋流入加算値＞上限ライト値１０１１」である場合（Ｓ７５６：ＹＥＳ）、ストレージコントローラ１４０は、今回のＩ／Ｏ負荷バランス化の回避要求を満たすためのバランス処理を実行せずに終了する（終了）。Ｉ／Ｏ負荷バランス化の回避要求を満たすためのバランス処理を実行した場合、先に実行されたライトバランス化の回避要求が満たされなくなってしまうからである。
【０１３５】
なお、上述の処理において、パリティグループ４３０が「流出」である場合の処理（Ｓ７５３〜Ｓ７５４）は、省略されても良い。
【０１３６】
図２４は、Ｉ／Ｏ負荷バランス化のスケジュール処理の一例を示すフローチャートである。
【０１３７】
ストレージコントローラ１４０は、プール４２０を構成する各パリティグループ４３０について、バランス情報テーブル３０８における上限Ｉ／Ｏ値１０１２を算出する（Ｓ８０１）。上限Ｉ／Ｏ値１０１２は、例えば、以下の方法で算出される。
【０１３８】
各パリティグループ４３０は、限界Ｉ／Ｏ値とボトルネック係数とを有する。限界Ｉ／Ｏ値は、パリティグループ４３０が受領可能なＩ／Ｏ値の限界値（最大値）である。ボトルネック係数は、パリティグループ４３０の性能が安定する稼働率の上限値である。そして、ストレージコントローラ１４０は、「（上限Ｉ／Ｏ値）＝（限界Ｉ／Ｏ値）×（ボトルネック係数）」として上限Ｉ／Ｏ値１０１２を算出する。又は、ストレージコントローラ１４０は、「（上限Ｉ／Ｏ値）＝（プール４２０のＩ／Ｏ値の総和）／（プール４２０に含まれるパリティグループ４３０の数）」として上限Ｉ／Ｏ値１０１２を算出しても良い。
【０１３９】
次に、ストレージコントローラ１４０は、パリティグループ４３０間における「グループ間移動量」を算出する（Ｓ８０２）。ストレージコントローラ１４０は、グループ間移動量を、図２１に示した方法によって算出しても良い。
【０１４０】
次に、ストレージコントローラ１４０は、移動予定ページ数１６０５及び移動閾値１６０３を算出してスケジュール情報テーブル３０７に登録し（Ｓ８０３）、当該処理を終了する（終了）。ストレージコントローラ１４０は、移動予定ページ数１６０５及び移動閾値１６０３を、図２２に示した方法によって算出しても良い。
以上の処理により、Ｉ／Ｏ負荷バランス化の回避要求を満たすためのスケジュール情報テーブル３０７が生成される。
【０１４１】
図２５は、ページ移動処理２０５の一例を示すフローチャートである。
以下、ストレージコントローラ１４０で実行されるページ移動処理２０５の一例を示す。
【０１４２】
ストレージコントローラ１４０は、スケジュール情報テーブル３０７に基づいて、移動元のパリティグループ４３０の移動対象のページに格納されているデータを、移動先のパリティグループ４３０の所定のページへ移動させる。この処理を「ページ移動」という。
【０１４３】
ストレージコントローラ１４０は、移動種別１６０２が「流出」のパリティグループ４３０の場合、ページライト値１３０２が下限の移動閾値１６０３よりも大きいページを移動対象としても良い。ストレージコントローラ１４０は、移動種別１６０２が「流入」のパリティグループ４３０の場合、ページライト値１３０２が上限の移動閾値１６０３よりも小さいページを移動対象としても良い。
【０１４４】
ストレージコントローラ１４０は、スケジュール情報テーブル３０７を参照し、移動元に未処理のページが残っているか否かを判定する（Ｓ９０１）。つまり、「移動予定ページ数１６０５＜移動済みページ数１６０６」のレコード１６００が存在するか否かを判定する。
【０１４５】
移動元に未処理のページが残っていない場合（Ｓ９０１：ＮＯ）、ストレージコントローラ１４０は、当該処理を終了する（終了）。
【０１４６】
移動元に未処理のページが残っている場合（Ｓ９０１：ＹＥＳ）、ストレージコントローラ１４０は、移動対象のページを選択する（Ｓ９０２）。移動対象のページは、１つずつ選択されても良いし、複数まとめて選択されても良い。
【０１４７】
次に、ストレージコントローラ１４０は、未処理のページを有する移動先パリティグループ４３０を１つ選択し、その移動先パリティグループ４３０の未使用ページを、データの移動先として確保する（Ｓ９０３）。
ストレージコントローラ１４０は、論理−物理アドレス変換テーブル３０２等を参照して、移動元ページに格納されているデータをリードしてキャッシュメモリ１４４に格納する（Ｓ９０４）。
ストレージコントローラ１４０は、論理−物理アドレス変換テーブル３０２等を参照して、先ほどキャッシュメモリ１４３に格納したデータを、移動先パリティグループ４３０に確保した移動先のページにライトする（Ｓ９０５）。
ストレージコントローラ１４０は、そのページ移動を仮想−論理アドレス変換テーブル３０１に反映し（Ｓ９０６）、ステップＳ９０１に戻る。
【０１４８】
以上の処理により、回避要求を満たし得るようにパリティグループ４３０間でデータを移動させることができる。
【０１４９】
（第２の実施形態）
第１の実施形態は、或る回避要求を満たすためのバランス処理を実行した場合に優先度の高い先の回避要求を満たさなくなる場合、その或る回避要求を満たすためのバランス処理を実行しないという判定をする。
【０１５０】
第２の実施形態は、或る回避要求を満たすためのバランス処理を実行した場合に優先度の高い先の回避要求を満たさなくなる場合であっても、所定の条件を満たす場合は、その或る回避要求を満たすためのバランス処理を実行する。以下、第２の実施形態に係るストレージシステムについて説明する。なお、ストレージシステムのハードウェア構成は、図１で説明した通りである。
【０１５１】
図２６は、ストレージコントローラ１４０で管理される情報を示すブロック図である。
【０１５２】
ストレージコントローラ１４０は、仮想−論理アドレス変換テーブル３０１と、論理−物理アドレス変換テーブル３０２と、回避要求情報テーブル３０３と、ページモニタ情報テーブル３０４と、グループモニタ情報テーブル３０５と、グループ特性情報テーブル３０６と、スケジュール情報テーブル３０７と、バランス情報テーブル３０８と、相対指標情報テーブル３０９とを保持する。
【０１５３】
仮想−論理アドレス変換テーブル３０１と、論理−物理アドレス変換テーブル３０２と、回避要求情報テーブル３０３と、ページモニタ情報テーブル３０４と、グループモニタ情報テーブル３０５と、グループ特性情報テーブル３０６と、スケジュール情報テーブル３０７と、バランス情報テーブル３０８とについては、図５で説明した通りである。
【０１５４】
図２７は、相対指標情報テーブル３０９の構成例を示す。
相対指標情報テーブル３０９は、今回の回避要求を満たすためのバランス処理を実行すべきか否かの判定に用いられる。相対指標情報テーブル３０９は、今回の回避要求（例えばＩ／Ｏ負荷のバランス化）を満たすためのバランス処理を実行した場合の結果が、前回の回避要求（例えばライトバランス化）を満たすためのバランス処理の結果に対して収束する方向であるか否かを判断するための情報を有する。
【０１５５】
相対指標情報テーブル３０９は、１以上の相対指標情報２２００をレコード２２００として管理する。相対指標情報２２００は、項目として、グループ番号２２０１と、確認フラグと、今回相対指標値２２０３と、前回相対指標値２２０４とを有する。
グループ番号２２０１は、上記で説明したグループ番号５０５と同じである。
【０１５６】
確認フラグ２２０２には、グループ番号２２０１の示すパリティグループ４３０について、今回の回避要求を満たすためのバランス処理の実行判定を行う必要があるか否かを示すフラグが格納される。つまり、確認フラグ２２００には、グループ番号２２０１の示すレコード２２００に対して、その実行判定を行う必要があるか否かを示すフラグが格納される。例えば、その実行判定を行う必要があるレコード２２００の確認フラグ２２０２には、「要」が格納され、その実行判定を行う必要がないレコード２２００の確認フラグ２２０２には、「否」が格納される。
【０１５７】
今回相対指標値２２０３には、今回の回避要求を満たすためのスケジュール処理で算出された相対指標値が格納される。
前回相対指標値２２０４には、前回の回避要求を満たすためのスケジュール処理で算出された相対指標値が格納される。つまり、今回相対指標値２２０３は、次回のスケジュール処理で前回相対指標値２２０４となる。
【０１５８】
相対指標値は、バランス情報テーブル３０８における計画指標１００３の計画値同士の比として算出されても良い。例えば、相対指標値は、パリティグループ４３０毎に「相対指標値＝（計画Ｉ／Ｏ値１０１４）／（計画ライト値１０１３）」として算出されても良い。
【０１５９】
図２８は、ストレージコントローラ１４０で実行される処理を示すブロック図である。
ストレージコントローラ１４０は、ホストリード処理２０１と、ホストライト処理２０２と、バランス処理２０３−２と、スケジュール処理２０４と、ページ移動処理２０５と、実行結果表示処理２０６とを実行し得る。
ホストリード処理２０１と、ホストライト処理２０２と、スケジュール処理２０４と、ページ移動処理２０５とについては、図１５で説明した通りである。
【０１６０】
バランス処理２０３−２は、今回の回避要求を満たすためのバランス処理を実行した場合に優先度の高い前回の回避要求を満たさなくなる場合であっても、所定の条件を満たす場合は、今回の回避要求を満たすためのバランス処理を実行すると判定する。
バランス処理２０３−２は、「今回相対指標値２２０３＜前回相対指標値２２０４」の場合に、今回の回避要求を満たすためのバランス処理を実行すると判定しても良い。また、バランス処理２０３−２は、「（今回相対指標値２２０３＋α）＜前回相対指標値２２０４」（αは所定の正数）の場合に、今回の回避要求を満たすためのバランス処理を実行すると判定しても良い。つまり、バランス処理２０３−２は、今回相対指標値２２０３が、前回相対指標値２２０４よりも十分小さくなる場合（十分収束する場合）に、今回の回避要求を満たすためのバランス処理を実行すると判定しても良い。
【０１６１】
バランス処理２０３−２は、確認フラグ２２０２が「要」である全てのレコード２２００が「今回相対指標値２２０３＜前回相対指標値２２０４」の場合に、今回の回避要求を満たすためのバランス処理を実行すると判定しても良い。
【０１６２】
バランス処理２０３−２は、確認フラグ２２０２が「要」であり、且つ「今回相対指標値２２０３＜前回相対指標値２２０４」のパリティグループ４３０に対してのみ、今回の回避要求を満たすためのバランス処理を実行すると判定しても良い。
バランス処理２０３−２は、第１の実施形態と同様、管理サーバ１３０からの指示によって実行されても良いし、ストレージコントローラ１４０によって定期的に実行されても良い。
【０１６３】
図２９は、バランス処理２０３−２の一例を示すフローチャートである。
以下、ストレージコントローラ１４０で実行されるバランス処理２０３−２の一例を示す。
【０１６４】
ストレージコントローラ１４０は、実行状況９０３が「未完了」且つ優先度９０２の高い回避要求を今回の処理の対象として選択する（Ｓ１００１）。
ストレージコントローラ１４０は、今回の回避要求を満たすためのスケジュール情報テーブル３０７を生成する（Ｓ１００２）。
【０１６５】
ストレージコントローラ１４０は、相対指標情報テーブル３０９及びスケジュール情報テーブル３０７を参照し、確認フラグ２２０２が「要」であり、且つページ移動を要するパリティグループ４３０が存在するか否かを判定する（Ｓ１００３）。
【０１６６】
ステップＳ１００３の判定結果が否定的である場合（Ｓ１００３：ＮＯ）、ストレージコントローラ１４０は、今回の回避要求の実行状況９０３を「完了」に変更し（Ｓ１００７）、ステップＳ１００８に進む。
【０１６７】
ステップＳ１００３の判定結果が肯定的である場合（Ｓ１００３：ＹＥＳ）、ストレージコントローラ１４０は、次の処理に進む。
次に、ストレージコントローラ１４０は、今回相対指標値２２０３を算出し、「（今回相対指標値２２０３）＜（前回相対指標値２２０４）」であるか否かを判定する（Ｓ１００４）。
【０１６８】
「今回相対指標値２２０３≧前回相対指標値２２０４」である場合（Ｓ１００４：ＮＯ）、ストレージコントローラ１４０は、当該処理を終了する（終了）。今回の回避要求を満たすためのバランス処理を実行しても収束しない可能性があるからである。
【０１６９】
「今回相対指標値２２０３＜前回相対指標値２２０４」である場合（Ｓ１００４：ＹＥＳ）、ストレージコントローラ１４０は、今回の回避要求を満たすためのバランス処理を実行する（Ｓ１００５）。このバランス処理において、パリティグループ４３０間でページ移動が実行される。
そして、ストレージコントローラ１４０は、全ての回避要求の実行状況９０３を「未完了」に変更し（Ｓ１００６）、ステップＳ１００８に進む。つまり、優先度９０２の最も高い回避要求から再度バランス処理を行う。
【０１７０】
ステップＳ１００８においてストレージコントローラ１４０は、実行状況９０３が「未完了」の回避要求が存在するか否かを判定し（Ｓ１００８）、「未完了」の回避要求が存在する場合（Ｓ１００８：ＹＥＳ）、ステップＳ１００１に戻り、「未完了」の回避要求が存在しない場合（Ｓ１００８：ＮＯ）、当該処理を終了する（終了）。
【０１７１】
以上の処理により、相対指標値が収束するという条件が満たされる場合、今回の回避要求を満たすためのバランス処理が実行される。
【０１７２】
図３０は、実行結果表示処理２０６によって生成される画面の一例を示す模式図である。
実行結果表示処理２０６は、バランス処理の実行の状況及び結果等を示す画面（以下「実行結果画面」という）２４０１を生成する。実行結果表示処理２０６は、管理サーバ１１０からの要求に応じて実行結果画面２４０１を生成しても良い。実行結果表示処理２０６は、プール４２０毎に実行結果画面２４０１を生成しても良い。
【０１７３】
実行結果画面２４０１には、例えば、実行状況２４０４と実行結果２４０５とが表示される。
実行状況２４０４には、プール４２０について、回避要求を満たすためのバランス処理が全て完了したか否かを示す情報が表示される。例えば、実行状況２４０４には、回避要求を満たすためのバランス処理が全て完了した場合には「完了」が、回避要求を満たすためのバランス処理が残っている場合には「未完了」が表示される。
【０１７４】
実行結果２４０５には、それぞれの回避要求を満たすためのバランス処理が完了したか否かがを示す情報が表示される。例えば、完了した回避要求に対しては「完了」が表示され、未完了の回避要求に対しては「未完了」が表示される。また、完了した回避要求に対しては、そのバランス処理が完了した時刻が表示されても良い。
【０１７５】
ストレージコントローラ１４０は、回避要求を満たすためのバランス処理が全て完了したタイミング及び／又はそれぞれの回避要求を満たすためのバランス処理が完了したタイミングで、ホスト１００及び／又は管理サーバ１１０へ、所定のアラートを通知しても良い。
【０１７６】
図３１は、実行結果表示処理２０６の一例を示すフローチャートである。
以下、ストレージコントローラ１４０で実行される実行結果表示処理２０６の一例を示す。
【０１７７】
ストレージコントローラ１４０は、管理サーバ１１０から、バランス処理に関する実行情報の要求を受信する（Ｓ１１０１）。
ストレージコントローラ１４０は、回避要求情報テーブル３０３から、各回避要求に対する最新の実行状況９０３及び完了時刻９０４等を含む実行情報９００を取得する（Ｓ１１０２）。
ストレージコントローラ１４０は、その取得した実行情報９００を管理サーバ１１０へ送信し（Ｓ１１０３）、当該処理を終了する（終了）。
【０１７８】
以上の処理により、実行結果画面２４０１が管理サーバ１１０に表示される。
【０１７９】
上述した実施形態は、本発明の説明のための例示であり、本発明の実施形態にのみ限定する趣旨ではない。当業者は、本発明の要旨を逸脱することなしに、他の様々な態様で本発明を実施することができる。
【０１８０】
例えば、本発明は、複数のティアで構成されるプールにも適用できる。各ティアは、同等の性能（及び性質）を有する複数のパリティグループに基づく複数のページで構成される。複数のティアは、例えば、複数のＳＳＤグループに基づくティアと、複数のＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）グループに基づくティアと、複数のＳＡＴＡ（Ｓｅｒｉａｌ  ＡＴＡ）グループに基づくティアとを含んでよい。ＳＳＤグループは、複数のＳＳＤで構成されたパリティグループであり、ＳＡＳグループは、複数のＳＡＳ−ＨＤＤで構成されたパリティグループであり、ＳＡＴＡグループは、複数のＳＡＴＡ−ＨＤＤで構成されたパリティグループである。複数のティアのうちの１以上のティアの各々について、複数の回避要求が関連付けられている。回避要求が関連付けられているティアについて、異なるパリティグループ間でデータ移動が行われることで、そのティアに関連付けられている複数の回避要求のうちの２以上の回避要求を並行して満たすことができる。なお、複数のティアには異なる回避要求セット（複数の回避要求の組合せ）が関連付けられて良い。例えば、ＳＳＤのようにライト回数又は消去回数に限界値が設けられている記憶デバイスに基づくティアについては、少なくとも寿命回避要求が関連付けられ、そのような限界値が設けられていないティアについては、少なくとも寿命回避要求が関連付けられなくても良い。
【符号の説明】
【０１８１】
１２０…ストレージシステム  １４０…ストレージコントローラ  １５０…記憶デバイス
【図１】
0006017032.tif 000002
【図２】
0006017032.tif 000003
【図３】
0006017032.tif 000004
【図４】
0006017032.tif 000005
【図５】
0006017032.tif 000006
【図６】
0006017032.tif 000007
【図７】
0006017032.tif 000008
【図８】
0006017032.tif 000009
【図９】
0006017032.tif 000010
【図１０】
0006017032.tif 000011
【図１１】
0006017032.tif 000012
【図１２】
0006017032.tif 000013
【図１３】
0006017032.tif 000014
【図１４】
0006017032.tif 000015
【図１５】
0006017032.tif 000016
【図１６】
0006017032.tif 000017
【図１７】
0006017032.tif 000018
【図１８】
0006017032.tif 000019
【図１９】
0006017032.tif 000020
【図２０】
0006017032.tif 000021
【図２１】
0006017032.tif 000022
【図２２】
0006017032.tif 000023
【図２３】
0006017032.tif 000024
【図２４】
0006017032.tif 000025
【図２５】
0006017032.tif 000026
【図２６】
0006017032.tif 000027
【図２７】
0006017032.tif 000028
【図２８】
0006017032.tif 000029
【図２９】
0006017032.tif 000030
【図３０】
0006017032.tif 000031
【図３１】
0006017032.tif 000032