(57)【要約】      （修正有）【課題】ストリーミング・サーバのセッションのアイドル状態を最適化する方法を提供する。【解決手段】グラフィックス・レンダリング・サービスは、リモート・コンピューティング施設によってクライアント・デバイスに提供する。１つまたは複数のレンダリング・プロセスはホスト・コンピューティング・デバイス上で動作する仮想マシン上で実行される。クライアント状態情報は、非アクティブ期間を検知するためにモニタリングされる。レンダリング・プロセスは、それが実行する仮想マシンを一時停止することにより非アクティブ化される。アクティビィティが回復すると、レンダリング・プロセスは仮想マシンの実行の再開により再アクティブ化される。【選択図】図４
2020024722.tif 000002
【特許請求の範囲】
【請求項１】
１つまたは複数のプロセッサと、
命令のセットを格納する１つまたは複数のメモリと、
を備えるシステムであって、
前記命令は、前記１つまたは複数のプロセッサによって実行されると、前記１つまたは複数のプロセッサに、
仮想マシン上で動作するレンダリング・プロセスによって、１つまたは複数のクライアントのためのグラフィックス・レンダリング・サービスを実行するステップと、
第１の時間にモニタリング・コンポーネントによって、前記１つまたは複数のクライアントから前記グラフィックス・レンダリング・サービスのための第１の要求を受信するステップと、
前記グラフィックス・レンダリング・サービスのための次の要求が、前記第１の時間から第１の閾値期間以内に、前記モニタリング・コンポーネントによって、前記１つまたは複数のクライアントから受信されていないという第１の判断を実行するステップと、
前記仮想マシン上のアクティブなレンダリング・プロセスの数が、１より大きいアクティブなレンダリング・プロセスの閾値数未満に落ちたという第２の判断を実行するステップと、
前記第２の判断に少なくとも部分的に基づいて、前記仮想マシン上の前記アクティブなレンダリング・プロセスの１つまたは複数を、１つまたは複数の他の仮想マシンに移動するステップと、
前記第１の判断および前記第２の判断に少なくとも部分的に基づいて、前記仮想マシンの動作を一時停止するステップと、
前記１つまたは複数のクライアントから前記グラフィックス・レンダリング・サービスのための第２の要求を受信することを表す受信情報に少なくとも部分的に基づいて、前記仮想マシンの動作を再開するステップと、
を含む動作を実行させる、
システム。
【請求項２】
前記動作は、前記仮想マシンの状態を待ち時間の短いキャッシュ内に格納するステップをさらに含む、
請求項１に記載のシステム。
【請求項３】
前記動作は、前記グラフィックス・レンダリング・サービスのための次の要求が、前記第１の時間に前記グラフィックス・レンダリング・サービスのための前記第１の要求を受信してから第２の閾値期間以内に、前記モニタリング・コンポーネントによって、前記１つまたは複数のクライアントから受信されないと判断するステップに応答して、前記仮想マシンの状態をストレージ・デバイス上に格納するステップをさらに含む、
請求項１に記載のシステム。
【請求項４】
前記仮想マシンの前記動作を一時停止するステップは、前記仮想マシンの状態をメモリ内に保持するステップを含む、
請求項１に記載のシステム。
【請求項５】
前記動作は、
前記１つまたは複数のクライアントのための前記グラフィックス・レンダリング・サービスを実行することを表す要求を受信するステップであって、前記１つまたは複数のクライアントは、グラフィックス・リソースのセットに関連付けられたプロセスを実行するステップと、
前記仮想マシンをアクティブ化するステップであって、前記仮想マシンは、グラフィックス・リソースの前記セットにアクセスする前記レンダリング・プロセスを実行するように構成されている前記仮想マシンに少なくとも部分的に基づいて、アクティブ化のために選択されるステップと、
をさらに含む、
請求項１に記載のシステム。
【請求項８】
前記動作は、レンダリング・プロセスの状態を前記仮想マシンから他の仮想マシンに移動するステップをさらに含む、
請求項１に記載のシステム。
【請求項９】
前記レンダリング・プロセスをアクティブ状態に保つ要求は、ある期間ユーザ入力が予測されない状態に入ることに少なくとも部分的に基づく、
請求項１に記載のシステム。
【請求項１０】
前記動作は、
前記１つまたは複数のクライアントのための前記グラフィックス・レンダリング・サービスを実行することを表す要求を受信するステップであって、前記１つまたは複数のクライアントは、グラフィックス・リソースのセットに関連付けられたプロセスを実行するステップと、
前記仮想マシン上で実行する１つまたは複数の他のプロセスによってレンダリングされるコンテンツに少なくとも部分的に基づいて、複数の仮想マシンから前記レンダリング・プロセスを実行する前記仮想マシンを選択するステップと、
をさらに含む、
請求項１に記載のシステム。
【請求項１１】
前記動作は、前記レンダリング・プロセスの動作を再開する時間を表す情報を、前記１つまたは複数のクライアントのうちの１つのクライアントに送信するステップをさらに含む、
請求項１に記載のシステム。
【請求項１２】
仮想マシン上で動作するレンダリング・プロセスによって、１つまたは複数のクライアントのためのグラフィックス・レンダリング・サービスを実行するステップと、
第１の時間にモニタリング・コンポーネントによって、前記１つまたは複数のクライアントから前記グラフィックス・レンダリング・サービスのための第１の要求を受信するステップと、
前記グラフィックス・レンダリング・サービスのための次の要求が、前記第１の時間から第１の閾値期間以内に、前記モニタリング・コンポーネントによって、前記１つまたは複数のクライアントから受信されていないという第１の判断を実行するステップと、
前記仮想マシン上のアクティブなレンダリング・プロセスの数が、１より大きいアクティブなレンダリング・プロセスの閾値数未満に落ちたという第２の判断を実行するステップと、
前記第２の判断に少なくとも部分的に基づいて、前記仮想マシン上の前記アクティブなレンダリング・プロセスの１つまたは複数を、１つまたは複数の他の仮想マシンに移動するステップと、
前記第１の判断および前記第２の判断に少なくとも部分的に基づいて、前記仮想マシンの動作を一時停止するステップと、
前記１つまたは複数のクライアントから前記グラフィックス・レンダリング・サービスのための第２の要求を受信することを表す受信情報に少なくとも部分的に基づいて、前記仮想マシンの動作を再開するステップと、
を含む方法。
【請求項１３】
前記仮想マシンの状態を待ち時間の短いキャッシュ内に格納するステップをさらに含む、
請求項１２に記載の方法。
【請求項１４】
前記グラフィックス・レンダリング・サービスのための次の要求が、前記第１の時間に前記グラフィックス・レンダリング・サービスのための前記第１の要求を受信してから第２の閾値期間以内に、前記モニタリング・コンポーネントによって、前記１つまたは複数のクライアントから受信されないと判断するステップに応答して、前記仮想マシンの状態をストレージ・デバイス上に格納するステップをさらに含む、
請求項１２に記載の方法。
【請求項１５】
前記仮想マシンの前記動作を一時停止するステップは、前記仮想マシンの状態をメモリ内に保持するステップを含む、
請求項１２に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、２０１３年１１月１１日に出願の米国特許出願番号第１４／０７７，１４６号公報の優先権を主張するものであり、その開示の全体は本明細書に参照により組み込まれる。
【０００２】
関連発明の相互参照
本出願は、以下の出願に関連しており、各出願の全体は本明細書に参照により組み込まれている：２０１３年１１月１１日に出願の「関心領域に基づくビデオのエンコード」と題された米国特許出願番号第１４／０７６，７１８号公報（代理人整理番号：１０１０５８．００００８３）；２０１３年１１月１１日に出願の「サービス品質に基づく適応可能なシーン・コンプレキシティ」と題された米国特許出願番号第１４／０７６，８２１号公報（代理人整理番号：１０１０５８．００００８４）；２０１３年１１月１１日に出願の「グラフィックス・オブジェクト・データの作成サービス」と題された米国特許出願番号第１４／０７７，１２７号公報（代理人整理番号：１０１０５８．００００８６）；２０１３年１１月１１日に出願の「リモート・オブジェクト・データに基づく画像合成」と題された米国特許出願番号第１４／０７７，１３６号公報（代理人整理番号：１０１０５８．００００８７）；２０１３年１１月１１日に出願の「複数の並列グラフィックス処理ユニット」と題された米国特許出願番号第１４／０７７，１６５号公報（代理人整理番号：１０１０５８．０００１１０）；２０１３年１１月１１日に出願の「適応可能なコンテンツ送信」と題された米国特許出願番号第１４／０７７，０８４号公報（代理人整理番号：１０１０５８．０００１１４）；２０１３年１１月１１日に出願の「共有状態に基づくビュー作成」と題された米国特許出願番号第１４／０７７，１８０号公報（代理人整理番号：１０１０５８，０００１１５）；２０１３年１１月１１日に出願の「複数のストリーム・コンテンツ提示」と題された米国特許出願番号第１４／０７７，１８６号公報（代理人整理番号：１０１０５８．０００１１６）；２０１３年１１月１１日に出願の「複数ビュー作成のためのデータ収集」と題された米国特許出願番号第１４／０７７，１４９号公報（代理人整理番号：１０１０５８．０００１２４）；２０１３年１１月１１日に出願の「ストリーミング・ゲーム・サーバ・ビデオ・レコーダ」と題された米国特許出願番号第１４／０７７，１４２号公報（代理人整理番号：１０１０５８．０００１２５）；２０１３年１１月１１日に出願の「アクタ・リソースのロケーション」と題された米国特許出願番号第１４／０７６，８１５号公報（代理人整理番号：１０１０５８．０００１２８）；２０１３年１１月１１日に出願の「アプリケーション・ストリーミング・サービス」と題された米国特許出願番号第１４／０７７，０２３号公報（代理人整理番号：１０１０５８．０００１３９）；２０１３年１１月１１日に出願の「アプリケーション・ストリーミング・サービス」と題された米国特許出願（代理人整理番号：１０１０５８．０００１３９）；２０１３年１１月１１日に出願の「効率的なバンド幅の推定」と題された米国特許出願（代理人整理番号：１０１０５８．０００１４１）。
【背景技術】
【０００３】
携帯電話、タブレット型コンピュータ、ゲーム機などのコンピューティング・デバイスは、ある用途にとって十分な速度と微細さでグラフィックスをレンダリングするために装備することができない。ゲームに使用する画像を作成するプロセスとして説明することができるグラフィックスのレンダリングには、コンピューティング・デバイス上で利用することができないグラフィックス・プロセッシング・ユニットなどの特殊なコンピューティング・リソースを利用する場合がある。ある場合には、リソースは利用可能であるが、電力消費が過剰であったり、動作速度が不十分であったり、提供するグラフィックの質が不十分なレベルであったりした。
【０００４】
グラフィックスをレンダリングする能力は、遠隔の施設にあるコンピューティング・リソースによってクライアント・デバイスに提供することができる。この施設は、例えば、レンダリング・サービスを提供するために特化した列を成すグラフィックス・プロセッシング・ユニット（「ＧＰＵ」）群、または他のハードウェアを備えることができる。しかし、例え、特化したハードウェアを使用しても、グラフィックス・レンダリング・サービスは、かなりな量のコンピューティング・リソースを消費する場合がある。例えば、グラフィックス・レンダリングは、メモリに様々なモデル、テクスチャ、ビットマップなどをロードすることを伴う場合がある。これらのリソースは、従属したプロセスがクライアント・デバイス上で動作している間、メモリに保持することができる。リソース利用の管理によってレンダリング・サービスの性能および効率を向上させることができる。
【０００５】
添付された図面と併せて読めば、以下の詳細な説明をより良く理解することができる。例示の目的のために、本開示の様々な態様の実施形態の例が図面に示されているが、実施形態は開示された特定の方法および手段に限定されるものではない。
【図面の簡単な説明】
【０００６】
【図１】クライアント・プロセスに遠隔レンダリング・サービスを提供するシステムの一例を示すブロック図である。
【図２】遠隔レンダリング・サービスを利用するように構成されたクライアントを示すブロック図である。
【図３】レンダリング・プロセスが仮想マシン・インスタンス上で実行されるコンテンツ・プロバイダ・システムの一例を示すブロック図である。
【図４】仮想マシン・インスタンス上で実行されるレンダリング・プロセスをアクティブ化および非アクティブ化するプロセスの一例を示すフローチャートである。
【図５】レンダリング・プロセスおよびレンダリング・プロセスが実行できる仮想マシン・インスタンスをクライアントと関連付けるプロセスの一例を示すフローチャートである。
【図６】レンダリング・プロセスを実行するように構成された仮想マシン・インスタンスのプールを維持するプロセスの一例を示すフローチャートである。
【図７】いくつかの実施形態で使用することができるコンピューティング・システムの一例を示すブロック図である。
【図８】いくつかの実施形態で使用することができるコンピューティング・システムの一例を示すブロック図である。
【発明を実施するための形態】
【０００７】
開示された技術のいくつかの例示的な特徴によれば、コンテンツ・プロバイダがビデオゲームなどの特定のコンテンツ・アイテムの一シーンの１つ以上のレンダリングされたビューを生成し、それらを複数の異なるクライアントに送信することができる。いくつかの場合では、コンテンツ・プロバイダは、特定のコンテンツ・アイテムの一シーンまたは仮想環境の複数のビューを生成することができる。例えば、複数のビューのそれぞれを、１つ以上のそれぞれのクライアントに関連付けることができ、コンテンツ・プロバイダからそれぞれのクライアントに送信することができる。例えば、各ビューは、それが送信されたそれぞれのクライアントによってコントロールされる特定のキャラクタまたは他のエンティティの視点からのシーンを提示することができる。これらのビューは、コンテンツ・プロバイダによって維持されたゲームの共有状態または他の映像コンテンツに基づくことができる。いくつかの場合では、コンテンツ・プロバイダは、特定のコンテンツ・アイテムの一シーンの同一のビューを複数のクライアントに送信することができる。例えば、同一のビューを特定のキャラクタの視点からゲームを見ているクライアントに送信することができる。
【０００８】
コンテンツ・プロバイダは、レンダリング・プロセスを通してレンダリング・サービスを提供することができる。いくつかの場合および実施形態では、レンダリング・プロセスは実行可能なアプリケーションのインスタンスに対応することができる。しかし、その代わりに、レンダリング・プロセスは、コンポーネント起動、ライブラリ呼び出し、オブジェクト、実行可能なアプリケーションの複数のインスタンスなどを含むことができる。
【０００９】
レンダリング・プロセスは、１人またはそれ以上のクライアントのセットに関連付けることができる。同様に、各クライアントは、１人またはそれ以上のユーザに関連付けることができる。レンダリング・プロセスは、ゲーム、アニメーション、テレビ番組などの特別なコンテンツ項目に関連付けることができる。また、レンダリング・プロセスは、コンテンツ項目のインスタンスに関連付けることもできる。例えば、マルチプレイヤ・ゲームは、クライアントのセットの間の相互作用を提供することができる。かかる場合、実施形態は、レンダリング・プロセスをクライアントのセットと関連付けることができる。いくつかの場合および実施形態では、複数のレンダリング・プロセスをゲームのインスタンスに関連付けることができ、各レンダリング・プロセスは１人またはそれ以上のクライアントに関連付けられる。この手法は、例えば、大人数のマルチプレイヤ・ゲームまたは映画やテレビ番組のグループ視聴に採用できる可能性がある。
【００１０】
表示コンテンツの単一の共有状態の生成を可能にし、その状態の中から、一シーンの１つ以上のビューを選択するために、異なる各参加クライアントは、それぞれのクライアント状態情報を集めることができる。クライアント状態情報は、例えば、それぞれのキャラクタまたはそれぞれのクライアントによってコントロールされる他のエンティティによって行われる動きまたは他の行動などのそれぞれのクライアントが行う操作に関する情報を含むことができる。クライアントは、定期的にコンテンツ・プロバイダに、そのそれぞれのクライアントの状態情報の最新版を送信することができる。次いで、コンテンツ・プロバイダは、各クライアントから受け取ったクライアント状態情報の最新版を使用して、コンテンツ・プロバイダが維持している共有コンテンツ・アイテムの状態情報を更新することができる。次いで、コンテンツ・プロバイダは、共有コンテンツ・アイテムの状態情報を使用して異なる参加クライアントに送信される１つ以上のビューを生成することができる。
【００１１】
クライアント状態情報はまた、クライアントのユーザによる入力に関連またはその入力を反映した情報も含む。例えば、クライアントのユーザは、ボタンを押し、ジョイスティックを動かし、マイクに向かって話す、その他、をすることができる。提示された例などのクライアントからの入力は、それぞれのクライアントによりコントロールされるそれぞれのキャラクタまたは他のエンティティによって行われる動きまたは他の行動を生じさせることができる。いくつかの場合および実施形態では、入力がゲーム・キャラクタのコントロールに関係していない場合がある。入力は、ユーザの存在に対応することもできるはずである。例えば、動きに敏感なカメラが、クライアントのユーザが存在することを示すことができるはずである。
【００１２】
いくつかの実施形態では、クライアントの状態情報は、観客状況、記録状況などの情報を含むことができる。例えば、ユーザはマルチプレイヤ・ゲームの観客となることができる。その場合、クライアント状態情報は、観客がクライアントに入力をしない可能性があったり、または、間欠的に入力をしている場合であっても、観客の存在を示す情報を含むことができる。別の実施形態では、クライアント・デバイスが情報を記録していてもよい。その場合、クライアント状態情報は、送信されたコンテンツが記録されていることの表示を含むことができるはずである。いくつかの実施形態では、レンダリング・サービスを利用して、映画、テレビ、スポーツ・イベント等を見ることができる。かかる実施形態の１つでは、クライアントの状態情報は、表示されたコンテンツにコメントしているユーザからの文字、音声または他の入力を受信することに関連することができる
【００１３】
クライアント状態情報の受信によって、１つ以上のクライアントに関連付けられたレンダリング・プロセスのアクティブ状態の開始、再開または継続を示すことができる。コンテンツ・プロバイダまたはレンダリング・プロセスは、クライアントの状態情報に対応するかまたはそれを示したデータを含む様々な送信やメッセージを受信することができる。レンダリング・プロセスのアクティブ状態を示すクライアント状態情報は、限定はされないが、ユーザによる入力、ユーザの存在、観客の状態、記録状態等を含む。
【００１４】
レンダリング・プロセスは、仮想マシンのインスタンス上、または仮想マシンのインスタンスに加えて他のタイプのコンピューティング・ノード上で実行することができる。仮想マシン・インスタンスは、仮想マシンとも呼ぶことができる。いくつかの実施形態では、レンダリング・プロセスがコンピューティング・ノードに対して一対一の関連付けを有することができる。他の実施形態では、複数のレンダリング・プロセスを同一のコンピューティング・ノード上で実行することができる。実施形態は、同一のコンピューティング・アイテムに対応するレンダリング・プロセスを同一のコンテンツ・ノードに関連付けることができる。この手法によって、レンダリング・プロセスがコンテンツに関連するグラフィックス・リソースを共有することが可能になる。
【００１５】
コンテンツ・プロバイダは、アクティブなレンダリング・プロセスに利用可能なコンピューティング・リソースを最大にすることによって自身の操作効率を向上させることができる。レンダリング・プロセスを実行する仮想マシンは、さもなくば、他のレンダリング・プロセスを実行している他の仮想マシンが利用できたはずのリソースを消費する場合がある。アクティブなレンダリング・プロセスを実行している仮想マシンに利用可能なコンピューティング・リソースを最大化するために、非アクティブなレンダリング・プロセスを実行している仮想マシンを停止させることができる。非アクティブなレンダリング・プロセスは、その実行状態が停止された仮想マシンの状態に保持されている実行中のプロセスであり得る。
【００１６】
非アクティブなレンダリング・プロセスは、そのクライアントがレンダリング・サービスに現在必要性を有していないようなレンダリング・プロセスを含むことができる。様々な場合および実施形態では、クライアント状態情報をコンテンツ・プロバイダが受信することができる。クライアント状態情報は、例えば、コンテンツの要素の動き、クライアントのユーザによる入力、観客のモード、記録モード等などの因子に対応することができるレンダリング・サービスに現在必要性を有していないことを示すことができる。様々な場合および実施形態では、クライアント状態情報を受信する際の間によって、レンダリング・サービスに現在必要性を有していないことを示すことができる。このことは、例えば、クライアント・デバイスが停止したときに生じる可能性がある。別の可能性は、レンダリング・サービスがもはや必要ではなくなるようにクライアント状態が変化する場合があることである。例えば、クライアント上で実行されているゲームが終了して、新たなゲームがまだ開始されていない場合がある。
【００１７】
図１は、仮想マシン上でレンダリング・プロセスを管理するためのシステムの本実施形態の態様と一致する例を示す。ユーザ１１４は、クライアント１１６と相互作用することができる。クライアントは、携帯電話、タブレット、ゲーム機、パーソナル・コンピュータ等などのハードウェア・デバイスを含むことができる。クライアントはまた、様々な組み合わせで、アプリケーション・プログラム１１８、オペレーティング・システム、または他のソフトウェア・モジュールを含むこともできる。クライアントは、クライアント・プロセス１１８にレンダリング・プロセス１０４などのレンダリング・プロセスへのアクセスを提供することができるレンダリング・サービス・アプリケーション・プログラミング・インターフェース（「ＡＰＩ」）１２０を含むことができる。クライアント・プロセスは、レンダリング・プロセスと直接通信することもできる。例えば、クライアント・プロセス１２４は、レンダリング・プロセス１１０と通信するか、または、レンダリング・サービスＡＰＩ１２６の機能を呼び出してレンダリング・プロセス１１０と通信することができるはずである。
【００１８】
レンダリング・プロセス１０４へのアクセスは、直接的あっても間接的であってもよい。例えば、直接アクセスは、ネットワーク１１２を介してレンダリング・プロセス１０４と通信することができるクライアント１１６を含むことができるはずである。間接アクセスは、コンテンツ・プロバイダ１００を介してレンダリング・プロセス１１０にアクセスするクライアント１２２を含むことができるはずである。いくつかの実施形態では、プロキシ１３２が、コンテンツ・プロバイダ１００内で動作してレンダリング・プロセス１１０などのレンダリング・プロセスへのアクセスを仲介する。プロキシは、仮想マシン１０２内または仮想マシン１０８内で動作することもできるはずである。
【００１９】
ユーザ１２８およびユーザ１３０などの複数のユーザは、クライアント１２２などのクライアントと相互作用することができる。クライアント１２２などのクライアントとの相互作用は、様々なアクションやイベントを含むことができる。相互作用の非限定的な例は、ゲーム・コントローラの動き、マイク入力、カメラ入力等を含む。相互作用を、クライアント状態情報に組み込むことができる。クライアント状態情報は、クライアントの数人のユーザを示す情報を含むことができる。この情報は、アクティブなユーザの数の推論を可能にする情報を含むことができる。例えば、クライアント状態情報は、数人のユーザの行動を含むことができる。数人のユーザは、クライアント１２２のユーザ１２８またはユーザ１３０などのクライアントのユーザによる入力アクションに対応する持続時間計測に基づいて推測することができる。クライアントに関連付けられたアクティブなユーザの計数は、仮想マシン１０８上のレンダリング・プロセス１１０などのレンダリング・プロセスのアクティブな状態を維持するかどうかを判断するのに使用することができる。例えば、もしユーザ１２８とユーザ１３０が、クライアント１２２との相互作用を止めれば、レンダリング・プロセス１１０は非アクティブ状態になってリソースの消費を最小にすることができるはずである。これは、例えば、仮想マシン１０８を一時停止することによって達成できるはずである。別の可能性は、ユーザ１２８とユーザ１３０の両者が、クライアント・プロセス１２４の休止機能をアクティブにすることである。これは、例えば、ユーザ１２８とユーザ１３０の両者が別のアプリケーションに切り替えることによって生じる可能性がある。
【００２０】
図２は、少なくとも１つのクライアント・プロセス２０２と少なくとも１つのレンダリング・サービスＡＰＩ２０４とを含むクライアント２００の実施形態を示す。クライアント・プロセス２０２は、アプリケーションの機能の様々な態様を実施する１つ以上のモジュールを含むことができる。アプリケーションは、限定はされないが、ビデオゲーム、ビデオ再生サービス、ビデオ編集、アニメーション、シミュレーション等を含む。モジュールは、コンピュータ可読命令、回路等の任意の組合せを含むことができる。モジュールは、例えば、静的および動的にリンクしたライブラリ、ビジネス・オブジェクト、コンポーネント・オブジェクト、グラフィック処理ユニット、物理処理ユニット等を含むことができる。
【００２１】
レンダリング・サービスＡＰＩは、クライアント・プロセス２０２のコンポーネントの役割をすることができる。それは、機能の様々な断片を実装する１つ以上のモジュールを含むことができる。図２に、レンダリング・サービスＡＰＩ２０４が、アプリケーション停止２０６などの具体的な機能断片を実装する様々なモジュールを含んで示されているが、当業者なら、追加、減算、置換、および再配列を含む様々な組み合わせが可能であることを理解するであろう。
【００２２】
アプリケーション停止部２０６は、クライアント・プロセス２０２の動作状態に関連した兆候を受信するレンダリング・サービスＡＰＩのモジュールを示す。このモジュールは、例えば、クライアント・プロセス２０２が停止されようとしているのか、一時停止されようとしているのか、または休止されようとしているのかの通知を受信することができる。次いで、そのモジュールは、コンテンツ・プロバイダ内で動作される任意のプロキシまたはレンダリング・プロセスを含むコンテンツ・プロバイダに通知を送信することができる。この通知は、そのアプリケーションに関連付けられているサービスが一時停止され得ることを示す。
【００２３】
ユーザ入力モニタリング部２０８は、クライアント・プロセス２０２に関連するユーザ活動の追跡を伴うことができる。それはまた、ユーザのアクティビィティをクライアントからコンテンツ・プロバイダに送信することができるクライアント状態情報として表すことを伴うこともできる。
【００２４】
サービス利用コントロール部２１０は、クライアント・プロセス２０２によって要求される可能性が高いある水準のレンダリング・プロセスに影響する事象をモニタリングするかまたはそれに応答することを伴うことができる。これらの事象は、実際のゲームプレイの状態からレンダリング・サービスが現在要求されない予めレンダリングされたシーンの表示を伴う状態への移行などのゲーム状態の移行を含む。これらの事象は、レンダリング・サービスＡＰＩ２０４のモジュール上に呼び出される関数呼び出し、方法呼び出し、または同様な技術を介してクライアント・プロセス２０２によってコントロールすることができる。サービス利用事象は、例えば、クライアント状態情報として、コンテンツ・プロバイダに送信することができる。
【００２５】
ハードウェア事象部２１２は、限定はされないが、クライアント・デバイス停止、コントローラ停止、ディスプレイ停止、システム一時停止、システム再始動等を含む様々なハードウェア事象を検出するかまたはこれらの事象に応答することができる。これらの事象は、クライアント・プロセス２０２によって要求される可能性が高いある水準のレンダリング・プロセスを示すこともできる。ハードウェア事象を示す情報は、例えば、クライアント状態情報として、コンテンツ・プロバイダに送信することができる。
【００２６】
サービス利用統計部２１４は、ゲーム、ゲームのパブリッシャ、ハードウェア・プロバイダまたは他のエンティティによるレンダリング・サービスの使用に関する情報の収集に関わることができる。いくつかの実施形態では、これらのサービスのある態様は、レンダリング・サービスＡＰＩ部２０４が直接実行することができる。これは、例えば、レポートが作成されおよび／または送信されるようにすることを含む。レポートは、特定のクライアントに代わって行われるあるレベルの使用などの様々な使用統計に関連する可能性がある。いくつかの実施形態では、サービス利用統計部２１４は、例えば、識別情報をコンテンツ・プロバイダに送信することによって、関連する統計量の作成に間接的に関与することができる。識別情報は、ユーザ情報、クライアント・デバイス情報、ゲーム情報、パブリッシャ情報等を含むことができる。暗号技術は、提供された識別製性を改ざんすることを防止するために使用することができる。
【００２７】
サービス再配置部２１６は、異なるインターネット・プロトコル（「ＩＰ」）アドレスなどの異なるアドレスでのコンテンツ・プロバイダ、プロキシ、仮想マシン、またはレンダリング・プロセスの再関連付けに関わることができる。再関連付けは、利用のバランス、フェイルオーバまたは他のシナリオなどの様々な事象に基づいて発生することがある。例えば、一時停止した仮想マシンに対応する状態は、あるホストから別のホストに移動されて、移動後に異なるＩＰアドレスを割り当てられる可能性がある。実施形態では、また、レンダリング・プロセスをある仮想マシンから別の仮想マシンに再配置する可能性もある。
【００２８】
図３は、仮想マシン３０２上にレンダリング・サービスをホストするコンテンツ・プロバイダ３００の実施形態を示す。図３は、仮想マシンを図示しているが、コンテンツ・プロバイダは、いくつかの仮想マシンをホストすることができる。コンテンツ・プロバイダは、データ・センタ、サーバのクラスタ、個々のサーバその他などの１つ以上のコンピュータ設備を含むことができる。様々な仮想マシンが、コンテンツ・プロバイダ内で動作することができる。例えば、コンピュータ設備は、ハイパーバイザと１つ以上の仮想マシンが動作する様々なコンピュータ・ホストを動作させることができる。様々な制御機能を使用して、仮想マシンを作成し、削除し、停止させ、再起動させ、一時停止させ、かつ再開させることができる。
【００２９】
コンテンツ・プロバイダは、仮想マシンの状態情報を管理することができる。仮想マシンは、記憶装置に格納することができる関連付けられた状態を有することができる。一時停止または停止された仮想マシンの状態は、待ち時間の短いキャッシュに格納することができる。待ち時間の短いキャッシュは、限定はされないが、ランダム・アクセス・メモリ、インメモリ・データベース、ソリッドステート記憶装置他を含む。一時停止された仮想マシンの状態もまた、待ち時間の短いオプションと比較して待ち時間が長いと記述することができる記憶装置に格納することができる。待ち時間の短い格納オプションと待ち時間が長い格納オプションとの違いは、基礎となる記憶装置の品質以外の要因に基づく場合がある。代わりに、いくつかの実施形態では、待ち時間の短い格納と待ち時間が長い格納は、ネットワークの速度、渋滞他などの要因によって影響され得るシステム全体の待ち時間によって区別することができる。
【００３０】
レンダリング・プロセス３０４は、仮想マシン３０２上で動作するように割り当てることができる。レンダリング・プロセスは、グラフィック・リソースの管理、グラフィカルなシーンのレンダリングなどのグラフィックス処理に関連する様々なサービスを提供することができる。レンダリング・プロセスは、レンダリング・パイプラインの１つ以上のステップを行うことができる。レンダリング・パイプラインは、形状バッファ、頂点バッファ、テクスチャ・バッファ、入力アセンブリ、テクスチャ・マッピング、シェーディング、レンダリング標的他などの様々なデータ構造、リソース、および段階を含むことができる。実施形態は、限定はされないが、２次元および３次元のレンダリング、物理処理パイプライン他を含む様々なタイプのパイプラインのサポートを含むことができる。
【００３１】
様々なモジュールが、レンダリング・プロセス３０４の操作に関連する機能を実行することができる。図３は別個のエンティティとして、これらのモジュールを示すが、示したモジュールは、様々な組み合わせで、並べ替えられ、再配置され、組み合わせられ、変更されまたは省略され得ることが理解されるであろう。加えて、図３でレンダリング・プロセス３０４および仮想マシン３０２とは別個の要素として示されているが、示されたモジュールよって行われる機能の一部またはすべては、レンダリング・プロセス３０４および／または仮想マシン３０２が行うことができる。
【００３２】
クライアント状態をモニタリングするためのモジュール３０６は、レンダリング・プロセスのクライアントに関連したクライアント状態情報を受信し、かつ／または、処理することができる。実施形態は、クライアント状態情報をモニタリングしてユーザのアクティビィティの有無を判断することができ、さらに、そのアクティビィティをクライアントに関連付けられたレンダリング・プロセスのアクティブ状態の維持の表示であると分類することができる。レンダリング・プロセスのアクティブ状態は、ユーザ入力、非アクティブ期間にも拘わらずアクティブ状態を維持するようにとのクライアントの要求、クライアント上への新たなアプリケーションの初期化、その他などの要因によって示すことができる。レンダリング・プロセスは、コンテンツ・プロバイダにクライアントの状態情報として送信することができクライアントの活動を示す情報の受信に基づいて、アクティブ状態に維持することができる。クライアントに関する活動は、例えば、ユーザ入力の受信、レンダリング・サービスの要請、レンダリング・プロセスの活発な実施、その他を参照することができる。
【００３３】
クライアント状態情報はまた、非アクティブ状態への移行を示すこともできる。アクティビィティ不足が、レンダリング・プロセスの非アクティブ状態への移行を示す様々な条件に対応することができる。例えば、中断されたネットワーク接続が、レンダリング・プロセスとクライアントとの間の通信を中断することができる。この場合、実施形態は、レンダリング・プロセスを非アクティブ状態に移行させるころができる。クライアント状態モニタリング部３０６は、ユーザ入力、新たなアプリケーションの初期化、またはクライアント活動に関する他の情報が前回受信されたときに関する情報を追跡または受信することができる。もし、この時間が閾値を越えていれば、クライアント状態モニタリング部３０６は、レンダリング・プロセス部３０４が非アクティブ状態に入るべきであると判断することができる。実施形態は、レンダリング・プロセスのアクティブ状態に対応する情報を得ることで、非アクティブなレンダリング・プロセスをアクティブ状態に移行させることができる。
【００３４】
レンダリング・プロセスは、それが実行される仮想マシンを一時停止することによりアクティブ状態に移行することができる。いくつかの実施形態では、一時停止された仮想マシンは、そのホストの一次メモリに残ることができるが、中央処理装置のサイクルを消費することができない。別の実施形態では、一時停止された仮想マシンの状態は、待ち時間の短いキャッシュまたは他の形態の記憶装置に格納することができる。別の実施形態では、一時停止された仮想マシンの状態は、レンダリング・プロセスが非アクティブになったのに対応する期間に基づいて、待ち時間の短いキャッシュのメモリ内から待ち時間の短い記憶装置に移行することができる。待ち時間最短化モジュール３０８は、様々なアクションを行ってレンダリング・プロセスへのアクセス時の待ち時間を最短化することができる。これらのアクションは、限定はされないが、仮想マシン上で実行されるレンダリング・プロセスに関連付けられたクライアントの状態に基づいて、一時停止された仮想マシンの状態を主メモリ、キャッシュ、または比較的待ち時間の長い記憶装置間で移動させることを含むことができる。
【００３５】
容量および利用管理モジュール３１０は、様々なアクションを行ってリソースの利用率を向上させることができる。いくつかの場合および実施形態では、仮想マシン３０２は、いくつかのレンダリング・プロセスをホストする可能性がある。実施形態は、限定はされないが、共通のクライアント・デバイス、ゲーム・コンテンツの共通のセット、その他、を含む要因に基づいて、仮想マシンにレンダリング・プロセスを割り当てることができる。実施形態は、また、これらの要因の改善に応じて仮想マシンにレンダリング・プロセスを割り当てることにより、リソースの利用、待ち時間、その他などの要因を改善しようと試みることができる。いくつかの実施形態では、容量および利用管理部３１０は、コンピューティング・リソースの処理能力に基づいて、レンダリング・プロセスおよび／または仮想マシンをこれらのリソースに割り当てることを含むことができる。例えば、いくつかの場合および実施形態では、クライアント状態情報が、レンダリング・サービスの要求レベルの表示を含んでいる可能性がある。この表示に基づいて、仮想マシン・ホストが選択され、選択されたホストが利用可能な処理能力に一部基づいてレンダリング・プロセスを動作させる可能性がある。
【００３６】
別のモジュールが、容量および利用統計部３１２に関連する様々なアクションを行うことができる。これらのアクションは、ユーザ、クライアント、アプリケーション、アプリケーション・パブリシャその他に提供されるレンダリング・サービスに関する記録を維持することを含むことができる。いくつかの実施形態では、コンテンツ・プロバイダが、処理能力、レンダリングされたページ、消費されたＣＰＵサイクル、その他、などの使用統計をモニタリングすることができる。コンテンツ・プロバイダは、ゲーム・パブリッシャなどのエンティティにサービス料を課すものなどの様々な使用統計を採用することができる。
【００３７】
図４は、レンダリング・プロセスを管理するプロセスの実施形態を示す。オペレーションのシーケンスとして示されているが、当業者なら、示した順序は、本開示の範囲を限定するものと解釈すべきではなく、オペレーションの少なくともいくつかは、変更し、省略し、並べ替え、または並行して行ってもよいことを理解するであろう。
【００３８】
オペレーション４００は、レンダリング・サービスをクライアントに供給することを示す情報を受信することを伴うことができる。実施形態は、レンダリング・サービスを使用するであろうアプリケーションの初期化に対応したクライアント状態情報を受信することができる。初期化されたアプリケーション・インスタンス、および／または、それが動作するクライアントを、レンダリング・プロセスと関連付けることができる。実施形態は、マッピングまたはルックアップ動作を実行してアプリケーション・インスタンスおよび／またはクライアントが既にレンダリング・プロセスに関連付けられているかどうかを判断することができる。そうでない場合、新たなレンダリング・プロセスを作成することができる。
【００３９】
オペレーション４０２は、レンダリング・プロセスが実行することができる仮想マシンの割り当てを示す。仮想マシンの割り当ては、仮想マシンの既存のインスタンスを再利用すること、新しいインスタンスを作成すること、既存のインスタンスをコピーすることなどを伴うことができる。実施形態は、例えば、事前に規定された画像がレンダリング処理を実行するように構成されている仮想マシンの初期状態に対応する場合、この仮想マシンの状態の事前に規定された画像のコピーを作成することができる。いくつかの実施形態では、レンダリング・プロセスが既に実行を開始したがまだどんなクライアントにも配信されていない仮想マシンの画像を用いることができる。いくつかの場合および実施形態では、実行を開始して具体的なゲーム・プログラムなどの特別なアプリケーションに対応するリソースをロードしたレンダリング・プロセスを含むことができる。リソース・ローディングの後であるがクライアントにサービスを提供する前の時点で、この仮想画像を記録することができる。これらおよび他の初期状態にある仮想マシンに対応する画像を格納して、その後、仮想マシンがクライアントにレンダリング・サービスを提供する準備をするときにロードすることができる。
【００４０】
仮想マシンは、レンダリング・サービスのクライアント上で動作しているゲームなどのプロセスに関連付けられたグラフィックス・リソースへのアクセスを有する仮想マシンに基づいてレンダリング処理を実行するために割り当てることができる。クライアント上で動作されているゲームは、仮想マシン上で実行されるレンダリング・プロセスにアクセス可能なグラフィックス・リソースに依存する場合がある。グラフィックス・リソースへのアクセスを有することは、そのグラフィックス・リソースを格納した記憶装置への接続を含むことができる。別の可能な変形は、多くの中でも、レンダリング・プロセスがゲームまたは他のアプリケーションと関連するグラフィックス・リソースを事前にロードした仮想マシン画像を含む。
【００４１】
オペレーション４０４は、仮想マシン上で実行されるレンダリング・プロセスをクライアントと関連付けることを示す。実施形態は、クライアントとレンダリング処理および／またはレンダリング・プロセスが動作する仮想マシンとの間の関連付けの記録を保持することができる。いくつかの実施形態では、この関連付けは、仮想マシンとは無関係に作動するデータベースまたは他のデータ・ストアに保持することができる。受信されたクライアント状態情報は、記録された関連付けに基づいてレンダリング・プロセスと関連付けることができる。例えば、クライアント状態情報は、コンテンツ・プロバイダによって受信される可能性があり、記録された関連付けに基づいて対応するレンダリング・プロセスを決定することができるはずである。
【００４２】
レンダリング・プロセスは、仮想マシン上で実行されている、または動作していると言うことができる。「上で実行されている」および「上で動作している」という用語は、レンダリング・プロセスが仮想マシン上で実行を開始するかまたは継続する様々な状態を包含することを意図している。
【００４３】
オペレーション４０６は、レンダリング・プロセスを非アクティブな状態に移行させることを示す情報を受信することを示す。実施形態は、予測された最大非アクティブ期間が経過することに基づいてレンダリング・プロセスが非アクティブな状態に移行すべきだと判断することができる。様々な実施形態では、対応するレンダリング・プロセスがアクティブのままであるべきことをクライアント状態情報が示している場合、時間を記録して、クライアント状態情報が何時最後に受信されたかを示すことができる。その後、実施形態は、かかる情報が最後に受信されてからの時間を閾値時間と比較することができる。この時間が閾値レベルを超えると、実施形態は、レンダリング・プロセスを非アクティブな状態に移行させることができる。予測された最大アクティブ期間を閾値として用いることができる。予測された最大値は固定値であってもよく、あるいは、以前のアクティブ期間または非アクティブ期間に一部基づいて決定される動的な値であってもよい。
【００４４】
オペレーション４０８は、仮想マシンを一時停止して仮想マシン上で作動しているレンダリング・プロセスを非アクティブ化することを示す。いくつかの実施形態では、一時停止している仮想マシンはそのホストの主記憶装置に残ることができるが、その仮想プロセッサは実行停止となるかもしれない。別の実施形態では、仮想マシンがメモリから取り除かれ、記憶装置上に格納されるかもしれない。例えば、実施形態は、仮想マシンに対応する状態を待ち時間の短いキャシュまたは他の記憶装置に格納することができる。実施形態は、これらのアクションの様々な組み合わせを行なうことができる。例えば、実施形態は、クライアントにより予期または予測された非アクティブ期間に基づいて、これらのアクションのうちの１つを行う判断をすることができる。例えば、クライアント状態情報が、ゲームが既知の非アクティブ期間（例えば、予めレンダリングされた映像が表示されている場合）に入ったことを示すならば、仮想マシンは非アクティブなままだがメモリに残る可能性がある。他方、クライアントがオフにされているならば、仮想マシンは比較的待ち時間の長い記憶装置に移動されるかまたは削除される可能性がある。
【００４５】
仮想マシンは、仮想マシン上のアクティブないくつかのレンダリング・プロセスが閾値レベルを下回っていると判断すると一時停止され得る。レンダリング・プロセスを１；１の原則で仮想マシンにマッピングするもののような実施形態では、閾値レベルは１になることができる。他の実施形態は、仮想マシン上で複数のレンダリング・プロセスをホストすることができる。実施形態は、したがって、仮想マシンによってホストされているすべてのレンダリング・プロセスが非アクティブになったときに、仮想マシンを一時停止することができる。さらに、実施形態は、アクティブなレンダリング・プロセスの数が閾値数を下回るときにアクティブなレンダリング・プロセスを別の仮想マシンに移動させることができる。
【００４６】
オペレーション４１０は、レンダリング・プロセスを非アクティブ状態からアクティブ状態に移行させることを示す情報を受信することを示す。例えば、レンダリング・プロセスは、休止事象に基づいて、非アクティブ化されていてもよい。クライアントが休止していなかったことを示すクライアント状態情報を受信すると、クライアントに関連付けられたレンダリング・プロセスを再アクティブ化することができる。
【００４７】
オペレーション４１２は、レンダリング・プロセスが実行されていた仮想マシンを再アクティブ化することにより、レンダリング・プロセスを再アクティブ化することを示す。仮想マシンを再アクティブ化することは、仮想マシンの状態をストレージまたは待ち時間の短いキャッシュからリトリーブすることなどのステップを含むことができる。再アクティブ化は、仮想マシンに関連付けられた仮想プロセッサの実行を再開すること含むことができる。コンテンツ・プロバイダは、レンダリング・サービスのオペレーションを再開することに関連するステータス情報を送信することができる。例えば、コンテンツ・プロバイダは、レンダリング・サービスのオペレーションを再開することが採用されると予想される時間を示すクライアント情報を送信することができる。これは、例えば、推定完了時間、進捗度、その他を含む可能性がある。
【００４８】
図５は、レンダリング・プロセスを管理するプロセスの別の実施形態を示す。オペレーションのシーケンスとして示されているが、当業者なら、示した順序は、本開示の範囲を限定するように示されていると解釈すべきではないこと、および、示したオペレーションのうちの少なくともいくつかは、変更しても、省略しても、並べ替えても、または、並行して行ってもよいことを理解するであろう。
【００４９】
クライアントは、クライアントにレンダリング・サービスを提供することができるレンダリング・プロセスに関連付けることができる。レンダリング・プロセスは、様々な要因に基づいて選択された仮想マシン上で実行することができる。オペレーション５００から５０６は、レンダリング・プロセスをクライアントに関連付けるため、および／または、レンダリング・プロセスを実行する仮想マシンを選択するために使用することができる要因の非限定的な例を示す。
【００５０】
オペレーション５００は、１対１の原則でクライアントをレンダリング・プロセスに関連付けて、各クライアントがそのクライアントのみにレンダリング・サービスを提供するレンダリング・プロセスにマッピングされるようにすることを示す。実施形態は、また、１対１の原則でレンダリング・プロセスをアプリケーションにマッピングして、所与のレンダリング・プロセスが１つのアプリケーションのみにレンダリング・サービスを提供するようにすることもできる。いくつかの実施形態では、複数のレンダリング・プロセスをクライアントに割り当てたり、または複数のクライアントを１つのレンダリング・サービスに割り当てることができる。
【００５１】
オペレーション５０２は、要求されたコンテンツをレンダリングするように予め構成されたレンダリング・プロセスにクライアントを関連付けることを示す。例えば、実施形態は、特別なゲーム・アプリケーションなどの具体的なコンテンツに関連するレンダリング・サービスを提供するのに備えてレンダリング・プロセスが実行を開始した状態の仮想マシンの画像を保持する可能性がある。これによって、レンダリング・サービスとクライアントとの間の関連付けをする前に、様々なワイヤフレーム、テクスチャその他を、予めロードすることができるようにすることができる。
【００５２】
オペレーション５０４は、同一の仮想マシン上で実行される他のプロセスによってレンダリングされたコンテンツに基づいて選択された仮想マシン上でレンダリング・プロセスを実行すると決定することを示す。この手法は、グラフィカル・リソースを含んでいるメモリ・ブロックが同一のコンテンツに対してレンダリング・サービスを提供する複数のレンダリング・プロセス間で共有可能にすることができる。
【００５３】
オペレーション５０６は、１つの仮想マシン上または最小限の数の仮想マシン上の特別なクライアントのためのレンダリング・プロセスをグループ化することに基づいて選択された仮想マシン上でレンダリング・プロセスを実行することを示す。例えば、クライアントは、それぞれがレンダリング・サービスを必要とする２つのアプリケーションを実行する可能性がある。その後、アプリケーションは、それ自身の専用レンダリング・プロセスに関連付けられる可能性がある。これらのレンダリング・プロセスは同じ仮想マシン上で実行するようにグループ化することができるいくつかの実施形態では、同じクライアントに関連付けられたレンダリング・プロセスは、仮想マシン上でグループ化されて、それによって、他のクライアントに関連付けられたレンダリング・プロセスは、その仮想マシンから除外される。
【００５４】
オペレーション５０８は、仮想マシン上で実行するレンダリング・プロセスのアクティブ状態および非アクティブ状態を管理することを示す。これは、仮想マシン上で動作する１つ以上のレンダリング・プロセスを非アクティブ化するために、仮想マシンを一時停止することを含むことができる。いくつかの実施形態では、複数のレンダリング・プロセスが使用される場合、すべてのレンダリング・プロセスが非アクティブ状態に移行すべきであるときに仮想マシンを一時停止することができる。実施形態は、各レンダリング・プロセスが非アクティブ状態に移行できるようになるまで、アクティブ状態の仮想マシン上で動作しているすべてのレンダリング・プロセスをそのままにして、その後、仮想マシンを一時停止することができる。実施形態は、限定はされないが、レンダリング・サービスの必要性を示すクライアント状態情報を受信する際の遅延を含む様々な事象が生じたときにレンダリング・プロセスを非アクティブ状態に移行すると判断することができる。
【００５５】
実施形態は、様々な手法を用いてレンダリング・プロセスを実行することができる。
図６は、仮想マシンのプールを維持するプロセスの実施形態を示す。オペレーションのシーケンスを伴うものとして示されているが、当業者なら、示した順序は、本開示の範囲を限定するように示されていると解釈すべきではないこと、および、示したオペレーションのうちの少なくともいくつかは、変更しても、省略しても、並べ替えても、または、並行して行ってもよいことを理解するであろう。
【００５６】
仮想マシンの初期化６００は、レンダリング・プロセスの実行に使用される仮想マシンを作成すること、開始させること、および構成することの様々な態様を伴っている。オペレーション６０２、６０４および６０６によって示されたものなどの様々なオペレーションを行って、レンダリング・プロセスの実行に使用される仮想マシンを例示することができる。６０２、６０４および６０６によって示されたオペレーションを様々な方法で組み合わせて本開示の更なる実施形態を形成することができる。
【００５７】
オペレーション６０２は、レンダリング・プロセスを実行するように構成された仮想マシンの状態情報をリトリービングすることを示す。仮想マシン状態はファイルとして格納することができ、時々、仮想マシン画像と呼ぶことができる。様々な実施形態では、仮想マシン状態は、レンダリング・プロセスを実行するように予め構成された仮想マシンに対応することができる。例えば、仮想マシンはインストールされたオペレーティング・システムを有することができる。レンダリング・プロセスを実行するために使用されたどんなファイルも、既に仮想マシンにコピーされているかも知れず、また、どんな必要な行われた構成ステップもそうである。
【００５８】
オペレーション６０４は、既にレンダリング・プロセスを実行している仮想マシンの状態情報をリトリービングすることを示す。実施形態は、マシンの状態が、現在実行しているがまだクライアントに関連付けられていないかまたはクライアントにサービスを提供していないレンダリング・プロセス、を反映する仮想マシン画像を利用することができる。
【００５９】
オペレーション６０６は、特定のコンテンツと関連するレンダリング・プロセスを実行するように構成された（または、既に、実行している）仮想マシンの状態情報をリトリービングすることを示す。例えば、仮想マシン・イメージは、レンダリング・プロセスが実行を開始しており、ゲームなどの特別なアプリケーションのリソースをロードしていた時点で保存される可能性がある。リソースは、ビットマップ、テクスチャ、ワイヤ・フレームモデルその他を含むことができる。
【００６０】
実施形態は、グラフィックス・レンダリング・サービスが提供されているアプリケーションに関連するグラフィック・リソースへのアクセスを有するレンダリング・プロセスを実行するように構成されている選択された仮想マシンに基づいて、プールから仮想マシンを選択することができる。いくつかの場合では、レンダリング・プロセスをグラフィック・リソースへのアクセスを有するように具体的に構成することができる。他の場合では、選択された仮想マシンをグラフィック・リソースにアクセスするように構成することもできる。
【００６１】
プール組織部６０８は、レンダリング・プロセスを実行する仮想マシンのプールを形成するために行うことができる様々なオペレーションを指す。本明細書で使用されるとき、プールという用語は、仮想マシンの集まりなどのオブジェクトの様々な集まりを指すことができる。集まりは、リストやアレイなどのデータ構造によって、または様々な分類方法によって組織化することができる。様々な実施形態では、プールは、必要に応じてプールから引き出すことができるオブジェクトまたはリソースの集まりまたはセットであってよい。例えば、プールは、そのプールから取り出され、レンダリング・プロセスを実行するために使用することができる未使用の仮想マシンのセットを含むことができる。
【００６２】
オペレーション６１０は、仮想マシンのプールを維持することを示す。プールを維持することは、仮想マシンを作成すること、プール内に仮想マシンを載置すること、プールから仮想マシンを引き抜くこと、およびプールに仮想マシンを戻すことを含むことができる。実施形態は、プール内の空き仮想マシンの最小数および／または最大数を維持することができる。
【００６３】
オペレーション６１２は、コンテンツに基づいて、仮想マシンのプールを維持すること示す。これは、特別なコンテンツのセットに属するものとして、プール内の仮想マシンを分類することを伴うことができる。仮想マシンがプールから引き出されるとき、特別なコンテンツのセットに適した仮想マシンを引き出すことができる。例えば、特別なゲーム用にリソースを予めロードするように構成された仮想マシンはプール内でグループ化される可能性がある。クライアントが、その特別なゲームに対してレンダリング・サービスを要求するときは、仮想マシンをそのプールから使用することができる。異なるアプリケーションに関連付けられたクライアントは、異なるプールから引き出された仮想マシンを得ることができる。
【００６４】
オペレーション６１４は、待ち時間の最小化に基づいて、仮想マシンのプールを維持すること示す。実施形態は、様々な要因を使用してかかるプールを組織化することができる。一実施形態では、仮想マシンは、各仮想マシンのホストの地理的な位置に従ってグループ化される。仮想マシンは、ホストの位置とレンダリング・サービスを要求しているクライアントの位置に基づいて、プールから引き出すことができる。プールはまた、速度、容量などに応じて組織化することもできる。
【００６５】
実施形態は、プールおよびサブプールの様々な組み合わせにプールを組み合わせることができる。例えば、仮想マシンは、コンテンツによって組織化されたプールおよび地理的な領域によって組織されたサブプールにグループ化することができたはずである。
【００６６】
プール・メンテナンス部６１６は、仮想マシンのプールに仮想マシンを引き出し、利用し、かつ返すために行われた様々なオペレーションを伴う。オペレーション６１８に示されるように、新しいクライアントにレンダリング・サービスを提供するために仮想マシンをプールから引き出すことができる。オペレーション６２０は、仮想マシンをすぐにプールに戻さずに、一時停止して一時的にレンダリング・プロセスを非アクティブ化することを示す。しばらく経って、仮想マシンをプールに戻すことができる。オペレーション６２２は、仮想マシンがクライアントの切断時にプールに戻される一例を示す。いくつかの実施形態は、仮想マシンがもはや必要ではなくなったときに、それらを削除することができる。オペレーション６２４は、例えば、仮想マシンの初期化６００に関連付けられたオペレーションの１つまたはそれ以上を実行することによって、仮想マシンのプールを補充することを示す。仮想マシンは、仮想マシンの最小限の数がプール内で利用可能に保たれるように、またはプールから除去されその後削除された仮想マシンを交換するために補充することができる、
【００６７】
コンテンツ・プロバイダは、いくつかの場合では、インターネットなどの電子ネットワークを介してクライアントにコンテンツ・アイテムのビューをレンダリングし送信することができる。コンテンツは、いくつかの場合では、要求に応じて、例えば、ストリーミング・コンテンツ配信技術を使用して、クライアントに提供することができる。ここで、レンダリングおよびクライアントへのコンテンツ送信を可能にするコンピューティング環境の例を詳細に説明する。特に、図７は、本明細書で説明した実施形態を実施することができるコンピューティング環境の例を示す。図７は、通信ネットワーク７３０を介したユーザ・コンピュータ７０２ａおよび７０２ｂ（本明細書では、単数の意味でコンピュータ７０２と呼ぶ場合もあり、または、複数の意味でコンピュータ７０２と呼ぶ場合もある）を介してユーザ７００ａおよび７００ｂ（本明細書では、単数の意味でユーザ７００と呼ぶ場合もあり、または、複数の意味でユーザ７００と呼ぶ場合もある）にコンピューティング・リソースを提供することができるデータ・センタ７１０の例を模式的に示す図である。データ・センタ７１０は、アプリケーションを実行するためのコンピューティング・リソースを、永久的にまたは必要に応じて提供するように構成することができる。データ・センタ７１０によって提供されるコンピューティング・リソースは、ゲートウェイ・リソース、ロード・バランシング・リソース、ルーティング・リソース、ネットワーク・リソース、コンピューティング・リソース、揮発性および不揮発性のメモリ・リソース、コンテンツ配信リソース、データ処理リソース、データ保存リソース、データ通信リソース、その他などの様々なタイプのリソースを含むことができる。コンピューティング・リソースは、汎用であってもよく、または、いくつかの特定の構成で利用可能であってもよい。例えば、データ処理リソースは、様々なウェブ・サービスを提供するように構成することができる仮想マシン・インスタンスとして入手可能である。加えて、リソースの組み合わせは、ネットワークを介して利用可能となることができ、１つ以上のウェブ・サービスとして構成することができる。インスタンスはアプリケーション・サービス、メディア・サービス、データベース・サービス、処理サービス、ゲートウェイ・サービス、保管サービス、ルーティング・サービス、セキュリティ・サービス、暗号化サービス、ロード・バランシング・サービス、アプリケーション・サービスなどのウェブ・サービスを含むアプリケーションを実行するように構成することができる。これらのサービスは、セットまたはカスタムのアプリケーションで構成可能であり、サイズ、実行、コスト、待ち時間、タイプ、期間、アクセシビリティ、および他の任意の次元で構成可能である。これらのウェブ・サービスは、１つ以上のクライアントが使用可能なインフラとして構成することができ、１つ以上のクライアントのプラットフォームまたはソフトウェアとして構成された１つ以上のアプリケーションを含むことができる。これらのウェブ・サービスは、１つ以上の通信プロトコルを介して利用可能にすることができる。データ保管リソースは、ファイル記憶装置、ブロック記憶装置などを含むことができる。
【００６８】
コンピューティング・リソースの各タイプまたは構成は、大きなリソース（多くのプロセッサ、大容量メモリ、および／または大記憶容量からなる）および小さなリソース（より少ないプロセッサ、小容量メモリ、および／または小記憶容量からなる）などの異なるサイズで利用可能となることができる。顧客は、例えば、ウェブ・サーバおよび／またはデータベース・サーバとしていくつかの小さな処理リソースを割り当て、データベース・サーバとして１つの大きな処理リソースを割り当てることを選択することができる。
【００６９】
データ・センタ７１０は、コンピューティング・リソースを提供するサーバ７１６ａ、ｂ（本明細書では、単数の意味でサーバ７１６と呼ぶ場合もあり、または、複数意味でサーバ７１６と呼ぶ場合もある）を含むことができる。これらのリソースは、ベア・メタル・リソースとして利用可能であるか、または仮想マシン・インスタンス７１８ａ−ｄ（本明細書では、単数意味で仮想マシン・インスタンス７１８と呼ぶ場合もあり、または、複数意味で仮想マシン・インスタンス７１８と呼ぶ場合もある）として利用可能である。仮想マシン・インスタンス７１８ｃおよび７１８ｄは、共有状態（「ＳＳＶＭ」）インスタンスである。ＳＳＶＭ仮想マシン・インスタンス７１８ｃおよび７１８ｄは、共有コンテンツ・アイテム状態の技術および／または本開示にしたがって開示され以下に詳細に説明される他の任意の技術のすべてまたは任意の一部を実行するように構成することができる。理解されるべきであるように、図７に示す特別な例は各サーバに１つのＳＳＶＭ仮想マシンを含むが、これは単なる一例に過ぎない。サーバは、２つ以上のＳＳＶＭ仮想マシンを含んでいてもよく、どんなＳＳＶＭ仮想マシンも含まなくてもよい。
【００７０】
ハードウェアを計算するための仮想化技術の利用可能性は、顧客に対する大規模なコンピューティング・リソースを提供し、コンピューティング・リソースを、複数の顧客間で効率的かつ確実に共有することを可能にするための利点をもたらしてきた。例えば、仮想化技術は、物理的なコンピューティング・デバイスによってホストされた１つ以上の仮想マシン・インスタンスを各ユーザに提供することにより、複数のユーザの間での物理的なコンピューティング・デバイスの共有を可能にすることができる。仮想マシン・インスタンスは、別個の論理的なコンピューティング・システムとして働く特別な物理的コンピューティング・システムのソフトウェア・エミュレーションとなることができる。かかる仮想マシン・インスタンスは、所与の物理的なコンピューティング・リソースを共有する複数のオペレーティング・システム間のアイソレーションを提供する。さらに、いくつかの仮想化技術は、複数の別個の物理的なコンピューティング・システムを跨ぐ複数の仮想プロセッサを有する仮想マシンのインスタンスなどの１つ以上の物理リソースを跨ぐ仮想リソースを提供することができる。
【００７１】
図７を参照すると、通信ネットワーク７３０は例えば、インターネットなどの公的にアクセス可能なリンクされたネットワークのうちのネットワークであって、おそらく、種々の異なる当事者によって操作されるものであり得る。他の実施形態では、通信ネットワーク７３０は特権がないユーザが全体的または部分的にアクセス不能である企業や大学のネットワークなどのプライベート・ネットワークであってもよい。さらに別の実施形態では、通信ネットワーク７３０は、インターネットへのおよび／またはインターネットからのアクセスを有する１つ以上のプライベート・ネットワークを含むことができる。
【００７２】
通信ネットワーク７３０は、コンピュータ７０２へのアクセスを提供することができる。ユーザ・コンピュータ７０２は、データ・センタ７１０のユーザ７００または他の顧客が利用するコンピュータであってもよい。例えば、ユーザ・コンピュータ７０２ａまたは７０２ｂは、サーバ、デスクトップまたはラップトップのパーソナル・コンピュータ、タブレット・コンピュータ、無線電話、携帯情報端末（ＰＤＡ）、電子書籍リーダ、ゲーム機、セット・トップ・ボックスまたはデータ・センタ７１０にアクセスすることができる他の任意のコンピューティング・デバイスでよい。ユーザ・コンピュータ７０２ａまたは７０２ｂは、（例えば、ケーブル・モデムまたはデジタル加入者回線（ＤＳＬ）を介して）インターネットに直接接続することができる。ユーザ・コンピュータ７０２ａと７０２ｂの２つだけが示されているが、複数のユーザ・コンピュータが存在してもよいことを理解すべきである。
【００７３】
ユーザ・コンピュータ７０２もデータ・センタ７１０によって提供されるコンピューティング・リソースの態様を形成するために利用することができる。この点において、データ・センタ７１０は、そのオペレーションの態様が、ユーザ・コンピュータ７０２上で実行されるウェブ・ブラウザ・アプリケーション・プログラムを使用することによって構成することができるゲートウェイまたはウェブ・インターフェースを提供することができる。あるいは、ユーザ・コンピュータ７０２上で実行されるスタンドアロン・アプリケーション・プログラムは、構成オペレーションを行うデータ・センタ７１０によって露出されたアプリケーション・プログラミング・インターフェース（ＡＰＩ）にアクセスする可能性がある。データ・センタ７１０で利用可能な様々なウェブ・サービスのオペレーションを構成するための他のメカニズムも利用される可能性がある。
【００７４】
図７に示すサーバ７１６は、上述したコンピューティング・リソースを提供するのに適切に構成された標準的なサーバであってよく、１つ以上のウェブ・サービスおよび／またはアプリケーションを実行するためのコンピューティング・リソースを提供することができる。一実施形態では、コンピューティング・リソースは、仮想マシン・インスタンス７１８であってもよい。仮想マシン・インスタンスは、仮想マシンと呼ぶことができる。上述したように、仮想マシン・インスタンス７１８の各々は、アプリケーションのすべてまたは一部を実行するように構成することができる。仮想マシン・インスタンスの例では、データ・センタ７１０は、仮想マシンを実行することができる仮想マシン・インスタンス７１８を実行することができるインスタンス・マネージャ７２０ａまたは７２０ｂ（本明細書では、単数の意味でインスタンス・マネージャ７２０と呼ぶ場合もあり、または、複数の意味でインスタンス・マネージャ７２０と呼ぶ場合もある）を実行するように構成することができる。インスタンス・マネージャ７２０は、例えば、仮想マシン・モニタ（ＶＭＭ）、または、サーバ７１６上で仮想マシンのインスタンス７１８を実行可能にするために構成された別のタイプのプログラムであってもよい。図７に示すように、インスタンス・マネージャ７２０の構成が変更されること、および、インスタンス・マネージャ７２０を、例えば、ルータ７１４のフロント・エンドとして作動するように構成することができることは理解されるであろう。いくつかの実施形態では、インスタンス・マネージャ７２０を、サーバ７１６上、またはコンピューティング・ノード上でホストすることができる。
【００７５】
上記で開示された実施形態は、仮想マシン・インスタンスの状況を述べているが、本明細書に開示された概念と技術で他のタイプの実装形態を利用することができることを理解すべきである。例えば、本明細書で開示された実施形態は、仮想マシン・インスタンスを利用しないコンピューティング・システムで利用することができる。
【００７６】
図１に示すデータ・センタ７１０の例では、ルータ７１４は、サーバ７１６ａおよび７１６ｂを相互接続するために利用することができる。ルータ７１４も、通信ネットワーク７３０に接続されたゲートウェイ７４０に接続することができる。ルータ７１４は、１つ以上のロード・バランサに接続することができ、かつ、例えば、必要に応じて、かかる通信の特性（例えば、ソースおよび／または宛先のアドレスを含むヘッダ情報、プロトコル識別子、サイズ、処理要求、など）、および／または、プライベート・ネットワークの特性（例えば、ネットワーク・トポロジに基づいた経路、など）に基づいてパケットまたは他のデータ通信を転送することにより、データ・センタ７１０でのネットワーク内の通信を単独または組も合わせで管理することができる。簡単にするために、コンピューティング・システムおよびこの実施例の他の装置の様々な態様が、ある従来の細部を示すことなく示されていることは理解されるであろう。他の実施形態では、追加のコンピューティング・システムおよび他の装置を相互接続することができ、また、異なる方法で相互接続することができる。
【００７７】
図７に示されたネットワーク・トポロジは極めて単純化されていること、および、さらに多くのネットワークおよびネットワーク・デバイスを用いて本明細書に開示される様々なコンピューティング・システムを相互接続できることを理解すべきである。これらのネットワーク・トポロジおよび装置は、当業者には明らかなはずである。
【００７８】
図７に説明したデータ・センタ７１０は単なる例示であること、および、他の実装形態が利用される可能性があることも理解すべきである。その上に、本明細書で開示された機能は、ソフトウェア、ハードウェア、またはソフトウェアとハードウェアの組み合わせで実装される可能性があることを理解すべきである。他の実装形態は当業者に明白なはずである。サーバ、ゲートウェイ、または他のコンピューティング・デバイスは、交信することができ、かつ、限定なしで、デスクトップまたは他のコンピュータ、データベース・サーバ、ネットワーク記憶装置および他のネットワーク・デバイス、ＰＤＡ、タブレット、携帯電話、無線電話、ページャ、電子手帳、インターネット機器、テレビベースのシステム（例えば、セット・トップ・ボックスおよび／またはパーソナル／デジタル・ビデオレコーダを使用している）、ならびに、適切な通信機能を含む様々な他の消費者製品を含む、説明したタイプの機能を果たすことができるハードウェアまたはソフトウェアの任意の組み合わせを含んでよいことも理解すべきである。加えて、示したモジュールによって提供される機能は、いくつかの実施形態では、より少ないモジュールに組み合わせてもよく、または追加のモジュールに分散させてもよい。同様に、いくつかの実施形態に示されるモジュールのいくつかの機能は提供されなくてもよい、かつ／または、他の追加機能が利用可能であってもよい。
【００７９】
少なくともいくつかの実施形態では、部分または本明細書に記載された技術の１つ以上の一部またはすべてを実装するサーバは、１つ以上のコンピュータ・アクセス可能な媒体を含むか、またはそれにアクセスするように構成された汎用コンピュータ・システムを含むことができる。図８は、１つ以上のコンピュータ・アクセス可能な媒体を含むか、またはそれにアクセスするように構成された汎用コンピュータ・システムを示す。示した実施形態では、コンピューティング・デバイス８００は、入出力（Ｉ／Ｏ）インターフェース８３０を介してシステム・メモリ８２０に結合された１つ以上のプロセッサ８１０ａ、８１０ｂ、および／または８１０ｎ（本明細書では、単数の意味で「プロセッサ１０」と呼ぶ場合もあり、または、複数の意味で「プロセッサ８１０」と呼ぶ場合もある）を含む。コンピューティング・デバイス８００は、Ｉ／Ｏインターフェース８３０に結合されたネットワーク・インターフェース８４０をさらに含む。
【００８０】
様々な実施形態では、コンピューティング・デバイス８００は、１つのプロセッサ８１０を含むユニプロセッサ・システムであってもまたは数個のプロセッサ１０（例えば、２個、４個、８個、別の適切な数）を含むマルチプロセッサ・システムであってもよい。プロセッサ８１０は、命令を実行することができる任意の適切なプロセッサであってよい。例えば、様々な実施形態では、プロセッサ８１０は、ｘ８６、パワーＰＣ、ＳＰＡＲＣ、またはＭＩＰＳＩＳＡまたは任意の他の適切なＩＳＡなどの様々な命令セットのアーキテクチャ（ＩＳＡ）の任意のものを実装している汎用プロセッサまたは組み込みプロセッサであってよい。マルチプロセッサ・システムでは、各プロセッサ８１０は、必ずしもではないが、一般に、同一のＩＳＡを実装することができる。
【００８１】
いくつかの実施形態では、グラフィックス・プロセッシング・ユニット（「ＧＰＵ」）８１２は、グラフィックス・レンダリングおよび／または物理的処理の能力を提供することに関与することができる。ＧＰＵは、例えば、グラフィカルな計算に特化した、高度並列プロセッサ・アーキテクチャを備えることができる。いくつかの実施形態では、プロセッサ８１０およびＧＰＵ８１２は、同タイプのデバイスの１つ以上のものとして実装することができる。
【００８２】
システム・メモリ８２０は、プロセッサ８１０によってアクセス可能な命令およびデータを格納するように構成することができる。様々な実施形態では、システム・メモリ８２０は、スタティック・ランダム・アクセス・メモリ（「ＳＲＡＭ」）、同期ダイナミックＲＡＭ（「ＳＤＲＡＭ」）、不揮発性／フラッシュ（登録商標）タイプ・メモリ、または、他の任意のタイプのメモリなどの、任意の適切なメモリ技術を使用して実装することができる。示した実施形態では、プログラム命令ならびに上記で説明した方法、技術、およびデータなどの１つ以上の所望の機能を実装しているデータが、システム・メモリ８２０内にコード８２５とデータ８２６として格納されて示されている。
【００８３】
一実施形態では、Ｉ／Ｏインターフェース８３０は、プロセッサ８１０と、システム・メモリ８２０と、ネットワーク・インターフェース８４０および他の周辺インターフェースを含む周辺機器との間のＩ／Ｏトラフィックを調整するように構成することができる。いくつかの実施形態では、Ｉ／Ｏインターフェース８３０は、任意のプロトコル、計時、またはデータ変換を行って、ある１つの部品（例えば、システム・メモリ８２０）からのデータ信号を別の部品（例えばプロセッサ８１０）による使用に適したフォーマットに変換することができる。いくつかの実施形態では、Ｉ／Ｏインターフェース８３０は、例えば、周辺部品相互接続（ＰＣＩ）バス標準またはユニバーサル・シリアル・バス（ＵＳＢ）標準の変形などの様々なタイプの周辺バスによって取り付けられた装置のサポートを含むことができる。いくつかの実施形態では、Ｉ／Ｏインターフェース８３０の機能は、例えば、ノース・ブリッジおよびサウス・ブリッジなどの２つまたはそれ以上の個別の部品に分割することができる。また、いくつかの実施形態では、システム・メモリ８２０へのインターフェースなどのＩ／Ｏインターフェース８３０の機能のうちのいくつかまたはすべてを、プロセッサ８１０に直接組み込むことができる。
【００８４】
ネットワーク・インターフェース８４０は、コンピューティング・デバイス８００と、例えば、他のコンピュータ・システムまたはデバイスなどの他のネットワークまたはネットワークス８５０に取り付けられた他のデバイス８６０との間でデータを交換できるように構成することができる。様々な実施形態では、ネットワーク・インターフェース８４０は、例えば、イーサネット・ネットワークのタイプなどの任意の適切な有線または無線の汎用データ・ネットワークを介して通信をサポートすることができる。その上、ネットワーク・インターフェース８４０は、アナログ音声ネットワークまたはデジタル・ファイバ通信ネットワークなどの電気通信／電話ネットワークを介して、ファイバ・チャネルＳＡＮ（ストレージ・エリア・ネットワーク）などのストレージ・エリア・ネットワークを介して、または、他の任意の適切なタイプのネットワークおよび／またはプロトコルを介して通信をサポートすることができる。
【００８５】
いくつかの実施形態では、システム・メモリ８２０は、対応する方法および装置の実施形態を実装するための上記で説明したプログラム命令およびデータを格納するように構成されたコンピュータ・アクセス可能な媒体の一実施形態であってよい。しかし、他の実施形態では、プログラム命令および／またはデータは異なるタイプのコンピュータ・アクセス可能な媒体に受信され、送信され、または格納され得る。一般的に言うと、コンピュータ・アクセス可能な媒体は、磁気媒体または光学媒体（例えば、ディスク、Ｉ／Ｏインターフェース８３０を介してコンピューティング・デバイス８００に結合されたＤＶＤ／ＣＤ）などの非一時的な記憶媒体またはメモリ媒体を含むことができる。非一時的なコンピュータ・アクセス可能な記憶媒体はまた、コンピューティング・デバイス８００のいくつかの実施形態でシステム・メモリ８２０または別のタイプのメモリとして含むことができる、ＲＡＭ、ＲＯＭ、他などの任意の揮発性または不揮発性の媒体を含むこともできる。さらに、コンピュータ・アクセス可能な媒体は、伝送媒体、または、ネットワーク・インターフェース８４０を介して実装することができるものなどのネットワーク・リンクおよび／または無線リンクなどの通信媒体を介して伝えられる電気信号、電磁気信号またはデジタル信号などの信号を含むことができる。図８に示すもののような複数のコンピューティング・デバイスの一部またはすべてを用いて様々な実施形態で説明した機能を実装することができる。例えば、多様な異なるデバイスおよびサーバ上で動作するソフトウェア部品は、協働して機能を提供することができる。いくつかの実施形態では、説明した機能の一部は、汎用コンピュータ・システムを使用して実装されるのに加えて、またはその代わりに、ストレージ・デバイス、ネットワーク・デバイス、または専用のコンピュータ・システムを使用して実装することができる。本明細書で使用される「コンピューティング・デバイス」という用語は、これらのタイプのデバイスの少なくともすべてを指し、これらのタイプのデバイスに限定されるものではない。
【００８６】
コンピュート・ノード（コンピューティング・ノードとも呼ぶことができる）は、タブレット・コンピュータ、パーソナル・コンピュータ、スマートフォン、ゲーム機、コモディティ・ハードウェア・コンピュータ、仮想マシン、ウェブ・サービス、コンピューティング・クラスタ、およびコンピューティング・アプライアンスなどの多種多様なコンピューティング環境上に実装することができる。これらのコンピューティング・デバイスまたはコンピューティング環境のいずれかは、便宜上、コンピュート・ノードまたはコンピューティング・ノードとして説明することができる。
【００８７】
インターネットおよび／または他のネットワークを介して分散されたクライアントのセットにアクセス可能な１つ以上のウェブ・サービス（様々なタイプのクラウドベースのコンピューティングまたはストレージなど）を提供するために企業や公共部門の組織などのエンティティによって設定されたネットワークは、プロバイダ・ネットワークと呼ぶことができる。かかるプロバイダ・ネットワークは、プロバイダ・ネットワークによって提供されるインフラストラクチャとウェブ・サービスを実装し、配布するために必要な物理的および／または仮想化されたコンピュータ・サーバ、ストレージ・デバイス、ネットワーク機器などの集合などの様々なリソース・プールをホストしている多数のデータ・センタを含むことができる。いくつかの実施形態では、リソースは、ストレージの記憶容量、処理の処理能力、インスタンスとして、関連するサービスなどのセットとして、などのウェブ・サービスに関連する様々な単位でクライアントに提供することができる。仮想コンピューティング・インスタンスは、例えば、特化した計算能力（ＣＰＵのタイプと数、メイン・メモリのサイズなどを指定することによって特化することができる）および特化したソフトウェア・スタック（例えば、同様に、ハイパーバイザのトップ上で動作することができるオペレーティング・システムの特別なバージョン）を有した１つ以上のサーバを含むことができる。
【００８８】
いくつかの異なるタイプのコンピューティング・デバイスを単独でまたは組み合わせて使用して、汎用または専用のコンピュータ・サーバ、ストレージ・デバイス、ネットワーク・デバイスなどを含む、異なる実施形態のプロバイダ・ネットワークのリソースを実装することができる。いくつかの実施形態では、クライアントまたはユーザは、例えば管理者のログイン名とパスワードをユーザに与えることによって、リソース・インスタンスへの直接アクセスを提供することができる。他の実施形態では、プロバイダ・ネットワークのオペレータは、特化したクライアント・アプリケーション、および、アプリケーションに適した、クライアントのためのアプリケーションの実行プラットフォーム（アプリケーション・サーバ・インスタンス；ジャバTM仮想マシン（ＪＶＭ）；汎用または特定用途のオペレーティング・システム；ルビー、パール、パイソン、Ｃ、Ｃ＋＋他などの様々な解釈またはコンパイルされたプログラミング言語をサポートするプラットフォーム；または高性能コンピューティング・プラットフォームなど）上でのスケジュール実行の要件を、例えば、クライアントにインスタンスまたは実行プラットフォームへの直接アクセスを要求することなく、クライアントが具体化することを可能にすることができる。いくつかの実装形態では、所与の実行プラットフォームが１つ以上のリソース・インスタンスを利用することができるのに対し、他の実装形態では、複数の実行プラットフォームを１つのリソース・インスタンスにマッピングすることができる。
【００８９】
多くの環境では、異なるタイプの仮想化コンピューティングおよび／または他のネットワークアクセス可能な機能を実装するプロバイダ・ネットワークのオペレータは、顧客が、様々なリソース取得モードでリソースへのアクセスを予約または購入することを可能にすることができる。コンピューティング・リソースのプロバイダは、顧客用の設備を提供して、所望のコンピューティング・リソースを選択し起動させ、アプリケーション部品をコンピューティング・リソースに配置し、かつ環境内で実行しているアプリケーションを維持することができる。加えて、コンピューティング・リソース・プロバイダは、アプリケーションの需要または容量が変化するとき、アプリケーションに割り当てられるリソースの数や種類を、手動でまたは自動スケーリングすることによって、迅速かつ容易にスケールアップまたはスケールダウンするために、顧客用の設備をさらに提供することができる。コンピューティング・リソース・プロバイダによって提供されたコンピューティング・リソースを、インスタンスと呼ぶことができる個別のユニットで利用できるようにすることができる。インスタンスは、物理サーバのハードウェア・プラットフォーム、サーバ上で実行されている仮想マシン・インスタンス、またはこの２つの組み合わせを表すことができる。異なるオペレーティング・システム（ＯＳ）および／またはハイパーバイザを実行するリソースの異なるサイズを含み、様々なインストールされたソフトウェア・アプリケーション、ランタイムなどを有した、様々なタイプおよび構成のインスタンスを利用可能にすることができる。インスタンスは、例えば、基盤となるコンピューティング・ハードウェアの、論理領域、フォールト・トレラント領域、データ・センタ、または他の地理的位置を表す、特定のアベイラビリティ・ゾーンでさらに入手可能となることができる。インスタンスは、インスタンスの冗長性を向上させるためにアベイラビリティ・ゾーン内またはアベイラビリティ・ゾーンを跨いでコピーすることができる。また、インスタンスは、特別なアベイラビリティ・ゾーン内またはアベイラビリティ・ゾーンを跨いで移動することができる。一例として、アベイラビリティ・ゾーン内の特別なサーバとクライアント通信の待ち時間は、異なるサーバとクライアント通信の待ち時間よりも少なくなることができる。このように、インスタンスは、待ち時間のより長いサーバから待ち時間のより短いサーバに移動して全体的なクライアント・エクスペリエンスを向上させることができる。
【００９０】
いくつかの実施形態では、プロバイダ・ネットワークを複数の地理的な領域に組織することができ、各領域は、１つ以上のアベイラビリティ・ゾーンを含むことができる。アベイラビリティ・ゾーン（アベイラビリティ・コンテナとも呼ぶことができる）は、次に、所与のアベイラビリティ・ゾーン内のリソースを他のアベイラビリティ・ゾーンの故障から隔離または絶縁することができるように構成された、１つ以上の場所またはデータ・センタを含むことができる。すなわち、ある１つのアベイラビリティ・ゾーン内の故障が、他の任意のアベイラビリティ・ゾーン内に故障をもたらすことを予測できない。したがって、リソース・インスタンスのアベイラビリティ・プロファイルは異なるアベイラビリティ・ゾーンのリソース・インスタンスのアベイラビリティ・プロファイルと無関係になるように意図されている。クライアントは、それぞれのアベイラビリティ・ゾーン内で複数のアプリケーション・インスタンスを起動することにより、単一の場所で自身のアプリケーションを保護することができる場合がある。同時に、いくつかの実装形態では、安価で待ち時間の短いネットワーク接続を、同じ地理的領域内にあるリソース・インスタンスの間に設けることができる（同一のアベイラビリティ・ゾーンのリソース間のネットワーク送信をさらに速くすることができる）。
【００９１】
前のセクションで説明したプロセス、方法、およびアルゴリズムのそれぞれは、１つ以上のコンピュータまたはコンピュータ・プロセッサによって実行されるコード・モジュールに埋め込んだり、またはコード・モジュールによって完全にまたは部分的に自動化することができる。コード・モジュールは、ハード・ドライブ、固体メモリ、光ディスクおよび／またはその他などの任煮のタイプの非一時的コンピュータ可読媒体、またはコンピュータ記憶装置に格納することができる。プロセスおよびアルゴリズムは、アプリケーション特有の回路に部分的または全体的に実装することができる。開示されたプロセスおよびプロセス・ステップの結果は、例えば、揮発性または不揮発性記憶装置などの任意のタイプの非一時的コンピュータ記憶装置に永続的にまたはそれ以外で格納することができる。
【００９２】
以上は以下の条項を見ればよりよく理解することができる。
１．  １つ以上のクライアントのためにグラフィックスをレンダリングするサービスであって、複数の仮想マシンを含むサービスを操作するように構成された１つ以上のコンピューティング・ノード、および
少なくとも
前記１つ以上のクライアントのためにグラフィックスをレンダリングすることを示す要求であって、前記１つ以上のクライアント上で動作するプロセスに関連付けられたグラフィックス・リソースのセットを示す情報を含むものを受信し、
前記グラフィックス・リソースのセットに対応するレンダリング・プロセスを実行するように構成された前記仮想マシンに少なくとも部分的に基づいて、前記複数の仮想マシンのうちの１つの仮想マシンをアクティブ化することを判断し、
前記仮想マシンの第１の状態は、一時停止されている間中、前記レンダリング・プロセスの第２の状態を含む場合において、前記レンダリング・プロセスをアクティブ状態に保つ要求が受信されていないとの第１の判断、および前記１つ以上のクライアントのうちの少なくとも１つのユーザによる入力を示す情報を受信してからの時間が第１の閾値を超過したとの第２の判断に応答して前記仮想マシンのオペレーションを一時停止し、かつ
前記１つ以上のクライアントのうちの少なくとも１つのユーザによる入力を示す情報の受信に応答して前記仮想マシンのオペレーションを再開する、
ように構成された１つ以上のコンピューティング・ノード、
を含む、システム。
２．  前記１つ以上のコンピューティング・ノードがさらに、少なくとも、
前記仮想マシンの前記第１の状態を待ち時間の短いキャッシュに格納し、かつ、
前記１つ以上のクライアントのうちの少なくとも１つのユーザによる入力を示す情報を受信してからの時間が第２の閾値を超過したことに応答して前記仮想マシンの前記第１の状態を記憶装置に格納する、
ように構成された、１に記載のシステム。
３．  前記１つ以上のコンピューティング・ノードがさらに、少なくとも、
前記仮想マシンを一時停止することに少なくとも部分的に基づいて追加の仮想マシンをアクティブ化するように構成された、請求項１に記載のシステム。
４．  前記レンダリング・プロセスをアクティブ状態に保つ前記要求が、前記１つ以上のクライアント上で動作するプロセスによって送信される、１に記載のシステム。
５．  命令を格納した非一時的なコンピュータ可読記憶媒体であって、
前記命令は、１つ以上のコンピューティング・デバイスによって実行されると、前記１つ以上のコンピューティング・デバイスに、少なくとも
グラフィック・リソースのセットに関連付けられたプロセスを実行する１つ以上のクライアントのためのグラフィックス・レンダリング・サービスを行うことを示す要求を受信させ、
前記グラフィック・リソースのセットにアクセスを有するレンダリング・プロセスを実行するように構成された前記仮想マシンに少なくとも部分的に基づいてアクティブ化のために選択された仮想マシンをアクティブ化させ、
前記１つ以上のクライアントのための前記グラフィックス・レンダリング・サービスを前記レンダリング・プロセスにより行わせ、
前記レンダリング・プロセスをアクティブに保つ要求が受信されていないとの判断および前記１つ以上のクライアントうちの少なくとも１つがアクティビィティを示す情報を受信してからの時間が第１の閾値時間を超過したとの判断に少なくとも部分的に基づいて前記仮想マシンのオペレーションを一時停止させ、かつ、
前記１つ以上のクライアントうちの少なくとも１つがアクティビィティを示す情報を受信するのに応答して前記仮想マシンのオペレーションを再開させる、
非一時的なコンピュータ可読記憶媒体。
６．  前記コンピューティング・デバイスによって実行されると、前記コンピューティング・デバイスに、少なくとも、
前記仮想マシンの状態を待ち時間の短いキャッシュに格納させる、
命令をさらに含む、５に記載の非一時的なコンピュータ可読媒体。
７．  前記コンピューティング・デバイスによって実行されると、前記コンピューティング・デバイスに、少なくとも、
前記１つ以上のクライアントのうちの少なくとも１つがアクティビィティを示す情報を受信してからの前記時間が第２の閾値時間を超過したことに応答して前記仮想マシンの状態を記憶装置に格納させる、
命令をさらに含む、５に記載の非一時的なコンピュータ可読媒体。
８．  前記仮想マシンの前記オペレーションの一時停止が、前記仮想マシンの状態をメモリに保存することを含む、請求項５に記載の非一時的なコンピュータ可読媒体。
９．  前記コンピューティング・デバイスによって実行されると、前記コンピューティング・デバイスに、少なくとも、
レンダリング・プロセスを動作させていないいくつかのアクティブな仮想マシンが閾値未満に落ちたとの判断に応答して追加の仮想マシンをアクティブ化させる、
命令をさらに含む、５に記載の非一時的なコンピュータ可読媒体。
１０．  前記コンピューティング・デバイスによって実行されると、前記コンピューティング・デバイスに、少なくとも、
前記仮想マシン上のいくつかのアクティブなレンダリング・プロセスが閾値レベル未満に落ちたとの判断に少なくとも部分的に基づいて前記仮想マシンのオペレーションを一時停止させる、
命令をさらに含む、請求項５に記載の非一時的なコンピュータ可読媒体。
１１．  前記レンダリング・プロセスをアクティブに保つ前記要求が、前記１つ以上のクライアントのうちの１つの上で動作しているプロセスによって開始された、５に記載の非一時的なコンピュータ可読媒体。
１２．  前記プロセスが、ある期間ユーザ入力が予測されない状態に入ることに応答して前記要求を開始した、請求項１１に記載の非一時的なコンピュータ可読媒体。
１３．  前記コンピューティング・デバイスによって実行されると、前記コンピューティング・デバイスに、少なくとも、
前記レンダリング・プロセスの再開されたオペレーションに対する時間を示す情報を前記１つ以上のクライアントのうちの１つのクライアントに送信させる、
命令をさらに含む、５に記載の非一時的なコンピュータ可読媒体。
１４．  前記コンピューティング・デバイスによって実行されると、前記コンピューティング・デバイスに、少なくとも、
レンダリング・プロセスの状態を前記仮想マシンから別の仮想マシンに転送させる、
命令をさらに含む、請求項５に記載の非一時的なコンピュータ可読媒体。
１５．  グラフィックス・リソースのセットに関連付けられたプロセスを実行する１つ以上のクライアントのためのグラフィックス・レンダリング・サービスを行うことを示す要求を受信すること、
前記グラフィックス・リソースのセットにアクセスを有する前記仮想マシンに少なくとも部分的に基づいてレンダリング・プロセスを実行するために選択された仮想マシン上で前記レンダリング・プロセスを実行すること、
前記仮想マシン上で動作する前記レンダリング・プロセスによって、前記１つ以上のクライアントのための前記グラフィックス・レンダリング・サービスを行うこと、
前記レンダリング・プロセスをアクティブ状態に保つ要求が受信されていないとの第１の判断、および前記１つ以上のクライアントのうちの少なくとも１つのユーザによる入力を示す情報を受信してからの時間が第１の閾値を超過したとの第２の判断に少なくとも部分的に基づいて前記仮想マシンのオペレーションを一時停止すること、および、
前記１つ以上のクライアントのためにグラフィックス・レンダリングを行う要求の受信を示す情報の受信に応答して前記仮想マシンのオペレーションを再開すること、
を含む、方法。
１６．  前記１つ以上のクライアントのためにグラフィックス・レンダリングを行う要求の受信を示す前記情報が、前記１つ以上のクライアントのうちの少なくとも１つのユーザによる入力に対応する、請求項１５に記載の方法。
１７．  前記レンダリング・プロセスをアクティブ状態に保つ前記要求が、ある期間ユーザ入力が予測されない状態に入ることに少なくとも部分的に基づいている、１５に記載の方法。
１８．  前記仮想マシンの状態を待ち時間の短いキャッシュに少なくとも第２の閾値に等しい期間格納すること、
をさらに含む、１５に記載の方法。
１９．  前記仮想マシンを、前記レンダリング・プロセスを実行する前の前記仮想マシンの状態に対応する初期状態にリセットすること、
をさらに含む、１５に記載の方法。
２０．  前記レンダリング・プロセスを再開する状況を示す情報を、前記１つ以上のクライアントのうちの１つのクライアントに送信すること
をさらに含む、１５に記載の方法。
【００９３】
上述の様々な特徴およびプロセスは、互いに独立して使用することができるし、または様々な方法で組み合わせることもできる。すべての可能な組み合わせおよびサブコンビネーションは、本開示の範囲に含まれるものとする。加えて、特定の方法またはプロセス・ブロックはいくつかの実装形態では省略することができる。本明細書に記載された方法およびプロセスはまた、どんな特定の順序にも限定されない。そして、ブロックまたはそれに関連する状態は、適切な他の順序で実行することができる。例えば、説明したブロックまたは状態は、具体的に開示したもの以外の順序で行うことができる。あるいは、複数のブロックまたは状態を、単一のブロックまたは状態に組み合わせることができる。ブロックまたは状態は、開示された実施形態の例に追加したり、または、例から削除したりすることができる。本明細書に記載のシステムおよび部品の例は、説明したものとは異なって構成することができる。例えば、要素を、開示した実施形態の例に追加したり、例から除去したり、または例と比較して再配置したりすることができる。
【００９４】
また、使用中に様々なアイテムがメモリ内または記憶装置上に格納されているものとして示されていること、およびこれらのアイテムまたはその一部がメモリ管理とデータ完全性のためにメモリと他の記憶装置との間で転送することができることも理解できるであろう。あるいは、他の実施形態では、ソフトウェア・モジュールおよび／またはシステムの一部または全部を別のデバイス上のメモリで実行することができ、コンピュータ間通信を介して示したコンピュータ・システムと通信することができる。さらに、いくつかの実施形態では、一部またはすべてのシステムおよび／またはモジュールを、限定はされないが、アプリケーション特有の集積回路（ＡＳＩＣ）、標準集積回路（例えば、適切な命令を実行すること、および、マイクロコントローラおよび／または埋め込みコントローラを含むことにより）、コントローラ、フィールドプログラマブル・ゲート・アレイ（ＦＰＧＡ）、コンプレックス・プログラマブル・ロジック・デバイス（ＧＰＬＤ）等のうちの１つまたはそれ以上を含む、ファームウェアおよび／またはハードウェアに少なくとも部分的に実装または提供するなどの他の方法で、実装または提供することができる。モジュール、システムおよびデータ構造のいくつかまたはすべてを（例えば、ソフトウェア命令または構造化データとして）ハードディスク、メモリ、適切なドライブによってまたは適切な接続を介して読むことができるネットワークまたはポータブルのメディア製品などのコンピュータ可読媒体上に格納することもできる。システム、モジュール、およびデータ構造はまた、生成データ信号として（例えば、搬送波または他のアナログまたはデジタルの伝搬信号の一部として）無線ベース媒体および有線／ケーブル・ベース媒体を含む様々なコンピュータ可読伝送媒体上に送信することもでき、かつ、様々な形態（例えば、単一または多重化されたアナログ信号の一部として、または複数の離散したデジタル・パケットまたはフレームとして）をとることができる。かかるコンピュータ・プログラム製品はまた、他の実施形態では他の形態をとることもできる。従って、本発明は、他のコンピュータ・システム構成で実施することができる。
【００９５】
本明細書で使用される、とりわけ、「できる」、「できるはず」、「可能性がある」、「してよい」、「例えば」その他などの条件付きの言語は、他に具体的に述べられないなら、または使用されるときの状況で他に理解されないなら、一般的に、ある実施形態はある特徴、要素、および／またはステップを含む一方、他の実施形態はそれらを含まないことを伝えることが意図されている。したがって、かかる条件付き言語は一般的に、特徴、要素、および／またはステップが１つ以上の実施形態にいかなる方法でも必要であること、または、１つ以上の実施形態は、これらの特徴、要素、および／またはステップが任意の特別な実施形態に含まれるかまたはそこで実行されるかどうかを、著者の入力が有っても無くても、判断するロジックを必然的に含むこと意味することを意図していない。「含む（ｃｏｍｐｒｉｓｉｎｇ）」、「含む（ｉｎｃｌｕｄｉｎｇ）」、「有する」などの用語は、同義語であり、開放形式で包括的に使用されており、追加の要素、特徴、行為、オペレーションその他を排除するものではない。また、「または」という用語は、例えば、要素のリストを接続するために使用されるとき、用語「または」が、リスト内の要素の１つ、いくつか、またはすべてを意味するように包括的な意味で使用されている（そして、排他的な意味で使用されていない）。
【００９６】
ある特定の例示的な実施形態を説明してきたが、これらの実施形態は例としてのみ提示されており、本明細書に開示される発明の範囲を限定するものではない。したがって、上記の説明では、任意の特別な機能、特徴、ステップ、モジュールまたはブロックが必要であるかまたは必須であることを意味することは何も意図されていない。実際、本明細書に記載の新規な方法およびシステムは、他の様々な形で実施することができる。さらに、本明細書に記載の方法およびシステムの形態の様々な省略、置換、および変更、本明細書に開示される発明の精神から逸脱することなく行うことができる。添付の特許請求の範囲およびそれらの均等物は、本明細書に開示された発明の特定の範囲および精神内に含まれうる形態または修正を網羅することを意図している。
【００９７】
以下、親出願（２０１８−１４５１７０号）の親出願（特願２０１６−５２９９３８号）の当初請求項である。
[請求項１]
１つ以上のクライアントのためにグラフィックスをレンダリングするサービスであって、複数の仮想マシンを含むサービスを操作するように構成された１つ以上のコンピューティング・ノードと、
１つ以上のコンピューティング・ノードと、
を含むシステムであって、
前記１つ以上のコンピューティング・ノードは、少なくとも、
前記１つ以上のクライアントのためにグラフィックスをレンダリングすることを示す要求であって、前記１つ以上のクライアント上で動作するプロセスに関連付けられたグラフィックス・リソースのセットを示す情報を含む要求を受信し、
前記グラフィックス・リソースのセットに対応するレンダリング・プロセスを実行するように構成された前記仮想マシンに少なくとも部分的に基づいて、前記複数の仮想マシンのうちの１つの仮想マシンをアクティブ化することを判断し、
前記仮想マシンの第１の状態が、一時停止されている間中、前記レンダリング・プロセスの第２の状態を含む場合、前記レンダリング・プロセスをアクティブ状態に保つ要求が受信されていないとの第１の判断に応答して、かつ、前記１つ以上のクライアントのうちの少なくとも１つのユーザによる入力を示す情報を受信してからの時間が第１の閾値を超過したとの第２の判断に応答して、前記仮想マシンのオペレーションを一時停止し、
前記１つ以上のクライアントのうちの少なくとも１つのユーザによる入力を示す情報の受信に応答して、前記仮想マシンのオペレーションを再開する、
ように構成されている、
システム。
[請求項２]
前記１つ以上のコンピューティング・ノードは、少なくとも、
前記仮想マシンの前記第１の状態を待ち時間の短いキャッシュに格納し、
前記１つ以上のクライアントのうちの少なくとも１つのユーザによる入力を示す情報を受信してからの時間が第２の閾値を超過したことに応答して、前記仮想マシンの前記第１の状態を記憶装置に格納する、
ようにさらに構成されている、
請求項１に記載のシステム。
[請求項３]
前記１つ以上のコンピューティング・ノードは、少なくとも、
前記仮想マシンを一時停止することに少なくとも部分的に基づいて追加の仮想マシンをアクティブ化するようにさらに構成されている、
請求項１に記載のシステム。
[請求項４]
前記レンダリング・プロセスをアクティブ状態に保つ前記要求は、前記１つ以上のクライアント上で動作するプロセスによって送信される、
請求項１に記載のシステム。
[請求項５]
１つ以上のプロセッサと、
命令を格納した１つ以上のコンピュータ可読記憶媒体と、
を含むシステムであって、
前記命令は、前記１つ以上のプロセッサに実行されると、前記コンピューティング・デバイスに、少なくとも、
グラフィック・リソースのセットに関連付けられたプロセスを実行する１つ以上のクライアントのためのグラフィックス・レンダリング・サービスを行うことを示す要求を受信させ、
アクティブ化のために選択された仮想マシンを、前記グラフィック・リソースのセットにアクセスを有するレンダリング・プロセスを実行するように構成された前記仮想マシンに少なくとも部分的に基づいてアクティブ化させ、
前記レンダリング・プロセスにより、前記１つ以上のクライアントのための前記グラフィックス・レンダリング・サービスを実行させ、
前記レンダリング・プロセスをアクティブに保つ要求が受信されていないとの判断および前記１つ以上のクライアントうちの少なくとも１つがアクティビィティを示す情報を受信してからの時間が第１の閾値時間を超過したとの判断に少なくとも部分的に基づいて前記仮想マシンのオペレーションを一時停止させ、
前記１つ以上のクライアントうちの少なくとも１つがアクティビィティを示す情報を受信するのに応答して前記仮想マシンのオペレーションを再開させる、
システム。
[請求項６]
前記コンピューティング・デバイスによって実行されると、前記コンピューティング・デバイスに、少なくとも、
前記１つ以上のクライアントのうちの少なくとも１つがアクティビィティを示す情報を受信してからの前記時間が第２の閾値時間を超過したことに応答して前記仮想マシンの状態を記憶装置に格納させる、
命令をさらに含む、
請求項５に記載のシステム。
[請求項７]
前記仮想マシンの前記オペレーションを一時停止させることは、前記仮想マシンの状態をメモリに保持することを含む、
請求項５に記載のシステム。
[請求項８]
前記コンピューティング・デバイスによって実行されると、前記コンピューティング・デバイスに、少なくとも、
レンダリング・プロセスを動作させていないいくつかのアクティブな仮想マシンが閾値未満に落ちたとの判断に応答して追加の仮想マシンをアクティブ化させる、
命令をさらに含む、
請求項５に記載のシステム。
[請求項９]
前記コンピューティング・デバイスによって実行されると、前記コンピューティング・デバイスに、少なくとも、
前記レンダリング・プロセスの再開されたオペレーションに対する時間を示す情報を前記１つ以上のクライアントのうちの１つのクライアントに送信させる、
命令をさらに含む、
請求項５に記載のシステム。
[請求項１０]
グラフィックス・リソースのセットに関連付けられたプロセスを実行する１つ以上のクライアントのためのグラフィックス・レンダリング・サービスを行うことを示す要求を受信するステップと、
前記レンダリング・プロセスを、レンダリング・プロセスを実行するために選択された仮想マシン上で、前記グラフィックス・リソースのセットにアクセスを有する前記仮想マシンに少なくとも部分的に基づいて実行するステップと、
前記仮想マシン上で動作する前記レンダリング・プロセスによって、前記１つ以上のクライアントのための前記グラフィックス・レンダリング・サービスを行うステップと、
前記レンダリング・プロセスをアクティブ状態に保つ要求が受信されていないとの第１の判断、および、前記１つ以上のクライアントのうちの少なくとも１つのユーザによる入力を示す情報を受信してからの時間が第１の閾値を超過したとの第２の判断に少なくとも部分的に基づいて前記仮想マシンのオペレーションを一時停止するステップと、
前記１つ以上のクライアントのためにグラフィックス・レンダリングを行う要求の受信を示す情報の受信に応答して前記仮想マシンのオペレーションを再開するステップと、
を含む方法。
[請求項１１]
前記１つ以上のクライアントのためにグラフィックス・レンダリングを行う要求の受信を示す前記情報は、前記１つ以上のクライアントのうちの少なくとも１つのユーザによる入力に対応する、
請求項１０に記載の方法。
[請求項１２]
前記レンダリング・プロセスをアクティブ状態に保つ前記要求は、ある期間ユーザ入力が予測されない状態に入ることに少なくとも部分的に基づいている、
請求項１０に記載の方法。
[請求項１３]
前記仮想マシンの状態を待ち時間の短いキャッシュに少なくとも第２の閾値に等しい期間格納するステップをさらに含む、
請求項１０に記載の方法。
[請求項１４]
前記仮想マシンを、前記レンダリング・プロセスを実行する前の前記仮想マシンの状態に対応する初期状態にリセットするステップをさらに含む、
請求項１０に記載の方法。
[請求項１５]
前記レンダリング・プロセスを再開する状況を示す情報を、前記１つ以上のクライアントのうちの１つのクライアントに送信するステップをさらに含む、
請求項１０に記載の方法。
【図１】
2020024722.tif 000003
【図２】
2020024722.tif 000004
【図３】
2020024722.tif 000005
【図４】
2020024722.tif 000006
【図５】
2020024722.tif 000007
【図６】
2020024722.tif 000008
【図７】
2020024722.tif 000009
【図８】
2020024722.tif 000010
【手続補正書】
【提出日】令和1年10月9日(2019.10.9)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
１つまたは複数のプロセッサと、
命令のセットを格納する１つまたは複数のメモリと、
を備えるシステムであって、
前記命令は、前記１つまたは複数のプロセッサによって実行されると、前記１つまたは複数のプロセッサに、
仮想マシン上で動作するレンダリング・プロセスによって、１つまたは複数のクライアントのためのグラフィックス・レンダリング・サービスを実行するステップと、
第１の時間にモニタリング・コンポーネントによって、前記１つまたは複数のクライアントから前記グラフィックス・レンダリング・サービスのための第１の要求を受信するステップと、
前記グラフィックス・レンダリング・サービスのための次の要求が、前記第１の時間から第１の閾値期間以内に、前記モニタリング・コンポーネントによって、前記１つまたは複数のクライアントから受信されていないという第１の判断を実行するステップと、
前記仮想マシン上のアクティブなレンダリング・プロセスの数が、１より大きいアクティブなレンダリング・プロセスの閾値数未満に落ちたという第２の判断を実行するステップと、
前記第２の判断に少なくとも部分的に基づいて、前記仮想マシン上の前記アクティブなレンダリング・プロセスの１つまたは複数を、１つまたは複数の他の仮想マシンに移動するステップと、
前記第１の判断および前記第２の判断に少なくとも部分的に基づいて、前記仮想マシンの動作を一時停止するステップと、
前記１つまたは複数のクライアントから前記グラフィックス・レンダリング・サービスのための第２の要求を受信することを表す受信情報に少なくとも部分的に基づいて、前記仮想マシンの動作を再開するステップと、
を含む動作を実行させる、
システム。
【請求項２】
前記動作は、前記仮想マシンの状態を待ち時間の短いキャッシュ内に格納するステップをさらに含む、
請求項１に記載のシステム。
【請求項３】
前記動作は、前記グラフィックス・レンダリング・サービスのための次の要求が、前記第１の時間に前記グラフィックス・レンダリング・サービスのための前記第１の要求を受信してから第２の閾値期間以内に、前記モニタリング・コンポーネントによって、前記１つまたは複数のクライアントから受信されないと判断するステップに応答して、前記仮想マシンの状態をストレージ・デバイス上に格納するステップをさらに含む、
請求項１に記載のシステム。
【請求項４】
前記仮想マシンの前記動作を一時停止するステップは、前記仮想マシンの状態をメモリ内に保持するステップを含む、
請求項１に記載のシステム。
【請求項５】
前記動作は、
前記１つまたは複数のクライアントのための前記グラフィックス・レンダリング・サービスを実行することを表す要求を受信するステップであって、前記１つまたは複数のクライアントは、グラフィックス・リソースのセットに関連付けられたプロセスを実行するステップと、
前記仮想マシンをアクティブ化するステップであって、前記仮想マシンは、グラフィックス・リソースの前記セットにアクセスする前記レンダリング・プロセスを実行するように構成されている前記仮想マシンに少なくとも部分的に基づいて、アクティブ化のために選択されるステップと、
をさらに含む、
請求項１に記載のシステム。
【請求項６】
前記動作は、レンダリング・プロセスの状態を前記仮想マシンから他の仮想マシンに移動するステップをさらに含む、
請求項１に記載のシステム。
【請求項７】
前記レンダリング・プロセスをアクティブ状態に保つ要求は、ある期間ユーザ入力が予測されない状態に入ることに少なくとも部分的に基づく、
請求項１に記載のシステム。
【請求項８】
前記動作は、
前記１つまたは複数のクライアントのための前記グラフィックス・レンダリング・サービスを実行することを表す要求を受信するステップであって、前記１つまたは複数のクライアントは、グラフィックス・リソースのセットに関連付けられたプロセスを実行するステップと、
前記仮想マシン上で実行する１つまたは複数の他のプロセスによってレンダリングされるコンテンツに少なくとも部分的に基づいて、複数の仮想マシンから前記レンダリング・プロセスを実行する前記仮想マシンを選択するステップと、
をさらに含む、
請求項１に記載のシステム。
【請求項９】
前記動作は、前記レンダリング・プロセスの動作を再開する時間を表す情報を、前記１つまたは複数のクライアントのうちの１つのクライアントに送信するステップをさらに含む、
請求項１に記載のシステム。
【請求項１０】
仮想マシン上で動作するレンダリング・プロセスによって、１つまたは複数のクライアントのためのグラフィックス・レンダリング・サービスを実行するステップと、
第１の時間にモニタリング・コンポーネントによって、前記１つまたは複数のクライアントから前記グラフィックス・レンダリング・サービスのための第１の要求を受信するステップと、
前記グラフィックス・レンダリング・サービスのための次の要求が、前記第１の時間から第１の閾値期間以内に、前記モニタリング・コンポーネントによって、前記１つまたは複数のクライアントから受信されていないという第１の判断を実行するステップと、
前記仮想マシン上のアクティブなレンダリング・プロセスの数が、１より大きいアクティブなレンダリング・プロセスの閾値数未満に落ちたという第２の判断を実行するステップと、
前記第２の判断に少なくとも部分的に基づいて、前記仮想マシン上の前記アクティブなレンダリング・プロセスの１つまたは複数を、１つまたは複数の他の仮想マシンに移動するステップと、
前記第１の判断および前記第２の判断に少なくとも部分的に基づいて、前記仮想マシンの動作を一時停止するステップと、
前記１つまたは複数のクライアントから前記グラフィックス・レンダリング・サービスのための第２の要求を受信することを表す受信情報に少なくとも部分的に基づいて、前記仮想マシンの動作を再開するステップと、
を含む方法。
【請求項１１】
前記仮想マシンの状態を待ち時間の短いキャッシュ内に格納するステップをさらに含む、
請求項１０に記載の方法。
【請求項１２】
前記グラフィックス・レンダリング・サービスのための次の要求が、前記第１の時間に前記グラフィックス・レンダリング・サービスのための前記第１の要求を受信してから第２の閾値期間以内に、前記モニタリング・コンポーネントによって、前記１つまたは複数のクライアントから受信されないと判断するステップに応答して、前記仮想マシンの状態をストレージ・デバイス上に格納するステップをさらに含む、
請求項１０に記載の方法。
【請求項１３】
前記仮想マシンの前記動作を一時停止するステップは、前記仮想マシンの状態をメモリ内に保持するステップを含む、
請求項１０に記載の方法。
【外国語明細書】
2020024722.tif 000011
2020024722.tif 000012
2020024722.tif 000013
2020024722.tif 000014
2020024722.tif 000015
2020024722.tif 000016
2020024722.tif 000017
2020024722.tif 000018
2020024722.tif 000019
2020024722.tif 000020
2020024722.tif 000021
2020024722.tif 000022
2020024722.tif 000023
2020024722.tif 000024
2020024722.tif 000025
2020024722.tif 000026
2020024722.tif 000027
2020024722.tif 000028
2020024722.tif 000029
2020024722.tif 000030
2020024722.tif 000031
2020024722.tif 000032
2020024722.tif 000033
2020024722.tif 000034
2020024722.tif 000035
2020024722.tif 000036
2020024722.tif 000037
2020024722.tif 000038
2020024722.tif 000039
2020024722.tif 000040
2020024722.tif 000041
2020024722.tif 000042
2020024722.tif 000043
2020024722.tif 000044
2020024722.tif 000045
2020024722.tif 000046
2020024722.tif 000047
2020024722.tif 000048
2020024722.tif 000049
2020024722.tif 000050
2020024722.tif 000051
2020024722.tif 000052
2020024722.tif 000053
2020024722.tif 000054
2020024722.tif 000055