(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-06-14
(54)【発明の名称】装置の状態情報を収集する技術
(51)【国際特許分類】
G06F 11/30 20060101AFI20230607BHJP
【FI】
G06F11/30 155
G06F11/30 140H
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2022567445
(86)(22)【出願日】2021-05-13
(85)【翻訳文提出日】2022-11-07
(86)【国際出願番号】 GB2021051152
(87)【国際公開番号】W WO2021229231
(87)【国際公開日】2021-11-18
(32)【優先日】2020-05-14
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
(71)【出願人】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】ホーリー、ジョン マイケル
(72)【発明者】
【氏名】ウィリアムズ、マイケル ジョン
(72)【発明者】
【氏名】ラトランド、マーク サリング
(72)【発明者】
【氏名】グラント、アラスデア
【テーマコード(参考)】
5B042
【Fターム(参考)】
5B042GA14
5B042JJ17
(57)【要約】
装置の状態情報を収集する技術
装置の状態情報を収集するための技術を提供する。この装置は、命令のシーケンスを実行するための処理パイプラインと、シーケンス内の命令のうちの少なくとも1つを関心命令として識別するための関心命令指定回路とを有する。各関心命令は、その関心命令の実行に関連付けられた装置の所与の状態情報が収集されるべき命令である。関心命令指定回路は、識別された各関心命令に対して、定義された選択基準を適用して、命令のシーケンスにおいて関心命令よりも後の更なる命令を決定し、更なる命令を、それに関連付けられた同期例外を有するものとしてマークするように構成される。処理パイプラインは、更なる命令が処理パイプラインの所与の段階に到達し、それに関連付けられた同期例外を有するものとしてマークされたことに応答して、更なる命令を実行する代わりに同期例外をトリガし、それによって処理パイプラインに、所与の状態情報を収集するために所与の例外処理ルーチンを実行させる。
【選択図】
図1
【特許請求の範囲】
【請求項1】
装置であって、
命令のシーケンスを実行するための処理パイプラインと、
前記シーケンス内の前記命令のうちの少なくとも1つを関心命令として識別するための関心命令指定回路であって、各関心命令は、前記関心命令の実行に関連付けられた前記装置の所与の状態情報が収集されるべき命令である、関心命令指定回路と、
を備え、
前記関心命令指定回路は、前記識別された関心命令ごとに、定義された基準を適用して、前記命令のシーケンスにおいて前記関心命令よりも後の更なる命令を決定し、前記更なる命令を、それに関連付けられた同期例外を有するものとしてマークするように構成され、
前記処理パイプラインは、前記更なる命令が前記処理パイプラインの所与の段階に到達し、それに関連付けられた前記同期例外を有するものとしてマークされたことに応答して、前記更なる命令を実行する代わりに前記同期例外をトリガし、それによって前記処理パイプラインに、前記所与の状態情報を収集するために所与の例外処理ルーチンを実行させる、装置。
【請求項2】
前記所与の例外処理ルーチンから戻る際に、前記処理パイプラインは、前記更なる命令を実行するように構成される、請求項1に記載の装置。
【請求項3】
前記定義された基準は、前記関心命令指定回路に、前記更なる命令として、前記関心命令に対して前記命令のシーケンス内の所定の位置に現れる命令を決定させる、請求項1又は2に記載の装置。
【請求項4】
前記定義された基準は、前記関心命令指定回路に、前記更なる命令として、前記命令のシーケンスにおける前記関心命令の直後の命令を決定させる、請求項3に記載の装置。
【請求項5】
前記定義された基準は、前記関心命令指定回路に、前記更なる命令として、前記関心命令の後に前記命令のシーケンスに現れる少なくとも1つの所与のタイプの命令を決定させる、請求項1又は2に記載の装置。
【請求項6】
前記少なくとも1つの所与のタイプの前記命令は、現在のサブルーチンの実行の前に実行されていたプログラムコードの実行に前記処理パイプラインを戻すために使用されるリターン命令である、請求項5に記載の装置。
【請求項7】
前記少なくとも1つの所与のタイプの前記命令は、実行されると、前記処理パイプラインに、現在のサブルーチンの処理を停止させ、更なるサブルーチンの実行を開始させるリンク付き分岐命令である、請求項5又は6に記載の装置。
【請求項8】
前記定義された基準は、前記関心命令指定回路に、前記関心命令の後の前記命令のシーケンスに現れる任意の命令を、前記関心命令の後の前記命令のシーケンスに現れる少なくとも1つの所与のタイプの次の命令まで、ただしそれを超えないように、前記更なる命令として決定させる、請求項1又は2に記載の装置。
【請求項9】
所与の関心命令の実行に応答して、前記所与の関心命令の前記実行に関する複数の情報項目を含むレコードを生成する統計的プロファイリング回路を更に備え、
前記所与の例外処理ルーチンを実行することによって収集された前記所与の状態情報は、前記統計的プロファイリング回路によって生成された前記レコードに含まれない追加情報を含む、請求項1から8のいずれか一項に記載の装置。
【請求項10】
前記追加情報は、前記所与の関心命令の実行に関連付けられたソフトウェア定義状態の少なくとも1つの項目を含む、請求項9に記載の装置。
【請求項11】
前記ソフトウェア定義状態の少なくとも1つの項目は、前記装置によって維持されるコールスタックバッファの内容を含む、請求項10に記載の装置。
【請求項12】
前記統計的プロファイリング回路は、前記所与の関心命令の前記実行に関する前記複数の情報項目内に、前記所与の関心命令が実行されたときの現在のコールスタックバッファポインタ値のインジケーションを含めるように構成される、請求項11に記載の装置。
【請求項13】
前記関心命令指定回路は、前記関心命令が実行されるときに、前記統計的プロファイリング回路が前記複数の情報項目を記録すべき各関心命令を識別するために選択基準を適用するように構成される、請求項9から12のいずれか一項に記載の装置。
【請求項14】
前記選択基準は、初期選択基準及び更なる選択基準を含み、
前記関心命令指定回路は、候補関心命令を識別するために前記初期選択基準を適用するように構成され、
前記関心命令指定回路は、前記更なる選択基準を適用して、どの候補関心命令が前記関心命令として使用されるべきかを決定するフィルタ回路を備える、
請求項13に記載の装置。
【請求項15】
前記フィルタ回路は、候補関心命令のタイプが1つ以上の所与のタイプの命令である場合にのみ、前記候補関心命令を関心命令として扱うように構成される、請求項14に記載の装置。
【請求項16】
前記フィルタ回路は、候補関心命令が実行されたときに所与の挙動が観察された場合に、前記候補関心命令を関心命令として扱うように構成される、請求項14又は15に記載の装置。
【請求項17】
前記統計的プロファイリング回路は、所与の候補関心命令の実行に応答して、前記所与の候補関心命令の実行に関する前記複数の情報項目を取得するが、前記フィルタ回路が前記所与の挙動が観察されたと判定した場合にのみ、前記複数の情報項目を含む前記レコードを維持する、請求項16に記載の装置。
【請求項18】
候補関心命令が前記フィルタ回路によって関心命令として扱われるときのみ、前記関連付けられた更なる命令は、前記更なる命令が前記処理パイプラインの前記所与の段階に到達するときに、それに関連付けられた同期例外を有するものとしてマークされる、請求項14から17のいずれか一項に記載の装置。
【請求項19】
前記命令のシーケンスの実行中に1つ以上のイベントの発生を示すレコードを維持する性能監視回路を更に備え、
前記関心命令指定回路は、所与の命令の実行が所与のイベントを発生させ、前記性能監視回路が前記所与のイベントの前記発生が閾値レベルに達したことを示すときに、前記シーケンス内の前記所与の命令を関心命令であると識別するように構成される、
請求項1から18のいずれか一項に記載の装置。
【請求項20】
前記所与の命令に関連付けられた前記更なる命令が前記処理パイプラインの前記所与の段階に到達したことに応答して前記所与の例外処理ルーチンを実行すると、前記所与の状態情報に加えて、前記性能監視回路によって維持される前記レコードの現在の状態が取り込まれる、請求項19に記載の装置。
【請求項21】
前記性能監視回路によって維持される前記レコードは、前記1つ以上のイベントの各々について、カウンタ値が初期化されてからの前記イベントの発生回数を示す前記カウンタ値を含む、請求項19又は20に記載の装置。
【請求項22】
サブルーチン間の遷移を処理するために使用される情報を維持するためのコールスタックバッファであって、リンク付き分岐命令に応答して入力されたサブルーチンから戻るときに使用される情報を取り込むために、前記リンク付き分岐命令に遭遇するたびにエントリが前記コールスタックバッファに追加され、リターン命令に遭遇するたびに、最も新しく追加されたエントリが除去され、そこに記憶された情報が消費される、コールスタックバッファを更に備え、
前記関心命令指定回路は、所与の命令の実行によって前記コールスタックバッファ内のいくつかのエントリがトリガレベルに達したときに、前記シーケンス内の前記所与の命令を関心命令であると識別するように構成されている、
請求項1から21のいずれか一項に記載の装置。
【請求項23】
前記トリガレベルは、前記コールスタックバッファが満杯であることを示し、
前記関心命令として識別された前記所与の命令は、前記トリガレベルに到達させるリンク付き分岐命令であり、
前記更なる命令は、所与のタイプの後続の命令フロー変更命令である、
請求項22に記載の装置。
【請求項24】
前記トリガレベルは、前記コールスタックバッファが空であることを示し、
前記関心命令として識別された前記所与の命令は、前記トリガレベルに到達させるリターン命令であり、
前記更なる命令は、所与のタイプの後続の命令フロー変更命令である、
請求項22又は23に記載の装置。
【請求項25】
装置の所与の状態情報を収集する方法であって
命令のシーケンスを実行するための処理パイプラインを使用することと、
前記シーケンス内の前記命令のうちの少なくとも1つを関心命令として識別することであって、各関心命令は、前記関心命令の実行に関連付けられた前記装置の所与の状態情報が収集されるべき命令である、ことと、
を含み、
前記識別された関心命令ごとに、定義された基準を適用して、前記命令のシーケンスにおいて前記関心命令よりも後の更なる命令を決定し、前記更なる命令を、それに関連付けられた同期例外を有するものとしてマークすることと、
前記更なる命令が前記処理パイプラインの所与の段階に到達し、それに関連付けられた前記同期例外を有するものとしてマークされたことに応答して、前記更なる命令を実行する代わりに前記同期例外をトリガし、それによって前記処理パイプラインに、前記所与の状態情報を収集するために所与の例外処理ルーチンを実行させる、ことと、
を含む、方法。
【請求項26】
命令実行環境を提供するようにホストデータ処理装置を制御するコンピュータプログラムであって、
一連のパイプライン段階において命令のシーケンスを実行するための処理プログラムロジックと、
前記シーケンス内の前記命令のうちの少なくとも1つを関心命令として識別するための関心命令指定プログラムロジックであって、各関心命令は、その関心命令の実行に関連付けられた所与の状態情報が収集されるべき命令である、関心命令指定プログラムロジックと、
を備え、
前記関心命令指定プログラムロジックは、前記識別された関心命令ごとに、定義された基準を適用して、前記命令のシーケンスにおいて前記関心命令よりも後の更なる命令を決定し、前記更なる命令を、それに関連付けられた同期例外を有するものとしてマークするように構成され、
前記処理プログラムロジックは、前記更なる命令が所与のパイプライン段階に到達し、それに関連付けられた前記同期例外を有するものとしてマークされたことに応答して、前記更なる命令を実行する代わりに前記同期例外をトリガし、それによって前記処理プログラムロジックに、前記所与の状態情報を収集するために所与の例外処理ルーチンを実行させる、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本技術は、装置の状態情報を収集する機構に関する。
【0002】
プログラム実行を監視することが望ましい多くの状況が存在する。プログラム実行のそのような監視を実行するとき、プログラムの実行に関する情報が抽出され得るように、ある時点で監視コードに対する例外をとることが望ましいことが多い。例えば、統計的プロファイリングを実行するとき、特定の命令の実行は、それらの命令の実行に関連する情報を取り込むためにレコードを作成させてもよく、その後、例外が発生してもよい。通常、これは、時には割込みとも呼ばれる非同期例外であり、複数の割込みソースの中で優先順位を付ける割込みコントローラに発行される。そのようなアプローチによって、割込みコントローラは、そのような統計的プロファイリングによって作成されたレコードを参照するために、適切な例外処理ルーチンをトリガすることができる。
【0003】
別の例として、性能監視技術を使用して、例えば一連のカウンタを使用して特定のイベントの発生を追跡することができ、特定の時点で非同期例外を割込みコントローラに対して発生させて、そのような性能監視の結果として維持されているイベント情報をレビューするために例外処理ルーチンを実行することができる。
【0004】
プログラム実行を監視するときに取り込まれ得る上記の情報に加えて、これらのプログラム監視技法によって情報が取り込まれる原因となったイベントが発生したときの装置の状態に関する他の情報を取り込むことが望ましい場合がある。しかし、割込みコントローラによって非同期例外が選択されて当該例外処理ルーチンが実行されるまでに、その間にプログラムの実行が継続されることになるため、例外処理ルーチンが実行されたときのシステムの状態は、関心のより早い時点でのシステムの状態を正確に反映していない場合があり、したがって、装置のそのような状態情報をプログラム実行の監視から得られた情報と相関させることは困難であり得る。
【発明の概要】
【0005】
1つの例示的な構成では、装置であって、命令のシーケンスを実行する処理パイプラインと、シーケンス内の命令のうちの少なくとも1つを関心命令として識別するための関心命令指定回路であって、各関心命令は、関心命令の実行に関連付けられた装置の所与の状態情報が収集されるべき命令である、関心命令指定回路と、を備え、関心命令指定回路は、識別された各関心命令に対して、定義された基準を適用して、命令のシーケンスにおいて関心命令よりも後の更なる命令を決定し、更なる命令を、それに関連付けられた同期例外を有するものとしてマークするように構成され、処理パイプラインは、更なる命令が処理パイプラインの所与の段階に到達し、それに関連付けられた同期例外を有するものとしてマークされたことに応答して、更なる命令を実行する代わりに同期例外をトリガし、それによって処理パイプラインに、所与の状態情報を収集するために所与の例外処理ルーチンを実行させる、装置が提供される。
【0006】
別の例示的な構成では、装置の所与の状態情報を収集する方法であって、命令のシーケンスを実行するための処理パイプラインを使用することと、シーケンス内の命令のうちの少なくとも1つを関心命令として識別することであって、各関心命令は、関心命令の実行に関連付けられた装置の所与の状態情報が収集されるべき命令である、ことと、識別された各関心命令に対して、定義された基準を適用して、命令のシーケンスにおいて関心命令よりも後の更なる命令を決定し、更なる命令を、それに関連付けられた同期例外を有するものとしてマークすることと、更なる命令が処理パイプラインの所与の段階に到達し、それに関連付けられた同期例外を有するものとしてマークされたことに応答して、更なる命令を実行する代わりに同期例外をトリガし、それによって処理パイプラインに、所与の状態情報を収集するために所与の例外処理ルーチンを実行させる、ことと、を含む、方法が提供される。
【0007】
更に別の例示的な構成では、命令実行環境を提供するようにホストデータ処理装置を制御するコンピュータプログラムであって、一連のパイプライン段階において命令のシーケンスを実行するための処理プログラムロジックと、シーケンス内の命令のうちの少なくとも1つを関心命令として識別するための関心命令指定プログラムロジックであって、各関心命令は、その関心命令の実行に関連付けられた所与の状態情報が収集されるべき命令である、関心命令指定プログラムロジックと、を含み、関心命令指定プログラムロジックは、識別された各関心命令に対して、定義された基準を適用して、命令のシーケンスにおいて関心命令よりも後の更なる命令を決定し、更なる命令を、それに関連付けられた同期例外を有するものとしてマークするように構成され、処理プログラムロジックは、更なる命令が所与のパイプライン段階に到達し、それに関連付けられた同期例外を有するものとしてマークされたことに応答して、更なる命令を実行する代わりに同期例外をトリガし、それによって処理プログラムロジックに、所与の状態情報を収集するために所与の例外処理ルーチンを実行させる、コンピュータプログラムが提供される。
【0008】
更に別の例示的な構成では、装置であって、命令のシーケンスを実行するための処理パイプライン手段と、シーケンス内の命令のうちの少なくとも1つを関心命令として識別するための関心命令指定手段であって、各関心命令は、関心命令の実行に関連付けられた装置の所与の状態情報が収集されるべき命令であり、関心命令指定手段は、識別された各関心命令に対して、定義された基準を適用して、命令のシーケンスにおいて関心命令よりも後の更なる命令を決定し、更なる命令を、それに関連付けられた同期例外を有するものとしてマークするように構成される、関心命令指定手段と、処理パイプライン手段であって、更なる命令が処理パイプライン手段の所与の段階に到達し、それに関連付けられた同期例外を有するものとしてマークされたことに応答して、更なる命令を実行する代わりに同期例外をトリガするためのものであり、これにより、処理パイプライン手段は、所与の状態情報を収集するために所与の例外処理ルーチンを実行する、処理パイプライン手段と、を備える、装置が提供される。
【図面の簡単な説明】
【0009】
本技法について、添付の図面に示す本技法の例を参照して、例示としてのみ更に説明する。
【
図1】例示的な一実装形態による装置のブロック図である。
【
図2】例示的な一構成における
図1の関心命令指定回路の動作を示すフロー図である。
【
図3】例示的な一構成による、関心命令指定回路によって識別された更なる命令に応答する処理パイプラインの動作を示すフロー図である。
【
図4】プログラム実行中のコールスタックバッファの使用を概略的に示すフロー図である。
【
図5A】本明細書で説明される技法による、更なる命令を決定するために使用され得る様々なタイプの基準を示す。
【
図5B】本明細書で説明される技法による、更なる命令を決定するために使用され得る様々なタイプの基準を示す。
【
図5C】本明細書で説明される技法による、更なる命令を決定するために使用され得る様々なタイプの基準を示す。
【
図6】例示的な一実装形態において使用され得る統計的プロファイリング技法を示すフロー図である。
【
図7】フィルタリング機構が使用される、例示的な一実装形態による、使用され得る代替統計的プロファイリング技法を示すフロー図である。
【
図8】例示的な一実装形態による、使用され得る性能監視技法を示すフロー図である。
【
図9】例示的な一実装形態による、コールスタックバッファに関連して関心命令指定回路がどのように使用され得るかを示すフロー図である。
【
図10】使用され得るシミュレータ実装を示す。 発明を実施するための形態
【0010】
前述したように、特定の命令の実行に関連してレコードを生成する統計的プロファイリングと、プログラムの実行中に特定のイベントの発生を追跡することができる性能監視など、プログラム実行を監視するために使用することができる様々な技法がある。性能監視の場合、これらのイベントは特定の命令の実行によって引き起こされることが多い。
【0011】
本明細書に記載の技術によれば、装置であって、命令のシーケンスを実行するための処理パイプラインと、シーケンス内の命令のうちの少なくとも1つを関心命令として識別するための関心命令指定回路であって、各関心命令は、関心命令の実行に関連付けられた装置の所与の状態情報が収集されるべき命令である、関心命令指定回路と、を有する、装置が提供される。
【0012】
したがって、本明細書で説明する技法によれば、特定の命令は、それらの命令が実行されたときの装置の状態についての関連する状態情報を取得することが望ましい命令であると識別される。しかし、先に述べたように、プログラム実行を監視するとき、非同期例外機構が使用されるのが一般的であり、特に、プログラム実行を監視するために装置内に設けられた回路は、特定の時点で非同期例外を発生させることがあり、これは次いで割込みコントローラによって処理され、その結果、これらの非同期例外を処理するために、例外処理ルーチンが呼び出される。しかしながら、そのような機構が関心命令の実行に続いて使用される場合、関心命令が実行された時点と、例外処理ルーチンが実行される後続の時点との間に著しいスキッドが存在することが分かっている。したがって、このような例外処理ルーチンは、装置の必要な状態情報を収集するように構成することができるが、収集された状態情報は、関心命令が実行されたときの装置の状態を正確に表さない可能性があり、したがってほとんど役に立たない可能性がある。
【0013】
存在する別のタイプの例外は、同期例外である。同期例外が命令に関連付けられる場合、命令が実行されるのではなく、その命令に遭遇したとき、例えば、その命令がプロセッサパイプラインの特定の段階に到達したときに、同期例外がとられる。同期例外の使用は、様々な状況において、例えば「命令に対する障害」メカニズムを実装するために有用であり得る。例えば、ロード命令又はストア命令が、アクセスする許可を有していないメモリの領域にアクセスしようとしている場合、ロード命令又はストア命令を実行しようとする代わりに、同期例外技法を使用して障害を発生させることができる。
【0014】
しかしながら、関心命令を実行する代わりに同期例外を発生させることは、その関心命令の実行に関連付けられた装置の所与の状態情報を取り込むことができるように、関心命令を実行する必要があるので、有用ではない。また、その命令の実行に関連する情報が上述のプログラム監視回路、例えば前述の統計的プロファイリング又は性能監視回路によって取得されるために、関心命令が実行されることが必要な場合がある。
【0015】
本明細書で説明する技法によれば、非同期例外が発生する時間と、関連する例外処理ルーチンが呼び出される時間との間のスキッドに関連する前述の問題を軽減するために、同期例外の上記の概念が利用されるが、関心命令自体には関連しない。特に、関心命令指定回路は、識別された各関心命令に対して、定義された基準を適用して、命令のシーケンスにおいて関心命令よりも後の更なる命令を決定し、次いで、更なる命令を、それに関連付けられた同期例外を有するものとしてマークするように構成される。関心命令を選択するために使用される基準に応じて、更なる命令が処理パイプラインによってすでにフェッチされている場合があるが、そうでない場合、関心命令指定回路は、フェッチされた命令を監視している状態に入り、基準を満たす命令(例えば、特定のタイプの次の命令)がフェッチされるのを待ち、その時点で、その命令を更なる命令として識別することができる。
【0016】
処理パイプラインは、次いで、更なる命令が処理パイプラインの所与の段階に到達し、それに関連付けられた同期例外を有するものとしてマークされたことに応答して、更なる命令を実行する代わりに同期例外をトリガする。これは、所与の状態情報を収集するために、処理パイプラインに所与の例外処理ルーチンを実行させる。更なる命令がその段階に到達したときに同期例外をトリガさせる処理パイプラインの所与の段階は、処理パイプライン内の任意の適切な段階であり得る。例えば、更なる命令が実行される実行段階であってもよく、この場合、その更なる命令を実行する代わりに、同期例外がトリガされる。しかしながら、所与の段階は、代替として、実行段階よりも早い段階であってもよく、ここでは、更なる命令が実行に進むことを可能にする代わりに、同期例外が再びトリガされる。
【0017】
所与の状態情報を収集するために使用される所与の例外処理ルーチンの実行に加えて、装置はまた、先に説明した統計的プロファイリング又は性能監視機構などの他の既存の機構を使用して追加情報を収集することができることに留意されたい。更なる命令が処理パイプラインの所与の段階に到達したときに同期例外によってトリガされる所与の例外処理ルーチンによって収集された所与の状態情報に起因してその所与の状態情報をその他の情報、例えば、関心命令の実行に関連付けられた情報を含むその他の情報と相関させることができる可能性がはるかに高い。特に、識別された関心命令に依存して関心命令指定回路によって更なる命令が選択されるので、関心命令の実行時間と、更なる命令によってトリガされた同期例外に応答して所与の例外処理ルーチンが実行される時点との間には、前述の非同期例外機構が使用された場合よりもはるかに決定論的な相関がある。
【0018】
しかしながら、上記の技術は、システム内の他のコンポーネントによって収集されている他の情報がない場合であっても有用であることに留意されたい。特に、所与の状態情報は、実際には、収集された唯一の情報であり得るが、更なる命令が関心命令指定回路によって選択される方法に起因して、関心命令の実行と相関する情報を依然として有用に提供し得る。
【0019】
上述したように、同期例外が更なる命令に関連付けられているため、処理パイプラインは、更なる命令が処理パイプラインの所与の段階に到達したときに、その更なる命令の実行を可能にする代わりに、同期例外をトリガする。例示的な一実装形態では、やがて実行が所与の例外処理ルーチンから戻るとき、処理パイプラインは、更なる命令を実行するように構成され得る。したがって、同期例外の更なる命令との関連付けは、例外処理ルーチンが実行されている間、その更なる命令の実行を単に事実上遅延させることができる。
【0020】
各識別された関心命令に対する更なる命令を決定するために関心命令指定回路によって適用される定義された基準は、様々な形態をとることができる。例示的な一実装形態は、定義された基準は、関心命令指定回路に、更なる命令として、関心命令に対して命令のシーケンス内の所定の位置に現れる命令を決定させる。したがって、関心命令指定回路は、関心命令に続くN番目の命令を更なる命令として単に選択することができ、ここで、Nは実装に応じて選択することができる。例えば、Nがどのように選択されるかは、予想される命令依存性に依存し得る。例えば、関心命令Xの直後に命令シーケンス内の命令Yが続くが、処理パイプラインがアウトオブオーダ実行を可能にし、典型的には命令Yが実際に命令Xの前に実行される場合、同期例外を命令Yに関連付けることにより、命令Xと命令Yとの間の順序付けが強制され、命令Xの後まで命令Yが実行されることが防止される。これは、回避されることが望まれ得る何らかのプローブ効果を潜在的に引き起こす可能性があり、その場合、Nを1よりも大きくすることが決定され得る。しかしながら、そのような命令依存性問題がない場合、実行されている関心命令と、更なる命令からトリガされている同期例外との間のギャップを最小限に抑えるために、Nを1に等しく設定することが適切であると判断され得る。
【0021】
別の例として、定義された基準は、関心命令指定回路に、更なる命令として、関心命令の後の命令のシーケンスに現れる少なくとも1つの所与のタイプの命令を決定させ得る。ここでは様々なタイプの命令を選択することができるが、特に関心があるのは、実行された場合に、収集することが望まれる所与の状態情報に変化を引き起こす可能性がある命令である。特に、先に説明したように、所与の状態情報が、関心命令が実行されたときの装置の状態に関する有用な情報を提供することが望ましく、したがって、関心命令の実行時のその状態情報の形式が決定されるのを防止するように、その所与の状態情報を変更する可能性のある後の命令の実行を回避することが望ましい。
【0022】
更なる命令を選択するときに関心命令指定回路によって考慮されることを望む可能性がある特定のタイプの命令の例として、特定のタイプのロード命令又はストア命令が、レジスタバンクの内容を変化させることになるので、関心可能性がある。別の例として、実行されているプログラムは、いくつかの異なるサブルーチンから構成され得る。いくつかのタイプの命令は、それらのサブルーチン間の遷移を引き起こし、それは、次に、それらのサブルーチンを追跡するために装置によって維持される特定の状態情報の内容の変化を引き起こす。一例として、コールスタックバッファは、サブルーチン間の遷移を処理するために使用される情報を維持することができ、新しいサブルーチンへの遷移が行われるたびにエントリがそのバッファの先頭に追加されて、やがてそのサブルーチンから戻るときに使用される情報を取り込む。同様に、サブルーチンからのリターンが行われるたびに、コールスタックバッファに最も新しく追加されたエントリが除去され、そこに記憶された情報が消費される。
【0023】
関心命令指定回路によって適用される定義された基準は、任意の数の所与のタイプの関心命令を監視することができ、例えば、命令の上述の例のすべて、又はそれらのサブセットのみを考慮して、関心命令の後の命令のシーケンスにおいて次に現れる1つ以上の監視されたタイプの命令を更なる命令として決定するように構成することができる。あるいは、定義された基準は、関心命令指定回路が、更なる命令として、1つ以上の監視されたタイプの次に現れる命令を指定せず、代わりに、命令のシーケンス内に現れる1つ以上の監視されたタイプのN番目の命令を指定するようなものであってもよい。
【0024】
例示的な一実施態様において、少なくとも1つの所与のタイプの命令は、現在のサブルーチンの実行の前に実行されていたプログラムコードの実行に処理パイプラインを戻すために使用されるリターン命令であり得る。代替的、又は追加的に、少なくとも1つの所与のタイプの命令は、実行されると、処理パイプラインに、現在のサブルーチンの処理を停止させ、更なるサブルーチンの実行を開始させるリンク付き分岐命令であり得る。
【0025】
リターン命令及びリンク付き分岐命令を説明するときに上で言及した現在のサブルーチンは、様々な形態をとることができるが、例示的な一実装形態では、現在のサブルーチンは、関心命令を含むサブルーチンであり得、したがって、上で説明した技法を使用して、同期例外を、関心命令を含むサブルーチンと同じサブルーチン内に現れる更なる命令に関連付けることができ、それによって、サブルーチンの変更が行われる前に、したがって関心の所与の状態情報が、関心命令が実行されたときにその状態情報の形態の決定を妨げるように変更される可能性がある前に、所与の状態情報(前述のコールスタックバッファの内容など)を例外処理ルーチンによって取り込むことができる。
【0026】
更なる命令を決定するために取ることができる別の例示的な手法として、定義された基準は、関心命令指定回路に、関心命令の後の命令のシーケンスに現れる任意の命令を、関心命令の後の命令のシーケンスに現れる少なくとも1つの所与のタイプの次の命令まで、ただしそれを超えないように、更なる命令として決定させるようなものであってもよい。したがって、そのような手法を採用するとき、更なる命令として選択された実際の命令は、それが関心命令の後に現れる特定のタイプの命令まで、ただしそれを超えない命令である場合、重要であるとは見なされない。純粋に例として、同期例外が、関心命令に遭遇した後の次のリンク付き分岐命令の前に、又は少なくとも遅くとも次のリンク付き分岐命令に遭遇する時間までに発生することが望ましい場合があり、上述の手法は、どの命令がそれに関連する同期例外を有するかを厳密に制限することなく、この目的を達成することができる。
【0027】
例示的な一実装形態では、装置は、所与の関心命令の実行に応答して、その所与の関心命令の実行に関する複数の情報項目を含むレコードを生成する統計的プロファイリング回路を更に備える。そのような実装形態では、所与の例外処理ルーチンを実行することによって収集された所与の状態情報は、統計的プロファイリング回路によって生成されたレコードに含まれない追加情報を含み得る。したがって、上述の機構を使用することにより、統計的プロファイリング回路によって生成されたレコード内に収集された情報に関する情報を、所与の例外処理ルーチンの実行を通じて得ることができる。
【0028】
統計的プロファイリング回路によってレコード内で生成される複数の情報項目は、様々な形態をとることができるが、純粋に非網羅的な例として、レコードは、関心命令の命令アドレス、命令タイプ(例えば、分岐命令、ロード命令、ストア命令などであるかどうか)、実行コンテキスト(例えば、処理パイプラインがどの例外レベルにあるか、したがって、例えば、処理パイプラインがユーザ空間、オペレーティングシステム空間、又はハイパーバイザ空間で動作するかどうか)、どのソフトウェアプロセスがその例外レベルで実行されているか(コンテキスト識別子と呼ばれることもある)、関心命令のレイテンシなどを識別することができる。
【0029】
所与の例外処理ルーチンを実行することによって収集される所与の状態情報を形成する追加情報は、様々な形態をとることができるが、一例では、所与の関心命令の実行に関連付けられたソフトウェア定義状態の少なくとも1つの項目を含む。そのようなソフトウェア定義状態は、統計的プロファイリング回路によって自然に取り込まれないが、関心命令に対して生成されたレコードを分析しようとするときに有用な追加情報を提供することができる。例えば、関心命令に到達する前に命令実行のどのパスが追従されたかを調べるために使用することができる。
【0030】
ソフトウェア定義状態は様々な異なる形態をとることができるが、そのようなソフトウェア定義状態の1つの項目は、装置によって維持される前述のコールスタックバッファの内容を含むことができる。コールスタックバッファの内容の知識を有することによって、関心命令を含んだサブルーチンの前に実行されたサブルーチンのシーケンスを決定することが可能であり得る。
【0031】
例示的な一実装形態では、統計的プロファイリング回路は、所与の関心命令の実行に関する複数の情報項目内に、所与の関心命令が実行されたときの現在のコールスタックバッファポインタ値のインジケーションを含めるように更に構成される。所与の例外処理ルーチンの実行によって収集された所与の状態情報が少なくともコールスタックバッファの内容を含む状況では、レコード内のこの追加の情報、すなわち所与の関心命令が実行されたときに存在したコールスタックバッファポインタ値を提供することによって、コールスタックバッファの内容の解釈を支援することができる。特に、コールスタックバッファポインタが、関心命令が実行された時点とコールスタックバッファの内容が例外処理ルーチンによって収集された時点との間の合間に変化した場合であっても、関心命令が実行された時点に存在したコールスタックバッファポインタ値に関する追加情報を備えている場合には、関心命令が実行された時点におけるコールスタックバッファの内容を正確に再構築することが可能であり得る。
【0032】
所与の関心命令が実行されたときに存在した現在のコールスタックバッファポインタ値に関するこの情報は、コールスタック内容のどの部分を収集するかを決定するために例外処理ルーチンによって直接使用することができ、あるいは、例外処理ルーチンがコールスタック内容全体を取り込むことができ、その後、所与の関心命令が実行されたときの現在のコールスタックバッファポインタ値に関する情報を、取り込まれたコールスタック内容を分析するときに使用することができる。
【0033】
関心命令指定回路が、各関心命令を識別するように構成され得るいくつかの方法がある。しかしながら、例示的な一実装形態では、関心命令指定回路は、関心命令が実行されるときに、統計的プロファイリング回路が複数の情報項目を記録すべき各関心命令を識別するために選択基準を適用するように構成される。使用可能な選択基準にはいくつかの形態がある。例えば、選択基準は、N番目ごとの命令が選択されるように構成されてもよく、あるいは、次に関心命令として選択される特定のタイプの命令の発生を検出しようとするなど、より複雑な基準を適用してもよい。
【0034】
本明細書で説明する技法を使用する場合、統計的プロファイリングが実行される状況では、統計的プロファイリング回路は、識別された各関心命令に対してレコードを生成するように構成することができ、更に、各関心命令に更なる命令が識別され、その更なる命令は、前述の同期例外機構を使用して、その更なる命令が処理パイプラインの所与の段階に到達したときに所与の例外処理ルーチンを実行させるために、関連付けられた同期例外を有する。これにより、前述した所与の状態情報を例外処理ルーチンによって収集することができ、例えば、統計的プロファイリング回路によって各関心命令に対して生成されたレコードと組み合わせて使用することができるが、実行される例外の数が増加する可能性がある。例えば、本技術を使用しない場合、統計的プロファイリング回路は、複数の関心命令のレコードを生成し、それらのレコードをバッファに格納し、次に、ある所定の時点で非同期例外を発行することができ、その結果、例外は必ずしもすべての関心命令に対して行われるとは限らない。
【0035】
現在説明されている技術は、装置の特定の状態情報が各関心命令に対して収集されることを可能にするという利点を有するが、場合によっては、装置内で必要とされる例外処理の量を低減することが望ましい場合がある。例示的な一実装形態では、これは、初期選択基準及び更なる選択基準を含むように選択基準を構成することによって達成される。関心命令指定回路は次いで、候補関心命令を識別するために初期選択基準を適用するように構成されてもよい。しかしながら、関心命令指定回路は、更に、どの候補関心命令が実際の関心命令として使用されるべきかを決定するために更なる選択基準を適用するフィルタ回路を更に含むことができる。したがって、最初に選択された候補関心命令のいくつかをフィルタ除去することが可能であり、それによって、対応する更なる命令に関連付けられた同期例外に応答して例外処理ルーチンがトリガされる回数を低減する。
【0036】
フィルタリング機構が実行される時間は、実装に依存して変化し得る。例えば、一実装形態では、フィルタ回路は、候補関心命令のタイプが1つ以上の所与のタイプの命令である場合にのみ、候補関心命令を関心命令として扱うように構成され得る。したがって、そのような手法によって、フィルタリングは、装置によって考慮されることになる関心命令の数を減らすために、比較的早期に、例えばパイプライン中の復号段階で適用され得る。
【0037】
しかしながら、代替的に又は追加的に、フィルタ回路は、候補関心命令が実行されたときに所与の挙動が観察された場合に、候補関心命令を関心命令として扱うように構成され得る。したがって、そのような手法によれば、候補関心命令をパイプラインに通すことができ、その候補関心命令が実際に関心命令として扱われるべきかどうかに関する決定を、その候補関心命令の実行挙動が分かるまで延期することができる。これは、関心命令が、それらの実行挙動が関心のないものである場合に、関心命令として更に考慮することから効果的に除外されることを可能にすることができる。単に例示的な例として、ロード命令又はストア命令は、候補関心命令として識別され得るが、比較的長い待ち時間を有するロード命令又はストア命令に関連して前述の所与の状態情報を収集しようとするものだけが関心対象であると決定され得る。したがって、比較的高速に実行する任意のロード命令又はストア命令は、その段階において、関心命令として更に考慮することから除外されてもよく、その結果、関心命令として保持されるのは、比較的低速に実行するロード命令又はストア命令のみであり、したがって、その関連する更なる命令は、それに関連して保持される同期例外を有する。
【0038】
例示的な一実装形態では、統計的プロファイリング回路は、所与の候補関心命令の実行に応答して、所与の候補関心命令の実行に関する複数の情報項目を取得するが、フィルタ回路が所与の挙動が観察されたと判定した場合にのみ、複数の情報項目を含むレコードを維持する。したがって、統計的プロファイリング回路は、最初に、候補関心命令を任意の他の関心命令と同様に扱い、その関心命令に関連してレコードに記憶することを望む複数の情報項目を一緒に収集し始めることができる。しかし、先に述べた候補関心命令の所与の挙動が、その命令が実行されるときに観察されない場合、その関心命令のレコードを維持しないことを決定することができる。
【0039】
更なる命令の処理に関して、関連付けられた候補関心命令についてレコードが維持されていない場合、装置は、更なる命令に遭遇したときに同期例外をとらず、代わりに、更なる命令が単に通常通り実行に進むことを可能にするように構成されてもよい。
【0040】
候補関心命令に関連付けられた更なる命令を処理することができるいくつかの方法がある。例示的な一実装形態では、候補関心命令がフィルタ回路によって実際の関心命令として扱われるときのみ、関連付けられた更なる命令は、更なる命令が処理パイプラインの所与の段階に到達するときに、それに関連付けられた同期例外を有するものとしてマークされる。したがって、更なる命令が処理パイプラインのその段階に到達するときまでに、候補関心命令がもはや実際の関心命令として扱われない場合、更なる命令は、それに関連する同期例外を有するものとしてもはや扱われなくてもよい。
【0041】
例示的な一実装形態では、更なる命令は、候補関心命令が実際の関心命令であったと判定された後にのみ、更なる命令に関連付けられた同期例外を有し得る。代替的に、候補関心命令に関連付けられた更なる命令は、最初に、それに関連付けられた同期例外を有し得るが、候補関心命令が実際の関心命令として扱われないことが後で決定される場合、その同期例外関連付けは、更なる命令から除去され得る。
【0042】
いくつかの例示的な実装形態では、装置は、命令のシーケンスの実行中に1つ以上のイベントの発生を示すレコードを維持するための性能監視回路を更に備え得る。そのような場合、関心命令指定回路は、所与の命令の実行が所与のイベントを発生させ、性能監視回路が所与のイベントの発生が閾値レベルに達したことを示すときに、シーケンス内の所与の命令を関心命令であると識別するように構成され得る。そのようなアプローチによって、同期例外は、関連付けられた更なる命令に応答してトリガされ得、それによって、前述の所与の状態情報が取り込まれることを可能にし、次いで、その情報は、更なる分析のために利用可能であり、例えば、所与のイベントの発生が閾値レベルに到達した点に関連するいくつかの更なるコンテキスト情報を提供する。所与の例外処理ルーチンが実行されるときに取り込まれる所与の状態情報は、様々な形態をとることができる。それは、例えば、コールスタックバッファの内容などの、所与の関心命令の実行に関連付けられたソフトウェア定義状態の少なくとも1つの項目を提供する、例えば、先に論じた形態であり得る。
【0043】
例示的な一実装形態では、所与の命令に関連付けられた更なる命令が処理パイプラインの所与の段階に到達したことに応答して所与の例外処理ルーチンを実行すると、所与の状態情報に加えて、性能監視回路によって維持されるレコードの現在の状態が取り込まれる。したがって、取り込まれ得る前述の所与の状態情報に加えて、性能監視回路によって維持されるレコードの内容、又はその内容の少なくともサブセットも、更なる命令によってトリガされる例外処理ルーチンが実行されるときに取り込まれ得る。
【0044】
性能監視回路によって維持されるレコードは、様々な形態をとることができるが、例示的な一実装形態では、1つ以上のイベントの各々について、カウンタ値が初期化されてからのそのイベントの発生回数を示すカウンタ値を含む。様々なカウンタによって追跡されるイベントは、様々な形態をとることができ、実際に、必要に応じて、システム内の任意の適切なメトリックを追跡することができる。単に例として、カウンタのうちの1つを使用して、特定のキャッシュ内のキャッシュミスの数を追跡することができる。例えば、ロード命令又はストア命令が実行されるとき、レベル1データキャッシュ内にミスがあるかどうかを判定することができ、ミスがある場合、キャッシュミスイベントのイベントカウンタをインクリメントすることができる。装置内の様々なイベントに対してそのようなカウンタを保持するとき、これは、プログラム実行を分析しようとするときに後で分析することができる有用な性能監視レコードを提供することができる。
【0045】
上述のキャッシュミスの例を考慮すると、ロード命令又はストア命令の実行によってキャッシュミスのイベントカウンタが閾値レベルに達すると、そのロード命令又はストア命令を関心命令としてマークすることができ、関心命令指定回路は、選択基準を適用して、それに関連する同期例外を有する関連する更なる命令を決定することができる。次に、その更なる命令がパイプライン内の所与の段階に到達すると、同期例外がトリガされ、所望の装置の状態情報を収集し、任意選択で、性能監視回路によって維持されるカウンタのすべて又はサブセットについての情報も収集するために、前述の例外処理ルーチンを実行させる。
【0046】
本明細書で説明される技法の別の例示的な使用事例として、コールスタックバッファがある閾値レベルの満杯又は空に達する状況を検出することが有用であり得る。前述したように、コールスタックバッファは、サブルーチン間の遷移を処理するために使用される情報を維持することができ、リンク付き分岐命令に応答して入力されたサブルーチンから戻るときに使用される情報を取り込むために、リンク付き分岐命令に遭遇するたびに、エントリがコールスタックバッファに追加される。更に、最も新しく追加されたエントリがコールスタックバッファから除去され、リターン命令に遭遇するたびに、そこに記憶された情報が消費される。コールスタックバッファのエントリ内に保持される情報は、様々な形態をとることができる。例えば、エントリは、サブルーチンの呼出し側(リンク付き分岐命令、又はそのリンク付き分岐命令の後の次の順次命令であるサブルーチンリターンのターゲットのいずれか)に関連するアドレス、又は呼び出されたサブルーチンに関連するアドレスを含むことができる。
【0047】
コールスタックバッファ内に記憶される情報が何であれ、バッファは有限サイズであり、したがって、バッファが満杯又は空の閾値に達する場合、例えば、バッファが満杯になるか空になる場合、介入が必要とされ得る。
【0048】
本明細書で説明する技法によれば、関心命令指定回路は、所与の命令の実行によってコールスタックバッファ内のいくつかのエントリがトリガレベルに達したときに、シーケンス内の所与の命令を関心命令であると識別するように構成され得る。次に、同期例外が保留される更なる命令が識別され、その結果、その更なる命令がパイプライン内の所与の段階に到達すると、例外処理ルーチンを実行させるために同期例外が取られ、例外処理ルーチンは次に、コールスタックバッファの状態を分析するときに有用であり得るシステム状態を取り込むことができる。
【0049】
例示的な一実装形態では、トリガレベルは、コールスタックバッファが満杯であることを示し、関心命令として識別された所与の命令は、トリガレベルに到達させるリンク付き分岐命令である。この場合、更なる命令は、所与のタイプの後続の命令フロー変更命令である。例えば、ここで特に関心があるのは、後続のリンク付き分岐命令であり、これは、コールスタックバッファがすでに満杯である状況において、コールスタックバッファに別のエントリを追加しようとするためである。しかしながら、いくつかの例示的な実装形態では、コールスタックバッファとの任意の相互作用を引き起こす次の命令フロー変更命令を更なる命令としてマークすることがより容易であり得、したがって、例示的な一実装形態では、更なる命令は、後続のリンク付き分岐命令又は後続リターン命令の最初に発生したものであり得る。例外処理ルーチンが、その後続の命令フロー変更命令がパイプラインの所与の段階に到達することによってやがてトリガされるとき、例外処理ルーチンは、コールスタックバッファの状態に関して何らかの介入が必要とされるかどうかを判断することができる。
【0050】
同様に、トリガレベルは、代替的に又は追加的に、コールスタックバッファが空であることを示してもよい。コールスタックバッファが空であることをトリガレベルが示す状況では、関心命令として識別された所与の命令は、トリガレベルに到達させるリターン命令であり得る。ここでも、更なる命令は、所与のタイプの後続の命令フロー変更命令であってもよい。ここで特に関心があるのは、スタックがすでに空である状況においてスタックからエントリをポップしようとし得る後続のリターン命令である。しかしながら、先に説明したのと同じ理由で、コールスタックバッファと相互作用する任意の命令フロー変更命令の次の発生を更なる命令としてマークし、したがって、例えば、リターン命令又はリンク付き分岐命令のいずれかの次に発生する命令を更なる命令としてマークすることが、ハードウェアの観点からより単純であると決定され得る。
【0051】
ここで、特定の例について、図を参照して説明する。
【0052】
図1は、例示的な一実装形態による装置のブロック図である。プロセッサパイプライン10は、メモリからフェッチされた命令のシーケンスを実行するために提供される。処理パイプラインは、複数の段階、例えば、
図1に示されるフェッチ段階15、復号段階20、発行段階25、及び実行段階30を備える。いくつかのシステムでは、処理パイプライン内に更なる段階、例えばアウトオブオーダプロセッサにおけるレジスタリネームを容易にするためのリネーム段階があってもよいことが理解されよう。
【0053】
フェッチ段階15は、フェッチ要求をメモリに発行するように構成され、フェッチ要求は、実行のための命令のシーケンスを取り出すために、命令キャッシュ50(及び必要に応じて任意の介在レベルのキャッシュ)を介して処理される。フェッチ回路は、どの命令をフェッチするかを決定するのを支援するための特定の構造、例えば、分岐命令が取られるか取られないかを予測するために使用される分岐予測回路、及び場合によっては取られた分岐のターゲットアドレスを予測するために使用される分岐予測回路にアクセスすることができる。
【0054】
フェッチされた命令は復号段階20を通過し、各命令の実行を実施するために処理パイプラインによって実行される必要がある動作を識別するために復号される。復号された命令は次に発行段階25に渡され、そこで実行段階30へのディスパッチを待ってキューに入れられる。実行段階30は、様々なデータ処理タスクを実行するためのいくつかの異なる実行ユニット、例えば、算術論理ユニット(ALU)、浮動小数点ユニット(FPU)、ロード/ストアユニット(LSU)などを備えることができる。フェッチされたシーケンス内のロード命令は、メモリから1つ以上のキャッシュ(データキャッシュ55を含む)を介してレジスタファイル60のレジスタにデータをロードするために、LSU内で実行することができる。同様に、ストア命令は、レジスタファイル60内のレジスタからメモリにデータをストアして戻すためにLSU内で実行することができる(ストア動作は、その時点でメモリに書き戻されるのではなく、データキャッシュ55などのキャッシュ階層のキャッシュにデータをキャッシュさせることができる)。
【0055】
発行段階は、命令によって必要とされるソースオペランドが利用可能になると、例えば、それらのソースオペランド値がレジスタファイル60において、又は実行段階30に提供される何らかの転送経路上で利用可能になると、命令を実行段階にディスパッチするように構成することができる。
【0056】
統計的プロファイリング回路65は、特定の命令の実行に応答して、それらの命令の実行に関する複数の情報項目を含むレコードを生成するように構成されてもよい。バッファ70は、統計的プロファイリング回路65によって生成されたレコードを記憶するために提供されてもよい。統計的プロファイリング回路によって各レコード内に取り込まれた情報項目は、実装に応じて様々な形態をとることができるが、一般には、そのレコードが関連する命令の実行に関する情報項目である。したがって、例えば、レコードは、命令アドレス、命令タイプ、実行コンテキスト(例えば、処理パイプライン10がどの例外レベルで動作しているか)、その例外レベルで実行されているソフトウェアプロセスのインジケーション(コンテキスト識別子と呼ばれることもある)、その命令のレイテンシに関する情報などを取り込むことができる。そのようなレコードは、後に、処理パイプライン10内でプログラム実行を監視するプロセスの一部として分析することができる。そのような監視アクティビティは、様々な状況において、例えば、プログラムコードをデバッグしようとするとき、又は処理パイプラインの通常動作中に実行され得る。
【0057】
プログラム実行を監視するときに分析することができる有用な情報を得るために、他の構造を使用することもできる。一例は、装置内で発生する特定の関心イベントを追跡することができる性能監視ユニット(PMU)75である。例えば、PMU75は、一連のカウンタ80を維持することができ、各カウンタは、特定のイベントに関連付けられ、カウンタは、関心の各イベントの発生回数を追跡するためにインクリメントされる。関心イベントは様々な形態をとることができるが、1つの特定の例は、実行段階30のLSUに結合されたレベル1データキャッシュ55などの特定のキャッシュ内のキャッシュミスを追跡するために使用されるカウンタであり得る。統計的プロファイリング回路65によって生成されるレコードと同様に、PMU75によって保持されるカウンタ80は、プログラム実行中に装置の動作を分析するときに有用な情報を提供することができる。
【0058】
しかしながら、そのような情報を分析するとき、統計的プロファイリング回路によって特定のレコードが作成されたとき、及び/又はカウンタ内の特定の閾値に達したときの装置の状態に関する特定の状態情報にアクセスすることも有用であり得る。あるいは、そのような状態情報を取得して、特定の命令の実行など、特定の関心時点におけるその情報の形式のインジケーションを与えることが有用な場合がある。対象の状態情報は、様々な形態をとることができるが、一実施例では、ソフトウェア定義状態の少なくとも1つの項目であり、そのようなソフトウェア定義状態は、通常、統計的プロファイリング回路65又はPMU75などのコンポーネントによって追跡されない。特定の例として、特定の命令が実行されるときのコールスタックバッファ85の内容が有用である場合があり、その情報は、それ自体で有用であるか、又は統計的プロファイリング回路65によって生成されるレコード若しくはPMU75によって生成されるカウンタ80などの情報を分析するときに追加のコンテキストを提供するために有用である。
【0059】
本明細書で説明される技法によれば、装置の所望の状態情報がある時点で収集されることを可能にする機構が提供され、この場合、取り込まれた状態情報は、ある関心命令が実行されたときに存在した状態を示し得るが、その関心命令の実行に直接干渉しない。特に、処理パイプライン10内で実行される命令のシーケンスに現れる1つ以上の関心命令を識別するために、ある基準を適用するように構成された関心命令指定回路40が設けられる。関心命令は、様々な様式で選択することができる。例えば、統計的プロファイリング回路65を考慮すると、統計的プロファイリング回路をトリガしてレコードを生成するために使用される各命令は、関心命令指定回路40によって関心命令として指定されてもよい。別の例として、PMU75によって追跡されているイベントのうちの1つを発生させる命令が実行され、イベントのそのインスタンスの発生がPMU内の対応するカウンタ80を閾値レベルに到達させるとき、その命令もまた、関心命令として識別され得る。
【0060】
更に別の例として、処理パイプライン10によって実行されているサブルーチンに変更を生じさせる命令は、エントリをコールスタックバッファ85にプッシュさせるか、又はコールスタックバッファからポップさせることができ、そのような命令の実行が、コールスタックバッファ85の特定の満杯又は空の閾値に到達させる場合、その命令も関心命令として識別することができる。
【0061】
本明細書で説明する技法によれば、関心命令指定回路40によって関心命令が識別されると、関心命令指定回路は、命令のシーケンス内でその関心命令よりも後の更なる命令を決定するために、定義された基準も適用し、次いで、その更なる命令を、それに関連する同期例外を有するものとしてマークする。
【0062】
結果として、関心命令の実行は変更されずに進行するが、更なる命令が処理パイプラインの所与の段階に到達し、同期例外が依然としてそれに関連付けられている(本明細書では更なる命令に保留されているとも呼ばれる)と仮定すると、これは、更なる命令が実行に進むのではなく同期例外をトリガするために使用され得る。この分析が実行される所与の段階は、処理パイプライン10内の任意の適切な段階とすることができる。例示的な一実装形態では、それは実行段階30であり得るが、代替実装形態では、処理パイプライン中のより早い段階が、更なる命令がその段階に到達したときに同期例外をトリガさせる所与の段階として使用され得る。
【0063】
同期例外がトリガされると、これにより、処理パイプラインが所与の例外処理ルーチンを実行して、例えばコールスタックバッファ85の内容などの上述の対象の状態情報を収集する。これは、内部に記憶するか、又は装置から出力することができ、統計的プロファイリング回路65によって関心命令に対して生成された関連レコード、又はPMU75によって維持される1つ以上のカウンタ80の内容などの他の情報と組み合わせることができ、例えば、関心命令が、カウンタのうちの1つを閾値レベルに到達させるイベントを発生させたときに有用であり得る。
【0064】
同期例外が関心命令自体に関連付けられていないという事実により、これは、関心命令がその通常の方法で実行されることを妨げない。しかしながら、関心命令に関連付けられるべき更なる命令を適切に選択することによって、同期例外が関心命令の実行に続く決定論的な時点でとられることを確実にすることができ、これは、例外処理ルーチンがその同期例外に応答して実行されるときに収集される状態情報の有用性を大幅に高めることができる。
【0065】
図2は、関心命令指定回路40の動作を示すフロー図である。ステップ100において、関心命令が関心命令指定回路40によって識別される。先に論じたように、様々な異なる基準を使用して、各関心命令を識別することができる。例えば、関心命令指定回路は、特定のタイプの命令を監視し、それらを関心命令としてマークすることができ、及び/又はシーケンス内のN番目ごとの命令を関心命令として識別するように構成することができる。
【0066】
関心命令が識別されると、ステップ105において、定義された基準が適用されて、命令のシーケンスにおいて関心命令よりも後に現れる更なる命令が決定される。ここで適用される基準は、様々な形態をとることができ、いくつかの例については、
図5A~
図5Cを参照して後で説明する。しかし、その目的は、同期例外がその命令に応答してトリガされ、ある状態情報を収集させるときに、その状態情報が、関心命令が実行されたときのその状態情報の形式を表すか、又は少なくともそのような情報が取り込まれた状態情報から推論され得る形式である可能性があるように、適切な命令を識別することである。
【0067】
ステップ105において、更なる命令が識別されると、ステップ110において、その更なる命令は、それに関連付けられた同期例外を有するものとしてマークされ、その更なる命令のマーキングは、更なる命令とともに処理パイプラインを通過する。後でより詳細に説明するように、いくつかの例示的な実装形態では、更なる命令が先に言及した所与の段階に到達する前に、更なる命令との同期例外の関連付けを除去することができる可能性があるが、更なる命令が所与の段階に到達する時間までに、同期例外が依然として更なる命令に保留されていると仮定すると、これは同期例外をトリガし、所与の状態情報を収集するために、先に述べた例外処理ルーチンを実行させる。
【0068】
これは、
図3に関してより詳細に示されている。特に、ステップ150において、更なる命令が処理パイプラインの所与の段階に到達しており、それに関連付けられた同期例外を有するものとして依然としてマークされているかどうかが判定される。上述したように、所与の段階は、例えば、実行段階30であってもよいが、代替的に、処理パイプラインにおけるより早い段階であってもよい。
【0069】
ステップ150において、更なる命令が所与の段階に到達し、同期例外が保留されているものとしてマークされていると判定された場合、ステップ155において同期例外がトリガされる。これにより、処理パイプラインは、フェッチされた命令の実行を停止し、代わりに例外処理ルーチンを実行して、ステップ160で所与の状態情報を収集する。実行される正確な例外処理ルーチンは、通常、同期例外の形式に依存し、したがって、ステップ155でトリガされた同期例外は、実行される必要がある特定の例外処理ルーチンを決定するために使用される。
【0070】
ステップ165において、所与の状態情報が例外処理ルーチンによって収集されると、それは装置から出力されるか、あるいは後の分析のために装置の何らかの適切な内部記憶構造内に記憶される。次に、ステップ170において、処理は例外処理ルーチンから戻り、命令ストリームの実行を再開することができる。この時点で、更なる命令の実行に進むことができる。これは、例えば、同期例外がトリガされた所与の段階が実行段階であった場合、例外処理ルーチンから戻った直後に行われてもよく、あるいは、1つ以上の他の命令が最初に実行され、更なる命令が実行段階に到達するまで処理パイプラインのリマインダを通過し、その時点で更なる命令が実行されてもよい。
【0071】
図4は、本明細書で説明される技法によって有用に取り込まれ得る状態情報の一形態を概略的に示す。特に、状態情報は、コールスタックバッファ85の内容を含むことができる。コールスタックバッファは、サブルーチン間の遷移を処理するための情報を維持するために使用され、リンク付き分岐(BL)命令に応答してエントリされたサブルーチンから戻るときに、やがて使用される情報を取り込むために、そのBL命令に遭遇するたびに、エントリがコールスタックバッファに追加される。このようなアクションは、通常、エントリをコールスタックバッファにプッシュすると呼ばれる。更に、最も新しく追加されたエントリが除去され、そこに記憶された情報は、リターン命令に遭遇するたびに消費され、このようなアクションは、通常、スタックからエントリをポップすることと呼ばれる。
【0072】
BL命令に応答してコールスタックバッファにプッシュされる情報は、BL命令によって分岐されるサブルーチンからの後続のリターンを可能にするのに十分な情報を示すならば、様々な形態をとることができる。
図4に示す例では、BL命令に遭遇するたびに、BL命令によって分岐されているサブルーチンのリターンアドレスがコールスタックバッファにプッシュされる。コールスタックポインタは、任意の特定の時点でコールスタックバッファの最上位エントリを識別するために維持される。したがって、
図4を考慮すると、最初にサブルーチンAが実行中であり、次いでポイント200において、サブルーチンBへの遷移を引き起こすBL命令に遭遇すると仮定される。これにより、サブルーチンAのリターンアドレス(すなわち、やがて処理がサブルーチンAに戻るときにサブルーチンAにおいて実行される次の命令のアドレス)が、現在のコールスタックポインタによって指し示されるコールスタックのエントリにプッシュされる。更に、コールスタックポインタがインクリメントされ、処理はサブルーチンBに分岐する。ポイント205、210によって示されるように、この例では、いくつかのサブルーチンがネストされ、したがって、BL命令によるサブルーチンの変更があるたびに、更なるリターンアドレスエントリがコールスタックバッファ85上にプッシュされる。したがって、ポイント205において、サブルーチンBのリターンアドレスがコールスタックにプッシュされ、次いでコールスタックポインタがインクリメントされ、更に、処理はサブルーチンCに分岐する。同様に、ポイント210において、サブルーチンCのリターンアドレスがコールスタックにプッシュされ、コールスタックポインタがインクリメントされ、処理はサブルーチンDに進む。
【0073】
この時点で、コールスタックバッファ85の内容は、
図4に示すようになる。特に、サブルーチンA、B及びCに対するリターンアドレスを記憶する3つのエントリがあり、コールスタックポインタは、次の空のエントリを指すようにインクリメントされている。ポイント215に到達すると、サブルーチンDが完了したことを示すリターン命令に遭遇する。この時点で、コールスタックポインタはデクリメントされ、次いで、コールスタックポインタによって指し示されたエントリがコールスタックからポップされる。この情報はサブルーチンCに対するリターンアドレスを提供し、処理がサブルーチンCの実行に戻ることを可能にする。この時点で、サブルーチンCのリターンアドレスを含むエントリがポップされ、その情報が消費されているが、その情報は通常、その時点で上書きされないことに留意されたい。しかし、現在のコールスタックポインタがそのエントリを指しているので、後続のBL命令に遭遇した場合、コールスタックポインタによって指し示されたエントリ内のコールスタックに新しいリターンアドレスをプッシュすることによって、サブルーチンCのリターンアドレス情報を上書きする。
【0074】
ステップ220において、別のリターン命令に遭遇し、コールスタックポインタをデクリメントし、そのコールスタックポインタによって現在指し示されているリターンアドレス、すなわちサブルーチンBのリターンアドレスをポップすると仮定する。その後、処理はサブルーチンBに戻る。
【0075】
例として、関心命令がサブルーチンDのポイント217で発生した場合、関心命令が実行されたときのようにコールスタックバッファの内容を取り込むことが望ましい場合がある。先に説明したように、これは、
図4に示すようなコールスタックバッファ85の形態である。しかし、コールスタックバッファの内容が収集される前に別のBL命令に遭遇した場合、新しいエントリがコールスタックバッファにプッシュされ、コールスタックバッファの内容が変更される。同様に、1つ以上のリターン命令に遭遇した場合、エントリがコールスタックからポップされ、コールスタックポインタがデクリメントされる。そのポップされた情報は直ちに上書きされないが、現在のコールスタックポインタは、ポイント217に存在するようなコールスタックポインタに少なくとももはや対応しない。更に、ポイント225で示されるように、後続のBL命令に遭遇し、例外処理ルーチンがコールスタックバッファ状態情報を取り込むためにトリガされる前に発生する場合、これにより、ポイント217に存在していたコールスタックバッファの内容が上書きされて、もはや決定できなくなる可能性がある。
【0076】
本明細書で説明する技法によれば、そのようなシナリオが発生する可能性は、関心命令に後続し、したがって同期例外のトリガを引き起こす更なる命令を適切に選択することによって低減され得る。3つの可能な例示的手法が
図5A~
図5Cに示されている。
図5Aによれば、関心命令がステップ250で識別されると、処理はステップ255に進み、関心命令指定回路40は、関心命令の直後に実行される命令を更なる命令として識別する。したがって、これにより、コールスタックバッファの状態が取り込まれる前に、処理が異なるサブルーチンに遷移する可能性が回避される。
【0077】
しかしながら、場合によっては、直後の命令を更なる命令としてマークすることが適切でないと決定されることがある。例えば、命令のアウトオブオーダ実行がサポートされてもよく、通常は、直後の命令が関心命令の前に実行されることが許可される場合がある。しかしながら、直後の命令を更なる命令として指定し、したがって、それに対する同期例外を保留することによって、これは、そのような並べ替えを防止し、プローブ効果を導入する可能性がある。これが問題であると考えられた場合、これは、関心命令に続くN番目の命令に対する同期例外を保留することによって軽減することができ、ここでNは1より大きい。
【0078】
更なる命令を選択するために使用され得る技法の別の例として、
図5Bに示されるように、関心命令がステップ260において識別されるとき、関心命令指定回路40は、次のリターン命令を更なる命令として識別するように構成され得る。次のリターン命令の前に発生する別のBL命令が存在しない場合、これは、依然として同じサブルーチンにある間に同期例外が発生することを保証する。しかしながら、別のBL命令が発生して、新しいエントリがスタックにプッシュされる場合であっても、次のリターン命令を更なる命令として識別することによって、これは、コールスタックポインタが、関心命令が発生したときのそのコールスタックポインタの値未満にデクリメントされないことを保証し、したがって、関心命令のときに存在した関連するコールスタック内容が上書きされるリスクを回避する。
【0079】
別の例として、
図5Cに示されるように、関心命令がステップ270において識別されるとき、ステップ275において、指示命令指定回路40は、更なる命令として次のBL命令を識別することができる。これにより、1つ以上のリターン命令に最初に遭遇して、コールスタックポインタがデクリメントされても、同期例外が行われる前にコールスタック内容の上書きが起こらないことが保証される。したがって、上述したような手段によって、関心命令が通常通り実行されることを可能にするが、同期例外が行われる決定論的ポイントを提供することが可能であり、関心命令が実行されたときのコールスタックバッファの内容が決定されることを防止するような方法で、その内容が変更される前にコールスタックバッファの内容が分析されることを可能にする。
【0080】
更なる命令を決定するために取ることができる別の例示的な手法として、指示命令指定回路40は、関心命令の後、命令のシーケンス内に現れる任意の命令を、少なくとも1つの所与のタイプの次の命令まで、ただしそれを超えないように、更なる命令として識別することができる。この場合、更なる命令として選択された実際の命令は、それが関心命令の後に現れる特定のタイプの命令まで、ただしそれを超えない命令であるならば、重要であるとは見なされない。例えば、ここで指定されたタイプはBL命令とすることができ、したがって、そのような手法は、どの命令がそれに保留された同期例外を有するかを厳密に制限することなく、少なくとも次のBL命令に遭遇する時間までに同期例外が発生することを保証する。
【0081】
図6は、本明細書で説明される技術が、統計的プロファイリング回路65によって実行され得るような統計的プロファイリングに関連してどのように使用され得るかを示すフロー図である。ステップ300において、次の関心命令を識別するために選択基準が適用され、この選択基準は関心命令指定回路40によって適用される。統計的プロファイリングの例では、いくつかの基準を使用することができ、例えば、基準は、単にシーケンス内のN番目ごとの命令を選択してもよく、あるいは、関心命令としてフラグを立てられる特定のタイプの命令を探してもよい。
【0082】
ステップ305で、更なる命令が関心命令指定回路40によって識別され、その次の命令は、それに関連する同期例外を有するものとしてマークされる。更なる命令を選択するために、例えば、
図5A~
図5Cを参照して前述した技法を使用するなど、任意の適切な方式を使用することができる。
【0083】
ステップ310において、関心命令が実行されると、統計的プロファイリング回路は、その関心命令の実行に関する複数の情報項目を収集し、その収集された情報をレコードとしてバッファ70内に記憶することができる。この時点で収集することができる様々なタイプの情報は、命令アドレス、命令タイプ、実行コンテキストなど、すでに前述した。特定の例示的な一実装形態では、収集された通常の情報は、例えば関心命令が実行されたときの現在のコールスタックポインタ値など、1つ以上の追加の情報項目によって補足することができる。その現在のコールスタックポインタ値の収集は、例えば、そのコールスタックポインタ値と、例外処理ルーチンが実行されるときに存在するコールスタックポインタ値との比較を可能にすることによって、例外処理ルーチンが後に実行されるときに取得されるコールスタックバッファの内容を分析しようとするときに、やがて支援することができる。
【0084】
ステップ315で、更なる命令が先に述べた所与の段階に到達すると、同期例外がとられて、対応する例外処理ルーチンが実行され、バッファ70に記憶されたレコードに存在しない特定の状態情報が収集される。先に説明したように、これは、コールスタックバッファ85の内容のような特定のソフトウェア定義状態であり得る。
【0085】
ステップ320で、この余分な状態情報が、関心命令のレコードに関連して出力又は記憶され、次に、ステップ325で、処理は例外処理ルーチンに戻り、更なる命令を実行できるようにする。
【0086】
この余分な状態情報を収集することによって、関心命令について統計的プロファイリング回路によって生成されたレコードを分析するときに、追加の有用なコンテキスト情報を提供することができる。例えば、関心命令が実行されたときに存在していたコールスタックバッファの内容を使用することによって、関心命令に到達する前に実行されたサブルーチンのシーケンスを識別することが可能である。
【0087】
更なる命令が、関心命令に続いて現れる次のBL又はリターン命令であるように選択される場合、これは、コールスタックバッファ内容を取り込むために例外処理ルーチンが実行されるときに、処理が依然として、関心命令に遭遇したサブルーチンと同じサブルーチン内にあることを保証することができる。しかしながら、次のリターン命令のみ、又は次のBL命令のみなど、別の基準が更なる命令を選択するために選択される状況では、コールスタック内容が変化している可能性があるが、関心命令が実行されたときに存在する元のコールスタック内容のいずれも上書きされていないことを依然として保証することができる。このような状況では、統計的プロファイリング回路によって生成されたレコード内で関心命令が実行されたときの現在のコールスタックポインタ値を取り込むことによって、関心命令が実行されたときのコールスタックバッファの正確な形式を決定することが可能である。特に、レコード内に保持されたコールスタックポインタ値を、コールスタックバッファが例外処理ルーチンによって分析されるときに存在するコールスタックポインタ値と比較することによって、関心命令が実行されたときのコールスタックバッファの形式を再作成することが可能である。
【0088】
図7は、先に説明した技法を利用して統計的プロファイリングを実行するときに使用することができる代替手法を示すフロー図である。
図7に示されるシナリオによれば、関心命令指定回路40は、関心命令の数を減らし、したがって行われる同期例外の数を減らすために使用することができるフィルタ回路45を含む。特に、
図7に示すように、関心命令指定回路40は、ステップ350において、候補関心命令を識別するために初期選択基準を適用することができる。これは、例えば、シーケンス内のN番目ごとの命令を選択することを含み得る。次いで、ステップ355において、更なる選択基準を適用して、少なくとも候補関心命令が実行された時間までに、候補関心命令を実際の関心命令として扱うかどうかを評価することができる。
【0089】
この更なる選択基準が適用される時間は、実装に依存して変化し得る。例えば、関心命令から特定のタイプの命令を除外するために、事前に行うことができる。したがって、初期選択基準は、N番目ごとの命令を選択することができるが、更なる選択基準は、そのような選択された候補関心命令のそれぞれのタイプを調べ、特に関心のないことが知られているあるタイプの命令を更なる考慮から除外することができる。代替的又は追加的に、候補関心命令は、パイプラインを通って実行点に進むことが許されてもよいが、実行時のそれらの命令の挙動は、それらがまだ関心対象であるかどうか、したがって実際の関心命令として維持されるべきかどうかを判定するために分析されることができる。
【0090】
特定の例として、比較的遅いロード命令又はストア命令のみが対象であると決定される場合がある。したがって、ステップ355における初期フィルタリングは、ロード命令又はストア命令ではない任意の命令を更なる考慮から除去することができ、実行時の後のフィルタは、比較的速く実行された任意のロード命令又はストア命令をフィルタ除去して、遅く実行されたロード命令又はストア命令のみを実際の関心命令として保持することができる。
【0091】
ステップ360において、候補関心命令が実際の関心命令として扱われるべきである場合にのみ、バッファ70内のレコードを維持することが決定される。したがって、候補関心命令の実行時に、統計的プロファイリング回路65は、レコード内に記憶される様々な情報を収集するプロセスを実行することができるが、候補関心命令がもはや対象ではないと判定された場合、そのレコードは維持されない。
【0092】
ステップ365で、更なる命令に関連してどのステップをとるべきかを決定するために、レコードが維持されているかどうかが判定される。先に述べたように、更なる命令が評価される所与の段階は、実行段階であってもよく、又はパイプライン内のより早い段階であってもよい。所与の段階がパイプラインのより早い段階である状況では、関心命令についてレコードが維持されているかどうかが分かるまで、更なる命令の処理がその所与の段階で一時停止される場合があり得る。
【0093】
レコードが維持されている場合、プロセスはステップ370に進み、更なる命令が所与の段階に到達すると、同期例外がとられ、プロセスは
図6の残りの部分のように進む(すなわち、ステップ315、320、及び325を実施する)。
【0094】
しかしながら、レコードが維持されていない場合、更なる命令が所与の段階に到達したとき、同期例外は取られず、更なる命令は、ステップ375で通常通り実行に進むことが許可される。
【0095】
関心命令についてレコードを維持するか否かに関する決定が、更なる命令が所与の段階に到達する前に行われる状況では、例示的な一実装形態では、同期例外は、更なる命令に保留されたままであり得るが、レコードが維持されていないと判断された場合、更なる命令が所与の段階に到達したときに無視され得る。あるいは、レコードが維持されていないと決定された場合、同期例外を更なる命令から除去することができ、その結果、更なる命令が所与の段階に到達するまでに、もはや同期例外が保留されず、したがって、例外が取られることなく単に実行に進む。
【0096】
図8は、先に説明した技法を利用するときに使用することができる性能監視技法を示すフロー図である。ステップ400において、PMU75は、多数のイベントに対するイベントカウンタ80を維持する。ステップ405において、命令の実行が監視されたイベントのうちの1つの発生を引き起こすかどうかが判定され、そうでない場合、ステップ420において更なるアクションは必要とされない。しかしながら、命令の実行が監視されるイベントの発生を引き起こす場合、ステップ410において関連するカウンタが更新され、ステップ415において、そのカウンタについて閾値レベルに到達したかどうかが評価される。そうでない場合、ステップ420で更なる動作は必要とされない。
【0097】
しかしながら、ステップ415において、閾値レベルに達したと判定された場合、監視されたイベントの発生を引き起こした命令は、ステップ425において関心命令として扱われる。したがって、その関心命令に対して更なる命令が識別され、その更なる命令は、それに関連する同期例外を有するものとしてマークされる。
【0098】
更なる命令が所与の段階に到達すると、ステップ430において、同期例外が行われ、例外処理ルーチンが実行されて、特定の状態情報が収集される。これは、例えば、先に説明したコールスタックバッファの内容などのソフトウェア定義状態など、様々な形態をとることができる。
【0099】
ステップ435において、この追加の状態情報は、PMUによって維持されるように、監視されたイベントの現在のカウンタ値に関連して出力されるか、又は記憶される。したがって、これは、それらのカウンタ値を分析するときに使用することができる追加のコンテキスト情報を提供する。
【0100】
ステップ440において、1つ以上のカウンタをリセットすることが任意に決定されてもよい。例えば、閾値レベルに到達したカウンタをリセットすることが少なくとも適切であり得る。更に、処理は例外処理ルーチンから戻り、更なる命令が実行に進むことを可能にする。
【0101】
図9は、コールスタックバッファが満杯又は空の閾値レベルに達する状況を追跡するための、本明細書で説明される技法の更なる例示的な使用事例を示すフロー図である。ステップ450において、BL命令が実行されると、そのBL命令の実行によってコールスタックバッファが満杯になるかどうかが判定される。そうである場合、ステップ465において、そのBL命令は、関心命令としてマークされ、
図9に示される例において、次のリンク付き分岐又はリターン命令(どちらが先に発生しても)は、それに保留される同期例外を有する更なる命令としてマークされる。コールスタックバッファがすでに満杯であるときにコールスタックバッファに更なるエントリを追加しようとするので、特に関心があるのは、介在するリターン命令の前に発生した次のBL命令である。しかしながら、手順効率のために、命令シーケンス内で次に発生するBL又はリターン命令のいずれかを更なる命令として単にマークすることがより容易であると考えることができる。あるいは、更なる命令として使用されるのは、次のBL命令のみであってもよい。
【0102】
ステップ450において、BL命令がコールスタックバッファを満杯にしないと判定された場合、ステップ455において、コールスタックバッファを空にするリターン命令が実行されているかどうかが判定される。実行されていない場合、プロセスはステップ450に戻る。
【0103】
しかしながら、コールスタックバッファを空にするリターン命令が実行されたと判定された場合、ステップ460において、リターン命令は、関心命令としてマークされ、
図9に示される例において、次のリターン又はBL命令は、同期例外が保留された更なる命令としてマークされる。特に関心があるのは、コールスタックバッファを空にしたリターン命令の後に、コールスタックバッファが空であった状況においてコールスタックバッファからエントリをポップしようとする別のリターン命令が続くシナリオである。しかしながら、手順効率のために、次のリターン命令又はBL命令のどちらが関心命令に続いて最初に発生するかを単にマークすることがより容易であり得る。代替的に、関心命令指定回路40は、関心命令に続く次のリターン命令のみを探し、それを更なる命令としてマークするように構成されてもよい。
【0104】
図10は、使用され得るシミュレータ実装を示す。前述の例は、当該技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法の観点で本発明を実施するが、本明細書に記載の例による命令実行環境を提供することも可能であり、命令実行環境は、コンピュータプログラムの使用により実施される。このようなコンピュータプログラムは、コンピュータプログラムがハードウェアアーキテクチャのソフトウェアベースの実装を提供する限り、シミュレータとしばしば称される。様々なシミュレータコンピュータプログラムは、エミュレータ、仮想マシン、モデル、及び動的バイナリトランスレータを含むバイナリトランスレータを含む。典型的には、シミュレータ実装は、ホストプロセッサ515で実行してもよく、ホストプロセッサ515は、任意選択で、ホストオペレーティングシステム510を実行し、ホストオペレーティングシステム510は、シミュレータプログラム505をサポートする。いくつかの構成では、ハードウェアと提供された命令実行環境との間に複数層のシミュレーションがあってもよく、かつ/又は、複数の異なる命令実行環境が同じホストプロセッサ上に提供されていてもよい。歴史的に、強力なプロセッサが、合理的な速度で実行するシミュレータ実装を提供するために必要とされてきたが、そのような手法は、ある状況において、例えば、互換性又は再使用の理由から別のプロセッサにネイティブなコードを実行することが望まれるときに、正当化され得る。例えば、シミュレータ実装は、ホストプロセッサハードウェアによってサポートされていない追加の機能を有する命令実行環境を提供してもよく、又は典型的には異なるハードウェアアーキテクチャに関連付けられた命令実行環境を提供してもよい。シミュレーションの概要は、「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、1990年冬、USENIX Conference、第53~63頁に記載されている。
【0105】
例が、特定のハードウェア構築又は特徴を参照して前述されている程度に、シミュレーションされた実装では、同等の機能が、好適なソフトウェア構築又は特徴によって提供されてもよい。例えば、特定の回路は、シミュレーションされた実装では、コンピュータプログラムロジックとして設けられてもよい。同様に、レジスタ又はキャッシュなどのメモリハードウェアは、シミュレーションされた実装では、ソフトウェアデータ構造として設けられてもよい。また、ハードウェア装置内のメモリにアクセスするために使用される物理アドレス空間は、シミュレートされたアドレス空間としてエミュレートされ得、シミュレートされたアドレス空間は、ホストオペレーティングシステム510によって使用される仮想アドレス空間に、シミュレータ505によってマッピングされている。前述の例で言及されているハードウェア要素のうち1つ以上がホストハードウェア(例えば、ホストプロセッサ515)に存在する構成では、いくつかのシミュレートされた実装は、適切であるならば、ホストハードウェアを使用してもよい。
【0106】
シミュレータプログラム505は、コンピュータ読み出し可能な記憶媒体(非一時的媒体であってもよい)に格納されてもよく、ターゲットコード500(アプリケーション、ゲストオペレーティングシステム、及びハイパーバイザを含んでもよい)への仮想ハードウェアインタフェース(命令実行環境)を提供し、この仮想ハードウェアインタフェースは、シミュレータプログラム505によってモデル化されたハードウェアアーキテクチャのハードウェアインタフェースと同じである。したがって、ターゲットコード500のプログラム命令は、シミュレータプログラム505を使用して命令実行環境内から実行されてもよく、このため、前述の装置のハードウェア特徴を実際には有さないホストコンピュータ515は、これらの特徴をエミュレートすることができる。シミュレータプログラムは、処理パイプライン10の動作をエミュレートするための処理プログラムロジック520と、関心命令指定回路40の動作をエミュレートするための関心命令指定プログラムロジック525とを含んでもよい。システムのアーキテクチャレジスタ60もまた、ターゲットアーキテクチャのアーキテクチャレジスタをホストハードウェア515によって使用されるメモリ空間にマッピングするための、シミュレータコード505によって維持されるデータ構造エミュレーティングプログラムロジック(図示せず)を使用してエミュレートされてもよい。したがって、装置の状態情報を収集するための本明細書で説明される技法は、
図10の例では、シミュレータプログラム505によってソフトウェアで実行され得る。
【0107】
本出願において、「~ように構成された(configured to...)」という用語は、装置の要素が、定義された動作を実施することが可能である構成を有することを意味するために使用される。この文脈において、「構成」とは、ハードウェア又はソフトウェアの配置又は相互接続の方法を意味する。例えば、装置は、定義された動作を提供する専用ハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイスが、機能を実行するようにプログラムされてもよい。「ように構成された」は、装置要素が、定義された動作を提供するために何らかの変更がなされる必要があることを意味しない。
【0108】
本発明の例示的な実施形態が添付の図面を参照して本明細書で詳細に説明されてきたが、本発明はそれらの正確な実施形態に限定されないこと、及び添付の特許請求の範囲によって規定される本発明の範囲及び趣旨から逸脱することなく、当業者によって様々な変更、追加、及び修正が当業者によって実施され得ることが理解されるであろう。例えば、独立請求項の特徴の様々な組み合わせは、本発明の範囲から逸脱することなく、従属請求項の特徴でなされてもよい。
【国際調査報告】