(57)【特許請求の範囲】
【請求項１】
それぞれが、不揮発メモリと、複数種類のリソースを含む複数のリソースとを有する、１以上の不揮発メモリデバイスと、
前記１以上の不揮発メモリデバイスに接続された１以上のプロセッサであるプロセッサ部と
を有し、
前記１以上の不揮発メモリデバイスの各々について、前記不揮発メモリのうちの少なくとも一部が、データが書き込まれる記憶領域であるユーザ領域と、そのデータの更新データが書き込まれる記憶領域である更新領域とで構成されており、
前記プロセッサ部は、前記１以上の不揮発メモリデバイスの１以上のリソース使用率のうちの少なくとも１つに基づき、前記１以上の不揮発メモリデバイスの各々について、ユーザ領域の容量であるユーザ容量を変更する、
ストレージシステム。
【請求項２】
前記１以上の不揮発メモリデバイスの各々は、
ライトコマンドに応答してそのライトコマンドに従うライト対象データをその不揮発メモリデバイスの不揮発メモリに書き込む処理であるライト処理と、
前記ライト処理とは非同期に行われる処理である非同期処理と
を実行するようになっており、
前記１以上の不揮発メモリデバイスの各々について、ユーザ容量の変更は、更に、前記１以上の不揮発メモリデバイスの各々についての非同期処理性能に基づく、
請求項１記載のストレージシステム。
【請求項３】
前記１以上の不揮発メモリデバイスの少なくとも１つについて、その不揮発メモリデバイスと前記プロセッサ部とのうちのいずれかがが、その不揮発メモリデバイスのリソース使用率と、その不揮発メモリデバイスの非同期処理性能とに基づいて、その不揮発メモリデバイスのユーザ容量を拡張可、縮小可及び変更不可のいずれであるかの判定である拡張／縮小可否判定を実行し、
前記１以上の不揮発メモリデバイスの各々について、ユーザ容量の変更は、前記１以上の不揮発メモリデバイスの少なくとも１つについての拡張／縮小判定の結果に基づいている、
請求項２記載のストレージシステム。
【請求項４】
前記１以上の不揮発メモリデバイスの少なくとも１つについて、
その不揮発メモリデバイスのリソース使用率が第１の使用率未満、且つ、その不揮発メモリデバイスの非同期処理性能が第１の処理性能未満の場合、拡張／縮小判定の結果は、拡張可であり、
その不揮発メモリデバイスのリソース使用率が第２の使用率以上、且つ、その不揮発メモリデバイスの非同期処理性能が第２の処理性能以上の場合、拡張／縮小判定の結果は、縮小可であり、
前記第２の使用率は、前記第１の使用率以上であり、
前記第２の処理性能は、前記第１の処理性能以上である、
請求項３記載のストレージシステム。
【請求項５】
前記１以上の不揮発メモリデバイスの少なくとも１つについて、前記第１及び前記第２の処理性能の各々は、前記ライト処理の性能が高いことよりも前記ユーザ容量が大きいことを優先することである容量優先というポリシーが採用されている場合、前記ユーザ容量が大きいことよりも前記ライト処理の性能が高いことを優先することである性能優先というポリシーが採用されている場合に比して、高い、
請求項４記載のストレージシステム。
【請求項６】
前記１以上の不揮発メモリデバイスは、パリティグループを構成する複数の不揮発メモリデバイスであり、
前記複数の不揮発メモリデバイスの各々について、ユーザ容量の変更は、前記複数の不揮発メモリデバイスの拡張／縮小判定の結果が同じ場合に実行される、
請求項３記載のストレージシステム。
【請求項７】
前記１以上の不揮発メモリデバイスの少なくとも１つについて、その不揮発メモリデバイスのユーザ容量のうちの空き容量が所定の容量未満になった、又は、その不揮発メモリデバイスのライト処理の性能が所定の性能未満になった場合、その不揮発メモリデバイスと前記プロセッサ部とのうちのいずれかがが、前記拡張／縮小可否判定を実行する、
請求項３記載のストレージシステム。
【請求項８】
前記１以上の不揮発メモリデバイスの各々について、ユーザ容量の変更のために参酌されるリソース使用率は、その不揮発メモリデバイスの複数のリソース使用率のうち最も高いリソース使用率である、
請求項１記載のストレージシステム。
【請求項９】
前記１以上の不揮発メモリデバイスの各々について、ユーザ容量に関する変更量は一定である、
請求項１記載のストレージシステム。
【請求項１０】
前記１以上の不揮発メモリデバイスの各々について、ユーザ容量に関する変更量は、リソース使用率と非同期処理性能とに従う最大変更量よりも所定のマージン量を削減した量である、
請求項２記載のストレージシステム。
【請求項１１】
前記１以上の不揮発メモリデバイスの各々について、ユーザ容量の変更とは、ＯＰ（Over Provisioning）率の変更であり、
前記１以上の不揮発メモリデバイスの各々について、ＯＰ率は、下記の（ａ）、（ｂ）及び（ｃ）のうちの少なくとも２つに基づいて決定された比率であって、ユーザ容量が大きい程に小さい値となる、
（ａ）ユーザ容量、
（ｂ）更新領域の容量である更新容量、及び、
（ｃ）前記ユーザ領域と前記更新領域とで構成された記憶領域の容量である物理容量、
請求項１記載のストレージシステム。
【請求項１２】
前記プロセッサ部は、前記１以上の不揮発メモリデバイスの少なくとも１つについて、リソース使用率とユーザ容量とを含む現在状況と、ユーザ容量を変更したと仮定した場合のリソース使用率とユーザ容量とを含む予測状況とを表す情報の表示を実行し、
前記プロセッサ部は、その表示に対して変更の指示を受けた場合に、前記１以上の不揮発メモリデバイスの各々について、ユーザ容量を変更する、
請求項１記載のストレージシステム。
【請求項１３】
それぞれが、不揮発メモリと、複数種類のリソースを含む複数のリソースとを有する、１以上の不揮発メモリデバイスの１以上のリソース使用率を取得し、
前記１以上の不揮発メモリデバイスの各々について、前記不揮発メモリのうちの少なくとも一部が、データが書き込まれる記憶領域であるユーザ領域と、そのデータの更新データが書き込まれる記憶領域である更新領域とで構成されており、
前記取得した１以上のリソース使用率のうちの少なくとも１つに基づき、前記１以上の不揮発メモリデバイスの各々について、ユーザ領域の容量であるユーザ容量を変更する、
記憶制御方法。
【請求項１４】
不揮発メモリと、
複数種類のリソースを含み、前記不揮発メモリに接続された複数のリソースと
を有し、
前記複数のリソースは、１以上のプロセッサを含むプロセッサ部を含み、
前記不揮発メモリのうちの少なくとも一部が、データが書き込まれる記憶領域であるユーザ領域と、そのデータの更新データが書き込まれる記憶領域である更新領域とで構成されており、
前記プロセッサ部は、前記ユーザ領域の容量であるユーザ容量を、１以上のリソース使用率のうちの少なくとも１つに基づく決定に従うユーザ容量に変更する、
不揮発メモリデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、記憶制御に関し、例えば、オーバープロビジョニングのための予備領域の容量の変更に関する。
【背景技術】
【０００２】
フラッシュメモリは、一般に、追記型、すなわち、データを書き換えるためには、そのデータを記憶している領域からデータを消去する必要がある。フラッシュメモリは、データの書換回数（言い換えれば消去回数）に上限がある。この上限を超えたフラッシュメモリは、新たにデータを書き込めなかったり、書き込まれたデータにエラーが発生する確率が高くなったりする。フラッシュメモリの書換回数がその上限に達するまでの期間を、フラッシュメモリの「寿命」という。したがって、複数のフラッシュメモリによって構成されるＦＭＰＫ（Flash Memory Package）にも寿命が存在する。【０００３】
特許文献１には、ＲＡＩＤグループの総記憶容量を使用可能容量と余剰容量の和とし、論理ボリュームへの書換頻度に応じて、余剰容量のサイズを変更する技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】WO2015/052811
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ストレージシステムの用途は様々であり、例えば、書換頻度の低い（リードがメインの）データを格納するストレージシステムは、更新領域（予備領域）を削減し、ユーザ領域（データ格納領域）を拡大することで、ビットコストを低減することが可能である。【０００６】
しかしながら、ＦＭＰＫの更新領域を必要以上に削減してしまうと、そのＦＭＰＫに書き込まれる更新データ（上書きされるデータ）の総量に依っては、非同期処理の実行頻度が高くなる。このため、ストレージシステムのＩ／Ｏ性能（Ｉ／Ｏ要求に応答してＦＭＰＫに対してＩ／Ｏを行う処理の性能）が低下してしまう（なお、非同期処理とは、更新データのようなデータをライト対象としたライトコマンドに応答してＦＭＰＫにより行われるライト処理とは非同期にＦＭＰＫにより行われる処理であって、典型的には、リクラメーション処理及びリフレッシュ処理のように、ＦＭ（フラッシュメモリ）に対するデータのライトが発生する処理である）。【０００７】
一方、ＦＭＰＫの更新領域を必要以上に増やしてしまうと、ＦＭＰＫのユーザ領域が小さくなってしまうので、書き込むことができるデータの量は少ない。【０００８】
このような課題は、ＦＭＰＫのようなフラッシュメモリデバイスに限らず、他の追記型の不揮発メモリデバイスについても、あり得る。【０００９】
本発明は、ホストＩ／Ｏ性能の維持とビットコストの低減とを両立することを目的とする。
【課題を解決するための手段】
【００１０】
ストレージシステムは、１以上の不揮発メモリデバイスと、その１以上の不揮発メモリデバイスに接続された１以上のプロセッサであるプロセッサ部とを有する。１以上の不揮発メモリデバイスの各々について、不揮発メモリのうちの少なくとも一部が、データが書き込まれる記憶領域であるユーザ領域と、そのデータの更新データが書き込まれる記憶領域である更新領域とで構成されている。プロセッサ部は、１以上の不揮発メモリデバイスの１以上のリソース使用率のうちの少なくとも１つに基づき、１以上の不揮発メモリデバイスの各々について、ユーザ領域の容量であるユーザ容量を変更する。
【発明の効果】
【００１１】
ストレージシステムの稼働中に、１以上の不揮発メモリデバイスの動作状況に最適なユーザ容量（言い換えれば、更新領域の容量である更新容量）を維持すること、結果として、ホストＩ／Ｏ性能の維持とビットコストの低減との両立を維持することが期待できる。
【図面の簡単な説明】
【００１２】
【図１】実施例１の概要を示す。
【図２】ストレージシステムの構成例を示す。
【図３】ＦＭＰＫの構成を示す。
【図４】ＦＭチップの構成を示す。
【図５】ストレージコントローラのメモリの構成を示す。
【図６】ストレージコントローラのテーブル領域に格納されるテーブルの構成を示す。
【図７】ＦＭＰＫコントローラのメモリの構成を示す。
【図８】ＦＭＰＫコントローラのテーブル領域に格納されるテーブルの構成を示す。
【図９】ライト要求に応答して行われる処理のシーケンス図である。
【図１０】ライトコマンドを受けるＦＭＰＫが行う処理のフローチャートである。
【図１１】定期処理コマンドを受けるＦＭＰＫが行う処理のフローチャートである。
【図１２】ストレージコントローラがアラートを受けたことに応答して行われる処理のシーケンス図である。
【図１３】拡張／縮小判定を含む処理のフローチャートである。
【図１４】拡張／縮小判定の詳細を示すフローチャートである。
【図１５】Ｓ１２０２に関してストレージコントローラが行う処理の詳細を示すフローチャートである。
【図１６】拡張に関してＦＭＰＫが行う処理のフローチャートである。
【図１７】縮小に関してＦＭＰＫが行う処理のフローチャートである。
【図１８】拡張／縮小判定テーブルの構成を示す。
【図１９】ライト処理の性能と非同期処理の性能との関係の一例を示す。
【図２０】設定画面の一例を示す。
【図２１】予測画面の一例を示す。
【図２２】実施例２におけるユーザ容量遷移と性能遷移との関係の一例を示す。
【発明を実施するための形態】
【００１３】
以下の説明では、「ａｂｃテーブル」の表現にて情報を説明することがあるが、情報は、テーブル以外のデータ構成で表現されていてもよい。データ構成に依存しないことを示すために「ａｂｃテーブル」のうちの少なくとも１つを「ａｂｃ情報」と呼ぶことができる。また、以下の説明において、各テーブルの構成は一例であり、１つのテーブルは、２以上のテーブルに分割されてもよいし、２以上のテーブルの全部または一部が１つのテーブルであってもよい。
【００１４】
また、以下の説明では、「インターフェース部」は、１以上のインターフェースを含む。１以上のインターフェースは、１以上の同種のインターフェースデバイス（例えば１以上のＮＩＣ（Network Interface Card））であってもよいし２以上の異種のインターフェースデバイス（例えばＮＩＣとＨＢＡ（Host Bus Adapter））であってもよい。
【００１５】
また、以下の説明では、「記憶部」は、１以上のメモリを含む。記憶部に関して少なくとも１つのメモリは、揮発性メモリでよい。記憶部は、主に、プロセッサ部による処理の際に使用される。
【００１６】
また、以下の説明では、「プロセッサ部」は、１以上のプロセッサを含む。少なくとも１つのプロセッサは、典型的には、ＣＰＵ（Central Processing Unit）のようなマイクロプロセッサである。１以上のプロセッサの各々は、シングルコアでもよいしマルチコアでもよい。プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。
【００１７】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ部によって実行されることで、定められた処理を、適宜に記憶部（例えばメモリ）及び／又はインターフェース部（例えば通信ポート）等を用いながら行うため、処理の主語がプロセッサとされてもよい。プログラムを主語として説明された処理は、プロセッサ部あるいはそのプロセッサ部を有する装置が行う処理としてもよい。また、プロセッサ部は、処理の一部又は全部を行うハードウェア回路（例えばＦＰＧＡ（Field-Programmable Gate Array）又はＡＳＩＣ（Application Specific Integrated Circuit））を含んでもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバまたは計算機が読み取り可能な記録媒体（例えば非一時的な記録媒体）であってもよい。また、以下の説明において、２以上のプログラムが１つのプログラムとして実現されてもよいし、１つのプログラムが２以上のプログラムとして実現されてもよい。
【００１８】
また、以下の説明では、「ストレージシステム」は、１以上のストレージ装置でよい。「ストレージ装置」は、記憶デバイスにデータを格納する機能を有する装置であればよい。このため、ストレージ装置は、ファイルサーバのような計算機（例えば汎用計算機）であってもよい。例えば、少なくとも１つの物理的なストレージ装置が、仮想的な計算機（例えばＶＭ（Virtual Machine））を実行してもよいし、ＳＤｘ（Software-Defined anything）を実行してもよい。ＳＤｘとしては、例えば、ＳＤＳ（Software Defined Storage）（仮想的なストレージ装置の一例）又はＳＤＤＣ（Software-defined Datacenter）を採用することができる。また、例えば、少なくとも１つのストレージ装置（計算機）は、ハイパーバイザを有していてよい。ハイパーバイザが、サーバとして動作するサーバＶＭ（Virtual Machine）と、ストレージとして動作するストレージＶＭとを生成してよい。サーバＶＭが、Ｉ／Ｏ要求を発行するホスト計算機として動作し、ストレージＶＭが、サーバＶＭからのＩ／Ｏ要求に応答してＦＭＰＫに対するＩ／Ｏを行うストレージコントローラとして動作してよい。
【００１９】
また、以下の説明では、「時刻」は、年月日時分秒の単位で表現されるが、時刻の単位は、それよりも粗くても細かくてもよいし、また異なる単位でもよい。
【実施例１】
【００２０】
図１は、実施例１の概要を示す。【００２１】
ストレージシステム１０４は、パリティグループ（以下、ＰＧ）８１０と、ＰＧ８１０に対するＩ／Ｏ（Input/Output）を制御するストレージコントローラ１１１とを有する。【００２２】
ＰＧ８１０は、複数のＦＭＰＫ（Flash Memory Package）１３１で構成されており、ＲＡＩＤ（Redundant Array of Independent (or Inexpensive) Disks）グループとも呼ばれる。【００２３】
各ＦＭＰＫ１３１は、ＦＭ（フラッシュメモリ）と、複数種類のリソース（例えばプロセッサ及びメモリ）を含んだ複数のリソースとを有する。以下、各ＦＭＰＫ１３１について、ＦＭ以外のリソースを、「ＦＭリソース」と総称する。【００２４】
各ＦＭＰＫ１３１において、ＦＭは、ユーザ領域８０１Ｕと、更新領域８０１Ｐとを有する。ユーザ領域８０１Ｕは、データ（例えば新規のファイルのデータ）が書き込まれる記憶領域である。更新領域８０１Ｐは、そのデータの更新データ（例えば、ファイルの更新データ）が書き込まれる記憶領域である。以下、各ＦＭＰＫ１３１について、ユーザ領域８０１Ｕの容量を「ユーザ容量」と呼び、更新領域８０１Ｐの容量を「更新容量」と呼ぶ。なお、ＦＭは、ユーザ領域８０１Ｕ及び更新領域８０１Ｐ以外の領域を含んでもよい。【００２５】
各ＦＭＰＫ１３１において、ユーザ容量と更新容量の合計は一定である。このため、ユーザ容量が大きくなれば、更新容量が小さくなり、ユーザ容量が小さくなれば、更新容量が大きくなる。【００２６】
ＦＭＰＫ１３１の更新領域８０１Ｐを必要以上に削減してしまうと、そのＦＭＰＫ１３１に書き込まれる更新データの総量に依っては、非同期処理の実行頻度が高くなる。このため、ストレージシステム１０４のホストＩ／Ｏ性能（ホスト計算機１０１からのＩ／Ｏ要求に応答してＦＭＰＫ１３１に対してＩ／Ｏを行う処理の性能）が低下してしまう。一方、ＦＭＰＫ１３１の更新領域８０１Ｐを必要以上に増やしてしまうと、ＦＭＰＫ１３１のユーザ領域８０１Ｕが小さくなってしまうので、書き込むことができるデータの量は少ない。【００２７】
そこで、ストレージコントローラ１１１は、ＰＧ８１０を構成する複数のＦＭＰＫ１３１の複数のＦＭリソース使用率のうちの少なくとも１つを特定し、特定したＦＭリソース使用率に基づき、その複数のＦＭＰＫ１３１の各々について、ユーザ容量を変更する。ユーザ容量の変更は、ユーザ容量を拡張する（大きくする）ことと、ユーザ容量を縮小する（小さくする）ことのいずれかである。【００２８】
本実施例では、ユーザ容量の変更は、ＯＰ（Over Provisioning）率の変更である。ＯＰ率は、ユーザ容量、更新容量及び物理容量（ユーザ容量と更新容量の合計）のうちの少なくとも２つに基づいて決定された比率であって、ユーザ容量が大きい程に小さい値となる。本実施例では、ＯＰ率の計算式として、ＯＰ率＝（更新容量）／（ユーザ容量）が採用される。このため、ユーザ容量の拡張とは、ＯＰ率を下げることであり、ユーザ容量の縮小とは、ＯＰ率を上げることである。ＯＰ率の計算式として、他の計算式、例えば、ＯＰ率＝（（物理容量）／（ユーザ容量））−１が採用されてもよい。【００２９】
ストレージシステム１０４の稼働中、ＰＧ８１０に対するＩ／Ｏの状況によって、ＰＧ８１０における各ＦＭＰＫ１３１にとって適切な更新容量は変わり得る。一方、ＰＧ８１０において、各ＦＭＰＫ１３１のＯＰ率は同一である。ＰＧユーザ領域（ＰＧ８１０における複数のＦＭＰＫ１３１がそれぞれ有する複数のユーザ領域８０１Ｕの集合）に基づく論理記憶空間の少なくとも一部が、論理ボリュームとして使用される。【００３０】
そこで、ストレージコントローラ１１１は、ＰＧ単位で、各ＦＭＰＫ１３１のＯＰ率を変更する。【００３１】
以下、本実施例を詳細に説明する。【００３２】
図２は、ストレージシステム１０４の構成を示す。なお、以下の説明では、混同を避けるため、ホスト計算機１０１からストレージシステム１０４への要求を「要求」と言い、ストレージコントローラ１１１からＦＭＰＫ１３１への要求を「コマンド」と言うことにする。【００３３】
ストレージシステム１０４に、ホスト計算機１０１と、管理計算機１０２とが接続されている。ホスト計算機１０１は、例えば、ＳＡＮ（Storage Area Network）１０３のような通信ネットワークを通じてストレージシステム１０４に接続されている。管理計算機１０２は、例えば、所定の通信線１５（又はＬＡＮ（Local Area Network）のような通信ネットワーク）を通じてストレージシステム１０４に接続されている。【００３４】
ホスト計算機１０１は、ストレージシステム１０４に対してライト要求を送信することで、ストレージシステム１０４にデータをライトする。ホスト計算機１０１は、ストレージシステム１０４に対してリード要求を送信することで、ストレージシステム１０４からデータをリードする。ホスト計算機１０１は、Ｉ／Ｏ要求（ライト要求又はリード要求）の発行元の一例でよい。Ｉ／Ｏ要求の発行元としては、例えば、上述のサーバＶＭ及びストレージＶＭを実行するストレージシステムにおいてはサーバＶＭでもよい。【００３５】
管理計算機１０２は、ユーザがストレージシステム１０４を管理及び制御ための装置である。管理計算機１０２は、キーボード及びマウスのような入力デバイスと、表示デバイスのような出力デバイスを備えてもよい。【００３６】
ストレージシステム１０４は、ストレージコントローラ１１１と、ドライブボックス１１２とを備える。ドライブボックス１１２は、複数のＦＭＰＫ１３１を備える。【００３７】
ストレージコントローラ１１１は、Ｈ−Ｉ／Ｆ（インターフェース）１２１と、プロセッサ１２３と、メモリ１２４と、Ｄ−Ｉ／Ｆ１２２、Ｍ−Ｉ／Ｆ１２５とを備え、それら要素１２１〜１２５は、データ送受信が可能な内部ネットワーク１２６で接続されている。Ｈ−Ｉ／Ｆ１２１、Ｄ−Ｉ／Ｆ１２２、Ｍ−Ｉ／Ｆ１２５が、インターフェース部の一例である。メモリ１２４が、記憶部の一例である。プロセッサ１２３が、プロセッサ部の一例である。【００３８】
Ｈ−Ｉ／Ｆ１２１は、ストレージコントローラ１１１にホスト計算機１０１を接続するためのＩ／Ｆである。Ｍ−Ｉ／Ｆ１２５は、ストレージコントローラ１１１に管理計算機１０２を接続するためのＩ／Ｆである。Ｄ−Ｉ／Ｆ１２６は、ストレージコントローラ１１１にＦＭＰＫ１３１を接続するためのＩ／Ｆである。【００３９】
プロセッサ１２３は、コンピュータプログラム（以下、プログラム）等を実行する。プロセッサがプログラムを実行することにより、ストレージシステム１０４の備える様々な機能が実現される。【００４０】
メモリ１２４は、データを記憶する。メモリ１２４は、例えば、ＤＲＡＭ（Dynamic Random Access Memory）のような揮発性半導体メモリであるが、フラッシュメモリのような不揮発性半導体メモリでもよい。メモリ１２４に記憶されたプログラム及びデータは、プロセッサ１２３、Ｈ−Ｉ／Ｆ１２１及びＤ−Ｉ／Ｆ１２２等からアクセスされる。【００４１】
図３は、ＦＭＰＫ１３１の構成を示す。【００４２】
ＦＭＰＫ１３１は、ＦＭ２２０と、ＦＭ２２０に接続されたＦＭＰＫコントローラ５０とを備える。ＦＭ２２０は、複数のＦＭ（フラッシュメモリ）チップ２０２で構成されている。【００４３】
ＦＭＰＫコントローラ５０は、プロセッサ２１４と、メモリ２１２と、ＦＭＰＫ  Ｉ／Ｆ２１１と、ＦＭチップＩ／Ｆ２１３とを有する。これらの要素２１１〜２１４は、データ送受信可能な内部ネットワーク２１５で接続されており、双方向にデータを送受信できる。なお、以下、特に、内部ネットワーク２１５にメモリ２１２を接続するバス５８を、「キャッシュバス５８」と呼ぶことにする。【００４４】
プロセッサ２１４は、プログラム等を実行する。プロセッサ２１４がプログラムを実行することにより、ＦＭＰＫ１３１の備える様々な機能が実現される。【００４５】
メモリ２１２は、データを記憶する。メモリは、例えば、ＤＲＡＭのような揮発性半導体メモリであるが、フラッシュメモリのような不揮発性半導体メモリでもよい。メモリ２１２に記憶されたプログラム及びデータは、プロセッサ２１４、ＦＭＰＫ  Ｉ／Ｆ２１１及びＦＭチップＩ／Ｆ２１３等からアクセスされる。【００４６】
ＦＭＰＫ  Ｉ／Ｆ２１１は、ＦＭＰＫ１３１をストレージコントローラ１１１に接続するためのＩ／Ｆである。ＦＭチップＩ／Ｆ２１３は、ＦＭＰＫコントローラ５０（プロセッサ）にＦＭチップ２０２を接続するためのＩ／Ｆである。なお、以下、特に、ＦＭチップＩ／Ｆ２１３にＦＭチップ２０２を接続するバス５９を、「ＦＭバス５９」と呼ぶことにする。【００４７】
上述した要素２１１〜２１５、５８及び５９が、それぞれ、複数のＦＭリソースである。【００４８】
図４は、ＦＭチップ２０２の構成を示す。【００４９】
ＦＭチップ２０２は、例えばＮＡＮＤ型のＦＭチップであり、ＦＭコントローラ３０１と、複数のブロック（物理ブロック）３０２とを有する。そして、ブロック３０２は、複数のページ（物理ページ）３０３で構成されている。ＦＭチップ２０２は、その特性上、ページ単位でデータのリードおよびライトを行う必要がある。そして、ＦＭチップ２０２は、その特性上、ブロック単位でデータの消去を行う必要がある。【００５０】
また、ＦＭチップ２０２は、追記型、すなわち、ライト済みのページ３０３に対してデータをオーバーライトすることができない。従って、ＦＭＰＫコントローラ５０は、ライト済みページ３０３の物理アドレスが割り当てられている論理アドレスをライト先としたライトコマンドを受信した場合、そのライトコマンドに従う更新データ（オーバーライトのデータ）を未使用のページ３０３にライトし、そのページ３０３の物理アドレスを、ライト済みページ３０３の物理アドレスに代えて、ライト先の論理アドレスに割り当てる。【００５１】
ＦＭＰＫ１３１の上位システムは、本実施例ではストレージコントローラ１１１であるが、限定されないでよい。すなわち、上位システムは、ストレージシステムにおいて、ＦＭＰＫ１３１が外部付けされた計算機であってもよいし、ＦＭＰＫ１３１を内蔵した計算機内のプロセッサであってもよい。【００５２】
ＦＭＰＫコントローラ５０は、論理記憶空間（例えば、連続した論理アドレス空間）を上位システムに提供する。論理記憶空間は、複数の論理領域に区切られてよい。例えば、論理記憶空間が、複数の論理ブロックで構成され、各論理ブロックが、複数の論理ページで構成されていてもよい。論理ブロック又は論理ページが論理領域の一例でよい。論理領域は、論理アドレス範囲（例えば、連続した１以上の論理アドレス）と言い換えられてもよい。ＦＭＰＫコントローラ５０は、論理アドレスと物理アドレスの対応関係を管理している。ＦＭＰＫコントローラ５０は、上位システムからのＩ／Ｏコマンドで指定されている論理アドレスに対応した物理アドレスが属する物理領域を特定し、特定した物理領域に対してＩ／Ｏを行う。論理アドレスは、例えば、ＬＢＡ（Logical Block Address）であるが、ＬＢＡに代えて又は加えて、論理領域ＩＤ（例えば論理ページ番号）でよい。物理アドレスは、例えば、ＰＢＡ（Physical Block Address）であるが、ＰＢＡに代えて又は加えて、物理領域ＩＤ（例えば物理ページ番号）でよい。ユーザ領域８０１Ｕ内のページ３０３が割り当てられている論理領域がライト先の場合、ライト先論理領域に、割当て済のページ３０３に代えて新たに更新領域８０１Ｐ内の空きページ３０３が割り当てられ、新たに割り当てられたページ３０３に更新データが書き込まれる。各論理領域について、最近割り当てられたページ３０３に書き込まれているデータ（つまり最新のデータ）は「有効データ」であり、有効データが書き込まれているページ３０３は「有効ページ」であり、過去に割り当てられていたページ３０３に格納されているデータは「無効データ」であり、無効データが書き込まれているページ３０３は「無効ページ」である。また、有効ページでも無効ページでも無く新たにデータを格納可能なページが、「空きページ」である。【００５３】
また、ＦＭ２２０に代えて、ＦＭ以外の不揮発メモリ、例えばＰＲＡＭ（Phase-change Random Access Memory）、ＭＲＡＭ（Magnetoresistive Random Access Memory）、ＲｅＲＡＭ（Resistive Random Access Memory）又はＦｅＲＡＭ（Ferroelectric Random Access Memory）が採用されてもよい。【００５４】
図５は、ストレージコントローラ１１１のメモリ１２４の構成を示す。【００５５】
メモリ１２４は、プログラム領域４０１、テーブル領域４０２及びデータキャッシュ領域４０３を有する。【００５６】
プログラム領域４０１は、プログラム、例えば、ストレージコントローラ１１１の動作を制御するストレージ制御プログラム４１１を格納する。プログラムは、プロセッサ１２３により実行される。例えば、ストレージ制御プログラム４１１は、ホスト計算機１０１からのライト要求に従って、ＦＭＰＫ１３１にデータをライトする処理を実行する。また、例えば、ストレージ制御プログラム４１１は、ホスト計算機１０１からのリード要求に従って、ＦＭＰＫ１３１からデータをリードして、ホスト計算機１０１に返す処理を実行する。【００５７】
テーブル領域４０２は、テーブル、例えば、ドライブ管理テーブル４２１と、プール管理テーブル４２２と、仮想ボリューム管理テーブル４２３と、ＰＧ管理テーブル４２４と、ドライブ個別管理テーブル４２５と、拡張／縮小判定テーブル４２６とを格納する。これらのテーブルについては後に詳述する。【００５８】
データキャッシュ領域４０３は、ユーザデータ４３１を一時的に格納する。ユーザデータ４３１は、Ｉ／Ｏ要求に従うデータ（具体的には、ライト対象又はリード対象のデータ）である。【００５９】
図６は、ストレージコントローラ１１１のテーブル領域４０２に格納されるテーブルの構成を示す。図６に示すように、拡張／縮小判定テーブル４２６の構成は、図１８に示す。【００６０】
ドライブ管理テーブル４２１は、ドライブ（本実施例ではＦＭＰＫ１３１）に関する情報を保持する。ドライブ管理テーブル４２１は、ドライブ毎にエントリを有する。各エントリは、ドライブ番号５０１、ドライブ種別５０２及び物理容量５０３といった情報を保持する。ドライブ番号５０１は、ドライブの識別番号である。ドライブ種別５０２は、ドライブの種別を示す。物理容量５０３は、ドライブの物理容量を示す。【００６１】
プール管理テーブル４２２は、プールに関する情報を保持する。プール管理テーブル４２２は、プール毎にエントリを有する。各エントリは、プール番号５１１及びＰＧ番号５１２といった情報を保持する。プール番号５１１は、プールの識別番号である。ＰＧ番号５１２は、プールにおけるプールボリュームを提供するＰＧの識別番号である。なお、本実施例では、プールは、ＰＧ８１０のＰＧユーザ領域に基づく論理ボリュームで構成された記憶空間である。プールを構成する論理ボリュームを「プールボリューム」と呼ぶ。プール（プールボリューム）は、複数のセグメント（以下、物理セグメント）に分割されている。仮想ボリューム（例えば、Thin Provisioningに従う仮想的な論理ボリューム）におけるライト先仮想セグメントに、その仮想ボリュームが関連付けられているプールから、物理セグメントが割り当てられる。【００６２】
ＰＧ管理テーブル４２４は、ＰＧに関する情報を保持する。ＰＧ管理テーブル４２４は、ＰＧ毎にエントリを有する。各エントリは、ＰＧ番号５２１、ＲＡＩＤレベル５２２、ＲＡＩＤ構成５２３、ドライブリスト５２４、ポリシー５２５、ＯＰ率５２６及びＰＧ容量５２７といった情報を保持する。ＰＧ番号５２１は、ＰＧの識別番号である。ＲＡＩＤレベル５２２は、ＲＡＩＤレベルを示す。ＲＡＩＤ構成５２３は、ＲＡＩＤ構成を示す。ＲＡＩＤレベル及びＲＡＩＤ構成によりＲＡＩＤ種別が定義されている。ドライブリスト５２４は、ＰＧを構成するドライブの識別番号のリストである。ポリシー５２５は、ＰＧに関連付けられているポリシーを示す。ポリシーとしては、容量優先と性能優先とがある。各ポリシーについては後述する。ＯＰ率５２６は、ＰＧについて採用されているＯＰ率を示す。ＰＧ容量５２７は、ＰＧを構成する複数のＦＭＰＫ１３１にそれぞれ対応した複数の物理容量の合計である。ＰＧ容量５２７とＯＰ率５２６から、ＰＧユーザ領域の容量が算出される。【００６３】
ドライブ個別管理テーブル４２５は、ドライブ毎に存在する。ドライブ個別管理テーブル４２５は、ドライブ領域毎に、ドライブ番号５３１、ＬＢＡ（Logical Block Address）５３２及びレングス５３３といった情報を保持する。ドライブ番号５３１は、ドライブ領域を有するドライブの識別番号である。ＬＢＡ５３２は、ドライブ領域の先頭のＬＢＡを示す。レングス５３３は、ドライブ領域のサイズを示す。【００６４】
仮想ボリューム管理テーブル４２３は、仮想ボリュームに関する情報を保持する。仮想ボリューム管理テーブル４２３は、仮想ボリューム毎にエントリを有する。各エントリは、ボリューム番号５４１、プール番号５４２及び容量５４３といった情報を保持する。ボリューム番号５４１は、仮想ボリュームの識別番号である。プール番号５４２は、仮想ボリュームに関連付けられているプールの識別番号である。容量５４３は、仮想ボリュームの容量を示す。【００６５】
拡張／縮小判定テーブル４２６は、図１８に示すように、ＦＭリソース使用率と、非同期処理性能と、後述の拡張／縮小可否判定の結果との関係を示す。つまり、本実施例では、ＯＰ率の変更は、ＦＭリソース使用率の他に、非同期処理性能に基づく。ＯＰ率（更新容量の大きさ）は、非同期処理の発生頻度に影響する。このため、ＯＰ率の変更を、ＦＭリソース使用率の他に、非同期処理性能を基に、行うことで、ストレージシステム１０４の稼働中に最適なＯＰ率を維持することが一層期待できる。なお、ライト処理（ライトコマンドに応答して行われる処理）の性能と、非同期処理の性能との関係の一例は、図１９に示す通りである。すなわち、ＦＭＰＫ１３１の性能に余裕があれば（ライト処理性能と非同期処理性能の合計と、ＦＭＰＫの限界性能との差が十分にあれば）、非同期処理の性能（負荷）が高くなってもライト処理の性能は下がらない。しかし、ＦＭＰＫ１３１の性能に余裕が無ければ、非同期処理の性能が高くなると、ライト処理の性能が下がる。【００６６】
ＦＭリソース使用率範囲（以下、使用率範囲）として、Ｎ個の使用率範囲があり、非同期処理性能範囲（以下、性能範囲）として、Ｍ個の性能範囲がある。Ｎ及びＭは、いずれも２以上の整数であればよく、且つ、ＮとＭは同じ値でも異なる値でもよい。本実施例では、Ｎ＝３及びＭ＝３である。【００６７】
使用率範囲として、第１の使用率範囲（使用率Ｘ未満（Ｘは例えば１０％））、第２の使用率範囲（使用率Ｘ以上使用率Ｙ未満（Ｙは例えば５０％））及び第３の使用率範囲（使用率Ｙ以上）がある。使用率範囲は、複数種類のＦＭリソース使用率（メモリ７２３〜キャッシュ帯域７２７）のうち最も高い（最も悪い）ＦＭリソース使用率と比較される。最も高い（最も悪い）ＦＭリソース使用率が、ＦＭＰＫ１３１においてネックと考えられ、そのようなＦＭリソース使用率が参酌されるので、ＰＧ単位のＯＰ率を最適値にする可能性を高めることができる。【００６８】
性能範囲として、第１の性能範囲（性能Ａ未満）、第２の性能範囲（性能Ａ以上性能Ｂ未満）及び第３の性能範囲（性能Ｂ以上）がある。なお、図示のＨ、Ｍ及びＬは、高、中及び低をそれぞれ意味する。【００６９】
図１８によれば、ＦＭリソース使用率が低く、且つ、非同期処理性能が低いと、拡張／縮小可否判定の結果は、「拡張可」となる傾向である。すなわち、ＦＭリソース使用率及び非同期処理性能のいずれについても余裕がある場合、ユーザ領域が大きくなれば、ビットコストの一層の低減が期待され、且つ、非同期処理の発生頻度が高くなっても差し支えないことが期待される。一方、ＦＭリソース使用率が高く、且つ、非同期処理性能が低いと、拡張／縮小可否判定の結果は、「縮小可」となる傾向である。すなわち、ＦＭリソース使用率及び非同期処理性能のいずれについても余裕が無い場合、更新領域が大きくなれば、非同期処理の発生頻度の低下が期待される。具体的には、ＦＭリソース使用率が使用率Ｘ（第１の使用率の一例）未満、且つ、非同期処理性能が性能Ａ（第１の処理性能の一例）未満の場合、拡張／縮小判定の結果は、拡張可である。一方、ＦＭリソース使用率が使用率Ｙ（第２の使用率の一例）以上、且つ、非同期処理性能が性能Ｂ（第２の処理性能の一例）以上の場合、拡張／縮小判定の結果は、縮小可である。【００７０】
なお、判定結果として、「拡張可」及び「縮小可」の他に、「不可」（拡張及び縮小のいずれも不可）がある。【００７１】
また、少なくとも１つの性能範囲の境界値、すなわち、性能Ａ及びＢのうちの少なくとも１つは、ポリシー、すなわち、容量優先と性能優先とのいずれが採用されているかによって異なる。「容量優先」とは、ライト処理の性能が高いことよりもユーザ容量が大きいことを優先することである。「性能優先」とは、ユーザ容量が大きいことよりもライト処理の性能が高いことを優先することである。性能Ａ及びＢのうちの少なくとも１つは、容量優先が採用されている場合、性能優先が採用されている場合に比して高い。このため、非同期処理性能が同じであっても、ポリシーによって、拡張／縮小可否判定の結果が異なり得る。例えば、非同期処理性能が30KIOPSの場合、性能優先では、縮退可が得られ（すなわち、非同期処理性能を下げることでライト処理性能の向上が優先され）、容量優先では、拡張可が得られる（すなわち、非同期処理性能が高くなってもユーザ容量が大きいことが優先される）。【００７２】
図７は、ＦＭＰＫコントローラ５０のメモリ２１２の構成を示す。【００７３】
メモリ２１２は、プログラム領域６０１、テーブル領域６０２及びデータキャッシュ領域６０３を有する。【００７４】
プログラム領域６０１は、プログラム、例えば、ＦＭＰＫコントローラ５０の動作を制御するＦＭＰＫ制御プログラム６１１を格納する。プログラムは、プロセッサ２１４により実行される。例えば、ＦＭＰＫ制御プログラム６１１は、ストレージコントローラ１１１からのライトコマンドに応答して、論理物理変換テーブル６２１を基にライト先の物理ページを特定し、特定したライト先物理ページを有するＦＭチップ２０２にデータをライトする。また、例えば、ＦＭＰＫ制御プログラム６１１は、ストレージコントローラ１１１からのリードコマンドに応答して、論理物理変換テーブル６２１を基にリード元の物理ページを特定し、特定したリード元物理ページを有するＦＭチップ２０２からデータをリードする。【００７５】
テーブル領域６０２は、テーブル、例えば、論理物理変換テーブル６２１、ＦＭリソース管理テーブル６２２、ページ管理テーブル６２３、ＯＰ率管理テーブル６２４及び非同期性能管理テーブル６２５を格納する。これらのテーブルについては後に詳述する。【００７６】
データキャッシュ領域６０３は、ユーザデータ６３１を一時的に格納する。ユーザデータ６３１は、ストレージコントローラ１１１からのＩ／Ｏコマンドに従うデータ（ライト対象又はリード対象のデータ）である。【００７７】
図８は、ＦＭＰＫコントローラ５０のテーブル領域６０２に格納されるテーブルの構成を示す。なお、図８の説明では、図８に示すテーブル領域６０２を有するＦＭＰＫ１３１を「対象ＦＭＰＫ１３１」と呼ぶことにする。【００７８】
ＯＰ率管理テーブル６２４は、対象ＦＭＰＫ１３１のＯＰ率に関する情報、具体的には、ＯＰ率７０１及びユーザ容量７０２を保持する。ＯＰ率７０１は、決定されたＯＰ率を示す。ユーザ容量７０２は、対象ＦＭＰＫ１３１のユーザ容量を示す。ユーザ容量７０２は、対象ＦＭＰＫ１３１の物理容量及びＯＰ率に基づき算出される。【００７９】
ＦＭリソース管理テーブル６２２は、対象ＦＭＰＫ１３１のＦＭリソース使用率に関する情報を保持する。ＦＭリソース管理テーブル６２２は、期間毎にエントリを有する。各エントリは、ＩＤ７２１、時刻７２２、メモリ７２３、ＣＰＵ７２４、バス帯域７２５、キャッシュ使用率７２６及びキャッシュ帯域７２７といった情報を保持する。ＩＤ７２１は、期間のＩＤである。時刻７２２は、期間の開始時刻を表す。メモリ７２３は、期間において特定されたメモリ使用率（メモリ２１２の使用率）を示す。ＣＰＵ７２４は、期間において特定されたプロセッサ使用率（プロセッサ２１４の使用率）を示す。バス帯域７２５は、期間において特定されたバス帯域（ＦＭバス５９の帯域）を示す。キャッシュ使用率７２６は、期間において特定されたキャッシュ使用率（データキャッシュ領域４０３の使用率）を示す。キャッシュ帯域７２７は、期間において特定されたキャッシュ帯域（キャッシュバス５８の帯域）を示す。期間は、一定期間（例えば３０分）である。メモリ７２３〜キャッシュ帯域７２７の各々は、ＦＭリソース率の一例である。同一期間中に、同一種類のＦＭリソース率が複数回特定された場合、テーブル６２２に登録される値は、特定されたＦＭリソース率のうちの少なくとも１つに従う値、例えば、平均値、又は、最も高い（最も悪い）ＦＭリソース率である。また、テーブル６２４に登録されるＦＭリソース使用率は１種類でもよい。【００８０】
非同期性能管理テーブル６２５は、対象ＦＭＰＫ１３１の非同期処理の性能（例えば、単位時間当たりのＩ／Ｏ数、又は、単位時間当たりのデータ転送サイズ）に関する情報を保持する。非同期性能管理テーブル６２５は、期間毎にエントリを有する。各エントリは、ＩＤ７１１、時刻７１２、リクラメーション７１３及びリフレッシュ７１４といった情報を保持する。ＩＤ７１１は、期間のＩＤである。時刻７１２は、期間の開始時刻を表す。リクラメーション７１３は、期間において特定されたリクラメーション処理性能を示す。リフレッシュ７１４は、期間において特定されたリフレッシュ処理の性能を示す。リクラメーション処理及びリフレッシュ処理は、それぞれ、非同期処理の一例である。同一期間中に、同一種類の非同期処理性能が複数回特定された場合、テーブル６２５に登録される値は、特定された非同期処理性能のうちの少なくとも１つに従う値、例えば、平均値、最も低い（最も悪い）性能、又は、最も高い（最も良い）性能である。【００８１】
なお、「非同期処理」とは、更新データのようなデータをライト対象としたライトコマンドに応答してＦＭＰＫ１３１により行われるライト処理とは非同期にＦＭＰＫ１３１により行われる処理であって、典型的には、リクラメーション処理及びリフレッシュ処理のように、ＦＭ２２０に対するデータのライトが発生する処理である。【００８２】
「リクラメーション処理」とは、１以上の物理ブロックの各々から有効データを読み出し、読み出したデータを物理ブロック（例えば、移動元の物理ブロックよりも消去回数の少ない物理ブロック）へ移動し、移動元物理ブロックに対して消去処理を実行する処理である。リクラメーション処理により、空きの物理ブロックを増やすことができる。【００８３】
また、「リフレッシュ処理」とは、物理ブロックからデータ（特に有効データ）を読み出してエラー訂正し、エラー訂正したデータを別の物理ブロック（例えば、移動元の物理ブロックよりもＰＥ回数の少ない物理ブロック）へ移動する処理である。リフレッシュ処理により、移動元物理ブロックが割り当てられていた論理領域（例えば論理ブロック）には、移動元物理ブロックに代えて移動先物理ブロックが割り当てられる。【００８４】
論理物理変換テーブル６２１は、論理アドレスと物理アドレスの対応関係に関する情報を保持する。論理物理変換テーブル６２１は、論理ページ（論理領域の一例）毎にエントリを有する。各エントリは、論理ページ番号７３１、ＬＢＡ７３２、論理ページサイズ７３３、ステータス７３４、物理ページ番号７３５及びブロック番号７３６といった情報を保持する。論理ページ番号７３１は、論理ページの識別番号である。ＬＢＡ７３２は、論理ページの先頭ＬＢＡを示す。論理ページサイズ７３３は、論理ページのサイズを示す。ステータス７３４は、論理ページのステータスを示す。例えば、ステータス７３４としては、“有効”（ユーザ領域に基づく論理ページであってその論理ページがプールの一部として割り当てられている）、“無効”（ユーザ領域に基づく論理ページであるがその論理ページがプールの一部として割り当てられていない）、及び、“使用不可”（更新領域に基づく論理ページ）がある。物理ページ番号７３５は、論理ページに割り当てられた物理ページの識別番号である。ブロック番号７３６は、論理ページに割り当てられた物理ページを含む物理ブロックの識別番号である。【００８５】
ページ管理テーブル６２３は、物理ページに関する情報を保持する。ページ管理テーブル６２３は、物理ページ毎にエントリを有する。各エントリは、物理ページ番号７４１及びステータス７４２といった情報を保持する。物理ページ番号７４１は、物理ページの識別番号である。ステータス７４２は、物理ページのステータスを示す。【００８６】
以下、本実施例で行われる処理を説明する。【００８７】
図９は、ライト要求に応答して行われる処理の流れを示す。図１０は、ライトコマンドを受けるＦＭＰＫ１３１が行う処理の流れを示す。【００８８】
ストレージコントローラ１１１が、ホスト計算機１０１からライト要求を受信する（Ｓ９００）。ストレージコントローラ１１１（ストレージ制御プログラム４１１）が、そのライト要求に基づき、ライトコマンドを、ＰＧ８１０における少なくとも１つのＦＭＰＫ１３１に送信する。以下、図９及び図１０の説明において、１つのＦＭＰＫ１３１を例に取る。図９及び図１０の説明において、そのＦＭＰＫ１３１を「対象ＦＭＰＫ１３１」と呼ぶ。【００８９】
対象ＦＭＰＫ１３１のＦＭＰＫコントローラ５０（プロセッサ２１４）が、ライトコマンドを受信する（Ｓ９０１）。プロセッサ２１４（ＦＭＰＫ制御プログラム６１１）は、そのライトコマンドに従い、そのライトコマンドに従うライト対象のデータをＦＭ２２０に書き込む（Ｓ９０２）。【００９０】
ＦＭＰＫ制御プログラム６１１は、対象ＦＭＰＫ１３１の複数種類のＦＭリソース使用率（メモリ７２３〜キャッシュ帯域７２７）をＦＭリソース管理テーブル６２２から取得する（Ｓ９０３）。なお、複数種類のＦＭリソース使用率は、それぞれ、定期的に計測されてＦＭリソース管理テーブル６２２に登録されてもよいし、このＳ９０３において計測されてもよい。【００９１】
ＦＭＰＫ制御プログラム６１１は、非同期処理の要否を判定する（Ｓ９０４）。ライトコマンドに応答して行われる処理に関し、非同期処理は、典型的には、リクラメーション処理である。例えば、物理ブロック総数に対する空きブロック数が閾値未満の場合（つまり空きブロックが少ない場合）、リクラメーション処理が要と判定される。【００９２】
Ｓ９０４の判定結果が真の場合（Ｓ９０４：Ｙ）、ＦＭＰＫ制御プログラム６１１は、非同期処理を実行する（Ｓ９０５）。そして、ＦＭＰＫ制御プログラム６１１は、その非同期処理に伴う変更後のＦＭリソース率をＦＭリソース管理テーブル６２２に登録する（Ｓ９０６）。【００９３】
ＦＭＰＫ制御プログラム６１１は、対象ＦＭＰＫ１３１に障害が生じたか否かを判定する（Ｓ９０７）。ここで言う「障害」とは、対象ＦＭＰＫ１３１のユーザ容量のうちの空き容量が所定の容量未満になった（例えば、ユーザ領域８０１Ｕを構成する論理ページの総数に対し、論理ページ“無効”の数の比率が所定の値未満になった）、又は、対象ＦＭＰＫ１３１のライト処理の性能が所定の性能未満になった、である。【００９４】
Ｓ９０７の判定結果が真の場合（Ｓ９０７：Ｙ）、ＦＭＰＫ制御プログラム６１１は、アラートを発行する（Ｓ９０８）。【００９５】
以上が、ライト要求に応答して行われる処理である。なお、この処理において、ＦＭ２２０に対するライトに対して応答９５０が返り、ライトコマンドに対する応答９６０が返り、ライト要求に対する応答９７０が返る。【００９６】
各ＦＭＰＫ１３１は、定期的に、非同期処理要否を判定してもよい。例えば、ストレージコントローラ１１１は、定期的に、定期処理コマンドを、ＦＭＰＫ１３１に送信してもよい。【００９７】
図１１は、定期処理コマンドを受けるＦＭＰＫ１３１が行う処理の流れを示す。図１１の説明では、そのＦＭＰＫ１３１を「対象ＦＭＰＫ１３１」と呼ぶ。【００９８】
ＦＭＰＫコントローラ５０（プロセッサ２１４）が、定期処理コマンドを受信する（Ｓ１１０１）。【００９９】
プロセッサ２１４（ＦＭＰＫ制御プログラム６１１）は、対象ＦＭＰＫ１３１の複数種類のＦＭリソース使用率（メモリ７２３〜キャッシュ帯域７２７）をＦＭリソース管理テーブル６２２から取得する（Ｓ１１０２）。【０１００】
ＦＭＰＫ制御プログラム６１１は、非同期処理の要否を判定する（Ｓ１１０３）。ここでの非同期処理は、リクラメーション処理に限られない。【０１０１】
Ｓ１１０３の判定結果が真の場合（Ｓ１１０３：Ｙ）、ＦＭＰＫ制御プログラム６１１は、非同期処理を実行する（Ｓ１１０４）。そして、ＦＭＰＫ制御プログラム６１１は、その非同期処理に伴う変更後のＦＭリソース率をＦＭリソース管理テーブル６２２に登録する（Ｓ１１０５）。【０１０２】
ＦＭＰＫ制御プログラム６１１は、対象ＦＭＰＫ１３１に上述の障害が生じたか否かを判定する（Ｓ１１０６）。【０１０３】
Ｓ１１０６の判定結果が真の場合（Ｓ１１０６：Ｙ）、ＦＭＰＫ制御プログラム６１１は、アラートを発行する（Ｓ１１０７）。【０１０４】
図１２は、ストレージコントローラ１１１がアラートを受けたことに応答して行われる処理の流れを示す。図１３は、拡張／縮小判定を含む処理の流れを示す。ユーザ容量枯渇又は性能低下によるアラートが生じたことを契機にユーザ容量の拡張又は縮小が行われるので、ユーザ容量を最適にすることが、アラートの原因を解消することにもなる。【０１０５】
プロセッサ１２３（ストレージ制御プログラム４１１）は、ＦＭＰＫ１３１からアラートを受けた場合、そのＦＭＰＫ１３１を含んだＰＧ８１０を、ＰＧ管理テーブル４２４を基に特定し、その特定したＰＧ８１０について、ユーザ容量の拡張又は縮小を実行するか否かの判定である拡張／縮小判定を実行する（Ｓ１２０１）。【０１０６】
Ｓ１２０１の判定結果が真の場合（Ｓ１２０１：Ｙ）、ストレージ制御プログラム４１１は、その特定したＰＧ８１０について、ユーザ容量の拡張又は縮小を実行する（Ｓ１２０２）。【０１０７】
以下、図１２及び図１４を参照して、拡張／縮小判定の詳細を説明する。なお、アラートの発行元のＦＭＰＫ１３１を含んだＰＧ８１０を、以下、「対象ＰＧ８１０」と呼ぶ。【０１０８】
ストレージ制御プログラム４１１は、対象ＰＧ８１０のうち、Ｓ１２０１−１及びＳ１２０１−２が未だされていないいずれかのＦＭＰＫ１３１を選択する。ここで選択されたＦＭＰＫ１３１を、「選択ＦＭＰＫ１３１」と呼ぶ。【０１０９】
ストレージ制御プログラム４１１は、選択ＦＭＰＫ１３１からＦＭリソース使用率及び非同期処理性能を特定する（Ｓ１２０１−１）。具体的には、ストレージ制御プログラム４１１は、選択ＦＭＰＫ１３１に対し、取得コマンドを送信する。選択ＦＭＰＫ１３１のプロセッサ２１４（ＦＭＰＫ制御プログラム６１１）は、その取得コマンドに応答して、ＦＭリソース管理テーブル６２２から複数種類のＦＭリソース使用率（メモリ７２３〜キャッシュ帯域７２７）を取得し、且つ、非同期性能管理テーブル６２５から最新の非同期処理性能（リクラメーション７１３及びリフレッシュ７１４）を取得し（Ｓ１２０１−１−１）、取得したＦＭリソース使用率及び非同期処理性能を含んだ応答（取得コマンドに対する応答）を、ストレージコントローラ１１１に返す。【０１１０】
ストレージ制御プログラム４１１は、選択ＦＭＰＫ１３１の最高ＦＭリソース使用率及び最高非同期処理性能に対応した結果を、拡張／縮小判定テーブル４２６から特定する（Ｓ１２０１−２）。【０１１１】
結果が「不可」の場合、ストレージ制御プログラム４１１は、対象ＰＧ８１０について、Ｓ１２０１の判定結果を偽（Ｓ１２０１：Ｎ）とする。【０１１２】
結果が「拡張可」又は「縮小可」の場合、ストレージ制御プログラム４１１は、対象ＰＧ８１０に、Ｓ１２０１−１及びＳ１２０１−２が未だされていないＦＭＰＫ１３１があれば、そのＦＭＰＫ１３１について、Ｓ１２０１−１及びＳ１２０１−２を実行する。【０１１３】
結果が「拡張可」又は「縮小可」の場合、ストレージ制御プログラム４１１は、対象ＰＧ８１０に、Ｓ１２０１−１及びＳ１２０１−２が未だされていないＦＭＰＫ１３１が無ければ、対象ＰＧ８１０の全てのＦＭＰＫ１３１について、同じ結果が得られたか（すなわち、全て「拡張可」であるか、又は、全て「縮小可」であるか）を、判定する（Ｓ１２０１−３）。Ｓ１２０１−３の判定結果が真の場合（Ｓ１２０１−３：Ｙ）、Ｓ１２０１の判定結果が真（Ｓ１２０１：Ｙ）となる。Ｓ１２０１−３の判定結果が偽の場合（Ｓ１２０１−３：Ｎ）、Ｓ１２０１の判定結果が偽（Ｓ１２０１：Ｎ）となる。これにより、対象ＰＧ８１０について、ＰＧ単位での拡張又は縮小を行うことができる。なお、ストレージ制御プログラム４１１は、対象ＰＧ８１０について、異なる結果が得られ次第、Ｓ１２０１の判定結果をＳ１２０１：Ｎとしてもよい。【０１１４】
以下、図１２及び図１５を参照して、Ｓ１２０２に関してストレージコントローラ１１１が行う処理の詳細を説明する。【０１１５】
対象ＰＧ８１０を構成する各ＦＭＰＫ１３１について、Ｓ１２０２−１が実行される。すなわち、Ｓ１２０１の判定結果が、「拡張可」の場合、ストレージ制御プログラム４１１は、対象ＰＧ８１０を構成する各ＦＭＰＫ１３１に、拡張コマンドを送信する。一方、Ｓ１２０１の判定結果が、「縮小可」の場合、ストレージ制御プログラム４１１は、対象ＰＧ８１０を構成する各ＦＭＰＫ１３１に、縮小コマンドを送信する。【０１１６】
その後、Ｓ１２０２−２が実行される。すなわち、ストレージ制御プログラム４１１は、対象ＰＧ８１０について、拡張コマンド又は縮小コマンドに従う変更後のＯＰ率を、ＯＰ率５２６として、ＰＧ管理テーブル４２４に登録する。なお、本実施例では、拡張コマンドに従うＯＰ率変化量、及び、縮小コマンドに従うＯＰ率変化量は、一定である。但し、拡張コマンドに従うＯＰ率変化量と、縮小コマンドに従うＯＰ率変化量は、同じであっても異なっていてもよい。【０１１７】
なお、ＯＰ率変化量に代えて、ユーザ容量変化量が、一定でもよい。また、ユーザ容量変化量に関し、拡張の際の変化量と、縮小の際の変化量は、同じであっても異なっていてもよい。【０１１８】
また、いずれかのＦＭＰＫ１３１からアラートが発生したときに代えて、例えば定期的に、Ｓ１２０１が実行されてもよい。【０１１９】
以上のように、アラートが発生する都度に、又は、定期的に、拡張／縮小可否判定が実行されて、判定結果に応じて、ＰＧ単位でＯＰ率が変更される。つまり、ストレージシステム１０４の稼働中にＦＭリソース使用率と非同期処理性能とに基づくＯＰ率変更が繰り返されることになる。結果として、ストレージシステム１０４の稼働中に最適なＯＰ率を維持することが期待できる。【０１２０】
図１６は、拡張に関してＦＭＰＫ１３１が行う処理の流れを示す。【０１２１】
ＦＭＰＫ１３１（ＦＭＰＫ制御プログラム６１１）が、拡張コマンドを受信し（Ｓ１２０１−１−Ａ１）、ユーザ容量を拡張する（Ｓ１２０１−１−Ａ２）。具体的には、例えば、ＦＭＰＫ制御プログラム６１１は、更新領域からＯＰ率変化量分の空き領域（１以上の空きブロック（空きページの集合としてブロック））を確保する。なお、ＯＰ率変化量分の空き領域が無い場合、リクラメーション処理により、空きブロックが増やされてよい。【０１２２】
その後、ＦＭＰＫ制御プログラム６１１が、ＯＰ率変化量分の論理ページの各々のステータス７３４を、“使用不可”から“無効”に変更し、且つ、ＯＰ率７０１を、拡張後のＯＰ率に変更する（Ｓ１２０１−１−Ａ３）。ＦＭＰＫ制御プログラム６１１は、拡張コマンドに対する完了応答をストレージコントローラ１１１に返す。【０１２３】
図１７は、縮小に関してＦＭＰＫ１３１が行う処理の流れを示す。【０１２４】
ＦＭＰＫ１３１（ＦＭＰＫ制御プログラム６１１）が、縮小コマンドを受信し（Ｓ１２０１−１−Ｂ１）、ＯＰ率変化量分の論理ページの各々のステータス７３４を、“無効”から“使用不可”に変更し、ＯＰ率７０１を、縮小後のＯＰ率に変更する（Ｓ１２０１−１−Ｂ２）。ＦＭＰＫ制御プログラム６１１は、縮小コマンドに対する完了応答をストレージコントローラ１１１に返す。縮小は、ユーザ領域に空き領域があるために可能なので、ユーザ領域からＯＰ率変化量分の空き領域の確保は不要である。【０１２５】
以上が、実施例１の説明である。【０１２６】
なお、本実施例では、図２０に例示する設定画面２０００（例えばＧＵＩ（Graphical User Interface））経由で、種々の設定が行われてもよい。画面２０００は、例えば、管理計算機１０２に表示されてよい。画面２０００は、例えば、ＰＧ指定ＵＩ（ユーザインターフェース）２００３と、ユーザ容量変更設定ＵＩ２００４と、ポリシー設定ＵＩ２００５と、設定変更ボタン２００１と、ＯＰ率手動変更ボタン２００２とを有する。ＰＧ指定ＵＩ２００３により、設定が関連付けられるＰＧを指定することができる。ユーザ容量変更設定ＵＩ２００４により、ユーザ容量の変更（ＯＰ率の変更）の有無や、その変更を自動で行うか手動で行うかを指定することができる。ポリシー設定ＵＩ２００５により、性能優先と容量優先のいずれを採用するのかを指定することができる。設定変更ボタン２００１が押された場合に、ＵＩ２００３、２００４及び２００５経由での指定（設定）が、テーブル４２４に反映される（テーブル４２４には、ＯＰ率変更が有効か否か（自動か手動か）を表すカラムが設けられていてもよい）。ＯＰ率手動変更ボタン２００２が押された場合に、手動で、ＯＰ率が変更される。【０１２７】
また、本実施例では、図２１に例示する予測画面２１００（例えばＧＵＩ）が、例えばストレージ制御プログラム４１１により表示されてもよい。例えば、ストレージ制御プログラム４１１は、アラート発行元のＦＭＰＫ１３１について、最高ＦＭリソース使用率（ＦＭリソース使用率の種別も含む）とＯＰ率（ユーザ容量）とを含む現在状況２０１４と、ＯＰ率を変更（拡張又は縮小）したと仮定した場合のＦＭリソース使用率とＯＰ率（ユーザ容量）とを含む予測状況２０１５とを画面２１００に表示してよい。画面２１００は、ＯＰ率変更ボタン２１０１とキャンセルボタン２１０２とを有する。ＯＰ率変更ボタン２１０１が押された場合、ストレージ制御プログラム４１１が、アラート発行元のＦＭＰＫ１３１を含むＰＧ８１０について、ＯＰ率変更を実行してもよい。これにより、ＯＰ率変更後の予測状況を確認した上で、ＯＰ率を変更することを決定することができる。なお、キャンセルボタン２１０２が押された場合、ストレージ制御プログラム４１１が、アラート発行元のＦＭＰＫ１３１を含むＰＧ８１０について、ＯＰ率変更をスキップしてよい。【０１２８】
また、本実施例では、ストレージシステム１０４の稼働中、ユーザ容量が変わるが、ホスト計算機１０１からは、ユーザ容量の変更は見えない。なぜなら、ホスト計算機１０１に提供されているボリュームは、仮想ボリュームであり、プールの容量が変わるものの、仮想ボリュームそれ自体の容量は変更しないためである。
【実施例２】
【０１２９】
実施例２を説明する。その際、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略又は簡略する。【０１３０】
本実施例では、ユーザ容量の変更量は可変である。例えば、ストレージ制御プログラム４１１及びＦＭＰＫ制御プログラム６１１のうちのいずれかが、ＦＭリソース使用率と非同期処理性能とに基づいて、ユーザ容量の変更量を決定する。具体的には、例えば、ストレージ制御プログラム４１１及びＦＭＰＫ制御プログラム６１１のうちのいずれかが、ＦＭＰＫ１３１毎に、そのＦＭＰＫ１３１の最高ＦＭリソース使用率と最高非同期処理性能とを基に、ユーザ容量の最大変更量を決定する。ＰＧ８１０について、ストレージ制御プログラム４１１が、ＰＧ８１０を構成する複数のＦＭＰＫ１３１にそれぞれ対応した複数の最大変更量に基づく最大変更量（例えば、複数の最大変更量のうちの最小値）を決定する。ストレージ制御プログラム４１１が、決定した最大変更量から所定のマージンを削減した変更量を、ユーザ容量の変更量として決定する。【０１３１】
実施例２によれば、ユーザ容量の変更量は、固定値ではなく、ＦＭリソース使用率と非同期処理性能とに従う最大変更量がベースとなる。これにより、ＯＰ率を最適値とするまでの時間を短縮することが期待できる。【０１３２】
また、実施例２によれば、ユーザ容量の変化量は、最大変更量から所定のマージンが削減された量である。これにより、ストレージシステム１０４の性能に悪影響が生じる可能性を軽減することができる。【０１３３】
以下、拡張を例に取り、実施例２の一例を、図２２を参照して、説明する。図２２の左側が、ユーザ容量遷移を示し、図２２の右側が、その遷移に伴う性能遷移を示す。【０１３４】
非同期処理性能が低く、且つ、ＦＭリソース使用率も低い場合、ライト処理性能と非同期処理性能の合計とＦＭＰＫの限界性能との差が十分にある。この場合、ＦＭリソース使用率と非同期処理性能とに従う最大拡張量は、比較的大きい。ストレージ制御プログラム４１１（又はＦＭＰＫ制御プログラム６１１）が、その最大拡張量から所定のマージンを削減した量Ｐを、拡張量として決定する。ユーザ容量を拡張量Ｐ分拡張すると、拡張量Ｐ分更新容量が減るため、非同期処理の発生頻度が増え、結果として、非同期処理性能が性能Ｒ分増える。【０１３５】
非同期処理性能が増え、ＦＭリソース使用率が高くなった場合、ＦＭリソース使用率と非同期処理性能とに従う最大拡張量として、ストレージ制御プログラム４１１（又はＦＭＰＫ制御プログラム６１１）は、非同期処理性能が低く、且つ、ＦＭリソース使用率も低い場合の最大拡張量に比べて小さい量を決定する。そして、ストレージ制御プログラム４１１は、その決定した最大拡張量から所定のマージンを削減した量Ｑを、拡張量として決定する（マージンは、固定サイズでよいが、最大拡張量と同様、可変でもよい）。ユーザ容量を更に拡張量Ｑ分拡張すると、拡張量Ｑ分更新容量が減るため、非同期処理の発生頻度が更に増え、結果として、非同期処理性能が更に性能Ｓ分増える。【０１３６】
このようにして、ライト処理性能の低下を避けながら、ユーザ容量をできるだけ拡張していくことができるが、ユーザ容量の変更量を、ＦＭリソース使用率と非同期処理性能とに従う可変量とすることで、最適なユーザ容量とすること（最適なＯＰ率とすること）を、実施例１よりも短い時間で実現することが、期待できる。【０１３７】
以上、幾つかの実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。例えば、ＰＧが採用されないストレージシステムにおいては、ＦＭＰＫが、拡張／縮小可否判定を実行してもよい。例えば、ＦＭＰＫ制御プログラムは、内部的にアラート発行し（アラートの発行先がＦＭＰＫ制御プログラムであり）、そのアラートを受けて、拡張／縮小可否判定を実行してもよい。そして、ＦＭＰＫのＦＭＰＫ制御プログラムは、ユーザ容量を、そのＦＭＰＫの１以上のリソース使用率のうちの少なくとも１つに基づく決定に従うユーザ容量に変更することができる。「ユーザ容量を、そのＦＭＰＫの１以上のリソース使用率のうちの少なくとも１つに基づく決定に従うユーザ容量に変更する」とは、ＦＭＰＫの上位システムからの変更コマンドに応答して行われることであってもよいし、ＦＭＰＫ制御プログラムが、そのＦＭＰＫの１以上のリソース使用率のうちの少なくとも１つに基づいて、ユーザ容量を変更することであってもよい。
【符号の説明】
【０１３８】
１０４：ストレージシステム
【図１】
0006681512.tif 000002
【図２】
0006681512.tif 000003
【図３】
0006681512.tif 000004
【図４】
0006681512.tif 000005
【図５】
0006681512.tif 000006
【図６】
0006681512.tif 000007
【図７】
0006681512.tif 000008
【図８】
0006681512.tif 000009
【図９】
0006681512.tif 000010
【図１０】
0006681512.tif 000011
【図１１】
0006681512.tif 000012
【図１２】
0006681512.tif 000013
【図１３】
0006681512.tif 000014
【図１４】
0006681512.tif 000015
【図１５】
0006681512.tif 000016
【図１６】
0006681512.tif 000017
【図１７】
0006681512.tif 000018
【図１８】
0006681512.tif 000019
【図１９】
0006681512.tif 000020
【図２０】
0006681512.tif 000021
【図２１】
0006681512.tif 000022
【図２２】
0006681512.tif 000023