(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-04-20
(54)【発明の名称】ハイパーバイザ命令に対する条件付きイールド
(51)【国際特許分類】
G06F 9/48 20060101AFI20220413BHJP
G06F 9/30 20180101ALI20220413BHJP
G06F 9/455 20060101ALI20220413BHJP
【FI】
G06F9/48 300H
G06F9/30 310A
G06F9/455 150
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2021551512
(86)(22)【出願日】2020-01-07
(85)【翻訳文提出日】2021-08-30
(86)【国際出願番号】 GB2020050025
(87)【国際公開番号】W WO2020174209
(87)【国際公開日】2020-09-03
(32)【優先日】2019-02-28
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
(71)【出願人】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】特許業務法人浅村特許事務所
(72)【発明者】
【氏名】ディーコン、ウィリアム ジェイムズ
(72)【発明者】
【氏名】ジンジエ、マーク
【テーマコード(参考)】
5B033
【Fターム(参考)】
5B033BA00
5B033FA27
(57)【要約】
【解決手段】 装置は、処理回路上で実行する1つ以上の仮想プロセッサを管理するためのハイパーバイザの実行用のハイパーバイザ実行モードと、ハイパーバイザ実行モードよりも少なくとも1つの低位の特権実行モードと、を有する、処理回路(16)を備える。少なくとも1つの低位の特権実行モードで実行されるハイパーバイザ命令に対する条件付きイールドに応じて、命令デコーダ(14)は、処理回路(16)を制御して、少なくとも1つのトラップ条件が満たされているかどうかを判定し、少なくとも1つのトラップ条件が満たされていると判定されると、処理回路をハイパーバイザ実行モードに切り替え、ハイパーバイザ実行モードで実行される命令にアクセス可能な少なくとも1つの記憶要素に、少なくとも1つのトラップ条件が依然として満たされているかどうかを推定するためのスケジューリングヒント情報の少なくとも1つのアイテムを記憶する。
【選択図】
図8
【特許請求の範囲】
【請求項1】
装置であって、
データ処理を実行する処理回路と、
前記処理回路を制御して前記データ処理を実行する命令をデコードする命令デコーダと、を備え、
前記処理回路が、前記処理回路上で実行する1つ以上の仮想プロセッサを管理するためのハイパーバイザの実行用のハイパーバイザ実行モードと、前記ハイパーバイザ実行モードよりも少なくとも1つの低位の特権実行モードと、を有し、
前記少なくとも1つの低位の特権の実行モードで実行されるハイパーバイザ命令に対する条件付きイールドに応じて、前記命令デコーダが、前記処理回路を制御して、
少なくとも1つのトラップ条件が満たされているかどうかを判定し、
前記少なくとも1つのトラップ条件が満たされていると判定されると、
前記処理回路を前記ハイパーバイザ実行モードに切り替え、
前記ハイパーバイザ実行モードで実行される命令にアクセス可能な少なくとも1つの記憶要素に、少なくとも1つのトラップ条件が依然として満たされているかどうかを推定するためのスケジューリングヒント情報の少なくとも1つのアイテムを記憶する、ように構成されている、装置。
【請求項2】
前記スケジューリングヒント情報が、前記ハイパーバイザ命令に対する条件付きイールドによって指定された少なくとも1つのレジスタ指定子の指示を含む、請求項1に記載の装置。
【請求項3】
前記スケジューリングヒント情報が、前記少なくとも1つのレジスタ指定子によって指定された少なくとも1つのレジスタのレジスタ幅の指示を含む、請求項2に記載の装置。
【請求項4】
前記スケジューリングヒント情報が、前記ハイパーバイザ命令に対する条件付きイールドによって指定された複数のレジスタ指定子の指示を含む、請求項2又は3に記載の装置。
【請求項5】
前記ハイパーバイザ命令に対する前記条件付きイールドが、1つ以上のイベントのクラスのうちの1つが発生したものとして示されるまで待機するように前記処理回路に命令するためのイベント待機命令を含み、
前記処理回路が、前記1つ以上のイベントのクラスのうちの1つが発生したものとして示されるときに、前記少なくとも1つのトラップ条件が満たされていないと判定するように構成されている、請求項1~4のいずれか一項に記載の装置。
【請求項6】
前記1つ以上のイベントのクラスが、排他モニタによって追跡された追跡アドレスへのメモリアクセスの検出を含む、請求項5に記載の装置。
【請求項7】
前記スケジューリングヒント情報の少なくとも1つのアイテムが、前記イベント待機命令の実行時に、前記排他モニタによって追跡されている前記追跡アドレスに対応するヒントアドレスを含む、請求項6に記載の装置。
【請求項8】
前記処理回路により実行される命令によって指定された仮想アドレスを、前記仮想アドレスと中間アドレスとの間のマッピングを示す第1のアドレス変換データと、前記中間アドレスと前記物理アドレスとの間のマッピングを示す第2のアドレス変換データとに基づいて、前記仮想アドレスに対応するメモリロケーションを識別する物理アドレスに変換するアドレス変換回路を備え、
前記追跡アドレスが物理アドレスであり、前記ヒントアドレスが前記追跡アドレスに対応する前記中間アドレスである、請求項7に記載の装置。
【請求項9】
前記スケジューリングヒント情報が、前記ハイパーバイザ実行モードへの切り替え時に、前記追跡アドレスに対応する前記中間アドレスが利用可能かどうかに依存する有効な指示セットを含む、請求項8に記載の装置。
【請求項10】
ターゲットアドレスを指定するロード排他命令に応じて、前記命令デコーダが、前記ターゲットアドレスを前記追跡アドレスとして設定するために前記排他モニタをトリガする前記処理回路を制御するように構成されている、請求項6~9のいずれか一項に記載の装置。
【請求項11】
前記処理回路により実行される命令によって指定された仮想アドレスを、前記仮想アドレスと中間アドレスとの間のマッピングを示す第1のアドレス変換データと、前記中間アドレスと前記物理アドレスとの間のマッピングを示す第2のアドレス変換データとに基づいて、前記仮想アドレスに対応するメモリロケーションを識別する物理アドレスに変換するアドレス変換回路を備え、
前記アドレス変換回路が、それぞれが仮想から物理へのアドレスマッピングを記憶する複数のキャッシュエントリを含む、組み合わされた変換キャッシュを備え、
前記ロード排他命令に応じて、前記アドレス変換回路が、たとえ前記組み合わされた変換キャッシュが、前記ロード排他命令の前記ターゲットアドレスに対応する前記仮想から物理へのアドレスマッピングを記憶するキャッシュエントリを既に含む場合でも、前記第1のアドレス変換データのルックアップをトリガして、前記ターゲットアドレスに対応する前記中間アドレスを取得するように構成されている、請求項10に記載の装置。
【請求項12】
前記スケジューリングヒント情報の少なくとも1つのアイテムが、前記排他モニタが前記イベント待機命令の実行時に前記追跡アドレスとして任意のアドレスを追跡したかどうかに応じて設定される、有効な指示を含む、請求項6~11のいずれか一項に記載の装置。
【請求項13】
前記ハイパーバイザ命令に対する条件付きイールドが前記ハイパーバイザにトラップすべきかどうかを示すトラップ制御インジケータを記憶するハイパーバイザ制御レジスタを備え、
前記ハイパーバイザ命令に対する条件付きイールドに応じて、前記処理回路が、前記トラップ制御インジケータに応じて前記少なくとも1つのトラップ条件が満たされているかどうかを判定するように構成されている、請求項1~12のいずれか一項に記載の装置。
【請求項14】
第1の値及び第2の値のうちの1つを有するトラップ制御インジケータを記憶するハイパーバイザ制御レジスタを備え、
前記トラップ制御インジケータが前記第1の値を有するとき、前記処理回路が、前記1つ以上のイベントのクラスのうちの1つが発生したものとして示されているかどうかにかかわらず、前記少なくとも1つのトラップ条件が満たされていないと判定するように構成され、
前記トラップ制御インジケータが前記第2の値を有するとき、前記処理回路が、前記1つ以上のイベントのクラスのうちのいずれも発生していないと示されているときに、前記少なくとも1つのトラップ条件が満たされていると判定するように構成されている、請求項5~12のいずれか一項に記載の装置。
【請求項15】
処理回路上で実行する1つ以上の仮想プロセッサを管理するためのハイパーバイザの実行用のハイパーバイザ実行モードと、前記ハイパーバイザ実行モードよりも少なくとも1つの低位の特権実行モードと、を有する前記処理回路を備える装置のためのデータ処理方法であって、前記方法が、
前記少なくとも1つの低位の特権実行モードで実行されるハイパーバイザ命令に対する条件付きイールドをデコードすることと、
前記ハイパーバイザ命令に対する条件付きイールドをデコードすることに応じて、
少なくとも1つのトラップ条件が満たされているかどうかを判定することと、
前記少なくとも1つのトラップ条件が満たされていると判定されると、
前記処理回路を前記ハイパーバイザ実行モードに切り替えることと、
前記ハイパーバイザ実行モードで実行される命令にアクセス可能な少なくとも1つの記憶要素に、前記少なくとも1つのトラップ条件が依然として満たされているかどうかを推定するためのスケジューリングヒント情報の少なくとも1つのアイテムを記憶することと、を含む、方法。
【請求項16】
命令を実行するための命令実行環境を提供するために、ホストデータ処理装置を制御するコンピュータプログラムであって、前記コンピュータプログラムが、
前記ホストデータ処理装置を制御して、ターゲットコードの命令に対応するデータ処理を実行するために、前記命令実行環境内で実行されるターゲットコードの命令をデコードする命令デコードプログラムロジックを含み、前記命令実行環境が、前記命令実行環境内で実行される1つ以上の仮想プロセッサを管理するためのハイパーバイザの実行用のハイパーバイザ実行モードと、前記ハイパーバイザ実行モードよりも少なくとも1つの低位の特権実行モードと、を有し、
前記少なくとも1つの低位の特権実行モードで実行される前記ターゲットコードのハイパーバイザ命令に対する条件付きイールドに応じて、前記命令デコードプログラムロジックが、前記ホストデータ処理装置を制御して、
少なくとも1つのトラップ条件が満たされているかどうかを判定し、
前記少なくとも1つのトラップ条件が満たされていると判定されると、
前記命令実行環境を前記ハイパーバイザ実行モードに切り替え、
前記ハイパーバイザ実行モードで実行される前記ターゲットコードの命令にアクセス可能な少なくとも1つのデータ構造に、前記少なくとも1つのトラップ条件が依然として満たされているかどうかを推定するためのスケジューリングヒント情報の少なくとも1つのアイテムを記憶する、ように構成されている。コンピュータプログラム。
【請求項17】
請求項16に記載の前記コンピュータプログラムを記憶する、記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本技術は、データ処理分野に関するものである。
【発明の概要】
【発明が解決しようとする課題】
【0002】
仮想化されたデータ処理システムでは、ハイパーバイザは、物理処理回路上で実行する1つ以上の仮想プロセッサを管理することができる。仮想プロセッサは、1つ以上の物理プロセッサコアを含み得る物理処理プラットフォームのリソース上にハイパーバイザによってマッピングされ得る。ハイパーバイザは、複数の仮想マシンの実行をサポートすることができ、各仮想マシンは、ハイパーバイザがその仮想マシン用の所与の数の仮想プロセッサを作成するように要求することができ、各仮想プロセッサは物理プロセッサコアの挙動をエミュレートする。ハイパーバイザは、所与の仮想プロセッサによって必要とされる仮想リソースと、ハードウェア内に実際に提供される物理リソースとの間のマッピングを管理し、並びにそれぞれの仮想プロセッサのスケジューリングを制御して、各仮想プロセッサに処理リソースが割り当てられるタイミングを制御することができる。
【0003】
少なくともいくつかの実施例は、データ処理を実行する処理回路と、処理回路を制御してデータ処理を実行する命令をデコードする命令デコーダと、を備える装置を提供し、ここで、処理回路は、処理回路上で実行する1つ以上の仮想プロセッサを管理するためのハイパーバイザの実行用のハイパーバイザ実行モードと、ハイパーバイザ実行モードよりも少なくとも1つの低位の特権実行モードとを有し、その少なくとも1つの低位の特権実行モードで実行されるハイパーバイザ命令に対する条件付きイールドに応じて、命令デコーダは、処理回路を制御して、少なくとも1つのトラップ条件が満たされているかどうかを判定し、少なくとも1つのトラップ条件が満たされていると判定されると、処理回路をハイパーバイザ実行モードに切り替え、ハイパーバイザ実行モードで実行される命令にアクセス可能な少なくとも1つの記憶要素に、少なくとも1つのトラップ条件が依然として満たされているかどうかを推定するためのスケジューリングヒント情報の少なくとも1つのアイテムを記憶する、ように構成されている。
【0004】
少なくともいくつかの実施例は、処理回路上で実行する1つ以上の仮想プロセッサを管理するためのハイパーバイザの実行用のハイパーバイザ実行モードと、ハイパーバイザ実行モードよりも少なくとも1つの低位の特権実行モードと、を有する処理回路を備える装置のためのデータ処理方法を提供し、方法は、その少なくとも1つの低位の特権実行モードで実行されるハイパーバイザ命令に対する条件付きイールドをデコードすることと、ハイパーバイザ命令に対する条件付きイールドをデコードすることに応じて、少なくとも1つのトラップ条件が満たされているかどうかを判定することと、少なくとも1つのトラップ条件が満たされていると判定されると、処理回路をハイパーバイザ実行モードに切り替えることと、ハイパーバイザ実行モードで実行される命令にアクセス可能な少なくとも1つの記憶要素に、少なくとも1つのトラップ条件が依然として満たされているかどうかを推定するためのスケジューリングヒント情報の少なくとも1つのアイテムを記憶することと、を含む。
【0005】
少なくともいくつかの実施例は、命令を実行するための命令実行環境を提供するように、ホストデータ処理装置を制御するためのコンピュータプログラムを提供し、コンピュータプログラムは、ホストデータ処理装置を制御して、ターゲットコードの命令に対応するデータ処理を実行するために、命令実行環境内で実行されるターゲットコードの命令をデコードする命令デコードプログラムロジックを含み、命令実行環境は、命令実行環境内で実行される1つ以上の仮想プロセッサを管理するためのハイパーバイザの実行用のハイパーバイザ実行モードと、ハイパーバイザ実行モードよりも少なくとも1つの低位の特権実行モードと、を有し、ここで、その少なくとも1つの低位の特権実行モードで実行されるターゲットコードのハイパーバイザ命令に対する条件付きイールドに応じて、命令デコードプログラムロジックは、ホストデータ処理装置を制御して、少なくとも1つのトラップ条件が満たされているかどうかを判定し、少なくとも1つのトラップ条件が満たされていると判定されると、命令実行環境をハイパーバイザ実行モードに切り替え、ハイパーバイザ実行モードで実行されるターゲットコードの命令にアクセス可能な少なくとも1つのデータ構造に、少なくとも1つのトラップ条件が依然として満たされているかどうかを推定するためのスケジューリングヒント情報の少なくとも1つのアイテムを記憶する、ように構成されている。
【0006】
上述のコンピュータプログラムを記憶する記憶媒体が、提供されてもよい。記憶媒体は、非一時的記憶媒体であってもよい。
【0007】
本技術の更なる態様、特徴、及び利点は、添付の図面と併せて読まれるべきである、以下の実施例の説明から明らかとなるであろう。
【図面の簡単な説明】
【0008】
【
図1】
図1は、データ処理システムの一例を概略的に示している。
【
図2】
図2は、ハイパーバイザモードを含む、異なる特権の異なる実行モードの一例を示している。
【
図3】
図3は、プロセッサコアのアーキテクチャレジスタの一部の一例を示している。
【
図4】
図4は、2段階アドレス変換の一例を示している。
【
図5】
図5は、ロード排他命令を処理する方法を示すフロー図である。
【
図6】
図6は、排他モニタによる追跡アドレスへのアクセスの追跡を示すフロー図である。
【
図7】
図7は、ハイパーバイザ命令に対する条件付きイールドの一例を示している。
【
図8】
図8は、ハイパーバイザ命令に対する条件付きイールドを処理する方法を示すフロー図である。
【
図9】
図9は、ハイパーバイザ命令に対する条件付きイールドに対してトラップ条件が満たされているかどうかを判定するためのより詳細なステップを示すフロー図である。
【
図10】
図10は、ハイパーバイザ命令に対する条件付きイールドに応じて、スケジューリングヒント情報を記憶するためのより詳細なステップを示すフロー図である。
【
図11】
図11は、使用され得るシミュレータの例を示している。
【発明を実施するための形態】
【0009】
いくつかの処理ワークロードでは、現在実行中のプロセスは、特定の値に設定されているメモリ内の所与のアドレスにおけるデータ値などの、いくつかのイベントが発生するまで又は条件が満たされるまで前方進行できない場合がある。例えば、これは、ロック変数がメモリ内のデータ構造へのアクセスを制御するために使用されている場合であり得、このとき1つのプロセスは、他のプロセスがもはや同じデータ構造を使用しないことを示すために、別のプロセスによってロック変数がクリアされるまで、そのデータ構造を使用するのを待機する必要があり得る。これは、データ構造に対する更新が自動的に行われることを確実にするために、排他アクセスを強制するために有用であり得る。
【0010】
仮想化システムでは、いくつかの条件が満たされるのを依然として待機しているプロセスは、可能な場合にハイパーバイザが異なる仮想プロセッサをリスケジュールすることを可能にするために、処理回路の制御をハイパーバイザに自発的に譲ってもよく、それによって、物理処理リソースは、イールドしている仮想プロセッサが待機している時に有用な作業のために使用することができる。しかしながら、ハイパーバイザは、各仮想プロセッサの正確なワークロードがハイパーバイザによって一般的に知られていないため、ハイパーバイザが次にスケジュールする仮想プロセッサを知ることは比較的困難であり得る。現在完全な進行を行うことができない仮想プロセッサの実行をハイパーバイザが選択する際の利益は、ほとんど存在し得ない。
【0011】
いくつかの処理ワークロードは、待ち行列に入れられたロック機構を使用することができ、プロセッサは、それらが共有リソースにアクセスできる順序を管理するために待ち行列構造を使用することができる。ハイパーバイザが、待ち行列に入れられたロックを使用するスケジューリング仮想プロセッサである場合、待ち行列内に到着する順序で仮想プロセッサをスケジュールすることが重要であり得、それによって、物理的な処理リソースが、前方進行できない仮想プロセッサを実行して浪費されないようにする。同様に、ロックが既にライタによって保持されているロックによって制御された変数を読み取るのを待機している仮想プロセッサをスケジューリングすることには、ほとんど意味がない。
【0012】
この問題に対処するための1つのアプローチは、パラ仮想化を使用することであり得、ここでハイパーバイザは、ロック若しくは待ち行列などのコンカレントデータ構造を実装するためのサービスを提供するか、又は更には特定の仮想プロセッサに対するイールドに向けられたサービスを提供することができる。これらのアプローチでは、仮想マシン及びハイパーバイザは、メモリ内の共有データ構造(例えば、待ち行列)を介して互いに通信することができ、これを使用してロックを追跡し、それによって、ハイパーバイザが所与の仮想プロセッサが前方進行を行う可能性が高いかどうかを判定することができる。しかしながら、このアプローチは、複数の欠点を有する。第1に、仮想マシンコードの所与の部品が、それが実行される特定のハイパーバイザによって提供される特定の形態の制御データ構造と相互作用するための命令を含む必要があるため、このアプローチは、異なるハイパーバイザの実装間で本質的に非ポータブルである。したがって、新しいコンカレントアルゴリズムが実施されるたびに、これは、所与の仮想マシンのコードの拡張を必要とすることになる。また、このアプローチは、ハイパーバイザコードのデベロッパと仮想マシンコードとの間の協働を必要とし、複雑性及び開発コストを増大させ得る。また、このパラ仮想化は、ハードウェアによって提供される処理リソースを使用するために競合する比較的少ない他の仮想プロセッサが存在するスクライブ未満のシステムにおいて、大幅なオーバヘッドを追加し得る、ハイパーバイザに対する無条件トラップに依存する場合があるため、性能の点から不利であり得る。また、いくつかのアーキテクチャでは、ハイパーバイザへの明示的な呼び出しは、ユーザモードコードに許可されない場合があるため、多くの場合、アプリケーションレベルソフトウェアは、これらのパラ仮想化インタフェースを何らかの方法で使用することができ得ない。また、そのようなコンカレントデータ構造へのアクセスは、ハイパーバイザ及び仮想マシンの両方から追加のアドレス変換オーバヘッドを必要とする場合がある。
【0013】
以下で論じられる技術では、所与の仮想プロセッサが条件付きでハイパーバイザに処理回路の制御をイールドすることを可能とし、また、ハイパーバイザが同じ仮想プロセッサをリスケジュールしようと試みる効率が高いかどうかを判定することを可能にし得るハイパーバイザのスケジューリングヒント情報も伝達する、ハイパーバイザ命令に対する条件付きイールドのためのアーキテクチャサポートが提供される。これにより、ハイパーバイザ及び仮想プロセッサが上述のようなメモリ構造を介して相互作用する必要性を回避し、したがって、コードのポータビリティを改善し、上述した性能コストを低減するのに役立つ。
【0014】
したがって、装置は、処理回路によって実行される1つ以上の仮想プロセッサと、ハイパーバイザ実行モードよりも低位の特権を有する少なくとも1つの実行モードとを管理するためのハイパーバイザの実行用のハイパーバイザ実行モードを有する処理回路を有し得る。命令デコーダは、少なくとも1つの低位の特権実行モードで実行されると、少なくとも1つのトラップ条件が満たされているかどうかを判定するために処理回路を制御する、ハイパーバイザ命令に対する条件付きイールドのデコードをサポートすることができる。少なくとも1つのトラップ条件が満たされていると判定されると、処理回路は、ハイパーバイザモードに切り替え、ハイパーバイザモードで実行される命令にアクセス可能な少なくとも1つの記憶要素に、少なくとも1つのトラップ条件が依然として満たされているかどうかを推定するための少なくとも1つのスケジューリングヒント情報のアイテムを記憶するように制御される。したがって、アーキテクチャレベルでのハイパーバイザへのスケジューリングヒント情報の伝達をサポートすることによって、仮想マシン及びハイパーバイザが、スケジューリングヒントを提供するためにメモリを介して相互作用する必要がなく、これにより、パラ仮想化を用いて上述した問題を排除する。
【0015】
ハイパーバイザ命令に対する条件付きイールドに応じて、処理回路によって返されたスケジューリングヒント情報は、ハイパーバイザが依然としてトラップ条件が満たされているかどうかの推定を行うことを可能にし得る任意の情報を含むことができる。例えば、スケジューリングヒント情報は、仮想プロセッサがトラップ条件が満たされているかどうかを評価するために使用された値を含み得る。例えば、少なくとも1つのトラップ条件を、少なくとも1つのレジスタ内の値に基づいて評価すべきだった場合、少なくとも1つのレジスタ内の値をハイパーバイザの命令にアクセス可能な場所にコピーし得、ハイパーバイザがそれらのデータ値を試験して状態を評価することを可能にする。
【0016】
しかしながら、実際には、低位の特権実行モードにアクセス可能なレジスタは、ハイパーバイザ実行モードにアクセス可能でもあり得るため、レジスタ間のそれらのレジスタの値を実際にコピーする必要がない場合がある。代わりに、いくつかの実施例では、スケジューリングヒント情報は、ハイパーバイザ命令に対する条件付きイールドによって指定された、少なくとも1つのレジスタ指定子の指示を含み得る。レジスタ指定子のサイズは、多くの場合、レジスタ自体のビット数よりも小さくてもよいため、この手法は、エネルギーを節約し得る、書き込まれるビットの数を低減することができる。
【0017】
いくつかのシステムでは、アーキテクチャは、異なるレジスタ幅のレジスタをサポートすることができるため、この場合、スケジューリングヒント情報はまた、少なくとも1つのレジスタ指定子によって指定された少なくとも1つのレジスタのレジスタ幅の表示を含むことができ、それによって、ハイパーバイザは、レジスタのどれだけ多くのビットをチェックすべきかを判定することができる。
【0018】
例えば、これらのレジスタは、仮想プロセッサによって使用されて、メモリシステム内の所与のメモリアドレスの最後に見られた値を追跡することができ、仮想プロセッサが次いで、コードの次のセクションに進むことができることを示す特定の値に変更されたかどうかを判定するためにポーリングされ得る。ポーリングされた変数の最後に見られた値をレジスタが記憶する指示を返すことにより、ハイパーバイザは、そのポーリングされた変数がその最後に見られた値から変更されたかどうかをチェックすることを可能にすることができ、この時点で、以前に実行された仮想プロセッサをもう一度リスケジュールすることを試みる価値があり得る。ポーリングされた変数は、依然として最後に見られた値と同じであるが、これにより、トラップ条件が依然として満たされている可能性が高く、そのため、ポーリングされた変数の値が変更されるまで仮想プロセッサをリスケジューリングする意味は存在しないことを示す。したがって、いくつかの実施例では、ハイパーバイザ命令に対する条件付きイールドは、ポーリングされた変数の値を所与の宛先レジスタ内にロードする特定の命令が続くコードのシーケンスに含むことができ、次いで、ハイパーバイザ命令に対する条件付きイールドは、ポーリングされた変数を記憶するために使用される宛先レジスタのレジスタ指定子を指定することができる。これは、ハイパーバイザ命令に対する条件付きイールドのための単なる1つの例示的な使用事例であり、同じ命令を使用して他の情報をハイパーバイザに伝達することもでき、ここでトラップ条件が満たされているかどうかを決定するのに有用な情報を記憶するレジスタが、ハイパーバイザ自体がそのレジスタからの値を読み取ることができるように、スケジュールヒント情報としてハイパーバイザに渡されたそのレジスタ指定子を有する、ことを理解されたい。
【0019】
いくつかの実施例では、スケジューリングヒント情報は、条件付きイールドハイパーバイザ命令によって指定された複数のレジスタ指定子の指示を含み得る。場合によっては、以前に実行された仮想プロセッサに対してトラップ条件が依然として満たされる可能性が高いかどうかを評価するために、ハイパーバイザに利用可能にされる複数の異なる値が有用であり得る。例えば、場合によっては、メモリ内の可変のポーリングは、可変のどの部分がチェックされるべきかを指定するマスク値によって修飾されてもよい。例えば、メモリ内の所与のリソースへのアクセスを制御するために使用されるロック変数は、ロックを保持するプロセスのアイデンティティを指定するフィールド、並びにロックが現在セットされているか又はクリアされているかを示すフィールドを含む複数のフィールドを含み得る。マスクを使用して、ポーリングが、ロックがセットされているか又はクリアされているかを示すフィールドの変更にのみ応答することを確実にすることができる。したがって、そのようなマスクをハイパーバイザに利用可能にすることが有用であり得、これは、ポーリングされた変数の最後に見られた値を保持するレジスタのレジスタ指定子に加えて、マスクレジスタのレジスタ指定子を伝達することによって行うことができる。この場合も、これはただ1つの使用事例であり、一般に、ハイパーバイザ命令に対する条件付きイールドは、(それらのレジスタの内容が、以前の命令によって提供されているかにかかわらず)ハイパーバイザ実行モードにアクセス可能な場所に任意の2つ以上のレジスタ指定子をコピーすることを可能にするエンコードを有する。
【0020】
ハイパーバイザ実行モードで実行される命令にアクセス可能な少なくとも1つの記憶要素は、少なくとも1つのレジスタであってもよい。場合によっては、スケジューリングヒント情報が書き込まれるレジスタは、ハイパーバイザ実行モードよりも低位の特権実行モードで実行される他の命令にアクセスできないレジスタであってもよい。これにより、処理システム上で実行する他の仮想マシン又はアプリケーションは、ハイパーバイザに対するイールドをトリガする仮想マシンの機能への見識を得ることができる。これは、セキュリティが懸念されるいくつかの実装形態では重要であり得る。
【0021】
一実施例では、ハイパーバイザ命令に対する条件付きイールドは、1つ以上のイベントのクラスのうちの1つが発生したものとして示されるまで待機するように、処理回路に指示するためのイベント待機(wait-for-event、WFE)命令を含んでもよい。処理回路は、1つ以上のイベントのクラスのうちの1つが発生したものとして示されるときに、少なくとも1つのトラップ条件が満たされていないと判定することができる。イベントのクラスには、割り込み若しくは例外の発生、デバッグ中断の発生、又はブレイクポイント若しくはワッチポイントなどの他の診断イベント、又は排他モニタによって追跡される追跡アドレスへのメモリアクセスの検出などの、様々なアクションを含むことができる。一般に、処理回路は、これらのイベントのいずれも発生しなかった場合に、WFE命令に応じて、ハイパーバイザにトラップすることができる。これらのイベントのうちの1つが発生した場合、WFE命令はハイパーバイザにトラップしない場合があり、仮想プロセッサは後続の命令の処理を継続することができる。
【0022】
これは、イベントのクラスが排他モニタによって追跡された追跡アドレスへのメモリアクセスの検出を含む場合に、特に有用であり得る。これは、上述のように、共有リソースへのアクセスを管理するために、ロック又は待ち行列構造を伴うワークロードを可能にするために有用であり得る。このアプローチでは、追跡されるべき所与のアドレスは、排他モニタに割り当てられてもよく、これは次いで、他のプロセッサコア又は他のスレッドによって行われるメモリアクセスをモニタすることができる。追跡アドレスへのメモリアクセスが検出された場合、次いでこれは、イベントとしてシグナリングされ得る。WFE命令を受け、インジケーションが(追跡アドレスへのメモリアクセスを含む)イベントのうちの1つが発生したことを検出した場合、トラップ条件が満たされないことをもたらす値に追跡アドレスが現在更新されている可能性があるため、仮想プロセッサが前方進行し続けることができるように、WFE命令は、ハイパーバイザにトラップされない。発生したイベントが、追跡アドレスに対応するメモリ位置の、トラッピングを回避するために必要な値への更新ではなかった場合、WFE命令を実行するための後続の試みが、次いでもう一度トラップし得る。このアプローチにより、WFE命令は、イベント待機がまだ起こっていない場合に、ハイパーバイザに対するプロセッサの条件付きイールド制御に効果的に使用することができる。上述のアプローチでは、そのようなWFE命令は、ハイパーバイザが依然としてトラップ条件が満たされているかどうかを推定することを可能にするために、少なくとも1つのスケジューリングヒント情報を返すように拡張することもできる。
【0023】
例えば、スケジューリングヒント情報の少なくとも1つのアイテムは、WFE命令の実行時に、排他モニタによって追跡されている追跡アドレスに対応するヒントアドレスを含んでもよい。このヒントアドレスは、上述の条件付きイールドハイパーバイザ命令によって指定された1つ以上のレジスタのレジスタ指定子に加えて記録されてもよい。ヒントアドレスを記録することによって、ハイパーバイザがヒントアドレス自体に関連付けられたデータ値をチェックし、そのヒントアドレスの値が変更されたかどうかを判定することを可能にし、それによって、これをスケジューリング決定に織り込むことができる。ヒントアドレスにおけるデータ値がその以前に見られた値から変更されていない場合、同じ仮想プロセッサを再度リスケジューリングしないということがハイパーバイザによって判定されてもよい。
【0024】
いくつかのシステムは、処理回路により実行される命令によって指定された仮想アドレスを、仮想アドレスと中間アドレスとの間のマッピングを示す第1のアドレス変換データと、中間アドレスと物理アドレスとの間のマッピングを示す第2のアドレス変換データとに基づいて、仮想アドレスに対応するメモリロケーションを識別する物理アドレスに変換するアドレス変換回路が提供される、2段階アドレス変換を使用することができる。そのような2段階アドレス変換は、第1のアドレス変換データが仮想マシンソフトウェアによって設定され得、かつ第2のアドレス変換データがハイパーバイザによって設定され得、各仮想マシンが処理ハードウェアで実行する唯一のオペレーティングシステムであるかのような同じ方法でメモリへのアクセスを管理することを可能にし、一方で、第2のアドレス変換データがハイパーバイザによって使用されて、異なる仮想マシンから異なる物理アドレスへの競合する中間アドレスをマッピングすることができるため、仮想化されたシステムにおいて有用であり得る。
【0025】
このような2段階アドレス変換スキームでは、上述した追跡アドレスは物理アドレスであってもよい。しかしながら、WFE命令に応じて、スケジューリングヒント情報は、追跡アドレスに対応する中間アドレスとして返されるヒントアドレスを含んでもよい。これは、ハイパーバイザが典型的に、物理アドレスよりも効率的に、中間アドレスを既存のマッピングのハイパーバイザ仮想アドレスに変換することが可能であり得るため、有用であり得る。
【0026】
スケジューリング情報が追跡アドレスに対応する中間アドレスを含むためのものである場合、スケジューリングヒント情報はまた、WFE命令に応じて、ハイパーバイザ実行モードに切り替える時に、追跡アドレスに対応する中間アドレスが利用可能であるかどうかに応じて設定される有効な指示を含み得る。場合によっては、WFE命令を実行する時に、追跡アドレスに対応する中間アドレスは、変換ルックアサイドバッファ又は他のアドレス変換キャッシュ内にキャッシュされ得ないため、中間アドレスを取得することには、仮想アドレスと中間アドレスとの間のマッピングを提供するページテーブル構造が中間アドレスを識別するためにウォークスルーされる間、時間がかかる場合がある。中間アドレスが利用可能ではないが、ハイパーバイザ実行モードへのトラップを可能にするためにトラップ条件が満たされている場合、たとえ中間アドレスを含む完全なスケジューリングヒント情報をハイパーバイザに利用可能にすることができないとしても、とにかくハイパーバイザ実行モードにトラップすることがより効率的であり得る。これは、ハイパーバイザ実行モードにトラッピングすることにより、ハイパーバイザが異なる仮想プロセッサをリスケジュールする機会を提供するからであり、ハイパーバイザ実行モードに対するトラップが、中間アドレスが利用可能になるまで延期された場合は不可能である。たとえ中間アドレスに関する知識の欠如が、ハイパーバイザの結果として、以前にトラップされた同じ仮想プロセッサを直ちにリスケジューリングする場合であっても、これは単に、中間アドレスを待機している間にトラッピングがとにかく延期されたかのような、単に同じ遅延ペナルティである。したがって、中間アドレスがまだ利用可能でない場合のトラップにより、以前にイールドした仮想プロセッサよりも前方進行を可能にする可能性が高い別の仮想プロセッサに機会を与えることによって、性能を向上させることができるが、中間アドレスが利用可能である場合、スケジューリングヒント情報でこれを利用可能とすると、仮想プロセッサが次のスケジュールをスケジュールするハイパーバイザにより、より多くの情報に基づいた決定を可能にし得る。
【0027】
いくつかのアーキテクチャでは、排他モニタの設定は、ターゲットアドレスを指定するロード排他命令に応じて、命令デコーダが処理回路を制御して、ターゲットアドレスに記憶されたデータ値のロードを特定の宛先レジスタにトリガし、また、ターゲットアドレスを追跡アドレスとして設定するために排他モニタをトリガするのに応じて、行われてもよい。
【0028】
上述のような2段階アドレス変換を使用するシステムでは、アドレス変換回路は、仮想アドレス、中間アドレス、及び/又は物理アドレス間のアドレスマッピングの一部をキャッシュするための変換キャッシュを有してもよい。いくつかのアプローチは、分割された変換キャッシュを使用することができ、第1のアドレス変換キャッシュは、仮想アドレスと中間アドレスとの間のマッピングを提供する第1のアドレス変換データのエントリをキャッシュするために提供され、第2の別個の変換キャッシュは、中間アドレスと物理アドレスとの間のマッピングを提供する第2のアドレス変換データの部分をキャッシュするために提供される。
【0029】
しかしながら、他の実装形態は、仮想アドレスから物理アドレスへの直接的なマッピングを記憶するためのキャッシュエントリを有する組み合わされた変換キャッシュを使用して、中間アドレスをバイパスすることができる。したがって、そのような組み合わされた変換キャッシュが更新されると、更新されたエントリ内で指定された情報は、仮想アドレスと中間アドレスとの間のマッピングを制御する第1のアドレス変換データと、中間アドレスと物理アドレスとの間のマッピングを制御する第2のアドレス変換データの両方に依存する。
【0030】
分割変換キャッシュアプローチを使用するシステムでは、排他モニタによって追跡されている所与のターゲットアドレスに導かれるロード排他命令の以前の実行に続いて、WFE命令を受けたときに、追跡アドレスに対応する中間アドレスは、分割された変換キャッシュの第1のアドレス変換キャッシュ内に依然としてキャッシュされ得る可能性がより高い。
【0031】
しかしながら、組み合わされた変換キャッシュを使用するシステムでは、組み合わされた変換キャッシュのキャッシュエントリが、仮想アドレスから物理アドレスへのマッピングを直接記憶するため、スケジューリングヒント情報に含むために中間アドレスが利用可能である可能性が低くなり得る。したがって、そのようなシステムでは、たとえ組み合わされた変換キャッシュが、ロード排他命令のターゲットアドレスに対応する仮想から物理へのアドレスマッピングを記憶するキャッシュエントリを既に含む場合でも、ロード排他命令が、第1のアドレス変換データのルックアップをトリガして、ロード排他命令のターゲットアドレスに対応する中間アドレスを取得することが有用であり得る。例えば、アドレス変換回路は、この方法で、ロード排他命令のターゲットアドレスに対応する複数の中間アドレスをキャッシュするための、少量の追加のキャッシュ記憶装置を有し得る。そのような中間アドレスは、必要とされる仮想から物理へのアドレスマッピングがアドレス変換キャッシュ内で既に利用可能である場合、ロード排他命令自体にサービスを提供するために必要とされず、追加の中間アドレスルックアップをトリガすることは、その後のWFE命令が実行される場合、追跡アドレスに対応する中間アドレスが変換回路に対処するために利用可能となる可能性が高いことを意味するため、有用であり得、したがって、中間アドレスが、上述のようなスケジューリングヒント情報として返され得る可能性が高い。したがって、組み合わされた変換キャッシュを使用するマイクロアーキテクチャ実装形態では、ロード排他命令のための直接的仮想から物理へのアドレスマッピングが既に利用可能であるかどうかにかかわらず、中間アドレスルックアップをトリガすることにより、スケジューリングヒント情報の一部として中間アドレスを受信する可能性が高くなり、それによって、仮想プロセッサのスケジューリングに対してより適切な決定を行うことができるため、ハイパーバイザの性能を改善することができる。
【0032】
それにもかかわらず、ハイパーバイザ命令に対する条件付きイールド、及びWFE命令の特定の例は、それぞれ、第1段階及び第2段階アドレスマッピング専用の分割アドレス変換キャッシュを使用するマイクロアーキテクチャにも使用できることを理解されたい。
【0033】
いくつかの実施例では、スケジューリングヒント情報の少なくとも1つのアイテムは、排他モニタがイベント待機命令の実行時に追跡アドレスとして任意のアドレスを追跡したかどうかに応じて設定される、有効な指示を含んでもよい。この指示は、中間アドレスが上述のように利用可能であるかどうかを示す有効な指示と同じであってもよく、又は別個の指示であってもよい。アドレスが排他モニタによって追跡されなかった場合に無効な指示を返すことによって、仮想プロセッサをリスケジュールするかどうかを判定するときに、ヒントアドレスを考慮すべきでないことをハイパーバイザにフラグすることができる。例えば、時に、WFE命令は、メモリ内のアドレスのポーリングを処理する以外の目的のために使用されてもよいため、ハイパーバイザに利用可能な排他モニタによって追跡されるアドレスを作成することが常に望まれ得ず、したがって、有効な指示は、そのスケジューリング決定を行う際に、排他モニタによって追跡されるアドレスに対応する記憶ビットが、ハイパーバイザによってチェックされるべきかどうかを適格にするために有用であり得る。
【0034】
場合によっては、ハイパーバイザ命令に対する条件付きイールドについて少なくとも1つのトラップ条件が満たされているかどうかは、ハイパーバイザ命令に対する条件付きイールドがハイパーバイザに追跡されるべきかどうかを示す、ハイパーバイザ制御レジスタに記憶されたトラップ制御インジケータに依存し得る。したがって、いくつかの場合では、それぞれが満たされなければならない複数の形態のトラップ条件が存在し得、例えば、トラップ制御インジケータの両方が、ハイパーバイザ命令に対する条件付きイールドがトラップするべきであることを示し、処理回路が、WFE命令に応じて、1つ以上のイベントのクラスのいずれも発生していないと示されていないことを判定する場合に、トラップ条件のセット全体が満たされ得る。
【0035】
ハイパーバイザ制御レジスタを使用するハイパーバイザ命令に対する条件付きイールドに応じて、ハイパーバイザへのトラップを無効化する能力は有用であり得、それは、仮想プロセッサが、所与の物理プラットフォーム上で走る唯一の仮想プロセッサであり得るためであり、その場合、トラップではないハイパーバイザ命令に対する条件付きイールドに対してより効率的であり得、その代わりに、たとえ仮想プロセッサが待機しているイベントがまだ発生していない場合であっても、ハードウェアに提供される処理リソースを使用することができる他の任意の仮想プロセッサが存在しないため、トラップなしで仮想プロセッサ自体内で処理を継続する。
【0036】
より具体的には、ハイパーバイザ制御レジスタは、第1の値及び第2の値のうちの1つを有するトラップ制御インジケータを記憶してもよい。上述のWFE命令例では、トラップ制御インジケータが第1の値を有する場合、処理回路は、イベントのクラスのいずれかが発生したものとして示されているかどうかにかかわらず、少なくとも1つのトラップ条件が満たされていないと判定することができる。トラップ制御インジケータが第2の値を有する場合、処理回路は、必要なクラスの1つ以上のイベントのうちのいずれかが発生したかどうかに基づいて、少なくとも1つのトラップ条件が満たされているかどうかを判定してもよい。したがって、トラップ制御インジケータが第2の値を有するとき、イベントのクラスのいずれも発生していないと示された場合、少なくとも1つのトラップ条件は満たされていると考えられ、一方、1つ以上のイベントのクラスのうちの1つが発生したものとして示されている場合、少なくとも1つのトラップ条件は満たされない。
【0037】
図1は、複数のプロセッサコア4を含むデータ処理システム2の一例を概略的に示している。この実施例では、システムは、2つのプロセッサコアを有するマルチプロセッサシステムであるが、他の実施例では、多数のプロセッサコアを有してもよく、又は単一のプロセッサコアのみを備え得る。複数のプロセッサコア4が提供される場合、それらは相互接続部6を介して互いに通信することができ、相互接続部6は、それぞれのコア内のキャッシュ8間のコヒーレンシを管理することができる。プロセッサコア4は、共有キャッシュ10及びメインメモリ12を含み得る共有メモリシステムへのアクセスを共有することができる。各プロセッサコア4は、命令キャッシュ又はメモリからフェッチされた命令をデコードし、かつ処理回路16を制御してデータ処理動作を実行するための制御信号を生成するための命令デコーダ14を含んでもよい。各コア4は、処理回路16によって処理されたオペランドを記憶し、かつ処理回路16の動作を制御するための制御値を記憶するためのレジスタ18を有してもよい。各コアはまた、仮想メモリアドレスと物理メモリアドレスとの間で変換するためのアドレス変換回路として機能するメモリ管理ユニット(MMU)20と、システムの他の部分によって特定のアドレスへのアクセスを追跡するための排他モニタ22とを有してもよく、これらの両方については、以下でより詳細に説明する。
【0038】
図1では、プロセッサコア4のそれぞれの一般的な構成は同じものとして示されているが、同じシステム内の異なるコア間にはマイクロアーキテクチャの違いが依然として存在し得るため、各コアが同一であることは必須ではないことを理解されたい。例えば、1つのプロセッサコア4は、別のコア4内の処理回路16よりも大きい命令のスループットを有することができる処理回路16を有し得、又は1つのコアは、別のコアよりも大きいキャッシュ容量を有し得る。
【0039】
図2に示されるように、処理システムは、仮想化をサポートするアーキテクチャを有してもよく、複数の仮想マシンをハイパーバイザの制御下で同じ物理的プラットフォーム上で実行することができる。各仮想マシンは、仮想マシンが、存在する唯一のオペレーティングシステムであるネイティブオペレーティングシステムであったかとのような同じ方法で、その下で実行されるアプリケーションの数の実行を管理することができるが、ハイパーバイザは、異なる仮想マシンのスケジューリングを管理することができ、物理プラットフォーム2により実際に提供される物理リソース上への仮想マシンによって予測される仮想リソース(メモリ、周辺機器など)間のマッピングを管理することができる。仮想マシンは、ハイパーバイザが所与の数の仮想プロセッサ(virtual processor、VP)を確立するためのリソースを作成することを要求してもよく、この仮想プロセッサはそれぞれ、所与の物理プロセッサコアの存在をエミュレートするが、仮想プロセッサVPがハードウェアに提供された物理的プラットフォームの物理的コア上にそれぞれマッピングされる場合、ハードウェアに実際に提供されるよりも多くの数の仮想プロセッサが提供され得る。各仮想マシンは(仮想マシンの下で実行するアプリケーションと共に)、仮想プロセッサの特定の数を要求することができ(例えば、VM0は仮想プロセッサVP0~VP3の作成を要求することができ、VM1は、仮想プロセッサVP4~VP5の作成を要求することができる、など)したがって、所与の仮想マシンの観点から、特定の数のプロセッサコアを有するマルチプロセッサコアプラットフォーム上で実行されるが、これらは実際にはハードウェア内の異なる数の物理コア上にマッピングされてもよい。
【0040】
そのような仮想化をサポートするために、プロセッサコア4は、
図2の実施例では、EL2、EL1、EL0とラベル付けされた、異なる特権レベルの複数の実行モードをサポートするプロセッサアーキテクチャに従って動作することができる。この実施例では、EL0は、最小特権動作状態であり、EL2は、最大特権動作状態である。いくつかの実施例では、EL2よりも更に大きい特権の更なる実行モード、例えば、安全な動作世界とそれよりも安全でないオペレーティング世界との間のパーティショニングを制御するセキュアモニタソフトウェアを実行するためのセキュアモニタ実行モードが存在し得る。
【0041】
各実行モードでは、処理回路16は、レジスタ18に記憶されたアーキテクチャ状態の特定のサブセットへのアクセスを有してもよい。一般に、下位の特権モードにアクセス可能な任意の状態はまた、そのモードよりも上位の特権を有する他のモードにもアクセス可能であり得る。したがって、EL1では、処理回路16によって実行される命令は、EL0にアクセス可能な任意のレジスタ状態へのアクセスを有してもよいが、加えて、EL0で動作しているときにプロセッサにアクセス可能でない、いくつかの追加のレジスタへのアクセスも有し得る。同様に、EL2で動作しているとき、プロセッサコアは、EL0及びEL1のうちの1つで動作するときにプロセッサにアクセス可能でない、特定のレジスタへのアクセスを有し得る。異なる実行モード間の遷移は、例外及び例外戻りに基づいてもよく、例外は、低位の特権状態から上位の特権状態への遷移をトリガし、その例外の処理から戻ると、低位の特権実行モードに戻るように処理する。例外は、外部イベントによって引き起こされ得、又はメモリ障害若しくはハイパーバイザ命令に対する条件付きイールドなどの所与の実行状態で実行するソフトウェアによってもたらされるイベントによって引き起こされ得る。
【0042】
図3は、特定のアーキテクチャによるプロセッサコア4内に提供されるレジスタ18のサブセットの例を示している。これは、提供され得るレジスタ状態の一部のみであり、レジスタ18はまた、
図3に示されていない他のアーキテクチャレジスタ、例えば、浮動小数点値を記憶するための浮動小数点レジスタ、又は他の制御値を記憶するための更なるシステムレジスタも含み得ることを理解されたい。
【0043】
図3に示されるように、レジスタ18は、実行モードのうちのいずれかで実行される命令に一般にアクセス可能な、汎用レジスタ30のセットを含むことができる。これらは、特定の数の汎用レジスタX0~X12を含んでもよく、これらは、それらの命令用のオペランドを識別するために使用する命令に利用可能であり得、又は命令の結果を書き込むことができる宛先レジスタとして使用することができる。汎用レジスタのいくつかは、プロセッサの動作を制御するための特別な目的を果たし得る。例えば、レジスタX13は、例えば例外及び例外戻りに応じてレジスタ状態をスタック又はスタック解除するために使用され得る、メモリ内の対応するスタックデータ構造のアドレスを提供するスタックポインタレジスタとして機能することができる。レジスタX14は、処理が別の機能を処理した後に戻り得る戻りアドレスを記憶するリンクレジスタとして機能することができる。レジスタX15は、現在の実行ポイントを表すアドレスを示すプログラムカウンタとして機能することができる。
【0044】
レジスタ18はまた、処理回路16の動作を制御するために使用される制御値を記憶し得る、複数のシステムレジスタ32を含んでもよい。
図3は、メモリ障害をトリガするアドレスに関する情報を記録するための故障アドレスレジスタ34と、発生し得た例外についての情報を記録するためのバンクされた例外ステータスレジスタ36、38のペアと、ハイパーバイザの動作を制御し、どのイベントがハイパーバイザにトラップをトリガするかを制御するための制御情報を記憶するためのハイパーバイザ制御レジスタ40と、を含み得る、これらのレジスタのサブセットを示す。
【0045】
例えば、現在実行されているプロセスが、アクセスが要求されているメモリの所与の領域にアクセスすることが許可されていない場合、又は登録されたアドレスに関する、対応する仮想から物理へのアドレスマッピングがまだ定義されていない場合に発生し得る。メモリ障害をトリガするメモリアクセスに応じて、故障に起因するアドレスは、FAR34に書き込まれ、それによって、故障がEL1における仮想マシン、又はEL2におけるハイパーバイザにトラップをトリガすると、監視コードはFAR32から故障の理由を識別することができ、次いでアクションを取ることができるため、新しいエントリをページテーブル構造に割り当てることにより、アドレスがマップされることを可能にして、故障が再び発生しないようにマッピングすることができる。
【0046】
例外ステータスレジスタ36、38は、EL1で実行している間に例外が発生した場合に、レジスタ36(ESR_EL2)が使用されて、EL2で実行されるハイパーバイザに利用可能な例外の原因に関する情報を作成するようにバンクされ、それによって、次いで適切なアクションを取ることができる。例えば、例外の理由を識別する例外ステータス識別子は、例外ステータスレジスタ36に記憶され得る。同様に、例外がEL0において実行している間に発生する場合、例外に関する情報は、EL1に対応する例外ステータスレジスタ38に記録され得る。例外ステータスレジスタをバンキングすることによって、これは、一連の入れ子になった例外が発生する場合(EL0からEL1への切り替えをトリガする例外に、次いでEL1からEL2に別の例外が続く場合)を意味し、次いで、いったんハイパーバイザがEL2において例外を処理した後に、EL1において実行している仮想マシンに戻ると、仮想マシンは更に、第2の例外ステータスレジスタ38(ESR_EL1)の内容に基づいて、EL0において以前に発生していた例外の理由を判定することができる。
【0047】
ハイパーバイザ制御レジスタ40は、複数の異なるタイプのイベントが処理回路をトリガしてハイパーバイザモードEL2に切り替え得るかどうかを指定する複数のビットを含んでもよい。これらのイベントのうちの1つは、EL0及びEL1のうちの1つで実行されるイベント待機(WFE)命令が、ハイパーバイザ実行モードEL2への切り替えをトリガするかどうかを制御する、トラップ制御インジケータ42であってもよい。ハイパーバイザ構成レジスタ(HCR)40はまた、ハイパーバイザの動作に影響を及ぼす制御情報のいくつかの他の部分を含み得、又はハイパーバイザにトラップを必要とする状況を定義することができることを理解されたい。
【0048】
図3に示されるように、レジスタ18はまた、複数の特定のクラスのイベントのうちの1つが発生した場合に設定されるイベントレジスタ44を含んでもよい。イベントレジスタ44は、ソフトウェアに直接見えなくてもよい。イベントレジスタを設定させ得るイベントには、特定の割り込み、又は例外、ブレイクポイント若しくはワッチポイントなどの特定のデバッグイベント、又は以下に論じられるような排他モニタ22によるアドレスを引き付けるメモリアクセスの検出を含み得る。
【0049】
図4に示されるように、所与のプロセッサコア4内のMMU20は、2段階アドレス変換プロセスに従ってアドレス変換を管理することができる。仮想マシンは、仮想アドレス(VA)から中間物理アドレス(IPA)へのマッピングを定義するためにメモリシステム内に記憶されている段階1ページテーブル50を定義してもよい。仮想マシンは、それが実行している唯一のオペレーティングシステムであると仮定し、中間物理アドレスが実際には、メモリシステム内の対応する場所を直接識別する物理アドレスであると仮定して、設計されてもよい。しかしながら、ハイパーバイザは、中間物理アドレスを、メモリシステム内の対応する場所を実際に識別する物理アドレスへマッピングするのを制御する段階2ページテーブル52を設定することができる。これにより、ハイパーバイザは、異なる仮想マシンによって使用されるIPAをマッピングして、競合を回避するために、メモリ内の異なる変数を異なる物理アドレスに参照する。
【0050】
図1に示されるように、MMUは、毎回メモリから読み出されなければならない場合よりも速いアクセスに対してページテーブル50、52の部分をキャッシュするための、少なくとも1つのアドレス変換キャッシュ21(変換ルックアサイドバッファ又はTLBとしても知られる)を含んでもよい。いくつかのシステムでは、TLB21は、別個の段階1及び段階2のTLBがそれぞれ、段階1及び段階2のページテーブル50、52のキャッシュ部分用に提供される分割TLBであってもよい。しかしながら、他のシステムは、TLBの各キャッシュエントリが、段階1及び段階2のページテーブル50、52から読み出されたエントリの組み合わせから導出されるVAからTAへの直接のマッピングを記憶する、統一TLB21を使用してもよい。それにより、所与の仮想アドレスの統一TLBに既にキャッシュされている場合、物理アドレスをより速く配置することができる。
【0051】
図1に示されるように、所与のプロセッサコア4は、メモリ内の特定のアドレスへのアクセスをモニタするために使用され得る排他モニタ22を有する。
図1は、プロセッサコア4自体内に提供されている排他モニタ22を示しているが、他の実施例では、排他モニタを相互接続部6内に提供することができる。したがって、一般に、コア4は、モニタすべきアドレスが登録され得る構造を提供する排他モニタ22へのアクセスを有する。いったんアドレスが追跡されているとして排他モニタ22内に登録されると、排他モニタハードウェア22は、追跡されているアドレスがアクセスされたかどうかを検出するために、データ処理システムの他の部分によって行われるメモリアクセスのアドレスをチェックすることができる。例えば、排他モニタ22は、別のプロセッサコア4によるメモリへのアクセスによってトリガされる相互接続部6から受信したスヌープを傍受してもよく、スヌープ要求に示されたアドレスが排他モニタ22に記録された追跡アドレスと一致する場合、排他モニタはイベントをシグナリングすることができ、これは、
図3に示されるイベントレジスタ44の設定をトリガし得る。
【0052】
図5に示されるように、排他モニタ22によって追跡されるアドレスの設定は、命令デコーダ14によってデコードされたロード排他命令に応じて実行されてもよい。ステップ100において、ロード排他命令を受ける。ロード排他命令は、宛先レジスタと、仮想アドレスであり得るメモリアドレス#addを識別するための1つ以上のパラメータとを指定することができる。例えば、アドレスは、ベースレジスタ、及びオフセット又はベースレジスタ、並びに即時値、又は任意の他のアドレス指定モードを通じて識別することができる。ロード排他命令に応じて、ステップ102において、処理回路16は、モニタすべき追跡アドレスとして、仮想アドレス#addに対応する物理アドレスを設定するように排他モニタ22をトリガする。任意の他のアドレスが以前に追跡されている場合、いくつかの実施例では、一度に1つのアドレスを追跡するための空間のみが存在し得るため、これは破棄されてもよい。ステップ104において、ロード排他命令に応じて、処理回路16はまた、指定されたアドレス#addに対応するメモリ内のアドレスから宛先レジスタXdへのデータ値のロードをトリガするように制御される。
【0053】
図6は、排他モニタ22によるメモリアクセスの追跡を表すフロー図を示す。ステップ110において、排他モニタ22は、例えば、そのメモリアクセス要求によってトリガされるスヌープ要求を傍受することによって、所与のアドレスへのメモリアクセスが要求されることを検出する。ステップ112において、排他モニタは、メモリアクセスによって指定されたアドレスをモニタされている登録された追跡アドレスと比較し、それらが同じかどうかを判定する。追跡が継続していない場合、方法はステップ110に戻り、次のメモリアクセスを検出する。メモリアクセスのアドレスが追跡アドレスと一致する場合、ステップ114において、イベントレジスタ44を更新することによってイベントがシグナリングされる。
【0054】
排他モニタを設定するためのロード排他命令の使用により、所与の仮想マシン(又は仮想マシンの下で実行しているアプリケーション)が、ロード排他命令を使用して共有メモリ内で変数をポーリングすることができ、その後、イベントがシグナリングされるまで他のアクションが必要とされないことを処理回路16に示し得るイベント待機(WFE)命令が続く、ポーリング挙動を可能にするために有用であり得る。例えば、そのような仮想マシンは、以下のようなポーリングループを含み得る。
【数1】
【0055】
したがって、最初にループが実行されると、WFE命令は、それが直ちにSEVL命令に続くためにイベントが発生したことを検出し、これが使用されて、後続のロード排他命令が少なくとも1回実行されることを確実にするためにローカルイベントをトリガする。次いで、ロード排他命令は、メモリから共有変数を読み取り、AND命令は、レジスタX2内のマスクに基づいて戻り値をマスクし、条件分岐命令CBNZは、マスク値がゼロでない場合にマーカ「ループ」に分岐する。したがって、これは、共有メモリ内の変数の値がゼロに変更されるまでループがループを継続し続ける例であり、例えば、これは、他のプロセスがメモリ内のいくつかの関連データ構造へのアクセスを統制するロックをここで保持しないことを示し得る。この時点で、仮想マシン又はアプリケーションを実行する仮想プロセッサは、次いで、そのデータ構造を実際に使用するコードに対してループを超えて進むことができる。
【0056】
仮想マシン又はアプリケーションを実行する仮想プロセッサが実行する唯一の仮想プロセッサであるシステムでは、WFE命令は、イベントがシグナリングされるまで処理回路16に単に実行を一時停止させることができ、そのときに、共有メモリ内の値が変更されているかどうかがチェックされる。しかしながら、仮想プロセッサが一時停止することを単純に可能にする仮想化システムでは、イベントがシグナリングされるのを待機している間に、ハイパーバイザは、別の仮想プロセッサをリスケジュールすることができ、それによって、前の仮想プロセッサがイベントの発生を待っている期間のプロセッサ時間でいくつかの有用な作業を実行できるため、非効率になる可能性がある。したがって、イベントが保留中でない場合、WFE命令をハイパーバイザにトラップするように構成することが望ましい場合がある。これは、ハイパーバイザ構成レジスタ40内のTWEフラグ42を設定することによって行って、WFE命令が、関連するイベントのクラスのいずれも発生しなかった場合に、ハイパーバイザに対するトラップをトリガすべきであることを示し得る。
【0057】
しかしながら、たとえWFE命令がトラップをハイパーバイザにトリガする場合であっても、ハイパーバイザは次いで、どの仮想プロセッサが次をスケジュールするかを決定する必要がある。例えば、仮想プロセッサVP0が、上記の例のように、ポーリングループ内のWFE命令により丁度トラップされた場合、ハイパーバイザが再びVP0を単に選択し、かつメモリ内のポーリングされた変数が変更されていないと、仮想プロセッサが再び単にトラップしない結果となり、前方進行が行われ、プロセッサ時間が浪費される。ハイパーバイザが、前方進行を行うことができる他の仮想プロセッサVP1~VPnのうちの1つを選択することがより良好であり得る。しかしながら、ハイパーバイザは、各仮想マシン内で実行している正確な動作の視認性をほとんど有し得ず、したがって、メモリ内の共有変数をポーリングするループ内のWFE命令によって、ハイパーバイザへのトラップが引き起こされたかどうかを知ることができない。複数の異なる仮想プロセッサ間の特定の順序で共有データへのアクセスを処理する待ち行列機構を使用するいくつかのワークロードでは、この課題は、更に重大であり得、例えば、仮想プロセッサが、順序VP1、VP2、VP0内の待ち行列内にある場合、VPのうちのいずれかが共有変数を使用して前方進行を行うために、ハイパーバイザは、VP0もVP2も待ち行列内のVP1の後ろにある場合進行できないため、次にVP1を選択する必要がある。しかしながら、既存の技術では、ハイパーバイザが、共有ロック構造又は待ち行列へのアクセスに起因してどの仮想プロセッサが保持される可能性があるかを決定することを可能にする情報へのアクセスを得ることは困難である。1つのアプローチは、パラ仮想化であり得るが、そのようなアプローチには、上述のようなポータビリティの欠如及び性能の損失の欠点がある。
【0058】
図7に示されるように、本出願では、WFE命令が、ソースオペランドとしてレジスタ引数Xa、Xbのペアをとるように拡張されるが、他の方法では、トラップ挙動がWFE命令に対して上述した通りである、別のアプローチが提案されている。したがって、ハイパーバイザ制御レジスタ40のTWEビット42が適切な値に設定されている場合、WFE命令は、関連するイベントがイベントレジスタ44でシグナリングされていないときに、トラップをハイパーバイザにトリガする。しかしながら、WFE命令がEL2にトラップすると、これは、ハイパーバイザへのスケジューリングヒント情報の戻りをトリガし、ハイパーバイザにアクセス可能なシステムレジスタ32の一部内でハイパーバイザにアクセス可能とされる。例えば、WFE命令によって指定されたレジスタ番号Xa、Xbのレジスタ番号、及びレジスタ幅の指示は、ハイパーバイザ実行モードEL2に関連付けられた例外ステータスレジスタ36に書き込まれてもよい。また、故障アドレスレジスタ34は、排他モニタ22が追跡アドレスを現在追跡し、中間物理アドレスがそのTLB21内のMMU20に利用可能である場合、排他モニタ22によって追跡されている物理アドレスに対応する中間物理アドレスを示すように更新されてもよく、又は、排他モニタ22が任意のアドレスを現在追跡しておらず、追跡された物理アドレスに対応する中間物理アドレスが利用可能でない場合、故障アドレスレジスタ34は、実際の中間物理アドレスを表していないことを示す無効な指示で設定され得る。例えば、この無効な指示は、メモリ内の実際のアドレスに対応しないアドレス値であり得る。例えば、アドレス空間の一部は、実際のメモリロケーションに対応しない特別な値に対して確保されてもよく、無効な指示は、それらの特別な値のうちの1つであり得る。
【0059】
この新たな命令により、仮想マシン又はアプリケーションは、ロード排他命令を使用して共有メモリ内の変数をポーリングすることができ、続いて、変数が所望の値に依然として到達していない場合に新しいWFE命令をポーリングすることができる。変数がコンカレントに更新されておらず、したがってイベントが生成されていない場合、ハイパーバイザ制御レジスタ40内のトラップ制御が適切に設定されているとき、ハイパーバイザに対して新しい命令がトラップする。仮想マシン又はアプリケーションは、WFE命令内の2つのレジスタ引数Xa、Xbを使用して、観察された共有変数の最後の値を伝達し、及びハイパーバイザにポーリングされていたビットを指定する任意のマスクを使用することができる。
【0060】
例えば、上記のコードシーケンスの修正バージョンは、以下の新たな命令を使用して示される。
【数2】
【0061】
したがって、WFE命令トラップがトラップした場合、ハイパーバイザは、故障アドレスレジスタ34を読み取ることによってX1内の仮想アドレスの中間物理アドレスを取得し、次いで、(例えば、既存のマッピング間の既知のオフセットに基づいて)同じ下にある物理ページ用のそれ自体の仮想マッピングを取得することができる。所定の位置のこのマッピングにより、同じ仮想プロセッサをリスケジュールするかどうかを判定することは、以下の例のようなコードを使用することができる。
【数3】
【0062】
ここで、AND命令から得られるX0が0である場合、ポーリングされているビットが変更されていないため、仮想プロセッサは、ポーリングループの次の繰り返しをトラップする可能性が高いため、リスケジューリングされるべきではない。このアプローチは、上述のようなパラ仮想化によって説明された問題に悩まされず、WFE命令がトラップされなかったネイティブな環境において、変更を伴わずに正確に機能することになる。
【0063】
上記の特定のソフトウェアシーケンスは、上述のWFE命令のための単なる1つの例示的な使用事例であることを理解されたい。アーキテクチャレベルで提供される同じWFE命令は、例えば、レジスタXa、Xbで識別されたような他のスケジューリングヒント情報をハイパーバイザに伝達するように、ソフトウェアプログラマによって他の方法で使用され得るため、これらのレジスタは、上記の例のように、ポーリングされた変数及びマスクの最後に見られた値を示す必要はない。これらのレジスタが最後に見られた値を提供するかどうか、及びマスクは、命令デコーダ40によってサポートされる命令セットアーキテクチャの要求される機能であるのではなく、WFE命令の前にどの命令が実行されているかに依存する。
【0064】
いくつかの実施例では、WFE命令によって提供されるスケジューリングヒント情報は、同じ仮想マシンによって所有される仮想プロセッサ間で選択するためのスケジューリング決定を行うときに使用されてもよいが、1つの仮想マシンによって所有される仮想プロセッサと、異なる仮想マシンによって所有される仮想プロセッサとの間の切り替えのためのスケジューリング決定は、WFE命令によって提供されるスケジューリングヒント情報とは無関係であり得る。これは、異なる仮想マシンの仮想プロセッサが共有メモリ構造へのアクセスを共有する可能性が比較的低いためである。いずれの場合においても、ソフトウェアデベロッパは、WFE命令によって返されたスケジューリングヒント情報の他の使用を見出すことができ、以下で論じられるWFE命令のアーキテクチャ機能は、このスケジューリングヒント情報がその後どのように使用されるかについては規定していないことを理解されたい。
【0065】
ここで、WFE命令のアーキテクチャ機能について、
図8に関して以下に説明する。WFE命令は、特定のトラップ条件が満たされた場合に、ハイパーバイザ実行モードに切り替えることができる、ハイパーバイザ命令に対する条件付きイールドの例である。ステップ200において、命令デコーダ40は、ハイパーバイザ命令に対する条件付きイールドをデコードし、デコードされた命令は、実行される処理回路16に渡される。命令の実行は、命令のデコードが、実行されている命令よりも速く、多くのサイクルを行うことができるようにパイプライン処理されることを理解されたい。デコードされたハイパーバイザ命令に対する条件付きイールドを受けたことに応じて、ステップ202において、処理回路16は、現在の実行モードがハイパーバイザモードであるか、又はハイパーバイザモードよりも何らかの高位の特権モードであるかどうかを判定し、そうである場合、ステップ204において、処理回路16は、現在の実行モードに留まることができる。例えば、ハイパーバイザ実行モードEL2で実行されるWFE命令は、単に、実行モードの任意のスイッチではなく、イベントがシグナリングされるまでプロセッサを待機させ得る。
【0066】
ハイパーバイザ命令に対する条件付きイールドが実行された現在のモードが、ハイパーバイザ実行モードEL2よりも低位の特権実行モードである(例えば、命令がEL0又はEL1で実行される)場合、ステップ206において、処理回路は、ハイパーバイザモードにトラップするために必要とされる任意のトラップ条件が満たされているかどうかを判定する。これらは、以下の
図9に関してより詳細に論じられる。任意のトラップ条件が満たされない場合、再度、ステップ204において、処理回路は現在の実行モードに留まる。
【0067】
ステップ206において、必要とされるトラップ条件(単数又は複数)が満たされている場合、ステップ208において、処理回路は、ハイパーバイザ実行モードEL2に切り替え、それによって、ハイパーバイザがステップインすることができ、前の仮想プロセッサが必要とするトラップ条件がもはや満たされなくなるのを待機している間に、その仮想プロセッサの前方進行を行うことができるように、別の仮想プロセッサをリスケジュールすることが有用であるかどうかを判断することができる。ステップ210において、ハイパーバイザモードに切り替える際、スケジューリングヒント情報は、ハイパーバイザモードの命令にアクセス可能な少なくとも1つの記憶要素に記憶される。スケジューリングヒント情報の記憶は、以下の
図10により詳細に示されている。ハイパーバイザにアクセス可能なスケジューリングヒント情報を構造レベルで作成することによって、ハードウェアは、仮想マシンとハイパーバイザとの間で通信するためにメモリ内の共有データ構造を使用していくつかのメッセージをまとめるために、明示的なメモリアクセス命令を必要とすることなく、ハイパーバイザにアクセス可能な特定のレジスタ又は他の記憶要素にヒント情報を自動的に記憶し、これが上述の理由により性能及びポータビリティを改善させる。
【0068】
図9は、トラップ条件が満たされているかどうかをより詳細に判定するステップ206を示している。ステップ220において、処理回路は、トラップ制御インジケータ42(ハイパーバイザ命令(WFE)トラップに対する条件付きイールドかどうかを統制する)が第1の値に設定されているか又は第2の値に設定されているかを判定する。この実施例では、トラップ制御インジケータ42は、ハイパーバイザ構成レジスタ40の対応するビットが0にセットされるときに第1の値を有し、そのビットが1にセットされるときに第2の値を有するが、別の実施例では、その逆もあり得る。次いで、トラップ制御インジケータが第1の値を有する場合、ステップ222において、トラップ条件は、イベントがイベントレジスタ44内でシグナリングされているかどうかにかかわらず、満たされていないと判定される。したがって、トラップ制御インジケータが第1の値に設定されると、WFE命令はハイパーバイザにトラップされない。これは、例えば、1つの仮想プロセッサを現在管理のみしている場合に、ハイパーバイザが追跡を無効化することを可能にするために有用であり得る。
【0069】
次いで、ステップ224においてトラップ制御インジケータが第2の値を有する場合、処理回路は、イベントレジスタ44がイベントがシグナリングされていることを示すように設定されているかどうかを判定する。特に、排他モニタ22が追跡アドレスへのアクセスを検出した場合、イベントは、上述のイベントのクラスのいずれかであり得、その後、イベントがシグナリングされ得る。イベントがシグナリングされた場合、再度、方法はステップ222に進み、ここでトラップ条件は満たされていないと判定される。一方、イベントがシグナリングされていない場合、方法は、ステップ224からステップ226に進み、ここで必要とされるトラップ条件が満たされていると判定されると、この場合、
図8のステップ208において、WFE命令又は他のタイプのハイパーバイザ命令に対する条件付きイールドにより、ハイパーバイザモードに切り替えられる。
【0070】
図10は、
図8のステップ210をより詳細に示している。ステップ240において、処理回路は、レジスタ指定子を書き込み、ハイパーバイザ命令に対する条件付きイールドによって指定されたレジスタXa、Xbのペアの幅を、ハイパーバイザにアクセス可能なシステムレジスタのうちの1つに登録する。特に、これは、EL2に対応する例外ステータスレジスタ36に書き込まれることが有用であり得る。ステップ242において、処理回路16は、排他モニタが現在クリアされている(任意のアドレスを追跡していない)かどうかを検出し、そうである場合、ステップ244において、無効な指示が故障アドレスレジスタ34内に設定される。排他モニタが現在設定されている場合、ステップ246において、排他モニタ22に登録された追跡された物理アドレスに対応する中間物理アドレスが、そのTLB21内のMMU20に利用可能であるかどうかを検出し、そうでない場合、ステップ244において、再び無効な指示が故障アドレスレジスタ34に設定される。
【0071】
排他モニタが現在設定されており、かつ追跡された物理アドレスの中間物理アドレスが、現在、TLB21に対して利用可能である場合、ステップ248において、追跡された物理アドレスに対応する中間物理アドレスが故障アドレスレジスタ34に書き込まれ、有効な指示が設定される。場合によっては、有効な指示は、単に、故障アドレスレジスタ内のアドレスが、実際のアドレスに対応することができない複数の無効アドレス値のうちの1つであるということであり得る。あるいは、別個の有効ビットは、故障アドレスレジスタ内のアドレスを修飾することができる。同様に、ステップ244において、無効な指示は、実際のアドレスに対応することができない禁止アドレス値であるか、又は別個の無効な指示によって指示され得るかのどちらかであり得る。
図10は、排他モニタが現在クリアである場合と、中間物理アドレスが現在利用可能でない場合との両方の場合に、同じ無効な指示が使用される例を示し、他の実施例では、2つの別個の無効なインジケータがこれらの2つの状況を区別し得る。
【0072】
MMU20のTLB21が、別個の段階1及び段階2のTLB構造を有する分割TLBとして実装されるシステムでは、追跡された物理アドレスに対応するIPAが、WFE命令が実行された時点で、TLB21内で利用可能となる可能性が比較的高くなり得るが、これは、WFE命令が、ここで示されるタイプのループ内で使用される場合、その中間物理アドレスのアドレスマッピングを(既にTLB内にない場合に)TLBにロードさせるロード排他命令の直後に続くからである。
【0073】
しかしながら、TLB21が、段階1ページテーブル50及び段階2ページテーブル52からのエントリを、仮想アドレスから物理アドレスに直接マッピングする単一の統一エントリに組み合わせる、組み合わせTLBとして実装される実施例では、次いで、既に割り当てられた組み合わせTLBエントリ内にロード排他命令がヒットする場合、ロード排他命令は通常、中間物理アドレスを取得するために、段階1ページテーブル50のアドレスルックアップをトリガしない。しかしながら、このようにロード排他命令が処理された場合、これにより、後続のWFE命令が使用されるときに、追跡アドレスに対応するIPAが、ステップ246で利用可能となる可能性が低くなる。
【0074】
したがって、組み合わされたTLBを使用するマイクロアーキテクチャでは、たとえロード排他命令にサービスを提供する必要がない場合でも、段階1テーブルウォークをトリガすることが有用であり得る。したがって、
図5の方法では、ロード排他命令を受けたときに、ターゲットアドレスが組み合わされたTLB21にキャッシュされたアドレスマッピングを既に有していない場合、ページテーブルウォークがトリガされて、段階1ページテーブル50から中間物理アドレスを取得し、その後、段階2ページテーブル52を形成する物理アドレスを取得し、更に組み合わされた仮想アドレスを組み合わされたTLB21内の物理アドレスマッピングに記録する。後続のWFE命令がスケジューリングヒント情報のために必要とされる場合、MMU21はまた、MMU20の特定の記憶領域内に中間物理アドレスを記録することができる。また、ロード排他命令が、既に割り当てられたTLBのエントリに対してヒットし、かつ中間物理アドレスが、MMU21内で既に利用可能ではない場合、たとえ組み合わされたTLB内に既に提供されている物理アドレスに基づいてロード排他命令がサービスされ得る場合であっても、ロード排他命令はそれにもかかわらず、段階1ページテーブル50の段階1ページテーブルウォークをトリガして、対応する中間物理アドレスを得ることができ、次いで、物理アドレスが既にキャッシュされているため、たとえロード排他命令を処理するために直接必要とされていないとしても、その後のハイパーバイザ命令に対する条件付きイールドによって使用するためにこれを記録することができる。ロード排他命令に応じて中間物理アドレスルックアップをトリガすることによって、WFE命令を受けたときに、
図10のステップ246において中間物理アドレスが利用可能となる可能性をより高くする。したがって、ハイパーバイザがスケジューリング決定を行うときに、仮想プロセッサのスケジューリング効率を向上させるのに役立ち得る、有用なスケジューリングヒント情報をハイパーバイザに提供することができる可能性が高い。
【0075】
この追加のIPAルックアップのトリガは、それが必要であるかどうかにかかわらず、マイクロアーキテクチャの実装形態に依存するため、アーキテクチャの必須部分ではないことを理解されたい。例えば、段階1及び段階2のアドレス変換に専用の分割TLを有するシステムでは、追加のIPAルックアップが必要とされない場合がある。また、たとえ組み合わされたTLBを使用するシステムでも、一部のマイクロアーキテクチャ設計者は、(より有用でないハイパーバイザスケジューリングヒント情報を犠牲にして)不要なIPAアクセスをトリガすることを回避することによって、ロード排他命令の実装の複雑さを軽減し、かつ電力を節約するように選択することができる。それにもかかわらず、そのようなIPAルックアップをトリガすることによって、そうすることを望むマイクロアーキテクチャにおけるハイパーバイザの性能を改善することができる。
【0076】
図11は、使用され得るシミュレータの実装形態を示している。先に説明した実施形態は、当該技術をサポートする特定の処理ハードウェアを動作するための装置及び方法の観点から本発明を実装するものであるが、コンピュータプログラムを使用して実装される本明細書に記載の実施形態に従った命令実行環境を提供することも可能である。このようなコンピュータプログラムは、ハードウェアアーキテクチャのソフトウェアベースの実装形態を提供する限りにおいて、シミュレータと呼ばれることが多い。シミュレータコンピュータプログラムの種類には、エミュレータ、仮想マシン、モデル、及び動的バイナリトランスレータを含むバイナリトランスレータが含まれる。典型的には、シミュレータの実装形態は、シミュレータプログラム310をサポートする、任意選択的にホストオペレーティングシステム320を実行するホストプロセッサ330上で実行されてもよい。いくつかの構成では、ハードウェアと提供される命令実行環境との間に複数のシミュレーション層が存在してもよく、及び/又は、同じホストプロセッサ上で提供される複数の異なる命令実行環境が存在してもよい。歴史的に、合理的な速度で実行するシミュレータの実装形態を提供するためには、強力なプロセッサが必要とされてきたが、互換性又は再利用の理由から別のプロセッサにネイティブなコードを実行したい場合など、特定の状況では、そのようなアプローチが正当化される場合がある。例えば、シミュレータの実装形態では、ホストプロセッサのハードウェアではサポートされていない追加機能を備えた命令実行環境を提供すること、又は異なるハードウェアアーキテクチャに典型的に関連する命令実行環境を提供することができる。シミュレーションの概要は、「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、1990年冬 USENIX Conference、53~63頁に記載されている。
【0077】
これまで、特定のハードウェア構成又は機能を参照して実施形態を説明してきたが、シミュレーションされた実施形態では、同等の機能を適切なソフトウェア構成又は機能によって提供することができる。例えば、特定の回路は、シミュレーションされた実施形態において、コンピュータプログラムロジックとして実装されてもよい。同様に、レジスタ又はキャッシュなどのメモリハードウェアは、ソフトウェアのデータ構造としてシミュレーションされた実施形態で実装することができる。先に説明した実施形態で参照されるハードウェア要素の1つ以上がホストハードウェア(例えば、ホストプロセッサ330)上に存在する構成では、いくつかのシミュレートされた実施形態は、適切な場合にはホストハードウェアを利用してもよい。
【0078】
シミュレータプログラム310は、コンピュータ読み取り可能な記憶媒体(非一時的媒体であってもよい)に記憶されてもよく、シミュレータプログラム310によってモデル化されているハードウェアアーキテクチャのアプリケーションプログラムインタフェースと同じであるプログラムインタフェース(命令実行環境)をターゲットコード300(アプリケーション、オペレーティングシステム、及びハイパーバイザを含んでもよい)に提供する。したがって、上述したハイパーバイザ命令に対する条件付きイールドを含む、ターゲットコード300のプログラム命令は、シミュレータプログラム310を使用する命令実行環境内から実行されてもよく、それによって、上述した装置2のハードウェア機能を実際には有していないホストコンピュータ330は、これらの機能をエミュレートすることができる。シミュレータプログラム310は、命令デコードプログラムロジック312と、命令デコーダ14に対する機能に対応する、排他モニタプログラムロジック316及びアドレス変換プログラムロジック318と、上述の排他モニタ22及びMMU20と、装置2のアーキテクチャレジスタ18をエミュレートするためのレジスタエミュレートデータ構造314(ホストハードウェア330のメモリに記憶されている)を管理するためのプログラムロジックと、を有し得る。
【0079】
本出願において、「~ように構成される(configured to)」という用語は、装置の要素が、定義された動作を実行することができる構成を有することを意味するために使用される。このコンテキストにおいて、「構成」は、ハードウェア又はソフトウェアの相互接続の構成又は方法を意味する。例えば、装置は、定義された動作を提供する専用ハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイスは、機能を実行するようにプログラムされてもよい。「~ように構成される」は、定義された動作を提供するために、装置要素を任意の方法で変更する必要があることを意味しない。
【0080】
本発明の例示的な実施形態が添付の図面を参照して本明細書で詳細に説明されてきたが、本発明はそれらの正確な実施形態に限定されず、添付の特許請求の範囲によって定義される本発明の範囲及び精神から逸脱することなく、当業者によって様々な変更及び修正を行うことができることを理解されたい。
【国際調査報告】