(57)【特許請求の範囲】
【請求項１】
その中で動作する仮想マシン（ＶＭ）を有するコンピューティングシステムにおいて、第一のキャッシングレベルのバッファと第二のキャッシングレベルのバッファとの間でデータユニットのキャッシングを行う方法であって、
前記第一のキャッシングレベルのバッファの物理ページに第一のストレージブロックの内容を保存するためのリクエストを受け取ったことに応答して、前記第一のキャッシングレベルのバッファに格納されたデータユニットが前記第二のキャッシングレベルのバッファに降格可能であると判断することであって、前記第一のキャッシングレベルのバッファの物理ページは、第一の物理ページ番号（ＰＰＮ）に関連付けられる、前記判断すること、
前記データユニットを前記第二のキャッシングレベルのバッファに降格すること、
前記第一および第二のキャッシングレベルのバッファに格納されたデータユニットの状態情報を更新すること、
前記第一のストレージブロックの内容を前記第一のキャッシングレベルのバッファの前記第一の物理ページ番号において保存することを備え、
前記データユニットを前記第二のキャッシングレベルのバッファに降格することは、
前記第一のストレージブロックの内容を前記第一のキャッシングレベルのバッファの前記第一の物理ページ番号において保存することと並行して実行される、方法。
【請求項２】
データユニットが降格可能であるか否かを判断することは、
前記データユニットが、前記データユニットがマッピングされた第二のストレージブロックと一致すると判断することを含む、請求項１に記載の方法。
【請求項３】
前記データユニットが、前記データユニットがマッピングされた第二のストレージブロックと一致すると判断することは、
前記データユニットに関連付けられた記録済みのチェックサムが前記第二のストレージブロックについて計算されたチェックサムと適合すると判断することを含む、請求項２に記載の方法。
【請求項４】
前記降格することは、
前記データユニットを前記第一のキャッシングレベルのバッファから前記第二のキャッシングレベルのバッファにコピーすること、
前記データユニットが前記第一のキャッシングレベルのバッファになく、前記データユニットが前記第二のキャッシングレベルのバッファにあることを反映させるように前記状態情報を更新することを含む、請求項１に記載の方法。
【請求項５】
データユニットをコピーすることは、
前記第一の物理ページ番号を新しい物理ページにマッピングしなおすこと、
前記第一の物理ページ番号の内容を前記第二のキャッシングレベルのバッファにコピーすることを含む、請求項４に記載の方法。
【請求項６】
第二のキャッシングレベルのバッファの、第二の物理ページ番号に関連付けられる物理ページの内容を第二のストレージブロックに保存するためのリクエストを受け取ったことに応答して、前記第二の物理ページ番号が、物理ページ番号をストレージブロックアドレスにマッピングするデータ構造内に存在するか否かを判断すること、
前記第二の物理ページ番号が存在しないと判断すると、前記第二の物理ページ番号に関連付けられるエントリを前記データ構造に追加すること、
前記第二の物理ページ番号が存在すると判断すると、前記データ構造を更新すること、
前記第二の物理ページ番号の前記内容を第二のストレージブロックに保存することをさらに備える、請求項１に記載の方法。
【請求項７】
前記エントリを追加することは、
前記第二の物理ページ番号の前記内容についての書込みデータチェックサムを計算すること、
前記第二の物理ページ番号を前記第二のストレージブロックのストレージアドレスおよび前記書込みデータチェックサムに関連付けることを含む、請求項６に記載の方法。
【請求項８】
前記データ構造を更新することは、
前記第二の物理ページ番号の内容についての書込みデータチェックサムを計算すること、
前記第二の物理ページ番号を前記第二のストレージブロックのストレージアドレスおよび前記書込みデータチェックサムに関連付けることを含む、請求項６に記載の方法。
【請求項９】
前記第一のストレージブロックの内容が、前記第二のキャッシングレベルのバッファから前記第一のキャッシングレベルのバッファの前記第一の物理ページ番号においてコピーされる、請求項１に記載の方法。
【請求項１０】
前記第一のストレージブロックの内容が、前記第一のストレージブロックから前記第一のキャッシングレベルのバッファの前記第一の物理ページ番号においてコピーされる、請求項１に記載の方法。
【請求項１１】
前記第一のキャッシングレベルのバッファにおけるページ追い出しイベントを検出すること、
ページ追い出しが行われている物理ページを、前記第一のキャッシングレベルのバッファの、前記第一の物理ページ番号に関連付けられる前記物理ページとして選択することをさらに備える請求項１に記載の方法。
【請求項１２】
物理ページの前記ページ追い出しイベントが、前記物理ページがゼロ化されているときに検出される、請求項１１に記載の方法。
【請求項１３】
物理ページの前記ページ追い出しイベントが、前記物理ページにページ保護またはマッピングの変更があるときに検出される、請求項１１に記載の方法。
【請求項１４】
物理ページの前記ページ追い出しイベントが、前記第一のキャッシングレベルのバッファの一部である物理ページの利用をモニタすることによって検出される、請求項１１に記載の方法。
【請求項１５】
前記モニタすることは、前記仮想マシンのオペレーティングシステムによって使用されるページ追い出し関数のトレースをインストールすることによって行われる、請求項１４に記載の方法。
【請求項１６】
前記データユニットを前記第二のキャッシングレベルのバッファに降格すること、及び前記第一のストレージブロックの内容を前記第一のキャッシングレベルのバッファの前記第一の物理ページ番号において保存することは、前記第一のキャッシングレベルのバッファと前記第二のキャッシングレベルのバッファとの間の排他的なキャッシングを維持する、請求項１に記載の方法。
【請求項１７】
仮想化コンピューティングシステムであって、該仮想化コンピューティングシステムにおいて動作する仮想マシン（ＶＭ）と、前記仮想マシンのゲストオペレーティングシステムによって制御される第一のキャッシングレベルのバッファおよび前記仮想化コンピューティングシステムのシステムソフトウェアによって制御される第二のキャッシングレベルのバッファを含む複数のキャッシングレベルと、を有する仮想化コンピューティングシステムで実行されたときに、前記仮想化コンピューティングシステムに、
第一のストレージブロックの内容を、前記第一のキャッシングレベルのバッファの物理ページに保存するためのリクエストを受け取ることであって、前記第一のキャッシングレベルのバッファの物理ページは、物理ページ番号（ＰＰＮ）に関連付けられる、前記リクエストを受け取ること、
前記リクエストに応答して、前記第一のキャッシングレベルのバッファに格納されたデータユニットが前記第二のキャッシングレベルのバッファに降格可能であると判断すること、
前記データユニットを前記第二のキャッシングレベルのバッファに降格すること、
前記第一および第二のキャッシングレベルのバッファに格納されたデータユニットの状態情報を更新すること、
前記第一のストレージブロックの内容を前記第一のキャッシングレベルのバッファの前記物理ページ番号において保存すること、を実行させる命令を含み、
前記データユニットを前記第二のキャッシングレベルのバッファに降格することは、
前記第一のストレージブロックの内容を前記第一のキャッシングレベルのバッファの前記物理ページ番号において保存することと並行して実行される、非一時的コンピュータ可読記憶媒体。
【請求項１８】
前記命令が、仮想化コンピューティングシステムで実行されると、前記仮想化コンピューティングシステムにさらに、
第二のキャッシングレベルのバッファの、第二の物理ページ番号に関連付けられた物理ページの内容を第二のストレージブロックに保存するためのリクエストを受け取ったことに応答して、前記第二の物理ページ番号が、物理ページ番号をストレージブロックアドレスにマッピングするデータ構造の中に存在するか否かを判断すること、
前記第二の物理ページ番号が存在しないと判断すると、前記第二の物理ページ番号に関連付けられるエントリを前記データ構造に追加すること、
前記第二の物理ページ番号が存在すると判断すると、前記データ構造を更新すること、
前記第二の物理ページ番号の内容を前記第二のストレージブロックに保存すること、を実行させる、請求項１７に記載の非一時的コンピュータ可読記憶媒体。
【請求項１９】
仮想化コンピューティングシステムであって、該仮想化コンピューティングシステムにおいて動作する仮想マシン（ＶＭ）を有する前記仮想化コンピューティングシステムにおいて、
前記仮想化コンピューティングシステムは、
前記仮想マシンのゲストオペレーティングシステムによって制御される第一のキャッシングレベルのバッファおよび前記仮想化コンピューティングシステムのシステムソフトウェアによって制御される第二のキャッシングレベルのバッファを含む複数のキャッシングレベルを備え、
前記仮想化コンピューティングシステムは、
前記仮想化コンピューティングシステムの前記システムソフトウェアが、
第一のストレージブロックの内容を、前記第一のキャッシングレベルのバッファの物理ページに保存するためのリクエストを受け取ることであって、前記第一のキャッシングレベルのバッファの物理ページは、物理ページ番号（ＰＰＮ）に関連付けられる、前記リクエストを受け取ること、
前記リクエストに応答して、前記第一のキャッシングレベルのバッファに格納されたデータユニットが前記第二のキャッシングレベルのバッファに降格可能であると判断すること、
前記データユニットを前記第二のキャッシングレベルのバッファに降格すること、
前記第一および第二のキャッシングレベルのバッファに格納されたデータユニットの状態情報を更新すること、
前記第一のストレージブロックの内容を前記第一のキャッシングレベルのバッファの前記物理ページ番号において保存することを実行するように構成され、
前記データユニットを前記第二のキャッシングレベルのバッファに降格することは、
前記第一のストレージブロックの内容を前記第一のキャッシングレベルのバッファの前記物理ページ番号において保存することと並行して実行される、仮想化コンピューティングシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
仮想化コンピューティング環境は、特定の用途および容量に関する要求に応えるための必要に応じたコンピューティング資源の配置および管理を可能にすることにより、システムオペレータに対して多大な効率およびフレキシビリティを提供する。仮想化コンピューティング環境が成熟し、市場に広く受け入れられていく中で、仮想マシン（ＶＭ：ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ）の性能の向上と全体的なシステム効率の改善とに対する要求が続いている。一般的な仮想化コンピューティング環境は、１つまたは複数のホストコンピュータと、１つまたは複数のストレージシステムと、ホストコンピュータを相互に、ストレージシステムに、また管理サーバに接続するように構成される１つまたは複数のネットワーキングシステムと、を含む。あるホストコンピュータがＶＭの集合を稼働させてもよく、各ＶＭは一般に、対応するストレージシステム内でファイルシステムデータの保存および読み出しを行うように構成されてもよい。ストレージシステムを含む機械的ハードディスクドライブに関係する比較的遅いアクセス遅延がファイルシステムの性能における大きなボトルネックを生じさせ、全体的なシステム性能を低下させている。
【０００２】
システム性能を向上させる１つの方法は、ゲストオペレーティングシステム（ＯＳ：ｏｐｅｒａｔｉｎｇ  ｓｙｓｔｅｍ）内で動作するファイルシステムのためのバッファキャッシュを実装することに関する。バッファキャッシュはマシンメモリ（すなわち、ホストコンピュータの中に構成された物理メモリであり、ランダムアクセスメモリ、すなわちＲＡＭとも呼ばれる）に保存され、したがって、そのサイズはストレージシステムで利用可能なストレージ容量全体と比較して限定されている。マシンメモリはストレージシステムより性能上はるかに有利であるが、このようなサイズの限定が、最終的にはシステム性能を低下させる影響を有し、なぜなら特定のストレージユニットが後でアクセスされる前にバッファキャッシュから追い出される（evicted）可能性があるからである。あるストレージユニットがバッファキャッシュから追い出されると、それと同じストレージユニットに再びアクセスするには通常、対応するストレージシステムへの低性能のアクセス（low performance access）が追加で必要となる。
【０００３】
ＲＡＭベースのファイルシステムバッファキャッシュ（RAM-based file system buffer cache）は、ゲストオペレーティングシステムの入力／出力（ＩＯ：ｉｎｐｕｔ／ｏｕｔｐｕｔ）性能を改善する一般的な方法であるが、その性能の改善はＲＡＭメモリの高額な価格および限定的な密度により限られている。フラッシュベースのソリッドステートドライブ（ＳＳＤ：ｓｏｌｉｄ  ｓｔａｔｅ  ｄｅｒｉｖｅｒ）が、ハードディスクドライブより１秒当たりの入力／出力動作がはるかに多く、ＲＡＭより安価な新しい記憶媒体として出現し、ＳＳＤは仮想化コンピューティング環境、例えばハイパーバイザとして知られる仮想化ソフトウェアにおける第二レベルの読取キャッシュとして広く普及しつつある。その結果、複数のレベルのキャッシング層が仮想化コンピューティング環境のストレージＩＯスタック内に形成される。
【０００４】
仮想化コンピューティング環境の中では、上記のような異なるキャッシング層は通常、意図的に通信せず、キャッシュの排他性を実現するための従来の技術が非現実的となる。そのため、第二レベルキャッシュが一般に読取性能を向上させるのは確かであるが、同じデータがバッファキャッシュと第二レベルキャッシュとの両方に格納される可能性があるため、全体的な有効キャッシュサイズが小さくなり、費用対効果が低下する。従来のキャッシング技術は確かに読取性能を向上させるが、仮想化環境内に別のキャッシング層を追加する結果として、キャッシュに格納されるデータの冗長的な保存により、ストレージの利用効率が低下する。
【発明の概要】
【課題を解決するための手段】
【０００５】
本明細書で開示される１つまたは複数の実施形態は一般に、仮想化コンピューティング環境の中でキャッシュストレージを管理するための方法およびシステムを提供し、より詳しくは、仮想化コンピューティング環境内の排他的読取キャッシングのための方法およびシステムを提供する。
【０００６】
１つの実施形態において、ゲストオペレーティングシステム内のバッファキャッシュは第一のキャッシングレベルを提供し、ハイパーバイザキャッシュは第二のキャッシングレベルを提供する。あるデータユニットがオペレーティングシステムによってロードされ、バッファキャッシュに格納されると、ハイパーバイザキャッシュは関係する状態を記録するが、実際にはそのデータユニットを格納しない。ハイパーバイザキャッシュがそのデータユニットをキャッシュに格納するのは、バッファキャッシュがそのデータユニットを追い出し、そのデータユニットをハイパーバイザキャッシュにコピーする降格動作がトリガされたときだけである。
【０００７】
第一のキャッシングレベルのバッファと第二のキャッシングレベルのバッファとの間のデータユニットのキャッシング方法は、ある実施形態によれば、第一のストレージブロックの内容をある物理ページ番号（ＰＰＮ：ｐｈｙｓｉｃａｌ  ｐａｇｅ  ｎｕｍｂｅｒ）に関連付けられる第一のキャッシングレベルのバッファのマシンページに保存するリクエストを受け取ったことに応答して、第一のキャッシングレベルのバッファに格納されているあるデータユニットを第二のキャッシングレベルへと降格することができるか否かを判断するステップと、そのデータユニットを第二のキャッシングレベルのバッファへと降格するステップと、第一および第二のキャッシングレベルのバッファに格納されたデータユニットの状態情報を更新するステップと、第一のストレージブロックの内容を第一のキャッシングベルのバッファのＰＰＮにおいて保存するステップと、を含む。
【０００８】
本発明の他の実施形態は、これらに限定されないが、コンピュータシステムに上記の方法のうちの１つまたは複数の態様を実行させることのできる命令を含む非一時的コンピュータ可読記憶媒体と、上記の方法の１つまたは複数の態様を実行するように構成されたコンピュータシステムとを含む。
【図面の簡単な説明】
【０００９】
【図１Ａ】実施形態による、マルチレベルキャッシングを実装するように構成された仮想化コンピューティングシステムのブロック図である。
【図１Ｂ】実施形態による、マルチレベルキャッシングを実装するように構成された仮想化コンピューティングシステムのブロック図である。
【図２】１つの実施形態による、キャッシュレベル階層内のデータ昇格およびデータ降格を示す。
【図３Ａ】各々、ストレージシステムをターゲットとする読取リクエストに応答するためにハイパーバイザキャッシュにより実行される方法ステップのフロー図である。
【図３Ｂ】各々、ストレージシステムをターゲットとする読取リクエストに応答するためにハイパーバイザキャッシュにより実行される方法ステップのフロー図である。
【図４】ストレージシステムをターゲットとする書込みリクエストに応答するためにハイパーバイザキャッシュにより実行される方法ステップのフロー図である。
【発明を実施するための形態】
【００１０】
図１Ａは、１つの実施形態によるマルチレベルキャッシングを実装するように構成された仮想化コンピューティングシステム１００のブロック図である。仮想化コンピューティングシステム１００は、仮想マシン（ＶＭ）１１０と、仮想化システム１３０と、キャッシュデータストア１５０と、ストレージシステム１６０と、を含む。ＶＭ１１０と仮想化システム１３０は、ホストコンピュータにおいて動作してもよい。
【００１１】
１つの実施形態において、ストレージシステム１６０は、例えば機械的ハードディスクドライブまたはソリッドステートドライブ（ＳＳＤ）等のストレージドライブ１６２の集合を含み、これらはデータブロックを保存し、読み出すように構成されている。ストレージシステム１６０は１つまたは複数の論理ストレージユニットを提示してもよく、その各々がストレージドライブ１６２上の１つまたは複数のデータブロック１６８の集合を含む。ある論理ストレージユニット内のブロックは、その論理ストレージユニットのための識別子と固有の論理ブロックアドレスを使って異なるブロックの線形アドレス空間からアドレス指定される。論理ストレージユニットは、論理ユニット番号（ＬＵＮ：ｌｏｇｉｃａｌ  ｕｎｉｔ  ｎｕｍｂｅｒ）によっても、または技術的に実現可能な他の何れかの識別子によっても識別されてよい。ストレージシステム１６０はまた、ストレージシステムキャッシュ１６４も含んでいてよく、ストレージシステムキャッシュ１６４は、ストレージドライブ１６２より高速でアクセス動作を実行できるストレージデバイスを含む。例えば、ストレージシステムキャッシュ１６４はダイナミックランダムアクセスメモリ（ＤＲＡＭ：ｄｙｎａｍｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）またはＳＳＤストレージデバイスを含んでいてもよく、これはストレージドライブ１６２として一般的に使用される機械的ハードディスクドライブより優れた性能を提供する。ストレージシステム１６０はインタフェース１７４を含み、インタフェース１７４を通じてブロック１６８へのアクセスリクエストが処理される。インタフェース１７４は、物理的シグナリングからプロトコルシグナリングまで、多くの抽象化レベルを定義してもよい。１つの実施形態において、インタフェース１７４はブロックストレージデバイスのための周知のファイバチャネル（ＦＣ：Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ）規格を実装する。他の実施形態では、インタフェース１７４は物理イーサネット（登録商標）ポート上で周知のインターネットスモールコンピューティングシステムインタフェース（ｉＳＣＳＩ：Ｉｎｔｅｒｎｅｔ  ｓｍａｌｌ  ｃｏｍｐｕｔｅｒ  ｓｙｓｔｅｍ  ｉｎｔｅｒｆａｃｅ）プロトコルを実装する。他の実施形態において、インタフェース１７４は、シリアルアタッチドスモールコンピュータシステムインターコネクト（ＳＡＳ：ｓｅｒｉａｌ  ａｔｔａｃｈｅｄ  ｓｍａｌｌ  ｃｏｍｐｕｔｅｒ  ｓｙｓｔｅｍ  ｉｎｔｅｒｃｏｎｎｅｃｔ）またはシリアルアタッチドアドバンストテクノロジーアタッチメント（ＳＡＴＡ：ｓｅｒｉａｌ  ａｔｔａｃｈｅｄ  ａｄｖａｎｃｅｄ  ｔｅｃｈｎｏｌｏｇｙ  ａｔｔａｃｈｍｅｎｔ）を実装してもよい。さらに、インタフェース１７４は技術的に実現可能な他の何れのブロックレベルプロトコルを実装してもよく、これも本発明の実施形態の範囲および趣旨から逸脱しない。
【００１２】
ＶＭ１１０は仮想マシン環境を提供し、仮想マシン環境においてゲストＯＳ（ＧＯＳ：ｇｕｅｓｔ  ＯＳ）１２０が動作してもよい。周知のマイクロソフトウィンドウズ（Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ）（登録商標）オペレーティングシステムと周知のリナックス（Ｌｉｎｕｘ）（登録商標）オペレーティングシステムはＧＯＳの例である。機械的ハードディスクドライブに関係するアクセス遅延を低減させるために、ＧＯＳ１２０はバッファキャッシュ１２４を実装し、バッファキャッシュ１２４はストレージシステム１６０によりバックアップされるデータをキャッシュに格納する。バッファキャッシュ１２４は従来、キャッシュに格納されたデータへのアクセス性能を高めるためにホストコンピュータのマシンメモリ内に保存され、バッファキャッシュ１２４はストレージシステム１６０内にある対応するブロック１６８にマッピングされる複数のページ１２６として整理される。ファイルシステム１２２もまたＧＯＳ１２０内で実装されてファイルサービス抽象化を提供し、ファイルシステム１２２は従来、ＧＯＳ１２０の下で実行される１つまたは複数のアプリケーションにより利用される。ファイルシステム１２２は、ファイル名とファイル位置をストレージシステム１６０内の１つまたは複数のストレージブロックにマッピングする。
【００１３】
バッファキャッシュ１２４はキャッシュ管理サブシステム１２７を含み、キャッシュ管理サブシステム１２７はどのブロック１６８がページ１２６としてキャッシュに格納されるかを管理する。異なるブロック１６８の各々は固有のＬＢＡによってアドレス指定され、異なるページ１２６の各々は固有の物理ページ番号（ＰＰＮ）によってアドレス指定される。本明細書に記載されている実施形態において、特定のＶＭ、例えばＶＭ１１０のための物理メモリ空間は物理メモリページに分割され、物理メモリページの各々は固有のＰＰＮを有し、それによってそのアドレス指定を行うことができる。これに加えて、仮想化コンピューティングシステム１００のマシンメモリ空間はマシンメモリページに分割され、マシンメモリページの各々が固有のマシンページ番号（ＭＰＮ：ｍａｃｈｉｎｅ  ｐａｇｅ  ｎｕｍｂｅｒ）を有し、それによってそのアドレス指定を行うことができ、ハイパーバイザは仮想化コンピューティングシステム１００内で稼働中の１つまたは複数のＶＭの物理メモリページのマシンメモリページとのマッピングを保持する。キャッシュ管理サブシステム１２７は、キャッシュに格納された各ＬＢＡと、そのＬＢＡに対応するファイルデータをキャッシュに格納する対応ページ１２６との間のマッピングを保持する。このマッピングにより、バッファキャッシュ１２４は、特定のファイル記述子に関連付けられたＬＢＡがＰＰＮとの有効なマッピングがあるか否かを効率的に判断できる。有効なＬＢＡ−ＰＰＮマッピングが存在すれば、要求されたファイルデータブロックのためのデータはキャッシュに格納されたページ１２６から入手できる。通常の動作では、より最近要求されたブロック１６８をキャッシュに格納するために、特定のページ１２６を置き換える必要がある。キャッシュ管理サブシステム１２７は、ページ１２６の置換を容易にするための置換ポリシ（replacement policy）を実装する。置換ポリシの一例は当技術分野において、リーストリースントリユーズド（ＬＲＵ：ｌｅａｓｔ  ｒｅｃｅｎｔｌｙ  ｕｓｅｄ）方式と呼ばれる。あるページ１２６の置換が必要なときは必ず、ＬＲＵ置換ポリシが、最も過去にアクセス（使用）されたページを置換すべきページとして選択する。あるＧＯＳ１２０は任意の置換ポリシを実装してもよく、これはプロプライエタリであってもよい。
【００１４】
ファイルシステム１２２に送られたファイルアクセスリクエストは、ページ１２６にある対応するファイルデータにアクセスするか、ストレージシステム１６０をターゲットとする１つまたは複数のアクセスリクエストを実行することによって完了する。ドライバ１２８は、インタフェース１７０の規格の詳細に基づいてアクセスリクエストを実行するために必要な詳細なステップを実行する。例えば、インタフェース１７０はｉＳＣＳＩアダプタを含んでいてもよく、ｉＳＣＳＩアダプタは仮想化システム１３０と共にＶＭ１１０によってエミュレートされる。各アクセスリクエストは、ストレージシステム１６０をターゲットとするアクセスリクエストを含んでいてもよい。このような場合、ドライバ１２８はエミュレートされたｉＳＣＳＩインタフェースを管理して、特定のブロック１６８を対応のＰＰＮにより指定されたページ１２６に読み込むためのリクエストを実行する。
【００１５】
仮想化システム１３０は、基本となるハードウェアマシンをエミュレートするためのメモリ、処理、ストレージ資源をＶＭ１１０に提供する。一般に、ハードウェアマシンのこのエミュレーションは、ＧＯＳ１２０にとって、実際のハードウェアマシンと区別がつかない。例えば、インタフェース１７０として動作するｉＳＣＳＩインタフェースのエミュレーションは、ドライバ１２８にとって、実際のハードウェアｉＳＣＳＩインタフェースと区別できない。ドライバ１２８は一般に、ＧＯＳ１２０内の特権的プロセス（privileged process）として動作する。しかしながら、ＧＯＳ１２０は実際には、ホストコンピュータ内のプロセッサの非特権的モード（unprivileged mode）で命令を実行する。そのため、仮想化システム１３０に関連する仮想マシンモニタ（ＶＭＭ：ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ  ｍｏｎｉｔｏｒ）は、ページテーブル更新、ディスク読取およびディスク書込み動作等の特権的動作をトラップして、ＧＯＳ１２０に代わってその特権的動作を実行する必要がある。これらの特権的動作のトラップはまた、ＧＯＳ１２０によって実行されている特定の動作をモニタする機会も提供する。
【００１６】
仮想化システム１３０は、当技術分野ではハイパーバイザとしても知られ、ハイパーバイザキャッシュコントローラ１４０を含み、ハイパーバイザキャッシュコントローラ１４０はＧＯＳ１２０からアクセスリクエストを受け取り、ストレージシステム１６０をターゲットとするこのアクセスリクエストを透過的に処理するように構成される。１つの実施形態において、書込みリクエストはモニタされるが、それ以外はストレージシステム１６０へと通過させられる。キャッシュデータストア１５０内に格納されたデータの読取リクエストは、ハイパーバイザキャッシュコントローラ１４０により処理される。このような読取リクエストはキャッシュヒットと呼ばれる。キャッシュデータストア１５０に格納されていないデータの読取リクエストはストレージシステム１６０に送られる。このような読取リクエストはキャッシュミスと呼ばれる。
【００１７】
キャッシュデータストア１５０は、ストレージドライブ１６２より高速でアクセス動作を実行できるストレージデバイスを含む。例えば、キャッシュデータストア１５０は、ＤＲＡＭまたはＳＳＤストレージデバイスを含み、ＤＲＡＭまたはＳＳＤストレージデバイスはストレージドライブ１６２を実装するために一般的に使用される機械的ハードディスクドライブより優れた性能を提供する。キャッシュデータストア１５０は、インタフェース１７２を介してホストコンピュータに接続される。１つの実施形態において、キャッシュデータストア１５０はソリッドステートストレージデバイスを含み、インタフェース１７２は周知のピーシーアイ−エクスプレス（ＰＣＩ−ｅｘｐｒｅｓｓ：ＰＣＩｅ）高速システムバスインタフェースを含む。ソリッドステートストレージデバイスは、ＤＲＡＭ、スタティックランダムアクセスメモリ（ＳＲＡＭ：ｓｔａｔｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、フラッシュメモリ、またはこれらの何れかの組合せを含んでいてもよい。この実施形態において、キャッシュデータストア１５０はストレージシステムキャッシュ１６４より高性能で読取を実行しうるが、キャッシュデータストア１５０はインタフェース１７２が本質的にインタフェース１７４より低遅延で高速であるからである。代替的な実施形態において、インタフェース１７２はＦＣインタフェース、シリアルアタッチドスモールコンピュータシステムインターコネクト（ＳＡＳ）、シリアルアタッチドアドバンストテクノロジーアタッチメント（ＳＡＴＡ）または技術的に実現可能な他の何れかのデータ転送技術を実装する。キャッシュデータストア１５０は、ストレージシステム１６０への読取リクエストを実行する場合より低遅延で、要求されたデータをハイパーバイザキャッシュコントローラ１４０に有利に提供するように構成される。
【００１８】
ハイパーバイザキャッシュコントローラ１４０は、ストレージシステムプロトコルをインタフェース１７０に提示し、ＶＭ１２８におけるストレージデバイスドライバがハイパーバイザキャッシュコントローラ１４０と、あたかもストレージシステム１６０とやり取りしているかのように透過的にやりとりする。ハイパーバイザキャッシュコントローラ１４０はＶＭＭによる特権的な命令トラップを通じて、ストレージシステム１６０をターゲットとするアクセスＩＯリクエストを傍受する（intercept）。アクセスリクエストは一般に、ストレージシステム１６０に関連付けられたＬＢＡのデータ内容をＶＭ１１０に関連付けられた仮想化物理メモリに関連付けられたＰＰＮへとロードするためのリクエストを含む。
【００１９】
特定のＰＰＮと対応するＬＢＡとの間の関連付けは、「ｒｅａｄ＿ｐａｇｅ（ＰＮ，ｄｅｖｉｃｅＨａｎｄｌｅ，ＬＢＡ，ｌｅｎ）」という形式のアクセスリクエストにより確立され、その中で「ＰＰＮ」は標的となるＰＰＮであり、「ｄｅｖｉｃｅＨａｎｄｌｅ」はＬＵＮ等のボリューム識別子であり、「ＬＢＡ」はｄｅｖｉｃｅＨａｎｄｌｅ内の開始ブロックを指定し、「ｌｅｎ」はそのアクセスリクエストによって読み取られるデータの長さを指定する。長さが１ページを超える場合は、複数のブロック１６８が複数の対応するＰＰＮに読み込まれてもよい。このような場合、対応するＬＢＡとＰＰＮとの間に複数の関連付けが行われてもよい。これらの関連付けは、ＰＰＮ−ＬＢＡテーブル１４４の中で追跡され（tracked）、ＰＰＮ−ＬＢＡテーブル１４４にはあるＰＰＮとあるＬＢＡとの間の各々の関連付けが、｛ＰＰＮ，（ｄｅｖｉｃｅＨａｎｄｌｅ，ＬＢＡ）｝の形式で、ＰＰＮをインデックスとして保存される。１つの実施形態において、ＰＰＮ−ＬＢＡテーブル１４４は、効率的なルックアップのためのハッシュテーブルを使用して実装され、各エントリがチェックサム、例えばキャッシュに格納されたデータの内容から計算されたＭＤ５チェックサムに関連付けられる。ＰＰＮ−ＬＢＡテーブル１４４は、ＧＯＳ１２０内のバッファキャッシュ１２４に何が格納されているかを推測し、追跡するために使用される。
【００２０】
キャッシュＬＢＡテーブル１４６は、キャッシュデータストア１５０に何が格納されているかを追跡するために保持される。各エントリは｛（ｄｅｖｉｃｅＨａｎｄｌｅ，ＬＢＡ），ａｄｄｒｅｓｓ＿ｉｎ＿ｄａｔａ＿ｓｔｏｒｅ｝の形式で、（ｄｅｖｉｃｅＨａｎｄｌｅ，ＬＢＡ）をインデックスとする。１つの実施形態において、キャッシュＬＢＡテーブル１４６はハッシュテーブルを使って実装され、キャッシュデータストア１５０に格納されたブロックのためのデータをアドレス指定するには、パラメータ「ａｄｄｒｅｓｓ＿ｉｎ＿ｄａｔａ＿ｓｔｏｒｅ」が使用される。技術的に実現可能な何れのアドレス指定方法が実装されてもよく、キャッシュデータストア１５０の実装の詳細に依存してもよい。置換ポリシデータ構造（replacement policy data structure）１４８は、キャッシュデータストア１５０内に格納されたデータの置換ポリシを実装するために保持される。１つの実施形態において、置換ポリシデータ構造１４８はＬＲＵリストであり、各リストエントリはキャッシュデータストア１５０内に格納されている各ブロックの記述子を含む。あるエントリがアクセスされると、そのエントリはＬＲＵリスト内のその位置から引き出されてリストの先頭に置かれ、そのエントリが現在の最も最近使用された（ＭＲＵ：ｍｏｓｔ  ｒｅｃｅｎｔｌｙ  ｕｓｅｄ）エントリであることを示す。ＬＲＵリストの末尾にあるエントリは、最も過去に使用されたエントリであり、新しい別のブロックをキャッシュデータストア１５０に格納する必要が生じたときに追い出されるべきエントリである。
【００２１】
図１Ａを使って実装される実施形態は、バッファキャッシュ１２４内で生成された、ストレージシステム１６０をターゲットとするブロックアクセスリクエストをモニタしてもよい。ハイパーバイザキャッシュコントローラ１４０は、ＰＰＮ−ＬＢＡテーブル１４４を使ってＰＰＮ−ＬＢＡマッピングを追跡することにより、バッファキャッシュ１２４内にどのデータブロックが格納されているかを推測することができる。ハイパーバイザキャッシュコントローラ１４０はすると、キャッシュデータストア１５０を管理して、キャッシュに格納されたデータがバッファキャッシュ１２４とキャッシュデータストア１５０との間でなるべく重複しないようにすることができる。あるキャッシュ階層内の２つのキャッシュに重複するデータが最小限しかないか、またはまったくなければ、これらは排他的（exclusive）と呼ばれる。データ降格のメカニズムを使って排他性が実現され、これによれば、あるデータユニットは、データを対応するデータストアから追い出している間に、上書きされるのではなく別のキャッシュに降格される。降格については、図２において後でより詳しく説明する。
【００２２】
図１Ｂは、他の実施形態による、マルチレベルキャッシングを実装するように構成された仮想化コンピューティングシステム１０２のブロック図である。この実施形態では、図１Ａの仮想化コンピューティングシステム１００がセマンティックスヌーパ（semantic snooper）１８０とプロセス間通信（ＩＰＣ：ｉｎｔｅｒ−ｐｒｏｃｅｓｓ  ｃｏｍｍｕｎｉｃａｔｉｏｎ）モジュール１８２を含むように拡張されている。セマンティックスヌーパ１８０とＩＰＣ１８２は、ＧＯＳ１２０内にインストールされた擬似デバイスドライバとして実装されてもよい。擬似デバイスドライバは、仮想化技術において広く知られ、利用されている。セマンティックスヌーパ１８０は、ファイルシステム１２２の動作、例えば正確にどのＰＰＮがどのＬＢＡをバッファするのに使用されるか、等をモニタするように構成される。セマンティックスヌーパ１８０がバッファキャッシュ１２４に関する具体的な動作情報を読み出すための１つの例示的なメカニズムが、周知のリナックス・ケープローブ（Ｌｉｎｕｘ  ｋｐｒｏｂｅ）メカニズムである。セマンティックスヌーパ１８０は、カーネル関数ｄｅｌ＿ｐａｇｅ＿ｆｒｏｍ＿ｌｒｕ（）のトレースを確立してもよく、このトレースはＬｉｎｕｘバッファキャッシュ内に格納されたデータのＬＲＵリストからあるページを追い出す。このカーネル関数のエントリで、セマンティックスヌーパ１８０にビクティムページ（victim page）のＰＰＮが渡され、このＰＰＮはその後、ＩＰＣ１８２とＩＰＣエンドポイント１８４を介してハイパーバイザキャッシュコントローラ１４０に渡される。この実施形態において、ハイパーバイザキャッシュコントローラ１４０は、アクセスリクエストに関連付けられたパラメータを追跡することによってＰＰＮの利用を推測するのではなく、バッファキャッシュ１２４のＰＰＮの利用を明確に追跡することができる。
【００２３】
通信チャネル１７６がＩＰＣ１８２とＩＰＣエンドポイント１８４との間に確立される。１つの実施形態において、共有メモリセグメントが通信チャネル１７６を含む。ＩＰＣ１８２とＩＰＣエンドポイント１８４は、カリフォルニア州パロアルトのヴイエムウェア社（ＶＭｗａｒｅ，Ｉｎｃ．）が開発した仮想マシン通信インタフェース（ＶＭＣＩ：ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ  ｃｏｍｍｕｎｉｃａｔｉｏｎ  ｉｎｔｅｒｆａｃｅ）と呼ばれるＩＰＣシステムを実装してもよい。このような実施形態において、ＩＰＣ１８２はクライアントＶＭＣＩライブラリのインスタンスを含み、ＩＰＣ１８２はＩＰＣ通信プロトコルを実行してＰＰＮ利用情報等のデータをＶＭ１１０から仮想化システム１３０へと送信する。同様に、ＩＰＣエンドポイント１８４はＶＭＣＩエンドポイントを含み、ＩＰＣエンドポイント１８４はＩＰＣ通信プロトコルを実行してＶＭＣＩライブラリからデータを受け取る。
【００２４】
図２は、１つの実施形態による、キャッシュレベル階層２００のデータ昇格とデータ降格を示す。キャッシュレベル階層２００は、第一レベルキャッシュ２３０と、第二レベルキャッシュ２４０と、第三レベルキャッシュ２５０と、を含む。キャッシュに格納されていない新しいデータがリクエストされると、３つのレベルすべてにおいてキャッシュミスとなる。このデータはまず、第一レベルキャッシュ２３０に書き込まれ、最も最近使用されたデータを含む。特定のデータユニット、例えば図１Ａ〜１Ｂのブロック１６８に関連するデータが十分な長さの期間にわたりアクセスされず、その間に他のデータがリクエストされ、第一レベルキャッシュ２３０に保存された場合、そのデータユニットはいずれ最も過去に使用されたデータとなり、追い出される位置に置かれる。そのデータユニットは、追い出されると降格動作２２０を通じて第二レベルキャッシュ２４０に降格される。降格後は当初、そのデータユニットは第二レベルキャッシュ２４０の中の最も最近使用されたものの位置を占める。このデータユニットは第二レベルキャッシュ２４０の中でも同様に古くなり、やがて、今度は降格動作２２２を通じて第三レベルキャッシュ２５０へと再び降格される。このデータユニットが十分に長い期間にわたり古くなると、このデータユニットはいずれ第三レベルキャッシュ２５０から追い出される。第三レベルキャッシュ２５０にある、あるデータユニットがリクエストされた場合は、キャッシュヒットがヒット動作２１２を通じてそのデータを第一レベルキャッシュ２３０へと再び昇格させる。同様に、第二レベルキャッシュ２４０におけるあるデータユニットがリクエストされると、キャッシュヒットがヒット動作２１０を通じてこのデータを第一レベルキャッシュ２３０へと再び昇格させる。各キャッシュレベルで、あるデータユニットのコピーは１回のみでよいが、各キャッシュレベルで降格動作２２０、２２２が利用可能で、降格情報が利用可能であることが条件となる。
【００２５】
１つの実施形態において、第一レベルキャッシュ２３０は図１Ａ〜１Ｂのバッファキャッシュ１２４を含み、第二レベルキャッシュ２４０はハイパーバイザキャッシュコントローラ１４０と共にキャッシュデータストア１５０を含み、第三レベルキャッシュ２５０はストレージシステムキャッシュ１６４を含む。バッファキャッシュ１２４はどの置換ポリシでも自由に実装できる。ハイパーバイザキャッシュコントローラ１４０は、特権的命令トラップ（privileged instruction trap）をモニタすることによってバッファキャッシュ１２４により実行されるページ割当および置換を推測するか、またはセマンティックスヌーパ１８０を通じてページ割当および置換が知らされる。
【００２６】
１つの実施形態において、指定されたＰＰＮを有するメモリページの降格は、追い出されたページの内容を別のキャッシュに関連付けられたマシンメモリの別のページにコピーするコピー動作を通じて実行される。この実施形態において、コピー動作は、新しいデータが同じＰＰＮに上書きされる前に完了している必要がある。例えば、バッファキャッシュ１２４があるＰＰＮであるデータページを追い出すと、ハイパーバイザキャッシュコントローラ１４０がそのデータページを、そのデータページの内容をキャッシュデータストア１５０にコピーすることによって降格する。そのページの内容がキャッシュデータストア１５０にコピーされると、バッファキャッシュ１２４内の追い出しをトリガしたｒｅａｄ＿ｐａｇｅ（）動作は自由にそのＰＰＮに新しいデータを上書きできる。
【００２７】
他の実施形態において、指定されたＰＰＮを有するメモリページの降格は、そのＰＰＮをマシンメモリのうちの、バッファとして使用するために割り当てられた新しいページにマッピングしなおすリマッピング動作を通じて実行される。すると、追い出されたメモリページはＰＰＮを上書きするｒｅａｄ＿ｐａｇｅ（）動作と同時にキャッシュデータストア１５０にコピーされてもよく、今度はこのＰＰＮは新しいメモリページを指す。この技術により、有利な点として、バッファキャッシュ１２４によって実行されるｒｅａｄ＿ｐａｇｅ（）動作を、追い出されたデータページのキャッシュデータストア１５０への降格と同時に行うことが可能となる。１つの実施形態において、追い出されたページが降格された後に、ＰＰＮ−ＬＢＡテーブル１４４が更新される。
【００２８】
現代的なオペレーティングシステムは、ウィンドウズ（Ｗｉｎｄｏｗｓ）、リナックス、ソラリス（Ｓｏｌａｒｉｓ）、およびビーエスディー（ＢＳＤ）を含め、すべてがバッファキャッシュと仮想メモリを統合したシステムを実装しているため、ディスクＩＯ以外のイベントがページの追い出しをトリガでき、これによって、置換されたページ内のデータをＩＯ目的のために再び再利用される前にＩＯ以外の目的のために変更可能とすることができる。その結果、そのページの内容は、対応するディスク位置にあるデータとはもはや一致しなくなる。一致しないデータがキャッシュデータストア１５０に降格されるのを回避するために、ハイパーバイザキャッシュコントローラ１４０により、チェックサムに基づくデータ完全性が実現されてもよい。データ完全性を確保するための１つの方法は、あるエントリが追加されたときに、ＭＤ５チェックサムを計算し、そのチェックサムをＰＰＮ−ＬＢＡテーブル１４４内の各エントリに関連付けることを含む。ｒｅａｄ＿ｐａｇｅ（）動作中は、ＭＤ５チェックサムが再計算され、ＰＰＮ−ＬＢＡテーブル１４４内に保存された当初のチェックサムと比較される。適合（match）していれば、対応するデータが変更されていないことを意味し、そのページはＬＢＡデータと一致するため、そのページが降格される。そうでなければ、ＰＰＮ−ＬＢＡテーブル１４４のそのページのための対応するエントリがドロップされる。
【００２９】
ｗｒｉｔｅ＿ｐａｇｅ（）動作が起動されると、ＰＰＮ−ＬＢＡテーブル１４４とキャッシュＬＢＡテーブル１４６に、ｗｒｉｔｅ＿ｐａｇｅ（）の中で指定されたＰＰＮまたはＬＢＡの値の何れかの適合に関するクエリが行われる。適合が見つかれば、ＰＰＮ−ＬＢＡテーブル１４４と置換ポリシデータ構造１４８の中の適合するエントリのすべてを無効化または更新するべきである。これに加えて、関連するＭＤ５チェックサムとＰＰＮ−ＬＢＡテーブル１４４のＬＢＡ（その書込みが新しいＬＢＡに対するものである場合）をその都度、更新または追加するべきである。新しいＭＤ５チェックサムが計算され、キャッシュＬＢＡテーブル１４６の対応するエントリに関連付けられてもよい。
【００３０】
ＭＤ５チェックサムを使ったページ変更（一貫性）の検出の代替案は、特定のページを読取専用ＭＭＵ保護によって保護することが関わり、それによってあらゆる変更を直接検出できる。この方法は、厳密にはＭＤ５チェックサムより安価であり、なぜなら、変更されたページは、ハイパーバイザトラップに関して読取専用違反が行われたときにのみ、そしてこれらの変更されたページについてのみ、追加の作業を発生させるからである。これに対して、チェックサム方式では各ページについてチェックサム計算を２回行う必要がある。
【００３１】
リナックス等の現代的なオペレーティングシステムの多くは、バッファキャッシュ１２４と仮想メモリ全体を統合されたシステム内で管理する。このような統合により、ＩＯアクセスに基づいてすべてのページの追い出しを正確に検出することがさらに困難となる。例えば、特定のページをストレージマッピングのために割り当てて、ｒｅａｄ＿ｐａｇｅ（）を使ってフェッチされたデータユニットを保持すると仮定する。ある地点で、ゲストＯＳ１２０はそのページをＩＯ以外の何らかの目的のために、またはいずれディスクに書き込まれることになる新しいデータブロックを構築するために使用することを選択できる。この場合、以前のそのページの内容が追い出されていることをハイパーバイザに伝える明確な動作（例えばｒｅａｄ＿ｐａｇｅ（））はない。
【００３２】
ハイパーバイザにページ保護を追加することにより、ストレージにマッピングされたページはそのページが最初に変更されたときに、変更の原因が推測可能であれば検出されうる。そのページがディスク上の関連するブロックが更新できるように変更されている場合、ページの追い出しは行われない。しかしながら、そのページが、異なる目的のための異なるデータを含むように変更されている場合は、以前の内容が追い出されている。特定のページ変更は一貫して、特定のオペレーティングシステムによってページの追い出しと共に実行される。したがって、実行されているこのような変更は、ページ追い出しの指標として使用できる。このような変更のうちの２つは、ＧＯＳ１２０によるページゼロ化（page zeroing）とＧＯＳ１２０によるページ保護またはマッピング変更を含む。
【００３３】
ページゼロ化は一般に、ページが新しいリクエスタ（new requestor）に割り当てられる前にオペレーティングシステムによって実行される。ページゼロ化は、有利な点として、プロセス間で偶発的にデータが共有されるのを回避する。ページゼロ化はまた、ＧＯＳ１２０におけるページゼロ化動作の観察によりページ追い出しを推測するために、ＶＭＭによって検出されてもよい。技術的に実現可能な何れの技術を使ってページゼロ化を検出してもよく、これにはパターン検出を実行する既存のＶＭ技術が含まれる。
【００３４】
ページ保護または特定のＰＰＮへの仮想メモリのマッピング変更は、ＧＯＳ１２０が対応するページの目的を変えていることを示す。例えば、メモリにマッピングされたＩ／Ｏ動作に使用されたページは、特定の保護設定と仮想マッピングを有していてもよい。保護または仮想マッピングの何れかの変更は、ＧＯＳ１２０がそのページを他の目的のために割り当てしなおしたことを示してもよく、それは、このページが追い出されていることを示す。
【００３５】
図３Ａおよび３Ｂの各々は、ストレージシステムをターゲットとする読取リクエストに応答するためにハイパーバイザキャッシュ（hypervisor cache）により実行される方法のフロー図である。図３Ｂは図３Ａに関係しているが、特定のステップを並行して処理できるような最適化を示している。この方法ステップは図１Ａおよび１Ｂのシステムに関して説明されるが、理解すべき点として、本発明の範囲および趣旨から逸脱せずにこれらの方法ステップを実行できるシステムは他にもある。１つの実施形態において、ハイパーバイザキャッシュはハイパーバイザキャッシュコントローラ１４０およびキャッシュデータストア１５０を含む。
【００３６】
図３Ａに示される方法３００はステップ３１０から始まり、ここでハイパーバイザキャッシュは、リクエストＰＰＮとデバイスハンドル（「ｄｅｖｉｃｅＨａｎｄｌｅ」）と読取ＬＢＡ（ＲＬＢＡ）を含むページ読取リクエストを受け取る。このページ読取リクエストはまた、長さパラメータ（「ｌｅｎ」）も含んでいてよい。ステップ３２０で、ハイパーバイザキャッシュがリクエストＰＰＮは図１Ａ〜１ＢのＰＰＮ−ＬＢＡテーブル１４４にあると判断すると、方法はステップ３５０に進む。１つの実施形態において、ＰＰＮ−ＬＢＡテーブル１４４は、ＰＰＮをインデックスとするハッシュテーブル（hash table）を含み、リクエストＰＰＮが存在するか否かの判断はハッシュルックアップ（hash lookup）を使って実行される。
【００３７】
ステップ３５０で、ハイパーバイザキャッシュが、ＰＰＮ−ＬＢＡテーブル１４４に保存された、リクエストＰＰＮに関連付けられるＬＢＡ値（ＴＬＢＡ）はＲＬＢＡと等しくないと判断すると、方法はステップ３５２に進む。ＲＬＢＡがＴＬＢＡと等しくない状態は、リクエストＰＰＮにおいて保存されたページが追い出されていて、降格する必要がありうることを示す。ステップ３５２で、ハイパーバイザキャッシュは指定されたＰＰＮにおいて保存されたデータのチェックサムを計算する。１つの実施形態において、ＭＤ５チェックサムはそのデータのためのチェックサムとして計算される。
【００３８】
ステップ３６０で、ハイパーバイザキャッシュがステップ３５２で計算されたチェックサムはＰＰＮ−ＬＢＡテーブル１４４にエントリとして保存されていたそのＰＰＮのためのチェックサムと適合するかを判断する。そうであれば、方法はステップ３６２に進む。適合するチェックサムは、リクエストＰＰＮにおいて保存されていたデータが一貫しており、降格されうることを示す。ステップ３６２で、ハイパーバイザキャッシュは、リクエストＰＰＮにおいて保存されたデータをキャッシュデータストア１５０にコピーする。ステップ３６４で、ハイパーバイザキャッシュはコピーされたデータのエントリを置換ポリシデータ構造１４８に追加し、そのデータがキャッシュデータストア１５０にあり、関連する置換ポリシの適用対象であることを示す。ＬＲＵ置換ポリシが実装されていれば、そのエントリは置換ポリシデータ構造１４８にあるＬＲＵリストの先頭に加えられる。ステップ３６６で、ハイパーバイザキャッシュがエントリをキャッシュＬＢＡテーブル１４６に追加し、そのＬＢＡのデータがキャッシュデータストア１５０内で発見されうることを示す。ステップ３６２〜３６６は、リクエストＰＰＮにより参照されるデータページを降格するためのプロセスを示す。
【００３９】
ステップ３６８で、ハイパーバイザキャッシュは、キャッシュデータストア１５０をチェックして、要求されたデータがキャッシュデータストア１５０に保存されているか（すなわち、キャッチヒット）を判断する。ステップ３６８でハイパーバイザキャッシュが要求されたデータはキャッシュデータストア１５０においてキャッシュヒットであると判断すると、方法はステップ３７０および３７１に進み、そこでハイパーバイザキャッシュは要求されたデータをキャッシュデータストア１５０からリクエストＰＰＮにより参照される１つまたは複数のページにロードし（ステップ３７０）、ハイパーバイザキャッシュはそのキャッシュヒットに対応するエントリをキャッシュＬＢＡテーブル１４６から削除し、また置換ポリシデータ構造１４８内の対応するエントリを削除する（ステップ３７１）。この時点で、理解すべき点として、そのキャッシュヒットに関連するデータはバッファキャッシュ１２４にあり、バッファキャッシュ１２４とキャッシュデータストア１５０との間で排他性が保持される必要がある。ステップ３７４で、ハイパーバイザキャッシュはリクエストＰＰＮに関連付けられる読取ＬＢＡを反映させるようにＰＰＮ−ＬＢＡテーブル１４４を更新する。ステップ３７６で、ハイパーバイザキャッシュはリクエストＰＰＮに関連付けられる要求されたデータのために新たに計算されたチェックサムを反映させるようにＰＰＮ−ＬＢＡテーブル１４４を更新する。方法はステップ３９０で終了する。
【００４０】
ステップ３６８で、ハイパーバイザキャッシュが要求されたデータはキャッシュデータストア１５０においてキャッシュヒットではないと判断すると、方法はステップ３７２に進み、ステップ３７２でハイパーバイザキャッシュは要求されたデータをストレージシステム１６０からリクエストＰＰＮにより参照される１つまたは複数のページにロードする。ステップ３７２の後に、ステップ３７４および３７６が上述の方法で実行される。
【００４１】
ステップ３２０に戻り、ハイパーバイザキャッシュがリクエストＰＰＮは図１Ａ〜１ＢのＰＰＮ−ＬＢＡテーブル１４４に存在しないと判断すると、方法はステップ３６８に進み、ステップ３６８で、上述のように、ハイパーバイザキャッシュはキャッシュデータストア１５０をチェックして、要求されたデータがキャッシュデータストア１５０に保存されているか（すなわち、キャッシュヒット）を判断し、上述のようにその後のステップを実行する。
【００４２】
ステップ３５０に戻り、ハイパーバイザキャッシュが、ＰＰＮ−ＬＢＡテーブル１４４に保存されているＴＬＢＡ値がＲＬＢＡと等しいと判断すると、方法はステップ３９０で終了する。
【００４３】
ステップ３６０に戻り、ステップ３５２で計算されたチェックサムがＰＰＮ−ＬＢＡテーブル１４４にエントリとして保存されているそのＰＰＮのためのチェックサムと適合しなければ、方法はステップ３６８に進む。この不適合は、ページデータが変わっており、降格するべきであるという指標となる。
【００４４】
図３Ａに示される方法３００において、データをバッファキャッシュ１２４にロードするステップ（ステップ３７０またはステップ３７２）は、リクエストＰＰＮにより参照されたデータページが降格された後に実行される。他の実施形態、例えば図３Ｂに示されるステップ３０１においては、認識すべき点として、データをバッファキャッシュ１２４にロードするステップ（ステップ３７０またはステップ３７２）がリクエストＰＰＮにより参照されたデータページを降格するステップと並行して行われてもよい。これは、ハイパーバイザキャッシュがステップ３６０で、ステップ３５２で計算されたチェックサムはＰＰＮ−ＬＢＡテーブル１４４にエントリとして保存されているそのＰＰＮのチェックサムと適合すると判断し、ハイパーバイザキャッシュがステップ３６１で上述のように、リクエストＰＰＮにより参照されたマシンページを異なるＰＰＮにマッピングしなおし、そのリクエストＰＰＮに新しいマシンページを割り当てた後に、ハイパーバイザキャッシュにステップ３６８の決定ブロックとそれに続くステップをステップ３６２と並行して実行させることによって実現される。
【００４５】
図４は、ストレージシステムをターゲットとした書込みリクエストに応答するためにハイパーバイザキャッシュにより実行される方法４００のフロー図である。方法ステップは図１Ａおよび１Ｂのシステムに関連して説明されるが、理解すべき点として、本発明の範囲および趣旨から逸脱せずにこれらの方法ステップを実行できるシステムは他にもある。１つの実施形態において、ハイパーバイザキャッシュはハイパーバイザキャッシュコントローラ１４０およびキャッシュデータストア１５０を含む。
【００４６】
方法４００はステップ４１０から始まり、ステップ４１０でハイパーバイザキャッシュは、リクエストＰＰＮとデバイスハンドル（「ｄｅｖｉｃｅＨａｎｄｌｅ」）と書込みＬＢＡ（ＷＬＢＡ）を含むページ書込みリクエストを受け取る。このページ書込みリクエストはまた、長さパラメータ（「ｌｅｎ」）も含んでいてよい。ステップ４２０で、ハイパーバイザキャッシュがリクエストＰＰＮは図１Ａ〜１ＢのＰＰＮ−ＬＢＡテーブル１４４にあると判断すると、方法はステップ４４０に進む。１つの実施形態において、ＰＰＮ−ＬＢＡテーブル１４４は、ＰＰＮをインデックスとするハッシュテーブルを含み、リクエストＰＰＮが存在するか否かの判断はハッシュルックアップを使って実行される。ハッシュルックアップは、適合するエントリのインデックスを提供するか、またはそのＰＰＮが存在しないことを示す。
【００４７】
ステップ４４０で、ハイパーバイザキャッシュがＷＬＢＡはリクエストＰＰＮに関連付けられるＰＰＮ−ＬＢＡテーブル１４４に保存されていたＬＢＡ値（ＴＬＢＡ）と適合しないと判断すると、方法はステップ４４２に進み、ここでハイパーバイザキャッシュは、ＷＬＢＡがリクエストＰＰＮに関連付けられることを反映させるようにＰＰＮ−ＬＢＡテーブル１４４を更新する。ステップ４４４で、ハイパーバイザキャッシュはリクエストＰＰＮにより参照された書込みデータのためのチェックサムを計算する。ステップ４４６で、ハイパーバイザキャッシュは、リクエストＰＰＮがステップ４４４で計算されたチェックサムによって特徴付けられることを反映させるようにＰＰＮ−ＬＢＡテーブル１４４を更新する。
【００４８】
ステップ４４０に戻り、ハイパーバイザキャッシュがＷＬＢＡはリクエストＰＰＮに関連付けられたＴＬＢＡと確かに適合すると判断すると、方法はステップ４４４に進む。この不適合は、ＷＬＢＡを反映するエントリがＰＰＮ−ＬＢＡテーブル１４４にすでに存在し、そのエントリには対応するデータのための更新されたチェックサムが必要であるという指標となる。
【００４９】
ステップ４２０に戻り、ハイパーバイザキャッシュがリクエストＰＰＮは図１Ａ〜１ＢのＰＰＮ−ＬＢＡテーブル１４４に存在しないと判断すると、方法はステップ４３０に進み、ステップ４３０でハイパーバイザキャッシュはリクエストＰＰＮにより参照されたデータのチェックサムを計算する。ステップ４３２で、ハイパーバイザキャッシュはエントリをＰＰＮ−ＬＢＡテーブル１４４に追加し、このエントリは、リクエストＰＰＮがＷＬＢＡに関連付けられることを示し、ステップ４３０で計算されたチェックサムを含む。
【００５０】
ステップ４５０はステップ４３２の後とステップ４４４の後で実行される。ステップ４５０でハイパーバイザキャッシュがＷＬＢＡはキャッシュＬＢＡテーブル１４６にあると判断すると、方法はステップ４５２に進む。キャッシュＬＢＡテーブル１４６にＷＬＢＡがあることは、そのＷＬＢＡに関連するデータが現在キャッシュデータストア１５０に格納されており、これと同じデータがバッファキャッシュ１２４に存在するため、キャッシュデータストア１５０から廃棄するべきであることを示す。ステップ４５２で、ハイパーバイザキャッシュはそのＷＬＢＡに対応するキャッシュＬＢＡテーブル１４６のテーブルエントリを削除する。ステップ４５４で、ハイパーバイザキャッシュはそのＷＬＢＡに対応するエントリを置換ポリシデータ構造１４８から削除する。ステップ４５６で、ハイパーバイザキャッシュはリクエストＰＰＮにより参照されたデータをストレージシステム１６０に書き込む。方法はステップ４９０で終了する。
【００５１】
ステップ４５０でハイパーバイザキャッシュがそのＷＬＢＡはキャッシュＬＢＡテーブル１４６にないと判断すると、キャッシュＬＢＡテーブル１４６から廃棄すべきものがないため、方法はステップ４５６に進む。
【００５２】
要するに、仮想化コンピューティングシステム内の階層的キャッシュストレージを効率的に管理するための方法が開示される。ゲストオペレーティングシステム内のバッファキャッシュは第一のキャッシングレベルを提供し、ハイパーバイザキャッシュは第二のキャッシングレベルを提供する。また別のキャッシュが追加のキャッシングレベルを提供してもよい。あるデータユニットがゲストオペレーティングシステムによってロードされ、バッファキャッシュに格納されると、ハイパーバイザキャッシュは、関連する状態を記録するが、実際にはそのデータユニットをキャッシュに格納しない。ハイパーバイザキャッシュがそのデータユニットをキャッシュに格納するのは、バッファキャッシュがそのデータユニットを追い出し、そのデータユニットをハイパーバイザキャッシュにコピーする降格動作をトリガしたときだけである。ハイパーバイザキャッシュがキャッシュヒットであるリクエストを受け取ると、これはそのデータユニットがバッファキャッシュにすでに存在することを示すため、ハイパーバイザキャッシュは対応するエントリを削除する。
【００５３】
本発明の実施形態の１つの利点は、キャッシングレベルの階層の中のデータが１つのレベルだけに存在すればよいことであり、これはその階層内のストレージの全体的な効率を改善する。他の利点は、特定の実施形態がゲストオペレーティングシステムに関して透過的に実行されてもよい点である。
【００５４】
本明細書に記載された各種の実施形態は、コンピュータシステム内に保存されたデータに係る様々なコンピュータ実装動作を利用してもよい。例えば、これらの動作は物理的な数量の物理的な操作を必要とすることができ、通常、ただし必ずしもそうとはかぎらないが、これらの数量は電気または磁気信号の形態をとってもよく、その場合、これらまたはそれを表現したものは保存、転送、合成、比較またはそれ以外に操作できる。さらに、このような操作は生成、特定、判定または比較等の用語で呼ばれることが多い。本明細書に記載された、本発明の１つまたは複数の実施形態の一部を形成する動作は何れも、有益な機械動作であってよい。これに加えて、本発明の１つまたは複数の実施形態はまた、これらの動作を実行するデバイスまたは装置にも関する。この装置は要求された具体的な目的のために特に構成されてもよく、またはコンピュータ内に保存されたコンピュータブログラムによって選択的に作動または構成される汎用コンピュータであってもよい。特に、各種の汎用マシンは、本明細書の教示に従って書かれたコンピュータプログラムと共に使用されてもよく、または必要な動作を実行するための、より専門化された装置を構成するほうが好都合でありうる。
【００５５】
本明細書に記載された各種の実施形態は、ハンドヘルドデバイス、マイクロプロセッサシステム、マイクロプロセッサベースのまたはプログラム可能な民生用電子機器、ミニコンピュータ、メインフレームコンピュータ、およびこれに類するもの等、他のコンピュータシステム構成で実現されてもよい。
【００５６】
本発明の１つまた複数の実施形態は、１つまたは複数のコンピュータプログラムとして、または１つまたは複数のコンピュータ可読媒体に具現化された１つまたは複数のコンピュータプログラムモジュールとして実装されてもよい。コンピュータ可読媒体という用語は、後にコンピュータシステムに入力可能なデータを保存できるあらゆるデータストレージデバイスを指す。コンピュータ可読媒体は、コンピュータによりそれらが読み取られることを可能にする方法でコンピュータプログラムを具現化するための、既存の、または今後開発される何れの技術に基づいていてもよい。コンピュータ可読媒体の例としては、ハードドライブ、ネットワークアタッチトストレージ（ＮＡＳ：ｎｅｔｗｏｒｋ  ａｔｔａｃｈｅｄ  ｓｔｏｒａｇｅ）、リードオンリメモリ、ランダムアクセスメモリ（例えばフラッシュメモリデバイス）、ＣＤ（コンパクトディスク：Ｃｏｍｐａｃｔ  Ｄｉｓｃ）、ＣＤ−ＲＯＭ、ＣＤ−ＲまたはＣＤ−ＲＷ、ＤＶＤ（デジタル多目的ディスク：Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）、磁気テープ、その他の光および光以外のデータストレージデバイスがある。コンピュータ可読媒体はまた、ネットワーク接続されたコンピュータシステム上に分散させることができ、それによってコンピュータ可読コードが分散されて保存され、実行される。
【００５７】
本発明の１つまたは複数の実施形態を明瞭に理解できるようにある程度詳しく説明したが、特許請求の範囲内で特定の変更および改変を加えられることは明らかであろう。したがって、説明された実施形態は例示的であって限定的ではないと考えるべきであり、特許請求の範囲は、本明細書中に記された詳細に限定されず、特許請求の範囲および均等物の中で改変してもよい。特許請求項において、要素および／またはステップは、特許請求項の中に明記されていないかぎり、いかなる具体的な動作順序も黙示していない。
【００５８】
これに加えて、記載された仮想化方法は一般に、仮想マシンが特定のハードウェアシステムに適合するインタフェースを提示することを前提としているが、当業者であれば、記載された方法が何れの特定のハードウェアシステムに直接対応しない仮想化と合わせても使用できることがわかるであろう。ホストされた実施形態、ホストされていない実施形態、または双方の間の区別が曖昧となる傾向のある実施形態として実装される各種の実施形態による仮想化システムはすべて想定される。さらに、各種の仮想化動作は全部または一部がハードウェアにおいて実装されてもよい。例えば、ハードウェアの実装は、非ディスクデータのセキュリティを確保するために、ストレージアクセスリクエストを変更するためにルックアップテーブルを利用してもよい。
【００５９】
多くの変更形態、改変形態、追加形態、および改良形態が、仮想化の程度にかかわらず可能である。仮想化ソフトウェアはしたがって、仮想化機能を実行するホスト、コンソール、またはゲストオペレーティングシステムのコンポーネントを含むことができる。本明細書において１つの例として記載されたコンポーネント、動作または構造について、複数の例が提供されてもよい。最後に、各種のコンポーネント、動作、およびデータストア間の境界は幾分任意であり、具体的な動作が特定の例示的構成に関連して示されている。機能のその他の割当も想定され、本発明の範囲内に含めてよい。概して、例示的な構成において別々のコンポーネントとして示されている構造および機能は、合体された構造またはコンポーネントとして実装されてもよい。同様に、１つのコンポーネントとして提示されている構造および機能は、別々のコンポーネントとして実装されてもよい。これらおよびその他の変更形態、改変形態、追加形態、および改良形態は付属の特許請求の範囲内に含められてもよい。
【図１Ａ】
0006028101.tif 000002
【図１Ｂ】
0006028101.tif 000003
【図２】
0006028101.tif 000004
【図３Ａ】
0006028101.tif 000005
【図３Ｂ】
0006028101.tif 000006
【図４】
0006028101.tif 000007