(57)【要約】    ストレージコントローラは、プロセッサと、プロセッサに接続されデータを一時的に格納する揮発性の第１のキャッシュメモリと、マイクロプロセッサに接続されデータを一時的に格納する不揮発性の第２のキャッシュメモリと、電断が起こった場合に少なくともプロセッサおよび第１のキャッシュメモリに電力を供給するバッテリとを備える。第２のキャッシュメモリは、記憶デバイスに格納されていないデータであるダーティデータを格納するダーティデータ領域と、ダーティデータ領域以外の残りの領域とを含む。プロセッサは、電断が起こった場合、第１のキャッシュメモリに格納されている全部または一部のデータを対象データとして、第２のキャッシュメモリの残りの領域に格納する。
2015097751.tif 000002
【特許請求の範囲】
【請求項１】
記憶デバイスと、
ホストコンピュータからデータを受信し、受信したデータを前記記憶デバイスに格納するストレージコントローラと
を備えるストレージシステムであって、
前記ストレージコントローラは、プロセッサと、前記プロセッサに接続され前記データを一時的に格納する揮発性の第１のキャッシュメモリと、前記マイクロプロセッサに接続され前記データを一時的に格納する不揮発性の第２のキャッシュメモリと、電断が起こった場合に少なくとも前記プロセッサおよび前記第１のキャッシュメモリに電力を供給するバッテリと、を備え、
前記第２のキャッシュメモリは、前記記憶デバイスに格納されていないデータであるダーティデータを格納するダーティデータ領域と、前記ダーティデータ領域以外の残りの領域とを含み、
前記プロセッサは、電断が起こった場合、前記第１のキャッシュメモリに格納されている全部または一部のデータを対象データとして、前記第２のキャッシュメモリの前記残りの領域に格納する
ストレージシステム。
【請求項２】
前記第２のキャッシュメモリの前記残りの領域は、前記記憶デバイスに格納されているデータであるクリーンデータを格納するクリーンデータ領域と、データが格納されていない空き領域とを含み、
前記プロセッサは、電断が起こった場合、前記第１のキャッシュメモリの容量と、前記第２のキャッシュメモリの前記クリーンデータ領域および前記空き領域の合計容量とを比較し、
前記第１のキャッシュメモリの容量が前記合計容量以下の場合は、前記対象データは、前記第１のキャッシュメモリに格納されている全てのデータであり、
前記第１のキャッシュメモリの容量が前記合計容量より大きい場合は、前記対象データは、前記第１のキャッシュメモリに格納されているデータのうちのダーティデータのみである、
請求項１に記載のストレージシステム。
【請求項３】
前記プロセッサは、電断が起こった場合、
前記対象データが前記第１のキャッシュメモリのどこに格納されているのかを示す対象データテーブルと、前記対象データを前記第２のキャッシュメモリのどこに格納するのかを示す退避先データテーブルとを前記第１のキャッシュメモリ上に作成し、
前記対象データテーブルおよび前記退避先データテーブルを前記対象データとともに前記第２のキャッシュメモリの前記残りの領域に格納する
請求項１に記載のストレージシステム。
【請求項４】
前記第２のキャッシュメモリの前記残りの領域は、前記記憶デバイスに格納されているデータであるクリーンデータを格納するクリーンデータ領域と、データが格納されていない空き領域とを含み、
前記プロセッサは、前記クリーンデータ領域および前記空き領域のうち、前記空き領域に優先的に前記対象データの格納先にする
請求項１に記載のストレージシステム。
【請求項５】
前記クリーンデータ領域は、複数の領域を有し、
前記プロセッサは、前記複数の領域のうち大きいサイズ領域から順に前記対象データの格納先にする
請求項４に記載のストレージシステム。
【請求項６】
前記ストレージコントローラは、
前記第１のキャッシュメモリの容量と第２のキャッシュメモリの容量とを比較し、
前記第１のキャッシュメモリの容量が前記第２のキャッシュメモリの容量よりも小さい場合、前記第１のキャッシュメモリの容量と第２のキャッシュメモリの容量との差分を、前記第２のキャッシュメモリで保持できるダーティデータの最大容量に設定し、
前記第１のキャッシュメモリの容量が前記第２のキャッシュメモリの容量以上である場合、前記第１のキャッシュメモリで保持できるダーティデータの最大容量と前記第２のキャッシュメモリの容量とを比較し、
前記第２のキャッシュメモリの容量が前記第１のキャッシュメモリで保持できるダーティデータの最大容量より小さい場合、前記第１のキャッシュメモリで保持できるダーティデータの最大容量を前記第２のキャッシュメモリの容量と等しくし、前記第２のキャッシュメモリが保持できるダーティデータの最大容量を０にし、
前記第２のキャッシュメモリの容量が前記第１のキャッシュメモリで保持できるダーティデータの最大容量以上である場合、前記第２のキャッシュメモリの容量と前記第１のキャッシュメモリで保持できるダーティデータの最大容量との差分を、前記第２のキャッシュメモリで保持できるダーティデータの最大容量に設定する
請求項１乃至請求項５のいずれか一項に記載のストレージシステム。
【請求項７】
前記ストレージコントローラは、前記プロセッサに接続される不揮発性媒体を更に備え、
前記プロセッサは、電断が起こった場合、前記対象データを、前記第２のキャッシュメモリの前記残りの領域および前記不揮発性媒体に分けて格納する
請求項１に記載のストレージシステム。
【請求項８】
前記プロセッサは、前記第１のキャッシュメモリから前記第２のキャッシュメモリへの単位時間当たりのデータ転送量である第１の転送スループット、および、前記第１のキャッシュメモリから前記不揮発性媒体への単位時間当たりのデータ転送量である第２の転送スループットを算出し、
前記プロセッサは、前記第１の転送スループットおよび前記第２の転送スループットに基づき、前記第２のキャッシュメモリの前記残りの領域に格納する第１のデータ量および前記不揮発性媒体に格納する第２のデータ量を決定する
請求項７に記載のストレージシステム。
【請求項９】
前記対象データは、前記第２のキャッシュメモリにおいて、複数のセグメントに分けて格納され、
前記プロセッサは、電断発生後、電断が解消された場合に、ダーティデータを含む前記格納領域に対してパリティが生成されているか否かを前記セグメント毎に判断し、
前記プロセッサは、前記パリティが生成されていない前記セグメントに格納された前記対象データに対するダーティデータの割合に応じて、前記パリティが生成されていない前記セグメントに格納された前記対象データを、前記第１のキャッシュメモリに転送し、又は、前記記憶デバイスに記憶する
請求項１乃至請求項８のいずれか一項に記載のストレージシステム。
【請求項１０】
前記プロセッサは、前記パリティが生成されている前記セグメントに格納された前記対象データを、前記セグメントから前記記憶デバイスに格納する
請求項９に記載のストレージシステム。
【請求項１１】
前記プロセッサは、前記パリティが生成されていない前記セグメントに格納された前記対象データを、前記記憶デバイスに記憶する時に、記憶する前記対象データに対しパリティを生成する
請求項９または請求項１０に記載のストレージシステム。
【請求項１２】
前記第２のキャッシュメモリの前記残りの領域は、前記記憶デバイスに既に格納されたクリーンデータを格納する複数のクリーンデータ領域を含み、
前記プロセッサは、各クリーンデータ領域に格納されたデータへのアクセスの頻度に応じて、各クリーンデータ領域を順位付けし、アクセスの低い前記クリーンデータ領域から順に前記対象データを格納する
請求項１に記載のストレージシステム。
【請求項１３】
電断が起こった場合にバッテリからの電力で動作するストレージシステムの制御方法であって、
ホストコンピュータからデータを受信する都度に、受信したデータを、一時的に格納する揮発性の第１のキャッシュメモリと、データを一時的に格納する不揮発性の第２のキャッシュメモリとのいずれかに格納し、
前記第１又は第２のキャッシュメモリに格納されているデータを記憶デバイスに格納し、
電断が起こった場合、前記第１のキャッシュメモリに格納されている全部または一部の前記データを対象データとして、前記第２のキャッシュメモリのダーティデータ領域と残りの領域のうち前記残りの領域に格納し、
前記ダーティデータ領域は、前記記憶デバイスに格納されていないデータであるダーティデータを格納する領域であり、
前記残りの領域は、前記第２のキャッシュメモリのうちの前記ダーティデータ領域以外の領域である、
ストレージシステムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、ストレージシステムのキャッシュ制御に関する。
【背景技術】
【０００２】
電源遮断時の主記憶デバイス上のデータの消失を防ぐために、主記憶メモリ上のデータを退避させるための不揮発性メモリをストレージコントローラに搭載することがある。特許文献１は、退避すべき主記憶メモリ上のデータのみを選択し、不揮発性メモリに退避する技術を開示している。例えば、上位装置からのアクセスコマンドに従うデータの一時格納先は、揮発性キャッシュメモリとしている。一次電源から揮発性キャッシュメモリへの給電が無くなった場合に、バッテリからの給電により、揮発性キャッシュメモリに記憶されているデータを不揮発性メモリにコピーしている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００８−１０８０２６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、特許文献１に開示された技術では、不揮発性メモリと揮発性キャッシュメモリの容量が考慮されていないので、揮発性キャッシュメモリが大容量である場合、揮発性キャッシュメモリの全てのデータをバックアップできない場合がある。また、主記憶キャッシュメモリの容量増加により電源遮断時に必要なバッテリ容量とバックアップ媒体容量が増大する。【０００５】
よって、ストレージシステムにおいて、電断時のデータ転送時間を短縮させることにより、バッテリ容量を削減し、コストを削減することが課題である。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、ストレージシステムは、記憶デバイスと、ホストコンピュータからデータを受信し、受信したデータを記憶デバイスに格納するストレージコントローラとを備える。ストレージコントローラは、プロセッサと、プロセッサに接続されデータを一時的に格納する揮発性の第１のキャッシュメモリと、マイクロプロセッサに接続されデータを一時的に格納する不揮発性の第２のキャッシュメモリと、電断が起こった場合に少なくともプロセッサおよび第１のキャッシュメモリに電力を供給するバッテリとを備える。第２のキャッシュメモリは、記憶デバイスに格納されていないデータであるダーティデータを格納するダーティデータ領域と、ダーティデータ領域以外の残りの領域とを含む。プロセッサは、電断が起こった場合、第１のキャッシュメモリに格納されている全部または一部のデータを対象データとして、第２のキャッシュメモリの残りの領域に格納する。
【発明の効果】
【０００７】
電断時のデータ転送時間を短縮させることにより、バッテリ容量を削減し、コストを削減することができる。
【図面の簡単な説明】
【０００８】
【図１】第１実施例に係るストレージシステムを示す。
【図２】主記憶メモリと、ＮＶＲＡＭとに格納するデータの構成を示す。
【図３】ユーザーデータの構成を示す。
【図４】主記憶メモリ管理テーブルの構成を示す。
【図５】ダーティデータテーブルの構成を示す。
【図６】ＮＶＲＡＭ管理テーブルの構成を示す。
【図７】退避先データテーブルの構成を示す。
【図８】第１実施例において、ストレージ装置が電断した時のストレージコントローラによるバックアップ処理の動作を示す。
【図９】ダーティ最大容量決定処理のフローチャートを示す。
【図１０】バックアップ処理のフローチャートを示す。
【図１１】第１実施例に係るバックアップデータ選択処理のフローチャートを示す。
【図１２】第１実施例に係る退避先選択処理のフローチャートを示す。
【図１３】第１実施例に係るデータ転送処理のフローチャートを示す。
【図１４】第１実施例に係るバックアップデータの復旧処理のフローチャートを示す。
【図１５】第２実施例に係るストレージシステムを示す。
【図１６】第２実施例のストレージ装置が電断した時のストレージコントローラによるバックアップ処理の動作を示す。
【図１７】第２実施例に係るバックアップデータの退避先判定処理のフローチャートを示す。
【図１８】第２実施例に係るバックアップデータの復旧処理のフローチャートを示す。
【図１９】第３実施例に係るバックアップデータの復旧処理の動作を示す。
【図２０】第３実施例に係るバックアップデータの復旧処理のフローチャートを示す。
【図２１】復旧対象データ選択処理のフローチャートを示す。
【図２２】デステージデータテーブルの構成を示す。
【図２３】デステージ処理のフローチャートを示す。
【図２４】第３実施例に係るＮＶＲＡＭ管理テーブルの構成を示す。
【図２５】第３実施例に係るバックアップデータ選択処理のフローチャートを示す。
【図２６】第３実施例に係る退避先選択処理のフローチャートを示す。
【図２７】クリーン領域選択処理のフローチャートを示す。
【図２８】第３実施例に係るデータ転送処理のフローチャートを示す。
【図２９】第３実施例に係る、バックアップデータの復旧処理のフローチャートを示す。
【発明を実施するための形態】
【０００９】
以下、図面を参照しながら本発明の実施の形態を説明する。
図１は、本発明の第１実施例におけるストレージシステムの構成を示す。
【００１０】
ストレージシステムは、ホストコンピュータ２と、ホストコンピュータ２に接続されたストレージ装置１とを有する。ストレージ装置１は、データ処理、演算を行うホストコンピュータ２に接続されている。ストレージ装置１は、ホストコンピュータ２とＦｉｂｒｅ  Ｃｈａｎｎｅｌ（ＦＣ）、およびｉＳＣＳＩ等によるデータ転送路で接続されている。なお、ホストコンピュータ２の数は一つでも複数でも良い。
【００１１】
ストレージ装置１は、ストレージコントローラ３と、ドライブ筐体４と、電源５とを有する。ドライブ筐体５は、複数の記憶ドライブ６（本実施例では３つドライブ）を収容する。電源５は、ストレージコントローラ３とドライブ筐体４とに電力を供給する。また、ストレージ装置１は、商用電源７に接続されている。
【００１２】
ストレージ装置１が含むストレージコントローラ３、ドライブ筐体４、電源５のそれぞれの数は設計に依存する。記憶ドライブの種別は問わない。例えば、ハードディスクドライブ（ＨＤＤ）でも良いし、フラッシュメモリなどの不揮発性能メモリを搭載したＳｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ（ＳＳＤ）であっても良い。
【００１３】
記憶ドライブ６は、例えば不揮発性の記憶媒体であり、ホストコンピュータ２から転送されたユーザーデータを格納する。例えば、複数の記憶ドライブ６がＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）を構成しデータの冗長化を行っても良い。これにより、記憶ドライブ６に障害が発生しデータを消失したとしても、記憶ドライブ６のデータおよびパリティに基づいて消失したデータを復元することができる。なお、記憶ドライブ６は、記憶デバイスの一例である。
【００１４】
ストレージコントローラ３は複数のクラスタ１０を有し、本例において、２つのクラスタ１０を有する。ストレージコントローラ３は、可用性を重視し、サービスを継続して提供するために２つのクラスタ２を備えている。なお、２つのクラスタ１０は、同一の構成であるので、同一の符号を付し、一方のクラスタ１０についてのみ説明する。
【００１５】
クラスタ１０は、ホストインターフェース（Ｉ／Ｆ）ＬＳＩ１１と、ドライブＩ／Ｆ  ＬＳＩ１２と、マイクロプロセッサ（以下、単にＭＰとする)１３と、主記憶メモリ１４と、ＮＶＲＡＭ１５と、バッテリ１６とを含む。
【００１６】
ホストＩ／Ｆ  ＬＳＩ１１は、ホストコンピュータ２との通信に用いられるデバイスであり、ＦＣ、Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ  Ｏｖｅｒ  Ｅｔｈｅｒｎｅｔ（登録商標）（ＦＣｏＥ）、ｉＳＣＳＩ等の通信プロトコルをストレージ装置１内部で用いられるＰＣＩｅプロトコルに変換する機能を有する。なお、ホストコンピュータ２からストレージ装置１に対し、５１２Ｂ単位でデータ転送が行われるが、ホストＩ／Ｆ  ＬＳＩ１１はそのデータに対し８ＢのＣＲＣを付加するように構成されている。
【００１７】
ドライブＩ／Ｆ  ＬＳＩ１２は、複数のドライブ６を収容するドライブ筐体４と、ストレージコントローラ３とを接続するためのデバイスである。例えば、ドライブＩ／Ｆ  ＬＳＩ１２は、記憶ドライブ６とストレージコントローラ３との通信に用いられるＦＣ、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）、Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ（ＳＡＴＡ）、Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）等の通信プロトコルをストレージコントローラ３内部で用いられるプロトコル、例えば、ＰＣＩｅのプロトコルに変換する機能を有する。
【００１８】
ＭＰ１３は、クラスタ１０内における内部処理を実行する。ＭＰ１３は、演算やデータの読み書きを実行してストレージコントローラの制御を行うコア１３Ａ、主記憶メモリ１４とのデータ転送を行うメモリＩ／Ｆ１３Ｂ、ホストＩ／Ｆ  ＬＳＩ１１とＭＰ１３とを接続するＰＣＩｅインターフェース１３Ｃ、ドライブＩ／Ｆ  ＬＳＩ１２とＭＰ１３とを接続するＰＣＩｅ  Ｉ／Ｆ１３Ｄ、ＮＶＲＡＭ１５とＭＰ１３とを接続するＰＣＩｅ  Ｉ／Ｆ１３Ｅ、主記憶メモリ１４と他方のクラスタ２（リモートクラスタとも呼ぶ。）とのデータ転送を行うＤＭＡ１３Ｆ、リモートクラスタ２との通信Ｉ／ＦとなるＮｏｎ  Ｔｒａｎｓｐａｒｅｎｔ  Ｂｒｉｄｇｅ（ＮＴＢ）１３Ｇとを有する。ＭＰ１３の内部構成要素は内部ネットワークで相互に接続されている。メモリＩ／Ｆ１３Ｂは、例えばＤＤＲインターフェースである。ＭＰ１３のコア１３Ａは、ユーザーデータを主記憶メモリ１４から記憶ドライブ６にコピーする際に後述のセグメント３２毎にパリティを生成し、記憶ドライブ６に格納（デステージ）する。
【００１９】
主記憶メモリ１４は、ＭＰ１３に接続されており、Ｄｏｕｂｌｅ  Ｄａｔａ  Ｒａｔｅ（ＤＤＲ）  Ｓｙｎｃｈｒｏｎｏｕｓ  ＤＲＡＭ等の半導体メモリで構成される揮発性の記憶デバイスである。主記憶メモリ１４の容量は、例えば１００〜５００ＧＢである。主記憶メモリ１４は、ＤＤＲインターフェースであるメモリＩ／Ｆ１３Ｂを介してＭＰ１３と接続している。主記憶メモリ１４は、ホストコンピュータ２から読み書きされるデータを一時的に記憶し(ユーザーデータのキャッシング)、また、ＭＰ１３が扱うデータやストレージコントローラ１０を制御するためのプログラムを格納する。主記憶メモリ１４が格納するデータの詳細は後述する。なお、主記憶メモリ１４は、第１のキャッシュメモリの一例である。
【００２０】
ＮＶＲＡＭ１５は、典型的にはＰＣＩｅ  Ｉ／Ｆ１３Ｅを介してマイクロプロセッサ１３に接続されており、ＮＡＮＤ型フラッシュメモリ、Ｐｈａｓｅ  Ｃｈａｎｇｅ  ＲＡＭ（ＰＣＭ）、Ｒｅｓｉｓｔａｎｃｅ  ＲＡＭ（ＲｅＲＡＭ）等の半導体メモリで構成される不揮発性の記憶デバイスである。ＮＶＲＡＭ１５の容量は、例えば５００ＧＢ〜１ＴＢである。ＮＶＲＡＭ１５は、主記憶メモリ１４に記憶されているデータを、ＮＶＲＡＭ１５に転送するためのＤｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ（ＤＭＡ）１５Ａを搭載する。ＮＶＲＡＭ１５はホストコンピュータ２から読み書きされるデータを一時的に格納する。一般に、ＮＶＲＡＭ１５は、ＤＲＡＭと比較して面積あたりのデータ記録密度は大きいが、データ読み込み速度、データ書き込み速度が小さく、また、データ書き換え可能回数は少ない。ＮＶＲＡＭ１５が格納するデータの詳細は後述する。なお、ＮＶＲＡＭ１５は、第２のキャッシュメモリの一例である。
【００２１】
バッテリ１６は、例えば、再充電可能な二次電池であり、電源５の故障等によりストレージコントローラ３に電力が供給出来なくなった場合に電源の代わりに電力を供給する。なお、バッテリ１６を構成する電池の種別は問わない。例えば鉛蓄電池、リチウムイオン電池等であっても構わない。バッテリ１６は、クラスタ１０内の少なくともＭＰ１３、主記憶メモリ１４、ＮＶＲＡＭ１５の３つを一定時間動作させられるだけの電荷量を保持する。バッテリ１６は、電力をクラスタ１０に供給する回路の電圧降下(電断とも呼ぶ)を契機にクラスタ１０に電力の供給を開始するように構成されている。
【００２２】
図２は、主記憶メモリ１４と、ＮＶＲＡＭ１５とに格納するデータの構成例を示す。
【００２３】
主記憶メモリ１４には、ストレージコントローラ３を制御するプログラムである制御プログラムデータ２０と、ホストコンピュータ２から読み書きされるユーザーデータ３０と、ユーザーデータ３０を管理する情報を格納する主記憶メモリ管理テーブル４０と、ＮＶＲＡＭ１５に記憶されたユーザーデータを管理する情報を格納するＮＶＲＡＭ管理テーブル５０と、主記憶メモリ１４上のバックアップ対象となるデータを管理するバックアップデータテーブル６０と、ユーザーデータ３０が退避可能なＮＶＲＡＭ１５上の領域を管理する退避先データテーブル７０とが格納されている。また、ＮＶＲＡＭ１５には、ユーザーデータ８０が格納されている。
【００２４】
ユーザーデータ３０、８０、管理テーブル４０、５０、バックアップデータテーブル６０、退避先データテーブル７０の構造についての詳細は後述する。ＮＶＲＡＭ１５上にはユーザーデータ８０のみが格納される。ＮＶＲＡＭ１５は、基本的にはキャッシュメモリとして用いられるが、ライト性能がＤＲＡＭである主記憶メモリ１４よりも低いため、アクセス頻度が高い管理テーブル４０、５０、および制御プログラムデータ２０は、ＮＶＲＡＭ１５に格納しない。
【００２５】
ホストコンピュータ２からストレージ装置１に転送されたユーザーデータのうち、キャッシュメモリに格納されており、記憶ドライブ６に既にコピーされているユーザーデータをクリーンデータと呼ぶ。すなわち、記憶ドライブ６にデステージされたユーザーデータがクリーンデータである。一方、ホストコンピュータ２からストレージ装置１に転送されたユーザーデータのうち、キャッシュメモリに格納されているが、記憶ドライブ６に未だコピーされていないユーザーデータをダーティデータと呼ぶ。すなわち、記憶ドライブ６にまだデステージされていないユーザーデータがダーティデータである。
【００２６】
図３は、ユーザーデータ３０の構造を示している。
【００２７】
ユーザーデータ３０は、ホストコンピュータ２から転送されたデータの集合体を表している。図３に示すように、一つのスロット３１は、複数のセグメント３２から構成されており、各セグメント３２はそれぞれ複数のブロック３３から構成される。なお、図示はしないが、ＮＶＲＡＭ１５に格納されたユーザーデータ８０も、ユーザーデータ３０と同じ構成である。
【００２８】
一つのスロット３１は、例えば２５６ＫＢであり、スロット３１の数は、設計に依存する。各セグメント３２は主記憶メモリ１４上の連続領域を表す。また、セグメント３２の大きさは設計に依存し、スロット３１が持てるセグメント３２の数は設計に依存する。各ブロック３３は、ユーザーデータ３０を管理する最小の単位であって、例えば５１２Ｂであり、主記憶メモリ１４上の連続領域を表す。
【００２９】
そして、各ブロック３３に、クリーンデータ３３Ａおよびダーティデータ３３Ｂが格納される。また、ＭＰ１３が、新たなダーティデータを格納するためにクリーンデータが格納されたブロック３３またはセグメント３２を初期化して解放する事により、一時的に空き領域のブロック３３Ｃが生じる。
【００３０】
また、ストレージ装置１においては、主記憶メモリ１４に保持可能なダーティデータの最大容量を、ユーザーにより設定可能に構成されている。
【００３１】
図４は、主記憶メモリ管理テーブル４０の構成を示す。
【００３２】
主記憶メモリ管理テーブル４０は、主記憶メモリ１４に格納されたユーザーデータ３０を管理するテーブルである。主記憶メモリ管理テーブル４０は、スロット管理ポインタテーブル４１と、スロット管理テーブル４２と、セグメント管理テーブル４３とを有する。
【００３３】
スロット管理ポインタテーブル４１は、Ｉ／Ｏ先情報を格納するテーブルである。すなわち、スロット管理ポインタテーブル４１は、ホストコンピュータ２から受けたＩ／Ｏ要求に含まれる情報で、Ｉ／Ｏ先を表す情報を格納する。典型的には、Ｉ／Ｏ先情報は、ＬＵＮ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ  Ｎｕｍｂｅｒ）とＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓｉｎｇ）である。ＬＵＮは、論理ユニット（論理ボリューム）の番号であり、ホストコンピュータ２が認識している番号である。ＬＢＡは、記憶ドライブ６の論理ユニットにおける領域（論理ブロック）を表すアドレスです。
【００３４】
スロット管理ポインタテーブル４１は、所定数のブランクのエントリ（レコード）を有する。Ｉ／Ｏ要求を受けたときに、ブランクのエントリに、Ｉ／Ｏ先情報であるスロット管理ポインタが書かれる。そして、スロット管理テーブル４２から、空きスロットに対応したレコードが特定されて、そのレコードに、スロット管理ポインタが紐付けられる。これにより、どのＩ／Ｏ先に書かれる（あるいはどのＩ／Ｏ先から読み出された）データが、キャッシュメモリである主記憶メモリ１４のどこに入っているのかが分かる。
【００３５】
なお、スロット管理ポインタテーブル４１の１行は、最初からは、スロット管理テーブル４２の１行に１対１に対応していない。なぜなら、そうしてしまうと、予め、論理ボリュームの容量分のポインタを用意しなければならず、テーブルのサイズもキャッシュのサイズも膨大に必要になってしまうからである。
【００３６】
スロット管理テーブル４２は、スロットと特定するための情報であるスロットＩＤ４２Ａと、Ｍｏｓｔ  Ｒｅｃｅｎｔ  Ｕｓｅｄ（ＭＲＵ）情報４２Ｂと、Ｌｅａｓｔ  Ｒｅｃｅｎｔ  Ｕｓｅｄ（ＬＲＵ）情報４２Ｃと、スロットステータス４２Ｄと、セグメント管理ポインタ４２Ｅとを格納する。
【００３７】
ＭＲＵ情報４２Ｂは、対応スロットに対するアクセスが高頻度であるか否かを示す情報である。ＬＲＵ情報４２Ｃは、対応スロットに対するアクセスが低頻度であるか否かを示す情報である。
【００３８】
スロットステータス４２Ｄは、クリーンまたはダーティのキャッシュ制御情報、およびスロット３１の各セグメント３２に対しパリティを生成したことを示す情報が格納する。なお、本実施例では、主記憶メモリ１４およびＮＶＲＡＭ１５に格納されているダーティデータの割合が、所定の割合を超えた場合に、ダーティデータに関するパリティがセグメント３２毎に生成され、ダーティデータのデステージ処理が実行される。
【００３９】
セグメント管理ポインタ４２Ｅは、スロットが内包するセグメントに対応するセグメント管理テーブルのポインタを格納する。
【００４０】
セグメント管理テーブル４３は、各スロットに対応して複数設けられている。セグメント管理テーブル４３は、セグメントを特定するための情報であるセグメントＩＤ４３Ａと、データ格納アドレス４３Ｂと、クリーンデータビットマップ４３Ｃと、ダーティデータビットマップ４３Ｄとを格納する。データ格納アドレス４３Ｂは、セグメントが配置されている位置を示す。クリーンデータビットマップ４３Ｃは、対応セグメント内でクリーン状態になっているデータ格納位置を示す。すなわち、クリーンデータビットマップ４３Ｃは、対応セグメント内でクリーンデータを格納している位置を示す。ダーティデータビットマップ４３Ｄは、対応セグメント内でダーティ状態になっているデータ格納位置を示す。ダーティデータビットマップ４３Ｄは、対応セグメント内でダーティデータを格納している位置を示す。
【００４１】
図５は、バックアップデータテーブル６０の構成を示す。
【００４２】
バックアップデータテーブル６０は、電断時にＭＰ１３のコア１３Ａにより、主記憶メモリ管理テーブル４０に基づき作成される。バックアップデータテーブル６０は、ユーザーデータ３０中のバックアップ対象データに関するビットマップテーブルである。すなわち、バックアップデータテーブル６０は、バックアップ対象となるデータがどこに格納されているのかを指し示すテーブルである。また、バックアップデータテーブル６０は、スロット管理ポインタ６１と、スロットＩＤ６２と、セグメントＩＤ６３と、データサイズ６４と、データ先頭アドレス６５とを格納する。なお、主記憶メモリ１４からＮＶＲＡＭ１５へ退避されるデータは、全ユーザーデータである場合と、ダーティデータのみである場合があるが、いずれのデータをバックアップ対象とした時も図５に示したバックアップデータテーブル６０をバックアップデータテーブルとして説明する。なお、バックアップデータテーブル６０は対象データテーブルに相当し、バックアップデータは対象データに相当する。また、電断時に主記憶メモリ１４からＮＶＲＡＭ１５へバックアップする対象であるためバックアップデータと表現しているが、電源が復旧したときにはＮＶＲＡＭ１５から主記憶メモリ１４へ復旧の対象となるデータでもある。
【００４３】
スロット管理ポインタ６１と、スロットＩＤ６２と、セグメントＩＤ６３とは、それぞれ図４におけるスロット管理ポインタテーブル４１と、スロットＩＤ４２Ａと、セグメントＩＤ４３Ａとに対応する。データサイズ６４は、対応するセグメントに格納されているバックアップデータのサイズである。データ先頭アドレス６５は、対応するセグメントに格納されているバックアップデータの先頭のアドレスを示す。
【００４４】
上記のように、ホストコンピュータ２から５１２Ｂ単位で転送されてくるデータに対し８ＢのＣＲＣが付加される。そうすると、８Ｂずつアドレスがずれることとなる。このため、同じブロックでもダーティデータとクリーンデータが混在することとになる。したがって、バックアップ対象をデータサイズとアドレスで管理することにより、ユーザーデータ３０からバックアップデータのみを抽出して退避させることができ、バックアップデータ量を減少させることができる。
【００４５】
図６は、ＮＶＲＡＭ管理テーブル５０の構成を示す。
【００４６】
ＮＶＲＡＭ管理テーブル５０は、ＮＶＲＡＭ１５に格納されたユーザーデータ８０を管理するテーブルである。ＮＶＲＡＭ管理テーブル５０は、スロット管理ポインタテーブル５１と、スロット管理テーブル５２と、セグメント管理テーブル５３とを格納する。スロット管理ポインタテーブル５１と、スロット管理テーブル５２と、セグメント管理テーブル５３とは、それぞれ主記憶メモリ管理テーブル４０のスロット管理ポインタテーブル４１と、スロット管理テーブル４２と、セグメント管理テーブル４３と同様のテーブルであるので、詳細な説明は省略する。
【００４７】
なお、スロット管理ポインタテーブル５１のスロット管理ポインタは、スロット管理ポインタテーブル４１のスロット管理ポインタと同様に、Ｉ／Ｏ先情報を示すが、主記憶メモリ１４に入ったデータのＩ／Ｏ先情報とは別のＮＶＲＡＭ１５に入ってデータのＩ／Ｏ先情報を示している。また、スロット管理テーブル５２は、スロットＩＤ５２Ａと、ＭＲＵ情報５２Ｂと、ＬＲＵ情報５２Ｃと、スロットステータス５２Ｄと、セグメント管理ポインタ５２Ｅとを有する。セグメント管理テーブル５３は、各スロットに対応して複数設けられ、セグメントＩＤ５３Ａと、データ格納アドレス５３Ｂと、クリーンデータビットマップ５３Ｃと、ダーティデータビットマップ５３Ｄとを有する。
【００４８】
図７は、退避先データテーブル７０の構成を示す。
【００４９】
退避先データテーブル７０は、電断時にＭＰ１３のコア１３Ａにより作成される。退避先データテーブル７０は、電断時に、主記憶メモリ１４からＮＶＲＡＭ１５へユーザーデータ３０中のダーティデータを退避させるための退避先（バックアップ先）を示すビットマップテーブルである。また、退避先データテーブル７０は、スロット管理ポインタ７１と、スロットＩＤ７２と、セグメントＩＤ７３と、データサイズ７４と、データ先頭アドレス７５とを有する。なお、主記憶メモリ１４からＮＶＲＡＭ１５へ退避されるデータは、全ユーザーデータである場合と、ダーティデータのみである場合があるが、いずれのデータをバックアップ対象とした時も図７に示した退避先データテーブル７０を退避先データテーブルとして説明する。
【００５０】
スロット管理ポインタ７１は、図５のスロット管理ポインタ６１に対応する。すなわち、図５において管理しているバックアップデータのＩ／Ｏ先情報（スロット管理ポインタ）を、図７の退避先データテーブルにおいても管理している。これにより、主記憶メモリ１４上のバックアップ対象となるデータと、ＮＶＲＡＭ１５上に退避されるデータとが対応付けられる。そして、主記憶メモリ１４にバックアップデータを復旧したときに、図７のテーブルのスロット管理ポインタ（Ｉ／Ｏ先情報）が表すＩ／Ｏ先に、バックアップデータを書込むことができる。
【００５１】
また、スロットＩＤ７２と、セグメントＩＤ７３とは、それぞれ図５におけるスロットＩＤ６２と、セグメントＩＤ６３とに対応する。また、退避先データサイズ７４は、対応するセグメントに格納されているダーティデータのサイズである。退避先データ先頭アドレス７５は、対応するセグメントに格納されているダーティデータ先頭のアドレスを示す。
【００５２】
図８は、第１実施例において、ストレージ装置１が電断した時のストレージコントローラ３によるバックアップ処理の動作を示す。なお、図８では、一方のクラスタ１０におけるバックアップ処理の動作のみを示す。
【００５３】
電源５の故障等により電圧が低下し、電源５からストレージコントローラ３へ電力を供給する回路８が開放状態に遷移した事を契機に、クラスタ１０はバックアップ処理を開始する。バックアップ処理とは、主記憶メモリ１４に格納されている、ユーザーデータ３０、主記憶メモリ管理テーブル４０、ＮＶＲＡＭ管理テーブル５０、バックアップデータテーブル６０、および退避先テーブル７０を、ＮＶＲＡＭ１５のクリーンデータ領域１５Ｂおよび空き領域１５Ｃにデータ転送Ｆ１を実行する処理を表す。すなわち、バックアップ処理では、バックアップデータが、ダーティデータ領域以外の残りの領域（クリーンデータ領域１５Ｂおよび空き領域１５Ｃ）に格納される。バックアップ処理の具体的な処理動作は後述する。なお、バックアップ処理時には、クラスタ１０はバッテリ１６により稼働する。
【００５４】
図９は、ダーティ最大容量決定処理のフローチャートを示す。この処理は、ストレージ装置１の起動時、又は、主記憶メモリ１４に保持可能なダーティデータの最大容量をユーザーが変更した時に実行される。
【００５５】
ＭＰ１３は、主記憶メモリ１４の容量情報とＮＶＲＡＭ１５の容量情報を取得し、ＮＶＲＡＭ容量が主記憶メモリ容量より大きいか否かを判定する（Ｓ１０）。ＮＶＲＡＭ容量が主記憶メモリ容量より大きいと判定された場合（Ｓ１０：ＹＥＳ）、ＭＰ１３は、ＮＶＲＡＭ容量と主記憶メモリ容量との差分を、ＮＶＲＡＭ１５で保持できるダーティデータの最大容量に設定する（Ｓ１１）。主記憶メモリ１４の方がライト性能は高いため、主記憶メモリ１４にダーティデータを保持させるようにする事で、ストレージ装置１の性能を維持する事が可能となる。
【００５６】
ＮＶＲＡＭ容量が主記憶メモリ容量以下であると判定された場合（Ｓ１０：ＮＯ）、ＭＰ１３は、ＮＶＲＡＭ容量が、主記憶メモリ１４が保持できるダーティデータの最大容量よりも小さいか否かを判定する（Ｓ１２）。ＮＶＲＡＭ容量が、主記憶メモリ１４が保持できるダーティデータの最大容量より小さいと判定された場合（Ｓ１２：ＹＥＳ）、ＭＰ１３は、主記憶メモリ１４が保持できるダーティデータの最大容量をＮＶＲＡＭの容量と同等になるようにストレージ装置１の設定を変更する（Ｓ１３）。さらに、ＮＶＲＡＭ１５が保持できるダーティデータの容量を０にする（Ｓ１３）。この場合、ＮＶＲＡＭ１５には、クリーンデータのみが格納されることとなる。これにより、主記憶メモリ１４の方がライト性能は高いため、主記憶メモリ１４にダーティデータを保持させるようにする事で、ストレージ装置１の性能を維持する事が可能となる。
【００５７】
また、ステップＳ１３の処理において、ＮＶＲＡＭ１５にダーティデータが格納されている場合には、そのダーティデータを全て記憶ドライブ６に書込んで（デステージして）、ＮＶＲＡＭ１５を全てクリーン状態にしても良い。また、ステップＳ１３の処理において、主記憶メモリ１４に格納されているダーティデータの量が、主記憶メモリ１４が保持できるダーティデータの最大容量を超えていた場合には、超えている分のダーティデータを記憶ドライブ６に書込んでも良い。
【００５８】
ＮＶＲＡＭ１５の容量が、主記憶メモリ１４が保持できるダーティデータの最大容量以上であると判定された場合（Ｓ１２：ＮＯ）、ＭＰ１３は、ＮＶＲＡＭ１５と主記憶メモリ１４が保持できるダーティデータの最大容量との差分を、ＮＶＲＡＭ１５で保持できるダーティデータの最大容量に設定する（Ｓ１４）。これにより、主記憶メモリ１４が保持できるダーティデータの最大容量分だけ、ＮＶＲＡＭ１５はクリーンデータを保持することになる。
【００５９】
図１０は、電断時におけるストレージ装置１のバックアップ処理のフローチャートを示す。
【００６０】
まず、ＭＰ１３は、電源５の故障等により電圧が低下し、電源５からストレージコントローラ３へ電力を供給する回路８が開放状態に遷移したか否かを判定する（Ｓ２０）。すなわち、ＭＰ１３は、電断が発生したか否かを判定する。電断が発生していなければ（Ｓ２０：ＮＯ）、バックアップ処理は終了する。一方、電断が発生していれば（Ｓ２０：ＹＥＳ）、ＭＰ１３は、主記憶メモリ１４上のバックアップ対象であるデータを選択するバックアップデータ選択処理を実行する（Ｓ２１）。バックアップデータ選択処理の詳細については後述する。バックアップデータ選択処理が終了すると、ＭＰ１３は、バックアップデータの退避先をＮＶＲＡＭ１５から選択する退避先選択処理を実行する（Ｓ２２）。退避先選択処理の詳細については後述する。退避先選択処理の終了後、ＭＰ１３は、ステップＳ２１で選択したバックアップデータをステップＳ２２で選択した退避先に転送するデータ転送処理を実行する（Ｓ２３）。データ転送処理の詳細については後述する。データ転送処理の完了をもってストレージ装置１のバックアップ処理を終了する。
【００６１】
図１１は、主記憶メモリ１４上のバックアップデータを選択するバックアップデータ選択処理のフローチャートを示す。
【００６２】
ＭＰ１３は、バックアップデータテーブル６０を作成する（Ｓ３０）。この時点で、バックアップデータテーブル６０は空となっている。次に、ＭＰ１３は、主記憶メモリ１４の容量がＮＶＲＡＭ１５上のクリーンデータの容量と空き容量との合計量以下であるか否かを判定する（Ｓ３１）。主記憶メモリ１４の容量が合計量以下であると判定された場合（Ｓ３１：ＹＥＳ）、ＭＰ１３は、主記憶メモリ１４上の全データをバックアップ対象として選択する（Ｓ３２）。これにより、一律に全てのデータが選択されるので、逐一バックアップ対象となるデータを判定するための処理時間が削減される。よって、全体のバックアップ処理時間の削減が可能となる。
【００６３】
ＭＰ１３は、ステップＳ３２で選択した全ユーザーデータの情報をバックアップデータテーブルに反映させる（Ｓ３３）。具体的には、主記憶メモリ管理テーブル４０に基づき、スロットポインタ、スロットＩＤ、セグメントＩＤ、データサイズ、データ先頭アドレスをバックアップデータテーブル６０に反映させる。これにより、図５に示した全ユーザーデータに関するバックアップデータテーブル６０が作成される。
【００６４】
一方、主記憶メモリ容量が合計量より大きいと判定された場合（Ｓ３１：ＮＯ）は、主記憶メモリ上のデータの全てを選択することができない。そのため、ＭＰ１３は、主記憶メモリ管理テーブル４０に基づき、ダーティデータを格納するスロットとセグメントを特定し、ダーティデータをバックアップ対象として選択する（Ｓ３４）。この時、特定したダーティデータのサイズをダーティデータビットマップ４３Ｄから計算する。次に、ＭＰ１３は、特定したダーティデータの情報に基づき、スロットポインタ、スロットＩＤ、セグメントＩＤ、ダーティデータのデータサイズ、ダーティデータのデータ先頭アドレスをバックアップデータテーブル６０に反映させる（Ｓ３５）。これにより、バックアップデータとして、図５に示したバックアップデータテーブル６０が作成される。
【００６５】
次に、ＭＰ１３は、全てのユーザーデータについてダーティデータの判定処理が完了したか否かを判定する（Ｓ３６）。ＭＰ１３は、この判定処理が完了していなければステップＳ３４に戻り（Ｓ３６：ＮＯ）、ダーティデータの選択処理を繰り返す。全てのユーザーデータについてダーティデータの判定処理が完了していると判定した場合（Ｓ３６：ＹＥＳ）、ＭＰ１３は、ステップＳ３３およびステップＳ３５で作成したバックアップデータテーブル６０に基づき、バックアップ対象となるバックアップデータの合計サイズを計算する（Ｓ３７）。ステップＳ３７でバックアップデータの合計サイズを計算した後、ＭＰ１３は、バックアップデータ選択処理を終了する。
【００６６】
図１２は、バックアップデータの退避先をＮＶＲＡＭ１５から選択する退避先選択処理のフローチャートを示す。
【００６７】
ＭＰ１３は、ＮＶＲＡＭ管理テーブル５０に基づき、退避先データテーブルを作成する（Ｓ４０）。なお、この時点において、退避先データテーブルには、データは何も反映されていない。ＭＰ１３は、ＮＶＲＡＭ管理テーブル５０、および図１１のバックアップデータ選択処理で作成したバックアップデータテーブル６０を読み込む（Ｓ４１）。
【００６８】
ここで、ＮＶＲＡＭ１５の容量効率を高めるため、ＭＰ１３はＮＶＲＡＭ１５上にバックアップ用データ退避領域を設けずにバックアップデータ格納先としてクリーンデータが格納されているユーザーデータ領域を選択する。そのため、ＭＰ１３はＮＶＲＡＭ１５のユーザーデータの管理テーブルを読み込み、バックアップデータ格納先となるクリーンデータの位置を特定する必要がある。この時バックアップ格納先を選択する優先順位は以下の順となる。（１）ユーザーデータが格納されていない空き領域、（２）最も大きいデータ管理単位であるスロットの内、クリーン状態のスロット、（３）スロットの次に大きいデータ管理単位であるセグメントの内、クリーン状態のセグメント、（４）最も小さいデータ管理単位であるブロックの内、クリーン状態のブロック。このように、大きい領域から順に選択することにより、主記憶メモリ１４からＮＶＲＡＭ１５への書込み時間を短縮することができる。よって、バッテリ１６によるクラスタ１０への給電時間を短くすることができ、バッテリ１６の容量を削減することができる。ここで、クリーン状態とは、その対応する領域に格納されているデータが全てクリーンデータであり、ダーティデータを格納していない状態を示す。
【００６９】
ＭＰ１３は、ＮＶＲＡＭ管理テーブル５０に基づき、ＮＶＲＡＭ１５に空き領域があるか否かを判定する（Ｓ４２）。ＮＶＲＡＭ１５に空き領域がある場合（Ｓ４２：ＹＥＳ）、ＭＰ１３は、空き領域を選択する（Ｓ４３）。一方、ＮＶＲＡＭ１５に空き領域がない場合（Ｓ４２：ＮＯ）、ＭＰ１３は、ＮＶＲＡＭ１５にクリーン状態のスロットがあるか否かを判定する（Ｓ４４）。ＮＶＲＡＭ１５にクリーン状態のスロットがある場合（Ｓ４４：ＹＥＳ）、ＭＰ１３は、クリーン状態のスロットを選択する（Ｓ４５）。ＮＶＲＡＭ１５にクリーン状態のスロットがない場合（Ｓ４４：ＮＯ）、ＭＰ１３は、ＮＶＲＡＭ１５にクリーン状態のセグメントがあるか否かを判定する（Ｓ４６）。ＮＶＲＡＭ１５にクリーン状態のセグメントがある場合（Ｓ４６：ＹＥＳ）、ＭＰ１３は、クリーン状態のセグメントを選択する（Ｓ４７）。ＮＶＲＡＭ１５にクリーン状態のセグメントがない場合（Ｓ４６：ＮＯ）、ＭＰ１３は、クリーン状態のブロックを選択する（Ｓ４８）。このようにして、ＭＰ１３は、退避領域を選択するので、ＮＶＲＡＭ１５中のクリーンデータをなるべく残しておくことができる。
【００７０】
これらの退避先選択処理の後、ＭＰ１３は、選択した領域の書込回数に１を足した回数が、最大書込可能回数を超えるか否かを判定する（Ｓ４９）。選択した領域の書込回数に１を足した回数が最大書込可能回数以上である場合（Ｓ４９：ＹＥＳ）、Ｓ４２に戻り、退避先選択処理を繰り返す。一方、選択した領域の書込回数に１を足した回数が最大書込可能回数未満である場合（Ｓ４９：ＮＯ）、ＭＰ１３は、ＮＶＲＡＭ管理テーブル５０における選択した退避領域のキャッシュステートをダーティに遷移させる（Ｓ５０）。ダーティに遷移させることにより、リカバリ時に誤ってバックアップデータを破棄することを防止することができる。ＭＰ１３は、選択した領域に対し、退避させるユーザーデータを割り当て、退避先データテーブル７０に、割り当てたユーザーデータに関するスロットポインタ、スロットＩＤ、セグメントＩＤ、データサイズ、データ先頭アドレスを反映させる（Ｓ５１）。
【００７１】
次に、ＭＰ１３は、図１１のＳ３７で算出したバックアップデータの合計サイズ分だけ退避領域を選択したか否かを判定する（Ｓ５２）。バックアップデータの合計サイズ分だけ退避領域を選択したと判定した場合（Ｓ５２：ＹＥＳ）、ＭＰ１３は、退避先選択処理を終了する。一方、バックアップデータの合計サイズ分だけ退避領域を選択していないと判定した場合（Ｓ５２：ＮＯ）、ＭＰ１３は、ステップＳ４２に戻る。
【００７２】
図１３は、主記憶メモリ１４からＮＶＲＡＭ１５へバックアップデータを転送するデータ転送処理のフローチャートを示す。
【００７３】
ＭＰ１３は、バックアップデータテーブル６０と、退避先データテーブル７０とを読み込む（Ｓ６０）。次に、ＭＰ１３は、読み込んだ２つのテーブルに基づいて、ＮＶＲＡＭ１５のＤＭＡ１５Ａでデータ転送するためのデータ転送命令を主記憶メモリ１４に作成する（Ｓ６１）。この時、主記憶メモリ管理テーブル４０、ＮＶＲＡＭ管理テーブル５０、バックアップデータテーブル６０、および退避先データテーブル７０も転送対象に含める。次に、ＭＰ１３は、ＤＭＡ１５Ａに作成したデータ転送命令を読み込ませ、ＤＭＡ１５Ａにデータ転送を実行させる（Ｓ６２）。
【００７４】
ＭＰ１３は、ＤＭＡ１５Ａにデータ転送を実行させた後、一定時間待機し（Ｓ６３）、ＤＭＡ１５Ａによるデータ転送が完了したか否かを判定する（Ｓ６４）。データ転送が完了していなければ（Ｓ６４：ＮＯ）、ＭＰ１３は、ステップＳ６３に戻り待機する。データ転送が完了していれば（Ｓ６４：ＹＥＳ）、ＭＰ１３は、全バックアップデータについて転送を完了したか否かを判定する（Ｓ６５）。全バックアップデータについて転送を完了していなければ（Ｓ６５：ＮＯ）、ＭＰ１３はステップＳ６２に戻り、転送処理を繰り返す。全バックアップデータについて転送を完了してしれば（Ｓ６５：ＹＥＳ）、ＭＰ１３はデータ転送処理を終了する。
【００７５】
図１４は、電源が復旧した時の、ＭＰ１３によるバックアップデータの復旧処理のフローチャートを示す。
【００７６】
ＭＰ１３は、ＮＶＲＡＭ１５に復旧データが存在するか否かを判定する（Ｓ７０）。例えば、ＮＶＲＡＭ１５にバックアップデータテーブル６０および退避先データテーブル７０が格納されているか否かを判定する。ＮＶＲＡＭ１５に復旧データが存在しないと判定された場合（Ｓ７０：ＮＯ）、ＭＰ１３は復旧処理を終了する。一方、ＮＶＲＡＭ１５に復旧データが存在すると判定された場合（Ｓ７０：ＹＥＳ）、ＭＰ１３は、ＮＶＲＡＭ１５から退避先データテーブル７０を読み込み、ＮＶＲＡＭ１５上のバックアップデータを特定する（Ｓ７１）。
【００７７】
次に、ＭＰ１３は、ステップＳ７２で特定したバックアップデータを主記憶メモリ１４に再展開するために、ＮＶＲＡＭ１５から主記憶メモリ１４にステップＳ７２で特定したバックアップデータを転送する（Ｓ７２）。また、ＭＰ１３は、主記憶メモリ管理テーブル４０およびＮＶＲＡＭ管理テーブル５０を転送する。ＭＰ１３は、バックアップデータテーブル６０を参照して、主記憶メモリ管理テーブル４０を再構成し（Ｓ７３）、復旧処理を終了する。また、退避先データテーブル７０を参照して、ＮＶＲＡＭ管理テーブル５０を再構成しても良い。バックアップデータの転送時には、バックアップデータに付されたＣＲＣコードをチェックし、ＣＲＣエラーを検出した場合には、そのデータを破棄する。
【００７８】
上記のように、電断時に主記憶メモリ１４に格納されているデータをＮＶＲＡＭ１５の空き領域および／またはクリーンデータ領域に退避するようにしたので、ＮＶＲＡＭ１５の容量効率を高めることができる。また、バックアップデータの退避用としての不揮発性メモリを設ける必要がなくなるので、コストの増大を防止することができる。また、キャッシュメモリとして使用するＮＶＲＡＭ１５にバックアップデータを退避させるので、データ転送時間を短縮することができ、バッテリ１６の容量を削減することができ、コストを減少させることができる。
【００７９】
次に、本発明の第２実施例おけるストレージ装置１０１について説明する。
【００８０】
図１５は、第２実施例におけるストレージシステムを構成するストレージ装置１０１を示している。なお、第１実施例と同一の構成については同一の番号を付して説明を省略し、異なる部分についてのみ説明する。
【００８１】
図１５に示すように、本実施例の各クラスタ１０は、バックアップ専用の不揮発性媒体であるＳＳＤ１７と、ＳＳＤ  Ｉ／Ｆ  ＬＳＩ１８とを有している。ＳＳＤ１７は、ＮＡＮＤ型フラッシュメモリ、Ｐｈａｓｅ  Ｃｈａｎｇｅ  ＲＡＭ（ＰＣＭ）、Ｒｅｓｉｓｔａｎｃｅ  ＲＡＭ（ＲｅＲＡＭ）等の半導体メモリで構成される記憶デバイスであり、その容量は１〜２ＴＢである。ＳＳＤ１７は、通常はＳＡＴＡインターフェースでＭＰ１３と接続している。また、ＳＳＤ１７は、ＤＲＡＭと比較して面積あたりのデータ記録密度は大きいが、データ読み込み速度、データ書き込み速度が小さく、また、データ書き換え可能回数は少ない。
本実施例では、ＳＳＤ１７は、電断時に主記憶メモリ１４に格納されたデータを退避させるためだけに用いられ、バックアップ処理時以外でホストコンピュータ２から読み書きされるデータを格納することは無い。ＳＳＤ  Ｉ／Ｆ  ＬＳＩ１８は、ＳＳＤ１７がＭＰ１３と通信を行うためのコントローラである。
【００８２】
図１６は、本実施例のストレージ装置１０１が電断した時のストレージコントローラ３によるバックアップ処理の動作を示す。なお、図１６では、一方のクラスタ１０におけるバックアップ処理の動作のみを示す。
【００８３】
電源５の故障等により電圧が低下し、電源５からストレージコントローラ３へ電力を供給する回路８が開放状態に遷移した事を契機に、クラスタ１０はバックアップ処理を開始する。本実施例のバックアップ処理では、主記憶メモリ１４に格納されている、ユーザーデータ３０、主記憶メモリ管理テーブル４０、ＮＶＲＡＭ管理テーブル５０、バックアップデータテーブル６０、および退避先データテーブル７０を、ＮＶＲＡＭ１５のクリーンデータ領域および空き領域にデータ転送Ｆ１、ＳＳＤ１７にデータ転送Ｆ２を実行する。このように、本実施例のバックアップ処理では、第１実施例のバックアップ処理と異なり、主記憶メモリ１４からＮＶＲＡＭ１５へのバックアップデータ転送と、主記憶メモリ１４からＳＳＤ１７へのバックアップデータ転送を並列して実行する。バックアップ処理の具体的な処理動作は後述する。
【００８４】
本実施例においても、第１実施例の図１０と同様のバックアップ処理が実行される。しかし、本実施例では、ステップＳ２２に代えて、図１７のバックアップデータの退避先判定処理が実行される。
【００８５】
図１７は、本実施例におけるバックアップデータの退避先判定処理のフローチャートを示す。
【００８６】
ＭＰ１３は、クラスタ１０にＳＳＤ１７が存在するか否かを判定する（Ｓ８０）。ＳＳＤ１７が存在しないと判定すれば（Ｓ８０：ＮＯ）、ＭＰ１３は、図１０のステップＳ２２と同じ処理を実行する。すなわち、バックアップデータの退避先がＮＶＲＡＭ１５しかないので、図１２の処理のみを実行する。
【００８７】
一方、ＳＳＤ１７が存在すると判定した場合（Ｓ８０：ＹＥＳ）、バックアップデータの格納先となる不揮発性媒体が二つあるため、ＭＰ１３は、各媒体に格納するデータ量を設定する処理を実行する。まず、ＭＰ１３は、ＮＶＲＡＭ１５およびＳＳＤ１７のデータ転送スループットを測定する（Ｓ８１）。例えば、ＭＰ１３は、ダミーデータを作成し、主記憶メモリ１４からＮＶＲＡＭ１５とＳＳＤ１７とに対しダミー転送を実行し、データ転送量とデータ転送時間とから１秒あたりのデータ転送量を計算する。これにより、ＮＶＲＡＭ１５のデータ転送スループット（ＶＮＶＲＡＭ［ＧＢ／Ｓ］）およびＳＳＤ１７のデータ転送スループット（ＶＳＳＤ［ＧＢ／Ｓ］）が測定される。
【００８８】
次に、ＭＰ１３は、下記の式（１）、（２）を用いて、ＮＶＲＡＭ１５とＳＳＤ１７にバックアップするデータ量を算出する（Ｓ８２）。
【数１】
2015097751.tif 000003
【数２】
2015097751.tif 000004
ここで、各変数は
ＶＳＳＤ：ステップＳ８１で測定したＳＳＤのデータ転送スループット［ＧＢ／Ｓ］
ＶＮＶＲＡＭ：ステップＳ８１で測定したＮＶＲＡＭのデータ転送スループット［ＧＢ／Ｓ］
ＣＭａｘＤｉｒｔｙ：主記憶メモリに格納されているダーティデータ量［ＧＢ］
ＢＳＳＤ：ＳＳＤにバックアップするデータ量［ＧＢ］
ＢＮＶＲＡＭ：ＮＶＲＡＭにバックアップするデータ量［ＧＢ］
である。
【００８９】
次に、ＭＰ１３は、ステップＳ８２で算出したＢＳＳＤ［ＧＢ］およびＢＮＶＲＡＭ［ＧＢ］に基づき、ＳＳＤ１７およびＮＶＲＡＭ１５のそれぞれにバックアップするデータを決定する。ＭＰ１３は、ステップＳ８３で決定したＮＶＲＡＭ１５に退避するバックアップデータについて、図１０のステップＳ２２と同じ処理を実行する。
【００９０】
次に、ＭＰ１３は、ステップＳ８３で決定したＳＳＤ１７に退避するバックアップデータについて、図示せぬ退避テーブルを作成する（Ｓ８４）。退避テーブルでは、少なくともＩ／Ｏ先情報と、バックアップデータとが対応付けられる。これにより、主記憶メモリ１４にバックアップデータを復旧した時に、Ｉ／Ｏ先情報が示すＩ／Ｏ先にバックアップデータを書込むことができる。ＭＰ１３は、退避テーブル作成処理の後、退避先判定処理を終了する。このように、ＮＶＲＡＭ１５およびＳＳＤ１７のデータ転送スループットに基づき、バックアップするデータ量を決定するので、ＮＶＲＡＭ１５およびＳＳＤ１７のそれぞれに対するデータ転送を同時に終了させることができる。よって、バックアップデータを退避させる時間を最短にすることができ、バッテリ１６の容量を削減することができる。
【００９１】
図１８は、本実施例における電源が復旧した時の、ＭＰ１３によるバックアップデータの復旧処理のフローチャートを示す。なお、図１４に示した復旧処理と同一の処理については同一の番号を付して説明を省略し、異なる処理についてのみ説明する。
【００９２】
本実施例の復旧処理では、ステップＳ７２とステップＳ７３との間に、ステップ９０とステップ９１とが追加されている。ＭＰ１３は、ステップ９０において、ＳＳＤ１７にバックアップデータが格納されているか否か判定する。ＳＳＤ１７にバックアップデータが格納されていなければ、ＭＰ１３は、ステップＳ７３に進む。一方、ＳＳＤ１７にバックアップデータが格納されていれば、ＳＳＤ１７に退避されたバックアップデータを主記憶メモリ１４に転送する。
【００９３】
次に、本発明の第３実施例おけるストレージ装置について説明する。本実施例では、第１実施例のストレージ装置と比較して、バックアップデータの復旧処理のみが異なる。よって、バックアップデータの復旧処理についてのみ説明を行う。この復旧処理では、ＮＶＲＡＭ１５上のバックアップデータのうち、主記憶メモリ１４へ転送するデータと主記憶メモリ１４へ転送しないデータとをそれぞれ選択し、主記憶メモリ１４へ転送するデータのみを主記憶メモリ１４へ転送する。これにより、バックアップデータの復旧処理の時間を削減している。なお、第１実施例と同一の構成については同一の番号を付して説明を省略し、異なる部分についてのみ説明する。
【００９４】
図１９は、本実施例における電源が復旧した時の、ＭＰ１３によるバックアップデータの復旧処理の動作を示す。
【００９５】
図１９に示すように、本実施例では、ＮＶＲＡＭ１５に退避されたバックアップデータ１９をセグメント毎に、主記憶メモリ１４に戻すのか、記憶ドライブ６にデステージするのかが判定される。例えば、セグメントを、パリティが未生成であるパリティ未生成セグメント１９Ａと、パリティを生成済みであるパリティ生成済みセグメント１９Ｂに分類する。さらに、パリティ未生成セグメント１９Ａに含まれるダーティデータの割合が所定の閾値未満である第１のパリティ未生成セグメント１９Ａ１と、その割合が所定の閾値以上である第２のパリティ未生成セグメント１９Ａ２とに分類する。
【００９６】
そして、バックアップデータの復旧処理において、第１のパリティ未生成セグメント１９Ａ１に含まれるダーティデータを主記憶メモリ１４に転送するデータ転送Ｆ３、パリティ生成済みセグメント１９Ｂおよび第２のパリティ未生成セグメント１９Ａ２に含まれるダーティデータを記憶ドライブ６に転送するデータ転送Ｆ４を実行する。これにより、主記憶メモリ１４に転送する転送データ量の削減を図ることができ、復旧処理を短時間で終了させることができる。
【００９７】
図２０は、本実施例における電源が復旧した時の、ＭＰ１３によるバックアップデータの復旧処理のフローチャートを示す。なお、図１４に示した復旧処理と同一の処理については同一の番号を付して説明を省略し、異なる処理についてのみ説明する。
【００９８】
Ｓ７０、Ｓ７１の処理を実行後、ＭＰ１３は、ＮＶＲＡＭ１５から主記憶メモリ管理テーブル４０およびＮＶＲＡＭ管理テーブル５０を読み込み、主記憶メモリ１４上に構成する（Ｓ１００）。テーブルを構成後、ＭＰ１３は、復旧対象データ選択処理を実行する（Ｓ１０１）。復旧対象データ選択処理の詳細については後述する。復旧対象データ選択処理が終了すると、ＭＰ１３は、復旧対象データ選択処理において主記憶メモリ１４に復旧させるデータとして選択したバックアップデータ（ダーティデータ）を主記憶メモリ１４に転送する（Ｓ１０２）。バックアップデータの転送時には、バックアップデータに付されたＣＲＣコードをチェックし、ＣＲＣエラーを検出した場合には、そのデータを破棄する。その後、ＭＰ１３は、デステージ処理を実行し（Ｓ１０３）、バックアップデータの復旧処理を終了する。デステージ処理の詳細については後述する。
【００９９】
図２１は、本実施例における復旧対象データ選択処理のフローチャートを示す。
【０１００】
まず、ＭＰ１３は、図２２に示すデステージデータテーブル８０を主記憶メモリ１３上に作成する（Ｓ１１０）。なお、図２２では、デステージデータテーブル８０にデータが入力されているが、作成時点ではデステージデータテーブル８０は空となっている。
【０１０１】
次に、ＭＰ１３は、主記憶メモリ管理テーブル４０を読み込む（Ｓ１１１）。この処理により、電断前の主記憶メモリ１４のキャッシュ管理の状態を確認することができる。ＭＰ１３は、セグメント管理テーブル４３からダーティデータを含む１つのセグメントを選択する（Ｓ１１２）。選択したセグメントについて、パリティ生成済みであるか否かを判定する（Ｓ１１３）。パリティ生成済みであるか否かは、スロット管理テーブル４２のスロットステータス４２Ｄを参照して判定する。選択したセグメントがパリティ生成済みであった場合（Ｓ１１３：ＹＥＳ）、ＭＰ１３は、選択したセグメントに含まれるダーティデータを主記憶メモリ１４に転送しないデータとして選択する（Ｓ１１４）。すなわち、ＮＶＲＡＭ１５に格納されたバックアップデータのうち、選択したセグメントに含まれるダーティデータに対応するダーティデータを主記憶メモリ１４に転送しないデータとして選択する。次に、ＭＰ１３は、Ｓ１１４において選択したダーティデータを図２２のデステージデータテーブルに追加する（Ｓ１１５）。
【０１０２】
一方、選択したセグメントがパリティ未生成である場合（Ｓ１１３：ＮＯ）、ＭＰ１３は、選択したセグメントに含まれるデータに対するダーティデータの割合が所定の閾値以上であるか否かを判定する（Ｓ１１６）。選択したセグメントに含まれるデータに対するダーティデータの割合は、セグメント管理テーブル４３（図４）を参照して算出される。また、所定の閾値は、ユーザーが自由に設定可能である。なお、バックアップ処理において、ダーティデータのみを退避させた場合には、ＭＰ１３は、選択したセグメントにおける空き領域を含む全体のサイズに対するダーティデータの割合が所定の閾値以上であるか否かを判定する。ダーティデータの割合が所定の閾値以上である場合（Ｓ１１６：ＹＥＳ）、ＭＰ１３は、Ｓ１１４へ進む。
【０１０３】
一方、ダーティデータの割合が所定の閾値未満である場合（Ｓ１１６：ＮＯ）、ＭＰ１３は、選択したセグメントに含まれるダーティデータを主記憶メモリ１４に転送するデータとして選択し、データ転送命令を作成する（Ｓ１１７）。ダーティデータの割合が所定の閾値より小さいセグメントに含まれるダーティデータの量は比較的少ないと考えられ、データ復旧時の主記憶メモリ１３へのデータ転送量を少なくすることができる。よって、復旧処理を短時間で終了させることができる。なお、Ｓ１１７ではダーティデータのみを選択したが、クリーンデータも選択して復旧させても良い。
【０１０４】
次に、ＭＰ１３は、全てのダーティデータを含むセグメントについて処理を完了したか否かを判定し、完了していればＳ１１９に進み（Ｓ１１８：ＹＥＳ）、完了していなければＳ１１２に戻る（Ｓ１１８：ＮＯ）。ＭＰ１３は、Ｓ１１７およびＳ１１４で選択したデータに基づき、主記憶メモリ管理テーブル４０とＮＶＲＡＭ管理テーブル５０とを更新する。すなわち、主記憶メモリ管理テーブル４０およびＮＶＲＡＭ管理テーブル５０から、記憶ドライブ６にデステージするダーティデータに関する情報を削除し、新たなダーティデータを格納することを可能にする。これにより、主記憶メモリ１４のキャッシュ利用効率を高めることができる。また、主記憶メモリ管理テーブル４０およびＮＶＲＡＭ管理テーブル５０を更新することにより、バックアップデータの復旧処理後の主記憶メモリ１４およびＮＶＲＡＭ１５のユーザーデータの状態と、管理テーブル４０、５０との整合性をとることができる。
【０１０５】
図２２は、デステージ処理の対象であるダーティデータを管理するデステージデータテーブル８０の構成を示す。
【０１０６】
デステージデータテーブル８０は、スロット管理ポインタ８１と、スロットＩＤ８２と、セグメントＩＤ８３と、ダーティデータサイズ８４と、ダーティデータ先頭アドレス８５とを格納する。スロットＩＤ８２、セグメントＩＤ８３、ダーティデータサイズ８４、およびダーティデータ先頭アドレス８５は、ＮＶＲＡＭ１５における情報である。
【０１０７】
図２３は、本実施例におけるデステージ処理のフローチャートを示す。
【０１０８】
まず、ＭＰ１３は、主記憶メモリ１３からデステージデータテーブル８０を読み込む（Ｓ１２０）。次に、ＭＰ１３は、デステージ対象であるダーティデータのうち、パリティ未生成のダーティデータに対しパリティを生成し（Ｓ１２１）、デステージ対象であるダーティデータとパリティを記憶ドライブ６にデステージ処理する命令を作成する（Ｓ１２２）。なお、パリティの生成は、ＮＶＲＡＭ１５のＤＭＡ１５Ａが行っても良い。
【０１０９】
ＭＰ１３は、ドライブＩ／Ｆ  ＬＳＩ１２に作成した命令を読み込ませ、デステージ対象であるダーティデータとパリティを記憶ドライブ６に転送する（Ｓ１２３）。転送後、ＭＰ１３は、デステージデータテーブル８０の全デステージ対象データについて、デステージ処理を完了したか否かを判定し（Ｓ１２４）、完了していない場合はＳ１２０に戻り、完了していればデステージ処理を終了する。
【０１１０】
次に、本発明の第４実施例におけるストレージ装置について説明する。本実施例では、ＮＶＲＡＭ１５上の退避先を選択する際に、利用頻度の低いクリーンスロットを優先的に選択し、選択したクリーンスロットにバックアップデータを退避させるようにしている。これにより、利用頻度の高いクリーンスロットを残し、電源復旧後の装置のキャッシュヒット率を向上させることができる。なお、第１実施例と同一の構成については同一の番号を付して説明を省略し、異なる部分についてのみ説明する
【０１１１】
図２４は、本実施例におけるＮＶＲＡＭ管理テーブル１５０の構成を示す。ＮＶＲＡＭ管理テーブル１５０は、ＭＲＵ情報テーブル５４およびＬＲＵ情報テーブル５５を格納している。なお、図示していないが、ＮＶＲＡＭ管理テーブル１５０は、図６で示したスロット管理ポインタテーブル５１、スロット管理テーブル５２、およびセグメント管理テーブル５３も格納している。
【０１１２】
ＭＲＵ情報テーブル５４は、どのスロットにより直近にアクセスがあったかを示すテーブルである。すなわち、ＭＲＵ情報テーブル５４では、直近にアクセスのあったスロットがより上位に配置されるように構成されている。換言すれば、直近にアクセスのないスロットほど下位に配置される。ＭＲＵ情報テーブル５４は、アクセス履歴情報５４Ａと、スロット位置ポインタ５４Ｂとを有する。アクセス履歴情報５４Ａは、その数値が小さいほど、より直近にスロットに対しアクセスがあったこと示す情報である。スロット位置ポインタ５４Ｂは、アクセスのあったスロットの位置を示す情報である。したがって、ＭＰ１３は、あるスロットにアクセスがあった場合、そのスロットをＭＲＵ情報テーブル５４の最も上位に配置する。
【０１１３】
ＬＲＵ情報テーブル５５は、どのスロットにより直近にアクセスがなかったかを示すテーブルである。すなわち、ＬＲＵ情報テーブル５５では、直近にアクセスがなかったスロットがより上位に配置されるように構成されている。換言すれば、直近にアクセスのあったスロットほど下位に配置される。ＬＲＵ情報テーブル５５は、アクセス履歴情報５５Ａと、スロット位置ポインタ５５Ｂとを有する。アクセス履歴情報５５Ａは、その数値が小さいほど、より直近にスロットに対しアクセスがなかったこと示す情報である。スロット位置ポインタ５５Ｂは、アクセスのなかったスロットの位置を示す情報である。また、ＮＶＲＡＭ１５の全スロットは、ＭＲＵ情報テーブル５４およびＬＲＵ情報テーブル５５のいずれかに格納される。
【０１１４】
なお、ＭＲＵ情報テーブル５４は、直近にアクセスのあったスロットがより上位に配置されるように構成したが、所定の期間内におけるスロットへのアクセスの回数を記録しておき、回数が多いスロットほど上位に配置するようにしても良い。同様に、ＬＲＵ情報テーブル５５、直近にアクセスのなかったスロットほど、より上位に配置されるように構成したが、所定の期間内におけるスロットへのアクセスの回数を記録しておき、回数が少ないスロットほど上位に配置するようにしても良い。
【０１１５】
図２５は、本実施例における主記憶メモリ１４上のバックアップデータを選択するバックアップデータ選択処理のフローチャートを示す。なお、図１１に示したバックアップデータ選択処理と同一の処理については同一の番号を付して説明を省略し、異なる処理についてのみ説明する。
【０１１６】
バックアップデータテーブル６０を作成後、ＭＰ１３は、主記憶管理テーブル４０とＮＶＲＡＭ管理テーブル１５０とを読み込む（Ｓ１３０）。これにより、ＭＰ１３は、ストレージ装置１が有するクリーンデータの量とダーティデータの量を把握することができる。
【０１１７】
主記憶メモリ容量が合計量より大きいと判定された場合（Ｓ３１：ＮＯ）、ＭＰ１３は、主記憶メモリ１４のダーティデータを含むセグメント数が、ＮＶＲＡＭ１５のクリーン状態のセグメント数以下であるか否かを判定する（Ｓ１３１）。主記憶メモリ１４のダーティデータを含むセグメント数が、ＮＶＲＡＭ１５のクリーン状態のセグメント数以下であった場合（Ｓ１３１：ＹＥＳ）、ＭＰ１３は、ダーティデータを含むセグメントをバックアップデータとして選択する（Ｓ１３２）。これにより、ＭＰ１３、セグメント中のダーティデータのみを選択・抽出して、ＮＶＲＡＭ１５に転送しなくても、セグメントをコピーする処理のみでダーティデータを全て退避させることができる。ＭＰ１３は、ＮＶＲＡＭ１５上のクリーン状態のセグメントを開放し、主記憶メモリ１４のダーティデータを含むセグメントをコピーする処理を行うことにより、ダーティデータをバックアップすることができる。ＭＰ１３は、Ｓ３０で作成したバックアップデータテーブル６０を破棄する（Ｓ１３３）。すなわち、セグメント単位でデータをバックアップするので、バックアップデータの先頭アドレス等の情報が必要なくなるため、バックアップデータテーブル６０を破棄する。
【０１１８】
図２６は、本実施例におけるバックアップデータの退避先をＮＶＲＡＭ１５から選択する退避先選択処理のフローチャートを示す。なお、図１２に示した退避先選択処理と同一の処理については同一の番号を付して説明を省略し、異なる処理についてのみ説明する。
【０１１９】
まず、ＭＰ１３は、主記憶メモリ１４上にバックアップデータテーブル６０が存在するか否かを判定する（Ｓ１４０）。バックアップデータテーブル６０が存在しない場合（Ｓ１４０：ＮＯ）、すなわち、図２６のＳ１３３でバックアップデータテーブル６０を破棄している場合、ＭＰ１３は、退避先リストを作成する（Ｓ１４１）。その後、ＭＰ１３は、ＮＶＲＡＭ管理テーブル１５０を読み込み（Ｓ１４２）、退避先を選択する処理を行う（Ｓ１４３）。Ｓ１４３のクリーン領域選択処理の詳細については後述する。
【０１２０】
一方、バックアップデータテーブル６０が存在する場合（Ｓ１４０：ＹＥＳ）、ＭＰ１３は、図１２で説明したＳ４０〜Ｓ４２の処理を実行し、退避先を選択する処理を行う（Ｓ４３、Ｓ１４１）。
【０１２１】
ＭＰ１３は、選択した領域の書込回数に１を足した回数が最大書込可能回数以上である場合（Ｓ４９：ＹＥＳ）において、Ｓ４９の処理に至るルートが、Ｓ４０〜Ｓ４２の処理を実行するルートであった場合はＳ４２の処理に戻り、Ｓ１４０〜Ｓ１４１の処理を実行するルートであった場合はＳ１４３の処理に戻る。
【０１２２】
また、ＭＰ１３は、Ｓ５１の処理において、Ｓ５１の処理に至るルートが、Ｓ４０〜Ｓ４２の処理を実行するルートであった場合は、退避先データテーブル７０に、割り当てたユーザーデータに関する情報を反映させ、Ｓ１４０〜Ｓ１４１の処理を実行するルートであった場合は、退避先リストにＳ１４３で選択したスロットおよびセグメントに関する情報を反映させる。
【０１２３】
図２７は、クリーン領域選択処理のフローチャートを示す。
【０１２４】
まず、ＭＰ１３は、Ｓ４１の処理又はＳ１４１の処理で読み込んだＮＶＲＡＭ管理テーブル１５０のＬＲＵ情報テーブル５５に、退避先として未選択のクリーンスロットがあるか否かを判定する（Ｓ１５０）。ＬＲＵ情報テーブル５５に未選択のクリーンスロットがある場合（Ｓ１５０：ＹＥＳ）、最上位のクリーンスロットを選択し（Ｓ１５１）、クリーン領域選択処理を終了する。
【０１２５】
一方、ＬＲＵ情報テーブル５５に未選択のクリーンスロットがない場合（Ｓ１５０：ＮＯ）、ＭＰ１３は、ＭＲＵ情報テーブル５４に、退避先として未選択のクリーンスロットがあるか否かを判定する（Ｓ１５２）。ＭＲＵ情報テーブル５４に未選択のクリーンスロットがある場合（Ｓ１５０：ＹＥＳ）、最下位のクリーンスロットを選択し（Ｓ１５１）、クリーン領域選択処理を終了する。このように、クリーンスロットを選択することにより、利用頻度の高いクリーンスロットを残すことができるので、電源復旧後におけるキャッシュヒット率を向上させることができる。
【０１２６】
ＭＲＵ情報テーブル５４に未選択のクリーンスロットがない場合（Ｓ１５２：ＮＯ）、ＭＰ１３は、Ｓ１５４の処理へ進む。Ｓ１５４〜Ｓ１５６の処理は、図１２のＳ４６〜Ｓ４８と同じであるので説明を省略する。
【０１２７】
図２８は、本実施例における主記憶メモリ１４からＮＶＲＡＭ１５へバックアップデータを転送するデータ転送処理のフローチャートを示す。なお、図１３に示した退避先選択処理と同一の処理については同一の番号を付して説明を省略し、異なる処理についてのみ説明する。
【０１２８】
まず、ＭＰ１３は、主記憶メモリ１４にバックアップデータテーブル６０が存在するか否かを判定する（Ｓ１６０）。主記憶メモリ１４にバックアップデータテーブル６０が存在しない場合（Ｓ１６０：ＮＯ）、すなわち、図２５のＳ１３３の処理でバックアップデータテーブル６０を破棄している場合、ＭＰ１３は、主記憶メモリ管理テーブル４０と退避先リストとを読み込む。そして、Ｓ６１の処理において、退避先リストのセグメントに主記憶メモリ管理テーブル４０におけるダーティデータを含むセグメントをコピーする命令を作成する。なお、主記憶メモリ管理テーブル４０、ＮＶＲＡＭ管理テーブル５０、退避先リストを転送対象に含める。
【０１２９】
一方、主記憶メモリ１４にバックアップデータテーブル６０が存在する場合（Ｓ１６０：ＹＥＳ）、ＭＰ１３は、Ｓ６０の処理を行う。
【０１３０】
図２９は、本実施例における、電源が復旧した時の、ＭＰ１３によるバックアップデータの復旧処理のフローチャートを示す。なお、図１３に示した退避先選択処理と同一の処理については同一の番号を付して説明を省略し、異なる処理についてのみ説明する。
【０１３１】
ＭＰ１３は、Ｓ７０において、ＮＶＲＡＭ１５に、バックアップデータテーブル６０、退避先データテーブル７０、又は退避先リストが格納されているか否かを判定する。ＮＶＲＡＭ１５に復旧データが存在すると判定された場合（Ｓ７０：ＹＥＳ）、ＭＰ１３は、ＮＶＲＡＭ１５に退避先テーブルが存在するか否かを判定する（Ｓ１７０）。ＮＶＲＡＭ１５に退避先テーブルが存在する場合、ＭＰ１３は、Ｓ７１〜Ｓ７３の処理を実行する。すなわち、ＮＶＲＡＭ１５に退避先テーブルが存在する場合は、全ユーザーデータまたはダーティデータを退避させた場合である。
【０１３２】
一方、ＮＶＲＡＭ１５に退避先テーブルが存在しない場合、ＭＰ１３は、主記憶メモリ管理テーブル４０およびＮＶＲＡＭ管理テーブル５０を主記憶メモリ１４に転送し、それらの管理テーブル４９、５０を主記憶メモリ１４上に再構成する（Ｓ１７１）。すなわち、データ転送処理においてＮＶＲＡＭ１５に退避させたデータを、復旧処理において主記憶メモリ１４に戻さない。これにより、復旧処理にかかる時間を短縮することができ、ホストコンピュータ２は、電源復旧後直ちにＮＶＲＡＭ１５のユーザーデータにアクセスすることができる。
【０１３３】
なお、上記実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。ある実施例の構成の一部を、他の実施例の構成に置き換えることができる。ある実施例の構成に他の実施例の構成を加えることもできる。各実施例の構成の一部について、他の構成の追加、削除、置換が可能である。例えば、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等により、ハードウェアで実現してもよい。あるいは、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。
【符号の説明】
【０１３４】
１：ストレージ装置、２：ホストコンピュータ、６：記憶ドライブ、４：ドライブ筐体、３：ストレージコントローラ、１４：主記憶メモリ、１５：ＮＶＲＡＭ、１６：バッテリ、６０：バックアップデータテーブル、７０：退避先データテーブル
【図１】
2015097751.tif 000005
【図２】
2015097751.tif 000006
【図３】
2015097751.tif 000007
【図４】
2015097751.tif 000008
【図５】
2015097751.tif 000009
【図６】
2015097751.tif 000010
【図７】
2015097751.tif 000011
【図８】
2015097751.tif 000012
【図９】
2015097751.tif 000013
【図１０】
2015097751.tif 000014
【図１１】
2015097751.tif 000015
【図１２】
2015097751.tif 000016
【図１３】
2015097751.tif 000017
【図１４】
2015097751.tif 000018
【図１５】
2015097751.tif 000019
【図１６】
2015097751.tif 000020
【図１７】
2015097751.tif 000021
【図１８】
2015097751.tif 000022
【図１９】
2015097751.tif 000023
【図２０】
2015097751.tif 000024
【図２１】
2015097751.tif 000025
【図２２】
2015097751.tif 000026
【図２３】
2015097751.tif 000027
【図２４】
2015097751.tif 000028
【図２５】
2015097751.tif 000029
【図２６】
2015097751.tif 000030
【図２７】
2015097751.tif 000031
【図２８】
2015097751.tif 000032
【図２９】
2015097751.tif 000033
【手続補正書】
【提出日】平成28年10月17日(2016.10.17)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
記憶デバイスと、
ホストコンピュータからデータを受信し、受信したデータを前記記憶デバイスに格納するストレージコントローラと
を備えるストレージシステムであって、
前記ストレージコントローラは、プロセッサと、前記プロセッサに接続され前記データを一時的に格納する揮発性の第１のキャッシュメモリと、前記マイクロプロセッサに接続され前記データを一時的に格納する不揮発性の第２のキャッシュメモリと、電断が起こった場合に少なくとも前記プロセッサおよび前記第１のキャッシュメモリに電力を供給するバッテリと、を備え、
前記第２のキャッシュメモリは、前記記憶デバイスに格納されていないデータであるダーティデータを格納するダーティデータ領域と、前記ダーティデータ領域以外の残りの領域とを含み、
前記プロセッサは、電断が起こった場合、前記第１のキャッシュメモリに格納されている全部または一部のデータを対象データとして、前記第２のキャッシュメモリの前記残りの領域に格納する
ストレージシステム。
【請求項２】
前記第２のキャッシュメモリの前記残りの領域は、前記記憶デバイスに格納されているデータであるクリーンデータを格納するクリーンデータ領域と、データが格納されていない空き領域とを含み、
前記プロセッサは、電断が起こった場合、前記第１のキャッシュメモリの容量と、前記第２のキャッシュメモリの前記クリーンデータ領域および前記空き領域の合計容量とを比較し、
前記第１のキャッシュメモリの容量が前記合計容量以下の場合は、前記対象データは、前記第１のキャッシュメモリに格納されている全てのデータであり、
前記第１のキャッシュメモリの容量が前記合計容量より大きい場合は、前記対象データは、前記第１のキャッシュメモリに格納されているデータのうちのダーティデータのみである、
請求項１に記載のストレージシステム。
【請求項３】
前記プロセッサは、電断が起こった場合、
前記対象データが前記第１のキャッシュメモリのどこに格納されているのかを示す対象データテーブルと、前記対象データを前記第２のキャッシュメモリのどこに格納するのかを示す退避先データテーブルとを前記第１のキャッシュメモリ上に作成し、
前記対象データテーブルおよび前記退避先データテーブルを前記対象データとともに前記第２のキャッシュメモリの前記残りの領域に格納する
請求項１に記載のストレージシステム。
【請求項４】
前記第２のキャッシュメモリの前記残りの領域は、前記記憶デバイスに格納されているデータであるクリーンデータを格納するクリーンデータ領域と、データが格納されていない空き領域とを含み、
前記プロセッサは、前記クリーンデータ領域および前記空き領域のうち、前記空き領域に優先的に前記対象データの格納先にする
請求項１に記載のストレージシステム。
【請求項５】
前記クリーンデータ領域は、複数の領域を有し、
前記プロセッサは、前記複数の領域のうち大きいサイズ領域から順に前記対象データの格納先にする
請求項４に記載のストレージシステム。
【請求項６】
前記ストレージコントローラは、
前記第１のキャッシュメモリの容量と第２のキャッシュメモリの容量とを比較し、
前記第１のキャッシュメモリの容量が前記第２のキャッシュメモリの容量よりも小さい場合、前記第１のキャッシュメモリの容量と第２のキャッシュメモリの容量との差分を、前記第２のキャッシュメモリで保持できるダーティデータの最大容量に設定し、
前記第１のキャッシュメモリの容量が前記第２のキャッシュメモリの容量以上である場合、前記第１のキャッシュメモリで保持できるダーティデータの最大容量と前記第２のキャッシュメモリの容量とを比較し、
前記第２のキャッシュメモリの容量が前記第１のキャッシュメモリで保持できるダーティデータの最大容量より小さい場合、前記第１のキャッシュメモリで保持できるダーティデータの最大容量を前記第２のキャッシュメモリの容量と等しくし、前記第２のキャッシュメモリが保持できるダーティデータの最大容量を０にし、
前記第２のキャッシュメモリの容量が前記第１のキャッシュメモリで保持できるダーティデータの最大容量以上である場合、前記第２のキャッシュメモリの容量と前記第１のキャッシュメモリで保持できるダーティデータの最大容量との差分を、前記第２のキャッシュメモリで保持できるダーティデータの最大容量に設定する
請求項１乃至請求項５のいずれか一項に記載のストレージシステム。
【請求項７】
前記ストレージコントローラは、前記プロセッサに接続される不揮発性媒体を更に備え、
前記プロセッサは、電断が起こった場合、前記対象データを、前記第２のキャッシュメモリの前記残りの領域および前記不揮発性媒体に分けて格納する
請求項１に記載のストレージシステム。
【請求項８】
前記プロセッサは、前記第１のキャッシュメモリから前記第２のキャッシュメモリへの単位時間当たりのデータ転送量である第１の転送スループット、および、前記第１のキャッシュメモリから前記不揮発性媒体への単位時間当たりのデータ転送量である第２の転送スループットを算出し、
前記プロセッサは、前記第１の転送スループットおよび前記第２の転送スループットに基づき、前記第２のキャッシュメモリの前記残りの領域に格納する第１のデータ量および前記不揮発性媒体に格納する第２のデータ量を決定する
請求項７に記載のストレージシステム。
【請求項９】
前記対象データは、前記第２のキャッシュメモリにおいて、複数のセグメントに分けて格納され、
前記プロセッサは、電断発生後、電断が解消された場合に、ダーティデータを含む前記格納領域に対してパリティが生成されているか否かを前記セグメント毎に判断し、
前記プロセッサは、前記パリティが生成されていない前記セグメントに格納された前記対象データに対するダーティデータの割合に応じて、前記パリティが生成されていない前記セグメントに格納された前記対象データを、前記第１のキャッシュメモリに転送し、又は、前記記憶デバイスに記憶する
請求項１乃至請求項８のいずれか一項に記載のストレージシステム。
【請求項１０】
前記プロセッサは、前記パリティが生成されている前記セグメントに格納された前記対象データを、前記セグメントから前記記憶デバイスに格納する
請求項９に記載のストレージシステム。
【請求項１１】
前記プロセッサは、前記パリティが生成されていない前記セグメントに格納された前記対象データを、前記記憶デバイスに記憶する時に、記憶する前記対象データに対しパリティを生成する
請求項９または請求項１０に記載のストレージシステム。
【請求項１２】
前記第２のキャッシュメモリの前記残りの領域は、前記記憶デバイスに既に格納されたクリーンデータを格納する複数のクリーンデータ領域を含み、
前記プロセッサは、各クリーンデータ領域に格納されたデータへのアクセスの頻度に応じて、各クリーンデータ領域を順位付けし、アクセスの頻度が低い前記クリーンデータ領域から順に前記対象データを格納する
請求項１に記載のストレージシステム。
【請求項１３】
電断が起こった場合にバッテリからの電力で動作するストレージシステムの制御方法であって、
ホストコンピュータからデータを受信する都度に、受信したデータを、一時的に格納する揮発性の第１のキャッシュメモリと、データを一時的に格納する不揮発性の第２のキャッシュメモリとのいずれかに格納し、
前記第１又は第２のキャッシュメモリに格納されているデータを記憶デバイスに格納し、
電断が起こった場合、前記第１のキャッシュメモリに格納されている全部または一部の前記データを対象データとして、前記第２のキャッシュメモリのダーティデータ領域と残りの領域のうち前記残りの領域に格納し、
前記ダーティデータ領域は、前記記憶デバイスに格納されていないデータであるダーティデータを格納する領域であり、
前記残りの領域は、前記第２のキャッシュメモリのうちの前記ダーティデータ領域以外の領域である、
ストレージシステムの制御方法。
【国際調査報告】
2015097751.tif 000034
2015097751.tif 000035