説明

プロセッサコアのハイパーバイザ離隔

プロセッサコアを利用するための技法は、オペレーティングシステムから独立的に使用するためにプロセッサコアを隔離することを含む。本発明の少なくとも1つの実施形態において、方法は、コンピュータシステムの複数のコアのうちの1つ以上のコアを含む、第1のサブセットのコア上でオペレーティングシステムを実行することを含む。オペレーティングシステムは、仮想マシンモニタの制御下でゲストとして実行する。本方法は、複数のコアのうちの1つ以上のコアを含む第2のサブセットのコア上でアプリケーションのための作業を実行することを含む。第1および第2のサブセットのコアは、相互に排他的であり、第2のサブセットのコアは、オペレーティングシステムに可視的ではない。少なくとも1つの実施形態において、本方法は、オペレーティングシステムから第2のサブセットのコアを隔離することを含む。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピュータシステムに関し、より具体的には、マルチコアコンピュータシステムに関する。
【背景技術】
【0002】
一般に、コンピューティングシステム内部に含まれる中央処理装置(CPU)コア(すなわち、プロセッサコア)および/またはプロセッサの数が、急速に増加している。図1を参照すると、例示的なコンピューティングシステム100は、複数のプロセッサ102を含み、それらの各々が、1つ以上のプロセッサコア(例えば、プロセッサコア104)を含む。プロセッサ102は、1つ以上のハブ集積回路(例えば、メモリコントローラハブおよびI/Oコントローラハブ)、バス(例えば、PCIバス、ISAバス、およびSMバス)、他の好適な通信インターフェース、またはこれらの組み合わせによって、他のプロセッサ102、メモリ106、デバイス108、およびストレージ110に連結される。オペレーティングシステム(例えば、Microsoft Windows(登録商標)、Linux(登録商標)、およびUNIX(登録商標))は、ハードウェアとユーザ(すなわちコンピューティングアプリケーション、例えば、アプリケーション114)との間にインターフェースを提供する。オペレーティングシステム112の実行は、複数のコア104に分散される場合がある。
【0003】
コンピューティングシステムは複数のプロセッサコアを含むが、典型的なコンピューティングシステムは、全てのプロセッサコアを利用すること、または全てのプロセッサコアを効率的に利用することができない場合がある。例えば、オペレーティングシステムは、限定された数のCPUコアにのみアクセスしかつ制御することができ、コンピューティングシステムの中の他のコアがアイドリング状態のままになる場合がある。
【発明の概要】
【0004】
したがって、プロセッサコアを利用するための技法は、オペレーティングシステムから独立的に使用するためにプロセッサコアを隔離(sequester)することを含む。本発明の少なくとも1つの実施形態において、本方法は、コンピュータシステムの複数のコアのうちの1つ以上のコアを含む、第1のサブセットのコア上でオペレーティングシステムを実行することを含む。オペレーティングシステムは、仮想マシンモニタの制御下でゲストとして実行する。本方法は、複数のコアのうちの1つ以上のコアを含む第2のサブセットのコア上でアプリケーションのための作業を実行することを含む。第1および第2のサブセットのコアは、相互に排他的であり、第2のサブセットのコアは、オペレーティングシステムに可視的ではない。少なくとも1つの実施形態において、本方法は、オペレーティングシステムから第2のサブセットのコアを隔離することを含む。本方法の少なくとも1つの実施形態において、第2のサブセットのコアを隔離することは、共有システムメモリの一部分を第2のセットのコア専用にすることを含む。本方法の少なくとも1つの実施形態において、アプリケーションは、オペレーティングシステムの外部にありかつオペレーティングシステムから独立した、第2のサブセットのコア上で実行する。本方法の少なくとも1つの実施形態において、アプリケーションは、オペレーティングシステム上で実行中であり、コアのうちの第2のサブセットのコアは、コンピューティングアクセラレータとして構成される。本方法の少なくとも1つの実施形態において、アプリケーションは、仮想マシンモニタを介して、第2のサブセットのコアに間接的にアクセスする。少なくとも1つの実施形態において、本方法は、オペレーティングシステム上で実行しているドライバに、利用可能なコンピューティングアクセラレータに関する情報を提供することを更に含む。少なくとも1つの実施形態において、本方法は、コンピューティングアクセラレータのターゲットアクセラレータによって完了されるべき作業をスケジュールすることを含む。本方法の少なくとも1つの実施形態において、実行することは、アプリケーションの利益のために、コンピューティングアクセラレータによって完了されるべき作業をリクエストすることと、オペレーティングシステムに完了した作業を示すことと、作業項目によって生成されるページフォールトを処理することとを含む。少なくとも1つの実施形態において、本方法は、第2のセットのコアによって、オペレーティングシステムによって提供されるアプリケーションプログラムインターフェースにアクセスすることを更に含む。本方法の少なくとも1つの実施形態において、アプリケーションプログラムインターフェースは、オペレーティングシステムメモリ割り当てルーチン、および例外処理ルーチンのうちの1つである。
【0005】
本発明の少なくとも1つの実施形態において、装置は、複数のコアと、複数のコアにアクセス可能である、1つ以上の媒体の中にエンコードされたオペレーティングシステムソフトウェアとを含む。本装置は、複数のコアにアクセス可能かつ複数のコアのうちの1つ以上で実行可能である、1つ以上の媒体の中にエンコードされたハイパーバイザソフトウェアを含む。ハイパーバイザソフトウェアは、複数のコアのうちの1つ以上のコアを含む、第1のセットのコア上のゲストとしてオペレーティングシステムソフトウェアの実行を制御し、複数のコアのうちの1つ以上のコアを含む、第2のセットのコア上でアプリケーションの少なくとも何らかの作業を実行するように実行可能である。第2のセットのコアは、オペレーティングシステムに可視的ではない。本装置の少なくとも1つの実施形態において、ハイパーバイザソフトウェアは、オペレーティングシステムから第2のセットのコアを離隔するように、複数のコア上で実行可能なコードを含み、第1および第2のセットは、相互に排他的である。少なくとも1つの実施形態において、本装置は、複数のコアによって共有される共有システムメモリを更に含む。少なくとも1つの実施形態において、本装置は、第1のセットのコアにアクセス可能である、1つ以上の媒体の中にエンコードされたアクセラレーテッドコンピューティングドライバを更に含み、アクセラレーテッドコンピューティングドライバは、第2のセットのコアに、アプリケーションの作業をスケジュールするように構成される。少なくとも1つの実施形態において、本装置は、アプリケーションと第2のセットのコアとの間の通信のための少なくとも1つのキューを更に含む。本装置の少なくとも1つの実施形態において、少なくとも1つのキューは、アクセラレーテッドコンピューティングドライバからハイパーバイザに通信するように構成されるコマンドキューと、ハイパーバイザからアクセラレーテッドコンピューティングドライバに通信するように構成される応答キューと、ハイパーバイザからアクセラレーテッドコンピューティングドライバに通信するように構成されるフォールトキューと、アクセラレーティングコンピューティングアプリケーションプログラムインターフェースからハイパーバイザに通信するように構成される作業キューとを含む。少なくとも1つの実施形態において、本装置は、第1のセットのコアにアクセス可能である、1つ以上の媒体にエンコードされたアクセラレーテッドコンピューティングアプリケーションプログラムインターフェースを更に含む。少なくとも1つの実施形態において、本装置は、複数のコアにアクセス可能である、1つ以上の媒体の中にエンコードされたアプリケーションソフトウェアを更に含む。ここで、ハイパーバイザソフトウェアは、第1のセットのコア上でのオペレーティングシステムの実行とは独立的に、第2のセットのコア上でハイパーバイザの制御下でアプリケーションソフトウェアを実行するように、複数のコア上で実行可能であるコードを含む。少なくとも1つの実施形態において、本装置は、オペレーティングシステム上で実行可能である複数のコアにアクセス可能である、1つ以上の媒体の中にエンコードされたアプリケーションソフトウェアを更に含み、ここで、ハイパーバイザソフトウェアは、コンピューティングアクセラレータとして第2のセットのコアを構成するように実行可能であるコードと、第2のセットのコア上でアプリケーションソフトウェアのための作業を実行するためのコードとを含む。
【0006】
本発明の少なくとも1つの実施形態では、コンピュータプログラム製品は、1つ以上の機能シーケンスを含む。該機能シーケンスは、仮想マシンモニタとして、またはこれと連携して実行可能で、かつ複数のコアのうちの1つ以上のコアを含む第1のセットのコア上で仮想マシンモニタの制御下でゲストとしてオペレーティングシステムシーケンスを実行するように構成される。コンピュータプログラム製品は、複数のコアのうちの1つ以上のコアを含む第2のセットのコア上でアプリケーションの少なくとも何らかの作業を実行するように、1つ以上の機能シーケンスを含む。第2のセットのコアは、オペレーティングシステムに可視的ではない。コンピュータプログラム製品の少なくとも1つの実施形態において、1つ以上の機能シーケンスは、第1のセットのコア上のオペレーティングシステムの実行とは独立的に、第2のセットのコア上で前記仮想マシンモニタの制御下でアプリケーションシーケンスを実行するように構成される。コンピュータプログラム製品の少なくとも1つの実施形態において、1つ以上の機能シーケンスは、オペレーティングシステムコードから第2のセットのコアを隔離し、第2のセットのコア上でアプリケーションコード作業を実行するためのコンピューティングアクセラレータとして、第2のセットのコアを構成するように構成される。コンピュータプログラム製品の少なくとも1つの実施形態において、コンピュータプログラム製品は、ディスク、テープ、あるいは他の磁気、光学式、または電子ストレージ媒体の群から選択される、少なくとも1つのコンピュータ可読媒体の中にエンコードされる。
【図面の簡単な説明】
【0007】
本発明は、添付の図面を参照することにより、より完全に理解され、その多数の目的、機能、および利点が当業者に明らかになり得る。
【図1】例示的なマルチコアコンピューティングシステムの機能ブロック図を例示する。
【図2】例示的な仮想化システムの機能ブロック図を例示する。
【図3】本発明の少なくとも1つの実施形態による、例示的な仮想化システムの機能ブロック図を示す。
【図4】本発明の少なくとも1つの実施形態による、デファクトアクセラレータとして構成された隔離されたプロセッサコアを備える、図3の仮想化システム上で実行する例示的な仮想マシンモニタの機能ブロック図を例示する。
【図5】本発明の少なくとも1つの実施形態による、デファクトアクセラレータとして構成された隔離されたプロセッサコアを備える、図3の仮想化システムの例示的情報および制御フローを例示する。
【図6】本発明の少なくとも1つの実施形態による、デファクトアクセラレータとして構成された隔離されたプロセッサコアを備える、図3の仮想化システムの中の作業ユニット処理フローの例示的情報および制御フローを例示する。
【図7】本発明の少なくとも1つの実施形態による、デファクトアクセラレータとして構成された隔離されたプロセッサコアを備える、図3の仮想化システムの中の作業ユニットページフォールト処理の例示的情報および制御フローを例示する。
【図8】本発明の少なくとも1つの実施形態による、デファクトアクセラレータとして構成された隔離されたプロセッサコアを備える、図3の仮想化システムの作業ユニットコマンド完了の例示的情報および制御フローを例示する。
【図9】本発明の少なくとも1つの実施形態による、インスタントオンアプリケーション用途に構成される、図3の仮想化システムの情報および制御フローを例示する。 異なる図面の同一参照記号の使用は、類似または同一の項目を示す。
【発明を実施するための形態】
【0008】
図2を参照すると、コンピューティングシステムの仮想化は、ユーザ(すなわち、コンピューティングシステム上で実行しているソフトウェア)からコンピューティングシステムの物理的特徴を隠すために使用され、その代わりに、抽象エミュレートされたコンピューティングシステム(すなわち、仮想マシン(VM))をユーザに提示する。コンピューティングシステム100の物理的ハードウェアリソースは、1つ以上の対応する離隔され、独立しているように見える、仮想マシン(例えば、VM204)として、1つ以上のゲスト(例えば、ゲスト206)に公開される。例えば、仮想マシンは、仮想マシンモニタ(VMM)(すなわち、ハイパーバイザ、例えば、VMM202)が仮想マシンに割り当てる、1つ以上の仮想リソース(例えば、VCPU、VMEMORY、およびVDEVICE)を含む場合があり、該仮想リソースは、コンピューティングシステム100の物理的リソースによって実装される。
【0009】
本明細書に使用される場合、「仮想マシンモニタ」(VMM)または「ハイパーバイザ」は、仮想化能力を提供するソフトウェアである。VMMは、ゲストソフトウェアと物理的リソースとの間のインターフェースを提供する。典型的に、VMMは、コンピュータシステム全体(すなわち、メモリ、中央演算装置(CPU)、およびすべての周辺機器)にわたる全ての制御の状況を各ゲストに提供する。タイプ1(すなわち、ネイティブ)のVMMは、物理的リソース上で実行するスタンドアロン型のソフトウェアプログラムであり、1つ以上のゲストに仮想化を提供する。ゲストオペレーティングシステムは、VMMより上位のレベルで実行する。タイプ2(すなわち、ホストされる)VMMは、オペレーティングシステムに統合、またはオペレーティングシステム上で実行し、オペレーティングシステムのコンポーネントは、物理的リソース上で直接実行し、VMMによって仮想化されない。VMMは、個別のソフトウェアレイヤと考えられ、ゲストオペレーティングシステムは、ハードウェアより上位の第3のソフトウェアレベル上で実行する場合がある。以下の説明では、例示的なタイプ1のVMMに言及するが、本明細書に記載の技法は、タイプ2のVMMの中に実装されてもよい。
【0010】
図2を再び参照すると、VM204が仮想マシン204の仮想リソースにわたる全ての制御を有し、一方でVMM202が物理的リソースにわたる制御を保つ。ゲストシステム、例えば、オペレーティングシステム(例えば、Windows(登録商標)、Linux(登録商標)、およびUNIX(登録商標))のインスタンスは、対応する仮想マシン上で実行し、他の仮想マシン上で実行している他のゲストシステムと物理的リソースを共有する。このように、複数のオペレーティングシステム(例えば、同じオペレーティングシステムの複数のインスタンス、または異なるオペレーティングシステムのインスタンス)は、同じコンピューティングシステム上に共存することができるが、相互に離隔状態にある。
【0011】
VMM202は、物理的リソース内のいくつか、または全てのプロセッサコアによって実行される。個々のゲストは、物理的リソースに含まれるプロセッサコアのセットによって実行される。プロセッサは、VMM202の実行と、1つ以上のゲスト206の実行との間を切り替える。本明細書に使用される場合、「ワールド切り替え」は、ゲストの実行とVMMの実行との間の切り替えである。概して、ワールド切り替えは、VMMCALL命令によって、または他の好適な技法、例えば、割り込みメカニズムまたは以下に記載の制御ブロックによって定義される所定の命令によって、起動される場合がある。特定のワールド切り替えは、本明細書において、特定の技法を使用して起動されると記載される場合があるが、他の好適な技法が使用されてもよい。ワールド切り替えの間、現在のプロセッサコア環境(例えば、ゲストまたはVMM)は、その状態情報を保存し、プロセッサコア実行が切り替えられる先である、ターゲットコア環境(例えば、VMMまたはゲスト)のための状態情報を復元する。例えば、VMMは、実行がスケジュールされていたゲストをVMMが実行する際、ワールド切り替えを実行する。同様に、ゲストの実行からVMMの実行へのワールド切り替えは、VMMが物理的リソース全体の制御を実施する場合、例えば、ゲストが物理的デバイスにアクセスしようとする場合、メモリの新しいページがゲストに割り当てられようとする際、またはVMMが別のゲストをスケジュールする時間である場合等に行われる。
【0012】
仮想化技法は、ソフトウェア(ファームウェアを含む)のみを使用して、またはソフトウェアおよびハードウェアの組み合わせによって、実装される場合がある。例えば、いくつかのプロセッサは、仮想化ハードウェアを含み、これによって、VMMコードの簡素化を可能にし、完全な仮想化のためのシステム性能を向上させる(例えば、AMD−VおよびIntel VT−xによって提供される仮想化のためのハードウェア拡張)。ソフトウェアは、本明細書に使用される場合、ディスク、テープ、あるいは他の磁気、光学、または電子記憶媒体の群から選択される少なくとも1つのコンピュータ可読媒体の中にエンコードすることができる。
【0013】
仮想化技法は、VMMの制御下で、コンピュータシステムの1つ以上の他の処理中のコア上でゲストとして実行しているオペレーティングシステムから、コンピューティングシステムの1つ以上のプロセッサコアを離隔または隔離するために使用することができる。仮想化システムの少なくとも1つの実施形態において、隔離されたコアは、デファクトアクセラレータとして構成される場合がある。すなわち、隔離されたコアは、オペレーティングシステム環境内から起動された作業を完了するために、VMMによって使用される。ホストコアおよび隔離されたコアは、共有メモリ環境内に存在するが、隔離されたコアは、オペレーティングシステムによって直接管理されない。VMMは、隔離されたコアとホストコアとの間の通信のための伝達媒体として構成される。例示的なVMMは、共有メモリ空間内に実装されたキューベースのアーキテクチャを使用して、作業リクエスト、ページフォールト、および完了情報を伝播するためのメモリベースのソリューションを実装する。計算作業は、ゲストオペレーティングシステムの範囲内で起動することができる。VMMは、次いで、オペレーティングシステムと隔離されたコアとの間の作業を調整する。したがって、VMMは、汎用計算加速を実装するために使用することができる。VMMおよび隔離されたコアは、インスタントオンアプリケーション用途を実装するために使用することができる。更に、VMMは、隔離されたコアをネットワークデバイスアクセラレータとして構成するために使用することができる。
【0014】
ゲストオペレーティングシステムによって使用されるコア(すなわち、ホストコア)の数は、選択可能であってもよい。例えば、ホストコアの数は、特定のゲストオペレーティングシステムが利用することが可能なコアの最大数の場合がある。しかしながら、仮想システムの少なくとも1つの実施形態において、ゲストオペレーティングシステムによって使用されるコアの数は、それに限定されず、システムは、コアの最大数未満である、オペレーティングシステムのためのコアの所定の数で構成されてもよい。
【0015】
図3を参照すると、例示的コンピューティングシステム400は、VMM402を含む。VMM402は、分断アーキテクチャをエミュレートし、すなわち、VMM402は、アプリケーションまたはアプリケーションタスクを実行するためにコアを隔離する。少なくとも1つの実施形態において、VMM402は、コア404からコア406を隔離する。少なくとも1つの実施形態において、VMM402は、ホストコア404および隔離されたコア406に別々の仮想メモリ空間を割り当てる。少なくとも1つの実施形態において、VMM402は、ホストコア404および隔離されたコア406に共有仮想メモリ空間を割り当てる。共有仮想メモリ空間を実装するための技法は、2010年12月29日に、Patryk Kaminski、Thomas Woller、Keith Lowery、およびErich Boleynの名を発明者として出願された米国特許出願第12/648,550号、名称「SYSTEMS AND METHODS IMPLEMENTING NON−SHARED PAGE TABLES FOR SHARING MEMORY RESOURCES MANAGED BY A MAIN OPERATING SYSTEM WITH ACCELERATOR DEVICES」、ならびに2009年12月29日に、Patryk Kaminski、Thomas Woller、Keith Lowery、およびErich Boleynの名を発明者として出願された米国特許出願第12/648,556号、名称「SYSTEMS AND METHODS IMPLEMENTING SHARED PAGE TABLES FOR SHARING MEMORY RESOURCES MANAGED BY A MAIN OPERATING SYSTEM WITH ACCELERATOR DEVICES」に記載される。
【0016】
少なくとも1つの実施形態において、VMM402は、ホストコア404上のゲストの実行のための状態および制御情報、ならびに隔離されたコア406上の作業ユニットの実行のための状態および制御情報のセットを含む、制御ブロックのセットを保持する。少なくとも1つの実施形態において、これらの制御ブロックは、仮想マシン制御ブロック(VMCB)として知られる。各ゲストおよびデファクトアクセラレータは、対応する制御ブロックと関連付けることができる。例示的な制御ブロックは、ホストハードウェアのメモリおよび/またはストレージの中に記憶され、対応するゲストまたはデファクトアクセラレータのための状態および制御情報、ならびに/あるいはVMMのための状態および制御情報を含む。例えば、制御ブロックは、ゲストが最後に終了した時点でのコア状態に対応する状態情報を含む。例示的な制御ブロックは、特定の命令によってアクセスされてもよく、情報は、所定のデータ構造の特定のフィールドの中に記憶されてもよい。
【0017】
コンピューティングシステム400の少なくとも1つの実施形態において、VMM402は、デファクトアクセラレータとして使用するために少なくとも1つのコア(例えば、隔離されたコア406)を離隔させるように構成される。オペレーティングシステム408(例えば、Microsoft Windows(登録商標))は、ホストコア404(例えば、X86コア)上でゲストとして実行し、アプリケーション414は、オペレーティングシステム408上で実行する。オペレーティングシステム408上で実行する、カーネルモードドライバ410は、VMM402と情報を交換して、デファクトアクセラレータへの間接的アクセスをユーザアプリケーション414に提供する。ゲストオペレーティングシステムは、例えば、呼び出しを使用して、カーネルモデルドライバ410を使用して隔離されたコア406を利用する場合がある。VMM402とゲストオペレーティングシステム408との間、およびVMM402とデファクトアクセラレータとの間の通信は、共有仮想メモリの中でキュー(例えば、作業キュー424、コマンドキュー418、フォールトキュー422、および応答キュー420)を使用して実現される。
【0018】
スケジューラ416は、作業項目が利用可能な分離されたコア406に分散される、スレッドプールを含む。スケジューラ416の少なくとも1つの実施形態において、作業ユニットは、ラウンドロビンスケジューリングを使用して有効な分離されたコアに割り当てられるが、しかしながら、他の好適なスケジューリングアルゴリズム(例えば、動的優先スケジューリング等)がスケジューラ416の他の実施形態で使用されてもよい。コンピューティングシステム400の少なくとも1つの実施形態において、スケジューラ416は、ユーザモードスケジューラであり、スケジューリングがオペレーティングシステムとは別に実施されることを可能にする。しかしながら、コンピューティングシステム400の少なくとも1つの実施形態において、スケジューラ416は、カーネルモードスケジューラであり、オペレーティングシステムのカーネルレベル部分の変更が必要となる。コンピューティングシステム400の少なくとも1つの実施形態において、スケジューラ416の機能のうちの少なくとも何らかは、VMM402によって実施され、および/またはスケジューラ416の機能のうちの少なくとも何らかは、カーネルモードドライバ410によって実施される。VMM402は、カーネルモードドライバ410に対して可視的である、情報または制御構造の中に関連のトポロジおよびアーキテクチャ情報を保持する。VMM402は、少なくとも、利用可能なデファクトアクセラレータに関する情報をカーネルモードドライバ410に提供する。
【0019】
コンピューティングシステム400の少なくとも1つの実施形態において、フォールトキュー422、コマンドキュー418、応答キュー420、および作業キュー424は、共有仮想メモリ空間の中に実装される。これらのキューの全ては、オペレーティングシステムアクセス(例えば、カーネルモードアクセス)を必要とする。コンピューティングシステム400の少なくとも1つの実施形態において、キューは、作成中アプリケーションの処理コンテキストの外部からアクセス可能でなければならない。したがって、オペレーティングシステム408は、メモリ翻訳を提供しなければならない。作業キューのみがユーザモードアクセスを必要とする。少なくとも1つの実施形態において、キュー418、420、422、および424は、非ロック実装を使用し、単一の読出者および単一の書込者のために構成される。仮想マシンモニタ402は、フォールトキュー422および応答キュー420にキューを加える。カーネルモードドライバ410は、フォールトキュー422および応答キュー420からキューを取り出す。カーネルモードドライバ410は、コマンドキュー418にキューを加え、VMM402は、コマンドキュー418からキューを取り出す。アプリケーション414は、作業キュー424にキューを加える。VMM402および/またはカーネルモードドライバ410を使用して実装することができる、スケジューラ416は、作業キュー424からキューを取り出す。
【0020】
コンピューティングシステム400の少なくとも1つの実施形態において、アプリケーション414は、キューアプリケーションプログラムインターフェース(API)412を呼び出して、キューインターフェースを起動する。キューAPI412は、カーネルモードドライバ410をインスタンス化し、文書化された入力/出力制御(ioctl)呼び出しを行って、キューを割り当てる。上記のように、カーネルモードドライバ410は、ioctlコマンドを受信し、適当なエンティティ(例えば、VMM402およびカーネルモードドライバ410)によって読み出される、または書き込まれる場合がある、キューを割り当てる。カーネルモードドライバ410は、作業キュー424をアドレス空間に関連付ける、内部作業テーブルを作成する。カーネルモードドライバ410はまた、ページテーブルも作成し、デファクトアクセラレータにスタックを割り当てる。カーネルモードドライバ410は、カーネルモードスレッドを作成し、更にアプリケーション414によって使用される作業キュー424へのポインタを返す。
【0021】
コンピューティングシステム400の少なくとも1つの実施形態において、キューを処理するためにポーリング技法が使用される。コンピューティングシステム400の少なくとも1つの実施形態において、ポーリング技法を使用する代わりに、VMM402とゲストオペレーティングシステム408との間、およびVMM402とデファクトアクセラレータとして構成された隔離されたコア406との間の通信は、ドアベル技法を使用して実現される。概して、キューへのいずれの書込者(例えば、カーネルモードドライバ410、キューAPI412、またはVMM402)もドアベルを鳴らして、受信者(例えば、カーネルモードドライバ410またはVMM402)に、利用可能なキュー項目を通知する。コンピューティングシステムの少なくとも1つの実装において、VMM402は、特定のキューに対するドアベルとして機能するVMM呼び出しをサポートする。新しいエントリを含むキューを示す情報、および/または他の好適な情報は、VMM呼び出しのパラメータの中に含まれる。更に、VMM402は、ソフトウェア割り込みを発行することによって、カーネルモードドライバ410のドアベルを鳴らす。異なるドアベルの受信者の間を区別するために、異なるソフトウェア割り込みが使用されてもよい。
【0022】
例えば、アプリケーション414は、キューAPI412を介して、作業キュー424にエントリをプッシュする場合があり、カーネルモードドライバ410は、例えば、VMMCALLを実行することによって、VMM402のドアベルを鳴らして、作業キューが新しいエントリを有することを示す。VMMCALL命令は、ゲストオペレーティングシステム408からVMM402へ制御を移す。同様に、カーネルモードドライバ410がコマンドキュー418にコマンドをプッシュすると、カーネルモードドライバ410は、VMM402のためにドアベルを鳴らして(例えば、VMMCALLを実行することによって)、コマンドキューが新しいエントリを有することを示す。また別の例において、作業ユニットがデファクトアクセラレータとして構成された隔離されたコア406上で完了すると、VMM402は、フォールトキュー422にエントリをプッシュし、ローカルの高度プログラム可能割り込みコントローラ(APIC)を介して、フォールトキュー割り込みをホストコア404に送信する。VMM402は、ソフトウェア割り込みを使用して、カーネルモードドライバ410のドアベルを鳴らすことができる。使用される特定の割り込み番号は、構成ブロックの中のフィールドに記憶され、カーネルモードドライバ410によって保持される。
【0023】
アプリケーション414は、作業キュー424を作成し、作業キューテーブルの中のエントリポイントをカーネルモードドライバ410に登録する。アプリケーション414は、キューAPI412を使用して、作業項目を作業キュー424に追加する。キューAPI412は、スケジューラ416のドアベルを鳴らす。スケジュールロジックがカーネルモードドライバ410の中に存在する実施形態では、カーネルモードドライバ410が作業キュー424を読み出す。したがって、VMM402への呼び出しは、VMM402によってターゲットされるべきコアのインジケータを明示的に含むことになる。ドアベルに応答して、スケジューラ416は、デファクトアクセラレータが利用可能であるかどうかを判定する。利用可能であるデファクトアクセラレータがない場合、スケジューラ416はステータスを更新して、作業キュー424が空でないことを示す。デファクトアクセラレータが利用可能である場合、スケジューラ416は、作業キュー424を読み出す。スケジューラ416は、利用可能なデファクトアクセラレータを選択し、VMM402に対してスケジュール呼び出しを行う。
【0024】
コンピューティングシステム400の少なくとも1つの実施形態において、スケジューラ416がVMM402から区別される場合、スケジューラ416は、コマンドキュー418にコマンドを書き込み、VMM402のドアベルを鳴らすことができる。次いで、VMM402は、実行コンテキストを設定し、デファクトアクセラレータとして構成されたターゲットの隔離されたコア406を初期化する。VMM402が応答キュー420に書き込み、スケジューラ416が応答キュー420を処理して、隔離されたコア406のステータス(例えば、可用性)への可視性を維持する。スケジューラ416が作業キュー424から作業項目のキューを取り出すと、スケジューラ416は、デファクトアクセラレータとして構成された隔離されたコア406のうち利用可能なデファクトアクセラレータのリストを検討し、ターゲットの隔離されたコア406を選択する。スケジューラ416は、次いで、作業項目およびターゲットの隔離されたコア406を示す、コマンドキューエントリを作成し、キューに加える。次いで、スケジューラ416は、VMM402のドアベルを鳴らす。スケジューラ416がリソース可用性の正確な認識を保持するためには、スケジューラ416に作業項目の完了が通知されなければならない。コンピューティングシステム400の少なくとも1つの実施形態において、システムスタックは、作業項目からの戻り値によって、VMMの呼び出しが、作業項目の完了をVMM402に通知するように操作される。
【0025】
図3、4、および5を参照すると、システムのリセット時、VMM402は、システム400のコア(例えば、ホストコア404および隔離されたコア406)上でブートする(502)。少なくとも1つの実施形態において、VMM402は、基本的な入力出力システムとは別に、メモリ(例えば、ハードドライブ上)からブートされる。仮想マシンモニタ402は、次いで、ゲストオペレーティングシステムコア404上でゲストとしてオペレーティングシステム408をブートし、コア402からコア406を隔離する(504)。例えば、オペレーティングシステム408をブートする際、VMM402は、その上で実行するコアの数をオペレーティングシステム408に伝達する。そのため、オペレーティングシステム408が隔離されたコア406にアクセスしようとすることはない。オペレーティングシステムコア404からコア406を隔離するための他の技法として、オペレーティングシステム408が、コアの合計数未満である特定数のコアのみを認識するようにBIOSテーブルを変更し、仮想マシンモニタ402が両方のセットのコア上で環境を制御することが挙げられる。それらのBIOSテーブルは、読み出し専用メモリから自動的にロードされるか、またはVMM402によってパッチされる場合がある。オペレーティングシステムからコアを隔離するための別の技法では、VMM402は、いくつかのオペレーティングシステムコアを構成するように、オペレーティングシステムコマンドをインターセプトする。
【0026】
コアが隔離され、オペレーティングシステムがブートした後、オペレーティングシステム408は、アクセラレーテッドコンピューティングカーネルモードデバイスドライバ410をロードする(508)。アプリケーション414は、オペレーティングシステム408上で稼動する(510)。アプリケーション414は、作業ユニットを生成し、これらが次いで、隔離されたコア406上で実行するようにスケジュールされる(512)。完了後、VMM402は、オペレーティングシステム408に完了した作業を通知する(514)。
【0027】
図3、4、および6を参照して、作業ユニット起動処理の更に詳細を記載する。コンピューティングシステム400の少なくとも1つの実施形態において、カーネルモードドライバ410は、内部作業テーブルを作成し、これは、作業キューテーブルエントリに追加するために使用されてもよい(602)。アプリケーション414は、作業キューを作成し、作業キューテーブルの中のエントリをカーネルモードドライバ410に登録する(604)。実行中、アプリケーション414は、作業キューエントリを作業キュー424にプッシュする(606)。カーネルモードドライバ410は、上記のようにドアベル(例えば、VMMCALL)、または他の好適な通知技法を使用して作業キュー424が新しいエントリを有することをVMM402に通知する(608)。仮想メモリモニタ402は、ホストコア404上でドアベルを処理し、特定の隔離されたコア406にINITプロセッサ間割り込み(IPI)を送信する。仮想マシンモニタ402は、特定の隔離されたコア406上でVMM402への出口を処理する(610)。特定の隔離されたコア406がアイドルである(すなわち、作業ユニットをまだ処理中ではない)場合、VMM402は、作業キュー424から次の作業ユニットエントリをプルし(612)、VMCBを変更し、作業ユニットを処理するためにコードの実行を開始する(614)。そうでなければ、特定の隔離されたコアは、以前に着手していた作業ユニットの実行を継続する。コンピューティングシステム400の少なくとも1つの実施形態において、特定の隔離されたコア406が既に作業ユニットを実行している場合、VMM402は、VMM402への出口を備えるその特定の隔離されたコア406に割り込むことはない。
【0028】
作業ユニットを処理している間に、デファクトアクセラレータとして構成された隔離されたコア406は、ページフォールトを経験する場合がある(すなわち、隔離されたコア406が、アドレス空間にマップされているページにアクセスするが、物理的メモリにロードされない)。図3、4、および7を参照すると、コンピューティングシステム400の少なくとも1つの実施形態において、隔離されたコア406によって経験されるこれらのページフォールトは、VMM402によって認識され、VMM402へのワールド切り替えが発生する(702)。仮想マシンモニタ402が、隔離されたコアからページフォールト情報を取得し、カーネルレベルのページフォールトエントリを作成し、VMM402がこれをユーザフォールトキュー422上にプッシュする(704)。仮想マシンモニタ402が、ローカルAPICを介して、ホストコア404のうちの1つにフォールトキュー割り込みを発行する(706)。カーネルモードドライバ410の割り込みハンドラが割り込みを処理し、フォールトキューが延期したプロシージャ呼び出しを実行し、システムフォールトキュー428からフォールトを読み出す。カーネルモデルドライバ410がユーザ処理に関連するページテーブルを更新し(710)、デファクトアクセラレータとして構成された隔離されたコア406による実行を再開するためのコマンド(例えば、ターゲットコアのフィールドを含むCMD_RESUME)を生成する(712)。カーネルモードドライバ410が、そのコマンドをコマンドキュー418にプッシュし(712)、VMM402のドアベルを鳴らし(例えば、VMMCALL)、コマンドキュー418が新しいエントリを有することを示す(714)。仮想マシンモニタ402がホストコア404上でVMMCALLを処理し、コマンドキュー418を処理する、キューハンドラ412を含む隔離されたコア406(すなわち、デファクトアクセラレータコア0)にプロセッサ間割り込み(すなわち、INIT IPI)を発行する。プロセッサ間割り込みに応答して、デファクトアクセラレータコア0は、コマンドキュー418を読み出し、コマンド(例えば、CMD_RESUME)を処理する(716)。このコマンド処理は、例えば、作業ユニットの処理を再開するためにプロセッサ間割り込みを適当な隔離されたコア406に送信することによって行われる(718)。仮想マシンモニタ402は、次いで、VMEXITを処理し(例えば、ワールド切り替えを実施する)、隔離されたコア406が、作業ユニットの処理を再開する(720)。
【0029】
図3、4、および8を参照すると、コンピューティングシステム400の少なくとも1つの実施形態において、作業ユニットが処理され、隔離されたコア406が作業ユニットの最後の命令を実行すると、隔離されたコア406が、作業ユニットが実行を完了したことを示す、1つ以上の命令を含むルーチンを実行する(例えば、VMMCALL)(802)。これによって、隔離されたコア406が、VMM402の実行に戻り、VMM402は、作業ユニット完了のインジケータを処理する(804)。コンピューティングシステム400の少なくとも1つの実施形態において、VMM402は、作業ユニット完了の通知を発行するように構成されているかどうかを判定する(808)。VMMが通知を発行するように構成されていない場合、VMM402は、次の作業ユニットを処理するように進む(810)。代替として、VMMは、完了指令を発行する。少なくとも1つの実施形態において、VMM402は、システムフォールトキュー428に作業ユニット完了エントリをプッシュし、VMM402は、オペレーティングシステムコア404にフォールトキュー割り込みを(例えば、ローカルAPICを介して)送信する(812)。
【0030】
カーネルモードドライバ410は、フォールトキュー割り込みを処理し、システムフォールトキューからエントリを読み出す。カーネルモードドライバ410は、フォールトエントリに関連するユーザ処理コンテキストを検索し、処理コンテキストの特定のユーザフォールトキュー422にフォールトエントリをプッシュする(814)。カーネルモードドライバ410の中のユーザ作業スレッドハンドラが、ユーザフォールトキュー422からフォールトエントリをプルし、作業ユニットを完了する(818)。
【0031】
図9を参照すると、コンピューティングシステム400の少なくとも1つの実施形態において、隔離されたコア406は、デファクトアクセラレータとしてではなく、インスタントオンアプリケーション用途のために構成される。システムのリセット時、VMM402がシステム400のコア(例えば、ホストコア404および隔離されたコア406)上で起動する(902)。例えば、VMM402は、BIOS内に存在する場合があり、コア402からコア406を自動的に隔離する(904)。仮想マシンモニタ402は、ファイルシステムへのアクセスを有するように構成され、隔離されたコア406のうちの1つ以上でユーザアプリケーションを稼動する(906)。一方、VMM402は、ホストコア404上のゲストとしてオペレーティングシステム408を起動する(906)。仮想マシンモニタ402は、1つ以上のドライバまたは基本的な入力出力システム(すなわち、BIOSインターフェース)機能を含み、隔離されたコア406上で最初に稼動するアプリケーションを含む媒体にアクセスする。
【0032】
VMM402は、概して仮想マシンモニタとして記載されるが、少なくとも1つの実施形態において、VMM402は、本明細書に記載の機能、およびいくつかの他の仮想機能を提供するように構成される仮想マシンモニタの最小限の実装である。別の実施形態において、本明細書に記載のVMM402の機能は、他の典型的な仮想マシン機能を提供する、汎用仮想マシンモニタに組み込まれる。コンピューティングシステム400の少なくとも1つの実施形態において、仮想マシンモニタは、ネストされる場合があり、例えば、オペレーティングシステム408は、本明細書に記載の機能に従い、VMM402によって制御されるVMMマシンモニタである。コンピューティングシステム400の少なくとも1つの実施形態において、コアを隔離するために仮想技法を使用する際、オペレーティングシステムに対する変更を全く必要としない。
【0033】
本明細書に記載の本発明の説明は例示的であり、以下の請求項に記載の本発明の範囲を限定することを意図しない。例えば、本発明は、隔離されたコアがVMMの制御下でゲストオペレーティングシステム上のアプリケーション実行のためのデファクトアクセラレータとして構成される実施形態において説明されるが、当業者は、本明細書の教示は、インスタントオンアプリケーション、ネットワークデバイス加速、および汎用計算加速のために利用できることを理解するであろう。例えば、VMM402は、ネットワークルータデバイスと連携して、隔離されたコア406を使用してパケット検証機能を加速する場合がある。更に、本発明は、概してコンピューティングシステムにおいて説明されるが、本明細書に記載の教示の実施形態は、サーバ、デスクトップシステム(例えば、パーソナルコンピュータ)、埋め込みアプリケーション(例えば、移動体通信デバイス)、および他の好適なアプリケーションに含まれてもよい。本明細書に開示される実施形態の変形および変更は、以下の請求項に記載される本発明の範囲および精神を逸脱することなく、本明細書に記載の説明に基づいて行うことができる。

