(57)【要約】【課題】記憶装置とライトバック方式でキャッシュするキャッシュメモリとを有する第１のストレージから、第１のストレージより高速にアクセス可能な第２のストレージへのデータの移動にかかる時間の短縮化を図ること。【解決手段】階層ストレージ装置１０１は、第１のストレージとなるティアリングＨＤＤ１０２のＨＤＤ１１２から、マイグレーション対象の記憶領域となった、あるｓｕｂ−ＬＵＮのデータｍｄをシーケンシャルに読み出す。また、階層ストレージ装置１０１は、ティアリングＨＤＤ１０２のキャッシュＳＳＤ１１１から、あるｓｕｂ−ＬＵＮの変更されたデータｄｄｔｙ１〜４を読み出す。次に、階層ストレージ装置１０１は、ＨＤＤ１１２から読み出したデータｍｄと、キャッシュＳＳＤ１１１から読み出したデータｄｄｔｙ１〜４とをマージする。そして、階層ストレージ装置１０１は、マージしたデータｍｄ’をティアリングＳＳＤ１０３に書き込む。【選択図】図１
2016207096.tif 000002
【特許請求の範囲】
【請求項１】
記憶装置と前記記憶装置のデータをライトバック方式でキャッシュするキャッシュメモリとを有する第１のストレージから前記第１のストレージより高速にアクセス可能な第２のストレージにデータを移動させる際に、前記記憶装置から、移動対象の記憶領域のデータをシーケンシャルに読み出し、
前記移動対象の記憶領域のデータのうち変更されたデータを前記キャッシュメモリから読み出し、
読み出した前記移動対象の記憶領域のデータと、読み出した前記変更されたデータとをマージし、
マージしたデータを、前記第２のストレージに書き込む、
制御部を有することを特徴とする階層ストレージ装置。
【請求項２】
前記制御部は、
前記キャッシュメモリが記憶するデータに応じて前記記憶装置の記憶領域における当該データに対応するアドレスと当該データが変更されたものか否かを示す情報とを対応付けた情報を参照して、前記移動対象の記憶領域のデータのうち変更されたデータを前記キャッシュメモリから読み出すことを特徴とする請求項１に記載の階層ストレージ装置。
【請求項３】
前記制御部は、
移動対象予定の記憶領域を示す情報を受け付け、
前記第１のストレージへのアクセスが発生したことに応じて、受け付けた前記移動対象予定の記憶領域に前記アクセスのアクセス先のアドレスが含まれる場合、前記アクセス先のアドレスを示す情報を記憶し、
前記移動対象予定の記憶領域が前記移動対象の記憶領域となる際に、記憶した前記アクセス先のアドレスを示す情報と前記キャッシュメモリが記憶するデータに応じて前記記憶装置の記憶領域における当該データに対応するアドレスと当該データが変更されたものか否かを示す情報とを対応付けた情報とを参照して、前記アクセス先の記憶領域のデータのうち変更されたデータを前記キャッシュメモリから読み出すことを特徴とする請求項１または２に記載の階層ストレージ装置。
【請求項４】
記憶装置と前記記憶装置のデータをライトバック方式でキャッシュするキャッシュメモリとを有する第１のストレージと、前記第１のストレージより高速にアクセス可能な第２のストレージと、前記第１のストレージと前記第２のストレージとにアクセス可能な階層ストレージ装置とを有する階層ストレージシステムであって、
前記階層ストレージ装置は、
前記第１のストレージから前記第２のストレージにデータを移動させる際に、前記記憶装置から、移動対象の記憶領域のデータをシーケンシャルに読み出し、
前記移動対象の記憶領域のデータのうち変更されたデータを前記キャッシュメモリから読み出し、
読み出した前記移動対象の記憶領域のデータと、読み出した前記変更されたデータとをマージし、
マージしたデータを、前記第２のストレージに書き込む、
ことを特徴とする階層ストレージシステム。
【請求項５】
コンピュータが、
記憶装置と前記記憶装置のデータをライトバック方式でキャッシュするキャッシュメモリとを有する第１のストレージから前記第１のストレージより高速にアクセス可能な第２のストレージにデータを移動させる際に、前記記憶装置から、移動対象の記憶領域のデータをシーケンシャルに読み出し、
前記移動対象の記憶領域のデータのうち変更されたデータを前記キャッシュメモリから読み出し、
読み出した前記移動対象の記憶領域のデータと、読み出した前記変更されたデータとをマージし、
マージしたデータを、前記第２のストレージに書き込む、
処理を実行することを特徴とする階層ストレージ方法。
【請求項６】
コンピュータに、
記憶装置と前記記憶装置のデータをライトバック方式でキャッシュするキャッシュメモリとを有する第１のストレージから前記第１のストレージより高速にアクセス可能な第２のストレージにデータを移動させる際に、前記記憶装置から、移動対象の記憶領域のデータをシーケンシャルに読み出し、
前記移動対象の記憶領域のデータのうち変更されたデータを前記キャッシュメモリから読み出し、
読み出した前記移動対象の記憶領域のデータと、読み出した前記変更されたデータとをマージし、
マージしたデータを、前記第２のストレージに書き込む、
処理を実行させることを特徴とする階層ストレージプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、階層ストレージ装置、階層ストレージシステム、階層ストレージ方法、および階層ストレージプログラムに関する。
【背景技術】
【０００２】
従来、アクセス性能が異なる複数のストレージにより階層ストレージを形成し、データをストレージ間で移動させる技術がある。また、記憶装置とキャッシュメモリとを用いることにより、前述の記憶装置よりアクセス性能を向上させたストレージを形成する技術がある。関連する先行技術として、例えば、ホストからのＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）へのアクセス要求に対して、ＨＤＤの設定数以上の連続するセクタのデータにアクセスするかを判定した場合に記憶装置をキャッシュとして用いない技術がある。また、アプリケーションからのＩＯ要求のそれぞれを構成可能なキャッシュマップと比較し、構成可能なキャッシュマップに基づきＩＯ要求のそれぞれを処理し、付与したキャッシング決定に従ってＩＯ要求のそれぞれに対し選択的なキャッシングを行う技術がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１３−７７１６１号公報
【特許文献２】特表２０１３−５１１０９１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来技術によれば、記憶装置とライトバック方式でキャッシュするキャッシュメモリとを有する第１のストレージから、第１のストレージより高速にアクセス可能な第２のストレージへのデータの移動にかかる時間が遅延することがある。具体的には、第１のストレージから移動対象の記憶領域のデータを読み込む際、第１のストレージの記憶装置には、移動対象の記憶領域のデータのうち変更されていないデータが散在する場合がある。この場合、第１のストレージの記憶装置から、変更されていないデータのそれぞれに対してランダムアクセスを発行して読み出すことになるため、移動にかかる時間が遅延することになる。
【０００５】
１つの側面では、本発明は、記憶装置とライトバック方式でキャッシュするキャッシュメモリとを有する第１のストレージから、第１のストレージより高速にアクセス可能な第２のストレージへのデータの移動にかかる時間を短縮化できる階層ストレージ装置、階層ストレージシステム、階層ストレージ方法、および階層ストレージプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一側面によれば、記憶装置と記憶装置のデータをライトバック方式でキャッシュするキャッシュメモリとを有する第１のストレージから第１のストレージより高速にアクセス可能な第２のストレージにデータを移動させる際に、記憶装置から、移動対象の記憶領域のデータをシーケンシャルに読み出し、移動対象の記憶領域のデータのうち変更されたデータをキャッシュメモリから読み出し、読み出した移動対象の記憶領域のデータと、読み出した変更されたデータとをマージし、マージしたデータを、第２のストレージに書き込む階層ストレージ装置、階層ストレージシステム、階層ストレージ方法、および階層ストレージプログラムが提案される。
【発明の効果】
【０００７】
本発明の一態様によれば、記憶装置とライトバック方式でキャッシュするキャッシュメモリとを有する第１のストレージから、第１のストレージより高速にアクセス可能な第２のストレージへのデータの移動にかかる時間を短縮化できるという効果を奏する。
【図面の簡単な説明】
【０００８】
【図１】図１は、本実施の形態にかかる階層ストレージシステム１００の動作例を示す説明図である。
【図２】図２は、階層ストレージ装置１０１のハードウェア構成例を示すブロック図である。
【図３】図３は、階層ストレージ装置１０１のソフトウェア構成例を示すブロック図である。
【図４】図４は、階層ストレージ装置１０１の機能構成例を示すブロック図である。
【図５】図５は、キャッシュメモリ読み出し処理の第一の例を示す説明図である。
【図６】図６は、キャッシュメモリ読み出し処理の第二の例を示す説明図である。
【図７】図７は、マイグレーション処理手順の一例を示すフローチャートである。
【図８】図８は、ＨＤＤ読み出し処理手順の一例を示すフローチャートである。
【図９】図９は、キャッシュメモリ読み出し処理の第一の例の手順を示すフローチャートである。
【図１０】図１０は、ｓｕｂ−ＬＵＮデータ生成処理手順の一例を示すフローチャートである。
【図１１】図１１は、テンポラリーリスト作成処理手順の一例を示すフローチャートである。
【図１２】図１２は、ユーザＩＯリクエスト発生時処理手順の一例を示すフローチャートである。
【図１３】図１３は、キャッシュメモリ読み出し処理の第二の例の手順を示すフローチャートである。
【発明を実施するための形態】
【０００９】
以下に図面を参照して、開示の階層ストレージ装置、階層ストレージシステム、階層ストレージ方法、および階層ストレージプログラムの実施の形態を詳細に説明する。
【００１０】
図１は、本実施の形態にかかる階層ストレージシステム１００の動作例を示す説明図である。具体的には、階層ストレージ装置１０１を有する階層ストレージシステム１００は、第１のストレージと第２のストレージとにより階層ストレージを形成し、形成した階層ストレージの記憶領域を階層ストレージシステム１００のユーザに提供する。さらに、階層ストレージ装置１０１は、記憶装置とライトバック方式によるキャッシュメモリとを用いて第１のストレージを形成することにより、前述の記憶装置よりアクセス性能を向上させたストレージとして運用する。
【００１１】
ここで、階層ストレージが採用されたストレージシステムは、データをストレージ間で移動させることにより、各階層に属するストレージの負荷を分散させる。各階層に属するストレージは、１つでもよいし複数あってもよい。また、移動するデータのデータサイズは、どのようなサイズでもよいが、例えば、ＬＵＮ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ  Ｎｕｍｂｅｒ）を分割したｓｕｂ−ＬＵＮのデータサイズとする。例えば、ｓｕｂ−ＬＵＮのデータサイズは、１［ＧＢ］である。以下、ストレージ間でデータを移動させることを、「マイグレーション」と呼称する。
【００１２】
ここで、第１のストレージは、階層ストレージ装置１０１により論理的に形成されたものである。または、記憶装置とキャッシュメモリとを有するストレージ装置が存在しており、階層ストレージ装置１０１は、記憶装置とキャッシュメモリとを有するストレージ装置を制御してもよい。また、第１のストレージの記憶装置は、不揮発性の記憶媒体であればどのようなものでもよい。例えば、第１のストレージの記憶装置は、磁気ディスクを記憶媒体とするＨＤＤでもよいし、磁気テープを記憶媒体とするテープドライブでもよい。
【００１３】
また、ライトバック方式によるキャッシュメモリについて、ライトバック方式とは、記憶装置にデータを書き込む際、一旦キャッシュメモリにデータを書き込み、処理の空き時間等ができてからキャッシュメモリから記憶装置に書き込む方式である。従って、キャッシュメモリのデータと、記憶装置とのデータとが常に一致するとは限らない。
【００１４】
第１のストレージのキャッシュメモリは、第１のストレージの記憶装置より高速にアクセス可能であればよく、不揮発性でもよいし揮発性でもよい。例えば、第１のストレージのキャッシュメモリは、半導体メモリを記憶媒体とするＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）や、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）でもよい。
【００１５】
第２のストレージは、不揮発性であり、第１のストレージより高速にアクセス可能であればよい。例えば、第１のストレージの記憶装置がＨＤＤでキャッシュメモリがＳＳＤである場合や、第１のストレージの記憶装置がテープドライブでキャッシュメモリがＨＤＤである場合には、第２のストレージは、例えば、ＳＳＤでよい。また、第２のストレージが、第１のストレージのようにキャッシュメモリを有してもよいし、有していなくてもよい。
【００１６】
ここで、第１のストレージから第２のストレージへのデータ移動にかかる時間が延びることがある。具体的には、例えば、第１のストレージから移動対象の記憶領域のデータを読み込む際、第１のストレージの記憶装置には、移動対象の記憶領域のデータのうち変更されていないデータが偏在する場合もあるし、散在する場合もある。
【００１７】
変更されていないデータが偏在する場合には、第１のストレージの記憶装置から、変更されていないデータのそれぞれに対してランダム読み出しを行っても、ランダム読み出しを行う回数は多くないため、データ移動にかかる時間はさほど延びることはない。しかし、変更されていないデータが散在する場合には、第１のストレージの記憶装置から、変更されていないデータのそれぞれに対してランダム読み出しを行うことになり、ランダム読み出しを行う回数が多くなって、データ移動にかかる時間が延びることになる。
【００１８】
より具体的な例として、第１のストレージのキャッシュメモリの１つのデータサイズが４［ＫＢ］であり、キャッシュヒット率が５０［％］であり、第１のストレージの記憶装置がＨＤＤであって、ランダム読み出しの性能が２００［ｉｏｐｓ］であるとする。このとき、１［ＧＢ］のｓｕｂ−ＬＵＮのデータをマイグレーションするとなると、第１のストレージの記憶装置から読み出すデータの個数は、１［ＧＢ］＊０．５／４［ＫＢ］＝１３１０７２［個］となる。そして、１３１０７２［個］のデータが全て連続していない際に、第１のストレージから１３１０７２［個］のデータを読み出すとなると、１３１０７２回のランダム読み出しが発生することになる。結果、第１のストレージの記憶装置からの読み出しに、１３１０７２／２００＝６５５［秒］かかることになる。
【００１９】
そこで、本実施の形態では、第１のストレージの記憶装置から読み出したデータと、第１のストレージのライトバック方式でキャッシュするキャッシュメモリのデータとをマージして第２のストレージに書き込む階層ストレージ方法について説明する。以下、図１を用いて、階層ストレージ装置１０１の動作を説明する。図１で示す階層ストレージシステム１００は、階層ストレージ装置１０１と、第１のストレージとするティアリングＨＤＤ１０２と、第１のストレージよりアクセス性能が高い第２のストレージとするティアリングＳＳＤ１０３とを有する。そして、ティアリングＨＤＤ１０２は、ライトバック方式によるキャッシュメモリとしてＳＳＤを用いたキャッシュＳＳＤ１１１と、記憶装置としてＨＤＤ１１２とを有する。
【００２０】
階層ストレージ装置１０１は、階層ストレージシステム１００を制御するコンピュータである。階層ストレージ装置１０１は、例えば、サーバである。また、階層ストレージ装置１０１に、ティアリングＨＤＤ１０２とティアリングＳＳＤ１０３とが含まれていてもよい。図１の（１）が示す処理において、階層ストレージ装置１０１は、第１のストレージとなるティアリングＨＤＤ１０２のＨＤＤ１１２から、マイグレーション対象の記憶領域となった、あるｓｕｂ−ＬＵＮのデータｍｄをシーケンシャルに読み出す。ここで、データｍｄは、あるｓｕｂ−ＬＵＮの変更されていないデータとして、ｄｏｌｄ１〜４を含む。図１では、ハッチを付与した領域が変更されていないデータを示す。
【００２１】
また、図１の（２）が示す処理において、階層ストレージ装置１０１は、ティアリングＨＤＤ１０２のキャッシュＳＳＤ１１１から、あるｓｕｂ−ＬＵＮの変更されたデータｄｄｔｙ１〜４を読み出す。ここで、図１では、塗りつぶした領域が、あるｓｕｂ−ＬＵＮの変更されたデータを示す。なお、図１におけるキャッシュＳＳＤ１１１に含まれる白抜きの領域は、ｓｕｂ−ＬＵＮ以外のデータである。ここで、図１の（１）が示す処理と図１の（２）が示す処理とについて、階層ストレージ装置１０１は、どちらかを先に実行してもよいし、並行して実行してもよい。
【００２２】
次に、階層ストレージ装置１０１は、図１の（３）が示す処理において、ＨＤＤ１１２から読み出したデータｍｄと、キャッシュＳＳＤ１１１から読み出したデータｄｄｔｙ１〜４とをマージする。マージすることにより、階層ストレージ装置１０１は、データｍｄ’を得る。ここで、データｍｄ’は、あるｓｕｂ−ＬＵＮの変更されたデータｄｄｔｙ１〜４を含むものである。そして、階層ストレージ装置１０１は、図１の（４）が示す処理において、データｍｄ’をティアリングＳＳＤ１０３に書き込む。
【００２３】
これにより、マイグレーション時に、ＨＤＤ１１２にランダム読み出しを発生させることがなくなるため、マイグレーションにかかる時間を短縮化することができる。マイグレーションにかかる時間として、具体的には、例えば、ＨＤＤに対するシーケンシャルの読み出しが、１００［ＭＢ／ｓｅｃ］であるとすると、１［ＧＢ］のマイグレーションにかかる時間は約１０［秒］となる。従って、本実施の形態にかかるマイグレーションによれば、ＨＤＤに対してランダム読み出しを行ってマイグレーションを行う場合に比べて、６５分の１の時間でマイグレーションを行うことができる。
【００２４】
また、本実施の形態における階層ストレージシステム１００は、２階層のストレージであったが、３階層以上のストレージを有してもよい。
【００２５】
（階層ストレージ装置１０１のハードウェア構成例）
図２は、階層ストレージ装置１０１のハードウェア構成例を示すブロック図である。図２において、階層ストレージ装置１０１は、ＣＰＵ２０１と、ＲＯＭ（Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ２０３と、を含む。また、階層ストレージ装置１０１は、ディスクドライブ２０４およびディスク２０５と、通信インターフェース２０６と、を含む。また、ＣＰＵ２０１〜ディスクドライブ２０４、通信インターフェース２０６はバス２０７によってそれぞれ接続される。
【００２６】
ＣＰＵ２０１は、階層ストレージ装置１０１の全体の制御を司る演算処理装置である。また、階層ストレージ装置１０１は、複数のＣＰＵを有してもよい。ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶する不揮発性メモリである。ＲＡＭ２０３は、ＣＰＵ２０１のワークエリアとして使用される揮発性メモリである。
【００２７】
ディスクドライブ２０４は、ＣＰＵ２０１の制御に従ってディスク２０５に対するデータのリードおよびライトを制御する制御装置である。ディスクドライブ２０４には、例えば、磁気ディスクドライブ、光ディスクドライブ、ソリッドステートドライブなどを採用することができる。ディスク２０５は、ディスクドライブ２０４の制御で書き込まれたデータを記憶する不揮発性メモリである。例えばディスクドライブ２０４が磁気ディスクドライブである場合、ディスク２０５には、磁気ディスクを採用することができる。また、ディスクドライブ２０４が光ディスクドライブである場合、ディスク２０５には、光ディスクを採用することができる。また、ディスクドライブ２０４がソリッドステートドライブである場合、ディスク２０５には、半導体素子によって形成された半導体メモリ、いわゆる半導体ディスクを採用することができる。
【００２８】
通信インターフェース２０６は、ネットワークと内部のインターフェースを司り、他の装置からのデータの入出力を制御する制御装置である。具体的に、通信インターフェース２０６は、通信回線を通じてネットワークを介して他の装置に接続される。通信インターフェース２０６には、例えば、モデムやＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）アダプタなどを採用することができる。
【００２９】
また、階層ストレージシステム１００の管理者が、階層ストレージ装置１０１を直接操作する場合、階層ストレージ装置１０１は、ディスプレイ、キーボード、マウスといったハードウェアを有してもよい。
【００３０】
図３は、階層ストレージ装置１０１のソフトウェア構成例を示すブロック図である。階層ストレージ装置１０１は、ユーザ空間上で、ティアリングマネージャ３０１を実行する。また、階層ストレージ装置１０１は、ＯＳ空間上で、ティアリングドライバ３１１と、キャッシングボリューム３１２と、ディスクドライバ３１３〜３１５とを実行する。ここで、ディスクドライバ３１３は、ティアリングＳＳＤ１０３のディスクドライバである。また、ディスクドライバ３１４は、キャッシュＳＳＤ１１１のディスクドライバである。また、ディスクドライバ３１５は、ＨＤＤ１１２のディスクドライバである。
【００３１】
ティアリングマネージャ３０１は、ティアリングＨＤＤ１０２とティアリングＳＳＤ１０３とから形成される階層化ストレージを制御するソフトウェアである。具体的には、ティアリングマネージャ３０１は、ｓｕｂ−ＬＵＮごとに記憶するストレージを決定する。図３の例では、階層ストレージシステム１００は、１つのＬＵＮをｓｕｂ−ＬＵＮ  ＩＤ：１〜Ｃに分割してある。そして、図３の例では、ティアリングマネージャ３０１の決定により、ｓｕｂ−ＬＵＮ  ＩＤ：１〜３、５〜８、Ａ〜ＣのデータはティアリングＨＤＤ１０２に記憶させており、ｓｕｂ−ＬＵＮ  ＩＤ：４、９のデータはティアリングＳＳＤ１０３に記憶させてある。
【００３２】
そして、ティアリングマネージャ３０１は、ｓｕｂ−ＬＵＮ単位でアクセス数をカウントする。ｓｕｂ−ＬＵＮ単位のアクセス数に基づいて、ティアリングマネージャ３０１は、ティアリングＨＤＤ１０２が記憶するｓｕｂ−ＬＵＮのうちのいずれかのｓｕｂ−ＬＵＮのデータの移動指示をティアリングドライバ３１１に送信する。また、ｓｕｂ−ＬＵＮ単位のアクセス数に基づいて、ティアリングマネージャ３０１は、ティアリングＳＳＤ１０３が記憶するｓｕｂ−ＬＵＮのうちのいずれかのｓｕｂ−ＬＵＮのデータの移動指示をティアリングドライバ３１１に送信する。
【００３３】
ティアリングドライバ３１１は、階層化ストレージへのインターフェースを提供するソフトウェアである。具体的には、ティアリングドライバ３１１は、ティアリングマネージャ３０１からのデータの移動指示や、ユーザＩＯ（Ｉｎｐｕｔ  Ｏｕｔｐｕｔ）リクエストからのアクセスを、アクセス先に基づいて、キャッシングボリューム３１２か、ディスクドライバ３１３に振り分ける。
【００３４】
キャッシングボリューム３１２は、ライトバック方式によるキャッシュ機能を有するボリュームへのインターフェースを提供するソフトウェアである。具体的には、キャッシングボリューム３１２は、キャッシュアルゴリズムに従って、キャッシュＳＳＤ１１１とＨＤＤ１１２とを制御する。
【００３５】
（階層ストレージ装置１０１の機能構成例）
図４は、階層ストレージ装置１０１の機能構成例を示すブロック図である。階層ストレージ装置１０１は、制御部を有する。制御部は、第１の読み出し部４０１と、第２の読み出し部４０２と、マージ部４０３と、書き込み部４０４と、受け付け部４０５と、検索部４０６と、記憶部４０７とを有する。図４で示すように、第１の読み出し部４０１〜書き込み部４０４は、ティアリングドライバ３１１が有する機能であり、受け付け部４０５〜記憶部４０７は、キャッシングボリューム３１２が有する機能である。ここで、制御部は、記憶装置に記憶されたプログラムをＣＰＵ２０１が実行することにより、各部の機能を実現する。記憶装置とは、具体的には、例えば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、ディスク２０５などである。また、各部の処理結果は、ＣＰＵ２０１のレジスタや、ＣＰＵ２０１のキャッシュメモリ等に格納される。
【００３６】
また、階層ストレージ装置１０１は、管理データｍにアクセス可能である。管理データｍは、ＲＡＭ２０３といった記憶装置に格納される。ここで、管理データｍは、キャッシュメモリが記憶するデータに応じてＨＤＤ１１２の記憶領域におけるデータに対応するアドレスとデータが変更されたものか否かを示す情報とを対応付けた情報である。ここで、ＨＤＤ１１２のアドレスは、ＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓｉｎｇ）で表現されたものでもよいし、ＣＨＳ（Ｃｙｌｉｎｄｅｒ  Ｈｅａｄ  Ｓｅｃｔｏｒ）で表現されたものでもよい。以下の例では、ＨＤＤ１１２のアドレスは、ＬＢＡで表現されたものであるとする。管理データｍの詳細な説明については、図５で説明する。
【００３７】
そして、管理データｍは、キャッシュＳＳＤ１１１が記憶するデータごとにある。ここで、キャッシュＳＳＤ１１１が記憶するデータを、「キャッシュブロック」と呼称する。キャッシュブロックは、例えば、４［ＫＢ］のデータである。また、キャッシュブロックに対応するＨＤＤ１１２のデータを、「ＨＤＤ１１２のデータブロック」と呼称する。図４の例では、管理データｍ１は、キャッシュブロックｃｂ１に対応しており、管理データｍ２は、キャッシュブロックｃｂ２に対応しており、管理データｍｎは、キャッシュブロックｃｂｎに対応する。
【００３８】
第１の読み出し部４０１は、マイグレーションする際に、ＨＤＤ１１２から、マイグレーション対象のｓｕｂ−ＬＵＮのデータをシーケンシャルに読み出す。
【００３９】
第２の読み出し部４０２は、マイグレーション対象のｓｕｂ−ＬＵＮのデータのうち変更されたキャッシュブロックをキャッシュＳＳＤ１１１から読み出す。例えば、第２の読み出し部４０２は、キャッシュＳＳＤ１１１のキャッシュブロックのうち、マイグレーション対象のｓｕｂ−ＬＵＮに対応する全てを、変更されたキャッシュブロックとして読み出してもよい。または、例えば、第２の読み出し部４０２は、変更されたキャッシュブロックを検索部４０６から受け取ることにより、マイグレーション対象の記憶領域のデータのうち変更されたキャッシュブロックをキャッシュＳＳＤ１１１から読み出すこととしてもよい。
【００４０】
マージ部４０３は、第１の読み出し部４０１が読み出したマイグレーション対象の記憶領域のデータと、第２の読み出し部４０２が読み出した変更されたキャッシュブロックとをマージする。
【００４１】
書き込み部４０４は、マージしたデータを、ティアリングＳＳＤ１０３に書き込む。
【００４２】
受け付け部４０５は、移動対象予定、すなわち、マイグレーション予定の記憶領域を示す情報を受け付ける。マイグレーション予定の記憶領域を示す情報は、ＬＢＡの範囲でもよいし、ＬＵＮでもよい。本実施の形態では、マイグレーション予定の記憶領域を示す情報は、マイグレーション予定となるｓｕｂ−ＬＵＮ  ＩＤである。具体的には、ティアリングマネージャ３０１が、マイグレーション予定のｓｕｂ−ＬＵＮ  ＩＤをティアリングドライバ３１１に通知する。ティアリングドライバ３１１は、受け付けたｓｕｂ−ＬＵＮ  ＩＤに対応する先頭ＬＢＡと末尾ＬＢＡとを算出して、受け付け部４０５に通知する。なお、どのようにマイグレーション予定のｓｕｂ−ＬＵＮ  ＩＤを特定するかについては、図６で説明する。
【００４３】
検索部４０６は、管理データｍを参照して、マイグレーション対象のｓｕｂ−ＬＵＮのうち変更されたキャッシュブロックを検索する。検索部４０６は、検索して得られたキャッシュブロックを、第２の読み出し部４０２に通知する。
【００４４】
記憶部４０７は、ティアリングＨＤＤ１０２へのアクセスが発生したことに応じて、受け付けたマイグレーション予定の記憶領域にアクセス先のＬＢＡが含まれる場合、アクセス先のＬＢＡを示すＩＯ情報ａを記憶する。ＩＯ情報ａは、アクセス先のＬＢＡそのものを記憶してもよいし、アクセス先のＬＢＡと同一のＬＢＡを有する管理データｍを指し示す情報を記憶してもよい。管理データｍを指し示す情報は、例えば、管理データｍが格納されたＲＡＭ２０３上のアドレスである。図４の例では、記憶部４０７は、２つのＩＯ情報ａ１、ａ２を記憶する。そして、ＩＯ情報ａ１は、管理データｍ１を指し示す情報を記憶しており、ＩＯ情報ａ２は、管理データｍ２を指し示す情報を記憶している。
【００４５】
そして、検索部４０６は、ＩＯ情報ａと管理データｍとを参照して、アクセス先のＬＢＡのデータのうち変更されたデータを抽出する。具体的には、図４の例では、検索部４０６は、ＩＯ情報ａ１から管理データｍ１を特定し、管理データｍ１に対応するキャッシュブロックｃｂ１が、変更されたものかを判断する。同様に、検索部４０６は、ＩＯ情報ａ２から管理データｍ２を特定し、管理データｍ２に対応するキャッシュブロックｃｂ２が、変更されたものかを判断する。変更されたキャッシュブロックである場合、検索部４０６は、変更されたキャッシュブロックを第２の読み出し部４０２に通知する。
【００４６】
次に、図５を用いてキャッシュメモリ読み出し処理の第一の例を示すとともに、図６を用いてキャッシュメモリ読み出し処理の第二の例を示す。
【００４７】
図５は、キャッシュメモリ読み出し処理の第一の例を示す説明図である。図５の（１）で示す処理として、ティアリングドライバ３１１は、キャッシュブロック回収命令をキャッシングボリューム３１２に通知する。キャッシュブロック回収命令には、移動対象となるｓｕｂ  ＬＵＮの範囲として、先頭ＬＢＡと末尾ＬＢＡとが含まれる。
【００４８】
キャッシュブロック回収命令を受信したキャッシングボリューム３１２は、図５の（２）で示す処理として、管理データｍを参照して、先頭ＬＢＡから末尾ＬＢＡまでの範囲であり、かつ、変更された状態であるキャッシュブロックを検索する。具体的な検索例の前に、キャッシングボリューム３１２におけるキャッシュブロックの管理方法の一例を説明する。
【００４９】
キャッシングボリューム３１２は、キャッシュブロックと１対１対応する管理データｍを管理する。管理データｍは、論理ＬＢＡ、物理ＬＢＡ、状態というフィールドを有する。論理ＬＢＡフィールドには、該当の管理データｍに対応するキャッシュブロックに、ユーザのアプリケーションがアクセスする際に用いられるＬＢＡが格納される。物理ＬＢＡフィールドには、該当の管理データｍに対応するキャッシュブロックを格納するキャッシュＳＳＤ１１１のＬＢＡが格納される。
【００５０】
状態フィールドは、キャッシュブロックが変更されたものか否かを示す情報を含むものであり、キャッシュブロックの状態を示す識別子が格納される。具体的には、状態フィールドには、ｆｒｅｅ、ａｌｌｏｃ、ｄｉｒｔｙのうちのいずれかの識別子が格納される。ｆｒｅｅは、キャッシュブロックがＨＤＤ１１２のデータブロックと対応していない状態を示す識別子である。ａｌｌｏｃは、キャッシュブロックに対応するＨＤＤ１１２のデータブロックがあり、かつ、キャッシュブロックとＨＤＤ１１２のデータブロックとの内容が一致する状態を示す識別子である。ｄｉｒｔｙは、キャッシュブロックに対応するＨＤＤ１１２のデータブロックがあり、かつ、キャッシュブロックのデータが変更された結果、キャッシュブロックとＨＤＤ１１２のデータブロックとの内容が一致しない状態を示す識別子である。
【００５１】
そして、キャッシングボリューム３１２は、ＨＤＤ１１２のデータブロックに対応するキャッシュブロックに対応する管理データｍを、アローケーションリスト５０１を用いて管理する。具体的には、アローケーションリスト５０１には、ＨＤＤ１１２のデータブロックに対応するキャッシュブロックに対応する管理データｍのアドレスが格納される。例えば、図５の例では、アローケーションリスト５０１には、管理データｍ１〜ｍ６のアドレスが格納される。
【００５２】
また、キャッシングボリューム３１２は、ＨＤＤ１１２のデータブロックに対応するキャッシュブロックに対応しない管理データｍを、フリーリスト５０２を用いて管理する。管理の方法は、アローケーションリスト５０１と同様の方法である。
【００５３】
図５の（２）で示す処理の具体例として、キャッシングボリューム３１２は、アローケーションリスト５０１が管理する管理データｍを参照して、論理ＬＢＡが先頭ＬＢＡから末尾ＬＢＡまでの範囲であり、かつ、状態がｄｉｒｔｙの管理データｍを検索する。図５の例では、キャッシングボリューム３１２は、論理ＬＢＡが先頭ＬＢＡから末尾ＬＢＡまでの範囲であり、かつ、状態がｄｉｒｔｙの管理データｍとして、管理データｍ４〜ｍ６を検出する。ここで、管理データｍ４の論理ＬＢＡがＬＢＡ０であり、管理データｍ５の論理ＬＢＡがＬＢＡ１であり、管理データｍ６の論理ＬＢＡがＬＢＡ２であるとする。
【００５４】
管理データｍを検出した後、キャッシングボリューム３１２は、図５の（３）の処理で示すように、検出した管理データｍの論理ＬＢＡと、管理データｍの物理ＬＢＡから読み出したキャッシュブロックのデータとの組をティアリングドライバ３１１に送信する。図５の例では、キャッシングボリューム３１２は、キャッシュＳＳＤ１１１から、管理データｍ４〜ｍ６の物理ＬＢＡが示すキャッシュブロックのデータ５１１〜５１３を読み出す。そして、キャッシングボリューム３１２は、管理データｍ４の論理ＬＢＡ０とデータ５１１との組と、管理データｍ５の論理ＬＢＡ１とデータ５１２との組と、管理データｍ６の論理ＬＢＡ２とデータ５１３との組とをティアリングドライバ３１１に送信する。
【００５５】
図６は、キャッシュメモリ読み出し処理の第二の例を示す説明図である。キャッシュメモリ読み出し処理の第２例では、ティアリングドライバ３１１とキャッシングボリューム３１２が、キャッシュブロック回収命令を行う前に行っておく処理がある。まず、図６の（１）が示す処理として、ティアリングドライバ３１１は、マイグレーション予定のｓｕｂ−ＬＵＮとして先頭ＬＢＡおよび末尾ＬＢＡと、タイムアウト値とをキャッシングボリューム３１２に送信する。
【００５６】
ここで、図６では図示していないが、ティアリングドライバ３１１は、図６の（１）が示す処理の前に、マイグレーション予定のｓｕｂ−ＬＵＮとなる先頭ＬＢＡおよび末尾ＬＢＡとを、ティアリングマネージャ３０１から受け付ける。ここで、ティアリングマネージャ３０１は、ｓｕｂ−ＬＵＮ単位のアクセス数の時間変化に基づいて、マイグレーション予定のｓｕｂ−ＬＵＮを決定する。例えば、現在時刻より４分前において、ｓｕｂ−ＬＵＮ１〜Ｃのうち最もアクセス数が多かったのがｓｕｂ−ＬＵＮ５であり、現在時刻より２分前において、ｓｕｂ−ＬＵＮ１〜Ｃのうち最もアクセス数が多かったのがｓｕｂ−ＬＵＮ７であるとする。この場合、高頻度のアクセスがあるｓｕｂ−ＬＵＮが２分間で２つ移動したため、ティアリングマネージャ３０１は、現在時刻ではｓｕｂ−ＬＵＮ９が最もアクセスが多くなると判断して、マイグレーション予定のｓｕｂ−ＬＵＮをｓｕｂ−ＬＵＮ９に決定する。
【００５７】
先頭ＬＢＡおよび末尾ＬＢＡと、タイムアウト値とを受け付けたキャッシングボリューム３１２は、図６の（２）が示す処理として、テンポラリーリスト６０１を生成する。テンポラリーリスト６０１は、先頭ＬＢＡと、末尾ＬＢＡと、開始時刻と、タイムアウト値というフィールドを有する。
【００５８】
先頭ＬＢＡフィールドには、ティアリングドライバ３１１から受け付けた先頭ＬＢＡであり、マイグレーション予定の先頭ＬＢＡが格納される。末尾ＬＢＡフィールドには、ティアリングドライバ３１１から受け付けた末尾ＬＢＡであり、マイグレーション予定の末尾ＬＢＡが格納される。開始時刻フィールドには、テンポラリーリスト６０１の生成時刻を示す値が格納される。タイムアウト値には、受け付けたタイムアウト値であり、テンポラリーリスト６０１の生成時刻からテンポラリーリスト６０１を維持するまでの時間を示す値が格納される。
【００５９】
ここで、キャッシュメモリ読み出し処理とは関係なく、ティアリングドライバ３１１が、ユーザのアプリケーションからユーザＩＯリクエストを受け付けたとする。この場合、ティアリングドライバ３１１は、図６の（３）が示す処理として、キャッシングボリューム３１２に、ユーザＩＯリクエストを送信する。
【００６０】
ユーザＩＯリクエストを受信したキャッシングボリューム３１２は、テンポラリーリスト６０１の生成時刻からタイムアウト値が示す時間が経過していないかを判断する。タイムアウト値が示す時間が経過していなければ、キャッシングボリューム３１２は、状態がａｌｌｏｃ、またはｄｉｒｔｙであり、ユーザＩＯリクエストのＬＢＡと一致する論理ＬＢＡを有する管理データが存在するかを検索する。存在する場合、さらに、キャッシングボリューム３１２は、ユーザＩＯリクエストのＬＢＡがテンポラリーリスト６０１の先頭ＬＢＡから末尾ＬＢＡまでの範囲に入るかを判断する。
【００６１】
ユーザＩＯリクエストのＬＢＡがテンポラリーリスト６０１の先頭ＬＢＡから末尾ＬＢＡまでの範囲に入る場合、キャッシングボリューム３１２は、図６の（４）が示す処理として、ＩＯ情報ａを記憶する。ＩＯ情報ａは、ユーザＩＯリクエストに含まれるアクセス先のＬＢＡと一致する論理ＬＢＡを有する管理データを指し示す情報である。
【００６２】
図６の例では、テンポラリーリスト６０１の生成時刻からタイムアウト値が示す時間が経過する間に、３つのユーザＩＯリクエストが発生して、キャッシングボリューム３１２が３つのＩＯ情報ａを記憶した例を示す。図６の例では、キャッシングボリューム３１２は、管理データｍ４を指し示すＩＯ情報ａ−１と、管理データｍ５を指し示すＩＯ情報ａ−２と、管理データｍ６を指し示すＩＯ情報ａ−３とを記憶する。
【００６３】
そして、図６の（５）で示す処理として、ティアリングドライバ３１１は、キャッシュブロック回収命令をキャッシングボリューム３１２に通知する。キャッシュブロック回収命令には、移動対象となるｓｕｂ−ＬＵＮの範囲として、先頭ＬＢＡと末尾ＬＢＡとが含まれる。
【００６４】
キャッシュブロック回収命令を受信したキャッシングボリューム３１２は、図６の（６）で示す処理として、ＩＯ情報ａと管理データｍとを参照して、ユーザＩＯリクエストのアクセス先のキャッシュブロックの状態がｄｉｒｔｙかを判断する。具体的には、キャッシングボリューム３１２は、ＩＯ情報ａが示す管理データｍの状態フィールドがｄｉｒｔｙを示すかを判断する。図６の例では、ＩＯ情報ａ−１〜３が示す管理データｍの状態フィールドが全てｄｉｒｔｙであるとする。
【００６５】
キャッシュブロックの状態がｄｉｒｔｙである場合、キャッシングボリューム３１２は、ｄｉｒｔｙであったキャッシュブロックの論理ＬＢＡと、キャッシュＳＳＤ１１１から読み出したキャッシュブロックのデータとの組をティアリングドライバ３１１に送信する。図６の例では、キャッシングボリューム３１２は、キャッシュＳＳＤ１１１から、ＩＯ情報ａ−１〜３が指し示す管理データｍ４〜ｍ６の物理ＬＢＡが示すキャッシュブロックのデータ６２１〜６２３を読み出す。そして、キャッシングボリューム３１２は、管理データｍ４の論理ＬＢＡ０とデータ６２１との組と、管理データｍ５の論理ＬＢＡ１とデータ６２２との組と、管理データｍ６の論理ＬＢＡ２とデータ６２３との組とをティアリングドライバ３１１に送信する。
【００６６】
ここで、図６で示した方法では、図６の（１）が示す処理の前に、マイグレーション予定の先頭ＬＢＡから末尾ＬＢＡの範囲で、状態が既にｄｉｒｔｙであるキャッシュブロックがないことを前提とする。図６の（１）が示す処理の前にマイグレーション予定の先頭ＬＢＡから末尾ＬＢＡの範囲で状態が既にｄｉｒｔｙであるキャッシュブロックがある可能性があるならば、キャッシングボリューム３１２は、次に示す処理を行えばよい。
【００６７】
まず、キャッシングボリューム３１２は、図６の（１）が示す処理後、管理データｍを参照して、マイグレーション予定の先頭ＬＢＡから末尾ＬＢＡの範囲で状態がｄｉｒｔｙであるキャッシュブロックを検索する。そして、状態がｄｉｒｔｙであるキャッシュブロックがあれば、キャッシングボリューム３１２は、ｄｉｒｔｙであるキャッシュブロックに対応する管理データｍを指し示すＩＯ情報ａを記憶する。これにより、キャッシングボリューム３１２は、図６の（６）で示す処理により、図６の（１）が示す処理の前にマイグレーション予定の先頭ＬＢＡから末尾ＬＢＡの範囲で状態が既にｄｉｒｔｙであるキャッシュブロックも回収することができる。
【００６８】
次に、階層ストレージ装置１０１が実行する各ソフトウェアにより実行されるフローチャートを、図７〜図１３を用いて説明する。
【００６９】
図７は、マイグレーション処理手順の一例を示すフローチャートである。マイグレーション処理は、下位のストレージから上位のストレージにマイグレーションする処理である。ティアリングマネージャ３０１は、ティアリングＳＳＤ１０３への移動対象のｓｕｂ−ＬＵＮを選択する（ステップＳ７０１）。そして、ティアリングマネージャ３０１は、選択したｓｕｂ−ＬＵＮ  ＩＤをティアリングドライバ３１１に通知する（ステップＳ７０２）。
【００７０】
ｓｕｂ−ＬＵＮ  ＩＤの通知を受けたティアリングドライバ３１１は、ＨＤＤ読み出し処理を実行する（ステップＳ７０３）。また、ティアリングドライバ３１１は、キャッシュメモリ読み出し処理を実行する（ステップＳ７０４）。ここで、ティアリングドライバ３１１は、ステップＳ７０３の処理とステップＳ７０４の処理とを並列に実行してもよい。例えば、階層ストレージ装置１０１が複数のＣＰＵを有する場合に、ティアリングドライバ３１１は、ステップＳ７０３の処理を実行するスレッドと、ステップＳ７０４の処理を実行するスレッドとを別々のＣＰＵに割り当ててもよい。
【００７１】
そして、ティアリングドライバ３１１は、ｓｕｂ−ＬＵＮデータ生成処理を実行する（ステップＳ７０５）。次に、ティアリングドライバ３１１は、生成したｓｕｂ−ＬＵＮデータをティアリングＳＳＤ１０３に書き込む（ステップＳ７０６）。
【００７２】
ステップＳ７０６の処理終了後、ティアリングドライバ３１１は、マイグレーション処理を終了する。マイグレーション処理を実行することにより、ティアリングドライバ３１１は、ランダムアクセスを発行せずに下位のストレージから上位のストレージにデータを移動することができる。
【００７３】
図８は、ＨＤＤ読み出し処理手順の一例を示すフローチャートである。ＨＤＤ読み出し処理は、ＨＤＤ１１２からマイグレーション対象のｓｕｂ−ＬＵＮのデータを読み出す処理である。ティアリングドライバ３１１は、ＲＡＭ２０３から、ｓｕｂ−ＬＵＮと同じデータサイズとなるメモリ領域を確保する（ステップＳ８０１）。次に、ティアリングドライバ３１１は、マイグレーション対象のｓｕｂ−ＬＵＮ  ＩＤから、ＨＤＤ１１２における先頭ＬＢＡを算出する（ステップＳ８０２）。そして、ティアリングドライバ３１１は、算出した先頭ＬＢＡから、ｓｕｂ−ＬＵＮデータサイズ分のデータを確保したメモリ領域に読み出す命令をＨＤＤ１１２に通知する（ステップＳ８０３）。命令発行後、ＨＤＤ１１２からの読み出しが完了した場合、ティアリングドライバ３１１は、ＨＤＤ読み出し処理を終了する。ＨＤＤ読み出し処理を実行することにより、階層ストレージ装置１０１は、ＨＤＤ１１２からマイグレーション対象のｓｕｂ−ＬＵＮのデータを読み出すことができる。
【００７４】
図９は、キャッシュメモリ読み出し処理の第一の例の手順を示すフローチャートである。キャッシュメモリ読み出し処理は、図５で説明した、キャッシュＳＳＤ１１１からｓｕｂ−ＬＵＮの変更されたデータを読み出す処理である。
【００７５】
ティアリングドライバ３１１は、マイグレーション対象のｓｕｂ−ＬＵＮ  ＩＤから、ＨＤＤ１１２における先頭ＬＢＡを算出する（ステップＳ９０１）。次に、ティアリングドライバ３１１は、先頭ＬＢＡにｓｕｂ−ＬＵＮのデータサイズを加算した値を末尾ＬＢＡに代入する（ステップＳ９０２）。そして、ティアリングドライバ３１１は、先頭ＬＢＡから末尾ＬＢＡまでのキャッシュブロック回収命令をキャッシングボリューム３１２に通知する（ステップＳ９０３）。
【００７６】
キャッシュブロック回収命令を受け付けたキャッシングボリューム３１２は、全ての管理データｍのうち、ステップＳ９０５以降の処理について処理していない管理データｍがあるか否かを判断する（ステップＳ９０４）。ステップＳ９０５以降の処理について処理していない管理データｍがある場合（ステップＳ９０４：Ｙｅｓ）、キャッシングボリューム３１２は、未処理の管理データｍを選択する（ステップＳ９０５）。次に、キャッシングボリューム３１２は、選択した管理データｍに対応するキャッシュブロックの状態がｄｉｒｔｙか否かを判断する（ステップＳ９０６）。選択した管理データｍに対応するキャッシュブロックの状態がｄｉｒｔｙである場合（ステップＳ９０６：Ｙｅｓ）、キャッシングボリューム３１２は、選択した管理データｍに対応するキャッシュブロックの論理ＬＢＡが先頭ＬＢＡから末尾ＬＢＡの範囲か否かを判断する（ステップＳ９０７）。
【００７７】
選択した管理データｍに対応するキャッシュブロックの状態がｄｉｒｔｙでない場合（ステップＳ９０６：Ｎｏ）、キャッシングボリューム３１２は、ステップＳ９０４の処理に移行する。また、選択した管理データｍに対応するキャッシュブロックの論理ＬＢＡが先頭ＬＢＡから末尾ＬＢＡの範囲でない場合（ステップＳ９０７：Ｎｏ）も、キャッシングボリューム３１２は、ステップＳ９０４の処理に移行する。ここで、キャッシングボリューム３１２は、ステップＳ９０７の処理を先に行った後、ステップＳ９０６の処理を行ってもよい。
【００７８】
選択した管理データｍに対応するキャッシュブロックの論理ＬＢＡが先頭ＬＢＡから末尾ＬＢＡの範囲である場合（ステップＳ９０７：Ｙｅｓ）、キャッシングボリューム３１２は、ＲＡＭ２０３から、キャッシュブロックのデータを格納するデータ領域を確保する（ステップＳ９０８）。次に、キャッシングボリューム３１２は、キャッシュＳＳＤ１１１内にある、選択した管理データｍに対応するキャッシュブロックのデータを、確保したデータ領域に書き込む（ステップＳ９０９）。そして、キャッシングボリューム３１２は、選択した管理データｍの論理ＬＢＡと、確保したデータ領域との組を保存する（ステップＳ９１０）。次に、キャッシングボリューム３１２は、選択した管理データｍの状態をｆｒｅｅに設定する（ステップＳ９１１）。そして、キャッシングボリューム３１２は、ステップＳ９０４の処理に移行する。
【００７９】
一方、ステップＳ９０５以降の処理について全ての管理データｍを処理した場合（ステップＳ９０４：Ｎｏ）、キャッシングボリューム３１２は、保存した論理ＬＢＡとデータ領域との組を、ティアリングドライバ３１１に通知する（ステップＳ９１２）。ステップＳ９１２の処理終了後、ティアリングドライバ３１１とキャッシングボリューム３１２とは、キャッシュメモリ読み出し処理を終了する。キャッシュメモリ読み出し処理を実行することにより、階層ストレージ装置１０１は、マイグレーション対象のｓｕｂ−ＬＵＮに含まれており、状態がｄｉｒｔｙであるキャッシュブロックのデータを読み出すことができる。
【００８０】
図１０は、ｓｕｂ−ＬＵＮデータ生成処理手順の一例を示すフローチャートである。ｓｕｂ−ＬＵＮデータ生成処理は、ｓｕｂ−ＬＵＮデータを生成する処理である。
【００８１】
ティアリングドライバ３１１は、取得した論理ＬＢＡとデータ領域との組のうち、ステップＳ１００３の処理について処理していない組があるか否かを判断する（ステップＳ１００１）。ステップＳ１００３の処理について処理していない組がある場合（ステップＳ１００１：Ｙｅｓ）、ティアリングドライバ３１１は、未処理の組を選択する（ステップＳ１００２）。次に、ティアリングドライバ３１１は、ｓｕｂ−ＬＵＮデータサイズ分のデータを書き込んだデータ領域の選択した組の論理ＬＢＡ相当の位置に、選択した組のデータ領域のデータを書き込む（ステップＳ１００３）。そして、ティアリングドライバ３１１は、ステップＳ１００１の処理に移行する。
【００８２】
一方、ステップＳ１００３の処理について全ての組について処理した場合（ステップＳ１００１：Ｎｏ）、ティアリングドライバ３１１は、ｓｕｂ−ＬＵＮデータ生成処理を終了する。ｓｕｂ−ＬＵＮデータ生成処理を実行することにより、階層ストレージ装置１０１は、状態がｄｉｒｔｙであるキャッシュブロックのデータと、ＨＤＤ１１２から読み出したデータとをマージしたデータを作成することができる。
【００８３】
図１１は、テンポラリーリスト作成処理手順の一例を示すフローチャートである。テンポラリーリスト作成処理は、テンポラリーリスト６０１を作成する処理である。
【００８４】
ティアリングマネージャ３０１は、近い将来マイグレーションを行う予定のｓｕｂ−ＬＵＮ  ＩＤを決定する（ステップＳ１１０１）。次に、ティアリングマネージャ３０１は、決定したｓｕｂ−ＬＵＮ  ＩＤをティアリングドライバ３１１に通知する（ステップＳ１１０２）。ティアリングドライバ３１１は、通知されたｓｕｂ−ＬＵＮ  ＩＤから、ＨＤＤ１１２における先頭ＬＢＡを算出する（ステップＳ１１０３）。次に、ティアリングドライバ３１１は、先頭ＬＢＡにｓｕｂ−ＬＵＮのデータサイズを加えた値を末尾ＬＢＡに代入する（ステップＳ１１０４）。そして、ティアリングドライバ３１１は、近い将来マイグレーションを行う予定のＬＢＡの範囲として先頭ＬＢＡおよび末尾ＬＢＡとタイムアウト値とを、キャッシングボリューム３１２に通知する（ステップＳ１１０５）。
【００８５】
そして、キャッシングボリューム３１２は、先頭ＬＢＡと末尾ＬＢＡとタイムアウト値とをテンポラリーリスト６０１として、キャッシングボリューム３１２内部に保存する（ステップＳ１１０６）。ステップＳ１１０６の処理終了後、ティアリングマネージャ３０１とティアリングドライバ３１１とキャッシングボリューム３１２とは、テンポラリーリスト作成処理を終了する。テンポラリーリスト作成処理を実行することにより、階層ストレージ装置１０１は、ユーザＩＯリクエストが発生した際に用いるテンポラリーリスト６０１を作成しておくことができる。
【００８６】
図１２は、ユーザＩＯリクエスト発生時処理手順の一例を示すフローチャートである。ユーザＩＯリクエスト発生時処理は、ユーザＩＯリクエストが発生した時に行う処理である。
【００８７】
キャッシングボリューム３１２は、ティアリングドライバ３１１よりユーザＩＯリクエストを受け付ける（ステップＳ１２０１）。そして、キャッシングボリューム３１２は、ステータスがａｌｌｏｃまたはｄｉｒｔｙであり、ユーザＩＯリクエストのＬＢＡと一致する論理ＬＢＡを有する管理データｍが存在するか否かを判断する（ステップＳ１２０２）。ユーザＩＯリクエストのＬＢＡと一致する論理ＬＢＡを有する管理データｍが存在する場合（ステップＳ１２０２：Ｙｅｓ）、キャッシングボリューム３１２は、ユーザＩＯリクエストのＬＢＡがテンポラリーリストのＬＢＡの範囲に入っているか否かを判断する（ステップＳ１２０３）。ユーザＩＯリクエストのＬＢＡがテンポラリーリストのＬＢＡの範囲に入っている場合（ステップＳ１２０３：Ｙｅｓ）、キャッシングボリューム３１２は、ユーザＩＯリクエストのＬＢＡと一致する論理ＬＢＡを有する管理データｍを指し示すＩＯ情報ａを保存する（ステップＳ１２０４）。
【００８８】
そして、ステップＳ１２０４の処理終了後、キャッシングボリューム３１２は、通常のキャッシング処理を実行する（ステップＳ１２０５）。また、ユーザＩＯリクエストのＬＢＡと一致する論理ＬＢＡを有する管理データｍが存在しない場合（ステップＳ１２０２：Ｎｏ）も、キャッシングボリューム３１２は、ステップＳ１２０５の処理を実行する。同様に、ユーザＩＯリクエストのＬＢＡがテンポラリーリストのＬＢＡの範囲に入っていない場合（ステップＳ１２０３：Ｎｏ）も、キャッシングボリューム３１２は、ステップＳ１２０５の処理を実行する。ここで通常のキャッシング処理とは、キャッシュアルゴリズムに従って、キャッシュＳＳＤ１１１かＨＤＤ１１２かのいずれかにユーザＩＯリクエストを送信することである。
【００８９】
そして、ステップＳ１２０５の処理終了後、キャッシングボリューム３１２は、ユーザＩＯリクエスト発生時処理を終了する。ユーザＩＯリクエスト発生時処理を実行することにより、階層ストレージ装置１０１は、マイグレーション対象のｓｕｂ−ＬＵＮに含まれるキャッシュブロックを特定することができる。
【００９０】
図１３は、キャッシュメモリ読み出し処理の第二の例の手順を示すフローチャートである。キャッシュメモリ読み出し処理は、図６で説明した、キャッシュＳＳＤ１１１からｓｕｂ−ＬＵＮの変更されたデータを読み出す処理である。
【００９１】
ティアリングドライバ３１１は、マイグレーション対象のｓｕｂ−ＬＵＮ  ＩＤから、ＨＤＤ１１２における先頭ＬＢＡを算出する（ステップＳ１３０１）。次に、ティアリングドライバ３１１は、先頭ＬＢＡにｓｕｂ−ＬＵＮのデータサイズを加算した値を末尾ＬＢＡに代入する（ステップＳ１３０２）。そして、ティアリングドライバ３１１は、先頭ＬＢＡから末尾ＬＢＡまでのキャッシュブロック回収命令をキャッシングボリューム３１２に通知する（ステップＳ１３０３）。
【００９２】
キャッシュブロック回収命令を受け付けたキャッシングボリューム３１２は、保存したＩＯ情報ａのうち、ステップＳ１３０５以降の処理について処理していないＩＯ情報ａがあるか否かを判断する（ステップＳ１３０４）。ステップＳ１３０５以降の処理について処理していないＩＯ情報ａがある場合（ステップＳ１３０４：Ｙｅｓ）、キャッシングボリューム３１２は、未処理のＩＯ情報ａを選択する（ステップＳ１３０５）。次に、キャッシングボリューム３１２は、選択したＩＯ情報ａが示すキャッシュブロックの状態がｄｉｒｔｙか否かを判断する（ステップＳ１３０６）。
【００９３】
選択したＩＯ情報ａが示すキャッシュブロックの状態がｄｉｒｔｙである場合（ステップＳ１３０６：Ｙｅｓ）、キャッシングボリューム３１２は、ＲＡＭ２０３から、選択したＩＯ情報ａが示すキャッシュブロックのデータを格納するデータ領域を確保する（ステップＳ１３０７）。そして、キャッシングボリューム３１２は、選択したＩＯ情報ａが示すキャッシュブロックのデータを、確保したデータ領域に書き込む（ステップＳ１３０８）。次に、キャッシングボリューム３１２は、選択したＩＯ情報ａの論理ＬＢＡと、確保したデータ領域との組を保存する（ステップＳ１３０９）。そして、キャッシングボリューム３１２は、選択したＩＯ情報ａに対応する管理データｍの状態をｆｒｅｅに設定する（ステップＳ１３１０）。ステップＳ１３１０の処理終了後、または、選択したＩＯ情報ａが示すキャッシュブロックの状態がｄｉｒｔｙでない場合（ステップＳ１３０６：Ｎｏ）、キャッシングボリューム３１２は、ステップＳ１３０４の処理に移行する。
【００９４】
一方、ステップＳ１３０５以降の処理について処理していないＩＯ情報ａがない場合（ステップＳ１３０４：Ｎｏ）、キャッシングボリューム３１２は、保存した論理ＬＢＡとデータ領域との組を、ティアリングドライバ３１１に通知する（ステップＳ１３１１）。ステップＳ１３１１の処理終了後、ティアリングドライバ３１１とキャッシングボリューム３１２とは、キャッシュメモリ読み出し処理を終了する。キャッシュメモリ読み出し処理を実行することにより、階層ストレージ装置１０１は、マイグレーション対象のｓｕｂ−ＬＵＮに含まれており、状態がｄｉｒｔｙであるキャッシュブロックのデータを読み出すことができる。さらに、図１３で示すキャッシュメモリ読み出し処理は、図９で示したキャッシュメモリ読み出し処理に比べて、ＩＯ情報ａによりマイグレーション対象のｓｕｂ−ＬＵＮに含まれるキャッシュブロックを特定してある分、検索にかかる負荷を減らすことができる。
【００９５】
以上説明したように、階層ストレージ装置１０１によれば、ＨＤＤ１１２からシーケンシャルに読み出したデータとキャッシュブロックとをマージして、ティアリングＳＳＤ１０３に書き込む。これにより、階層ストレージ装置１０１は、ＨＤＤ１１２へのランダム読出を抑えてマイグレーションにかかる時間を短縮することができる。例えば、階層ストレージシステム１００が、ログ蓄積というような、読み出しより書き込みが主に行われるサービスに利用されるとする。この場合、キャッシュＳＳＤ１１１のキャッシュブロックは変更されたものがほとんどとなる。従って、この場合、階層ストレージ装置１０１は、キャッシュＳＳＤ１１１のキャッシュブロックのうち、マイグレーション対象のｓｕｂ−ＬＵＮに対応する全てを、変更されたキャッシュブロックとして読み出してもよい。
【００９６】
また、階層ストレージ装置１０１によれば、管理データｍを参照して、マイグレーション対象のｓｕｂ−ＬＵＮのうちの変更されたデータをキャッシュＳＳＤ１１１から読み出してもよい。これにより、階層ストレージ装置１０１は、マイグレーション対象のｓｕｂ−ＬＵＮのうちの変更されていないキャッシュブロック、すなわち、状態がａｌｌｏｃであるキャッシュブロックを読み出さなくなる。従って、階層ストレージ装置１０１は、マイグレーション対象のｓｕｂ−ＬＵＮに対応する全てのキャッシュブロックを読み出す場合に比べて、マージの処理にかかる負荷を抑制することができる。
【００９７】
また、階層ストレージ装置１０１は、マイグレーション予定のｓｕｂ−ＬＵＮ  ＩＤの先頭ＬＢＡから末尾ＬＢＡに対するユーザＩＯリクエストのアクセス先を示すＩＯ情報ａを記憶する。そして、また、階層ストレージ装置１０１によれば、マイグレーション時にＩＯ情報ａを参照して、マイグレーション対象のｓｕｂ−ＬＵＮのうちの変更されたデータをキャッシュＳＳＤ１１１から読み出してもよい。これにより、マイグレーション時には、キャッシュＳＳＤ１１１の全てのキャッシュブロックから、マイグレーション対象のｓｕｂ−ＬＵＮのキャッシュブロックを検索しなくてよく、キャッシュＳＳＤ１１１からの読み出しにかかる負荷を抑制することができる。
【００９８】
また、階層ストレージ装置１０１は、第１のストレージの記憶装置が磁気ディスクを記憶媒体とするものであり、第２のストレージが半導体メモリを記憶媒体とするものでもよい。これにより、磁気ディスクという、ランダム読み出しがシーケンシャル読み出しより低速な記憶媒体を用いる場合に、階層ストレージ装置１０１は、第１のストレージの記憶装置に、ランダム読み出しを抑えてマイグレーションにかかる時間を短縮することができる。
【００９９】
また、ｓｕｂ−ＬＵＮのマイグレーションの高速化は、キャッシュボリュームと階層化とを組み合わせたストレージシステムを、重複除去など他のストレージコンポーネントとの連携効果を上げるうえでも有効である。具体的には、マイグレーションが短時間で終了する分、他のストレージコンポーネントの効果を、ストレージシステムの運用で引き出すことが可能になるためである。
【０１００】
なお、本実施の形態で説明した階層ストレージ方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本階層ストレージプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本階層ストレージプログラムは、インターネット等のネットワークを介して配布してもよい。
【０１０１】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１０２】
（付記１）記憶装置と前記記憶装置のデータをライトバック方式でキャッシュするキャッシュメモリとを有する第１のストレージから前記第１のストレージより高速にアクセス可能な第２のストレージにデータを移動させる際に、前記記憶装置から、移動対象の記憶領域のデータをシーケンシャルに読み出し、
前記移動対象の記憶領域のデータのうち変更されたデータを前記キャッシュメモリから読み出し、
読み出した前記移動対象の記憶領域のデータと、読み出した前記変更されたデータとをマージし、
マージしたデータを、前記第２のストレージに書き込む、
制御部を有することを特徴とする階層ストレージ装置。
【０１０３】
（付記２）前記制御部は、
前記キャッシュメモリが記憶するデータに応じて前記記憶装置の記憶領域における当該データに対応するアドレスと当該データが変更されたものか否かを示す情報とを対応付けた情報を参照して、前記移動対象の記憶領域のデータのうち変更されたデータを前記キャッシュメモリから読み出すことを特徴とする付記１に記載の階層ストレージ装置。
【０１０４】
（付記３）前記制御部は、
移動対象予定の記憶領域を示す情報を受け付け、
前記第１のストレージへのアクセスが発生したことに応じて、受け付けた前記移動対象予定の記憶領域に前記アクセスのアクセス先のアドレスが含まれる場合、前記アクセス先のアドレスを示す情報を記憶し、
前記移動対象予定の記憶領域が前記移動対象の記憶領域となる際に、記憶した前記アクセス先のアドレスを示す情報と前記キャッシュメモリが記憶するデータに応じて前記記憶装置の記憶領域における当該データに対応するアドレスと当該データが変更されたものか否かを示す情報とを対応付けた情報とを参照して、前記アクセス先の記憶領域のデータのうち変更されたデータを前記キャッシュメモリから読み出すことを特徴とする付記１または２に記載の階層ストレージ装置。
【０１０５】
（付記４）前記記憶装置が磁気ディスクを記憶媒体とし、前記第２のストレージが半導体メモリを記憶媒体とすることを特徴とする付記１〜３のいずれか一つに記載の階層ストレージ装置。
【０１０６】
（付記５）記憶装置と前記記憶装置のデータをライトバック方式でキャッシュするキャッシュメモリとを有する第１のストレージと、前記第１のストレージより高速にアクセス可能な第２のストレージと、前記第１のストレージと前記第２のストレージとにアクセス可能な階層ストレージ装置とを有する階層ストレージシステムであって、
前記階層ストレージ装置は、
前記第１のストレージから前記第２のストレージにデータを移動させる際に、前記記憶装置から、移動対象の記憶領域のデータをシーケンシャルに読み出し、
前記移動対象の記憶領域のデータのうち変更されたデータを前記キャッシュメモリから読み出し、
読み出した前記移動対象の記憶領域のデータと、読み出した前記変更されたデータとをマージし、
マージしたデータを、前記第２のストレージに書き込む、
ことを特徴とする階層ストレージシステム。
【０１０７】
（付記６）コンピュータが、
記憶装置と前記記憶装置のデータをライトバック方式でキャッシュするキャッシュメモリとを有する第１のストレージから前記第１のストレージより高速にアクセス可能な第２のストレージにデータを移動させる際に、前記記憶装置から、移動対象の記憶領域のデータをシーケンシャルに読み出し、
前記移動対象の記憶領域のデータのうち変更されたデータを前記キャッシュメモリから読み出し、
読み出した前記移動対象の記憶領域のデータと、読み出した前記変更されたデータとをマージし、
マージしたデータを、前記第２のストレージに書き込む、
処理を実行することを特徴とする階層ストレージ方法。
【０１０８】
（付記７）コンピュータに、
記憶装置と前記記憶装置のデータをライトバック方式でキャッシュするキャッシュメモリとを有する第１のストレージから前記第１のストレージより高速にアクセス可能な第２のストレージにデータを移動させる際に、前記記憶装置から、移動対象の記憶領域のデータをシーケンシャルに読み出し、
前記移動対象の記憶領域のデータのうち変更されたデータを前記キャッシュメモリから読み出し、
読み出した前記移動対象の記憶領域のデータと、読み出した前記変更されたデータとをマージし、
マージしたデータを、前記第２のストレージに書き込む、
処理を実行させることを特徴とする階層ストレージプログラム。
【符号の説明】
【０１０９】
ａ  ＩＯ情報
ｍ  管理データ
１００  階層ストレージシステム
１０１  階層ストレージ装置
１０２  ティアリングＨＤＤ
１０３  ティアリングＳＳＤ
１１１  キャッシュＳＳＤ
１１２  ＨＤＤ
４０１  第１の読み出し部
４０２  第２の読み出し部
４０３  マージ部
４０４  書き込み部
４０５  受け付け部
４０６  検索部
４０７  記憶部
【図１】
2016207096.tif 000003
【図２】
2016207096.tif 000004
【図３】
2016207096.tif 000005
【図４】
2016207096.tif 000006
【図５】
2016207096.tif 000007
【図６】
2016207096.tif 000008
【図７】
2016207096.tif 000009
【図８】
2016207096.tif 000010
【図９】
2016207096.tif 000011
【図１０】
2016207096.tif 000012
【図１１】
2016207096.tif 000013
【図１２】
2016207096.tif 000014
【図１３】
2016207096.tif 000015