(57)【特許請求の範囲】
【請求項１】
ホストからのハードディスクドライブへのアクセス要求に対して、前記ハードディスクドライブの設定数以上の連続するセクタのデータにアクセスするかを判定する判定手段と、
記憶装置を前記ハードディスクドライブのキャッシュとして用いるキャッシュ手段であって、前記設定数以上の連続するセクタのデータにアクセスすると判定された場合に前記記憶装置をキャッシュとして用いない、キャッシュ手段と、
を具備し、
前記判定手段は、
前記ハードディスクドライブへの第１のアクセスコマンドに含まれる最初のセクタ番号とセクタ数に基づいて、連続してアクセスされた最後のセクタ番号の次のセクタ番号と連続してアクセスされたセクタ数との、所定の数の複数の組み合わせを有する管理データを管理し、
前記第１のアクセスコマンドの次に、前記次のセクタ番号にアクセスするための第２のアクセスコマンドが発行された場合に、前記第２のアクセスコマンドに基づいて前記管理データ内の前記セクタ番号と前記セクタ数とを更新し、
前記第１のアクセスコマンドの次に、前記次のセクタ番号と異なるセクタ番号からのデータにアクセスするための第３のアクセスコマンドが発行された場合に、前記第３のアクセスコマンドに基づいて前記管理データ内の前記セクタ番号と前記セクタ数とを更新し、
前記ハードディスクドライブへの第４のアクセスコマンドに含まれる最初のセクタ番号が前記管理データ内にない場合に、前記管理データ内の最も過去に更新された前記次のセクタ番号および前記セクタ数の組み合わせを削除し、前記第４のアクセスコマンドに含まれる最初のセクタ番号とセクタ数に基づいて、連続してアクセスされた最後のセクタ番号の次のセクタ番号と連続してアクセスされたセクタ数とを前記管理データに追加する
情報処理装置。
【請求項２】
前記記憶装置は、フラッシュメモリを有する請求項１に記載の情報処理装置。
【請求項３】
前記ハードディスクドライブへのアクセスがライトアクセスであり、前記ハードディスクドライブのセクタ番号が連続する複数のセクタに第１のデータを書き込む場合、
前記キャッシュ手段は、前記ハードディスクに前記ライトアクセスされる前記複数のセクタ内の第１のセクタに格納されている第２のデータが前記記憶装置にキャッシュされているかを判定し、
前記第２のデータが前記記憶装置にキャッシュされていると判定した場合、前記記憶装置にキャッシュされている前記第２のデータを無効化し、前記複数のセクタに前記第１のデータを書き込む
請求項１に記載の情報処理装置。
【請求項４】
前記ハードディスクドライブへのアクセスがライトアクセスであり、前記ハードディスクドライブの連続しない複数のセクタに第１のデータを書き込む場合、
前記キャッシュ手段は、前記複数のセクタ内の第１のセクタに格納されている第２のデータのキャッシュデータである第３のデータが前記記憶装置に格納されているかを判定し、
前記第３のデータが前記記憶装置に格納されていると判定した場合、前記ライトアクセスによって前記第１のセクタに書き込まれる第４のデータによって前記第３のデータを上書きし、前記第１のデータから前記第４のデータを除いたデータを前記複数のセクタから第１のセクタを除いたセクタに書き込む、
請求項１に記載の情報処理装置。
【請求項５】
ハードディスクドライブと記憶装置とを有する、ハイブリッド記憶装置において、
ホストからの前記ハードディスクドライブへのアクセス要求に対して、前記ハードディスクドライブの設定数以上の連続するセクタのデータにアクセスするかを判定する判定手段と、
前記記憶装置を前記ハードディスクドライブのキャッシュとして用いるキャッシュ手段であって、前記設定数以上の連続するセクタのデータにアクセスすると判定された場合に前記記憶装置をキャッシュとして用いない、キャッシュ手段と、
を具備し、
前記判定手段は、
前記ハードディスクドライブへの第１のアクセスコマンドに含まれる最初のセクタ番号とセクタ数に基づいて、連続してアクセスされた最後のセクタ番号の次のセクタ番号と連続してアクセスされたセクタ数との、所定の数の複数の組み合わせを有する管理データを管理し、
前記第１のアクセスコマンドの次に、前記次のセクタ番号にアクセスするための第２のアクセスコマンドが発行された場合に、前記第２のアクセスコマンドに基づいて前記管理データ内の前記セクタ番号と前記セクタ数とを更新し、
前記第１のアクセスコマンドの次に、前記次のセクタ番号と異なるセクタ番号からのデータにアクセスするための第３のアクセスコマンドが発行された場合に、前記第３のアクセスコマンドに基づいて前記管理データ内の前記セクタ番号と前記セクタ数とを更新し、
前記ハードディスクドライブへの第４のアクセスコマンドに含まれる最初のセクタ番号が前記管理データ内にない場合に、前記管理データ内の最も過去に更新された前記次のセクタ番号および前記セクタ数の組み合わせを削除し、前記第４のアクセスコマンドに含まれる最初のセクタ番号とセクタ数に基づいて、連続してアクセスされた最後のセクタ番号の次のセクタ番号と連続してアクセスされたセクタ数とを前記管理データに追加する
ハイブリッド記憶装置。
【請求項６】
前記記憶装置は、フラッシュメモリを有する請求項５に記載のハイブリッド記憶装置。
【請求項７】
前記ハードディスクドライブへのアクセスがライトアクセスであり、前記ハードディスクドライブの連続する複数のセクタに第１のデータを書き込む場合、
前記キャッシュ手段は、前ハードディスクドライブに前記ライトアクセスされる前記複数のセクタ内の第１のセクタに格納されている第２のデータのキャッシュデータである第３のデータが前記記憶装置に格納されているかを判定し、
前記第３のデータが前記記憶装置に格納されていると判定した場合、前記第３のデータを無効化し、前記複数のセクタに前記第１のデータを書き込む
請求項５に記載のハイブリッド記憶装置。
【請求項８】
前記ハードディスクドライブへのアクセスがライトアクセスであり、前記ハードディスクドライブの連続しない複数のセクタに第１のデータを書き込む場合、
前記キャッシュ手段は、前記記憶装置に前記ライトアクセスされる前記複数のセクタ内の第１のセクタに格納されている第２のデータのキャッシュデータである第３のデータが前記記憶装置に格納されているかを判定し、
前記第３のデータが前記記憶装置に格納されていると判定した場合、前記第３のデータを前記ライトアクセスによって前記第１のセクタに書き込まれる第４のデータによって上書きし、前記第１のデータから前記第４のデータを除いたデータを前記複数のセクタから前記第１のセクタを除いたセクタに書き込む、
請求項５に記載のハイブリッド記憶装置。
【請求項９】
記憶装置をハードディスクドライブのキャッシュとして用いるキャッシュ方法であって、
前記ハードディスクドライブへの第１のアクセスコマンドに含まれる最初のセクタ番号とセクタ数に基づいて、連続してアクセスされた最後のセクタ番号の次のセクタ番号と連続してアクセスされたセクタ数との、所定の数の複数の組み合わせを有する管理データを管理し、
前記第１のアクセスコマンドの次に、前記次のセクタ番号にアクセスするための第２のアクセスコマンドが発行された場合に、前記第２のアクセスコマンドに基づいて前記管理データ内の前記セクタ番号と前記セクタ数とを更新し、
前記第１のアクセスコマンドの次に、前記次のセクタ番号と異なるセクタ番号からのデータにアクセスするための第３のアクセスコマンドが発行された場合に、前記第３のアクセスコマンドに基づいて前記管理データ内の前記セクタ番号と前記セクタ数とを更新し、
前記ハードディスクドライブへの第４のアクセスコマンドに含まれる最初のセクタ番号が前記管理データ内にない場合に、前記管理データ内の最も過去に更新された前記次のセクタ番号および前記セクタ数の組み合わせを削除し、前記第４のアクセスコマンドに含まれる最初のセクタ番号とセクタ数に基づいて、連続してアクセスされた最後のセクタ番号の次のセクタ番号と連続してアクセスされたセクタ数とを前記管理データに追加し、
前記管理データに基づいて、前記ハードディスクドライブの前記設定数以上の連続するセクタのデータにアクセスしているかを判定し、
前記設定数以上の連続するセクタのデータにアクセスすると判定された場合に前記記憶装置をキャッシュとして用いない
キャッシュ方法。
【請求項１０】
前記記憶装置は、フラッシュメモリを有する請求項９に記載のキャッシュ方法。
【請求項１１】
前記ハードディスクドライブへのアクセスがライトアクセスであり、前記ハードディスクドライブの連続する複数のセクタに第１のデータを書き込む場合、
前記ハードディスクドライブに前記ライトアクセスされる前記複数のセクタ内の第１のセクタに格納されている第２のデータのキャッシュデータである第３のデータが前記記憶装置に格納されているかを判定し、
前記第３のデータが前記記憶装置に格納されていると判定した場合、前記第３のデータを無効化し、前記複数のセクタに前記第１のデータを書き込む、
請求項９に記載のキャッシュ方法。
【請求項１２】
前記ハードディスクドライブへのアクセスがライトアクセスであり、前記ハードディスクドライブの連続しない複数のセクタに第１のデータを書き込む場合、
前記記憶装置に前記ライトアクセスされる前記複数のセクタ内の第１のセクタに格納されている第２のデータのキャッシュデータである第３のデータが前記記憶装置に格納されているかを判定し、
前記第３のデータが前記記憶装置に格納されていると判定した場合、前記第３のデータを前記ライトアクセスによって前記第１のセクタに書き込まれる第４のデータによって上書きし、前記第１のデータから前記第４のデータを除いたデータを前記複数のセクタから前記第１のセクタを除いたセクタに書き込む、
請求項９に記載のキャッシュ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、記憶装置をハードディスクドライブのキャッシュとして利用する情報処理装置、ハイブリッド記憶装置、およびキャッシュ方法に関する。
【背景技術】
【０００２】
ＣＰＵ（Central Processing Unit）の演算速度の向上に比べて、ＨＤＤ（Hard Disk Drive）へのアクセス性能の向上の速度は遅い。ＨＤＤよりアクセス速度が速いフラッシュメモリを有する記憶装置をキャッシュとして利用することで、アクセス性能の向上を図ることが行われている。例えば、フラッシュメモリを有するＳＳＤ（Solid State Drive）をＨＤＤのキャッシュとして利用するＳ−ＡＴＡコントローラを有するチップセットが製品化されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第３５８５０９１号公報
【特許文献２】特開平７−１０５０９５号公報
【特許文献３】特開２００４−７０８５０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
最近、ホストとＨＤＤとの間で音楽や動画等の大きなサイズのファイルを転送することが多くなっている。このようなファイルの転送は、シーケンシャルアクセスになることが多い。シーケンシャルアクセスに対してキャッシュを行った場合に問題が発生する可能性がある。
【０００５】
例えば、シーケンシャルリードアクセスの場合、２つの問題が発生する可能性がある。シーケンシャルリードされるデータは、近い将来再度リードされる確率が低く、リードされたとしても再度シーケンシャルリードされる確率が高い。シーケンシャルリードのデータをキャッシュに学習すると、再度リードされる可能性がより高いデータを追い出すことになり、キャッシュヒット率の低下につながる可能性がある。また、ＨＤＤはシーケンシャルリードの性能が高いため、データを学習する分、キャッシュを使用しないときよりも逆に性能低下する可能性がある。
【０００６】
また、シーケンシャルライトアクセスの場合、アクセス性能が低下する可能性がある。一般にＳＳＤをＨＤＤのキャッシュとして使用する場合、ＨＤＤに対してはシーケンシャルライトであっても、ＳＳＤに対してはランダムライトとなる。そのため、ＳＳＤのランダムライト性能がＨＤＤのシーケンシャルリードよりも低い場合、シーケンシャルライトアクセスデータをＳＳＤに書き込むことにより、ＨＤＤにライトするよりも性能が低下してしまう可能性がある。
【０００７】
本発明の目的は、記憶装置をＨＤＤのキャッシュとして利用する場合に、アクセス性能の低下、およびキャッシュヒット率の低下を抑制することが可能な情報処理装置、ハイブリッド記憶装置、およびキャッシュ方法を提供することにある。
【課題を解決するための手段】
【０００８】
実施形態によれば、情報処理装置は、判定手段と、キャッシュ手段とを具備する。判定手段は、ホストからのハードディスクドライブへのアクセス要求に対して、前記ハードディスクドライブの設定数以上の連続するセクタのデータにアクセスするかを判定する。キャッシュ手段は、記憶装置を前記ハードディスクドライブのキャッシュとして用いる。キャッシュ手段は、前記設定数以上の連続するセクタのデータにアクセスすると判定された場合に前記記憶装置をキャッシュとして用いない。前記判定手段は、前記ハードディスクドライブへの第１のアクセスコマンドに含まれる最初のセクタ番号とセクタ数に基づいて、連続してアクセスされた最後のセクタ番号の次のセクタ番号と連続してアクセスされたセクタ数との、所定の数の複数の組み合わせを有する管理データを管理し、前記第１のアクセスコマンドの次に、前記次のセクタ番号にアクセスするための第２のアクセスコマンドが発行された場合に、前記第２のアクセスコマンドに基づいて前記管理データ内の前記セクタ番号と前記セクタ数とを更新し、前記第１のアクセスコマンドの次に、前記次のセクタ番号と異なるセクタ番号からのデータにアクセスするための第３のアクセスコマンドが発行された場合に、前記第３のアクセスコマンドに基づいて前記管理データ内の前記セクタ番号と前記セクタ数とを更新し、前記ハードディスクドライブへの第４のアクセスコマンドに含まれる最初のセクタ番号が前記管理データ内にない場合に、前記管理データ内の最も過去に更新された前記次のセクタ番号および前記セクタ数の組み合わせを削除し、前記第４のアクセスコマンドに含まれる最初のセクタ番号とセクタ数に基づいて、連続してアクセスされた最後のセクタ番号の次のセクタ番号と連続してアクセスされたセクタ数とを前記管理データに追加する。
【図面の簡単な説明】
【０００９】
【図１】第１の実施形態の情報処理装置の構成の一例を示すブロック図である。
【図２】第１の実施形態の情報処理装置の主要部の一例を示すブロック図である。
【図３】図２のＮＶＣをキャッシュとして用いる場合の動作の概要を説明するための図である。
【図４】ライトスルーキャッシュを行う動作を説明するためのフローチャートである。
【図５】ライトバックキャッシュを行う動作を説明するためのフローチャートである。
【図６】一つのプログラムから１台のＨＤＤにリードアクセスする場合の動作を示す遷移図である。
【図７】図８に示すリードアクセスの場合のシーケンシャルリード検出用データのデータの推移を示す図である。
【図８】二つのプログラムから２台のＨＤＤにリードアクセスする場合の動作を示す遷移図である。
【図９】図８に示すリードアクセスの場合のシーケンシャルリード検出用データのデータの推移を示す図である。
【図１０】第１の実施形態のシーケンシャルリードを検出する手順の一例を示すフローチャートである。
【図１１】第１の実施形態のシーケンシャルリードの場合に学習を行わない動作を説明するためのフローチャートである。
【図１２】第１の実施形態の変形例のシーケンシャルリード検出用データのデータの推移を示す図である。
【図１３】第２の実施形態のシーケンシャルライトの場合に学習を行わない動作を説明するためのフローチャートである。
【図１４】第２の実施形態のシーケンシャルライトの場合に学習を行わない動作を説明するためのフローチャートである。
【図１５】第３の実施形態のシーケンシャルアクセス検出用データの一例を示すフローチャートである。
【図１６】第３の実施形態のシーケンシャルアクセスを検出する手順の一例を示すフローチャートである。
【図１７】第４の実施形態の情報処理装置の構成の一例を示すブロック図である。
【図１８】第４の実施形態の情報処理装置の主要部の一例を示すブロック図である。
【図１９】第５の実施形態の情報処理装置の構成の一例を示すブロック図である。
【図２０】第６の実施形態の情報処理装置の構成の一例を示すブロック図である。
【図２１】第７の実施形態の情報処理装置の構成の一例を示すブロック図である。
【発明を実施するための形態】
【００１０】
以下、実施の形態について図面を参照して説明する。
【００１１】
＜第１の実施形態＞
図１は、第１の実施形態に係る情報処理装置のシステム構成を示す図である。本実施形態の情報処理装置は、パーソナルコンピュータとして実現されている。
【００１２】
図１に示すように、本情報処理装置は、ＣＰＵ（Central processing unit）１１、ＭＣＨ（Memory controller hub）１２、メインメモリ（揮発性メモリ）１３、ＩＣＨ（I/o controller hub）１４、ＧＰＵ（Graphics processing unit）１５、ビデオメモリ（ＶＲＡＭ）１５Ａ、サウンドコントローラ１６、ＢＩＯＳ−ＲＯＭ（Read only memory）１７、ＨＤＤ（Hard disk drive）１８、ＯＤＤ（Optical disc drive）２０、各種周辺機器２１、ＥＥＰＲＯＭ（Electrically erasable programmable ROM）２２、ＥＣ／ＫＢＣ（Embedded controller/keyboard controller）２３等を備えている。
【００１３】
ＣＰＵ１１は、本情報処理装置１０の動作を制御するプロセッサであり、ＨＤＤ１８やＯＤＤ２０からメインメモリ１３にロードされる各種プログラムを実行する。このＣＰＵ１１によって実行される各種プログラムの中には、リソース管理を司るオペレーティングシステム（ＯＳ）１１０や、当該ＯＳ１１０の配下で動作する、キャッシュドライバ１２０および各種アプリケーションプログラム１３０等が存在する。キャッシュドライバ１２０は、後述するＳＳＤ２０１をキャッシュデバイスとして利用するプログラムである。このプログラムは、接続されたＨＤＤ１８と他の記憶装置（例えば、ＳＳＤ）とを、ホスト（例えば、ＰＣ本体）からは、一つのストレージに見せて、リード及びライトを制御して応答性能を向上させる、いわゆるＨＤＤアクセラレータとして、機能させるプログラムである。具体的には、ＨＤＤアクセラレータは、ＯＳ上で動作するドライバという位置づけで、キャッシュドライバ１２０が動作する。
【００１４】
また、ＣＰＵ１１は、ＢＩＯＳ−ＲＯＭ１７に格納されたＢＩＯＳも実行する。ＢＩＯＳは、ハードウェア制御のためのプログラムである。以下では、ＢＩＯＳ−ＲＯＭ１７の格納物であるＢＩＯＳ自体についてもＢＩＯＳ１７と表記することがある。
【００１５】
ＭＣＨ１２は、ＣＰＵ１１とＩＣＨ１４との間を接続するブリッジとして動作すると共に、メインメモリ１３をアクセス制御するメモリコントローラとして動作する。また、ＭＣＨ１２は、ＧＰＵ１５との通信を実行する機能を有している。
【００１６】
ＧＰＵ１５は、本情報処理装置に組み込まれ、または、外部接続される表示装置を制御する表示コントローラである。ＧＰＵ１５は、ＶＲＡＭ１５Ａを有する。
【００１７】
ＩＣＨ１４は、ＨＤＤ１８およびＯＤＤ２０を制御するためのＡＴＡ（AT Attachment）コントローラを内蔵する。ＩＣＨ１４は、ＰＣＩ（Peripheral component interconnect）バスに接続された各種周辺機器２１の制御も行う。また、ＩＣＨ１４は、サウンドコントローラ１６との通信機能も有している。
【００１８】
サウンドコントローラ１６は音源デバイスであり、各種プログラムが再生対象とするオーディオデータを、本情報処理装置に組み込まれた、または、外部接続されるスピーカ等に出力する。
【００１９】
ＥＥＰＲＯＭ２２は、例えば本情報処理装置の個体情報や環境設定情報などを格納するためのメモリデバイスである。そして、ＥＣ／ＫＢＣ２３は、電力管理を行うためのエンベデッドコントローラと、キーボードやポインティングデバイス等の操作によるデータ入力を制御するためのキーボードコントローラとが集積された１チップＭＰＵ（Micro processing unit）である。
【００２０】
キャッシュドライバ１２０は、ＳＳＤ２０１の少なくとも一部の領域（ＮＶＣ（Non-Volatile Cache））と主メモリ１３の一部の領域（Ｌ１）をＨＤＤ１８のキャッシュメモリとして用いる。
【００２１】
次に、キャッシュドライバ１２０の機能について図２を参照して説明する。図２は、図１に示す情報処理装置の主要部を示すブロック図である。
【００２２】
メインメモリ１３内には、ユーザバッファ領域３０１、Ｌ１キャッシュ領域３０２、およびマージ用バッファ領域３０３が確保される。また、キャッシュドライバ１２０によって、Ｌ１キャッシュ管理情報３０４、ＮＶＣ管理情報３０５、シーケンシャルリード検出用データ（Seq Read検出用データ）３０６がメモリ１３内に作成される。
【００２３】
Ｌ１キャッシュ領域３０２は、ＮＶＣ３１１とともにＨＤＤ１８のキャッシュとして使用するバッファである。Ｌ１キャッシュ領域３０２は、フィルタドライバがロードされるときにメインメモリに確保される。なお、Ｌ１キャッシュ領域３０２の容量は１６ＭＢ程度である。
【００２４】
また、マージ用バッファ領域３０３は、キャッシュの方式がライトバック（Ｗｒｉｔｅ  Ｂａｃｋ）方式の場合に使用される。マージ用バッファ領域３０３は、リードアクセス時に、Ｌ１キャッシュ領域３０２に一部のデータが格納されている場合に、ＨＤＤ１８から読み出されたＬ１キャッシュ領域３０２に格納されていないデータを一時的に格納するために用いられる。Ｌ１キャッシュ管理情報３０４は、Ｌ１キャッシュ領域３０２に格納されているキャッシュデータを管理するための情報である。ＮＶＣ管理情報３０５は、ＮＶＣ３１１に格納されているキャッシュデータを管理するための情報である。ＮＶＣ管理情報３０５内には、複数のエントリが設定され、各エントリ内にはキャッシュデータの格納場所、キャッシュデータに対応するＨＤＤ１８の格納場所、キャッシュデータとＨＤＤ１８内のデータとが一致するかを示すデータ等が格納されている。シーケンシャルリード検出用データ３０６については後述する。
【００２５】
情報処理装置１０は、オペレーティングシステム（ＯＳ）１１０が制御する。オペレーティングシステム１１０からＨＤＤ１８へのアクセスは、すべてキャッシュドライバ１２０を介して行われる。キャッシュドライバ１２０は、Ｓ−ＡＴＡコントローラ１４ＡおよびＵＳＢコントローラ１４Ｂを直接的または間接的に制御する。Ｓ−ＡＴＡコントローラ１４ＡにＨＤＤ１８が接続されている。ＵＳＢコントローラ１４ＢにＳＳＤ２０１が接続されている。また、キャッシュドライバ１２０は、メモリコントローラ１２Ａを介して、メインメモリ１３へのデータのアクセスを行う。
【００２６】
キャッシュドライバ１２０、はシステムの起動時にメインメモリ１３にロードされる。キャッシュドライバ１２０は、Ｌ１キャッシュ管理情報３０４を格納するための領域をメインメモリ１３内に確保して初期化し、キャッシュには何も記録されていない状態にした後、キャッシュ制御処理を開始する。Ｌ１キャッシュ管理情報３０４は、キャッシュディレクトリなどのキャッシュデータを管理するためのデータを有する。キャッシュドライバ１２０の動作時、キャッシュドライバ１２０は、メインメモリ１３内のＬ１キャッシュ管理情報３０４にライトキャッシュおよびリードキャッシュの学習データを管理するためのデータを記録する。シャットダウン時、キャッシュドライバ１２０は、メインメモリ１３内のＬ１キャッシュ管理情報３０４を破棄する。
【００２７】
なお、キャッシュドライバ１２０が動作を開始するまでは、ＢＩＯＳプログラムがＨＤＤ１８へのアクセスを制御する。Ｓ−ＡＴＡコントローラ１４Ａは、ホストからライトアクセス要求またはリードアクセス要求があった場合、ＨＤＤ１８にアクセスする。
【００２８】
ＳＳＤ２０１の一部または全部の領域がＨＤＤ１８のキャッシュとして使用される。オペレーティングシステム１１０は、キャッシュデータの格納領域として使用されるＳＳＤ２０１のキャッシュに直接アクセスすることができない。
【００２９】
本情報処理装置は、ＨＤＤ１８よりアクセス速度が速いＳＳＤ（Solid State Drive）２０１と、主メモリ１３に確保するＬ１キャッシュ領域３０２をＨＤＤ１８のキャッシュとして利用することで、ＨＤＤ１８に対するアクセスの高速化を図る。ＳＳＤ２０１は、フラッシュメモリ（不揮発性メモリ）を有する。
【００３０】
次に図３を参照して、ＮＶＣ３１１をキャッシュとして用いる場合の動作の概要を説明する。
【００３１】
キャッシュドライバは、４０１〜４１２の１２種類のデータ転送を組み合わせ、Ｌ１キャッシュ領域３０２、および、ＮＶＣ３１１をＨＤＤ１８のキャッシュとして使用し、ＨＤＤ１８のアクセスを高速化する。
【００３２】
（ライトスルーキャッシュ）
ここで、ＨＤＤへのリードアクセスに対してキャッシュを行う一般的な動作について説明する。まず、ライトスルーキャッシュと呼ばれているキャッシュ制御について、図４を参照して説明する。
【００３３】
オペレーティングシステム１１０からＨＤＤ１８へのアクセスコマンドが発行された場合、キャッシュドライバ１２０は、発行されたコマンドがリードコマンドであるかを判定する（ステップ５０１）。リードコマンドであると判定した場合（ステップ５０１のＹｅｓ）、キャッシュドライバ１２０は、Ｌ１キャッシュ管理情報３０４およびＮＶＣ管理情報３０５を参照することによって、リードコマンドに対応するデータがＬ１キャッシュ領域３０２とＳＳＤ２０２内のＮＶＣ３１１内に存在するかを判定する（ステップ５０２）。データが存在すると判定した場合（ステップ５０２のＹｅｓ）、Ｌ１キャッシュ領域３０２またはＮＶＣ３１１からリードコマンドに対応するデータを読み出す（ステップ５０３）。データが存在しないと判定した場合、キャッシュドライバ１２０は、ＨＤＤ１８からリードコマンドに対応するデータをＬ１キャッシュ領域３０２に読み出し、ユーザバッファ領域３０１に渡す（ステップ５０４）。そして、キャッシュドライバ１２０は、ＨＤＤ１８から読み出されたデータを、キャッシュデータとしてＬ１キャッシュ領域３０２からＮＶＣ３１１に書き込み、データを学習する（ステップ５０５）。
【００３４】
ステップ５０１において、リードコマンドではない（つまり、ライトコマンドである）と判定した場合（ステップ５０１のＮｏ）、ライトコマンドに対応するアドレスのデータがＬ１キャッシュ領域３０２とＳＳＤ２０２内のＮＶＣ３１１内に存在するかを判定する（ステップ５０６）。データがＬ１キャッシュ領域３０２またはＮＶＣ３１１内に存在すると判定した場合（ステップ５０６のＹｅｓ）、Ｌ１キャッシュ領域３０２またはＮＶＣ３１１内に存在するキャッシュデータを書き換えると共に、ライトコマンドに対応するデータをＨＤＤ１８に書き込む（ステップ５０７）。データがＬ１キャッシュ領域３０２とＮＶＣ３１１内に存在しないと判定した場合（ステップ５０６のＮｏ）、ライトコマンドに対応するデータをＨＤＤ１８に書き込む（ステップ５０８）。  
以上説明したリードアクセスを学習する場合のキャッシュドライバの動作において、
リードアクセスが、音楽や動画等のように、データ容量が極端に大きいデータについてのリードアクセスの場合は、リード動作が連続する。このようにリード動作を、以下、シーケンシャルリードとして、説明する。シーケンシャルリードの場合、性能とキャッシュヒット率の２つの問題が発生する可能性がある。シーケンシャルリードされるデータは、連続してデータのリードが継続するため、近い将来再度リードされる確率が低く、リードされたとしても再度シーケンシャルリードされる確率が高い。もし、シーケンシャルリードのデータをＮＶＣ３１１に学習すると、データ量が大量になるため、それまでにキャッシュデータとしてＮＶＣ３１１に学習された、再度リードされる可能性がより高いデータを追い出すことになる。このため、キャッシュヒット率の低下につながる（キャッシュヒット率の問題）。一方、一般的にＨＤＤ１８は、シーケンシャルリードの性能が高いため、ＮＶＣ３１１に学習する分、キャッシュを使用しないときよりも逆に性能低下する可能性がある。また、ＳＳＤ２０１のリード性能がＨＤＤ１８のシーケンシャルリード性能と同等以下の場合は、データが近い将来再度リードされてキャッシュにヒットしたとしてもキャッシュの効果は期待できない（性能問題）。
【００３５】
（ライトバックキャッシュ）
また、ＨＤＤへのリードアクセスに対してキャッシュを行う一般的な動作の別の制御方法として、ライトバックキャッシュ方式がある。ライトバックキュッシュ方式の動作について図５を参照して説明する。
【００３６】
ステップ５０１〜ステップ５０５は、図４で説明したリードのキャッシュ動作と同様なので説明を省略する。ステップ５０１において、リードコマンドではない（つまり、ライトコマンドである）と判定した場合（ステップ５０１のＮｏ）、ライトコマンドに対応するアドレスのデータが、ＳＳＤ２０２のＮＶＣ３１１内に存在するかを判定する（ステップ１３０６）。データがＮＶＣ３１１内に存在すると判定した場合（ステップ１３０６のＹｅｓ）、キャッシュドライバ１２０は、ＮＶＣ３１１内に存在するデータを書き換える（ステップ１３０７）。データがＮＶＣ３１１内に存在しないと判定した場合（ステップ１３０６のＮｏ）、キャッシュドライバ１２０は、ＮＶＣ管理情報３０５からエントリを見つける（ステップ１３０８）。キャッシュドライバ１２０は、見つけたＮＶＣ３１１のエントリに対応するアドレスにデータを書き込む（ステップ１３０９）。
【００３７】
以上説明したライトバック動作では、ライトされるデータがシーケンシャルライトの場合、ライト性能が悪化する可能性がある。ＳＳＤ２０１のランダムライト性能がＨＤＤ１８のシーケンシャルリードよりも遅い場合、ＳＳＤ２０１に対してシーケンシャルライトすることにより、ＨＤＤ１８に直接書き込むよりも性能が低下してしまう。これは、ＨＤＤ１８に対するシーケンシャルライトであっても、ＳＳＤ２０１に対してはランダムライトとなるからである。
【００３８】
＜シーケンシャルアクセスの判定方法＞
このような、シーケンシャルアクセスにおける問題を解決するため、本実施の形態のキャッシュドライバ１２０は、リードアクセスがシーケンシャルリードであるかを判定するために、シーケンシャルリード検出用データ３０６を使用する。シーケンシャルリード検出用データ３０６は、データはｎ行のテーブルである。行数ｎはあらかじめ決められているか、キャッシュドライバ１２０の起動時にパラメータとして与えられる。各行は、ＬＲＵカウンタ（LRUC）、ＨＤＤ識別番号（ＨＤＤ）、次のＬＢＡ（Next LBA）（セクタ番号）、これまでにリードしたセクタ数（Size）から構成される。ＬＲＵカウンタは最も過去に使用（更新）された行を見つけるためのカウンタで、ｎ行の時０〜ｎ−１の値を取る。０の値が最も最近使用された行、ｎ−１の値が最も過去に使用された行である。これにより、過去ｎプロセスのシーケンシャルリードを検出することができる。
【００３９】
本実施形態の場合、ｎ行のテーブルを用いてシーケンシャルリードであるかを判定している。まず、図６に示すような、あるプログラムＡから１台のＨＤＤ（ＨＤＤ識別番号＝１）にアクセスする場合の動作について説明する。そして、図６に示すリードアクセスがあった場合のシーケンシャルリード検出用データ３０６（ｎ＝１）内の値の推移を図７を参照して説明する。シーケンシャルリードかどうかの閾値、すなわちシーケンシャルリード検出サイズは４００ｈとする。
【００４０】
先ず、プログラムＡの動作によりＣＰＵ１１がＨＤＤに対し、アドレスが０１００ｈ（“ｈ”は１６進数であることを示すために添付されている）からセクタ数が８０ｈのデータにリードアクセスするためのコマンドを発行する（ステップ８０１）。キャッシュドライバ１２０は、シーケンシャルリード検出用データ３０６Ａを生成する。シーケンシャルリード検出用データ３０６Ａにおいて、ＨＤＤ識別番号は１であり、Ｎｅｘｔ  ＬＢＡは１８０ｈ、サイズは８０ｈである。
【００４１】
要求されたデータがＨＤＤから読み出された後、プログラムＡの動作によりＣＰＵ１１がＨＤＤに対し、アドレスが０１８０ｈからセクタ数が８０ｈのデータにリードアクセスするためのコマンドを発行する（ステップ８０２）。キャッシュドライバ１２０は、シーケンシャルリード検出用データ３０６Ｂを生成する。シーケンシャルリード検出用データ３０６Ｂにおいて、ＨＤＤ識別番号は１であり、Ｎｅｘｔ  ＬＢＡは２００ｈ、サイズは１００ｈである。
【００４２】
プログラムＡの動作により、ＣＰＵ１１は、リードアクセスが終了するたびに連続するサイズが８０ｈのデータのリードアクセスにアクセスするためのコマンドを発行する。要求されたデータがＨＤＤから読み出された後、プログラムＡの動作によりＣＰＵ１１がＨＤＤに対し、アドレスが０５００ｈからセクタ数が８０ｈのデータにリードアクセスするためのコマンドを発行する（ステップ８０３）。キャッシュドライバ１２０は、シーケンシャルリード検出用データ３０６Ｃを生成する。シーケンシャルリード検出用データ３０６Ｃにおいて、ＨＤＤ識別番号は１であり、Ｎｅｘｔ  ＬＢＡは５００ｈ、サイズは４００ｈである。
【００４３】
要求されたデータがＨＤＤから読み出された後、、プログラムＡの動作によりＣＰＵ１１が、ＨＤＤに対してアドレスが０５００ｈからセクタ数が８０ｈのデータにリードアクセスするためのコマンドを発行する（ステップ８０４）。キャッシュドライバ１２０は、シーケンシャルリード検出用データ３０６Ｄを生成する。シーケンシャルリード検出用データ３０６Ｄにおいて、ＨＤＤ識別番号は１であり、Ｎｅｘｔ  ＬＢＡは５００ｈである。図１０に示すフローチャートのステップ６０５において算出されるサイズは４８０ｈである。そして、１０に示すフローチャートのステップ６０６において、サイズ（４８０ｈ）がシーケンシャルリード検出サイズより大きいと判断される。このため、図１１のフローチャートのステップ７０２においてシーケンシャルリードであると判定されるので、リードアクセスされたデータの学習を行わななくなる。
【００４４】
次に、図８に示すような、プログラムＡの動作によりＣＰＵ１１が１台のＨＤＤ＿１（ＨＤＤ識別番号＝１）にアクセスし、プログラムＢの動作によりＣＰＵ１１が１台のＨＤＤ＿２（ＨＤＤ識別番号＝２）にアクセスする場合の動作について説明する。そして、図８に示すリードアクセスがあった場合のシーケンシャルリード検出用データ（ｎ＝１）内の値の推移を図９を参照して説明する。なお、シーケンシャルリード検出サイズは４００ｈとする。
【００４５】
先ず、プログラムＡの動作によりＣＰＵ１１が、ＨＤＤ＿１に対してアドレスが０１００ｈからセクタ数が８０ｈのデータにリードアクセスするためのコマンドを発行する（ステップ１００１）。キャッシュドライバ１２０は、シーケンシャルリード検出用データ１１０１を生成する。シーケンシャルリード検出用データ１１０１において、ＨＤＤ識別番号は１であり、Ｎｅｘｔ  ＬＢＡは１８０ｈ、サイズは８０ｈである。
【００４６】
要求されたデータがＨＤＤから読み出された後、プログラムＡの動作によりＣＰＵ１１が、ＨＤＤ＿１に対してアドレスが０１８０ｈからセクタ数が８０ｈのデータにリードアクセスするためのコマンドを発行する（ステップ１００２）。キャッシュドライバ１２０は、シーケンシャルリード検出用データ１１０２を生成する。シーケンシャルリード検出用データ１１０２において、ＨＤＤ識別番号は１であり、Ｎｅｘｔ  ＬＢＡは２００ｈ、サイズは１００ｈである。
【００４７】
要求されたデータがＨＤＤから読み出された後、プログラムＢの動作によりＣＰＵ１１が、ＨＤＤ＿２に対してアドレスが１０００ｈからセクタ数が８０ｈのデータにリードアクセスするためのコマンドを発行する（ステップ１００３）。キャッシュドライバ１２０は、シーケンシャルリード検出用データ１１０３を生成する。シーケンシャルリード検出用データ１１０３において、ＨＤＤ識別番号は２であり、Ｎｅｘｔ  ＬＢＡは１０００ｈ、サイズは８０ｈである。
【００４８】
プログラムＡの動作によりＣＰＵ１１が、ＨＤＤ＿１に対してアドレスが０２００ｈからセクタ数が８０ｈのデータにリードアクセスするためのコマンドを発行する（ステップ１００４）。キャッシュドライバ１２０は、シーケンシャルリード検出用データ１１０４を生成する。シーケンシャルリード検出用データ１１０４において、ＨＤＤ識別番号は１であり、Ｎｅｘｔ  ＬＢＡは２８０、サイズは８０ｈである。
【００４９】
キャッシュドライバ１２０のシーケンシャルリードを検出する手順の一例について、図１０のフローチャートを参照して説明する。このフローでは、リードコマンドのＨＤＤ識別子、ＬＢＡ（セクタ番号）、セクタ数が入力として与えられ、Ｔｒｕｅ（シーケンシャルリード）またはＦａｌｓｅ（非シーケンシャルリード）を出力として返す。シーケンシャルリード検出サイズはあらかじめ決められているか、ドライバ起動時にパラメータとして与えられる（たとえば１６ＭＢ）。
【００５０】
キャッシュドライバ１２０は、シーケンシャルリード検出用データ３０６の中からリードアクセスが発行されたＨＤＤ識別番号と次のＬＢＡ（セクタ番号）とが一致する行を探す（ステップ６０１）。一致する行があった場合（ステップ６０２のＹｅｓ）、キャッシュドライバ１２０は、次のＬＢＡ（セクタ番号）の値に今回のアクセスサイズ（セクタ数）を加える（ステップ６０３）。キャッシュドライバ１２０は、一致した行のＬＲＵカウンタの値を０にし、その他の行のＬＲＵカウンタの値を＋１加算する（ステップ６０４）。そして、キャッシュドライバ１２０は、現在のＳｉｚｅの値に今回のアクセスサイズ（セクタ数）を加えたサイズを算出する（ステップ６０５）。キャッシュドライバ１２０は、算出されたサイズがあらかじめ設定されたしきい値であるシーケンシャルリード検出サイズより大きいかを判定する（ステップ６０６）。シーケンシャルリード検出サイズより大きいと判定した場合（ステップ６０６のＹｅｓ）、キャッシュドライバ１２０は、Ｔｒｕｅ（シーケンシャルリード）を出力として返す。シーケンシャルリード検出サイズより大きくないと判定した場合（ステップ６０６のＮｏ）、キャッシュドライバ１２０は、現在のサイズの値を算出されたサイズの値に更新する（ステップ６０７）。そして、キャッシュドライバ１２０は、Ｆａｌｓｅ（非シーケンシャルリード）を出力として返す。
【００５１】
リードアクセスが発行されたＨＤＤ識別番号と次のＬＢＡ（セクタ番号）とが一致する行がなかった場合（ステップ６０２のＮｏ）、キャッシュドライバ１２０は、ＬＲＵカウンタの値が最も多い行を検出する（ステップ６０８）。キャッシュドライバ１２０は、検出された行のＨＤＤ識別番号にリードアクセスされたＨＤＤに対応する値をセットし、Ｎｅｘｔ  ＬＢＡの値に今回のＬＢＡ（セクタ番号）とセクタ数との和をセットし、Ｓｉｚｅの値に今回のアクセスサイズ（セクタ数）をセットする（ステップ６０９）。そして、キャッシュドライバ１２０は、ステップ６０８において検出された行の行のＬＲＵカウンタの値を０にし、その他の行のＬＲＵカウンタの値を＋１加算する（ステップ６１０）。そして、キャッシュドライバ１２０は、Ｆａｌｓｅ（非シーケンシャルリード）を出力として返す。
【００５２】
＜シーケンシャルリードを検出後に学習を抑止する動作の説明＞
図１１のフローチャートを参照して、シーケンシャルリードを検出した後に学習を抑止する機能を有するキャッシュドライバ１２０の動作例を説明する。
【００５３】
ＨＤＤ１８に対するアクセスコマンドが発行された場合、キャッシュドライバ１２０は、当該コマンドがリードコマンドであるかを判定する（ステップ７０１）。リードコマンドであると判定された場合（ステップ７０１のＹｅｓ）、キャッシュドライバ１２０は、上記説明した図１０の動作フローにより、リードコマンドがシーケンシャルリードであるかを判定する（ステップ７０２）。シーケンシャルリードであると判定した場合（ステップ７０２のＹｅｓ）、キャッシュドライバ１２０は、ＨＤＤ１８からデータを読み出す（ステップ７０３）。一方、シーケンシャルリードではないと判定した場合（ステップ７０２のＮｏ）、キャッシュドライバ１２０は、リードコマンドに対応するデータがＮＶＣ３１１内に存在するかを判定する（ステップ７０４）。もし、データがＮＶＣ３１１内に存在すると判定した場合（ステップ７０４のＹｅｓ）は、キャッシュドライバ１２０は、ＮＶＣ３１１からデータを読み出す（ステップ７０５）。データがＮＶＣ３１１内に存在しないと判定した場合（ステップ７０４のＮｏ）、キャッシュドライバ１２０は、ＨＤＤ１８からデータを読み出す（ステップ７０６）。そして、キャッシュドライバ１２０は、読み出したデータをＮＶＣ３１１に書き出し、ＨＤＤ１８から読み出されたデータを学習する（ステップ７０７）。
【００５４】
ステップ７０１において、リードコマンドではない（ライトコマンドである）と判定した場合（ステップ７０１のＮｏ）、ライトコマンドに対応するアドレスのデータがＮＶＣ内に存在するかを判定する（ステップ７０８）。データがＮＶＣ３１１内に存在すると判定した場合（ステップ７０８のＹｅｓ）は、ＮＶＣ３１１内に存在するデータを書き換えると共に、ライトコマンドに対応するデータをＨＤＤ１８に書き込む（ステップ７０９）。もし、データがＮＶＣ３１１内に存在しないと判定した場合（ステップ７０８のＮｏ）、ライトコマンドに対応するデータをＨＤＤ１８に書き込む（ステップ７１０）。
【００５５】
以上の動作で、シーケンシャルリードを検出した後に、リードアクセスされたデータを学習しないようになり、性能の低下、およびキャッシュヒット率の低下を抑制することが可能になる。
【００５６】
（第１の実施形態の変形例）
プログラムＡがシーケンシャルリードを行っていても、プログラムＡのリードアクセスの間に、別のブログラムＢがリードアクセスを行うと、サイズがリセットされるので、シーケンシャルリードを検出することが困難になる。ところが、シーケンシャルリード検出用データが２行のテーブルを有すると、二つのプログラムからリードアクセスが行われても、シーケンシャルリードを検出することが可能になる。
【００５７】
次に、第１の実施の形態の変形例として、シーケンシャルリード検出用データが２行のテーブルである形態の遷移を、図１２を用いて説明する。
【００５８】
図８に示すリードアクセスがあった場合のシーケンシャルリード検出用データ３０６（ｎ＝２）内の値の推移を図１２を参照して説明する。
【００５９】
先ず、プログラムＡの動作によりＣＰＵ１１が、ＨＤＤ＿１に対してアドレスが０１００ｈからセクタ数が８０ｈのデータにリードアクセスするためのコマンドを発行する（ステップ１００１）。キャッシュドライバ１２０は、シーケンシャルリード検出用データ１２０１を生成する。シーケンシャルリード検出用データ１２０１において、ＬＲＵＣの値が１の行のＨＤＤ識別番号は１であり、Ｎｅｘｔ  ＬＢＡは１８０ｈ、サイズは８０ｈである。
【００６０】
要求されたデータがＨＤＤから読み出された後、プログラムＡの動作によりＣＰＵ１１が、ＨＤＤ＿１に対してアドレスが０１８０ｈからセクタ数が８０ｈのデータにリードアクセスするためのコマンドを発行する（ステップ１００２）。キャッシュドライバ１２０は、シーケンシャルリード検出用データ１２０２を生成する。シーケンシャルリード検出用データ１２０２において、ＬＲＵＣの値が１の行のＨＤＤ識別番号は１であり、Ｎｅｘｔ  ＬＢＡは２００ｈ、サイズは１００ｈである。
【００６１】
要求されたデータがＨＤＤから読み出された後、プログラムＢの動作によりＣＰＵ１１が、ＨＤＤ＿２に対してアドレスが１０００ｈからセクタ数が８０ｈのデータにリードアクセスするためのコマンドを発行する（ステップ１００３）。キャッシュドライバ１２０は、シーケンシャルリード検出用データ１２０３を生成する。シーケンシャルリード検出用データ１２０３において、ＬＲＵＣの値が１の行のＨＤＤ識別番号は２であり、Ｎｅｘｔ  ＬＢＡは１０００ｈ、サイズは８０ｈである。また、シーケンシャルリード検出用データ１２０３において、ＬＲＵＣの値が２の行のＨＤＤ識別番号は１であり、Ｎｅｘｔ  ＬＢＡは２００ｈ、サイズは１００ｈである。
【００６２】
プログラムＡの動作によりＣＰＵ１１が、ＨＤＤ＿１に対してアドレスが０２００ｈからセクタ数が８０ｈのデータにリードアクセスするためのコマンドを発行する（ステップ１００４）。キャッシュドライバ１２０は、シーケンシャルリード検出用データ１２０４を生成する。シーケンシャルリード検出用データ１２０４において、ＬＲＵＣの値が１の行のＨＤＤ識別番号は１であり、Ｎｅｘｔ  ＬＢＡは２８０、サイズは１８０ｈである。シーケンシャルリード検出用データ１２０４において、ＬＲＵＣの値が２の行のＨＤＤ識別番号は２であり、Ｎｅｘｔ  ＬＢＡは１０００ｈ、サイズは８０ｈである。
【００６３】
このように、プログラムＡのリードアクセスの間にプログラムＢがリードアクセスを行っても、プログラムＡのリードアクセスによるサイズの値がリセットされずに、更新されるので、プログラムＡによるシーケンシャルリードアクセスを検出することが可能になる。
【００６４】
＜第２の実施形態＞
次に、シーケンシャルライトを検出したときに、キャッシュへの学習を抑止する実施形態を第２の実施形態として、説明する。シーケンシャルライトの場合に学習を行わない場合の動作について図１３および図１４を参照して説明する。
【００６５】
なお、シーケンシャルライトの検出は、図１０を参照して説明したシーケンシャルリードの検出と同様である。なお、キャッシュドライバ１２０は、シーケンシャルリード検出用データ３０６とは別のシーケンシャルライト検出用データを管理する。
【００６６】
オペレーティングシステム１１０からＨＤＤ１８へのアクセスコマンドが発行された場合、キャッシュドライバ１２０は、コマンドがリードコマンドであるかを判定する（ステップ１４０１）。リードコマンドであると判定した場合（ステップ１４０１のＹｅｓ）、キャッシュドライバ１２０は、ＮＶＣ管理情報３０５を参照することによって、リードコマンドに対応するデータがＮＶＣ３１１内に存在するかを判定する（ステップ１４０２）。データが存在すると判定した場合（ステップ１４０２のＹｅｓ）、キャッシュドライバ１２０は、ＮＶＣ管理情報３０５を参照することによって、リードコマンドに対応するＮＶＣ３１１内のデータと、リードコマンドに対応するＨＤＤ１８内のデータとが一致するか、つまりＨＤＤ１８内のデータがダーティーであるかを判定する（ステップ１４０３）。ダーティーであると判定した場合（ステップ１４０３のＹｅｓ）、キャッシュドライバ１２０は、ＮＶＣ３１１からリードコマンドに対応するデータを読み出す（ステップ１４０４）。
【００６７】
データが存在しないと判定した場合（ステップ１４０２のＮｏ）、またはダーティーではないと判定した場合（ステップ１４０３のＮｏ）、キャッシュドライバ１２０は、リードアクセスがシーケンシャルリードであるかを判定する（ステップ１４０５）。シーケンシャルリードであると判定した場合（ステップ１４０５のＹｅｓ）、キャッシュドライバ１２０は、リードコマンドに対応するデータをＨＤＤ１８から読み出す（ステップ１４０６）。シーケンシャルリードではないと判定した場合（ステップ１４０５のＮｏ）、キャッシュドライバ１２０は、ＮＶＣ管理情報３０５を参照することによって、リードコマンドに対応するデータがＮＶＣ３１１内に存在するかを判定する（ステップ１４０７）。データが存在すると判定した場合（ステップ１４０２のＹｅｓ）、キャッシュドライバ１２０は、ＮＶＣ３１１からリードコマンドに対応するデータを読み出す（ステップ１４０８）。データが存在しないと判定した場合（ステップ１４０２のＮｏ）、キャッシュドライバ１２０は、リードコマンドに対応するデータをＨＤＤ１８から読み出す（ステップ１４０９）。キャッシュドライバ１２０は、ＨＤＤ１８から読み出されたデータをＮＶＣ３１１に書き出し、データの学習を行う（ステップ１４１０）。
【００６８】
ステップ１４０１において、リードコマンドではない、すなわちライトコマンドであると判定した場合（ステップ１４０１のＮｏ）、キャッシュドライバ１２０は、ＮＶＣ管理情報３０５を参照することによって、ライトアクセスがシーケンシャルライトであるかを判定する（ステップ１４１１）。
【００６９】
シーケンシャルライトであると判定した場合に（ステップＳ１４１１のＹｅｓ）、ライトコマンドに対応するアドレスのデータがＮＶＣ３１１に格納されているかを判定する（ステップ１４１２）。データが格納されていると判定した場合（ステップ１４１２のＹｅｓ）、キャッシュドライバ１２０は、ＮＶＣ３１１に格納されているデータを無効化する、またはＮＶＣ３１１に書き込まれているデータを上書きする（ステップ１４１３）。そして、キャッシュドライバ１２０は、データをＨＤＤ１８に書き込む（ステップ１４１４）。
【００７０】
ステップ１４１２において、データが存在しないと判定した場合（ステップ１４１２のＮｏ）、キャッシュドライバ１２０は、データをＨＤＤ１８に書き込む（ステップ１４１５）。
【００７１】
ステップ１４１１において、シーケンシャルライトではないと判定した場合（ステップ１４１１のＮｏ）、ライトコマンドに対応するアドレスのデータがＮＶＣ３１１内に存在するかを判定する（ステップ１４１６）。データがＮＶＣ３１１内に存在すると判定した場合（ステップ１４１６のＹｅｓ）、キャッシュドライバ１２０は、ＮＶＣ３１１内に存在するデータを書き換える（ステップ１４１７）。データがＮＶＣ３１１内に存在しないと判定した場合（ステップ１４１６のＮｏ）、キャッシュドライバ１２０は、ＮＶＣ管理情報３０５からエントリを見つける（ステップ１４１８）。キャッシュドライバ１２０は、見つけたＮＶＣ３１１のエントリに対応するアドレスにデータを書き込む（ステップ１４１９）。
【００７２】
以上の処理で、シーケンシャルライトアクセスの場合にＮＶＣ３１１をＨＤＤ１８のライトバックキャッシュとして使用している場合、学習を行わないことでシーケンシャルライトの性能の低下を抑制することが可能になる。
【００７３】
（第３の実施形態）
先に説明した、第１の実施形態と第２の実施形態は、シーケンシャルリード検出用データとシーケンシャルライト検出用データとをそれぞれ設けて、シーケンシャルリードとシーケンシャルライトとを検出した。第３の実施形態として、ＨＤＤ毎にシーケンシャルアクセス検出用データを設け、シーケンシャルアクセス検出用データに基づいてシーケンシャルリードとシーケンシャルライトとを検出する例について説明する。
【００７４】
キャッシュドライバ１２０は、図１５に示すように、ＨＤＤ_１用のシーケンシャルアクセス検出用データ１６０１と、ＨＤＤ_２用のシーケンシャルアクセス検出用データ１６０２とを管理する。シーケンシャルアクセス検出用データ１６０１、１６０２は、図１６５に示すように、２行のデータの配列を有する。
【００７５】
キャッシュドライバ１２０のシーケンシャルアクセスを検出する手順の一例について図１６のフローチャートを参照して説明する。このフローでは、アクセスコマンドのＨＤＤ識別子、ＬＢＡ（セクタ番号）、セクタ数が入力として与えられ、Ｔｒｕｅ（シーケンシャルアクセス）またはＦａｌｓｅ（非シーケンシャルアクセス）を出力として返す。シーケンシャルアクセス検出サイズはあらかじめ決められているか、ドライバ起動時にパラメータとして与えられる（たとえば１６ＭＢ）。
【００７６】
キャッシュドライバ１２０は、シーケンシャルアクセス検出用データ１６０１、１６０２の内のアクセスコマンドが発行されたされたＨＤＤに対応するシーケンシャルアクセス検出用データから次のＬＢＡ（セクタ番号）とが一致する行を探す（ステップ１７０１）。一致する行があった場合（ステップ１７０２のＹｅｓ）、キャッシュドライバ１２０は、次のＬＢＡ（セクタ番号）の値に今回のアクセスサイズ（セクタ数）を加える（ステップ１７０３）。キャッシュドライバ１２０は、一致した行のＬＲＵカウンタの値を０にし、その他の行のＬＲＵカウンタの値を＋１加算する（ステップ１７０４）。そして、キャッシュドライバ１２０は、現在のＳｉｚｅの値に今回のアクセスサイズ（セクタ数）を加えたサイズを算出する（ステップ１７０５）。キャッシュドライバ１２０は、算出されたサイズがあらかじめ設定されたしきい値であるシーケンシャルアクセス検出サイズより大きいかを判定する（ステップ１７０６）。シーケンシャルアクセス検出サイズより大きいと判定した場合（ステップ１７０６のＹｅｓ）、キャッシュドライバ１２０は、Ｔｒｕｅ（シーケンシャルアクセス）を出力として返す。シーケンシャルアクセス検出サイズより大きくないと判定した場合（ステップ１７０６のＮｏ）、キャッシュドライバ１２０は、現在のサイズの値を算出されたサイズの値に更新する（ステップ１７０７）。そして、キャッシュドライバ１２０は、Ｆａｌｓｅ（非シーケンシャルアクセス）を出力として返す。
【００７７】
アクセスが発行されたＨＤＤ識別番号と次のＬＢＡ（セクタ番号）とが一致する行がなかった場合（ステップ１７０２のＮｏ）、キャッシュドライバ１２０は、ＬＲＵカウンタの値が最も多い行を検出する（ステップ１７０８）。キャッシュドライバ１２０は、検出された行のＨＤＤ識別番号にアクセスされたＨＤＤに対応する値をセットし、Ｎｅｘｔ  ＬＢＡの値に今回のＬＢＡ（セクタ番号）とセクタ数との和をセットし、Ｓｉｚｅの値に今回のアクセスサイズ（セクタ数）をセットする（ステップ１７０９）。そして、キャッシュドライバ１２０は、ステップ１７０８において検出された行の行のＬＲＵカウンタの値を０にし、その他の行のＬＲＵカウンタの値を＋１加算する（ステップ１７１０）。そして、キャッシュドライバ１２０は、Ｆａｌｓｅ（非シーケンシャルアクセス）を出力として返す。
【００７８】
なお、シーケンシャルアクセス検出用データ１６０１、１６０２は、１行のデータの配列を有していても良い。
【００７９】
なお、本実施形態のＳＳＤ２０１を、ＨＤＤ１８のキャッシュとして用いる処理はコンピュータプログラムによって実現されているので、このコンピュータプログラムをコンピュータ読み取り可能な記憶媒体を通じて通常のコンピュータにインストールするだけで、本実施形態と同様の効果を容易に実現することができる。また、このコンピュータプログラムは、パーソナルコンピュータのみならず、プロセッサを内蔵した電子機器上で実行することができる。
【００８０】
（第４の実施形態）
上記実施形態では、ＳＳＤ２０１を内蔵のＨＤＤ１８のキャッシュ（リードキャッシュ、ライトバックキャッシュ）として用いていた。しかし、ＳＳＤ２０１をＵＳＢやｅＳ−ＡＴＡ等の外部機器接続バスに接続された外部記憶装置のキャッシュ（リードキャッシュ、ライトバックキャッシュ）として用いても良い。つまり、ＳＳＤ２０１は、ＨＤＤ１８と外部記憶装置のキャッシュとして用いられる。
【００８１】
外部記憶装置としてＵＳＢ−ＨＤＤを用いた例を図１７に示す。図１７に示すように、外部記憶装置としてのＵＳＢ−ＨＤＤ２０２が、ＵＳＢコントローラを有するＩＣＨ１４に接続されている。キャッシュドライバ１８２０は、ＳＳＤ２０１をＨＤＤ１８およびＵＳＢ−ＨＤＤ２０２のキャッシュデバイスとして利用するプログラムである。このプログラムは、リード及びライトを制御して応答性能を向上させる、いわゆるＨＤＤアクセラレータとして、機能させるプログラムである。具体的には、ＨＤＤアクセラレータは、ＯＳ上で動作するドライバという位置づけで、キャッシュドライバ１８２０が動作する。なお、図１７において、図１と同一な部位には同一符合を附し、説明を省略する。
【００８２】
次に、キャッシュドライバ１８２０の機能について、図１８を参照して説明する。図１８は、図１７に示す情報処理装置の主要部を示すブロック図である。Ｓ−ＡＴＡコントローラ１４ＡにＨＤＤ１８が接続されている。ＵＳＢコントローラ１４ＢにＳＳＤ２０１およびＵＳＢ−ＨＤＤ２０２が接続されている。
【００８３】
情報処理装置１０はオペレーティングシステム（ＯＳ）１１０が制御し、オペレーティングシステム１１０からＨＤＤ１８およびＵＳＢ−ＨＤＤ２０２へのアクセスは、すべてキャッシュドライバ１８２０を介して行われる。キャッシュドライバ１８２０は、Ｓ−ＡＴＡコントローラ１４ＡおよびＵＳＢコントローラ１４Ｂを、直接的または間接的に制御する。また、キャッシュドライバ１８２０は、メモリコントローラ１２Ａを介して、メインメモリ１３へのデータのアクセスを行う。
【００８４】
ＳＳＤ２０１の一部または全部の領域が、ＨＤＤ１８およびＵＳＢ−ＨＤＤ２０２のキャッシュとして使用される。オペレーティングシステム１１０は、キャッシュデータの格納領域として使用されるＳＳＤ２０１のキャッシュに直接アクセスすることができない。
【００８５】
本情報処理装置は、ＨＤＤ１８およびＵＳＢ−ＨＤＤ２０２よりアクセス速度が速いＳＳＤ（Solid State Drive）２０１を、ＨＤＤ１８およびＵＳＢ−ＨＤＤ２０２のキャッシュとして利用することで、ＨＤＤ１８およびＵＳＢ−ＨＤＤ２０２に対するアクセスの高速化を図る。
【００８６】
（第５の実施形態）
上記第４の実施形態では、ＳＳＤ２０１とＵＳＢ−ＨＤＤ２０２とが別体の例を示したが、これに限られない。
【００８７】
第５の実施形態としては、図１９に示すように、ＳＳＤ２０１とＵＳＢ−ＨＤＤ２０２とが一つの筐体内に設けられたハイブリッドハードディスクドライブ２０００にも適用が可能である。このような構成においても、上記実施形態のキャッシュ制御を用いることが可能である。
【００８８】
（第６の実施形態）
また、第６の実施形態として、図２０に示すように、ハイブリッドハードディスクドライブ（ハイブリッド記憶装置）内に、ＳＳＤ２０１、ＨＤＤ２０２の他に、制御部２１０１とメモリ２１０２を有するハイブリッドハードディスクドライブ（ハイブリッド記憶装置）２１００に適用することも出来る。
【００８９】
この場合、ハイブリッドハードディスクドライブ（ハイブリッド記憶装置）２１００内の制御部２１０１が、メモリ２１０２を使用して、キャッシュ制御を行う。図２０に示すように、メモリ２１０２内には、ユーザバッファ領域３０１、Ｌ１キャッシュ領域３０２、およびマージ用バッファ領域３０３、Ｌ１キャッシュバッファ領域３０４、Ｓｅｑ  Ｒｅａｄ検出用データ３０６が確保される。
【００９０】
（第７の実施形態）
上記第６の実施形態では、制御部２１０１は、ハイブリッドハードディスクドライブ（ハイブリッド記憶装置）２１００に設けられたメモリ２１０２をＨＤＤ２０２のキャッシュとして用いられるとしたが、これに限られない。
【００９１】
第７の実施形態としては、図２１に示すように、制御部２２０１のキャッシュドライバは、ＳＳＤ２０１内の一部に設けられるＮＶＣ３１１を、ＨＤＤ１８およびＨＤＤ２０２のキャッシュとして用いてもよい。
【００９２】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００９３】
１０…情報処理装置、１１…ＣＰＵ、１３…メインメモリ、１４Ａ…Ｓ−ＡＴＡコントローラ、１４Ｂ…ＵＳＢコントローラ、１１０…オペレーティングシステム、１２０…キャッシュドライバ（キャッシュ手段）、２０１…ＳＳＤ、３０１…ユーザバッファ領域、３０２…Ｌ１キャッシュ領域、３０３…マージ用バッファ領域、３０４…Ｌ１キャッシュ管理情報、３０５…ＮＶＣ管理情報、３０６…シーケンシャルリード検出用データ、３１１…ＮＶＣ。
【要約】
【課題】記憶装置をＨＤＤのキャッシュとして利用する場合に、アクセス性能の低下、およびキャッシュヒット率の低下を抑制すること。
【解決手段】実施形態によれば、ホストからのハードディスクドライブへのアクセス要求に対して、前記ハードディスクドライブの設定数以上の連続するセクタのデータにアクセスするかを判定する判定手段と、記憶装置を前記ハードディスクドライブのキャッシュとして用いるキャッシュ手段であって、前記設定数以上の連続するセクタのデータにアクセスすると判定された場合に前記記憶装置をキャッシュとして用いない、キャッシュ手段とを具備する。
【選択図】    図２【図１】
0005117608.tif 000002
【図２】
0005117608.tif 000003
【図３】
0005117608.tif 000004
【図４】
0005117608.tif 000005
【図５】
0005117608.tif 000006
【図６】
0005117608.tif 000007
【図７】
0005117608.tif 000008
【図８】
0005117608.tif 000009
【図９】
0005117608.tif 000010
【図１０】
0005117608.tif 000011
【図１１】
0005117608.tif 000012
【図１２】
0005117608.tif 000013
【図１３】
0005117608.tif 000014
【図１４】
0005117608.tif 000015
【図１５】
0005117608.tif 000016
【図１６】
0005117608.tif 000017
【図１７】
0005117608.tif 000018
【図１８】
0005117608.tif 000019
【図１９】
0005117608.tif 000020
【図２０】
0005117608.tif 000021
【図２１】
0005117608.tif 000022