情報処理装置、ハイブリッド記憶装置、およびキャッシュ方法
【課題】記憶装置をHDDのキャッシュとして利用する場合に、アクセス性能の低下、およびキャッシュヒット率の低下を抑制すること。
【解決手段】実施形態によれば、ホストからのハードディスクドライブへのアクセス要求に対して、前記ハードディスクドライブの設定数以上の連続するセクタのデータにアクセスするかを判定する判定手段と、記憶装置を前記ハードディスクドライブのキャッシュとして用いるキャッシュ手段であって、前記設定数以上の連続するセクタのデータにアクセスすると判定された場合に前記記憶装置をキャッシュとして用いない、キャッシュ手段とを具備する。
【解決手段】実施形態によれば、ホストからのハードディスクドライブへのアクセス要求に対して、前記ハードディスクドライブの設定数以上の連続するセクタのデータにアクセスするかを判定する判定手段と、記憶装置を前記ハードディスクドライブのキャッシュとして用いるキャッシュ手段であって、前記設定数以上の連続するセクタのデータにアクセスすると判定された場合に前記記憶装置をキャッシュとして用いない、キャッシュ手段とを具備する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、記憶装置をハードディスクドライブのキャッシュとして利用する情報処理装置、ハイブリッド記憶装置、およびキャッシュ方法に関する。
【背景技術】
【0002】
CPU(Central Processing Unit)の演算速度の向上に比べて、HDD(Hard Disk Drive)へのアクセス性能の向上の速度は遅い。HDDよりアクセス速度が速いフラッシュメモリを有する記憶装置をキャッシュとして利用することで、アクセス性能の向上を図ることが行われている。例えば、フラッシュメモリを有するSSD(Solid State Drive)をHDDのキャッシュとして利用するS−ATAコントローラを有するチップセットが製品化されている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特許第3585091号公報
【特許文献2】特開平7−105095号公報
【特許文献3】特開2004−70850号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
最近、ホストとHDDとの間で音楽や動画等の大きなサイズのファイルを転送することが多くなっている。このようなファイルの転送は、シーケンシャルアクセスになることが多い。シーケンシャルアクセスに対してキャッシュを行った場合に問題が発生する可能性がある。
【0005】
例えば、シーケンシャルリードアクセスの場合、2つの問題が発生する可能性がある。シーケンシャルリードされるデータは、近い将来再度リードされる確率が低く、リードされたとしても再度シーケンシャルリードされる確率が高い。シーケンシャルリードのデータをキャッシュに学習すると、再度リードされる可能性がより高いデータを追い出すことになり、キャッシュヒット率の低下につながる可能性がある。また、HDDはシーケンシャルリードの性能が高いため、データを学習する分、キャッシュを使用しないときよりも逆に性能低下する可能性がある。
【0006】
また、シーケンシャルライトアクセスの場合、アクセス性能が低下する可能性がある。一般にSSDをHDDのキャッシュとして使用する場合、HDDに対してはシーケンシャルライトであっても、SSDに対してはランダムライトとなる。そのため、SSDのランダムライト性能がHDDのシーケンシャルリードよりも低い場合、シーケンシャルライトアクセスデータをSSDに書き込むことにより、HDDにライトするよりも性能が低下してしまう可能性がある。
【0007】
本発明の目的は、記憶装置をHDDのキャッシュとして利用する場合に、アクセス性能の低下、およびキャッシュヒット率の低下を抑制することが可能な情報処理装置、ハイブリッド記憶装置、およびキャッシュ方法を提供することにある。
【課題を解決するための手段】
【0008】
実施形態によれば、情報処理装置は、判定手段と、キャッシュ手段とを具備する。判定手段は、ホストからのハードディスクドライブへのアクセス要求に対して、前記ハードディスクドライブの設定数以上の連続するセクタのデータにアクセスするかを判定する。キャッシュ手段は、記憶装置を前記ハードディスクドライブのキャッシュとして用いる。キャッシュ手段は、前記設定数以上の連続するセクタのデータにアクセスすると判定された場合に前記記憶装置をキャッシュとして用いない。
【図面の簡単な説明】
【0009】
【図1】第1の実施形態の情報処理装置の構成の一例を示すブロック図である。
【図2】第1の実施形態の情報処理装置の主要部の一例を示すブロック図である。
【図3】図2のNVCをキャッシュとして用いる場合の動作の概要を説明するための図である。
【図4】ライトスルーキャッシュを行う動作を説明するためのフローチャートである。
【図5】ライトバックキャッシュを行う動作を説明するためのフローチャートである。
【図6】一つのプログラムから1台のHDDにリードアクセスする場合の動作を示す遷移図である。
【図7】図8に示すリードアクセスの場合のシーケンシャルリード検出用データのデータの推移を示す図である。
【図8】二つのプログラムから2台のHDDにリードアクセスする場合の動作を示す遷移図である。
【図9】図8に示すリードアクセスの場合のシーケンシャルリード検出用データのデータの推移を示す図である。
【図10】第1の実施形態のシーケンシャルリードを検出する手順の一例を示すフローチャートである。
【図11】第1の実施形態のシーケンシャルリードの場合に学習を行わない動作を説明するためのフローチャートである。
【図12】第1の実施形態の変形例のシーケンシャルリード検出用データのデータの推移を示す図である。
【図13】第2の実施形態のシーケンシャルライトの場合に学習を行わない動作を説明するためのフローチャートである。
【図14】第2の実施形態のシーケンシャルライトの場合に学習を行わない動作を説明するためのフローチャートである。
【図15】第3の実施形態のシーケンシャルアクセス検出用データの一例を示すフローチャートである。
【図16】第3の実施形態のシーケンシャルアクセスを検出する手順の一例を示すフローチャートである。
【図17】第4の実施形態の情報処理装置の構成の一例を示すブロック図である。
【図18】第4の実施形態の情報処理装置の主要部の一例を示すブロック図である。
【図19】第5の実施形態の情報処理装置の構成の一例を示すブロック図である。
【図20】第6の実施形態の情報処理装置の構成の一例を示すブロック図である。
【図21】第7の実施形態の情報処理装置の構成の一例を示すブロック図である。
【発明を実施するための形態】
【0010】
以下、実施の形態について図面を参照して説明する。
【0011】
<第1の実施形態>
図1は、第1の実施形態に係る情報処理装置のシステム構成を示す図である。本実施形態の情報処理装置は、パーソナルコンピュータとして実現されている。
【0012】
図1に示すように、本情報処理装置は、CPU(Central processing unit)11、MCH(Memory controller hub)12、メインメモリ(揮発性メモリ)13、ICH(I/o controller hub)14、GPU(Graphics processing unit)15、ビデオメモリ(VRAM)15A、サウンドコントローラ16、BIOS−ROM(Read only memory)17、HDD(Hard disk drive)18、ODD(Optical disc drive)20、各種周辺機器21、EEPROM(Electrically erasable programmable ROM)22、EC/KBC(Embedded controller/keyboard controller)23等を備えている。
【0013】
CPU11は、本情報処理装置10の動作を制御するプロセッサであり、HDD18やODD20からメインメモリ13にロードされる各種プログラムを実行する。このCPU11によって実行される各種プログラムの中には、リソース管理を司るオペレーティングシステム(OS)110や、当該OS110の配下で動作する、キャッシュドライバ120および各種アプリケーションプログラム130等が存在する。キャッシュドライバ120は、後述するSSD201をキャッシュデバイスとして利用するプログラムである。このプログラムは、接続されたHDD18と他の記憶装置(例えば、SSD)とを、ホスト(例えば、PC本体)からは、一つのストレージに見せて、リード及びライトを制御して応答性能を向上させる、いわゆるHDDアクセラレータとして、機能させるプログラムである。具体的には、HDDアクセラレータは、OS上で動作するドライバという位置づけで、キャッシュドライバ120が動作する。
【0014】
また、CPU11は、BIOS−ROM17に格納されたBIOSも実行する。BIOSは、ハードウェア制御のためのプログラムである。以下では、BIOS−ROM17の格納物であるBIOS自体についてもBIOS17と表記することがある。
【0015】
MCH12は、CPU11とICH14との間を接続するブリッジとして動作すると共に、メインメモリ13をアクセス制御するメモリコントローラとして動作する。また、MCH12は、GPU15との通信を実行する機能を有している。
【0016】
GPU15は、本情報処理装置に組み込まれ、または、外部接続される表示装置を制御する表示コントローラである。GPU15は、VRAM15Aを有する。
【0017】
ICH14は、HDD18およびODD20を制御するためのATA(AT Attachment)コントローラを内蔵する。ICH14は、PCI(Peripheral component interconnect)バスに接続された各種周辺機器21の制御も行う。また、ICH14は、サウンドコントローラ16との通信機能も有している。
【0018】
サウンドコントローラ16は音源デバイスであり、各種プログラムが再生対象とするオーディオデータを、本情報処理装置に組み込まれた、または、外部接続されるスピーカ等に出力する。
【0019】
EEPROM22は、例えば本情報処理装置の個体情報や環境設定情報などを格納するためのメモリデバイスである。そして、EC/KBC23は、電力管理を行うためのエンベデッドコントローラと、キーボードやポインティングデバイス等の操作によるデータ入力を制御するためのキーボードコントローラとが集積された1チップMPU(Micro processing unit)である。
【0020】
キャッシュドライバ120は、SSD201の少なくとも一部の領域(NVC(Non-Volatile Cache))と主メモリ13の一部の領域(L1)をHDD18のキャッシュメモリとして用いる。
【0021】
次に、キャッシュドライバ120の機能について図2を参照して説明する。図2は、図1に示す情報処理装置の主要部を示すブロック図である。
【0022】
メインメモリ13内には、ユーザバッファ領域301、L1キャッシュ領域302、およびマージ用バッファ領域303が確保される。また、キャッシュドライバ120によって、L1キャッシュ管理情報304、NVC管理情報305、シーケンシャルリード検出用データ(Seq Read検出用データ)306がメモリ13内に作成される。
【0023】
L1キャッシュ領域302は、NVC311とともにHDD18のキャッシュとして使用するバッファである。L1キャッシュ領域302は、フィルタドライバがロードされるときにメインメモリに確保される。なお、L1キャッシュ領域302の容量は16MB程度である。
【0024】
また、マージ用バッファ領域303は、キャッシュの方式がライトバック(Write Back)方式の場合に使用される。マージ用バッファ領域303は、リードアクセス時に、L1キャッシュ領域302に一部のデータが格納されている場合に、HDD18から読み出されたL1キャッシュ領域302に格納されていないデータを一時的に格納するために用いられる。L1キャッシュ管理情報304は、L1キャッシュ領域302に格納されているキャッシュデータを管理するための情報である。NVC管理情報305は、NVC311に格納されているキャッシュデータを管理するための情報である。NVC管理情報305内には、複数のエントリが設定され、各エントリ内にはキャッシュデータの格納場所、キャッシュデータに対応するHDD18の格納場所、キャッシュデータとHDD18内のデータとが一致するかを示すデータ等が格納されている。シーケンシャルリード検出用データ306については後述する。
【0025】
情報処理装置10は、オペレーティングシステム(OS)110が制御する。オペレーティングシステム110からHDD18へのアクセスは、すべてキャッシュドライバ120を介して行われる。キャッシュドライバ120は、S−ATAコントローラ14AおよびUSBコントローラ14Bを直接的または間接的に制御する。S−ATAコントローラ14AにHDD18が接続されている。USBコントローラ14BにSSD201が接続されている。また、キャッシュドライバ120は、メモリコントローラ12Aを介して、メインメモリ13へのデータのアクセスを行う。
【0026】
キャッシュドライバ120、はシステムの起動時にメインメモリ13にロードされる。キャッシュドライバ120は、L1キャッシュ管理情報304を格納するための領域をメインメモリ13内に確保して初期化し、キャッシュには何も記録されていない状態にした後、キャッシュ制御処理を開始する。L1キャッシュ管理情報304は、キャッシュディレクトリなどのキャッシュデータを管理するためのデータを有する。キャッシュドライバ120の動作時、キャッシュドライバ120は、メインメモリ13内のL1キャッシュ管理情報304にライトキャッシュおよびリードキャッシュの学習データを管理するためのデータを記録する。シャットダウン時、キャッシュドライバ120は、メインメモリ13内のL1キャッシュ管理情報304を破棄する。
【0027】
なお、キャッシュドライバ120が動作を開始するまでは、BIOSプログラムがHDD18へのアクセスを制御する。S−ATAコントローラ14Aは、ホストからライトアクセス要求またはリードアクセス要求があった場合、HDD18にアクセスする。
【0028】
SSD201の一部または全部の領域がHDD18のキャッシュとして使用される。オペレーティングシステム110は、キャッシュデータの格納領域として使用されるSSD201のキャッシュに直接アクセスすることができない。
【0029】
本情報処理装置は、HDD18よりアクセス速度が速いSSD(Solid State Drive)201と、主メモリ13に確保するL1キャッシュ領域302をHDD18のキャッシュとして利用することで、HDD18に対するアクセスの高速化を図る。SSD201は、フラッシュメモリ(不揮発性メモリ)を有する。
【0030】
次に図3を参照して、NVC311をキャッシュとして用いる場合の動作の概要を説明する。
【0031】
キャッシュドライバは、401〜412の12種類のデータ転送を組み合わせ、L1キャッシュ領域302、および、NVC311をHDD18のキャッシュとして使用し、HDD18のアクセスを高速化する。
【0032】
(ライトスルーキャッシュ)
ここで、HDDへのリードアクセスに対してキャッシュを行う一般的な動作について説明する。まず、ライトスルーキャッシュと呼ばれているキャッシュ制御について、図4を参照して説明する。
【0033】
オペレーティングシステム110からHDD18へのアクセスコマンドが発行された場合、キャッシュドライバ120は、発行されたコマンドがリードコマンドであるかを判定する(ステップ501)。リードコマンドであると判定した場合(ステップ501のYes)、キャッシュドライバ120は、L1キャッシュ管理情報304およびNVC管理情報305を参照することによって、リードコマンドに対応するデータがL1キャッシュ領域302とSSD202内のNVC311内に存在するかを判定する(ステップ502)。データが存在すると判定した場合(ステップ502のYes)、L1キャッシュ領域302またはNVC311からリードコマンドに対応するデータを読み出す(ステップ503)。データが存在しないと判定した場合、キャッシュドライバ120は、HDD18からリードコマンドに対応するデータをL1キャッシュ領域302に読み出し、ユーザバッファ領域301に渡す(ステップ504)。そして、キャッシュドライバ120は、HDD18から読み出されたデータを、キャッシュデータとしてL1キャッシュ領域302からNVC311に書き込み、データを学習する(ステップ505)。
【0034】
ステップ501において、リードコマンドではない(つまり、ライトコマンドである)と判定した場合(ステップ501のNo)、ライトコマンドに対応するアドレスのデータがL1キャッシュ領域302とSSD202内のNVC311内に存在するかを判定する(ステップ506)。データがL1キャッシュ領域302またはNVC311内に存在すると判定した場合(ステップ506のYes)、L1キャッシュ領域302またはNVC311内に存在するキャッシュデータを書き換えると共に、ライトコマンドに対応するデータをHDD18に書き込む(ステップ507)。データがL1キャッシュ領域302とNVC311内に存在しないと判定した場合(ステップ506のNo)、ライトコマンドに対応するデータをHDD18に書き込む(ステップ508)。
以上説明したリードアクセスを学習する場合のキャッシュドライバの動作において、
リードアクセスが、音楽や動画等のように、データ容量が極端に大きいデータについてのリードアクセスの場合は、リード動作が連続する。このようにリード動作を、以下、シーケンシャルリードとして、説明する。シーケンシャルリードの場合、性能とキャッシュヒット率の2つの問題が発生する可能性がある。シーケンシャルリードされるデータは、連続してデータのリードが継続するため、近い将来再度リードされる確率が低く、リードされたとしても再度シーケンシャルリードされる確率が高い。もし、シーケンシャルリードのデータをNVC311に学習すると、データ量が大量になるため、それまでにキャッシュデータとしてNVC311に学習された、再度リードされる可能性がより高いデータを追い出すことになる。このため、キャッシュヒット率の低下につながる(キャッシュヒット率の問題)。一方、一般的にHDD18は、シーケンシャルリードの性能が高いため、NVC311に学習する分、キャッシュを使用しないときよりも逆に性能低下する可能性がある。また、SSD201のリード性能がHDD18のシーケンシャルリード性能と同等以下の場合は、データが近い将来再度リードされてキャッシュにヒットしたとしてもキャッシュの効果は期待できない(性能問題)。
【0035】
(ライトバックキャッシュ)
また、HDDへのリードアクセスに対してキャッシュを行う一般的な動作の別の制御方法として、ライトバックキャッシュ方式がある。ライトバックキュッシュ方式の動作について図5を参照して説明する。
【0036】
ステップ501〜ステップ505は、図4で説明したリードのキャッシュ動作と同様なので説明を省略する。ステップ501において、リードコマンドではない(つまり、ライトコマンドである)と判定した場合(ステップ501のNo)、ライトコマンドに対応するアドレスのデータが、SSD202のNVC311内に存在するかを判定する(ステップ1306)。データがNVC311内に存在すると判定した場合(ステップ1306のYes)、キャッシュドライバ120は、NVC311内に存在するデータを書き換える(ステップ1307)。データがNVC311内に存在しないと判定した場合(ステップ1306のNo)、キャッシュドライバ120は、NVC管理情報305からエントリを見つける(ステップ1308)。キャッシュドライバ120は、見つけたNVC311のエントリに対応するアドレスにデータを書き込む(ステップ1309)。
【0037】
以上説明したライトバック動作では、ライトされるデータがシーケンシャルライトの場合、ライト性能が悪化する可能性がある。SSD201のランダムライト性能がHDD18のシーケンシャルリードよりも遅い場合、SSD201に対してシーケンシャルライトすることにより、HDD18に直接書き込むよりも性能が低下してしまう。これは、HDD18に対するシーケンシャルライトであっても、SSD201に対してはランダムライトとなるからである。
【0038】
<シーケンシャルアクセスの判定方法>
このような、シーケンシャルアクセスにおける問題を解決するため、本実施の形態のキャッシュドライバ120は、リードアクセスがシーケンシャルリードであるかを判定するために、シーケンシャルリード検出用データ306を使用する。シーケンシャルリード検出用データ306は、データはn行のテーブルである。行数nはあらかじめ決められているか、キャッシュドライバ120の起動時にパラメータとして与えられる。各行は、LRUカウンタ(LRUC)、HDD識別番号(HDD)、次のLBA(Next LBA)(セクタ番号)、これまでにリードしたセクタ数(Size)から構成される。LRUカウンタは最も過去に使用(更新)された行を見つけるためのカウンタで、n行の時0〜n−1の値を取る。0の値が最も最近使用された行、n−1の値が最も過去に使用された行である。これにより、過去nプロセスのシーケンシャルリードを検出することができる。
【0039】
本実施形態の場合、n行のテーブルを用いてシーケンシャルリードであるかを判定している。まず、図6に示すような、あるプログラムAから1台のHDD(HDD識別番号=1)にアクセスする場合の動作について説明する。そして、図6に示すリードアクセスがあった場合のシーケンシャルリード検出用データ306(n=1)内の値の推移を図7を参照して説明する。シーケンシャルリードかどうかの閾値、すなわちシーケンシャルリード検出サイズは400hとする。
【0040】
先ず、プログラムAの動作によりCPU11がHDDに対し、アドレスが0100h(“h”は16進数であることを示すために添付されている)からセクタ数が80hのデータにリードアクセスするためのコマンドを発行する(ステップ801)。キャッシュドライバ120は、シーケンシャルリード検出用データ306Aを生成する。シーケンシャルリード検出用データ306Aにおいて、HDD識別番号は1であり、Next LBAは180h、サイズは80hである。
【0041】
要求されたデータがHDDから読み出された後、プログラムAの動作によりCPU11がHDDに対し、アドレスが0180hからセクタ数が80hのデータにリードアクセスするためのコマンドを発行する(ステップ802)。キャッシュドライバ120は、シーケンシャルリード検出用データ306Bを生成する。シーケンシャルリード検出用データ306Bにおいて、HDD識別番号は1であり、Next LBAは200h、サイズは100hである。
【0042】
プログラムAの動作により、CPU11は、リードアクセスが終了するたびに連続するサイズが80hのデータのリードアクセスにアクセスするためのコマンドを発行する。要求されたデータがHDDから読み出された後、プログラムAの動作によりCPU11がHDDに対し、アドレスが0500hからセクタ数が80hのデータにリードアクセスするためのコマンドを発行する(ステップ803)。キャッシュドライバ120は、シーケンシャルリード検出用データ306Cを生成する。シーケンシャルリード検出用データ306Cにおいて、HDD識別番号は1であり、Next LBAは500h、サイズは400hである。
【0043】
要求されたデータがHDDから読み出された後、、プログラムAの動作によりCPU11が、HDDに対してアドレスが0500hからセクタ数が80hのデータにリードアクセスするためのコマンドを発行する(ステップ804)。キャッシュドライバ120は、シーケンシャルリード検出用データ306Dを生成する。シーケンシャルリード検出用データ306Dにおいて、HDD識別番号は1であり、Next LBAは500hである。図10に示すフローチャートのステップ605において算出されるサイズは480hである。そして、10に示すフローチャートのステップ606において、サイズ(480h)がシーケンシャルリード検出サイズより大きいと判断される。このため、図11のフローチャートのステップ702においてシーケンシャルリードであると判定されるので、リードアクセスされたデータの学習を行わななくなる。
【0044】
次に、図8に示すような、プログラムAの動作によりCPU11が1台のHDD_1(HDD識別番号=1)にアクセスし、プログラムBの動作によりCPU11が1台のHDD_2(HDD識別番号=2)にアクセスする場合の動作について説明する。そして、図8に示すリードアクセスがあった場合のシーケンシャルリード検出用データ(n=1)内の値の推移を図9を参照して説明する。なお、シーケンシャルリード検出サイズは400hとする。
【0045】
先ず、プログラムAの動作によりCPU11が、HDD_1に対してアドレスが0100hからセクタ数が80hのデータにリードアクセスするためのコマンドを発行する(ステップ1001)。キャッシュドライバ120は、シーケンシャルリード検出用データ1101を生成する。シーケンシャルリード検出用データ1101において、HDD識別番号は1であり、Next LBAは180h、サイズは80hである。
【0046】
要求されたデータがHDDから読み出された後、プログラムAの動作によりCPU11が、HDD_1に対してアドレスが0180hからセクタ数が80hのデータにリードアクセスするためのコマンドを発行する(ステップ1002)。キャッシュドライバ120は、シーケンシャルリード検出用データ1102を生成する。シーケンシャルリード検出用データ1102において、HDD識別番号は1であり、Next LBAは200h、サイズは100hである。
【0047】
要求されたデータがHDDから読み出された後、プログラムBの動作によりCPU11が、HDD_2に対してアドレスが1000hからセクタ数が80hのデータにリードアクセスするためのコマンドを発行する(ステップ1003)。キャッシュドライバ120は、シーケンシャルリード検出用データ1103を生成する。シーケンシャルリード検出用データ1103において、HDD識別番号は2であり、Next LBAは1000h、サイズは80hである。
【0048】
プログラムAの動作によりCPU11が、HDD_1に対してアドレスが0200hからセクタ数が80hのデータにリードアクセスするためのコマンドを発行する(ステップ1004)。キャッシュドライバ120は、シーケンシャルリード検出用データ1104を生成する。シーケンシャルリード検出用データ1104において、HDD識別番号は1であり、Next LBAは280、サイズは80hである。
【0049】
キャッシュドライバ120のシーケンシャルリードを検出する手順の一例について、図10のフローチャートを参照して説明する。このフローでは、リードコマンドのHDD識別子、LBA(セクタ番号)、セクタ数が入力として与えられ、True(シーケンシャルリード)またはFalse(非シーケンシャルリード)を出力として返す。シーケンシャルリード検出サイズはあらかじめ決められているか、ドライバ起動時にパラメータとして与えられる(たとえば16MB)。
【0050】
キャッシュドライバ120は、シーケンシャルリード検出用データ306の中からリードアクセスが発行されたHDD識別番号と次のLBA(セクタ番号)とが一致する行を探す(ステップ601)。一致する行があった場合(ステップ602のYes)、キャッシュドライバ120は、次のLBA(セクタ番号)の値に今回のアクセスサイズ(セクタ数)を加える(ステップ603)。キャッシュドライバ120は、一致した行のLRUカウンタの値を0にし、その他の行のLRUカウンタの値を+1加算する(ステップ604)。そして、キャッシュドライバ120は、現在のSizeの値に今回のアクセスサイズ(セクタ数)を加えたサイズを算出する(ステップ605)。キャッシュドライバ120は、算出されたサイズがあらかじめ設定されたしきい値であるシーケンシャルリード検出サイズより大きいかを判定する(ステップ606)。シーケンシャルリード検出サイズより大きいと判定した場合(ステップ606のYes)、キャッシュドライバ120は、True(シーケンシャルリード)を出力として返す。シーケンシャルリード検出サイズより大きくないと判定した場合(ステップ606のNo)、キャッシュドライバ120は、現在のサイズの値を算出されたサイズの値に更新する(ステップ607)。そして、キャッシュドライバ120は、False(非シーケンシャルリード)を出力として返す。
【0051】
リードアクセスが発行されたHDD識別番号と次のLBA(セクタ番号)とが一致する行がなかった場合(ステップ602のNo)、キャッシュドライバ120は、LRUカウンタの値が最も多い行を検出する(ステップ608)。キャッシュドライバ120は、検出された行のHDD識別番号にリードアクセスされたHDDに対応する値をセットし、Next LBAの値に今回のLBA(セクタ番号)とセクタ数との和をセットし、Sizeの値に今回のアクセスサイズ(セクタ数)をセットする(ステップ609)。そして、キャッシュドライバ120は、ステップ608において検出された行の行のLRUカウンタの値を0にし、その他の行のLRUカウンタの値を+1加算する(ステップ610)。そして、キャッシュドライバ120は、False(非シーケンシャルリード)を出力として返す。
【0052】
<シーケンシャルリードを検出後に学習を抑止する動作の説明>
図11のフローチャートを参照して、シーケンシャルリードを検出した後に学習を抑止する機能を有するキャッシュドライバ120の動作例を説明する。
【0053】
HDD18に対するアクセスコマンドが発行された場合、キャッシュドライバ120は、当該コマンドがリードコマンドであるかを判定する(ステップ701)。リードコマンドであると判定された場合(ステップ701のYes)、キャッシュドライバ120は、上記説明した図10の動作フローにより、リードコマンドがシーケンシャルリードであるかを判定する(ステップ702)。シーケンシャルリードであると判定した場合(ステップ702のYes)、キャッシュドライバ120は、HDD18からデータを読み出す(ステップ703)。一方、シーケンシャルリードではないと判定した場合(ステップ702のNo)、キャッシュドライバ120は、リードコマンドに対応するデータがNVC311内に存在するかを判定する(ステップ704)。もし、データがNVC311内に存在すると判定した場合(ステップ704のYes)は、キャッシュドライバ120は、NVC311からデータを読み出す(ステップ705)。データがNVC311内に存在しないと判定した場合(ステップ704のNo)、キャッシュドライバ120は、HDD18からデータを読み出す(ステップ706)。そして、キャッシュドライバ120は、読み出したデータをNVC311に書き出し、HDD18から読み出されたデータを学習する(ステップ707)。
【0054】
ステップ701において、リードコマンドではない(ライトコマンドである)と判定した場合(ステップ701のNo)、ライトコマンドに対応するアドレスのデータがNVC内に存在するかを判定する(ステップ708)。データがNVC311内に存在すると判定した場合(ステップ708のYes)は、NVC311内に存在するデータを書き換えると共に、ライトコマンドに対応するデータをHDD18に書き込む(ステップ709)。もし、データがNVC311内に存在しないと判定した場合(ステップ708のNo)、ライトコマンドに対応するデータをHDD18に書き込む(ステップ710)。
【0055】
以上の動作で、シーケンシャルリードを検出した後に、リードアクセスされたデータを学習しないようになり、性能の低下、およびキャッシュヒット率の低下を抑制することが可能になる。
【0056】
(第1の実施形態の変形例)
プログラムAがシーケンシャルリードを行っていても、プログラムAのリードアクセスの間に、別のブログラムBがリードアクセスを行うと、サイズがリセットされるので、シーケンシャルリードを検出することが困難になる。ところが、シーケンシャルリード検出用データが2行のテーブルを有すると、二つのプログラムからリードアクセスが行われても、シーケンシャルリードを検出することが可能になる。
【0057】
次に、第1の実施の形態の変形例として、シーケンシャルリード検出用データが2行のテーブルである形態の遷移を、図12を用いて説明する。
【0058】
図8に示すリードアクセスがあった場合のシーケンシャルリード検出用データ306(n=2)内の値の推移を図12を参照して説明する。
【0059】
先ず、プログラムAの動作によりCPU11が、HDD_1に対してアドレスが0100hからセクタ数が80hのデータにリードアクセスするためのコマンドを発行する(ステップ1001)。キャッシュドライバ120は、シーケンシャルリード検出用データ1201を生成する。シーケンシャルリード検出用データ1201において、LRUCの値が1の行のHDD識別番号は1であり、Next LBAは180h、サイズは80hである。
【0060】
要求されたデータがHDDから読み出された後、プログラムAの動作によりCPU11が、HDD_1に対してアドレスが0180hからセクタ数が80hのデータにリードアクセスするためのコマンドを発行する(ステップ1002)。キャッシュドライバ120は、シーケンシャルリード検出用データ1202を生成する。シーケンシャルリード検出用データ1202において、LRUCの値が1の行のHDD識別番号は1であり、Next LBAは200h、サイズは100hである。
【0061】
要求されたデータがHDDから読み出された後、プログラムBの動作によりCPU11が、HDD_2に対してアドレスが1000hからセクタ数が80hのデータにリードアクセスするためのコマンドを発行する(ステップ1003)。キャッシュドライバ120は、シーケンシャルリード検出用データ1203を生成する。シーケンシャルリード検出用データ1203において、LRUCの値が1の行のHDD識別番号は2であり、Next LBAは1000h、サイズは80hである。また、シーケンシャルリード検出用データ1203において、LRUCの値が2の行のHDD識別番号は1であり、Next LBAは200h、サイズは100hである。
【0062】
プログラムAの動作によりCPU11が、HDD_1に対してアドレスが0200hからセクタ数が80hのデータにリードアクセスするためのコマンドを発行する(ステップ1004)。キャッシュドライバ120は、シーケンシャルリード検出用データ1204を生成する。シーケンシャルリード検出用データ1204において、LRUCの値が1の行のHDD識別番号は1であり、Next LBAは280、サイズは180hである。シーケンシャルリード検出用データ1204において、LRUCの値が2の行のHDD識別番号は2であり、Next LBAは1000h、サイズは80hである。
【0063】
このように、プログラムAのリードアクセスの間にプログラムBがリードアクセスを行っても、プログラムAのリードアクセスによるサイズの値がリセットされずに、更新されるので、プログラムAによるシーケンシャルリードアクセスを検出することが可能になる。
【0064】
<第2の実施形態>
次に、シーケンシャルライトを検出したときに、キャッシュへの学習を抑止する実施形態を第2の実施形態として、説明する。シーケンシャルライトの場合に学習を行わない場合の動作について図13および図14を参照して説明する。
【0065】
なお、シーケンシャルライトの検出は、図10を参照して説明したシーケンシャルリードの検出と同様である。なお、キャッシュドライバ120は、シーケンシャルリード検出用データ306とは別のシーケンシャルライト検出用データを管理する。
【0066】
オペレーティングシステム110からHDD18へのアクセスコマンドが発行された場合、キャッシュドライバ120は、コマンドがリードコマンドであるかを判定する(ステップ1401)。リードコマンドであると判定した場合(ステップ1401のYes)、キャッシュドライバ120は、NVC管理情報305を参照することによって、リードコマンドに対応するデータがNVC311内に存在するかを判定する(ステップ1402)。データが存在すると判定した場合(ステップ1402のYes)、キャッシュドライバ120は、NVC管理情報305を参照することによって、リードコマンドに対応するNVC311内のデータと、リードコマンドに対応するHDD18内のデータとが一致するか、つまりHDD18内のデータがダーティーであるかを判定する(ステップ1403)。ダーティーであると判定した場合(ステップ1403のYes)、キャッシュドライバ120は、NVC311からリードコマンドに対応するデータを読み出す(ステップ1404)。
【0067】
データが存在しないと判定した場合(ステップ1402のNo)、またはダーティーではないと判定した場合(ステップ1403のNo)、キャッシュドライバ120は、リードアクセスがシーケンシャルリードであるかを判定する(ステップ1405)。シーケンシャルリードであると判定した場合(ステップ1405のYes)、キャッシュドライバ120は、リードコマンドに対応するデータをHDD18から読み出す(ステップ1406)。シーケンシャルリードではないと判定した場合(ステップ1405のNo)、キャッシュドライバ120は、NVC管理情報305を参照することによって、リードコマンドに対応するデータがNVC311内に存在するかを判定する(ステップ1407)。データが存在すると判定した場合(ステップ1402のYes)、キャッシュドライバ120は、NVC311からリードコマンドに対応するデータを読み出す(ステップ1408)。データが存在しないと判定した場合(ステップ1402のNo)、キャッシュドライバ120は、リードコマンドに対応するデータをHDD18から読み出す(ステップ1409)。キャッシュドライバ120は、HDD18から読み出されたデータをNVC311に書き出し、データの学習を行う(ステップ1410)。
【0068】
ステップ1401において、リードコマンドではない、すなわちライトコマンドであると判定した場合(ステップ1401のNo)、キャッシュドライバ120は、NVC管理情報305を参照することによって、ライトアクセスがシーケンシャルライトであるかを判定する(ステップ1411)。
【0069】
シーケンシャルライトであると判定した場合に(ステップS1411のYes)、ライトコマンドに対応するアドレスのデータがNVC311に格納されているかを判定する(ステップ1412)。データが格納されていると判定した場合(ステップ1412のYes)、キャッシュドライバ120は、NVC311に格納されているデータを無効化する、またはNVC311に書き込まれているデータを上書きする(ステップ1413)。そして、キャッシュドライバ120は、データをHDD18に書き込む(ステップ1414)。
【0070】
ステップ1412において、データが存在しないと判定した場合(ステップ1412のNo)、キャッシュドライバ120は、データをHDD18に書き込む(ステップ1415)。
【0071】
ステップ1411において、シーケンシャルライトではないと判定した場合(ステップ1411のNo)、ライトコマンドに対応するアドレスのデータがNVC311内に存在するかを判定する(ステップ1416)。データがNVC311内に存在すると判定した場合(ステップ1416のYes)、キャッシュドライバ120は、NVC311内に存在するデータを書き換える(ステップ1417)。データがNVC311内に存在しないと判定した場合(ステップ1416のNo)、キャッシュドライバ120は、NVC管理情報305からエントリを見つける(ステップ1418)。キャッシュドライバ120は、見つけたNVC311のエントリに対応するアドレスにデータを書き込む(ステップ1419)。
【0072】
以上の処理で、シーケンシャルライトアクセスの場合にNVC311をHDD18のライトバックキャッシュとして使用している場合、学習を行わないことでシーケンシャルライトの性能の低下を抑制することが可能になる。
【0073】
(第3の実施形態)
先に説明した、第1の実施形態と第2の実施形態は、シーケンシャルリード検出用データとシーケンシャルライト検出用データとをそれぞれ設けて、シーケンシャルリードとシーケンシャルライトとを検出した。第3の実施形態として、HDD毎にシーケンシャルアクセス検出用データを設け、シーケンシャルアクセス検出用データに基づいてシーケンシャルリードとシーケンシャルライトとを検出する例について説明する。
【0074】
キャッシュドライバ120は、図15に示すように、HDD_1用のシーケンシャルアクセス検出用データ1601と、HDD_2用のシーケンシャルアクセス検出用データ1602とを管理する。シーケンシャルアクセス検出用データ1601、1602は、図165に示すように、2行のデータの配列を有する。
【0075】
キャッシュドライバ120のシーケンシャルアクセスを検出する手順の一例について図16のフローチャートを参照して説明する。このフローでは、アクセスコマンドのHDD識別子、LBA(セクタ番号)、セクタ数が入力として与えられ、True(シーケンシャルアクセス)またはFalse(非シーケンシャルアクセス)を出力として返す。シーケンシャルアクセス検出サイズはあらかじめ決められているか、ドライバ起動時にパラメータとして与えられる(たとえば16MB)。
【0076】
キャッシュドライバ120は、シーケンシャルアクセス検出用データ1601、1602の内のアクセスコマンドが発行されたされたHDDに対応するシーケンシャルアクセス検出用データから次のLBA(セクタ番号)とが一致する行を探す(ステップ1701)。一致する行があった場合(ステップ1702のYes)、キャッシュドライバ120は、次のLBA(セクタ番号)の値に今回のアクセスサイズ(セクタ数)を加える(ステップ1703)。キャッシュドライバ120は、一致した行のLRUカウンタの値を0にし、その他の行のLRUカウンタの値を+1加算する(ステップ1704)。そして、キャッシュドライバ120は、現在のSizeの値に今回のアクセスサイズ(セクタ数)を加えたサイズを算出する(ステップ1705)。キャッシュドライバ120は、算出されたサイズがあらかじめ設定されたしきい値であるシーケンシャルアクセス検出サイズより大きいかを判定する(ステップ1706)。シーケンシャルアクセス検出サイズより大きいと判定した場合(ステップ1706のYes)、キャッシュドライバ120は、True(シーケンシャルアクセス)を出力として返す。シーケンシャルアクセス検出サイズより大きくないと判定した場合(ステップ1706のNo)、キャッシュドライバ120は、現在のサイズの値を算出されたサイズの値に更新する(ステップ1707)。そして、キャッシュドライバ120は、False(非シーケンシャルアクセス)を出力として返す。
【0077】
アクセスが発行されたHDD識別番号と次のLBA(セクタ番号)とが一致する行がなかった場合(ステップ1702のNo)、キャッシュドライバ120は、LRUカウンタの値が最も多い行を検出する(ステップ1708)。キャッシュドライバ120は、検出された行のHDD識別番号にアクセスされたHDDに対応する値をセットし、Next LBAの値に今回のLBA(セクタ番号)とセクタ数との和をセットし、Sizeの値に今回のアクセスサイズ(セクタ数)をセットする(ステップ1709)。そして、キャッシュドライバ120は、ステップ1708において検出された行の行のLRUカウンタの値を0にし、その他の行のLRUカウンタの値を+1加算する(ステップ1710)。そして、キャッシュドライバ120は、False(非シーケンシャルアクセス)を出力として返す。
【0078】
なお、シーケンシャルアクセス検出用データ1601、1602は、1行のデータの配列を有していても良い。
【0079】
なお、本実施形態のSSD201を、HDD18のキャッシュとして用いる処理はコンピュータプログラムによって実現されているので、このコンピュータプログラムをコンピュータ読み取り可能な記憶媒体を通じて通常のコンピュータにインストールするだけで、本実施形態と同様の効果を容易に実現することができる。また、このコンピュータプログラムは、パーソナルコンピュータのみならず、プロセッサを内蔵した電子機器上で実行することができる。
【0080】
(第4の実施形態)
上記実施形態では、SSD201を内蔵のHDD18のキャッシュ(リードキャッシュ、ライトバックキャッシュ)として用いていた。しかし、SSD201をUSBやeS−ATA等の外部機器接続バスに接続された外部記憶装置のキャッシュ(リードキャッシュ、ライトバックキャッシュ)として用いても良い。つまり、SSD201は、HDD18と外部記憶装置のキャッシュとして用いられる。
【0081】
外部記憶装置としてUSB−HDDを用いた例を図17に示す。図17に示すように、外部記憶装置としてのUSB−HDD202が、USBコントローラを有するICH14に接続されている。キャッシュドライバ1820は、SSD201をHDD18およびUSB−HDD202のキャッシュデバイスとして利用するプログラムである。このプログラムは、リード及びライトを制御して応答性能を向上させる、いわゆるHDDアクセラレータとして、機能させるプログラムである。具体的には、HDDアクセラレータは、OS上で動作するドライバという位置づけで、キャッシュドライバ1820が動作する。なお、図17において、図1と同一な部位には同一符合を附し、説明を省略する。
【0082】
次に、キャッシュドライバ1820の機能について、図18を参照して説明する。図18は、図17に示す情報処理装置の主要部を示すブロック図である。S−ATAコントローラ14AにHDD18が接続されている。USBコントローラ14BにSSD201およびUSB−HDD202が接続されている。
【0083】
情報処理装置10はオペレーティングシステム(OS)110が制御し、オペレーティングシステム110からHDD18およびUSB−HDD202へのアクセスは、すべてキャッシュドライバ1820を介して行われる。キャッシュドライバ1820は、S−ATAコントローラ14AおよびUSBコントローラ14Bを、直接的または間接的に制御する。また、キャッシュドライバ1820は、メモリコントローラ12Aを介して、メインメモリ13へのデータのアクセスを行う。
【0084】
SSD201の一部または全部の領域が、HDD18およびUSB−HDD202のキャッシュとして使用される。オペレーティングシステム110は、キャッシュデータの格納領域として使用されるSSD201のキャッシュに直接アクセスすることができない。
【0085】
本情報処理装置は、HDD18およびUSB−HDD202よりアクセス速度が速いSSD(Solid State Drive)201を、HDD18およびUSB−HDD202のキャッシュとして利用することで、HDD18およびUSB−HDD202に対するアクセスの高速化を図る。
【0086】
(第5の実施形態)
上記第4の実施形態では、SSD201とUSB−HDD202とが別体の例を示したが、これに限られない。
【0087】
第5の実施形態としては、図19に示すように、SSD201とUSB−HDD202とが一つの筐体内に設けられたハイブリッドハードディスクドライブ2000にも適用が可能である。このような構成においても、上記実施形態のキャッシュ制御を用いることが可能である。
【0088】
(第6の実施形態)
また、第6の実施形態として、図20に示すように、ハイブリッドハードディスクドライブ(ハイブリッド記憶装置)内に、SSD201、HDD202の他に、制御部2101とメモリ2102を有するハイブリッドハードディスクドライブ(ハイブリッド記憶装置)2100に適用することも出来る。
【0089】
この場合、ハイブリッドハードディスクドライブ(ハイブリッド記憶装置)2100内の制御部2101が、メモリ2102を使用して、キャッシュ制御を行う。図20に示すように、メモリ2102内には、ユーザバッファ領域301、L1キャッシュ領域302、およびマージ用バッファ領域303、L1キャッシュバッファ領域304、Seq Read検出用データ306が確保される。
【0090】
(第7の実施形態)
上記第6の実施形態では、制御部2101は、ハイブリッドハードディスクドライブ(ハイブリッド記憶装置)2100に設けられたメモリ2102をHDD202のキャッシュとして用いられるとしたが、これに限られない。
【0091】
第7の実施形態としては、図21に示すように、制御部2201のキャッシュドライバは、SSD201内の一部に設けられるNVC311を、HDD18およびHDD202のキャッシュとして用いてもよい。
【0092】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0093】
10…情報処理装置、11…CPU、13…メインメモリ、14A…S−ATAコントローラ、14B…USBコントローラ、110…オペレーティングシステム、120…キャッシュドライバ(キャッシュ手段)、201…SSD、301…ユーザバッファ領域、302…L1キャッシュ領域、303…マージ用バッファ領域、304…L1キャッシュ管理情報、305…NVC管理情報、306…シーケンシャルリード検出用データ、311…NVC。
【技術分野】
【0001】
本発明の実施形態は、記憶装置をハードディスクドライブのキャッシュとして利用する情報処理装置、ハイブリッド記憶装置、およびキャッシュ方法に関する。
【背景技術】
【0002】
CPU(Central Processing Unit)の演算速度の向上に比べて、HDD(Hard Disk Drive)へのアクセス性能の向上の速度は遅い。HDDよりアクセス速度が速いフラッシュメモリを有する記憶装置をキャッシュとして利用することで、アクセス性能の向上を図ることが行われている。例えば、フラッシュメモリを有するSSD(Solid State Drive)をHDDのキャッシュとして利用するS−ATAコントローラを有するチップセットが製品化されている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特許第3585091号公報
【特許文献2】特開平7−105095号公報
【特許文献3】特開2004−70850号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
最近、ホストとHDDとの間で音楽や動画等の大きなサイズのファイルを転送することが多くなっている。このようなファイルの転送は、シーケンシャルアクセスになることが多い。シーケンシャルアクセスに対してキャッシュを行った場合に問題が発生する可能性がある。
【0005】
例えば、シーケンシャルリードアクセスの場合、2つの問題が発生する可能性がある。シーケンシャルリードされるデータは、近い将来再度リードされる確率が低く、リードされたとしても再度シーケンシャルリードされる確率が高い。シーケンシャルリードのデータをキャッシュに学習すると、再度リードされる可能性がより高いデータを追い出すことになり、キャッシュヒット率の低下につながる可能性がある。また、HDDはシーケンシャルリードの性能が高いため、データを学習する分、キャッシュを使用しないときよりも逆に性能低下する可能性がある。
【0006】
また、シーケンシャルライトアクセスの場合、アクセス性能が低下する可能性がある。一般にSSDをHDDのキャッシュとして使用する場合、HDDに対してはシーケンシャルライトであっても、SSDに対してはランダムライトとなる。そのため、SSDのランダムライト性能がHDDのシーケンシャルリードよりも低い場合、シーケンシャルライトアクセスデータをSSDに書き込むことにより、HDDにライトするよりも性能が低下してしまう可能性がある。
【0007】
本発明の目的は、記憶装置をHDDのキャッシュとして利用する場合に、アクセス性能の低下、およびキャッシュヒット率の低下を抑制することが可能な情報処理装置、ハイブリッド記憶装置、およびキャッシュ方法を提供することにある。
【課題を解決するための手段】
【0008】
実施形態によれば、情報処理装置は、判定手段と、キャッシュ手段とを具備する。判定手段は、ホストからのハードディスクドライブへのアクセス要求に対して、前記ハードディスクドライブの設定数以上の連続するセクタのデータにアクセスするかを判定する。キャッシュ手段は、記憶装置を前記ハードディスクドライブのキャッシュとして用いる。キャッシュ手段は、前記設定数以上の連続するセクタのデータにアクセスすると判定された場合に前記記憶装置をキャッシュとして用いない。
【図面の簡単な説明】
【0009】
【図1】第1の実施形態の情報処理装置の構成の一例を示すブロック図である。
【図2】第1の実施形態の情報処理装置の主要部の一例を示すブロック図である。
【図3】図2のNVCをキャッシュとして用いる場合の動作の概要を説明するための図である。
【図4】ライトスルーキャッシュを行う動作を説明するためのフローチャートである。
【図5】ライトバックキャッシュを行う動作を説明するためのフローチャートである。
【図6】一つのプログラムから1台のHDDにリードアクセスする場合の動作を示す遷移図である。
【図7】図8に示すリードアクセスの場合のシーケンシャルリード検出用データのデータの推移を示す図である。
【図8】二つのプログラムから2台のHDDにリードアクセスする場合の動作を示す遷移図である。
【図9】図8に示すリードアクセスの場合のシーケンシャルリード検出用データのデータの推移を示す図である。
【図10】第1の実施形態のシーケンシャルリードを検出する手順の一例を示すフローチャートである。
【図11】第1の実施形態のシーケンシャルリードの場合に学習を行わない動作を説明するためのフローチャートである。
【図12】第1の実施形態の変形例のシーケンシャルリード検出用データのデータの推移を示す図である。
【図13】第2の実施形態のシーケンシャルライトの場合に学習を行わない動作を説明するためのフローチャートである。
【図14】第2の実施形態のシーケンシャルライトの場合に学習を行わない動作を説明するためのフローチャートである。
【図15】第3の実施形態のシーケンシャルアクセス検出用データの一例を示すフローチャートである。
【図16】第3の実施形態のシーケンシャルアクセスを検出する手順の一例を示すフローチャートである。
【図17】第4の実施形態の情報処理装置の構成の一例を示すブロック図である。
【図18】第4の実施形態の情報処理装置の主要部の一例を示すブロック図である。
【図19】第5の実施形態の情報処理装置の構成の一例を示すブロック図である。
【図20】第6の実施形態の情報処理装置の構成の一例を示すブロック図である。
【図21】第7の実施形態の情報処理装置の構成の一例を示すブロック図である。
【発明を実施するための形態】
【0010】
以下、実施の形態について図面を参照して説明する。
【0011】
<第1の実施形態>
図1は、第1の実施形態に係る情報処理装置のシステム構成を示す図である。本実施形態の情報処理装置は、パーソナルコンピュータとして実現されている。
【0012】
図1に示すように、本情報処理装置は、CPU(Central processing unit)11、MCH(Memory controller hub)12、メインメモリ(揮発性メモリ)13、ICH(I/o controller hub)14、GPU(Graphics processing unit)15、ビデオメモリ(VRAM)15A、サウンドコントローラ16、BIOS−ROM(Read only memory)17、HDD(Hard disk drive)18、ODD(Optical disc drive)20、各種周辺機器21、EEPROM(Electrically erasable programmable ROM)22、EC/KBC(Embedded controller/keyboard controller)23等を備えている。
【0013】
CPU11は、本情報処理装置10の動作を制御するプロセッサであり、HDD18やODD20からメインメモリ13にロードされる各種プログラムを実行する。このCPU11によって実行される各種プログラムの中には、リソース管理を司るオペレーティングシステム(OS)110や、当該OS110の配下で動作する、キャッシュドライバ120および各種アプリケーションプログラム130等が存在する。キャッシュドライバ120は、後述するSSD201をキャッシュデバイスとして利用するプログラムである。このプログラムは、接続されたHDD18と他の記憶装置(例えば、SSD)とを、ホスト(例えば、PC本体)からは、一つのストレージに見せて、リード及びライトを制御して応答性能を向上させる、いわゆるHDDアクセラレータとして、機能させるプログラムである。具体的には、HDDアクセラレータは、OS上で動作するドライバという位置づけで、キャッシュドライバ120が動作する。
【0014】
また、CPU11は、BIOS−ROM17に格納されたBIOSも実行する。BIOSは、ハードウェア制御のためのプログラムである。以下では、BIOS−ROM17の格納物であるBIOS自体についてもBIOS17と表記することがある。
【0015】
MCH12は、CPU11とICH14との間を接続するブリッジとして動作すると共に、メインメモリ13をアクセス制御するメモリコントローラとして動作する。また、MCH12は、GPU15との通信を実行する機能を有している。
【0016】
GPU15は、本情報処理装置に組み込まれ、または、外部接続される表示装置を制御する表示コントローラである。GPU15は、VRAM15Aを有する。
【0017】
ICH14は、HDD18およびODD20を制御するためのATA(AT Attachment)コントローラを内蔵する。ICH14は、PCI(Peripheral component interconnect)バスに接続された各種周辺機器21の制御も行う。また、ICH14は、サウンドコントローラ16との通信機能も有している。
【0018】
サウンドコントローラ16は音源デバイスであり、各種プログラムが再生対象とするオーディオデータを、本情報処理装置に組み込まれた、または、外部接続されるスピーカ等に出力する。
【0019】
EEPROM22は、例えば本情報処理装置の個体情報や環境設定情報などを格納するためのメモリデバイスである。そして、EC/KBC23は、電力管理を行うためのエンベデッドコントローラと、キーボードやポインティングデバイス等の操作によるデータ入力を制御するためのキーボードコントローラとが集積された1チップMPU(Micro processing unit)である。
【0020】
キャッシュドライバ120は、SSD201の少なくとも一部の領域(NVC(Non-Volatile Cache))と主メモリ13の一部の領域(L1)をHDD18のキャッシュメモリとして用いる。
【0021】
次に、キャッシュドライバ120の機能について図2を参照して説明する。図2は、図1に示す情報処理装置の主要部を示すブロック図である。
【0022】
メインメモリ13内には、ユーザバッファ領域301、L1キャッシュ領域302、およびマージ用バッファ領域303が確保される。また、キャッシュドライバ120によって、L1キャッシュ管理情報304、NVC管理情報305、シーケンシャルリード検出用データ(Seq Read検出用データ)306がメモリ13内に作成される。
【0023】
L1キャッシュ領域302は、NVC311とともにHDD18のキャッシュとして使用するバッファである。L1キャッシュ領域302は、フィルタドライバがロードされるときにメインメモリに確保される。なお、L1キャッシュ領域302の容量は16MB程度である。
【0024】
また、マージ用バッファ領域303は、キャッシュの方式がライトバック(Write Back)方式の場合に使用される。マージ用バッファ領域303は、リードアクセス時に、L1キャッシュ領域302に一部のデータが格納されている場合に、HDD18から読み出されたL1キャッシュ領域302に格納されていないデータを一時的に格納するために用いられる。L1キャッシュ管理情報304は、L1キャッシュ領域302に格納されているキャッシュデータを管理するための情報である。NVC管理情報305は、NVC311に格納されているキャッシュデータを管理するための情報である。NVC管理情報305内には、複数のエントリが設定され、各エントリ内にはキャッシュデータの格納場所、キャッシュデータに対応するHDD18の格納場所、キャッシュデータとHDD18内のデータとが一致するかを示すデータ等が格納されている。シーケンシャルリード検出用データ306については後述する。
【0025】
情報処理装置10は、オペレーティングシステム(OS)110が制御する。オペレーティングシステム110からHDD18へのアクセスは、すべてキャッシュドライバ120を介して行われる。キャッシュドライバ120は、S−ATAコントローラ14AおよびUSBコントローラ14Bを直接的または間接的に制御する。S−ATAコントローラ14AにHDD18が接続されている。USBコントローラ14BにSSD201が接続されている。また、キャッシュドライバ120は、メモリコントローラ12Aを介して、メインメモリ13へのデータのアクセスを行う。
【0026】
キャッシュドライバ120、はシステムの起動時にメインメモリ13にロードされる。キャッシュドライバ120は、L1キャッシュ管理情報304を格納するための領域をメインメモリ13内に確保して初期化し、キャッシュには何も記録されていない状態にした後、キャッシュ制御処理を開始する。L1キャッシュ管理情報304は、キャッシュディレクトリなどのキャッシュデータを管理するためのデータを有する。キャッシュドライバ120の動作時、キャッシュドライバ120は、メインメモリ13内のL1キャッシュ管理情報304にライトキャッシュおよびリードキャッシュの学習データを管理するためのデータを記録する。シャットダウン時、キャッシュドライバ120は、メインメモリ13内のL1キャッシュ管理情報304を破棄する。
【0027】
なお、キャッシュドライバ120が動作を開始するまでは、BIOSプログラムがHDD18へのアクセスを制御する。S−ATAコントローラ14Aは、ホストからライトアクセス要求またはリードアクセス要求があった場合、HDD18にアクセスする。
【0028】
SSD201の一部または全部の領域がHDD18のキャッシュとして使用される。オペレーティングシステム110は、キャッシュデータの格納領域として使用されるSSD201のキャッシュに直接アクセスすることができない。
【0029】
本情報処理装置は、HDD18よりアクセス速度が速いSSD(Solid State Drive)201と、主メモリ13に確保するL1キャッシュ領域302をHDD18のキャッシュとして利用することで、HDD18に対するアクセスの高速化を図る。SSD201は、フラッシュメモリ(不揮発性メモリ)を有する。
【0030】
次に図3を参照して、NVC311をキャッシュとして用いる場合の動作の概要を説明する。
【0031】
キャッシュドライバは、401〜412の12種類のデータ転送を組み合わせ、L1キャッシュ領域302、および、NVC311をHDD18のキャッシュとして使用し、HDD18のアクセスを高速化する。
【0032】
(ライトスルーキャッシュ)
ここで、HDDへのリードアクセスに対してキャッシュを行う一般的な動作について説明する。まず、ライトスルーキャッシュと呼ばれているキャッシュ制御について、図4を参照して説明する。
【0033】
オペレーティングシステム110からHDD18へのアクセスコマンドが発行された場合、キャッシュドライバ120は、発行されたコマンドがリードコマンドであるかを判定する(ステップ501)。リードコマンドであると判定した場合(ステップ501のYes)、キャッシュドライバ120は、L1キャッシュ管理情報304およびNVC管理情報305を参照することによって、リードコマンドに対応するデータがL1キャッシュ領域302とSSD202内のNVC311内に存在するかを判定する(ステップ502)。データが存在すると判定した場合(ステップ502のYes)、L1キャッシュ領域302またはNVC311からリードコマンドに対応するデータを読み出す(ステップ503)。データが存在しないと判定した場合、キャッシュドライバ120は、HDD18からリードコマンドに対応するデータをL1キャッシュ領域302に読み出し、ユーザバッファ領域301に渡す(ステップ504)。そして、キャッシュドライバ120は、HDD18から読み出されたデータを、キャッシュデータとしてL1キャッシュ領域302からNVC311に書き込み、データを学習する(ステップ505)。
【0034】
ステップ501において、リードコマンドではない(つまり、ライトコマンドである)と判定した場合(ステップ501のNo)、ライトコマンドに対応するアドレスのデータがL1キャッシュ領域302とSSD202内のNVC311内に存在するかを判定する(ステップ506)。データがL1キャッシュ領域302またはNVC311内に存在すると判定した場合(ステップ506のYes)、L1キャッシュ領域302またはNVC311内に存在するキャッシュデータを書き換えると共に、ライトコマンドに対応するデータをHDD18に書き込む(ステップ507)。データがL1キャッシュ領域302とNVC311内に存在しないと判定した場合(ステップ506のNo)、ライトコマンドに対応するデータをHDD18に書き込む(ステップ508)。
以上説明したリードアクセスを学習する場合のキャッシュドライバの動作において、
リードアクセスが、音楽や動画等のように、データ容量が極端に大きいデータについてのリードアクセスの場合は、リード動作が連続する。このようにリード動作を、以下、シーケンシャルリードとして、説明する。シーケンシャルリードの場合、性能とキャッシュヒット率の2つの問題が発生する可能性がある。シーケンシャルリードされるデータは、連続してデータのリードが継続するため、近い将来再度リードされる確率が低く、リードされたとしても再度シーケンシャルリードされる確率が高い。もし、シーケンシャルリードのデータをNVC311に学習すると、データ量が大量になるため、それまでにキャッシュデータとしてNVC311に学習された、再度リードされる可能性がより高いデータを追い出すことになる。このため、キャッシュヒット率の低下につながる(キャッシュヒット率の問題)。一方、一般的にHDD18は、シーケンシャルリードの性能が高いため、NVC311に学習する分、キャッシュを使用しないときよりも逆に性能低下する可能性がある。また、SSD201のリード性能がHDD18のシーケンシャルリード性能と同等以下の場合は、データが近い将来再度リードされてキャッシュにヒットしたとしてもキャッシュの効果は期待できない(性能問題)。
【0035】
(ライトバックキャッシュ)
また、HDDへのリードアクセスに対してキャッシュを行う一般的な動作の別の制御方法として、ライトバックキャッシュ方式がある。ライトバックキュッシュ方式の動作について図5を参照して説明する。
【0036】
ステップ501〜ステップ505は、図4で説明したリードのキャッシュ動作と同様なので説明を省略する。ステップ501において、リードコマンドではない(つまり、ライトコマンドである)と判定した場合(ステップ501のNo)、ライトコマンドに対応するアドレスのデータが、SSD202のNVC311内に存在するかを判定する(ステップ1306)。データがNVC311内に存在すると判定した場合(ステップ1306のYes)、キャッシュドライバ120は、NVC311内に存在するデータを書き換える(ステップ1307)。データがNVC311内に存在しないと判定した場合(ステップ1306のNo)、キャッシュドライバ120は、NVC管理情報305からエントリを見つける(ステップ1308)。キャッシュドライバ120は、見つけたNVC311のエントリに対応するアドレスにデータを書き込む(ステップ1309)。
【0037】
以上説明したライトバック動作では、ライトされるデータがシーケンシャルライトの場合、ライト性能が悪化する可能性がある。SSD201のランダムライト性能がHDD18のシーケンシャルリードよりも遅い場合、SSD201に対してシーケンシャルライトすることにより、HDD18に直接書き込むよりも性能が低下してしまう。これは、HDD18に対するシーケンシャルライトであっても、SSD201に対してはランダムライトとなるからである。
【0038】
<シーケンシャルアクセスの判定方法>
このような、シーケンシャルアクセスにおける問題を解決するため、本実施の形態のキャッシュドライバ120は、リードアクセスがシーケンシャルリードであるかを判定するために、シーケンシャルリード検出用データ306を使用する。シーケンシャルリード検出用データ306は、データはn行のテーブルである。行数nはあらかじめ決められているか、キャッシュドライバ120の起動時にパラメータとして与えられる。各行は、LRUカウンタ(LRUC)、HDD識別番号(HDD)、次のLBA(Next LBA)(セクタ番号)、これまでにリードしたセクタ数(Size)から構成される。LRUカウンタは最も過去に使用(更新)された行を見つけるためのカウンタで、n行の時0〜n−1の値を取る。0の値が最も最近使用された行、n−1の値が最も過去に使用された行である。これにより、過去nプロセスのシーケンシャルリードを検出することができる。
【0039】
本実施形態の場合、n行のテーブルを用いてシーケンシャルリードであるかを判定している。まず、図6に示すような、あるプログラムAから1台のHDD(HDD識別番号=1)にアクセスする場合の動作について説明する。そして、図6に示すリードアクセスがあった場合のシーケンシャルリード検出用データ306(n=1)内の値の推移を図7を参照して説明する。シーケンシャルリードかどうかの閾値、すなわちシーケンシャルリード検出サイズは400hとする。
【0040】
先ず、プログラムAの動作によりCPU11がHDDに対し、アドレスが0100h(“h”は16進数であることを示すために添付されている)からセクタ数が80hのデータにリードアクセスするためのコマンドを発行する(ステップ801)。キャッシュドライバ120は、シーケンシャルリード検出用データ306Aを生成する。シーケンシャルリード検出用データ306Aにおいて、HDD識別番号は1であり、Next LBAは180h、サイズは80hである。
【0041】
要求されたデータがHDDから読み出された後、プログラムAの動作によりCPU11がHDDに対し、アドレスが0180hからセクタ数が80hのデータにリードアクセスするためのコマンドを発行する(ステップ802)。キャッシュドライバ120は、シーケンシャルリード検出用データ306Bを生成する。シーケンシャルリード検出用データ306Bにおいて、HDD識別番号は1であり、Next LBAは200h、サイズは100hである。
【0042】
プログラムAの動作により、CPU11は、リードアクセスが終了するたびに連続するサイズが80hのデータのリードアクセスにアクセスするためのコマンドを発行する。要求されたデータがHDDから読み出された後、プログラムAの動作によりCPU11がHDDに対し、アドレスが0500hからセクタ数が80hのデータにリードアクセスするためのコマンドを発行する(ステップ803)。キャッシュドライバ120は、シーケンシャルリード検出用データ306Cを生成する。シーケンシャルリード検出用データ306Cにおいて、HDD識別番号は1であり、Next LBAは500h、サイズは400hである。
【0043】
要求されたデータがHDDから読み出された後、、プログラムAの動作によりCPU11が、HDDに対してアドレスが0500hからセクタ数が80hのデータにリードアクセスするためのコマンドを発行する(ステップ804)。キャッシュドライバ120は、シーケンシャルリード検出用データ306Dを生成する。シーケンシャルリード検出用データ306Dにおいて、HDD識別番号は1であり、Next LBAは500hである。図10に示すフローチャートのステップ605において算出されるサイズは480hである。そして、10に示すフローチャートのステップ606において、サイズ(480h)がシーケンシャルリード検出サイズより大きいと判断される。このため、図11のフローチャートのステップ702においてシーケンシャルリードであると判定されるので、リードアクセスされたデータの学習を行わななくなる。
【0044】
次に、図8に示すような、プログラムAの動作によりCPU11が1台のHDD_1(HDD識別番号=1)にアクセスし、プログラムBの動作によりCPU11が1台のHDD_2(HDD識別番号=2)にアクセスする場合の動作について説明する。そして、図8に示すリードアクセスがあった場合のシーケンシャルリード検出用データ(n=1)内の値の推移を図9を参照して説明する。なお、シーケンシャルリード検出サイズは400hとする。
【0045】
先ず、プログラムAの動作によりCPU11が、HDD_1に対してアドレスが0100hからセクタ数が80hのデータにリードアクセスするためのコマンドを発行する(ステップ1001)。キャッシュドライバ120は、シーケンシャルリード検出用データ1101を生成する。シーケンシャルリード検出用データ1101において、HDD識別番号は1であり、Next LBAは180h、サイズは80hである。
【0046】
要求されたデータがHDDから読み出された後、プログラムAの動作によりCPU11が、HDD_1に対してアドレスが0180hからセクタ数が80hのデータにリードアクセスするためのコマンドを発行する(ステップ1002)。キャッシュドライバ120は、シーケンシャルリード検出用データ1102を生成する。シーケンシャルリード検出用データ1102において、HDD識別番号は1であり、Next LBAは200h、サイズは100hである。
【0047】
要求されたデータがHDDから読み出された後、プログラムBの動作によりCPU11が、HDD_2に対してアドレスが1000hからセクタ数が80hのデータにリードアクセスするためのコマンドを発行する(ステップ1003)。キャッシュドライバ120は、シーケンシャルリード検出用データ1103を生成する。シーケンシャルリード検出用データ1103において、HDD識別番号は2であり、Next LBAは1000h、サイズは80hである。
【0048】
プログラムAの動作によりCPU11が、HDD_1に対してアドレスが0200hからセクタ数が80hのデータにリードアクセスするためのコマンドを発行する(ステップ1004)。キャッシュドライバ120は、シーケンシャルリード検出用データ1104を生成する。シーケンシャルリード検出用データ1104において、HDD識別番号は1であり、Next LBAは280、サイズは80hである。
【0049】
キャッシュドライバ120のシーケンシャルリードを検出する手順の一例について、図10のフローチャートを参照して説明する。このフローでは、リードコマンドのHDD識別子、LBA(セクタ番号)、セクタ数が入力として与えられ、True(シーケンシャルリード)またはFalse(非シーケンシャルリード)を出力として返す。シーケンシャルリード検出サイズはあらかじめ決められているか、ドライバ起動時にパラメータとして与えられる(たとえば16MB)。
【0050】
キャッシュドライバ120は、シーケンシャルリード検出用データ306の中からリードアクセスが発行されたHDD識別番号と次のLBA(セクタ番号)とが一致する行を探す(ステップ601)。一致する行があった場合(ステップ602のYes)、キャッシュドライバ120は、次のLBA(セクタ番号)の値に今回のアクセスサイズ(セクタ数)を加える(ステップ603)。キャッシュドライバ120は、一致した行のLRUカウンタの値を0にし、その他の行のLRUカウンタの値を+1加算する(ステップ604)。そして、キャッシュドライバ120は、現在のSizeの値に今回のアクセスサイズ(セクタ数)を加えたサイズを算出する(ステップ605)。キャッシュドライバ120は、算出されたサイズがあらかじめ設定されたしきい値であるシーケンシャルリード検出サイズより大きいかを判定する(ステップ606)。シーケンシャルリード検出サイズより大きいと判定した場合(ステップ606のYes)、キャッシュドライバ120は、True(シーケンシャルリード)を出力として返す。シーケンシャルリード検出サイズより大きくないと判定した場合(ステップ606のNo)、キャッシュドライバ120は、現在のサイズの値を算出されたサイズの値に更新する(ステップ607)。そして、キャッシュドライバ120は、False(非シーケンシャルリード)を出力として返す。
【0051】
リードアクセスが発行されたHDD識別番号と次のLBA(セクタ番号)とが一致する行がなかった場合(ステップ602のNo)、キャッシュドライバ120は、LRUカウンタの値が最も多い行を検出する(ステップ608)。キャッシュドライバ120は、検出された行のHDD識別番号にリードアクセスされたHDDに対応する値をセットし、Next LBAの値に今回のLBA(セクタ番号)とセクタ数との和をセットし、Sizeの値に今回のアクセスサイズ(セクタ数)をセットする(ステップ609)。そして、キャッシュドライバ120は、ステップ608において検出された行の行のLRUカウンタの値を0にし、その他の行のLRUカウンタの値を+1加算する(ステップ610)。そして、キャッシュドライバ120は、False(非シーケンシャルリード)を出力として返す。
【0052】
<シーケンシャルリードを検出後に学習を抑止する動作の説明>
図11のフローチャートを参照して、シーケンシャルリードを検出した後に学習を抑止する機能を有するキャッシュドライバ120の動作例を説明する。
【0053】
HDD18に対するアクセスコマンドが発行された場合、キャッシュドライバ120は、当該コマンドがリードコマンドであるかを判定する(ステップ701)。リードコマンドであると判定された場合(ステップ701のYes)、キャッシュドライバ120は、上記説明した図10の動作フローにより、リードコマンドがシーケンシャルリードであるかを判定する(ステップ702)。シーケンシャルリードであると判定した場合(ステップ702のYes)、キャッシュドライバ120は、HDD18からデータを読み出す(ステップ703)。一方、シーケンシャルリードではないと判定した場合(ステップ702のNo)、キャッシュドライバ120は、リードコマンドに対応するデータがNVC311内に存在するかを判定する(ステップ704)。もし、データがNVC311内に存在すると判定した場合(ステップ704のYes)は、キャッシュドライバ120は、NVC311からデータを読み出す(ステップ705)。データがNVC311内に存在しないと判定した場合(ステップ704のNo)、キャッシュドライバ120は、HDD18からデータを読み出す(ステップ706)。そして、キャッシュドライバ120は、読み出したデータをNVC311に書き出し、HDD18から読み出されたデータを学習する(ステップ707)。
【0054】
ステップ701において、リードコマンドではない(ライトコマンドである)と判定した場合(ステップ701のNo)、ライトコマンドに対応するアドレスのデータがNVC内に存在するかを判定する(ステップ708)。データがNVC311内に存在すると判定した場合(ステップ708のYes)は、NVC311内に存在するデータを書き換えると共に、ライトコマンドに対応するデータをHDD18に書き込む(ステップ709)。もし、データがNVC311内に存在しないと判定した場合(ステップ708のNo)、ライトコマンドに対応するデータをHDD18に書き込む(ステップ710)。
【0055】
以上の動作で、シーケンシャルリードを検出した後に、リードアクセスされたデータを学習しないようになり、性能の低下、およびキャッシュヒット率の低下を抑制することが可能になる。
【0056】
(第1の実施形態の変形例)
プログラムAがシーケンシャルリードを行っていても、プログラムAのリードアクセスの間に、別のブログラムBがリードアクセスを行うと、サイズがリセットされるので、シーケンシャルリードを検出することが困難になる。ところが、シーケンシャルリード検出用データが2行のテーブルを有すると、二つのプログラムからリードアクセスが行われても、シーケンシャルリードを検出することが可能になる。
【0057】
次に、第1の実施の形態の変形例として、シーケンシャルリード検出用データが2行のテーブルである形態の遷移を、図12を用いて説明する。
【0058】
図8に示すリードアクセスがあった場合のシーケンシャルリード検出用データ306(n=2)内の値の推移を図12を参照して説明する。
【0059】
先ず、プログラムAの動作によりCPU11が、HDD_1に対してアドレスが0100hからセクタ数が80hのデータにリードアクセスするためのコマンドを発行する(ステップ1001)。キャッシュドライバ120は、シーケンシャルリード検出用データ1201を生成する。シーケンシャルリード検出用データ1201において、LRUCの値が1の行のHDD識別番号は1であり、Next LBAは180h、サイズは80hである。
【0060】
要求されたデータがHDDから読み出された後、プログラムAの動作によりCPU11が、HDD_1に対してアドレスが0180hからセクタ数が80hのデータにリードアクセスするためのコマンドを発行する(ステップ1002)。キャッシュドライバ120は、シーケンシャルリード検出用データ1202を生成する。シーケンシャルリード検出用データ1202において、LRUCの値が1の行のHDD識別番号は1であり、Next LBAは200h、サイズは100hである。
【0061】
要求されたデータがHDDから読み出された後、プログラムBの動作によりCPU11が、HDD_2に対してアドレスが1000hからセクタ数が80hのデータにリードアクセスするためのコマンドを発行する(ステップ1003)。キャッシュドライバ120は、シーケンシャルリード検出用データ1203を生成する。シーケンシャルリード検出用データ1203において、LRUCの値が1の行のHDD識別番号は2であり、Next LBAは1000h、サイズは80hである。また、シーケンシャルリード検出用データ1203において、LRUCの値が2の行のHDD識別番号は1であり、Next LBAは200h、サイズは100hである。
【0062】
プログラムAの動作によりCPU11が、HDD_1に対してアドレスが0200hからセクタ数が80hのデータにリードアクセスするためのコマンドを発行する(ステップ1004)。キャッシュドライバ120は、シーケンシャルリード検出用データ1204を生成する。シーケンシャルリード検出用データ1204において、LRUCの値が1の行のHDD識別番号は1であり、Next LBAは280、サイズは180hである。シーケンシャルリード検出用データ1204において、LRUCの値が2の行のHDD識別番号は2であり、Next LBAは1000h、サイズは80hである。
【0063】
このように、プログラムAのリードアクセスの間にプログラムBがリードアクセスを行っても、プログラムAのリードアクセスによるサイズの値がリセットされずに、更新されるので、プログラムAによるシーケンシャルリードアクセスを検出することが可能になる。
【0064】
<第2の実施形態>
次に、シーケンシャルライトを検出したときに、キャッシュへの学習を抑止する実施形態を第2の実施形態として、説明する。シーケンシャルライトの場合に学習を行わない場合の動作について図13および図14を参照して説明する。
【0065】
なお、シーケンシャルライトの検出は、図10を参照して説明したシーケンシャルリードの検出と同様である。なお、キャッシュドライバ120は、シーケンシャルリード検出用データ306とは別のシーケンシャルライト検出用データを管理する。
【0066】
オペレーティングシステム110からHDD18へのアクセスコマンドが発行された場合、キャッシュドライバ120は、コマンドがリードコマンドであるかを判定する(ステップ1401)。リードコマンドであると判定した場合(ステップ1401のYes)、キャッシュドライバ120は、NVC管理情報305を参照することによって、リードコマンドに対応するデータがNVC311内に存在するかを判定する(ステップ1402)。データが存在すると判定した場合(ステップ1402のYes)、キャッシュドライバ120は、NVC管理情報305を参照することによって、リードコマンドに対応するNVC311内のデータと、リードコマンドに対応するHDD18内のデータとが一致するか、つまりHDD18内のデータがダーティーであるかを判定する(ステップ1403)。ダーティーであると判定した場合(ステップ1403のYes)、キャッシュドライバ120は、NVC311からリードコマンドに対応するデータを読み出す(ステップ1404)。
【0067】
データが存在しないと判定した場合(ステップ1402のNo)、またはダーティーではないと判定した場合(ステップ1403のNo)、キャッシュドライバ120は、リードアクセスがシーケンシャルリードであるかを判定する(ステップ1405)。シーケンシャルリードであると判定した場合(ステップ1405のYes)、キャッシュドライバ120は、リードコマンドに対応するデータをHDD18から読み出す(ステップ1406)。シーケンシャルリードではないと判定した場合(ステップ1405のNo)、キャッシュドライバ120は、NVC管理情報305を参照することによって、リードコマンドに対応するデータがNVC311内に存在するかを判定する(ステップ1407)。データが存在すると判定した場合(ステップ1402のYes)、キャッシュドライバ120は、NVC311からリードコマンドに対応するデータを読み出す(ステップ1408)。データが存在しないと判定した場合(ステップ1402のNo)、キャッシュドライバ120は、リードコマンドに対応するデータをHDD18から読み出す(ステップ1409)。キャッシュドライバ120は、HDD18から読み出されたデータをNVC311に書き出し、データの学習を行う(ステップ1410)。
【0068】
ステップ1401において、リードコマンドではない、すなわちライトコマンドであると判定した場合(ステップ1401のNo)、キャッシュドライバ120は、NVC管理情報305を参照することによって、ライトアクセスがシーケンシャルライトであるかを判定する(ステップ1411)。
【0069】
シーケンシャルライトであると判定した場合に(ステップS1411のYes)、ライトコマンドに対応するアドレスのデータがNVC311に格納されているかを判定する(ステップ1412)。データが格納されていると判定した場合(ステップ1412のYes)、キャッシュドライバ120は、NVC311に格納されているデータを無効化する、またはNVC311に書き込まれているデータを上書きする(ステップ1413)。そして、キャッシュドライバ120は、データをHDD18に書き込む(ステップ1414)。
【0070】
ステップ1412において、データが存在しないと判定した場合(ステップ1412のNo)、キャッシュドライバ120は、データをHDD18に書き込む(ステップ1415)。
【0071】
ステップ1411において、シーケンシャルライトではないと判定した場合(ステップ1411のNo)、ライトコマンドに対応するアドレスのデータがNVC311内に存在するかを判定する(ステップ1416)。データがNVC311内に存在すると判定した場合(ステップ1416のYes)、キャッシュドライバ120は、NVC311内に存在するデータを書き換える(ステップ1417)。データがNVC311内に存在しないと判定した場合(ステップ1416のNo)、キャッシュドライバ120は、NVC管理情報305からエントリを見つける(ステップ1418)。キャッシュドライバ120は、見つけたNVC311のエントリに対応するアドレスにデータを書き込む(ステップ1419)。
【0072】
以上の処理で、シーケンシャルライトアクセスの場合にNVC311をHDD18のライトバックキャッシュとして使用している場合、学習を行わないことでシーケンシャルライトの性能の低下を抑制することが可能になる。
【0073】
(第3の実施形態)
先に説明した、第1の実施形態と第2の実施形態は、シーケンシャルリード検出用データとシーケンシャルライト検出用データとをそれぞれ設けて、シーケンシャルリードとシーケンシャルライトとを検出した。第3の実施形態として、HDD毎にシーケンシャルアクセス検出用データを設け、シーケンシャルアクセス検出用データに基づいてシーケンシャルリードとシーケンシャルライトとを検出する例について説明する。
【0074】
キャッシュドライバ120は、図15に示すように、HDD_1用のシーケンシャルアクセス検出用データ1601と、HDD_2用のシーケンシャルアクセス検出用データ1602とを管理する。シーケンシャルアクセス検出用データ1601、1602は、図165に示すように、2行のデータの配列を有する。
【0075】
キャッシュドライバ120のシーケンシャルアクセスを検出する手順の一例について図16のフローチャートを参照して説明する。このフローでは、アクセスコマンドのHDD識別子、LBA(セクタ番号)、セクタ数が入力として与えられ、True(シーケンシャルアクセス)またはFalse(非シーケンシャルアクセス)を出力として返す。シーケンシャルアクセス検出サイズはあらかじめ決められているか、ドライバ起動時にパラメータとして与えられる(たとえば16MB)。
【0076】
キャッシュドライバ120は、シーケンシャルアクセス検出用データ1601、1602の内のアクセスコマンドが発行されたされたHDDに対応するシーケンシャルアクセス検出用データから次のLBA(セクタ番号)とが一致する行を探す(ステップ1701)。一致する行があった場合(ステップ1702のYes)、キャッシュドライバ120は、次のLBA(セクタ番号)の値に今回のアクセスサイズ(セクタ数)を加える(ステップ1703)。キャッシュドライバ120は、一致した行のLRUカウンタの値を0にし、その他の行のLRUカウンタの値を+1加算する(ステップ1704)。そして、キャッシュドライバ120は、現在のSizeの値に今回のアクセスサイズ(セクタ数)を加えたサイズを算出する(ステップ1705)。キャッシュドライバ120は、算出されたサイズがあらかじめ設定されたしきい値であるシーケンシャルアクセス検出サイズより大きいかを判定する(ステップ1706)。シーケンシャルアクセス検出サイズより大きいと判定した場合(ステップ1706のYes)、キャッシュドライバ120は、True(シーケンシャルアクセス)を出力として返す。シーケンシャルアクセス検出サイズより大きくないと判定した場合(ステップ1706のNo)、キャッシュドライバ120は、現在のサイズの値を算出されたサイズの値に更新する(ステップ1707)。そして、キャッシュドライバ120は、False(非シーケンシャルアクセス)を出力として返す。
【0077】
アクセスが発行されたHDD識別番号と次のLBA(セクタ番号)とが一致する行がなかった場合(ステップ1702のNo)、キャッシュドライバ120は、LRUカウンタの値が最も多い行を検出する(ステップ1708)。キャッシュドライバ120は、検出された行のHDD識別番号にアクセスされたHDDに対応する値をセットし、Next LBAの値に今回のLBA(セクタ番号)とセクタ数との和をセットし、Sizeの値に今回のアクセスサイズ(セクタ数)をセットする(ステップ1709)。そして、キャッシュドライバ120は、ステップ1708において検出された行の行のLRUカウンタの値を0にし、その他の行のLRUカウンタの値を+1加算する(ステップ1710)。そして、キャッシュドライバ120は、False(非シーケンシャルアクセス)を出力として返す。
【0078】
なお、シーケンシャルアクセス検出用データ1601、1602は、1行のデータの配列を有していても良い。
【0079】
なお、本実施形態のSSD201を、HDD18のキャッシュとして用いる処理はコンピュータプログラムによって実現されているので、このコンピュータプログラムをコンピュータ読み取り可能な記憶媒体を通じて通常のコンピュータにインストールするだけで、本実施形態と同様の効果を容易に実現することができる。また、このコンピュータプログラムは、パーソナルコンピュータのみならず、プロセッサを内蔵した電子機器上で実行することができる。
【0080】
(第4の実施形態)
上記実施形態では、SSD201を内蔵のHDD18のキャッシュ(リードキャッシュ、ライトバックキャッシュ)として用いていた。しかし、SSD201をUSBやeS−ATA等の外部機器接続バスに接続された外部記憶装置のキャッシュ(リードキャッシュ、ライトバックキャッシュ)として用いても良い。つまり、SSD201は、HDD18と外部記憶装置のキャッシュとして用いられる。
【0081】
外部記憶装置としてUSB−HDDを用いた例を図17に示す。図17に示すように、外部記憶装置としてのUSB−HDD202が、USBコントローラを有するICH14に接続されている。キャッシュドライバ1820は、SSD201をHDD18およびUSB−HDD202のキャッシュデバイスとして利用するプログラムである。このプログラムは、リード及びライトを制御して応答性能を向上させる、いわゆるHDDアクセラレータとして、機能させるプログラムである。具体的には、HDDアクセラレータは、OS上で動作するドライバという位置づけで、キャッシュドライバ1820が動作する。なお、図17において、図1と同一な部位には同一符合を附し、説明を省略する。
【0082】
次に、キャッシュドライバ1820の機能について、図18を参照して説明する。図18は、図17に示す情報処理装置の主要部を示すブロック図である。S−ATAコントローラ14AにHDD18が接続されている。USBコントローラ14BにSSD201およびUSB−HDD202が接続されている。
【0083】
情報処理装置10はオペレーティングシステム(OS)110が制御し、オペレーティングシステム110からHDD18およびUSB−HDD202へのアクセスは、すべてキャッシュドライバ1820を介して行われる。キャッシュドライバ1820は、S−ATAコントローラ14AおよびUSBコントローラ14Bを、直接的または間接的に制御する。また、キャッシュドライバ1820は、メモリコントローラ12Aを介して、メインメモリ13へのデータのアクセスを行う。
【0084】
SSD201の一部または全部の領域が、HDD18およびUSB−HDD202のキャッシュとして使用される。オペレーティングシステム110は、キャッシュデータの格納領域として使用されるSSD201のキャッシュに直接アクセスすることができない。
【0085】
本情報処理装置は、HDD18およびUSB−HDD202よりアクセス速度が速いSSD(Solid State Drive)201を、HDD18およびUSB−HDD202のキャッシュとして利用することで、HDD18およびUSB−HDD202に対するアクセスの高速化を図る。
【0086】
(第5の実施形態)
上記第4の実施形態では、SSD201とUSB−HDD202とが別体の例を示したが、これに限られない。
【0087】
第5の実施形態としては、図19に示すように、SSD201とUSB−HDD202とが一つの筐体内に設けられたハイブリッドハードディスクドライブ2000にも適用が可能である。このような構成においても、上記実施形態のキャッシュ制御を用いることが可能である。
【0088】
(第6の実施形態)
また、第6の実施形態として、図20に示すように、ハイブリッドハードディスクドライブ(ハイブリッド記憶装置)内に、SSD201、HDD202の他に、制御部2101とメモリ2102を有するハイブリッドハードディスクドライブ(ハイブリッド記憶装置)2100に適用することも出来る。
【0089】
この場合、ハイブリッドハードディスクドライブ(ハイブリッド記憶装置)2100内の制御部2101が、メモリ2102を使用して、キャッシュ制御を行う。図20に示すように、メモリ2102内には、ユーザバッファ領域301、L1キャッシュ領域302、およびマージ用バッファ領域303、L1キャッシュバッファ領域304、Seq Read検出用データ306が確保される。
【0090】
(第7の実施形態)
上記第6の実施形態では、制御部2101は、ハイブリッドハードディスクドライブ(ハイブリッド記憶装置)2100に設けられたメモリ2102をHDD202のキャッシュとして用いられるとしたが、これに限られない。
【0091】
第7の実施形態としては、図21に示すように、制御部2201のキャッシュドライバは、SSD201内の一部に設けられるNVC311を、HDD18およびHDD202のキャッシュとして用いてもよい。
【0092】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0093】
10…情報処理装置、11…CPU、13…メインメモリ、14A…S−ATAコントローラ、14B…USBコントローラ、110…オペレーティングシステム、120…キャッシュドライバ(キャッシュ手段)、201…SSD、301…ユーザバッファ領域、302…L1キャッシュ領域、303…マージ用バッファ領域、304…L1キャッシュ管理情報、305…NVC管理情報、306…シーケンシャルリード検出用データ、311…NVC。
【特許請求の範囲】
【請求項1】
ホストからのハードディスクドライブへのアクセス要求に対して、前記ハードディスクドライブの設定数以上の連続するセクタのデータにアクセスするかを判定する判定手段と、
記憶装置を前記ハードディスクドライブのキャッシュとして用いるキャッシュ手段であって、前記設定数以上の連続するセクタのデータにアクセスすると判定された場合に前記記憶装置をキャッシュとして用いない、キャッシュ手段と、
を具備する情報処理装置。
【請求項2】
前記記憶装置は、フラッシュメモリを有する請求項1に記載の情報処理装置。
【請求項3】
前記判定手段は、前記ハードディスクドライブへの第1のアクセスコマンドに含まれる最初のセクタ番号とセクタ数に基づいて、連続してアクセスされた最後のセクタ番号の次のセクタ番号と連続してアクセスされたセクタ数とを有する管理データを管理し、
前記判定手段は、前記第1のアクセスコマンドの次に、前記次のセクタ番号にアクセスするための第2のアクセスコマンドが発行された場合に、前記第2のアクセスコマンドに基づいて前記管理データ内の前記セクタ番号と前記セクタ数とを更新し、
前記判定手段は、前記第1のアクセスコマンドの次に、前記次のセクタ番号と異なるセクタ番号からのデータにアクセスするための第3のアクセスコマンドが発行された場合に、前記第3のアクセスコマンドに基づいて前記管理データ内の前記セクタ番号と前記セクタ数とを更新し、
前記判定手段は、前記管理データに基づいて、前記ハードディスクドライブの前記設定数以上の連続するセクタのデータにアクセスしているかを判定する
請求項1に記載の情報処理装置。
【請求項4】
前記管理データは、前記次のセクタ番号および前記セクタ数の、所定の数の複数の組み合わせを有し、
前記判定手段は、前記ハードディスクドライブへの第4のアクセスコマンドに含まれる最初のセクタ番号が前記管理データ内にない場合に、前記管理データ内の最も過去に更新された前記次のセクタ番号および前記セクタ数の組み合わせを削除し、前記第4のアクセスコマンドに含まれる最初のセクタ番号とセクタ数に基づいて、連続してアクセスされた最後のセクタ番号の次のセクタ番号と連続してアクセスされたセクタ数とを前記管理データに追加する、
請求項3に記載の情報処理装置。
【請求項5】
前記ハードディスクドライブへのアクセスがライトアクセスであり、前記ハードディスクドライブのセクタ番号が連続する複数のセクタに第1のデータを書き込む場合、
前記キャッシュ手段は、前記記憶装置に前記ライトアクセスされる前記複数のセクタ内の第1のセクタに格納されている第2のデータが前記記憶装置にキャッシュされているかを判定し、
前記第2のデータが前記記憶装置にキャッシュされていると判定した場合、前記記憶装置にキャッシュされている前記第2のデータをキャッシュデータとして利用できないようにし、前記複数のセクタに前記第1のデータを書き込む
請求項1に記載の情報処理装置。
【請求項6】
前記ハードディスクドライブへのアクセスがライトアクセスであり、前記ハードディスクドライブの連続する複数のセクタに第1のデータを書き込む場合、
前記キャッシュ手段は、前記複数のセクタ内の第1のセクタに格納されている第2のデータのキャッシュデータである第3のデータが前記記憶装置に格納されているかを判定し、
前記第3のデータが前記記憶装置に格納されていると判定した場合、前記ライトアクセスによって前記第1のセクタに書き込まれる第4のデータによって前記第3のデータを上書きし、前記第1のデータから前記第4のデータを除いたデータを前記複数のセクタから第1のセクタを除いたセクタに書き込む、
請求項1に記載の情報処理装置。
【請求項7】
ハードディスクドライブと記憶装置とを有する、ハイブリッド記憶装置において、
ホストからの前記ハードディスクドライブへのアクセス要求に対して、前記ハードディスクドライブの設定数以上の連続するセクタのデータにアクセスするかを判定する判定手段と、
前記記憶装置を前記ハードディスクドライブのキャッシュとして用いるキャッシュ手段であって、前記設定数以上の連続するセクタのデータにアクセスすると判定された場合に前記記憶装置をキャッシュとして用いない、キャッシュ手段と、
を具備するハイブリッド記憶装置。
【請求項8】
前記記憶装置は、フラッシュメモリを有する請求項7に記載のハイブリッド記憶装置。
【請求項9】
前記判定手段は、前記ハードディスクドライブへの第1のアクセスコマンドに含まれる最初のセクタ番号とセクタ数に基づいて、連続してアクセスされた最後のセクタ番号の次のセクタ番号と連続してアクセスされたセクタ数とを有する管理データを管理し、
前記判定手段は、前記第1のアクセスコマンドの次に、前記次のセクタ番号にアクセスするための第2のアクセスコマンドが発行された場合に、前記第2のアクセスコマンドに基づいて前記管理データ内の前記セクタ番号と前記セクタ数とを更新し、
前記判定手段は、前記第1のアクセスコマンドの次に、前記次のセクタ番号と異なるセクタ番号からのデータにアクセスするための第3のアクセスコマンドが発行された場合に、前記第3のアクセスコマンドに基づいて前記管理データ内の前記セクタ番号と前記セクタ数とを更新し、
前記判定手段は、前記管理データに基づいて、前記ハードディスクドライブの前記設定数以上の連続するセクタのデータにアクセスしているかを判定する
請求項7に記載のハイブリッド記憶装置。
【請求項10】
前記管理データは、前記次のセクタ番号および前記セクタ数の、所定の数の複数の組み合わせを有し、
前記判定手段は、前記ハードディスクドライブへの第4のアクセスコマンドに含まれる最初のセクタ番号が前記管理データ内にない場合に、前記管理データ内の最も過去に更新された前記次のセクタ番号および前記セクタ数の組み合わせを削除し、前記第4のアクセスコマンドに含まれる最初のセクタ番号とセクタ数に基づいて、連続してアクセスされた最後のセクタ番号の次のセクタ番号と連続してアクセスされたセクタ数とを前記管理データに追加する、
請求項9に記載のハイブリッド記憶装置。
【請求項11】
前記ハードディスクドライブへのアクセスがライトアクセスであり、前記ハードディスクドライブの連続する複数のセクタに第1のデータを書き込む場合、
前記キャッシュ手段は、前記記憶装置に前記ライトアクセスされる前記複数のセクタ内の第1のセクタに格納されている第2のデータのキャッシュデータである第3のデータが前記記憶装置に格納されているかを判定し、
前記第3のデータが前記記憶装置に格納されていると判定した場合、前記第3のデータをキャッシュデータとして利用できないようにし、前記複数のセクタに前記第1のデータを書き込む
請求項7に記載のハイブリッド記憶装置。
【請求項12】
前記ハードディスクドライブへのアクセスがライトアクセスであり、前記ハードディスクドライブの連続する複数のセクタに第1のデータを書き込む場合、
前記キャッシュ手段は、前記記憶装置に前記ライトアクセスされる前記複数のセクタ内の第1のセクタに格納されている第2のデータのキャッシュデータである第3のデータが前記記憶装置に格納されているかを判定し、
前記第3のデータが前記記憶装置に格納されていると判定した場合、前記第3のデータを前記ライトアクセスによって前記第1のセクタに書き込まれる第4のデータによって上書きし、前記第1のデータから前記第4のデータを除いたデータを前記複数のセクタから前記第1のセクタを除いたセクタに書き込む、
請求項7に記載のハイブリッド記憶装置。
【請求項13】
記憶装置をハードディスクドライブのキャッシュとして用いるキャッシュ方法であって、
ホストからのハードディスクドライブへのアクセス要求に対して、前記ハードディスクドライブの設定数以上の連続するセクタのデータにアクセスするかを判定し、
前記設定数以上の連続するセクタのデータにアクセスすると判定された場合に前記記憶装置をキャッシュとして用いない、
キャッシュ方法。
【請求項14】
前記記憶装置は、フラッシュメモリを有する請求項13に記載のキャッシュ方法。
【請求項15】
前記判定は、
前記ハードディスクドライブへの第1のアクセスコマンドに含まれる最初のセクタ番号とセクタ数に基づいて、連続してアクセスされた最後のセクタ番号の次のセクタ番号と連続してアクセスされたセクタ数とを有する管理データを管理し、
前記第1のアクセスコマンドの次に、前記次のセクタ番号にアクセスするための第2のアクセスコマンドが発行された場合に、前記第2のアクセスコマンドに基づいて前記管理データ内の前記セクタ番号と前記セクタ数とを更新し、
前記第1のアクセスコマンドの次に、前記次のセクタ番号と異なるセクタ番号からのデータにアクセスするための第3のアクセスコマンドが発行された場合に、前記第3のアクセスコマンドに基づいて前記管理データ内の前記セクタ番号と前記セクタ数とを更新し、
前記管理データに基づいて、前記ハードディスクドライブの前記設定数以上の連続するセクタのデータにアクセスしているかを判定する
請求項13に記載のキャッシュ方法。
【請求項16】
前記管理データは、前記次のセクタ番号および前記セクタ数の、所定の数の複数の組み合わせを有し、
前記ハードディスクドライブへの第4のアクセスコマンドに含まれる最初のセクタ番号が前記管理データ内にない場合に、前記管理データ内の最も過去に更新された前記次のセクタ番号および前記セクタ数の組み合わせを削除し、前記第4のアクセスコマンドに含まれる最初のセクタ番号とセクタ数に基づいて、連続してアクセスされた最後のセクタ番号の次のセクタ番号と連続してアクセスされたセクタ数とを前記管理データに追加する、
請求項15に記載のキャッシュ方法。
【請求項17】
前記ハードディスクドライブへのアクセスがライトアクセスであり、前記ハードディスクドライブの連続する複数のセクタに第1のデータを書き込む場合、
前記記憶装置に前記ライトアクセスされる前記複数のセクタ内の第1のセクタに格納されている第2のデータのキャッシュデータである第3のデータが前記記憶装置に格納されているかを判定し、
前記第3のデータが前記記憶装置に格納されていると判定した場合、前記第3のデータをキャッシュデータとして利用できないようにし、前記複数のセクタに前記第1のデータを書き込む、
請求項13に記載のキャッシュ方法。
【請求項18】
前記ハードディスクドライブへのアクセスがライトアクセスであり、前記ハードディスクドライブの連続する複数のセクタに第1のデータを書き込む場合、
前記記憶装置に前記ライトアクセスされる前記複数のセクタ内の第1のセクタに格納されている第2のデータのキャッシュデータである第3のデータが前記記憶装置に格納されているかを判定し、
前記第3のデータが前記記憶装置に格納されていると判定した場合、前記第3のデータを前記ライトアクセスによって前記第1のセクタに書き込まれる第4のデータによって上書きし、前記第1のデータから前記第4のデータを除いたデータを前記複数のセクタから前記第1のセクタを除いたセクタに書き込む、
請求項13に記載のキャッシュ方法。
【請求項1】
ホストからのハードディスクドライブへのアクセス要求に対して、前記ハードディスクドライブの設定数以上の連続するセクタのデータにアクセスするかを判定する判定手段と、
記憶装置を前記ハードディスクドライブのキャッシュとして用いるキャッシュ手段であって、前記設定数以上の連続するセクタのデータにアクセスすると判定された場合に前記記憶装置をキャッシュとして用いない、キャッシュ手段と、
を具備する情報処理装置。
【請求項2】
前記記憶装置は、フラッシュメモリを有する請求項1に記載の情報処理装置。
【請求項3】
前記判定手段は、前記ハードディスクドライブへの第1のアクセスコマンドに含まれる最初のセクタ番号とセクタ数に基づいて、連続してアクセスされた最後のセクタ番号の次のセクタ番号と連続してアクセスされたセクタ数とを有する管理データを管理し、
前記判定手段は、前記第1のアクセスコマンドの次に、前記次のセクタ番号にアクセスするための第2のアクセスコマンドが発行された場合に、前記第2のアクセスコマンドに基づいて前記管理データ内の前記セクタ番号と前記セクタ数とを更新し、
前記判定手段は、前記第1のアクセスコマンドの次に、前記次のセクタ番号と異なるセクタ番号からのデータにアクセスするための第3のアクセスコマンドが発行された場合に、前記第3のアクセスコマンドに基づいて前記管理データ内の前記セクタ番号と前記セクタ数とを更新し、
前記判定手段は、前記管理データに基づいて、前記ハードディスクドライブの前記設定数以上の連続するセクタのデータにアクセスしているかを判定する
請求項1に記載の情報処理装置。
【請求項4】
前記管理データは、前記次のセクタ番号および前記セクタ数の、所定の数の複数の組み合わせを有し、
前記判定手段は、前記ハードディスクドライブへの第4のアクセスコマンドに含まれる最初のセクタ番号が前記管理データ内にない場合に、前記管理データ内の最も過去に更新された前記次のセクタ番号および前記セクタ数の組み合わせを削除し、前記第4のアクセスコマンドに含まれる最初のセクタ番号とセクタ数に基づいて、連続してアクセスされた最後のセクタ番号の次のセクタ番号と連続してアクセスされたセクタ数とを前記管理データに追加する、
請求項3に記載の情報処理装置。
【請求項5】
前記ハードディスクドライブへのアクセスがライトアクセスであり、前記ハードディスクドライブのセクタ番号が連続する複数のセクタに第1のデータを書き込む場合、
前記キャッシュ手段は、前記記憶装置に前記ライトアクセスされる前記複数のセクタ内の第1のセクタに格納されている第2のデータが前記記憶装置にキャッシュされているかを判定し、
前記第2のデータが前記記憶装置にキャッシュされていると判定した場合、前記記憶装置にキャッシュされている前記第2のデータをキャッシュデータとして利用できないようにし、前記複数のセクタに前記第1のデータを書き込む
請求項1に記載の情報処理装置。
【請求項6】
前記ハードディスクドライブへのアクセスがライトアクセスであり、前記ハードディスクドライブの連続する複数のセクタに第1のデータを書き込む場合、
前記キャッシュ手段は、前記複数のセクタ内の第1のセクタに格納されている第2のデータのキャッシュデータである第3のデータが前記記憶装置に格納されているかを判定し、
前記第3のデータが前記記憶装置に格納されていると判定した場合、前記ライトアクセスによって前記第1のセクタに書き込まれる第4のデータによって前記第3のデータを上書きし、前記第1のデータから前記第4のデータを除いたデータを前記複数のセクタから第1のセクタを除いたセクタに書き込む、
請求項1に記載の情報処理装置。
【請求項7】
ハードディスクドライブと記憶装置とを有する、ハイブリッド記憶装置において、
ホストからの前記ハードディスクドライブへのアクセス要求に対して、前記ハードディスクドライブの設定数以上の連続するセクタのデータにアクセスするかを判定する判定手段と、
前記記憶装置を前記ハードディスクドライブのキャッシュとして用いるキャッシュ手段であって、前記設定数以上の連続するセクタのデータにアクセスすると判定された場合に前記記憶装置をキャッシュとして用いない、キャッシュ手段と、
を具備するハイブリッド記憶装置。
【請求項8】
前記記憶装置は、フラッシュメモリを有する請求項7に記載のハイブリッド記憶装置。
【請求項9】
前記判定手段は、前記ハードディスクドライブへの第1のアクセスコマンドに含まれる最初のセクタ番号とセクタ数に基づいて、連続してアクセスされた最後のセクタ番号の次のセクタ番号と連続してアクセスされたセクタ数とを有する管理データを管理し、
前記判定手段は、前記第1のアクセスコマンドの次に、前記次のセクタ番号にアクセスするための第2のアクセスコマンドが発行された場合に、前記第2のアクセスコマンドに基づいて前記管理データ内の前記セクタ番号と前記セクタ数とを更新し、
前記判定手段は、前記第1のアクセスコマンドの次に、前記次のセクタ番号と異なるセクタ番号からのデータにアクセスするための第3のアクセスコマンドが発行された場合に、前記第3のアクセスコマンドに基づいて前記管理データ内の前記セクタ番号と前記セクタ数とを更新し、
前記判定手段は、前記管理データに基づいて、前記ハードディスクドライブの前記設定数以上の連続するセクタのデータにアクセスしているかを判定する
請求項7に記載のハイブリッド記憶装置。
【請求項10】
前記管理データは、前記次のセクタ番号および前記セクタ数の、所定の数の複数の組み合わせを有し、
前記判定手段は、前記ハードディスクドライブへの第4のアクセスコマンドに含まれる最初のセクタ番号が前記管理データ内にない場合に、前記管理データ内の最も過去に更新された前記次のセクタ番号および前記セクタ数の組み合わせを削除し、前記第4のアクセスコマンドに含まれる最初のセクタ番号とセクタ数に基づいて、連続してアクセスされた最後のセクタ番号の次のセクタ番号と連続してアクセスされたセクタ数とを前記管理データに追加する、
請求項9に記載のハイブリッド記憶装置。
【請求項11】
前記ハードディスクドライブへのアクセスがライトアクセスであり、前記ハードディスクドライブの連続する複数のセクタに第1のデータを書き込む場合、
前記キャッシュ手段は、前記記憶装置に前記ライトアクセスされる前記複数のセクタ内の第1のセクタに格納されている第2のデータのキャッシュデータである第3のデータが前記記憶装置に格納されているかを判定し、
前記第3のデータが前記記憶装置に格納されていると判定した場合、前記第3のデータをキャッシュデータとして利用できないようにし、前記複数のセクタに前記第1のデータを書き込む
請求項7に記載のハイブリッド記憶装置。
【請求項12】
前記ハードディスクドライブへのアクセスがライトアクセスであり、前記ハードディスクドライブの連続する複数のセクタに第1のデータを書き込む場合、
前記キャッシュ手段は、前記記憶装置に前記ライトアクセスされる前記複数のセクタ内の第1のセクタに格納されている第2のデータのキャッシュデータである第3のデータが前記記憶装置に格納されているかを判定し、
前記第3のデータが前記記憶装置に格納されていると判定した場合、前記第3のデータを前記ライトアクセスによって前記第1のセクタに書き込まれる第4のデータによって上書きし、前記第1のデータから前記第4のデータを除いたデータを前記複数のセクタから前記第1のセクタを除いたセクタに書き込む、
請求項7に記載のハイブリッド記憶装置。
【請求項13】
記憶装置をハードディスクドライブのキャッシュとして用いるキャッシュ方法であって、
ホストからのハードディスクドライブへのアクセス要求に対して、前記ハードディスクドライブの設定数以上の連続するセクタのデータにアクセスするかを判定し、
前記設定数以上の連続するセクタのデータにアクセスすると判定された場合に前記記憶装置をキャッシュとして用いない、
キャッシュ方法。
【請求項14】
前記記憶装置は、フラッシュメモリを有する請求項13に記載のキャッシュ方法。
【請求項15】
前記判定は、
前記ハードディスクドライブへの第1のアクセスコマンドに含まれる最初のセクタ番号とセクタ数に基づいて、連続してアクセスされた最後のセクタ番号の次のセクタ番号と連続してアクセスされたセクタ数とを有する管理データを管理し、
前記第1のアクセスコマンドの次に、前記次のセクタ番号にアクセスするための第2のアクセスコマンドが発行された場合に、前記第2のアクセスコマンドに基づいて前記管理データ内の前記セクタ番号と前記セクタ数とを更新し、
前記第1のアクセスコマンドの次に、前記次のセクタ番号と異なるセクタ番号からのデータにアクセスするための第3のアクセスコマンドが発行された場合に、前記第3のアクセスコマンドに基づいて前記管理データ内の前記セクタ番号と前記セクタ数とを更新し、
前記管理データに基づいて、前記ハードディスクドライブの前記設定数以上の連続するセクタのデータにアクセスしているかを判定する
請求項13に記載のキャッシュ方法。
【請求項16】
前記管理データは、前記次のセクタ番号および前記セクタ数の、所定の数の複数の組み合わせを有し、
前記ハードディスクドライブへの第4のアクセスコマンドに含まれる最初のセクタ番号が前記管理データ内にない場合に、前記管理データ内の最も過去に更新された前記次のセクタ番号および前記セクタ数の組み合わせを削除し、前記第4のアクセスコマンドに含まれる最初のセクタ番号とセクタ数に基づいて、連続してアクセスされた最後のセクタ番号の次のセクタ番号と連続してアクセスされたセクタ数とを前記管理データに追加する、
請求項15に記載のキャッシュ方法。
【請求項17】
前記ハードディスクドライブへのアクセスがライトアクセスであり、前記ハードディスクドライブの連続する複数のセクタに第1のデータを書き込む場合、
前記記憶装置に前記ライトアクセスされる前記複数のセクタ内の第1のセクタに格納されている第2のデータのキャッシュデータである第3のデータが前記記憶装置に格納されているかを判定し、
前記第3のデータが前記記憶装置に格納されていると判定した場合、前記第3のデータをキャッシュデータとして利用できないようにし、前記複数のセクタに前記第1のデータを書き込む、
請求項13に記載のキャッシュ方法。
【請求項18】
前記ハードディスクドライブへのアクセスがライトアクセスであり、前記ハードディスクドライブの連続する複数のセクタに第1のデータを書き込む場合、
前記記憶装置に前記ライトアクセスされる前記複数のセクタ内の第1のセクタに格納されている第2のデータのキャッシュデータである第3のデータが前記記憶装置に格納されているかを判定し、
前記第3のデータが前記記憶装置に格納されていると判定した場合、前記第3のデータを前記ライトアクセスによって前記第1のセクタに書き込まれる第4のデータによって上書きし、前記第1のデータから前記第4のデータを除いたデータを前記複数のセクタから前記第1のセクタを除いたセクタに書き込む、
請求項13に記載のキャッシュ方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【公開番号】特開2013−77161(P2013−77161A)
【公開日】平成25年4月25日(2013.4.25)
【国際特許分類】
【出願番号】特願2011−216570(P2011−216570)
【出願日】平成23年9月30日(2011.9.30)
【特許番号】特許第5117608号(P5117608)
【特許公報発行日】平成25年1月16日(2013.1.16)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】
【公開日】平成25年4月25日(2013.4.25)
【国際特許分類】
【出願日】平成23年9月30日(2011.9.30)
【特許番号】特許第5117608号(P5117608)
【特許公報発行日】平成25年1月16日(2013.1.16)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】
[ Back to top ]