(57)【要約】【課題】スループットを向上させつつ、ヒット率を確保し、システム性能を向上させるストレージ装置、キャッシュ書込制御方法及びキャッシュ書込制御プログラムを提供する。【解決手段】条件判定部１０８は、２次キャッシュ１１２の書込単位領域の一部へ書込データを書き込む場合、書込先の書込単位領域が２次キャッシュ１１２の管理単位領域をまたぐか否かを判定し、書込先の書込単位領域が管理単位領域をまたぐ場合、書込先の書込単位領域における書込データが書き込まれない非更新領域を含む管理単位領域の利用状況を基に、非更新領域の既格納データを保持するか否かを判定する。２次キャッシュ読書制御部１０７は、条件判定部１０８により既格納データを保持すると判定された場合、既格納データを保持しつつ書込データを書込先の管理単位領域へ書き込む。【選択図】図３
2017010396.tif 000002
【特許請求の範囲】
【請求項１】
書込単位領域毎に１回のデータの書き込みが行われ、且つ、管理単位領域毎に書き込まれたデータが管理されるキャッシュと、
前記キャッシュの特定の書込単位領域の一部へ書込データを書き込む場合、前記特定の書込単位領域が前記キャッシュの前記管理単位領域をまたぐか否かを判定し、前記特定の書込単位領域が前記管理単位領域をまたぐ場合、前記特定の書込単位領域における前記書込データが書き込まれない非更新領域を含む前記管理単位領域の利用状況を基に、前記非更新領域の既格納データを保持するか否かを判定する判定部と、
前記判定部により前記既格納データを保持すると判定された場合、前記既格納データを保持しつつ前記書込データを前記特定の管理単位領域へ書き込む書込部と
を備えたことを特徴とするストレージ装置。
【請求項２】
前記書込部は、前記判定部により前記非更新領域のデータを保持しないと判定された場合、前記非更新領域を含む前記管理単位領域を無効にして、前記書込データを書き込むことを特徴とする請求項１に記載のストレージ装置。
【請求項３】
一時記憶部をさらに有し、
前記書込部は、前記書込データを前記一時記憶部に格納し、前記既格納データを前記一時記憶部に格納し、前記書込データと前記既格納データとを前記一時記憶部上で組み合わせて組合データを作成し、前記組合データを前記特定の書込単位領域へ書き込むことを特徴とする請求項１又は２に記載のストレージ装置。
【請求項４】
前記判定部は、前記利用状況を基に前記非更新領域を含む前記管理単位領域の優先度を算出し、前記優先度が閾値を超える場合に前記非更新領域の前記既格納データを保持すると判定することを特徴とする請求項１〜３のいずれか一つに記載のストレージ装置。
【請求項５】
発行中の前記キャッシュに対する書込命令及び読出命令の数をカウントする命令数管理部と、
前記命令数管理部のカウント結果を基に、前記閾値を算出する閾値算出部とをさらに備え、
前記判定部は、前記閾値算出部により算出された前記閾値を用いて判定を行うことを特徴とする請求項４に記載のストレージ装置。
【請求項６】
書込単位領域毎に１回のデータの書き込みが行われ、且つ、管理単位領域毎に書き込まれたデータが管理されるキャッシュにおける特定の書込単位領域の一部へ書込データを書き込む場合、前記特定の書込単位領域が前記キャッシュの管理単位領域をまたぐか否かを判定し、
前記特定の書込単位領域が前記管理単位領域をまたぐ場合、前記特定の書込単位領域における前記書込データが書き込まれない非更新領域を含む前記管理単位領域の利用状況を基に、前記非更新領域の既格納データを保持するか否かを判定し、
前記既格納データを保持すると判定された場合、前記既格納データを保持しつつ前記書込データを前記特定の管理単位領域へ書き込む
ことを特徴とするキャッシュ書込制御方法。
【請求項７】
書込単位領域毎に１回のデータの書き込みが行われ、且つ、管理単位領域毎に書き込まれたデータが管理されるキャッシュにおける前記特定の書込単位領域の一部へ書込データを書き込む場合、前記特定の書込単位領域が前記キャッシュの管理単位領域をまたぐか否かを判定し、
前記特定の書込単位領域が前記管理単位領域をまたぐ場合、前記特定の書込単位領域における前記書込データが書き込まれない非更新領域を含む前記管理単位領域の利用状況を基に、前記非更新領域の既格納データを保持するか否かを判定し、
前記既格納データを保持すると判定された場合、前記既格納データを保持しつつ前記書込データを前記特定の管理単位領域へ書き込む
処理をコンピュータに実行させることを特徴とするキャッシュ書込制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置、キャッシュ書込制御方法及びキャッシュ書込制御プログラムに関する。
【背景技術】
【０００２】
近年、ストレージシステムなどにおいて、ＳＳＤ（Solid  State  Drive）などのＮＡＮＤ型フラッシュメモリを２次キャッシュとして使用し、Ｉ／Ｏ（Input/Output）性能の向上を図るシステムが増加している。
【０００３】
このようなストレージシステムの一例として、ホスト及びストレージ装置を有するシステムがある。ホストは、サーバなどの情報処理装置である。ホストは、ストレージ装置に対して書込要求や読出要求といったＩ／Ｏ要求を発光する。
【０００４】
そして、ストレージ装置は、ＤＲＡＭ（Dynamic  Random  Access  Memory）、ＮＡＮＤ型フラッシュメモリ及びディスクを有する。ＤＲＡＭは、１次キャッシュとして用いられる。また、ディスクは、ハードディスクなどのユーザデータを格納する補助記憶装置である。ディスクは、複数のハードディスクで構成された論理ユニット（Logical  Unit）であってもよい。さらに、ＮＡＮＤ型フラッシュメモリは、ディスクなどに比べて速度が速いため、２次キャッシュとして用いられる。
【０００５】
２次キャッシュへのデータの書き込み処理は２種類ある。１つは、ディスクから２次キャッシュへ新規にデータを書き込む処理である。ディスクから読み出したデータを１次キャッシュ及び２次キャッシュに書き込むことを「ステージング」という。
【０００６】
ステージングを行う場合、１次キャッシュ及び２次キャッシュ上では、データは、チャンク（Chunk）という単位で管理されることが多い。チャンクとは、連続なデータのまとまりの単位である。そして、１次キャッシュと２次キャッシュとでデータの管理単位のサイズが異なる場合がある。
【０００７】
具体的には、１次キャッシュは、高価であり容量が小さいことが一般的であるため、ステージングが効率的になるようにチャンクサイズは小さく設定されている場合が多い。一方、２次キャッシュの場合、１次キャッシュと比べて容量が大きいので、要求データの周辺部分も多くステージングしておくことが可能であり、そのため、チャンクサイズは、１次キャッシュよりも大きく設定される場合が多い。
【０００８】
ステージングの場合、２次キャッシュへの書き込みサイズは２次キャッシュのチャンクサイズもしくはその整数倍である。
【０００９】
もう一つは、ホストからの命令により、キャッシュ上の既存のデータを書き直してステージング状態を延長する処理である。この場合、ホストから送られた書込データは、まず１次キャッシュ上に書き込まれる。その後、書き込まれた１次キャッシュの領域に対応する領域が２次キャッシュ上に存在していれば、１次キャッシュと２次キャッシュとの間のデータの整合性を保つために１次キャッシュへのデータの書き込みが２次キャッシュに反映される。この場合の書き込みサイズは、２次キャッシュのチャンクサイズ以下となることが多い。
【００１０】
ここで、１次キャッシュへの書き込みは、ホストからのＩ／Ｏの単位サイズで行うことができる。ホストからのＩ／Ｏの単位サイズは、ディスクの論理ブロックサイズにあたる。例えば、ディスクの論理ブロックサイズは、多くのＯＳ（Operating  System）では、５１２バイトであり、ＥＣＣ（Error  Checking  and  Correction）などの保護情報を含む場合は、５２０バイトである。
【００１１】
一方、２次キャッシュとして使用されるＮＡＮＤ型フラッシュメモリでは、データの書き込みはＮＡＮＤ型フラッシュメモリのページ単位で行われる。ページは、例えば、４ＫＢ、８ＫＢ等といった２の累乗の値である。ページサイズ及びその整数倍とは異なるサイズのデータをＮＡＮＤ型フラッシュメモリに書きこむためには、以下に説明するＲｅａｄ  Ｍｏｄｉｆｙ  Ｗｒｉｔｅの処理が行われる。ページサイズ及びその整数倍とは異なるサイズのデータの書き込みは、「非ページアライメントでのデータの書き込み」と呼ばれる場合がある。
【００１２】
ここで、Ｒｅａｄ  Ｍｏｄｉｆｙ  Ｗｒｉｔｅの処理について説明する。非ページアライメントでのデータの書き込みの場合、２次キャッシュの何れかのページにおいて一部のデータが変更される。この場合、２次キャッシュではページ単位で書き込みが行われるため、単に更新データをそのページに書き込もうとすると、そのページに格納されている更新データ以外の隣接データが破壊されてしまう。そこで、一度ページの内容をＲｅａｄ  Ｍｏｄｉｆｙ  Ｗｒｉｔｅ用バッファに読み出し、そのバッファ上で更新データと読み出したページの内容とをマージし、その後、マージしたデータをページに書き込む処理が行われる。このように一度２次キャッシュのページからデータを読み出し、新しいデータとマージした上で再度ページに戻す処理が、Ｒｅａｄ  Ｍｏｄｉｆｙ  Ｗｒｉｔｅの処理である。このように、Ｒｅａｄ  Ｍｏｄｉｆｙ  Ｗｒｉｔｅの処理を行うと、隣接データの破壊を防ぐことができる。
【００１３】
なお、１次及び２次キャッシュを有する技術として、１次キャッシュの最長時間未使用リストが一杯の場合、リストをスキャンして破棄することができる未修整のデータを特定し、修正データがあった場合にはリストの端部へ移動する従来技術がある。また、ＮＡＮＤ型フラッシュメモリとＤＲＡＭとを有する情報処理装置の従来技術がある。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】特開２００７−１４１２２５号公報
【特許文献２】特開２００９−２１１２３２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１５】
しかしながら、Ｒｅａｄ  Ｍｏｄｉｆｙ  Ｗｒｉｔｅの処理を行った場合、２次キャッシュへのアクセス回数は、読み出し及び書き込みの２回となる。そのため、２次キャッシュへのアクセス量が増加し、２次キャッシュ全体のスループットが低下してしまう。
【００１６】
この点、２次キャッシュは１次キャッシュよりも大きなチャンクを使用して広範囲のデータを一括でステージングするため、データの中には実際にはホストからのアクセスが少ないデータが存在する。このようなデータの維持するためにＲｅａｄ  Ｍｏｄｉｆｙ  Ｗｒｉｔｅの処理を行うことはスループット低下の一因である。このように、２次キャッシュにおいて、Ｒｅａｄ  Ｍｏｄｉｆｙ  Ｗｒｉｔｅの処理を常に行って、全てのデータを維持することは効率的ではない場合がある。
【００１７】
ただし、常にＲｅａｄ  Ｍｏｄｉｆｙ  Ｗｒｉｔｅの処理を行わずに、書込データの隣接データを破棄すればスループットの低下を抑えることはできるが、２次キャッシュの有効なデータが減ってしまう。そのため、２次キャッシュのヒット率が低下し、システム全体としての性能は低下してしまう。
【００１８】
開示の技術は、上記に鑑みてなされたものであって、スループットを向上させつつ、ヒット率を確保し、システム性能を向上させるストレージ装置、キャッシュ書込制御方法及びキャッシュ書込制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１９】
本願の開示するストレージ装置、キャッシュ書込制御方法及びキャッシュ書込制御プログラムは、一つの態様において、キャッシュは、書込単位領域毎に１回のデータの書き込みが行われ、且つ、管理単位領域毎に書き込まれたデータが管理される。判定部は、前記キャッシュの特定の書込単位領域の一部へ書込データを書き込む場合、前記特定の書込単位領域が前記キャッシュの前記管理単位領域をまたぐか否かを判定し、前記特定の書込単位領域が前記管理単位領域をまたぐ場合、前記特定の書込単位領域における前記書込データが書き込まれない非更新領域を含む前記管理単位領域の利用状況を基に、前記非更新領域の既格納データを保持するか否かを判定する。書込部は、前記判定部により前記既格納データを保持すると判定された場合、前記既格納データを保持しつつ前記書込データを前記特定の管理単位領域へ書き込む。
【発明の効果】
【００２０】
本願の開示するストレージ装置、キャッシュ書込制御方法及びキャッシュ書込制御プログラムの一つの態様によれば、スループットを向上させつつ、ヒット率を確保し、システム性能を向上させることができるという効果を奏する。
【図面の簡単な説明】
【００２１】
【図１】図１は、ストレージ装置のハードウェア構成図である。
【図２】図２は、ストレージ装置におけるソフトウェア構成図である。
【図３】図３は、実施例１に係るストレージ装置のブロック図である。
【図４】図４は、１次キャッシュ管理テーブルの一例の図である。
【図５】図５は、２次キャッシュ管理テーブルの一例の図である。
【図６Ａ】図６Ａは、アクセス回数を基に算出される優先度と２次キャッシュの領域との関係の一例を表す図である。
【図６Ｂ】図６Ｂは、アクセス回数を基に算出される優先度と２次キャッシュの領域との関係の他の例を表す図である。
【図７Ａ】図７Ａは、リードモディファイライト処理を実行する場合の動作を説明するための図である。
【図７Ｂ】図７Ｂは、隣接チャンク領域を無効にした上でのデータ書き込みの動作を説明するための図である。
【図８】図８は、ページアライメントの場合のデータの書き込みについて説明するための図である。
【図９】図９は、リードモディファイライト処理を実行する場合のデータの書き込みについて説明するための図である。
【図１０】図１０は、隣接チャンク領域の優先度が閾値よりも高いのでリードモディファイライト処理を行う場合について説明するための図である。
【図１１】図１１は、隣接チャンク領域を無効としたうえでのデータの書き込みについて説明するための図である。
【図１２】図１２は、１つの対象領域に含まれるページに対する非ページアライメントのデータ書き込みについて説明するための図である。
【図１３】図１３は、隣接チャンク領域が無効にされた上でデータの書き込みが行われた場合の各管理テーブルの遷移を表す図である。
【図１４】図１４は、実施例１に係るストレージ装置によるライトアクセス延長時のデータ書き込み処理のフローチャートである。
【図１５】図１５は、実施例２に係るストレージ装置のブロック図である。
【図１６】図１６は、実施例２に係るストレージ装置によりライトアクセス延長時のデータ書き込み処理のフローチャートである。
【発明を実施するための形態】
【００２２】
以下に、本願の開示するストレージ装置、キャッシュ書込制御方法及びキャッシュ書込制御プログラムの実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示するストレージ装置、キャッシュ書込制御方法及びキャッシュ書込制御プログラムが限定されるものではない。
【実施例１】
【００２３】
図１は、ストレージ装置のハードウェア構成図である。ストレージ装置１は、図１に示すように、コントローラ１０、ディスク２０及びＮＡＮＤ型フラッシュメモリ３０を有する。
【００２４】
コントローラ１０は、ストレージ装置１におけるデータの読み出し及び書き込みを管理する。コントローラ１０は、ＣＰＵ（Central  Processing  Unit）１１、ＤＲＡＭ１２、バススイッチ１３及びアダプタ１４を有する。ホスト２は、例えばサーバなどの情報処理装置である。
【００２５】
ＣＰＵ１１は、ストレージ装置１における演算処理装置である。ＣＰＵ１１は、チャネルアダプタ１５及びバススイッチ１３を経由してホスト２に接続する。そして、ＣＰＵ１１は、ホスト２との間でデータや命令の送受信を行う。
【００２６】
さらに、ＣＰＵ１１は、ホスト２からの命令を受けるなどして、ストレージ装置１におけるデータの読み出し及び書き込みの制御を行う。例えば、ＣＰＵ１１は、キャッシュを制御するためのアプリケーションを実行し動作させる。また、例えば、ＣＰＵ１１は、キャッシュを動作させるためのドライバ及びファームウェアなどを実行し動作させる。
【００２７】
ＤＲＡＭ１２は、データの読み出し及び書き込みの高速化のために、ホスト２に対するデータの読み出し及び書き込みの際に、一時的にデータを格納する１次キャッシュの機能を有する。ＤＲＡＭ１２のデータの読み出し及び書き込みは、ホスト２からのＩＯの単位サイズ、すなわちディスク２０の論理ブロックサイズで行われる。
【００２８】
バススイッチ１３は、ＣＰＵ１１からの指示を受けて、ＣＰＵ１１から接続するバスの経路をディスク２０又はＮＡＮＤ型フラッシュメモリ３０の何れかに切り替える。このように、実際には、ＣＰＵ１１からディスク２０又はＮＡＮＤ型フラッシュメモリ３０への接続はバススイッチ１３を介して行われるが、以下の説明では、バススイッチ１３の切り替え及び仲介を省略して説明する場合がある。
【００２９】
アダプタ１４は、ＣＰＵ１１から延びるバスをディスク２０へ接続するためのアダプタである。これについても、実際にはＣＰＵ１１は、アダプタ１４を介してディスク２０とデータの送受信を行うが、以下の説明では、アダプタ１４の仲介を省略して説明する場合がある。
【００３０】
ディスク２０は、ハードディスクなどの補助記憶装置である。ＮＡＮＤ型フラッシュメモリ３０は、例えばＳＳＤであり、データの読み出し及び書き込みの高速化のために一時的にデータを格納する２次キャッシュの機能を有する。
【００３１】
ＮＡＮＤ型フラッシュメモリ３０では、データの読み出しは、ＤＲＡＭ１２と同様にディスク２０の論理ブロックサイズで行われる。一方、データの書き込みは、ＮＡＮＤ型フラッシュメモリ３０では、ページ単位で行われる。さらに、ＮＡＮＤ型フラッシュメモリ３０は、データの消去はページが複数集まったブロックという単位で行われる。このＮＡＮＤ型フラッシュメモリ３０におけるページが、「書込単位領域」の一例にあたる。ＮＡＮＤ型フラッシュメモリ３０では、全てのデータの格納領域が無効となったブロックにおいて、データの削除が行われる。
【００３２】
次に、図２を参照して、ストレージ装置１において動作し、データの読み出し及び書き込みを行う各種ソフトウェアについて説明する。図２は、ストレージ装置におけるソフトウェア構成図である。
【００３３】
図１のＣＰＵ１１は、図２に示す、キャッシュ制御アプリケーション９１、２次キャッシュドライバ９２及びディスクドライバ９３を実行し動作させる。キャッシュ制御アプリケーション９１、２次キャッシュドライバ９２及びディスクドライバ９３を実現する各種プログラムは、例えばディスク２０に格納されている。
【００３４】
キャッシュ制御アプリケーション９１は、ＤＲＡＭ１２で実現される１次キャッシュ及びＮＡＮＤ型フラッシュメモリ３０で実現される２次キャッシュの制御を行う。例えば、キャッシュ制御アプリケーション９１は、１次キャッシュ及び２次キャッシュの管理テーブルを管理する。具体的には、キャッシュ制御アプリケーション９１は、管理テーブルを用いて１次キャッシュ及び２次キャッシュのデータ格納領域の有効無効を管理する。例えば、データの読み出しを行う場合、キャッシュ制御アプリケーション９１は、管理テーブルを用いて１次キャッシュ及び２次キャッシュで読み出しデータがヒットするか否かを判定する。
【００３５】
また、キャッシュ制御アプリケーション９１は、ホスト２からの指示を受けて１次キャッシュに対するデータの読み出し及び書き込みを行う。また、キャッシュ制御アプリケーション９１は、ホスト２からの指示を受けて、ディスク２０に対するデータの読み出し及び書き込みの命令をディスクドライバ９３へ送信する。
【００３６】
また、キャッシュ制御アプリケーション９１は、ホスト２からの指示を受けて、２次キャッシュに対するデータの読み出し及び書き込みの命令を２次キャッシュドライバ９２へ送信する。この場合、キャッシュ制御アプリケーション９１は、２次キャッシュに対するデータの書き込み先を決定する。例えば、キャッシュ制御アプリケーション９１は、全ての領域が無効となった２次キャッシュのチャンク又はＬＲＵ（Least  Recently  Used）管理により最も古く参照された２次キャッシュのチャンクに新たなデータの書き込み先として決定する。
【００３７】
２次キャッシュドライバ９２は、ＮＡＮＤ型フラッシュメモリ３０に対するデータの読み書きの命令をキャッシュ制御アプリケーション９１から受ける。そして、２次キャッシュドライバ９２は、受信した命令にしたがって、ＮＡＮＤ型フラッシュメモリ３０に対するデータの読み書きを行う。
【００３８】
さらに、後述するように、２次キャッシュドライバ９２は、データの書き込み時に、ＮＡＮＤ型フラッシュメモリ３０により実現される２次キャッシュにおける各チャンクの優先度を求める。そして、２次キャッシュドライバ９２は、求めた優先度に応じてデータの書き込みを行うページを含むチャンクのデータを破棄するか、リードモディファイライト処理を実行するかを決定する。
【００３９】
ディスクドライバ９３は、ディスク２０に対するデータの読み書きの命令をキャッシュ制御アプリケーション９１から受ける。そして、ディスクドライバ９３は、受信した命令にしたがって、ディスク２０に対するデータの読み書きを行う。
【００４０】
次に、図３を参照して、ストレージ装置１におけるＤＲＡＭ１２及びＮＡＮＤ型フラッシュメモリ３０に対するデータの読み出し及び書き込みについて詳細に説明する。図３は、実施例１に係るストレージ装置のブロック図である。
【００４１】
本実施例に係るストレージ装置１は、図３に示すように、統括制御部１０１、テーブル管理部１０２、１次キャッシュ管理テーブル１０３、２次キャッシュ管理テーブル１０４及び優先度算出部１０５を有する。また、ストレージ装置１は、１次キャッシュ読書制御部１０６、２次キャッシュ読書制御部１０７、条件判定部１０８、ディスク読書制御部１０９を有する。さらに、ストレージ装置１は、１次キャッシュ１１１、２次キャッシュ１１２、リードモディファイライト用バッファ１１３及びディスク２０を有する。
【００４２】
図２に示したキャッシュ制御アプリケーション９１が、統括制御部１０１、テーブル管理部１０２、優先度算出部１０５及び一次キャッシュ読書制御部１０６の機能を実現する。また、２次キャッシュドライバ９２が、２次キャッシュ読書制御部１０７及び条件判定部１０８の機能を実現する。
【００４３】
また、１次キャッシュ１１１及びリードモディファイライト用バッファ１１３は、ＤＲＡＭ１２により実現される。さらに、１次キャッシュ管理テーブル１０３及び２次キャッシュ管理テーブル１０４は、ＤＲＡＭ１２に格納される。また、２次キャッシュ１１２はＮＡＮＤ型フラッシュメモリ３０により実現される。
【００４４】
図４は、１次キャッシュ管理テーブルの一例の図である。１次キャッシュ管理テーブル１０３は、論理ブロック毎に有効フラグ及びＤｉｒｔｙフラグが登録されている。図４におけるＬＢＡ（Logical  Block  Address）が、論理ブロックの識別情報を表す。有効フラグは、対応する論理ブロックが有効の場合に「１」の値を取り、無効の場合に「０」の値を取る。論理ブロックが有効とは、その論理ブロックがディスク２０もしくは２次キャッシュ１１２上から展開されているか否かを示す。例えば、ホスト２から指定された読出範囲を１次キャッシュ１１１にステージングする際に、チャンク全てをディスク２０もしくは２次キャッシュ１１２からステージングせずに、読出範囲のみをステージングする場合に、チャンク内の未ステージング領域である論理ブロックが無効となる。
【００４５】
また、Ｄｉｒｔｙのフラグの値が「１」の場合、ディスク２０に書き戻していないホスト２からの書き込みデータが対応する論理ブロックに格納されていることを示す。この、ディスク２０に書き戻していないホスト２からの書き込みデータを、「Ｄｉｒｔｙデータ」という。Ｄｉｒｔｙのフラグの値が「０」の場合、対応する論理ブロックにはＤｉｒｔｙデータが書き込まれていないことを示す。
【００４６】
より具体的には、１次キャッシュ管理テーブル１０３には、１次キャッシュ１１１のチャンクの識別情報であるチャンクＩＤ（Identifier）が対応付けられる。そして、１次キャッシュ管理テーブル１０３は、ＤＲＡＭ１２上の開始アドレス、格納データのディスク２０上の開始論理ブロックアドレス、各論理ブロックの状態及びＬＲＵ情報などのその他管理情報が含まれる。
【００４７】
ここで、本実施例では、１次キャッシュ１１１を論理ブロック単位で管理し、２次キャッシュ１１２を１次キャッシュ１１１のチャンク単位で管理するが、管理単位はこれに限らない。例えば、１次キャッシュ１１１をチャンク単位で一括でステージングしてチャンク毎に有効無効状態を管理してもよい。また、２次キャッシュ１１２のチャンクを論理ブロック毎に管理してもよい。ただし、２次キャッシュ１１２の管理単位が、後述するデータを破棄するか保持するかの判定単位となる。
【００４８】
図５は、２次キャッシュ管理テーブルの一例の図である。２次キャッシュ管理テーブル１０４は、例えば、２次キャッシュ１１２のチャンク毎にテーブルが設けられている。図５は、１つのチャンクに対応する２次キャッシュ管理テーブル１０４を示す。２次キャッシュ管理テーブル１０４には、そのテーブルが示す２次キャッシュ１１２のチャンクに対応する複数の１次キャッシュ１１１のチャンクが登録されている。すなわち、２次キャッシュ管理テーブル１０４では、１次キャッシュ１１１のチャンクの情報によって、そのチャンクに対応する２次キャッシュ１１２の領域が表されている。以下では、２次キャッシュ管理テーブル１０４に登録された１次キャッシュ１１１のチャンクの識別情報で表される２次キャッシュ１１２の領域を、１次キャッシュ１１１のチャンクの「対応領域」という。逆に、２次キャッシュ１１２の各対応領域に対応する１次キャッシュ１１１のチャンクを、２次キャッシュ１１２の対応領域の「対応チャンク」という。この対応領域が、「管理単位領域」の一例にあたる。
【００４９】
さらに、２次キャッシュ管理テーブル１０４には、１次キャッシュ１１１の各チャンクの識別情報で表される対応領域毎に、有効フラグ、Ｄｉｒｔｙフラグ、読出回数及び書込回数が登録される。有効フラグは、対応領域が有効の場合に「１」の値を取り、無効の場合に「０」の値を取る。また、Ｄｉｒｔｙのフラグの値が「１」の場合、ディスク２０に書き戻していないホスト２からの書き込みデータが、その対応領域に格納されていることを示す。Ｄｉｒｔｙのフラグの値が「０」の場合、その対応領域にはＤｉｒｔｙデータが書き込まれていないことを示す。
【００５０】
より具体的には、２次キャッシュ管理テーブル１０４には、２次キャッシュ１１２のチャンクの識別情報であるチャンクＩＤが対応付けられる。そして、２次キャッシュ管理テーブル１０４は、ＮＡＮＤ型フラッシュメモリ３０上の開始アドレス、格納データのディスク２０上の開始論理ブロックアドレス、そのチャンクに含まれる各対応領域の状態及びＬＲＵ（Least  Recently  Used）情報などのその他管理情報が含まれる。
【００５１】
統括制御部１０１は、１次キャッシュ１１１、２次キャッシュ１１２及びディスク２０に対するデータの読み書きを統括管理する。以下に、統括制御部１０１の機能の詳細を説明する。
【００５２】
統括制御部１０１は、ホスト２によるディスク２０からのデータの読み出しの指示を受ける。そして、統括制御部１０１は、１次キャッシュ管理テーブル１０３及び２次キャッシュ管理テーブル１０４を参照し、１次キャッシュ１１１又は２次キャッシュ１１２の何れかで読出しのデータがヒットしたか否かを判定する。
【００５３】
１次キャッシュ１１１でヒットした場合、統括制御部１０１は、１次キャッシュ読書制御部１０６に対してデータの読み出しを指示する。その後、統括制御部１０１は、読み出しを指示したデータを１次キャッシュ読書制御部１０６から取得する。そして、統括制御部１０１は、取得したデータをホスト２へ送信する。
【００５４】
また、１次キャッシュ１１１ではヒットせずに２次キャッシュ１１２でヒットした場合、統括制御部１０１は、２次キャッシュ読書制御部１０７に対してデータの読み出しを指示する。その後、統括制御部１０１は、読み出しを指示したデータを２次キャッシュ読書制御部１０７から取得する。そして、統括制御部１０１は、取得したデータをホスト２へ送信する。さらに、統括制御部１０１は、データを読み出した２次キャッシュ１１２の領域を表す対応チャンクの識別情報及びデータの読み出しの通知をテーブル管理部１０２へ通知する。
【００５５】
一方ヒットしなかった場合、統括制御部１０１は、指示されたデータのディスク２０からの読み出しをディスク制御部１０９へ要求する。その後、統括制御部１０１は、読み出しを指示したデータをディスク制御部１０９から取得する。そして、統括制御部１０１は、読み出したデータをホスト２へ送信する。さらに、統括制御部１０１は、ディスク２０から読み出したデータを１次キャッシュ読書制御部１０６又は２次キャッシュ読書制御部１０７へ送信し、データの書き込みを指示する。すなわち、統括制御部１０１は、ステージングを行う。２次キャッシュ１１２へデータを書き込んだ場合、統括制御部１０１は、データを書き込んだ２次キャッシュ１１２の領域を表す対応チャンクの識別情報及びデータの書込通知をテーブル管理部１０２に通知する。
【００５６】
また、統括制御部１０１は、ディスク２０に対するデータの書き込み命令をホスト２から受ける。そして、統括制御部１０１は、１次キャッシュ管理テーブル１０３及び２次キャッシュ管理テーブル１０４を参照し、１次キャッシュ１１１又は２次キャッシュ１１２の何れかで書き込みデータがヒットしたか否かを判定する。
【００５７】
書き込みデータがヒットしなかった場合、統括制御部１０１は、ディスク２０へのデータの書き込み命令をディスク読書制御部１０９へ送信する。さらに、統括制御部１０１は、ディスク読書制御部１０９がすぐにディスク２０へ書き込むことが困難なデータがある場合、そのデータを１次キャッシュ読書制御部１０６及び２次キャッシュ読書制御部１０７へ、書き込み先の論理ブロックの指定とともに送信する。
【００５８】
１次キャッシュ１１１へデータを書き込んだ場合、統括制御部１０１は、データを書き込んだ１次キャッシュ１１１の論理ブロックの識別情報及びＤｉｒｔｙの通知をテーブル管理部１０２へ出力する。同様に、２次キャッシュ１１２へデータを書き込んだ場合、統括制御部１０１は、データを書き込んだ２次キャッシュ１１２の領域を表す対応チャンクの識別子、データの書き込みの通知及びＤｉｒｔｙの通知をテーブル管理部１０２へ出力する。
【００５９】
その後、統括制御部１０１は、ディスク読書制御部１０９がディスク２０へ新しいデータを書き込める状態になると、１次キャッシュ読書制御部１０６又は２次キャッシュ読書制御部１０７から書き込むデータを取得する。そして、統括制御部１０１は、取得したデータをディスク読書制御部１０９へ送信し、ディスク２０へ書き込ませる。
【００６０】
この場合、１次キャッシュ１１１からデータを読み出すと、統括制御部１０１は、データを読み出した１次キャッシュ１１１の論理ブロックの識別情報及びＤｉｒｔｙの解除の通知をテーブル管理部１０２へ出力する。
【００６１】
同様に、２次キャッシュ１１２からデータを読み出した場合、統括制御部１０１は、データを読み出した２次キャッシュ１１２の領域を表す対応チャンクの識別子及びデータの読出通知をテーブル管理部１０２へ出力する。さらに、統括制御部１０１は、データを読み出した２次キャッシュ１１２の領域のＤｉｒｔｙの解除の通知をテーブル管理部１０２へ出力する。
【００６２】
また、書き込みデータが１次キャッシュ１１１でヒットした場合、統括制御部１０１は、１次キャッシュ１１１上のヒットした領域の新しいデータでの上書きを１次キャッシュ読書制御部１０６に指示する。また、書き込みデータが１次キャッシュ１１１でヒットせず、２次キャッシュ１１２でヒットした場合、統括制御部１０１は、書き込み先の論理ブロックの指定とともに１次キャッシュ１１１に書き込みデータを１次キャッシュ読書制御部１０６に送信する。
【００６３】
そして、いずれの場合にも、統括制御部１０１は、データを書き込んだ１次キャッシュ１１１の論理ブロックの識別情報及びＤｉｒｔｙの通知をテーブル管理部１０２へ出力する。その後、データを更新した１次キャッシュ１１１のチャンクの対応領域が２次キャッシュ１１２に存在する場合、統括制御部１０１は、キャッシュ間の整合性を保つため、２次キャッシュ読書制御部１０７にデータの変更、すなわちデータの書き込みを指示する。この場合、統括制御部１０１は、データの変更を行う２次キャッシュ１１２の領域を表す対応チャンクの識別情報を２次キャッシュ読書制御部１０７へ出力する。以下では、１次キャッシュ１１１のチャンクの対応領域が２次キャッシュに存在する場合に、キャッシュの整合性を保つために行う２次キャッシュ１１２への書き込みを、「ライトアクセス延長の書き込み」と呼ぶ。
【００６４】
ライトアクセス延長の書き込みを行う場合、統括制御部１０１は、リードモディファイライト処理を実施するか否かの判定を条件判定部１０８に指示する。この場合、統括制御部１０１は、データの変更を行う２次キャッシュ１１２の領域の情報を条件判定部１０８へ送信する。
【００６５】
その後、リードモディファイライト処理が実施される場合、統括制御部１０１は、リードモディファイライト処理の実行の通知を条件判定部１０８から受ける。そして、統括制御部１０１は、書込データのリードモディファイ用バッファ１１３への書込指示を１次キャッシュ読書制御部１０６へ指示する。また、統括制御部１０１は、リードモディファイライト処理により、データを読み出した２次キャッシュ１１２の領域を表す対応チャンクの識別情報及びデータの読出通知をテーブル管理部１０２へ出力する。さらに、統括制御部１０１は、リードモディファイライト処理により、データを書き込んだ２次キャッシュ１１２の領域を表す対応チャンクの識別情報及びデータの書込通知をテーブル管理部１０２へ出力する。
【００６６】
一方、リードモディファイライト処理が実行されない場合には、隣接チャンク領域を無効とした上での書き込みを行う場合、及び隣接チャンク領域を無効とせず書き込みを行う場合、すなわち単に書き込みが行われた場合がある。ここで、隣接チャンク領域とは、データを２次キャッシュ１１２に書き込む際に、書き込み先のページの領域が異なる１次キャッシュ１１１のチャンクの対応領域を跨ぐ場合における、データの更新が無い論理ブロックを有する対応領域を指す。隣接チャンク領域の無効については後で詳細に説明する。
【００６７】
隣接チャンク領域が無効とされた場合、統括制御部１０１は、隣接チャンク領域の無効及びデータの書込通知を２次キャッシュ読書制御部１０７から受ける。そして、統括制御部１０１は、無効とされた対応領域を表す対応チャンクの識別情報、データを書き込んだ対応領域を表す対応チャンクの識別情報及びデータの書込通知をテーブル管理部１０２へ出力する。
【００６８】
これに対して、隣接チャンクが無効とされなかった場合、統括制御部１０１は、データの書込通知を２次キャッシュ読書制御部１０７から受ける。そして、統括制御部１０１は、データを書き込んだ２次キャッシュ１１２の領域を表す対応チャンクの識別情報及びデータの書込通知をテーブル管理部１０２へ出力する。
【００６９】
テーブル管理部１０２は、ディスク２０へのデータの書き込み時に１次キャッシュ１１１へデータが一時格納された場合、データの格納先の論理ブロックの情報及びＤｒｉｔｙの通知の入力を統括制御部１０１から受ける。また、テーブル管理部１０２は、書込要求を受けた際に、１次キャッシュ１１１もしくは２次キャッシュ１１２、またはその両方で書き込むデータがヒットした場合も、データの格納先の論理ブロックの情報及びＤｒｉｔｙの通知の入力を統括制御部１０１から受ける。
【００７０】
そして、テーブル管理部１０２は、１次キャッシュ管理テーブル１０３における通知を受けた論理ブロックのＤｉｒｔｙのフラグを「１」に設定する。その後、データの読み出し元の論理ブロックの情報及びＤｉｒｔｙの解除の通知を受けると、テーブル管理部１０２は、１次キャッシュ管理テーブル１０３における通知を受けた論理ブロックのＤｉｒｔｙのフラグを「０」に戻す。
【００７１】
同様に、ディスク２０へのデータの書き込み時に２次キャッシュ１１２へデータが一時格納された場合、テーブル管理部１０２は、データの格納先の２次キャッシュ１１２の領域を表す対応チャンクの識別情報及びＤｒｉｔｙの通知の入力を統括制御部１０１から受ける。そして、テーブル管理部１０２は、２次キャッシュ管理テーブル１０４における対応チャンクの識別子で表される対応領域のＤｉｒｔｙのフラグを「１」に設定する。その後、データの読出元の対応領域を表す対応チャンクの識別情報及びＤｉｒｔｙの解除の通知を受けると、テーブル管理部１０２は、通知を受けた対応チャンクの識別情報で表される対応領域のＤｉｒｔｙのフラグを「０」に戻す。
【００７２】
また、テーブル管理部１０２は、２次キャッシュ１１２に対してライトアクセス延長の書き込みを行う場合、単に書き込みが行われたか、リードモディファイライトが実施されたか又は隣接チャンク領域が無効とされたかによって統括制御部１０１から異なる情報の入力を受ける。
【００７３】
単に書き込みが行われた場合、テーブル管理部１０２は、データが書き込まれた２次キャッシュ１１２の領域を表す対応チャンクの識別情報及びデータの書込通知の入力を統括制御部１０１から受ける。ここで、テーブル管理部１０２は、書込回数をカウントするカウンタ及び読出回数をカウントするカウンタを、対応領域毎に有する。そして、テーブル管理部１０２は、通知を受けた対応チャンクの識別情報で表される対応領域の書込回数のカウンタを１つインクリメントする。
【００７４】
また、リードモディファイライトが実施された場合、テーブル管理部１０２は、リードモディファイライト処理により、データが書き込まれた２次キャッシュ１１２の領域を表す対応チャンクの識別情報及びデータの書込通知をテーブル管理部１０２へ出力する。そして、テーブル管理部１０２は、通知を受けた対応チャンクで表される対応領域の書込回数のカウンタを１つインクリメントする。
【００７５】
また、隣接チャンク領域が無効とされた場合、すなわち、隣接チャンク領域のデータが破棄された場合について説明する。この場合、テーブル管理部１０２は、無効とされた隣接チャンク領域を表す対応チャンクの識別情報、データを書き込んだ２次キャッシュ１１２の領域を表す対応チャンクの識別情報及びデータの書込通知の入力を統括制御部１０１から受ける。そして、テーブル管理部１０２は、無効とされた隣接チャンク領域の有効フラグを「０」に設定する。さらに、テーブル管理部１０２は、データが書き込まれた２次キャッシュ１１２の領域の書込回数のカウンタを１つインクリメントする。
【００７６】
また、テーブル管理部１０２は、一定期間毎に、各対応領域の書込回数及び読出回数のカウンタの値に、２次キャッシュ管理テーブル１０４の各対応領域の書込回数及び読出回数の値を更新する。その後、テーブル管理部１０２は、各対応領域の読出回数及び書込回数のカウンタの値を初期化し０とする。すなわち、テーブル管理部１０２は、一定期間における各対応領域の書込回数及び読出回数の値を２次キャッシュ管理テーブル１０４に書き込むことを繰り返す。
【００７７】
条件判定部１０８は、ライトアクセス延長の場合、データを書き込む２次キャッシュ１１２の領域の情報とともに、リードモディファイライト処理を実施するか否かの判定の要求を統括制御部１０１から受ける。そして、条件判定部１０８は、リードモディファイライト処理を実施するか否かの判定を以下の手順にしたがって行う。ここで、２次キャッシュ１１２に対するデータの書き込みは、２次キャッシュ１１２のページ単位で行われるので、条件判定部１０８は、２次キャッシュ１１２のページ単位でリードモディファイライト処理を行うか否かの判定を行う。
【００７８】
まず、条件判定部１０８は、書込サイズ、すなわちデータを書き込む２次キャッシュ１１２の領域の大きさが、２次キャッシュ１１２のページサイズの整数倍か否か、及び、ＮＡＮＤ型フラッシュメモリ３０上の書き込みを行う領域の開始位置がページサイズの整数倍か否かを判定する。書込サイズがページサイズの整数倍の場合、データを書き込む２次キャッシュ１１２の領域がページアライメントであるといえる。その場合、条件判定部１０８は、リードモディファイライトを行わずに、単なるデータ書き込みの実施を決定する。そして、条件判定部１０８は、単にデータを２次キャッシュ１１２へ書き込むことを２次キャッシュ読書制御部１０７へ指示する。
【００７９】
これに対して、書込サイズがページサイズの整数倍でない場合又は書き込みを行う領域の開始位置がページサイズの整数倍でない場合、データを書き込む２次キャッシュ１１２の領域が非ページアライメントであるといえる。この場合、条件判定部１０８は、データの更新が無い論理ブロックを有する書込先ページであって、異なる対象領域に跨る書込先ページがあるか否かを判定する。以下では、データの更新が無い論理ブロックを有する書込先ページであって、異なる対象領域に跨る書込先ページを「判定対象ページ」という。
【００８０】
判定対象ページが無い場合、条件判定部１０８は、リードモディファイライト処理の実行を決定する。そして、条件判定部１０８は、リードモディファイライト処理の実行を２次キャッシュ読書制御部１０７へ指示する。
【００８１】
判定対象ページがある場合、条件判定部１０８は、判定対象ページの隣接チャンク領域はデータの更新が無い論理ブロックのみを含み、且つ、判定対象ページの隣接チャンク以外の領域はデータの更新がある論理ブロックのみを含むか否かを判定する。以下では、判定対象ページに含まれる隣接チャンク領域以外の対象領域を「書込チャンク領域」という。すなわち、条件判定部１０８は、データを更新する論理ブロックとデータを更新しない論理ブロックとの境界が、隣接チャンク領域と書込チャンク領域との境界と一致するか否かを判定する。以下では、データを更新する論理ブロックとデータを更新しない論理ブロックとの境界が隣接チャンク領域と書込チャンク領域との境界と一致する場合を、「境界一致」という。
【００８２】
境界一致でない場合、条件判定部１０８は、リードモディファイライト処理の実行を決定する。そして、条件判定部１０８は、リードモディファイライト処理の実行を２次キャッシュ読書制御部１０７へ指示する。
【００８３】
これに対して、境界一致の場合、条件判定部１０８は、隣接チャンク領域の優先度の算出要求を、隣接チャンク領域を表す対応チャンクの識別情報とともに優先度算出部１０５へ出力する。その後、条件判定部１０８は、隣接チャンク領域の優先度の入力を優先度算出部１０５から受ける。そして、条件判定部１０８は、隣接チャンク領域の優先度が予め決められた閾値以上か否かを判定する。隣接チャンク領域の優先度が予め決められた閾値以上の場合、条件判定部１０８は、リードモディファイライト処理の実行を決定する。そして、条件判定部１０８は、リードモディファイライト処理の実行を２次キャッシュ読書制御部１０７へ指示する。
【００８４】
一方、隣接チャンク領域の優先度が閾値未満の場合、条件判定部１０８は、隣接チャンク領域を無効とすることを決定する。そして、条件判定部１０８は、隣接チャンク領域の無効を２次キャッシュ読書制御部１０７へ通知する。この条件判定部１０８が、「判定部」の一例にあたる。
【００８５】
ここで、優先度の閾値は、２次キャッシュ１１２上のデータを残すか破棄するかの指標となる値である。そして、優先度の閾値は、システムが扱う平均的なアクセスパターンに基づいて決定されることが好ましい。
【００８６】
そこで、図６Ａ及び６Ｂを参照して、優先度の閾値の決定方法の一例について説明する。図６Ａは、アクセス回数を基に算出される優先度と２次キャッシュの領域との関係の一例を表す図である。また、図６Ｂは、アクセス回数を基に算出される優先度と２次キャッシュの領域との関係の他の例を表す図である。図６Ａ及び６Ｂともに、縦軸は優先度を表し、横軸は論理ブロックの番号順に並んだ２次キャッシュ１１２の対応領域を表している。ここで、アクセス回数とは、各論理ブロックに対するデータの読み出し及び書き込みの回数である。そして、優先度はアクセス回数に比例する。すなわち、図６Ａ及び６Ｂともにアクセス回数が多いほど、縦軸の値は大きくなる。アクセス回数を用いた優先度の算出方法については、後で詳細に説明する。
【００８７】
１次キャッシュ１１１のチャンクに対応する２次キャッシュ１１２の各対応領域に対するアクセス回数には、時間的局所性と論理ブロック番号に基づく空間的局所性があると考えられる。すなわち、アクセス回数と２次キャッシュ１１２の各対応領域との関係を表すヒストグラムは、図６Ａ及び６Ｂのような正規分布の重ね合わせで表される。優先度はアクセス回数に比例するので、図６Ａ及び６Ｂは、優先度と２次キャッシュ１１２の各対応領域との関係を表すと考えることもできる。
【００８８】
ここで、閾値を高くすることで、隣接チャンク領域が無効とされる確率が高くなる。隣接チャンク領域が無効とされると、２次キャッシュ１１２において破棄されるデータが増加する。２次キャッシュ１１２上で多くのデータが破棄された場合、読み出しのヒット率が低下してしまい、システムの処理効率が低下してしまう。そこで、無効とされる領域の量は２次キャッシュ１１２上の全領域に対して少量となることが好ましい。
【００８９】
例えば、図６Ａに示すグラフ２０１で表されるような分散が大きく優先度の平均値も大きいシステムの場合、閾値２０２を比較的大きな値にしても２次キャッシュ１１２上の破棄されるデータは少なく抑えることができる。しかし、図６Ｂに示すグラフ２１１で表されるようなアクセス数が少ない領域に集中しているようなシステムの場合、閾値２１２を大きくした場合、２次キャッシュ１１２上の多くのデータが破棄されてしまう可能性がある。そこで、このようなシステムにおいては、閾値２１２を小さくすることが好ましい。このように、閾値は、２次キャッシュ１１２におけるアクセス回数の傾向によって決定されることが好ましい。
【００９０】
優先度算出部１０５は、隣接チャンク領域を表す対応チャンクの識別情報とともに優先度の算出要求を条件判定部１０８から受ける。優先度算出部１０５は、優先度の算出要求を受けると、まず２次キャッシュ管理テーブル１０４を用いて隣接チャンク領域がＤｉｒｔｙデータを含むか否かを判定する。隣接チャンク領域がＤｉｒｔｙデータを含む場合、優先度算出部１０５は、隣接チャンク領域の優先度を無限大にする。これにより、隣接チャンク領域がＤｉｒｔｙデータを含む場合は、隣接チャンクの優先度が閾値以上になる。
【００９１】
これに対して、隣接チャンク領域がＤｉｒｔｙデータを含まない場合、優先度算出部１０５は、隣接チャンク領域の書込回数及び読出回数を２次キャッシュ管理テーブル１０４から取得する。そして、優先度算出部１０５は、書込回数と読出回数との合計に、読出回数を書込回数で除算した値を加算することで隣接チャンク領域の優先度を算出する。すなわち、書込回数の優先度をＰとし、書込回数をＲとし、読出回数をＷとした場合、優先度算出部１０５は、Ｐ＝Ｒ＋Ｗ＋（Ｒ／Ｗ）により隣接チャンク領域の優先度を算出する。このように、読出回数と書込回数の比を優先度に反映させることで、読出回数の割合が多い方がより隣接チャンクの優先度は高くなる。
【００９２】
その後、優先度算出部１０５は、求めた隣接チャンク領域の優先度を条件判定部１０８へ送信する。
【００９３】
１次キャッシュ読書制御部１０６は、データの書込命令を統括制御部１０１から受けて、指定された１次キャッシュ１１１の論理ブロックにデータを書き込む。また、１次キャッシュ読書制御部１０６は、データの読出命令を統括制御部１０１から受けて、指定されたデータを１次キャッシュ１１１から読み出し、統括制御部１０１へ送信する。
【００９４】
また、リードモディファイライトを実行する場合、１次キャッシュ読書制御部１０６は、２次キャッシュ１１２に書き込むデータのリードモディファイライト用バッファ１１３への出力の命令を統括制御部１０１から受ける。そして、１次キャッシュ読書制御部１０６は、指定されデータを１次キャッシュ１１１から読み出し、リードモディファイライト用バッファ１１３に書き込む。
【００９５】
２次キャッシュ読書制御部１０７は、データの書込命令を統括制御部１０１から受ける。この時、ホスト２からのライトアクセス延長の２次キャッシュ１１２への書き込みであれば、２次キャッシュ読書制御部１０７は、単なる書き込みを行うか、リードモディファイライト処理を行うか又は隣接チャンク領域を無効にしたうえでデータを書き込むかの指示を条件判定部１０８から受ける。
【００９６】
単なる書き込みの場合、２次キャッシュ読書制御部１０７は、指定されたページへのデータの書き込みを行う。この場合、２次キャッシュ読書制御部１０７は、書き込んだ対象チャンクの情報及びデータの書込通知を統括制御部１０１へ出力する。
【００９７】
また、リードモディファイライト処理の場合、２次キャッシュ読書制御部１０７は、対象となる２次キャッシュ１１２のページからデータを読み出す。次に、２次キャッシュ読書制御部１０７は、読み出したデータをリードモディファイライト用バッファ１１３へ書き込み、１次キャッシュ読書制御部１０６から書き込まれたデータとマージする。そして、２次キャッシュ読書制御部１０７は、マージしたデータをリードモディファイライト用バッファ１１３から取得し、２次キャッシュ１１２の対象となるページへ書き込む。この場合、２次キャッシュ読書制御部１０７は、データの読み出し及び書き戻しを行った２次キャッシュ１１２の領域を表す対象チャンクの識別情報及び読出通知及び書込通知を統括制御部１０１へ送信する。
【００９８】
また、隣接チャンク領域を無効にしたうえでデータを書き込む場合、２次キャッシュ読書制御部１０７は、隣接チャンク領域の無効を統括制御部１０１へ通知する。次に、２次キャッシュ読書制御部１０７は、対象となる２次キャッシュ１１２のページにデータを書き込む。その後、２次キャッシュ読書制御部１０７は、データを書き込んだ２次キャッシュ１１２の領域を表す対象チャンクの識別情報及びデータの書込通知を統括制御部１０１へ出力する。
【００９９】
また、２次キャッシュ読書制御部１０７は、データの読出命令を統括制御部１０１から受けて、指定されたデータを２次キャッシュ１１２から読み出し、統括制御部１０１へ送信する。さらに、２次キャッシュ読書制御部１０７は、データを読み出した２次キャッシュ１１２の領域を表す対象チャンクの識別情報及びデータの読出通知を統括制御部１０１へ出力する。この２次キャッシュ読書制御部１０７が、「書込部」の一例にあたる。
【０１００】
リードモディファイライト用バッファ１１３は、リードモディファイライト処理を行う場合の一時的な記憶領域を有する。リードモディファイライト用バッファ１１３は、例えば、図１のＤＲＡＭ１２に設けられる。
【０１０１】
ディスク読書制御部１０９は、ディスク２０へのデータの書込命令を統括制御部１０１から受ける。そして、ディスク読書制御部１０９は、指定されたデータをディスク２０へ書き込む。
【０１０２】
また、ディスク読書制御部１０９は、ディスク２０からのデータの読出命令を統括制御部１０１から受ける。そして、ディスク読書制御部１０９は、指定されたデータをディスク２０から読出し、統括制御部１０１へ出力する。
【０１０３】
次に、図７Ａ及び７Ｂを参照して、本実施例に係るストレージ装置１によるリードモディファイライト処理及び隣接チャンク領域を無効にした上でのデータ書き込みの動作の概要について説明する。図７Ａは、リードモディファイライト処理を実行する場合の動作を説明するための図である。図７Ｂは、隣接チャンク領域を無効にした上でのデータ書き込みの動作を説明するための図である。
【０１０４】
図７Ａは、１次キャッシュ１１１上のデータ３０１が更新された場合である。この時、１次キャッシュ読書制御部１０６は、データ３０１を１次キャッシュ１１１から読み出し、リードモディファイライト用バッファ１１３に書き込む（ステップＳ１１）。この書き込まれたデータがデータ３０２である。
【０１０５】
次に、２次キャッシュ読書制御部１０７は、データ３０３を２次キャッシュ１１２から読み出し、リードモディファイライト用バッファ１１３に書き込む。この書き込まれたデータがデータ３０４である。そして、２次キャッシュ読書制御部１０７は、データ３０２とデータ３０４とをマージする（ステップＳ１２）。
【０１０６】
次に、２次キャッシュ読書制御部１０７は、リードモディファイライト用バッファ１１３からマージされたデータ３０２及び３０４を読み出し、２次キャッシュ１１２へ書き込む。これにより、２次キャッシュ１１２には、データ３０３を保持したままで、データ３０１に対応するデータ３０５が書き込まれる（ステップＳ１３）。
【０１０７】
図７Ｂは、１次キャッシュ１１１上のデータ３０６が更新された場合である。この時、２次キャッシュ読書制御部１０７は、隣接チャンク領域３０８を無効にする。そして、２次キャッシュ読書制御部１０７は、１次キャッシュ１１１から読み出されたデータ３０６を取得し、２次キャッシュ１１２へ書き込む。これにより、２次キャッシュ１１２では、隣接チャンク領域３０８が無効にされ、且つ、データ３０６に対応するデータ３０７が書き込まれる（ステップＳ１４）。
【０１０８】
次に、図８を参照して、ライトアクセス延長において書込データがページアライメントの場合のデータの書き込みについて説明する。図８は、ページアライメントの場合のデータの書き込みについて説明するための図である。状態４１は、２次キャッシュ１１２にデータを書き込む前状態を表し、状態４２は、２次キャッシュ１１２にデータを書き込んだ後の状態を表す。
【０１０９】
論理ブロック４０１は、１次キャッシュ１１１における論理ブロックを表している。また、ページ４０２は、２次キャッシュ１１２における書き込み単位であるページを表している。そして、論理ブロック４０３は、２次キャッシュ１１２における論理ブロックを表している。２次キャッシュ１１２は、全体が論理ブロック単位に分かれているが、説明の都合上論理ブロック４０３は、２次キャッシュ１１２の一部にのみ表されている。ここでは、１つのページ４０２に、論理ブロック４０３が３つ含まれているものとして説明する。さらに、対応領域４０４は、１次キャッシュ１１１のチャンクに対応させて２次キャッシュ１１２を分割した場合の領域を表す。
【０１１０】
この場合、１次キャッシュ１１１に更新された領域４１１が存在する。領域４１１は、Ｘ，Ｙ，Ｚという３つのデータを有する。そして、領域４１１の対応領域である２次キャッシュ１１２のページ４１２には、Ａ，Ｂ，Ｃという３つのデータが格納されている。
【０１１１】
この場合、書込サイズはページアライメントであるので、２次キャッシュ読書制御部１０７は、領域４１１に格納されたデータを対応領域であるページ４１２にそのまま書き込み更新する。これにより、ページ４１２は、１次キャッシュ１１１の領域４１１と同じデータＸ，Ｙ，Ｚを有するようになる。これで１次キャッシュ１１１と２次キャッシュ１１２との整合性が取れる。
【０１１２】
次に、図９を参照して、アクセス延長においてリードモディファイライト処理を実行する場合のデータの書き込みについて説明する。図９は、リードモディファイライト処理を実行する場合のデータの書き込みについて説明するための図である。状態４３は、２次キャッシュ１１２にデータを書き込む前状態を表す。状態４４は、リードモディファイライト用バッファ１１３にデータを格納した場合の状態を表す。状態４５は、リードモディファイライト処理実行後の２次キャッシュ１１２の状態を表す。
【０１１３】
この場合、状態４３に示すように、１次キャッシュ１１１に更新された領域４３１が存在する。領域４３１は、Ｘ，Ｙという２つのデータを有する。そして、領域４３１に対応する領域を含む２次キャッシュ１１２のページ４３２には、Ａ，Ｂ，Ｃという３つのデータが格納されている。
【０１１４】
この場合、書込サイズは２つの論理ブロックサイズであり、非ページアライメントである。また、書込対象となる２次キャッシュ１１２のページ４３２は、２つの対象領域に跨っている。そして、ページ４３２において対応する１次キャッシュ１１１の領域にデータの更新が無い論理ブロック、すなわちＣというデータが格納された論理ブロックを有する対応領域が隣接チャンク領域４３３となる。
【０１１５】
そして、隣接チャンク領域４３３に対応する１次キャッシュ１１１の領域にはデータの更新がある領域が存在する、すなわち境界一致でないので、この場合リードモディファイライト処理が実行される。１次キャッシュ読書制御部１０６は、領域４３１のデータ、すなわちＸ及びＹというデータをリードモディファイライト用バッファ１１３に書き込む。また、２次キャッシュ読書制御部１０７は、ページ４３２における１次キャッシュ１１１上にデータの更新がない論理ブロックのデータ、すなわちＣというデータをリードモディファイライト用バッファ１１３に書き込み、Ｘ，ＹとＣとをマージする。これにより、状態４４で表される状態となる。
【０１１６】
その後、２次キャッシュ読書制御部１０７は、リードモディファイライト用バッファ１１３に格納されたデータをページ４３２に書き込み更新する。これにより、状態４５で示す状態となる。すなわち、ページ４３２は、１次キャッシュ１１１の領域４３１と同じデータＸ，Ｙ及び元から有するデータＣを有するようになる。これで、１次キャッシュ１１１と２次キャッシュ１１２との整合性が取れるとともに、２次キャッシュ１１２のページ４３２は、１次キャッシュ１１１の領域にデータの更新が無い論理ブロックのデータを維持することができる。
【０１１７】
次に、図１０を参照して、アクセス延長において隣接チャンク領域の優先度が閾値よりも高いのでリードモディファイライト処理を行う場合について説明する。図１０は、隣接チャンク領域の優先度が閾値よりも高いのでリードモディファイライト処理を行う場合について説明するための図である。状態４６は、２次キャッシュ１１２にデータを書き込む前状態を表す。状態４７は、リードモディファイライト処理を実行した後の状態を表す。
【０１１８】
この場合、状態４６に示すように、１次キャッシュ１１１に更新された領域４６１が存在する。領域４６１は、Ｘ，Ｙという２つのデータを有する。そして、領域４６１に対応する領域を含む２次キャッシュ１１２のページ４６２には、Ａ，Ｂ，Ｃという３つのデータが格納されている。
【０１１９】
この場合、書込サイズは２つの論理ブロックサイズであり、非ページアライメントである。また、書込対象となる２次キャッシュ１１２のページ４６２は、２つの対象領域に跨っている。そして、ページ４６２において対応する１次キャッシュ１１１の領域にデータの更新が無い論理ブロック、すなわちＣというデータが格納された論理ブロックを有する対応領域が隣接チャンク領域４６３となる。
【０１２０】
そして、隣接チャンク領域４６３に対応する１次キャッシュ１１１の領域にはデータの更新が無い領域のみであり、境界一致であるので、隣接チャンク領域４６３の優先度に応じてリードモディファイライト処理の実行が決定される。この場合は、隣接チャンク領域の優先度が閾値以上であるとして、リードモディファイライト処理が実行される。
【０１２１】
１次キャッシュ読書制御部１０６及び２次キャッシュ読書制御部１０７は、図９で説明した方法と同じ方法で、リードモディファイライト処理を実行する。これにより、状態４７で表される状態となる。すなわち、ページ４６２は、１次キャッシュ１１１の領域４６１と同じデータＸ，Ｙ及び元から有するデータＣを有するようになる。これで、１次キャッシュ１１１と２次キャッシュ１１２との整合性が取れるとともに、２次キャッシュ１１２のページ４６２は、１次キャッシュ１１１の領域に更新するデータが存在しない論理ブロックのデータを維持することができる。
【０１２２】
これに対して、図１１を参照して、アクセス延長において隣接チャンク領域を無効としたうえでのデータの書き込みについて説明する。図１１は、隣接チャンク領域を無効としたうえでのデータの書き込みについて説明するための図である。状態４８は、２次キャッシュ１１２にデータを書き込む前状態を表す。状態４９は、隣接チャンク領域を無効としたうえでのデータの書き込んだ後の状態を表す。
【０１２３】
この場合、状態４８に示すように、１次キャッシュ１１１に更新された領域４８１が存在する。領域４８１は、Ｘ，Ｙという２つのデータを有する。そして、領域４８１に対応する領域を含む２次キャッシュ１１２のページ４８２には、Ａ，Ｂ，Ｃという３つのデータが格納されている。
【０１２４】
この場合、書込サイズは２つの論理ブロックサイズであり、非ページアライメントである。また、書込対象となる２次キャッシュ１１２のページ４８２は、２つの対象領域に跨っている。そして、ページ４８２において対応する１次キャッシュ１１１の領域にデータの更新が無い論理ブロック、すなわちＣというデータが格納された論理ブロックを有する対応領域が隣接チャンク領域４８３となる。
【０１２５】
そして、隣接チャンク領域４８３に対応する１次キャッシュ１１１の領域にはデータの更新が無い論理ブロックのみ、すなわち境界一致であるので、隣接チャンク領域４８３の優先度に応じてリードモディファイライト処理の実行が決定される。この場合は、隣接チャンク領域の優先度が閾値未満であるとして、隣接チャンク領域を無効としたうえでのデータの書き込みが実行される。
【０１２６】
テーブル管理部１０２は、統括制御部１０１から隣接チャンク領域４８３を無効にする指示を受けて、２次キャッシュ管理テーブル１０４において隣接チャンク領域４８３を無効にする。状態４９のグレーアウトされている領域が無効とされた領域である。すなわち、隣接チャンク４８３が無効であることを示している。そして、２次キャッシュ読書制御部１０７は、領域４８１に格納されているデータをページ４８２に書き込む。ここで、ページ４８２に含まれる論理ブロック４８４には１次キャッシュ１１１上でのデータ４８１の隣接データなどデータＣとは異なるデータが書き込まれるが、隣接チャンク領域４８３は無効であるのでこのデータが参照されることはない。これで、１次キャッシュ１１１と２次キャッシュ１１２との間で新たに書き込まれたデータの整合性が取れる。また、誤ったデータが参照されないため、１次キャッシュ１１１と２次キャッシュ１１２との間でデータの不整合が発生しない。
【０１２７】
次に、図１２を参照して、１つの対象領域に含まれるページに対する非ページアライメントのデータ書き込みの場合について説明する。図１２は、１つの対象領域に含まれるページに対する非ページアライメントのデータ書き込みについて説明するための図である。状態５０は、２次キャッシュ１１２にデータを書き込む前状態を表す。状態５１は、データ書き込みを実行した後の状態を表す。
【０１２８】
この場合、状態５０に示すように、１次キャッシュ１１１に更新された領域５０１が存在する。領域５０１は、Ｘ，Ｙという２つのデータを有する。そして、領域５０１に対応する領域を含む２次キャッシュ１１２のページ５０２には、Ａ，Ｂ，Ｃという３つのデータが格納されている。
【０１２９】
この場合、書込サイズは２つの論理ブロックサイズであり、非ページアライメントである。また、書込対象となる２次キャッシュ１１２のページ５０２は、１つの対象領域５０３に含まれるこの場合リードモディファイライト処理が実行される。
【０１３０】
１次キャッシュ読書制御部１０６及び２次キャッシュ読書制御部１０７は、図９で説明した方法と同じ方法で、リードモディファイライト処理を実行する。これにより、状態５１で表される状態となる。すなわち、ページ５０２は、１次キャッシュ１１１の領域５０１と同じデータＸ，Ｙ及び元から有するデータＣを有するようになる。これで、１次キャッシュ１１１と２次キャッシュ１１２との整合性が取れるとともに、２次キャッシュ１１２のページ５０２は、１次キャッシュ１１１の領域にデータの更新が無い論理ブロックのデータを維持することができる。
【０１３１】
さらに、図１３を参照して、隣接チャンク領域が無効にされた上でデータの書き込みが行われた場合の１次キャッシュ管理テーブル１０３及び２次キャッシュ管理テーブル１０４の遷移について説明する。図１３は、隣接チャンク領域が無効にされた上でデータの書き込みが行われた場合の各管理テーブルの遷移を表す図である。状態５２が、データ書き込み前の１次キャッシュ管理テーブル１０３及び２次キャッシュ管理テーブル１０４を表す。また、状態５３が、データ書き込み後の１次キャッシュ管理テーブル１０３及び２次キャッシュ管理テーブル１０４を表す。
【０１３２】
図１３の１次キャッシュ管理テーブル１０３におけるＬＢＡは、論理ブロックの識別番号である。また、２次キャッシュ管理テーブル１０４におけるチャンクＡ及びＢは、対応領域を表す対応チャンクの識別情報である。
【０１３３】
ここでは、ＬＢＡ［６］に対応する領域を含むページが、対応チャンクの識別情報としてチャンクＡ及びチャンクＢを有する２つの対応領域に跨っている。また、ＬＢＡ［６］に対応する領域は、チャンクＡで表される対応領域に含まれる。さらに、チャンクＢで表される対応領域は隣接チャンク領域である。そして、チャンクＡで表される対応領域とチャンクＢで表される対応領域とは境界一致である。さらに、ここではチャンクＢで表される対応領域の優先度が閾値未満である場合で説明する。
【０１３４】
この場合、テーブル管理部１０２は、２次キャッシュ管理テーブル１０４上のチャンクＢで表される対応領域を無効にする。すなわち、テーブル管理部１０２は、チャンクＢに対応する有効フラグを「０」に設定する。
【０１３５】
さらに、ＬＢＡ［６］に対応する領域にデータが新たに書き込まれるので、テーブル管理部１０２は、２次キャッシュ管理テーブル１０４上のチャンクＡで表される対応領域の書き込みのカウンタを１つインクリメントする。これにより、２次キャッシュ管理テーブル１０４は、状態５３で表される状態となる。ただし、ここではライトカウンタがインクリメントされた状態に２次キャッシュ管理テーブル１０４を変更したが、所定時間が経過するまでにチャンクＡにさらに書き込み又は読み出しの処理が行われた場合には、読み出しや書き込みの回数は変化する。
【０１３６】
次に、図１４を参照して、本実施例に係るストレージ装置１によるライトアクセス延長時のデータ書き込み処理の流れについて説明する。図１４は、実施例１に係るストレージ装置によるライトアクセス延長時のデータ書き込み処理のフローチャートである。
【０１３７】
ホスト２から送られてきた書込命令に１次キャッシュ１１１及び２次キャッシュ１１２がヒットして、ライトアクセス延長の処理により２次キャッシュ１１２を上書きする場合、統括制御部１０１は、条件判定部１０８にリードモディファイライトを実施するか否かの判定要求を出力する。条件判定部１０８は、リードモディファイライトを実施するか否かの判定要求を受けて、書込サイズがページサイズの整数倍であり、且つＮＡＮＤ型フラッシュメモリ３０における書き込みの開始位置がページサイズの整数倍か否かを判定する（ステップＳ１０１）。書込サイズがページサイズの整数倍であり、且つＮＡＮＤ型フラッシュメモリ３０における書き込みの開始位置がページサイズの整数倍の場合（ステップＳ１０１：肯定）、条件判定部１０８は、そのまま書き込むことを決定する。そして、２次キャッシュ読書制御部１０７は、１次キャッシュ１１１の更新データを、対応する２次キャッシュ１１２の領域にそのまま書き込む（ステップＳ１１０）。
【０１３８】
これに対して、書込サイズがページサイズの整数倍でない場合又ＮＡＮＤ型フラッシュメモリ３０における書き込みの開始位置がページサイズの整数倍でない場合（ステップＳ１０１：否定）、条件判定部１０８は、データの更新が無い論理ブロックに対応する領域を含み、対象領域を跨る書込先ページがあるか否かを判定する（ステップＳ１０２）。いずれの書込先ページにもデータの更新が無い論理ブロックに対応する領域が無い又は対象領域を跨る書込先ページが無い場合（ステップＳ１０２：否定）、条件判定部１０８は、ステップＳ１０９へ進む。
【０１３９】
これに対して、データの更新が無い論理ブロックに対応する領域を有し、且つ、対象領域を跨る書込先ページがある場合（ステップＳ１０２：肯定）、条件判定部１０８は、境界一致か否かを判定する（ステップＳ１０３）。境界一致とは、隣接チャンク領域がデータの更新が無い論理ブロックに対応する領域のみを含み、隣接チャンク領域の隣の対象領域は、データの更新がある論理ブロックに対応する領域のみとなる状態を指す。境界一致でない場合（ステップＳ１０３：否定）、条件判定部１０８は、ステップＳ１０９へ進む。
【０１４０】
これに対して、境界一致の場合（ステップＳ１０３：肯定）、条件判定部１０８は、隣接チャンク領域の優先度の算出を優先度算出部１０５に指示する。優先度算出部１０５は、隣接チャンク領域がＤｉｒｔｙデータを含むか否かを判定する（ステップＳ１０４）。隣接チャンク領域がＤｉｒｔｙデータを含む場合（ステップＳ１０４：肯定）、優先度算出部１０５は、隣接チャンク領域の優先度を無限大にする（ステップＳ１０５）。そして、優先度算出部１０５は、隣接チャンク領域の優先度を条件判定部１０８に通知する。
【０１４１】
これに対して、隣接チャンク領域がＤｉｒｔｙデータを含まない場合（ステップＳ１０４：否定）、優先度算出部１０５は、隣接チャンク領域の読出回数及び書込回数を２次キャッシュ管理テーブル１０４から取得する。そして、優先度算出部１０５は、隣接チャンク領域の読出回数及び書込回数から隣接チャンクの優先度を算出する（ステップＳ１０６）。そして、優先度算出部１０５は、隣接チャンク領域の優先度を条件判定部１０８に通知する。
【０１４２】
条件判定部１０８は、隣接チャンク領域の優先度を優先度算出部１０５から取得する。そして、条件判定部１０８は、隣接チャンク領域の優先度が閾値以上か否かを判定する（ステップＳ１０７）。隣接チャンク領域の優先度が閾値未満の場合（ステップＳ１０７：否定）、条件判定部１０８は、隣接チャンク領域を無効にしたうえで、更新データを２次キャッシュ１１２に書き込むことを決定する。テーブル管理部１０２は、隣接チャンク領域の無効の指示を受けて、２次キャッシュ管理テーブル１０４において隣接チャンク領域を無効にする。そして、２次キャッシュ読書制御部１０７は、１次キャッシュ１１１の更新データを、対応する２次キャッシュ１１２の領域に書き込む（ステップＳ１０８）。
【０１４３】
これに対して、隣接チャンク領域の優先度が閾値以上の場合（ステップＳ１０７：肯定）、条件判定部１０８は、リードモディファイライトの実行を決定する。そして、１次キャッシュ読書制御部１０６及び２次キャッシュ読書制御部１０７は、リードモディファイライト用バッファ１１３を用いてリードモディファイライトを実施する（ステップＳ１０９）。
【０１４４】
以上に説明したように、本実施例に係るストレージ装置は、非ページアライメントでデータを更新する際に、更新データの状態によって、リードモディファイライト処理を行うか否かを決定する。このように、選択的にリードモディファイライトを行うことで、ＮＡＮＤ型フラッシュメモリなどの２次キャッシュに対するアクセス回数を減らすことができ、スループットを向上させることができる。
【０１４５】
また、リードモディファイライトを適切に行うことで、ヒット率を確保することができる。したがって、スループットを向上させつつ、ヒット率を確保して、システム性能を向上させることができる。
【実施例２】
【０１４６】
図１５は、実施例２に係るストレージ装置のブロック図である。本実施例に係るストレージ装置１は、リードモディファイライト処理の実施の判定に用いる隣接チャンク領域の優先度の閾値を２次キャッシュ１１２へのアクセス状態に応じて変更することが実施例１と異なる。以下の説明では、各部の実施例１と同じ機能については説明を省略する。
【０１４７】
本実施例に係るストレージ装置１は、実施例１の各部に加えて、コマンド数管理部１２１及び閾値算出部１２２を有する。
【０１４８】
統括制御部１０１は、２次キャッシュ読書制御部１０７へ出力した読出命令及び書込命令をコマンド数管理部１２１にも出力する。また、統括制御部１０１は、読出命令及び書込命令で指定された処理を２次キャッシュ読出制御部１０７が終了すると、終了した読出命令及び書込命令の完了をコマンド数管理部１２１へ通知する。
【０１４９】
また、統括制御部１０１は、条件判定部１０８にリードモディファイライトの実施の判定要求を出力した場合、コマンド数管理部１２１にコマンド数の送信の指示を、隣接チャンク領域の情報とともにコマンド数管理部１２１へ出力する。
【０１５０】
コマンド数管理部１２１は、２次キャッシュ読書制御部１０７へ発行中の読出命令及び書出命令をカウントするためのカウンタを、読出命令及び書込命令毎に有する。以下、それぞれのカウンタを、「読出用カウンタ」及び「書込用カウンタ」という。
【０１５１】
コマンド数管理部１２１は、２次キャッシュ読書制御部１０７へ出力された読出命令及び書込命令の入力を統括制御部１０１から受ける。読出命令を受信した場合、コマンド数管理部１２１は、読出用カウンタを１つインクリメントする。また、書込命令を受信した場合、コマンド数管理部１２１は、書込用カウンタを１つインクリメントする。
【０１５２】
また、コマンド数管理部１２１は、２次キャッシュ読書制御部１０７へ出力された読出命令の完了の通知及び書込命令の完了の通知の入力を統括制御部１０１から受ける。読出命令の完了の通知を受信した場合、コマンド数管理部１２１は、読出用カウンタを１つデクリメントする。また、書込命令の完了の通知を受信した場合、コマンド数管理部１２１は、書込用カウンタを１つデクリメントする。
【０１５３】
このように、コマンド数管理部１２１は、発行された読出命令及び書込命令の数をカウントし、完了した読出命令及び書込命令の数をカウント数から減らす。これにより、コマンド数管理部１２１は、その時点で２次キャッシュ読書制御部１０７へ発行中の読出命令及び書込命令の数、すなわち２次キャッシュ１１２に対するアクセス数が把握できる。
【０１５４】
また、コマンド数管理部１２１は、コマンド数の送信指示の入力を統括制御部１０１から受ける。そして、コマンド数管理部１２１は、読出用カウンタ及び書込用カウンタの数を閾値算出部１２２へ出力する。以下では、コマンド数管理部１２１が出力した読出用カウンタの数を読出命令数という。また、コマンド数管理部１２１が出力した書込用カウンタの数を書込命令数という。このコマンド数管理部１２１が、「命令数管理部」の一例にあたる。
【０１５５】
閾値算出部１２２は、ＮＡＮＤ型フラッシュメモリ３０に対する読出命令及び書込命令それぞれの負荷に基づく係数である、読出係数及び書込係数の情報を有する。ここでは、本実施例では、読出係数及び書込係数の一例として、ＮＡＮＤ型フラッシュメモリ３０の読み出しの応答性能と書き込みの応答性能の比の値を用いる。さらに、閾値算出部１２２は、ＮＡＮＤ型フラッシュメモリ３０が対応可能な最大コマンド数の情報を有する。また、閾値算出部１２２は、閾値算出の基準となる閾値の定数の情報を有する。ここで、本実施例では、閾値の定数として実施例１で算出される閾値を用いる場合で説明する。
【０１５６】
閾値算出部１２２は、条件判定部１０８がリードモディファイライト処理を実行するか否かの判定を行う際に、読出命令数及び書込命令数の入力をコマンド数管理部１２１から受ける。そして、閾値算出部１２２は、読出命令数と読出係数とを乗算した値と書込命令数と書込係数とを乗算した値とを加算する。次に、閾値算出部１２２は、書込係数と最大コマンド数とを乗算した値で加算結果を除算する。そして、閾値算出部１２２は、除算結果と閾値の定数とを乗算して閾値を算出する。その後、閾値算出部１２２は、算出した閾値を条件判定部１０８へ出力する。
【０１５７】
ここで、閾値の定数をＣｔｈとし、読出係数をａとし、書込係数をｂとし、最大コマンド数をｃｍｄｍａｘとし、時刻ｔにおける読出命令数をｒ（ｔ）とし、時刻ｔにおける書込命令数をｗ（ｔ）とする。そして、算出する時刻ｔの閾値をＴＨ（ｔ）とする。この場合、閾値算出部１２２は、ＴＨ（ｔ）＝｛ａ×ｒ（ｔ）＋ｂ×ｗ（ｔ）｝／（ｂ×ｃｍｄｍａｘ）という式により閾値を算出することができる。
【０１５８】
閾値算出部１２２により算出される閾値は発行中の命令が多いと大きくなり、リードモディファイライト処理が実行され難くなる。反対に、閾値算出部１２２により算出される閾値は発行中の命令が少ないと小さくなり、リードモディファイライト処理が実行され易くなる。また、読出係数及び書込係数の値により、発行中の命令の数が同じでも、読出命令の比率が多い場合と、書込命令の比率が多い場合とで閾値が異なる。具体的には、書込処理の方が読出処理よりも応答性能が低いことから、閾値算出部１２２は、書込命令の比率が多い場合には閾値が大きくなり、読出命令の比率が多い場合には閾値が小さくなるように閾値を算出する。すなわち、閾値算出部１２２は、応答性能の低い書込命令を多く発行している場合、ＮＡＮＤ型フラッシュメモリ３０がビジー状態であると判定して、閾値を大きくし、リードモディファイライト処理を抑止する。
【０１５９】
また、閾値算出部１２２により算出される閾値は、ＮＡＮＤ型フラッシュメモリ３０に最大コマンド数の書込命令が発行中の場合に最大となる、すなわち閾値の定数と一致する。また、ＮＡＮＤ型フラッシュメモリ３０に命令が１つも発行されていない場合は、閾値算出部１２２により算出される閾値は０となる。
【０１６０】
このように、閾値算出部１２２は、閾値にＮＡＮＤ型フラッシュメモリ３０への発行中の命令数を反映させる。これにより、ストレージ装置１は、ＮＡＮＤ型フラッシュメモリ３０にアクセスが集中しているときにはリードモディファイライト処理を控えて、ＮＡＮＤ型フラッシュメモリ３０のスループットを確保する。また、ストレージ装置１は、ＮＡＮＤ型フラッシュメモリ３０が空いているときにはリードモディファイライト処理の実行を増やすことで、２次キャッシュ１１２上のデータを保持しヒット率を確保する。このように、閾値算出部１２２による動的な閾値の変更により、スループットとヒット率とのバランスを取った制御を行うことが可能となる。
【０１６１】
条件判定部１０８は、リードモディファイライト処理を実行するか否かの判定要求の入力を統括制御部１０１から受ける。さらに、条件判定部１０８は、閾値の入力を閾値算出部１２２から受ける。そして、条件判定部１０８は、閾値算出部１２２から取得した閾値を用いて、リードモディファイライトを実行するか否かの判定を行う。
【０１６２】
次に、図１６を参照して、本実施例に係るストレージ装置１によるリードモディファイライト処理を実行するか否かの判定処理の流れについて説明する。図１６は、実施例２に係るストレージ装置によりライトアクセス延長時のデータ書き込み処理のフローチャートである。
【０１６３】
コマンド数管理部１２１は、自己が有するカウンタを用いて、２次キャッシュ読書制御部１０７に対して発行中の読出命令の数及び書込命令の数である読出命令数及び書込命令数をカウントする（ステップＳ２０１）。
【０１６４】
コマンド数管理部１２１は、統括制御部１０１からの通知により、リードモディファイライト処理を実行するか否かの判定を開始するか否かを判定する（ステップＳ２０２）。判定を開始しない場合（ステップＳ２０２：否定）、コマンド数管理部１２１は、ステップＳ２０１に戻る。
【０１６５】
判定を開始する場合（ステップＳ２０２：肯定）、コマンド数管理部１２１は、読出命令数及び書込命令数を閾値算出部１２２へ出力する（ステップＳ２０３）。
【０１６６】
閾値算出部１２２は、読出命令数及び書込命令数を閾値算出部１２２から取得する。そして、閾値算出部１２２は、閾値の定数、読出係数、書込係数、最大コマンド数、読出命令数及び書込命令数を用いて閾値を算出する（ステップＳ２０４）。そして、閾値算出部１２２は、算出した閾値を条件判定部１０８へ出力する。
【０１６７】
条件判定部１０８は、判定に用いる閾値を閾値算出部１２２から取得する（ステップＳ２０５）。
【０１６８】
その後、条件判定部１０８は、取得した閾値を用いて、リードモディファイライト処理を実行するか否かを判定する。そして、２次キャッシュ読書制御部１０７は、条件判定部１０８による判定結果にしたがって２次キャッシュ１１２へのデータの書き込みを行う（ステップＳ２０６）。ここで、ステップＳ２０６で実行される処理は、例えば、図１４で示される処理である。
【０１６９】
以上に説明したように、本実施例に係るストレージ装置は、２次キャッシュへのアクセス状態に応じてリードモディファイライトを実行する頻度を調整する。これにより、２次キャッシュのスループットの維持と２次キャッシュ上のデータの保持とのバランスをより適切に取ることができる。
【０１７０】
ここで、以上の各実施例における説明では、２次キャッシュの管理単位として１次キャッシュのチャンクサイズを用いたが、管理単位はこれに限らない。例えば、管理単位は、論理ブロック単位でもよいし、２次キャッシュのチャンク単位でもよい。管理単位が細かくなるほど、管理単位領域を無効にしてよいか否かの判定が適切に行えるようになる。
【０１７１】
なお、上記した各実施例を実現するためのプログラムは、必ずしも最初からディスク２０に記憶させることを要しない。例えば、ホスト２に挿入されるＦＤ（フレキシブルディスク）、ＣＤ−ＲＯＭ（Compact  Disk  Read  Only  Memory）、ＤＶＤ（Digital  Versatile  Disk）、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」にプログラムを記憶させておく。そして、ホスト２がこれらからプログラムを読み出してストレージ装置１に送信し実行させるようにしてもよい。
【０１７２】
さらには、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してホスト２に接続される「他のコンピュータ（またはサーバ）」などにプログラムを記憶させておく。そして、ホスト２がこれらからプログラムを読み出してストレージ装置１に送信し実行させるようにしてもよい。
【符号の説明】
【０１７３】
１  ストレージ装置
２  ホスト
１０  コントローラ
１１  ＣＰＵ
１２  ＤＲＡＭ
１３  バススイッチ
１４  アダプタ
１５  チャネルアダプタ
２０  ディスク
３０  ＮＡＮＤ型フラッシュメモリ
１０１  統括制御部
１０２  テーブル管理部
１０３  １次キャッシュ管理テーブル
１０４  ２次キャッシュ管理テーブル
１０５  優先度算出部
１０６  １次キャッシュ読書制御部
１０７  ２次キャッシュ読書制御部
１０８  条件判定部
１０９  ディスク読書制御部
１１１  １次キャッシュ
１１２  ２次キャッシュ
１１３  リードモディファイライト用バッファ
１２１  コマンド数管理部
１２２  閾値算出部
【図１】
2017010396.tif 000003
【図２】
2017010396.tif 000004
【図３】
2017010396.tif 000005
【図４】
2017010396.tif 000006
【図５】
2017010396.tif 000007
【図６Ａ】
2017010396.tif 000008
【図６Ｂ】
2017010396.tif 000009
【図７Ａ】
2017010396.tif 000010
【図７Ｂ】
2017010396.tif 000011
【図８】
2017010396.tif 000012
【図９】
2017010396.tif 000013
【図１０】
2017010396.tif 000014
【図１１】
2017010396.tif 000015
【図１２】
2017010396.tif 000016
【図１３】
2017010396.tif 000017
【図１４】
2017010396.tif 000018
【図１５】
2017010396.tif 000019
【図１６】
2017010396.tif 000020