JP6329484B2 - 多数のサーバーからクライアントへの単一エンド・ユーザー体験の配信 - Google Patents

多数のサーバーからクライアントへの単一エンド・ユーザー体験の配信 Download PDF

Info

Publication number
JP6329484B2
JP6329484B2 JP2014535969A JP2014535969A JP6329484B2 JP 6329484 B2 JP6329484 B2 JP 6329484B2 JP 2014535969 A JP2014535969 A JP 2014535969A JP 2014535969 A JP2014535969 A JP 2014535969A JP 6329484 B2 JP6329484 B2 JP 6329484B2
Authority
JP
Japan
Prior art keywords
graphics
remote
connection
server
client
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2014535969A
Other languages
English (en)
Other versions
JP2014530441A5 (ja
JP2014530441A (ja
Inventor
チャクラボルティー,パラグ
ポスト,ブラッドレイ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2014530441A publication Critical patent/JP2014530441A/ja
Publication of JP2014530441A5 publication Critical patent/JP2014530441A5/ja
Application granted granted Critical
Publication of JP6329484B2 publication Critical patent/JP6329484B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces
    • G06F9/452Remote windowing, e.g. X-Window System, desktop virtualisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/505Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45562Creating, deleting, cloning virtual machine instances
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/549Remote execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/14Digital output to display device ; Cooperation and interconnection of the display device with other functional units
    • G06F3/1454Digital output to display device ; Cooperation and interconnection of the display device with other functional units involving copying of the display data of a local workstation or window to a remote workstation or window so that an actual copy of the data is displayed simultaneously on two or more displays, e.g. teledisplay

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Information Transfer Between Computers (AREA)
  • Stored Programmes (AREA)
  • Computer And Data Communications (AREA)

Description

[0001] リモート計算システムでは、ユーザーが、このリモート計算システムによってホストされるリソースにアクセスすることができる場合がある。このリモート計算システム上のサーバーは、プログラムを実行し、ユーザー・インターフェースを示す信号をクライアントに送信することができる。クライアントは、TCP/IP、UDP、または他のプロトコルというような通信プロトコルに準拠したネットワークを通じて、信号を送ることによって接続することができる。接続する各クライアントには、仮想デスクトップまたはセッション、即ち、1組のリソースを含む実行環境を提供されるのでもよい。各クライアントは、ユーザー入力を示す信号をサーバーに送信することができ、サーバーはユーザー入力をしかるべきセッションに適用することができる。クライアントは、サーバー・リソースに接続するためには、リモート・デスクトップ・プロトコル(RDP)のようなプロトコルを用いてもよい。
[0002] ネットワーク帯域幅の可用性拡大、ならびに豊富な2Dおよび3Dクライアント・グラフィクス・アプリケーションに対する要望増大のため、リモート計算システム・アーキテクチャーにおいてシフトが生じつつある。純粋にローカルな計算パワーだけに頼る代わりに、サーバーがグラフィクス仮想化プラットフォームを組み込み、これらのプラットフォームが、グラフィクス処理インテリジェンスを、データー・センタに配備され(deploy)ホストされた仮想デスクトップ・インフラストラクチャ(VDI)にシフトする。クライアントは、共有グラフィクス処理ユニット(GPU)およびVDI上にインストールされたプロセッサーのグラフィクス処理パワーを利用して、仮想デスクトップを最大の忠実度で体験する。グラフィクス仮想化プラットフォームの一例に、Microsoft(登録商標)RemoteFX(登録商標)がある。これは、Hyper-V(登録商標)VDIアーキテクチャー上に構築し、ホストされたVDIデスクトップのために設計された新たなペイロードを配信するためにRDPを統合する。
[0003] 典型的なVDIアーキテクチャーは、ホスト・パーティションと、多数のゲスト・パーティションまたは仮想機械とを含むことができる。ホスト・パーティションは、GPU、中央処理ユニット(CPU)、およびメモリー空間というような、VDIの基礎的な物理リソースにアクセスし、仮想機械のこれらのリソースに対するアクセスを割り当てそして管理することができる。各仮想機械は、割り当てられた物理リソースの仮想化である、1組の仮想リソースを有する。
[0004] このため、リモート計算システムでは、クライアントは、仮想機械またはその中で実行する仮想デスクトップ・セッションに接続することができ、このセッションにおいてこのクライアントの認証が管理される。ユーザー入力データーまたはグラフィクス・データーのような、クライアントから仮想機械に送信すべきデーターは、最初にホスト・パーティション上のネットワーク・インターフェース・カード(NIC)に送信され、次いで仮想機械に導き直される。仮想機械は、その仮想リソースを用いてデーターを処理することができる。仮想機械は、処理したデーターを、基礎的な物理リソース上での更なる処理のために、ホスト・パーティションに送る。ホスト・パーティションは、更に、このデーターを処理し、クライアントとの認証のために仮想機械に返送する。仮想機械は、このデーターをホスト・パーティションNICを通じてクライアントに送信するために、パッケージ化し再度ホスト・パーティションに導き直す。ホスト・パーティションと仮想機械との間におけるデーターの反復横断は、集中的な動作を必要とする可能性があり、大量のメモリーおよびCPUリソースを消費する可能性があり、クライアントに対するデーター配信レイテンシが増大する可能性がある。
[0005] リモート計算システム環境においてクライアントから受信される、グラフィクス・データーのような、データーの処理を最適化するためのシステム、方法、およびコンピューター読み取り可能媒体について開示する。現在のアーキテクチャーと比較すると、このような最適化は、ホストされるメモリーおよびCPUリソースの使用削減、およびクライアントに対するデーター配信レイテンシの短縮を含む。
[0006] 一実施形態では、クライアントは、計算サーバーのような他の計算デバイスとの第1接続を開始して、仮想デスクトップまたはその中におけるセッションにおいてクライアント作業負荷を実行することができる。計算サーバーは、第1接続を認証することができ、クライアント・アドレスを取得することができる。計算サーバーは、次に、グラフィクス・サーバーとの接続をネゴシエートすることができ、グラフィクス・サーバーを初期化して、クライアント・アドレスから始まる接続を予期する(expect)ようにグラフィクス・サーバーに命令する。また、計算サーバーはグラフィクス・サーバーからグラフィクス・サーバー・アドレスも取得することができる。計算サーバーは、このグラフィクス・サーバー・アドレスをクライアントに供給することができる。一方、クライアントは、このグラフィクス・サーバー・アドレスを用いて、グラフィクス・サーバーとの第3接続を確立することができる。一旦これらの接続が確立されたなら、クライアントは、キーボード入力、マウス入力等のようなユーザーの画面入力を計算サーバーに、第1接続を通じて、供給することができる。計算サーバーは、供給された入力を処理し、表示コマンドやコールのような、処理データーを出力することができる。計算サーバーは、処理したデーターを、処理のためにグラフィクス・サーバーに送ることができる。次いで、グラフィクス・サーバーは、受信したデーターを処理し、グラフィクス出力データーをクライアントに送ることができる。したがって、グラフィクス・サーバーがグラフィクス出力データーを計算サーバーに返送する必要はない。同様に、計算サーバーがグラフィクス出力データーをクライアントに送る必要もない。
[0007] 計算サーバーは、仮想化計算システム上にホストされるゲスト・パーティションまたは仮想機械であることができ、一方グラフィクス・サーバーは仮想化計算システム上のホスト・パーティションであることができる。第1接続は、例えば、TCP/IP、UDP、または他のネットワーク・ベース通信のいずれでも可能であり、リモート・デスクトップ・セッション接続を含むことができる。第2接続は、例えば、VMBus、ハイパーバイザー(仮想機械モニターとしても知られる)を介した通信、TCP/IP、UDP、または他のネットワーク・ベース接続のいずれかというような、イントラ・パーティション通信チャネルを含むことができる。第3接続は、例えば、TCP/IP、UDP、FCOE、100GBイーサネット(登録商標)、またはネットワーク・ベース接続のいずれかとすることができる。
[0008] 一実施形態では、複数のクライアントを同時に複数の計算サーバーにそして複数のグラフィクス・サーバーに接続することができる。複数のクライアントの内1つのクライアントとの接続を確立し、このクライアントを認証する最初のステップにおいて、クライアントを複数の計算サーバーの内第1計算サーバーに接続するために、リディレクターおよび/またはブローカーを用いることができる。リディレクターおよび/またはブローカーは、複数の計算サーバーの可用性を判断し、それに応じてクライアントと第1計算サーバーとの間の接続を割り当てることができる。したがって、計算リソースの負荷均衡の場合、仮想機械ライブ・マイグレーションのような技法は継ぎ目なく作業負荷を第1計算サーバーから第2計算サーバーに移転することができる。第2計算サーバーへのクライアント接続は、再確立することができ、一方クライアントと複数のグラフィクス・サーバーの内1つのグラフィクス・サーバーとの間の接続は、同じままであり続けることができる。同様に、グラフィクス・サーバー・マネージャーは、クライアントが接続された計算サーバーを、複数のグラフィクス・サーバーの内1つのグラフィクス・サーバーに接続するために用いることができる。グラフィクス・サーバー・マネージャーは、複数のグラフィクス・サーバーの可用性を判断し、これに応じてクライアントが接続された計算サーバーと第1グラフィクス・サーバーとの間の接続を割り当てることができる。したがって、グラフィクス・サーバーの負荷均衡の場合、クライアントが接続された計算サーバーは、第2グラフィクス・サーバーとの新たな接続を形成することができ、第2グラフィクス・サーバーとの新たな接続を確立するようにクライアントに要求することができる。次いで、クライアントは第2グラフィクス・サーバーに継ぎ目無しに移行することができる。
[0009] 複数のクライアントが同時に複数の計算サーバーおよび複数のグラフィクス・サーバーに接続される実施形態では、少なくとも1つのクライアントが、複数のグラフィクス・サーバーからの、レンダリングされ、キャプチャされ、圧縮されたデーターを受信するように構成することができる。したがって、少なくとも1つのクライアントを通じてインターフェースするユーザーは、1つ以上のクライアントから発する、レンダリングされ、キャプチャされ、圧縮されたデーターを見ることができる。同様に、少なくとも1つのグラフィクス・サーバーは、複数のクライアントから発する、レンダリングされ、キャプチャされ、圧縮された処理データーをクライアントに送信するように構成することができる。
[0010] この摘要は、本発明の態様の全体像を規定することを意図している。これは、本発明のあらゆる必要なステップまたはコンポーネントを特定することを意図しているのではない。以上のことに加えて、他の態様も特許請求の範囲、図面、および本開示の一部をなす本文において記載される。尚、本開示の1つ以上の種々の態様が、ここで引用した本開示の態様を実施するための回路および/またはプログラミングを含むのでもよいがこれらには限定されないこと、その回路および/またはプログラミングは、システム設計者の設計選択に応じて、ここで引用した態様を実施するように構成されるハードウェア、ソフトウェア、および/またはファームウェアの事実上あらゆる組み合わせであることができることは、当業者には認めることができよう。
[0011] 本明細書にしたがってリモート計算環境において受信された、グラフィクス・データーのようなデーターの処理を最適化するためのシステム、方法、およびコンピューター媒体について、添付図面を参照しながら更に説明する。
図1は、本開示の態様を実現することができる計算環境の一例を示す。 図2は、本開示の態様を実施するためのリモート計算環境を示す。 図3は、本開示の態様を実施するために、複数のクライアントが複数のリモート・サーバーに接続することができるリモート環境を示す。 図4は、複数の仮想機械を有する仮想機械環境の一例を示す。 図5は、複数の仮想機械を有する仮想機械環境の他の例を示す。 図6は、本開示の態様を実施するために複数の仮想デスクトップ・セッションをホストするリモート・サーバーを示す。 図7は、本開示の態様を実施するための計算サーバーおよびグラフィック・サーバーのアーキテクチャー例を示す。 図8は、本開示の態様を実施するための計算サーバーおよびグラフィクス・サーバーの他のアーキテクチャー例を示す。 図9は、本開示の態様を実施するための計算サーバーおよび複数のグラフィクス・サーバーの例を示す。 図10は、本開示の態様を実施するための仮想環境において実装される(effectuate)計算サーバーおよびグラフィクス・サーバーの例を示す。 図11は、本開示の態様を実施するための、クライアント、計算サーバー、およびグラフィクス・サーバーを有する計算環境を示す。 図12は、本開示の態様を実施するための、複数のクライアント、計算サーバー、およびグラフィクス・サーバーを有する計算環境を示す。 図13は、本開示の態様を実施するための方法の一例を表すフロー・チャートを示す。 図14は、本開示の態様を実施するためのシステムおよびコンピューター読み取り可能記憶媒体の例を示す。
[0026] 本開示の種々の実施形態の完全な理解が得られるようにするために、以下の説明および図においてある程度具体的な詳細を明記する。計算およびソフトウェア技術に関連することが多いある種の周知の詳細については、本開示の種々の実施形態を不要に曖昧にするのを避けるために、以下の開示では明記しないこととする。更に、当業者は、以下に説明する詳細の内1つ以上がなくても、本開示の他の実施形態を実施できることが理解されよう。最後に、以下の開示ではステップおよびシーケンスを参照して種々の方法について説明するが、このような説明は、本開示の実施形態の明確な実施態様を提示するためであり、これらのステップおよびステップのシーケンスが本開示を実施するためには必須であると解釈してはならない。
[0027] 尚、本明細書において説明する種々の技法は、ハードウェアまたはソフトウェア、あるいはしかるべきときには、双方の組み合わせで実現できることは言うまでもない。つまり、本開示の方法および装置、またはその一部のある種の態様は、フロッピー(登録商標)・ディスケット、CD−ROM、ハード・ドライブ、または他のあらゆる機械読み取り可能記憶媒体というような、有形媒体に具体化されたプログラム・コード(即ち、命令)の形態をなすことができ、プログラム・コードがコンピューターのような機械にロードされこの機械によって実行されると、この機械が本開示を実施する装置になる。プログラマブル・コンピューター上におけるプログラム・コード実行の場合、計算デバイスは、通常、プロセッサー、このプロセッサーによって読み取り可能な記憶媒体(揮発性および不揮発性メモリーおよび/または記憶エレメントを含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを含む。例えば、アプリケーション・プログラミング・インターフェース(API)、再利用可能な制御手段等の使用によって、1つ以上のプログラムが、本開示に関して説明されるプロセスを実現するまたは利用することもできる。このようなプログラムは、コンピューター・システムと通信するために、高級手順プログラミング言語またはオブジェクト指向プログラミング言語で実現されることが好ましい。しかしながら、プログラム(1つまたは複数)は、所望であれば、アセンブリーまたは機械語で実現することもできる。いずれの場合でも、言語は、コンパイル型言語でもインタプリタ型言語でもよく、ハードウェアの実施形態と組み合わせてもよい。
[0028] 本開示全体を通じて用いられる回路(circuitry)という用語は、ハードウェア割り込みコントローラ、ハード・ドライブ、ネットワーク・アダプター、グラフィクス・プロセッサー、ハードウェア・ベース・ビデオ/オーディオ・コデックというようなハードウェア・コンポーネント、およびこのようなハードウェアを動作させるために用いられるファームウェア/ソフトウェアを含むことができる。また、回路という用語は、ファームウェアによってまたはある種の方法で設定されるスイッチによって機能(1つまたは複数)を実行するように構成されたマイクロプロセッサー、または1つ以上の論理プロセッサー、例えば、マルチコア汎用処理ユニットの1つ以上のコアも含むことができる。この例における論理プロセッサー(1つまたは複数)は、機能(1つまたは複数)を実行するように動作可能なロジックを具体化するソフトウェア命令によって構成することができる。このソフトウェア命令は、メモリー、例えば、RAM、ROM、ファームウェア、および/または仮想メモリーからロードされる。回路がハードウェアおよびソフトウェアの組み合わせを含む実施形態例では、実施者(implementer)がロジックを具体化するソース・コードを書くのでもよく、続いて、このソース・コードが機械読み取り可能コードにコンパイルされ、論理プロセッサーによって機械読み取り可能コードを実行することができる。技術的現状はハードウェア、ソフトウェア、またはハードウェア/ソフトウェアの組み合わせの間の差が殆どなくなるところまで発展したことは当業者は認めることができるはずであるので、機能を実装するためのハードウェアかソフトウェアかの選択は、単なる設計の選択事項に過ぎない。つまり、ソフトウェア・プロセスを等価のハードウェア構造に変換でき、ハードウェア構造自体を等価なソフトウェア・プロセスに変換できることは当業者は認めることができるので、ハードウェアの実施態様かまたはソフトウェアの実施態様かの選択は、実施者に委ねられる。
[0029] 本発明の実施形態は、1つ以上のコンピューター上で実行することができる。図1および以下に続く論述は、本開示を実現することができる適した計算環境について端的で総合的な説明を行うことを意図している。当業者は、コンピューター・システムが本明細書において以下で説明するコンポーネントの一部または全部を有することができることを認めることができよう。
[0030] 図1は、本開示の態様と共に作用するように構成された計算システムの一例を示す。この計算システムは、コンピューター100等を含むことができ、コンピューター100は、論理処理ユニット102、システム・メモリー22、およびシステム・バス23を含む。システム・バス23は、システム・メモリーから論理処理ユニット102までを含む種々のシステム・コンポーネントを結合する。システム・バス23は、メモリー・バスまたはメモリー・コントローラ、周辺バス、および種々のバス・アーキテクチャーの内いずれかを用いるローカル・バスを含む、様々なタイプのバス構造の内いずれでもよい。システム・メモリーは、リード・オンリー・メモリー(ROM)24およびランダム・アクセス・メモリー(RAM)104を含む。基本入力/出力システム26(BIOS)は、起動中のように、コンピューター100内部のエレメント間で情報を転送するのを助ける基本的なルーチンを収容し、ROM24に格納される。コンピューター100は、更に、図示しないハード・ディスクに対する読み取りおよび書き込みを行うハード・ディスク・ドライブ27、リムーバブル磁気ディスク118に対する読み取りおよび書き込みを行う磁気ディスク・ドライブ28、およびCD ROMまたは他の光媒体のようなリムーバブル光ディスク31に対する読み取りおよび書き込みを行う光ディスク・ドライブ30も含むとよい。実施形態例では、本開示の態様を具体化するコンピューター実行可能命令は、ROM24、ハード・ディスク(図示せず)、RAM104、リムーバブル磁気ディスク118、光ディスク31、および/または論理処理ユニット102のキャッシュに格納してもよい。ハード・ディスク・ドライブ27、磁気ディスク・ドライブ28、および光ディスク・ドライブ30は、システム・バス23に、それぞれハード・ディスク・ドライブ・インターフェース32、磁気ディクス・ドライブ・インターフェース33、および光ドライブ・インターフェース34を介して接続される。ドライブおよびそれらに付随するコンピューター読み取り可能媒体は、コンピューター100のためのコンピューター読み取り可能命令、データー構造、プログラム・モジュール、およびその他のデーターの不揮発性ストレージを設ける。本明細書において説明する環境はハード・ディスク、リムーバブル磁気ディスク118、およびリムーバブル光ディスク31を採用するが、磁気カセット、フラッシュ・メモリー・カード、ディジタル・ビデオ・ディスク、ベルヌーイ・カートリッジ、ランダム・アクセス・メモリー(RAM)、リード・オンリー・メモリー(ROM)等のような、コンピューターによってアクセス可能なデーターを格納することができる他のタイプのコンピューター読み取り可能媒体もこの動作環境において使用してもよいことは、当業者には認められてしかるべきである。
[0031] オペレーティング・システム35、1つ以上のアプリケーション・プログラム36、他のプログラム・モジュール37、およびプログラム・データー38を含む多数のプログラム・モジュールを、ハード・ディスク、磁気ディスク118、光ディスク31、ROM24、またはRAM104に格納することができる。ユーザーは、キーボード40およびポインティング・デバイス42のような入力デバイスを介して、コマンドおよび情報をコンピューター100に入力することができる。他の入力デバイス(図示せず)は、マイクロフォン、ジョイスティック、ゲーム・パッド、衛星ディスク、スキャナー等を含むことができる。これらおよびその他の入力デバイスは、多くの場合、システム・バスに結合されたシリアル・ポート・インターフェース46を介して、論理処理ユニット102に接続されるが、パラレル・ポート、ゲーム・ポート、またはユニバーサル・シリアル・バス(USB)のような他のインターフェースによって接続されてもよい。ディスプレイ47または他のタイプのディスプレイ・デバイスも、GPU/ビデオ・アダプター112のようなインターフェースを介して、システム・バス23に接続することができる。ディスプレイ47に加えて、コンピューターは、通例、スピーカーおよびプリンターのような、他の周辺出力デバイス(図示せず)も含む。また、図1のシステムは、ホスト・アダプター55、小型コンピューター・システム・インターフェース(SCSI)バス56、およびSCSIバス56に接続された外部記憶デバイス62も含む。
[0032] コンピューター100は、リモート・コンピューター49のような、1つ以上のリモート・コンピューターへの論理接続を用いて、ネットワーク接続環境において動作することもできる。リモート・コンピューター49は、他のコンピューター、サーバー、ルーター、ネットワークPC、ピア・デバイスまたは他の一般的なネットワーク・ノード、仮想機械であってもよく、通例、コンピューター100に関して以上で説明したエレメントの多くまたは全部を含むことができるが、図1には、メモリー記憶デバイス50だけが示されている。図1に示す論理接続は、ローカル・エリア・ネットワーク(LAN)51およびネットワーク52を含むことができ、ネットワーク52は、一例として、ワイド・エリア・ネットワーク(WAN)である。このようなネットワーク接続環境は、事務所、企業規模のコンピューター・ネットワーク、イントラネット、およびインターネットでは極普通である。
[0033] LANネットワーク接続環境において用いられる場合、コンピューター100は、ネットワーク・インターフェース・コントローラ(NIC)114またはアダプターを介してLAN51に接続することができる。WANネットワーク接続環境において用いられる場合、コンピューター100は、通例、モデム54、またはインターネットのようなネットワーク52を通じて通信を確立する他の手段を含むことができる。モデム54は、内蔵型でも外付け型でもよく、シリアル・ポート・インターフェース46を介してシステム・バス23に接続することができる。ネットワーク接続環境では、コンピューター100に関して図示したプログラム・モジュールまたはその一部が、リモート・メモリー記憶デバイスに格納されてもよい。尚、図示するネットワーク接続は例であり、コンピューター間で通信リンクを確立する他の手段を用いてもよいことは認められよう。更に、本開示の多数の実施形態がコンピューター・システムには特に非常に適していると考えられるが、本文書において、本開示をこのような実施形態に限定することを意図するものは何もない。
[0034] 場合によっては、ユーザーが計算アプリケーション、即ち、別の計算デバイス上で実行しているアプリケーションに、リモートにアクセスすることを望むこともある。一実施態様では、仮想デスクトップのようなリモート・デスクトップを介してこのようなアクセスをユーザーに付与する。リモート・デスクトップ・システムの実施形態は、1つ以上のコンピューターを実行することができ、または図1のコンピューター100に関して説明したコンポーネントの一部または全部を有することもできる。リモート・デスクトップ・システムは、クライアント・コンピューター・システムによってリモートに実行し表示することができるアプリケーションを維持するコンピューター・システムである。図2は、リモート・デスクトップ・システム200のアーキテクチャー例を示す。リモート・デスクトップ・システム200は、リモート・クライアント・コンピューター210とリモート・サーバー・コンピューター220とを含むことができる。リモート・クライアント・コンピューター210およびリモート・サーバー・コンピューター220は、仮想デスクトップ・セッションのようなリモート・セッションを互いに実行するように構成される。
[0035] 図示のように、リモート・サーバー・コンピューター220は、リモート・セッションをリモート・クライアント・コンピューター210に配給し(serve)、この場合、リモート・サーバー・コンピューター220が、リモート・クライアント・セッション222を実行するユーザーからのクライアント・グラフィック出力を送る。リモート・ユーザー入力は、リモート・クライアント・コンピューター210において入力される。入力マネージャー212が、リモート・ユーザー入力を処理し、ネットワークを通じて(例えばリモート・デスクトップ・プロトコル(RDP)のような、国際電気通信連合(ITU)T.120ファミリーのプロトコルに基づくプロトコルを用いる)リモート・サーバー・コンピューター220上のリモート・ユーザー・アプリケーション224に転送することができる。ネットワークは、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、ケーブル・ネットワーク、インターネット、ワールド・ワイド・ウェブ、または企業内ネットワーク(corporate enterprise network)のような、いずれのタイプの通信ネットワークでもよい。リモート・ユーザー・アプリケーション224は、リモート・サーバー・コンピューター220上にホストされたリモート・クライアント・セッション222において実行することができる。リモート・ユーザー・アプリケーション224は、入力がリモート・サーバー・コンピューター220において入力されたかのように、この入力を処理する。リモート・ユーザー・アプリケーション224は、受信した入力に応答して、リモート・サーバー出力を生成し、この出力はネットワークを通じてリモート・クライアント・コンピューター210に転送される。リモート・クライアント・コンピューター210は、この出力データーをリモート・ユーザーに提示する。このように、リモート・クライアント・コンピューター210において入力が受信され出力が提示されるが、処理は実際にはリモート・サーバー・コンピューター220において行われる。
[0036] リモート・ユーザー・アプリケーション224に加えて、リモート・クライアント・セッション222は、シェルおよびデスクトップのようなユーザー・インターフェース、このデスクトップ内部におけるマウスの動きを追跡するサブシステム、アイコン上のマウス・クリックを、プログラムのインスタンスを実装するコマンドに変換するサブシステム、他のアプリケーション等を含むことができる。尚、以上の論述は例示であり、本明細書において開示する主題は、種々のクライアント/サーバー環境において実現することができ、特定のリモート・プレゼンテーション生産物(remote presentation product)には限定されないことは言うまでもない。
[0037] 全てではないにしても、殆どのリモート・デスクトップ環境において、リモート・ユーザーの入力データー(リモート・クライアント・コンピューター210において入力される)は、通例、アプリケーションに対するコマンドを表すマウスおよびキーボード・データーを含む。出力データー(リモート・サーバー・コンピューター220においてリモート・ユーザー・アプリケーションによって生成される)は、通例、リモート・クライアント・コンピューター210における表示のためのグラフィクス・データーを含む。また、多くのリモート・デスクトップ環境は、他のタイプのデーターを転送するために拡張する機能も含む。一実施形態例では、ユーザー・アプリケーション224から出力されたグラフィック・データーを、リモート・サーバー・コンピューター220上にホストされたグラフィクス・マネージャー226に送ることができる。グラフィクス・マネージャー226は、グラフィクス・データーをレンダリングし、キャプチャし、圧縮し、ネットワークを通じてリモート・クライアント・コンピューター210上のリモート・ユーザー・ディスプレイ214に転送することができる。リモート・ユーザー・ディスプレイ214は、このグラフィクス出力データーをリモート・ユーザーに表示することができる。
[0038] リモート・デスクトップ環境の一実施形態では、リモート・サーバー・コンピューターが複数のリモート・クライアント・コンピューターのために複数のリモート・セッション(または仮想デスクトップ)を実行することもできる。したがって、複数のリモート・クライアント・コンピューターに対するセッションの割り当てを制御するために、ブローカーを用いることもできる。加えて、リモート・デスクトップ環境では、特定のリモート・クライアント・コンピューターを配給することができる、複数のリモート・サーバー・コンピューターがあることもある。したがって、特定のリモート・クライアント・コンピューターを配給するリモート・サーバー・コンピューターの割り当てを制御するために、リディレクターを用いることもできる。図3は、このようなリモート・デスクトップ・システム300の実施形態例を示す。
[0039] 複数のリモート・クライアント・コンピューター310(A〜N)は、図2のリモート・クライアント・コンピューター210のように、ネットワークを通じてリモート・サーバー・システム350と通信することができる計算デバイスであればいずれでもよい。リモート・サーバー・システム350は、リディレクター330、ブローカー340、および複数のリモート・サーバー・コンピューター320(A〜N)を含むことができる。リディレクター330およびブローカー340は、本明細書において以下で説明するようなデバイスのそれぞれの機能を実現するように構成された、プロセッサーおよびメモリーを含む計算デバイスであってもよい。リモート・サーバー・コンピューター320(A〜N)は、図2のコンピューター100および図2のリモート・サーバー・コンピューター220に関して説明したコンポーネントの一部を有してもまたは全部を有してもよい。リモート・サーバー・コンピューター320(A〜N)は、仮想機械として実現されてもよい。仮想機械は、1つのハードウェア・インフラストラクチャ上または別々のハードウェア・インフラストラクチャ上で実行することができる。ブローカー340は、ゲートウェイ(図示せず)を用いてリディレクター330に接続された単体デバイスであってもよく、リディレクター330内部に配置されてもよく、またはリモート・サーバー・コンピューター320(A〜N)内に配置されてもよい。また、リディレクター330もリモート・サーバー320(A〜N)に配置されてもよい。
[0040] ブローカー340は、当該ブローカー340に格納されているセッション状態情報に基づいて、セッションをリモート・クライアント・コンピューターに割り当てる。セッション状態情報は、例えば、セッションID、ユーザー名、セッションが存在しているリモート・サーバー・コンピューターの名前、各リモート・サーバー・コンピューター内にあるアクティブ・セッションの数等を含んでもよい。本明細書において用いる場合、セッションとは仮想デスクトップ・セッション(仮想機械セッションとしても知られる)であってよい。
[0041] リモート・クライアント・コンピューター310は、最初に、リモート・クライアント・コンピューター310(A〜N)の負荷均衡に備えることができるリディレクター330に接続する。このような場合、リディレクター330は通例最初に接続要求を受ける。次いで、リディレクター330はこの接続要求を受け入れ、リモート・クライアント・コンピューター310をどこにリディレクトするか決定するように、ブローカー340に問い合わせる。ブローカー340は、その特定の環境のセッション状態情報を分析し、リモート・クライアント・コンピューター310をリディレクトすることができるリモート・サーバー・コンピューター320を特定する。特定されたリモート・サーバー・コンピューター320は、リモート・クライアント・コンピューター310によって以前にアクセスされたが後に切断され、リモート・クライアント・コンピューター310を再接続することができるセッションを保有するのでもよい。一実施形態では、リモート・クライアント・コンピューター310が他に既存のセッションを全く保有していないことを条件に、特定されたリモート・サーバー・コンピューター320が、リモート・クライアント・コンピューター310を接続することができる新たなセッションを提供することもできる。
[0042] ブローカー340は、要求されたリモート・サーバー・コンピューター320に情報を送り、このリモート・クライアント・コンピューター320が、特定されたリモート・サーバー・コンピューター310との接続を確立することを可能にする。例えば、この情報は、機械ID、セッションID、および特定されたリモート・サーバー・コンピューター320の位置を含んでもよい。一旦リモート・クライアント・コンピューター310が、特定されたリモート・サーバー・コンピューター320との接続を確立すると、リモート・クライアント・コンピューター310は、特定されたリモート・サーバー・コンピューター320内にあるアプリケーションにアクセスすることができる。これらのアプリケーションは、リモート・サーバー・システム350においてリモート・サーバー・コンピューター320を特定するときに用いられたブローカー340のロジックに対して適合する(compatible)とよい。
[0043] 一実施形態では、以上で説明したシステムは、例えば、リモート・クライアント・コンピューター310を、リモート・サーバー・コンピューター上で実行している複数の仮想デスクトップまたはセッションの内1つに接続するために用いることができる。リモート・クライアント・コンピューターは、リモート・デスクトップ・プロトコル(RDP)パケットにおけるリディレクター・トークンを調べる。リモート・クライアント・コンピューターは、このリディレクター・トークンに含まれる情報に基づいて、多くの仮想デスクトップの内1つに接続する。
[0044] 他の実施形態では、ブローカー340およびプール・マネージャー(図示せず)を用いて、リモート・クライアント・コンピューター310を仮想デスクトップの1つに接続することができる。プール・マネージャーは、ブローカー340内部に配置するのでもよい。ブローカー340は、リモート・クライアント・コンピューター310が仮想機械(VM)上にホストされた仮想デスクトップに接続されているときに、仮想デスクトップをリモート・クライアント・コンピューター310に割り当て、プール・マネージャーは、仮想デスクトップの内どれが、割り当てるために利用可能か示す。
[0045] 更に他の実施形態では、リモート・クライアント・コンピューター310を仮想デスクトップに接続することができる。リモート・クライアント・コンピューター310は、インターネット・プロトコル(IP)アドレスを生成し、リモート・クライアント・コンピューター310と仮想デスクトップとの間に接続を確立するためにブローカー340によって用いられるネットワーク名を示す。個々の仮想デスクトップIPアドレスをリモート・クライアント・コンピューター310(A〜N)から隠すことによって、最初はブローカー340の1つのネットワーク名のみが、外部に対してリモート・クライアント・コンピューター310(A〜N)に露出されるだけで済む。
[0046] 図4は、複数の仮想機械を有する仮想機械環境の一例を示す。仮想化コンピューター・システム400は、図2のリモート・サーバー・コンピューター220および図3のリモート・サーバー・コンピューター320(A〜N)を実現するために用いることができる。
[0047] 図4に示すように、コンピューター・システム400は、図1において説明したエレメントと、仮想機械を実装するように動作可能なコンポーネントとを含むことができる。このようなコンポーネントの1つに、ハイパーバイザー・マイクロカーネル(hypervisor microkernel)402がある。これは、当技術分野では、仮想機械モニターとも呼ばれることもある。ハイパーバイザー・マイクロカーネル402は、コンピューター・システム400のハードウェアに対するアクセスを制御し調停するように構成することができる。ハイパーバイザー・マイクロカーネル402は、ゲスト・パーティション1からゲスト・パーティションNまで(Nは1よりも大きい正の整数)のような、パーティションと呼ばれる実行環境を生成することができる。ここで、ゲスト・パーティションは、ハイパーバイザー・マイクロカーネル402によってサポートされる分離の基本単位である。ゲスト・パーティションは、チャイルド・パーティションと言っても分かるであろう。ハイパーバイザー・マイクロカーネル402は、1つのパーティションにおけるプロセスを、他のパーティションのリソースにアクセスすることから分離することができる。ハイパーバイザー・マイクロカーネル402の制御下にある1組のハードウェア・リソース、例えば、メモリー、デバイス、プロセッサー・サイクル等に、各ゲスト・パーティションをマッピングすることができる。実施形態では、ハイパーバイザー・マイクロカーネル402は、単体のソフトウェア生産物であることができ、オペレーティング・システムの一部であることができ、マザーボードのファームウェア内に埋め込むことができ、特殊集積回路であることができ、またはこれらの組み合わせとすることができる。
[0048] ハイパーバイザー・マイクロカーネル402は、物理コンピューター・システムにおいてメモリーのゲスト・オペレーティング・システムのビューを制限することによって、パーティション形成(partitioning)を施行することができる。ハイパーバイザー・マイクロカーネル402が仮想機械をインスタンス化するとき、ページ、例えば、システム物理メモリー(SPM)の、開始アドレスおよび終了アドレスを有する固定長のメモリー・ブロックを、仮想機械にゲスト物理メモリー(GPM)として割り当てることができる。ここで、ゲストの制限されたシステム・メモリーのビューは、ハイパーバイザー・マイクロカーネル402によって制御される。ゲスト物理メモリーという用語は、仮想機械の観点からメモリーのページを記述する省略表現(shorthand way)であり、システム物理メモリーという用語は、物理システムの観点からメモリーのページを記述する省略表現である。つまり、仮想機械に割り当てられるメモリーのページは、ゲスト物理アドレス(仮想機械によって用いられるアドレス)とシステム物理アドレス(そのページの実際のアドレス)とを有することになる。
[0049] ゲスト・オペレーティング・システムが、ゲスト物理メモリーを仮想化することもできる。仮想メモリーとは、オペレーティング・システムにメモリーをオーバー・コミットさせ、連続する作業メモリーに対する1回のアクセスをアプリケーションに与えさせる管理技法である。仮想化環境では、ゲスト・オペレーティング・システムが1つ以上のページ・テーブルを用いて、仮想ゲスト・アドレスとして知られる仮想アドレスをゲスト物理アドレスに変換することができる。この例では、メモリー・アドレスがゲスト仮想アドレス、ゲスト物理アドレス、およびシステム物理アドレスを有してもよい。
[0050] 図示する例では、コンピューター・システム400は、ホスト・パーティションを含む。ホスト・パーティションは、Xenのオープン・ソース・ハイパーバイザーのドメイン0と同様であると考えることができる。また、ホスト・パーティションは、ペアレント・パーティションまたはルート・パーティションと呼ぶこともできる。図示のように、ホスト・パーティションはホスト404を含むことができる。ホスト404は、アプリケーションのコンピューター・システム400の基礎物理ハードウェアとの相互作用を可能にするデバイス・ドライバー424を含むことができる。したがって、ホスト404は、論理処理ユニット102、GPU112、およびNIC114のような、コンピューター・システム400の物理ハードウェアにアクセスすることができる。ホスト404は、オペレーティング・システム(または1組の構成ユーティリティ)であることができる。
[0051] ホスト404は、仮想化サービス・プロバイダー428(VSP)を用いることによって、ゲスト・パーティション1〜Nにおいて実行するゲスト・オペレーティング・システムにリソースを供給するように構成することができる。VSP428は、通例、オープン・ソース・コミュニティにおけるバックエンド・ドライバーと呼ばれ、仮想化サービス・クライアント(VSC)(通例、オープン・ソース・コミュニティまたは準仮想化デバイスにおいてフロントエンド・ドライバーと呼ばれる)によって、インターフェースをハードウェア・リソースに多重化するために用いることができる。図4に示すように、仮想化サービス・クライアントは、ゲスト・オペレーティング・システムのコンテキストの範囲内で実行する。しかしながら、これらのドライバーはゲストにおける残りのドライバーとは異なり、これらのドライバーにはゲストではなくハイパーバイザーが供給されてもよい。一実施形態例では、仮想化サービス・プロバイダー428がVSC416および418と通信するために用いられるパスは、仮想化パスであると考えることができる。
[0052] ホスト・パーティションVSP428ならびにゲスト・パーティションVSC416および418は、仮想機械バス(VMBus)に接続することができる。VMBusは、パーティション間通信を可能にする論理チャネルである。仮想プロセッサー430および432のような仮想リソースに対するゲスト・パーティションの要求は、VMBusを通じて、要求を管理することができるホスト・パーティションにおけるデバイスにリディレクトすることができる。ホスト・パーティションからゲスト・パーティションへの応答も、VMBusを通じてリディレクトすることができる。このプロセス全体は、ゲストOS220および222に対して透過的であることができる。他の実施形態では、ホスト・パーティションVSP228ならびにゲスト・パーティションVSC216および218は、メッセージ・パケットを送信し受信することによって、TCP/IPネットワークのようなネットワークを通じて通信することができる。
[0053] 図4に示すように、エミュレーター434、例えば、仮想化IDEデバイス、仮想化ビデオ・アダプター、仮想化NIC等は、ホスト404内部で実行するように構成することができ、ゲスト・オペレーティング・システム420および422に利用可能なリソースに添付される(attach)。例えば、ゲストOSが、デバイスのレジスタがあるところにマッピングされたメモリー位置、またはメモリー・マッピングされたデバイスにタッチする(touch)とき、ハイパーバイザー・マイクロカーネル402は要求を横取りし(intercept)、ゲストが書き込もうとする値を、関連するエミュレーターに渡すことができる。ここで、この例におけるリソースは、仮想デバイスが位置するところであると考えることができる。このようなエミュレーターの使用は、エミュレーション・パス(emulation path)と見なすことができる。エミュレーション・パスは、仮想化パスと比較すると非効率的である。何故なら、VSPとVSCとの間でメッセージを渡すよりも、デバイスをエミュレートする方が多くのCPUリソースを必要とするからである。例えば、エミュレーション・パスを経由して値をディスクに書き込むために必要とされるレジスタにマッピングされたメモリーにおける数百回の動作は、仮想化パスにおいてVSCからVSPに渡される1つのメッセージに減らすことができる。
[0054] 各ゲスト・パーティションは、1つ以上の仮想プロセッサー(430および432)を含むことができ、これらの仮想プロセッサーをゲスト・オペレーティング・システム(420および422)が管理して、そこで実行するスレッドのスケジューリングを行うことができる。一般に、仮想プロセッサーは、実行可能命令および関連する状態情報である。状態情報は、物理プロセッサーの表現に特定のアーキテクチャーを付与する。例えば、1つの仮想機械が、Intel社のx86プロセッサーの特性を有する仮想プロセッサーを有するのであってもよく、一方他の仮想プロセッサーがPowerPCプロセッサーの特性を有するのでもよい。この例における仮想プロセッサーは、これらの仮想プロセッサーを実装する命令がプロセッサーによって支援されるように、コンピューター・システムのプロセッサーにマッピングすることができる。つまり、多数のプロセッサーを含む実施形態では、例えば、他のプロセッサーがハイパーバイザー命令を実行する間に、仮想プロセッサーを同時にプロセッサーによって実行することができる。パーティションにおける仮想プロセッサーとメモリーとの組み合わせは、仮想機械と見なすことができる。
[0055] ゲスト・オペレーティング・システム(420および422)は、例えば、Microsoft(登録商標)、Apple(登録商標)、オープン・ソース・コミュニティ等からのオペレーティング・システムのような、いずれのオペレーティング・システムでも可能である。ゲスト・オペレーティング・システムは、ユーザー/カーネル動作モードを含むことができ、スケジューラ、メモリー・マネージャー等を含むことができるカーネルを有することができる。一般的に言うと、カーネル・モードは、少なくとも特権プロセッサー命令にアクセスを付与するプロセッサーにおける実行モードを含むことができる。各ゲスト・オペレーティング・システムは、関連するファイル・システムを有することができ、このファイル・システムには、リモート・サービスまたは仮想デスクトップ・セッション、端末サーバー、電子商取引サーバー、電子メール・サーバー等のようなアプリケーション、およびゲスト・オペレーティング・システム自体を格納することができる。ゲスト・オペレーティング・システムは、仮想プロセッサー上で実行するスレッドのスケジューリングを行うことができ、このようなアプリケーションのインスタンスを実装することができる。
[0056] 図5は、図4のコンポーネントに類似するコンポーネントを示す。しかしながら、この実施形態例では、ハイパーバイザー542が、マイクロカーネル・コンポーネントと、仮想化サービス・プロバイダー428およびデバイス・ドライバー424のような図4のホスト404におけるコンポーネントと同様のコンポーネントを含むことができ、一方管理オペレーティング・システム540は、例えば、ハイパーバイザー542を構成するために用いられる構成ユーティリティ(configuration utilities)を収容してもよい。このアーキテクチャーでは、ハイパーバイザー542は、図4のハイパーバイザー・マイクロカーネル402およびホスト404と同じ機能または同様の機能を実行することができる。ハイパーバイザー542は、単体ソフトウェア生産物であることができ、オペレーティング・システムの一部であることができ、マザーボードのファームウェア内部に埋め込むことができ、および/またはハイパーバイザー542の一部は特殊集積回路によって実装することもできる。
[0057] 種々の実施形態では、図2のリモート・サーバー・コンピューター220のような、リモート・サーバー・コンピューターは、多数のリモート・クライアント・セッションまたは仮想デスクトップを実行することができる。リモート・クライアント・セッション222のような各リモート・クライアント・セッションは、接続クライアントに対するアプリケーション環境を表すことができる。リモート・サーバー・コンピューターは、図6に示すように、接続するリモート・クライアント・コンピューター毎に、少なくとも1つのリモート・クライアント・セッションを生成することができる。更に、先に注記したように、リモート・サーバー・コンピューター220は、図4および図5のコンピューター・システム400のコンポーネントの一部または全部を実行する仮想機械であってもよく、一方、コンピューター・システム400は多数のリモート・クライアント・セッションを実行する。
[0058] 図6に示すのは、コンピューター・システム600であり、リモート・サーバー・コンピューターを実装するように構成された回路を含んでもよく、また他の実施形態では、コンピューター・システム600は、リモート・デスクトップ接続をサポートするように構成された回路を含むことができる。図示する例では、コンピューター・システム600は、セッション1からNまで(Nは2よりも大きい正の整数)というような、接続クライアントに対して1つ以上のリモート・クライアント・セッションを生成するように構成することができる。端的に言うと、本発明の実施形態例におけるセッションは、一般に、複数のサブシステム、例えば、ソフトウェア・コードによって実装される動作環境を含むことができ、これらのサブシステムは、コンピューター・システム600のカーネル614と相互作用するように構成される。例えば、セッションは、デスクトップ・ウィンドウのようなユーザー・インターフェース、ウィンドウ内におけるマウスの動きを追跡するサブシステム、アイコン上でのマウス・クリックをプログラムのインスタンスを実装するコマンドに変換するサブシステム等をインスタンス化するプロセスを含むことができる。セッションは、例えば、コンピューター・システム600が図2のリモート・クライアント・コンピューター210のようなクライアントからの接続要求をネットワーク接続を通じて受信したときに、コンピューター・システム600によってユーザー毎に生成することができる。一般に、接続要求は、最初にトランスポート・ロジック610によって扱うことができ、例えば、トランスポート・ロジック610は、コンピューター・システム600の回路によって実装することができる。トランスポート・ロジック610は、実施形態では、ネットワーク・アダプター、ファームウェア、および接続メッセージを受信しこれらをエンジン612に転送するように構成することができるソフトウェアを含むことができる。図6に示すように、トランスポート・ロジック610は、実施形態では、セッション毎にプロトコル・スタック・インスタンスを含むことができる。一般に、各プロトコル・スタック・インスタンスは、ユーザー・インターフェースの出力をクライアントに導き、クライアントから受信したユーザー入力を、そのセッションに関連するセッション・コア644に導くように構成することができる。
[0059] 図6の全体的な説明を続けると、本発明の実施形態例におけるエンジン612は、セッション要求を処理し、セッション毎に機能を決定し、1組の物理リソースをセッションに割り当てることによってセッションを生成し、そのセッションに対するプロトコル・スタック・インスタンスをインスタンス化するように構成することができる。実施形態では、以上で述べた動作手順の一部を実現する(implement)ことができる特殊回路コンポーネントによってエンジン612を実装することもできる。例えば、実施形態例における回路は、メモリーと、エンジン612を実装するコードを実行するように構成されたプロセッサーとを含むことができる。図6に示すように、場合によっては、エンジン612が接続要求を受けて、例えば、ライセンスが入手可能であり、その要求に対してセッションを生成できると判断することができる。コンピューター・システム600がリモート・デスクトップ能力を含むリモート・コンピューターであるという状況では、エンジン612が接続要求に応答して、ライセンスをチェックすることなく、セッションを生成するように構成することができる。図6に示すように、セッション・マネージャー616は、エンジン612からのメッセージを受信するように構成することができ、このメッセージに応答して、セッション・マネージャー616はセッション識別子を表に追加し、メモリーをセッション識別子に割り当て、サブシステム・プロセスのシステム環境変数およびインスタンスを、セッション識別子に割り当てられたメモリー内において生成することができる。
[0060] 図6に示すように、セッション・マネージャー616は、セッション・コア644のようなカーネル・モード部を含むことができるランタイム・サブシステム640のような、環境サブシステムをインスタンス化することができる。例えば、一実施形態における環境サブシステムは、サービスのある一部(subset)をアプリケーション・プログラムに露出させ、アクセス・ポイントをコンピューター・オペレーティング・システム602のカーネルに提供するように構成される。実施形態例では、ランタイム・サブシステム640がプロセスおよびスレッドの実行を制御することができ、セッション・コア644は、スレッドにメモリーを割り当てこれらを実行する時間をスケジューリングする要求を、カーネル614のエクゼキュティブ(executive)に送ることができる。一実施形態では、セッション・コア644は、グラフィクス・ディスプレイ・インターフェース646(GDI)、セキュリティ・サブシステム650、および入力サブシステム652を含むことができる。入力サブシステム652は、これらの実施形態では、セッションに関連するプロトコル・スタック・インスタンスを通じてクライアントからユーザー入力を受信し、この入力をしかるべきセッションのためにセッション・コア644に送信するように構成することができる。ユーザー入力は、実施形態では、絶対および/または相対マウス移動コマンド、マウス座標、マウス・クリックを示す信号、キーボード信号、ジョイスティック移動信号等を含むことができる。ユーザー入力、例えば、アイコン上におけるマウスのダブル・クリックは、セッション・コア644によって受けることができ、入力サブシステム652は、アイコンがダブル・クリックに関連する座標に位置すると判断するように構成することができる。次いで、入力サブシステム652は、そのアイコンに関連するアプリケーションに対してプロセスを実行することができるという通知を、ランタイム・サブシステム640に送るように構成することができる。
[0061] クライアントから入力を受信することに加えて、アプリケーションおよび/またはデスクトップからドロー・コマンドを受けることもでき、このドロー・コマンドをGDI646によって処理することができる。GDI646は、一般に、グラフィカル・オブジェクト・ドロー・コマンドを生成することができるプロセスを含むことができる。この実施形態例におけるGDI646は、GDI646出力をリモート・ディスプレイ・サブシステム654に渡すように構成することができ、リモート・ディスプレイ・サブシステム654において、コマンドは、そのセッションに添付されたディスプレイ・ドライバーに合わせてフォーマットされる。ある種の実施形態例では、1つ以上の物理ディスプレイをコンピューター・システム600に、例えば、リモート・デスクトップの状況において添付することができる。これらの実施形態例では、リモート・ディスプレイ・サブシステム654は、リモート・コンピューター・システムのディスプレイ・ドライバー(1つまたは複数)によってレンダリングされるドロー・コマンドをミラーリングし(mirror)、このミラーリングした情報をクライアントに、セッションに関連するスタック・インスタンスを通じて送信するように構成することができる。他の実施形態例では、リモート・ディスプレイ・サブシステム654は、仮想ディスプレイ・ドライバー(1つまたは複数)を含むように構成することができる。仮想ディスプレイ・ドライバーは、コンピューター・システム600に物理的に添付されたディスプレイと関連付けられていなくてもよく、例えば、コンピューター・システム600がヘッドレスで(headless)で実行していることも可能である。この実施形態におけるリモート・ディスプレイ・サブシステム654は、1つ以上の仮想ディスプレイに対するドロー・コマンドを受け、これらをクライアントに、セッションに関連するスタック・インスタンスを通じて送信するように構成することができる。本発明の一実施形態では、リモート・ディスプレイ・サブシステム654は、ディスプレイ・ドライバー毎に表示解像度を決定し、例えば、仮想ディスプレイに関連する仮想ディスプレイ・ドライバー(1つまたは複数)の表示解像度、または物理ディスプレイに関連するディスプレイ・ドライバーの表示解像度を決定し、関連するプロトコル・スタック・インスタンスを通じてパケットをクライアントに導くように構成することができる。
[0062] 実施形態例では、セッション・マネージャー616が加えてセッションのセッション識別子に関連するログオン・プロセスのインスタンスをインスタンス化することもできる。ログオン・プロセスは、セッションのログオンおよびログオフを扱うように構成することができる。これらの実施形態例では、ログオン・プロセスに関連するグラフィカル・ユーザー・インターフェースを示すドロー・コマンドをクライアントに送信することができ、このクライアントのユーザーがアカウント識別子、例えば、ユーザー名/パスワードの組み合わせ、スマート・カード識別子、および/または生物計量情報をログイン画面に入力することができる。この情報は、コンピューター・システム600に送信され、エンジン612およびセッション・コア644のセキュリティ・サブシステム650に導くことができる。例えば、ある種の実施形態例では、エンジン612は、ユーザー・アカウントがライセンスと関連付けられているか否か判断するように構成することができ、セキュリティ・サブシステム659は、セッションに対してセキュリティ・トークンを生成するように構成することができる。
[0063] 図6によって説明したように、リモート・サーバー・コンピューターは、多数のリモート・デスクトップ・セッションを接続リモート・クライアント・コンピューターに提供することができる。リモート・デスクトップ・セッションは、リモート・クライアント・コンピューターによって要求される1つ以上のアプリケーションと関連付けられてもよい。加えて、そして図6によって説明したように、リモート・サーバー・コンピューターは、ユーザー・インターフェース画面、ユーザー入力コマンド等のような、クライアント・デスクトップを表すグラフィックス・データーを処理することができる。更に、リモート・サーバー・コンピューターは、グラフィクス・データーをレンダリングし、キャプチャし、圧縮し、クライアント・リモート・コンピューターに送信することもできる。レンダリングとは、リモート・デスクトップ・セッション内において実行するアプリケーションによって行われる、回転する、ひっくり返す、および描画するというような、生の表示コール(raw display call)を変換するプロセスを言う。キャプチャとは、画面上ビットマップまたはフレーム変更というような、レンダリングされたアプリケーション・コンテンツを受け入れ(take)、このアプリケーション・コンテンツの以前のレンダリングに対する変更をインテリジェントにキャプチャすることを言う。圧縮は、エンコーディングとも呼ばれ、グラフィクス・リソースを、接続されているリモート・クライアント・コンピューターの各々に最適にそして公正に配信するプロセスを言う。ネットワーク状態の品質、およびターゲット・リモート・クライアント・コンピューターが、キャプチャされたコンテンツを最適に配信するために用いられる圧縮/エンコーディングのタイプを決定する。
[0064] 本明細書において以下で更に説明するように、種々の実施形態では、リモート・サーバー・コンピューターが、計算サーバーおよびグラフィクス・サーバーを備えるのでもよい。計算サーバーは、グラフィクス・データーをリモート・クライアント・コンピューターから受信し、このグラフィクス・データーを処理し、処理したグラフィクス・データーをグラフィクス・サーバーに送るように構成することができる。グラフィクス・サーバーは、計算サーバーから受信したデーターをレンダリングし、キャプチャし、そして圧縮してグラフィクス出力データーを得るように構成することができる。また、グラフィクス出力データーを計算サーバーに送り、計算サーバーを用いてグラフィクス出力データーをリモート・クライアント・コンピューターに送信する代わりに、グラフィクス・サーバーが、グラフィクス出力データーをリモート・クライアント・コンピューターに直接送信するように構成されてもよい。
[0065] 図7は、計算サーバー710およびグラフィクス・サーバー720を備えるリモート・サーバー・コンピューター700の一実施形態例を示す。リモート・サーバー・コンピューター700の実施形態は、図1のコンピューター100、図2のリモート・サーバー・コンピューター220、図3のリモート・サーバー・コンピューター320、図4および図5のコンピューター・システム400、ならびに図6のコンピューター・システム600に関して説明したコンポーネントの一部または全部を実行することができる。
[0066] 計算サーバー710の実施形態は、図1のコンピューター100、図2のリモート・サーバー・コンピューター220、図4および図5のコンピューター・システム400または仮想機械440、ならびに図6のコンピューター・システム600に関して説明したコンポーネントの一部または全部を実行することができる。また、計算サーバー710は、GPUリソースが十分でなくても、またはGPUリソースを有していなくてもよい。更に他の実施形態では、計算サーバー710が、以下で説明する計算リソースを設けるためにしかるべく構成された標準的なサーバー・コンピューターであってもよい。他の実施形態では、計算サーバー710が特定機能に合わせて構成された計算デバイスであってもよい。例えば、計算サーバーが1つのタイプの処理ユニットと、少量のキャッシュ・メモリーのみを有するのでもよい。
[0067] グラフィクス・サーバー720は、レンダリング、キャプチャし、および圧縮動作というような、グラフィクス動作のためにリソースを提供するように構成されるのでもよい。また、グラフィクス・サーバーに複数のGPUリソースが構成されてもよい。一実施形態では、グラフィクス・サーバー720が、図1のコンピューターに関して説明したコンポーネントの一部または全部を実行することができる。更に他の実施形態では、グラフィクス・サーバーが、図4のホスト404のような、ホスト・パーティション上にホストされるのでもよい。計算サーバー710およびグラフィクス・サーバー720が、ネットワーク(例えば、ファイバー・チャネル、LAN、ワイヤレス、イーサネット(登録商標)等)を通じて接続されてもよい。図4の環境のような仮想化環境では、グラフィクス・サーバー720および計算サーバー710が、VMBusを用いて接続されてもよい。
[0068] 計算サーバー710は、1つ以上のアプリケーション712を実行することもできる。一態様では、アプリケーションがグラフィクス・デバイス・ドライバー714と関連付けられてもよい。グラフィクス・デバイス・ドライバー714、アプリケーション712、および/または計算サーバー710は、グラフィクス・サーバー720上のグラフィクス・サーバー・マネージャー740と関連付けられてもよい。グラフィクス・デバイス・ドライバー714、アプリケーション712、および/または計算サーバー710は、命令およびデーターをグラフィクス・サーバー・マネージャー740に送ること、ならびに命令およびデーターをグラフィクス・サーバー・マネージャー740から受信することができるとよい。一例として、グラフィクス・デバイス・ドライバー714、アプリケーション712、および/または計算サーバー710が、第1データーをグラフィクス・サーバー・マネージャー740に送ることができるとよく、この第1データーはGPUリソースの要求を示す。グラフィクス・サーバー・マネージャー740が、第2データーをグラフィクス・デバイス・ドライバー714、アプリケーション712、および/または計算サーバー710に送るのでもよく、第2データーは、グラフィクス・サーバー720からのGPU命令に対するルーティング(routing)を示す。
[0069] グラフィクス・サーバー・マネージャー740が、グラフィクス・サーバー720を管理することもできる。グラフィクス・サーバー・マネージャー740は、命令およびデーターをグラフィクス・サーバー720のコンポーネントに送ることができるとよく、グラフィクス・サーバー720のコンポーネントからの応答として、情報およびデーターを受信すればよい。グラフィクス・サーバー720は、GPUホスティングおよび処理に特殊化されてもよい。グラフィクス・サーバー720は、グラフィクス・サーバー・マネージャー740、プロキシー・グラフィクス・アプリケーション722、カーネル726、およびGPUハードウェア730を備えることができる。プロキシー・グラフィクス・アプリケーション722が、第1グラフィクス・デバイス・ドライバー724と関連付けられてもよく、カーネル726が、第2グラフィクス・デバイス・ドライバー728と関連付けられてもよい。グラフィクス・デバイス・ドライバー724および728は、グラフィクス処理タスクに関連するデーターおよび情報を変換、受信、そして送信することができる。一実施形態では、グラフィクス・デバイス・ドライバー724および728は、特定のGPUハードウェア730と、グラフィクス・サーバー・マネージャー740、計算サーバー710、および/またはリモート・クライアント・コンピューター上のアプリケーション、ハードウェア、およびオペレーティング・システムとの間において変換を行うために選択される。
[0070] 図7の実施形態では、グラフィクス処理タスクに関連する命令は、アプリケーション712からグラフィクス・サーバー・マネージャー740までの一連のレイヤーを通って、プロキシー・グラフィクス・アプリケーション722に、カーネル726に、そしてハードウェア730まで流れることができる。処理された情報は、同じパスを逆に辿ればよい。図8は、情報パスについての代替実施形態を示す。グラフィクス・サーバー・マネージャー850は、計算サーバー710、アプリケーション712、および/またはグラフィクス・デバイス・ドライバー714からGPUリソース要求を受け、ルーティング命令、状態命令等を計算サーバー710およびグラフィクス・サーバー720に送る。その後、GPUタスク、処理された情報、および命令は、直接グラフィクス・サーバー720と計算サーバー710との間で送ることができる。グラフィクス・サーバー・マネージャー850は、これらの相互作用を監視することができ、GPUハードウェア730のようなGPU上におけるリソースの割り当てに関係する他のタスクも実行することができる。
[0071] 図9は、複数のグラフィクス・サーバー720(A〜N)を示す。これらは、1組のGPUハードウェア730に関連するリソースがGPU処理タスクを実行するには不十分であるときに用いることができる。また、この実施形態は、グラフィクス・サーバー・マネージャー850がGPU処理タスクの一部を第1グラフィクス・サーバー720Aから第2グラフィクス・サーバー720Bに移すときにも用いることができる。このような実施形態では、グラフィクス・サーバー・マネージャー850が、第1グラフィクス・サーバー720Aの状態を第2グラフィクス・サーバー720Bにコピーするように動作することもできる。
[0072] 図10は、計算サーバー1010およびグラフィクス・サーバー1020が仮想化環境または仮想デスクトップ・インフラストラクチャ(VDI)において実現される(implement)、リモート・サーバー・コンピューター1000の一実施形態例を示す。計算サーバー1010およびグラフィクス・サーバー1020は、図7〜図9の計算サーバー710およびグラフィクス・サーバー720を実装するように構成することができる。リモート・サーバー・コンピューター1000の実施形態は、図1のコンピューター100、図2のリモート・サーバー・コンピューター220、図3のリモート・サーバー・システム350、図4および図5のコンピューター・システム400、ならびに図6のコンピューター・システム600に関して説明したコンポーネントの一部または全部を実行することができる。
[0073] 図10は、VDIに対するホスト・ベースのグラフィクス仮想化を示す。このようなアーキテクチャーは、例えば、Microsoft(登録商標)RemoteFX(登録商標)プラットフォームを用いて実現する(implement)ことができる。仮想機械1011(A〜N)は、仮想デスクトップと呼ぶことができる。このアーキテクチャーは、仮想グラフィクス処理ユニット(vGPU)1016(A〜N)を用い、ゲスト・オペレーティング・システム(OS)1014(A〜N)と物理GPU112との間の関係を抽象化し、ホストされたマルチ・ユーザー環境においてGPUリソースを最適に共有する。
[0074] ハイパーバイザー・マイクロカーネル1002は、複数のホストおよびゲスト・パーティションを実現するように構成することができる。他の実施形態では、ハイパーバイザー・マイクロカーネル1002は、リモート・デスクトップ・セッション・コンポーネント(図示せず)を統合することができる。
[0075] 各ホスト・パーティションは、リモート・コンピューター・サーバー1000の物理GPUリソースにアクセスするグラフィクス・サーバー1020として構成することができる。また、各ホスト・パーティションは、グラフィクスのレンダリング、キャプチャし、およびエンコーディングのために管理コンポーネントも含むことができる。また、各ホスト・パーティションは、物理GPU112および、ASICS(図示せず)のようなホスト・ベース・エンコーダーにインターフェースを設けるデバイス・ドライバー1026も含むことができる。デバイス・ドライバー1026は、GPU、CPU、およびエンコーダー特定ドライバーを含むことができる。
[0076] 各ゲスト・パーティションは、vGPUリソースにアクセスする計算サーバー1010として構成することができる。各ゲスト・パーティションは、複数の接続されたリモート・クライアント・コンピューター(図示せず)に対して1つ以上の仮想デスクトップまたはセッションを実装することができる。各ゲスト・パーティションとリモート・クライアント・コンピューターとの間の接続は、図2および図3に示したものと同様である、RDP7.1のようなリモート・デスクトップ・セッションを含むことができる。
[0077] vGPU1016は、各仮想機械1011にインストールされる仮想グラフィクス・アダプターを設けることができる。vGPU1016は、1つ以上のGPU112を利用する多数の仮想機械に対するグラフィック処理を抽象化することができる。仮想機械1011において実行するアプリケーションが、DirectX(登録商標)またはGDI動作のようなグラフィクス動作を呼び出すとき、vGPU1016は、ゲスト・パーティション1010とホスト・パーティション1020との間の通信チャネルを用いて、GPU112からリソースを得ることができる。この通信チャネルは、VMBusまたはTCP/IPチャネルを含むことができる。VMBusは、メモリー共有およびvGPUに特定的な他の機能のために、ハイパーバイザー・マイクロカーネル1002内部に構成することができる。このようなVMBus構成は、統合メカニズムを直接ハイパーバイザー・マイクロカーネル1002内に設けることができ、グラフィクス関連デバイスを求める全てのリソース要求を転送することができる。
[0078] また、vGPU1016は、ある品質のサービス・メカニズムを仮想機械1011に提供することもできる。サービス・メカニズムの品質は、GPU112を最も効率的利用する負荷均衡方針に基づいて、公平にGPU112のリソースを仮想機械1011に配分する(deliver)ことができる。
[0079] ホスト・パーティション1020は、リモート・デスクトップ仮想グラフィクス管理(RDVGM)機能を仮想機械1011に設けるように構成することができる。RDVGMは、リモート・コンピューター・サーバー1000の物理リソース間におけるリソース割り当ておよびプロセス制御と、各仮想機械のゲスト・オペレーティング・システム(OS)1014へのvGPU1016のリソース割り当とを管理することができる。RDVGM機能は、レンダリング、キャプチャし、および圧縮(RCC)プロセスを管理すること、GPU112リソースを仮想機械1011にvGPU1016を介して割り当てること、仮想機械1011に対するリソース方針を指定すること、および多数の仮想機械1011(A〜N)に跨がってGPU112リソースの負荷均衡を行うことを含むことができる。また、RDVGMは、ブートの時点においてしかるべきGPU112リソースを仮想機械1011(A〜N)に割り当てることもできる。
[0080] RDVGMは、RCCエンジン1022を統合することができる。RCCエンジン1022は、グラフィクス・データーのレンダリング、キャプチャし、および圧縮を扱う。RCCは、グラフィクス要求を各仮想機械1011からの出力として受け、これらの要求を、例えば、ホスト・パーティション1020上のDirectX(登録商標)に準拠したコマンドに変換することができる。VMBusは、仮想機械1011(A〜N)において実行する、ホストされたアプリケーション1012(A〜N)からの物理GPU112のリソースに対するグラフィクス要求のために、高速通信バックプレーンを提供することができる。DirectX(登録商標)準拠コマンドに対して、アプリケーション1012(A〜N)は、DirectX(登録商標)9以降をサポートする必要があり、一方GPU112はDirectX(登録商標)10以降をサポートする必要がある。
[0081] 既に説明したように、レンダリングとは、vGPU1016(A〜N)を介してアプリケーション1012(A〜N)によって行われる、回転する、ひっくり返す、および描画するというような生の表示コールを変換し、これらの要求をGPU112に与え(honoring)、このようにしてアプリケーション・コンテンツをレンダリングするプロセスを指す。レンダリングは、標準的なDirectX(登録商標)のシンタックスに基づくことができる。キャプチャは、画面上ビットマップまたはフレーム変更というような、レンダリングされたアプリケーション・コンテンツを受け入れ(take)、このアプリケーション・コンテンツの以前のレンダリングに対する変更をインテリジェントにキャプチャすることを言う。キャプチャの二次的機能は、キャプチャ品質およびエンコーディング・レベルに対してサービス方針の品質を指定することである。圧縮またはエンコーディングは、GPU112のリソースをリモート・クライアント・コンピューターに、例えば、リモート・デスクトップ・セッション・プロトコルを含む通信チャネルを通じて、vGPU1016によって最適にそして公正に配信するプロセスを言う。通信チャネルの品質および状態、ならびに目標とされるリモート・クライアント・コンピューターのタイプが、キャプチャされたコンテンツを最適に配信するために用いられる圧縮/エンコーディングのタイプを決定する。
[0082] VM1011内において実行するアプリケーション1012が、描画、サイズ変更、および回転というような表示コールを発行するとき、vGPU1016は全てのレンダリング要求を仲介することができる。仮想化パスは、ゲストOS1014に対して透過的であることができる。既に説明したように、グラフィクス処理コマンドは、ホスト・パーティション1020が横取りすることができる。この横取りは、ソフトウェア・スタックにおける低いレベルで行うことができる。次いで、GPU112上においてグラフィクスを1つのフレーム・バッファにレンダリングすることができる。この1つのフレーム・バッファは、グラフィック更新のための一時的保存場所(holding station)として役割を果たす。フレーム・バッファは、エンド・ユーザーの仮想化表示を表すことができ、エンド・ユーザーとは、リモート・クライアント・コンピューターを用いて仮想機械1011に接続されたユーザーである。豊富なグラフィクス・アプリケーション、3Dプラグイン、ならびにその他のグラフィクス・コールおよびコマンドは、GPUを内蔵した専用ワークステーション上でアプリケーションが実行しているかのように、正確に実行することができる。
[0083] ホスト・パーティション1020は、素早くそして効率的に、レンダリングされたコンテンツをキャプチャすることができる。コンテンツ内にある各フレームは、管理可能な
単位に分割することができる。フレーム内における変化領域は、RCCエンジン1022によって設けられる最適化能力によって処理することができる。このキャプチャ・メカニズムによって、個々のフレームが表示変化のために横取りされる。フレーム内において変化した領域のみが、エンコーディングのためにキャプチャされる。
[0084] また、ホスト・パーティション1020は、キャプチャされたコンテンツを圧縮することもできる。圧縮プロセスは、ある種の仮想機械に与える優先順位を高くまたは低くして、あるいはキャプチャされたフレーム内における変化領域のサイズによって動的に、管理ツールによって制御することができる。加えて、RDP7.1のようなリモート・デスクトップ・セッションを用いる実施形態では、このリモート・デスクトップ・セッションが、ネットワークの使用および公正さに基づいて、フレーム・レートの最適化に備えることができる。RCCエンジン1022は、リモート・デスクトップ・セッション・リスナー・プロセス(listener process)に接触し(reach out to)、リモート・クライアント・コンピューターのデコーディング能力を含む、リモート・クライアント・コンピューターの状態を評価することができる。フレーム・バッファに対する変更は、フレーム・レートでリモート・クライアント・コンピューターに送ることができ、フレーム・レートはネットワーク状態およびリモート・クライアント・コンピューターの変更を消費する能力に動的に適合する。エンコードされた出力は、リモート・デスクトップ・セッション内をくぐり抜けることができ、リモート・クライアント・コンピューターに送出することができる。
[0085] 1つ以上の計算サーバーおよび1つ以上のグラフィクス・サーバーを備えたリモート・サーバー・コンピューターを実現するための、図7〜図10に示した全てのアーキテクチャーの変形は、実施態様の例である。ここでは、いかなることであっても、本開示をいずれの特定の実施態様(implementation aspect)に限定するように解釈してはならない。
[0086] リモート計算環境では、リモート・クライアント・コンピューターは通例コンピューター・サーバーのみと通信し、グラフィクス・サーバーとの直接的な接続を有さない。コンピューター・サーバーとの通信は、図3に示したものと同様のリディレクターおよび/またはブローカーの使用を含むことができる。計算サーバーは、通例、リモート・クライアント・コンピューターとの接続を管理する。例えば、計算サーバーのゲスト・オペレーティング・システムは、クライアントを認証するように構成することができる。一旦認証が完了したなら、リモート・クライアント・コンピューターと計算サーバーとの間における転送を開始することができる。したがって、リモート・クライアント・コンピューターからのグラフィクスの要求は、計算サーバーによって受けることができる。計算サーバーはこのグラフィクス要求を処理してグラフィクス・コールおよびコマンドを得て、レンダリング、キャプチャ、および圧縮のために、これらのコールおよびコマンドをグラフィクス・サーバーに送信することができる。グラフィクス・サーバーはリモート・クライアント・コンピューターとの直接的な通信パスを有さないので、グラフィクス・サーバーからのグラフィクス出力は、計算サーバーに送ることができる。計算サーバーは、このグラフィクス出力をパッケージ化し、エンド・ユーザーに対する表示のために、リモート・クライアント・コンピューターに送信することができる。
[0087] 以上の説明を図10の仮想環境において適用すると、リモート・クライアント・コンピューターからのグラフィクス要求は、リモート・サーバー・コンピューター1000の物理NIC114上を、ゲスト・パーティション1010の仮想NIC(図示せず)を通ってアプリケーション1012に送信される。次いで、グラフィクス要求は処理されて、レンダリング、キャプチャ、および圧縮のためにホスト・パーティション1012に導くことができる。一旦レンダリングされ、キャプチャされ、圧縮されたなら、出力データーをホスト・パーティション1020から計算サーバー1010に、vGPU1016を用いて逆に導くことができる。出力データーをゲスト・パーティション1010からリモート・クライアント・コンピューターに送信するために、ゲスト・パーティション1010は、データーをパッケージ化し仮想NICを用いて送信することができる。仮想NICは、出力データーを物理NIC114にリディレクトし、物理NIC114はこのデーターをネットワークを通じてリモート・クライアント・コンピューターに送信することができる。既に説明したように、ゲスト・パーティション1010、ホスト・パーティション1020、およびリモート・サーバー・コンピューター1000の基礎リソース間において繰り返されるデーターの横断は、集中的動作を必要とする可能性があり、大量のメモリーおよびCPUリソースを消費する可能性があり、リモート・クライアント・コンピューターに対するデーター配信レイテンシが増大する可能性がある。
[0088] 図11は、リモート・サーバー・コンピューター1100のリソース間における繰り返しデーター横断を解消する代替アーキテクチャーを示す。図11は、リモート・クライアント・コンピューター1130との接続の管理を計算サーバー1110内に保持し、グラフィクス・サーバー1120が、グラフィクス出力データーを直接リモート・クライアント・コンピューター1130にストリーミングすることを可能にするアーキテクチャーについて説明する。リモート・サーバー・コンピューター1100の実施形態は、図7〜図9のリモート・サーバー・コンピューター700および図10のリモート・サーバー・コンピューター1000に関して説明したコンポーネントの一部または全部を実行することができる。リモート・クライアント・コンピューター1130の実施形態は、図1のコンピューター100、図2のリモート・クライアント・コンピューター210、および図3のリモート・クライアント・コンピューター310に関して説明したコンポーネントの一部または全部を実行することができる。
[0089] リモート・クライアント・コンピューター1130は、ネットワーク(図示せず)を通じた計算サーバー1110との接続1105を開始することができる。接続1105は、TCPI/IPに基づくことができ、RDP7.1のようなリモート・デスクトップ・セッションを含むことができる。計算サーバー1110は、リモート・クライアント・コンピューター1130との接続1105を認証することができる。認証方法は、リモート・クライアント・コンピューター1130の仮想デスクトップまたはセッションが計算サーバー1110において設定される前に、リモート・クライアント・コンピューター1130が認証されることを要求することができる。例えば、認証方法は、RDP7.1において利用可能なネットワーク・レベルの認証とすることができる。加えて、計算サーバー1110は、リモート・クライアント・コンピューター1130のIPアドレスのようなアドレスを取得することができる。
[0090] 一旦認証が完了し、リモート・クライアント・コンピューター1130と計算サーバー1110との間に接続1105が確立されたなら、計算サーバー1110は、仮想機械内においてリモート・デスクトップ・セッション、仮想機械、デスクトップ・セッション、またはその組み合わせを開始することができ、これらはリモート・クライアント・コンピューター1130のために計算サーバー1110内部で実行する。このような仮想機械またはデスクトップ・セッションは、図2〜図10の技法を具体化することができる。加えて、計算サーバー1110は、グラフィクス・サーバー1120を初期化することができる。この初期化は、例えば、グラフィクス・サーバーがインアクティブ状態にある場合にはグラフィクス・サーバー1120を復元または起動し、計算サーバー1110とグラフィクス・サーバー1120との間に接続1115を確立することを含むことができる。接続1115は、TCP/IPに基づくことができ、または仮想環境におけるVMBusを用いることができる。また、計算サーバー1110は、リモート・クライアント・コンピューター1130のアドレスをグラフィクス・サーバー1120に供給し、グラフィクス・サーバー1120に、リモート・クライアント・コンピューター1130のアドレスから発する接続要求に対する準備をするように命令することができる。また、計算サーバーは、グラフィクス・サーバー1120の、IPアドレスのような、アドレスを取得することができ、グラフィクス・サーバー1120のアドレスをリモート・クライアント・コンピューター1130に供給することができる。
[0091] 一旦グラフィクス・サーバー1120が初期化され、リモート・クライアント・コンピューター1130がグラフィクス・サーバー1120のアドレスを取得したなら、クライアント・コンピューター1130はネットワーク(図示せず)を通じてグラフィクス・サーバー1120との接続1125を開始することができる。接続1125は、TCP/IPに基づくことができる。また、接続1125は、RDP7.1のような、リモート・デスクトップ・セッションを含むこともできる。他の実施形態では、接続1105および接続1125がリモート・デスクトップ・セッションを含む場合、リモート・デスクトップ・セッションは別個であることができ、または接続1105および接続1125に跨がって同一であることもできる。
[0092] 一旦接続1105、1115、および1125が確立されたなら、リモート・クライアント・コンピューター1130は、キーボードまたはマウス入力のような、エンドユーザー・グラフィクス入力をコンピューター・サーバー1110に送ることができる。コンピューター・サーバーは、図2、図6〜図10の技法を用いて、グラフィクス入力を処理することができる。一実施形態では、計算サーバー1110はエンド・ユーザーのキーボード押鍵またはアイコン上のマウス・クリックを、アプリケーションのインスタンスを実装する表示コマンドに、そして回転する、ひっくり返す、サイズ変更する、および描画するというような表示コールに変換することができる。計算サーバー1110は、表示コマンドおよびコール・データーを、レンダリング、キャプチャ、および圧縮のために、グラフィクス・サーバー1120に送ることができる。グラフィクス・サーバー1120は、表示コマンドおよびコール・データーをレンダリングし、キャプチャし、圧縮することができ、そして出力を出力グラフィクス・データーとしてエンコードすることができる。出力グラフィクス・データーを計算サーバー1110に送る代わりに、グラフィクス・サーバー1120は出力グラフィクス・データーを直接リモート・クライアント・コンピューター1130に、接続1125を通して送信することができる。リモート・クライアント・コンピューター1130は、エンド・ユーザーへの表示のために、出力グラフィクス・データーをデコードすることができる。
[0093] 一実施形態では、図10のリモート・サーバー・コンピューター1000のように、リモート・サーバー・コンピューター1100が仮想化される場合、計算サーバー1110をゲスト・パーティション上に実装することができ、グラフィクス・サーバー1120をホスト・パーティション上に実装することができる。各パーティションは、IPアドレスのようなアドレスを有するように構成することができる。ゲスト・パーティションまたは計算サーバー1110のアドレスは、仮想NICと関連付けることができる。ホスト・パーティションまたはグラフィクス・サーバー1120のアドレスは、仮想NICまたはリモート・サーバー・コンピューター1100の基礎となるハードウェアの物理NIC114と関連付けることができる。計算サーバー1110は、その中で実行する仮想機械またはセッションをリモート・クライアント・コンピューター1130に提示することができる。計算サーバー1110とグラフィクス・サーバー1120との間の接続1115は、VMBusのようなパーティション内通信チャネルを構成することができる。
[0094] リモート・クライアント・コンピューター1130におけるエンド・ユーザー入力のようなグラフィクス・データーは、リモート・クライアント・コンピューター1130から接続1105を通って、コンピューター・サーバー1110の仮想NICと関連する計算サーバー1110のアドレスに送ることができる。
[0095] 計算サーバー1110は、受信したグラフィクス・データーを処理して、先に説明したように、表示コマンドおよびコール・データーを得ることができる。計算サーバー1110は、処理したグラフィクス・データーを、レンダリング、キャプチャ、および圧縮のためにグラフィクス・サーバー1120に送ることができる。一実施形態では、処理したデーターを送るとき、処理したデーターを、計算サーバー1110に割り当てられたメモリー空間から、グラフィクス・サーバー1120に割り当てられたメモリー空間に送信することを含むことができる。他の実施形態では、リモート・サーバー・コンピューター1100内部のパーティションがメモリー空間を共有することができる。このような実施形態では、計算サーバー1110からグラフィクス・サーバー1120にデーターを送るとき、2つのメモリー空間の間で処理したデーターをコピーするのではなく、処理したデーターを収容するメモリー空間のアドレスを送出することを含むことができる。例えば、計算サーバー1110およびグラフィクス・サーバー1120は、処理したデーターを導くために、VMBus内部の共有メモリー空間を利用することができる。
[0096] グラフィクス・サーバー1120は、先に説明したように、処理したデーターをレンダリングし、キャプチャし、圧縮することができる。グラフィクス・サーバー1120は、レンダリングし、キャプチャし、圧縮したデーターをエンコードして出力データーを得ることができ、グラフィクス・サーバーNICを用いて、この出力データーを、リモート・クライアント・コンピューター1130に関連するアドレスに送信することができる。リモート・クライアント・コンピューター1130は、受信した出力データーを、エンド・ユーザーへの表示のためにデコードすることができる。
[0097] 図12は、複数のリモート・クライアント・コンピューター1130(A〜N)、複数の計算サーバー1110(A〜N)、および複数のグラフィクス・サーバー1120(A〜N)を備える環境における、図11のアーキテクチャーの一実施形態を示す。尚、リモート・クライアント・コンピューター、計算サーバー、およびグラフィクス・サーバーの数は、等しい必要はないことを注記するのは重要である。言い換えると、リモート・クライアント・コンピューター1130(A〜N)と計算サーバー1110(A〜N)との間の関係、計算サーバー1110(A〜N)とグラフィクス・サーバー1120(A〜N)との間の関係、およびグラフィクス・サーバー1120(A〜N)とリモート・クライアント・コンピューター1130(A〜N)との間の関係は、1対1、1対多数、またはその組み合わせとすることができる。
[0098] リモート・サーバー・コンピューター1200の実施形態は、図2のリモート・サーバー・コンピューター220、図3のリモート・サーバー・コンピューター320、図7〜図10のリモート・サーバー・コンピューター700、図10のリモート・サーバー・コンピューター1000、および図11のリモート・サーバー・コンピューター1100に関して説明したコンポーネントの一部または全部を実行することができる。一実施形態では、リモート・サーバー・コンピューター1200は複数の物理計算システムを備えることができる。リディレクターおよびブローカー1240は、図3のリディレクター330およびブローカー340に関して説明したコンポーネントの一部または全部を実行することができる。グラフィクス・サーバー・マネージャー1250は、図7のグラフィクス・サーバー・マネージャー740、および図8〜図9のグラフィクス・サーバー・マネージャー850に関して説明したコンポーネントの一部または全部を実行することができる。加えて、リディレクターおよびブローカー1240は、計算サーバー111(A〜N)と統合することができる。同様に、グラフィクス・サーバー・マネージャー1250もグラフィクス・サーバー1120(A〜N)と統合することができる。他の実施形態では、リモート・サーバー・コンピューターが仮想化されてもよく、図4〜図5の計算システム400、図10のリモート・サーバー・コンピューター1000、および図11のリモート・サーバー・コンピューター1100に関して説明したコンポーネントの一部または全部を実行することができる。このような実施形態では、計算サーバー1110(A〜N)は、1つ以上のゲスト・パーティション上に実装することができ、グラフィクス・サーバー1120(A〜B)は、1つ以上のホスト・パーティション上に実装することができる。リディレクターおよびブローカー1240ならびにグラフィクス・サーバー・マネージャー1250も、1つ以上のゲスト・パーティションおよび/または1つ以上のホスト・パーティションにおいて、既に説明した技法を用いて仮想化することもできる。更に他の実施形態では、リモート・サーバー・コンピューター1200は、仮想機械および物理機械の組み合わせとすることもできる。例えば、計算サーバー1110(A〜N)およびグラフィクス・サーバー1120(A〜N)が仮想化されてもよく、一方リディレクターおよびブローカー1240ならびにグラフィクス・サーバー・マネージャー1250が物理計算デバイスであってもよい。
[0099] リディレクターおよびブローカー1240は、リモート・クライアント・コンピューター1130と計算サーバー1110との間に第1接続を確立するために用いられてもよい。例えば、リディレクターおよびブローカー1240は、複数の計算サーバー1110(A)の中から計算サーバー1110、および/またはそこにおけるセッションをリモート・クライアント・コンピューター1130に割り当てることもできる。したがって、リディレクターおよびブローカー1240は、計算サーバー1110(A)の可用性に関して負荷均衡技法を設けることができる。一旦その割り当てが完了したなら、割り当てられた計算サーバー1110は、リモート・クライアント・コンピューター1130を認証することができる。リモート・クライアント・コンピューター1130および割り当てられた計算サーバー1110は、既に説明したように第1接続を確立することができる。例えば、第1接続は、図11の接続1105を構成することができる。また、割り当てられた計算サーバー1110は、リモート・クライアント・コンピューター1130のアドレスを取得することもできる。
[0100] グラフィクス・サーバー・マネージャー1250は、割り当てられた計算サーバー1110と、複数のグラフィクス・サーバー1120(A〜N)からのグラフィクス・サーバー1120との間に第2接続を確立するために用いられてもよい。グラフィクス・サーバー・マネージャー1250は、負荷均衡技法を実行して、グラフィクス・サーバー1120(A〜N)の可用性を判断することができる。これに応じて、グラフィクス・サーバー・マネージャー1250は、次に、グラフィクス・サーバー1120を、割り当てられたコンピューター・サーバー1110との接続に割り当てるのでもよい。一旦この割り当てが完了すると、第2接続を確立することができる。例えば、第2接続は図11の接続1115を構成することができる。
[0101] 割り当てられた計算サーバー1110は、リモート・クライアント・コンピューター1130のアドレスをグラフィクス・サーバー1120に供給することができ、割り当てられたグラフィクス・サーバー1120のアドレスを取得して、リモート・クライアント・コンピューター1130に供給することができる。リモート・クライアント・コンピューター1130および割り当てられたグラフィクス・サーバー11120は、リモート・クライアント・コンピューター1130および割り当てられたグラフィクス・サーバー1120の取得したアドレスを用いて、第3接続を確立することができる。第3接続は、図11の接続1125を含むことができる。
[0102] 更に、図12のアーキテクチャー上で負荷均衡技法を実行することができる。例えば、グラフィクス・サーバー1120(A〜N)の負荷均衡の場合、割り当てられたグラフィクス・サーバー1120がもはやリモート・クライアント・コンピューター1130に適正に配給する(serve)ことができないとき、計算サーバー1110は利用可能なグラフィクス・サーバー1120との新たな接続を確立し、リモート・クライアント・コンピューター1130に、利用可能なグラフィクス・サーバー1120との対応する新たな接続を確立するように命令することができる。リモート・クライアント・コンピューター1130は、次いで、利用可能なグラフィクス・サーバー1120に継ぎ目なく移行することができる。加えて、計算サーバー1110(A〜N)の負荷均衡の場合、割り当てられた計算サーバー1110がもはやリモート・クライアント・コンピューター1130に適正に配給することができないとき、リモート・クライアント・コンピューター1130と利用可能な計算サーバー1110との間、および利用可能な計算サーバー1110と既に割り当てられているグラフィクス・サーバー1120との間に新たな接続を確立することができ、一方リモート・クライアント・コンピューター1130と既に割り当てられているグラフィクス・サーバー1120との間の接続は同じままで有り続けることができる。仮想機械ライブ・マイグレーションのような技法は、作業負荷を1つの計算サーバー1110から他の計算サーバーに継ぎ目なく転移させることができ、一方グラフィクス・サーバー1120の作業負荷は同じままで有り続けることができる。
[0103] 一実施形態では、1つ以上のリモート・クライアント・コンピューター1130が種々のグラフィクス・サーバー1120から表示ストリームまたはグラフィクス出力データーを受け入れることを可能にする技法を用いることができる。例えば、リモート・クライアント・コンピューター1130Aは他のリモート・クライアント・コンピューター1130(B〜N)から、他のリモート・クライアント・コンピューター1130(B〜N)に関連するエンド・ユーザー表示を見る許可を得ることができる。この許可は、例えば、他のリモート・クライアント・コンピューター1130(B〜N)の各々に割り当てられた種々のグラフィクス・サーバー1120のアドレスを含むことができる。加えて、この許可は、他のリモート・クライアント・コンピューター1130(B〜N)のアドレス、他のリモート・クライアント・コンピューター1130(B〜N)の各々に割り当てられた計算サーバー1110のアドレス、対応するセッションID、ユーザー名、計算サーバー1110およびグラフィクス・サーバー1120の名称、各計算サーバー1110におけるアクティブなセッションの数等も含むことができる。リモート・クライアント・コンピューター1130Aは、この許可を用いて、他のリモート・クライアント・コンピューター1130(B〜N)の各々に割り当てられたグラフィクス・サーバー1120との接続を確立することができる。これらの接続は、図11の接続1125を含むことができる。一旦接続が確立されると、種々のグラフィクス・サーバー1120は、他のリモート・クライアント・コンピューター1130(B〜N)のグラフィクス・データー出力をリモート・クライアント・コンピューター1130Aに送信することができる。リモート・クライアント・コンピューター1130Aは、種々のグラフィクス・サーバー1120から受信したグラフィクス出力データーをデコードすることができ、デコードしたデーターをエンド・ユーザーに表示することができる。例えば、リモート・クライアント・コンピューター1130Aは、デコードしたデーターをタイル状に並べて表示することができ、または他のリモート・クライアント・コンピューター1130(B〜N)と関連する画面の各々をユーザーにぱらぱらとめくらせることができる。更に、リモート・クライアント・コンピューター1130Aは、ユーザー名、対応する計算サーバー1110およびグラフィクス・サーバー1120の名称等というような、許可において入手可能な他の情報を表示することもできる。他の実施形態では、リモート・クライアント・コンピューター1130(B〜N)に対応する種々のグラフィクス出力データーを送信するグラフィクス・サーバー1120が、種々のグラフィクス出力データーおよび対応するリモート・クライアント・コンピューター1130(B〜N)についての他の情報を他のリモート・クライアント・コンピューター1130Aに送信するように構成することもできる。したがって、リモート・クライアント・コンピューター1130Aは、リモート・クライアント・コンピューター1130(B〜N)の画面およびこれらについての情報を表示することができる。
[0104] 図13は、クライアントに送信するためにグラフィクス・データーを処理する動作手順の一例を示す。この動作手順は、動作1300、1310、1320、1330、1340、1350、および1360を含む。動作1300は、この動作手順を開始し、動作1310は、リモート・クライアントと計算サーバーとの間に第1接続を確立することを示す。第1接続は、図11の接続1105を含むことができる。動作1320は、計算サーバーとグラフィクス・サーバーとの間に第2接続を確立することを示す。代2接続は、図11の接続1115を含むことができる。動作1330は、リモート・クライアントとグラフィクス・サーバーとの間に第3接続を確立することを示す。第3接続は、図11の接続1125を含むことができる。動作1340は、第1接続を通じてリモート・クライアントからグラフィクス・データーを計算サーバーが受信することを示す。受信されたグラフィクス・データーは、例えば、リモート・クライアントに関連するキーボード打鍵またはマウス・クリックというような、ユーザー・グラフィクス入力を含むことができる。動作1350は、受信したグラフィクス・データーを処理し、処理したグラフィクス・データーをグラフィクス・サーバーに第2接続を通じて送ることを示す。受信したグラフィクス・データーの処理は、計算サーバーが受信したグラフィクス・データーを表示コマンドおよびコールに変換することを含むことができる。動作1360は、処理したグラフィクス・データーをレンダリングし、キャプチャし、リモート・クライアントに第3接続を通じて送信することを示す。
[0105] 図14は、前述のように、クライアント・コンピューターに送信するためにグラフィクス・データーを処理するシステム例を示す。システム1400は、プロセッサー1410およびメモリー1420を備えている。一実施形態では、プロセッサー1410は、図1における論理処理ユニット102として実現することができ、一方メモリー1420は図1におけるシステム・メモリー22のコンポーネントの一部または全部を有するものとして実現することができる。更に、メモリー1420は、リモート・クライアントへの送信のためにグラフィクス・データーをシステムに処理させるように構成されたコンピューター命令も備えている。ブロック1422は、リモート・クライアントと計算サーバーとの間に第1接続を確立することを示す。ブロック1424は、計算サーバーとグラフィクス・サーバーとの間に第2接続を確立することを示す。ブロック1426は、リモート・クライアントとグラフィクス・サーバーとの間に第3接続を確立することを示す。ブロック1428は、リモート・クライアントからグラフィクス・データーを第1接続を通じて計算サーバーが受信することを示す。ブロック1430は、受信したグラフィクス・データーを処理し、処理したグラフィクス・データーをグラフィクス・サーバーに第2接続を通じて送ることを示す。ブロック1432は、処理したグラフィクス・データーをレンダリングし、キャプチャし、圧縮し、リモート・クライアントに第3接続を通じて送信することを示す。
[0106] 以上で述べた態様は、いずれも、方法、システム、コンピューター読み取り可能媒体、またはあらゆるタイプの製造物(manufacture)で実現することができる。
[0107] 以上の詳細な説明では、例および/または動作図によって、本システムおよび/またはプロセスの種々の実施形態を明記した。このようなブロック図、および/または例が1つ以上の機能および/または動作を含む限りにおいて、このようなブロック図または例の中にある各機能および/または動作は、広い範囲のハードウェア、ソフトウェア、ファームウェア、または事実上そのあらゆる組み合わせによって、個々におよび/または集合的に実現できることは、当業者には理解されよう。
[0108] 尚、本命書において説明した種々の技法は、ハードウェアまたはソフトウェア、あるいはしかるべきときには双方の組み合わせに関して実現できることは言うまでもない。つまり、本開示の方法および装置、あるいはその一部のある種の態様は、フロッピー(登録商標)・ディスケット、CD−ROM、ハード・ドライブ、または他のいずれかの機械読み取り可能記憶媒体というような、有形媒体に具体化されたプログラム・コード(即ち、命令)の形態をなすことができ、このプログラム・コードが、コンピューターのような機械にロードされこの機械によって実行されると、この機械が本開示を実施する装置となる。プログラマブル・コンピューター上におけるプログラム・コードの実行の場合、計算デバイスは通常プロセッサー、このプロセッサーによって読み取り可能な記憶媒体(揮発性および不揮発性メモリーおよび/または記憶エレメントを含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを含む。1つ以上のプログラムは、アプリケーション・プログラミング・インターフェース(API)、再利用可能な制御手段等の使用によって、本開示に関連して説明したプロセスを実現するまたは利用することができる。このようなプログラムは、好ましくは、コンピューター・システムと通信するために、高級手続きプログラミング言語またはオブジェクト指向プログラミング言語で実現される。しかしながら、プログラム(1つまたは複数)は、望ましければ、アセンブリーまたは機械語で実現することもできる。いずれの場合でも、言語は、コンパイル型であってもインタプリタ型であってもよく、ハードウェアの実施態様と組み合わされてもよい。
[0109] 以上、本発明について、その好ましい実施形態を参照して特定的に示し説明したが、以下の特許請求の範囲に明記される本発明の範囲から逸脱することなく、形式および詳細には種々の変更がなされてもよいことは当業者には理解されよう。更に、本発明のエレメントは単数形で記載されること、または特許請求されることもあるが、単数形に限定することが明示的に述べられていない限り、複数形も想定されることとする。

Claims (10)

  1. データーを処理するためのシステムであって、
    少なくとも1つの計算デバイスを備え、
    前記計算デバイスは、
    クライアント・デバイスとの第1の接続および少なくとも1つのグラフィクス・デバイスとの第2の接続を確立するステップであって、前記第1の接続は、前記クライアント・デバイスに割り当てられたリモート・セッションに前記クライアント・デバイスを接続する、ステップと、
    前記クライアント・デバイスが前記少なくとも1つのグラフィクス・デバイスへの第3の接続を確立するのを可能にするために、前記少なくとも1つのグラフィクス・デバイスを示す情報を前記クライアント・デバイスに提供するステップであって、前記第3の接続は、前記第1の接続を介して前記クライアント・デバイスから受信されたデーターに応答して、前記クライアント・デバイスへエンコードされたグラフィクス・データーを伝送するように適合される、ステップと、
    前記第1の接続を介して前記クライアント・デバイスからデーターを受信するステップと、
    前記クライアント・デバイスから受信された前記データーを、前記リモート・セッションのランタイム環境内で実行されるアプリケーションによって処理することによって、表示コマンドを発行するステップと、
    前記受信されたデーターに応答して前記アプリケーションによって発行された前記表示コマンドを、前記第2の接続を介して前記少なくとも1つのグラフィクス・デバイスへ送信するステップであって、前記表示コマンドは、前記少なくとも1つのグラフィクス・デバイスによって前記第3の接続を介して前記クライアント・デバイスへ送信されるグラフィクス・データーを生成するのに用いられる、ステップと、
    を少なくとも行うように構成される、
    システム。
  2. 前記少なくとも1つの計算デバイスは、少なくとも1つの仮想機械内にインスタンス化される、請求項1に記載のシステム。
  3. 前記少なくとも1つのグラフィクス・デバイスは、少なくとも1つの仮想化機械上の少なくとも1つのパーティション内にインスタンス化される、請求項1に記載のシステム。
  4. 前記クライアント・デバイスと前記少なくとも1つのグラフィクス・デバイスとの前記第3の接続を確立するステップは、前記少なくとも1つの計算デバイスと前記少なくとも1つのグラフィクス・デバイスの負荷均衡を行うステップを含む、請求項1に記載のシステム。
  5. 前記少なくとも1つのグラフィクス・デバイスのうちの1または複数のグラフィクス・デバイスは、多数のクライアント・デバイスに対応するグラフィクス・データーを1つのクライアント・デバイスへ送信するように構成される、請求項1に記載のシステム。
  6. グラフィクス・データーを処理するための方法であって、
    複数の計算デバイスと複数のクライアント・デバイスとの間に第1の接続を確立し、前記複数の計算デバイスと複数のグラフィクス・デバイスとの間に第2の接続を確立するステップと、
    前記複数の計算デバイスに、前記複数のグラフィクス・デバイスのうちの対応する1つとの第3の接続を確立するよう命令するステップであって、前記第3の接続は、前記第1の接続を介して前記複数のクライアント・デバイスから受信されたデーターに応答して、前記複数のクライアント・デバイスへエンコードされたグラフィクス・データーを伝送するように適合される、ステップと、
    前記複数の計算デバイスによって、前記第1の接続を介して前記複数のクライアント・デバイスからデーターを受信するステップと、
    前記受信されたデーターを処理することによって、表示コマンドを発行するステップと、
    前記第2の接続を介して前記複数のグラフィクス・デバイスへ前記表示コマンドを送信するステップであって、前記表示コマンドは、前記受信されたデーターに応答してアプリケーションによって発行され、前記アプリケーションは、前記複数のクライアント・デバイスのうちのそれぞれのクライアント・デバイスに対して割り当てられたリモート・セッションのランタイム環境内で実行される、ステップと、
    前記表示コマンドを用いてグラフィクス・データーを生成し、前記生成されたグラフィクス・データーを前記第3の接続を介して前記複数のクライアント・デバイスへ送信するように、前記複数のグラフィクス・デバイスに命令するステップと、
    を含む方法。
  7. 前記複数の計算デバイスは、複数の仮想機械内にインスタンス化され、前記複数のグラフィクス・デバイスは、前記複数の計算デバイスと同じ複数の物理計算デバイス上の複数のパーティション内にインスタンス化される、請求項6に記載の方法。
  8. 前記複数の計算デバイスは、前記複数のクライアント・デバイスとの複数のリモート・デスクトップ・セッションを実行しており、前記グラフィクス・データーは、ユーザーのリモート・デスクトップ・セッションの少なくとも一部のグラフィクス表現を含む、請求項7に記載の方法。
  9. 前記複数の計算デバイスと前記複数のクライアント・デバイスとの間に前記第1の接続を確立し、前記複数の計算デバイスと前記複数のグラフィクス・デバイスとの間に前記第2の接続を確立するステップは、複数のクライアント・デバイス・アドレスを取得して前記取得された複数のクライアント・デバイス・アドレスを前記複数のグラフィクス・デバイスに供給するステップと、複数のグラフィクス・デバイス・アドレスを取得して前記取得された複数のグラフィクス・デバイス・アドレスを前記複数のクライアント・デバイスに供給するステップと、前記複数のクライアント・デバイスおよび前記複数のグラフィクス・デバイスに、前記供給されたアドレスを用いて第3の接続を確立するよう命令するステップと、を含む、請求項6に記載の方法。
  10. 命令が格納されたコンピューター読み取り可能記憶デバイスであって、前記命令は、1または複数のプロセッサーによって実行されると、前記1または複数のプロセッサーに、
    複数の計算デバイスと複数のリモート・クライアント・コンピューターとの間に第1の接続を確立し、前記複数の計算デバイスと複数のグラフィクス・デバイスとの間に第2の接続を確立するステップと、
    前記複数のリモート・クライアント・コンピューターのそれぞれが前記複数のグラフィクス・デバイスのうちの対応する1つとの同時の第3の接続を確立することを可能にする情報を前記複数のリモート・クライアント・コンピューターへ送信するステップであって、前記同時の第3の接続のそれぞれは、前記第1の接続を介して前記複数のリモート・クライアント・コンピューターから受信されたデーターに応答して、前記複数のリモート・クライアント・コンピューターへエンコードされたグラフィクス・データーを伝送するように適合される、ステップと、
    前記第1の接続を介して前記複数のリモート・クライアント・コンピューターによるデーターを受信するステップと、
    前記受信されたデーターを処理することによって、表示コマンドを発行するステップと、
    前記第2の接続を介して前記複数のグラフィクス・デバイス前記表示コマンドを送信するステップであって、前記表示コマンドは、前記受信されたデーターに応答してアプリケーションによって発行され、前記アプリケーションは、前記複数のリモート・クライアント・コンピューターのうちのそれぞれのリモート・クライアント・コンピューターに対して割り当てられたリモート・セッションのランタイム環境内で実行される、ステップと、
    前記表示コマンドを用いてグラフィクス・データーを生成し、前記生成されたグラフィクス・データーを、前記複数のリモート・クライアント・コンピューターのそれぞれによって確立された前記同時の第3の接続を介して前記複数のリモート・クライアント・コンピューターへ送信するように、前記複数のグラフィクス・デバイスに命令するステップと、
    を実施させる、コンピューター読み取り可能記憶デバイス。
JP2014535969A 2011-10-14 2012-10-15 多数のサーバーからクライアントへの単一エンド・ユーザー体験の配信 Active JP6329484B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/274,041 US20130093776A1 (en) 2011-10-14 2011-10-14 Delivering a Single End User Experience to a Client from Multiple Servers
US13/274,041 2011-10-14
PCT/US2012/060169 WO2013056204A1 (en) 2011-10-14 2012-10-15 Delivering a single end user experience to a client from multiple servers

Publications (3)

Publication Number Publication Date
JP2014530441A JP2014530441A (ja) 2014-11-17
JP2014530441A5 JP2014530441A5 (ja) 2016-02-04
JP6329484B2 true JP6329484B2 (ja) 2018-05-23

Family

ID=47729315

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014535969A Active JP6329484B2 (ja) 2011-10-14 2012-10-15 多数のサーバーからクライアントへの単一エンド・ユーザー体験の配信

Country Status (6)

Country Link
US (2) US20130093776A1 (ja)
EP (1) EP2766817A4 (ja)
JP (1) JP6329484B2 (ja)
KR (1) KR101956411B1 (ja)
CN (1) CN102946409B (ja)
WO (1) WO2013056204A1 (ja)

Families Citing this family (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9626838B2 (en) * 2011-11-18 2017-04-18 Tms Global Services Pty Ltd Load balancing lottery system
US9503497B2 (en) * 2011-12-10 2016-11-22 LogMeln, Inc. Optimizing transfer to a remote access client of a high definition (HD) host screen image
US20130210522A1 (en) * 2012-01-12 2013-08-15 Ciinow, Inc. Data center architecture for remote graphics rendering
US8924972B2 (en) * 2012-09-27 2014-12-30 Oracle International Corporation Method and system for logging into a virtual environment executing on a host
TWI482118B (zh) * 2012-10-18 2015-04-21 Wistron Corp 處理圖形運算負載平衡之方法及系統
US9930082B2 (en) * 2012-11-20 2018-03-27 Nvidia Corporation Method and system for network driven automatic adaptive rendering impedance
EP2763038A3 (en) * 2013-02-01 2017-03-01 Samsung Electronics Co., Ltd Method and apparatus for processing multimedia content on a graphic cloud
US10021042B2 (en) * 2013-03-07 2018-07-10 Microsoft Technology Licensing, Llc Service-based load-balancing management of processes on remote hosts
US9781214B2 (en) * 2013-04-08 2017-10-03 Amazon Technologies, Inc. Load-balanced, persistent connection techniques
CN103209217A (zh) * 2013-04-23 2013-07-17 深圳市京华科讯科技有限公司 一种后端计算系统及后端计算处理方法
CN103248684B (zh) * 2013-04-28 2016-09-28 北京奇虎科技有限公司 一种互联网中资源获取方法和装置
US20140359612A1 (en) * 2013-06-03 2014-12-04 Microsoft Corporation Sharing a Virtual Hard Disk Across Multiple Virtual Machines
US20150012831A1 (en) * 2013-07-08 2015-01-08 Jacoh, Llc Systems and methods for sharing graphical user interfaces between multiple computers
US9819604B2 (en) 2013-07-31 2017-11-14 Nvidia Corporation Real time network adaptive low latency transport stream muxing of audio/video streams for miracast
US20150049095A1 (en) * 2013-08-16 2015-02-19 LEAP Computing, Inc. Method for Handling Virtual Machine Graphics Processing Requests
US20150049096A1 (en) * 2013-08-16 2015-02-19 LEAP Computing, Inc. Systems for Handling Virtual Machine Graphics Processing Requests
US10976986B2 (en) 2013-09-24 2021-04-13 Blackberry Limited System and method for forwarding an application user interface
US10115174B2 (en) * 2013-09-24 2018-10-30 2236008 Ontario Inc. System and method for forwarding an application user interface
US9412146B2 (en) * 2013-10-25 2016-08-09 Futurewei Technologies, Inc. System and method for distributed virtualization of GPUs in desktop cloud
CN104050013B (zh) * 2014-05-22 2018-08-10 中兴通讯股份有限公司 虚拟桌面处理方法、装置及虚拟桌面服务器
US9576332B1 (en) * 2014-06-02 2017-02-21 VCE IP Holding Company LLC Systems and methods for remote graphics processing unit service
US11283866B2 (en) 2014-07-07 2022-03-22 Citrix Systems, Inc. Providing remote access to applications through interface hooks
US11310312B2 (en) 2014-07-07 2022-04-19 Citrix Systems, Inc. Peer to peer remote application discovery
CN104468741B (zh) * 2014-11-21 2019-01-25 中兴通讯股份有限公司 云桌面的处理方法及装置
CN104580496B (zh) * 2015-01-22 2018-04-13 深圳先进技术研究院 一种基于临时代理的虚拟机访问系统及服务器
EP3271816A4 (en) * 2015-03-18 2018-12-05 Intel Corporation Apparatus and method for software-agnostic multi-gpu processing
WO2016191908A1 (en) * 2015-05-29 2016-12-08 Intel Corporation Container access to graphics processing unit resources
TWI592874B (zh) * 2015-06-17 2017-07-21 康齊科技股份有限公司 網路伺服系統
US10304153B2 (en) * 2016-11-07 2019-05-28 Vmware, Inc. Virtual machine graphic resource usage
US11153322B2 (en) * 2017-01-23 2021-10-19 Hysolate Ltd. Techniques for seamlessly launching applications in appropriate virtual machines
US10699003B2 (en) 2017-01-23 2020-06-30 Hysolate Ltd. Virtual air-gapped endpoint, and methods thereof
US11150936B2 (en) 2017-01-23 2021-10-19 Hysolate Ltd. Techniques for binding user identities to appropriate virtual machines with single sign-on
US10860342B2 (en) * 2017-01-30 2020-12-08 Citrix Systems, Inc. Computer system providing cloud-based session prelaunch features and related methods
US11587196B2 (en) * 2017-04-10 2023-02-21 Dell Products L.P. Information handling system remote desktop protocol selection
US11237872B2 (en) * 2017-05-23 2022-02-01 Kla-Tencor Corporation Semiconductor inspection and metrology systems for distributing job among the CPUs or GPUs based on logical image processing boundaries
US10303522B2 (en) * 2017-07-01 2019-05-28 TuSimple System and method for distributed graphics processing unit (GPU) computation
CN109410299B (zh) * 2017-08-15 2022-03-11 腾讯科技(深圳)有限公司 一种信息处理方法、装置和计算机存储介质
CN108268307A (zh) * 2018-01-07 2018-07-10 长沙曙通信息科技有限公司 一种新型桌面虚拟化虚拟机热迁移实现方法
CA3097526A1 (en) * 2018-05-04 2019-11-07 Citrix Systems, Inc. Computer system providing hierarchical display remoting optimized with user and system hints and related methods
KR102546633B1 (ko) * 2018-06-08 2023-06-22 한국전자통신연구원 하드웨어 기반의 gpu를 이용한 가상 머신의 화면 전송 방법 및 이를 이용한 장치
CN110442389B (zh) * 2019-08-07 2024-01-09 北京技德系统技术有限公司 一种多桌面环境共享使用gpu的方法
CN110764901B (zh) * 2019-09-17 2021-02-19 创新先进技术有限公司 基于gpu资源的数据处理方法、电子设备及系统
US11775353B2 (en) * 2019-10-23 2023-10-03 Schlumberger Technology Corporation Mapping workloads to cloud infrastructure
US11803940B2 (en) 2019-10-23 2023-10-31 Schlumberger Technology Corporation Artificial intelligence technique to fill missing well data
CN113485780B (zh) * 2021-07-22 2022-04-29 辽宁向日葵教育科技有限公司 一种基于web服务器的桌面传输方法
US12019944B2 (en) * 2021-12-14 2024-06-25 Htc Corporation Method for operating mirrored content under mirror mode and computer readable storage medium

Family Cites Families (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6738817B1 (en) * 2000-05-18 2004-05-18 International Business Machines Corporation System and method for enabling graphic applications in an interactive programming model
US20060288212A1 (en) * 2001-03-20 2006-12-21 Gutenberg Printing Llc Transparent user and session management for web applications
US6950847B2 (en) * 2001-07-12 2005-09-27 Sun Microsystems, Inc. Service provider system for delivering services in a distributed computing environment
US7590710B1 (en) * 2004-06-17 2009-09-15 Wavetrix, Inc. Method and system for extending a communication port via a general purpose network
US20060098645A1 (en) * 2004-11-09 2006-05-11 Lev Walkin System and method for providing client identifying information to a server
US20060132489A1 (en) * 2004-12-21 2006-06-22 Hewlett-Packard Development Company, L.P. Remote computing
US8499028B2 (en) * 2005-02-23 2013-07-30 International Business Machines Corporation Dynamic extensible lightweight access to web services for pervasive devices
US7650603B2 (en) * 2005-07-08 2010-01-19 Microsoft Corporation Resource management for virtualization of graphics adapters
CN101346696B (zh) * 2005-12-28 2013-10-02 国际商业机器公司 负荷分散型客户机服务器系统及负荷分散方法
US20070174429A1 (en) * 2006-01-24 2007-07-26 Citrix Systems, Inc. Methods and servers for establishing a connection between a client system and a virtual machine hosting a requested computing environment
US8127304B2 (en) * 2006-05-31 2012-02-28 Rocket Software, Inc. Mapping and communicating data from a user interface to an application program
US8413160B2 (en) * 2006-06-22 2013-04-02 American Express Travel Related Services Company, Inc. Systems, methods, and computer program products for transaction based load balancing
US8140610B2 (en) * 2007-05-31 2012-03-20 Microsoft Corporation Bitmap-based display remoting
EP2224337A3 (en) * 2007-09-12 2011-03-30 Citrix Systems, Inc. Methods and systems for generating desktop environments providing integrated access to remote and local resources
US8583831B2 (en) * 2007-10-05 2013-11-12 Samsung Electronics Co., Ltd. Thin client discovery
US8553028B1 (en) * 2007-10-29 2013-10-08 Julian Michael Urbach Efficiently implementing and displaying independent 3-dimensional interactive viewports of a virtual world on multiple client devices
WO2011065929A1 (en) * 2007-11-23 2011-06-03 Mercury Computer Systems, Inc. Multi-user multi-gpu render server apparatus and methods
US8433747B2 (en) * 2008-02-01 2013-04-30 Microsoft Corporation Graphics remoting architecture
KR101178752B1 (ko) * 2008-02-26 2012-09-10 브이엠웨어, 인코포레이티드 서버-기반 데스크탑 가상 머신 아키텍처의 클라이언트 머신들로의 확장
US8539565B2 (en) * 2008-03-21 2013-09-17 Microsoft Corporation Load balancing in server computer systems
JP5282447B2 (ja) * 2008-05-29 2013-09-04 ソニー株式会社 情報処理装置、情報処理方法、プログラムおよび情報処理システム
US20100013839A1 (en) * 2008-07-21 2010-01-21 Rawson Andrew R Integrated GPU, NIC and Compression Hardware for Hosted Graphics
US20100115510A1 (en) * 2008-11-03 2010-05-06 Dell Products, Lp Virtual graphics device and methods thereof
US8250182B2 (en) * 2008-11-30 2012-08-21 Red Hat Israel, Ltd. Dynamic loading between a server and a client
US8180905B2 (en) * 2008-12-09 2012-05-15 Microsoft Corporation User-mode based remote desktop protocol (RDP) encoding architecture
US8291414B2 (en) * 2008-12-11 2012-10-16 International Business Machines Corporation Shared resource service provisioning using a virtual machine manager
US9740517B2 (en) * 2008-12-29 2017-08-22 Microsoft Technology Licensing, Llc Dynamic virtual machine memory management
US8881109B1 (en) * 2009-01-22 2014-11-04 Intuit Inc. Runtime documentation of software testing
US8438624B2 (en) * 2009-03-03 2013-05-07 Hewlett-Packard Development Company, L.P. Systems and methods of modifying system resources
US20100226441A1 (en) * 2009-03-06 2010-09-09 Microsoft Corporation Frame Capture, Encoding, and Transmission Management
US8307103B2 (en) * 2009-03-09 2012-11-06 Microsoft Corporation Tear-free remote desktop protocol (RDP) display
US8189661B2 (en) * 2009-03-09 2012-05-29 Microsoft Corporation Remote desktop protocol (RDP) tile image classification for improving compression efficiency and quality
US9529636B2 (en) * 2009-03-26 2016-12-27 Microsoft Technology Licensing, Llc System and method for adjusting guest memory allocation based on memory pressure in virtual NUMA nodes of a virtual machine
US20140082511A1 (en) * 2009-03-31 2014-03-20 Yubitech Technologies Ltd. Method and system for emulating desktop software applications in a mobile communication network
US8856783B2 (en) * 2010-10-12 2014-10-07 Citrix Systems, Inc. Allocating virtual machines according to user-specific virtual machine metrics
US9152401B2 (en) * 2009-05-02 2015-10-06 Citrix Systems, Inc. Methods and systems for generating and delivering an interactive application delivery store
US8150971B2 (en) * 2009-05-31 2012-04-03 Red Hat Israel, Ltd. Mechanism for migration of client-side virtual machine system resources
US8281018B2 (en) * 2009-06-22 2012-10-02 Red Hat Israel, Ltd. Method for automatically providing a client with access to an associated virtual machine
US8429652B2 (en) * 2009-06-22 2013-04-23 Citrix Systems, Inc. Systems and methods for spillover in a multi-core system
WO2011002946A1 (en) * 2009-06-30 2011-01-06 Citrix Systems, Inc. Methods and systems for selecting a desktop execution location
US8743130B2 (en) * 2009-08-28 2014-06-03 Zynga Inc. Apparatuses, methods and systems for a distributed object renderer
US9092249B2 (en) * 2009-09-11 2015-07-28 Citrix Systems, Inc. Remote rendering of three-dimensional images using virtual machines
US7934983B1 (en) * 2009-11-24 2011-05-03 Seth Eisner Location-aware distributed sporting events
US8392497B2 (en) * 2009-11-25 2013-03-05 Framehawk, LLC Systems and algorithm for interfacing with a virtualized computing service over a network using a lightweight client
US9137338B2 (en) * 2010-01-22 2015-09-15 Microsoft Technology Licensing, Llc Multi-link remote protocol
US8504694B2 (en) * 2010-03-08 2013-08-06 Microsoft Corporation Remote content classification and transmission using multiple transport channels
US8312471B2 (en) * 2010-04-26 2012-11-13 Vmware, Inc. File system independent content aware cache

Also Published As

Publication number Publication date
KR20140079402A (ko) 2014-06-26
JP2014530441A (ja) 2014-11-17
CN102946409A (zh) 2013-02-27
US20130093776A1 (en) 2013-04-18
KR101956411B1 (ko) 2019-06-24
EP2766817A1 (en) 2014-08-20
US11029990B2 (en) 2021-06-08
WO2013056204A1 (en) 2013-04-18
EP2766817A4 (en) 2015-05-13
US20190196858A1 (en) 2019-06-27
CN102946409B (zh) 2018-05-08

Similar Documents

Publication Publication Date Title
US11029990B2 (en) Delivering a single end user experience to a client from multiple servers
EP2622461B1 (en) Shared memory between child and parent partitions
US9742876B2 (en) Span out load balancing model
KR101782342B1 (ko) 가상 스토리지 타겟 오프로드 기법
US9916175B2 (en) Multi-session zero client device and network for transporting separated flows to device sessions via virtual nodes
JP6072018B2 (ja) ウェブ・ブラウザ・ベースのデスクトップおよびアプリケーション・リモート・ソリューション
EP1896943B1 (en) Offload stack for network, block and file input and output
US20170323418A1 (en) Virtualized gpu in a virtual machine environment
US20110153715A1 (en) Lightweight service migration
US20090083829A1 (en) Computer system
US20110153716A1 (en) Enabling virtual desktop connections to remote clients
US20100257269A1 (en) Method and System for Migrating Processes Between Virtual Machines
US20110153838A1 (en) Session monitoring of virtual desktops in a virtual machine farm
WO2016177079A1 (zh) 云桌面资源的处理方法及装置
US8813252B2 (en) Request based license mode selection
CN111602118A (zh) 实现虚拟机的音频,视频和控制系统
US11487572B1 (en) Migration of cloud-based software application
Wan et al. Design ideas of mobile internet desktop system based on virtualization technology in cloud computing
Ellrod Optimizing Citrix® XenDesktop® for High Performance
Kumarasan Continuous and Concurrent Network Connection for Hardware Virtualization
Bugnion The Future of Virtual Machines: A VMware Perspective

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20150528

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20151015

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151208

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20161019

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20161101

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170201

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170803

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20180323

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180420

R150 Certificate of patent or registration of utility model

Ref document number: 6329484

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250