本明細書に記載の実施形態は、マルチスレッディング(MT)環境でハイパーバイザ管理オーバヘッドを減少させるために使用され得る。本明細書に記載されているように、複数のスレッドの管理は、複数のスレッドを単一の論理コアとして管理するハイパーバイザと、複数のスレッドが物理コアのリソースにアクセスするとき複数のスレッド間の相互作用を管理するマシンとの間で分割され得る。これは、ハイパーバイザが論理コア単位でハイパーバイザのインフラストラクチャ・リソースの多くを管理することを可能にし、マシンがより微細なスレッド単位で他のリソースを管理することを可能にすることによって、マルチスレッディング(MT)オーバヘッド・コストの実質的な減少をもたらすことができる。一実施形態は、シングルスレッド(ST)上で実行されているハイパーバイザによって実行され得るコア・ディスパッチ命令を含む。本明細書では「MTを指定するstart−VE命令」と呼ばれるコア・ディスパッチ命令の実行は、ゲスト仮想マシン(VM)のすべてまたは一部を構成する複数のゲスト論理スレッドを、単一の物理コア上でディスパッチさせることができる。一実施形態では、ゲストをディスパッチするためにハイパーバイザによって使用される命令は、ディスパッチされるべきゲストが、シングルスレッド化されるのか、またはマルチスレッド化されるのかを指定する。
本明細書に記載の実施形態は、ゲスト論理コア内のどの論理スレッドが現在有効であるのかを示すためのスレッド有効性マスク、および、マルチスレッド論理コアのディスパッチを管理するための状態記述リングを含む状態記述グループなどの構造を含むことができる。加えて、プライマリおよびセカンダリ状態記述、ならびにフィールド・タイプ(たとえば、プライマリ、コア共通、スレッド固有)は、複数のスレッドを有する論理コアがディスパッチされるとき、コンピュータ・リソースの効率的な管理を可能にするように実装され得る。さらに、論理コア内のすべてのスレッドが同時に仮想実行からエグジットする協調したエグジットは、ハイパーバイザ機能と論理コア管理機能の両方を簡略化するために提供され得る。
実施形態は、本明細書ではコア指向システム制御エリア(COSCA(coreoriented system control area))と呼ばれる、ハイパーバイザによって維持される制御構造を含むことができる。COSCAは、ゲスト構成内の複数の論理プロセッサに影響を与える可能性がある特定の機能を管理するために、ハイパーバイザとマシンの両方によって使用される。COSCAの一実施形態は、葉(leaves)が論理コア(logical cores)を表し、各葉がそのコアのスレッドに対応するリストを含むツリー構造として実装される。COSCA構造は、ハイパーバイザが特定のコアにおけるスレッドのすべてのための状態記述に容易にアクセスすることを可能にするフィールド(たとえば、状態記述アドレス)を含むことができる。
実施形態はまた、マシン上に位置するミリコードがコア・ディスパッチ・プロセスを管理するために利用され得る、コア・ディスパッチのマシン実装(たとえば、MTを指定するstart−VE命令)を含むことができる。
本明細書で使用されるミリコードという用語は、プロセッサ・ハードウェアの動作に必須のライセンス内部コードを指すために使用される。ミリコードは、本明細書ではミリモードと呼ばれる実行モードで実行されているとき、マシンによって実行される。
ゲスト論理コアが複数のスレッドを含むとき、論理スレッドのうちの1つは、プライマリ・スレッドとして指定され、残りは、セカンダリ・スレッドとして指定される。「プライマリ」という用語は、論理スレッドに適用される。物理スレッドは、ハードウェアの観点からプライマリ・スレッドでもセカンダリ・スレッドでもなく、これに、MTを指定するstart−VE命令が発行されたら、プライマリ・スレッドになる。物理レベルでのこの一時的な区別の理由は、制御がホストに返されるとき、それは、典型的にはプライマリ・スレッドで行われるから、すなわち、制御は、start−VEが発行されたのと同じ物理スレッドでハイパーバイザに返されるからである。
一実施形態では、ミリコードは、任意の他のスレッド(プライマリまたはセカンダリ)から任意のスレッド(プライマリまたはセカンダリ)のほぼ全体の状態をロードするために使用され得る。実施形態では、ミリコードは、各スレッドによるそれ自体の状態の並列ローディングによって得られ得る潜在的な効率を活用するために、別のスレッドの非常に小さい部分をロードするように、この状態ローディングの柔軟性を使用する。いくつかのコマンド(パージ変換索引バッファすなわち「PTLB(purge translation look-aside buffer)」など)および共通リソースは、すべてのスレッドに適用され得、これは、それらがシングルスレッドのみから実行またはロードされることを可能にする。これは、コマンドまたはロード自体のための時間を節約するだけでなく、いくつかの場合では、アクションが実際に必要かどうかを決定するために必要な試験も節約する。設計に含まれるこの柔軟性は、ミリコードが、設計、開発、および試験のサイクルが進むにつれて、コア・ディスパッチをサポートするために使用されるアルゴリズムを絶えず調整することを可能にすることができる。メカニズムは、スレッドの実行を効率的に開始し、停止するために提供され得る。加えて、ミリコードはまた、ソフトウェア・レベルで無効とみなされるスレッドで内部ファームウェアが実行されている状況を説明するために使用され得る。
追加の実施形態は、ディスパッチされたMTゲスト論理コアからSTホスト(たとえば、ハイパーバイザ)への協調したエグジットのマシン実装に向けられる。一実施形態では、ミリコードは、システムを同期させるために使用され、これは、異なるスレッドのすべての現在の状態の各々を考慮することによるそれらの調整を含む。一実施形態はまた、エグジットを遅延させる可能性があるより低い優先度の割込みを保持しながらの、高い優先度の割込みの処理を含む。セカンダリ・スレッドのシャットダウンは、エグジットが完了した後、コア・リソースの最も効率的な使用を可能にする方法で行われ得る。たとえば、ミリコードは、必要とされないとき、コア・リソースがミリコード割込みハンドラをディスパッチするために使用されるのを防ぐために、特定の割込みを無効にすることができる。ミリコードはまた、特定の物理レジスタが、実行されているSTによって使用するために自由であるように、もはや使用されていないことを示すために使用され得る。
本明細書で使用される「スレッド」という用語は、単一の命令ストリームおよびその関連する状態を指す。すなわち、アーキテクチャ・レベルでは、各論理スレッドは、独立したCPUまたはプロセッサを表す。ハードウェア・レベルでは、物理スレッドは、そのスレッドがディスパッチされたとき、そのゲスト状態の維持と組み合わされた、論理スレッドに関連付けられた命令ストリームの実行である。ハイパーバイザ・レベルで必要とされる管理を減少させるのは、マシンによるスレッド状態の維持である。論理コアによって使用するために利用可能な論理スレッドの総数は、物理コアに利用可能な物理スレッドの総数によって制限される。
本明細書で使用される「物理コア」という用語は、1つまたは複数の独立した命令ストリームを実行するが、実行ユニットおよび低レベル・キャッシュなどの多くの基本リソースを共有するハードウェア処理ユニットを指す。この共有は、各スレッドが独立した時間に同じハードウェア・リソースを使用すること、または、リソースがスレッド識別子でタグ付けされた各物理エントリと論理的に共有されることを含むいくつかの方法で行われ得る。スレッド間、たとえば、リソースAをしばしば必要とするが、リソースBをめったに必要としない1つのスレッドと、典型的にはリソースBを使用するが、リソースAを使用しない別のスレッドとの間の適切な相乗効果は、この共有の効率を改善することができる。本明細書で使用される「マシン」という用語は、ミリコードと同様に物理コアに含まれるハードウェア、および物理コアのサポートで使用される他のハードウェアを指す。
本明細書で使用される「ゲストVM」および「ゲスト」という用語は、単一のCPU
または複数のCPUを含むことができる単一のゲスト構成を指すために互換的に使用される。本明細書で使用される「論理コア」という用語は、MTが指定されるstart−VE命令の一部として一緒にディスパッチされるように定義された論理ゲスト・スレッドまたはCPUのグループを指す。ゲストVMは、単一の論理コア(STもしくはMTのいずれか)または複数の論理コア(同様にその各々がSTもしくはMTであり得る)から作成され得る。
本明細書で使用される「ソフトウェア」という用語は、ハイパーバイザ・プログラム(たとえば、PR/SMもしくはzVM)、またはstart−VE命令の結果としてディスパッチされるゲスト・オペレーティング・システムもしくはアプリケーション・プログラムのいずれかを指す。
本明細書で使用される「ハイパーバイザ」および「ホスト」という用語は、物理ハードウェア上で実行するために、システム・リソースを管理し、ゲスト論理プロセッサをディスパッチするプログラムを指す。
ゲストをディスパッチするために使用されるstart−VE命令のオペランドは、そのゲスト・プロセッサまたはコアの状態を定義する状態記述または状態記述のグループを指す。状態記述自体は、状態記述の拡張とみなすことができ、そのゲスト・コアまたはプロセッサの状態をさらに定義する追加の情報を含むことができる「サテライト・ブロック」へのポインタを有する。本明細書で使用される「状態記述」という用語は、状態記述自体だけでなく、それらのサテライト・ブロックも指す。これらのサテライト・ブロックのうちの1つであるコア指向システム制御エリア(COSCA)は、図12に示されている。
ここで、図1を参照すると、例示的な実施形態によって実装され得るコンピューティング環境100が全体的に示されている。コンピューティング環境100は、たとえば、ニューヨーク州、アーモンクのインターナショナル・ビジネス・マシーン社によって提供されるz/Architectureに基づくことができる。z/Architectureは、“z/Architecture Principles of Operation,” IBMPublication No. SA22-7832-09, August 2012と題するIBM(R)刊行物に記載されている。一例では、z/Architectureに基づくコンピューティング環境は、ニューヨーク州、アーモンクのインターナショナル・ビジネス・マシーン社によって提供されるeServer zSeriesを含む。
一例として、コンピューティング環境100は、システム・コントローラ120に結合されたプロセッサ複合体102を含むことができる。プロセッサ複合体102は、たとえば、1つまたは複数のパーティション104(たとえば、論理パーティションLP1〜LPn)、1つまたは複数の物理コア106(たとえば、Core1〜Corem)、およびレベル0ハイパーバイザ108(たとえば、論理パーティション・マネージャ)を含むことができ、その各々は、以下に説明されている。
各論理パーティション104は、別個のシステムとして機能することが可能であり得る。すなわち、各論理パーティション104は、独立してリセットされ、所望の場合、オペレーティング・システム110を用いて最初にロードされ、異なるプログラムで動作することができる。論理パーティション104において実行されるオペレーティング・システム110またはアプリケーション・プログラムは、全面的かつ完全なシステムへのアクセス権を有するように見えることがあるが、現実には、その一部のみが利用可能である。ハードウェアおよびライセンス内部コード(一般にマイクロコードもしくはミリコードまたはファームウェアとも呼ばれる)の組合せは、ある論理パーティション104内のプログラムが異なる論理パーティション104内のプログラムと干渉するのを防止する。これは、いくつかの異なる論理パーティション104が、タイム・スライスされた方法で単一のまたは複数の物理コア106上で動作することを可能にする。一実施形態では、各物理コアは、1つまたは複数の中央プロセッサ(本明細書では「物理スレッド」とも呼ばれる)を含む。図1に示す例では、各論理パーティション104は、1つまたは複数の論理パーティション104ごとに異なってもよい常駐オペレーティング・システム110を有する。各論理パーティション104内で実行されるオペレーティング・システム110は、仮想マシンまたはゲスト構成の一例である。一実施形態では、オペレーティング・システム110は、ニューヨーク州、アーモンクのインターナショナル・ビジネス・マシーン社によって提供されるz/OS(R)オペレーティング・システムである。
物理コア106は、論理パーティション104に割り当てられた物理プロセッサ・リソースを含む。論理パーティション104は、1つまたは複数の論理プロセッサを含むことができ、論理プロセッサの各々は、パーティション104に割り当てられた物理プロセッサ・リソースのすべてまたは一部を表す。物理コア106は、下にあるコア106の物理プロセッサ・リソースがそのパーティション104のために確保されるように、特定のパーティション104の論理コアに専用であってもよく、または、下にあるコア・リソースの物理プロセッサ・リソースが別のパーティション104に潜在的に利用可能であるように、別のパーティション104の論理コアと供給されてもよい。
図1に示す実施形態では、論理パーティション104は、物理コア106上で実行されるファームウェアによって実装されたレベル0ハイパーバイザ108によって管理される。論理パーティション104およびハイパーバイザ108は、各々、物理コア106に関連付けられた中央ストレージ(メモリ)のそれぞれの部分に存在する1つまたは複数のプログラムを備える。ハイパーバイザ108の一例は、ニューヨーク州、アーモンクのインターナショナル・ビジネス・マシーン社によって提供されるProcessor Resource/Systems Manager(PR/SM(TM))である。
図1では中央プロセッサ複合体102に結合されているシステム・コントローラ120は、要求を発行する異なるプロセッサ間で調停することを担当する集中型ロジックを含むことができる。たとえば、システム・コントローラ120は、メモリ・アクセス要求を受信したとき、そのメモリ位置へのアクセスが許可されているかどうかを決定し、許可されている場合、その複合体内のプロセッサ間のメモリ整合性を維持しながら、そのメモリ位置の内容を中央プロセッサ複合体102に提供する。
ここで図2を参照すると、図1中の物理コア106などのマシンまたは物理コアを実装するための処理回路200のブロック図が、一実施形態に従って全体的に示されている。処理回路200は、多処理環境内の複数の物理コアのうちの1つの物理コアを含むことができる。図2に示す処理回路200は、処理回路200を他のコアおよび周辺デバイスに結合することができるシステム・コントローラ・インターフェース・ユニット202を含む。システム・コントローラ・インターフェース・ユニット202はまた、データ値を読み取り、記憶するDキャッシュ204、プログラム命令を読み取るIキャッシュ208、およびキャッシュ・インターフェース・ユニット206を、外部メモリ、プロセッサ、および他の周辺デバイスに接続することができる。
Iキャッシュ208は、命令をプリフェッチする命令フェッチ・ユニット(IFU)210と共に命令ストリームのローディングを提供することができ、投機的ローディングおよび分岐予測機能を含むことができる。フェッチされた命令は、命令処理データにデコードするための命令デコード・ユニット(IDU)212に提供され得る。
IDU212は、命令を発行ユニット214に提供することができ、発行ユニット214は、一般的な動作を実行するための1つまたは複数の固定小数点ユニット(FXU)216、および浮動小数点演算を実行するための1つまたは複数の浮動小数点ユニット(FPU)218などの様々な実行ユニットへの命令の発行を制御することができる。FPU218は、2進浮動小数点ユニット(BFU)220、10進浮動小数点ユニット(DFU)220、または任意の他の浮動小数点ユニットを含むことができる。発行ユニット214はまた、1つまたは複数LSUパイプラインを介して1つまたは複数のロード/記憶ユニット(LSU)228に結合され得る。複数のLSUパイプラインは、ロードおよび記憶と、分岐のためのアドレス生成とを実行するための実行ユニットとして扱われる。LSU228とIFU210の両方は、オペランドおよび命令アドレスのためのバッファリングされた変換を提供するために、変換索引バッファ(TLB)230を利用することができる。
FXU216およびFPU218は、汎用レジスタ(GPR)224および浮動小数点レジスタ(FPR)226などの様々なリソースに結合される。GPR224およびFPR226は、LSU228によってDキャッシュ204からロードされ、記憶されたデータ値のためのデータ値ストレージを提供する。
ここで図3を参照すると、一実施形態によって実装され得るコンピューティング環境300が全体的に示されている。図3に示すコンピューティング環境300は、LP2とラベル付けされた論理パーティション104内で実行するレベル1ハイパーバイザ302を追加した、図1に示すコンピューティング環境100と同様である。図3に示すように、レベル1ハイパーバイザ302は、複数のオペレーティング・システム(たとえば、仮想マシンVM1 304、VM2 306、およびVM3 308上で実行されるOS1 314、OS2 312、およびOS3 310)間のリソースのトランスペアレント・タイム・スライシング、および、LP2とラベル付けされた論理パーティション104内のこれらのオペレーティング・システムの互いからの分離などの、ハイパーバイザ108(本明細書では「レベル0ハイパーバイザ」とも呼ばれる)に関して先に説明したのと同じハイパーバイザ機能を提供することができる。図3に示す実施形態は、例として3つの仮想マシンを含み、他の実施形態は、アプリケーション要件に基づいて、より多い、またはより少ない仮想マシンを含んでもよい。
図3に示すように、LP1とラベル付けされた論理パーティション104は、常駐オペレーティング・システム110を有し、LP2とラベル付けされた論理パーティション104は、レベル1ハイパーバイザ302を実行し、レベル1ハイパーバイザ302は、その各々がそれ自体の常駐オペレーティング・システム314、312、310を実行する仮想マシン304、306、308を作成する。任意の数の論理パーティション104は、レベル1ハイパーバイザ302を実行してもよい。一実施形態では、レベル1ハイパーバイザ302は、ニューヨーク州、アーモンクのインターナショナル・ビジネス・マシーン社によって提供されるz/VMハイパーバイザである。様々な論理パーティションで実行される常駐オペレーティング・システムは、異なってもよく、レベル1ハイパーバイザ302の下で実行されているとき、単一のパーティション104(たとえば、LP2)内の常駐オペレーティング・システム(たとえば、オペレーティング・システム314、312、310)も、異なってもよい。一実施形態では、LP1とラベル付けされた論理パーティション104内のオペレーティング・システム110は、ニューヨーク州、アーモンクのインターナショナル・ビジネス・マシーン社によって提供されるz/OSオペレーティング・システムである。一実施形態では、オペレーティング・システム310および312は、Linuxであり、オペレーティング・システム314は、z/OSである。
レベル1ハイパーバイザ302は、論理パーティション104内で実行されているとき、ハイパーバイザ108などのレベル0ハイパーバイザによって論理パーティション104に提供されるのと同じリソースの仮想化を、仮想マシン308、306、304内で実行されるオペレーティング・システム310、312、314に提供することができる。第1のレベルでのように、各仮想マシンは、複数の仮想プロセッサを含んでもよい。
物理コア106は、図1について説明したように、専用であってもよく、または論理パーティション104のLP1、LP2、LP3、およびLP4の間で共有されてもよい物理プロセッサ・リソースを含む。論理パーティションLP2が1つまたは複数の物理コア上でディスパッチされたとき、レベル1ハイパーバイザ302は、次いで、その仮想マシンVM1 304、VM2 306、およびVM3 308の間でこれらのリソースを透過的に共有することができる。一実施形態では、レベル0ハイパーバイザ108は、マルチスレッド・レベル1ハイパーバイザ302をディスパッチするために、MTを指定するstart−VE命令を使用し、マルチスレッド・レベル1ハイパーバイザ302は、次いで、シングルスレッド仮想マシンVM1 304、VM2 306、およびVM3 308をディスパッチするために、STを指定するstart−VE命令を使用する。別の実施形態では、レベル0ハイパーバイザ108は、シングルスレッド・レベル1ハイパーバイザ302をディスパッチするために、STを指定するstart−VE命令を使用し、シングルスレッド・レベル1ハイパーバイザ302は、次いで、マルチスレッド仮想マシンVM1 304、VM2 306、およびVM3 308をディスパッチするために、MTを指定するstart−VE命令を使用する。別の実施形態では、レベル1ハイパーバイザ302とそのゲストVM304、306、308の両方は、すべてシングルスレッドである。
ゲスト多処理(MP)環境では、ハイパーバイザは、ゲスト構成内の複数の論理プロセッサに影響を与えることができる特定の機能を管理するためにハイパーバイザとマシンの両方によって使用される、システム制御エリア(SCA)として知られる制御構造を維持することができる。同じSCA原点(SCAO)は、構成および仮想マシン内のすべてのゲスト・プロセッサのための状態記述において指定される。一実施形態では、このエリアは、共通エリア(一般に、ゲスト構成の広範な機能を調整するために使用される)と、別個のプロセッサ固有のエントリとを含むことができる。共通エリアは、たとえば、ゲスト構成内のどの仮想プロセッサが有効であるかについての情報を保持する。SCA内の別個のプロセッサ固有のエリアは、たとえば、プロセッサ間割込みなどのプロセッサ間ゲスト機能を解釈もしくはエミュレートするため、または、各論理プロセッサのそれぞれの状態記述に容易にアクセス可能なポインタを提供するために使用され得る。一実施形態では、STのために使用されるSCAは、各潜在的なゲスト・スレッドのための追加のスレッド固有エントリを追加することによって、MT使用のために拡張される。
コア・ディスパッチの一実施形態は、シングルスレッド上で実行されているハイパーバイザが、しばしば開始マルチスレッド仮想実行(start−MVE)と呼ばれるstart−VE命令のバリエーションを使用して、そのコア上でマルチスレッド・ゲストをディスパッチすることを可能にすることができる。マルチスレッド・ゲスト内の各スレッドは、ゲスト論理中央処理ユニット(CPU)、またはゲスト・スレッドを表すことができる。start−VE命令は、状態記述内の制御フィールドを介して、物理コア上のマルチスレッディング(MT)ゲスト実行を可能にすることができる。start−VE命令のオペランドは、コア・ディスパッチのために使用されたとき、すべてのゲスト・スレッドの状態を含む単一状態記述、または、その各々が、たとえば、単一のゲスト・スレッドの状態を表す状態記述のグループのいずれかを指定することができる。一実施形態では、論理コアは、状態記述のこのグループを含む。コア・ディスパッチは、論理コアおよびこれらのゲスト論理スレッドの各々の状態を物理コア・スレッドおよびそのスレッドにロードするために仮想実行エントリを必要とする。これらのスレッドは、互いに独立して動作する命令ストリームであり得る。様々な実施形態では、状態記述のグループは、互いからの固定オフセットとして、状態記述アドレスもしくは状態記述のリストとして、または、別個のゲスト・スレッドを表すそのグループにおける各状態記述でコアに適用する状態記述の循環リスト(リング)として、含む、いくつかの方法で指定され得る。そのような技術は、ハイパーバイザおよびマシンによる論理コア内の他のスレッドへの容易なアクセスを可能にし、論理コア全体に適合するフィールドが単一の場所で維持されることを可能にする。
ゲストOSは、単にゲストにおけるマルチスレッド化を可能にするMT設定命令を発行することによって、マルチスレッド化を使用することができる。これは、ゲストOSがこれらの新しいスレッドを追加の独立したCPUとして扱い、マルチスレッド化がない場合のようにそれらを管理することを可能にする。加えて、ゲストOSは、これらのスレッドがコアを共有するという事実を活用するようにこれらのスレッドを使用することができ、または、より相互依存的な方法でこれらのスレッドを動作させることができる。これは、ハイパーバイザおよびマシンにすべて透過的である。ハイパーバイザは、次いで、ハイパーバイザ自体がコアあたり単一のスレッド上で実行し続け、コア・ベースでゲストMT環境の多くを管理し続けながら、これらの追加のスレッドをゲストOSに提供する。マルチスレッド化のOSの実施可能要件は、「Thread Context Preservation in a Multithreading Computer System」と題する、米国特許出願第14/226,895号に詳細に記載されている。
コア・ディスパッチの一実施形態では、MTを指定するstart−VE命令のオペランドとして指定された状態記述は、「プライマリ」状態記述であり、関連するゲスト論理スレッドは、「プライマリ」スレッドである。グループ内の他の状態記述は、本明細書では「セカンダリ」状態記述と呼ばれ、適用可能である場合、セカンダリ論理スレッドに適合する。状態記述グループがリストまたはリングのいずれかとして実装されたとき、第1のセカンダリ状態記述を指すプライマリ状態記述内の次の状態記述(NSD)フィールドが存在することができ、第1のセカンダリ状態記述は、1)グループ内の次のセカンダリ状態記述を指すか、または、2)グループの最後を示す値を含む。リスト内の最後の状態記述内のNSD値は、プライマリ状態記述のアドレスであってもよく、その場合、リストは、状態記述のリングを形成する。
非MT実装では、ハイパーバイザは、一度に所与の物理コア上の1つのゲスト論理プロセッサ(本明細書では「論理スレッド」とも呼ばれる)をディスパッチする。特定の論理プロセッサが無効な状態、たとえば、停止状態または無効な待機にある場合、ハイパーバイザは、そのゲストをディスパッチしない。MT環境では、コア・ディスパッチは、ハイパーバイザが同時にコア上の複数のゲスト・スレッドをディスパッチすることを可能にする。その論理コアの状態記述グループにおける1つまたは複数のスレッドが無効である可能性に対応するために、一実施形態は、プライマリ状態記述内のスレッド有効性マスク(TVM)を利用し、TVMの各ビットは、グループ内の対応する状態記述内の論理スレッドの、ソフトウェアの観点からの有効性を示す。
別の実施形態では、有効なスレッドのみが状態記述グループに含まれ、有効性指示は、必要ない。状態記述グループ内の無効な論理スレッドを含む実施形態は、ハイパーバイザが、これらの無効なスレッドに関連付けられた状態を維持することを可能にし、これらのスレッドは、将来再び有効になる可能性がある。マシンは、単に有効な状態を有するこれらのスレッドを初期化し、実行することになる。ハイパーバイザは、グループ内の少なくとも1つのスレッドが有効である場合、単にゲスト論理コアをディスパッチすることになる。
ここで図4を参照すると、ゲストの設計(architected)状態の大部分を含む論理スレッドの状態記述が、一実施形態に従って全体的に示されている。この文脈では、「状態記述」という用語は、状態記述自体だけでなく、拡張として機能する、そのポインタが状態記述に存在するサテライト・ブロックも含む。図4に示すように、状態記述400は、ゲスト汎用レジスタ(GR)402と、アクセス・レジスタ(AR)404と、制御レジスタ(CR)406と、ゲスト・タイマ408(クロック比較器およびCPUタイマを含む)と、ゲスト・プレフィックス・レジスタ410と、仮想CPU番号(VCN)412と、プログラム状態ワード(PSW)と、命令アドレス(IA)414とを含むことができる。加えて、それは、特定の命令(たとえば、ロード・プログラム状態ワード(LPSW)および無効化ページ・テーブル・エントリ(IPTE))がホストに対する遮断を要求するかどうか、または、ゲスト変換索引バッファ(TLB)のパージが、ゲスト命令実行が開始され得る前に要求されたかどうかを示すために、遮断制御(IC)ビット420などの制御情報を含むことができる。状態記述はまた、図6〜図9に示すように状態記述リストおよびリングを定義するために使用される次の状態記述(NSD)422を含む。プライマリ状態記述はまた、図5に記載のTVM430と、論理パーティション番号(LPN)432とを含む。仮想CPU番号(VCN)412は、「Address Expansion and Contraction in a Multithreading ComputerSystem」と題する、米国特許出願第14/226,947号に詳細に記載されているように、CPU番号と等価であり、MTモードにあるスレッド番号を含むように潜在的に調整される。
コア内のスレッドは、バイナリ・スレッド情報(TID)によって識別され得る。以下の図面における簡潔さのために、スレッドxは、しばしば、TIDxという用語で呼ばれ、この場合、意味は、「TIDxを有するスレッド」である。
ここで図5を参照すると、スレッド有効性マスク(TVM)520のブロック図が、一実施形態に従って全体的に示されている。図5に示すように、TVM520のビット0 530は、状態記述グループ内の論理スレッド0の有効性を表し、ビット1 531は、スレッド1の有効性を表し、ビット2 532は、スレッド2の有効性を表し、ビット3 533は、スレッド3の有効性を表し、スレッドn、すなわち、このコアに関連付けられた状態記述グループ内の最後の可能な論理スレッドの有効性を表すビットn 537まで以下同様である。TVMは、グループのためのプライマリ状態記述に存在することができる。
ここで図6を参照すると、固定オフセット状態記述グループ構造が、一実施形態に従って全体的に示されている。図6に示すように、状態記述グループは、互いに固定オフセット(N)で指定される。この場合、start−VE命令602のオペランドは、論理スレッド0のためのプライマリ状態記述603を指す。論理スレッドx605のためのセカンダリ状態記述は、プライマリ状態記述の後にNバイトの固定オフセットで配置され、論理スレッドy607のためのセカンダリ状態記述は、スレッドxのためのセカンダリ状態記述の後のNバイトに配置される。これは、グループ内のすべてのスレッドについて続く。グループ内のスレッドの数は、プライマリ状態記述内のカウント、または、リスト内の最後の状態記述アドレスに続く終了マーカ、を含むいくつかの方法で決定され得る。
図6は、2つの場合、グループが、グループ内のすべての論理スレッドのための状態記述を、それらが有効であろうとなかろうと含む第1の場合と、有効な状態記述のみがグループに含まれる第2の場合とを表すことができる。第1の場合では、スレッドx605のための状態記述は、スレッド1の状態を表し、スレッドy607のための状態記述は、スレッド2の状態を表す。この第1の場合でのみ必要とされるTVM620は、これらの論理スレッドの各々の有効性を表す。第2の場合では、スレッドx605のための状態記述は、第1の有効な論理セカンダリ・スレッドの状態を表し、論理スレッドy607のための状態記述は、第2の有効なセカンダリ・スレッドの状態を表す。たとえば、スレッド1が有効ではなく、スレッド2および3が両方とも有効である場合、スレッドx605は、スレッド2を表すことになり、スレッドy607は、スレッド3を表すことになる。スレッド1は、無効であるので、スレッド1のためのグループに含まれる状態記述は、存在しないことになる。これらの同じ2つの場合はまた、以下の図7〜図9に示す実施形態に適合し得るが、場合1のみが説明され、描かれる。
ここで図7を参照すると、リストとして指定された状態記述グループが、一実施形態に従って全体的に示されている。この場合、start−VE命令702のオペランドは、リスト内の第1のエントリ704がスレッド0のためのプライマリ状態記述705を指し、リスト内の第2のエントリ706がスレッド1のためのセカンダリ状態記述707を指し、リスト内の第3のエントリ708がスレッド2のためのセカンダリ状態記述709を指すなど、グループ内のすべてのスレッドについて続く、状態記述アドレスのリストを表す。TVM720は、これらのスレッドの各々の有効性を表す。
ここで図8を参照すると、リンク・リストとして指定された状態記述グループ構造が、一実施形態に従って全体的に示されている。この場合、図6に示す場合のように、start−VE命令802のオペランドは、スレッド0のためのプライマリ状態記述803を指すが、スレッド1のためのセカンダリ状態記述805のためのポインタ804は、プライマリ状態記述内の次の状態記述(NSD)フィールド804として提供される。同様に、スレッド2のためのセカンダリ状態記述807のためのポインタ806は、スレッド1のためのセカンダリ状態記述内のNSD806として提供される。これは、最後のスレッドnのための状態記述809内のNSD810がリストの終わりを示すゼロまたはなにか他のユニークな値として指定されて、グループ内のすべてのスレッドについて継続する。プライマリ状態記述803に設けられたTVM820は、これらのスレッドの各々の有効性を表す。
ここで図9を参照すると、循環リストまたはリングとして指定された状態記述グループ構造が、一実施形態に従って全体的に示されている。この場合は、start−VE命令902のオペランドがスレッド0のためのプライマリ状態記述903を指し、プライマリ状態記述903がスレッド1のためのセカンダリ状態記述905のためのNSD904を含み、セカンダリ状態記述905がスレッド2のためのセカンダリ状態記述907のためのNSD906を含み、これが最後のスレッドnまですべてのスレッドについて継続する、図8に示す場合と同じである。しかしながら、図9に示す実施形態では、スレッドnのための状態記述909内のNSD910は、循環リストを形成し、プライマリ状態記述903に戻って指す。プライマリ状態記述903に設けられたTVM920は、これらのスレッドの各々の有効性を表す。
コア・ディスパッチは、ハイパーバイザがコア・レベルで論理スレッドの多くの側面を管理することを可能にする。コア・ディスパッチは、しばしば、コアの複数のスレッドの仮想実行の調整をマシンに押し込めることによってスレッド管理に必要なハイパーバイザ・コードを簡略化するだけでなく、構成内のより多くのプロセッサを管理するために必要なオーバヘッドを減少させることもできる。論理パーティション(またはゲスト)のための優先度管理は、論理コア・レベルで行われ続けることができ、このタイプの管理に対するスケーリング圧力を減少させる。ハイパーバイザ自体は、start−VE命令を再発行する前に、その必要性(命令遮断など)がすべて満たされていることを確認するために、論理コアに関連付けられたスレッドの集合を管理する必要が依然としてある。
ここで図10を参照すると、一実施形態によるコア・ディスパッチ・プロセスが、全体的に示されている。図10に示すように、ハイパーバイザは、物理コアN1010および物理スレッドA1020上でシングルスレッド化されて実行されている。ブロック1022では、ハイパーバイザは、マルチスレッド・ゲスト・コアをディスパッチするために、MTを指定するstart−VE命令を発行する。マシンは、ゲストがマルチスレッド化されていることを決定し、ブロック1024で、物理スレッドBおよびCを、ソフトウェアを実行するために利用可能にする。マシンは、スレッドの各々のための状態記述から対応する物理スレッドにゲスト状態をロードする。図10に示す実施形態では、マシンは、この機能を実行するために、複数の物理スレッドを使用し、すなわち、ブロック1026に示すように、物理スレッドA1020上で実行されているミリコードは、物理スレッドAにゲスト論理スレッドXの状態をロードする。同様に、ブロック1046および1066に示すように、物理スレッドB1040およびC1060上で実行されているミリコードは、物理スレッドBおよびCにゲスト論理スレッドYおよびZの状態をロードする。ゲスト状態がロードされたら、ゲスト論理スレッドX、Y、およびZ上で実行されているソフトウェアは、ブロック1028、1048、および1068に示すように、物理スレッドA、B、およびC上で実行される。
ここで図11を参照すると、仮想実行からの協調したエグジットが、一実施形態に従って全体的に示されている。図11に示すように、ゲスト論理スレッドX、Y、およびZは、ブロック1128、1148、および1168に示すように、物理スレッドA1120、B1140、およびC1160上でゲストソフトウェアを実行している。1つまたは複数のゲスト・スレッドは、仮想実行からのエグジットが必要とされることを決定する。図11を参照すると、物理スレッドB1140上で実行されているゲスト論理スレッドYは、ブロック1150に示すように、仮想実行から出なければならいことを決定し、マシンに、仮想実行からエグジットするように物理スレッドA1120およびC1160に合図させる。ブロック1136、1154、および1174では、物理スレッドの各々の上で実行されているミリコードは、仮想実行からのエグジットを調整し、次いで、ブロック1156および1176に示すように、物理スレッドB1140およびC1160を、ソフトウェアによる使用のために利用不可能にする。物理スレッドA1120上のミリコードは、ブロック1138に示すように、ホスト状態をハードウェアにリロードし、これは、ブロック1140に示すように、物理スレッドA上のハイパーバイザ・ソフトウェアの実行をもたらす。ハイパーバイザは、次いで、必要に応じて、任意の保留中のゲスト遮断およびホスト割込みを処理することになる。
図12は、一実施形態による、複数の論理コアを含む単一のゲスト構成のためのコア指向システム制御エリア(COSCA)のブロック図を示す。図12に示すCOSCAは、コア内の論理スレッド間、および異なるコア上の論理スレッド間の調整を提供するために使用され得る。COSCAは、コア記述エリアを分離するために、各論理コアに1つ、ポインタでゲスト構成全体を表す共通エリアを含むことができる。各コア記述は、コアと、そのコアのための一連の連続した別個のスレッド固有の領域またはスレッド記述とを含む。別の実施形態では、コア記述は、スレッド記述の位置を提供する。提供される位置は、暗示されてもよい(たとえば、それらは、コア記述に含まれるリストであり、または、コア記述に連続するメモリ・ブロックにあってもよい)。他の実施形態では、スレッド記述を含むメモリ位置へのポインタが提供されてもよい。本明細書で使用される「位置を示す」という用語は、(たとえば、COSCA内のスレッド記述または他の要素)項目の位置を決定するこれらのいずれか、または任意の追加の方法を指すために使用される。この構造は、いくつかの状況では、特にハイパーバイザ・レベルでは、物事がコア単位で管理されることを容易にし、または他の状況では、物事がスレッドもしくはプロセッサ単位で管理されることを容易にする、MTゲスト構成のツリー状表現を維持する。
同じCOSCA原点(COSCAO)は、ゲスト構成内のすべてのゲスト・スレッドのための状態記述内のSCA原点(SCAO)に設けられ得、同じコア記述領域アドレス(CDAA)は、所与のコア内のすべてのスレッドについて提供され得る。この実施形態の利点は、それが、いくつかのハイパーバイザが提供するのが困難な可能性がある多くの隣接する実ストレージを必要としないことである。別の実施形態は、追加のレベルの間接参照を追加し、各スレッド固有エリアのためのポインタのリストを含む各コア記述を有することができ、これらの領域を含む制御ブロックが連続したものである必要性を除去する。
ここで図12を参照すると、各コアに3つの論理スレッドを有する2つの論理コアを含む単一ゲスト構成のためのCOSCAの例示的な実施形態が、全体的に示されている。一実施形態では、COSCAは、(「COSCACA1260」として図12中に示す)COSCA共通エリア1260の内容と、コア記述エリア1270の内容と、コア記述エリア1280の内容とを含む。論理コア0に関連付けられた状態記述グループのためのプライマリ状態記述1203は、ゲスト・コア0をディスパッチするためにハイパーバイザによって使用されるstart−VE命令のオペランド1202として指定される。加えて、論理コア1に関連付けられた状態記述グループのためのプライマリ状態記述1233は、コア1をディスパッチするために使用されるstart−VE命令のオペランド1232として指定される。「コア0スレッド0」のためのプライマリ状態記述は、コア0スレッド1のためのセカンダリ状態記述1213を指すNSD01 1205を含み、セカンダリ状態記述1213は、グループ内のコア0スレッド2のための最後のセカンダリ状態記述1223を指すNSD02 1215を含む。同様に、論理コア1のための状態記述グループは、NSD11 1235を含むコア1スレッド0のためのプライマリ状態記述1233で開始し、NSD11 1235は、NSD12 1245を含むコア1スレッド1のためのセカンダリ状態1243を指し、NSD12 1245は、コア1スレッド2のための最後のセカンダリ状態記述1253を指す。このゲスト構成内の6つのスレッド1203、1213、1223、1233、1243、1253のすべてのための状態記述は、SCAO1204、SCAO1214、SCAO1224、COSCA1234、SCAO1244、SCAO1254に同じ値を含み、COSCA共通エリア1260を指す。
COSCA共通エリア1260は、図12に示すように、ゲスト構成の広範な機能を調整するために使用されるコア・レベル情報を含む。COSCA共通エリア1260は、SCAコア有効性マスク(SCVM)1261を含み、SCVM1261は、ゲスト構成内の各論理コアの有効性を示し、また、各コアのためのコア記述エリア・アドレス(CDAA)1262、1264を含む。SCVM内のビットと、コア記述アドレスのアレイの両方は、コア番号によってインデックス付けされてもよい。コア0のためのコア記述エリア(CDA)1270を指すCDAA0 1262は、COSCA共通エリア1260に含まれる。加えて、コア0内のすべてのスレッドのための状態記述内のCDAAフィールド1206、1216、1226はまた、コア0のためのCDA1270を指す。コア1のためのCDA1280を指すCDAA1 1264はまた、COSCA共通エリア1260に含まれ、同様に、コア1内のすべてのスレッドのための状態記述1236、1246、1256はまた、コア1のためのCDA1280を指す。コア0のためのコア記述エリア(CDA)1270は、コア0内の各論理スレッドの有効性を示すSCAスレッド有効性マスク(STVM0)1271を含む。それはまた、コア0スレッド0、スレッド1、およびスレッド2のためのスレッド記述エリア1272、1274、および1276を含む。コア1のためのCDA1280は、同様に、STVM1と、コア1スレッド0、スレッド1、およびスレッド2のためのスレッド記述エリア1282、1284、および1286とを含む。これらのスレッド記述エリア1272、1274、1276、1282、1284、1286の各々は、それぞれ、そのスレッド記述エリアに対応するスレッド、すなわちコア0スレッド0、コア0スレッド1、コア0スレッド2、コア1スレッド0、コア1スレッド1、およびコア1スレッド2のための状態記述アドレス(SDA)1273、1275、1277、1283、1285、1287を含む。STVM内のビットと、スレッド記述エリアのアレイの両方は、スレッド識別情報によってインデックス付けされてもよい。これらのSDAは、ハイパーバイザがコア内のスレッドを管理するのをより容易にし、マシンがゲスト・プロセッサ間割込みを提示するのをより容易にする。
図13は、図12に示すCOSCAを使用する一実施形態によるマルチスレッド・コアを管理するためのプロセス・フローを示す。図13に示す例では、ブロック1302で、第1の物理スレッド(たとえば、状態記述1213によって定義されるコア0スレッド1)上で実行されているゲストオペレーティング・システム(OS)は、それが第2の論理スレッドまたはターゲット・スレッド(たとえば、状態記述1253によって定義されるコア1スレッド2)に通知することを決定している。ブロック1304では、ゲストOSは、たとえば、プロセッサ間割込み命令を発行することによってこれを行う。マシンは、プロセッサ間割込み命令を実行することの一部として、ゲスト・プロセッサ間割込みをエミュレートするためにCOSCAを使用する。ターゲット論理スレッドを含む論理コアは、シグナリングが行われているのと同時にディスパッチされてもされなくてもよいので、プロセッサ間割込み命令は、マシンによってエミュレートされる。ブロック1306では、マシンは、ターゲット・コアの有効性を検証し、適切なCDAA(たとえば、ターゲット・スレッドがコア1上にあるので、CDAA1 1264)を取得するために、SCVM(たとえば、SCVM1261)にアクセスするように、(たとえば、プロセッサ間割込み命令が論理コア0スレッド1によって実行されたので、SCA0 1214を介して)ゲスト構成のための共通エリア(たとえば、COSCA共通エリア1260)の位置を突き止める。
次に、ブロック1308で、マシンは、ターゲット・コアのためのコア記述エリア(たとえば、CDA1280)の位置を(たとえば、CDA1 1264を介して)突き止める。マシンは、コア記述エリア内のSTVM(たとえば、CDA1280内のSTVM1 1281)にアクセスすることによって、ターゲット・スレッドが有効であることを確認する。ブロック1310では、マシンは、スレッド記述エリア(たとえば、ターゲット・スレッドがスレッド2であるので、スレッド2に対応するスレッド記述エリア1286)の位置を突き止める。ブロック1312では、割込みに関する情報は、ターゲット・スレッドのためのスレッド記述エリアに記録される(たとえば、送り側スレッドのIDを記述エリアに入れる)。ブロック1314では、マシンは、ターゲット・スレッドのための状態記述(たとえば、コア1のためのセカンダリ状態記述TID2 1253)の位置を(たとえば、スレッド記述エリア1286内のSDA12 1287を介して)突き止める。ブロック1316では、割込みは、ターゲット状態記述内で保留中にされる(たとえば、IPビット1257がコア1のための状態記述TID2 1253内で設定される)。結果として、ターゲット論理プロセッサ(たとえば、コア1スレッド2)が物理スレッド上でディスパッチされ、割込みのために有効にされたとき、マシンは、割込みを、可能な場合、ゲスト・オペレーティング・システムに提示することになる。ターゲット論理プロセッサが、割込みが保留中になった時点で既にディスパッチされている場合、有効になったら割込みを行う。
マシンがまた、論理コア内のスレッドが共通の属性を有するという事実を利用することができる実例が存在する。たとえば、コア・ディスパッチは、本来、同じLPARゾーンまたはパーティションに存在する論理コア上のすべてのゲスト・スレッドを有するのに適している。設計は、スレッドごとに一度の代わりにコアごとに一度、ゾーンに関連付けられた物事を実装すればよいようにすることによって、ハードウェアを最小化することができる。加えて、複雑な制御ロジック(たとえば、システムの広範な割込みの取り扱い)はまた、単一のコア値に対処すればよいので、単純化され得る。
一実施形態では、マルチスレッド・ゲストを表す状態記述のグループ内の各フィールド(またはフィールド内のビット)は、プライマリ、コア共通、またはスレッド固有として分類される。プライマリ・フィールドは、プライマリ状態記述にのみ存在し、論理コア内のすべてのプロセッサに適用され、コアの任意のスレッドに代わってプライマリ・フィールドになされる任意のアクセスは、関連するプライマリ状態記述からの値を使用しなければならない。この分類は、スレッド有効性マスクなどの、コアの全体的な状態を定義するフィールドのために使用される。コア共通フィールドは、論理コア内のすべてのプロセッサ間で共通であり、このフィールドは、グループ内のすべての状態記述において同じ値を有し、プロセッサの代わりにこれらのフィールドのうちの1つになされる任意のアクセスは、グループ内の任意の状態記述からの値を使用してもよい。この分類は、LP番号などの、コア全体にわたって適用されるフィールドのために使用される。ハイパーバイザは、すべての状態記述内のコア共通領域を維持するために必要とされるが、マシンは、最高のパフォーマンスを提供するものはどれでも、任意のスレッドの状態記述内のこのフィールドにアクセスすることが許可される。これらのフィールドは、しばしば、ハイパーバイザによって変更されないが、仮想実行内へのすべてのエントリにおいてマシンによってアクセスされるので、スレッド固有ではなくコア共通としてフィールドを定義することは、仮想実行エントリが、たとえば、プライマリ状態記述内の値を使用してプライマリ・スレッドからセカンダリ・スレッド機能をロードすることを可能にする。スレッド固有フィールドは、各論理スレッドに固有であり、任意の所与のスレッドの代わりにこれらのスレッドのうちの1つになされる任意のアクセスは、そのスレッドの状態記述からの値を使用しなければならない。この分類は、ゲスト・プレフィックスなどの、典型的にはスレッド間で一意的であるフィールドのために使用される。
一実施形態は、コア・ディスパッチ命令のマシン実施態様を含む。ハイパーバイザがコア・ディスパッチ、またはMTを指定するstart−VE命令を発行したとき、関連する状態記述グループによって記述される論理コアは、仮想実行エントリ(VEエントリ)ミリコードによって物理コアにロードされる。このプロセスの一部として、各有効論理スレッドの状態は、物理スレッドにロードされる。物理スレッドへの論理スレッドマッピングは、直接の1対1のマッピングであってもよく、または仮想化されてもよい。VEエントリを開始する前に、各物理スレッドの内容は、仮想スレッドが最後にその上で実行されたどのものの状態も含む。したがって、VEエントリ・ミリコードは、新たにディスパッチされたゲスト・スレッドの状態で状態全体を置き換える。
コア・ディスパッチがシングルスレッド・ハイパーバイザによって呼び出されたとき、個々のゲスト・スレッド(論理プロセッサ)状態をハードウェアにロードし、マルチスレッド実行を開始するためにハードウェアを設定することは、ミリコードの責任である。各物理スレッドがそれ自体の状態の大部分を並列にロードすることを可能にすることによって効率を改善するために、ミリコードは、(プライマリ・スレッドまたは別の既に開始されたセカンダリ・スレッドのいずれかによって)セカンダリ・スレッドの各々のための少ない数のハードウェア・レジスタをロードすることができる。これは、現在不活性なセカンダリ・スレッドが、それ自体のゲスト状態の初期化を完了し、最終的にゲスト・プログラムの実行を開始することになるミリコード・ルーチンの実行を開始するために、ハードウェアの観点から「目覚めさせられる」ことを必要とする可能性がある。ハイパーバイザまたはゲスト・プログラム・コードがセカンダリ・スレッド上で実行されていなくても、内部ファームウェアが、たとえば、なんらかの内部システム管理機能を処理するために実行されている可能性がある場合が存在する。この場合は、マシンは、ゲスト・スレッドのディスパッチでこれを調整しなければならない。
コア全体に適用されるように指定され得る、TLBのパージなどのいくつかの操作が存在する。これは、各スレッドが、パージが必要かどうかと、必要ならばそのパージを実行する時とを決定する必要性を排除する。加えて、コア内の物理スレッド間で共有される、または共通の、いくつかのコア・リソースが存在する。ミリコードは、共有リソースが、単一のスレッドからロードされる必要があるだけであるという事実と、節約がそうするために認められる可能性がある場合、単一のスレッドが、共通スレッド・リソースのすべてのコピーをロードすることができるという事実とを利用することができる。VEエントリ・ミリコードはまた、有効なスレッド上での初期化ミリコードの実行を高速化しようとして、無効な論理スレッドの初期化をバイパスするために、ゲスト・マルチスレッド化対応ビットおよびスレッド有効性ビットを使用することができる。柔軟なハードウェア設計は、ミリコードの実施形態が、設計が発展するにつれてそれらの実施態様を最適化することを可能にする。
ここで、図14および図15を参照すると、コア・ディスパッチのマシン実施態様が、一実施形態に従って全体的に示されている。図14に示すように、ブロック1400で、コア・ディスパッチは、MTが指定されるstart−VE命令を使用して、単一のスレッド(プライマリ・スレッドと呼ばれる)上で実行されているハイパーバイザによって開始される。start−VE命令を発行するハイパーバイザに基づいて、VEエントリ・ミリコードは、命令を発行したスレッドであるプライマリ・スレッド上に呼び出され、それは、コア全体のためのハードウェア上でマルチスレッド化を開始することによって開始する。この初期化の多くは、すべての適用可能なセカンダリ・スレッドからのハードウェア状態ビットを試験すること、または適用可能なセカンダリ・スレッド内のハードウェア制御ビットもしくはフィールドを設定すること、あるいはその両方を含むことができる。図14に示す制御および状態ビット1450は、セカンダリ・スレッド自体のハードウェアに論理的に存在してもよく、または、それらは、スレッド間で共有されるが、セカンダリ・スレッドを表し、制御する共通ハードウェア・リソースに論理的に存在してもよい。ブロック1402で、VEエントリ・ミリコードは、状態記述内のスレッド有効性マスク(TVM)を使用し、ソフトウェアの観点からどのゲストが有効であるか、および、したがって、ハードウェアにロードされる必要があるかを決定する。それはまた、物理スレッドへの有効論理スレッドのマッピングを決定する。
図14のブロック1404ないしブロック1414は、要求された物理スレッドが利用可能であることを確認するためにミリコードによって実行される。ブロック1404では、ミリコードは、利用可能なセカンダリ・ハードウェア・スレッドが、内部コードを呼び出すことがある新たな割込みを行うことを防ぎ、または、任意の新たなプログラム・コードを開始することを防ぐ。これは、セカンダリ・スレッドにおける適切なハードウェア制御を設定することによって達成され得る。ブロック1406では、ソフトウェアがセカンダリ・スレッド上で実行されているかどうかが决定される。一実施形態では、プライマリ・スレッド上でstart−VE命令を発行しているハイパーバイザは、このコア上の他のハードウェア・スレッドが任意のプログラム・コード(たとえば、ハイパーバイザまたはゲスト・コード)を実行していないことを保証する。別の実施形態では、start−VE命令を発行するハイパーバイザは、この新たなstart−VEのために必要とされる任意の他のハードウェア・スレッドがプログラム・コードを実行しているかどうかを容易に決定することができない可能性があり、たとえば、コードは、独立したstart−VEに関連付けられている。この場合、VEエントリ・ミリコードは、ブロック1406で、セカンダリ・スレッド上の適切なハードウェア状態ビットをチェックする。
ブロック1406で、プログラム・コードが、ゲスト・セカンダリ・スレッドを実行するために必要とされるハードウェア上で実行されていることが决定された場合、新たなstart−VE命令は、完了し、ブロック1408で、ハイパーバイザは、start−VE命令が失敗したことをマシンによって通知され、潜在的には、現在利用可能なハードウェア・スレッドの数を通知される。応答では、ハイパーバイザは、ブロック1400でstart−VE命令を再び発行する前に、ブロック1410に示すように、ディスパッチされるべき有効ゲスト・スレッドの数を減少させる、または、いくらかの所定の時間の間待機することなどの適切なアクションを行ってもよい。ブロック1406で、ハードウェアが利用可能であることが决定された場合、処理は、ブロック1412に続く。ブロック1412で、ミリコードは、たとえば、ハードウェア内の適切なビットをチェックすることによって、適用可能なセカンダリ・ハードウェア・スレッドのいずれかが内部ファームウェア・コードを実行しているかどうかを決定する。その場合、一実施形態では、プライマリ・スレッドは、セカンダリ・スレッドが内部コードの実行を終了するのを待ち、待ちながら、ハングするのを防ぐために、プライマリ・スレッドは、特定の割込みを尊重してもよい。しかしながら、プライマリ・スレッドは、セカンダリ・スレッドが他の割込みを行うのを妨げてもよく、セカンダリ・スレッドは、より迅速にアイドル・状態に達することができる。処理は、次いで、ブロック1416に続く。別の実施形態では、ブロック1412で决定されるように、ハードウェア・スレッドが内部ファームウェア・コードを実行している場合、ブロック1414で、マシンは、start−VE命令を無効にし、制御をハイパーバイザに返してもよい。これは、内部ファームウェア割込みを行い、潜在的なハングを回避する機会をプライマリ・スレッドに与え、割込みがプライマリ・スレッド上で保留中でなければ、start−VE命令は、再び実行される。ファームウェア・コード動作は、しばしば、システム動作(たとえば、同時アップグレード)であり、加えて、スレッドは、それが終わるのを待つことが実行可能なオプションであるほどまれにしか内部ファームウェアを実行しないので、これらの実施形態の両方は、内部ファームウェアを一時停止し、マルチスレッド作業が完了したときにハードウェア上でそれを再始動するのと比較したとき、利点を有する。
処理は、次いで、物理コア上の物理スレッドに論理スレッドをロードすることを開始するために、ブロック1416に続く。ブロック1416では、ミリコードは、特定の例外条件に関連する例外をチェックし、取り出す。例外条件のいくつかは、start−VE命令自体(たとえば、無効な状態記述リング構造)に適用され、他のものは、セカンダリ論理スレッドに適用可能な条件(たとえば、NSD上のアクセス例外)に関連する。ブロック1418では、ゲスト・ハードウェア索引バッファ(TLBを含む)からのエントリは、パージされ得る。これは、適用可能なとき、セカンダリ・スレッドのための索引バッファをパージすることを含んでもよい。ブロック1420では、プライマリおよびセカンダリ状態記述からの最低限の状態がロードされ、有効スレッドの各々を含む必要なハードウェア機能が初期化される。一実施形態では、最小限の状態は、セカンダリ・スレッドのための状態記述アドレスを含む。ブロック1422では、セカンダリ・スレッドのためのハードウェア制御は、任意の内部命令ストリームをフェッチすることを停止するように設定される。これは、シングルスレッド実行からマルチスレッド実行への切り替えを単純化することができる。ブロック1424で、他の有効セカンダリ・スレッドの各々のためのミリコード命令アドレス(milli−IA)がロードされる。milli−IAは、セカンダリ・スレッドが内部命令ストリームをフェッチすることを開始したら、セカンダリ・スレッドが実行を開始する位置であり、それは、典型的には、各有効論理スレッドの初期化を完了することになるミリコード内の位置を指す。プライマリ・スレッドは、VEエントリ・ミリコードのその実行を継続し、したがって、新たなmilli−IAは、そこにロードされる必要はない。ブロック1426で、一実施形態では、プライマリ・スレッドは、セカンダリ・スレッドの実行モードを、以前にロードされたmilli−IAでセカンダリ・スレッドに実行を開始させるミリモードに変更するハードウェア制御を設定することによって、セカンダリ・スレッドを目覚めさせる。別の実施形態では、プライマリ・スレッド(Ta)は、第1のセカンダリ・スレッド(Tb)を目覚めさせることができ、Tbは、次のセカンダリ・スレッド(Tc)を目覚めさせることができ、すべての有効スレッドがアクティブになり、ハードウェア内で実行されるまで以下同様に続く。一実施形態では、セカンダリ・スレッドは、別のスレッドがその実行モードをミリコード実行モードまたはミリモードに設定するまで、ミリコード命令の実行を開始しない。
ここで図15を参照すると、ブロック1428および1478で、プライマリ・スレッドおよび各有効セカンダリ・スレッドは、関連するゲスト論理スレッド状態のハードウェア内へのロードを完了するために必要なミリコードを実行する。一実施形態では、状態は、図4に示すように、ゲスト汎用レジスタ(GR)402と、アクセス・レジスタ(AR)404と、制御レジスタ(CR)406と、プレフィックス・レジスタ408と、ゲスト・タイマ410と、仮想CPU番号(VCN)412と、プログラム状態ワード(PSW)および命令アドレス(IA)414と、遮断制御(IC)ビット420と、論理パーティション番号(LPN)432とを含む。ブロック1430および1480で、プライマリ・スレッドおよびセカンダリ・スレッドは、VEエントリの実行を完了し、それらは、ミリコード・モード(たとえば、ミリモード)をエグジットする。ブロック1432および1482で、それらは、ゲスト・スレッド・プログラム命令ストリームの実行を開始する。一実施形態では、各スレッドのVEエントリの完了は、他のスレッドのVEエントリの完了とは独立している。別の実施形態では、スレッドは、VEエントリを完了する前に同期をとる。
一実施形態では、コア・ディスパッチの使用と、シングルスレッドを実行するハイパーバイザとをサポートするために、所与のコア内のすべてのゲスト・スレッドが同時にSTホストにエグジットする、仮想実行からの協調したエグジット(VEエグジット)が提供され得る。協調VEエグジットの文脈では、VEエグジットのタイプは、3つのカテゴリ、(1)ホスト動作に属するホスト割込み、(2)ゲスト動作に属するホスト割込み、および(3)ゲスト遮断に分割され得る。ホスト外部、I/O、およびなんらかのマシン・チェック割込みは、VEエグジット・カテゴリ(1)に入る。この場合、すべてのゲスト・スレッドは、ホストが割込みを処理することを可能にするために、仮想実行モードをエグジットする必要がある。この割込みは、おそらくホストに異なるゲストをディスパッチさせることになる。仮想実行モードで実行中に割込みが発生した場合、ホスト割込みは、すべての仮想実行モードをエグジットすることができるように、すべてのスレッド上で検出され得るか、または、単一のスレッド上で検出され得、単一のスレッドは、次いで、他のスレッドがエグジットすべきである場合に、他のスレッドに合図する。
VEエグジット・カテゴリ(2)、すなわちゲストに属するホスト割込みは、いくつかのマシン・チェック割込み(訂正不能なストレージ・エラーなど)を含むことができる。非マルチスレッド状況では、これらの条件は、ホスト割込みとして提示される。1つのホスト・スレッドのみが存在するコア・ディスパッチでは、これらの例外は、ゲスト動作に属するので、複数のゲスト・スレッドが、同じホスト割込みのための明白な異なる理由を検出することが可能である。これに対応するために、コア・ディスパッチのために、適用可能なとき、これらのホスト割込みは、ゲスト遮断の新しいタイプとして対応するゲスト状態記述に代わりに示され、以下に説明するカテゴリ(3)と同じに扱われる。一実施形態では、ゲスト・メモリ参照により生じるホスト・アドレス変換障害割込みも、カテゴリ(2)に入り、ゲスト遮断の別の新たなタイプとして提示され得る。
ゲスト・マルチスレッド環境であっても、VEエグジット・カテゴリ(2)および(3)(上記)の両方に関するゲスト遮断は、単一のゲスト・スレッドに属し、別のスレッドのゲスト実行から独立している。複数のゲスト・スレッドは、そのような条件を同時に認識することがさらに可能であり、それらのすべてを処理することをホストに要求する。典型的には、遮断が提示されたとき、ホストは、ゲストの代わりにいくらかの動作をシミュレートし、次いで、その同じゲストを再ディスパッチすることになる。これらの場合では、ホストは、シングルスレッド化されて実行されているので、すべてのゲスト・スレッドは、ホストが遮断を処理することができるようになる前に、仮想実行モードをエグジットしなければならない。これは、1つのスレッドがホストに戻るように遮断しなければならないことを決定しているとき、すべてのスレッドが自然にエグジットするのを待つことによって、または他のスレッドにエグジットするように合図することによって達成され得る。これは、「協調VEエグジット」と呼ばれる。
各スレッドが仮想実行モードをエグジットしなければならないことを決定すると、各スレッドは、VEエグジットに入り、すべての他の有効スレッドがエグジットする準備ができるまで、初期VEエグジット調整ループで待機する。実施態様が必要とする場合、この調整ループに入る前にエグジットするように他のスレッドに合図する。VEエグジット調整ループ内の間、最小限の割込みのみが処理される。ホスト割込みおよびゲスト遮断が適用されないとき、ゲスト・スレッドが仮想実行モードからエグジットすることを必要とする状況を可能にするために、「ノー・アクション」遮断は、遮断アクションがこのゲストに代わって必要とされないことをホストに示すために定義される。
すべてのスレッドが初期VEエグジット調整ループに入ったら、すべての有効状態記述へのゲスト・データの記憶は、完了することができる。すなわち、ハードウェアに存在する現在のゲスト状態は、対応する状態記述に保存されるので、この論理ゲスト・スレッドは、後で再ディスパッチされ得る。制御が(典型的には、プライマリ・スレッド上で実行されている)ハイパーバイザに返される前に、セカンダリ・スレッド状態記述に対するすべての更新が完了したことを保証するために、この記憶が完了した後に、最終VEエグジット調整点が必要とされる。VEエグジットが完了したら、ハイパーバイザは、遮断が提示されたかどうかを決定し、そうである場合、それを適切に処理するために、リング内の各スレッドを処理することができる。そうした後、次いで、この同じゲスト論理コア、または物理プロセッサ上の異なるもののいずれかを再ディスパッチすることができる。
一実施形態は、マルチスレッド・ゲスト実行の一時停止と、シングルスレッド・ホストへの制御の戻しとを含む、仮想実行からの協調したエグジットのマシン実施態様を含む。MT環境では、仮想実行エグジット(VEエグジット)ミリコードは、大部分の条件の下で、可能であればすぐに仮想実行からエグジットするように他の有効ゲスト・スレッドに合図する責任がある。特に、スレッドが仮想実行からエグジットするために中断され得ない内部コードを現在実行している場合、エグジットを要求するスレッドから見られる遅延が大きい可能性がある。スレッドが、他のスレッドが仮想実行をエグジットするのを待っている間、ミリコードは、ハング状態をもたらす可能性がある割込み、またはシステム全体のパフォーマンスに影響を及ぼす可能性がある割込みなどの、特定の割込みを処理するために使用され得る。(その作業が割り込まれている可能性がある)他のスレッドが合図されている仮想実行からの最終的なエグジットを他の割込みが遅らせる可能性がある場合、ミリコードが他の割込みを処理するために最適ではない可能性がある。これはすべて、適切な割込み優先順位を依然として維持しながら行われなければならない。
加えて、ミリコードによって行われている仮想実行をエグジットするために必要な調整の多くは、各スレッドの状態を考慮しなければならない。たとえば、各論理スレッドが有効であるかどうかと、物理スレッドが内部コードを実行しているかどうかとを考慮しなければならない。プライマリ・スレッドが無効であるかどうかにかかわらず、これは、典型的には、ホスト・プログラムが再開されることになるスレッドであるので、依然として合図されなければならない。これはすべて、内部ミリコードを要求された割込みシステムを用いて達成される。
ミリコードはまた、セカンダリ・ゲスト・スレッドによって使用されているが、ゲスト状態が保存され、ホストがセカンダリ・スレッドを使用しないのでもはや必要とされない物理レジスタを解放するために、いくつかのアクションを実行してもよい。たとえばハードウェアは、特定の実施態様では、ゼロの内容を有する論理レジスタのすべてを、プライマリ・スレッドによって使用するための他の物理レジスタを残して単一の物理レジスタにマッピングすることができるので、ミリコードは、リソースを解放する手段として、マッピングされたレジスタをゼロにしてもよい。スレッド間で共有され、プライマリ・スレッドによる単独での使用のために解放され得る他のリソースが存在する可能性がある。ミリコードはまた、コア・リソースがミリコードを不必要に呼び出すために使用されないように、特定の割込みをマスク・オフすることができる。
任意のスレッドが、仮想実行からのエグジットが必要であると決定したら、たとえば、図16および図17を参照して以下に説明するように、他のスレッドに合図することになる。使用されるプロセスは、仮想実行をエグジットしているスレッドがプライマリ・スレッドまたはセカンダリ・スレッドのいずれであるかに基づいて変化する可能性がある。
一実施形態では、プライマリ・スレッドは、以下の条件、(1)仮想実行モードをエグジットし、制御をハイパーバイザに返すことを望む、(2)すべての他の有効スレッドが、まだエグジットのプロセス中ではない(すなわち、少なくとも1つのスレッドが、依然としてゲスト命令を実行している)、(3)すべての他のスレッドが、まだエグジットするように合図されていない、および(4)少なくとも1つの他の有効スレッドが存在する、のすべてが満たされた場合、仮想実行をエグジットするように有効セカンダリ・スレッドに合図することができる。これらの条件が満たされていない場合、各セカンダリ・スレッドは、クリーンアップし、独立して仮想実行をエグジットするために時間を与えられる。一実施形態では、条件(1)〜(3)のすべてが満たされた場合、セカンダリ・スレッドは、プライマリ・スレッド(それが無効であっても)およびすべての他の有効セカンダリ・スレッドに、仮想実行モードをエグジットするように合図する。一実施形態では、プライマリ・スレッドに仮想実行からの協調したエグジットを完了するように合図しなければならないので、唯一の有効スレッドである場合でも、セカンダリ・スレッドは、プライマリ・スレッドに信号を送らなければならない。
ここで図16および図17を参照すると、仮想実行からの協調したエグジットのマシン実施態様が、一実施形態に従って全体的に示されている。図16および図17に示す例では、プライマリ・スレッドPは、1502でゲスト命令ストリームPを実行しており、セカンダリ・スレッドAは、1542でゲスト命令ストリームAを実行しており、セカンダリ・スレッドBは、1572でゲスト命令ストリームBを実行している。ブロック1544では、セカンダリ・スレッドAは、仮想実行をエグジットしなければならないことを決定し、上記で説明した基準を使用して、他のスレッドに同様にエグジットするように合図しなければないことをブロック1546で決定する。セカンダリ・スレッドAは、内部エグジット仮想実行要求割込みを、プライマリ・スレッドPのハードウェア状態制御1508およびセカンダリ・スレッドBのハードウェア状態制御1578において保留中にすることによって、他のスレッドに合図する。セカンダリ・スレッドAのハードウェア状態制御1548も図16に示されている。プライマリ・スレッドPのためのブロック1510およびセカンダリ・スレッドBのためのブロック1580における内部割込みに応答するとき、各スレッドは、内部割込みの理由をチェックし、プライマリ・スレッドPのためのブロック1512およびセカンダリ・スレッドBのためのブロック1582で、内部割込みがエグジット仮想実行要求であるかどうかを決定する。エグジット仮想実行要求ではないと决定された場合、プライマリ・スレッドPおよびセカンダリ・スレッドBは、他の割込み要求を処理するために、それぞれ、ブロック1514および1584を実行する。
割込みがエグジット仮想実行要求である場合、一実施形態では、各スレッドは、独立して以下のプロセスを実行する。プライマリ・スレッドPのためのブロック1516およびセカンダリ・スレッドBのためのブロック1586では、スレッドが有効であるかどうかが决定される。仮想実行からのエグジットを要求したセカンダリ・スレッドAは、有効であると仮定され得る。有効であると决定されたスレッドについて、ハードウェアからの関連するゲスト状態の大部分は、それ自体の状態記述に保存される。これは、図4に示すように、ゲスト汎用レジスタ(GR)402と、アクセス・レジスタ(AR)404と、制御レジスタ406と、プログラム状態ワード(PSW)と、命令アドレス(IA)414とを含む。仮想CPU番号(VCN)412および論理パーティション番号(LPN)432などの、仮想実行中に変化しなかったゲスト状態は、保存される必要はない。これは、図16において、プライマリ・スレッドPのためのブロック1518、セカンダリ・スレッドAのためのブロック1558、およびセカンダリ・スレッドBのためのブロック1588に示されている。各スレッドは、初期VEエグジット調整点にあることを示すようにその内部状態を更新する。これは、図16において、プライマリ・スレッドPのためのブロック1520、セカンダリ・スレッドAのためのブロック1560、およびセカンダリ・スレッドBのためのブロック1590に示されている。
スレッドは、各々、継続する前に、プライマリ・スレッド(たとえば、プライマリ・スレッドP)およびすべての有効セカンダリ・スレッド(たとえば、セカンダリ・スレッドAおよびB)が初期調整点に到達するのを待つ。これは、図16において、プライマリ・スレッドPのためのブロック1521、セカンダリ・スレッドAのためのブロック1561、およびセカンダリ・スレッドBのためのブロック1591に示されている。スレッドのすべてがエグジット仮想実行ミリコードにおける初期VE調整点に到達したら、スレッドの各々は、状態記述における適切な情報の更新を完了する。この情報の例は、図4中のゲスト・タイマ408の一部であるゲストCPUタイマを含むことができる。これは、図16において、プライマリ・スレッドPのためのブロック1522、セカンダリ・スレッドAのためのブロック1562、およびセカンダリ・スレッドBのためのブロック1592に示されている。この状態保存を調整点まで遅らせることは、スレッド間のゲスト・タイミングにおける一貫性を改善する。
ここで図17を参照すると、各スレッドは、VEエグジット・ミリコードにおける最終調整点にあることを示すようにそれ自体の内部状態を更新する。これは、図17において、プライマリ・スレッドPのためのブロック1524、セカンダリ・スレッドAのためのブロック1564、およびセカンダリ・スレッドBのためのブロック1594に示されている。加えて、プライマリ・スレッドAは、ブロック1528に続く前に、ブロック1526で、スレッドのすべてが最終調整点1599に到達するのを待つ。各セカンダリ・スレッドは、マシンにミリコードをエグジットさせ、コードの実行を停止させる有効プログラム命令ストリームをもはや実行していないことを示すように内部ハードウェア・ビットを設定する。これは、図17において、セカンダリ・スレッドAのためのブロック1566、およびセカンダリ・スレッドBのためのブロック1596に示されている。一実施形態では、各セカンダリ・スレッドは、次のStart−VEまで任意のプログラム・コードを実行しないが、内部割込みを処理するために、必要に応じて内部コードを実行してもよい。
すべてのスレッドが、図17中に点1599として示す、VEエグジット・ミリコードにおける最終調整点に到達したら、シングルスレッド実行が、プライマリ・スレッドP上で開始される。プライマリ・スレッドPは、ブロック1528でコア・クリーンアップを完了し、ブロック1530でホスト・プログラムIAを含むハイパーバイザ状態をハードウェアにロードし、ブロック1532でミリモードを抜ける。結果として、プライマリ・スレッドPは、ホスト・モードで実行されており、任意の適切なホスト割込みを処理することになり、ハイパーバイザは、任意のゲスト遮断を処理することになる。
技術的効果および利点は、ディスパッチされたMTゲスト論理コアからSTホストへの協調エグジットを実行する機能を含む。
実施形態は、マルチスレッド・ゲスト仮想マシン(VM)をエグジットするためのシステム、方法、およびコンピュータ・プログラム製品を含む。一態様によれば、コンピュータ・システムは、シングルスレッド(ST)モードおよびマルチスレッディング(MT)モードで動作することが可能なマシンを有する構成を含む。加えて、マシンは、物理スレッドを含む。マシンは、MTモードでコア上でゲスト・エンティティを実行することを含む方法を実行するように構成される。ゲスト・エンティティは、ゲストVMのすべてまたは一部と、物理スレッド上で実行される複数の論理スレッドとを含む。エグジット・イベントは、マシンにおいて検出される。エグジット・イベントを検出することに基づいて、マシンは、物理スレッド上で現在実行されている論理スレッドのすべてが同期点に達するまで待つ。エグジット理由情報を含む状態は、論理スレッドの各々について保存され、ホストの実行は、物理スレッドの1つの上でSTモードで開始される。
別の態様によれば、STモードおよびMTモードで動作可能なマシンを含み、物理スレッドを含む構成内でマルチスレッド・ゲストVMをエグジットするためのコンピュータ実装方法が提供される。方法は、MTモードでコア上でゲスト・エンティティを実行することを含む。ゲスト・エンティティは、ゲストVMのすべてまたは一部と、物理スレッド上で実行される複数の論理スレッドとを含む。エグジット・イベントは、マシンにおいて検出される。エグジット・イベントを検出することに基づいて、マシンは、物理スレッド上で現在実行されている論理スレッドのすべてが同期点に達するまで待つ。エグジット理由情報を含む状態は、論理スレッドの各々について保存され、ホストの実行は、物理スレッドの1つの上でSTモードで開始される。
さらなる態様は、STモードおよびMTモードで動作可能なマシンを含み、物理スレッドを含む構成内でマルチスレッド・ゲストVMをエグジットするためのコンピュータ・プログラム製品を含む。コンピュータ・プログラム製品は、それにより具現化されたプログラム命令を有するコンピュータ可読記憶媒体を含み、コンピュータ可読記憶媒体は、信号ではない。プログラム命令は、処理回路に方法を実行させるために、この処理回路によって可読である。方法は、MTモードでコア上でゲスト・エンティティを実行することを含む。ゲスト・エンティティは、ゲストVMのすべてまたは一部と、物理スレッド上で実行される複数の論理スレッドとを含む。エグジット・イベントは、マシンにおいて検出される。エグジット・イベントを検出することに基づいて、マシンは、物理スレッド上で現在実行されている論理スレッドのすべてが同期点に達するまで待つ。エグジット理由情報を含む状態は、論理スレッドの各々について保存され、ホストの実行は、物理スレッドの1つの上でSTモードで開始される。
上記で説明した1つまたは複数の特徴に加えて、または代替として、さらなる実施形態は、検出することが、ゲスト・エンティティ内の1つまたは複数のスレッドにおける場合を含むことができる。
上記で説明した1つまたは複数の特徴に加えて、または代替として、さらなる実施形態は、検出することに基づいて、エグジット・イベントを検出した1つまたは複数のスレッドのうちの少なくとも1つが、コアをエグジットするようにゲスト・エンティティ内の他のスレッドに合図する場合を含むことができる。
上記で説明した1つまたは複数の特徴に加えて、または代替として、さらなる実施形態は、エグジット・イベントを検出した1つまたは複数のスレッドのうちの少なくとも1つが、他のスレッドの各々において内部割込みを保留中にすることによって、他の論理スレッドに合図する場合を含むことができる。
上記で説明した1つまたは複数の特徴に加えて、または代替として、さらなる実施形態は、ビットが、複数のスレッドの各々によって、同期点に到達したことを示すために設定される場合を含むことができる。
上記で説明した1つまたは複数の特徴に加えて、または代替として、さらなる実施形態は、各々のスレッドの状態の一部が、各々のスレッドが同期点に到達する前に、状態記述位置に保存される場合を含むことができる。
上記で説明した1つまたは複数の特徴に加えて、または代替として、さらなる実施形態は、物理スレッドのうちの1つの上でSTモードでホストの実行を開始する前に、マシンが、各々のスレッドの完全な状態が状態記述位置に保存されるまで待機する場合を含むことができる。
上記で説明した1つまたは複数の特徴に加えて、または代替として、さらなる実施形態は、物理スレッドのうちの1つの上でSTモードでホストの実行を開始することに基づいて、物理スレッドのうちの1つの上でSTモードでホストを実行する場合を含むことができる。
本明細書で使用される用語は、特定の実施形態のみを説明する目的のためであり、本発明を限定することを意図するものではない。本明細書で使用される場合、単数形「a」、「an」、および「the」は、文脈が明確にそうでないことを示さない限り、同様に複数形を含むことを意図している。「備える」という用語または「備えている」という用語、あるいはその両方は、本明細書で使用されるとき、述べられた特徴、整数、ステップ、動作、要素、または構成要素、あるいはそれらの組合せの存在を指定するが、1つまたは複数の他の特徴、整数、ステップ、動作、要素、構成要素、またはそれらのグループ、あるいはそれらの組合せの存在または追加を排除しない。
以下の特許請求の範囲内のすべてのミーンズまたはステップ・プラス・ファンクション要素の対応する構造、材料、作用、および均等物は、特に特許請求された他の特許請求された要素との組合せで機能を実行するための任意の構造、材料、または作用を含むことを意図している。本発明の説明は、例示および説明の目的のために提示されているが、網羅的であること、または開示された形態の本発明に限定することを意図するものではない。多くの変更および変形は、本発明の範囲および要旨から逸脱することなく、当業者には明らかとなるであろう。実施形態は、本発明の原理および実用的な応用を最良に説明するため、ならびに、考えられる特定の用途に適しているような様々な変更を加えた様々な実施形態について、当業者が本発明を理解することを可能にするために、選択され、説明された。
本発明の様々な実施形態の説明は、例示の目的のために提示されているが、網羅的であること、または開示された実施形態に限定されることを意図するものではない。多くの変更および変形は、説明した実施形態の範囲および要旨から逸脱することなく、当業者には明らかとなるであろう。本明細書で使用される用語は、実施形態の原理、実用的な応用、もしくは市場で見られる技術を上回る技術的改善を最良に説明するため、または、本明細書に開示された実施形態を当業者が理解することを可能にするために選択された。
ここで図18を参照すると、一例では、コンピュータ・プログラム製品1600は、たとえば、本明細書に記載の実施形態の1つまたは複数の態様を提供し、容易にするために、その上にコンピュータ可読プログラム・コード手段またはロジック1604を記憶するために、1つまたは複数の記憶媒体1602を含み、媒体は、有形または非一時的、あるいはその両方であってもよい。
本発明は、システム、方法、またはコンピュータ・プログラム製品、あるいはそれらの組合せであってもよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読記憶媒体(または媒体)を含んでもよい。
コンピュータ可読記憶媒体は、命令実行デバイスによって使用するための命令を保持し、記憶することができる有形デバイスであり得る。コンピュータ可読記憶媒体は、たとえば、限定はしないが、電子記憶デバイス、磁気記憶デバイス、光記憶デバイス、電磁記憶デバイス、半導体記憶デバイス、または上記のものの任意の適切な組合せであってもよい。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、以下の、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読出し専用メモリ(ROM)、消去可能プログラマブル読出し専用メモリ(EPROMまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク読出し専用メモリ(CD−ROM)、デジタル多用途ディスク(DVD)、メモリースティック(R)、フロッピー(R)ディスク、パンチ・カードまたはその上に記録された命令を有する溝内の隆起構造などの機械的にエンコードされたデバイス、および上記のものの任意の適切な組合せを含む。本明細書で使用するコンピュータ可読記憶媒体は、電波もしくは他の自由に伝播する電磁波、導波路もしくは他の伝送媒体を通って伝播する電磁波(たとえば、光ファイバ・ケーブルを通過する光パルス)、またはワイヤを通って送信される電気信号などの、一時的な信号自体として解釈されるべきではない。
本明細書に記載のコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から個々のコンピューティング/処理デバイスに、または、ネットワーク、たとえば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくはワイヤレス・ネットワーク、あるいはそれらの組合せを介して、外部コンピュータもしくは外部記憶デバイスにダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはそれらの組合せを備えてもよい。各コンピューティング/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、個々のコンピューティング/処理デバイス内のコンピュータ可読記憶媒体に記憶するためのコンピュータ可読プログラム命令を転送する。
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、または、Smalltalk(R)、C++などのオブジェクト指向プログラミング言語と、「C」プログラミング言語もしくは同様のプログラミング言語などの従来の手続き型言語とを含む、1つもしくは複数のプログラミング言語の任意の組合せで書かれたソース・コードもしくはオブジェクト・コードのいずれかであってもよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で完全に、スタンドアロン・ソフトウェア・パッケージとしてユーザのコンピュータ上で部分的に、ユーザのコンピュータ上で部分的におよびリモート・コンピュータ上で部分的に、またはリモート・コンピュータもしくはサーバ上で完全に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)もしくはワイド・エリア・ネットワーク(WAN)を含む任意のタイプのネットワークを介してユーザのコンピュータに接続されてもよく、または、接続は、(たとえば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータに対して形成されてもよい。いくつかの実施形態では、たとえば、プログラマブル論理回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル論理アレイ(PLA)を含む電子回路は、本発明の態様を実行するために、電子回路をパーソナライズするようにコンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行してもよい。
本発明の態様は、本発明の実施形態による方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図、あるいはその両方を参照して本明細書で説明される。フローチャート図またはブロック図、あるいはその両方の各ブロック、および、フローチャート図またはブロック図、あるいはその両方におけるブロックの組合せは、コンピュータ可読プログラム命令によって実装され得ることが理解されるであろう。
これらのコンピュータ可読プログラム命令は、コンピュータのプロセッサまたは他のプログラマブル・データ処理装置を介して実行される命令が、フローチャートまたはブロック図、あるいはその両方の1つまたは複数のブロックで指定される機能/作用を実装するための手段を作成するように、汎用コンピュータ、専用コンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供されて、マシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令はまた、命令が記憶されたコンピュータ可読記憶媒体がフローチャートまたはブロック図、あるいはその両方の1つまたは複数のブロックで指定される機能/作用の態様を実装する命令を含む製造品を備えるように、コンピュータ可読記憶媒体に記憶され、コンピュータ、プログラマブル・データ処理装置、または他のデバイス、あるいはそれらの組合せに特定の方法で機能するよう指示することができるものであってもよい。
コンピュータ可読プログラム命令はまた、コンピュータ、他のプログラマブル装置、または他のデバイス上で実行される命令がフローチャートまたはブロック図、あるいはその両方の1つまたは複数のブロックで指定される機能/作用を実装するように、コンピュータ実装プロセスを生成するべく、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイス上にロードされ、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させるものであってもよい。
図中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実施態様のアーキテクチャ、機能、および動作を例示する。この点で、フローチャートまたはブロック図中の各ブロックは、指定された論理機能を実装するための1つまたは複数の実行可能命令を備える、モジュール、セグメント、または命令の一部を表すことができる。いくつかの代替実施態様では、ブロックに記された機能は、図中に記された順序を外れて生じてもよい。たとえば、連続して示された2つのブロックは、実際には、実質的に同時に実行されてもよく、または、ブロックは、時には、関連する機能に応じて、逆の順序で実行されてもよい。また、ブロック図またはフローチャート図、あるいは両方の各ブロック、および、ブロック図またはフローチャート図、あるいは両方におけるブロックの組合せは、指定された機能もしくは作用を実行する、または専用ハードウェアおよびコンピュータ命令の組合せを実行させる専用ハードウェア・ベースのシステムによって実装され得ることに留意されたい。