(57)【特許請求の範囲】
【請求項１】
記憶媒体に記憶されるデータを一時的に保存し、前記記憶媒体よりもレイテンシの小さいキャッシュと、
前記記憶媒体、前記キャッシュそれぞれのアクセス性能特性を記憶する性能情報記憶部と、
前記アクセス性能特性に基づいて、前記キャッシュが置換を行う際のデータの解放優先順位を決定する解放優先順位決定部と、
を具備し、
前記解放優先順位決定部は、前記キャッシュが記憶するデータのデータ長が長いほど、前記キャッシュが置換を行う際の前記データの解放優先順位を高くする、記憶装置。
【請求項２】
前記解放優先順位決定部は、前記キャッシュが記憶するデータについて、前記データへのアクセスが最後に行われてからの経過時間が長いほど、前記キャッシュが置換を行う際の解放優先順位を高くする請求項１に記載の記憶装置。
【請求項３】
前記解放優先順位決定部は、前記キャッシュが記憶するデータについて、前記データへのアクセス頻度が低いほど、前記キャッシュが置換を行う際の解放優先順位を高くする請求項１または請求項２に記載の記憶装置。
【請求項４】
前記キャッシュよりも上位のキャッシュである上位キャッシュと、
前記上位キャッシュから解放されるデータを前記キャッシュに格納する処理を、当該データへのアクセス頻度の高い順に行うアクセス処理部と、
をさらに具備する
請求項３に記載の記憶装置。
【請求項５】
前記記憶媒体はハードディスクである請求項１から４のいずれか一項に記載の記憶装置。
【請求項６】
前記キャッシュは、不揮発性の半導体で構成される記憶媒体にて構成される請求項１から５のいずれか一項に記載の記憶装置。
【請求項７】
記憶媒体に記憶されるデータを一時的に保存し、前記記憶媒体よりもレイテンシの小さいキャッシュを具備する記憶装置の、前記キャッシュが置換を行う際の解放優先順位決定方法であって、
前記記憶媒体、前記キャッシュそれぞれのアクセス性能特性に基づいて、前記キャッシュが置換を行う際のデータの解放優先順位を決定する解放優先順位決定ステップを具備し、
前記解放優先順位決定ステップでは、前記キャッシュが記憶するデータのデータ長が長いほど、前記キャッシュが置換を行う際の前記データの解放優先順位を高くする、
解放優先順位決定方法。
【請求項８】
記憶媒体に記憶されるデータを一時的に保存し、前記記憶媒体よりもレイテンシの小さいキャッシュを具備する記憶装置の、前記キャッシュが置換を行う際の解放優先順位を決定するコンピュータに、
前記記憶媒体、前記キャッシュそれぞれのアクセス性能特性に基づいて、前記キャッシュが置換を行う際のデータの解放優先順位を決定する解放優先順位決定ステップを実行させ、
前記解放優先順位決定ステップでは、前記キャッシュが記憶するデータのデータ長が長いほど、前記キャッシュが置換を行う際の前記データの解放優先順位を高くすることを実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キャッシュを有する記憶装置、キャッシュにおいて置換を行う際のデータ解放優先順位決定方法およびプログラムに関する。
【背景技術】
【０００２】
情報通信技術の発展に伴い、情報処理システムが扱うデータ量が増大し、また、即時処理の要求が高まっている。このため、記憶装置についても、大容量のデータを並列かつ短時間で処理できるよう性能の向上が図られている。
例えば、大容量の記憶媒体として広く用いられているハードディスク（Hard Disk Drive；ＨＤＤ）よりも高速に読み書きできる、フラッシュメモリで構成されたＳＳＤ（Solid State Drive、以下、フラッシュメモリで構成されたＳＳＤを、単に「ＳＳＤ」と称する）が普及し始めている。ＳＳＤは、フラッシュメモリを用いた記憶媒体である。ＳＳＤは、磁気ヘッドやプラッタ等の物理的な可動部分を有しないため、磁気ヘッドが移動する際のシーク時間やプラッタの回転待ち時間を要しない。このため、ＳＳＤはハードディスクと比べてレイテンシが非常に小さく、スループットも高い。
したがって、記憶装置内の記憶媒体を、ハードディスクからＳＳＤに置き換えることにより、記憶装置のレイテンシを大幅に短縮できる。また、ＳＳＤはハードディスクよりも消費電力が小さいため、記憶装置の省電力化も達成できる。【０００３】
しかし、ＳＳＤはハードディスクと比べて記憶容量あたりの価格が高い。そのため、記憶装置内の全ての記憶媒体をハードディスクからＳＳＤに置き換えると、コストが大幅に増加してしまう。
そこで、ハードディスクに対する大容量のキャッシュメモリとしてＳＳＤを用いることが考えられる。ＳＳＤは同容量のハードディスクよりも高価だが、一般的にキャッシュメモリとして用いられるＤＲＡＭ（Dynamic Random Access Memory、ダイナミック・ランダム・アクセス・メモリ）よりも安価である。ＳＳＤはＤＲＡＭとは異なり不揮発性の記憶媒体であるため、記憶装置の電源が切断され、バッテリーの電源が存在しない場合でもデータが失われない利点を有する。
一方、ＳＳＤは、ハードディスクよりも高速であるが、ＤＲＡＭよりも低速である。そこで、単にＳＳＤをキャッシュとして用いた場合よりもさらに高速性を得るためには、ハードディスクに対して、ＤＲＡＭを上位のキャッシュ（例えば一次キャッシュ）、ＳＳＤを下位のキャッシュ（ＤＲＡＭより低次の、ハードディスクにより近いキャッシュ、例えば二次キャッシュ）として組み合わせて用いることが考えられる。これにより、大容量かつ高速のキャッシュを比較的安価に実現できる。【０００４】
このような、キャッシュを備えたハードディスクなど、キャッシュを有する記憶装置において、キャッシュの空き領域が不足しデータの置換を行う際に、解放するデータを選択するための、幾つかの方法（ポリシー）が知られている（データの置換とは、既に記憶しているデータを解放して新たなデータを記憶させることである）。
例えば、特許文献１に記載のＬＲＵ（Least Recently Used、最長時間未使用）では、未使用時間の長いデータ、すなわち、最後にアクセスされた時刻の古いデータを優先的に解放する。ＬＦＵ（Least Frequently Used）では、使用頻度（アクセス頻度）の低いデータを優先的に解放する。【０００５】
これらの方法を用いれば、特に、データ毎の使用頻度がほぼ固定されている場合にヒット率の向上を期待できる。すなわち、未使用時間の長いデータは、使用頻度が低く、将来使用されるまでの時間も長いことが考えられる。そこで、ＬＲＵを用いて未使用時間の長いデータを優先的に解放することで、将来使用されるまでの時間が短いデータがキャッシュに残り、ヒット率が向上することが期待できる。また、使用頻度の低いデータは、将来においても使用頻度が低い、すなわち、一定時間以内に使用される確率が低いことが考えられる。そこで、ＬＦＵを用いて使用頻度の低いデータを優先的に解放することで、一定時間以内に使用される確率が高いデータが１次記憶媒体に残り、ヒット率が向上することが期待できる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】日本国特開２００８−２１３１４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、ＬＲＵやＬＦＵ等の方法では、記憶媒体のアクセス性能の特性に応じて適切な置換を行うことはできない。例えば、ハードディスクは、不連続のブロックに対するアクセスを行う毎にシーク時間および回転待ち時間による遅延が生じる（不連続のブロックに対するアクセスとは、記憶媒体上で離れたアドレスに位置するブロックに対するアクセスを意味する。ハードディスクの場合は、一般的に、プラッタ上で物理的に離れた位置にあるブロックに対するアクセスとなる。）。外部からデータ読出要求があった際に、この遅延によりアクセスに要する時間が長くなってしまうおそれがある。しかしながら、ＬＲＵやＬＦＵ等の方法では、この遅延に対する配慮はなされていない。【０００８】
本発明は、このような事情を考慮してなされた。本発明の目的の一例は、記憶媒体のアクセス性能特性に応じてキャッシュに格納すべきデータを選択して格納し、キャッシュにおけるヒット率向上を図ることのできる記憶装置、解放優先順位決定方法およびプログラムを提供することにある。
【課題を解決するための手段】
【０００９】
この発明は上述した課題を解決するためになされた。本発明の一態様による記憶装置は、記憶媒体に記憶されるデータを一時的に保存し、前記記憶媒体よりもレイテンシの小さいキャッシュと、前記記憶媒体、前記キャッシュそれぞれのアクセス性能特性を記憶する性能情報記憶部と、前記アクセス性能特性に基づいて、前記キャッシュが置換を行う際のデータの解放優先順位を決定する解放優先順位決定部と、を具備し、前記解放優先順位決定部は、前記キャッシュが記憶するデータのデータ長が長いほど、前記キャッシュが置換を行う際の前記データの解放優先順位を高くする。
【００１０】
本発明の一態様による解放優先順位決定方法は、記憶媒体に記憶されるデータを一時的に保存し、前記記憶媒体よりもレイテンシの小さいキャッシュを具備する記憶装置の、前記キャッシュが置換を行う際の解放優先順位決定方法であって、前記記憶媒体、前記キャッシュそれぞれのアクセス性能特性に基づいて、前記キャッシュが置換を行う際のデータの解放優先順位を決定する解放優先順位決定ステップを具備し、前記解放優先順位決定ステップでは、前記キャッシュが記憶するデータのデータ長が長いほど、前記キャッシュが置換を行う際の前記データの解放優先順位を高くする。
【００１１】
本発明の一態様によるプログラムは、記憶媒体に記憶されるデータを一時的に保存し、前記記憶媒体よりもレイテンシの小さいキャッシュを具備する記憶装置の、前記キャッシュが置換を行う際の解放優先順位を決定するコンピュータに、前記記憶媒体、前記キャッシュそれぞれのアクセス性能特性に基づいて、前記キャッシュが置換を行う際のデータの解放優先順位を決定する解放優先順位決定ステップを実行させ、前記解放優先順位決定ステップでは、前記キャッシュが記憶するデータのデータ長が長いほど、前記キャッシュが置換を行う際の前記データの解放優先順位を高くすることを実行させる。
【発明の効果】
【００１２】
本発明によれば、記憶媒体のアクセス性能特性に応じてキャッシュに格納すべきデータを選択して格納し、キャッシュにおけるヒット率向上を図ることができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の一実施形態における記憶装置を含むコンピュータネットワークシステムの概略構成を示す構成図である。
【図２】本発明の一実施形態における記憶装置の概略構成を示す構成図である。
【図３】本発明の一実施形態において、性能情報記憶部の記憶する性能情報テーブルの例を示す図である。
【図４Ａ】本発明の一実施形態において、データ情報記憶部の記憶するＳＳＤキャッシュ管理テーブルの例を示す図である。
【図４Ｂ】本発明の一実施形態において、データ情報記憶部の記憶するＳＳＤキャッシュ管理テーブルの例を示す図である。
【図５】本発明の一実施形態において、データ情報記憶部の記憶するＤＲＡＭキャッシュ管理テーブルの例を示す図である。
【図６】本発明の一実施形態において、データ情報記憶部の記憶するハードディスク管理テーブルの例を示す図である。
【図７Ａ】本発明の一実施形態において、ホストから送信される読出要求の例を示す図である。
【図７Ｂ】本発明の一実施形態において、ホストから送信される書込要求の例を示す図である。
【図８】本発明の一実施形態において、ホストからの読出要求を受信した際の、記憶装置の処理手順を示すフローチャートである。
【図９】本発明の一実施形態において、ホストからの書込要求を受信した際の、記憶装置の処理手順を示すフローチャートである。
【図１０】図８のステップＳ１６２および図９のステップＳ２１２における、解放対象として選択されたデータの各々について、必要に応じてＳＳＤキャッシュ、または、ハードディスクに格納する処理手順を示すフローチャートである。
【図１１】図８のステップＳ１６２および図９のステップＳ２１２における、解放対象として選択されたデータの各々について、必要に応じてＳＳＤキャッシュ、または、ハードディスクに格納する処理手順を示すフローチャートである。
【図１２】本発明の一実施形態において、読出要求Ｔ処理前において、ＤＲＡＭキャッシュ管理テーブルが格納する情報を示す図である。
【図１３】本発明の一実施形態において、読出要求Ｔ処理前において、ＳＳＤキャッシュ管理テーブルが格納する情報を示す図である。
【図１４】本発明の一実施形態において、ホストから記憶装置に送信される一連の処理要求の例を示す図である。
【図１５】本発明の一実施形態において、読出要求Ｔ処理後において、ＤＲＡＭキャッシュ管理テーブルが格納する情報を示す図である。
【図１６】本発明の一実施形態において、読出要求Ｔ処理後において、ＳＳＤキャッシュ管理テーブルが格納する情報を示す図である。
【図１７】本発明の一実施形態において、読出要求Ｘ処理後において、ＤＲＡＭキャッシュ管理テーブルが格納する情報を示す図である。
【図１８】本発明の一実施形態において、読出要求Ｘ処理後において、ＳＳＤキャッシュ管理テーブルが格納する情報を示す図である。
【図１９】本発明の一実施形態において、読出要求Ｙ処理後において、ＤＲＡＭキャッシュ管理テーブルが格納する情報を示す図である。
【図２０】本発明の一実施形態において、読出要求Ｙ処理後において、ＳＳＤキャッシュ管理テーブルが格納する情報を示す図である。
【図２１】本発明の一実施形態において、読出要求Ｚ処理後において、ＤＲＡＭキャッシュ管理テーブルが格納する情報を示す図である。
【発明を実施するための形態】
【００１４】
以下、図面を参照して、本発明の実施の形態について説明する。
図１は、本発明の一実施形態における記憶装置を含むコンピュータネットワークシステムの概略構成を示す構成図である。図１に示すコンピュータネットワークシステムは、１台以上のホスト１０と、記憶装置２０と、ネットワーク３０とを具備する。
ホスト１０は、記憶装置２０に対して、書込要求や読出要求（以下では、書込要求と読出要求とを併せて「処理要求」と称する）を送信し、読出要求に基づいて読み出されたデータを受信する。
記憶装置２０は、ホスト１０からの書込要求に基づいてデータを記憶し、読出要求に基づいてデータを返信する。
ネットワーク３０は、ホスト１０と記憶装置２０とを接続して、ホスト１０から記憶装置２０へ送信される処理要求や、記憶装置２０からホスト１０へ送信される処理結果を伝送する。
ホスト１０と記憶装置２０との接続構成は、図１に示すネットワークを介した構成に限らない。ホスト１０と記憶装置２０とが直接接続されていてもよい。記憶装置２０がホスト１０の内部に組み込まれていてもよい。
【００１５】
図２は、記憶装置２０の概略構成を示す構成図である。図２において、記憶装置２０は、ハードディスク（記憶媒体）２１０と、ＳＳＤキャッシュ（キャッシュ）２２０と、ＤＲＡＭキャッシュ（上位キャッシュ）２３０と、アクセス処理部２４０と、記憶媒体性能測定部２５０と、性能情報記憶部２６０と、解放優先順位決定部２７０と、データ情報記憶部２８０とを具備する。
ハードディスク２１０は、アクセス処理部２４０により書き込まれるデータを記憶する。上述したように、ハードディスク２１０は、データを読み出す際に、データ毎にシーク時間および回転待ち時間による遅延が生じる。ハードディスク２１０のメモリ空間はブロックに区切られており、ブロック毎にアドレスが付されている。ハードディスク２１０のアドレスは、記憶装置２０の外部から記憶装置２０にアクセスする際のアドレス、すなわち、記憶装置２０の仮想メモリ空間のアドレス（以下では、「仮想アドレス」と称する）としても用いられる。すなわち、ハードディスク２１０のアドレスと仮想アドレスとは一致する。ハードディスク２１０、及びハードディスク２１０の管理手段は、既存技術を用いる。
記憶装置２０が具備するハードディスクの台数は図１に示す１台に限らず、２台以上であってもよい。記憶装置２０が具備するＳＳＤキャッシュ２２０の台数も図１に示す１台に限らず、２台以上であってもよい。
【００１６】
ＳＳＤキャッシュ２２０とＤＲＡＭキャッシュ２３０とで、ハードディスク２１０に対する２層のキャッシュを構成する。
ＳＳＤキャッシュ２２０は、ＳＳＤ（上述のように、フラッシュメモリで構成されたＳＳＤ）にて構成されるキャッシュである。ＳＳＤキャッシュ２２０は、ハードディスク２１０に対する二次的なキャッシュとして機能する。ＳＳＤキャッシュ２２０は、ハードディスク２１０よりもスループットが高い。ＳＳＤキャッシュ２２０は、特に、磁気ヘッドやプラッタ等の物理的な可動部分を有しないため、レイテンシが非常に小さい。ＳＳＤキャッシュのメモリ空間は、ハードディスク２１０のブロックと同じ大きさのブロックに区切られており、ブロック毎にアドレスが付されている。
ＤＲＡＭキャッシュ２３０は、ＳＳＤキャッシュ２２０よりも、さらに読み書きの速度が速い。ＤＲＡＭキャッシュ２３０は、ＳＳＤキャッシュ２２０よりも上位の一次的なキャッシュとして機能する。ＤＲＡＭキャッシュ２３０のメモリ空間は、ハードディスク２１０のブロックと同じ大きさのブロックに区切られており、ブロック毎にアドレスが付されている。ＤＲＡＭキャッシュ２３０、及びＤＲＡＭキャッシュ２３０の管理手段は、既存技術を用いる。
【００１７】
本実施形態では、ＳＳＤキャッシュ２２０およびＤＲＡＭキャッシュのデータ更新方式としてライトバック方式（Write Back Algorithm）を採用する。しかしながら、本発明の実施形態の適用範囲はこれに限らず、ライトスルー方式（Write Through Algorithm）によってデータ更新が行われるキャッシュにも適用できる。
【００１８】
アクセス処理部２４０は、ホスト１０（図１）から送信される処理要求に応じて、ハードディスク２１０と、ＳＳＤキャッシュ２２０と、ＤＲＡＭキャッシュ２３０とに対してデータの読み書きを行い、データ情報記憶部２８０のデータを更新する。また、アクセス処理部２４０は、処理結果をホスト１０に返信する。
記憶媒体性能測定部２５０は、記憶装置２０がホスト１０からの処理要求に応じた処理を行う前処理として、予め、ハードディスク２１０と、ＳＳＤキャッシュ２２０との各々に対し、連続のブロックに対するアクセスを行う場合と、離散的なアクセスを行う場合との各々について、かつ、読出（Read）の場合と、書込（Write）の場合との各々について、アクセス速度（スループット）と、遅延時間（レイテンシ）とを含むアクセス性能特性を測定する。記憶媒体性能測定部２５０は、測定したデータを、性能情報記憶部２６０に書き込んでおく。性能情報記憶部２６０は、記憶媒体性能測定部２５０が測定したアクセス性能特性を記憶する。連続のブロックに対するアクセスとは、記憶媒体上で隣接するアドレスに位置するブロックに対するアクセスを意味する。ハードディスクの場合は、プラッタ上で物理的に近い位置にあるブロックに対するアクセスとなる。
ハードディスク２１０およびＳＳＤキャッシュ２２０のアクセス性能特性が既知の場合は、性能情報記憶部２６０が、これら既知のアクセス性能特性を予め記憶しておくようにしてもよい。これにより、記憶装置２０が、記憶媒体性能測定部２５０を具備する必要が無くなり、装置構成を簡略にできる。
【００１９】
解放優先順位決定部２７０は、性能情報記憶部２６０の記憶する、ハードディスク２１０およびＳＳＤキャッシュ２２０のアクセス性能特性を用いて、ＳＳＤキャッシュ２２０の記憶するデータや、ＤＲＡＭキャッシュ２３０から解放されるデータについて、解放優先指標値を算出する。解放優先順位決定部２７０は、算出した解放優先指標値に基づいて、各データの解放優先順位を決定する。この解放優先順位は、ＳＳＤキャッシュ２２０にて置換を行う際に、ＳＳＤキャッシュ２２０から解放される優先順位（ＤＲＡＭキャッシュ２３０から解放されるデータについては、ＳＳＤキャッシュ２２０に書き込まれる優先順位）を示す。
【００２０】
データ情報記憶部２８０は、ＳＳＤキャッシュ２２０が記憶する各データのアドレスやアクセス頻度等を示すＳＳＤキャッシュ管理テーブルを記憶する。また、データ情報記憶部２８０は、ＤＲＡＭキャッシュ２３０が記憶する各データのアドレスやアクセス頻度等を示すＤＲＡＭキャッシュ管理テーブルを記憶する。さらに、データ情報記憶部２８０は、ハードディスク２１０が記憶する各データのアドレスやアクセス頻度等を示すハードディスク管理テーブルを記憶する。
ＳＳＤキャッシュ２２０がＳＳＤキャッシュ管理テーブルを記憶するようにしてもよい。同様に、ＤＲＡＭキャッシュ２３０がＤＲＡＭキャッシュ管理テーブルを記憶するようにしてもよい。同様に、ハードディスク２１０がハードディスク管理テーブルを記憶するようにしてもよい。
特に、ＳＳＤキャッシュ２２０がＳＳＤキャッシュ管理テーブルを記憶し、かつ、ＤＲＡＭキャッシュ２３０がＤＲＡＭキャッシュ管理テーブルを記憶し、かつ、ハードディスク２１０がハードディスク管理テーブルを記憶する場合、記憶装置２０は、データ情報記憶部２８０を具備する必要がない。
【００２１】
次に、図３〜図５を参照して、性能情報記憶部２６０およびデータ情報記憶部２８０が記憶するデータのデータ構成について説明する。
図３は、性能情報記憶部２６０の記憶する性能情報テーブルの例を示す図である。図３に示すように、性能情報テーブルは、ハードディスク２１０及びＳＳＤキャッシュ２２０の、遅延時間およびアクセス速度を格納する。遅延時間としては、レイテンシ（アクセス初期の遅延時間）を格納する。アクセス速度としては、連続のブロックにアクセスする際の速度を格納する。本実施形態では、ハードディスク２１０及びＳＳＤキャッシュ２２０は、データを読み出す際と書き込む際との遅延時間やアクセス速度が同一であるとする。このため、性能情報テーブルは、読み出しの際と書き込みの際とに共通するデータを記憶している。読み出しの際と書き込みの際とで値が異なる場合は、性能情報記憶部２６０が、それぞれについてデータを格納するようにする。
【００２２】
図４Ａおよび図４Ｂは、データ情報記憶部２８０の記憶するＳＳＤキャッシュ管理テーブルの例を示す図である。図４Ａに示すように、ＳＳＤキャッシュ管理テーブルは、「Ｄｉｒｔｙフラグ（Ｄｉｒｔｙ  ｆｌａｇ）」欄と、「先頭アドレス（ＳＳＤ）」欄と、「先頭アドレス（仮想）」欄と、「データ長」欄と、「アクセス頻度」欄とを含む。ＳＳＤキャッシュ管理テーブルは、ＳＳＤキャッシュ２２０上の各データについて、各欄の情報を格納する。
【００２３】
「Ｄｉｒｔｙフラグ」欄には、ハードディスク２１０の記憶するデータの更新の要否を示すＤｉｒｔｙフラグが格納される。Ｄｉｒｔｙフラグの値としては、ＳＳＤキャッシュ２２０上のデータ（以下、図４Ａおよび４Ｂの説明において、「当該データ」と称する）について、ホスト１０から新たに書込要求があった場合には、データを更新する必要があることを示す「１」が格納される。一方、ハードディスク２１０に未反映の書込要求がない場合は、Ｄｉｒｔｙフラグに更新する必要が無いことを示す「０」が格納される。
「先頭アドレス（ＳＳＤ）」欄には、ＳＳＤのメモリ空間のアドレス（以下では、「ＳＳＤアドレス」と称する）における、当該データの先頭アドレス（以下では、「先頭アドレス（ＳＳＤ）」と称する）が格納される。
【００２４】
「先頭アドレス（仮想）」欄には、仮想アドレス（記憶装置２０のアドレス）における、当該データの先頭アドレス（以下では、「先頭アドレス（仮想）」と称する）が格納される。
「データ長」欄には、当該データのデータ長がブロック数の表記にて格納される。
「アクセス頻度」欄には、ホスト１０からの当該データに対するアクセス頻度（直近の一定時間内におけるアクセス回数）が格納される。
図４Ｂに示すように、ＳＳＤキャッシュ管理テーブルに、アクセス頻度に代えて、ＬＲＵ順序、すなわち、ホスト１０から当該データに対する処理要求が最後に行われてから現在までの経過時間の長い順の順序が格納されていてもよい。
【００２５】
図５は、データ情報記憶部２８０の記憶するＤＲＡＭキャッシュ管理テーブルの例を示す図である。図５に示すように、ＤＲＡＭキャッシュ管理テーブルは、「Ｄｉｒｔｙフラグ」欄と、「先頭アドレス（ＤＲＡＭ）」欄と、「先頭アドレス（仮想）」欄と、「データ長」欄と、「アクセス頻度」欄とを含む。ＤＲＡＭキャッシュ管理テーブルは、ＤＲＡＭキャッシュ２３０上の各データについて、各欄の情報を格納する。
「Ｄｉｒｔｙフラグ」欄には、図４Ａを参照して説明したのと同様、ハードディスク２１０の記憶するデータの更新の要否を示すＤｉｒｔｙフラグが格納される。
「先頭アドレス（ＳＳＤ）」欄には、ＳＳＤのメモリ空間のアドレス（以下では、「ＳＳＤアドレス」と称する）における、ＤＲＡＭキャッシュ２３０上のデータ（以下、図５の説明において、「当該データ」と称する）の先頭アドレス（以下では、「先頭アドレス（ＤＲＡＭ）」と称する）が格納される。
【００２６】
「先頭アドレス（仮想）」欄には、当該データの先頭アドレス（仮想）が格納される。
「データ長」欄には、当該データのデータ長がブロック数の表記にて格納される。
「アクセス頻度」欄には、ホスト１０からの当該データに対するアクセス頻度が格納される。
ＤＲＡＭキャッシュ２３０に適用される置換ポリシーはＬＦＵに限られない。また、ＤＲＡＭキャッシュ管理テーブルに格納される情報も、アクセス頻度情報に限らない。例えば、ＤＲＡＭキャッシュ２３０に対してＬＲＵを適用してもよく、この場合は、ＤＲＡＭキャッシュ管理テーブルは、アクセス頻度欄に代えてＬＲＵ順序情報欄を具備し、その情報を格納する。
【００２７】
図６は、データ情報記憶部２８０の記憶するハードディスク管理テーブルの例を示す図である。図６に示すように、ハードディスク管理テーブルは、「先頭アドレス（仮想）」欄と、「データ長」欄と、「アクセス頻度」欄とを含む。ハードディスク管理テーブルは、ハードディスク２１０上の各データについて、各欄の情報を格納する。
「先頭アドレス（仮想）」欄には、仮想アドレスにおける、ハードディスク上のデータ（以下、図６の説明において、「当該データ」と称する）の先頭アドレス（仮想）が格納される。上述したように、ハードディスク２１０のメモリ空間のアドレスは、仮想アドレスと一致しており、先頭アドレス（仮想）は、ハードディスク２１０における先頭アドレスをも示している。
【００２８】
「アクセス頻度」欄には、ホスト１０からの当該データに対するアクセス頻度が格納される。ＳＳＤキャッシュ２２０およびＤＲＡＭキャッシュ２３０に対してＬＦＵ以外の置換ポリシーが適用される場合は、ハードディスク管理テーブルは、そのポリシーに応じたデータを格納する。たとえば、ＳＳＤキャッシュ２２０およびＤＲＡＭキャッシュ２３０に対してＬＲＵが適用される場合、ハードディスク管理テーブルは、アクセス頻度欄に代えてＬＲＵ順序情報欄を具備し、その情報を格納する。
【００２９】
上述したように、ハードディスク２１０のアドレスと、記憶装置２０の仮想アドレスとは一致する。よって、ハードディスク管理テーブルにて、ハードディスク２１０のアドレスと、記憶装置２０の仮想アドレスとの対応付けを記憶しておく必要はない。したがって、ハードディスク２１０の記憶するデータについて、置換ポリシーに応じた情報（アクセス頻度あるいはＬＲＵ順序情報など）を記憶する必要が無い場合は、ハードディスク管理テーブルは不要である。
例えば、ＳＳＤキャッシュ管理テーブルのアクセス頻度欄のデータとして、ＳＳＤキャッシュ管理テーブルに格納された後のアクセス頻度を格納する場合、そのデータがハードディスク２１０に格納されている時点でのアクセス頻度は不要である。この場合、データ情報記憶部２８０が、ハードディスク管理テーブルを記憶しないようにでき、必要な記憶容量を削減できる。
【００３０】
ハードディスク２１０のアドレスと仮想アドレスとが一致しない場合は、置換ポリシーに応じた情報を記憶する必要の有無にかかわらず、ハードディスク２１０のアドレスと仮想アドレスとの対応関係を記憶するためにハードディスク管理テーブルが必要となる。すなわち、記憶装置２０は、ハードディスク２１０にデータを書き込む際に、ハードディスク２１０上のデータを書き込んだ位置（すなわち、ハードディスク２１０のアドレス）と、外部からの書込要求に含まれる仮想アドレスとを対応付けて、ハードディスク管理テーブルに格納しておく。そして、記憶装置２０は、仮想アドレスによりデータを指定する読出要求を外部から受けると、仮想アドレスに基づいてハードディスク管理テーブルを検索して、ハードディスク２１０のアドレスを取得し、取得したアドレスに基づいてハードディスク２１０からデータを読み出す。
ただし、本実施形態では、上述のように、ハードディスク２１０のアドレスと、記憶装置２０の仮想アドレスとが一致するので、ハードディスク２１０のアドレスと仮想アドレスとの対応関係を記憶する必要は無い。従って、置換ポリシーに応じた情報を記憶する必要が無い場合は、ハードディスク管理テーブルは不要である。
【００３１】
ＳＳＤキャッシュ２２０に適用される置換ポリシーと、ＤＲＡＭキャッシュ２３０に適用される置換ポリシーとが異なっていてもよい。この場合、ＳＳＤキャッシュ管理テーブルと、ＤＲＡＭキャッシュ管理テーブルと、ハードディスク管理テーブルとは、両ポリシーに応じたデータを格納する。たとえば、ＳＳＤキャッシュ２２０にＬＲＵが適用され、ＤＲＡＭキャッシュ２３０にＬＦＵが適用される場合は、ＳＳＤキャッシュ管理テーブルと、ＤＲＡＭキャッシュ管理テーブルと、ハードディスク管理テーブルとは、それぞれ、アクセス頻度欄と、ＬＲＵ順序情報欄とを含み、それらの情報を格納する。
【００３２】
データ情報記憶部２８０の各テーブルのアクセス頻度欄のデータは、アクセス処理部２４０によって定期的に更新される。例えば、データ情報記憶部２８０が、各データに対するアクセス履歴（ホスト１０からの処理要求履歴）を記憶している。アクセス処理部２４０は、そのアクセス履歴に基づいて、アクセス頻度欄のデータを更新する。
【００３３】
図７Ａおよび７Ｂは、ホスト１０から送信される処理要求の例を示す図である。図７Ａは読出要求の例を示す。図７Ｂは書込要求の例を示す。図７Ａおよび７Ｂに示すように、処理要求には、先頭アドレス（仮想）およびデータ長が含まれている。この先頭アドレス（仮想）およびデータ長は、アクセス処理部２４０が、処理対象のデータを特定するために用いられる。
【００３４】
次に、図８〜１１を参照して、記憶装置２０の動作について説明する。
図８は、ホスト１０（図１）からの読出要求を受信した際の、記憶装置２０の処理手順を示すフローチャートである。記憶装置２０は、ホスト１０からの読出要求を受信する毎に、図８の処理を行う。
ホスト１０からの読出要求を受信すると、アクセス処理部２４０は、まず、ＤＲＡＭキャッシュ２３０からのデータの読み出しを試みる。まず、アクセス処理部２４０は、データ情報記憶部２８０の記憶するＤＲＡＭキャッシュ管理テーブルを検索する。具体的には、アクセス処理部２４０は、読出要求から先頭アドレス（仮想）およびデータ長を読み出し、ＤＲＡＭキャッシュ管理テーブル上で、先頭アドレス（仮想）およびデータ長の一致する行を検索する（以上、ステップＳ１０１）。
【００３５】
そして、アクセス処理部２４０は、読出要求されたデータがＤＲＡＭキャッシュ２３０上に存在するか否かを判定する。具体的には、アクセス処理部２４０は、ステップＳ１０１で行った検索にて、一致する行を発見した場合は、読出要求されたデータがＤＲＡＭキャッシュ２３０上に存在すると判定する。一方、アクセス処理部２４０は、ステップＳ１０１で行った検索にて、一致する行を発見しなかった場合は、存在しないと判定する。先頭アドレスのみが一致し、データ長が一致しない行を発見した場合は、要求されているデータが記憶装置２０の記憶するデータと齟齬している。そのため、アクセス処理部２４０は、ホスト１０にエラーメッセージを送信（返信）して図８の処理を終了する（以上、ステップＳ１０２）。
【００３６】
ステップＳ１０２にて、読出要求されたデータがＤＲＡＭキャッシュ２３０上に存在すると判定した場合（ステップＳ１０２：ＹＥＳ）、アクセス処理部２４０は、読出要求されたデータをＤＲＡＭキャッシュ２３０から読み出し、読出要求に対する結果データとしてホスト１０に送信（返信）する。具体的には、アクセス処理部２４０は、ステップＳ１０１で行った検索にて一致した行に格納されている、先頭アドレス（ＤＲＡＭ）およびデータ長が示す、ＤＲＡＭキャッシュ２３０上の領域（１つのデータを格納するために用いられるブロックの集合を、１つの「領域」と称する。以下同様）からデータを読み出して、ホスト１０に送信する（ステップＳ１１１）。その後、図８の処理を終了する。
【００３７】
一方、読出要求されたデータがＤＲＡＭキャッシュ上に存在しないと判定した場合（ステップＳ１０２：ＮＯ）、アクセス処理部２４０は、次に、ＳＳＤキャッシュ２２０からのデータの読み出しを試みる。まず、アクセス処理部２４０は、データ情報記憶部２８０の記憶するＳＳＤキャッシュ管理テーブルを検索する。具体的には、ステップＳ１０１と同様、先頭アドレス（仮想）およびデータ長の一致する行を検索する（以上、ステップＳ１２１）。
そして、アクセス処理部２４０は、読出要求されたデータがＳＳＤキャッシュ２２０上に存在するか否かを判定する。具体的には、ステップＳ１０２と同様、ステップＳ１０３で行った検索にて、一致する行を発見した場合は、データが存在すると判定する。一方、ステップＳ１０３で行った検索にて、一致する行を発見しなかった場合は、存在しないと判定する。先頭アドレスのみが一致し、データ長が一致しない行を発見した場合は、ステップＳ１０２と同様、ホスト１０にエラーメッセージを送信して図８の処理を終了する（以上、ステップＳ１２２）。
【００３８】
ステップＳ１２２にて、読出要求されたデータがＳＳＤキャッシュ２２０上に存在すると判定した場合（ステップＳ１２２：ＹＥＳ）、アクセス処理部２４０は、読出要求されたデータをＳＳＤキャッシュ２２０から読み出し、読出要求に対する結果データとしてホスト１０に送信（返信）する。具体的には、ステップＳ１１１と同様、アクセス処理部２４０は、ステップＳ１２１で行って検索にて一致した行に格納されている、先頭アドレス（ＳＳＤ）およびデータ長が示す、ＳＳＤキャッシュ２２０上の領域からデータを読み出して、ホスト１０に送信する（ステップＳ１３１）。その後、処理がステップＳ１５１に進む。
【００３９】
一方、ステップＳ１２２にて、読出要求されたデータがＳＳＤキャッシュ２２０上に存在しないと判定した場合（ステップＳ１２２：ＮＯ）、アクセス処理部２４０は、読出要求されたデータをハードディスク２１０から読み出し、読出要求に対する結果データとしてホスト１０に送信（返信）する。具体的には、ハードディスク２１０上のアドレスは仮想アドレスと一致するので、アクセス処理部２４０は、ステップＳ１２１で行って検索にて一致した行に格納されている、先頭アドレス（仮想）およびデータ長が示す、ハードディスク２１０上の領域からデータを読み出して、ホスト１０に送信する（ステップＳ１４１）。
【００４０】
ステップＳ１３１またはステップＳ１４１にてホスト１０にデータを送信したアクセス処理部２４０は、そのステップにて読み出したデータ（以下、図８の説明において、「格納対象データ」と称する。）をＤＲＡＭキャッシュ２３０に格納する処理を行う。
本実施形態では、ＤＲＡＭキャッシュ２３０の置換ポリシーとして、ホスト１０から処理要求を受けたデータを必ずＤＲＡＭキャッシュ２３０に格納するポリシーを採用している。しかしながら、本発明の実施形態の適用範囲はこれに限らない。例えば、処理要求を受けたデータのアクセス頻度と、ＤＲＡＭキャッシュ２３０上の各データのアクセス頻度とを比較し、処理要求を受けたデータよりもアクセス頻度の低いデータをＤＲＡＭキャッシュ２３０上から解放することによって、処理要求を受けたデータの容量を確保可能か否かを判定するようにしてもよい。この場合、アクセス処理部２４０は、データの容量を確保可能と判定した場合のみ、以下の処理を行う。一方、アクセス処理部２４０は、データの容量を確保不可能と判定した場合は、処理要求を受けたデータ（処理要求を受けたデータに該当するＳＳＤキャッシュ２２０上またはハードディスク２１０上のデータ）のアクセス頻度を更新するのみで、ＤＲＡＭキャッシュ２３０における置換は行わずに図８の処理を終了する。
【００４１】
格納対象データをＤＲＡＭキャッシュ２３０に格納する処理において、アクセス処理部２４０は、まず、ＤＲＡＭキャッシュ２３０上の空き容量を取得する。例えば、アクセス処理部２４０は、データ情報記憶部２８０の記憶するＤＲＡＭキャッシュ管理テーブルのデータ長欄の値を合計し、得られた値をＤＲＡＭキャッシュ２３０の全体容量から減算して空き容量を算出する（以上、ステップＳ１５１）。
そして、アクセス処理部２４０は、格納対象データのデータ長と、ＤＲＡＭキャッシュ２３０の空き容量とを比較して、格納対象データを格納可能な空き容量がＤＲＡＭキャッシュ２３０上に存在するか否かを判定する（ステップＳ１５２）。
アクセス処理部２４０は、格納対象データを格納可能な空き容量がＤＲＡＭキャッシュ２３０上に存在すると判定した場合（ステップＳ１５２：ＹＥＳ）、ステップＳ１６３に進む。
【００４２】
一方、ステップＳ１５２にて、格納対象データを格納可能な空き容量がＤＲＡＭキャッシュ２３０上に存在しないと判定した場合（ステップＳ１５２：ＮＯ）、アクセス処理部２４０は、空き容量を確保するために解放するデータを選択する。具体的には、アクセス処理部２４０は、データ情報記憶部２８０の記憶するＤＲＡＭキャッシュ管理テーブルを参照して、アクセス頻度の低い順に、データ長の合計が格納対象データのデータ長以上になるまで、ＤＲＡＭキャッシュ２３０上のデータを選択する（ステップＳ１６１）。
次に、アクセス処理部２４０は、ステップＳ１６１にて選択したデータの各々について、必要に応じてＳＳＤキャッシュ２２０、または、ハードディスク２１０に格納する処理を行う。この処理の詳細については後述する。その後、アクセス処理部２４０は、ステップＳ１６１にて選択したデータを解放して、格納対象データを格納可能な空き容量を確保する。（以上、ステップＳ１６２）。
そして、アクセス処理部２４０は、格納対象データをＤＲＡＭキャッシュ２３０に書き込む（ステップＳ１６３）。その後、図８の処理を終了する。
【００４３】
図９は、ホスト１０（図１）からの書込要求を受信した際の、記憶装置２０の処理手順を示すフローチャートである。記憶装置２０は、ホスト１０からの書込要求を受信する毎に、図９の処理を行う。
図９のステップＳ２０１〜Ｓ２１３は、図８のステップＳ１５１〜Ｓ１６３と同様である。ステップＳ２０１〜Ｓ２１３においては、ホスト１０から書込要求のあったデータが、ステップＳ１５１〜Ｓ１６３の格納対象データに相当する。
書込要求のあったデータが、新規のデータである場合、すなわち、書込要求に含まれる先頭アドレスおよびデータ長の示す領域が、ハードディスク２１０上の空き領域である場合について説明する。この場合は、アクセス処理部２４０は、ハードディスク２１０上のその空き領域を、書込要求のあったデータを格納する領域として確保した後、図９の処理を行う。
ホスト１０から、解放要求（データ長が０の書込要求）を受信した場合は、アクセス処理部２４０は、ＤＲＡＭキャッシュ２３０上、ＳＳＤキャッシュ２２０上、ハードディスク２１０上の各々において、該当する領域を解放し、データ情報記憶部２８０の記憶するＳＳＤキャッシュ管理テーブルおよびＤＲＡＭキャッシュ管理テーブルを更新する。
【００４４】
図１０および図１１は、ステップＳ１６２（図８）およびステップＳ２１２（図９）における、解放対象として選択されたデータ（以下、図９および１０の説明において、「被選択データ（ＤＲＡＭ）」と称する）の各々について、必要に応じてＳＳＤキャッシュ２２０、または、ハードディスク２１０に格納する処理手順を示すフローチャートである。
図１０および１１の処理において、アクセス処理部２４０は、まず、被選択データ（ＤＲＡＭ）の各々に対して、アクセス頻度の高い順に処理を行うループＬ１を開始する。アクセス頻度の高い順に処理を行う理由は、ＳＳＤキャッシュに書き込んだ被選択データ（ＤＲＡＭ）が、他の被選択データ（ＤＲＡＭ）に対する処理を行う際に解放される（スワップアウトする）無駄を無くすためである（以上、ステップＳ３０１）。
【００４５】
アクセス処理部２４０は、ＳＳＤキャッシュ２２０上の空き容量およびＳＳＤキャッシュ２２０上の各データの解放優先順位に基づいて、被選択データ（ＤＲＡＭ）をＳＳＤキャッシュ２２０に格納するか否かを判定する。
具体的には、アクセス処理部２４０は、まず、ＳＳＤキャッシュ２２０上の空き容量を取得する。例えば、アクセス処理部２４０は、データ情報記憶部２８０の記憶するＳＳＤキャッシュ管理テーブルのデータ長欄の値を合計し、得られた値をＳＳＤキャッシュ２２０の全体容量から減算して空き容量を算出する（以上、ステップＳ３０２）。
次に、アクセス処理部２４０は、格納対象データのデータ長と、ＳＳＤキャッシュ２２０の空き容量とを比較して、格納対象データを格納可能な空き容量がＳＳＤキャッシュ２２０上に存在するか否かを判定する（ステップＳ３０３）。アクセス処理部２４０は、格納対象データを格納可能な空き容量がＳＳＤキャッシュ２２０上に存在すると判定した場合（ステップＳ３０３：ＹＥＳ）、ステップＳ３３１に進む。
【００４６】
一方、ステップＳ３０３にて、格納対象データを格納可能な空き容量がＳＳＤキャッシュ２２０上に存在しないと判定した場合（ステップＳ３０３：ＮＯ）、アクセス処理部２４０は、解放優先順位決定部２７０に対して、解放優先順位の決定を要求する。そして、解放優先順位決定部２７０は、ループＬ１にて処理対象となっている被選択データ（ＤＲＡＭ）（以下、図９および１０の説明において、「ループＬ１データ」と称する）と、ＳＳＤキャッシュ２２０上の各データについて、解放優先順位を決定し、アクセス処理部２４０に出力する。解放優先順位の決定方法については後述する。
解放優先順位決定部２７０が、ＳＳＤキャッシュ２２０上の各データについて、ループＬ１の開始前に解放優先順位を算出しておくようにしてもよい。これにより、解放優先順位を繰り返し算出する必要が無くなり、計算量を削減できる（以上、ステップＳ３１１）。
【００４７】
解放優先順位の出力を受けたアクセス処理部２４０は、ＳＳＤキャッシュ２２０上の各データおよびループＬ１データの中から、解放対象とするデータを選択する（ステップＳ３１２）。
ステップＳ３１２の処理は、具体的には以下のとおりである。
まず、アクセス処理部２４０は、ＳＳＤキャッシュ２２０上のデータのうち、ループＬ１データよりも解放優先順位の高いデータのデータ長を合計する（ステップＳ４０１）。
アクセス処理部２４０は、合計したデータ長が、ループＬ１データのデータ長以下か否かを判定する（ステップＳ４０２）。アクセス処理部２４０は、合計したデータ長が、ループＬ１データのデータ長以下と判定した場合は、ループＬ１データを解放対象とするデータとして選択する（ステップＳ４１１）。一方、アクセス処理部２４０は、合計したデータ長が、ステップＳ４０２にてループＬ１データのデータ長よりも大きいと判定した場合は、ＳＳＤキャッシュ上のデータを、解放優先順位の高い順に、データ長の合計値＋ＳＤＤキャッシュ上の空き容量が、ループＬ１データのデータ長よりも長く（大きく）なるまで選択する（ステップＳ４１２）。以上で、ステップＳ３１２の処理を終了し、ステップＳ３１３に進む。
【００４８】
次に、アクセス処理部２４０は、ステップＳ３１２にて選択したデータ（以下、図１０および１１の説明において、「被選択データ（ＳＳＤ）」と称する）の各々に対する処理を行うループＬ２を開始する（ステップＳ３１３）。このループでは、アクセス処理部２４０は、被選択データ（ＳＳＤ）のうち、ホスト１０からの書込要求によりデータが更新されているもの（すなわち、Ｄｉｒｔｙフラグがセットされている被選択データ（ＳＳＤ））のみをハードディスク２１０に書き込む。
ループＬ２の処理において、まず、アクセス処理部２４０は、データ情報記憶部２８０の記憶するＳＳＤキャッシュ管理テーブルまたはＤＲＡＭキャッシュ管理テーブルを参照して、ループＬ２にて処理対象となっている被選択データ（ＳＳＤ）（以下、図１０および１１の説明において、「ループＬ２データ」と称する）のＤｉｒｔｙフラグの値を読み出す（ステップＳ３１４）。次に、アクセス処理部２４０は、読み出したＤｉｒｔｙフラグの値に基づき、Ｄｉｒｔｙフラグがセットされているか否か（すなわち、読み出した値が「１」であるか否か）を判定する(ステップＳ３１５)。アクセス処理部２４０は、Ｄｉｒｔｙフラグがセットされていないと判定した場合（ステップＳ３１５：ＮＯ）、ステップＳ３２２に進む。
【００４９】
一方、ステップＳ３１５にて、アクセス処理部２４０は、Ｄｉｒｔｙフラグがセットされていると判定した場合（ステップＳ３１５：ＹＥＳ）、ループＬ２データをハードディスク２１０に書き込む、すなわち、ハードディスク２１０上のループＬ２データを更新する（ステップＳ３２１）。
アクセス処理部２４０は、全ての被選択データ（ＳＳＤ）に対してループＬ２の処理を完了したか否かを判定する。アクセス処理部２４０は、未処理の被選択データ（ＳＳＤ）が存在すると判定した場合は、ステップＳ３１３に戻り、ループＬ２の処理を継続する。一方、アクセス処理部２４０は、全ての被選択データ（ＳＳＤ）に対してループＬ２の処理を完了したと判定した場合は、ループＬ２を終了する（以上、ステップＳ３２２）。
【００５０】
次に、アクセス処理部２４０は、ステップＳ３１２にて選択したデータが、ＳＳＤキャッシュ上のデータか否かを判定する（ステップＳ３２３）。アクセス処理部２４０は、ステップＳ３１２にて選択したデータが、ＳＳＤキャッシュ上のデータではない（すなわち、ループＬ１データを選択した）と判定した場合（ステップＳ３２３：ＹＥＳ）、ステップＳ３３３に進む。この場合は、ループＬ１データのＳＳＤキャッシュ２２０への書き込みは行われない。
一方、ステップＳ３２３にて、ステップＳ３１２にて選択したデータが、ＳＳＤキャッシュ上のデータであると判定した場合（ステップＳ３２３：ＹＥＳ）、アクセス処理部２４０は、ステップＳ３１２にて選択した各データをＳＳＤキャッシュから解放する。さらに、アクセス処理部２４０は、ＳＳＤキャッシュ管理テーブルを更新する、すなわちＳＳＤキャッシュから解放したデータの情報をＳＳＤキャッシュ管理テーブルから削除する（ステップＳ３３１）。
【００５１】
そして、アクセス処理部２４０は、ループＬ１データ、すなわち、ＤＲＡＭキャッシュ２３０から解放されるデータを、ＳＳＤキャッシュ２２０に書き込む。さらに、アクセス処理部２４０は、ＳＳＤキャッシュ管理テーブルを更新する、すなわち、ＳＳＤキャッシュ２２０に書き込んだデータに対応する行を、ＳＳＤキャッシュ管理テーブルに設け、各項目の情報を書き込む（以上、ステップＳ３３２）。
アクセス処理部２４０は、全ての被選択データ（ＤＲＡＭ）に対してループＬ１の処理を完了したか否かを判定する。アクセス処理部２４０は、未処理の被選択データ（ＤＲＡＭ）が存在すると判定した場合は、ステップＳ３０１に戻り、ループＬ１の処理を継続する。一方、アクセス処理部２４０は、全ての被選択データ（ＤＲＡＭ）に対してループＬ１の処理を完了したと判定した場合は、ループＬ１を終了する（以上、ステップＳ３３３）。
【００５２】
アクセス処理部２４０は、全ての被選択データ（ＤＲＡＭ）をＤＲＡＭキャッシュ２３０から解放する。さらに、アクセス処理部２４０は、ＤＲＡＭキャッシュ管理テーブルを更新する、すなわちＤＲＡＭキャッシュから解放したデータの情報をＤＲＡＭキャッシュ管理テーブルから削除する（以上、ステップＳ３３４）。その後、図１０および１１の処理を終了する。
【００５３】
ステップＳ３１１において、解放優先順位決定部２７０が、解放優先順位を決定する方法について説明する。解放優先順位決定部２７０は、データ長の長いデータほど解放優先順位を高くする。
例えば、解放優先順位決定部２７０は、解放優先順位決定対象の各データについて、データ長の長い順に解放優先順位を付す。後述するように、アクセス処理部２４０は、解放優先順位の高いデータを優先的にＳＳＤキャッシュ２２０から解放するので、データ長の短いデータがＳＳＤキャッシュ２２０に残りやすくなる。データ長の短いデータは、アクセスに要する時間全体に対するアクセス初期の遅延時間（レイテンシ）の割合が大きいデータである。すなわち、データ長の短いデータは、そのデータがＳＳＤキャッシュ２２０から読み出される場合にデータ読み出しに要する時間に対する、そのデータがハードディスク２１０から読み出される場合にデータ読み出しに要する時間の比が大きい。この点において、データ長の短いデータは、ＳＳＤキャッシュ２２０上でヒットしなかった場合のコストが大きいデータである。このようなデータがＳＳＤキャッシュ２２０に記憶されることで、記憶装置２０がホスト１０からの読出要求を受信してからそのデータ全て送信するまでの応答時間について、キャッシュ利用による短縮率が高まることが期待できる。
このように、ハードディスク２１０およびＳＳＤキャッシュ２２０の、記憶媒体のアクセス性能特性に応じて適切な置換を行える。
【００５４】
解放優先順位決定部２７０が解放優先順位を決定する方法は、上述した、データ長の長い順に解放優先順位を付す方法に限らない。
例えば、解放優先順位決定部２７０が、式（１）に基づいて、解放優先指標値Ｒを算出し、解放優先指標値Ｒの小さい順に解放優先順位を付すようにしてもよい。
Ｒ  ＝  Ｆ／Ｌ    ・・・    式（１）
ここで、“Ｆ”は、解放優先順位決定対象のデータに対するアクセス頻度を示す。“Ｌ”は、そのデータのデータ長を示す。
このように優先順位を決定することにより、データ長の長いデータほど高い解放優先順位が付されるので、データ長の長い順に解放優先順位を付す場合と同様、ＳＳＤキャッシュ２２０上でヒットしなかった場合のコストが大きいデータをＳＳＤキャッシュ２２０に残せる。加えて、このように優先順位を決定する場合、アクセス頻度の低いデータほど高い解放優先順位が付されるので、アクセス頻度の高いデータをＳＳＤキャッシュ２２０に残せる。これにより、ヒット率の向上が期待できる。
このように、ハードディスク２１０およびＳＳＤキャッシュ２２０の、記憶媒体アクセス性能特性に応じて適切な置換を行いつつ、ヒット率の向上を図れる。
【００５５】
解放優先順位決定部２７０が、式（２）に基づいて、解放優先指標値Ｑを算出し、解放優先指標値Ｑの小さい順に解放優先順位を付すようにしてもよい。
Ｑ  ＝  Ｒ／Ｌ    ・・・    式（２）
ここで、“Ｒ”は、解放優先順位決定対象のデータの、ＬＲＵ置換の優先順位、すなわち、最終アクセス時刻の古い順を示す。“Ｌ”は、そのデータのデータ長を示す。
データ毎のアクセス頻度がほぼ固定されている場合、ＬＲＵ置換の優先順位が高いほどアクセス頻度が低い。従って、解放優先指標値Ｑの小さい順に解放優先順位を付する場合は、式（１）に基づいて解放優先順位を付す上記の場合と同様、ＳＳＤキャッシュ２２０上でヒットしなかった場合のコストが大きいデータをＳＳＤキャッシュ２２０に残せる。加えて、解放優先指標値Ｑの小さい順に解放優先順位を付する場合は、アクセス頻度の低いデータほど高い解放優先順位が付されるので、アクセス頻度の高いデータをＳＳＤキャッシュ２２０に残せる。
このように、ハードディスク２１０およびＳＳＤキャッシュ２２０の、記憶媒体のアクセス性能特性に応じて適切な置換を行いつつ、ヒット率の向上を図れる。
【００５６】
解放優先順位決定部２７０が、性能情報記憶部２６０の記憶する、ハードディスク２１０およびＳＳＤキャッシュ２２０の、遅延時間およびアクセス速度を用いて解放優先指標値を算出するようにしてもよい。
例えば、まず、解放優先順位を決定する対象データのデータ長を“Ｌ”とする。そのデータに対するアクセス頻度を“Ｆ”とする。ハードディスク２１０のデータ読出速度および書込速度は共に“ｓｈ”であるとする。ＳＳＤキャッシュ２２０のデータ読出速度および書込速度は共に“ｓｓ”であるとする。ハードディスク２１０の遅延時間は読み書き共に“ａｈ”であるとする。ＳＳＤキャッシュ２２０の遅延時間は０である（すなわち、遅延時間はない）とする。
【００５７】
この場合、データがＳＳＤキャッシュ２２０から読み出される際に、読出要求を受けてから全データを読み終わるまでの読出時間は、式（３）にて算出される。
Ｌ／ｓｓ  ・・・  式（３）
データがハードディスク２１０から読み出される際に、読出要求を受けてから全データを読み終わるまでの読出時間は、式（４）にて算出される。
ａｈ  ＋  Ｌ／ｓｈ  ・・・  式（４）
したがって、データがＳＳＤキャッシュ２２０から読み出される場合の読出時間を、ハードディスク２１０から読み出される場合の読出時間で除した比は、式（５）のようになる。
（Ｌ／ｓｓ）／（ａｈ  ＋  Ｌ／ｓｈ）    ・・・    式（５）
この値が小さいデータほど、ハードディスク２１０から読み出される場合に対する、ＳＳＤキャッシュ２２０から読み出される場合の、読出時間の短縮率が大きい。この点で、式（５）により算出される値が小さいデータほど、ＳＳＤキャッシュ２２０上でヒットしなかった場合のコストが大きい。
【００５８】
そこで、解放優先順位決定部２７０が、式（５）にアクセス頻度Ｆを乗じて得られる、式（６）の解放優先指標値Ｐを算出し、解放優先指標値Ｐの小さい順に解放優先順位を付すようにしてもよい。
Ｐ  ＝  （（Ｌ／ｓｓ）／（ａｈ  ＋  Ｌ／ｓｈ））Ｆ    ・・・    式（６）
このように優先順位を決定することにより、ＳＳＤキャッシュ２２０上でヒットしなかった場合のコストが大きいデータをＳＳＤキャッシュ２２０に残せる。加えて、解放優先指標値Ｐの小さい順に解放優先順位を付する場合は、アクセス頻度の低いデータほど高い解放優先順位が付されるので、アクセス頻度の高いデータをＳＳＤキャッシュ２２０に残せる。
【００５９】
このように、ハードディスク２１０およびＳＳＤキャッシュ２２０の、記憶媒体のアクセス性能特性に応じて適切な置換を行いつつ、ヒット率の向上を図れる。
式（６）は、式（７）のように変形できる。
Ｐ  ＝  （（１／ｓｓ）／（ａｈ／Ｌ  ＋  １／ｓｈ））Ｆ    ・・・    式（７）
したがって、Ｌの値が大きいほど解放優先指標値Ｐの値は小さくなる。すなわち、データ長の長いデータほど解放優先順位が高くなる。
【００６０】
解放優先順位決定部２７０が解放優先順位を決定するタイミングは、ステップＳ３１１が実行されるタイミングに限らない。例えば、解放優先順位決定部２７０が、定期的に各データの解放優先順位を決定し、アクセス処理部２４０が、その解放優先順位を用いるようにしてもよい。この場合、アクセス処理部２４０が、ステップ３１１にて解放優先順位決定部２７０の解放優先順位決定を待つ必要がなく、処理時間の短縮を図れる。
【００６１】
次に、図１２〜図２１を参照して、記憶装置２０の動作例について説明する。
以下では、ハードディスク２１０はブロックに分割され、ブロック毎にアドレスが０から順番に割り当てられているとする。ハードディスク２１０は、１つのデータを連続するブロックに格納するとする。書き込まれるデータ量に対してハードディスクの容量は充分に大きく、フラグメントの問題は生じないとする。
ハードディスク２１０の、不連続のブロックにアクセスする際の遅延時間は読出、書込共に２０ｍｓ（ミリセカンド）であるとする。読出を開始した後、連続のブロックにアクセスする際の読出速度は、１秒あたり５００００ブロックであるとする。
【００６２】
ＳＳＤキャッシュ２２０は、ハードディスク２１０と同サイズのブロックに分割され、ブロック数が１００００であるとする。
ＳＳＤキャッシュ２２０の、不連続のブロックにアクセスする際の遅延時間は、読出、書込によらず０ｍｓであるとする。したがって、フラグメントによる読出または書込の遅延は生じないとする。読出を開始した後、連続のブロックにアクセスする際の読出速度は、１秒あたり１０００００ブロックであるとする。
【００６３】
ＤＲＡＭキャッシュ２３０は、ハードディスク２１０と同サイズのブロックに分割され、ブロック数が１０００であるとする。ＤＲＡＭキャッシュ２３０上の置換するデータの決定ポリシーとしてＬＲＵを使用する。
記憶装置２０全体のアドレス空間は、ハードディスク２１０のブロックのアドレス空間に一致するとする。
【００６４】
図１２は、後述する一連の処理の開始時（以下、「処理開始時」と称する）において、ＤＲＡＭキャッシュ管理テーブルが格納する情報を示す図である。説明を簡単にするため、１つのデータは、ＤＲＡＭキャッシュ２３０上の連続するブロックに格納され、先頭アドレスおよびデータ長にて領域が指定されるとする。前述したように、ＤＲＡＭキャッシュ２３０は、遅延時間（レイテンシ）が０であるため、１つのデータがＤＲＡＭキャッシュ２３０上の不連続のブロックに格納される場合でも、記憶装置２０の動作タイミングは以下の説明と同様である。
【００６５】
以下では、図１２の状態におけるＤＲＡＭキャッシュ２３０上の領域のうち、先頭アドレス「９１０」から１０ブロックの領域を領域「Ａ」と称する。先頭アドレス「８８０」から３０ブロックの領域を領域「Ｂ」と称する。先頭アドレス「３８０」から５００ブロックの領域を領域「Ｃ」と称する。図１２の状態における、使用中のブロック数は、領域Ａの先頭アドレス「９１０」にデータ長「１０」を加えた９２０ブロックである。したがって、空き容量は、ＤＲＡＭキャッシュ２３０の容量である１０００ブロックから９２０ブロックを減じた８０ブロックである。
図１２に示されるデータのうち、領域Ａのデータが、最も解放優先順位が高く、すなわち、アクセス頻度が低く、次いで、領域Ｂのデータ、領域Ｃのデータ、・・・の順に解放優先順位が高いとする。
【００６６】
図１３は処理開始時において、ＳＳＤキャッシュ管理テーブルが格納する情報を示す図である。ＤＲＡＭキャッシュ２３０と同様、１つのデータは、データ情報記憶部２８０上の連続するブロックに格納され、先頭アドレスおよびデータ長にて領域が指定されるとする。ＤＲＡＭキャッシュ２３０と同様、ＳＳＤキャッシュ２２０は、遅延時間（レイテンシ）が０であるため、１つのデータがＳＳＤキャッシュ２２０上の不連続のブロックに格納される場合でも、記憶装置２０の動作タイミングは以下の説明と同様である。
以下では、図１３の状態におけるＳＳＤキャッシュ２２０上の各領域を、それぞれ符号にて示すように、領域「Ｐ」、領域「Ｑ」、・・・、領域「Ｕ」と称する。図１３の状態における、使用中のブロック数は、領域Ｕの先頭アドレス「９７８０」にデータ長「２００」を加えた９９８０ブロックである。したがって、空き容量は、ＳＳＤキャッシュ２２０の容量である１００００ブロックから９９８０ブロックを減じた２０ブロックである。
図１３に示されるデータは、アクセス頻度の低い順、すなわち、領域Ｕのデータ、領域Ｔのデータ、・・・、領域Ｐのデータの順に解放優先順位が高い。
【００６７】
図１４は、ホスト１０（図１）から記憶装置２０に送信される一連の処理要求の例を示す図である。図１４に示す矢印αの順に処理が行われる。図１４に示す、読出要求Ｔ（符号Ｔを付した行に示す読出要求）は図１３の状態におけるＳＳＤキャッシュ２２０上の領域Ｔに格納されたデータの読出要求である。
一方、読出要求Ｘ、Ｙ、Ｚは、それぞれ、ハードディスク２１０上の領域Ｘ、Ｙ、Ｚに格納されたデータの読出要求である。これらのデータは、図１２の状態におけるＤＲＡＭキャッシュ２３０上および図１３の状態におけるＳＳＤキャッシュ２２０上には格納されておらず、ハードディスク２１０上に格納されている。
【００６８】
ホスト１０から記憶装置２０に対して読出要求Ｔが送信されると、アクセス処理部２４０は、まず、データ情報記憶部２８０上のＤＲＡＭキャッシュ管理テーブルを参照して、ＤＲＡＭキャッシュ２３０に領域Ｔのデータが格納されているか否かを判定する。ここでは、ＤＲＡＭキャッシュ２３０には、領域Ｔのデータは格納されていない（図１２）。
そこで、アクセス処理部２４０はデータ情報記憶部２８０上のＳＳＤキャッシュ管理テーブルを参照して、ＳＳＤキャッシュ２２０に領域Ｔのデータが格納されているか否かを判定する。ＳＳＤキャッシュ２２０には、領域Ｔのデータが格納されている（図１３）。そこで、アクセス処理部２４０は、領域ＴのデータをＳＳＤキャッシュ２２０から読み出し、読み出したデータを、読出要求Ｔに対する結果として読出要求Ｔの送信元のホスト１０に送信する。
【００６９】
その後、アクセス処理部２４０は、データ情報記憶部２８０の記憶するＳＳＤキャッシュ管理テーブルに格納される領域Ｔのアクセス頻度を更新する。具体的には、アクセス処理部２４０は、領域Ｔのアクセス頻度「９９９」に１を加算して「１０００」とする。
図１６は、読出要求Ｔに対する一連の処理を行った後のＳＳＤキャッシュ管理テーブルが格納する情報を示す。
処理開始時において、ＤＲＡＭキャッシュ２３０の空き容量は８０ブロックであるため（図１２）、他のデータを解放せずに領域Ｔのデータ（８０ブロック）をＤＲＡＭキャッシュ２３０に格納可能である。そこで、アクセス処理部２４０は、領域ＴのデータをＤＲＡＭキャッシュ２３０に書き込む。これにより、ＤＲＡＭキャッシュ２３０の空き容量は０ブロックとなる。
図１５は、読出要求Ｔに対する一連の処理を行った後のＤＲＡＭキャッシュ管理テーブルが格納する情報を示す。
【００７０】
読出要求Ｔに続いて、ホスト１０から記憶装置２０に対して読出要求Ｘが送信されると、アクセス処理部２４０はＤＲＡＭキャッシュ２３０に領域Ｘのデータが格納されているか否かを判定する。ここでは、ＤＲＡＭキャッシュ２３０には領域Ｘのデータが格納されていない（図１５）。
そこで、アクセス処理部２４０は、ＳＳＤキャッシュ２２０に領域Ｘのデータが格納されているか否かを判定する。ここでは、ＳＳＤキャッシュ２２０上に領域Ｘのデータは格納されていない（図１６）。
そこで、アクセス処理部２４０は、ハードディスク２１０から領域Ｘのデータを読み出し、読み出したデータを、読出要求Ｘに対する結果として読出要求Ｘの送信元のホスト１０に送信する。
【００７１】
その後、アクセス処理部２４０は、領域ＸのデータをＤＲＡＭキャッシュ２３０に格納する。ＤＲＡＭキャッシュ２３０の空き容量は０ブロックであるため（図１５）、そのままでは、領域ＸのデータをＤＲＡＭキャッシュ２３０に格納できない。そこで、アクセス処理部２４０は、ＤＲＡＭキャッシュ２３０上の領域のうち、解放優先順位が最も高い領域Ａのデータを、ＤＲＡＭキャッシュ２３０上から解放し、領域Ｘのデータを書き込む。
この際、アクセス処理部２４０は、解放される領域Ａのデータを、ＳＳＤキャッシュ２２０に書き込むか否かを判定する。データ情報記憶部２８０上のＳＳＤキャッシュ管理テーブルを参照すると、ＳＳＤキャッシュ２２０の空き容量は、２０ブロックであり（図１６）、他のデータを解放せずに領域Ａのデータ（１０ブロック）を格納可能である。そこで、アクセス処理部２４０は、領域ＡのデータをＳＳＤキャッシュ２２０に書き込む。これによりＳＳＤキャッシュ２２０の空き容量は１０ブロックとなる。
図１７は、読出要求Ｘに対する一連の処理を行った後のＤＲＡＭキャッシュ管理テーブルが格納する情報を示す。図１８は、読出要求Ｘに対する一連の処理を行った後のＳＳＤキャッシュ管理テーブルが格納する情報を示す。
【００７２】
読出要求Ｘに続いて、ホスト１０から読出要求Ｙが送信されると、アクセス処理部２４０は、ＤＲＡＭキャッシュ２３０に領域Ｙのデータが格納されているか否かを判定する。ＤＲＡＭキャッシュ２３０には領域Ｙのデータが格納されていない（図１７）。
そこで、アクセス処理部２４０は、ＳＳＤキャッシュ２２０に領域Ｙのデータが格納されているか否かを判定する。ここでは、ＳＳＤキャッシュ２２０上に領域Ｙのデータは格納されていない（図１８）。
【００７３】
そこで、アクセス処理部２４０は、ハードディスク２１０から領域Ｙのデータを読み出し、読み出したデータを、読出要求Ｙに対する結果として読出要求Ｙの送信元のホスト１０に送信する。
その後、アクセス処理部２４０は、領域ＹのデータをＤＲＡＭキャッシュ２３０に格納する。ＤＲＡＭキャッシュ２３０の空き容量は０ブロックであるため（図１７）、そのままでは、領域ＸのデータをＤＲＡＭキャッシュ２３０に格納できない。そこで、アクセス処理部２４０は、ＤＲＡＭキャッシュ２３０上の領域のうち、データ置換の優先度が最も高い領域Ｂのデータを、ＤＲＡＭキャッシュ２３０上から解放し、領域Ｙのデータを書き込む。
【００７４】
この際、アクセス処理部２４０は、解放される領域Ｂのデータを、ＳＳＤキャッシュ２２０に書き込むか否かを判定する（図１１：ステップＳ３０２〜３１２）。データ情報記憶部２８０上のＳＳＤキャッシュ管理テーブルを参照すると、ＳＳＤキャッシュ２２０の空き容量は１０ブロックであり（図１８）、領域Ｂの３０ブロック分のデータを格納するためにはＳＳＤキャッシュ２２０上のデータを開放する必要がある。そこで、解放優先順位決定部２７０が、ＳＳＤキャッシュ２２０上の各データについて解放優先順位を算出し、解放するデータを決定する（図１１：ステップＳ３３１）。解放優先順位決定部２７０は、ＳＳＤキャッシュ管理テーブルに格納された各データの参照回数Ｆと、各データのデータ長Ｌとに基づいて、指標値Ｆ／Ｌを算出し、算出した指標値が低データから順に解放優先順位を付す。
【００７５】
この時点でＳＳＤキャッシュ２２０に存在するのは領域Ｐ、Ｑ、Ｒ、Ｓ、Ｔ、Ｕ、Ａのデータである（図１８）。これらのデータの指標値を計算すると以下のとおりである。Ｐの指標値は５００００／５０００＝１０である。Ｑの指標値は３６０００／３０００＝１２である。Ｒの指標値は１０８００／１２００＝９である。Ｓの指標値は５５００／５００＝１１である。Ｔの指標値は本実施例内で１回アクセスされているため（９９９＋１）／８０＝１２．５である。Ｕの指標値は５０／２００＝０．２５である。Ａの指標値は５００／１０＝５０である。ＤＲＡＭキャッシュ２３０から解放される領域Ｂのデータについて指標値を算出すると、９００／３０＝３０となる。そこで、解放優先順位決定部２７０は、指標値が最小である領域Ｕのデータに対して最も高い解放優先順位を付す。この領域Ｕのデータ長は２００ブロックであるため、領域Ｕのデータを解放することで、現在の空き容量と合計して２１０ブロックまでのデータを格納可能となる。そのため領域Ｂ（２０ブロック）のデータを格納するために領域Ｕ以外のデータを置き換える必要はない。したがって、アクセス処理部２４０は、領域Ｕのデータを解放対象に決定する。
【００７６】
アクセス処理部２４０は、解放対象となる領域Ｕのデータについて、ＳＳＤキャッシュ管理テーブルから、Ｄｉｒｔｙフラグの値を読み出す（図１１：ステップＳ３１４）。ここでは、Ｄｉｒｔｙフラグがセットされている（図１８）。そのため、アクセス処理部２４０は、領域Ｕのデータをハードディスク２１０に書き込む（図１１：ステップＳ３２１）。その後、アクセス処理部２４０は、ＳＳＤキャッシュ２２０上から領域Ｕのデータを解放し、データ情報記憶部２８０のＳＳＤキャッシュ管理テーブルに含まれる領域Ｕの情報も削除する（図１１：ステップＳ３３１）。
【００７７】
その後、アクセス処理部２４０はデータ情報記憶部２８０上のＳＳＤキャッシュ管理テーブルに領域Ｂのデータの情報を追加し、ＳＳＤキャッシュ２２０に領域Ｂのデータを格納する（図１１：ステップＳ３３２）。これによりＳＳＤキャッシュ２２０の空き容量は１０＋２００−３０＝１８０ブロックとなる。
図２０は、読出要求Ｙに対する一連の処理を行った後のＳＳＤキャッシュ管理テーブルが格納する情報を示す。
その後ＤＲＡＭキャッシュ２３０から領域Ｂのデータを解放し（図１１：ステップＳ３３４）、領域Ｙのデータを新たにＤＲＡＭキャッシュ２３０に格納する（図８：ステップＳ１６３）。ＤＲＡＭキャッシュ２３０の空き容量は、１０ブロックとなる。
図１９は、読出要求Ｙに対する一連の処理を行った後のＤＲＡＭキャッシュ管理テーブルが格納する情報を示す。
【００７８】
読出要求Ｙに続いて、ホスト１０から読出要求Ｚが送信されると、アクセス処理部２４０はＤＲＡＭキャッシュ２３０に領域Ｚのデータが格納されているか否かを判定する。ＤＲＡＭキャッシュ２３０には領域Ｚのデータが格納されていない。
そこで、アクセス処理部２４０は、ＳＳＤキャッシュ２２０に領域Ｚのデータが格納されているか否かを判定する。ＳＳＤキャッシュ２２０上に領域Ｚのデータは格納されていない。そこで、アクセス処理部２４０は、ハードディスク２１０から領域Ｚのデータを読み出し、読み出したデータを、読出要求Ｚに対する結果として読出要求Ｚ送信元のホスト１０に送信する。
【００７９】
その後、アクセス処理部２４０は、領域ＺのデータをＤＲＡＭキャッシュ２３０に格納する。ＤＲＡＭキャッシュ２３０の空き容量は１０ブロックであるため（図１９）、そのままでは、領域ＸのデータをＤＲＡＭキャッシュ２３０に格納できない。そこで、アクセス処理部２４０は、ＤＲＡＭキャッシュ２３０上の領域のうち、解放優先順位が最も高い領域Ｃのデータを、ＤＲＡＭキャッシュ２３０上から解放し、領域Ｚのデータを書き込む。
【００８０】
この際、アクセス処理部２４０は、解放される領域Ｃのデータを、ＳＳＤキャッシュ２２０に書き込むか否かを判定する。データ情報記憶部２８０上のＳＳＤキャッシュ管理テーブルを参照すると、ＳＳＤキャッシュ２２０の空き容量は１８０ブロックであり（図２０）、領域Ｃの５００ブロック分のデータを格納するためにはＳＳＤキャッシュ２２０上のデータを開放する必要がある。そこで、解放優先順位決定部２７０が、ＳＳＤキャッシュ２２０上の各データについて解放優先順位を算出し、解放するデータを決定する（図１１：ステップＳ３３１）。
【００８１】
この時点でＳＳＤキャッシュ２２０に存在するのは領域Ｐ、Ｑ、Ｒ、Ｓ、Ｔ、Ｂ、Ａのデータである（図２０）。これらの指標値を計算すると以下のとおりとなる。Ｐの指標値は５００００／５０００＝１０である。Ｑの指標値は３６０００／３０００＝１２である。Ｒの指標値は１０８００／１２００＝９である。Ｓの指標値は５５００／５００＝１１である。Ｔの指標値は１０００／８０＝１２．５である。Ａの指標値は５００／１０＝５０である。Ｂの指標値は９００／３０＝３０である。一方ＤＲＡＭキャッシュ２３０から解放される領域Ｃのデータについて指標値を求めると、Ｃの指標値は２０００／５００＝４となる。このように、指標値が最小となるデータはＳＳＤキャッシュ２２０に格納されたデータではなく、ＤＲＡＭキャッシュ２３０から解放される領域Ｃのデータである。解放優先順位決定部２７０は、この指標値が最小である領域Ｃのデータに対して最も高い解放優先順位を付す。これにより、アクセス処理部２４０は、ＳＳＤキャッシュ２２０に格納されたデータを開放せず、また、領域ＣのデータをＳＳＤキャッシュ２２０に格納しない（図１１：ステップＳ３２３：ＮＯ）。
【００８２】
領域ＣのデータのＤｉｒｔｙフラグは０であるため（図１９）、アクセス処理部２４０は、領域Ｃのデータのハードディスク２１０への書き込みも行わない（図１１：ステップＳ３１５：ＮＯ）。その後、アクセス処理部２４０は、領域ＣのデータをＤＲＡＭキャッシュ２３０から解放し（図１１：ステップＳ３３４）、領域ＺのデータをＤＲＡＭキャッシュ２３０に書き込む（図８：ステップＳ１６３）。
図２１は、読出要求Ｚに対する一連の処理を行った後のＤＲＡＭキャッシュ管理テーブルが格納する情報を示す。
以上により、記憶装置２０は、図１４に示される処理命令Ｔ、Ｘ、Ｙ、Ｚに対する処理を終了する。
【００８３】
以上のように、解放優先順位決定部２７０は、ＳＳＤキャッシュ２２０の記憶するデータのデータ長が長いほど、ＳＳＤキャッシュ２２０が置換を行う際のそのデータの解放優先順位を高くするので、データ長の短いデータを優先的にＳＳＤキャッシュ２２０に残すことができる。このデータ長の短いデータは、読出時間に占めるレイテンシ（アクセス初期の遅延時間）の割合の大きいデータであり、キャッシュに格納することによる読出時間の短縮率が高い。
一方、ＳＳＤキャッシュ２２０から解放されるデータ長の長いデータに対して、読出要求を受信した場合、記憶装置２０は、ハードディスク２１０からデータを読み出して返信を行う。その際、データ長の長いデータでは、読出時間に占めるレイテンシの割合が小さく、レイテンシによる読出時間の増大は比較的軽微である。
【００８４】
このように、記憶装置２０は、データ長の短いデータを優先的にＳＳＤキャッシュ２２０に残し、データ長の長いデータはハードディスク２１０から読み出すようにしている。これにより、レイテンシによる読出時間の増大を抑え、読出速度の向上を図ることができる。
特に、ＳＳＤキャッシュ２２０の記憶するデータのデータ長が長いほど、ＳＳＤキャッシュ２２０が置換を行う際のそのデータの解放優先順位を高くすることにより、ストリームデータ等、参照頻度が低く、かつ長大なデータを優先的に解放でき、さらには、ＳＳＤキャッシュに格納されないようにすることができる。これにより、ＳＳＤキャッシュ２２０の利用効率を向上させることができる。また、データ長の短いデータが、置換によりＳＳＤキャッシュ２２０から追い出されることを防止できる。
【００８５】
特に、ストリームデータは、一般的に、アクセス頻度が低く、かつ、データ長が長いデータである。データ長が長いほど解放優先順位を高くする上記の方法を用いて、このストリームデータをＳＳＤキャッシュ２２０に格納されないようにする、あるいは優先的に解放することにより、ＳＳＤキャッシュ２２０におけるヒット率向上を図ることができる。
さらには、ストリームデータは、データの先頭から順にアクセスされるのが通常であり、連続のブロックに対するアクセスによってアクセスが行われる。そのため、ストリームデータがキャッシュ上でヒットしないことによるアクセス速度の低下は、他のデータに比べて小さい。このストリームデータの解放優先順位を高くして、他のデータを優先的にＳＳＤキャッシュ２２０に格納することにより、記憶装置２０のアクセス速度向上を図ることができる。
【００８６】
また、解放優先順位決定部２７０は、ＳＳＤキャッシュ２２０の記憶するデータのデータ長が長いほど、かつ、データへのアクセスが最後に行われてからの経過時間が長いほど、ＳＳＤキャッシュ２２０が置換を行う際の解放優先順位を高くする。このため、記憶媒体のレイテンシに応じて適切な置換を行いつつ、ヒット率の向上を図れる。
【００８７】
また、解放優先順位決定部２７０は、ＳＳＤキャッシュ２２０の記憶するデータのデータ長が長いほど、かつ、そのデータへのアクセス頻度が高いほど、ＳＳＤキャッシュ２２０が置換を行う際の解放優先順位を高くする。このため、記憶媒体のレイテンシに応じて適切な置換を行いつつ、ヒット率の向上を図れる。
【００８８】
また、ＳＳＤキャッシュ２２０を二次的なキャッシュとし、一次的なキャッシュとしてＤＲＡＭキャッシュ２３０を設けることにより、大容量かつ高速なキャッシュを比較的安価に実現できる。
【００８９】
本発明の実施形態は、１層のキャッシュを備える記憶装置にも適用できる。この場合、アクセス処理部２４０は、ホスト１０からの処理要求に応じて、ＤＲＡＭキャッシュ２３０に対する処理を除いた処理を行う。具体的には、読出要求に対して、ステップＳ１２１〜Ｓ１４１（図８）、および、ステップＳ３０２〜Ｓ３３２（図１０、１１）を実行し、書込要求に対して、ステップＳ３０２〜Ｓ３３２（図１０、１１）を実行する。
【００９０】
上述した記憶装置２０における一連の処理の過程は、プログラムの形式でコンピュータ読み取り可能な記録媒体に記憶されていてもよい。このプログラムをコンピュータが読み出して実行することによって、上記処理が行われてもよい。すなわち、記憶装置２０における、各処理は、ＣＰＵ等の中央演算処理装置がＲＯＭやＲＡＭ等の主記憶装置に上記プログラムを読み出して、情報の加工、演算処理を実行することにより実現されてもよい。
【００９１】
以上、本発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【００９２】
この出願は、２０１０年７月１日に出願された日本出願特願２０１０−１５１０５２を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【産業上の利用可能性】
【００９３】
本発明は、記憶装置、解放優先順位決定方法およびプログラムに用いて好適である。
【符号の説明】
【００９４】
１０ ホスト
２０  記憶装置
２１０     ハードディスク
２２０      ＳＳＤキャッシュ
２３０    ＤＲＡＭキャッシュ
２４０ アクセス処理部
２５０      記憶媒体性能測定部
２６０  性能情報記憶部
２７０      解放優先順位決定部
２８０  データ情報記憶部
３０      ネットワーク  
【図１】
0005541361.tif 000002
【図２】
0005541361.tif 000003
【図３】
0005541361.tif 000004
【図４Ａ】
0005541361.tif 000005
【図４Ｂ】
0005541361.tif 000006
【図５】
0005541361.tif 000007
【図６】
0005541361.tif 000008
【図７Ａ】
0005541361.tif 000009
【図７Ｂ】
0005541361.tif 000010
【図８】
0005541361.tif 000011
【図９】
0005541361.tif 000012
【図１０】
0005541361.tif 000013
【図１１】
0005541361.tif 000014
【図１２】
0005541361.tif 000015
【図１３】
0005541361.tif 000016
【図１４】
0005541361.tif 000017
【図１５】
0005541361.tif 000018
【図１６】
0005541361.tif 000019
【図１７】
0005541361.tif 000020
【図１８】
0005541361.tif 000021
【図１９】
0005541361.tif 000022
【図２０】
0005541361.tif 000023
【図２１】
0005541361.tif 000024