(57)【特許請求の範囲】
【請求項１】
不揮発性記憶領域と
格納するデータが、前記不揮発性記憶領域に格納される制御情報を含みユーザデータと異なるデータからなる制御情報キャッシュパーティションと、格納するデータが、前記不揮発性記憶領域に格納されるユーザデータを含むユーザデータキャッシュパーティションとを備える、キャッシュ領域と、
前記不揮発性記憶領域と前記制御情報キャッシュパーティションとの間において、データを所定のアルゴリズムに従って置換する、コントローラと、を備え、
前記キャッシュ領域は、前記不揮発性記憶領域に格納される制御情報の一部が常駐するパーティションをさらに含み、
前記不揮発性記憶領域は、仮想ボリュームに動的に割り当てられる複数のチャンクを含むプールボリュームを備え、
前記コントローラは、
前記ユーザデータキャッシュパーティションのデータと、前記制御情報キャッシュパーティションのデータとを、異なるチャンクに格納し、
ホストからのＩ／Ｏ要求に応じて前記ユーザデータキャッシュパーティションにおいて更新されたデータを、前記プールボリュームから割り当てられた第１チャンクに格納し、
前記制御情報キャッシュパーティションにおいて更新されたデータを格納するために新たなチャンクを割り当てる必要がある場合に、前記プールボリュームから新たに割り当てた第２チャンクに前記更新されたデータを格納する、ストレージシステム。
【請求項２】
前記制御情報キャッシュパーティションに格納される制御情報は、前記プールボリュームにおける複数のＲＡＩＤグループに分散して格納される、
請求項１に記載のストレージシステム。
【請求項３】
前記不揮発性記憶領域は、アクセス性能が異なる複数種類の記憶デバイスの記憶領域により構成されており、
前記不揮発性記憶領域におけるユーザデータに関する制御情報は、そのユーザデータが格納されている記憶デバイス以上のアクセス性能を備える記憶デバイスに格納される、
請求項２に記載のストレージシステム。
【請求項４】
前記コントローラは、制御情報が関連するユーザデータの格納先記憶デバイスの種類及びデバイス種類に対する規定の優先度に従って、前記制御情報キャッシュパーティションにおいて置換対象とするデータを決定する、
請求項３に記載のストレージシステム。
【請求項５】
前記コントローラは、前記制御情報キャッシュパーティションのデータ置換方法を、前記ユーザデータキャッシュパーティションとは独立して決定する、
請求項４に記載のストレージシステム。
【請求項６】
前記コントローラは、電源遮断に対応して、前記制御情報キャッシュパーティションに格納されているデータを、前記ユーザデータキャッシュパーティションに格納されているデータよりも先に退避させる、
請求項５に記載のストレージシステム。
【請求項７】
前記コントローラは、所定のイベントに応じて前記制御情報キャッシュパーティションの容量を変更する、
請求項６に記載のストレージシステム。
【請求項８】
前記コントローラは、現在処理に必要な制御情報の前記不揮発関記憶領域から前記制御情報キャッシュパーティションへの読み出しに付随して、今後必要と予測される制御情報を前記不揮発性記憶領域から前記制御情報キャッシュパーティションへ読み出す、
請求項７に記載のストレージシステム。
【請求項９】
前記コントローラは、
更新前制御情報と更新後制御情報とを比較し、更新されたビット列を含むブロックを選択し、
前記選択したブロック及び前記更新前制御情報に付随している保証コードを用いて、前記更新後制御情報の保証コードを生成する、
請求項８に記載のストレージシステム。
【請求項１０】
前記ユーザデータキャッシュパーティションは、前記不揮発性記憶領域に格納される制御情報の一部を格納し、
前記コントローラは、前記ユーザデータキャッシュパーティションにおけるユーザデータのキューと制御情報のキューとを備えて、前記ユーザデータのキューと前記制御情報のキューとに異なる優先度を与えて、前記制御情報を前記ユーザデータよりも優先して前記ユーザデータキャッシュパーティションに残す、
請求項９に記載のストレージシステム。
【請求項１１】
不揮発性記憶領域とキャッシュ領域とを備えるストレージシステムにおける、制御情報の管理方法であって、
前記キャッシュ領域のユーザデータキャッシュパーティションに、前記不揮発性記憶領域に格納されるユーザデータを含むデータを格納し、
前記キャッシュ領域の制御情報キャッシュパーティションに、前記不揮発性記憶領域に格納される制御情報を含みユーザデータと異なるデータを格納し、
前記制御情報キャッシュパーティションと前記不揮発性記憶領域との間においてデータを動的に置換し、
前記キャッシュ領域は、前記不揮発性記憶領域に格納される制御情報の一部が常駐するパーティションをさらに含み、
前記不揮発性記憶領域は、仮想ボリュームに動的に割り当てられる複数のチャンクを含むプールボリュームを備え、
前記管理方法は、
前記ユーザデータキャッシュパーティションのデータと、前記制御情報キャッシュパーティションのデータとを、異なるチャンクに格納し、
ホストからのＩ／Ｏ要求に応じて前記ユーザデータキャッシュパーティションにおいて更新されたデータを、前記プールボリュームから割り当てられた第１チャンクに格納し、
前記制御情報キャッシュパーティションにおいて更新されたデータを格納するために新たなチャンクを割り当てる必要がある場合に、前記プールボリュームから新たに割り当てた第２チャンクに前記更新されたデータを格納する、管理方法。
【請求項１２】
前記制御情報キャッシュパーティションに格納されるデータは、前記プールボリュームにおける複数のＲＡＩＤグループに分散して格納される、
請求項１１に記載の管理方法。
【請求項１３】
前記不揮発性記憶領域は、アクセス性能が異なる複数種類の記憶デバイスの記憶領域により構成されており、
前記不揮発性記憶領域におけるユーザデータに関する制御情報は、そのユーザデータが格納されている記憶デバイス以上のアクセス性能を備える記憶デバイスに格納される、
請求項１２に記載の管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム及びその制御情報の管理方法に関し、特に、ストレージシステムにおける制御情報のキャッシュメモリを使用した管理に関する。
【背景技術】
【０００２】
ストレージシステムには、スナップショットのように利便性を高めるいくつかの機能が搭載されている。スナップショット機能を実現するためには、差分情報や世代管理情報などの制御情報が必要である。近年、スナップショットの取得可能世代数の増加、適用可能容量の増加、差分の取得サイズの縮小など、機能強化が求められている。これら機能強化のためには、大量の制御情報が必要となる。
【０００３】
一方で、制御情報に十分なアクセス性能が求められる場合がある。例えば、スナップショット機能における差分データのように、制御情報へのアクセスがユーザからのＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）要求に連動するものである場合、その制御情報のアクセス性能が低いと、ユーザのＩ／Ｏ要求を実用的な時間内に処理できなくなってしまう。
【０００４】
このため高速アクセスが必要な制御情報は、キャッシュメモリやローカルメモリなど高速なメモリに格納されることがある。しかし、ストレージシステムに搭載可能なメモリ容量は上限があるので、メモリに格納可能な制御情報量には制限がある。これにより、スナップショットの世代数や適用可能容量、差分データの取得サイズなど機能スペックは制限されてしまう。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００４−３００９０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
このメモリ容量の制限を解決する１つの方法は、制御情報の階層記憶管理である。この階層記憶管理は、メモリに収まらない制御情報をＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）などの不揮発性記憶デバイスに格納し、メモリとＨＤＤとの間で制御情報を置換する。これにより、メモリ容量が制限されている中で、大量の制御情報の保持と制御情報へ高速アクセスの両立を図ることができる。制御情報への高いアクセス性能を実現するためには、制御情報の階層記憶管理は、メモリ内に格納する制御情報量を適切に管理することが必要である。
【０００７】
ここで、特許文献１は、キャッシュメモリを複数のパーティションに分割し、パーティション毎に指定されたデータタイプのデータを保持することで、特定のデータタイプのみが高いキャッシュヒット率を有することを避ける技術を開示している。しかし、特許文献１が示しているデータタイプはユーザデータの使用形態やアクセス性能であり、ユーザデータであるか制御情報であるか、といったデータの種別を意味していない。
【０００８】
このため、特許文献１に示す技術では、ユーザデータと制御情報が同一のパーティションに配置されてしまう。このため、例えば、ストレージシステムが大量のスナップショットを作成すると、パーティション中の制御情報が増大し、ユーザデータがパーティションから掃きだされる。これにより、ユーザデータのキャッシュヒット率が大きく下がり、性能が劣化してしまう恐れがある。
【０００９】
逆に、シーケンシャルアクセスなどでパーティションがユーザデータで満たされてしまうと、制御情報アクセス時にＨＤＤへのＩ／Ｏが発生し、スナップショット取得時の性能が劣化してしまう恐れがある。
【００１０】
従って、本発明の１つの目的は、ストレージシステムにおいて、制御情報のアクセス性能を極力維持しつつ、大量の制御情報を利用可能とすることである。
【課題を解決するための手段】
【００１１】
本発明の一態様のストレージシステムは、不揮発性記憶領域と、キャッシュ領域と、コントローラとを備える。前記キャッシュ領域は、格納するデータが前記不揮発性記憶領域に格納される制御情報を含みユーザデータと異なるデータからなる制御情報キャッシュパーティションと、格納するデータが前記不揮発性記憶領域に格納されるユーザデータを含むユーザデータキャッシュパーティションとを備える。前記コントローラは、前記不揮発性記憶領域と前記制御情報キャッシュパーティションとの間において、データを所定のアルゴリズムに従って置換する。
【発明の効果】
【００１２】
本発明の一態様によれば、制御情報のアクセス性能を維持しつつ、多くの制御情報をストレージシステムが利用可能となる。
【図面の簡単な説明】
【００１３】
【図１】第１の実施形態におけるストレージステムの構成例を示す図である。
【図２】第１の実施形態におけるキャッシュ管理の概要を示す図である。
【図３】第１の実施形態における制御情報の一例を示す図である。
【図４】第１の実施形態におけるアドレス空間の概念を示す図である。
【図５】第１の実施形態におけるストレージ管理情報テーブルの一例を示す図である。
【図６】第１の実施形態におけるパーティション割り当て管理テーブルの一例を示す図である。
【図７】第１の実施形態におけるＬＵ管理テーブルの一例を示す図である。
【図８】第１の実施形態における先頭ポインタ管理テーブルの一例を示す図である。
【図９】第１の実施形態におけるパーティション割り当て表示画面の一例を示す図である。
【図１０】第１の実施形態におけるパーティションにＬＵを割り当てる処理の一例を示すフローチャートである。
【図１１】第１の実施形態におけるパーティションを新規に作成する処理の一例を示すフローチャートである。
【図１２】第１の実施形態におけるパーティションの容量を変更する処理の一例を示すフローチャートである。
【図１３】第１の実施形態において、ユーザデータに保証コードを付与する概念を示す図である。
【図１４】第１の実施形態における保証コード生成の概要を示す図である。
【図１５】第２の実施形態におけるストレージシステムの構成例を示す図である。
【図１６】第２の実施形態におけるキャッシュ管理の概要を示す図である。
【図１７】第２の実施形態におけるストレージ管理情報テーブルの一例を示す図である。
【図１８】第２の実施形態におけるＬＵ管理テーブルの一例を示す図である。
【図１９】第２の実施形態におけるチャンク管理テーブルの一例を示す図である。
【図２０】第２の実施形態におけるチャンクを制御情報格納用に割り当てる処理の一例を示すフローチャートである。
【図２１】第３の実施形態におけるストレージシステムの構成例を示す図である。
【図２２】第３の実施形態におけるＬＵ管理テーブルの一例を示す図である。
【図２３】第３の実施形態における制御情報を格納先の選択処理の一例を示すフローチャートである。
【図２４】第３の実施形態における制御情報のデステージング処理のフローチャートである。
【図２５】第４の実施形態におけるキャッシュ管理の概要を示す図である。
【図２６】第４の実施形態における先頭ポインタ管理テーブルの一例を示す図である。
【図２７】第４の実施形態におけるデステージング処理のフローチャートである。
【発明を実施するための形態】
【００１４】
以下において、本発明の実施の形態を説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略及び簡略化がなされている。又、各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略されている。
【００１５】
＜第１の実施形態＞
以下、第１の実施形態について図１乃至図１４を用いて説明する。図１は、本実施形態におけるストレージシステムの一例を示すブロック図である。ストレージシステム１００は、ストレージシステム１００を制御するコントローラ１０１、ホストコンピュータ１０とデータの送受信を行うホストインタフェースポート１０２を備える。
【００１６】
ストレージシステム１００は、さらに、プロセッサ１０３、キャッシュメモリ１０４、メインメモリ１０５、ストレージシステム１００を管理する管理コンピュータ１１とストレージシステム１００を接続する管理ポート１０６を備える。キャッシュメモリ１０４は、物理的にはメインメモリ１０５と同一のメモリでもよい。各構成要素の数は２以上でもよい。
【００１７】
ストレージシステム１００は、さらに、ユーザデータを格納するユーザデータ格納ＬＵ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ）３０１及び制御情報を格納する制御情報格納ＬＵ３０２を備える。制御情報は、ストレージシステム１００の動作制御に使用される情報であって、コマンド及びコマンド以外の制御データ（例えばスナップショット機能の差分データ）を含む。なお、本明細書において、データはユーザデータ及び制御情報を含む。
【００１８】
典型的には、図１に示すように、ストレージシステム１００は、複数のユーザデータ格納ＬＵ３０１及び制御情報格納ＬＵ３０２を備える。ストレージシステム１００は内部ネットワーク１０７を備え、各構成要素は、内部ネットワーク１０７により相互に接続している。なお、以下においては、説明の便宜上、１つのユーザデータ格納ＬＵ３０１及び１つの制御情報格納ＬＵ３０２を備えるストレージシステム１００について説明する。
【００１９】
メインメモリ１０５は制御プログラム１０８及び後述するストレージ管理情報テーブル１１０を格納している。制御プログラム１０８は、例えば、ホストコンピュータ１０が発行するＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）要求コマンドを解釈し、データの読み書きなどストレージシステム１００の内部処理を制御するソフトウェアである。制御プログラム１０８は、ストレージシステム１００の利便性を高めるための機能、例えば、スナップショットやＤｙｎａｍｉｃ  Ｐｒｏｖｉｓｉｏｎｉｎｇ、を備える。
【００２０】
ＬＵは、ストレージシステム１００において入出力アクセスの単位となる、論理的な記憶領域の単位であり、不揮発性記憶領域である。ホストコンピュータ１０は、自身に割り当てられたＬＵを、１つの記憶デバイス（ボリューム）と認識する。ＬＵは、典型的には、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）によって与えられる記憶領域である。ボリュームは、複数のＬＵの記憶領域で構成されていてもよい。
【００２１】
ＲＡＩＤは、典型的には、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）又はＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）で構成されるが、これらと異なる複数の不揮発性データ記憶デバイスにより構成されていてもよい。ＬＵは、このように冗長性を有するシステムの記憶領域であることが好ましいが、本実施形態においてはこの限りではなく、データや制御情報を格納する記憶領域であればよい。
【００２２】
図２は、第１の実施形態のキャッシュ管理の概要を示すブロック図である。キャッシュメモリ１０４はキャッシュ機能を有するメモリ領域であり、物理的な１又は複数のメモリデバイスが、そのメモリ領域を与えることができる。典型的には、キャッシュメモリ１０４は揮発性半導体記憶領域であるが、本実施形態は、キャッシュメモリ１０４のため、どのようなメモリデバイスを使用してもよい。
【００２３】
図２に示すように、本実施形態のキャッシュメモリ１０４は、複数のパーティションを備えている。複数のパーティションは、少なくとも、１つのユーザデータキャッシュパーティション２１０及び１つの制御情報キャッシュパーティション２２０を含む。キャッシュメモリ１０４は、複数のユーザデータキャッシュパーティション及び複数の制御情報キャッシュパーティションを含んでいてもよい。本明細書において、キャッシュメモリにおいて論理的又は物理的に画定した領域をキャッシュパーティションと呼ぶ。ユーザデータを格納するキャッシュパーティションをユーザデータキャッシュパーティションと呼び、制御情報を格納するキャッシュパーティションを制御情報キャッシュパーティションと呼ぶ。
【００２４】
ユーザデータキャッシュパーティション２１０は、ユーザデータのキャッシュを行うメモリ領域であり、制御プログラム１０８との間でユーザデータの受け渡しを行う。ユーザデータは、ストレージシステム１００とホストコンピュータ１０との間で送受信されるデータである。
【００２５】
例えば、ホストコンピュータ１０が発行するＩ／Ｏ要求コマンドを受領した制御プログラム１０８は、ユーザデータ格納ＬＵ３０１からユーザデータキャッシュパーティション２１０に、特定のユーザデータをステージングする。ステージングは、ＬＵのデータをキャッシュメモリ１０４に書き込む処理である。
【００２６】
制御プログラム１０８の参照要求に従って、コントローラ１０１は、ユーザデータ格納ＬＵ３０１からユーザデータキャッシュパーティション２１０にユーザデータをステージングする。制御プログラム１０８はユーザデータキャッシュパーティション２１０上のユーザデータを参照する。
【００２７】
また制御プログラム１０８はユーザデータキャッシュパーティション２１０上のユーザデータを更新する。更新されたユーザデータは、更新と同期又は非同期に、ユーザデータ格納ＬＵ３０１に反映される（デステージング）。デステージングは、更新されたキャッシュメモリ１０４上のデータをＬＵに書き込むことで、ＬＵとキャッシュメモリ１０４のデータを一致させる。
【００２８】
パーティション上のユーザデータは、所定のアルゴリズムに従ってキューにより管理される。典型的なアルゴリズムは、ＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）やＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  ＦｉｒｓｔＯＵＴ）である。１つのユーザデータキャッシュパーティション２１０に１つ又は複数のＬＵを対応付けることができる。ユーザデータキャッシュパーティション２１０は、ユーザデータのみを格納してもよいし、ユーザデータに加え制御情報を格納してもよい。
【００２９】
制御情報キャッシュパーティション２２０は、制御情報を含みユーザデータとは異なるデータを格納する。制御情報キャッシュパーティション２２０の格納データが、制御情報を含みユーザデータとは異なるデータからなることで、より多くの制御情報をキャッシュすることができる。以下に説明する好ましい構成において、制御情報キャッシュパーティション２２０の格納データは制御情報からなる。制御情報キャッシュパーティション２２０は、制御情報のデータキャッシュを行うメモリ領域であり、制御プログラム１０８との間で制御情報の受け渡しを行う。制御情報は制御情報格納ＬＵ３０２に格納され、制御プログラム１０８の指示に従って制御情報キャッシュパーティション２２０に制御情報格納ＬＵ３０２から格納される（ステージング）。
【００３０】
制御プログラム１０８は、制御情報キャッシュパーティション２２０に格納されている制御情報を参照し、それを更新する。更新された制御情報は、更新と同期に又は非同期に、制御情報格納ＬＵ３０２にデステージされる。制御情報キャッシュパーティション２２０上の制御情報もまた、所定のアルゴリズムに従ってキューにより管理される。このアルゴリズムは、ユーザデータキャッシュパーティションと同一でもよく異なっていてもよい。この際ユーザデータキャッシュパーティション２１０とは別のキューであることが望ましい。
【００３１】
制御情報キャッシュパーティション２２０は、１つ又は複数の制御情報格納ＬＵ３０２に対応付けられ、それが格納するデータは、制御情報（データ）で構成されている。このように、ユーザデータを格納することなく、制御情報のみを格納するパーティションにより、キャッシュメモリ１０４上で、ストレージシステム１００の制御に適切な量の制御情報（を格納する領域）を常に確保することができる。
【００３２】
本実施形態は、好ましい構成として、キャッシュメモリ１０４上に制御情報が常駐する、制御情報常駐パーティション２３０を有する。制御情報常駐パーティション２３０は、性能要件が厳しいなど、制御プログラム１０８が制御情報格納ＬＵ３０２から読み出すことが好ましくない制御情報を常駐するパーティションである。
【００３３】
制御プログラム１０８は、制御情報常駐パーティション２３０を参照する。制御プログラム１０８は、制御情報常駐パーティション２３０のデータの更新及びデステージングを行ってもよいが、そのデータをＬＵの他のデータ（他のアドレスのデータ）と置換することはない。制御情報常駐パーティション２３０により、特定の制御情報を、他の制御情報に影響されることなく常にキャッシュ上に維持することができる。
【００３４】
図２は、１つのユーザデータキャッシュパーティション２１０と２つの制御情報キャッシュパーティション（その内の１つは制御情報常駐パーティション２３０）を例示しているが、制御プログラム１０８は、複数のユーザデータキャッシュパーティション２１０、複数の制御情報常駐パーティション２３０及び複数の制御情報キャッシュパーティション２２０を、キャッシュメモリ１０４において定義してもよい。
【００３５】
図３は、ストレージシステム１００におけるスナップショット機能の制御情報の一例を示すブロック図である。スナップショット機能は、あるＬＵのある時点でのイメージを作成する機能である。具体的には、ＬＵの更新が発生する度に、更新部分の位置情報（アドレス）と更新前のデータを逐次記録することで、ＬＵの更新履歴を管理する。これにより、コントロールプログラム１０８は、ＬＵを以前の任意の状態に復元することが可能となる。
【００３６】
このようなスナップショット機能を実現するためには、スナップショットの制御情報が必要である。図３は、その制御情報の一例であるスナップショット管理テーブル５０を示している。スナップショット管理テーブル５０は、スナップショットＬＵ管理テーブル５１、スナップショット世代管理テーブル５２、差分ビットマップ管理テーブル５３を含むテーブルである。
【００３７】
図３は、それぞれの１つのスナップショット世代管理テーブル５２及び差分ビットマップ管理テーブル５３を示すが、スナップショット管理テーブル５０は、全てのスナップショットＬＵ番号に対応するスナップショット世代管理テーブル５２を備え、又、全てのスナップショット世代管理テーブル５２の全ての世代番号に対応する差分ビットマップ管理テーブル５３を備える。
【００３８】
スナップショットＬＵ管理テーブル５１は、スナップショットＬＵ番号５４とポインタ５５のカラムを含む。スナップショットＬＵ番号５４のフィールドは、スナップショットを取得しているＬＵを識別する番号を格納する。このフィールドの値は、ＬＵを識別することができればどのような値でもよい。ポインタ５５のフィールドは、スナップショット世代管理テーブル５２を指すポインタを格納する。
【００３９】
スナップショット世代管理テーブル５２は、世代番号５６及びポインタ６０のカラムを含む。世代番号５６のフィールドは、該当ＬＵのスナップショット取得世代を示す値を格納する。スナップショットを取得する毎に、世代番号５６（及びポインタ６０）のフィールドに新たな値が追加される。世代番号５６は、世代を識別するどのような識別子でもよい。スナップショット世代管理テーブル５２のポインタ６０のフィールドの値（ポインタ）は、差分ビットマップ管理テーブル５３を指す。
【００４０】
差分ビットマップ管理テーブル５３は、ページ番号５７、差分ビットマップ５８、差分格納先アドレス５９のカラムを備える。ページは、スナップショット機能によって取得する更新の容量単位のことであり、１ページは、典型的には、数キロバイトから数メガバイト程度である。ページ番号５７のフィールドは、該当ＬＵの世代番号５６におけるページを識別するための番号を格納し、番号以外の識別子を格納してもよい。
【００４１】
差分ビットマップ５８のフィールドは、該当ページが更新されているか否かを識別するビットを格納する。例えば、更新されているページの差分ビットマップ５８のフィールドは「１」を格納し、更新されていないページのフィールドは「０」を格納する。差分格納先アドレス５９のフィールドは、該当ページの差分、つまりＬＵのスナップショット取得前の内容が格納されている領域を指すアドレスを格納する。
【００４２】
制御プログラム１０８は、スナップショット管理テーブル５０において、ＬＵを更新する度に差分ビットマップ管理テーブル５３を更新し、新たなスナップショットを取得する度にスナップショット世代管理テーブル５２を更新する。
【００４３】
このように、制御情報は、テーブル毎に参照や更新される頻度や契機が異なる。このため、例えば差分ビットマップ管理テーブル５３の制御情報は、制御情報常駐パーティション２３０に常駐し、制御情報キャッシュパーティション２２０は、スナップショット世代管理テーブル５２及びスナップショットＬＵ管理テーブル５１の制御情報を格納する、というようにパーティションを使い分けてもよい。
【００４４】
このほか、図示しないが、制御プログラム１０８は、制御情報の種類によってパーティションを使い分けてもよい。例えば、ＬＵのＲＡＩＤ構成を管理する制御情報がそのＬＵのみに格納されていると、ＬＵ障害時にＲＡＩＤ構成を復旧できない恐れがある。制御プログラム１０８は、ＲＡＩＤ構成の復旧を行えるように、この制御情報を制御情報常駐パーティション２３０に格納する。
【００４５】
図４は、本発明における階層管理のアドレス空間の概念の一例を示すブロック図である。本実施形態は、制御プログラム１０８に広大な仮想アドレス空間３０を予め用意する。制御プログラム１０８は、仮想アドレス空間３０を自由に利用してよい。例えば、仮想アドレス空間３０の一部分を、スナップショット機能の制御情報用に割り当ててもよい。
【００４６】
本明細書において、制御情報が割り当たっているアドレスを割り当て済みアドレスと呼び、制御情報が割り当てられていないアドレスを未割り当てアドレスと呼ぶ。又、制御情報格納ＬＵ３０２において割り当て済みアドレスと対応付いている領域を、割り当て済み領域と呼ぶ。仮想アドレス空間３０は、その一部又は全部が制御情報格納ＬＵ３０２の記憶領域に対応する。
【００４７】
仮想アドレス空間３０の連続する部分が、制御情報格納ＬＵ３０２上では不連続なセクションからなる記憶領域（不連続領域）に対応していてもよい。例えば割り当て済みアドレスＡ３１は、制御情報格納ＬＵ３０２上の連続する割り当て済み領域３４に対応するが、割り当て済みアドレスＢ３２は、制御情報格納ＬＵ３０２上では不連続な割り当て済み領域３４に対応している。
【００４８】
また割り当て済み領域３４の一部分又は全部分は、制御情報キャッシュパーティション２２０上の記憶領域に格納されている（ステージング済み）。割り当て済み領域３４のうちステージング（ＬＵからのコピー）が終了している領域のことを、ステージング済み領域と呼ぶ。ステージング済み領域３５は、キャッシュパーティション２２０上に格納されているが、キャッシュパーティション２２０上の連続領域に格納されていてもよいし、不連続領域に格納されていてもよい。
【００４９】
本例において、全ての制御情報は制御情報格納ＬＵ３０２の記憶領域に格納されている。制御プログラム１０８の指示に従って、コントローラ１０１は、その一部を制御情報キャッシュパーティション２２０にコピーする（ステージング）。制御プログラム１０８は、制御情報格納ＬＵの全ての制御情報を制御情報キャッシュパーティション２２０に格納してもよい。
【００５０】
制御プログラム１０８は制御情報キャッシュパーティション２２０に格納されている制御情報を参照したり更新したりする。制御プログラム１０８は、制御情報キャッシュパーティション２２０に割り当てる記憶領域を動的に決定してもよいし、仮想アドレス空間３０の全部が制御情報格納ＬＵ３０２に対応していてもよい。制御プログラム１０８は、仮想アドレス空間３０が対応する制御情報格納ＬＵ３０２内の制御情報を制御情報キャッシュパーティション２２０にステージングする。
【００５１】
図５は、ストレージ管理情報テーブル１１０の構成の一例を示すブロック図である。ストレージ管理情報テーブル１１０は、パーティション割当管理テーブル１２０、ＬＵ管理テーブル１３０、先頭ポインタ管理テーブル１４０を含む。各テーブルの詳細を、以下に図６〜図８を参照して説明する。なお、本実施形態において、メインメモリ１０５に格納される情報はデータ構造に依存せず、どのようなデータ構造で表現されていてもよい。例えば、ストレージ管理情報テーブル１１０は、上記３つのテーブルとは異なる数及び構造のテーブルを有していてもよい。
【００５２】
図６は、パーティション割当管理テーブル１２０の一例を示すブロック図である。パーティション割当管理テーブル１２０は、パーティション番号１２１、セグメントサイズ１２２、容量１２３、割り当て済みＬＵ番号１２４、常駐フラグ１２５、制御情報割り当てフラグ１２６のカラムを含む。
【００５３】
パーティション番号カラム１２１は、キャッシュメモリ１０４を複数のパーティションに分けた各々のパーティションを一意に識別するための番号を格納する。通常は連番でよく、各パーティションを識別するためのどのような値を格納してもよい。セグメントサイズカラム１２２は、各パーティションの管理サイズを示す値を格納する。異なるパーティションが同じ値を有してもよいし、異なる値を有していてもよい。
【００５４】
キャッシュメモリを利用するデータのサイズや用途に応じて適切なセグメントサイズを設けることで、ストレージシステム１００の性能向上を図ることができる。例えば、データベース用途では、数ＫＢ程度の比較的小さいサイズのデータのＩ／Ｏが生じるため、セグメントサイズを数ＫＢ程度に設定することで多数のＩ／Ｏをキャッシュ可能となる。
【００５５】
一方、ストリーミング用途など大きいサイズのデータのＩ／Ｏが生じる場合は、セグメントサイズを２５６ＫＢなど大きく設定することで、大きいサイズのデータを分割することなくキャッシュ可能となる。このように適切なセグメントサイズを設けることで、ストレージシステム１００の性能向上が期待できる。
【００５６】
容量カラム１２３は、各パーティションのキャッシュ可能な容量を示す値を格納する。割当済みＬＵ番号カラム１２４は、パーティションに割り当てているＬＵを一意に識別する番号を格納し、ＬＵを一意に識別できるどのような値を格納してもよい。本実施形態において、１つのパーティションに複数のＬＵを割り当ててもよい。又、図示しないが、１つのＬＵのデータを複数のキャッシュパーティションに格納してもよい。
【００５７】
常駐フラグ１２５のフィールドは、該当キャッシュパーティション上に特定のＬＵが常駐しているか否かを示すフラグである。常駐フラグ１２５のフィールドは、例えば、該当パーティションにＬＵが常駐していれば「１」を格納し、常駐していなければ「０」を格納する。ＬＵが割り当てられていないパーティションの常駐フラグフィールドは、例えば、「−」を示す値を格納して、データを格納するパーティションと区別される。
【００５８】
図６は、例えば、パーティション番号１２１が２であるパーティションに、ＬＵ番号２１のＬＵのデータが常駐していることを示している。特定のＬＵのデータをキャッシュメモリ上に常駐させると、常駐させたＬＵに格納されている制御情報やユーザデータは必ずキャッシュヒットするため、Ｉ／Ｏ性能が向上する。本実施形態においては、１つのパーティションに複数のＬＵがキャッシュメモリへ常駐可能である。なお、キャッシュパーティションは、割り当てられているＬＵの一部のデータのみを格納してもよい。
【００５９】
制御情報割り当てフラグ１２６のフィールドは、該当パーティションに制御情報格納ＬＵ３０２が割り当てられているか否かを示すフラグを格納する。制御情報割り当てフラグ１２６のフィールドは、例えば、制御情報格納ＬＵ３０２が割り当てられていれば「１」を格納し、ユーザデータ格納ＬＵ３０１が当てられていれば「０」を格納する。
【００６０】
何も割り当てられていないパーティションのフィールドは、例えば、「−」を示す値を格納して、ＬＵが割り当てられている他のパーティションと区別する。制御情報割り当てフラグ１２６は、パーティションが制御情報キャッシュパーティション２２０又は制御情報常駐パーティション２３０であるか否かを判断するためのフラグである。制御プログラム１０８は、パーティション間で異なる処理を行う場合に、このフラグを参照する。
【００６１】
例えば、好ましい構成において、制御プログラム１０８は、ユーザデータキャッシュパーティション２１０と制御情報キャッシュパーティション２２０とで、独立にパーティションの管理方法を決定する。具体的には、制御プログラム１０８は、キューの管理アルゴリズム（例えば、ＬＲＵやＦＩＦＯ）を、２つのパーティション２１０、２２０の間で独立に決定する。
【００６２】
制御プログラム１０８は、ユーザデータへのアクセス状況により、パーティションのキャッシュ管理方法を変化させることが好ましい。例えば、制御プログラム１０８は、アクセス状況に応じてＬＲＵのパラメータを調整する。これにより、アクセス状況が変化しても、ユーザデータキャッシュパーティション２１０の高いキャッシュヒット率を維持することができる。
【００６３】
一方、ユーザデータと制御情報とでは、そのアクセスの特性が異なり、制御情報のアクセス状況は、ユーザデータのように変化しない。従って、これらのパーティションの管理方法を独立に決定することで、それぞれに適切な管理方法を適用でき、共に高いキャッシュヒット率を得ることができる。
【００６４】
また、制御プログラム１０８は、停電などによる電源遮断時には、キャッシュメモリ１０４上のデータを不揮発性記憶領域に退避する。この退避処理において、制御プログラム１０８は、制御情報キャッシュパーティション２２０をユーザデータキャッシュパーティション２１０よりも優先する。制御情報をユーザデータよりも先に退避させることで、重要な制御情報をより確実に保護することができる。制御プログラム１０８は、制御情報常駐パーティション２３０に最も高い優先度を与えることが好ましい。データの退避先は、例えば、システム１００内の規定の不揮発性記憶領域又は対応するＬＵである。
【００６５】
図７は、ＬＵ管理テーブル１３０の一例を示すブロック図である。ＬＵ管理テーブル１３０は、ストレージシステム１００内のＬＵを管理するテーブルであり、ＬＵ番号１３１、容量１３２、割り当てパーティション番号１３３、格納データ種別１３４のカラムを含む。
【００６６】
ＬＵ番号カラム１３１は、ＬＵを識別する番号を格納し、ＬＵを識別するどのような値を格納してもよい。容量カラム１３２は、各々のＬＵの総容量を示す値を格納している。割り当てパーティション番号カラム１３３は、各々のＬＵに割り当てているキャッシュパーティションの番号を示す値を格納し、それら値はパーティション割当管理テーブル１２０のパーティション番号カラム１２１の値に対応する。
【００６７】
格納データ種別カラム１３４は、各々のＬＵに格納されているデータの種別を表す値を格納しており、各フィールドは、該当ＬＵがユーザデータを格納していれば「ユーザデータ」を示す値を格納し、制御情報を格納していれば「制御情報」を示す値を格納する。これらの値は、例えば、「０」、「１」でよい。
【００６８】
図８は、先頭ポインタ管理テーブル１４０の一例を示すブロック図である。先頭ポインタ管理テーブル１４０は、複数のポインタリスト１４１を持ち、それぞれがキャッシュメモリ１０４上に作成された各パーティションに対応している。ポインタリスト１４１は、対応するパーティションのパーティション番号１２１、フリーキュー先頭ポインタ１４３、クリーンキュー先頭ポインタ１４４、ダーティキュー先頭ポインタ１４５の値を格納している。
【００６９】
第１の実施形態では、キャッシュパーティションの記憶領域は複数のセグメントで構成されており、制御プログラム１０８は、キャッシュパーティションをセグメント単位で管理し、異なる状態のセグメントを異なるキューで管理している。セグメントの状態は、例えばセグメントに何も格納されていなければ「フリー」、セグメントにデータが格納されており、そのデータと同じものがＬＵに格納されていれば「クリーン」、ＬＵに同じものが格納されていなければ「ダーティ」である。
【００７０】
ＬＵからデータが格納されたばかりのセグメントは「クリーン」であり、データが更新されれば「ダーティ」へ遷移する。「ダーティ」なセグメントは、ＬＵへのデステージングにより、「クリーン」又は「フリー」へと遷移する。
【００７１】
制御プログラム１０８（コントローラ１０１）は、各キューをＬＲＵ（Ｌｅａｓｔ  Ｒｅａｃｅｎｔｌｙ  Ｕｓｅｄ）やＦＩＦＯなどのアルゴリズムで管理する。制御プログラム１０８は、ポインタリスト１４１の各キューの先頭ポインタを参照することで、キューへアクセスする。制御プログラム１０８は、このように各キューを管理することで、キャッシュパーティションと不揮発性記憶領域との間において動的にデータを置換する。
【００７２】
図８のようにパーティション毎に独立したキューで管理することで、パーティションは相互に性能における影響を与えることがなくなる。なお本実施形態のポインタリスト１４１は３種類のキューを持つが、本発明においてはキューの種類はこの限りではない。
【００７３】
制御プログラム１０８は、フリーセグメントに、不揮発性記憶領域からの新たなデータを格納する（コピーする）。制御プログラム１０８は、クリーンセグメント及びダーティセグメントを参照し、その格納データを更新するが、新たなデータ（不揮発性記憶領域における別のアドレスのデータ）を格納（ステージング）しない。
【００７４】
一例において、制御プログラム１０８は、フリーセグメントの数が規定数（０を含む）以下となると、クリーンキューを更新して、クリーンセグメントの一部又は全部をフリーセグメントに変える。例えば、現在のフリーセグメント数と規定数との差分の数のクリーンセグメントを、フリーセグメントに再設定する。現在のクリーンセグメント数が差分数に達していない場合、全てのクリーンセグメントをフリーにする。フリーにするクリーンセグメントの選択方法は、クリーンキューのアルゴリズムに従う。
【００７５】
制御プログラム１０８は、例えば、ダーディセグメントが規定数以上となった場合又はクリーンセグメントが規定数以下となると、ダーティセグメントのデステージングを行う。制御プログラム１０８は、ダーティセグメントをクリーンセグメントに再設定する。制御プログラム１０８は、デステージングを他の契機で実行してもよい。又、ダーティセグメントをフリーセグメントに再設定してもよい。
【００７６】
制御プログラム１０８は、このように、キャッシュパーティション内でデータを格納しているセグメントをフリーセグメントに設定し、新たな不揮発性記憶領域のデータをフリーセグメントにコピーすることで、キャッシュ領域と不揮発性記憶領域との間でデータを動的に置換する。制御プログラム１０８は、他の方法によりデータを置換してもよい。
【００７７】
例えば、制御プログラム１０８は、クリーンセグメント及びダーティセグメントにＬＵからの新たなデータ（別のアドレスのデータ）をコピー（ステージング）してもよい。ダーディセグメントに新たなデータを格納する場合、デステージングを先に行う。若しくは、制御プログラム１０８は、全てのセグメントを同一のキューにより管理し、規定のアルゴリズムに従って、ＬＵのデータをコピーするセグメントを決定してもよい。
【００７８】
図９は、パーティション割当管理画面１７０を示すブロック図である。パーティション割当管理画面１７０は、ストレージシステム１００を管理するための管理コンピュータ１１の表示装置が表示する。ストレージ管理者は、本画面を見ながら、管理コンピュータ１１の入力装置（例えば、キーボード及びマウス）を使用して、パーティションとＬＵの間の割当を操作する。又、管理者は、管理コンピュータ１１の入出力装置を通じて新しいパーティションの作成も可能である。
【００７９】
本例において、パーティション割当管理画面１７０は、パーティション割当状況表示テーブル１７１、ＣＭ残容量表示部１７４、新規パーティション作成ボタン１７５を含む。パーティション割当状況表示テーブル１７１は、パーティション番号１２１、割当済みＬＵ番号１２４、容量１２３のカラムを有し、この情報は、図６のパーティション割当管理テーブル１２０から抽出したそのテーブル１２０の一部の情報である。
【００８０】
ストレージ管理者は、パーティション割当状況表示テーブル１７１を見ることで、パーティションへの割当状況を確認することができる。ＣＭ残容量表示部１７４は、キャッシュメモリ１０４の総容量からパーティションに割り当てた総容量を引いた数値（未定義領域の総容量値）を示し、新たにパーティションを作成する際に割り当て可能なキャッシュメモリ１０４の容量を示す。新規パーティション作成ボタン１７５は、新たにパーティションを作成し、パーティションにＬＵを割り当てる処理に移るためのボタンである。
【００８１】
図１０は、パーティションにＬＵを新たに割り当てる処理のフローチャートである。本フローチャート及び以降のフローチャートは、ストレージ管理者や制御プログラム１０８の指示に従ってコントローラ１０１内のプロセッサ１０３（制御プログラム１０８）が処理を行うものとして記述するが、本発明においてはこの限りではない。なお本フローチャートは、新規パーティション作成ボタン１７５が押された契機で開始してよいし、ストレージ管理者が別のインタフェースを用いて本処理を開始してもよい。
【００８２】
まずプロセッサ１０３は、パーティションを新たに作成する必要があるかどうか判定する（ステップ１００１）。本実施形態はパーティションをＬＵに割り当てるため、未割当であるパーティションが存在していなければ、パーティションの割当が不可能である。あるいは、未割当であるパーティションが存在していても、その容量が不足している場合は、新規にパーティションを作成する。
【００８３】
ステップ１００１は、パーティション割当管理画面１７０を通じてストレージ管理者に問い合わせてもよい。ステップ１００１の判定結果がＹＥＳである場合、プロセッサ１０３はパーティション作成工程（ステップ１００２）に進む。ステップ１００２は、図１１を参照して後述する。
【００８４】
ステップ１００１の判定結果がＮＯである場合、又はステップ１００２の処理終了後、プロセッサ１０３は割り当てるパーティションを選択する（ステップ１００３）。プロセッサ１０３は、ストレージ管理者に割り当てるパーティションの番号を指定させてもよいし、プロセッサ１０３が自動的にパーティションを選択してもよい。次にプロセッサ１０３は、割り当てるパーティションのセグメントサイズを指定する（ステップ１００４）。
【００８５】
ステップ１００４は、パーティション割当管理画面１７０を通じてストレージ管理者に問い合わせてもよいし、プロセッサ１０３が自動的に指定してもよい。最後にプロセッサ１０３は、本処理による更新を基にストレージ管理情報テーブル１１０を更新し（ステップ１００５）、この処理を終了する。
【００８６】
図１１は、制御プログラム１０８に従うプロセッサ１０３がパーティションを新規に作成する処理のフローチャートであり、図１０のステップ１００２の詳細である。まずプロセッサ１０３は、新たに作成するパーティションの番号を指定する（ステップ１１０１）。このとき指定する番号は、既に割り振られている番号以外とする。次にプロセッサ１０３は、管理コンピュータ１１に指定された作成するパーティションの容量を特定する（ステップ１１０２）。
【００８７】
次にプロセッサ１０３は、ステップ１１０２にて指定された容量が、ＣＭ残容量表示部１７４が表示している容量以下であるかどうかを判定する（ステップ１１０３）。ステップ１１０３の判定結果がＮＯであれば、プロセッサ１０３は管理コンピュータ１１に対してエラーメッセージを送信してＣＭ残容量表示部１７４が示す値以下の容量を指定するよう促し（ステップ１１０４）、ステップ１１０２へ戻る。管理コンピュータ１１は、その表示装置により、上記エラーメッセージを表示する。
【００８８】
ステップ１１０３の判定結果がＹＥＳであれば、プロセッサ１０３はステップ１１０１、ステップ１１０２で指定された番号と容量のパーティションを新たに作成する（ステップ１１０５）。最後にプロセッサ１０３は、本処理による更新を基にストレージ管理情報テーブル１１０を更新し（ステップ１１０６）、この処理を終了する。
【００８９】
図１２は、キャッシュパーティションの容量を変更する処理のフローチャートである。キャッシュパーティションの容量を拡大すると、キャッシュメモリパーティション上に存在するユーザデータ又は制御情報量が増えるため、ＨＤＤなど不揮発記憶媒体へのアクセス率が減少し、Ｉ／Ｏ性能の向上が期待できる。
【００９０】
プロセッサ１０３は、制御プログラム１０８に従って、あるいはストレージ管理者からの要求に応じて、キャッシュパーティションの容量を変更する。まずプロセッサ１０３は、管理コンピュータ１１から、容量を変更するパーティションの指定番号を取得する（ステップ１２０１）。次にプロセッサ１０３は、管理コンピュータ１１からの指示を参照して、パーティションの容量を拡大するか判定する（ステップ１２０２）。拡大する場合（ステップ１２０２の判定結果がＹＥＳ）は、プロセッサ１０３は、指定されている拡大後のパーティション容量を特定する（ステップ１２０３）。
【００９１】
次にプロセッサ１０３は、ステップ１２０３にて特定した拡大後のパーティション容量から増加容量（指定増加容量）を決定し、それがＣＭ残容量表示部１７４の示す値以下であるか判定する（ステップ１２０４）。ステップ１２０４の判定結果がＮＯの場合、プロセッサ１０３は管理コンピュータ１１にＣＭ残容量以下の容量を指定するように促すエラーメッセージを送信して（ステップ１２０５）、ステップ１２０３へ戻る。管理コンピュータ１１は、受信したエラーメッセージを表示装置の画面に表示する。
【００９２】
ステップ１２０４の判定結果がＹＥＳの場合、プロセッサ１０３は、パーティション容量を指定された数値に変更する（ステップ１２０６）。容量増加の場合、プロセッサ１０３は、指定されたパーティションに未定義領域から指定された容量を追加する。パーティション割当管理テーブル１２０の容量１２３及びＣＭ残容量表示部１７４の値を更新し（ステップ１２０７）、処理を終了する。
【００９３】
ステップ１２０２の判定結果がＮＯの場合（容量の縮小の場合）、プロセッサ１０３は管理コンピュータ１１から指示された縮小後の容量を特定し、それから縮小容量（指定縮小容量）を決定する（ステップ１２０８）。プロセッサ１０３は、ステップ１２０６へと進み、容量縮小の場合、指定されたパーティションから指定された容量を未定義領域に追加する。
【００９４】
好ましい構成において、コントローラ１０１（プロセッサ１０３又は他の回路）は、パーティション毎の性能を監視し、システム全体の性能が最適化されるようにパーティションの最適容量を計算し、ストレージ管理者に対して推奨してもよい。パーティションの性能を表す好ましい数値は、キャッシュヒット率である。プロセッサ１０３は、算出された最適容量を管理コンピュータ１１に送信し、管理コンピュータ１１は、その値を表示装置において表示する。
【００９５】
例えば、プロセッサ１０３は、各パーティションのキャッシュヒット率と、各パーティションに対して設定された値とを比較する。プロセッサ１０３は、キャッシュヒット率が設定値に達していないパーティションの最適容量を現在の値よりも大きい値に設定する。プロセッサ１０３は、キャッシュヒット率が設定値よりも大きくその差分が規定値以上のパーティションの最適容量を、現在値よりも小さい値に設定してもよい。
【００９６】
パーティションの設定値は、パーティションの種類毎又はパーティション毎に異なっていてもよい。制御情報常駐パーティション２３０の制御情報は高速なアクセスが要求されるため、その容量は縮小しないことが好ましい。管理コンピュータ１１は、コントローラ１０１からパーティションのキャッシュヒット率を受信し、それらを表示装置において表示してもよい。ストレージ管理者は、その数値から、容量変更すべきパーティションを選択することができる。
【００９７】
指定パーティションの指定増加容量がＣＭ残容量表示部１７４の値未満である場合、プロセッサ１０３は、（管理コンピュータ１１からの指示により）他のパーティションの容量を小さくすることで、増加容量を補ってもよい。プロセッサ１０３は、図１２に示すフローチャートに従って特定のパーティションの容量を小さくする処理を行った後、同様のフローチャートに従って、目的のパーティションの容量を増加する。
【００９８】
管理コンピュータ１１からコントローラ１０１への容量変更の要求は、管理コンピュータ１１上で動作するプログラムが行ってもよい。制御プログラム１０８は、管理コンピュータ１１からの要求というイベントとは異なるイベントに応じて容量変更をしてもよい。例えば、上述のように、特定のキャッシュパーティションのキャッシュヒット率が設定値未満となるイベントに応じて、制御プログラム１０８は、自動的にパーティション容量を変更してもよい。制御プログラム１０８は、上記新規キャッシュパーティション作成（図１１を参照）においても、既存パーティションの容量を変化させることができる。
【００９９】
次に、本実施形態における先読み処理を説明する。ストレージシステム１００の制御プログラム１０８は、ホストコンピュータ１０が発行した参照（読み出し）要求が、ユーザデータ格納ＬＵ３０１の連続するアドレス上のデータを対象としていた場合に、次のアドレスのデータを予めステージングしておく、いわゆる先読み処理を実施することがある。先読み処理によって、特にシーケンシャルアクセス性能の向上が期待できる。
【０１００】
本実施形態において、制御情報の先読み処理は、有効な性能向上手段である。制御プログラム１０８は、ストレージシステム１１０の処理（例えばスナップショットを使用した復旧処理）において制御情報格納ＬＵ３０２から必要な制御情報を読み出し、制御情報キャッシュパーティション２２０に格納する（ステージング）。それに付随して、その後の工程で必要と予測される制御情報を、予め制御情報格納ＬＵ３０２から読み出し、制御情報キャッシュパーティション２２０に格納する（ステージング）。
【０１０１】
例えば、図３のスナップショット管理テーブル５０を使用して、ＬＵを以前の状態にリストアする場合、ストレージシステム１００は、特定の世代番号５６が示す世代の差分ビットマップ管理テーブル５３を連続的に参照し、差分ビットマップ５８が「１」であるページを以前のデータに復旧する。
【０１０２】
制御プログラム１０８は、管理コンピュータ１１からリストアの指示を受けると、この処理に必要な（と予測される）制御情報を予め制御情報キャッシュパーティション２２０に格納しておく。また、制御プログラム１０８は制御情報のアクセスパターンを予見又は学習し、必要と予測される制御情報を予め制御情報キャッシュパーティション２２０に格納しておいてもよい。
【０１０３】
他の例において、定期的にバックアップを取得するプログラムが動作していれば、制御プログラム１０８は、バックアップ時刻の前に、バックアップ用の制御情報を予め制御情報格納ＬＵ３０２からパーティション２２０に格納（ステージング）しておいてよい。
【０１０４】
制御プログラム１０８は、このような制御情報の先読みと、パーティション容量の変更を組み合わせて実行してもよい。例えば、制御プログラム１０８は、バックアップ時刻が近付いてきたらパーティション容量を拡大し、より多くのバックアップ用制御情報をステージングしておいてよい。繰り返しになるが、これら制御情報の先読みやパーティション容量の変更は、ストレージ管理者が指定してもよいし、制御プログラム１０８が自動的に決定してもよい。もしくは、制御プログラム１０８は、ストレージ管理者に対して推奨するメッセージを、管理コンピュータ１１に出力してもよい。
【０１０５】
次に本実施形態における、制御情報への保証コードの付与について説明する。まず、保証コードが付与される仕組みについて、図１３を用いて簡単に説明する。図１３は、第１の実施形態においてユーザデータに保証コードが付与される様子を示すブロック図である。第１の実施形態のようなストレージシステム１００では、ホストコンピュータ１０から送信されたユーザデータ１９０は、キャッシュメモリ１０４に一旦格納された後、ユーザデータ格納ＬＵ３０１に格納される。
【０１０６】
このとき、コントローラ１０１は、ユーザデータ１９０がキャッシュメモリ１０４に一旦格納された時点で、ユーザデータ１９０に保証コード１９１を付与する。保証コード１９１は、ユーザデータ１９０の真正性を保証するためのコードであり、ＬＲＣ（Ｌｏｎｇｉｔｕｄｉｎａｌ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）コードなどのビット演算による方式などが用いられる。典型的には、コントローラ１０１の回路が保証コード１９１を生成するが、制御プログラム１０８に従ってプロセッサ１０３がそれを生成してもよい。
【０１０７】
コントローラ１０１は、ユーザデータ１９０が読み出される際に保証コード１９１を参照することで、データが破壊されていないか確認することができる。データの破壊は、ＬＵ（不揮発記憶領域）にデータを書き込む際に、制御プログラム１０８のバグや、ハードウェア部品の故障などによって引き起こされることがある。このように、ストレージシステム１００は、ユーザデータに保証コードを付与し、それをチェックすることで、ホストコンピュータ１０と送受信するユーザデータの真正性を確保し、装置としての信頼性を高めている。
【０１０８】
好ましい構成において、コントローラ１０１は、制御情報をＬＵに格納するため、制御情報に保証コード１９１を付与する。ただし、制御情報とユーザデータ１９０とは、更新の容量単位が異なる。一般的に、制御プログラム１０８は、５１２バイト程度の単位でユーザデータ１９０を参照及び更新する。
【０１０９】
この場合、コントローラ１０１は、ユーザデータの５１２バイトの全ビットをＸＯＲ演算することによって４バイトや８バイト程度のＬＲＣコードを生成し、ユーザデータに付与した後に、ユーザデータ格納ＬＵ３０１に格納する。つまり、５１２バイトのユーザデータに４バイトや８バイト程度の保証コードが付与され、５１６バイトや５２０バイトのデータ長でＬＵ３０１に格納される。
【０１１０】
このため、キャッシュメモリやＨＤＤの最小のアクセス単位は、５１６バイトや５２０バイトである。一方、制御プログラム１０８は、一度の処理で、数ビット程度の制御情報の参照又は更新しかしない場合がある。わずか数ビットの更新の度に５１２バイトの制御情報の全ビットを演算することは無駄な処理が多く、ストレージシステム１００の性能低下を招いてしまう。
【０１１１】
そこで、制御情報のように数ビット程度の更新時にＬＲＣコードを効率よく生成する方法を、図１４に示す。本方法は、ＬＲＣによる保証コードの生成を効率よく実施する。まず、更新される前の制御情報（更新前制御情報１９３）と、更新された後の制御情報（更新後制御情報１９４）を比較し、更新されたビット列を含むブロックを抽出する。
【０１１２】
本方法は、さらに、抽出した更新前のブロックと更新後のブロックとの間の差分を示す変更ブロック、そして更新前制御情報１９３に付随している保証コード（更新前保証コード１９５）を用いて、更新後の保証コード（更新後保証コード１９６）を生成する。保証コード生成回路１９７は、入力された、更新前制御情報１９３の選択されたブロック、更新後制御情報１９４の選択されたブロック及び更新前の保証コード１９５から、更新後保証コード１９６を生成する。
【０１１３】
以上の方法により、数ビットから数バイト程度の更新においても、保証コードを低負荷で生成することが可能となる。なお保証コード生成回路１９７は、コントローラ１０１内のハードウェア部品であってもよいし、制御プログラム１０８の機能の一部であってもよい。
【０１１４】
以上述べたように、第１の実施形態は、ストレージシステム１００のキャッシュメモリ１０４を複数のパーティションに分割し、１つ以上のパーティションに制御情報（を格納するＬＵの領域）を割り当てる。ストレージシステム１００は、そのキャッシュパーティションと制御情報を格納したＬＵとの間で動的にデータの入れ替えを行うことで、大容量の制御情報を利用可能とし、かつ、ユーザデータの操作に影響されること無く安定した性能を維持することができる。
【０１１５】
＜第２の実施形態＞
以下において、第２の実施形態について図１５乃至図２０を用いて説明する。本実施形態においては、主に、第１の実施形態との差異を説明する。図１５は、ストレージシステムの一例を示すブロック図である。第１の実施形態とは、ユーザデータ格納ＬＵ３０１と制御情報格納ＬＵ３０２がプールボリューム３０３と通常ＬＵ３０４となっている点が異なる。
【０１１６】
プールボリューム３０３は、Ｄｙｎａｍｉｃ  Ｐｒｏｖｉｓｉｏｎｉｎｇと呼ばれる機能によって実現される仮想的な記憶領域であり、複数の不揮発性実領域（実的なＬＵ）を、仮想的に単一の記憶領域とみなしたものである。コントローラ１０１は、１つのプールボリューム３０３を複数の仮想的なＬＵ（ホストに対する仮想ボリューム）と関連付けることができ、仮想的なＬＵの記憶領域は、動的にプールボリューム３０３から割り当てられる。
【０１１７】
本明細書において、プールボリューム３０３から割り当てられる記憶領域の単位を、チャンクと呼ぶ。好ましくは、複数のチャックは、１つのパリティ列（パリティの作成単位）において混在しない。つまり、１つのパリティ列は１つのチャンクに格納される。
【０１１８】
第１の実施形態は、ユーザデータをユーザデータ格納ＬＵ３０１に書き込み、制御情報を制御情報格納ＬＵ３０２に書き込む。これに対して、第２の実施形態は、ユーザデータと制御情報を共に、プールボリューム３０３に書き込む。このように、第２の実施形態は、チャンク単位の記憶領域をユーザデータ又は制御情報の格納に用いる。これにより、第１の実施形態のように予め決まった容量のＬＵを用意しておく必要がないため、制御情報の格納に用いる領域の容量を削減することが可能となり、ストレージシステム１００の容量効率の向上が期待できる。
【０１１９】
なお、第２の実施形態において、プールボリューム３０３以外に通常ＬＵ３０４を同時に用いてもよい。また第２の実施形態において、通常ＬＵ３０４も制御情報を格納してもよい。この点は第１の実施形態で説明しており、重複する部分の説明を省略する。
【０１２０】
図１６は、第２の実施形態のキャッシュ管理の概要を示すブロック図である。図１６は、第２の実施形態におけるユーザデータと制御情報の格納の概念を示している。キャッシュメモリ１０４上に複数のキャッシュパーティションが存在し、制御プログラム１０８がユーザデータと制御情報をそれぞれパーティションに割り当て、それらを参照及び更新する点は、第１の実施形態と同様である。第２の実施形態では、ユーザデータと制御情報が、それぞれチャンク３０５に格納される点が第１の実施形態と異なる。
【０１２１】
制御情報を格納するチャンク３０５は、ユーザデータを格納するチャンクと同一のプールボリューム３０３から割り当ててよいが、管理の容易性から、ユーザデータと制御情報は別々のチャンク３０５に格納することが望ましい。
【０１２２】
図１７は、第２の実施形態におけるストレージ管理情報テーブル１１０の構成例を示している。第１の実施形態のストレージ管理情報テーブル１１０とは、チャンク管理テーブル１５０が追加されている点と、ＬＵ管理テーブル１８０が第１実施形態のＬＵ管理テーブル１３０と異なる構成を有する点が異なる。
【０１２３】
図１８は、第２の実施形態におけるＬＵ管理テーブル１８０の構成例を示している。第１の実施形態のＬＵ管理テーブル１３０とは、割当プール番号／チャンク番号１８１のカラムが追加されている点が異なる。第２の実施形態において、仮想的なＬＵはプールボリューム３０３のチャンク３０５を記憶領域として動的に利用する。
【０１２４】
制御プログラム１０８は、複数のプールボリューム３０３からチャンク３０５を仮想的なＬＵに割り当ててもよい。そこで、制御プログラム１０８は、割当プール番号／チャンク番号１８１によって、仮想的なＬＵを構成するプールボリューム３０３とチャンク３０５を管理する。仮想的なＬＵにチャンク３０５を追加する場合は、制御プログラム１０８は、新たな割当プール番号／チャンク番号１８１を追加する。
【０１２５】
第２の実施形態においては、ストレージシステム１００は、仮想的なＬＵだけでなく通常ＬＵ３０４も備えていてもよい。通常ＬＵ３０４を利用する場合、割当プール番号／チャンク番号１８１のフィールドは、例えば「−」を示す値を格納し、仮想ＬＵと区別される。
【０１２６】
好ましい構成において、制御情報キャッシュパーティション２２０が格納する制御情報は、プールボリューム３０３において複数のＲＡＩＤグループに分散して格納される。ＲＡＩＤグループは、ＲＡＩＤを構成する複数のデータ記憶デバイスからなるグループである。１つのチャンク３０５が１つのＲＡＩＤグループ内記憶領域により構成されている場合、複数のチャンク３０５が、制御情報キャッシュパーティション２２０に関連付けられ、本パーティション２２０に格納されうる制御情報を、格納する。
【０１２７】
このように、複数のＲＡＩＤグループが、制御情報キャッシュパーティション２２０に関連付けられた制御情報を格納することで、パーティション２２０内に格納されていない制御情報へのアクセスが１つのＲＡＩＤグループに集中することを避けることができ、制御情報へのアクセス遅延を低減することができる。
【０１２８】
第２の実施形態では制御情報をプールボリューム３０３のチャンク３０５に格納しているが、プールボリューム３０３を実現するＤｙｎａｍｉｃ  Ｐｒｏｖｉｓｉｏｎｉｎｇ機能の制御情報をチャンク３０５に格納してしまうと、Ｄｙｎａｍｉｃ  Ｐｒｏｖｉｓｉｏｎｉｎｇ機能が必要としている制御情報を格納しているチャンク３０５の場所が不明となる恐れがある。これを防ぐため、Ｄｙｎａｍｉｃ  Ｐｒｏｖｉｓｉｏｎｉｎｇ機能の制御情報は通常ＬＵ３０４に格納する、又は特定のチャンクのみに格納するようにしてもよい。
【０１２９】
図１９は、第２の実施形態におけるチャンク管理テーブル１５０の構成例を示すブロック図である。チャンク管理テーブル１５０は、チャンク３０５の割当状況を管理するテーブルである。チャンク管理テーブル１５０は、プールボリューム番号／チャンク番号１８１、割当パーティション番号１３３、割当済みＬＵ番号１２４、空き容量１５１、格納データ種別１３４のカラムを含む。
【０１３０】
プールボリューム番号／チャンク番号１８１のフィールドは、チャンク３０５を一意に認識するための情報を格納する。その値は、プールボリューム３０３の番号とチャンク３０５の番号の組み合わせでよい。割当パーティション番号１３３のフィールドは、該当チャンク３０５が割り当てられているキャッシュパーティション番号を格納する。
【０１３１】
チャンク３０５にユーザデータも制御情報も割り当てられていない場合は、そのチャンク３０５は、パーティションにも割り当てられないため、割当パーティション番号１３３のフィールドは、例えば、「−」を示す値を格納する。割当ＬＵ済み番号１２４のフィールドは、該当チャンク３０５が割り当てられている仮想的なＬＵの番号を示す値を格納する。ＬＵに割り当てられていないチャンク３０５のフィールドは、例えば、「−」を示す値を格納する。
【０１３２】
空き容量１５１のフィールドは、該当チャンク３０５の残り利用可能容量を示す値を格納する。格納データ種別１３４のフィールドは、該当チャンク３０５に格納されているデータの種類を示す情報を格納する。例えば、ユーザデータが格納されていれば「ユーザデータ」を示す値を格納し、制御情報が格納されていれば「制御情報」を示す値を格納する。
【０１３３】
図２０は、チャンク３０５を制御情報格納に割り当てる処理のフローチャートを示す。プロセッサ１０３は、制御プログラム１０８に従ってこの処理を行う。プロセッサ１０３は、まず、制御情報を格納するために新たにチャンク３０５を割り当てる必要があるか否か判定する（ステップ１３０１）。判定は、例えば、格納する制御情報の容量と、制御情報の格納に既に割り当てられているチャンク３０５の空き容量１５１を比較し、空き容量１５１が格納する制御情報の容量未満の場合、新たなチャンクを割り当てることを決定する。
【０１３４】
ステップ１３０１の判定がＹＥＳの場合、プロセッサ１０３は割り当てるチャンクを選択する（ステップ１３０２）。このとき割り当てるチャンク３０５は、チャンク管理テーブル１５０を参照して未割当であるチャンク３０５を選択してもよいし、ストレージ管理者に選択させてもよい。
【０１３５】
次にプロセッサ１０３は、ステップ１３０２にて選択したチャンク３０５に制御情報を格納し（ステップ１３０３）、さらに、ストレージ管理情報テーブル１１０を更新し（ステップ１３０４）、この処理を終了する。ステップ１３０１での判定結果がＮＯの場合、プロセッサ１０３は、新たなチャンク３０５を割り当てることなく、割当済みのチャンク３０５に制御情報を格納し（ステップ１３０５）、ステップ１３０４に移る。
【０１３６】
＜第３の実施形態＞
以下、第３の実施形態について図２１乃至図２４を参照して説明する。本実施形態においては、第１の実施形態及び第２の実施形態との差異を主に説明する。図２１は、ストレージシステムの一例を示すブロック図である。本実施形態のストレージシステムは、ＨＤＤやＳＳＤなど複数種類のデータ記憶デバイスによるプールボリューム３０６、３０７及び通常ＬＵ３０８、３０９を備えている点において、第１及び第２の実施形態と異なる。
【０１３７】
ストレージシステム１００は、ＨＤＤやＳＳＤなど複数種類の不揮発記憶デバイスを備え、デバイスの特性に応じて格納するユーザデータの種別を分ける。高いアクセス性能が要求されるユーザデータをアクセス速度が速い（アクセス性能が高い）ＳＳＤに格納することで、ストレージシステム１００のアクセス性能が向上する。又、参照頻度の低いユーザデータを、アクセス性能が劣るがビット単価の低いＨＤＤに格納することで、ストレージシステム１００の装置コストを低減することができる。
【０１３８】
以下においては、ＨＤＤとＳＳＤの２種類のデータ記憶デバイスを備えるストレージシステム１００を説明するが、アクセス性能が異なるデータ記憶デバイスの種類は、これらに限定されない。
【０１３９】
図２１において、プールボリューム（ＳＳＤ）３０６は、ＳＳＤで構成されたプールボリューム３０３である。プールボリューム（ＨＤＤ）３０７は、ＨＤＤで構成されたプールボリューム３０３である。同様に通常ＬＵ（ＳＳＤ）３０８は、ＳＳＤで構成された通常ＬＵ３０４である。通常ＬＵ（ＨＤＤ）３０８は、ＨＤＤで構成された通常ＬＵ３０４である。
【０１４０】
図２２は、第３の実施形態におけるＬＵ管理テーブル１６０の一例を示すブロック図である。第３の実施形態におけるＬＵ管理テーブル１６０において、第２の実施形態におけるＬＵ管理テーブル１３０に、メディア種別１６１及び対応ユーザデータＬＵ番号１６２のカラムが追加されている。
【０１４１】
メディア種別１６１のフィールドは、該当ＬＵが、ＳＳＤの記憶領域で構成されていれば「ＳＳＤ」を示す値を格納し、ＨＤＤの記憶領域で構成されていれば「ＨＤＤ」を示す値を格納する。該当ＬＵに対してプールボリューム（ＳＳＤ）３０６の領域が割り当てられている場合、そのフィールドは、「ＳＳＤ」を示す値を格納する。該当ＬＵに対してプールボリューム（ＨＤＤ）３０７の領域が割り当てられていれば、「ＨＤＤ」を示す値を格納する。
【０１４２】
対応ユーザデータＬＵ番号１６２のフィールドは、該当ＬＵに制御情報が格納されている場合に、その制御情報がどのＬＵのユーザデータに関する制御情報であるかを示している。例えばＬＵ番号０のＬＵにおけるユーザデータの制御情報がＬＵ番号１０のＬＵに格納されていれば、ＬＵ番号１０のレコードにおける対応ユーザデータＬＵ番号１６２のフィールドは、「０」を格納する。対応ユーザデータＬＵ番号１６２のフィールドは、複数のＬＵ番号を示す値を格納してもよい。
【０１４３】
第３の実施形態のように、複数種類の不揮発記憶デバイスを利用するストレージシステム１００は、制御情報を格納する不揮発性記憶デバイスを使い分ける必要がある。例えば、高いアクセス性能が要求されるユーザデータを高速なＳＳＤが格納しているが、そのユーザデータのアクセスに必要とされる制御情報を低速なＨＤＤが格納していると、制御情報のアクセス時にＨＤＤへのアクセスが発生し、ＳＳＤに格納したユーザデータへのアクセス性能が、低速なＨＤＤ並みに減少する恐れがある。
【０１４４】
これを防ぐためには、ユーザデータに関連付けられている制御情報を、少なくともそのユーザデータが格納されているデータ記憶デバイスと同等以上のアクセス性能を備えるデータ記憶デバイスに格納するよう考慮する必要がある。このとき、ストレージ管理者が制御情報を格納するデータ記憶デバイスを選択してもよいし、コントローラ１０１が自動的に制御情報の格納先を選択してもよい。
【０１４５】
以下において、コントローラ１０１が自動的に制御情報の格納先を選択する処理のフローチャートを図２３に示す。図２３は第３の実施形態における、制御情報の格納先の選択処理の一例を示すフローチャートである。プロセッサ１０３は、制御プログラム１０８に従ってこの処理を行う。
【０１４６】
まず、プロセッサ１０３は、不揮発記憶領域に格納する制御情報を選択する（ステップ１４０１）。次にプロセッサ１０３は、ステップ１４０１で選択した制御情報が関連するユーザデータが、ＳＳＤに格納されているか否か判定する（ステップ１４０２）。その判定において、プロセッサ１０３は、ＬＵ管理テーブル１６０におけるユーザデータ対応ＬＵ番号１６２を参照したのち、メディア種別１６１を参照する。
【０１４７】
ステップ１４０２での判定結果がＹＥＳの場合、プロセッサ１０３は制御情報の格納場所にＳＳＤの記憶領域で構成されたＬＵ又はＳＳＤの記憶領域で構成されたプールボリュームのチャンクを選択する（ステップ１４０３）。ステップ１４０２での判定結果がＮＯの場合、プロセッサ１０３は制御情報の格納場所にＨＤＤの記憶領域で構成されたＬＵ、又はＨＤＤの記憶領域で構成されたプールボリュームのチャンクを選択する（ステップ１４０４）。最後にプロセッサ１０３は、ストレージ管理情報テーブル１１０を更新し（ステップ１４０５）、本処理を終了する。
【０１４８】
なお、本処理の開始タイミングは、前述した同期デステージング、又は非同期デステージングの開始時でよい。ユーザデータの格納場所は、ユーザ、管理者又はコントローラ１０１によって変更される場合があるため、ユーザデータの格納場所の変更を契機として、制御プログラム１０８は本処理を開始してもよい。制御プログラム１０８は、定期的に、パーティション上のユーザデータと制御情報の格納場所を確認し、それぞれの格納場所が異なっている場合に自動的に本処理を開始してもよい。
【０１４９】
好ましい構成において、制御プログラム１０８は、制御情報が関連するユーザデータの格納先デバイス種別に基づき、予め設定されている優先度に従って所定の制御情報を優先的に置換対象データとする。例えば、高性能なＳＳＤに格納されているユーザデータに関連する制御情報と、低性能なＨＤＤに格納されているユーザデータに関連する制御情報では、前者よりも後者を優先的に置換対象データとする。制御プログラム１０８は、データを置換対象データとすると、そのデータを消去してもよく、もしくは、キューのエントリを変更して（例えばクリーンセグメントをフリーセグメントにして）、データの状態を変えてもよい。
【０１５０】
高性能なＳＳＤに格納されているユーザデータに関する制御情報をなるべくキャッシュメモリに残すことで、ＳＳＤに格納されているユーザデータへのアクセス性能が、制御情報のアクセスによって低下しないようにすることができる。
【０１５１】
図２４は、第３の実施形態において、ＳＳＤに格納されているユーザデータに関する制御情報を優先的にキャッシュメモリ１０４に残す置換処理のフローチャートである。プロセッサ１０３は、制御プログラム１０８に従って、この処理を行う。以下においては、１つのパーティションにおいて、ＳＳＤに格納されているユーザデータに関する制御情報とＨＤＤに格納されている制御情報のそれぞれに、ダーティキューを備える構成例を説明する。まず、プロセッサ１０３は、全てのダーティキューに存在するエントリ数をカウントし、デステージング開始閾値と比較する（ステップ１５０１）。デステージング開始閾値は、デステージングを開始する判断基準の閾値であり、パーティション上のダーティ状態なデータ又はダーティ状態な制御情報の総数である。
【０１５２】
一般的なストレージシステムでは、ダーティ状態なユーザデータや制御情報は、不揮発記憶媒体に未反映であるため、キャッシュメモリ１０４への電源が遮断されると、データロストとなってしまう。そこで、ある程度ダーティなユーザデータや制御情報がキャッシュメモリ１０４上に溜まったら、プロセッサ１０３は、積極的に不揮発記憶媒体に反映させる、いわゆるデステージングを開始する。
【０１５３】
ステップ１５０１での判定結果がＮＯであれば、プロセッサ１０３は処理を終了する。ステップ１５０１での判定結果がＹＥＳの場合、プロセッサ１０３は、ＨＤＤに格納されているユーザデータに関する制御情報がダーティキューに存在するか否か判定する（ステップ１５０２）。ステップ１５０２での判定結果がＮＯの場合、後述するステップ１５０５へと移る。ステップ１５０２での判定結果がＹＥＳの場合、プロセッサ１０３はＨＤＤに格納されているユーザデータに関するダーティ状態な制御情報を不揮発性記憶領域に反映する（デステージング）（ステップ１５０３）。
【０１５４】
次に、プロセッサ１０３は、再度、ダーティキューに存在するエントリ数をカウントし、デステージング開始閾値と比較する（ステップ１５０４）。ステップ１５０４での判定結果がＮＯの場合、プロセッサ１０３はストレージ管理情報テーブル１１０を更新し（ステップ１５０７）、処理を終了する。ステップ１５０４での判定結果がＹＥＳの場合、プロセッサ１０３は、ＳＳＤに格納されているユーザデータに関する制御情報がダーティキューに存在するか判定する（ステップ１５０５）。
【０１５５】
ステップ１５０５での判定結果がＮＯの場合、プロセッサ１０３は、ステップ１５０７へと移る。ステップ１５０５での判定結果がＹＥＳの場合、プロセッサ１０３はＳＳＤに格納されているユーザデータに関するダーティ状態な制御情報を不揮発性記憶領域に反映する（デステージング）。最後にプロセッサ１０３は、ステップ１５０７へと移り、本処理を終了する。本処理の開始タイミングは、同期デステージング又は非同期デステージング開始時としてよい。
【０１５６】
図８を参照して説明したように、制御プログラム１０８は、フリーセグメントに新たなデータを不揮発性記憶領域から書き込む（ステージング）。さらに、制御プログラム１０８は、フリーセグメントが規定数に達していない場合、クリーンセグメントをフリーにする。上記の処理は、ＨＤＤに格納されているユーザデータに関する制御情報のデジステージングを、ＳＳＤに格納されているユーザデータに関する制御情報よりも優先的に行う。
【０１５７】
これにより、ＳＳＤに格納されているユーザデータに関する制御情報を優先的にダーティに維持し、キャッシュメモリ１０４内に優先的に残すことができる。上記処理は、ダーディセグメントのデステージングを優先度に従って行うが、制御プログラム１０８は、フリーセグメントに再設定するクリーンセグメントの選択を、優先度に従って行ってもよい。例えば、ＨＤＤに格納されているユーザデータに関する制御情報のセグメントを、ＳＳＤに格納されているユーザデータに関する制御情報のセグメントよりも優先して、フリーセグメントに変化させる。
【０１５８】
第３の実施形態ではストレージシステム１００に搭載されたメディアの種類としてＳＳＤとＨＤＤの２種類を挙げたが、より多くの種類のデータ記憶デバイスが搭載されていてもよい。例えば、ＳＳＤを、更にＳＬＣ（Ｓｉｎｇｌｅ  Ｌｅｖｅｌ  Ｃｅｌｌ）やＭＬＣ（Ｍｕｌｔｉｐｌｅ  Ｌｅｖｅｌ  Ｃｅｌｌ）などフラッシュメモリの種類に分けてもよい。
【０１５９】
また、ＨＤＤを更にＳＡＳやＳＡＴＡなどのインタフェースの種別で分けてもよいし、テープデバイスなどがあってもよい。より多くの種類のメディアを搭載する場合であっても、ユーザデータや制御情報を格納するメディア種別を、コントローラ１０１やプロセッサ１０３が自動的に判断してよい。
【０１６０】
＜第４の実施形態＞
図２５は、第４の実施形態におけるキャッシュ管理の概要を示す図である。第１、第２、第３の実施形態とは、キャッシュメモリ１０４の同一パーティション内にユーザデータと制御情報が混在している点が異なる。本実施形態は、キャッシュパーティションを有するキャッシュメモリ１０４にも適用することができる。例えば、ユーザデータキャッシュパーティション２１０が、ユーザデータに加え制御情報を格納する構成において、そのユーザデータキャッシュパーティション２１０に対して本実施形態を適用できる。
【０１６１】
以下においては、キャッシュメモリ１０４が制御情報用のパーティション２２０、２３０を備えてないストレージシステム１００の例を説明する。図２５に示すように、キャッシュメモリ１０４は、ユーザデータと制御情報を同一の領域内に格納する。
【０１６２】
本実施形態のコントローラ１０１は、ユーザデータと制御情報のそれぞれにＬＲＵ管理するキューを備え、それらキューに異なる優先度を設定して、ＬＲＵ管理する。なお、ストレージシステム１００は、ＬＲＵと異なるアルゴリズムを使用してもよいことは、上記他の実施形態と同様である。
【０１６３】
図２６は、第４の実施形態における先頭ポインタ管理テーブル１４０の一例のブロック図を示す。図２６に示す先頭ポインタ管理テーブル１４０は、第１、第２、第３の実施形態の先頭ポインタ管理テーブル１４０の構成に加え、制御情報フラグ１４６のカラムを有している。
【０１６４】
制御情報フラグ１４６は、ポインタリスト１４１が管理対象としているキューが、ユーザデータであるか制御情報であるかを示すためのフラグである。例えば、制御情報フラグが「１」であるポインタリスト１４１は、制御情報をＬＲＵ管理しているキューである。一方、制御情報フラグが「０」であるポインタリスト１４１は、ユーザデータをＬＲＵ管理しているキューである。
【０１６５】
このようにキューの管理対象が制御情報であるかユーザデータであるかを分け、同期デステージ又は非同期デステージの実行時に、ユーザデータをＬＲＵ管理しているキューからデステージを開始することで、制御情報を優先的にキャッシュメモリ１０４上に残すことが可能となる。
【０１６６】
ストレージシステムがアクセスするデータ単位について言及すれば、前述の通り、制御情報はユーザデータに比べて格段にアクセスデータ単位が小さい。つまり、アクセス１回に必要なキャッシュメモリ容量は、ユーザデータよりも制御情報は少ない。このため、キャッシュメモリを多く消費するユーザデータを優先的に置換対象データとすることで、より多くの制御情報をキャッシュメモリ上に残すことが可能となる。以上により、制御情報のキャッシュヒット率が向上し、制御情報へのアクセス性能を維持可能となる。
【０１６７】
図２７は、第４の実施形態において、ユーザデータよりも制御情報を優先的にキャッシュメモリ１０４に残す処理のフローチャートである。プロセッサ１０３は、制御プログラム１０８に従ってこの処理を行う。まずプロセッサ１０３は、全てのダーティキューに存在するエントリ数をカウントし、デステージング開始閾値と比較する（ステップ１６０１）。
【０１６８】
ステップ１６０１での判定結果がＮＯであれば、プロセッサ１０３は処理を終了する。ステップ１６０１での判定結果がＹＥＳの場合、プロセッサ１０３は、制御情報フラグが「０」であるポインタリスト１４１、つまりユーザデータを管理するポインタリスト１４１のダーティキューにエントリが存在するか判定する（ステップ１６０２）。
【０１６９】
ステップ１６０２での判定結果がＮＯの場合、プロセッサ１０３は、後述するステップ１６０５へと移る。ステップ１６０２での判定結果がＹＥＳの場合、プロセッサ１０３は、ユーザデータを管理するダーティキューのエントリ、つまりダーティなユーザデータのデステージングを行う（ステップ１６０３）。
【０１７０】
次に、プロセッサ１０３は、再度、ダーティキューに存在するエントリ数をカウントし、デステージング開始閾値と比較する（ステップ１６０４）。ステップ１６０４での判定結果がＮＯの場合、プロセッサ１０３はストレージ管理情報テーブル１１０を更新し（ステップ１６０７）、本処理を終了する。ステップ１６０４での判定結果がＹＥＳの場合、プロセッサ１０３は、制御情報フラグが「１」であるポインタリスト１４１、つまり制御情報を管理するポインタリスト１４１のダーティキューにエントリが存在するか判定する（ステップ１６０５）。
【０１７１】
ステップ１６０５での判定結果がＮＯの場合、プロセッサ１０３は、ステップ１６０７へと移る。ステップ１６０５での判定結果がＹＥＳの場合、プロセッサ１０３は制御情報を管理するダーティキューのエントリ、つまりダーティな制御情報をデステージする（ステップ１６０６）。最後に、プロセッサ１０３は、ステップ１６０７へと移り本処理を終了する。
【０１７２】
以上のように、本処理は、ユーザデータのデステージングを制御情報のデステージングよりも優先する。これにより、ユーザデータのセグメントは、制御情報のセグメントよりも優先してクリーン状態に変化する。図２４を参照して説明したように、これにより制御情報をユーザデータに優先してキャッシュメモリ１０４内に留めることができる。
【０１７３】
上記処理は、ダーティセグメントのデステージングを優先度に従って行うが、制御プログラム１０８は、フリーセグメントに再設定するクリーンセグメントの選択を、優先度に従って行ってもよい。制御プログラム１０８は、ユーザデータのクリーンセグメントを、制御情報のクリーンセグメントよりも優先してフリーセグメントに再設定する。
【０１７４】
なお上記処理において、予めユーザデータのキューの大きさと制御情報のキューの大きさが定義されていてもよい。また、制御プログラム１０８は、キューの大きさを動的に変化させることで、ホストからのアクセスパターンに応じてストレージシステム１００の性能を高めることも可能である。例えば、制御プログラム１０８は、スナップショットを大量に作成するために、一時的に制御情報のキューを大きくしてもよいし、第１の実施形態で述べた先読み処理と同期してキューの大きさを変化させてもよい。
【０１７５】
以上、本発明を添付の図面を参照して詳細に説明したが、本発明はこのような具体的構成に限定されるものではなく、添付した請求の範囲の趣旨内における様々な変更及び同等の構成を含むものである。例えば、本発明のストレージシステムは、各実施形態における一部の構成要素のみを備えていてもよく、上記の異なる実施形態の構成要素を備えることもできる。
【０１７６】
プログラムはプロセッサによって実行されることで、定められた処理をメモリ及びポートを用いながら行う。上記実施形態において制御プログラム１０８を主語とする説明は、プロセッサ１０３を主語とした説明でもよい。また、プログラムが実行する処理は、そのプログラムが動作するコントローラ１０１が行う処理であり、又、ストレージシステム１００が行う処理である。
【０１７７】
制御プログラム１０８の少なくとも一部は、コントローラ１０１における専用ハードウェアによって実現されてもよい。プログラムは、プログラム配布サーバや、計算機読み取り可能な非一時的記憶媒体によって装置にインストールすることができ、各装置の不揮発性記憶領域に格納することができる。
【０１７８】
説明の明確化のため、上記実施形態は１台の装置からなるストレージシステム１００及び１台のホストコンピュータ１０を有するが、本発明は複数のストレージサブシステム及び複数のホストコンピュータを有するシステムに適用することができる。
【０１７９】
上記実施形態は、１つのプロセッサ１０３を備えるコントローラ１０１を例示するが、コントローラは、複数のプロセッサを備えることができ、上記プロセッサ１０３の処理をこれら複数のプロセッサが処理してもよい。上記実施形態は、１台の管理コンピュータ１１を例示するが、本発明のシステムは、複数の管理コンピュータを備えることができる。そのうちの１つは、表示用コンピュータであってもよく、複数のコンピュータが管理コンピュータ１１と同等の処理を行ってもよい。上記異なる実施形態において説明された構成要素を、一つのストレージシステムに実装することができる。上記各実施形態において説明されたストレージシステムにおいて、その構成要素の一部を省略してもよい。
【符号の説明】
【０１８０】
１０：ホストコンピュータ
１１：管理コンピュータ
１００：ストレージシステム
１０１：コントローラ
１０２：ホストインタフェースポート
１０３：プロセッサ
１０４：キャッシュメモリ
１０５：メインメモリ
１０６：管理ポート
１０７：内部ネットワーク
２１０：ユーザデータキャッシュパーティション
２２０：制御情報キャッシュパーティション
２３０：制御情報常駐パーティション
３０１：ユーザデータ格納ＬＵ
３０２：制御情報格納ＬＵ
３０３：プールボリューム
３０４：通常ＬＵ
３０５：チャンク
３０６：プールボリューム（ＳＳＤ）
３０７：プールボリューム（ＨＤＤ）
３０８：通常ＬＵ（ＳＳＤ）
３０９：通常ＬＵ（ＨＤＤ）
【図１】
0005593577.tif 000002
【図２】
0005593577.tif 000003
【図３】
0005593577.tif 000004
【図４】
0005593577.tif 000005
【図５】
0005593577.tif 000006
【図６】
0005593577.tif 000007
【図７】
0005593577.tif 000008
【図８】
0005593577.tif 000009
【図９】
0005593577.tif 000010
【図１０】
0005593577.tif 000011
【図１１】
0005593577.tif 000012
【図１２】
0005593577.tif 000013
【図１３】
0005593577.tif 000014
【図１４】
0005593577.tif 000015
【図１５】
0005593577.tif 000016
【図１６】
0005593577.tif 000017
【図１７】
0005593577.tif 000018
【図１８】
0005593577.tif 000019
【図１９】
0005593577.tif 000020
【図２０】
0005593577.tif 000021
【図２１】
0005593577.tif 000022
【図２２】
0005593577.tif 000023
【図２３】
0005593577.tif 000024
【図２４】
0005593577.tif 000025
【図２５】
0005593577.tif 000026
【図２６】
0005593577.tif 000027
【図２７】
0005593577.tif 000028