(57)【特許請求の範囲】
【請求項１】
１または複数のプロセッサと、
前記１または複数のプロセッサによってアクセス可能なシステム物理メモリと、
仮想化対応モジュールを有する第１の仮想マシンであって、前記システム物理メモリに格納された前記仮想化対応モジュールは、
第２の仮想マシンのワークロードとは独立しているゲスト物理メモリアドレスの第１の範囲を前記第１の仮想マシンの内部の部分から受信し、
前記ゲスト物理メモリアドレスの第１の範囲内の前記ゲスト物理メモリアドレスの少なくとも１つがゲスト物理メモリの非常駐部分をポイントするかどうかを判定し、
前記ゲスト物理メモリアドレスの少なくとも１つが前記ゲスト物理メモリの非常駐部分をポイントするという判定に応答し、要求をハイパーバイザに送信して前記ゲスト物理メモリの非常駐部分をコミットし、前記ゲスト物理メモリの非常駐部分がコミットされたことを示すメッセージを前記ハイパーバイザから受信し、
前記ゲスト物理メモリアドレスの第１の範囲を前記第１の仮想マシンの内部の部分に送信する
前記１または複数のプロセッサ上で動作可能である、第１の仮想マシンと
を備えたことを特徴とするコンピュータシステム。
【請求項２】
前記仮想化対応モジュールは、前記ゲスト物理メモリアドレスの第１の範囲と関連付けられたメモリ転送が完了したという指示を受信することがさらに実行可能であることを特徴とする請求項１に記載のコンピュータシステム。
【請求項３】
前記仮想化対応モジュールはデータ構造を備え、前記データ構造は前記ゲスト物理メモリのそれぞれの部分に対するインジケータを含み、それぞれのインジケータは、前記ゲスト物理メモリの部分が常駐であるかまたは非常駐であるかどうかの表現を含むことを特徴とする請求項１に記載のコンピュータシステム。
【請求項４】
それぞれのインジケータが進行中のメモリ転送の参照カウントをさらに備え、前記進行中のメモリ転送は、前記インジケータと関連付けられた前記ゲスト物理メモリの部分を含む前記ゲスト物理メモリアドレスの第２の範囲を対象とすることを特徴とする請求項３に記載のコンピュータシステム。
【請求項５】
前記ゲスト物理メモリアドレスの第１の範囲は、非同期ダイレクトメモリアクセス転送の対象を含むことを特徴とする請求項１に記載のコンピュータシステム。
【請求項６】
前記仮想化対応モジュールは、ハードウェア抽象化層であることを特徴とする請求項１に記載のコンピュータシステム。
【請求項７】
前記ハイパーバイザに要求を送信した後、前記仮想化対応モジュールは、前記ゲスト物理メモリのそれぞれの部分と関連付けられた前記参照カウントを更新することを特徴とする請求項４に記載のコンピュータシステム。
【請求項８】
前記仮想化対応モジュールの複数のインスタンス化は同じデータ構造にアクセスし、前記データ構造は前記ゲスト物理メモリのそれぞれの部分のインジケータを含むことを特徴とする請求項３に記載のコンピュータシステム。
【請求項９】
前記ハイパーバイザは、前記仮想化対応モジュールが前記ゲスト物理メモリのそれぞれの部分と関連付けられた前記参照カウントを更新するのに失敗した時に前記第１の仮想マシンを制限するように構成されることを特徴とする請求項７に記載のコンピュータシステム。
【請求項１０】
前記制限は前記第１の仮想マシンを終了することを含むことを特徴とする請求項９に記載のコンピュータシステム。
【請求項１１】
前記ゲスト物理メモリアドレスの第１の範囲は、デバイスドライバの要求を伝達するための入力／出力要求パケットと関連付けられていることを特徴とする請求項１に記載のコンピュータシステム。
【請求項１２】
前記仮想化対応モジュールは、前記ハイパーバイザによってホストされたワークロードにおいて実行する仮想化非対応ゲストオペレーティングシステムに挿入されるように構成されて、前記ハイパーバイザによって、前記仮想化非対応ゲストオペレーティングシステムが前記コンピュータシステムのハードウェアデバイスをダイレクトに制御できるようになることを特徴とする請求項１に記載のコンピュータシステム。
【請求項１３】
前記ワークロードは、前記ワークロードが前記システム物理メモリへのダイレクトアクセスを用いてＤＭＡ転送を行う間に第２のコンピュータシステムにマイグレートされることを特徴とする請求項１２に記載のコンピュータシステム。
【請求項１４】
メモリに格納された仮想化対応モジュールを有する第１の仮想マシンにおいて、前記第１の仮想マシンの内部の部分から、ゲスト物理メモリアドレスの第１の範囲を含む要求を受信するステップと、
前記第１の仮想マシンが、前記ゲスト物理メモリアドレスの第１の範囲内の前記ゲスト物理メモリアドレスの少なくとも１つがゲスト物理メモリの非常駐部分をポイントするかどうかを判定するステップであって、
るステップと、
前記ゲスト物理メモリアドレスの少なくとも１つが前記ゲスト物理メモリの非常駐部分をポイントするという判定に応答して、要求をハイパーバイザに送信して前記ゲスト物理メモリの非常駐部分をコミットし、前記ハイパーバイザから前記ゲスト物理メモリの非常駐部分がコミットされたことを示すメッセージを受信するステップと、
前記第１の仮想マシンの内部の部分に、前記ゲスト物理メモリアドレスの第１の範囲を送信するステップと
を備えたことを特徴とする方法。
【請求項１５】
前記ゲスト物理メモリアドレスの第１の範囲に関連するメモリ転送が完了したという指示を受信するステップをさらに備えたことを特徴とする請求項１４に記載の方法。
【請求項１６】
前記仮想化対応モジュールはデータ構造を備え、前記データ構造は前記ゲスト物理メモリメモリのそれぞれの部分に対するインジケータを含み、それぞれのインジケータは前記ゲスト物理メモリの部分が常駐であるかまたは非常駐であるかどうかの表現を含み、前記仮想化対応モジュールの複数のインスタンス化を用いて、前記ゲスト物理メモリのそれぞれの部分に対するインジケータを含むものと同じデータ構造にアクセスするステップをさらに備えたことを特徴とする請求項１４に記載の方法。
【請求項１７】
それぞれのインジケータが進行中のメモリ転送の参照カウントをさらに備え、前記進行中のメモリ転送は、前記インジケータと関連付けられた前記ゲスト物理メモリの部分を含むゲスト物理メモリアドレスの第２の範囲を対象とし、前記ハイパーバイザに要求を送信した後、前記ゲスト物理メモリのそれぞれの部分と関連付けられた前記参照カウントを更新するステップをさらに備えたことを特徴とする請求項１６に記載の方法。
【請求項１８】
前記仮想化対応モジュールが前記ゲスト物理メモリのそれぞれの部分と関連付けられた前記参照カウントを更新するのに失敗した時に、前記ハイパーバイザが、前記第１の仮想マシンを制限するように構成されることを特徴とする請求項１７に記載の方法。
【請求項１９】
コンピュータ実行可能命令を格納する１または複数のコンピュータ可読記憶媒体であって、前記コンピュータ実行可能命令を１または複数のプロセッサ上で実行すると、前記プロセッサに、
仮想化対応モジュールを有する第１の仮想マシンにおいて、仮想化対応モジュールを有する第２の仮想マシンのワークロードとは独立しているゲスト物理メモリアドレスの第１の範囲を前記第１の仮想マシンの内部の部分から受信するステップと、
前記ゲスト物理メモリアドレスの第１の範囲内の前記ゲスト物理メモリアドレスの少なくとも１つがゲスト物理メモリの非常駐部分をポイントするかどうかを判定するステップと、
前記ゲスト物理メモリアドレスの少なくとも１つが前記ゲスト物理メモリの非常駐部分をポイントするという判定に応答して、要求をハイパーバイザに送信して前記ゲスト物理メモリの非常駐部分をコミットし、前記ハイパーバイザから前記ゲスト物理メモリの非常駐部分がコミットされたことを示すメッセージを受信するするステップと、
前記ゲスト物理メモリアドレスの第１の範囲を前記第１の仮想マシンの内部の部分に送信するステップと
を実行させることを特徴とするコンピュータ可読記憶媒体。
【請求項２０】
前記コンピュータ実行可能命令を前記プロセッサ上で実行すると、前記プロセッサに、前記ゲスト物理メモリアドレスの第１の範囲に関連するメモリ転送が完了したという指示を受信するステップをさらに実行させることを特徴とする請求項１９に記載のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
コンピュータ産業は、ハードウェアレベルにおいてますます仮想化に向かっている。このような環境において、オペレーティングシステムは、仮想マシンモニタまたはハイパーバイザ上で稼動され、そこでコンピュータハードウェアとの相互作用が仮想化層によって媒介される。これによって、複数の仮想化されたオペレーティングシステム、別名ゲストオペレーティングシステムまたはゲストＯＳとして知られるシステムを単一のコンピュータ上で実行させることによって、同じマシン上で複数のワークロードが互いに強固に隔離されたて稼動することが可能になる。これは、特に複数のワークロードもしくは複数のサーバアプリケーションの稼動が要求されるＩＴ部門または任意の動作にとって有益である。しかしながら、隔離されたオペレーティングシステムがコンピュータハードウェアと相互作用するたびに、仮想化層が隔離を保持するために介入しなければならないので、仮想化層は、パフォーマンスにかなり不利な条件が生じる。このようなパフォーマンスに不利な条件に対処するために、従来の方法では、ハードウェアに対してゲストオペレーティングシステムのダイレクト制御を行わせることによって、仮想化層が介入しなければいけない相互作用の数を減らしてきた。しかしながら、ゲストオペレーティングシステムにこのようなハードウェアデバイスのダイレクト制御を許可することは、ゲストオペレーティングシステムが、そのゲストオペレーティングシステムに割り付けられたすべてのシステムメモリの制御を拘束されずに排他的に行う許可を常に要求する。ゲストオペレーティングシステムに排他的なメモリアクセスを許可することによって、状態カプセル化、マイグレーション、およびチェックポイントを含む仮想化の多くの利点が失われる。
【発明の概要】
【０００２】
本文書は、ゲストＯＳに割り付けられたシステムメモリがオーバーコミットされる間に、物理ハードウェアデバイスに対してゲストＯＳのダイレクトアクセスを行わせてダイレクトメモリアクセス（ＤＭＡ）転送を行うことによって、ハイパーバイザ上で実行するゲストオペレーティングシステム（ゲストＯＳ）のランタイムパフォーマンスを向上させるための技術を説明する。一実装において、仮想化を意識するＤＭＡフィルタドライバが仮想化を意識しないオペレーティングシステムのＩ／Ｏドライバスタックに挿入される結果、教示された(enlightened)または準仮想化された(paravirtualized)ＯＳになる。ＤＭＡ転送用のハードウェアデバイスを使用するアプリケーションによる要求に応答して、ＤＭＡフィルタドライバは、ターゲットゲスト物理メモリの転送がコミットされると知らされるまで、要求された転送の開始を遅らせることができる。一実装において、フィルタドライバは、ハイパーバイザを呼び出さずに、ゲスト物理メモリのページがコミットされたことをトラッキングするためにキャッシュを使用する。一実装において、フィルタドライバが、ターゲットゲスト物理メモリページがコミットされたことをキャッシュから知らされる場合、フィルタドライバは、要求された転送をただちに開始させる。しかしながら、フィルタドライバが、ターゲットゲスト物理メモリページの少なくとも１つがコミットされていないことをキャッシュから知らされる場合、フィルタドライバは、ハイパーバイザに、コミットされていないすべてのターゲットゲスト物理メモリページを戻すことを要求できる。ひとたびすべてのターゲットゲスト物理メモリページがコミットされたという表示を受信すると、ＤＭＡフィルタドライバは、要求された転送を開始させることができる。
【０００３】
一実装において、キャッシュは、ゲスト物理メモリのそれぞれのページと関連付けられた参照カウンタを付加的に備える。一実装において、ＤＭＡ転送が開始される前にフィルタドライバは、転送の間に潜在的にアクセスされるであろうゲスト物理メモリのそれぞれのページと関連付けられた参照カウンタをインクリメントする。ゲスト物理メモリページの参照カウンタが正の整数を備える場合、ハイパーバイザは、別のワークロードが使用するためにページを占有することは(appropriating)、ドナー(donor)ワークロードおよびシステム全体にとって壊滅的になり得ることが分かる。しかしながら、ゲスト物理メモリページの参照カウンタがゼロである場合、ハイパーバイザは、別のワークロードが使用するためにそのページを安全に占有できる。一実装において、ひとたび転送が完了すると、フィルタドライバは、転送と関連付けられたそれぞれのページの参照カウンタをデクリメントできる。
【０００４】
一実装において、ゲストＯＳを信用できず、ハイパーバイザからの要求の応答に失敗した結果、そのゲストＯＳを制限することになる場合がある。一実装において、ハイパーバイザは、フィルタドライバに、キャッシュのすべての参照カウンタをリセットすることを要求できる。ワークロードがハイパーバイザの要求にタイムリーな方法で応答するのに失敗した場合、ハイパーバイザは、そのワークロードを終了できる。
【図面の簡単な説明】
【０００５】
詳細な説明は、添付図面を参照して説明される。図面において、参照番号の最も左の桁は、参照番号が最初に出てくる図を示す。異なる図における同じ参照番号の使用は、同等または同一の項目を示す。
【図１】ゲストオペレーティングシステムのＩ／Ｏドライバスタックに挿入される具体的な仮想化を意識するフィルタドライバを示す図である。
【図２】アプリケーションからＤＭＡ転送要求を受信して、その要求を待機リスト上でキャッチする具体的な仮想化を意識するフィルタドライバを示す。
【図３】ワークロード間でシステムメモリを共有するための具体的なシステムを示す図である。
【図４】キャッシュのそれぞれの要素がメモリのページにマッピングされた具体的なキャッシュを示す図である。
【図５】ゲストオペレーティングシステムが複数のドライバスタックを備え、ドライバスタックのそれぞれが単一の同じキャッシュを使用することを示す図である。
【図６】ワークロードをマイグレートするための具体的な処理を示す図である。
【図７】仮想化を意識するソフトウェアを仮想化を意識しないオペレーティングシステムに挿入する結果、仮想化を意識しないオペレーティングシステムが仮想マシン上で実行される時物理マシン上で実行される時とは異なる動きを示すことを示す図である。
【図８】メモリアドレスの範囲を受信するための具体的な処理であり、その範囲によってポイントされたメモリが常駐しているかどうかを判定し、ゲスト物理メモリが常駐していない場合、メモリアドレスの範囲が送信される前にハイパーバイザにそのゲスト物理メモリを常駐させることを要求することを示す図である。
【図９】メモリアドレスの範囲を変換する要求を受信するための具体的な処理であり、要求されたメモリが常駐しているかどうかを判定し、要求されたメモリが常駐していない場合、要求をハードウェアアクセス層に送信される前に、ハイパーバイザに要求されたメモリを常駐させるように要求することを示す図である。
【図１０】仮想化を意識するフィルタドライバを生成する機能性の具体的な処理を示す図である。
【発明を実施するための形態】
【０００６】
以下の考察は、ゲストＯＳのメモリにオーバーコミットさせる間に、ゲストＯＳダイレクトアクセスを物理的ハードウェアデバイスに許可することによってハイパーバイザ上で実行するワークロードのランタイム性能を向上させる技術を狙いとしている。ホスト、親パーティション、特権パーティション、ルートパーティション、または仮想マシンマネージャとしても知られるハイパーバイザは、ゲストＯＳの範囲にない、信頼される管理上のコードの本体である。仮想化されたＯＳまたは特権がないＯＳとしても知られるゲストＯＳは、ハイパーバイザによって生成される仮想マシン上で実行する。ワークロードは、ゲストＯＳ上で実行されるアプリケーションを備えることができる。または代替的に、ワークロードは、ゲストＯＳ含む、仮想マシン上で実行するすべてのソフトウェアスタックを指すことができる。ハイパーバイザは、ハイパーバイザが実行する物理マシンの中に含まれる物理的なシステムメモリを制御できる。この現実の物理的なメモリを「システム物理メモリ」と定義できる。仮想マシン上で実行するゲストＯＳは、実際にはゲストＯＳは仮想マシンの仮想化されたメモリにアクセスしている場合でも、ゲストＯＳが現実の物理メモリにアクセスしていると信じることができる。この「仮想化された」メモリは、「ゲスト物理メモリ」と定義される。ハイパーバイザは、ゲスト物理メモリをシステム物理メモリにマッピングするインダイレクションのレベルを提供する。さらに、ゲストＯＳは、仮想アドレス空間を用いてゲストＯＳ上で実行するアプリケーションを提供するメモリ仮想化システムを含むことができる。この従来の仮想化を、ハイパーバイザによるシステム物理メモリからゲスト物理メモリへの仮想化とは別個にすることができる。
【０００７】
サーバ環境において、サーバ上で実行する典型的なワークロードは、ホストコンピュータリソースの１５−２０％を使用する。サーバコンピュータは、最小のまたはゼロのダウンタイムでサーバのワークロードにおいてスパイクを効率的に処理するために、この付加的な処理ヘッドルームが構成されている。また、ただ１つのサーバアプリケーションが単一のマシン上で実行することは一般的である。なぜならば、サーバアプリケーションはマシン上で使用できるリソースをすべて消費することが多いからである。そうでなければ、同じマシン上で他のサーバアプリケーションを用いて円滑に稼動しない。単一のサーバ上で複数のゲストＯＳを実行するある潜在的な効用は、複数のサーバアプリケーションを実行し、それぞれのサーバアプリケーションが、ワークロード間でシステムリソースを共有しながらそれ自体のゲストＯＳを有する能力である。
【０００８】
仮想化は、あるワークロードからのメモリページを別のワークロードが使用するために占有する等、仮想マシンシステムにおいてシステムリソースを共有させることができる。一実装において、ハイパーバイザは、あるゲストＯＳからのメモリページを占有してそのメモリページを別のゲストＯＳに与えると同時に、ＤＭＡ転送を用いてゲストＯＳがシステム物理メモリをターゲットするようにできる。ＤＭＡ転送を用いてゲストＯＳをシステム物理メモリにターゲットさせることによって、すべてのシステム性能を改善できる。メモリをあるゲストＯＳから別のゲストＯＳに移動させることは、あるゲストＯＳがメモリに窮乏している一方で別のゲストＯＳが余分なメモリを有している時に有益であり、それによってハイパーバイザがメモリをそれぞれのゲストＯＳに効率的に割り付けることができる。以前では、システム物理メモリへのゲストＯＳダイレクトアクセスをＤＭＡ転送に許可することは、ゲストＯＳの中でメモリを安全に共有するハイパーバイザの能力を不可能にしていた。なぜならば、ＤＭＡ転送によって後でアクセスされるゲストＯＳのもとからメモリを移動させることは壊滅的なシステムクラッシュを引き起こす場合があるからである。
【０００９】
一実装において、ゲストＯＳがＤＭＡ転送を用いてシステム物理メモリをターゲットしている間にハイパーバイザがゲストＯＳ間でメモリを共有できるようにすることによって、そのゲストＯＳがＤＭＡ転送を用いてシステム物理メモリをターゲットしている間の状態をカプセル化できる。ゲストＯＳの状態カプセル化は、ゲストＯＳが実行する物理ハードウェアの任意のパーマネント接続からゲストＯＳを隔離することを備える。従って、状態カプセル化は、仮想マシンをあるホストから別のホストに転送させることができる。なぜならば、ゲストＯＳは、ゲストＯＳが実行するハードウェアに必ずしも接続されるとは限らないからである。あるホストから別のホストへのこの転送は、マイグレーションとして知られる。マイグレーションは、仮想マシンが実行し続ける間に、データ損失がほとんど無いまたはゼロで、第１のマシン上で実行する第１のハイパーバイザが、すべての仮想マシンを第２のマシン上で実行する第２のハイパーバイザに転送するようにできる。一実装において、マイグレーションを使用できると同時に、ＤＭＡ転送の間にゲストＯＳがシステム物理メモリをターゲットするようにできる。さらに、状態カプセル化は、スナップショット（またはチェックポイント）の生成を可能にする。スナップショットが仮想マシンのすべての状態を保存することによって、ユーザがシームレスに、データを損失せずに以前の状態にリバートするようにできる。
【００１０】
従来、ハイパーバイザは、ほとんどの計算を仮想マシン上で実行する仮想マシンの中で行わせて、中断せずに進める。しかしながら、このような仮想マシン上で実行するゲストＯＳがコンピュータのＩ／Ｏシステム（ディスク、ネットワーク、ビデオ等）と相互作用しようとする時、これらのオペレーティングシステムが現実にはデバイスを所有しない理由から、従来のハイパーバイザは、このアクセスをインターセプトしなければならない。ゲストＯＳがデバイスをダイレクトに操作することを許可されたとしても、さまざまなゲストＯＳは、衝突するコマンドをデバイスに発行して、コンピュータにクラッシュを引き起こすであろう。
【００１１】
クラッシュを防ぐために、ゲストＯＳがＩ／Ｏサブシステムと相互作用しようとする度に、従来のハイパーバイザは、呼をインターセプトして、ゲストＯＳが遂行しようとした動作と同等のある動作を行うことができる。例えば、ゲストＯＳがディスクコントローラをプログラムしてディスクからデータのブロックを読み取ろうとした場合、従来のハイパーバイザは、ゲストＯＳを停止し、仮想ディスクの内容を含むファイルからデータのブロックを読み取り、ファイルからのデータをゲストＯＳによって占有されたメモリに格納し、ゲストＯＳを再開始できる。この処理は有効であるが、速度が遅い。
【００１２】
仮想化されたオペレーティングシステムまたは他のワークロードに、仮想マシンの中の特定のデバイスのすべてまたは一部をダイレクトに制御させる結果、そのようなデバイスへのアクセスを中断せずにハイパーバイザによって発生させることが可能になり、仮想化されたＯＳの性能がかなり向上することにつながることは有益であろう。理想的には、仮想化されたＯＳは、メモリをオーバーコミットする能力を犠牲にせずにハードウェアデバイスをダイレクトに制御することが可能である。ゲスト物理メモリがシステム物理メモリよりも多くワークロードに割り付けられた時、メモリは、１インスタンスにおいてオーバーコミットされる。
【００１３】
ハイパーバイザがゲストＯＳが実行するのための環境を生成する場合、ハイパーバイザは、あたかもワークロードが物理メモリの隣接領域を所有するワークロードのように見え、そのゲストＯＳが物理マシン上で実行したならば使用できたものに類似するメモリの表示を生成する。上述のように、これは、ゲスト物理メモリと呼ばれる。現実において、ゲストＯＳに割り当てられたメモリは、ほとんど隣接せず、ゲストＯＳがゲストＯＳのメモリのアドレスを指定するのに使用するアドレスは、ほとんどそのメモリの現実の物理アドレスではない。ハイパーバイザは、プロセッサまたはハイパーバイザがオンザフライ(on the fly)でこのようなアドレスを見つける(fix up)ことを可能にするインダイレクションテーブル（通常はページテーブルと呼ばれる）を生成して保持する。ゲストＯＳが所有しているとゲストＯＳが知覚する一部のメモリは存在せずまたは別のゲストＯＳに一時的に貸し出すことも可能である。これは、ゲストＯＳが現実の物理Ｉ／Ｏデバイスをダイレクトに制御する時に問題が生じる。ゲストＯＳは、そのデバイスに実際には存在しないメモリに対して読み取りまたは書き込みをするように指示することもある。また、現実のシステム物理アドレスよりもむしろメモリの仮想化されたアドレスを使用して、デバイスにメモリに対して読み取りまたは書き込みをするように指示することもある。Ｉ／Ｏデバイスによってメモリに対してダイレクトに読み取りまたは書き込みをするこの処理は、ダイレクトメモリアクセス(Direct Memory Access)またはＤＭＡと呼ばれる。
【００１４】
この問題に対する一つの提案された解決法は、しばしば「Ｉ／Ｏページフォルト(Page Faults)」と呼ばれ、ゲストＯＳにＤＭＡ転送を行うようにデバイスに指示させることに関与する。ひとたびデバイスがＤＭＡ転送を開始すると、コンピュータのメモリコントローラは、その処理をインターセプトして、ハイパーバイザにハイパーバイザのリソースを再割り付けするように指示する結果、システム物理メモリが、デバイスがアクセスしようとするアドレスにおいて使用可能になる。次に、メモリが使用可能である時、および正しい内容がメモリにロードされた時、転送を進めることを許可される。この解決法は、ゲストＯＳの中のソフトウェアを変更することに関与することができない。しかしながら、この解決法は、デバイスがトランザクションを開始する時からそのトランザクションを進めることを許可される時までのほとんど無制限の時間をデバイスが耐えることを要求する。  この遅延は、無制限である。なぜならば、ハイパーバイザは、転送がすでに開始された後にその転送を認識するので、実際の物理メモリがスワップファイルからの読み取りを含む転送に使用できることを確認する任意の処理は、ハードウェアデバイスがデータを受信または送信し続ける間に発生するからである。この時間の間、ターゲットハードウェアデバイスは、送信されたすべてのデータをターゲットハードウェアデバイスの内蔵バッファに格納しなければならない。この待ち時間を、大容量のバッファをデバイスに組み込むことによって対処することができるが、それによってデバイスのコストがかなり高くなる。
【００１５】
代替的に、ハードウェアデバイスが、転送が開始される前にハイパーバイザの中で稼動しているデバイスドライバを中断する場合、この待ち時間を減らすことができる。ひとたび中断されると、ハイパーバイザの中のデバイスドライバは、ターゲットメモリがコミットされることを確認する。しかしながら、ハイパーバイザを呼び出すことは費用のかかる動作である理由から、この中断自体は性能にとって問題である。
【００１６】
一実装において、ソフトウェアコンポーネントをゲストＯＳに挿入して、Ｉ／Ｏトランザクションが開始される前にソフトウェア層においてＩ／Ｏトランザクションをサスペンドし、Ｉ／Ｏトランザクションによってターゲットされたゲスト物理メモリが実際の物理メモリによって戻されたことを確認する。ターゲットゲスト物理メモリがコミットされるのを確認するためにトランザクションをサスペンドすることは、Ｉ／Ｏページフォルトモードによって引き起こされる任意の待ち時間を排除し、中断せずにトランザクションが行えるようにできる。トランザクションが開始される前にソフトウェア層においてトランザクションをサスペンドすることは、教示されたゲストＯＳが、ターゲットゲスト物理メモリがハイパーバイザとの通信を行わずに戻されることを確認できるようにし得る。しかしながら、一実装において、ゲストＯＳは、ハイパーバイザとの通信を行って、ターゲットゲスト物理メモリページが今からＤＭＡ転送に使用されることをハイパーバイザに知らせることができる。この通信は、ゲストＯＳ参照カウントテーブル、またはゲストＯＳとのより明示的な通信を使用することができる。
【００１７】
図１は、コンピュータ上で実行できる具体的な仮想マシン環境１００を示す。環境１００は、コンピュータ上でダイレクトに実行するハイパーバイザ１０２を含む。一実装におけるコンピュータを、複数のワークロードを稼動するのに必要なリソースを有するサーバコンピュータとすることができ、それぞれのワークロードはそれ自体のゲストＯＳインスタンス上で実行する。別の環境において、コンピュータは、デスクトップまたはラップトップコンピュータ等のパーソナルコンピュータとすることができ、ユーザが複数のオペレーティングシステムを同時に稼動するようにできる。一実装において、ハイパーバイザは、ハイパーバイザＩ／Ｏサブシステム１０４を含む。ハイパーバイザＩ／Ｏサブシステム１０４は、コンピュータ上のすべてのハードウェアリソースを制御して、複数のゲストオペレーティングシステムが衝突するコマンドを実際のハードウェアデバイスに発行しないことを確認できる。ハイパーバイザＩ／Ｏサブシステム１０４は、仮想マシンに割り付けられた仮想リソースを割り付けて制御するためのゲストＯＳメモリマネージメントコンポーネント１０６を含むことができる。
【００１８】
ハイパーバイザ１０２、ハイパーバイザＩ／Ｏサブシステム１０４、およびゲストＯＳメモリマネージメントコンポーネント１０６は、ゲストオペレーティングシステム１０８またはゲストＯＳ１０８が実行する仮想マシンを協調して生成できる。一実装において、ゲストＯＳが仮想マシン上または物理マシン上のどちらで稼動しているかをゲストＯＳが意識しているという意味で、ゲストＯＳ１０８を教示できる。教示されたゲストＯＳは、仮想化されたリソースおよび物理リソースについて行われた異なる仮定に基づいて、仮想マシン上で実行する時に、物理マシン上とは異なったリソースを利用できる。さらに、教示されたゲストＯＳは、ハイパーバイザ１０２と相互作用してリソースを共有できる。一実装において、教示されたゲストＯＳは、別のゲストＯＳが使用するために、協調してハイパーバイザ１０２からゲスト物理メモリを要求するまたはハイパーバイザ１０２に対してゲスト物理メモリを放棄することができる。
【００１９】
別の実装において、ゲストＯＳ１０８は、ゲストＯＳ１０８が仮想マシン上で実行していることを意識してない。仮想化を意識しないまたは協調しないゲストＯＳ１０８としても知られるこの「教示されていない(un-enlightened)」ゲストＯＳ１０８は、教示されたゲストＯＳよりも劣る性能を仮想マシン上で示すこともあるが、それ以外は同一のゲストＯＳである。教示されていないゲストＯＳ１０８は、教示されていないゲストＯＳ１０８が物理マシン上で動作するのとまったく同じ動作を仮想マシン上で行うことができる。
【００２０】
多くのオペレーティングシステムは、デバイスドライバが典型的に使用するソフトウェア抽象化をダイレクトメモリアクセスに提供する。この抽象化は、デバイスドライバに物理アドレスのリストを、典型的にはメモリディスクリプタリストまたはＭＤＬの形式で提供させるいくつかのプログラミングインタフェースおよびオブジェクトに関与し、代わりにデバイス論理アドレスのリストを、典型的にはスキャター／ギャザーリストの形式で受信する。
【００２１】
物理アドレスは、ハイパーバイザによって使用される、現実の物理メモリを読み取るまたは書き込むためのシステム物理アドレスとすることができる。代替的に、物理アドレスは、ゲストＯＳ１０８にとって現実の物理アドレスのように見えることもあるが、実際は、ゲスト物理アドレスとして知られる仮想化されたアドレスである。一方、デバイス論理アドレスは、ハードウェアデバイスによって使用される、物理メモリを読み取るまたは書き込むためのアドレスである。ひとたびデバイス論理アドレスのスキャター／ギャザーリストがインタフェースから戻ると、デバイスドライバは、デバイスドライバのハードウェアをプログラムして、関連付けられた読み取りまたは書き込みを実際に実行することができる。
【００２２】
このＤＭＡ抽象化を通じて、多くのオペレーティングシステムは、アドインコンポーネントがＤＭＡ機能性を拡張できるようにする。一実装において、ＤＭＡフィルタ１１４は、ＤＭＡフィルタが物理アドレスをデバイス論理アドレスに変換する必要がある時にＤＭＡフィルタが呼び出す機能のポインタを、デバイスドライバ１１２が読み出すことによってＤＭＡフィルタ自体をその処理に挿入できる。別の環境において、仮想化を意識するハードウェア抽象化層（ＨＡＬ）１２０を、仮想化を意識しないゲストＯＳ１０８に挿入できることによって、仮想化を意識しないゲストＯＳ１０８に教示された動きを示すようにさせる。追加的または代替的に、仮想化を意識するモジュールを仮想化を意識しないゲストＯＳの実行に挿入するまたは仮想化を意識しないゲストＯＳの任意のコンポーネントと置き換えることができる。このような手段を通して、仮想化を意識するコンポーネントを仮想化を意識しないゲストＯＳ１０８に挿入できることによって、仮想化を意識しないゲストＯＳ１０８に教示されたまたは準仮想化された(paravirtualized)ゲストＯＳと同じ動きを示すようにさせる。
【００２３】
一実装において、デバイスドライバ１１２は、ＤＭＡ転送を開始してハードウェアデバイスへデータを書き込むまたはハードウェアデバイスからデータを読み取ることができる。デバイスドライバ１１２は、要求１２２をプラグアンドプレイマネージャ１１８に送信することができ、要求１２２は、ゲストＯＳのゲスト物理アドレスで定義されたメモリの範囲を含む。一実装において、プラグアンドプレイマネージャ１１８は、メモリの範囲をゲスト物理アドレスからバスに関連したアドレスに変換するのに使用される機能のポインタに対する要求１２４をハードウェアアクセス層１２０に送信できる。ひとたび要求１２４を受信すると、仮想化を意識するハードウェアアクセス層１２０は、ハイパーバイザ１０２との通信を行うことができ、ＤＭＡ転送が開始される前に、ＤＭＡ転送と関連付けられたメモリがコミットされることを確認する。
【００２４】
別の実装において、ＤＭＡフィルタ１１４がＩ／Ｏドライバスタック１１０に挿入される。一実装において、ＤＭＡフィルタ１１４は、Ｉ／Ｏドライバスタック１１０の中で通信を行うのに使用されるプラグアンドプレイマネージャ１１８からＩ／Ｏ要求パケット（ＩＲＰ）を受信できる。ＩＲＰの１つを、デバイスドライバ１１２からの、ゲスト物理メモリアドレスの範囲をバスに関連したアドレスの範囲に変換するのに使用される機能のポインタに対する要求１２６とすることができる。一実装において、Ｉ／Ｏ要求パケットが送信されて、Ｉ／Ｏドライバスタック１１０において最良のコンポーネントを見つけて、ＤＭＡサービスに使用されるインタフェースを提供する。Ｉ／Ｏドライバスタック１１０においてドライバがまったく応答しない場合、ＨＡＬ１２０は、要求されたインタフェースを提供できる。ひとたび要求１２６を受信すると仮想化を意識するＤＭＡフィルタ１１４は、ハイパーバイザ１０２との通信を行うことができ、ＤＭＡ転送が開始される前に、ＤＭＡ転送と関連付けられたメモリがコミットされることを確認する。メッセージ１２８がプラグアンドプレイマネージャ１１８に戻り、転送が開始される。
【００２５】
図２は、コンピュータ上で実行される具体的な仮想マシン環境２００を示す。一実装において、ＤＭＡフィルタ１１４は、トランザクションに必要なメモリがコミットされることを確認するために、要求されたＤＭＡ転送をサスペンドする。要求されたＤＭＡ転送は、メモリアドレスの範囲を備える。ゲストＯＳ１０８にとってこのようなメモリアドレスは、物理メモリアドレスのように見えるので、すぐにＤＭＡ転送に使用できるが、このようなアドレスは、実際には、実際の物理メモリアドレスにマッピングしない仮想メモリアドレスの形式の、ゲスト物理メモリアドレスとすることができる。さらに、このようなゲスト物理メモリアドレスの一部を、現在、現実の物理メモリアドレスにマッピングできない。なぜならば、ハイパーバイザ１０２が、別のゲストＯＳが使用するためにメモリの実際の物理ページの一部を占有しているからである。ＤＭＡトランザクションを、ハイパーバイザ１０２が介入しなくてもゲストＯＳ１０８において安全に行うことができる前に、トランザクションによって参照されたメモリをトランザクションの継続時間(lifetime)にコミットしなければならないし、トランザクションによって参照されたメモリアドレスを、ゲスト物理アドレス空間とシステム物理アドレス空間との間で有効に変換しなければならない。一実装において、ＤＭＡフィルタ１１４は、ゲストＯＳメモリマネージメントコンポーネント１０６との通信を行って、トランザクションによって参照されたメモリページのすべてがコミットされることを確認できる。一実装において、ＤＭＡフィルタ１１４は、ゲストＯＳメモリマネージメントコンポーネント１０６との通信を行って、ゲストＯＳメモリマネージメントコンポーネント１０６がトランザクションによって参照されたコミットされていないすべてのメモリページをコミットすることを要求できる。
【００２６】
一実装において、トランザクションは、アプリケーション２０２において開始され(例えば、ディスクの読み取り)、そのトランザクションを処理するハードウェアデバイスのデバイスドライバ１１２に渡される。次にデバイスドライバ１１２は、デバイスドライバのＤＭＡインタフェースを使用して、トランザクションによって参照された宛先メモリのデバイス論理アドレスを要求する。ＤＭＡフィルタ１１４は、このデバイス論理アドレスの要求をインターセプトして、参照されたメモリがコミットされて有効な変換が存在するまでトランザクションを待機リスト２０４に置くことができる。次にＤＭＡフィルタ１１４は、デバイスドライバ１１２に戻った論理アドレスの得られたセットとともにトランザクションを提供することができ、次にハードウェアをプログラムしてＤＭＡを通じてデータの転送を行うことができる。
【００２７】
図３は、コンピュータ上で実行される具体的なゲスト物理メモリの共有環境３００を示す。一実装において、ワークロード３０２、ワークロード３０４、およびワークロード３０６のすべてはハイパーバイザ上で実行して、それぞれのワークロードをシステム物理メモリ３０８部分に割り付けることができる。ワークロード３０２−３０６は、他のサーバタスクの中でもとりわけ、データベース、電子メールサーバ、ウェブサーバ、またはＯＬＡＰサーバを実行できる。ワークロード３０２は、システム物理メモリ３０８にマッピングできるゲスト物理メモリ３１０を使用できる。ワークロード３０４および３０６も同様に、ゲスト物理メモリ３１２および３１４を使用でき、それぞれがシステム物理メモリ３０８にマッピングされる。ワークロード３０２のゲスト物理メモリ３１０のそれぞれのページを、システム物理メモリ３０８におけるメモリのページにマッピングできる。しかしながら、ハイパーバイザがワークロード３０２とは別にゲスト物理メモリのページをスチール(steal)し、そのページをワークロード３０４のページとして提供する可能性がある。それによって、オーバーラップ３１６が示すように、２つのワークロードがシステム物理メモリの同じ部分を示す、または１つのワークロードが、別のワークロードが使用するために実際に占有されているシステム物理メモリページを１つのワークロードが所有しているかのように実行する可能性がある。この場合、ワークロード３０２および３０４が実行しているゲストオペレーティングシステムは、オーバーコミットされる。なぜならば、ハイパーバイザのゲストＯＳメモリマネージメントコンポーネントが、システム物理メモリ３０８において実際に使用できるよりも多くゲスト物理メモリをワークロードに割り付けているからである。ワークロード３０２がオーバーラップ３１６に含まれるゲスト物理メモリにアクセスしようとする場合、ハイパーバイザが介入してワークロード３０２をシステム物理メモリの新しいページに提供する場合があり、任意には、スワップファイルからの値をメモリの新しいページにコピーする。
【００２８】
図４は、具体的なドライバスタック４００を示す。一実装において、メモリのターゲットページがコミットされることを確認する処理は、メッセージをゲストＯＳメモリマネージャ１０６に送信して応答メッセージを受信することに関与する。別の実装において、ＤＭＡフィルタ１１４がハイパーバイザ１０２との通信を行わなければならい回数を減らすまたは排除するためにメモリ状態キャッシュ４０２を導入することによって、応答性を向上させることができる。メモリ状態キャッシュ４０２は、システム物理メモリ３０８のどのメモリページがコミットされたかを示す配列を格納できる。メモリ状態キャッシュ４０２をＤＭＡフィルタ１１４に格納できる結果、ＤＭＡフィルタは、ハイパーバイザ１０２を呼び出さずに完全なゲストＯＳ１０８の文脈においてアクセスできるようになる。メモリ状態キャッシュ４０２は、メモリの１ページに対し４ビットを備えることができる。他のビット数も同様に考慮される。一実施形態において、１ビットを使用してページがコミットされたかどうかを示すことができ、残りの３ビットは、そのメモリページと関連付けられたアクティブなＤＭＡ転送の数をカウントできる。代替的にまたは追加として、メモリ状態キャッシュ４０２は、カウントがメモリ状態キャッシュのカウント容量をオーバーフローした時に、メモリページと関連付けられたアクティブなＤＭＡ転送の数を格納するページのハッシュテーブルを備えることができる。このシステムは、メモリ状態キャッシュ４０２がＤＭＡトランザクションを同時に７つまでトラッキングできるようにする。例えば、メモリ状態キャッシュエントリ４０４は、関連付けられたメモリのページが７つのＤＭＡトランザクションに関与していて、そのページが現在常駐していることを示す。メモリ状態キャッシュエントリ４０６は、関連付けられたメモリのページがどのＤＭＡトランザクションにも関与していなくて、現在、現実のメモリの物理ページにコミットされていないことを示す。コミットされないことによって、状態キャッシュエントリ４０６と関連付けられたメモリページに書き込むまたはそのメモリページから読み取ろうとする任意のＤＭＡトランザクションは、別のワークロードに割り当てられたメモリまたはまったく存在しないメモリに値が書き込まれる場合があるので、データの破損またはクラッシュが生じるであろう。
【００２９】
メモリのページと関連付けられたＤＭＡ転送の数をトラッキングする目的の１つは、ハイパーバイザ１０２が、現在ＤＭＡトランザクションが使用中であるゲストＯＳ１０８からページをスチールしないことを確認することである。従って、現在ＤＭＡトランザクションが使用中であるメモリの範囲に含まれるメモリのすべてのページは、少なくとも関連付けられたすべてのＤＭＡトランザクションが完了するまでコミットされたままである。従って、メモリ状態キャッシュエントリ４０８は、エラー、つまり３つのＤＭＡトランザクションが関連付けられたページ上で動作しているが、そのページは現在コミットされていないことを示す。それによって、ハイパーバイザ１０２があるワークロードからメモリページをスチールしてそのメモリページを別のワークロードに与える前に、ハイパーバイザは、ゲストＯＳ１０８に組み込まれた仮想化を意識するコンポーネントが、そのメモリページが現在使用中であることを知っているかどうかを最初に判定する。
【００３０】
ＤＭＡトランザクションが開始され、そのトランザクションと関連付けられたメモリページのすべてがコミットされた場合、ＤＭＡフィルタ１１４は、ＤＭＡトランザクションと関連付けられたメモリページと関連付けられたメモリ状態キャッシュエントリの参照カウントまたはピンカウントを増加できる。次にＤＭＡフィルタ１１４は、すぐにそのトランザクションを開始させることができる。
【００３１】
メモリ状態キャッシュエントリ４１０は、関連付けられたメモリページを使用したアクティブなＤＭＡ転送はないが、そのページは現在コミットされていることを示す。ＤＭＡ転送が、メモリ状態キャッシュエントリ４１０と関連付けられたページと同じページを使用するように要求された場合、ＤＭＡ転送は、内在する(underlying)ハードウェアにダイレクトにアクセスしてすぐに継続可能になるであろう。
【００３２】
一実装において、ハイパーバイザは、ＤＭＡフィルタ１１４がメモリ状態キャッシュ４０２のすべての参照カウンタをリセットすることを要求できる。追加的にまたは代替的に、ワークロードがハイパーバイザの要求をタイムリーに応答できなかった場合、ハイパーバイザは、そのワークロードを制限することができる。一実装において、制限によってワークロードを終了することができる。追加的または代替的に、制限は、ワークロードからハードウェアデバイスの制御をはずすこともある。
【００３３】
一実装において、メモリ状態キャッシュ４０２は存在しない。この場合、デバイスドライバを停止しなければならず、ハイパーバイザがページをデコミットする前にすべてのトランザクションを後退(retire)させなければならない。このストラテジーは、キャッシュを実装するように要求されたメモリを大幅に減らすので、ある環境において好ましい。
【００３４】
ほとんどまたはすべてのゲストメモリがコミットされたままであり、ほとんどのＤＭＡトランザクションがゲストＯＳメモリマネージャとの通信を必要とせずに開始される時、最適性能になる。
【００３５】
図５は、具体的な複数のドライバスタック５００を示す。一実装において、第１のドライバスタック１１０、第２のドライバスタック５０４、および第３のドライバスタック５０６はすべて同じメモリ状態キャッシュ５０２を共有する。複数のドライバスタックは、ＤＭＡフィルタ１１４のインスタンスとは異なるインスタンスを生成できる。しかしながら、すべての仮想化を意識するＤＭＡフィルタは、同じゲスト物理メモリを管理している。その結果、すべてのＤＭＡフィルタは、キャッシュを保持するのに必要なオーバーヘッドを減らし、ＤＭＡフィルタ１１４とハイパーバイザ間の通信を最小限にするために同じメモリ状態キャッシュ上で動作する。例えば、ドライバスタック５０６が、ゲスト物理アドレス０ｘ００１２３８４Ｃに関与するＤＭＡ転送を開始したが、メモリ状態キャッシュ５０２をＤＭＡフィルタの他のインスタンスと共有しなかった場合、ハイパーバイザがゲストＯＳからのゲスト物理メモリページの占有を望む度に、ドライバスタックは、すべてのメモリ状態キャッシュを検査して、ＤＭＡ転送に関与して占有されなかったメモリページをアクティブにすることを確認しなければならないであろう。
【００３６】
図６は、具体的なマイグレーション環境６００を示す。この実装に従って、状態カプセル化は、コンピュータ６０２上で稼動するハイパーバイザ６０４がコンピュータ６０６上で稼動するハイパーバイザ６０８にマイグレートできるようにし得る。一実施形態において、状態カプセル化は、ハイパーバイザ６０８およびゲストＯＳメモリマネージメントコンポーネント１０６によって使用でき得ると同時にＤＭＡ転送の間にハードウェアデバイスダイレクトメモリアクセスが可能になる。ある環境において、ワークロード６１０から６１６は、ハイパーバイザ６０４上で実行する。ワークロード６１２は、ネットワーク６２２経由でハイパーバイザ６０８にマイグレートされる必要がある場合がある。マイグレーションは、マイグレーションワークロード６１２が機能し続ける間に、ハイパーバイザ６０４からハイパーバイザ６０８にメモリページをコピーすることによって行われる。マイグレーションは、ワークロード６１２におけるすべてのページを無効にすることによって開始される結果、ワークロード６１２によって行われる後続のどのメモリアクセスも、ハイパーバイザ６０４にトラップされる。次にハイパーバイザ６０４は、メモリのすべての有効なページをハイパーバイザ６０８に転送し始める。この転送の間、ワークロード６１２は、ハイパーバイザ６０４上で実行し続ける。その転送の間にアクセスされるメモリページは、ダーティー(dirt)として登録されてハイパーバイザ６０４上に残されるが、ダーティとして登録されていないメモリページは、そのページが扱われていないことを示し、ハイパーバイザ６０８に転送され続ける。最終的に、すべてのクリーン(clean)ページが転送されて、ワークロード６１２によって扱われたダーティページのみが残る。この時点で、ワークロード６１２を停止して、残ったダーティページをハイパーバイザ６０８に転送させることが可能である。ひとたびすべてのページがハイパーバイザ６０８に転送されると、ワークロード６１２がハイパーバイザ６０８上で開始され、ワークロード６１２がハイパーバイザ６０４によって停止された後、通常３００ミリ秒以下で開始される。典型的には、マイグレーションは、接続を断つことなく発生する。
【００３７】
図７は、仮想化を意識するソフトウェアコンポーネントを用いて仮想化を意識しないオペレーティングシステムを拡張するための具体的な処理を示す。動作０２は、Ｉ／Ｏドライバスタック１１０にインストールされた仮想意識ソフトウェアコンポーネントを用いて、システムが仮想マシン上で実行しているかどうかを判定することを表す。一実装において、仮想化を意識するソフトウェアコンポーネントは、ＤＭＡフィルタ１１４を備える。追加的または代替的に、仮想化を意識するソフトウェアコンポーネントは、ＨＡＬ１２０を備えることができる。一方、動作７０４は、仮想マシン上で実行する時にハイパーバイザ１０２との通信を行う仮想化を意識するソフトウェアコンポーネントを表す。
【００３８】
図８は、ソフトウェアにおいて、転送と関連付けられたゲスト物理メモリがシステム物理メモリによって戻されたと知らされるまでＤＭＡ転送の開始を遅らせるための具体的な処理を示す。動作８０２は、ゲスト物理メモリアドレスの範囲の受信を表す。一実装において、ゲスト物理メモリアドレスの範囲は、ＤＭＡ転送のソースまたは宛先を備える。受信されたゲスト物理メモリアドレスは、その後デバイス論理アドレスまたはシステム物理アドレスに変換でき、転送に使用されるハードウェアデバイスがネイティブに物理メモリのアドレスを指定できるようにする。一方、動作８０４は、受信されたゲスト物理メモリアドレスによって示されたシステム物理メモリが戻っていない、すなわち常駐していないかどうかを判定することを表す。すべての要求アドレスが常駐しているという意味で、どのアドレスも非常駐アドレスではない場合、ゲスト物理メモリアドレスの受信された範囲が送信される。一実施形態において、ゲスト物理アドレスの範囲が、ゲスト物理メモリアドレスをデバイス論理アドレスまたはシステム物理アドレスに変換するコンポーネントに送信される。一方、動作８０６は、ゲスト物理メモリアドレスの受信された範囲において参照されたメモリの少なくとも１つの戻っていないまたは非常駐部分があると最終的に判定していることを表す。一方、動作８０８は、ハイパーバイザ１０２に、受信されたゲスト物理メモリアドレスの非常駐部分を戻すまたは常駐させることを要求していることを表す。一方、動作８１０は、受信されたゲスト物理メモリアドレスによって示されたすべての非常駐部分が戻ったという表示をハイパーバイザ１０２から受信することを表す。一方、動作８１２は、ゲスト物理メモリアドレスの範囲を送信することを表す。
【００３９】
図９は、ソフトウェアにおいて、転送と関連付けられたゲスト物理メモリが、現実のシステム物理メモリによって戻されたと知らされるまでＤＭＡ転送の開始を遅らせるための具体的な処理を示す。動作９０２は、ゲスト物理メモリアドレスをバスに関連したメモリアドレスに変換する要求を受信することを表す。一方、動作９０４は、受信されたどのゲスト物理メモリアドレスも現実の物理メモリによって戻されていないかどうかを判定することを表す。すべてのゲスト物理メモリアドレスが戻った場合、受信された要求は、ＨＡＬ１２０に送信される。一方、動作９０６は、受信された要求において参照されたゲスト物理メモリの少なくとも１つの戻っていないまたは非常駐部分があると最終的に判定する時を表す。一方、動作９０８は、転送が同期して発生できないことを示すメッセージをデバイスドライバ１１２に送信することを表す。一実装において、受信された要求は、待機リスト２０４に格納される。一方、動作９１０は、ハイパーバイザ１０２が受信された要求に含まれるゲスト物理メモリの非常駐部分を戻すまたは常駐させることを要求するメッセージをハイパーバイザ１０２に送信することを表す。一方、動作９１２は、受信された要求に含まれるゲスト物理アドレスによって示されるすべての非常駐部分が現実の物理メモリによって戻されたというメッセージをハイパーバイザ１０２から受信することを表す。一方、動作０１４は、要求をデバイスドライバへ送信することを表す。
【００４０】
図１０は、仮想化を意識するＤＭＡフィルタドライバまたはＤＭＡフィルタ１１４を生成する例示的な処理機能性１０００を示す。１インスタンスにおけるフィルタドライバは、従来のドライバスタックの通常の作業に影響を与えずに、ある特定の機能を行う従来のドライバスタックに挿入されるドライバを備える。処理機能性１０００を、ソフトハング分析および検出システムを実装することができる任意の適したコンピューティングデバイスまたはサーバとして構成できる。一例示的な構成において、処理機能性１０００は、少なくとも１つの処理ユニット１００２およびメモリ１００４を備える。処理ユニット１００２を、ハードウェア、ソフトウェア、ファームウェアまたはそれらの組み合わせにおいて適切に実装できる。処理ユニット１００２のソフトウェアまたはファームウェアの実装は、説明したさまざまな機能を行うために、任意の適したプログラミング言語で書き込まれたコンピュータまたはマシン実行可能命令を含むことができる。
【００４１】
メモリ１００４は、プロセッサ上でロード可能で実行可能な命令のプログラムを格納でき、これらのプログラムの実行の間に作成されたデータも格納できる。コンピューティングデバイスの構成および種類に応じて、メモリ１００４は、揮発性（ＲＡＭなど）および／または不揮発性（ＲＯＭ、フラッシュメモリなど）とすることができる。コンピューティングデバイスまたはサーバは、磁気ストレージ、光ディスク、および／またはテープストレージを含む付加的なリムーバブルストレージ１００６および／またはノンリムーバブルストレージ１００８を含むことができるが、これらに限らない。ディスクドライブおよびそれらに関連するコンピュータ読み取り媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、およびコンピューティングデバイス他のデータの不揮発性ストレージを提供できる。
【００４２】
メモリ１００４、リムーバブルストレージ１００６、およびノンリムーバブルストレージ１００８はすべて、コンピュータストレージ媒体の例である。コンピュータストレージ媒体は、コンピュータ可読命令、データ構造、プログラムモジュールまたは他のデータ等の情報を格納するための任意の方法または技術に実装される揮発性および不揮発性、リムーバブルおよびノンリムーバブル媒体を含む。メモリ１００４、リムーバブルストレージ１００６、およびノンリムーバブルストレージ１００８はすべて、コンピュータストレージ媒体の例である。提供できるコンピュータストレージ媒体の付加的な種類は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）または他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気ストレージデバイス、または所望の情報を格納するのに使用することができ、サーバまたは他のコンピューティングデバイスによってアクセスすることができるその他の媒体と含むが、これらに限らない。
【００４３】
メモリ１００４の内容をより詳細に見ると、メモリ１００４は、オペレーティングシステム１０１０およびソフトハング分析および検出プログラム１００を実装するための１または複数のアプリケーションプログラムまたはサーバを含むことができる。一実装において、メモリ１００４は、データマネージメントモジュール１０１２および自動化モジュール１０１４を含む。データマネージメントモジュール１０１２は、セッションを識別してラッキングすることを含むが、これらに限らない。自動化モジュール１０１４は、セッション識別子、セッション状態、ユーザのコンピューティングデバイス等の情報を格納して管理して、１または複数のローカルおよび／またはリモートデータベースまたはサービスとの通信を行うことができる。
【００４４】
メモリ１００４は、ユーザインタフェースモジュール１０１６およびセッションモジュール１０１８をさらに含む。ユーザインタフェースモジュール１０１６は、ユーザにセッションをログインまたはログオフ、入出力を行う等のユーザインタフェースを提供する。セッションモジュール１０１８は、コンピューティングデバイスのログインまたはログオフ、接続または切断等の状態をトラッキングすることを含むが、これらに限らない。セッションモジュール１０１８は、接続と、切断と、ログオンされているクライアントデバイス、ログオフされているクライアントデバイス、クライアントデバイスの状態、ユーザの状態等を識別するための探索を行う等の探索機能とを行う。
【００４５】
処理機能性１０００は、処理機能性１０００が格納されたデータベース、別のコンピューティングデバイスまたはサーバ、ユーザ端末、および／またはネットワーク上の他のデバイスとの通信を行わせることができる１または複数の通信接続１０１６も含むことができる。１または複数の通信接続１０１６は、通信媒体の一例である。通信媒体は、典型的には、コンピュータ可読命令、データ構造、およびプログラムモジュールを実装する。例を挙げると、通信媒体は、有線ネットワークまたは直接有線接続等の有線媒体と、音響、ＲＦ、赤外線および他の無線媒体等の無線媒体とを含むが、これらに限らない。本明細書で使用される用語コンピュータ可読媒体は、ストレージ媒体と通信媒体の両方を含む。
【００４６】
処理機能性１０００は、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイス等の１または複数の入力デバイス１０１８と、ディスプレイ、スピーカ、プリンタ等の１または複数の出力デバイス１０２０も含むことができる。処理機能性１０００は、セッションデータ、ネットワークアドレス、コンピューティングデバイスのリスト等を含む処理機能性１０００上でホストされたデータベースを含むことができるが、これらに限らない。これらのすべてのデバイスは、当業者には周知であり、ここで詳細に論じる必要はない。
【００４７】
上述した発明の内容を、ハードウェア、またはソフトウェア、ハードウェアとソフトウェアの両方に実装することができる。構造的特徴および／または方法論的動作に特有の言語で発明の対象を説明したが、添付の請求において定義された発明の対象は、上述した特定の特徴または動作に必ずしも限定されるものではないことを理解されたい。むしろ、特定の特徴および動作は、発明の対象を実装する例示的な形式として開示される。例えば、方法論的動作は、本明細書で説明された順序または組み合わせにおいて行われる必要はなく、１または複数の任意の動作において行うことができる。
【００４８】
結論
例示的なシステムおよび方法を、構造的特徴および／または方法論的動作に特有の言語で説明したが、添付の請求において定義された発明の対象は、説明された特定の特徴または動作に必ずしも限定されるものではないことを理解されたい。むしろ、特定の特徴および動作は、特許請求の範囲を実装する例示的な形式として開示される。
【図１】
0005452660.tif 000002
【図２】
0005452660.tif 000003
【図３】
0005452660.tif 000004
【図４】
0005452660.tif 000005
【図５】
0005452660.tif 000006
【図６】
0005452660.tif 000007
【図７】
0005452660.tif 000008
【図８】
0005452660.tif 000009
【図９】
0005452660.tif 000010
【図１０】
0005452660.tif 000011