(57)【特許請求の範囲】
【請求項１】
計算のための装置であって、
１つ又は複数の汎用プロセッサと、
グラフィックス処理ユニットと、
前記１つ又は複数の汎用プロセッサ及び前記グラフィックス処理ユニットに結合されたシステムメモリと、
前記１つ又は複数の汎用プロセッサによりホストされる仮想マシンを管理する仮想マシンモニタとを備え、前記仮想マシンモニタが、
前記１つ又は複数の汎用プロセッサにより実行されるべき前記仮想マシンのアプリケーションの命令により前記システムメモリのアクセスを管理するメモリマネージャであって、アクセスの管理が前記システムメモリの変更されたメモリページのトラッキングを含む、メモリマネージャと、
前記アプリケーションにより前記グラフィックス処理ユニットに対して発行されたグラフィックス命令を分析して、前記グラフィックス命令により引き起こされた前記システムメモリに対する書き込みを検出し、前記メモリマネージャによる変更されたメモリページの前記トラッキングを増やす、グラフィックス命令パーサとを含む、装置。
【請求項２】
前記仮想マシンモニタが、前記仮想マシンのうちの１つ又は複数を計算のための他の装置に選択的にライブマイグレートするライブマイグレーション機能であって、ライブマイグレートされている仮想マシンの現在のメモリ内容の前記他の装置に対する供給を含み、前記グラフィックス命令パーサにより増やされた、前記メモリマネージャによりトラッキングされる変更されたメモリページを利用する、ライブマイグレーション機能を更に含む、請求項１に記載の装置。
【請求項３】
前記グラフィックス命令パーサが、システムメモリに対する書き込みを検出すると、システムメモリに対する前記書き込みのゲストグラフィックスメモリアドレスを取得することができる、請求項１に記載の装置。
【請求項４】
前記グラフィックス命令パーサが、システムメモリに対する前記書き込みに関して取得された前記ゲストグラフィックスメモリアドレスに少なくとも部分的に基づいて、システムメモリに対する前記書き込みのホストグラフィックスメモリアドレスを更に計算することができる、請求項３に記載の装置。
【請求項５】
前記グラフィックス命令パーサが、システムメモリに対する前記書き込みに関して計算された前記ホストグラフィックスメモリアドレスに少なくとも部分的に基づいて、システムメモリに対する前記書き込みのシステムメモリアドレスを更に取得することができる、請求項４に記載の装置。
【請求項６】
前記グラフィックス命令パーサが、前記システムメモリアドレスを含む前記メモリページのうちの１つをダーティとして更にマークすることができる、請求項５に記載の装置。
【請求項７】
前記グラフィックス命令パーサが、前記グラフィックス命令のうちの第１のグラフィックス命令が前記グラフィックス処理ユニットによりサポートされていないと判定すると、前記第１のグラフィックス命令が、前記グラフィックス処理ユニットによりサポートされる形式に変更されることができるか、又は前記グラフィックス処理ユニットによりサポートされる機能的に等価なグラフィックス命令によって置き換えられることができるかどうかを更に判定することができる、請求項１から請求項６のいずれか一項に記載の装置。
【請求項８】
前記グラフィックス命令パーサが、前記第１のグラフィックス命令が前記グラフィックス処理ユニットによりサポートされる形式に変更されることができると判定すると、前記第１のグラフィックス命令を前記グラフィックス処理ユニットによりサポートされる形式に更に変更することができるか、又は前記グラフィックス処理ユニットによりサポートされる他の機能的に等価なグラフィックス命令の存在を判定すると、前記第１のグラフィックス命令を前記他の機能的に等価なグラフィックス命令によって更に置き換えることができる、請求項７に記載の装置。
【請求項９】
前記仮想マシンのうちの少なくとも第１の仮想マシンにおいてインスタンス化されるべきグラフィックスプロキシライブラリであって、前記第１の仮想マシンのための前記グラフィックス処理ユニットを抽象化するグラフィックスアプリケーションプログラミングインタフェースのコンテキストを維持することができるグラフィックスプロキシライブラリを更に備える、請求項１から請求項６のいずれか一項に記載の装置。
【請求項１０】
計算のための装置であって、
１つ又は複数の汎用プロセッサと、
グラフィックス処理ユニットと、
前記１つ又は複数の汎用プロセッサ及び前記グラフィックス処理ユニットに結合されたシステムメモリと、
前記１つ又は複数の汎用プロセッサによりホストされる仮想マシンを管理する仮想マシンモニタとを備え、前記仮想マシンモニタが、
前記１つ又は複数の汎用プロセッサにより実行される前記仮想マシンのアプリケーションの命令により前記システムメモリのアクセスを管理するメモリマネージャと、
前記アプリケーションにより前記グラフィックス処理ユニットに対して発行されたグラフィックス命令を分析して、前記グラフィックス命令が前記グラフィックス処理ユニットによりサポートされているかどうかを判定する、グラフィックス命令パーサとを含み、
前記グラフィックス命令パーサは、前記グラフィックス命令のうちの第１のグラフィックス命令が前記グラフィックス処理ユニットによりサポートされていないと判定すると、前記第１のグラフィックス命令が、前記グラフィックス処理ユニットによりサポートされる形式に変更されることができるか、又は前記グラフィックス処理ユニットによりサポートされる機能的に等価なグラフィックス命令によって置き換えられることができるかどうかを更に判定することができる、装置。
【請求項１１】
前記グラフィックス命令パーサが、前記第１のグラフィックス命令が前記グラフィックス処理ユニットによりサポートされる形式に変更されることができると判定すると、前記第１のグラフィックス命令を前記グラフィックス処理ユニットによりサポートされる形式に更に変更することができるか、又は前記グラフィックス処理ユニットによりサポートされる他の機能的に等価なグラフィックス命令の存在を判定すると、前記第１のグラフィックス命令を前記他の機能的に等価なグラフィックス命令によって更に置き換えることができる、請求項１０に記載の装置。
【請求項１２】
前記仮想マシンのうちの少なくとも第１の仮想マシンにおいてインスタンス化されるべきグラフィックスプロキシライブラリであって、前記第１の仮想マシンのための前記グラフィックス処理ユニットを抽象化するグラフィックスアプリケーションプログラミングインタフェースのコンテキストを維持することができるグラフィックスプロキシライブラリを更に備える、請求項１０又は１１に記載の装置。
【請求項１３】
計算のための装置であって、
１つ又は複数の汎用プロセッサと、
グラフィックス処理ユニットと、
前記１つ又は複数の汎用プロセッサ及び前記グラフィックス処理ユニットに結合されたシステムメモリと、
前記１つ又は複数の汎用プロセッサによりホストされる仮想マシンを管理する仮想マシンモニタと、
前記仮想マシンのうちの少なくとも第１の仮想マシンにおいてインスタンス化されるべきグラフィックスプロキシライブラリであって、前記第１の仮想マシンのための前記グラフィックス処理ユニットを抽象化するグラフィックスアプリケーションプログラミングインタフェースのコンテキストを維持することができるグラフィックスプロキシライブラリと
を備え、
前記仮想マシンモニタが、
前記１つ又は複数の汎用プロセッサにより実行される前記仮想マシンのアプリケーションの命令により前記システムメモリのアクセスを管理するメモリマネージャと、
前記アプリケーションにより前記グラフィックス処理ユニットに対して発行されたグラフィックス命令を分析して、前記グラフィックス命令が前記グラフィックス処理ユニットによりサポートされているかどうかを判定する、グラフィックス命令パーサとを含む、
装置。
【請求項１４】
計算のための装置であって、
１つ又は複数の汎用プロセッサと、
グラフィックス処理ユニットと、
前記１つ又は複数の汎用プロセッサ及び前記グラフィックス処理ユニットに結合されたシステムメモリと、
前記１つ又は複数の汎用プロセッサによりホストされる仮想マシンを管理する仮想マシンモニタと、
前記仮想マシンのうちの少なくとも第１の仮想マシンにおいてインスタンス化されるべきグラフィックスプロキシライブラリであって、前記第１の仮想マシンのための前記グラフィックス処理ユニットを抽象化するグラフィックスアプリケーションプログラミングインタフェースのコンテキストを維持することができるグラフィックスプロキシライブラリとを備える、装置。
【請求項１５】
前記グラフィックスプロキシライブラリが、維持される前記コンテキストが、前記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される異なるグラフィックス処理ユニット用であるかどうかを更に検出することができる、請求項１４に記載の装置。
【請求項１６】
前記グラフィックスプロキシライブラリが、前記コンテキストが、前記グラフィックスアプリケーションプログラミングインタフェースにより抽象化されている異なるグラフィックス処理ユニットのために維持されていることを検出すると、前記第１の仮想マシンが前記計算のための他の装置からライブマイグレートされてしまう前に、前記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される前記異なるグラフィックス処理ユニット用の前記グラフィックスプロキシライブラリにより維持されるコンテキストを使用して、前記グラフィックスアプリケーションプログラミングインタフェースの前記コンテキストを構成することができる、請求項１５に記載の装置。
【請求項１７】
計算のための方法であって、
計算システムのグラフィックス命令パーサにより、前記計算システムの仮想マシンのアプリケーションによって前記計算システムのグラフィックス処理ユニットに対して発行されたグラフィックス命令を分析するステップと、
前記グラフィックス命令パーサにより、前記グラフィックス命令により引き起こされた前記計算システムのシステムメモリに対する書き込みを検出するステップと、
システムメモリに対する書き込みを検出すると、前記グラフィックス命令パーサにより、前記計算システムの仮想マシンモニタのメモリマネージャによる変更されたメモリページのトラッキングを増やすステップとを含む、方法。
【請求項１８】
前記仮想マシンのうちの１つ又は複数を他の計算システムにライブマイグレートするステップであって、ライブマイグレートされている仮想マシンの現在のメモリ内容の前記他の計算システムに対する供給を含み、前記グラフィックス命令パーサにより増やされた、前記メモリマネージャによりトラッキングされる変更されたメモリページを利用する、ステップを更に含む、請求項１７に記載の方法。
【請求項１９】
前記グラフィックス命令パーサにより、前記グラフィックス命令のうちの第１のグラフィックス命令が前記グラフィックス処理ユニットによりサポートされていないと判定すると、前記第１のグラフィックス命令が、前記グラフィックス処理ユニットによりサポートされる形式に変更されることができるか、又は前記グラフィックス処理ユニットによりサポートされる機能的に等価なグラフィックス命令によって置き換えられることができるかどうかを判定するステップを更に含む、請求項１７に記載の方法。
【請求項２０】
前記グラフィックス命令パーサにより、前記第１のグラフィックス命令が前記グラフィックス処理ユニットによりサポートされる形式に変更されることができると判定すると、前記第１のグラフィックス命令を前記グラフィックス処理ユニットによりサポートされる形式に変更するステップか、又は前記グラフィックス処理ユニットによりサポートされる他の機能的に等価なグラフィックス命令の存在を判定すると、前記第１のグラフィックス命令を前記他の機能的に等価なグラフィックス命令によって置き換えるステップを更に含む、請求項１９に記載の方法。
【請求項２１】
前記仮想マシンのうちの第１の仮想マシンにおけるグラフィックスプロキシライブラリにより、前記第１の仮想マシンのための前記グラフィックス処理ユニットを抽象化するグラフィックスアプリケーションプログラミングインタフェースのコンテキストを維持するステップを更に含む、請求項１７に記載の方法。
【請求項２２】
前記グラフィックスプロキシライブラリにより、維持される前記コンテキストが、前記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される異なるグラフィックス処理ユニット用であるかどうかを検出するステップを更に含む、請求項２１に記載の方法。
【請求項２３】
前記グラフィックスプロキシライブラリにより、維持される前記コンテキストが、前記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される異なるグラフィックス処理ユニット用であることを検出すると、前記第１の仮想マシンが前記計算システムにライブマイグレートされてしまう前に、前記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される前記異なるグラフィックス処理ユニット用の前記グラフィックスプロキシライブラリにより維持されるコンテキストを使用して、前記グラフィックスアプリケーションプログラミングインタフェースの前記コンテキストを構成するステップを更に含む、請求項２２に記載の方法。
【請求項２４】
命令を有する少なくとも１つのコンピュータプログラムであって、計算システムのプロセッサによる実行に応答して、前記命令が前記計算システムに、グラフィックス命令パーサを実施させて請求項１７から請求項２０のいずれか一項に記載の方法を実行させるか、又はグラフィックス命令パーサ及びグラフィックスプロキシライブラリを実施させて請求項２１から請求項２３のいずれか一項に記載の方法を実行させる、コンピュータプログラム。
【請求項２５】
計算のための装置であって、
１つ又は複数の汎用プロセッサと、
グラフィックス処理ユニットと、
前記１つ又は複数の汎用プロセッサ及び前記グラフィックス処理ユニットに結合されたシステムメモリと、
前記１つ又は複数の汎用プロセッサによりホストされる仮想マシンを管理するための仮想マシンモニタ手段とを備え、前記仮想マシンモニタ手段が、
前記１つ又は複数の汎用プロセッサにより実行されるべき前記仮想マシンのアプリケーションの命令により前記システムメモリのアクセスを管理するためのメモリ管理手段であって、アクセスの管理が前記システムメモリの変更されたメモリページのトラッキングを含む、メモリ管理手段と、
前記アプリケーションにより前記グラフィックス処理ユニットに対して発行されたグラフィックス命令を分析して、前記グラフィックス命令により引き起こされた前記システムメモリに対する書き込みを検出し、前記メモリ管理手段による変更されたメモリページの前記トラッキングを増やすためのグラフィックス命令パージング手段であって、前記グラフィックス命令のうちの第１のグラフィックス命令が前記グラフィックス処理ユニットによりサポートされていないと判定すると、前記第１のグラフィックス命令が、前記グラフィックス処理ユニットによりサポートされる形式に変更されることができるか、又は前記グラフィックス処理ユニットによりサポートされる機能的に等価なグラフィックス命令によって置き換えられることができるかどうかを判定するための手段を含む、グラフィックス命令パージング手段と、
前記仮想マシンのうちの少なくとも第１の仮想マシンにおいてインスタンス化されるべきグラフィックスプロキシライブラリ手段であって、前記第１の仮想マシンのための前記グラフィックス処理ユニットを抽象化するグラフィックスアプリケーションプログラミングインタフェースのコンテキストを維持するためのグラフィックスプロキシライブラリ手段とを含む、装置。
【請求項２６】
請求項２４に記載のコンピュータプログラムを記憶したコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、計算の分野に関する。より具体的には、本開示は、グラフィックス仮想化を用いたホストコンピュータからの／ホストコンピュータへの仮想マシンのライブマイグレーションに関する。
【背景技術】
【０００２】
本明細書で提供される背景説明は、本開示の文脈を一般的に提示するためのものである。本明細書中に他に示されていない限り、このセクションに記載される構成要素は、本出願の請求項に対する先行技術ではないとともに、このセクションに含まれることにより先行技術であると認められるものではない。
【発明の概要】
【０００３】
システムメモリ全体をマイグレートするコストが大きく実用的ではないため、従来の仮想マシン（ＶＭ）のライブマイグレーションは、通常、メモリ内容の増分マイグレーションを必要とする。システムメモリ全体をマイグレートすることを可能にするために、システム全体を長時間停止させることは耐えられない。その代わりに、システムは、通常、システムがまだ動作している間に、いくつかの反復にわたってメモリの変更された部分のみをマイグレートする。その期間中に、新たにマークされたメモリページは“ダーティ”としてマークされるとともに、その後の反復でマイグレートされる。
【０００４】
最近の仮想化とグラフィックス技術の進歩により、ホストコンピュータ上の複数のＶＭ間でより効率的なグラフィックス仮想化が可能になった。ＶＭのユーザアプリケーションがホストコンピュータのグラフィックス処理ユニット（ＧＰＵ）でサポートされている全てのグラフィックス機能にアクセスできるように、先進的なグラフィックス仮想化は、今では、多くの場合ＶＭ内で動作する固有のグラフィックスドライバをサポートする。多くの場合、ＧＰＵデバイスモデルは、ホストコンピュータの仮想マシンモニタ（ＶＭＭ）内に実装され、メモリマップドＩ／Ｏ（memory  mapped  input-output：ＭＭＩＯ）のようなＧＰＵリソースのアクセスをエミュレートする。ＧＰＵは、ＧＰＵ命令を処理する場合にホストコンピュータのシステムメモリを操作することができ、システムメモリの操作はＶＭＭのメモリマネージャには知られない。
【０００５】
その結果、最新のＧＰＵ仮想化が行われている場合、ＶＭの従来のライブマイグレーションは機能しない。さらに、ライブマイグレーションのターゲットホストコンピュータが、ライブマイグレーションのソースホストコンピュータのＧＰＵと異なるＧＰＵを有する場合、マイグレーションは更に複雑になる。ソースホストコンピュータとターゲットホストコンピュータの２つのＧＰＵの状態が完全に一致しないため、従来のライブマイグレーション手法では、このようなライブマイグレーションを処理できない。
【０００６】
実施例は、添付の図面と併せて下記の詳細な説明により容易に理解されることになる。この説明を容易にするために、同様の参照番号は、同様の構造要素を指定する。実施例は、添付の図面の図において、限定の目的ではなく、一例として例示される。
【図面の簡単な説明】
【０００７】
【図１】開示された実施例による、本開示を実施するのに適した一例のコンピュータの構成を例示する。
【図２】開示された実施例による、ソースホストコンピュータとターゲットホストコンピュータの一例のペアを例示する。
【図３】開示された実施例による、図１及び図２のグラフィックスパーサに関する動作の一例の方法を例示する。
【図４】開示された実施例による、図１及び図２のライブマイグレーション機能に関する動作の一例の方法を例示する。
【図５】開示された実施例による、図１及び図２のグラフィックスプロキシライブラリに関する動作の一例の方法を例示する。
【図６】開示された実施例による、本開示の様々な態様を実施するために使用するのに適した一例のコンピュータシステムを例示する。
【図７】開示された実施例による、図１から図５を参照して説明される方法を実施するための命令を有する記憶媒体を例示する。
【発明を実施するための形態】
【０００８】
グラフィックス仮想化を用いたホストコンピュータからの／ホストコンピュータへのＶＭのライブマイグレーションと関連付けられた装置、方法、及び記憶媒体がここで開示される。実施例において、計算のための装置は、装置の１つ又は複数の汎用プロセッサ（ＣＰＵ）によりホストされるＶＭを管理するＶＭＭを含み得る。ＶＭＭは、ＣＰＵにより実行されるＶＭのアプリケーションの命令により装置のシステムメモリのアクセスを管理するメモリマネージャを含み得る。アクセスの管理は、システムメモリの変更されたメモリページのトラッキングを含み得る。その上、ＶＭＭは、アプリケーションにより装置のグラフィックス処理ユニット（ＧＰＵ）に対して発行されたグラフィックス命令を分析して、グラフィックス命令により引き起こされたシステムメモリに対する書き込みを検出し、変更されたメモリページのトラッキングを増やす（augment）、グラフィックス命令パーサを含み得る。さらに、ＶＭＭは、ＶＭのうちの１つ又は複数を計算のための他の装置に選択的にライブマイグレートするライブマイグレーション機能であって、ライブマイグレートされているＶＭの現在のメモリ内容の上記他の装置に対する供給を含み、グラフィックス命令パーサにより増やされた（augmented）、メモリマネージャによりトラッキングされる変更されたメモリページを利用する、ライブマイグレーション機能を含み得る。
【０００９】
実施例において、命令パーサは、グラフィックス命令を分析して、グラフィックス命令がＧＰＵによりサポートされているかどうかを判定するように更に構成され得る。さらに、命令パーサは、グラフィックス命令のうちの第１のグラフィックス命令がＧＰＵによりサポートされていないと判定すると、第１のグラフィックス命令が、ＧＰＵによりサポートされる形式に変更されることができるか、又はＧＰＵによりサポートされる機能的に等価なグラフィックス命令によって置き換えられることができるかどうかを判定するように構成され得る。またさらに、命令パーサは、第１のグラフィックス命令がＧＰＵによりサポートされる形式に変更されることができると判定すると、第１のグラフィックス命令をＧＰＵによりサポートされる形式に変更するか、又はＧＰＵによりサポートされる他の機能的に等価なグラフィックス命令の存在を判定すると、第１のグラフィックス命令を他の機能的に等価なグラフィックス命令によって置き換えるように更に構成され得る。
【００１０】
実施例において、装置は、ＶＭのうちの少なくとも第１のＶＭにおいてインスタンス化されるべきグラフィックスプロキシライブラリであって、第１のＶＭのためのＧＰＵを抽象化するグラフィックスアプリケーションプログラミングインタフェース（ＡＰＩ）のコンテキストを維持することができるグラフィックスプロキシライブラリを更に含み得る。その上、グラフィックスプロキシライブラリは、コンテキストが別の装置の別のＧＰＵ（２つのＧＰＵは機能的に異なるＧＰＵである）の抽象化のために維持されているかどうかを検出するように構成され得る。さらに、グラフィックスプロキシライブラリは、異なるＧＰＵの抽象化のためにコンテキストが維持されていることを検出すると、ＧＰＵのためのグラフィックスコンテキストを再作成するように構成され得る。
【００１１】
下記の詳細な説明では、全体を通して同様の番号が同様の部品を指定するとともに、実践され得る例示的な実施例により示されている、本明細書の一部分を形成する添付図面に対して参照が行われる。本開示の範囲から逸脱することなく、他の実施例が利用され得るとともに、構造的又は論理的な変更が実行され得る、ということが理解されるべきである。したがって、下記の詳細な説明は、限定的に解釈されるべきでなく、実施例の範囲は添付された請求項とそれらの等価物によってのみ定義される。
【００１２】
本開示の態様は、添付の説明に開示されている。本開示の代替の実施例及びそれらの等価物は、本開示の精神又は範囲から逸脱することなく考案され得る。下記に開示される同様の要素は図面において同様の参照符号により示される、ということに注意が必要である。
【００１３】
同様に、様々な動作は、特許請求の範囲の主題を理解する上で最も有効である方法で、複数の別々の行動又は動作として説明され得る。しかしながら、説明の順序は、これらの動作が必ずしも順序に依存していることを意味すると解釈されるべきではない。特に、これらの動作は、提示の順序で実行されなくてもよい。説明された動作は、説明された実施例とは異なる順序で実行されてもよい。様々な追加の動作が実行され得るか、及び／又は、説明された動作はさらなる実施例では省略されてもよい。
【００１４】
本開示の目的のために、“Ａ及び／又はＢ”という言いまわしは、（Ａ）、（Ｂ）、又は（Ａ及びＢ）を意味する。本開示の目的のために、“Ａ、Ｂ、及び／又はＣ”という言いまわしは、（Ａ）、（Ｂ）、（Ｃ）、（Ａ及びＢ）、（Ａ及びＣ）、（Ｂ及びＣ）、又は（Ａ、Ｂ、及びＣ）を意味する。
【００１５】
説明は、“一実施例において”又は“実施例において”という言いまわしを使用することができ、それは、それぞれ同一又は異なる実施例のうちの１つ又は複数を指すことができる。また、本開示の実施例に関連して使用されるように、“備える（comprising）”、“含む（including）”、“有する（having）”などという用語は同義である。
【００１６】
ここで使用されるように、“モジュール”という用語は、特定用途向け集積回路（ＡＳＩＣ）、電子回路、１つ若しくは複数のソフトウェア又はファームウェアプログラムを実行するプロセッサ（共有、専用、若しくはグループ）及び／又はメモリ（共有、専用、若しくはグループ）、組み合わせ論理回路、そして／あるいは、説明された機能を提供する他の適切なコンポーネントのことを指し得るか、これらの一部であり得るか、又はこれらを含み得る。
【００１７】
ここで図１を参照すると、様々な実施例による、本開示の教示と結合されるコンピュータの構成の一例が示されている。図示のように、計算装置１００は、ケーブルを介して直接に、又は、１つ若しくは複数のネットワーク１６２を介して間接的に互いに結合された複数のホストコンピュータ１０２を含み得る。各ホストコンピュータ１０２は、ハードウェア１１２及びＶＭＭ１１４によって構成され、複数のＶＭ１１６を管理及びホストすることができる。下記でより詳細に説明されることになるように、ホストコンピュータ１０２のうちの少なくともいくつかは、前述したような高度なグラフィックス仮想化をサポートするように構成されおり、それにもかかわらず、ホストされる仮想マシンのライブマイグレーションを可能にする本開示の教示と結合される。
【００１８】
より具体的には、いくつかの実施例では、これらのホストコンピュータ１０２は、ＧＰＵ１２４が同じ種類のＧＰＵであるソースホストコンピュータとターゲットホストコンピュータ１０２との間で、ホストされる仮想マシンのライブマイグレーションを可能にする本開示の教示と結合され得る。他の実施例では、これらのホストコンピュータ１０２は、ＧＰＵ１２４が同じ種類のＧＰＵではないが、しかし同様の種類のＧＰＵであるソースホストコンピュータとターゲットホストコンピュータ１０２との間で、ホストされる仮想マシンのライブマイグレーションを可能にする本開示の追加の教示と結合され得る。本出願の目的のために、グラフィックス命令が他のＧＰＵによりサポートされるように、もし１つのＧＰＵのグラフィックス命令が形式において変更されるか、又は機能的に等価なグラフィックス命令で置き換えられるならば、２つのＧＰＵは、異なるが、しかし同様の種類のＧＰＵである。更に他の実施例では、これらのホストコンピュータ１０２は、ＧＰＵ１２４が異なるとともに同様でない種類のＧＰＵであるソースホストコンピュータとターゲットホストコンピュータ１０２との間で、ホストされる仮想マシンのライブマイグレーションを可能にする本開示の追加の教示と結合され得る。本出願の目的のために、２つのＧＰＵは、もしそれらが少なくとも、異なるが、しかし同様の種類のＧＰＵでなければ、異なるとともに同様でない種類のＧＰＵである。２つのＧＰＵは、もしそれらが、異なるが、しかし同様の種類のＧＰＵよりも似ているならば、同一である。異なるが、しかし同様の２つのＧＰＵの例は、同じベンダーの異なる世代のＧＰＵであり、ある世代のＧＰＵのグラフィックス命令は、次世代のＧＰＵによりサポートされるように変更され得る。異なるとともに同様でないＧＰＵの例は、異なる命令セットアーキテクチャを有する異なるベンダーのＧＰＵである。
【００１９】
引き続き図１を参照すると、各ホストコンピュータ１０２のハードウェア１１２は、システムメモリ１２６と、アプリケーション１４４の非グラフィックス命令を実行する１つ又は複数のＣＰＵ１２２とを含み得るとともに、前述したように、少なくともいくつかのホストコンピュータ１０２は、アプリケーション１４４のグラフィックス命令を実行するＧＰＵ１２４を更に含み得る。システムメモリ１２６は、広範囲の揮発性又は不揮発性記憶装置であってもよい。様々なホストコンピュータ１０２のＣＰＵ１２２は、同じ種類のＣＰＵであってもよいし、異なる種類のＣＰＵであってもよい。同様に、様々なホストコンピュータ１０２のＧＰＵ１２４は、同じ種類、同様の種類、又は著しく異なる種類のＧＰＵであってもよい。換言すれば、ＣＰＵ１２２及びＧＰＵ１２４は、当該技術分野で知られているいくつかのＣＰＵ及びＧＰＵのうちの任意の１つであってもよい。その上、ＣＰＵ１２２及びＧＰＵ１２４の他に、ハードウェア１１２は、大容量記憶装置、通信／ネットワークインタフェース、入力−出力装置（input-output  device）などを含むが、これに限定されない、他のハードウェア要素（図示せず）を含み得る。
【００２０】
各ホストコンピュータ１０２のＶＭＭ１１４は、ＶＭ１１６によるホストコンピュータ１０２のシステムメモリのアクセス（例えば、ゲストオペレーティングシステム（ＯＳ）１４２及びアプリケーション１４４の非グラフィックス命令によるアクセス）を管理するメモリマネージャ１３２を含み得る。実施例において、システムメモリはページに編成され、アクセスの管理は変更されたメモリページのトラッキングを含み得る。その上、ホストコンピュータ１０２の少なくともいくつかについて、ＶＭＭ１１４は、あるソースホストコンピュータ１０２からターゲットホストコンピュータ１０２へのＶＭ１１６のライブマイグレーションをサポートするように構成されるライブマイグレーション機能１３６と、前述のような高度なグラフィックス仮想化をサポートするように構成されるグラフィックス命令パーサ１３４を更に含み得る。そして、これらの実施例のいくつかでは、グラフィックス命令パーサ１３４は、同じ又は同様の種類のＧＰＵを有するソースホストコンピュータからターゲットホストコンピュータへのＶＭのライブマイグレーションをサポートする本開示の教示と更に結合される。より具体的には、実施例において、グラフィックス命令パーサ１３４は、グラフィックス命令を解析してＧＰＵ１２４に転送するように構成されていることに加えて、グラフィックス命令により引き起こされたＧＰＵによるシステムメモリへの書き込みを検出するとともに、検出すると、メモリマネージャ１３２による変更されたメモリページのトラッキングを増やす（augment）、メモリ書き込みトラッキング機能１５６によって構成され得る。したがって、ライブマイグレーション機能１３６は、グラフィックス命令パーサ１３４により増やされた（augmented）、変更されたメモリページのトラッキングに基づいて、ソースホストコンピュータ及びターゲットホストコンピュータ１０２から／にライブマイグレートされているＶＭの現在のメモリ内容を提供し得る。その上、実施例において、グラフィックス命令パーサ１３４は、異なるが、しかし同様の種類のＧＰＵ１２４を有するソース及びターゲットホストコンピュータ１０２からの／ソース及びターゲットホストコンピュータ１０２へのグラフィックス仮想化を用いたＶＭ１１６のライブマイグレーションを可能にするように、グラフィックス命令の形式を変更するか、又はグラフィックス命令を他の機能的に等価なグラフィックス命令に置き換える命令修正機能１５８によって更に構成され得る。本開示の教示を除いて、メモリマネージャ１３２、グラフィックス命令パーサ１３４、及びライブマイグレーション機能１３６を含むＶＭＭ１１４は、当該技術分野で知られているこれらの要素のうちの任意の１つであってもよい。
【００２１】
先に示唆したように、各ＶＭ１１６は、それ自体のゲストＯＳ１４２及びアプリケーション１４４を含み得る。ＧＰＵ１２４を有するホストコンピュータ１０２の場合、ゲストＯＳ１４２はＧＰＵドライバ１５４を含むことができ、アプリケーション１４４はグラフィックス命令並びに従来の非グラフィックス命令を含むことができる。さらに、実施例において、ゲストＯＳ１４２は、異なるとともに同様でない種類のＧＰＵを有するソースからターゲットホストコンピュータ１０２へのＶＭのライブマイグレーションをサポートするために、本開示の教示と結合されるグラフィックスプロキシライブラリ１５２を含み得る。より具体的には、グラフィックスプロキシライブラリ１５２は、グラフィックスＡＰＩのグラフィックスコンテキストをトラッキングするとともに、異なるとともに同様でない種類のＧＰＵ１２４を有するソース及びターゲットホストコンピュータ１０２からの／ソース及びターゲットホストコンピュータ１０２へのグラフィックス仮想化を用いたＶＭ１１６のライブマイグレーションを可能にするように、グラフィックスＡＰＩによるＧＰＵの異なる抽象化に対するグラフィックスコンテキストを再構成するように構成され得る。本開示の教示を除いて、グラフィックスプロキシライブラリ１５２及びグラフィックスドライバ１５４を含むＯＳ１４２、そしてアプリケーション１４４は、当該技術分野で知られているこれらの要素のうちの任意の１つであってもよい。
【００２２】
要約すれば、計算装置１００は、複数のホストコンピュータ１０２を含むことができ、グラフィックス仮想化を用いたソースホストコンピュータ１０２からターゲットホストコンピュータ１０２へのバーチャルマシンの３つのレベルのライブマイグレーションのうちの少なくとも１つをサポートするために、複数のホストコンピュータ１０２のうちの少なくとも２つが本開示の教示と結合され得る。グラフィックス仮想化を用いたソースホストコンピュータ１０２からターゲットホストコンピュータ１０２への仮想マシンの３つのレベルのライブマイグレーションは、下記の通りである。
【００２３】
ａ）同じ種類のＧＰＵ２４のグラフィックス仮想化を用いたソースホストコンピュータ１０２からターゲットホストコンピュータ１０２へのライブマイグレーション。
【００２４】
ｂ）異なるが、しかし同様の種類のＧＰＵ２４のグラフィックス仮想化を用いたソースホストコンピュータ１０２からターゲットホストコンピュータ１０２へのライブマイグレーション。
【００２５】
ｃ）異なるとともに同様でない種類のＧＰＵ２４のグラフィックス仮想化を用いたソースホストコンピュータ１０２からターゲットホストコンピュータ１０２へのライブマイグレーション。
【００２６】
ここで図２を参照すると、様々な実施例による、本開示の教示と結合されるソースホストコンピュータとターゲットホストコンピュータの一例のペアが示されている。図示されるとともに先に説明したように、ソースホストコンピュータ１０２ａは、ＣＰＵ１２２ａ及びＧＰＵ１２４ａを有するハードウェア１１２ａを含み得る。ソースホストコンピュータ１０２ａは、ＶＭＭ１１４ａ及びホストされるＶＭ１１６ａを更に含み得る。ＶＭＭ１１４ａは、メモリマネージャ１３２ａ、メモリ書き込みトラッキング機能１５６ａを有するグラフィックス命令パーサ１３４ａ、及びライブマイグレーション機能１３６ａを含み得る。ＶＭ１１６ａは、ＧＰＵドライバ１５４ａを有するゲストＯＳ１４２ａと、アプリケーション１４４ａとを含み得る。ライブマイグレーション機能１３６ａは、グラフィックス命令パーサ１３４ａにより増やされた、メモリマネージャ１３２ａによる変更されたメモリページのトラッキングを利用して、ＧＰＵ１２４ａと同じ種類のＧＰＵであるＧＰＵ１２４ｂのＶＭ１１６ｂの全域でのグラフィックス仮想化を用いてＶＭ１１６ａをターゲットホストコンピュータ１０２ｂにライブマイグレートするように構成され得る。ＧＰＵ１２４ａと同じ種類のＧＰＵであるＧＰＵ１２４ｂのＶＭ１１６ｂの全域でのグラフィックス仮想化を用いたＶＭ１１６ａのターゲットホストコンピュータ１０２ｂへのライブマイグレーションのために、ターゲットホストコンピュータ１０２ｂは、同じ種類のＣＰＵ１２２ｂ及びＧＰＵ１２４ｂを有するハードウェア１１２ｂを含み得る。ターゲットホストコンピュータ１０２ｂは、ＶＭＭ１１４ｂ及びホストＶＭ１１６ｂを更に含み得る。ＶＭＭ１１４ｂは、メモリマネージャ１３２ｂ及びグラフィックス命令パーサ１３４ｂを含み得る。ターゲットホストコンピュータ１０２ｂについては、グラフィックス命令パーサ１３４ｂがメモリ書き込みトラッキング機能１５６ｂによって構成されているか、又は、ＶＭＭ１１４ｂがライブマイグレーション機能１３６ａによって構成されているかどうかは、任意である。ＶＭ１１６ｂは、ＧＰＵドライバ１５４ｂを有するゲストＯＳ１４２ｂと、アプリケーション１４４ｂとを含み得る。もしターゲットホストコンピュータ１０２ｂが異なる時点でソースホストコンピュータ１０２ａとして動作することになるならば、グラフィックス命令パーサ１３４ｂは、メモリ書き込みトラッキング機能１５６ｂによって構成されてもよく、そしてＶＭＭ１１４ｂは、ライブマイグレーション機能１３６ｂによって構成されてもよい。
【００２７】
他の実施例では、ライブマイグレーション機能１３６ａは、ＧＰＵ１２４ａと異なるが、しかし同様の種類のＧＰＵであるＧＰＵ１２４ｂのＶＭ１１６ｂの全域でのグラフィックス仮想化を用いてＶＭ１１６ａをターゲットホストコンピュータ１０２ｂにライブマイグレートするように更に構成され得る。ＧＰＵ１２４ａと異なるが、しかし同様の種類のＧＰＵであるＧＰＵ１２４ｂのＶＭ１１６ｂの全域でのグラフィックス仮想化を用いたＶＭ１１６ａのターゲットホストコンピュータ１０２ｂへのライブマイグレーションを可能にするために、グラフィックス命令パーサ１３４ｂは、例えば、ＧＰＵ１２４ａ及び１２４ｂのグラフィックスプロセッサタイプの識別を介して、ＧＰＵ１２４ｂがＧＰＵ１２４ａと異なるが、しかし同様の種類のＧＰＵであるかどうかを判定するように更に構成され得る。さらに、グラフィックス命令パーサ１３４ｂは、ＧＰＵ１２４ａ及び１２４ｂが異なるが、しかし同様の種類のＧＰＵであると判定すると、ＧＰＵ１２４ａに対するグラフィックス命令が、ＧＰＵ１２４ｂによりサポートされる形式に変更されることができるか、又はＧＰＵ１２４ａに対するグラフィックス命令を、ＧＰＵ１２４ｂによりサポートされる機能的に等価なグラフィックス命令によって置き換えられることができるかどうかを判定する命令修正機能１５８ａによって更に構成され得る。その上、命令修正機能１５８ａは、変更が可能であると判定すると、それでＧＰＵ１２４ａに対するグラフィックス命令をＧＰＵ１２４ｂによりサポートされる形式に変更するか、又は置き換えが可能であると判定すると、ＧＰＵ１２４ａに対するグラフィックス命令を、ＧＰＵ１２４ｂによりサポートされる機能的に等価なグラフィックス命令によって置き換えるように構成され得る。実施例において、グラフィックス命令パーサ１３４ｂは、ＧＰＵ１２４ａ及び１２４ｂのグラフィックス命令の構文（syntax）及び／又は意味規則（semantics）をマッピングするテーブル（図示せず）によって構成され得る。ソースホストコンピュータ１０２ａについては、グラフィックス命令パーサ１３４ａが命令修正機能１５８ａによって構成されているかどうかは、任意である。もしソースホストコンピュータ１０２ａが、異なる時点でターゲットホストコンピュータ１０２ｂとして動作することになるとともに、ＧＰＵ１２４ａと異なるが、しかし同様の種類のＧＰＵのＶＭの全域でのグラフィックス仮想化を用いたソースホストコンピュータからのＶＭのライブマイグレーションをサポートするならば、グラフィックス命令パーサ１３４ａは、命令修正機能１５８ａによって構成されてもよい。
【００２８】
更に他の実施例では、ライブマイグレーション機能１３６ａは、ＧＰＵ１２４ａと異なるとともに同様でない種類のＧＰＵであるＧＰＵ１２４ｂのＶＭ１１６ｂの全域でのグラフィックス仮想化を用いてＶＭ１１６ａをターゲットホストコンピュータ１０２ｂにライブマイグレートするように構成され得る。ＧＰＵ１２４ａと異なるとともに同様でない種類のＧＰＵであるＧＰＵ１２４ｂのＶＭ１１６ｂの全域でのグラフィックス仮想化を用いたＶＭ１１６ａのターゲットホストコンピュータ１０２ｂへのライブマイグレーションを可能にするために、ＶＭ１１６ａのゲストＯＳ１４２ａは、ＧＰＵ１２４ａのグラフィックス命令を抽象化するＡＰＩをサポートするグラフィックスプロキシライブラリ１５２ａによって更に構成され得る。グラフィックスプロキシライブラリ１５２ａは、ＡＰＩの実装をサポートすることに加えて、ＡＰＩにより使用されるリソースをトラッキングするＡＰＩのグラフィックスコンテキストを維持するように構成され、ライブマイグレーションの後に、異なるとともに同様でないＧＰＵ１２４ｂのグラフィックス命令を抽象化するＡＰＩのために、新しいグラフィックスコンテキストを構成することを可能にする。トラッキングされるリソースは、glCreateContext()コールからのコンテキストＩＤ、glCreateTexture()からのテクスチャＩＤ、glCreateShader()コールからのシェーダプログラム（shader  program）ＩＤなどを含み得るが、これらに限定されない。グラフィックスプロキシライブラリ１５２ａは、ＶＭ１１６ａがソースホストコンピュータ１０２ａからターゲットホストコンピュータ１０２ｂにライブマイグレートされて、ＶＭ１１６ｂになった後に、グラフィックスプロキシライブラリ１５２ｂになる。その上、グラフィックスプロキシライブラリ１５２ａ／１５２ｂは、例えば、潜在的なグラフィックスリソースが異なるとともに同様でないＧＰＵのリソースであることを検出することによって、ＡＰＩにより抽象化される潜在的なＧＰＵの変更を検出するように構成され得る。さらに、グラフィックスプロキシライブラリ１５２ａ／１５２ｂは、ライブマイグレーションの後に、ＡＰＩにより抽象化されるＧＰＵ１２４ｂが、ＧＰＵ１２４ａとは異なるとともに同様でない種類のＧＰＵであることを検出すると、ＡＰＩのためのグラフィックスコンテキストを再構成するように構成され得る。
【００２９】
ここで図３を参照すると、様々な実施例による、図１及び図２のグラフィックス命令パーサに関する動作の一例の方法が示されている。図示のように、実施例において、グラフィックス命令の解析（parsing：パージング）のための方法３００は、ブロック３０２〜３１８における動作を含み得る。理解を容易にするために、ブロック３０２〜３１８の動作を順を追って説明するが、代替の実施例では、動作のうちのいくつかは、異なる順序で実行されてもよく、又は任意であってもよい。例えば、異なるが、しかし同様のＧＰＵのグラフィックス仮想化を用いた、ソース及びターゲットホストコンピュータの全域でのＶＭのライブマイグレーションがサポートされる実施例では、少なくともブロック３０４〜３０６の動作が随意に実行されてもよい。更に他の実施例では、追加の動作が実行されてもよい。
【００３０】
方法３００は、例えばゲストＯＳ又はホストされるＶＭのアプリケーションからＧＰＵに対して発行されたグラフィックス命令のトラッピング（trapping：捕捉）によって、ブロック３０２において開始することができる。実施例において、グラフィックス命令は、例えば、ＭＭＩＯを監視することによりトラップ（trap：捕捉）されてもよい。
【００３１】
次に、オプションのブロック３０４において、（ホストされるＶＭが別のホストコンピュータからライブマイグレートされた場合に）グラフィックス命令がＧＰＵによりサポートされているかどうかについての判定が行われることができる。実施例において、グラフィックス命令がサポートされていないと判定すると、グラフィックス命令が、ＧＰＵによりサポートされる形式に変更されることができるか、又はＧＰＵによりサポートされる他の機能的に等価なグラフィックス命令によって置き換えられることができるかどうかについてのさらなる判定が行われることができる。
【００３２】
グラフィックス命令がサポートされていないが、しかしサポートされるように変更され得るか又は置き換えられ得ると判定されると、方法３００はブロック３０６に進むことができる。ブロック３０６において、グラフィックス命令は、ＧＰＵによりサポートされる形式に変更され得るか、又はＧＰＵによりサポートされる他の機能的に等価なグラフィックス命令によって置き換えられ得る。実施例において、もしグラフィックス命令がサポートされていないが、しかしグラフィックス命令がサポートされるように変更されることができないか又は置き換えられることができないならば、方法３００はエラー（図示せず）を返して終了することができる。
【００３３】
引き続き図３を参照すると、ブロック３０２（同じ種類のＧＰＵを有するターゲットホストコンピュータへのライブマイグレーションのみがサポートされている場合）、ブロック３０４（グラフィックス命令がサポートされていると判定される場合）から、又はブロック３０６（グラフィックス命令がサポートされていないが、しかしサポートされるように変更可能又は置き換え可能であると判定される場合）から、方法３００はブロック３０８に進むことができる。ブロック３０８において、グラフィックス命令は、分析されて、デコードされ得る。特に、グラフィックス命令は、グラフィックス命令がＧＰＵにシステムメモリへの書き込みを行わせるかどうかを検出するように分析され得る。
【００３４】
グラフィックス命令がＧＰＵにシステムメモリへの書き込みを行わせることを判定すると、方法３００はブロック３１０に進むことができる。ブロック３１０において、グラフィックス命令と関連付けられたゲストグラフィックスメモリアドレスが取得され得る。いくつかのグラフィックス命令については、メモリアドレスは、グラフィックス命令からを直接取得され得る。間接アドレッシングを使用する他のグラフィックス命令については、メモリアドレスは、グラフィックス命令におけるオフセット、及びベースグラフィックスアドレス（それは、例えば、ベースグラフィックスアドレスを設定するＭＭＩＯ動作をトラップすることにより取得され得る）に基づいて計算され得る。ゲストグラフィックスメモリアドレスを取得すると、方法３００はブロック３１２に進むことができる。ブロック３１２において、ゲストグラフィックスメモリアドレスと関連付けられたホストグラフィックスメモリアドレスが（例えば、グラフィックスページテーブルを介して）計算され得る。
【００３５】
ホストグラフィックスメモリアドレスを計算すると、方法３００はブロック３１４に進むことができる。ブロック３１４において、ホストグラフィックスメモリアドレスと関連付けられたシステムメモリアドレスが、例えば、システムメモリマップから取得され得る。システムメモリアドレスを取得すると、方法３００はブロック３１６に進むことができる。ブロック３１６において、メモリマネージャによる変更されたメモリページのトラッキングは、例えば、メモリページテーブルを追加として更新し、システムメモリアドレスを含むメモリページをダーティとマークすることにより増やされ得る。
【００３６】
ブロック３０８（グラフィックス命令がＧＰＵにシステムメモリへの書き込みを行わせないと判定すると）から、又はブロック３１６（変更されたメモリページのトラッキングを増やすと）から、方法３００はブロック３１８に進むことができ、ここで、グラフィックス命令の解析の残りの動作、例えばデコードされたグラフィックス命令をＧＰＵにディスパッチ（dispatch）すること、が実行され得る。その後、方法３００は終了し得る。
【００３７】
ここで図４を参照すると、様々な実施例による、図１及び図２のライブマイグレーション機能に関する動作の一例の方法が示されている。図示のように、実施例において、ＶＭのライブマイグレーションのための方法４００は、ブロック４０２〜４０８における動作を含み得る。理解を容易にするために、ブロック４０２〜４０８の動作を順を追って説明するが、代替の実施例では、動作のうちのいくつかは、異なる順序で実行されてもよく、又は任意であってもよい。他の実施例では、追加の動作が実行されてもよい。
【００３８】
方法４００は、ブロック４０２において開始することができ、ＶＭをライブマイグレートするためのプロセスが開始され得る。ライブマイグレーションは、複数のシステムイベントにより、例えば管理者からの命令に応答して、ハードウェア又はソフトウェアのイベントに応答して、しきい値レベルを超えるホストコンピュータの作業負荷に応答してなどにより、トリガされ得る。実施例において、ライブマイグレーションの開始の前に、ターゲットコンピュータが、同じＧＰＵ、適切なグラフィックス命令パーサにより補完される、異なるが、しかし同様のＧＰＵ、又は前述のような適切なグラフィックスプロキシライブラリにより補完される、異なるとともに同様でないＧＰＵを有していることを確認するために判定が行われ得る。異なるとともに同様でないＧＰＵの状況では、判定は、同様に、グラフィックスコンテキストを維持するように構成された前述のグラフィックスプロキシライブラリにより、ソースホストコンピュータが同様に補完される、ということを確認し得る。実施例において、もし適切なターゲットホストコンピュータが発見されないならば、“ライブマイグレーション”は中止され得る。
【００３９】
次に、ライブマイグレーションの開始時に、ブロック４０４において、メモリマネージャによりトラッキングされるとともに、グラフィックス命令パーサにより増やされた変更されたメモリページが取得される。その後、ブロック４０６において、メモリマネージャによりトラッキングされるとともに、グラフィックス命令パーサにより増やされた変更されたメモリページに基づいて、マイグレートされているＶＭの現在のメモリ内容が、ターゲットホストコンピュータに提供され得る。図示されるように、ブロック４０４及び４０６の動作は、ライブマイグレーションが進行中に、全てのメモリ変更をキャプチャするために、必要な回数だけ複数回繰り返されてもよい。
【００４０】
最終的に、全てのメモリ変更がキャプチャされて、ターゲットホストコンピュータに提供される。このとき、方法４００はブロック４０８に進むことができる。ブロック４０８において、残りのライブマイグレーション動作が、これまで通り実行され得る。その後、方法４００は終了し得る。
【００４１】
ここで図５を参照すると、様々な実施例による、図１及び図２のグラフィックスプロキシライブラリに関する動作の一例の方法が示されている。前述のように、グラフィックスプロキシライブラリは、潜在的なＧＰＵのグラフィックス命令を抽象化するグラフィックスＡＰＩをサポートするように構成され得る。特に、グラフィックスプロキシライブラリは、ＡＰＩのためのグラフィックスコンテキストをトラッキング及び再構成するために、本開示の教示と結合され得る。図示されるように、実施例において、グラフィックスプロキシライブラリのための方法５００は、ブロック５０２〜５１２における動作を含み得る。理解を容易にするために、ブロック５０２〜５１２の動作を順を追って説明するが、代替の実施例では、動作のうちのいくつかは、異なる順序で実行されてもよく、又は任意であってもよい。他の実施例では、追加の動作が実行されてもよい。
【００４２】
方法５００は、ブロック５０２において開始することができ、グラフィックスＡＰＩに対するグラフィックス呼び出しが（例えば、ゲストＯＳ又はホストされるＶＭのアプリケーションから）受信され得る。ブロック５０４において、異なるとともに同様でないＧＰＵがグラフィックスＡＰＩにより抽象化されているかどうか、及びそのグラフィックスコンテキスト情報が蓄積されているかどうかについての判定が行われ得る。異なるとともに同様でないＧＰＵがグラフィックスＡＰＩにより抽象化されており、グラフィックスコンテキスト情報が蓄積されていると判定すると、方法５００はブロック５１０に進むことができる。
【００４３】
ブロック５１０において、（ソースホストコンピュータ上のＧＰＵのグラフィックスＡＰＩによる以前の抽象化に対して）累積されたグラフィックスコンテキスト情報を使用して、グラフィックスＡＰＩにより抽象化されている現在のＧＰＵについての新しいグラフィックスコンテキストが構成され得る。前述したように、グラフィックスコンテキスト情報は、グラフィックス動作により使用されている全てのリソースに関する情報及びそれらの現在の状態を含み得る。その後、ブロック５１２において、（ソースホストコンピュータ上のＧＰＵのグラフィックスＡＰＩによる以前の抽象化に対する）古いグラフィックスコンテキストが破棄され得る。
【００４４】
ブロック５０４（グラフィックスＡＰＩのＧＰＵ抽象化が変更されていない場合）から、又はブロック５１２（新しいグラフィックスコンテキストを構成し、古いグラフィックスコンテキストを破棄すると）から、方法５００はブロック５０６に進むことができる。ブロック５０６において、ホストされるＶＭ内のグラフィックスドライバが、グラフィックス呼び出しを実施するように潜在的なＧＰＵを駆動するために、１回又は複数回呼び出され得る。ブロック５０８において、グラフィックス呼び出しを実施するように潜在的なＧＰＵを駆動するグラフィックスドライバの応答、特に様々なリソースの使用状況及び状態が、（別のライブマイグレーションの場合に）グラフィックスＡＰＩのためのグラフィックスコンテキストを維持するために、監視され、そしてトラッキングされることができる。
【００４５】
その後、方法５００はブロック５０２に戻り、存在する場合には次のグラフィックス呼び出しを待って提供する。
【００４６】
図６は、本開示の選択された態様を実施するためにクライアント装置又はサーバとして使用するのに適した一例のコンピュータシステムを例示する。図示されるように、コンピュータ６００は、１つ若しくは複数のプロセッサ又はプロセッサコア６０２、及びシステムメモリ６０４を含み得る。請求項を含む本出願の目的のために、“プロセッサ”及び“プロセッサコア”という用語は、文脈上特に明記しない限り、同義語と見なすことができる。その上、コンピュータ６００は、（ディスケット、ハードドライブ、コンパクトディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）などのような）大容量記憶装置６０６、（ディスプレイ、キーボード、カーソル制御などのような）入力／出力装置６０８、及び（ネットワークインタフェースカード、モデムなどのような）通信インタフェース６１０を含み得る。これらの要素は、１つ又は複数のバスを表すことができるシステムバス６１２を介して互いに結合され得る。複数のバスの場合、それらは１つ又は複数のバスブリッジ（図示せず）によってブリッジされてもよい。
【００４７】
これらの要素のそれぞれは、当該技術分野において公知の従来の機能を実行し得る。特に、システムメモリ６０４及び大容量記憶装置６０６は、集合的に計算ロジック６２２と呼ばれる、先に説明したメモリマネージャ１３２及び／若しくはグラフィックス命令パーサ１３４、並びに／又はグラフィックスプロキシライブラリ１５２を含むＶＭＭ１１４と関連付けられた動作を実施するプログラミング命令の作業用コピー及び永久コピーを記憶するために使用されてもよい。様々な要素は、（複数の）プロセッサ６０２によりサポートされるアセンブラ命令、又はそのような命令にコンパイルされ得る例えば“Ｃ”のような高水準言語によって実施され得る。
【００４８】
これらの要素６１０〜６１２の数、性能、及び／又は能力は、コンピュータ６００が、クライアント装置又はサーバとして使用されるかどうかに応じて変わり得る。クライアント装置として使用する場合、これらの要素６１０〜６１２の性能、及び／又は能力は、クライアント装置が、固定装置、又はスマートフォン、計算タブレット、ウルトラブック、若しくはラップトップのようなモバイル装置であるかどうかに応じて変わり得る。そうでなければ、要素６１０〜６１２の構成は既知であり、したがって、これ以上は説明されない。
【００４９】
当業者には理解されるように、本開示は、方法又はコンピュータプログラム製品として具現化されてもよい。したがって、本開示は、前述のように、ハードウェア内に具現化されることに加えて、完全なソフトウェアの実施例（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）か、又は、全て一般に“回路”、“モジュール”、若しくは“システム”と称され得るソフトウェア及びハードウェアの態様を組み合わせた実施例の形態を取ることができる。また、本開示は、媒体内に具現化されたコンピュータ使用可能なプログラムコードを有する、任意の有形又は非一時的な表現媒体内に具現化されたコンピュータプログラム製品の形態を取ることができる。
【００５０】
図７は、装置による命令の実行に応答して装置に本開示の選択された態様を実施させる命令を記憶するための使用に適している場合がある一例のコンピュータ読み取り可能な非一時的記憶媒体を例示する。図示されるように、非一時的なコンピュータ読み取り可能な記憶媒体７０２は、複数のプログラミング命令７０４を含み得る。プログラミング命令７０４は、プログラミング命令の実行に応答して、例えば、メモリマネージャ１３２及び／若しくはグラフィックス命令パーサ１３４、並びに／又はグラフィックスプロキシライブラリ１５２を含むＶＭＭ１１４と関連付けられた様々な動作を実行するために、装置、例えばコンピュータ６００を有効にするように構成され得る。代替的な実施例では、その代わりに、プログラミング命令７０４は、複数のコンピュータ読み取り可能な非一時的記憶媒体７０２上に配置され得る。代替的な実施例では、プログラミング命令７０４は、信号などのコンピュータ読み取り可能な一時的記憶媒体７０２上に配置され得る。
【００５１】
１つ又は複数のコンピュータ使用可能な媒体又はコンピュータ読み取り可能な媒体の任意の組み合わせを利用することができる。コンピュータ使用可能な媒体又はコンピュータ読み取り可能な媒体は、例えば、電子、磁気、光学、電磁気、赤外線、若しくは半導体のシステム、装置、デバイス、又は伝播媒体であってもよいが、これらに限定されない。コンピュータ読み取り可能な媒体のより具体的な例（非限定的なリスト）は、下記の、１つ又は複数のワイヤを有する電気的接続、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、消去可能なプログラマブル読み出し専用メモリ（ＥＰＲＯＭ又はフラッシュメモリ）、光ファイバ、ポータブルコンパクトディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、光学記憶装置、インターネット若しくはイントラネットをサポートする伝送媒体のような伝送媒体、又は磁気記憶装置を含む。プログラムが、例えば、紙又は他の媒体の光学走査を介して電子的に取り込まれ、その後、必要に応じてコンパイルされ、解釈され、又は適切な方法で処理され、次いでコンピュータメモリに記憶されるので、コンピュータ使用可能な媒体又はコンピュータ読み取り可能な媒体は、プログラムが印刷される紙又は別の適切な媒体であってもよいことに注意が必要である。この文献の文脈において、コンピュータ使用可能な媒体又はコンピュータ読み取り可能な媒体は、命令実行システム、装置、若しくはデバイスによって、又はそれに関連して使用するためのプログラムを含む、記憶する、通信する、伝播する、又は運ぶことができる任意の媒体であり得る。コンピュータ使用可能な媒体は、ベースバンドにおいて又は搬送波の一部として、媒体とともに具現化されたコンピュータで使用可能なプログラムコードを有する伝播されたデータ信号を含み得る。コンピュータ使用可能なプログラムコードは、無線、有線、光ファイバケーブル、ＲＦなどを含むがこれに限定されない任意の適切な媒体を使用して伝送され得る。
【００５２】
本開示の動作を実行するためのコンピュータプログラムコードは、Ｊａｖａ（登録商標）、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋、又は同様のもののようなオブジェクト指向プログラミング言語、及び、「Ｃ」プログラミング言語又は同様のプログラミング言語のような従来の手続き型プログラミング言語を含む１つ又は複数のプログラミング言語の任意の組み合わせで記述され得る。プログラムコードは、完全にユーザのコンピュータ上で、一部分はユーザのコンピュータ上で、スタンドアロンのソフトウェアパッケージとして、一部分はユーザのコンピュータ上でかつ一部分はリモートコンピュータ上で、又は、完全にリモートコンピュータ若しくはサーバ上で、実行することができる。後者のシナリオでは、リモートコンピュータは、ローカルエリアネットワーク（ＬＡＮ）若しくはワイドエリアネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを介してユーザのコンピュータに接続されることができるか、又は（例えば、インターネットサービスプロバイダを使用してインターネットを介して）外部コンピュータに接続されることができる。
【００５３】
本開示は、本開示の実施例による方法、装置（システム）、及びコンピュータプログラム製品のフローチャート説明図及び／又はブロック図を参照して説明される。フローチャート説明図及び／又はブロック図の各ブロック、並びにフローチャート説明図及び／又はブロック図におけるブロックの組み合わせは、コンピュータプログラム命令により実施されることができる、ということが理解されることになる。これらのコンピュータプログラム命令は、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに提供されて機械を生成することができ、その結果、コンピュータ又は他のプログラム可能データ処理装置のプロセッサを介して実行される命令は、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実施するための手段を作成する。
【００５４】
これらのコンピュータプログラム命令は、同様に、コンピュータ又は他のプログラム可能なデータ処理装置に特定の方法で機能するよう指示することができるコンピュータ読み取り可能な媒体に記憶されることができ、その結果、コンピュータ読み取り可能な媒体に記憶された命令は、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実施する命令手段を含む製造品を生成する。
【００５５】
コンピュータプログラム命令は、同様に、コンピュータ又は他のプログラム可能データ処理装置にロードされて、コンピュータ又は他のプログラム可能な装置に一連の動作ステップを実行させて、コンピュータ実施プロセスを生成させ、その結果、コンピュータ又は他のプログラム可能な装置上で実行される命令は、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実施するためのプロセスを提供する。
【００５６】
図面におけるフローチャート及びブロック図は、本開示の様々な実施例によるシステム、方法、及びコンピュータプログラム製品の可能な実装例のアーキテクチャ、機能、及び動作を例示する。この点について、フローチャート又はブロック図における各ブロックは、指定された（複数の）論理機能を実施するための１つ又は複数の実行可能命令を含む、モジュール、セグメント、又はコードの一部を表し得る。いくつかの代替的な実施例では、ブロックにおいて言及されている機能は、図において言及されている順序から外れて発生することがある、ということに同様に注意が必要である。例えば、連続して示される２つのブロックは、実際には実質的に同時に実行されてもよく、又は、関連する機能性に依存して、ブロックが時々逆の順序で実行されてもよい。ブロック図及び／又はフローチャート説明図の各ブロック、そしてブロック図及び／又はフローチャート説明図におけるブロックの組み合わせは、指定された機能若しくは動作を実行する専用ハードウェアベースのシステム、又は、専用ハードウェアとコンピュータ命令の組み合わせにより実施されることができる、ということが同様に注意されることになる。
【００５７】
本明細書で使用される用語は、特定の実施例のみを説明するためのものであり、本開示を限定することを意図していない。ここで使用されるように、単数形を表す冠詞“ａ”、“ａｎ”、及び“ｔｈｅ”は、文脈がそうでない場合を明らかに示さない限り、同様に複数形を含むことを意図している。用語“備える（comprises）”及び／又は“備える（comprising）”は、本明細書で使用される場合、記述された特徴、整数、ステップ、動作、要素、及び／又は構成要素の存在を特定するが、しかし、１つ又は複数の他の特徴、整数、ステップ、動作、要素、構成要素、及び／又はそれらのグループの存在若しくは追加を排除するものではない、ということが更に理解されることになる。
【００５８】
実施例は、コンピュータプロセス、コンピュータのシステムとして、又はコンピュータ読み取り可能な媒体のコンピュータプログラム製品のような製造品として実施されてもよい。コンピュータプログラム製品は、コンピュータシステムによって読み取り可能であるとともに、コンピュータプロセスを実行するためのコンピュータプログラム命令を符号化するコンピュータ記憶媒体であってもよい。
【００５９】
下記の請求項における全ての手段又はステップ、さらに機能要素の対応する構造、材料、動作、及び等価物は、具体的に権利請求された他の請求項要素と組み合わせて機能を実行するための任意の構造、材料、又は動作を含むことを意図している。本開示の説明は、例示及び説明のために提示されているが、しかし、網羅的であること、又は開示された形式の開示に限定されることを意図していない。本開示の範囲及び趣旨から逸脱することなく、多くの変更及び変形が当業者には明らかであろう。この実施例は、本開示の原理及び実際の適用を最もよく説明し、意図される特定の用途に適している様々な変更を伴う実施例に関する開示を他の当業者が理解することを可能にするために、選択されて説明された。
【００６０】
再び図６を参照すると、一実施例では、プロセッサ６０２のうちの少なくとも１つは、（メモリ６０４及び記憶装置６０６に記憶する代わりに）計算ロジック６２２を有するメモリと共にパッケージ化されてもよい。一実施例では、プロセッサ６０２のうちの少なくとも１つは、システムインパッケージ（ＳｉＰ）を形成するために計算ロジック６２２を有するメモリと共にパッケージ化されてもよい。一実施例では、プロセッサ６０２のうちの少なくとも１つは、計算ロジック６２２を有するメモリと同じダイ上に統合され得る。一実施例では、プロセッサ６０２のうちの少なくとも１つは、システムオンチップ（ＳｏＣ）を形成するために計算ロジック６２２を有するメモリと共にパッケージ化されてもよい。少なくとも１つの実施例では、ＳｏＣは、例えば、下記には限定されないが、スマートフォン又は計算タブレットにおいて利用され得る。
【００６１】
したがって、下記を含むが、これに限定されない、本開示の様々な一例の実施例が説明される。
【００６２】
実例１は、計算のための装置であることができる。上記装置は、１つ又は複数の汎用プロセッサと、グラフィックス処理ユニットと、上記１つ又は複数の汎用プロセッサ及び上記グラフィックス処理ユニットに結合されたシステムメモリと、上記１つ又は複数の汎用プロセッサによりホストされる仮想マシンを管理する仮想マシンモニタとを備え得る。上記仮想マシンモニタは、メモリマネージャと、グラフィックス命令パーサとを含み得る。上記メモリマネージャは、上記１つ又は複数の汎用プロセッサにより実行されるべき上記仮想マシンのアプリケーションの命令により上記システムメモリのアクセスを管理するように構成され得る。アクセスの管理は、上記システムメモリの変更されたメモリページのトラッキングを含み得る。上記グラフィックス命令パーサは、上記アプリケーションにより上記グラフィックス処理ユニットに対して発行されたグラフィックス命令を分析して、上記グラフィックス命令により引き起こされた上記システムメモリに対する書き込みを検出し、上記メモリマネージャによる変更されたメモリページの上記トラッキングを増やすように構成され得る。
【００６３】
実例２は、実例１であることができ、上記仮想マシンモニタは、上記仮想マシンのうちの１つ又は複数を計算のための他の装置に選択的にライブマイグレートするライブマイグレーション機能であって、ライブマイグレートされている仮想マシンの現在のメモリ内容の上記他の装置に対する供給を含み、上記グラフィックス命令パーサにより増やされた、上記メモリマネージャによりトラッキングされる変更されたメモリページを利用する、ライブマイグレーション機能を更に含む。
【００６４】
実例３は、実例１又は実例２であることができ、上記グラフィックス命令パーサは、システムメモリに対する書き込みを検出すると、システムメモリに対する上記書き込みのゲストグラフィックスメモリアドレスを取得し得る。
【００６５】
実例４は、実例３であることができ、上記グラフィックス命令パーサは、システムメモリに対する上記書き込みに関して取得された上記ゲストグラフィックスメモリアドレスに少なくとも部分的に基づいて、システムメモリに対する上記書き込みのホストグラフィックスメモリアドレスを更に計算し得る。
【００６６】
実例５は、実例４であることができ、上記グラフィックス命令パーサは、システムメモリに対する上記書き込みに関して計算された上記ホストグラフィックスメモリアドレスに少なくとも部分的に基づいて、システムメモリに対する上記書き込みのシステムメモリアドレスを更に取得し得る。
【００６７】
実例６は、実例５であることができ、上記グラフィックス命令パーサは、上記システムメモリアドレスを含む上記メモリページのうちの１つをダーティとして更にマークし得る。
【００６８】
実例７は、実例１から実例６のいずれか１つであることができ、上記グラフィックス命令パーサは、上記グラフィックス処理ユニットによりサポートされるグラフィックス命令を更に識別し得る。
【００６９】
実例８は、実例７であることができ、上記グラフィックス命令パーサは、上記グラフィックス処理ユニットのグラフィックスプロセッサタイプを識別し得る。
【００７０】
実例９は、実例１から実例６のいずれか１つであることができ、上記グラフィックス命令パーサは、上記グラフィックス命令を分析して、上記グラフィックス命令が上記グラフィックス処理ユニットによりサポートされているかどうかを更に判定し得る。
【００７１】
実例１０は、実例９であることができ、上記グラフィックス命令パーサは、上記グラフィックス命令のうちの第１のグラフィックス命令が上記グラフィックス処理ユニットによりサポートされていないと判定すると、上記第１のグラフィックス命令が、上記グラフィックス処理ユニットによりサポートされる形式に変更されることができるか、又は上記グラフィックス処理ユニットによりサポートされる機能的に等価なグラフィックス命令によって置き換えられることができるかどうかを更に判定し得る。
【００７２】
実例１１は、実例１０であることができ、上記グラフィックス命令パーサは、上記第１のグラフィックス命令が上記グラフィックス処理ユニットによりサポートされる形式に変更されることができると判定すると、上記第１のグラフィックス命令を上記グラフィックス処理ユニットによりサポートされる形式に更に変更し得るか、又は上記グラフィックス処理ユニットによりサポートされる他の機能的に等価なグラフィックス命令の存在を判定すると、上記第１のグラフィックス命令を上記他の機能的に等価なグラフィックス命令によって更に置き換え得る。
【００７３】
実例１２は、実例１から実例６のいずれか１つであることができ、上記仮想マシンのうちの少なくとも第１の仮想マシンにおいてインスタンス化されるべきグラフィックスプロキシライブラリを更に含む。上記グラフィックスプロキシライブラリは、上記第１の仮想マシンのための上記グラフィックス処理ユニットを抽象化するグラフィックスアプリケーションプログラミングインタフェースのコンテキストを維持し得る。
【００７４】
実例１３は、実例１２であることができ、上記グラフィックスプロキシライブラリは、維持される上記コンテキストが、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される異なるグラフィックス処理ユニット用であるかどうかを更に検出し得る。
【００７５】
実例１４は、実例１３であることができ、上記グラフィックスプロキシライブラリは、維持される上記コンテキストが、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される異なるグラフィックス処理ユニット用であることを検出すると、上記第１の仮想マシンが上記計算のための他の装置からライブマイグレートされてしまう前に、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される上記異なるグラフィックス処理ユニット用の上記グラフィックスプロキシライブラリにより維持されるコンテキストを使用して、上記グラフィックスアプリケーションプログラミングインタフェースの上記コンテキストを構成し得る。
【００７６】
実例１５は、計算のための装置であって、１つ又は複数の汎用プロセッサと、グラフィックス処理ユニットと、上記１つ又は複数の汎用プロセッサ及び上記グラフィックス処理ユニットに結合されたシステムメモリと、上記１つ又は複数の汎用プロセッサによりホストされる仮想マシンを管理する仮想マシンモニタとを備える。上記仮想マシンモニタは、メモリマネージャと、グラフィックス命令パーサとを含み得る。上記メモリマネージャは、上記１つ又は複数の汎用プロセッサにより実行される上記仮想マシンのアプリケーションの命令により上記システムメモリのアクセスを管理するように構成され得る。上記グラフィックス命令パーサは、上記アプリケーションにより上記グラフィックス処理ユニットに対して発行されたグラフィックス命令を分析して、上記グラフィックス命令が上記グラフィックス処理ユニットによりサポートされているかどうかを判定するように構成され得る。
【００７７】
実例１６は、実例１５であることができ、上記グラフィックス命令パーサは、上記グラフィックス命令のうちの第１のグラフィックス命令が上記グラフィックス処理ユニットによりサポートされていないと判定すると、上記第１のグラフィックス命令が、上記グラフィックス処理ユニットによりサポートされる形式に変更されることができるか、又は上記グラフィックス処理ユニットによりサポートされる機能的に等価なグラフィックス命令によって置き換えられることができるかどうかを更に判定し得る。
【００７８】
実例１７は、実例１６であることができ、上記グラフィックス命令パーサは、上記第１のグラフィックス命令が上記グラフィックス処理ユニットによりサポートされる形式に変更されることができると判定すると、上記第１のグラフィックス命令を上記グラフィックス処理ユニットによりサポートされる形式に更に変更し得るか、又は上記グラフィックス処理ユニットによりサポートされる他の機能的に等価なグラフィックス命令の存在を判定すると、上記第１のグラフィックス命令を上記他の機能的に等価なグラフィックス命令によって更に置き換え得る。
【００７９】
実例１８は、実例１５から実例１７のいずれか１つであることができ、上記仮想マシンのうちの少なくとも第１の仮想マシンにおいてインスタンス化されるべきグラフィックスプロキシライブラリであって、上記第１の仮想マシンのための上記グラフィックス処理ユニットを抽象化するグラフィックスアプリケーションプログラミングインタフェースのコンテキストを維持し得るグラフィックスプロキシライブラリを更に備える。
【００８０】
実例１９は、実例１８であることができ、上記グラフィックスプロキシライブラリは、維持される上記コンテキストが、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される異なるグラフィックス処理ユニット用であるかどうかを更に検出することができ、上記２つのグラフィックス処理ユニットは異なるグラフィックス処理ユニットである。
【００８１】
実例２０は、実例１９であることができ、上記グラフィックスプロキシライブラリは、上記コンテキストが、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される異なるグラフィックス処理ユニットのために維持されていることを検出すると、上記第１の仮想マシンが上記計算のための他の装置からライブマイグレートされてしまう前に、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される上記異なるグラフィックス処理ユニット用の上記グラフィックスプロキシライブラリにより維持されるコンテキストを使用して、上記グラフィックスアプリケーションプログラミングインタフェースの上記コンテキストを構成し得る。
【００８２】
実例２１は、計算のための装置であって、１つ又は複数の汎用プロセッサと、グラフィックス処理ユニットと、上記１つ又は複数の汎用プロセッサ及び上記グラフィックス処理ユニットに結合されたシステムメモリと、上記１つ又は複数の汎用プロセッサによりホストされる仮想マシンを管理する仮想マシンモニタと、上記仮想マシンのうちの少なくとも第１の仮想マシンにおいてインスタンス化されるべきグラフィックスプロキシライブラリとを備える。上記グラフィックスプロキシライブラリは、上記第１の仮想マシンのための上記グラフィックス処理ユニットを抽象化するグラフィックスアプリケーションプログラミングインタフェースのコンテキストを維持するように構成され得る。
【００８３】
実例２２は、実例２１であることができ、上記グラフィックスプロキシライブラリは、維持される上記コンテキストが、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される異なるグラフィックス処理ユニット用であるかどうかを更に検出し得る。
【００８４】
実例２３は、実例２２であることができ、上記グラフィックスプロキシライブラリは、上記コンテキストが、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化されている異なるグラフィックス処理ユニットのために維持されていることを検出すると、上記第１の仮想マシンが上記計算のための他の装置からライブマイグレートされてしまう前に、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される上記異なるグラフィックス処理ユニット用の上記グラフィックスプロキシライブラリにより維持されるコンテキストを使用して、上記グラフィックスアプリケーションプログラミングインタフェースの上記コンテキストを構成し得る。
【００８５】
実例２４は、計算のための方法であって、計算システムのグラフィックス命令パーサにより、上記計算システムの仮想マシンのアプリケーションによって上記計算システムのグラフィックス処理ユニットに対して発行されたグラフィックス命令を分析するステップと、上記グラフィックス命令パーサにより、上記グラフィックス命令により引き起こされた上記計算システムのシステムメモリに対する書き込みを検出するステップと、システムメモリに対する書き込みを検出すると、上記グラフィックス命令パーサにより、上記計算システムの仮想マシンモニタのメモリマネージャによる変更されたメモリページのトラッキングを増やすステップとを含む。
【００８６】
実例２５は、実例２４であることができ、上記仮想マシンのうちの１つ又は複数を他の計算システムにライブマイグレートするステップであって、ライブマイグレートされている仮想マシンの現在のメモリ内容の上記他の計算システムに対する供給を含み、上記グラフィックス命令パーサにより増やされた、上記メモリマネージャによりトラッキングされる変更されたメモリページを利用する、ステップを更に含む。
【００８７】
実例２６は、実例２４又は実例２５であることができ、上記グラフィックス命令パーサにより、システムメモリに対する書き込みを検出すると、システムメモリに対する上記書き込みのゲストグラフィックスメモリアドレスを取得するステップを更に含む。
【００８８】
実例２７は、実例２６であることができ、上記グラフィックス命令パーサにより、システムメモリに対する上記書き込みに関して取得された上記ゲストグラフィックスメモリアドレスに少なくとも部分的に基づいて、システムメモリに対する上記書き込みのホストグラフィックスメモリアドレスを更に計算するステップを更に含む。
【００８９】
実例２８は、実例２７であることができ、上記グラフィックス命令パーサにより、システムメモリに対する上記書き込みに関して計算された上記ホストグラフィックスメモリアドレスに少なくとも部分的に基づいて、システムメモリに対する上記書き込みのシステムメモリアドレスを更に取得するステップを更に含む。
【００９０】
実例２９は、実例２８であることができ、増やすステップは、上記グラフィックス命令パーサにより、上記システムメモリアドレスを含む上記メモリページのうちの１つをダーティとしてマークするステップを含み得る。
【００９１】
実例３０は、実例２４から実例２９のいずれか１つであることができ、上記グラフィックス命令パーサにより、上記グラフィックス処理ユニットによりサポートされるグラフィックス命令を識別するステップを更に含む。
【００９２】
実例３１は、実例３０であることができ、上記グラフィックス命令パーサにより、上記グラフィックス処理ユニットのグラフィックスプロセッサタイプを識別するステップを更に含む。
【００９３】
実例３２は、実例２４から実例３０のいずれか１つであることができ、上記グラフィックス命令パーサにより、上記グラフィックス命令を分析して、上記グラフィックス命令が上記グラフィックス処理ユニットによりサポートされているかどうかを判定するステップを更に含む。
【００９４】
実例３３は、実例３２であることができ、上記グラフィックス命令パーサにより、上記グラフィックス命令のうちの第１のグラフィックス命令が上記グラフィックス処理ユニットによりサポートされていないと判定すると、上記第１のグラフィックス命令が、上記グラフィックス処理ユニットによりサポートされる形式に変更されることができるか、又は上記グラフィックス処理ユニットによりサポートされる機能的に等価なグラフィックス命令によって置き換えられることができるかどうかを判定するステップを更に含む。
【００９５】
実例３４は、実例３３であることができ、上記グラフィックス命令パーサにより、上記第１のグラフィックス命令が上記グラフィックス処理ユニットによりサポートされる形式に変更されることができると判定すると、上記第１のグラフィックス命令を上記グラフィックス処理ユニットによりサポートされる形式に変更するステップか、又は上記グラフィックス処理ユニットによりサポートされる他の機能的に等価なグラフィックス命令の存在を判定すると、上記第１のグラフィックス命令を上記他の機能的に等価なグラフィックス命令によって置き換えるステップを更に含む。
【００９６】
実例３５は、実例２４から実例３０のいずれか１つであることができ、上記仮想マシンのうちの第１の仮想マシンにおけるグラフィックスプロキシライブラリにより、上記第１の仮想マシンのための上記グラフィックス処理ユニットを抽象化するグラフィックスアプリケーションプログラミングインタフェースのコンテキストを維持するステップを更に含む。
【００９７】
実例３６は、実例３５であることができ、上記グラフィックスプロキシライブラリにより、維持される上記コンテキストが、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される異なるグラフィックス処理ユニット用であるかどうかを検出するステップを更に含む。
【００９８】
実例３７は、実例３６であることができ、上記グラフィックスプロキシライブラリにより、維持される上記コンテキストが、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される異なるグラフィックス処理ユニット用であることを検出すると、上記第１の仮想マシンが上記計算システムにライブマイグレートされてしまう前に、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される上記異なるグラフィックス処理ユニット用の上記グラフィックスプロキシライブラリにより維持されるコンテキストを使用して、上記グラフィックスアプリケーションプログラミングインタフェースの上記コンテキストを構成するステップを更に含む。
【００９９】
実例３８は、計算のための方法であって、計算システムのグラフィックス命令パーサにより、上記計算システムの仮想マシンのアプリケーションによって上記計算システムのグラフィックス処理ユニットに対して発行されたグラフィックス命令を分析して、上記グラフィックス命令が上記グラフィックス処理ユニットによりサポートされているかどうかを判定するステップと、上記グラフィックス命令パーサにより、上記グラフィックス命令のうちの第１のグラフィックス命令が上記グラフィックス処理ユニットによりサポートされていないと判定すると、上記第１のグラフィックス命令が、上記グラフィックス処理ユニットによりサポートされる形式に変更されることができるか、又は上記グラフィックス処理ユニットによりサポートされる機能的に等価なグラフィックス命令によって置き換えられることができるかどうかを判定するステップとを含む。
【０１００】
実例３９は、実例３８であることができ、上記グラフィックス命令パーサにより、上記第１のグラフィックス命令が上記グラフィックス処理ユニットによりサポートされる形式に変更されることができると判定すると、上記第１のグラフィックス命令を上記グラフィックス処理ユニットによりサポートされる形式に変更するステップか、又は上記グラフィックス命令パーサにより、上記グラフィックス処理ユニットによりサポートされる他の機能的に等価なグラフィックス命令の存在を判定すると、上記第１のグラフィックス命令を上記他の機能的に等価なグラフィックス命令によって置き換えるステップを更に含む。
【０１０１】
実例４０は、実例３８から実例３９のいずれか１つであることができ、上記仮想マシンのうちの第１の仮想マシンにおけるグラフィックスプロキシライブラリにより、上記第１の仮想マシンのための上記グラフィックス処理ユニットを抽象化するグラフィックスアプリケーションプログラミングインタフェースのコンテキストを維持するステップを更に含む。
【０１０２】
実例４１は、実例４０であることができ、上記グラフィックスプロキシライブラリにより、維持される上記コンテキストが、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される異なるグラフィックス処理ユニット用であるかどうかを検出するステップを更に含み、上記２つのグラフィックス処理ユニットは異なるグラフィックス処理ユニットである。
【０１０３】
実例４２は、実例４１であることができ、上記グラフィックスプロキシライブラリにより、維持される上記コンテキストが、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化されている異なるグラフィックス処理ユニット用であることを検出すると、上記第１の仮想マシンが上記計算システムにライブマイグレートされてしまう前に、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される上記異なるグラフィックス処理ユニット用の上記グラフィックスプロキシライブラリにより維持されるコンテキストを使用して、上記グラフィックスアプリケーションプログラミングインタフェースの上記コンテキストを構成するステップを更に含む。
【０１０４】
実例４３は、計算のための方法であって、計算システムの複数の仮想マシンのうちの第１の仮想マシンのグラフィックスプロキシライブラリにより、上記第１の仮想マシンのために、上記計算システムのグラフィックス処理ユニットを抽象化するグラフィックスアプリケーションプログラミングインタフェースのコンテキストを維持するステップと、上記グラフィックスプロキシライブラリにより、維持される上記コンテキストが、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される異なるグラフィックス処理ユニット用であるかどうかを検出するステップとを含む。
【０１０５】
実例４４は、実例４３であることができ、上記コンテキストが、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化されている異なるグラフィックス処理ユニットのために維持されていることを検出すると、上記第１の仮想マシンが上記計算システムにライブマイグレートされてしまう前に、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される上記異なるグラフィックス処理ユニット用の上記グラフィックスプロキシライブラリにより維持されるコンテキストを使用して、上記グラフィックスアプリケーションプログラミングインタフェースの上記コンテキストを構成するステップを更に含む。
【０１０６】
実例４５は、命令が記憶された少なくとも１つのコンピュータ読み取り可能な媒体であることができ、計算システムのプロセッサによる実行に応答して、上記命令は上記計算システムに、グラフィックス命令パーサを実施させて、上記計算システムの仮想マシンのアプリケーションによって上記計算システムのグラフィックス処理ユニットに対して発行されたグラフィックス命令を分析させ、上記グラフィックス命令により引き起こされた上記計算システムのシステムメモリに対する書き込みを検出させ、システムメモリに対する書き込みを検出すると、上記計算システムの仮想マシンモニタのメモリマネージャによる変更されたメモリページのトラッキングを増やさせる。
【０１０７】
実例４６は、実例４５であることができ、上記コンピュータシステムは、上記メモリマネージャを含む上記仮想マシンモニタと、上記仮想マシンのうちの１つ又は複数を他の計算システムに選択的にライブマイグレートするライブマイグレーション機能であって、ライブマイグレートされている仮想マシンの現在のメモリ内容の上記他の計算システムに対する供給を含み、上記グラフィックス命令パーサにより増やされた、上記メモリマネージャによりトラッキングされる変更されたメモリページを利用する、ライブマイグレーション機能とを更に実施させられ得る。
【０１０８】
実例４７は、実例４５又は実例４６であることができ、上記グラフィックス命令パーサは、システムメモリに対する書き込みを検出すると、システムメモリに対する上記書き込みのゲストグラフィックスメモリアドレスを更に取得し得る。
【０１０９】
実例４８は、実例４７であることができ、上記グラフィックス命令パーサは、システムメモリに対する上記書き込みに関して取得された上記ゲストグラフィックスメモリアドレスに少なくとも部分的に基づいて、システムメモリに対する上記書き込みのホストグラフィックスメモリアドレスを更に計算し得る。
【０１１０】
実例４９は、実例４８であることができ、上記グラフィックス命令パーサは、システムメモリに対する上記書き込みに関して計算された上記ホストグラフィックスメモリアドレスに少なくとも部分的に基づいて、システムメモリに対する上記書き込みのシステムメモリアドレスを更に取得し得る。
【０１１１】
実例５０は、実例４９であることができ、上記グラフィックス命令パーサは、上記システムメモリアドレスを含む上記メモリページのうちの１つをダーティとして更にマークし得る。
【０１１２】
実例５１は、実例４５から実例５０のいずれか１つであることができ、上記グラフィックス命令パーサは、上記グラフィックス処理ユニットによりサポートされるグラフィックス命令を更に識別し得る。
【０１１３】
実例５２は、実例５１であることができ、上記グラフィックス命令パーサは、上記グラフィックス処理ユニットのグラフィックスプロセッサタイプを識別し得る。
【０１１４】
実例５３は、実例４５から実例５０のいずれか１つであることができ、上記グラフィックス命令パーサは、上記グラフィックス命令を分析して、上記グラフィックス命令が上記グラフィックス処理ユニットによりサポートされているかどうかを更に判定し得る。
【０１１５】
実例５４は、実例５３であることができ、上記グラフィックス命令パーサは、上記グラフィックス命令のうちの第１のグラフィックス命令が上記グラフィックス処理ユニットによりサポートされていないと判定すると、上記第１のグラフィックス命令が、上記グラフィックス処理ユニットによりサポートされる形式に変更されることができるか、又は上記グラフィックス処理ユニットによりサポートされる機能的に等価なグラフィックス命令によって置き換えられることができるかどうかを更に判定し得る。
【０１１６】
実例５５は、実例５４であることができ、上記グラフィックス命令パーサは、上記第１のグラフィックス命令が上記グラフィックス処理ユニットによりサポートされる形式に変更されることができると判定すると、上記第１のグラフィックス命令を上記グラフィックス処理ユニットによりサポートされる形式に更に変更し得るか、又は上記グラフィックス処理ユニットによりサポートされる他の機能的に等価なグラフィックス命令の存在を判定すると、上記第１のグラフィックス命令を上記他の機能的に等価なグラフィックス命令によって更に置き換え得る。
【０１１７】
実例５６は、実例４５から実例５０のいずれか１つであることができ、上記コンピュータシステムは、上記仮想マシンのうちの少なくとも第１の仮想マシンにおいてインスタンス化されるべきグラフィックスプロキシライブラリであって、上記第１の仮想マシンのための上記グラフィックス処理ユニットを抽象化するグラフィックスアプリケーションプログラミングインタフェースのコンテキストを維持することができるグラフィックスプロキシライブラリを更に実施させられ得る。
【０１１８】
実例５７は、実例５６であることができ、上記グラフィックスプロキシライブラリは、維持される上記コンテキストが、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される異なるグラフィックス処理ユニット用であるかどうかを更に検出し得る。
【０１１９】
実例５８は、実例５７であることができ、上記グラフィックスプロキシライブラリは、維持される上記コンテキストが、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される異なるグラフィックス処理ユニット用であることを検出すると、上記第１の仮想マシンが上記計算のための他の装置からライブマイグレートされてしまう前に、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される上記異なるグラフィックス処理ユニット用の上記グラフィックスプロキシライブラリにより維持されるコンテキストを使用して、上記グラフィックスアプリケーションプログラミングインタフェースの上記コンテキストを構成し得る。
【０１２０】
実例５９は、命令が記憶された少なくとも１つのコンピュータ読み取り可能な媒体であることができ、計算システムのプロセッサによる実行に応答して、上記命令は上記計算システムに、グラフィックス命令パーサを実施させて、上記計算システムの仮想マシンのアプリケーションによって上記計算システムのグラフィックス処理ユニットに対して発行されたグラフィックス命令を分析させ、上記グラフィックス命令が上記グラフィックス処理ユニットによりサポートされているかどうかを判定させ、上記グラフィックス命令のうちの第１のグラフィックス命令が上記グラフィックス処理ユニットによりサポートされていないと判定すると、上記第１のグラフィックス命令が、上記グラフィックス処理ユニットによりサポートされる形式に変更されることができるか、又は上記グラフィックス処理ユニットによりサポートされる機能的に等価なグラフィックス命令によって置き換えられることができるかどうかを判定させる。
【０１２１】
実例６０は、実例５９であることができ、上記グラフィックス命令パーサは、上記グラフィックス命令のうちの第１のグラフィックス命令が上記グラフィックス処理ユニットによりサポートされていないと判定すると、上記第１のグラフィックス命令が、上記グラフィックス処理ユニットによりサポートされる形式に変更されることができるか、又は上記グラフィックス処理ユニットによりサポートされる機能的に等価なグラフィックス命令によって置き換えられることができるかどうかを更に判定し得る。
【０１２２】
実例６１は、実例６０であることができ、上記グラフィックス命令パーサは、上記第１のグラフィックス命令が上記グラフィックス処理ユニットによりサポートされる形式に変更されることができると判定すると、上記第１のグラフィックス命令を上記グラフィックス処理ユニットによりサポートされる形式に更に変更し得るか、又は上記グラフィックス処理ユニットによりサポートされる他の機能的に等価なグラフィックス命令の存在を判定すると、上記第１のグラフィックス命令を上記他の機能的に等価なグラフィックス命令によって更に置き換え得る。
【０１２３】
実例６２は、実例５９から実例６１のいずれか１つであることができ、上記コンピュータシステムは、上記仮想マシンのうちの少なくとも第１の仮想マシンにおいてインスタンス化されるべきグラフィックスプロキシライブラリであって、上記第１の仮想マシンのための上記グラフィックス処理ユニットを抽象化するグラフィックスアプリケーションプログラミングインタフェースのコンテキストを維持することができるグラフィックスプロキシライブラリを更に実施させられ得る。
【０１２４】
実例６３は、実例６２であることができ、上記グラフィックスプロキシライブラリは、維持される上記コンテキストが、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される異なるグラフィックス処理ユニット用であるかどうかを更に検出することができ、上記２つのグラフィックス処理ユニットは異なるグラフィックス処理ユニットである。
【０１２５】
実例６４は、実例６３であることができ、上記グラフィックスプロキシライブラリは、上記コンテキストが、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される異なるグラフィックス処理ユニットのために維持されていることを検出すると、上記第１の仮想マシンが上記計算のための他の装置からライブマイグレートされてしまう前に、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される上記異なるグラフィックス処理ユニット用の上記グラフィックスプロキシライブラリにより維持されるコンテキストを使用して、上記グラフィックスアプリケーションプログラミングインタフェースの上記コンテキストを構成し得る。
【０１２６】
実例６５は、命令が記憶された少なくとも１つのコンピュータ読み取り可能な媒体であることができ、計算システムのプロセッサによる実行に応答して、上記命令は上記計算システムに、グラフィックスプロキシライブラリを実施させて、上記計算システムの複数の仮想マシンのうちの第１の仮想マシンのために、上記計算システムのグラフィックス処理ユニットを抽象化するグラフィックスアプリケーションプログラミングインタフェースのコンテキストを維持させるとともに、維持される上記コンテキストが、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される異なるグラフィックス処理ユニット用であるかどうかを検出させる。
【０１２７】
実例６６は、実例６５であることができ、上記グラフィックスプロキシライブラリは、上記コンテキストが、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化されている異なるグラフィックス処理ユニットのために維持されていることを検出すると、上記第１の仮想マシンが上記計算のための他の装置からライブマイグレートされてしまう前に、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される上記異なるグラフィックス処理ユニット用の上記グラフィックスプロキシライブラリにより維持されるコンテキストを使用して、上記グラフィックスアプリケーションプログラミングインタフェースの上記コンテキストを構成し得る。
【０１２８】
実例６７は、計算のための装置であることができ、１つ又は複数の汎用プロセッサと、グラフィックス処理ユニットと、上記１つ又は複数の汎用プロセッサ及び上記グラフィックス処理ユニットに結合されたシステムメモリと、上記１つ又は複数の汎用プロセッサによりホストされる仮想マシンを管理するための仮想マシンモニタ手段とを備える。上記仮想マシンモニタ手段は、上記１つ又は複数の汎用プロセッサにより実行されるべき上記仮想マシンのアプリケーションの命令により上記システムメモリのアクセスを管理するためのメモリ管理手段を含み得る。アクセスの管理は、上記システムメモリの変更されたメモリページのトラッキングを含み得る。上記仮想マシンモニタ手段は、上記アプリケーションにより上記グラフィックス処理ユニットに対して発行されたグラフィックス命令を分析して、上記グラフィックス命令により引き起こされた上記システムメモリに対する書き込みを検出し、上記メモリ管理手段による変更されたメモリページの上記トラッキングを増やすためのグラフィックス命令パージング（parsing）手段を更に含み得る。
【０１２９】
実例６８は、実例６７であることができ、上記仮想マシンモニタ手段は、上記仮想マシンのうちの１つ又は複数を計算のための他の装置に選択的にライブマイグレートするためのライブマイグレーション手段であって、ライブマイグレートされている仮想マシンの現在のメモリ内容の上記他の装置に対する供給を含み、上記グラフィックス命令パーサにより増やされた、上記メモリマネージャによりトラッキングされる変更されたメモリページを利用する、ライブマイグレーション手段を更に含み得る。
【０１３０】
実例６９は、実例６７又は実例６８であることができ、上記グラフィックス命令パージング手段は、システムメモリに対する書き込みを検出すると、システムメモリに対する上記書き込みのゲストグラフィックスメモリアドレスを取得するための手段を備え得る。
【０１３１】
実例７０は、実例６９であることができ、上記グラフィックス命令パージング手段は、システムメモリに対する上記書き込みに関して取得された上記ゲストグラフィックスメモリアドレスに少なくとも部分的に基づいて、システムメモリに対する上記書き込みのホストグラフィックスメモリアドレスを計算するための手段を備え得る。
【０１３２】
実例７１は、実例７０であることができ、上記グラフィックス命令パージング手段は、システムメモリに対する上記書き込みに関して計算された上記ホストグラフィックスメモリアドレスに少なくとも部分的に基づいて、システムメモリに対する上記書き込みのシステムメモリアドレスを取得するための手段を備え得る。
【０１３３】
実例７２は、実例７１であることができ、上記グラフィックス命令パージング手段は、上記システムメモリアドレスを含む上記メモリページのうちの１つをダーティとしてマークするための手段を備え得る。
【０１３４】
実例７３は、実例６７から実例７２のいずれか１つであることができ、上記グラフィックス命令パージング手段は、上記グラフィックス処理ユニットによりサポートされるグラフィックス命令を識別するための手段を備え得る。
【０１３５】
実例７４は、実例７３であることができ、上記グラフィックス命令パージング手段は、上記グラフィックス処理ユニットのグラフィックスプロセッサタイプを識別するための手段を備え得る。
【０１３６】
実例７５は、実例６７から実例７２のいずれか１つであることができ、上記グラフィックス命令パージング手段は、上記グラフィックス命令を分析して、上記グラフィックス命令が上記グラフィックス処理ユニットによりサポートされているかどうかを判定するための手段を備え得る。
【０１３７】
実例７０は、実例７５であることができ、上記グラフィックス命令パージング手段は、上記グラフィックス命令のうちの第１のグラフィックス命令が上記グラフィックス処理ユニットによりサポートされていないと判定すると、上記第１のグラフィックス命令が、上記グラフィックス処理ユニットによりサポートされる形式に変更されることができるか、又は上記グラフィックス処理ユニットによりサポートされる機能的に等価なグラフィックス命令によって置き換えられることができるかどうかを判定するための手段を備え得る。
【０１３８】
実例７７は、実例７６であることができ、上記グラフィックス命令パージング手段は、上記第１のグラフィックス命令が上記グラフィックス処理ユニットによりサポートされる形式に変更されることができると判定すると、上記第１のグラフィックス命令を上記グラフィックス処理ユニットによりサポートされる形式に変更するか、又は上記グラフィックス処理ユニットによりサポートされる他の機能的に等価なグラフィックス命令の存在を判定すると、上記第１のグラフィックス命令を上記他の機能的に等価なグラフィックス命令によって置き換えるための手段を備え得る。
【０１３９】
実例７８は、実例６７から実例７２のいずれか１つであることができ、上記仮想マシンのうちの少なくとも第１の仮想マシンにおいてインスタンス化されるべきグラフィックスプロキシライブラリ手段であって、上記第１の仮想マシンのための上記グラフィックス処理ユニットを抽象化するグラフィックスアプリケーションプログラミングインタフェースのコンテキストを維持するためのグラフィックスプロキシライブラリ手段を更に含む。
【０１４０】
実例７９は、実例７８であることができ、上記グラフィックスプロキシライブラリ手段は、維持される上記コンテキストが、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される異なるグラフィックス処理ユニット用であるかどうかを検出するための手段を備え得る。
【０１４１】
実例８０は、実例７９であることができ、上記グラフィックスプロキシライブラリ手段は、維持される上記コンテキストが、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される異なるグラフィックス処理ユニット用であることを検出すると、上記第１の仮想マシンが上記計算のための他の装置からライブマイグレートされてしまう前に、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される上記異なるグラフィックス処理ユニット用の上記グラフィックスプロキシライブラリにより維持されるコンテキストを使用して、上記グラフィックスアプリケーションプログラミングインタフェースの上記コンテキストを構成するための手段を備え得る。
【０１４２】
実例８１は、計算のための装置であることができ、１つ又は複数の汎用プロセッサと、グラフィックス処理ユニットと、上記１つ又は複数の汎用プロセッサ及び上記グラフィックス処理ユニットに結合されたシステムメモリと、上記１つ又は複数の汎用プロセッサによりホストされる仮想マシンを管理するための仮想マシンモニタ手段とを備える。上記仮想マシンモニタは、上記１つ又は複数の汎用プロセッサにより実行される上記仮想マシンのアプリケーションの命令により上記システムメモリのアクセスを管理するためのメモリ管理手段と、上記アプリケーションにより上記グラフィックス処理ユニットに対して発行されたグラフィックス命令を分析して、上記グラフィックス命令が上記グラフィックス処理ユニットによりサポートされているかどうかを判定するためのグラフィックス命令パージング手段とを含み得る。
【０１４３】
実例８２は、実例８１であることができ、上記グラフィックス命令パージング手段は、上記グラフィックス命令のうちの第１のグラフィックス命令が上記グラフィックス処理ユニットによりサポートされていないと判定すると、上記第１のグラフィックス命令が、上記グラフィックス処理ユニットによりサポートされる形式に変更されることができるか、又は上記グラフィックス処理ユニットによりサポートされる機能的に等価なグラフィックス命令によって置き換えられることができるかどうかを判定するための手段を備え得る。
【０１４４】
実例８３は、実例８２であることができ、上記グラフィックス命令パージング手段は、上記第１のグラフィックス命令が上記グラフィックス処理ユニットによりサポートされる形式に変更されることができると判定すると、上記第１のグラフィックス命令を上記グラフィックス処理ユニットによりサポートされる形式に変更するか、又は上記グラフィックス処理ユニットによりサポートされる他の機能的に等価なグラフィックス命令の存在を判定すると、上記第１のグラフィックス命令を上記他の機能的に等価なグラフィックス命令によって置き換えるための手段を備え得る。
【０１４５】
実例８４は、実例８１から実例８３のいずれか１つであることができ、上記仮想マシンのうちの少なくとも第１の仮想マシンにおいてインスタンス化されるべきグラフィックスプロキシライブラリ手段であって、上記第１の仮想マシンのための上記グラフィックス処理ユニットを抽象化するグラフィックスアプリケーションプログラミングインタフェースのコンテキストを維持するためのグラフィックスプロキシライブラリ手段を更に含む。
【０１４６】
実例８５は、実例８４であることができ、上記グラフィックスプロキシライブラリ手段は、維持される上記コンテキストが、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される異なるグラフィックス処理ユニット用であるかどうかを検出するための手段を備えることができ、上記２つのグラフィックス処理ユニットは異なるグラフィックス処理ユニットである。
【０１４７】
実例８６は、実例８５であることができ、上記グラフィックスプロキシライブラリ手段は、上記コンテキストが、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される異なるグラフィックス処理ユニットのために維持されていることを検出すると、上記第１の仮想マシンが上記計算のための他の装置からライブマイグレートされてしまう前に、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される上記異なるグラフィックス処理ユニット用の上記グラフィックスプロキシライブラリにより維持されるコンテキストを使用して、上記グラフィックスアプリケーションプログラミングインタフェースの上記コンテキストを構成するための手段を備え得る。
【０１４８】
実例８７は、計算のための装置であることができ、１つ又は複数の汎用プロセッサと、グラフィックス処理ユニットと、上記１つ又は複数の汎用プロセッサ及び上記グラフィックス処理ユニットに結合されたシステムメモリと、上記１つ又は複数の汎用プロセッサによりホストされる仮想マシンを管理するための仮想マシンモニタ手段と、上記仮想マシンのうちの少なくとも第１の仮想マシンにおいてインスタンス化されるべきグラフィックスプロキシライブラリ手段であって、上記第１の仮想マシンのための上記グラフィックス処理ユニットを抽象化するグラフィックスアプリケーションプログラミングインタフェースのコンテキストを維持するためのグラフィックスプロキシライブラリ手段とを含む。
【０１４９】
実例８８は、実例８７であることができ、上記グラフィックスプロキシライブラリ手段は、維持される上記コンテキストが、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される異なるグラフィックス処理ユニット用であるかどうかを検出するための手段を備え得る。
【０１５０】
実例８９は、実例８８であることができ、上記グラフィックスプロキシライブラリ手段は、上記コンテキストが、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化されている異なるグラフィックス処理ユニットのために維持されていることを検出すると、上記第１の仮想マシンが上記計算のための他の装置からライブマイグレートされてしまう前に、上記グラフィックスアプリケーションプログラミングインタフェースにより抽象化される上記異なるグラフィックス処理ユニット用の上記グラフィックスプロキシライブラリにより維持されるコンテキストを使用して、上記グラフィックスアプリケーションプログラミングインタフェースの上記コンテキストを構成するための手段を備え得る。
【０１５１】
本開示の精神又は範囲から逸脱することなく、開示された装置及び関連する方法の開示された実施例において、様々な変更及び変形が可能であることは、当業者には明らかであろう。したがって、本開示は、変更及び変形が任意の請求項及びそれらの等価物の範囲内に入ることを条件として、上記で開示された実施例の変更及び変形を包含することが意図される。
【図１】
0006472881.tif 000002
【図２】
0006472881.tif 000003
【図３】
0006472881.tif 000004
【図４】
0006472881.tif 000005
【図５】
0006472881.tif 000006
【図６】
0006472881.tif 000007
【図７】
0006472881.tif 000008