仮想マシン間でグラフィックプロセッサの利用を調整するように構成されたコンピュータシステムであって、プロセッサと、第1の3Dグラフィック演算装置と、第2の3Dグラフィック演算装置と、前記コンピュータシステムが動作するときに少なくとも前記プロセッサと通信するメモリであって、前記メモリは、実行時に前記プロセッサに、第1の3Dグラフィック演算装置で3Dグラフィックを描画するための1群の仮想マシンを割り当てさせ、前記第1の3Dグラフィック演算装置がオーバコミットされていることを、少なくとも、前記第1の3Dグラフィック演算装置がコマンドに応答するために要する時間に基づいて判定させ、少なくとも前記第1の3Dグラフィック演算装置がオーバコミットされていると判定したことに応答して、第1の仮想マシンを前記1群の仮想マシンから第2のグラフィック演算装置に移動させるコンピュータ可読命令を格納する、メモリと、を備えたことを特徴とするコンピュータシステム。実行時に前記プロセッサに前記第1の仮想マシンを前記第2のグラフィック演算装置に移動させる前記コンピュータ可読命令は、実行時に前記プロセッサに、前記第2のグラフィック演算装置が制御する利用可能なグラフィックメモリの推定量が閾値より大きいと判定したことに応答して、前記第1の仮想マシンを前記第2のグラフィック演算装置に移動させるコンピュータ可読命令をさらに含むことを特徴とする請求項1に記載のコンピュータシステム。実行時に前記プロセッサに前記第1の3Dグラフィック演算装置がオーバコミットされていると判定させる前記コンピュータ可読命令は、実行時に前記プロセッサに、前記第1の3Dグラフィック演算装置がオーバコミットされていると、前記第1の仮想マシンが開始したダイレクトメモリアクセスのトランザクションの平均待ち時間に基づいて判定させるコンピュータ可読命令をさらに含むことを特徴とする請求項1に記載のコンピュータシステム。実行時に前記プロセッサに前記第1の仮想マシンを前記第2のグラフィック演算装置に移動させる前記コンピュータ可読命令は、実行時に前記プロセッサに、前記第2のグラフィック演算装置に割り当てられた第2の仮想マシンに対するダイレクトメモリアクセスのトランザクションの平均待ち時間が閾値未満であると判定したことに応答して、前記第1の仮想マシンを移動させるコンピュータ可読命令をさらに含むことを特徴とする請求項1に記載のコンピュータシステム。実行時に前記プロセッサに前記第1の仮想マシンを前記第2のグラフィック演算装置に移動させる前記コンピュータ可読命令は、実行時に前記プロセッサに、前記第2のグラフィック演算装置に割り当てられる仮想マシンの数が閾値未満であると判定したことに応答して、前記第1の仮想マシンを移動させるコンピュータ可読命令をさらに含むことを特徴とする請求項1に記載のコンピュータシステム。前記コンピュータ可読命令は、実行時に前記プロセッサに、前記第1のグラフィック演算装置および前記第2のグラフィック演算装置の機能を決定させるコンピュータ可読命令をさらに含むことを特徴とする請求項1に記載のコンピュータシステム。仮想マシン間でグラフィック演算装置の利用を調整するためのコンピュータ可読命令を含むコンピュータ可読記憶媒体であって、前記コンピュータ可読記憶媒体は、実行時に前記プロセッサに、第1の仮想マシンを第1の3Dグラフィック演算装置に割り当てる要求を受信させ、前記第1の仮想マシンに対して3Dグラフィックを描画するために利用されるグラフィックメモリの量を推定させ、前記第1のグラフィック演算装置でグラフィックを描画するために割り当てられた1群の仮想マシンが発行したダイレクトメモリアクセスのトランザクションに関連付けられる待ち時間の値が第1の閾値未満であると判定したことと、3Dグラフィックを描画するために利用されるグラフィックメモリの推定量が第2の閾値未満であると判定したこととに応答して、前記第1の3Dグラフィック演算装置を複数の3Dグラフィック演算装置から選択させ、前記第1の3Dグラフィック演算装置で3Dグラフィックを描画するための前記第1の仮想マシンを割り当てさせる命令を含むことを特徴とするコンピュータ可読記憶媒体。前記コンピュータ可読命令は、実行時に前記プロセッサに、前記第1の仮想マシンに対して3Dグラフィックを描画するために利用されるグラフィックメモリの量を、少なくとも、前記1群内の仮想マシンごとの画素の次元を特定する情報から推定させることを特徴とする請求項7に記載のコンピュータ可読記憶媒体。前記コンピュータ可読命令は、実行時に前記プロセッサに、前記第1の仮想マシンに対して3Dグラフィックを描画するために利用されるグラフィックメモリの量を、少なくとも、前記第1の3Dグラフィック演算装置が使用する圧縮率を特定する情報から推定させることを特徴とする請求項7に記載のコンピュータ可読記憶媒体。前記コンピュータ可読命令は、実行時に前記プロセッサに、前記第1の仮想マシンに対して3Dグラフィックを描画するために利用されるグラフィックメモリの量を、少なくとも、前記第1の仮想マシンに対して描画するためのサーフェスの推定数を特定する情報から推定させることを特徴とする請求項7に記載のコンピュータ可読記憶媒体。実行時に前記プロセッサに前記第1の3Dグラフィック演算装置を選択させる前記コンピュータ可読命令は、実行時に前記プロセッサに、グラフィックカーネルが発行した少なくとも1つのコマンドの待ち時間が第3の閾値未満であると判定したことに応答して、前記第1の3Dグラフィック演算装置を前記複数の3Dグラフィック演算装置から選択させるコンピュータ可読命令を含むことを特徴とする請求項7に記載のコンピュータ可読記憶媒体。実行時に前記プロセッサに前記第1の3Dグラフィック演算装置を選択させる前記コンピュータ可読命令は、実行時に前記プロセッサに、前記第1の3Dグラフィック演算装置に現在割り当てられている仮想マシンの数が第4の閾値未満であると判定したことに応答して、前記第1の3Dグラフィック演算装置を前記複数の3Dグラフィック演算装置から選択させるコンピュータ可読命令を含むことを特徴とする請求項7に記載のコンピュータ可読記憶媒体。前記コンピュータ可読命令は、実行時に前記プロセッサに、前記第1の3Dグラフィック演算装置がオーバコミットされていることを、少なくとも、前記第1の仮想マシンが開始したダイレクトメモリアクセスのグラフィックトランザクションの平均待ち時間に基づいて判定したことに応答して、前記第1の仮想マシンを第2のグラフィック演算装置に移動させることを特徴とする請求項7に記載のコンピュータ可読記憶媒体。前記コンピュータ可読命令は、実行時に前記プロセッサに、前記第1の3Dグラフィック演算装置がオーバコミットされていることを、少なくとも、グラフィックカーネルが前記第1の3Dグラフィック演算装置に発行したグラフィックコマンドの平均待ち時間に基づいて判定したことに応答して、前記第1の仮想マシンを第2のグラフィック演算装置に移動させることを特徴とする請求項7に記載のコンピュータ可読記憶媒体。前記コンピュータ可読命令は、実行時に前記プロセッサに、複数の3Dグラフィック演算装置内の各3Dグラフィック演算装置のハードウェア機能を決定させることを特徴とする請求項7に記載のコンピュータ可読記憶媒体。本発明では、1つまたは複数のコンピュータシステムを使用してもよい。図1および以下の議論は、本発明を実装できる適切なコンピューティング環境の簡潔で一般的な説明を提供しようとするものである。本明細書で使用する回路という用語は、ハードウェア割込みコントローラ、ハードドライブ、ネットワークアダプタ、グラフィックプロセッサ、ハードウェアベースのビデオ/オーディオコーデックのようなハードウェアコンポーネント、およびかかるハードウェアを動作させるために用いるファームウェアを含むことができる。回路という用語はまた、マイクロプロセッサ、特定用途向け集積回路、およびプロセッサ、例えば、命令の読取と実行を行い、ファームウェアおよび/またはソフトウェアにより構成された、マルチコアの汎用演算装置のコアを含むことができる。プロセッサ複数可を、メモリ、例えば、RAM、ROM、ファームウェア、および/または大容量記憶からロードされる命令により構成して、機能複数可を実施するように当該プロセッサを構成するよう動作可能なロジックを具体化することができる。例示的な実施形態では、回路がハードウェアとソフトウェアの組合せを含む場合、実装者は、ハードウェアで実行できる機械可読なコードに後にコンパイルされるロジックを具体化する、ソースコードを書き込むことができる。ハードウェア実装の機能とソフトウェア実装の機能には殆ど差異がないところまで最先端技術が発展していると当業者は理解できるので、本明細書で説明した機能を実現するためにハードウェアかソフトウェアのどちらを選択するかは設計上の選択にすぎない。換言すれば、ソフトウェアプロセスを均等なハードウェア構造に変換でき、ハードウェア構造自体を均等なソフトウェアプロセスに変換できると当業者は理解できるので、ハードウェア実装とソフトウェア実装のどちらを選択するかは実装者に委ねられている。図1を参照すると、例示的なコンピュータシステム100が示されている。コンピュータシステム100は、プロセッサ102、例えば実行コアを含むことができる。1つのプロセッサ102を示しているが、他の実施形態ではコンピュータシステム100が複数のプロセッサ、例えば、プロセッサ基板ごとに複数の実行コアおよび/または各々が複数の実行コアを有しうる複数のプロセッサ基板を有してもよい。図で示すように、様々なコンピュータ可読記憶媒体110を、様々なシステムコンポーネントをプロセッサ102に接続する1つまたは複数のシステムバスにより相互接続することができる。システムバスは数種のバス構造のうち任意のものであってもよい。当該バス構造には、メモリバスまたはメモリコントローラ、周辺バス、および様々なバスアーキテクチャのうち任意のものを用いるローカルバスが含まれる。例示的な実施形態では、コンピュータ可読記憶媒体110は、例えば、RAMrandomaccessmemory104、例えば電気機械ハードドライブelectromechanicalharddrive、固体ハードドライブ、等のような記憶装置106、例えば、FLASHRAMまたはROMのようなファームウェア108、例えばCD-ROM、フロツピディスク、DVD、FLASHドライブ、外部記憶装置、等のような取外し可能記憶装置118を含むことができる。磁気カセット、フラッシュメモリカード、および/またはデジタルビデオディスクのような他種のコンピュータ可読記憶媒体を使用できることは当業者には理解されよう。コンピュータ可読記憶媒体110は、プロセッサ実行可能命令122、データ構造、プログラムモジュールおよび、実行可能命令のようなコンピュータ110に対する他のデータの、不揮発性記憶および揮発性記憶を提供することができる。BIOSbasicinput/outputsystem120は、例えば起動時にコンピュータシステム100内部の要素間での情報転送を支援する基本ルーチンを含み、ファームウェア108に格納することができる。オペレーティングシステムおよび/またはアプリケーションプログラムを含めて、幾つかのプログラムを、ファームウェア108、記憶装置106、RAMl04、および/または取外し可能記憶装置118に格納してもよく、プロセッサ102により実行してもよい。コマンドおよび情報をコンピュータ100により入力装置116を介して受け取ってもよい。当該入力装置116には、キーボードおよびポインティングデバイスを含めることができるがこれらに限らない。他の入力装置には、マイクロフォン、ジョイスティック、ゲームパッド、スキャナ、等を含めてもよい。これらおよび他の入力装置はしばしば、システムバスに接続されるシリアルポートインタフェースを介してプロセッサ102に接続されるが、パラレルポート、ゲームポート、またはUSBuniversalserialbusのような他のインタフェースにより接続してもよい。ディスプレイまたは他種のディスプレイ装置も、グラフィック演算装置112の一部であるかまたはグラフィック演算装置112に接続できるビデオアダプタのようなインタフェースを介して、システムバスに接続することができる。ディスプレイに加えて、コンピュータは一般に、スピーカおよびプリンタ図示せずのような他の周辺出力装置を備える。図1の例示的なシステムはまた、ホストアダプタ、SCSISmallComputerSystemInterfaceバス、およびSCSIバスに接続された外部記憶装置を備えることができる。コンピュータシステム100を、リモートコンピュータのような1つまたは複数のリモートコンピュータへの論理接続を用いてネットワーク環境で動作させてもよい。リモートコンピュータは、別のコンピュータ、サーバ、ルータ、ネットワークPC、ピアデバイスまたは他の共通ネットワークノードであってもよく、一般に、コンピュータシステム100に関して上述した要素の多くまたは全部を含むことができる。LANまたはWANのネットワーク環境で使用するとき、コンピュータシステム100をネットワークインタフェースカード114を介してLANまたはWANに接続することができる。NICl14は、内部または外部にあってもよく、システムバスに接続することができる。ネットワーク環境では、コンピュータシステム100に関して図示したプログラムモジュール、またはその一部を、リモートのメモリ記憶装置に格納してもよい。ここで説明したネットワーク接続は例であって、コンピュータ間の通信リンクを確立する他の手段を使用してもよいことは理解されよう。さらに、本開示の多数の実施形態がコンピュータ化システムに特に良く適していると想定しているが、本明細書では何ら本開示をかかる実施形態に限定する意図はない。図2を参照すると、仮想マシンの生成に使用できる例示的な仮想化プラットフォームが示されている。本実施形態では、ハイパバイザマイクロカーネル202を、コンピュータシステム200のハードウェアを制御し当該ハードウェアへのアクセスを調停するように構成することができる。ハイパバイザマイクロカーネル202は、子パーティション1乃至子パーティションNNは1より大きい整数のような、パーティションと呼ばれる実行環境を生成することができる。ここで、子パーティションとは、ハイパバイザマイクロカーネル202によりサポートされる基本的な隔離単位である。ハイパバイザマイクロカーネル202は、或るパーティション内のプロセスを隔離して別のパーティションのリソースにアクセスしないようにすることができる。各子パーティションを、ハイパバイザマイクロカーネル202の制御下にある、例えばメモリ、デバイス、プロセッササイクル、等のような1組のハードウェアリソースにマップすることができる。1実施形態では、ハイパバイザマイクロカーネル202は、スタンドアロンのソフトウェア製品、オペレーティングシステムの一部であることができ、マザーボードのファームウェア、特殊集積回路、またはそれらの組合せに組み込むことができる。ハイパバイザマイクロカーネル202は、物理コンピュータシステムにおけるゲストオペレーティングシステムのメモリのビューを制限することによって、パーティション化を強制することができる。ハイパバイザマイクロカーネル202が仮想マシンをインスタンス化すると、ハイパバイザマイクロカーネル202は、システム物理メモリSPMのページ、例えば、開始アドレスと終了アドレスを伴う固定長のメモリブロックを、ゲスト物理メモリGPMのような仮想マシンに割り当てることができる。ここで、ゲストの制限されたシステムメモリのビューがハイパバイザマイクロカーネル202により制御される。ゲスト物理メモリという用語は、仮想マシンの視点からメモリのページを記述する省略的な方法であり、システム物理メモリという用語は、物理システムの視点からメモリのページを記述する省略的な方法である。したがって、仮想マシンに割り当てたメモリのページには、ゲスト物理アドレス仮想マシンが用いるアドレスとシステム物理アドレスページの実アドレスが存在することになる。ゲストオペレーティングシステムが、ゲスト物理メモリを仮想化してもよい。仮想メモリは、オペレーティングシステムがメモリをオーバコミットできるようにし、アプリケーションが連続的な作業用メモリに単独でアクセスできるようにする、管理技法である。仮想化環境では、ゲストオペレーティングシステムが1つまたは複数のページテーブルを使用して、仮想ゲストアドレスとして知られる仮想アドレスをゲスト物理アドレスに変換することができる。本例では、メモリアドレスがゲスト仮想アドレス、ゲスト物理アドレス、およびシステム物理アドレスを有してもよい。図示した例では、親パーティションコンポーネントが、Xenのオープンソースのハイパバイザのドメイン0に類似のものと考えることもでき、ホスト204を含むことができる。ホスト204はオペレーティングシステムまたは1組の構成ユーティリティであることができ、ホスト204を、仮想化サービスプロバイダ228VSPを用いることにより子パーティション1乃至Nで実行されているゲストオペレーティングシステムにリソースを提供するように構成することができる。VSP228は、オープンソースのコミュニティでは一般にバックエンドドライバと呼ばれ、仮想化サービスクライアントVSCオープンソースのコミュニティでは一般にフロントエンドドライバと呼ばれ、または、準仮想化デバイスと呼ばれるによりハードウェアリソースに対するインタフェースを多重化するために使用することができる。図に示すように、仮想化サービスクライアントはゲストオペレーティングシステムのコンテキスト内で実行される。しかし、これらのドライバは、それらにゲストではなくハイパバイザを提供できる点で、ゲスト内の残りのドライバとは異なる。例示的な実施形態では、仮想化サービスクライアント216および218と通信するために仮想化サービスプロバイダ228により使用されるパスを、仮想化パスと考えることができる。図に示すように、エミュレータ234、例えば、仮想化IDEデバイス、仮想化ビデオアダプタ、仮想化NIC、等を、ホスト204内部で実行するように構成することができ、それらはゲストオペレーティングシステム220および222に利用可能なリソースにアタッチされる。例えば、ゲストOSが、デバイスのレジスタが存在するはずの場所にマップされたメモリロケーションまたはメモリマップされたデバイスにタッチすると、マイクロカーネルハイパバイザ202が当該要求をインターセプトして、ゲストが書き込もうとした値を関連するエミュレータに渡すことができる。ここで、本例でのリソースを、仮想デバイスが配置された場所と考えることができる。このようにエミュレータを使用することを、エミュレーションパスと考えることができる。エミュレーションパスは、仮想化パスと比較して非効率的である。なぜならば、当該エミュレーションパスでは、デバイスをエミュレートするために、VSPとVSCの間でメッセージを渡すよりも多くのCPUリソースを必要とするからである。例えば、エミュレーションパスを介して値をディスクに書き込むために利用されるレジスタにマップされる、メモリに対する何百ものアクションを、VSCからVSPへ仮想化パスで渡される1つのメッセージに縮減することができる。各子パーティションは1つまたは複数の仮想プロセッサ230および232を含むことができる。ゲストオペレーティングシステム220および222は、当該1つまたは複数の仮想プロセッサ230および232で実行されるスレッドを管理し、スケジュールすることができる。一般に、仮想プロセッサとは、物理プロセッサの表現に特定のアーキテクチャを与える、実行可能命令および関連する状態情報である。例えば、或る仮想マシンが、インテルx86プロセッサの特徴を有する仮想プロセッサを有してもよく、別の仮想プロセッサがPowerPCプロセッサの特徴を有してもよい。本例での仮想プロセッサを、仮想プロセッサを実現する命令がプロセッサにより支援されるように、コンピュータシステムのプロセッサにマップすることができる。したがって、複数のプロセッサを含む実施形態では、仮想プロセッサをプロセッサにより同時に実行することができ、一方で、例えば、他のプロセッサがハイパバイザの命令を実行することができる。仮想プロセッサとパーティション内のメモリの組合せを、仮想マシンと考えることができる。ゲストオペレーティングシステム220および222は、例えば、Microsoft登録商標、Apple登録商標、オープンソースのコミュニティ、等からのオペレーティングシステムのような、任意のオペレーティングシステムであることができる。ゲストオペレーティングシステムは、ユーザ/カーネルの動作モードを含むことができ、スケジューラ、メモリマネージャ、等を含みうるカーネルを備えることができる。一般的に、カーネルモードは、少なくとも特権プロセッサ命令へのアクセスを付与する、プロセッサ内の実行モードを含むことができる。各ゲストオペレーティングシステムは、ターミナルサーバ、eコマースサーバ、電子メールサーバ、等のようなものに格納されたアプリケーション、およびゲストオペレーティングシステム自体を有しうる、関連するファイルシステムを有することができる。ゲストオペレーティングシステムは仮想プロセッサで実行するためのスレッドをスケジュールすることができ、かかるアプリケーションのインスタンスを実現することができる。次に図3を参照すると、図2で上述したものに対する代替的な仮想化プラットフォームが示されている。図3は図2と同様なコンポーネントを示すが、この例示的な実施形態では、ハイパバイザ302は、マイクロカーネルコンポーネントと、仮想化サービスプロバイダ228およびデバイスドライバ224のような図2のホスト204におけるコンポーネントと類似したコンポーネントを備えることができ、管理オペレーティングシステム304が、例えば、ハイパバイザ302を構成するために使用される構成ユーティリティを含んでもよい。本アーキテクチャでは、ハイパバイザ302は図2のハイパバイザマイクロカーネル202と同一または類似の機能を実施できるが、本アーキテクチャでは、ハイパバイザ304を、子パーティション内で実行されるゲストオペレーティングシステムにリソースを提供するように構成することができる。図3のハイパバイザ302は、スタンドアロンのソフトウェア製品、オペレーティングシステムの一部であることができ、マザーボードのファームウェアに組み込むことができ、または、ハイパバイザ302の一部を特殊集積回路により実現することができる。次に図4を参照すると、仮想デスクトップサーバ400の高レベルなブロック図が示されている。1実施形態では、仮想デスクトップサーバ400を、仮想デスクトップセッションVDSをクライアント、例えば、スマートフォンのようなモバイル装置、図1に示したコンポーネントと類似のコンポーネントを有するコンピュータシステム、等に展開するように構成することができる。簡潔に述べると、仮想デスクトップ技術により、ユーザは仮想マシン内で実行されているゲストオペレーティングシステムとリモートに対話することができる。リモートデスクトップセッションと異なり、仮想デスクトップセッションでは、1人のユーザのみがゲストオペレーティングシステムにログインし、ユーザはゲストオペレーティングシステムを完全に制御することができる。例えば、ユーザは管理者として実行し、ゲストに対して完全な権限を有する。図示した例では、仮想デスクトップサーバ400は図2または図3のコンピュータシステム200または300と類似したコンポーネントを有することができる。仮想化プラットフォーム402は、図2および図3で上述した仮想化インフラコンポーネントの論理的な抽象化である。下記のセクションで仮想化プラットフォーム402内部として説明する機能を、図2または図3に示した1つまたは複数の要素で実装することができる。例えば、3Dグラフィックサービスマネージャ404は、下記の段落でより詳細に説明されるが、これを図2のホスト204で実装することができる。より具体的な例では、3Dグラフィックサービスマネージャ404を、親パーティションで実行されているホストオペレーティングシステムで実装することができる。仮想デスクトップセッションを開始するには、ゲストオペレーティングシステムを仮想マシン内部でインスタンス化する必要がある。例示的な実施形態では、仮想デスクトップマネージャ、例えば、プロセッサ実行可能命令のモジュールが要求に応答してゲストオペレーティングシステム428をブートできる仮想マシン414を起動することができる。仮想デスクトップマネージャは、プロセッサで実行することができ、仮想化プラットフォーム402、例えばマイクロカーネルハイパバイザ202に指示してメモリをパーティションに割り当てることができる。仮想化プラットフォーム402は、仮想デバイスを仮想マシン414のメモリ内部で実行し構成することができ、VM414に割り当てたメモリにブートローダプログラムをロードすることができる。ブートローダプログラムは次にプロセッサで実行できる仮想プロセッサで実行することができ、ゲストオペレーティングシステム428を仮想マシン414内部にロードすることができる。セッションマネージャ408をゲストオペレーティングシステム428によりロードすることができ、セッションマネージャ408は、オペレーティングシステムコア410のようなカーネルモード部分を含みうるランタイムサブシステム426のような環境サブシステムをロードすることができる。1実施形態における環境サブシステムを、サービスのサブセットをアプリケーションプログラムに公開し、アクセスポイントをカーネル420に提供するように構成することができる。ゲストオペレーティングシステム428がロードされると、ブートローダプログラムは終了し、仮想マシン414の制御をゲストオペレーティングシステム428に引き渡す。ゲストオペレーティングシステム428は、図4に示した様々なモジュールを実行することができ、仮想デスクトップセッションをホストするように自分自身を構成することができる。例えば、ゲストオペレーティングシステム428は、リモートプレゼンテーションエンジン406、セッションマネージャ408、等にブート時に起動させる、レジストリ値を含むことができる。ゲストオペレーティングシステム428の実行を開始した後の何らかの時点で、ゲストオペレーティングシステム428はクライアントから接続要求を受信することができる。受信する接続要求を最初にリモートプレゼンテーションエンジン406により処理することができ、リモートプレゼンテーションエンジン406を、接続メッセージをリッスンするように構成することができる。接続メッセージが受け取られると、リモートプレゼンテーションエンジン406はスタックインスタンスを生成することができる。リモートプレゼンテーションエンジン406は、当該セッションに対するプロトコルスタックインスタンスを実行することができ、下記の段落でより詳細に説明する仮想化プラットフォーム402により描画される3Dグラフィックユーザインタフェースをリモートディスプレイサブシステム418により受信して、上記プロトコルスタックインスタンスを介してクライアントに送信することができる。一般に、ユーザインタフェースの出力を関連するクライアントに転送し、当該関連するクライアントから受信したユーザ入力をオペレーティングシステムコア410に転送するように、プロトコルスタックインスタンスを構成することができる。簡潔に述べると、オペレーティングシステムコア410を、スクリーン出力を管理し、キーボード、マウス、および他のデバイスからの入力を収集するように構成することができる。ユーザの資格情報、例えばユーザ名/パスワードの組合せを、リモートプレゼンテーションエンジン406により受け取って、セッションマネージャ408に渡すことができる。セッションマネージャ408は当該資格情報をログオン手続に渡すことができる。当該ログオン手続は、当該資格情報を認証サブシステム424に転送して検証することができる。認証サブシステム424は、ユーザの資格情報が妥当であり仮想デスクトップセッションを開始できること、即ち、ユーザがゲストオペレーティングシステム428にログインできることを判定することができる。認証サブシステム424はまた、システムトークンを生成することができる。ユーザがプロセスまたはスレッドを実行するためのセキュリティ証明書を有しているか否かを判定するためのプロセスの実行を当該ユーザが試みるときはいつでも、当該システムトークンを使用することができる。例えば、プロセスまたはスレッドがアクセスの取得、例えばオブジェクト、例えばファイル、設定、またはアプリケーションのオープン、クローズ、削除、および/または修正を試みるとき、当該スレッドまたはプロセスをセキュリティサブシステム422により認証することができる。セキュリティサブシステム422は、上記オブジェクトに関連付けられたアクセスコントロールリストに対してセキュリティトークンをチェックし、システムトークン内の情報とアクセスコントロールリストの比較に基づいてスレッドがパーミッションを有するか否かを判定することができる。スレッドが認証されたとセキュリティサブシステム422が判定する場合は、スレッドが上記オブジェクトにアクセスすることを許可することができる。図4の説明を続けると、1実施形態では、オペレーティングシステムコア410がグラフィックディスプレイインタフェースGDI416および入力サブシステム412を備えることができる。例示的な実施形態では、入力サブシステム412を、仮想デスクトップセッション向けのプロトコルスタックインスタンスを介してユーザ入力をクライアントから受け取り、当該入力をオペレーティングシステムコア410に送信するように構成することができる。幾つかの実施形態では、ユーザ入力が、絶対的および/または相対的なマウス移動コマンド、マウス座標、マウスクリック、キーボード信号、ジョイスティック移動信号、等を示す信号を含むことができる。ユーザ入力、例えば、アイコンに対するマウスのダブルクリック、をオペレーティングシステムコア410により受信することができ、当該ダブルクリックに関連付けられた座標にアイコンが配置されていると判定するように入力サブシステム412を構成することができる。次いで、入力サブシステム412を、アイコンに関連付けられたアプリケーションに関するプロセスを実行できるランタイムサブシステム426に通知を送信するように構成することができる。図5を参照すると、仮想マシン414、414B、および/または414Cに対して3Dグラフィックを描画し、3DGPU504、504B、および/または504Cのようなグラフィック演算装置に関して仮想マシンの負荷分散を行うように仮想デスクトップサーバ400を構成するために使用できる、追加のコンポーネントが示されている。この図示した実施形態では、仮想デスクトップサーバ400は、三次元グラフィカルユーザインタフェースを示すイメージを、クライアント520、520B、および/または520Cのようなクライアントにストリーミングすることができる。簡潔に述べると、各クライアントに、仮想デスクトップセッションを実行するように構成したゲストオペレーティングシステムを実行する仮想マシン414、414B、または414Cを関連付けることができる。クライアント520、520B、および/または520Cは、図1に示したコンポーネントと類似するコンポーネント、モバイル装置、および/またはシンクライアントを有するコンピュータシステムを備えることができる。例えば、シンクライアントが、汎用的なハードウェアおよび、当該ハードウェア、ユーザ入力および出力を管理しインターネットに接続するように構成されたモノリシックなウェブブラウザを有してもよい。本例では、シンクライアントがユーザインタフェース522、例えばディスプレイ、およびマウスのようなユーザ入力装置を備えてもよい。仮想デスクトップサーバ400を、起動時に3Dグラフィックを描画するように構成することができる。例えば、仮想デスクトップサーバ400を実行するとき、3Dグラフィックサービスマネージャ404のような3Dグラフィックサービスマネージャのインスタンスを開始することができる。3Dグラフィックサービスマネージャ404は、下記の段落でより詳細に説明するが、プロセッサで実行することができ、受信する仮想デスクトップセッション接続を待機することができる。簡潔に述べると、3Dグラフィックサービスマネージャ404を、どこに各仮想マシンを割り当てるかを判定し、性能情報に基づいて仮想マシンを移動させることによって、グラフィック演算装置に関して仮想マシンの負荷分散を行うように構成することができる。仮想マシンに対する3Dサービスを開始する要求を受信する前に、3Dグラフィックサービスマネージャ404を、システム内の各グラフィック演算装置に問い合わせてその機能を特定し、その機能を示す情報をテーブルに格納するように構成することができる。後に機能情報を使用して、グラフィック演算装置の使用を調整することができる。例示的な実施形態では、グラフィック演算装置の機能は、サーフェイステクスチャの共有をサポートするかまたは最小バージョンの3DグラフィックAPIapplicationprograminterfaceをサポートする能力のような、1組の機能、即ち、ハードウェア機能を含むことができる。さらに、グラフィック演算装置の機能が、グラフィック演算装置のハードウェア識別子、プロパティのリスト、および3Dグラフィック演算装置が制御するグラフィックRAMrandomaccessmemory、即ち、3Dグラフィック演算装置を収容するアダプタに埋め込んだメモリの量、を含むことができる。例えば、グラフィックランダムアクセスメモリを使用して、スクリーンイメージのビットマップ、3Dグラフィックの深度座標を管理するZバッファ、テクスチャ、頂点バッファ、およびコンパイルされたシェーダプログラムを格納することができる。例示的な実施形態では、グラフィックメモリは、ビデオRAM、ダイナミックランダムアクセスメモリ、または、DDRdoubledatarate2、およびグラフィックDDRGDDR3、GDDR4、および/またはGDDR5といったDDR技術を基礎とするランダムアクセスメモリのような、高速のまたはマルチポートのメモリであることができる。仮想デスクトップセッション接続を受け取ったときに3Dグラフィックサービスマネージャ404に通知することができ、3Dグラフィックサービスマネージャ404は、下記の段落でより詳細に説明するグラフィック描画モジュールのインスタンスを開始し、3Dコンポーネントをゲストオペレーティングシステム428にロードするための信号を3D-GPUサービスプロバイダ512に送信することができる。簡潔に述べると、3Dグラフィックサービスマネージャ404は、仮想マシンごとにグラフィック描画モジュールのインスタンスをロードし、グラフィック描画モジュールをどのGPUで実行するかを判定し、グラフィック描画モジュールに判定されたグラフィック演算装置のデバイス識別子を渡すことができる。グラフィック描画モジュールは次いで、3DGPUにバインドし、その関連する仮想マシンの代わりに3DGPUに対して描画することができる。図示した例では、グラフィック描画モジュール506は仮想マシン414に対応する。仮想マシン414に対してグラフィカルユーザインタフェースを生成するために用いる頂点データ、テクスチャ、等を、仮想マシン414からグラフィック描画モジュール506に入力することができる。これは、仮想化プラットフォーム402によって、グラフィカルユーザインタフェースを生成するプロセスとして扱われる。大抵の3Dグラフィック演算装置は、数個のプロセスに対して数個のグラフィカルユーザインタフェースを一度に同時に生成するように設計されているので、多数のグラフィック描画モジュールが実行されているインスタンスでは、GPUが容易に過負荷となりリセットされうることは、当業者には理解されよう。初期化手続を続けると、3D-GPUサービスプロバイダ512は、3Dグラフィックサービスクライアント514をゲストオペレーティングシステム428内で生成させることができる。例えば、仮想マシン414内の仮想マザーボードのメモリアドレスにより、IOデバイスにマップされる特定のアドレスにインターセプトを設定することができる。ゲストオペレーティングシステム428が開始すると、プラグインプレイモジュールを実行し、当該プラグインプレイモジュールがIOにマップされたメモリアドレスを問い合わせることができる。ハイパバイザ、例えば図2のハイパバイザ202は、当該読出しをインターセプトして、プラグインプレイモジュールに3Dグラフィックサービスクライアント514をロードさせるデバイス識別子で応答することができる。3Dグラフィックサービスクライアント514は、1つまたは複数のメモリページを共有としてマップすることで3D-GPUサービスプロバイダ512に対する通信チャネルを構成し、当該マップを3D-GPUサービスプロバイダ512に渡すことができる。当該メモリページ内部に、メッセージパッシング通信チャネル516を確立することができる。原則として、メッセージパッシング通信チャネル516は、3DGPUサービスプロバイダ/クライアントがメッセージを読書きできる共有メモリ領域である。3Dグラフィックサービスクライアント514はまた、仮想デバイスドライバ518を生成させることができる。仮想デバイスドライバ518はまた、仮想マシン414と仮想化プラットフォーム402の間で共有されるグラフィックアパーチャ526を確立することができる。例示的な実施形態では、仮想デバイスドライバ518は、1群のゲストメモリページを割り当て、接続要求とメモリページのアドレスを含む信号を3Dグラフィックサービスクライアント514に送信することができる。グラフィック描画モジュール506は、当該接続要求と当該メモリページのアドレスを受信することができる。グラフィック描画モジュール506は、ハイパバイザに当該1群のメモリページ内にグラフィックアパーチャ526を生成するように指示する信号をハイパバイザに送信することができる。ハイパバイザは当該ページをシステムの物理アドレスにマップし、当該メモリの範囲内部にあるグラフィックアパーチャ526を実行することができる。本例では、仮想デバイスドライバ518を、DMAバッファをゲストメモリアドレスの範囲に書き込むように構成することができる。データがゲストメモリアドレスの範囲に書き込まれると、グラフィックアパーチャ526がDMAバッファをグラフィック描画モジュール506に転送する。例示的な実施形態では、仮想デバイスドライバ518は、ゲストオペレーティングシステム428には3D可能なグラフィック演算装置のデバイスドライバとして表すことで、例えばAPIapplicationprograminterface524のインスタンスをロードすることによって、ゲストオペレーティングシステム428が3Dグラフィックをサポートするように自分自身を構成することができる。仮想デバイスドライバ518を、API524とインタフェースするように構成することができる。API524により、3Dアプリケーション528は3Dグラフィックを生成することができる。3Dアプリケーション528、例えば、オペレーティングシステムのグラフィカルユーザインタフェース、アプリケーション/ビデオゲームに対するユーザインタフェース、等はAPI524に命令を発行することができる。API524はMicrosoft登録商標のDirectXのようなAPIであることができる。簡潔に述べると、3DグラフィックAPI524は、グラフィックアプリケーション、例えば、ビデオゲームと、ドライバこの場合、仮想デバイスドライバ518との間の抽象化層を提供する。一方では、API524は仮想デバイスドライバ518が公開するグラフィック演算装置のインタフェースに低レベルのインタフェースを提供し、他方では、アプリケーションによって呼び出せる3Dグラフィックコマンドのライブラリを提供する。API524は、3Dグラフィックコマンドのライブラリを、仮想デバイスドライバ518が公開するインタフェースにマップすることができ、したがって、ゲーム開発者が全てのグラフィックドライバの詳細を理解しなくてもよいようにすることができる。動作に際して、API524はプリミティブ、例えば頂点と定数で表現された他の形状に対するビルディングブロックとしてコンピュータグラフィックにおいて用いられる基本的な幾何学形状を生成することができ、当該頂点を複数のDMAdirectmemoryaccessバッファに格納することができる。API524がバッファに書き込むと、仮想デバイスドライバ518はDMAバッファに格納されたデータを再フォーマットし、それらを1つまたは複数のGPUトークンにパッケージ化し、グラフィックアパーチャ526を介して当該GPUトークンをグラフィック描画モジュール506に送信することができる。同様に、API524がコマンドを発行すると、API524をDMAバッファに挿入し、API524をトークンでグラフィック描画モジュール506に転送することができる。グラフィック描画モジュール506は当該トークンを受け取り、DMAバッファを抽出し、当該トークンを、仮想化プラットフォーム402に関連付けられたメモリのページに格納することができる。例示的な実施形態では、グラフィック描画モジュール506が、DMAバッファ内のコマンドとプリミティブを、3Dグラフィックドライバ510が処理できるAPIコンストラクトに変換し、当該コマンドを、仮想化プラットフォーム402内のDMAバッファのアドレスとともに、グラフィックカーネル508に発行することができる。グラフィックカーネル508は、仮想デスクトップサーバ400内部のグラフィック演算装置での実行をスケジュールするように構成できるが、コマンドとDMAバッファのアドレスを受け取って、当該コマンドをいつ3Dグラフィックドライバ510に発行するかを決定することができる。様々なDMAバッファからのプリミティブを描画するとき、グラフィックカーネル508は描画コマンドを3Dグラフィックドライバ510に送信することができる。3Dグラフィックドライバ510は、プロセッサで実行することができ、当該コマンドを実行してDMAバッファ内のデータを処理するようにグラフィック演算装置504に指示することができる。グラフィック演算装置504を実行し、グラフィック演算装置504が、メモリ内のイメージフレームを示すビットマップ、例えば画素値の配列を生成することができる。グラフィック描画モジュール506は、当該ビットマップを捕捉し、当該ビットマップを圧縮モジュールに渡し、次いでグラフィックアパーチャ526を介してリモートプレゼンテーションエンジン406に渡すことができる。リモートプレゼンテーションエンジン406は当該ビットマップを、1つまたは複数の情報パケットを介してクライアント520に送信することができる。幾つかの事例では、1つまたは複数のグラフィック描画モジュールにより送信されるデータストリームにより、グラフィック演算装置をリセットさせることができる。例えば、グラフィック演算装置が過負荷となっている、即ちGPUがあまりに多くのイメージを描画しなければならない場合では、グラフィック演算装置がタイムアウトする可能性があり、GPUはリセットされることになる。これにより、3Dグラフィックドライバ510がリセットされ、次いでグラフィックカーネル508がこのGPUへの接続をリセットすることとなり、当該GPUにバインドされた任意のグラフィック描画モジュールが終了することになる。例示的な実施形態では、3Dグラフィックサービスマネージャ404を、仮想デスクトップサーバ400内部のグラフィック演算装置に対する負荷を調整してリセットが発生する可能性を減らすように構成することができる。例えば、図6を参照すると、5つの仮想マシン414乃至414F。ここで本例では、仮想マシン414を仮想マシン414Aと考えることができる。を含む仮想デスクトップサーバ400の別の高レベルなブロック図が示されている。各仮想マシンは、仮想化プラットフォーム402で実行されている関連する描画プロセス506乃至506Fを有することができる。図に示すように、各グラフィック描画モジュール506乃至506Fを、グラフィック演算装置にバインド、例えばアタッチすることができる。例えば、仮想マシン414、414D、および414Eが3DGPU504にバインドされ、仮想マシン414Bが3DGPU504Bにバインドされ、仮想マシン414Cおよび414Fが3DGPU504Cにバインドされる。3Dグラフィックサービスマネージャ404が各仮想マシンを実行中に移動することができ、示した例における点線は、仮想マシン414を3DGPU504から3DGPU504Bに移動する具体的な例を示している。3Dグラフィックサービスマネージャ404を、ラウンドロビンアルゴリズムおよび/または動的配置アルゴリズムを用いてGPUを調整するように構成することができる。例えば、ラウンドロビンアルゴリズムを用いて、グラフィック演算装置と、仮想マシンからグラフィックを描画するために当該グラフィック演算装置を割り当てるか否かを判定するための情報とを見つけることができる。グラフィック演算装置が過負荷であると当該情報が示す場合は、ラウンドロビンアルゴリズムは次のGPUを発見し、同一の動作を実行することができる。追加または代替として、3Dグラフィックサービスマネージャ404を、当該情報を使用してグラフィック演算装置を選択し、各グラフィックを逐次的に検査することなく仮想マシンから当該グラフィックを描画するように構成することができる。例示的な実施形態では、仮想マシンをGPU、例えば3DGPU504に割り当てるために用いる情報が、3Dグラフィック演算装置に利用可能なグラフィックメモリの推定量を含むことができる。利用可能なグラフィックメモリの推定量を使用して、GPUがタイムアウトして接続がリセットされるか否かを予測することができる。本例では、3Dグラフィックサービスマネージャ404を、利用可能なグラフィックメモリの推定量を使用して閾値を設定するように構成することができる。3Dグラフィックサービスマネージャ404が仮想マシンの割当て要求を受信すると、3Dグラフィックサービスマネージャ404は、仮想マシンが使用を試みるグラフィックメモリの量、または、少なくとも、仮想マシンに対して画像を適切に描画し、推定した量を閾値、例えばグラフィック演算装置に利用可能なグラフィックメモリの推定量と比較し、仮想マシンが利用するグラフィックメモリの推定量が閾値未満である場合にグラフィック描画プロセスをGPUに割り当てるために使用するために必要な量を推定することができる。具体的な例では、3Dグラフィック演算装置504が4ギガバイトのキャッシュを制御し、3Dグラフィックサービスマネージャ404が、仮想マシン414Eが1ギガバイトのメモリを使用すると推定し、GPUにより制御される利用可能なグラフィックメモリの推定量に対して閾値が設定され、仮想マシン414が利用するグラフィックメモリの推定量が1ギガバイトであり、仮想マシン414Dが利用するグラフィックメモリの推定量が512メガバイトであると仮定する。本例では、3Dグラフィックサービスマネージャ404は、仮想マシン414Eに対して利用される推定量1ギガバイトを推定された利用可能な量およそ2.5ギガバイトと比較して、GPUが仮想マシンに対処できると判定することができる。3Dグラフィックサービスマネージャ404は仮想マシンをGPUに割り当て、仮想マシン414Eに対して利用される推定量を差し引いて、GPUに対する推定された利用可能な量およそ1.5ギガバイトを取得して、当該値をテーブルに格納することができる。例示的な実施形態では、閾値を、GPUが制御する利用可能なグラフィックメモリの推定量に設定することができる。別の例示的な実施形態では、当該閾値を、グラフィック演算装置を長時間監視し、グラフィック演算装置がリセットしたときにどれくらい多くの利用可能なグラフィックメモリが利用可能であると推定されるかを判定することによって設定することができる。例えば、グラフィック演算装置がリセットされる確率を、性能データから計算し、利用可能なグラフィックメモリの推定量と関連付けることができる。例示的な実施形態では、利用可能なグラフィックメモリの推定量を閾値として設定することができる。他の例示的な実施形態では、この利用可能なグラフィックメモリの推定量にスカラ値を乗じて、拡大した利用可能なグラフィックメモリの推定量を閾値として使用することができる。例えば、利用可能なグラフィックメモリの推定量の80を閾値として設定することができる。例示的な実施形態では、3Dグラフィックサービスマネージャ404は、仮想マシンが使用できるグラフィックメモリの量を情報に基づいて推定することができる。当該情報には、画素の次元、色深度、仮想マシンに対するディスプレイの数、スループット、圧縮率、仮想マシンに対して描画されるサーフェスの推定量、頂点を生成するために必要なプリミティブを格納するために必要なメモリの量、頂点に適用されるテクスチャを格納するために必要なメモリ、選択されたアンチエイリアシング効果をオブジェクトに適用するために必要なメモリ、等が含まれるがこれらに限らない。3Dグラフィックサービスマネージャ404を、仮想マシンが開始しているとの指示を受け取ったことに応答して当該仮想マシンが使用することとなるグラフィックメモリの量を推定するように構成することができる。本例では、利用されるグラフィックメモリの量を推定するために使用される情報の一部または全部を仮想マシンに関連付けられた構成ファイルに格納することができる。別の実施形態では、仮想マシンが実行時に使用するグラフィックメモリの推定量を、3Dグラフィックサービスマネージャ404によって監視し、使用することができ、後の仮想デスクトップセッション中に使用するために構成ファイルに格納することができる。以上に加えて、例示的な実施形態では、他の情報を使用して仮想マシンを適切なGPUに割り当てることができる。例えば、既にGPUに割り当てた仮想マシンの数を使用して、GPUが過負荷であるか否かを予測することができる。GPUに割り当てた仮想マシンの数を長時間監視することができ、バインドした仮想マシンの数を、グラフィック演算装置がリセットされるときに記録することができる。図6を参照すると、3Dグラフィックサービスマネージャ404が値をテーブルに含めることができる。当該値は、3DGPU504に3つの仮想マシンがアタッチされ、3DGPU504Bに1つの仮想マシンがアタッチされ、3DGPU504Cに2つの仮想マシンがアタッチされていることを反映する。3Dグラフィック演算装置のうち1つがリセットされた場合は、3Dグラフィックサービスマネージャ404は、3Dグラフィック演算装置がクラッシュしたときにどれだけ多くの仮想マシンがアタッチされていたかを当該テーブルから決定することができる。様々な種類のグラフィック演算装置がリセットされる確率を、長時間にわたって捕捉した性能データから計算し、アタッチされた仮想マシンの推定量に関連付けることができる。例示的な実施形態では、3Dグラフィックサービスマネージャ404がグラフィックメモリの推定量を使用してGPUを選択し、利用可能なグラフィックメモリの推定量が、アタッチされた仮想マシンの数より高い重みを有することができる。同一または別の例示的な実施形態では、仮想マシンをGPUに割り当てるか否かを判定するために3Dグラフィックサービスマネージャ404が使用する情報が、グラフィック演算装置がコマンドに応答するために要する平均時間長、即ち待ち時間、を記述する情報を含むことができ、グラフィック演算装置にストレスがかかっているかどうかを判定するために使用することができる。1実施形態では、3Dグラフィックサービスマネージャ404が平均的な待ち時間をテーブルに格納でき、クラッシュの際に、3Dグラフィックサービスマネージャ404はコマンドの平均待ち時間を閾値と比較することができる。平均待ち時間が閾値未満である場合は、3Dグラフィックサービスマネージャ404を、仮想マシンをGPUに割り当てるように構成することができる。当該閾値を管理者等により設定することができ、当該閾値は、使用されるグラフィック演算装置に依存することができる。例示的な実施形態では、様々な種類のGPUに、仮想マシンを、その数を増加させつつロードする実験を行うことができる。より多くの仮想マシンを追加する際、待ち時間を記録して、長時間にわたるリセット数を待ち時間が短いときの同一期間にわたるリセット数と比較することによって、リセットの確率を計算することができる。高確率のリセットに関する監視された待ち時間を使用して閾値を設定することができる。例示的な実施形態では、監視された待ち時間を閾値として設定することができる。他の例示的な実施形態では、監視された待ち時間にスカラ値を乗ずることができ、拡大した待ち時間を使用することができる。例えば、監視された待ち時間の80を閾値として使用することができる。例示的な実施形態では、待ち時間を、グラフィックカーネル508が確認応答ACKを受信するまでコマンドをGPUに発行する時間から測定することができる。各ACKを受信した後、グラフィックカーネル508は、当該要求に関連付けられた待ち時間を3Dグラフィックサービスマネージャ404に送信することができる。3Dグラフィックサービスマネージャ404は、GPUに対する平均待ち時間を反映する値を、テーブルにおいて更新することができる。別の例示的な実施形態では、待ち時間を、仮想デバイスドライバ518がダイレクトメモリアクセスのトランザクションを開始したときから測定することができる。例えば、API524がプリミティブをDMAバッファに書き込んでもよく、当該プリミティブを仮想デバイスドライバ518により捕捉し、グラフィック描画モジュール506に送信することができる。API524は最終的にコマンドを発行することができる。仮想デバイスドライバ518が当該コマンドを受信すると、仮想デバイスドライバ518はタイマを開始することができる。仮想デバイスドライバ518は当該コマンドをグラフィック描画モジュール506に送信することができ、グラフィック描画モジュール506が次いでコマンドをグラフィックカーネル508に送信することができる。グラフィックカーネル508は当該コマンドを3Dグラフィックドライバ510に送信することができ、3Dグラフィックドライバ510が、3Dグラフィック演算装置504にDMAバッファ内のプリミティブを処理させることができる。3DGPU504はACKを生成することができ、当該ACKを仮想デバイスドライバ518に戻し、仮想デバイスドライバ518がタイマを停止することができる。仮想デバイスドライバ518は次いで待ち時間を、メッセージパッシング通信チャネル516を介して3Dグラフィックサービスマネージャ404に送信することができる。3Dグラフィックサービスマネージャ404は、仮想マシンに対する平均待ち時間を反映する値を、テーブルにおいて更新することができる。例えば、仮想デバイスドライバ518は、トランザクションの待ち時間を含むメッセージを3Dグラフィックサービスクライアント514に送信することができる。3DGPUサービスプロバイダ512は、当該メッセージを受信し、当該メッセージを3Dグラフィックサービスマネージャ404に送信することができ、3Dグラフィックサービスマネージャ404がテーブルを更新することができる。本例では、トランザクションの待ち時間を使用して、仮想マシン414が発行するDMAトランザクションの平均待ち時間を決定することができる。当該平均待ち時間は、3DGPU504のリソースがオーバコミットされているか否かを反映する。仮想マシンを生成した際に当該仮想マシンの負荷分散を行うことに加えて、例示的な実施形態では、3Dグラフィックサービスマネージャ404を、現在の状態に応答して、仮想マシンを或る3DGPUから別の3DGPUにその関連するグラフィック描画モジュールを再バインドすることで移動するように構成することができる。例えば、図6は、3DGPU504から3DGPU504Bへ移動されているグラフィック描画モジュール506を示す。この例示的な実施形態では、3Dグラフィックサービスマネージャ404を、コンテキストスイッチを行って仮想化プラットフォーム402を実行するとき、仮想マシンの開始要求を検出したとき、および/または所定の時間が経過し割込みが発生したとき、に実行することができる。この例示的な実施形態では、3Dグラフィックサービスマネージャ404を、何れかのGPUが過負荷となっているかどうか、例えばリセットの危険性があるかどうかを判定し、移動動作により、GPUを過負荷にするリスクが減り、他のGPUをリセットさせるリスクを受け入れ難いほどは増大させない場合には仮想マシンを移動するように構成することができる。例えば、3Dグラフィックサービスマネージャ404を、各3DGPUにバインドされた仮想マシンの数、3DGPUごとに利用可能なグラフィックメモリの量、各3DGPUにバインドされた各仮想マシンにより開始されたDMAトランザクションの平均待ち時間、各グラフィック描画モジュールが3DGPUを使用する割合、各グラフィック描画モジュールに関連付けられたスループット、および/またはグラフィックカーネルコマンドの平均待ち時間、を決定するように構成することができる。3DGPUが過負荷であるとこの情報が示す場合には、3Dグラフィックサービスマネージャ404を、どの仮想マシンに最もストレスがかかっているかを示すように構成することができる。次いで3Dグラフィックサービスマネージャ404は、ストレスのかかった仮想マシンを別のグラフィック演算装置に割り当てることができる。この動作手続の割当て部分は、上述の割当てプロセスと同様である。例示的な実施形態では、3Dグラフィックサービスマネージャ404は、移動コマンドを新たなGPUのデバイス識別子とともにグラフィック描画モジュール、例えばグラフィック描画モジュール506に送信することによって、移動動作を開始することができる。本例では、グラフィック描画モジュール506が当該コマンドを受け取って、新たな識別子に関連付けられたGPU、例えば3DGPU504Bを見つけることができる。本例では、グラフィック描画モジュールを、任意の内部バッファをコピーし、3DGPU504Bにバインドし、3DGPU504へのマッピングを取り外すように構成することができる。バインド動作を完了した後、グラフィック描画モジュールは、移動が発生したことを3Dグラフィックサービスマネージャ404に通知することができ、グラフィックサービスマネージャ404はそのテーブルを更新して、グラフィック描画モジュール506が3DGPU504Bにアタッチされていることを反映することができる。図7を参照すると、例示的な実施形態では、移動動作を使用して、仮想マシンを別の仮想デスクトップサーバ400B~400Dに移動することができる。当該図に示すように、各仮想デスクトップサーバ400~400Dは、1組の1つまたは複数のグラフィック演算装置704~704Dと3Dグラフィックサービスマネージャ404~404Dのインスタンスを備えることができる。また、データセンタ700を制御するように構成できる管理システム702が示されている。管理システム702は、場合によっては、データセンタ700内の全ての他の3Dグラフィックサービスマネージャ404~404Dを制御できる、任意であると考えられることを示すために点線で示したマスタ3Dグラフィックサービスマネージャ706を備えることができる。各仮想マシンを特定する一意な情報を使用して移動動作を実現することができる。例えば、各仮想マシンを開始したとき、VMが開始したサーバで実行されている3Dグラフィックサービスマネージャ、例えば3Dグラフィックサービスマネージャ404が、データセンタ700内部の仮想マシンに対して一意な識別子を生成することができる。当該一意な識別子は、仮想マシンが描画を行っているグラフィック演算装置の種類、当該仮想マシンが使用するグラフィックメモリの推定量、等を含むことができる。例示的な実施形態では、仮想マシン414にストレスがかかり適切なGPUがサーバで利用できない場合には、3Dグラフィックサービスマネージャ404は当該一意な識別子をデータセンタ内部の各仮想デスクトップサーバに送信し、または場合によっては、管理システム702に送信することができる。当該一意な識別子が各仮想デスクトップサーバに送信される例では、グラフィックサービスマネージャ404~404Dは、仮想マシンをグラフィック演算装置に割り当てることができるか否かを、前述の段落で説明した情報に基づいて判定することができる。グラフィックサービスマネージャ、例えばグラフィックサービスマネージャ404Cが、仮想マシン414を処理できると判定する場合には、仮想デスクトップサーバ400を、仮想マシン414を仮想デスクトップサーバ400Cに移動するように構成することができる。上記一意な識別子がマスタ3Dグラフィックサービスマネージャ706に送信される例では、マスタ3Dグラフィックサービスマネージャ706を、データセンタ700内部の各3Dグラフィックサービスマネージャ404~404Dから全ての性能情報を含むように構成することができ、マスタ3Dグラフィックサービスマネージャ706が、仮想マシンをデータセンタ700内部の何れかのグラフィック演算装置に割り当てることができるか否かを前述の段落で説明した情報に基づいて判定することができる。以下は、動作手続を示す一連の流れ図である。理解を容易にするため、当該流れ図は、最初の流れ図が、全体の大局的な観点からの実装を表し、それに続く流れ図が点線で示したさらなる追加および/または詳細を提供するように構成されている。さらに、点線で示した動作手続は任意と考えられることは当業者には理解されよう。図8を参照すると、動作800、802、804、および806を含む、仮想マシン間のグラフィックプロセッサの使用を調整するための動作手続が示されている。動作800は、動作手続の開始を示し、動作802は、3Dグラフィックを第1の3Dグラフィック演算装置で描画するための1群の仮想マシンを割り当てることを示す。例えば、図6を参照すると、例示的な実施形態では、3Dグラフィックサービスマネージャ404がグラフィック演算装置で描画するための1群の仮想マシン、例えば3Dグラフィックを3Dグラフィック演算装置504で描画するための仮想マシン414、仮想マシン414D、および仮想マシン414Eを割り当てることができる。この具体的な例では、各仮想マシン414~414Fに、例えば図2のホスト204内部の、アプリケーションプログラムインタフェースの呼出しを介して3Dグラフィック演算装置504にバインドできる、仮想プラットフォーム402で実行されるグラフィック描画モジュール506、506D、および506Eを関連付けることができる。本例では、グラフィック描画モジュール506、506D、および506Eを、コマンドを示すプリミティブおよびAPIコンストラクトを含むDMAバッファを収集し、場合によっては当該コマンドを3Dグラフィックドライバ510が処理できるコマンドに変換し、当該コマンドを、DMAバッファを含むメモリのページとともにグラフィックカーネル508に発行するように構成することができる。図8の説明を続けると、動作804は、当該第1の3Dグラフィック演算装置がコマンドの応答に要した時間に少なくとも基づいて、第1の3Dグラフィック演算装置がオーバコミットされていると判定することを示す。例えば、例示的な実施形態では、3Dグラフィックサービスマネージャ404をプロセッサ上で実行し、3Dグラフィック演算装置504がオーバコミットされている、例えば3Dグラフィック演算装置504が全てのその要求を処理するために十分なリソースを有さず、そのためにリセットすることができ、グラフィック描画モジュール506、506D、および506Eが終了しうると、判定することができる。この具体的な例では、当該判定を、グラフィック演算装置、例えば3DGPU504がグラフィックカーネル508にACKで応答するために要した平均時間に少なくとも基づいて行うことができる。本例では、3Dグラフィックサービスマネージャ404が制御するテーブルを、ハードウェアがグラフィックカーネルのコマンドに応答するために要した待ち時間で更新することができ、3DGPU504に対して平均を計算することができる。当該平均を閾値の待ち時間の値と比較することができ、当該平均が当該閾値より大きい場合は、3Dグラフィックサービスマネージャ404を、3DGPU504がオーバコミットされていると判定するように構成することができる。図8の説明を続けると、動作806は、第1の3Dグラフィック演算装置がオーバコミットされているとの判定に少なくとも応答して、上記1群の仮想マシンから第1の仮想マシンを第2のグラフィック演算装置に移動することを示す。例えば、図6を再度参照すると、例示的な実施形態では、3Dグラフィックサービスマネージャ404を、第1の仮想マシン、例えば仮想マシン414を第2のグラフィック演算装置、例えば3DGPU504Bに移動するように構成することができる。1例では、仮想マシン414を3DGPU504Bに移動するには、グラフィック描画モジュール506を3DGPU504から3DGPU504Bに移動する必要がある。例えば、3Dグラフィックサービスマネージャ404は移動コマンドを3DGPU504Bのデバイス識別子とともにグラフィック描画モジュール506に送信することができる。グラフィック描画モジュール506は当該コマンドを受信し、内部バッファをコピーし、3DGPU504Bにバインドすることができる。バインド動作が完了した後、グラフィック描画モジュール506は3DGPU504へのマッピングを取り外し、完了信号を3Dグラフィックサービスマネージャ404に送信することができる。3Dグラフィックサービスマネージャ404はテーブルを更新して、仮想マシン414が3DGPU504Bにバインドされていることを反映することができる。先に進むと、グラフィック描画モジュール506は描画コマンドを3DGPU504Bへ発行することができ、平均コマンド待ち時間を3Dグラフィックサービスマネージャ404により監視することができる。次に図9を参照すると、追加の動作/改良908~916を含む図8の動作手続が示されている。動作908は、第2のグラフィック演算装置が制御する利用可能なグラフィックメモリの推定量が閾値より大きいと判定したことに応答して、第1の仮想マシンを第2のグラフィック演算装置に移動することを示す。例えば、図6を参照すると、例示的な実施形態では、3Dグラフィックサービスマネージャ404を、移動すべき3DGPU504にバインドされる仮想マシン、例えば仮想マシン414を選択するように構成することができる。本例では、仮想マシン414を3DGPU504Bに移動するとの判定を、3DGPU504Bに利用可能なグラフィックメモリの推定量が閾値より大きいとの判定に少なくとも基づいて行うことができる。当該判定が、仮想マシン414に対してグラフィックを描画するために利用されるグラフィックメモリの推定量に基づくこともできる。この場合、3Dグラフィックサービスマネージャ404を、3DGPU504が過負荷であるという判定と3DGPU504Bが仮想マシン414を収容できるとの判定に応答して、仮想マシン414を移動するように構成することができる。図9の説明を続けると、動作910は、第1の仮想マシンが開始したダイレクトメモリアクセスのトランザクションの平均待ち時間に基づいて、第1の3Dグラフィック演算装置がオーバコミットされていることを判定することが示されている。本例では、3Dグラフィックサービスマネージャ404が仮想マシン414を移動させることができる。なぜならば、仮想マシン414に関連付けられたDMAトランザクションの平均待ち時間が、例えば、3DGPU504にバインドされた全ての他のグラフィック描画モジュール506Dおよび506Eよりも大きいからである。本例では、3Dグラフィックサービスマネージャ404を、先ずグラフィックカーネル508が発行するコマンドの平均待ち時間を決定し、次いで、DMAトランザクションの当該平均待ち時間を使用して、仮想マシン414が当該GPUに関連付けられた最も高負荷の仮想マシンであると判定するように、構成することができる。動作912に移ると、第2のグラフィック演算装置に割り当てた第2の仮想マシンに対するダイレクトメモリアクセスのトランザクションの平均待ち時間が閾値未満であると判定したことに応答して、第1の仮想マシンを移動することが示されている。例示的な実施形態では、3Dグラフィックサービスマネージャ404を、3DGPU504Bにバインドされた1つまたは複数の仮想マシンに対するDMAトランザクションの平均応答時間が閾値未満であると判定したことに応答して、仮想マシン414を3DGPU504Bに移動すると判定するように構成することができる。例えば、3Dグラフィックサービスマネージャ404が、仮想マシン414Bに対するDMAトランザクションの平均応答時間を含むテーブルをチェックすることができる。3Dグラフィックサービスマネージャ404は、当該平均待ち時間を閾値と比較して、当該平均待ち時間が閾値未満であると判定することができる。これは、仮想マシン414B内部の負荷が低いことを示し、3DGPU504Bの負荷が低いことを推論的に示す。この場合、3Dグラフィックサービスマネージャ404を、本判定に少なくとも基づいてグラフィック描画モジュール506を移動するように構成することができる。動作914を参照すると、第2のグラフィック演算装置に割り当てられた仮想マシンの数が閾値未満であると判定したことに応答して、第1の仮想マシンを移動することが示されている。例示的な実施形態では、3Dグラフィックサービスマネージャ404を、3DGPU504Bにバインドされた仮想マシンの数が閾値数未満であると判定したことに応答して、仮想マシン414を3DGPU504Bに移動すると判定するように構成することができる。本例では、3Dグラフィックサービスマネージャ404を、3DGPU504Bに現在バインドされている仮想マシンの数図示した例では1を示す値をそのテーブルから読み出し、現在バインドされている仮想マシンの数が閾値数、即ち性能データおよび/または管理者の好みに基づく値より少ないように構成することができる。この場合、3Dグラフィックサービスマネージャ404を、少なくとも当該判定に基づいてグラフィック描画モジュール506を移動するように構成することができる。動作916を参照すると、第1のグラフィック演算装置と第2のグラフィック演算装置の機能を決定することが示されている。例えば、1実施形態では、3Dグラフィックサービスマネージャ404を、コンピュータシステム内の各3Dグラフィック演算装置の機能を決定するように構成することができる。例えば、以前の例を続けると、3Dグラフィックサービスマネージャ404を、3Dグラフィック演算装置504、504B、および504Cの機能を決定するように構成することができる。本例では、当該機能を使用して、グラフィック演算装置が仮想マシンに対する3Dグラフィックを処理できるかどうかを判定することができる。例えば、3Dグラフィックサービスマネージャ404を、グラフィックカードが共有のサーフェスとテクスチャをサポートするかどうか、グラフィックカードが例えば或るバージョンのDirectX登録商標を少なくともサポートするかどうか、グラフィック演算装置に関連付けられたグラフィックメモリの量、等をチェックするように構成することができる。本例では、当該情報を使用して、仮想マシン間のグラフィック演算装置の使用を調整するために使用できるテーブルを埋めることができる。次に図10を参照すると、動作1000、1002、1004、1006、および1008を含む、仮想マシン間のグラフィック演算装置の使用を調整するための動作手続が示されている。動作1000を参照すると、動作1000で当該動作手続が開始し、動作1002は、第1のグラフィック演算装置と第2のグラフィック演算装置の機能を受信することを示す。例えば、図5を参照すると、例示的な実施形態では、3Dグラフィックサービスマネージャ404を実行し、3Dグラフィックサービスマネージャ404が第1の仮想マシン、例えば仮想マシン414を3Dグラフィック演算装置、例えば3DGPU504に割り当てる要求を受信することができる。本例では、当該要求は、クライアント520のようなクライアントが仮想デスクトップセッションを要求したことを示す信号であることができる。図10の説明を続けると、動作1004は、第1の仮想マシンに対して3Dグラフィックを描画するために利用されるグラフィックメモリの量を推定することを示す。例えば、1実施形態では、3Dグラフィックサービスマネージャ404が、仮想マシン414が3Dグラフィックを描画するために利用できるグラフィックメモリの量、例えば、仮想マシンに対するグラフィックの適切な描画を少なくとも可能とするグラフィックメモリの量を推定することができる。例えば、当該推定を、仮想マシン414に関連付けられた構成ファイルから取得した情報に基づいて行うことができる。当該情報は、例えば、最後に実行されていたときに仮想マシン414が使用したグラフィックメモリの平均量を示す。別の例示的な実施形態では、仮想マシンに対してグラフィックを描画するために必要なグラフィックメモリの推定量を、画像を表示するために必要なメモリの最小量を記述する情報から推定することができる。別の例示的な実施形態では、グラフィックメモリの当該推定量が、プリミティブをキャッシュするために必要なメモリの推定量、等に基づくことができる。動作1006は、第1の3Dグラフィック演算装置でグラフィックを描画するように割り当てられた1群の仮想マシンが発行したダイレクトメモリアクセスのトランザクションに関連付けられた待ち時間の値が第1の閾値未満であり、3Dグラフィックを描画するために利用されるグラフィックメモリの推定量が第2の閾値未満であると判定したことに応答して、第1の3Dグラフィック演算装置を複数の3Dグラフィック演算装置から選択することを示す。例えば、3Dグラフィックサービスマネージャ404が、3DGPU504にバインドされた仮想マシンごとのDMAトランザクションの待ち時間の値を示す情報を格納することができる。例えば、仮想マシン414Dと414Eを、3Dグラフィックサービスマネージャ404が仮想マシン414を3DGPUに割り当てる要求を受け取ったときに3DGPU504にバインドしてもよい。本例では、3Dグラフィックサービスマネージャ404が当該テーブルから待ち時間の値を取得し、当該待ち時間の値を閾値と比較することができる。本例では、3Dグラフィックサービスマネージャ404はまた、仮想マシン414に対して3Dグラフィックを描画するために利用されるグラフィックメモリの推定量を閾値と比較することができる。仮想マシン414Dおよび414Eの平均待ち時間が閾値未満であり仮想マシン414に対して3Dグラフィックを描画するために利用されるグラフィックメモリの推定量が第2の閾値未満である場合には、3Dグラフィックサービスマネージャ404は3DGPU504を選択することができる。例示的な実施形態では、第2の閾値、即ち、3Dグラフィックを描画するために利用されるグラフィックメモリの推定量に関連付けられた閾値は、3DGPU504が制御するグラフィックメモリの総量、ならびに、仮想マシン414Dおよび414Eに対して3Dグラフィックを描画するために利用されるグラフィックメモリの推定量に基づくことができる。例えば、仮想マシン414Dおよび414Eが開始したとき、3Dグラフィックサービスマネージャ404が、仮想マシン414Dおよび414Eに対して3Dグラフィックを描画するために利用されるグラフィックメモリの推定量を計算し、その値をテーブルに格納しておくことができる。3Dグラフィックサービスマネージャ404が仮想マシン414Dおよび414Eの各々に対して3DGPU504を選択したとき、3Dグラフィックサービスマネージャ404は、それに関連する、3Dグラフィックを描画するために利用されるグラフィックメモリの推定量を、GPU504が制御する利用可能なグラフィックメモリの推定量から差し引き、その値をテーブルに格納しておくことができる。次にこの値を第2の闘値として使用することができ、または、当該第2の閾値が当該値に少なくとも部分的に基づくことができる。動作1008は、第1の3Dグラフィック演算装置で3Dグラフィックを描画するための第1の仮想マシンを割り当てることを示す。例えば、図6を再度参照すると、例示的な実施形態では、3Dグラフィックサービスマネージャ404を、グラフィック描画モジュール506をインスタンス化し、3Dグラフィック演算装置504にバインドするコマンドをグラフィック描画モジュール506に送信するように構成することができる。グラフィック描画モジュール506は、当該コマンドを受信して、3Dグラフィック演算装置504にバインドすることができる。グラフィック描画モジュール504が3Dグラフィック演算装置504にバインドし、通信チャネルが仮想マシン414とグラフィック描画モジュール506の間で確立された後、グラフィック描画モジュール506は頂点のDMAバッファを受け取って、それらを3Dグラフィック演算装置504で描画することができる。図11を参照すると、追加の動作1110~1118を含む図11の動作手続が示されている。動作1110は、第1の仮想マシンに対して3Dグラフィックを描画するために利用されるグラフィックメモリの量を、少なくとも、当該1群内の仮想マシンごとに画素の次元を特定する情報から推定することを示す。例えば、1実施形態では、仮想マシンごとに3Dグラフィックを描画するために利用されるグラフィックメモリの量が、当該仮想マシンに関連付けられた画素の次元に基づくことができる。例えば、仮想マシンがインスタンス化されたとき、当該仮想マシンに対して望ましいディスプレイ解像度のような情報を含む構成ファイルを受信することができる。3Dグラフィックサービスマネージャ404は、当該情報を受け取って、当該情報を使用して当該仮想マシンに対して3Dグラフィックを描画するために利用されるグラフィックメモリの量を推定することができる。例えば、画素の次元は、モニタで表示できる各次元における相違なる画素の数を記述する。モニタは2次元の表面であるので、当該次元として2つの次元のみが使用される高さと幅。例示的な実施形態では、画素の次元に画素の深度を乗じて8で除すことができる。その結果、画像を所望のディスプレイ解像度で描画するために利用できるグラフィックメモリの量が記述される。図11の説明を続けると、動作1112は、第1の仮想マシンに対して3Dグラフィックを描画するために利用されるグラフィックメモリの量を、少なくとも、第1の3Dグラフィック演算装置が使用する圧縮率を特定する情報から推定することを示す。例えば、1実施形態では、圧縮率、即ち圧縮画像のサイズと未圧縮画像のサイズの間の割合を用いて、仮想マシンに対して画像を適切に描画するためにどれくらい多くのグラフィックメモリを仮想マシンが使用するかを推定することができる。例えば、3Dグラフィック演算装置を、圧縮されたテクスチャを用いてそのサイズを減ずるように構成することができる。3Dグラフィックサービスマネージャ404がハードウェアに問い合わせると、3Dグラフィックサービスマネージャ404はテクスチャ圧縮が可能であるか否かおよびどの圧縮率が達成されるかを判定することができる。3Dグラフィックサービスマネージャ404はこの情報を使用して、仮想マシンが使用するグラフィックメモリの量を推定することができる。動作1114を参照すると、動作1114は、第1の仮想マシンに対して3Dグラフィックを描画するために利用されるグラフィックメモリの量を、少なくとも、第1の仮想マシンに対して描画すべきサーフェスの推定数を特定する情報から推定することを示す。例えば、1実施形態では、仮想マシンが描画を試みるサーフェスの推定数を使用して、仮想マシンに対して3Dグラフィックを適切に描画するために仮想マシンが使用することとなるグラフィックメモリの量を推定することができる。動作1116を参照すると、動作1116は、グラフィックカーネルが発行した少なくとも1つのコマンドの待ち時間が第3の閾値未満であると判定したことに応答して、第1の3Dグラフィック演算装置を複数の3Dグラフィック演算装置から選択することを示す。例えば、図6を参照すると、例示的な実施形態では、3Dグラフィックサービスマネージャ404をプロセッサで実行し、3Dグラフィックサービスマネージャ404は、少なくとも、グラフィック演算装置、例えば3DGPU504が、グラフィックカーネル508が発行した少なくとも1つのコマンドにACKで応答するために要した時間が閾値未満であると判定したことに応答して、3Dグラフィック演算装置504で描画するための仮想マシン414を割り当てることができる。本例では、3Dグラフィックサービスマネージャ404が制御するテーブルを、ハードウェアがグラフィックカーネルのコマンドに応答するために要した待ち時間で更新することができ、例示的な実施形態では、当該待ち時間を使用でき、または、平均を3DGPU504に対して計算することができる。当該平均を使用する例では、当該平均を閾値の待ち時間の値と比較し、当該平均が当該閾値より大きい場合は、3Dグラフィックサービスマネージャ404を、3DGPU504がオーバコミットされていると判定するように構成することができる。次に動作1118を参照すると、動作1118は、第1の3Dグラフィック演算装置に現在割り当てられている仮想マシンの数が第4の閾値未満であると判定したことに応答して、第1の3Dグラフィック演算装置を複数の3Dグラフィック演算装置から選択することを示す。3Dグラフィックサービスマネージャ404を、3Dグラフィック演算装置504にバインドされた仮想マシンの数が閾値数未満であると判定したことに応答して、仮想マシン414に対してグラフィックを描画するための3Dグラフィック演算装置504を選択すると判定するように構成することができる。本例では、3Dグラフィックサービスマネージャ404を、3Dグラフィック演算装置504に現在バインドされている仮想マシンの数図示した例では2を示す値をそのテーブルから読み出し、現在バインドされた仮想マシンの数が閾値数、即ち性能データおよび/または管理者の好みに基づく数未満であると判定するように構成することができる。図12を参照すると、図12は、動作1200、1202、1204、1206、および1208を含む動作手続を示す。動作1200で当該動作手続が開始し、動作1202は、少なくとも、仮想マシンに対してグラフィックを描画するために利用されるグラフィックメモリの量を推定することを示す。例えば、1実施形態では、3Dグラフィックサービスマネージャ404が、仮想マシン、例えば仮想マシン414がインスタンス化されているとの指示を受信することができ、3Dグラフィックサービスマネージャ404が動作手続を開始して、それを実行するためのグラフィック演算装置、例えば3Dグラフィック演算装置504を選択することができる。本例では、当該動作手続が、仮想マシン414に対してグラフィックを適切に描画するために使用されるグラフィックメモリの量を推定することを含むことができる。例えば、グラフィックメモリの推定量を、仮想マシンには実行時にどれだけメモリが集約的となるかを示すものとして使用することができる。利用されるグラフィックメモリの量を前述のように推定することを、画像を表示するために必要なメモリの最小量に基づいて行うことができる。別の例示的な実施形態では、グラフィックメモリの推定量が、頂点を生成するために必要なプリミティブを格納するために必要なメモリの推定量、頂点に適用されるテクスチャ、頂点がどの色であるべきか、アンチエイリアス技法をオブジェクトに適用するためのメモリ、等に基づくことができる。1例では、この推定が静的である、即ち、期待される利用に基づいて管理者が設定することができ、または、この推定が動的であることができる。例えば、仮想マシン414が利用または利用を試みるグラフィックメモリの量を、長時間にわたって、即ち、仮想デスクトップセッションにわたって監視することができ、当該推定値を用いて当該推定を改良することができる。次に動作1204を参照すると、動作1204は、グラフィックメモリの推定量を、複数の3Dグラフィック演算装置が制御する利用可能なグラフィックメモリの推定量と比較することを示す。例えば、3Dグラフィックサービスマネージャ404を、仮想マシン414が利用するグラフィックメモリの推定量を仮想デスクトップサーバ400にアタッチされたグラフィック演算装置ごとに利用可能なグラフィックメモリの推定量と比較するように構成することができる。本例では、3Dグラフィックサービスマネージャ404は、前もって、グラフィック演算装置を収容するグラフィックカード内に統合されたグラフィックメモリの量を取得し、当該情報をテーブルに格納しておくことができる。さらに、仮想マシンがグラフィック演算装置にバインドされる度に、3Dグラフィックサービスマネージャ404を、仮想マシンが使用するグラフィックメモリの推定量を、合計値から差し引き、その値をテーブルに格納するように構成することができる。ここで、3Dグラフィックサービスマネージャ404は、仮想マシン414が必要とするグラフィックメモリの推定量を、3DGPU504、3DGPU504B、および3DGPU504Cで利用可能なグラフィックメモリの推定量と比較することができる。図12の説明を続けると、動作1206は、当該比較に従って、仮想マシンに対して3Dグラフィックを描画するための3Dグラフィック演算装置を複数の3Dグラフィック演算装置から選択することを示す。例えば、3Dグラフィックサービスマネージャ404は、仮想マシンをバインドするGPU、例えば3DGPU506を、少なくとも当該比較の結果に基づいて選択することができる。例えば、以前の例を続けると、3Dグラフィックサービスマネージャ404は、3DGPU504が仮想マシン414をホストできることを、3DGPU504が十分なグラフィックメモリを有すると推定されるという事実に少なくとも部分的に基づいて判定することができる。次に動作1208を参照すると、動作1208は、仮想マシンに対して3Dグラフィックを描画するための選択された3Dグラフィック演算装置を割り当てることを示す。例えば、図6を再度参照すると、例示的な実施形態では、3Dグラフィックサービスマネージャ404を、グラフィック描画モジュール506をインスタンス化し、3Dグラフィック演算装置504にバインドするコマンドをグラフィック描画モジュール506に送信するように構成することができる。グラフィック描画モジュール506は、当該コマンドを受け取って、3Dグラフィック演算装置504にバインドすることができる。図13を参照すると、追加の動作1310~1322を含む図13の動作手続が示されている。動作1310は、少なくとも、仮想マシンが開始したダイレクトメモリアクセスのグラフィックトランザクションの平均待ち時間に基づいて、3Dグラフィック演算装置がオーバコミットされていることを判定したことに応答して、仮想マシンを第2のグラフィック演算装置に移動することを示す。例えば、図6を参照すると、例示的な実施形態では、3Dグラフィックサービスマネージャ404をプロセッサで実行し、3Dグラフィックサービスマネージャ404が、3Dグラフィック演算装置504がオーバコミットされている、例えば、3Dグラフィック演算装置504がその全ての要求に応える十分なリソースがなくリセットされ、グラフィック描画モジュール506、612、および614が終了することとなると判定することができる。この具体的な例では、当該判定は、仮想マシン414が開始したDMAグラフィックトランザクションの平均待ち時間に基づくことができる。本例では、仮想マシンの平均待ち時間を閾値と比較することができ、3Dグラフィックサービスマネージャ404を、3DGPU504のリソースがオーバコミットされていることを少なくともこの情報に基づいて判定するように構成することができる。当該判定に応答して、3Dグラフィックサービスマネージャ404を、グラフィック描画モジュール506を3DGPU504Bまたは504Cのような別のGPUに移動するように構成することができる。図13の説明を続けると、動作1312は、グラフィックカーネルが3Dグラフィック演算装置に発行したグラフィックコマンドの平均待ち時間に少なくとも基づいて、3Dグラフィック演算装置がオーバコミットされていることを判定したことに応答して、仮想マシンを第2のグラフィック演算装置に移動することを示す。例えば、例示的な実施形態では、グラフィックカーネル508がACKを受信する前にコマンドを発行するために要した平均時間の長さを記述する情報を使用して、3DGPU504がオーバコミットされているかどうかを判定することができる。本例では、3Dグラフィックサービスマネージャ404が制御するテーブルを、グラフィックカーネルのコマンドの待ち時間で更新することができ、平均を3DGPU504に対して計算することができる。当該平均を閾値の待ち時間の値と比較し、当該平均が当該閾値より大きい場合は、3Dグラフィックサービスマネージャ404を、3DGPU504がオーバコミットされていると判定するように構成することができる。当該判定に応答して、3Dグラフィックサービスマネージャ404を、グラフィック描画モジュール506を3DGPU504Bまたは504Cのような別のGPUに移動するように構成することができる。動作1314を参照すると、選択された3Dグラフィック演算装置に現在割り当てられている仮想マシンの数が閾値未満であると判定することを示す。3Dグラフィックサービスマネージャ404を、3DGPU504Bにバインドされた仮想マシンの数が閾値数未満であると判定したことに応答して仮想マシン414を3DGPU504Bに移動すると決定するように構成することができる。本例では、3Dグラフィックサービスマネージャ404を、3DGPU504Bに現在バインドされている仮想マシンの数図示した例では1を示す値をそのテーブルから読み出し、現在バインドされている仮想マシンの数が閾値数、即ち、性能データおよび/または管理者の好みに基づく数より少ないと判定するように構成することができる。この場合、3Dグラフィックサービスマネージャ404を、少なくとも当該判定に基づいてグラフィック描画モジュール506を移動するように構成することができる。動作1316を参照すると、動作1316は、複数の3Dグラフィック演算装置における各3Dグラフィック演算装置のハードウェア機能を決定することを示す。例えば、1実施形態では、3Dグラフィックサービスマネージャ404を、コンピュータシステム内の各3Dグラフィック演算装置の機能を決定するように構成することができる。例えば、以前の例を続けると、3Dグラフィックサービスマネージャ404を、3Dグラフィック演算装置504と3Dグラフィック演算装置B616の機能を決定するように構成することができる。本例では、当該機能を使用して、グラフィック演算装置が仮想マシンに対する3Dグラフィックを処理できるかどうかを判定することができる。例えば、3Dグラフィックサービスマネージャ404を、グラフィックカードが共有のサーフェスとテクスチャをサポートするかどうか、グラフィックカードが例えば或るバージョンのDirectX登録商標を少なくともサポートするかどうか、グラフィック演算装置に関連付けられたグラフィックメモリの量、等をチェックすると決定することができる。本例では、当該情報を使用して、仮想マシン間のグラフィック演算装置の使用を調整するために使用できる、3Dグラフィックサービスマネージャ404が制御するテーブルを埋めることができる。動作1318を参照すると、動作1318は、仮想マシンに対して3Dグラフィックを描画するために利用されるグラフィックメモリの量を、少なくとも、仮想マシンに対する画素の次元を特定する情報から推定することを示す。例えば、1実施形態では、仮想マシンごとにグラフィックを描画するために利用されるグラフィックメモリの量が、当該仮想マシンに関連付けられた画素の次元に基づくことができる。例えば、仮想マシンがインスタンス化されたとき、当該仮想マシンに対する所望のディスプレイ解像度のような情報を含む構成ファイルを受信することができる。3Dグラフィックサービスマネージャ404は、当該情報を受け取って、当該情報を使用してこの仮想マシンに対して3Dグラフィックを描画するために利用されるグラフィックメモリの量を推定することができる。動作1320を参照すると、動作1320は、仮想マシンに対して3Dグラフィックを描画するために利用されるグラフィックメモリの量を、少なくとも、選択された3Dグラフィック演算装置が使用する圧縮率を特定する情報から推定することを示す。例えば、1実施形態では、圧縮率、即ち圧縮画像のサイズと未圧縮画像のサイズの間の割合を用いて、仮想マシンに対して画像を適切に描画するためにどれくらい多くのグラフィックメモリを仮想マシンが使用するかを推定することができる。例えば、第1の3Dグラフィック演算装置を、圧縮されたテクスチャを用いてそのサイズを減ずるように構成することができる。3Dグラフィックサービスマネージャ404がハードウェアに問い合わせると、3Dグラフィックサービスマネージャ404はテクスチャ圧縮が可能であるか否かおよびどの圧縮率が達成されるかを判定することができる。3Dグラフィックサービスマネージャ404はこの情報を使用して、仮想マシンが使用するグラフィックメモリの量を推定することができる。動作1322は、仮想マシンに対して3Dグラフィックを描画するために利用されるグラフィックメモリの量を、少なくとも、当該仮想マシンに対して描画すべきサーフェスの推定数を特定する情報から推定することを示す。例えば、1実施形態では、仮想マシンが描画を試みるサーフェスの推定数を使用して、仮想マシンに対して3Dグラフィックを適切に描画するために仮想マシンが使用するグラフィックメモリの量を推定することができる。例えば、サーフェスは、3Dグラフィック内のオブジェクトを表現する1つの方法であり、バッファに格納される。以上の詳細な説明では、種々の例および/または動作図を通じてシステムおよび/またはプロセスの様々な実施形態を説明した。かかるブロック図および/または種々の例が1つまたは複数の機能および/または動作を含む限り、かかるブロック図または種々の例における各機能および/または動作を、個別におよび/または集合的に、広範囲のハードウェア、ソフトウェア、ファームウェア、または事実上それらの任意の組合せで実装できることは当業者には理解されよう。本明細書に記載の本発明の特定の態様を図示および説明したが、本明細書の教示事項に基づいて、本明細書に記載の主題およびその広範囲の態様から逸脱しない変更および修正を行ってもよく、したがって添付の特許請求の範囲が、その範囲において、全てのかかる変更および修正を、それらが本明細書に記載の本発明の真の趣旨と範囲内にあるように包含するものであることは当業者には明らかであろう。