【文献】
三華 和夫,こんな“ほら話”真に受けてない? Vista8つの都市伝説,Windows Server World ,日本,(株)IDGジャパン,2007年 7月 1日,Vol.12 No.7,P.42−43
(58)【調査した分野】(Int.Cl.,DB名)
記憶域媒体(storage medium)(706)およびキャッシュデバイス(110)が結合される(coupled)コンピューター(700)を操作するための方法であって、前記コンピューターはオペレーティングシステムを含む、コンピューターを操作する(operating)ための方法であって、
(A)前記記憶域媒体上のアドレスにデータ項目(data item)を書き込む要求に応答し、前記データ項目を前記記憶域媒体上の前記アドレスに(101)および前記キャッシュデバイス上の対応する(corresponding)アドレスに(102)書き込ませる(to be written)ステップと、
(B)前記オペレーティングシステムを再起動(reboot)した後(subsequent to)、前記データ項目を前記記憶域媒体上の前記アドレスから読み取る要求を満たすために、前記キャッシュデバイス上の前記アドレスに記憶した前記データ項目を確実に(reliably)使用できる(employed)かどうかを判定する(determining)ステップ(270、330)と、
(C)(B)において、前記データ項目を前記記憶域媒体上の前記アドレスから読み取る要求を満たすために、前記キャッシュデバイス上の前記アドレスに記憶した前記データ項目を確実に使用できると判定される場合、前記データ項目を前記キャッシュデバイス上の前記アドレスから読み取らせる(to be read from)ステップ(299)と
を含み、
前記行為(B)は、前記記憶域媒体上の前記アドレスから前記データ項目を読み取る要求に応答して実行され、前記キャッシュデバイス上の前記アドレスに記憶した前記データ項目が、前記行為(act)(A)の完了(completion)後に修正されなかった(not modified)ことを検証する(verifying)ステップをさらに含み、
(A)は、少なくとも前記データ項目の表記(representation)を生成(generating)し、
前記表記を前記キャッシュデバイスに書き込むステップをさらに含み、(B)において検証する前記行為は、
(B1)前記キャッシュデバイスに書き込まれた(written)前記表記を取得する(retrieving)ステップと、
(B2)前記表記を再生成する(re-generating)ステップと、
(B3)前記データ項目を読み取る前記要求を満たすために、前記キャッシュデバイス上の前記アドレスに記憶した前記データ項目を確実に使用できる(employed)かどうかを判定するために、(B1)で取得した(retrieved)前記表記を(B2)で再生成した前記表記と比較するステップと
を含み、
前記キャッシュデバイスに対しては実行されない(not performed)、前記記憶域媒体に対して実行される書込み操作を識別する(identify)よう動作する書込みレコーダコンポーネント(write recorder component)を提供する行為(act of providing)をさらに含み、
当該書込みレコーダコンポーネントは、オペレーティングシステムのI/Oパス内のドライバーとして実装することができ、又は、当該書込みレコーダコンポーネントの機能を提供するディスク記憶域ハードウェアとして実装することができ、
前記行為(B)は、前記記憶域媒体上の前記アドレスに記憶した前記データ項目が、前記行為(A)の完了後に修正された(modified)かどうかを、前記書込みレコーダコンポーネントにより判定する(determining)ステップをさらに含み、
もし、前記書込みレコーダコンポーネントがすべての書込み操作は追跡できなかった場合に、キャッシュコンテンツの全体、または、当該書込み操作は追跡できなかった特定の部分が、除去されるステップを更に含む、
方法。
前記行為(A)は、少なくとも前記データ項目の表記を生成し、前記表記を前記キャッシュデバイスに書き込むステップをさらに含み、(B)において判定する前記行為は、
(B1)前記キャッシュデバイスに書き込まれた前記表記を取得する(retrieving)ステップと、
(B2)前記表記を再生成するステップと、
(B3)前記データ項目を読み取る前記要求を満たすために、前記キャッシュデバイス上の前記アドレスに記憶した前記データ項目を確実に使用できるかどうかを判定するために、(B1)で取得した前記表記を(B2)で再生成した前記表記と比較するステップと
を含む、請求項1に記載の方法。
前記行為(A)は、前記データ項目が書き込まれる前記キャッシュデバイス上の前記アドレスを求めるためにキャッシュメタデータを使用するステップをさらに含み、前記行為(B)は、前記キャッシュメタデータが(A)の後に修正されたかどうかを判定するステップをさらに含む、請求項1に記載の方法。
前記少なくとも1個のプロセッサーは、前記キャッシュデバイス上のアドレスに対して実行されない、前記記憶域媒体上のアドレスに対する書込み操作の発生(occurrence)を、前記記憶域媒体に書き込まれ、前記オペレーティングシステムの再起動時にアクセスされるログ(log)ファイルを使用して識別する(identify)ようにプログラムされる、請求項7に記載のコンピューター。
前記少なくとも1個のプロセッサーは、前記データ項目を前記記憶域媒体上の前記第1のアドレスから読み取る要求を満たすために前記キャッシュデバイス上の前記対応するアドレスに記憶した前記データ項目を確実に使用できないと判定される場合、前記キャッシュデバイス上の前記対応するアドレスから前記データ項目を除去(evict)し、前記記憶域媒体上の前記第1のアドレスから前記データ項目を読み取ることにより前記要求を満たすようにプログラムされる、請求項7に記載のコンピューター。
前記キャッシュデバイス上のアドレスに対して実行されない、前記記憶域媒体上のアドレスに対する書込み操作の前記識別は、前記オペレーティングシステムの第1の機能によって有効にされ(enabled)、前記オペレーティングシステムは、前記オペレーティングシステムがシャットダウンされている(being shut down)と判断される場合に前記第1の機能をアクティブ化する(activate)ように構成される、請求項7に記載のコンピューター。
前記少なくとも1個のプロセッサーは、前記キャッシュデバイス上のアドレスに対して実行されない、前記記憶域媒体上のアドレスに対する書込み操作の発生を防ぐようにプログラムされる、請求項7に記載のコンピューター。
前記少なくとも1個のプロセッサーが識別するようにプログラムされる前記書込み操作は、前記記憶域媒体上のファイルシステムに記憶されるデータに対するものであり、前記少なくとも1個のプロセッサーは、前記オペレーティングシステムを再起動する前に、前記ファイルシステムによって使用されるログを特定の状態に置き、前記オペレーティングシステムを再起動した後、前記ログが前記特定の状態(particular state)にあるかどうかを判定することにより、前記記憶域媒体上のアドレスに対する書込み操作の発生を識別するようにプログラムされる、請求項7に記載のコンピューター。
【発明を実施するための形態】
【0016】
本発明の一部の実施形態は、キャッシュコンテンツが、電源切替えにわたりディスク記憶域のコンテンツを正確に反映することを保証するための技法を提供する。例えば、一部の実施形態は、電源切替えにわたりキャッシュコンテンツが本物のままでありかつ/または古くなっていないことを保証する能力を提供する。さらに、一部の実施形態は、電源切替え中にメタデータが改ざんされていないことを保証するためにキャッシュメタデータを管理するための技法を提供する。さらに、一部の実施形態はキャッシュメタデータを記憶する能力を提供し、この能力は、電源切替えおよび通常動作の両方を実行し得る効率を改善することができる。以下のセクションは、これらの実施形態を詳細に説明する。
I.キャッシュデータの信頼性の検証
コンピューターが電源切替えを経験する(例えばスタンバイモードもしくは休止状態モードにされ、または再起動される)とき、そのコンピューターからキャッシュデバイスを
取り外すことができ、そのキャッシュデバイスのコンテンツが(例えば悪意のあるハッカーにより)改変される可能性がある。例えば、コンピューターがスタンバイモードまたは休止状態モードにされるとき、そのコンピューターからフラッシュメモリードライブなどのリムーバブルキャッシュデバイスを取り外し、そのリムーバブルキャッシュデバイスのコンテンツを修正することができる。オペレーティングシステムが再起動される(すなわち再度読み込まれ、それによりコンピューターを再起動する)とき、内蔵NVRAMデバイスなどの非リムーバブルデバイスでさえ、取り外し、そのコンテンツを変更することができる。その結果、コンピューターにそのキャッシュデバイスが再び接続されるとき、そのキャッシュデバイスはユーザーが思うのとは違う情報を記憶している可能性がある(すなわち、キャッシュに記憶されているデータは「本物」ではない可能性がある)。入出力(I/O)要求を満たすために、本物でないデータがキャッシュから供給される場合、そのコンピューターの動作は悪い方に影響を受ける場合がある。
【0017】
本発明の一部の実施形態は、I/O要求がキャッシュからの本物でないデータを使用して満たされないことを確実にするために、電源切替え中にキャッシュコンテンツに生じる修正を検出するための技法を提供する。一部の実施形態では、電源切替え中にキャッシュコンテンツに生じ、そのキャッシュコンテンツを本物でないものにする任意の「オフライン修正」を検出するための能力を提供する。
【0018】
一部の実施形態は、この能力をデータの少なくとも一部分の表記(representation)を使用して提供する。例えば、表記は、データおよび/または他の情報の少なくとも一部分から所定の方法で計算しもしくは導き出すことができる。この表記は、データがキャッシュに書き込まれ、1つまたは複数の位置に記憶されるときに初めて生成することができる。例えば、表記は、データとともにキャッシュにまたは他の何らかの1つもしくは複数の位置に書き込むことができる。キャッシュに記憶する場合、この表記は、この表記をデータに関連させる方法で記憶することができる(例えば、この表記はデータが書き込まれるアドレスに隣接するキャッシュアドレスに書き込み、データに関連しかつ/または他の何らかの様式で関連するキャッシュメタデータに書き込むことができる)。その後、そのデータをキャッシュから読み取るとき、その表記も取得することができる。この表記は所定の方法で再生成することができ、再生成される表記は取得される表記と比較することができる。これらの表記が一致する場合、キャッシュから取得されるデータは本物であると判定され、読取り要求を満たすために供給される。一致しない場合、その読取り要求を満たすために代わりにディスク記憶域からデータを読み取るための要求が発行され、キャッシュ上に記憶された本物でないデータは除去(例えば削除)することができる。
【0019】
図2A〜
図2Bは、このプロセスをさらに詳細に示す。具体的には、
図2Aに示すプロセス20Aは、キャッシュにデータが書き込まれるときに実行される操作を含み、
図2Bに示すプロセス20Bは、その後キャッシュからそのデータが読み取られるときに実行される操作を含む。プロセス20A〜20Bは、(各図面の左側にある)キャッシュ済みボリューム120、(真ん中の)キャッシュマネージャー100、および(右にある)キャッシュデバイス110によって実行される操作をそれぞれ含む。
【0020】
プロセス20A(
図2A)の開始時に、行為205で、ディスク記憶域上のアドレスXを対象にする書込み要求がキャッシュマネージャー100によって受け取られる。行為210で、キャッシュマネージャー100は、キャッシュメタデータ(不図示)を使用して、同様にデータが書き込まれるべきキャッシュデバイス110上のアドレスYを求める。キャッシュマネージャーは、データの少なくとも一部分の表記を生成することも行う。
【0021】
本発明の諸実施形態は、この表記を任意の適切な技法を使用して生成することができる。一部の実施形態では、この表記を生成するために1つまたは複数の暗号の認証技法を使用することができる。例えば一部の実施形態では、この表記は、データおよび1組の秘密キーならびにデータ項目ごとのシーケンス番号から生成される、メッセージ認証コード(MAC)を含むことができる。ただし、本発明はそうした実装形態に限定されず、この表記を生成するための任意の適切な技法を使用することができる。例えば、暗号の認証技法
を使用する必要はない。一例として、ストロングハッシュ(strong hash)および/または巡回冗長コード(CRC)を、データを表すために代わりに使用することができ、キャッシュに記憶される個々のデータ項目からまたはデータ項目の1つもしくは複数のグループについて生成することができる。この点で、出願者らは、データの信頼性を検証する目標が単にハードウェア破損のインスタンスを検出することである(すなわちデータのハッキングは問題でない)場合、CRCを使用することで十分な場合があり、データ項目ごとにMACを生成するよりも少ない処理リソースを消費できることが分かった。しかし、その目標がハッカーや悪意のある行為者がキャッシュコンテンツを修正することを防ぐことである場合、暗号の解決策が好ましい場合があり、そのためMACなどの表記を使用することができる。本発明はどんな特定の実装形態にも限定されず、任意の適切な技法を使用することができる。
【0022】
行為215で、キャッシュマネージャー100が、キャッシュアドレスYにデータを書き込むための要求をキャッシュデバイス110に対して発行する。キャッシュマネージャーは、表記を書き込むための要求もキャッシュデバイス110に対して発行する。例えば、キャッシュマネージャー100は、その表記がキャッシュアドレスYに隣接する1つもしくは複数の位置に書き込まれ、またはデータのキャッシュメタデータ内におよび/または他の任意の技法を使用して記憶されるべきことを指定することができる。上記で論じたように、本発明はこの表記をどんな特定の位置に書き込むことにも限定されない(例えば、この表記はキャッシュデバイス110に書き込まれる必要はない)。キャッシュに書き込まれる場合、この表記は所望の任意の方法でデータに関連させることができる。
【0023】
行為220で、キャッシュデバイス110がその要求を受け取り、行為225で、そのデータおよび表記を書き込むことによりその要求を処理する。
行為230で、キャッシュマネージャー100が、データをディスクアドレスXに書き込むための、対応する要求をキャッシュ済みボリューム120に対して発行する。行為235で、キャッシュ済みボリューム120がこの要求を受け取り、行為240で、そのデータをアドレスXに書き込むことによりその要求を処理する。
図2Aには、行為215〜225の、キャッシュへの書込み後に実行されるものとして示すが、行為230〜240は、行為215〜225と同時に、または他の任意の適切な1つもしくは複数の時点において実行することができ、本発明はどんな特定の実装形態にも限定されない。これでプロセス20Aは完了する。
【0024】
プロセス20B(
図2B)は、キャッシュに記憶されたデータを読み取るために実行される操作を含む。行為245で、キャッシュマネージャー100が、キャッシュ済みボリューム120上のアドレスXに記憶されたデータを読み取る要求を受け取る。行為250で、キャッシュメタデータ(不図示)を使用し、キャッシュマネージャー100は、そのデータがキャッシュデバイス110上のアドレスYに記憶されていることを判定する。行為255で、キャッシュマネージャー100が、アドレスYに記憶されたデータおよび関連する表記の両方を取得するための読取り要求をキャッシュデバイス110に対して発行する。この要求は行為260でキャッシュデバイス110によって受け取られ、行為265で処理され、それからキャッシュデバイス100はその結果をキャッシュマネージャー100に返す。
【0025】
行為270で、キャッシュマネージャー100は、キャッシュから取得したデータを検証できるかどうかを判定する。一部の実施形態では、この判定することは、データの表記を再生成し、その再生成した表記を行為215で当初生成した表記と比較することによって行われる。例えば、行為270は、データのMACまたはCRCを再生成し、その再生成したMACまたはCRCを行為265でキャッシュから取得した表記と比較することを含むことができる。
【0026】
行為270で、その表記が検証できると判定される場合、このプロセスは行為275に進み、行為275では、読取り要求を満たすためにキャッシュデバイス110から取得されるデータが供給され、これでプロセス20Bは完了する。行為270で、その表記が検証できないと判定される場合、このプロセスは行為280に進み、行為280では、キャ
ッシュマネージャー100が、アドレスYに記憶されたデータを除去する(例えば、消去しまたは別の方法でアクセスできなくする)要求をキャッシュデバイス110に対して発行する。次いで行為285で、キャッシュマネージャー100が、ディスク上のアドレスXからそのデータを読み取る要求をキャッシュ済みボリューム120に対して発行する。この要求は行為290で受け取られ、行為295で処理され、それからそのデータがキャッシュマネージャー100に返される。次いで行為299で、読取り要求を満たすためにアドレスXから読み取られるデータが供給される。これでプロセス20Bは完了する。
【0027】
データの信頼性を検証するための暗号の解決策を使用する場合、ハッカーがキーにアクセスして、変更されるデータ項目のための表記を再生成することを防ぐために、電源切替えの期間の間、表記を生成するために使用される任意の1つまたは複数のキーをキャッシュデバイス以外の位置に書き込むことができる。例えば一部の実施形態では、(例えばコンピューターがシャットダウンされるとき)キーをディスク記憶域に記憶して不正アクセスを防ぐことができる。ただし、本発明はそうした実装形態に限定されず、キーを記憶する必要はなく、記憶する場合は任意の適切な位置にあることができる。例えば、記憶されるキーは、システムの起動中に使用可能な、オペレーティングシステムによって提供される任意の構成ストア(例えばWindowsのシステムレジストリー)内に配置し、またはキーを記憶する必要がないよう、何らかのユーザー入力(例えばパスワード)に基づいて再生成することができる。
【0028】
キャッシュデバイス上に記憶されるデータ項目の信頼性を検証するための上記に記載した実施形態は例に過ぎず、信頼性は任意の適切な技法を使用して検証することができることを理解すべきである。例えば、データ項目の信頼性は、そのデータ項目が書き込まれるとき、そのデータ項目を読み取るときに後で再生成されるそのデータ項目の少なくとも一部分の表記を生成することにより検証する必要はない。キャッシュから読み取られるデータ項目が本物であり、前にキャッシュに書き込まれたデータ項目に一致することを確実に保証する任意の適切な技法を使用することができる。本発明はどんな特定の実装形態にも限定されない。
II.キャッシュデータが古くなること(staleness)を防ぐ
上記で論じたように、従来のオペレーティングシステムは、電源切替え中に、ディスク上に記憶されたデータ項目に対して書込み操作が実行されるときを検出することができず、このことはキャッシュコンテンツを古くする。本発明の一部の実施形態は、これらの「オフライン書込み」が生じるときを検出するための機構を提供し、それにより、電源切替えが生じた後にキャッシュコンテンツがディスク上に記憶されたデータを正確に反映することを保証する。
【0029】
一部のオペレーティングシステム(例えばMicrosoft Corporationによって提供されるWindowsファミリーのオペレーティングシステム)では、一定の電源切替え(例えばスタンバイモードや休止状態モード)のセマンティックは、電源切替えの間、非リムーバブル記憶域デバイス(例えばディスク記憶域)上のデータを修正できないことである。そのため、そうした非リムーバブル媒体上のデータに対応するキャッシュコンテンツは概して古くならない。しかし、コンピューターがシャットダウンされるとき、ディスク上のデータが修正されることを可能にするいくつかのことが起こる可能性がある。例えば、ユーザーはそのコンピューター上の別のオペレーティングシステム内にそのディスクを起動し、またはそのディスクを別のコンピューターに接続し、ディスク上に記憶されたデータを修正することができる。さらに、上記で論じたように、多くの従来のオペレーティングシステムのシャットダウンの仕組みは、シャットダウン中の何らかの時点においてキャッシュデバイスがオフにされ、オペレーティングシステムによってもはやアクセスできなくなるが、そのオペレーティングシステムはディスクに引き続きアクセスできるものである。そのため、そのオペレーティングシステムは、キャッシュデバイス上にキャッシュされる、ディスク上のデータ項目を更新することができる。キャッシュデバイスはオフにされていたので、オペレーティングシステムがこれらのキャッシュコンテンツも更新するすべはなく、そのためこれらのキャッシュコンテンツは古くされる。
【0030】
これらのおよび他の発生を管理するために、本発明の一部の実施形態はシャットダウンが開始された後の、ディスク上に記憶されたデータに対する修正を検出するための技法を提供し、それによりそうした修正によって古くされるキャッシュコンテンツを更新し、キャッシュから除去し、または他の方法で処理することができる。
【0031】
キャッシュデバイスがシャットオフされた後に発生する、シャットダウン操作中にディスク記憶域に対して実行される書込みを検出するために、本発明の一部の実施形態は書込みレコーダーコンポーネントを使用する。書込みレコーダーコンポーネントは、例えばオペレーティングシステムのI/Oパス内のドライバーとして実装することができるが、本発明はそうした実装形態に限定されない。例えば、書込みレコーダーコンポーネントはハードウェアベースとすることができる。一例として、ディスク記憶域ハードウェアは、一定の期間中に生じた1組の修正を識別し、または一定の期間中に修正が生じたかどうかを識別する能力を与える1つもしくは複数のインターフェイスを提供することができる。例えば、ディスク記憶域ハードウェアは、少なくとも一部の記憶済みデータ項目が更新されたことであって、その場合ディスク上に記憶されるデータに対応するキャッシュコンテンツを除去することができる(この除去することは頻繁に生じるべきでなく、そのためキャッシュデバイスを使用することは依然としてかなりの利益をもたらすことになる)、少なくとも一部の記憶済みデータ項目が更新されたことを推論するために使用することができる、スピンアップ/パワーアップ/起動カウンターを提供することができる。本発明はどんな特定の実装形態にも限定されない。
【0032】
一部の実施形態では、この書込みレコーダーコンポーネントは、シャットダウンが開始されるときにアクティブになり、シャットダウンが完了するまで、ディスク記憶域に対して実行されるすべての書込みを追跡するように構成される。その結果、後にコンピューターが再起動されるとき、キャッシュコンテンツにこれらの書込みを施すことができる。例えばコンピューターが再起動され、ディスクボリュームがオンラインになるとき、キャッシュマネージャーを起動することができ、ディスクに対する書込みを追跡し始めることができる。キャッシュマネージャーは、書込みレコーダーコンポーネントにクエリして、キャッシュデバイスがシャットオフされた後に生じたオフライン書込みを判断し、これらの書込みをキャッシュマネージャーが起動中に追跡した書込みとマージし、キャッシュコンテンツにそのマージした1組の書込みを施すことができる。キャッシュコンテンツに書込みを施すことは、例えば書込みの対象にされたディスク上のデータに対応するキャッシュコンテンツを更新すること(例えばこれらのキャッシュコンテンツに対して同じ書込み操作を実行すること)、これらのキャッシュコンテンツを除去すること、その2つの組合せ(例えば特定のキャッシュコンテンツに書込み操作を施し、他のものを除去すること)、または他の何らかの1つもしくは複数の操作を実行することを含むことができる。キャッシュコンテンツにオフライン書込みが施された後、書込みレコーダーコンポーネントをシャットダウンすることができ、キャッシュデバイスはI/O要求に応えることを開始することができる。
【0033】
図3は、オフライン書込みを追跡し、キャッシュコンテンツにこれらの書込みを施すためのプロセスの一例30を示す。具体的には、プロセス300は、コンピューターのシャットダウンおよびその後の再起動中にキャッシュマネージャー100、書込みレコーダー300、キャッシュデバイス110、およびキャッシュ済みボリューム120によって実行される操作を含む。
【0034】
コンピューターのシャットダウン中に生じる行為305で、キャッシュマネージャー100が書込みレコーダー300をアクティブ化し、書込みレコーダーによって追跡されるべき書込み操作の組(すなわち世代)を識別する「保持識別子(persistence
identifier)」を書込みレコーダー300に供給する。(保持識別子に関する使用の例は以下に詳細に記載する)。行為310で、キャッシュマネージャー100がその保持識別子、ならびにメモリーの中に記憶されるキャッシュメタデータをキャッシュデバイス110に書き込む。シャットダウンプロセスのこの時点において、キャッシュデバイス110がオフにされ、キャッシュマネージャー100にとってアクセスできなくな
る。
【0035】
行為315で、書込みレコーダー300が、行為305で自らに渡された保持識別子をキャッシュ済みボリューム120に書き込み、シャットダウンの間にキャッシュ済みボリューム120に対して実行される任意の書込み操作を追跡し始める。例えば、書込みレコーダー300は、書込み操作が実行されるディスク上のアドレスおよび/またはそれらのアドレスに書き込まれるデータを指示するために、キャッシュ済みボリューム120上にまたは他の何らかの1つもしくは複数の位置にログファイルまたは1つもしくは複数の他のデータ構造を作成することができる。行為315の完了時に、このコンピューターのシャットダウン操作は完了している。
【0036】
その後、このコンピューターが再起動される。この起動プロセスの一部として、キャッシュ済みボリューム120がオンラインにされ、書込みレコーダー300およびキャッシュマネージャー100が再起動される。次いで、キャッシュマネージャー100は、キャッシュ済みボリューム120に対して実行される書込み操作の追跡を開始することができる。例えば、キャッシュマネージャー100はログファイルを作成し、そのログファイルをキャッシュデバイス110、キャッシュ済みボリューム120、および/またはコンピューターのメモリー(
図3には不図示)上に記憶することができる。行為320で、書込みレコーダー300が、行為315でログされたボリュームの変更、ならびに行為315でキャッシュ済みボリューム120に書き込まれた保持識別子を読み取る。次いで行為325で、このボリュームの変更および保持識別子がキャッシュマネージャー100に渡される。
【0037】
この書込みレコーダー300は、キャッシュデバイス110がオフにされた後の、ディスクに対するすべての書込みを追跡する能力はなくてよいことを理解すべきである。例えば、ハードウェアのデータ破損、タイミングの悪い電源障害、および/またはログファイルを書き込む上での問題は、書込みレコーダー300がディスクボリュームに対して実行されるすべてのオフライン書込みを追跡することをできなくする可能性がある。そのような場合、行為325で、書込みレコーダー300は、そのログが、実行されたすべてのオフライン書込みの完全かつ正確な記録であると確実に判断できないことをキャッシュマネージャー100に知らせることができる。これが生じる場合、キャッシュマネージャー100は、潜在的に信頼できないものであるとして、キャッシュコンテンツの全体または(例えば書込みレコーダーがすべての書込み操作は追跡できなかった特定のディスクボリュームに対応する)その一部分を除去することができる。
図3についての記載の残りの部分は、書込みレコーダー300がすべてのオフライン書込みを追跡する能力があるとみなす。
【0038】
行為330で、キャッシュマネージャー100が、キャッシュメタデータおよび保持識別子をキャッシュデバイス110からメモリーの中に読み取る。キャッシュマネージャー100は、その保持識別子を検証できるかどうかを判定する(これについては以下にさらに記載する)。検証できない場合、キャッシュマネージャー100は、キャッシュデバイス110のコンテンツの全体または(例えば保持識別子を検証できなかった特定のディスクボリュームに対応する)その一部分を除去することができる。保持識別子を検証することができる場合、キャッシュマネージャー100は、コンピューターが再起動されてからディスク記憶域に対して実行される任意の書込み操作を、書込みレコーダー300によって追跡される任意の書込み操作とマージする。例えば、1つまたは複数のログが、ディスク上のそれぞれのアドレスに書き込まれるデータを示す場合、キャッシュマネージャー100はそれぞれのアドレスに対して実行される最新の更新を選択し、それをメモリーに書き込むことができる。
【0039】
一部の実施形態では、書込みレコーダー300は、コンピューターが再起動された後に書込みを記録し続けるよう構成することができ、それにより、キャッシュマネージャー100は、その時点の後に実行される書込みを記録し、それらの書込みを書込みレコーダー300によって追跡される書込みとマージする必要はない。代わりに、書込みレコーダー300は、すべての書込みの記録をキャッシュマネージャー100に単純に提供すること
ができる。
【0040】
行為330で読み取ったキャッシュメタデータを使用し、行為335で、キャッシュマネージャー100はその1組の書込みをキャッシュデバイス110のコンテンツに施す。上記に記載したように、書込みを施すことは、キャッシュコンテンツを除去すること、キャッシュコンテンツを更新すること、その両方を行うこと、または他の何らかの1つもしくは複数の操作を実行することを含むことができる。例えば、行為315で書込みレコーダー300によって追跡されるオフライン書込みは、対応するキャッシュコンテンツを除去することによって施すことができる一方で、コンピューターが再起動されてからキャッシュマネージャー100によって追跡される書込みは、それらの書込みを反映させるために対応するキャッシュコンテンツを更新することによって施すことができる。キャッシュコンテンツに書込み操作を施すことは任意の適切な方法で行うことができ、本発明はどんな特定の実装形態にも限定されない。
【0041】
行為335の完了時に、
図3のプロセスは完了する。
本発明は、シャットダウンが開始されるときにアクティブになるように構成される書込みレコーダーコンポーネントを使用することに限定されず、シャットダウン中に発生しない書込み操作も追跡しまたはそうした書込み操作を代わりに追跡し得ることを理解すべきである。例えば、一部の実装形態では、キャッシュデバイスがある期間にわたりアクセス不能になりやすい可能性がある。例えば、そのキャッシュデバイスが1つまたは複数のネットワークを介してアクセスされる場合は接続性が失われる可能性があり、またはそのキャッシュデバイスがコンピューターから取外し可能な場合は不意の(例えば意図的でない)取外しが生じる可能性がある。その結果、一部の実施形態は、シャットダウン中に発生する書込みだけでなくディスクに対して実行されるすべての書込み(またはその一部分)を追跡するための書込みレコーダーと、引き続きオンラインでありながら、定期的にキャッシュの「スナップショット」をキャプチャするように構成されるキャッシュデバイスとを使用する場合がある。そのため、キャッシュがある期間にわたりアクセス不能になり、その後再び接続される場合、キャッシュの最新のスナップショットは、完全に再構築しなければならないのではなく、書込みレコーダーによって追跡される書込み操作を使用して更新することができる。
【0042】
図3のプロセスの一例30は、シャットダウン中にオペレーティングシステムによって実行されるオフライン書込みを検出することができるが、シャットダウンが完了した後にディスクに対して実行されるオフライン書込みを検出するために他の手段が必要とされ得る場合があることも理解すべきである。そうした書込みは、例えばユーザーがシャットダウン後に別のオペレーティングシステム内にディスクを起動し、またはシャットダウン後にコンピューターからディスクを取り外し、それを別のコンピューターに接続し、ディスク上に記憶されたデータを修正する場合に生じることができる。
【0043】
シャットダウン後に発生する(例えば別のオペレーティングシステムによる)オフライン書込みを追跡しようとする試みに関連する困難を認識し、本発明の一部の実施形態は、代わりにそれらのオフライン書込みが発生することを防ごうとする。例えば一部の実施形態は、シャットダウン後に書込みレコーダーコンポーネントを提供しないオペレーティングシステムに対し、特定のディスクボリュームをアクセス不能にしようと試みる。これは数多くの方法のうちのいずれかによって達成することができる。
【0044】
一部の実施形態では、書込みレコーダー300は、オフライン書込みを追跡するための書込みレコーダーコンポーネントを提供しないオペレーティングシステムによってディスクボリュームがマウント不能になるような方法でディスクボリュームをマークすることができる。例えば、書込みレコーダー300は、ボリューム上で使用されるファイルシステムの種類を示すボリューム識別子を修正することができる。この点で、ボリューム識別子は、ボリューム上にデータを記憶するために使用されるファイルシステムの種類をオペレーティングシステムが識別できるようにし、それにより、そのボリューム上に記憶されるデータの構造、ファイルを探す場所等をオペレーティングシステムが理解できるようにすることを当業者なら理解されよう。例えば、ボリューム上にデータを記憶するためにNT
ファイルシステム(NTFS)ファイルシステムが使用されていたことをボリューム識別子が示す場合、そのボリュームをマウントしようと試みる別のオペレーティングシステムは、そのボリューム上のデータを解析し、アクセスするためにNTFSファイルシステムが必要になることを理解する。ボリューム上にデータを記憶するために使用されるファイルシステムの種類をボリューム識別子が示さなかった場合、ほとんどのオペレーティングシステムはそのボリュームをマウントすることに失敗し、そのボリューム上に記憶されるデータの構造を知る確実な方法はなくなる。そのため、本発明の一部の実施形態は、ディスクボリュームのボリューム識別子を修正してそのディスクボリュームをアクセスできなくし、それにより、ユーザーが別のオペレーティングシステム内にそのディスクボリュームを起動し、そのボリューム上に記憶されたデータをオフラインで変更することを防ぐ。
【0045】
たとえボリューム識別子が修正されていても、一部のオペレーティングシステムは、ボリューム上にデータを記憶するために使用されるファイルシステムの種類を識別できる可能性があることを認識し、本発明の一部の実施形態は、オペレーティングシステムがそのボリュームをマウントするときを検出するための機構を提供する。この点で、ディスクボリュームをマウントするために、どんなオペレーティングシステムもボリューム識別子を(例えばそのボリューム上にデータを記憶するために、NTFSファイルシステムが使用されていたことを示すために)更新して、そのディスクボリューム上のデータがアクセスされることを可能にする必要がある。そうした任意の更新は、再起動時に容易に検出可能である。そうした更新が検出された場合、本発明の一部の実施形態は、最後のシャットダウンからそのボリュームのコンテンツが修正されていたとみなし、そのボリューム上に記憶されるデータに対応するキャッシュコンテンツを除去することができる。
【0046】
本発明の一部の実施形態は、同じく書込みレコーダーコンポーネントを使用する別のオペレーティングシステム内にディスクボリュームを起動することができる能力を提供する。例えば、書込みレコーダーコンポーネントを提供するオペレーティングシステムを実行するあるコンピューターからディスクを取り外し、そのディスクを書込みレコーダーコンポーネントを提供する別のオペレーティングシステム内に起動する場合、そのボリュームをキャッシュできることを、変えられたボリューム識別子が示すことを認識するよう、そのもう一方のオペレーティングシステムを構成することができる。その結果、そのもう一方のオペレーティングシステムは、最初のオペレーティングシステムによって作成された、(例えばそのボリューム上に記憶される)オフライン書込みのログを増やすことができる。
【0047】
一定のオペレーティングシステムによりディスクボリュームをマウントできなくすることを目的とする上記に記載した実施形態は、特定の機能を実行するためにボリューム識別子に依拠する特定のアプリケーション(例えばバックアップアプリケーション)に問題を引き起こす場合がある。これらのアプリケーションでは、ボリューム識別子が変えられた場合、そのボリュームを認識できなくなり、したがってバックアップされない可能性がある。よって、本発明の一部の実施形態は、シャットダウン後にファイルシステムがマウントされたかどうかを判定するための機構を提供する。ファイルシステムがマウントされた場合、そのファイルシステム内のデータに変更が加えられたとみなされ、そのファイルシステム内のデータに対応するすべてのキャッシュコンテンツを除去することができる。
【0048】
一部の実施形態は、シャットダウン時にファイルシステムのログを、そのファイルシステムをマウントしようと試みる任意のオペレーティングシステムがそのログを何らかの方法で修正すること(例えばそのログの位置を変更する、新たなエントリーを追加する等)を必要とする状態に置くことにより、シャットダウン後のファイルシステムのマウンティングを検出することができる。例えば、書込みレコーダー300は、ファイルシステムがマウント解除されるとき、オフライン書込みをログするタスクの一部として、そのファイルシステムのログの位置および/またはコンテンツを(例えばログ自体の中に)メモ(note)することができる。ファイルシステムをマウントしようと試みる任意のオペレーティングシステムはログを変更しなければならない(例えばファイルシステムがNTFSファイルシステムであった場合、そのファイルシステムをマウントしようと試みるオペレ
ーティングシステムはログにエントリーを追加することになる)ので、再起動時にログが変更されていない場合、そのファイルシステムは電源切替え中に別のオペレーティングシステムによってマウントされず、そのため、そのファイルシステムに記憶されるデータに対応するキャッシュコンテンツは古くされていないとみなされる。逆に、ログが何らかの方法で変更されている場合(例えばそのログの位置が変更され、エントリーが追加されている等)、そのファイルシステムは別のオペレーティングシステムによってマウントされ、かつそのファイルシステム内に記憶されるデータが変わっており、そのファイルシステムに記憶されるデータに対応するキャッシュコンテンツを古くしているとみなされる。そのため、これらのキャッシュコンテンツは除去することができる。
【0049】
オフライン書込みを防ぐための機構を提供することに加え、本発明の一部の実施形態は、矛盾した世代のキャッシュコンテンツを管理する能力を提供する。矛盾した世代のキャッシュコンテンツは、数多くの理由のうちのいずれかのために作成される可能性がある。一例は、第1のキャッシュデバイスおよび第2のキャッシュデバイスが接続される、第1のコンピューターおよび第2のコンピューターが、電源切替えにわたりキャッシュコンテンツを保持するために本明細書に記載の技法を使用するときに生じることができる。第1のコンピューターに第2のキャッシュデバイスが接続され(または第2のコンピューターに第1のキャッシュデバイスが接続され)、第1のコンピューターが再起動される場合、I/O要求を満たすために誤ったデータが第2のキャッシュデバイスから供給される可能性がある。これは、第1のコンピューターのオペレーティングシステムが、第2のキャッシュデバイスのコンテンツを(キャッシュから返されるデータの再生成された表記が当初生成された表記に一致することができるため)本物であり、(キャッシュコンテンツにオフライン書込みを施すことができるため)古くないとみなすことができるからである。別の例は、第1のキャッシュデバイスがコンピューターに接続され、そのコンピューターがシャットダウンされ(それによりキャッシュコンテンツを保持し)、次いでそのコンピューターが再起動され、第2のキャッシュデバイスが接続され、そのコンピューターが再びシャットダウンされる(それにより再びキャッシュコンテンツを保持する)場合に生じることができる。その後、コンピューターが再び再起動され、第1のキャッシュデバイスが接続される場合、その第1のキャッシュデバイスが最新の世代のキャッシュコンテンツを記憶しないことを判断するための確実な方法がないため、I/O要求を満たすために誤ったデータが供給される可能性がある。
【0050】
一部の実施形態は、最後のシャットダウンより前に保持されたキャッシュコンテンツがI/O要求を満たすために間違って使用されないよう、矛盾した世代のキャッシュコンテンツを識別する能力を提供する。一部の実施形態では、この能力は、(一例として)シャットダウンが開始されるときに数多くの方法のうちのいずれかによって生成することができる、一意の保持識別子によって提供される。例えば、このためにGUIDおよび/または暗号の乱数ジェネレーターを使用することができる。
図3に関して上記に述べたように、この保持識別子はキャッシュデバイス上に(例えばキャッシュメタデータ内にまたはキャッシュメタデータとともに)、ならびにコンピューター上(例えばディスクおよび/またはメモリー上)に記憶し、そのコンピューターが起動されるときに(例えば2つのバージョンを比較することにより)検証することができる。検証に失敗する場合、前に保持したキャッシュの世代に相当するものとしてキャッシュコンテンツを除去することができる。
【0051】
上記で論じた認証キーのように、保持識別子を生成するために使用されるどんなキーも、電源切替えの期間にわたりキャッシュデバイス以外の位置に書き込むことができる。例えば一部の実施形態では、書込みレコーダーコンポーネントが、キーならびに保持識別子を(例えばシャットダウン時に)ディスク記憶域に書き込むことができる。しかし、本発明はそうした実装形態に限定されず、当業者はキーを保存することができる数多くの代わりの位置を思い描くことができよう。キーは、例えばシステムの起動中に使用可能な、オペレーティングシステムによって提供される任意の構成ストア(例えばWindowsのレジストリー)内に保つことができる。
III.キャッシュメタデータ
上記に述べたように、キャッシュメタデータは、データ項目が記憶されるディスクアドレスと、それらのデータ項目がキャッシュされるキャッシュデバイス上の対応するアドレスとの間のマッピングを提供することができる。本発明の一部の実施形態はキャッシュメタデータを記憶するための能力を提供し、この能力は、システムのランタイム動作中にキャッシュメタデータを記憶するために必要なメモリーの量を大幅に減らす。
【0052】
さらに、一部の実施形態は、コンピューターが再起動されかつ/またはキャッシュデバイスがオンラインにされるときにキャッシュコンテンツに確実にアクセスできるよう、電源切替えまたはキャッシュデバイスをオフラインにする他の任意のイベント(例えばコンピューターからキャッシュデバイスを取り外すこと、ネットワークキャッシュデバイスにアクセスできなくするネットワーク故障等)にわたり、キャッシュメタデータが依拠されることを可能にする技法を提供する。この点で、一定の種類の電源切替え(例えばスタンバイモードおよび休止状態モード)では、スタンバイ切替えおよび休止状態切替えの間にメモリーのコンテンツは保たれるため、キャッシュメタデータを単純にメモリー(すなわちRAM)に記憶することが許容できることを理解すべきである。しかし、再起動中は、システムメモリーのコンテンツは保たれない。そのため、本発明の一部の実施形態は、シャットダウン中にキャッシュメタデータを何らかの1つまたは複数の不揮発性媒体上に記憶し、再起動時に復元することを可能にする。例えば、キャッシュメタデータは、キャッシュデバイス上に、および/または1つもしくは複数の別個の不揮発性媒体上に記憶することができる。さらに、一部の実施形態は、キャッシュメタデータのある一部を他のキャッシュメタデータから導き出すことができ、そのためすべてのキャッシュメタデータを記憶することは不要な場合がある。
【0053】
一部の実施形態は、キャッシュデバイスがオフラインになるとき(例えばコンピューターのシャットダウン中、コンピューターからキャッシュデバイスを取り外すこと、ネットワークキャッシュデバイスにアクセスできなくするネットワーク故障等)のメタデータに対する不注意のまたは悪意のある修正を検出し防ぐよう、キャッシュメタデータの信頼性を検証するために、上記のセクションIに記載した技法を使用することができる。例えば、キャッシュデバイスがオンラインになるとき、キャッシュマネージャーは、メモリーにメタデータがロードされるとき、
図2A〜
図2Bに関して上記に記載した技法を使用してそのメタデータの信頼性を検証することができる。キャッシュメタデータの信頼性を検証できない場合、対応するキャッシュコンテンツはディスク上に記憶されるデータに基づいて更新し、除去し、または上記に記載したように他の方法で処理することができる。
【0054】
一部の実施形態では、シャットダウン中に保存し再起動時にロードするメタデータの量を減らすために、キャッシュメタデータを圧縮することができる。メタデータを圧縮することは、そのメタデータに関する情報を含む別個の情報(例えばキャッシュ内のヘッダー)を保存することを必要とする場合があるので、再起動時にこの情報の信頼性も検証するために上記に記載した技法を使用することができる。
【0055】
本発明の一部の実施形態は、メモリーに記憶されるキャッシュメタデータの量を常に大幅に減らし、それにより(例えばランタイム動作中および起動/シャットダウン動作中に)メモリーにキャッシュメタデータをロードし、メモリーからキャッシュメタデータをオフロードするのに必要な時間を減らし、キャッシュメタデータのメモリー「フットプリント」を大幅に減らす方法でキャッシュメタデータを記憶するための技法を提供する。この点で、キャッシュデバイスが比較的大きな記憶容量を有する状態では、キャッシュコンテンツを管理するためにかなりの量のメタデータが必要な場合があることを理解すべきである。例えば、16ギガバイトの記憶容量を有するキャッシュデバイスは、最高32ギガバイトの圧縮データを記憶する能力があり得る。一部の実装形態では、4キロバイトのディスク記憶域に相当する「データ単位」で、ディスクアドレスをキャッシュメタデータ内に反映させることができる。そのため、32ギガバイトのデータの位置を追跡するために、800万個の互いに異なるデータ単位が必要である。その800万個のデータ単位のそれぞれが、16バイトマッピングを使用してキャッシュメタデータ内に表される場合(すな
わちディスクアドレスからキャッシュアドレスまで)、これらのマッピングは128メガバイトの記憶域を必要とする。出願者らは、128メガバイトのキャッシュメタデータをメモリーに記憶することは、多くのコンピューターにおいて不必要に多くのメモリーの部分を占有することが分かった。さらに、シャットダウン中に128メガバイトのキャッシュメタデータをメモリーから不揮発性媒体に書き込み、再起動時に128メガバイトのキャッシュメタデータを不揮発性媒体からメモリーに復元するのに必要な時間はひどく時間がかかり、過度の量の処理リソースを消費する。
【0056】
キャッシュメタデータの量は容易に減らすことはできないことを認識し、本発明の一部の実施形態は、キャッシュメタデータを記憶するために必要な記憶域リソース、ならびにシャットダウン時および起動時にキャッシュメタデータを保存/復元するために必要な時間および処理リソースを減らすことを目的とした技法を提供する。
【0057】
一部の実施形態では、これは、キャッシュメタデータを1つまたは複数の階層型データ構造(例えばツリー、マルチレベルアレイ等)に記憶することによって達成される。階層型データ構造を使用することは、その階層のより低いレベルを不揮発性媒体(例えばキャッシュデバイス)上に記憶することを可能にできる一方、メモリーにはその階層のより高いレベルだけが記憶される。例えば一部の実施形態では、かなりの記憶容量を有するキャッシュデバイスをサポートするために必要な量のキャッシュメタデータを全体として記憶しながらでさえ、キャッシュメタデータ内でメモリーによって占有される「フットプリント」を大幅に減らすことができるよう、階層のより高いレベルだけがメモリーに記憶される。当然、キャッシュメタデータにおける階層のより高いレベルだけを記憶し、一部の実施形態は、階層のより低いレベルに保たれる何らかの情報に繰り返しアクセスすることに関連するI/Oオーバーヘッドを減らすよう、そのより低いレベルに保たれる情報もメモリーに記憶することを可能にすることができる。本発明は、どんな特定の様式で実装されることにも限定されない。
【0058】
システムの動作中、読取り要求が処理されるとき、その読取り操作を実行するために不揮発性媒体から(すなわち階層のより低いレベルから)読み取られるキャッシュメタデータは、メモリーに「ページイン」する(すなわち記憶域媒体からメモリーに読み取る)ことができ、そのため、同じディスクアドレス/キャッシュアドレスに対するその後の読取り要求に関し、そのキャッシュメタデータにより速くアクセスすることができる。コンピューターが後にシャットダウンされ、および/またはキャッシュデバイスがオフラインにされるとき、階層のより高いレベルに記憶されるキャッシュメタデータ、およびメモリーにページインされた、階層のより低いレベルに記憶されるキャッシュメタデータのみを不揮発性媒体に保存する必要があり得る。そのため、シャットダウン時にキャッシュメタデータをメモリーから不揮発性記憶域に移動させ、再起動時にキャッシュメタデータを不揮発性記憶域からメモリーに復元するのに必要な時間を大幅に短縮することができる。
【0059】
本発明の一部の実施形態は、キャッシュメタデータの少なくとも一部分を記憶するためにB+ツリーを使用する。当業者なら分かるように、B+ツリーは大きな分岐数(branching factor)を使用し、その結果、使用される階層のレベルの数を減らすことができる。上記に挙げた例を使用し、キャッシュメタデータ内に800万個のデータ単位が表され、分岐数が200のB+ツリーが使用される(そのため階層内の各ノードは200個の「子」ノードを有する)場合、そのメタデータを記憶するには3つのレベルしか有さないデータ構造で十分であり、その3つのレベルとはつまり、最高レベルにある単一の「ルート」ノード、2番目のレベルにある200個のノード、および3番目のレベルにある4万個のノードであり、その4万個のノードのそれぞれが200個のデータ単位(または合計800万個のデータ単位)へのポインターを含む。
【0060】
図4は、ルートノード400、レベル2ノード410
1〜200、およびレベル3ノード420
1〜200を含むこのB+ツリーの例を示す。各ノードは、階層内のより低いレベルにあるノードへのポインターによりそれぞれが分けられる200個のエレメントを含む。例えば、ルートノード400の中のエレメント402は、ポインター401および403によって区切られる。ノードの中のエレメントの左側または右側のポインターをたど
ることにより、所与のキー(例えばディスクアドレス)に関連する値(例えばキャッシュアドレス)を求めることができ、キーがエレメントよりも少ない場合はそのエレメントの左側のポインターがたどられ、キーがエレメントよりも大きい場合は右側のポインターがたどられる。例えば、エレメント402よりも少ないキーの値を求めるために、ポインター401をレベル2ノード410
1までたどり、エレメント402より大きいがエレメント404よりも少ないキーの値を求めるために、ポインター403をレベル2ノード410
2(不図示)までたどり、その後も同じように続く。同様に、レベル2ノードにおいて、(そのキーがノードの中のエレメントより少ないか大きいかに応じて)エレメントの左側または右側のポインターをレベル3ノードまでたどる。レベル3において、(この場合もやはり、そのキーがノードの中のエレメントより少ないか大きいかに基づいて)最後のポインターがその値までたどられ、レベル3における各ポインターは、キャッシュメタデータ内の800万個のデータ単位のうちの1つを参照する。
【0061】
大きい分岐数を有するB+ツリーは、比較的「平らな」階層を提供し、ほぼすべてのノードがその階層の底辺レベルに位置することを理解すべきである。つまり、このツリーの中の計40,201個のノードのうち、40,000個が最も低いレベルにある。本発明の一部の実施形態は、起動時にこの階層の上位2レベルだけをメモリーに復元する一方、この階層の最も低いレベルのキャッシュメタデータを必要になるまでキャッシュデバイス上に記憶しておくことにより、このことをうまく利用する(例えば最も低いレベルのキャッシュメタデータは、読取り要求が処理されるときにオンデマンドでメモリーにロードすることができ、遅延ロード等をすることができる)。階層型データ構造の一部分しかメモリーに記憶されないので、このキャッシュメタデータは、キャッシュメタデータの全部またはそのより大きい部分をメモリーに保持する場合にさもなければ必要になるよりも、はるかに小さいメモリーの部分を占有することができる。さらに、コンピューターがシャットダウンされるとき、上位2レベルのデータおよび動作中にメモリーにロードされるデータしかキャッシュデバイス上に記憶する必要はない。その結果、起動動作およびシャットダウン動作のどちらも、速く効率的に行うことができる。
【0062】
したがって本発明の一部の実施形態は、階層のあるレベル(上記の例ではレベル3)における、キャッシュデバイス上に記憶されるノードを参照する、この階層の別のレベル(上記の例ではこの階層のレベル2)における、メモリーに記憶されるノードの中のポインターを提供する。例えば、キャッシュ済みのデータ項目を得るための読取り要求が受け取られるとき、本発明の諸実施形態は、メモリーに記憶される階層の1つまたは複数のレベルにわたりポインターをたどり、キャッシュに記憶されるその階層のより低いレベルにあるメタデータまでたどり、キャッシュの中でそのデータ項目が記憶されるアドレスを求める。一部の実施形態では、データ項目のキャッシュアドレスが求められると、その項目を読み取るためのその後の要求をキャッシュデバイスからキャッシュメタデータを読み取る必要なく実行できるよう、そのキャッシュアドレスをメモリーに記憶することができる。
【0063】
図5は、本発明の一部の実施形態による、キャッシュメタデータを管理するためのシステムの一例50を示す。
図5は、その両方がコンピューター(不図示)にとってアクセス可能な、メモリー500およびキャッシュデバイス110を示す。コンピューターが起動されると、動作505で、B+ツリーなどの階層型データ構造の1つまたは複数のレベルを含むキャッシュメタデータが、メモリー500にロードされる。説明するために上記の例を使用すると、キャッシュメタデータ内に800万個のデータ単位が表され、そのためそのキャッシュメタデータを記憶するために3レベルの階層型データ構造を使用することができる場合、階層の上位2レベルをメモリー500にロードすることができる。当然、メタデータ内に800万個を上回るまたは下回るデータ単位が表され、3を上回るまたは下回るレベルを有する階層型データ構造が使用される場合、その階層について異なる数のレベルをメモリー500にロードすることができる。
【0064】
その後、読取り要求がキャッシュの中に保持されるデータ項目を対象にする場合、キャッシュデバイス110の中に記憶される階層の1つまたは複数のレベルの中に記憶されるキャッシュメタデータにアクセスすることにより、そのデータ項目が記憶されるキャッシ
ュアドレスが求められる。次いで、このデータ項目が記憶されるキャッシュアドレスを求めるためにキャッシュデバイス上に記憶されるキャッシュメタデータを読み取る必要なく、このデータ項目についてのその後の読取りまたは書込みを実行できるよう、このキャッシュメタデータがメモリー510に記憶される。代わりに、キャッシュアドレスをメモリーから読み取ることができ、その読取りは、キャッシュに対する読取りよりも速く行うことができる。
【0065】
後にコンピューターがシャットダウンされるとき、行為515で、メモリーに記憶されるキャッシュメタデータ(すなわち操作505でメモリーにロードされる、階層のレベルに記憶されるメタデータおよび操作510でメモリーに書き込まれる、読取り要求を満たすために使用される任意のメタデータ)がキャッシュデバイス500にロードされる。比較的少ない量のキャッシュメタデータがメモリーに記憶される結果、かなりの処理リソースを必要とせずにシャットダウンを速く実行することができる。
【0066】
B+ツリーは、キャッシュメタデータを記憶するために使用することができる数多くの種類のデータ構造のうちの1つに過ぎず、他の種類のデータ構造(例えばAVLツリー、赤黒ツリー、バイナリー検索ツリー、Bツリーなどの階層型構造ならびに/または他の階層型および非階層型データ構造)を使用することができることを理解すべきである。本発明は、キャッシュデータを記憶するためにどんな1つのデータ構造またはデータ構造の組合せを使用することにも限定されない。
【0067】
一部の実施形態は、任意の時点においてメモリーに保たれる、キャッシュメタデータの「目標量」を定めることができる。この目標量は、任意の適切な様式で決定することができる。例えば目標量は、コンピューターにとって利用可能な物理メモリーの量の割合とすることができる。例えば、コンピューターが1ギガバイトのメモリーを有する場合、任意の時点において、(一例として)2メガバイトのキャッシュメタデータをメモリーに記憶することができる。したがって、そのコンピューターがシャットダウンされるとき、2メガバイトのキャッシュメタデータしかキャッシュデバイスにロードする必要がない。
【0068】
一部の実施形態では、キャッシュメタデータをメモリーの内外に循環させることができる。例えば、キャッシュメタデータの目標量が既にメモリーに記憶されており、キャッシュメタデータがキャッシュデバイスから読み取られることを必要とする読取りが実行される場合、そのメタデータをメモリーに「ページイン」することができ、他の(例えば最も長い間アクセスされていない)キャッシュメタデータを消去することができる。例えば、キャッシュメタデータは、キャッシュデバイスに書き込まれた後に消去することができる。あるいは、このシステムは、キャッシュメタデータが最後に書き出されてからそのキャッシュメタデータが変わっているかどうかを判定することができ、変わっていない場合、そのキャッシュメタデータは単純に消去することができ、こうしてそのキャッシュメタデータを書き込むためにさもなければ必要な時間および処理リソースをなくす。上記に記載した技法を使用して、メモリー内でキャッシュメタデータによって占有される小さい「フットプリント」を維持することができる。
【0069】
図6は一例を示す。具体的には、
図6に示すプロセス60は、上記に記載した技法を使用してキャッシュメタデータを読み取るために、キャッシュマネージャー100によって実行することができる操作を含む。
【0070】
プロセス600の開始時に、行為605で、ディスクアドレスXに記憶されるデータを読み取る要求が受け取られる。行為610で、メモリーに記憶されるキャッシュメタデータから、そのデータが記憶されるキャッシュアドレスを識別できるかどうかの判定が行われる。識別できる場合、このプロセスは行為615に進み、行為615では、識別されたキャッシュアドレスが求められ、行為620でキャッシュデバイス110に対して読取り要求を発行するために使用される。これでプロセス60は完了する。メモリーに記憶されるキャッシュメタデータを使用してキャッシュアドレスを識別できない場合、このプロセスは行為625に進み、行為625では、そのデータが記憶されるキャッシュアドレスを求めるために、キャッシュデバイス110からキャッシュメタデータが読み取られる。この行為625で識別されるキャッシュオフセットを使用して、行為620で、識別された
キャッシュオフセットに対して読取り要求が発行され、これでプロセス60は完了する。
【0071】
キャッシュデバイス上にキャッシュメタデータを記憶することは、起動中およびシャットダウン中にキャッシュメタデータをロード/復元するプロセスを速めることができるだけでなく、起動中およびシャットダウン中に実行されるシステム動作も速めることができることを理解すべきである。この点で、シャットダウンおよび起動は一定のデータ項目への複数のアクセスを多くの場合伴い、キャッシュデバイスに対して2つの読取り操作を実行することは、典型的にはディスク記憶域に対して1つの読取り操作を実行するより速い。その結果、シャットダウン中および/または起動中にアクセスされるデータ項目と、そのデータ項目の位置を指定するメタデータとがどちらもキャッシュに記憶される場合、キャッシュに対する2つの読取り(すなわち、その項目の位置を求めるためのキャッシュメタデータにアクセスするために1つ、およびその項目自体にアクセスするためにもう1つ)は、典型的にはディスクに対する1つの読取りよりも速く実行することができるため、そのデータ項目は、そのデータ項目がディスク上に記憶される場合よりも速くアクセスすることができる。そのため、シャットダウン中および起動中に実行される個々の操作を促進することができる。さらに、キャッシュからキャッシュメタデータを最初に読み取る間に、その項目が記憶されたアドレスがメモリーにページされる場合、メモリーに対する読取りは、典型的にはキャッシュに対する読取りよりも速く実行することができるため、そのデータ項目のその後の読取りをさらに速く実行することができる。
【0072】
本発明の特徴を実施するためのシステムおよび方法の様々な態様は、
図7に示す例示的コンピューターシステム700などの1つまたは複数のコンピューターシステム上に実装することができる。コンピューターシステム700は、1つまたは複数の入力デバイス702、1つまたは複数の出力デバイス701、プロセッサー703、メモリーシステム704、および記憶域706を含み、そのすべてが、1つまたは複数のバス、スイッチ、ネットワークおよび/または他の任意の適切な相互接続を含み得る、相互接続機構705を介して直接または間接的に結合される。1つまたは複数の入力デバイス702は、ユーザーもしくはマシン(例えば人間のオペレーター)から入力を受け取り、1つまたは複数の出力デバイス701は、ユーザーもしくはマシン(例えば液晶ディスプレイ)に情報を表示しまたは伝送する。プロセッサー703は、典型的には、他のコンピュータープログラムの実行を制御するオペレーティングシステムと呼ばれるコンピュータープログラム(例えばMicrosoftのWindowsファミリーのオペレーティングシステムや他の任意の適切なオペレーティングシステム)を実行し、スケジューリング、入出力や他のデバイス制御、アカウンティング、コンパイル、記憶域の割当、データ管理、メモリー管理、通信およびデータフロー制御を行う。集合的に、プロセッサーおよびオペレーティングシステムは、アプリケーションプログラムおよび他のコンピュータープログラム言語が書かれる対象のコンピュータープラットフォームを定義する。
【0073】
プロセッサー703は、様々な機能を実施するために1つまたは複数のコンピュータープログラムを実行することもできる。これらのコンピュータープログラムは、手続き型プログラミング言語、オブジェクト指向プログラミング言語、マクロ言語、またはそれらの組合せを含む、任意の種類のコンピュータープログラム言語で書くことができる。これらのコンピュータープログラムは、記憶域システム706に記憶することができる。記憶域システム706は、揮発性媒体または不揮発性媒体上に情報を保持することができ、固定型またはリムーバブルとすることができる。
図8に、記憶域システム706をさらに詳細に示す。
【0074】
記憶域システム706は、典型的には、コンピュータープログラムまたはそのプログラムによって使用される情報を定義する信号がその上に記憶される、コンピューター可読/書込み可能不揮発性記録媒体801を含む。媒体は、例えばディスクやフラッシュメモリーとすることができる。典型的には動作、プロセッサー703は、不揮発性記録媒体801から、この媒体801よりも、プロセッサー703による情報へのより速いアクセスを可能にする揮発性メモリー802(例えばランダムアクセスメモリーすなわちRAM)にデータを読み取らせる。このメモリー802は、
図8に示すように記憶域システム706
の中に位置することができ、または
図7に示すようにメモリーシステム704の中に位置することができる。プロセッサー703は、概して集積回路メモリー704、802内のデータを操作し、処理を完了した後にそのデータを媒体801にコピーする。媒体801と集積回路メモリー要素704、802との間のデータの移動を管理するための様々な機構が知られており、本発明はそれらに限定されない。本発明は、特定のメモリーシステム704または記憶域システム706にも限定されない。
【0075】
さらに、本発明の実施形態は、オペレーティングシステムのI/Oスタック内のドライバーとして実装される、キャッシュマネージャーコンポーネントを使用することにも限定されない。そのそれぞれがオペレーティングシステムまたは1つもしくは複数のスタンドアロンコンポーネントによって実装され得る、任意の適切なコンポーネントまたはコンポーネントの組合せを、代わりにまたは追加的に使用することができる。本発明はどんな特定の実装形態にも限定されない。
【0076】
上記に記載した本発明の実施形態は、数多くの方法のうちのいずれかによって実施することができる。例えば、上記で論じた機能性は、ハードウェア、ソフトウェア、またはその組合せを使用して実装することができる。ソフトウェアによって実装されるとき、そのソフトウェアコードは、単一のコンピューターの中に設けられるにせよ、複数のコンピューターの間で分散されるにせよ任意の適切なプロセッサーまたはプロセッサーの集まりの上で実行することができる。この点で、本明細書に記載した機能を実行する任意のコンポーネントまたはコンポーネントの集まりは、上記で論じた機能を制御する1つまたは複数のコントローラーと総称的にみなすことができることを理解すべきである。この1つまたは複数のコントローラーは、専用ハードウェアを用いてや、上記に列挙した機能を実行するためのマイクロコードまたはソフトウェアを使用してプログラムされる1個もしくは複数個のプロセッサーを使用することによってなど、数多くの方法で実装することができる。コントローラーが、システム動作のためのデータを記憶しまたは提供する場合、そうしたデータは中央リポジトリ内、複数のリポジトリ内、またはその組合せに記憶することができる。
【0077】
さらに、(クライアントまたはサーバー)コンピューターは、ラックマウント式のコンピューター、デスクトップコンピューター、ラップトップコンピューター、タブレットコンピューター、他の種類のコンピューターなど、いくつかの形態のうちのいずれかによって実施できることを理解すべきである。さらに、(クライアントまたはサーバー)コンピューターは、PDA(携帯情報端末)、スマートフォン、または他の任意の適切なポータブル/固定電子デバイスを含む、概してコンピューターとみなされていないが適切な処理能力を備えるデバイスに埋め込むことができる。
【0078】
また、(クライアントまたはサーバー)コンピューターは、1つまたは複数の入出力デバイスを有することができる。これらのデバイスは、とりわけユーザーインターフェイスを提示するために使用することができる。ユーザーインターフェイスを提供するために使用することができる出力デバイスの例には、出力を視覚的に提示するためのプリンターやディスプレイ画面、および出力を可聴的に提供するためのスピーカーや他の音声を発生させるデバイスが含まれる。ユーザーインターフェイスに使用することができる入力デバイスの例には、キーボードや、マウス、タッチパッド、デジタイジングテーブルなどのポインティングデバイスが含まれる。別の例として、コンピューターは、音声認識によりまたは他の可聴形式で入力情報を受け取ることができる。
【0079】
そうしたコンピューターは、エンタープライズネットワークやインターネットなど、ローカルエリアネットワークまたはワイドエリアネットワークを含む、任意の適切な形態の1つまたは複数のネットワークによって相互接続することができる。そうしたネットワークは任意の適切な技術に基づくことができ、任意の適切なプロトコルに従って動作することができ、ワイヤレスネットワーク、ワイヤードネットワーク、または光ファイバーネットワークを含むことができる。また、本明細書で概説した様々な方法またはプロセスは、多岐にわたるオペレーティングシステムまたはプラットフォームのいずれか1つを使用する、1個または複数個のプロセッサー上で実行可能なソフトウェアとしてコード化するこ
とができる。
【0080】
さらに、ソフトウェアはいくつかの適切なプログラミング言語および/または従来のプログラミングツールもしくはスクリプトツールのいずれかを使用して書くことができ、実行可能な機械言語コードまたはフレームワークもしくは仮想マシン上で実行される中間コードとしてコンパイルすることもできる。
【0081】
この点で、本発明は、1つまたは複数のコンピューターもしくは他のプロセッサー上で実行されるとき、上記で論じた本発明の様々な実施形態を実施する方法を実行する、1つまたは複数のプログラムを用いてエンコードされる記憶域媒体(または複数の記憶域媒体)(例えば、コンピューターメモリー、1つまたは複数のフロッピーディスク、コンパクトディスク、光ディスク、磁気テープ、フラッシュメモリー、書替え可能ゲートアレイや他の半導体デバイス内の回路構成、または他のコンピューター記憶域媒体)として実施することができる。この1つまたは複数の記憶域媒体は可搬式とすることができ、そのためその上に記憶される1つまたは複数のプログラムを、1台または複数台の別のコンピューターもしくは他のプロセッサー上にロードして、上記で論じた本発明の様々な態様を実施することができる。
【0082】
用語「プログラム」または「ソフトウェア」は、上記で論じた本発明の様々な態様を実施するようコンピューターまたは他のプロセッサーをプログラムするために使用することができる、任意の種類のコンピューターコードまたは1組のコンピューター実行可能命令を指すための包括的な意味で本明細書において使用する。さらに、この実施形態の1つの側面によれば、実行されるときに本発明の方法を実行する1つまたは複数のコンピュータープログラムは、単一のコンピューターもしくはプロセッサー上にある必要はなく、本発明の様々な態様を実施するためにいくつもの異なるコンピューターまたはプロセッサーの間でモジュール方式で分散させることができることを理解すべきである。
【0083】
コンピューター実行可能命令は、1台または複数台のコンピューターもしくは他のデバイスによって実行されるプログラムモジュールなど、多くの形式で提供することができる。概して、プログラムモジュールには、特定のタスクを実行しまたは特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造等が含まれる。典型的には、プログラムモジュールの機能は、様々な実施形態で望まれるようにまとめ、または分散させることができる。
【0084】
本発明の様々な態様は、単独で、組合せで、または上記に記載した諸実施形態では特に論じていない様々な構成で使用することができ、したがってその適用において、上記の説明に記載しまたは図面に示した詳細およびコンポーネントの構成に限定されることはない。例えば、ある実施形態で記載した態様を、別の実施形態で記載した態様と任意の方法で組み合わせることができる。
【0085】
請求項の要素を修飾するために、特許請求の範囲の中で「第1の」、「第2の」、「第3の」などの序数を表す用語を使用することは、別の請求項の要素に優先する1つの請求項の要素のどんな優先順位、順位、もしくは順序、または方法の行為が実行される時間的順序もそれ自体では意味しないが、請求項の各要素を区別するために、特定の名前を有する1つの請求項の要素と同じ名前を有する(が序数を表す用語を使用するための)別の要素とを区別するためのラベルとして単に使用する。
【0086】
また、本明細書で使用した表記および用語は説明を目的としており、限定的であるとみなすべきでない。「含む(including)」、「備える(comprising)」、または「有する(having)」、「含有する(containing)」、「伴う(involving)」、およびその改変形態を本明細書で使用することは、その後に列挙される項目およびその等価物ならびに追加項目を包含することを意図する。
【0087】
こうして本発明の少なくとも1つの実施形態のいくつかの側面を説明し終え、当業者は様々な変更形態、修正形態、および改善形態を容易に思いつくことが理解される。そうした変更形態、修正形態、および改善形態は本開示の一部であることが意図され、本発明の趣旨および範囲に含まれることが意図される。したがって上記の説明および図面は例に過ぎない。