【特許請求の範囲】
【請求項1】
コンピュータシステムの複数のコアのうちの1つ以上のコアを含む第1のサブセットのコア上でオペレーティングシステムを実行することであって、該オペレーティングシステムは、仮想マシンモニタの制御下でゲストとして実行する、オペレーティングシステムを実行することと、
前記複数のコアのうちの1つ以上のコアを含む第2のサブセットのコア上でアプリケーションのための作業を実行することであって、前記第1および第2のサブセットのコアは、相互に排他的であり、前記第2のサブセットのコアは、前記オペレーティングシステムに可視的ではない、作業を実行することと、
を含む、方法。
【請求項2】
前記オペレーティングシステムから前記第2のサブセットのコアを隔離することを更に含む請求項1に記載の方法。
【請求項3】
前記アプリケーションは、前記オペレーティングシステムの外部にあり、かつ前記オペレーティングシステムから独立した、前記第2のサブセットのコア上で実行する、請求項1に記載の方法。
【請求項4】
前記アプリケーションは、前記オペレーティングシステム上で実行し、前記第2のサブセットのコアのうちの前記コアは、コンピューティングアクセラレータとして構成され、前記アプリケーションは、前記仮想マシンモニタを介して、前記第2のサブセットのコアに間接的にアクセスする、請求項1に記載の方法。
【請求項5】
利用可能なコンピューティングアクセラレータに関する情報を、前記オペレーティングシステム上で実行しているドライバに提供することと、
前記利用可能なコンピューティングアクセラレータのうちのターゲットアクセラレータによって完了されるべき作業をスケジュールすることとを更に含む
請求項4に記載の方法。
【請求項6】
前記実行することは、
前記アプリケーションの利益のために、前記コンピューティングアクセラレータによって完了されるべき作業をリクエストすることと、
前記オペレーティングシステムに完了された作業を示すことと、
作業項目によって生成されたページフォールトを処理することとを含む
請求項4に記載の方法。
【請求項7】
複数のコアと、
前記複数のコアにアクセス可能である、1つ以上の媒体の中にエンコードされたオペレーティングシステムソフトウェアと、
前記複数のコアにアクセス可能で、かつ前記複数のコアのうちの1つ以上で実行可能である、1つ以上の媒体の中にエンコードされたハイパーバイザソフトウェアであって、前記ハイパーバイザソフトウェアは、前記複数のコアのうちの1つ以上のコアを含む、第1のセットのコア上でゲストとして前記オペレーティングシステムソフトウェアの実行を制御し、前記複数のコアのうちの1つ以上のコアを含む、第2のセットのコア上でアプリケーションの少なくとも何らかの作業を実行するように実行可能であり、前記第2のセットのコアは、前記オペレーティングシステムに可視的ではない、ハイパーバイザソフトウェアとを備える装置。
【請求項8】
前記ハイパーバイザソフトウェアは、前記オペレーティングシステムから前記第2のセットのコアを離隔させるように、前記複数のコア上で実行可能なコードを含み、前記第1および第2のセットのコアは相互に排他的である、請求項7に記載の装置。
【請求項9】
前記第1のセットのコアにアクセス可能である、1つ以上の媒体の中にエンコードされたアクセラレーテッドコンピューティングドライバであって、前記アプリケーションの作業を前記第2のセットのコアにスケジュールするように構成されるアクセラレーテッドコンピューティングドライバを更に備える請求項7に記載の装置。
【請求項10】
前記アプリケーションと前記第2のセットのコアとの間の通信のための少なくとも1つのキューを更に備え、前記少なくとも1つのキューは、
アクセラレーテッドコンピューティングドライバから前記ハイパーバイザに通信するように構成されるコマンドキューと、
前記ハイパーバイザから前記アクセラレーテッドコンピューティングドライバに通信するように構成される応答キューと、
前記ハイパーバイザから前記アクセラレーテッドコンピューティングドライバに通信するように構成されるフォールトキューと、
アクセラレーティングコンピューティングアプリケーションプログラムインターフェースから前記ハイパーバイザに通信するように構成される作業キューとを含む
請求項7に記載の装置。
【請求項11】
前記複数のコアにアクセス可能である、1つ以上の媒体の中にエンコードされたアプリケーションソフトウェアを更に備え、前記ハイパーバイザソフトウェアは、前記第1のセットのコア上での前記オペレーティングシステムの実行とは独立的に、前記第2のセットのコア上で前記ハイパーバイザの制御下で前記アプリケーションソフトウェアを実行するように、前記複数のコア上で実行可能であるコードを含む
請求項7に記載の装置。
【請求項12】
前記オペレーティングシステム上で実行可能である前記複数のコアにアクセス可能である、1つ以上の媒体の中にエンコードされたアプリケーションソフトウェアを更に備え、前記ハイパーバイザソフトウェアは、コンピューティングアクセラレータとして前記第2のセットのコアを構成するように実行可能であるコードと、前記第2のセットのコア上で前記アプリケーションソフトウェアのための作業を実行するためのコードとを含む請求項7に記載の装置。
【請求項13】
少なくとも1つのコンピュータ可読媒体の中にエンコードされたコンピュータプログラム製品であって、前記コンピュータプログラム製品は、
仮想マシンモニタとして、またはこれと連携して実行可能であり、複数のコアのうちの1つ以上のコアを含む、第1のセットのコア上で前記仮想マシンモニタの制御下でゲストとして、オペレーティングシステムシーケンスを実行し、前記複数のコアのうちの1つ以上のコアを含む、第2のセットのコア上でアプリケーションの少なくとも何らかの作業を実行するように構成される、1つ以上の機能シーケンスを備え、前記第2のセットのコアは、前記オペレーティングシステムに可視的ではないコンピュータプログラム製品。
【請求項14】
前記1つ以上の機能シーケンスは、前記第1のセットのコア上での前記オペレーティングシステムの実行とは独立的に、前記第2のセットのコア上で前記仮想マシンモニタの制御下で、アプリケーションシーケンスを実行するように構成される、請求項13に記載のコンピュータプログラム製品。
【請求項15】
前記1つ以上の機能シーケンスは、オペレーティングシステムコードから前記第2のセットのコアを隔離し、前記第2のセットのコア上でアプリケーションコード作業を実行するためのコンピューティングアクセラレータとして、前記第2のセットのコアを構成するように構成される、請求項13に記載のコンピュータプログラム製品。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate


【公表番号】特表2013−516021(P2013−516021A)
【公表日】平成25年5月9日(2013.5.9)
【国際特許分類】
【出願番号】特願2012−547104(P2012−547104)
【出願日】平成22年12月14日(2010.12.14)
【国際出願番号】PCT/US2010/060193
【国際公開番号】WO2011/090596
【国際公開日】平成23年7月28日(2011.7.28)
【出願人】(591016172)アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド (439)
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED