IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アーム・リミテッドの特許一覧

特表2023-526554処理回路によって処理されるサンプル操作のプロファイリング
<>
  • 特表-処理回路によって処理されるサンプル操作のプロファイリング 図1
  • 特表-処理回路によって処理されるサンプル操作のプロファイリング 図2
  • 特表-処理回路によって処理されるサンプル操作のプロファイリング 図3
  • 特表-処理回路によって処理されるサンプル操作のプロファイリング 図4
  • 特表-処理回路によって処理されるサンプル操作のプロファイリング 図5
  • 特表-処理回路によって処理されるサンプル操作のプロファイリング 図6
  • 特表-処理回路によって処理されるサンプル操作のプロファイリング 図7
  • 特表-処理回路によって処理されるサンプル操作のプロファイリング 図8
  • 特表-処理回路によって処理されるサンプル操作のプロファイリング 図9
  • 特表-処理回路によって処理されるサンプル操作のプロファイリング 図10
  • 特表-処理回路によって処理されるサンプル操作のプロファイリング 図11
  • 特表-処理回路によって処理されるサンプル操作のプロファイリング 図12
  • 特表-処理回路によって処理されるサンプル操作のプロファイリング 図13
  • 特表-処理回路によって処理されるサンプル操作のプロファイリング 図14
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-06-21
(54)【発明の名称】処理回路によって処理されるサンプル操作のプロファイリング
(51)【国際特許分類】
   G06F 11/36 20060101AFI20230614BHJP
   G06F 9/30 20180101ALN20230614BHJP
【FI】
G06F11/36 136
G06F11/36 192
G06F9/30 380
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2022571848
(86)(22)【出願日】2021-05-20
(85)【翻訳文提出日】2022-12-02
(86)【国際出願番号】 GB2021051214
(87)【国際公開番号】W WO2021234387
(87)【国際公開日】2021-11-25
(31)【優先権主張番号】2007666.7
(32)【優先日】2020-05-22
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
(71)【出願人】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】ウィリアムズ、マイケル ジョン
(72)【発明者】
【氏名】グラント、アラスデア
(72)【発明者】
【氏名】ホーリー、ジョン マイケル
【テーマコード(参考)】
5B033
5B042
【Fターム(参考)】
5B033FA21
5B033FA22
5B042HH20
5B042HH30
5B042JJ29
(57)【要約】

処理回路4は、キャッシュ16若しくはメモリ34からフェッチされた命令又は命令から復号されたマイクロ操作に応答して、データ処理操作を実行する。サンプリング回路50は、プロファイルされるサンプル操作として、命令又はマイクロ操作のサブセットを選択する。プロファイリング回路52は、サンプル操作として選択された命令又はマイクロ操作の処理に応答して、サンプル操作の操作タイプ及びサンプル操作に直接帰属するサンプル操作の挙動に関する情報を指定するサンプルレコードを取得する。プロファイリング回路52は、所与の命令に対応するサンプル操作について取得されたサンプルレコードで、所与の命令よりもプログラム順において前又は後に現れる参照命令のアドレスを示す参照命令アドレスインジケータを含むことができ、その制御フローは、プログラム順において参照命令と所与の命令との間で発生する任意の命令間で連続的である。
【選択図】図1

【特許請求の範囲】
【請求項1】
装置であって、
メモリ若しくはキャッシュからフェッチされた命令又は前記命令から復号されたマイクロ操作に応答してデータ処理操作を実行する処理回路と、
プロファイルされるサンプル操作として命令又はマイクロ操作のサブセットを選択するためのサンプリング回路と、
前記サンプリング回路によってサンプル操作として選択された命令又はマイクロ操作の処理に応答して、前記サンプル操作の操作タイプ及び前記サンプル操作に直接帰属する前記サンプル操作の挙動に関する情報を指定するサンプルレコードを取得する、プロファイリング回路と、
を備え、
前記プロファイリング回路が、所与の命令に対応するサンプル操作について取得された前記サンプルレコードに、前記所与の命令よりもプログラム順において前又は後に現れる参照命令のアドレスを示す参照命令アドレスインジケータを含むことができ、その制御フローが、プログラム順において前記参照命令と前記所与の命令との間で発生する任意の命令間で連続的である、装置。
【請求項2】
前記プロファイリング回路が、前記所与の命令よりもプログラム順において前に現れる先行命令のアドレスを示す前記参照命令アドレスインジケータを設定することができ、その制御フローが、前記先行命令から前記所与の命令まで連続的である、請求項1に記載の装置。
【請求項3】
前記プロファイリング回路が、前記所与の命令よりもプログラム順において後に現れる後続命令のアドレスを示す前記参照命令アドレスインジケータを設定することができ、その制御フローが、前記所与の命令の後の次命令から前記後続命令まで連続的である、請求項1又は2に記載の装置。
【請求項4】
前記プロファイリング回路が、前記所与の命令又は命令アドレスの前の直近成立分岐命令の分岐ターゲットアドレス又は前記所与の命令の後の次成立分岐命令を示す前記参照命令アドレスインジケータを設定することができる、請求項1~3のいずれか一項に記載の装置。
【請求項5】
前記プロファイリング回路が、
前記直近分岐命令が成立したか否かに関係なく、プログラムフローが、前記所与の命令の前の直近分岐命令の後に方向付けられる命令と、又は
前記次分岐命令が成立するかどうかに関係なく、前記所与の命令の後の次分岐命令の命令アドレスと、
のうちの一方の命令アドレスを示す前記参照命令アドレスインジケータを設定することができる、請求項1~4のいずれか一項に記載の装置。
【請求項6】
前記プロファイリング回路が、
前記所与の命令の前の直近成立分岐命令の分岐ターゲットアドレスでの命令と、
前記所与の命令の後の次成立分岐命令の命令アドレスと、
のいずれか以外の命令のアドレスを示す前記参照命令アドレスインジケータを設定することができる、請求項1~5のいずれかに記載の装置。
【請求項7】
前記プロファイリング回路が、前記所与の命令について前記参照命令アドレスインジケータによって示される前記アドレスとして、前記所与の命令の前の直近命令アドレスリセットイベント又は前記所与の命令の後の次命令アドレスリセットイベントに関連付けられたアドレスを設定するように構成され、
前記プロファイリング回路が、前記参照命令アドレスリセットイベントとして、成立分岐操作の処理を検出するように構成されている、請求項1~6のいずれか一項に記載の装置。
【請求項8】
前記プロファイリング回路が、前記参照命令アドレスリセットイベントとして、非成立分岐操作の処理を検出するように更に構成されている、請求項7に記載の装置。
【請求項9】
前記プロファイリング回路が、ソフトウェア又は外部デバイスによって構成可能な構成情報に基づいて、前記非成立分岐操作の前記処理が前記命令アドレスリセットイベントとして検出されるべきかどうかを判定するように構成されている、請求項8に記載の装置。
【請求項10】
前記プロファイリング回路が、前記参照命令アドレスリセットイベントとして、
プロファイリングが以前に無効にされた後、前記プロファイリング回路によるプロファイリングの有効化、
例外の採用、
例外からの復帰、及び
前記サンプリング回路によって選択されたサンプル操作の処理、
のうちの1つ以上を検出するように更に構成されている、請求項7~9のいずれか一項に記載の装置。
【請求項11】
参照命令アドレス無効化イベントが、前記直近命令アドレスリセットイベントと前記所与の命令との間、又は前記所与の命令と前記次命令アドレスリセットイベントとの間で発生するとき、前記プロファイリング回路が、前記サンプルレコードから前記参照命令アドレスインジケータを省略するか、又は前記参照命令アドレスインジケータが無効であることを前記サンプルレコードに示すように構成されている、請求項7~10のいずれか一項に記載の装置。
【請求項12】
前記参照命令アドレス無効化イベントが、
前記サンプリング回路によって選択されたサンプル操作の処理、
プロファイリングが以前に無効にされた後、前記プロファイリング回路によるプロファイリングの有効化、
例外の採用、及び
例外からの復帰、のうちの1つを含む、請求項11に記載の装置。
【請求項13】
前記プロファイリング回路が、少なくとも前記所与の命令が成立又は非成立分岐命令であるとき、前記所与の命令に対応する前記サンプル操作について取得された前記サンプルレコードに、前記参照命令アドレスインジケータを含むことができる、請求項1~12のいずれか一項に記載の装置。
【請求項14】
前記プロファイリング回路が、プロファイリング構成情報が、前記参照命令アドレスインジケータの取得が無効化されていることを指定するときに、前記サンプルレコードから前記参照命令アドレスインジケータを省略するように構成されている、請求項1~13のいずれか一項に記載の装置。
【請求項15】
前記サンプルレコードが、1つ以上のパケットを含み、
前記プロファイリング回路が、前記サンプル操作に関連付けられたアドレスを指定するためのアドレスパケットに前記参照命令アドレスインジケータを含むように構成されており、前記アドレスパケットが、前記サンプル操作に関連付けられたアドレスのタイプを識別するためのアドレスタイプインジケータを指定するパケットヘッダを含み、
前記アドレスタイプインジケータが、
前記アドレスパケットが前記参照命令アドレスインジケータを指定することを示す参照命令アドレス符号化、及び
前記アドレスパケットが前記参照命令アドレスインジケータ以外のアドレスを指定することを示す、少なくとも1つの他の符号化、
を含む複数の有効な符号化を有する、請求項1~14のいずれか一項に記載の装置。
【請求項16】
前記プロファイリング回路によって取得された前記サンプルレコードをメモリに書き込むサンプルレコード書き込み回路を備える、請求項1~15のいずれか一項に記載の装置。
【請求項17】
前記処理回路が中断されずに処理を継続する間、前記サンプルレコード書き込み回路が、前記プロファイリング回路によって取得された前記サンプルレコードをメモリに書き込むように構成されている、請求項16に記載の装置。
【請求項18】
前記サンプル操作が少なくとも1つのフィルタ基準を満たすかどうかに基づいて、前記サンプルレコード書き込み回路が、前記サンプル操作について前記プロファイリング回路によって取得された前記サンプルレコードをメモリに書き込むべきかどうかを判定するフィルタリング回路を備える、請求項16及び17のいずれか一項に記載の装置。
【請求項19】
前記フィルタリング回路が、前記少なくとも1つのフィルタ基準のうちの1つとして、前記所与のサンプルレコードに対応する前記サンプル操作が、成立分岐操作であるという基準を指定するように構成可能である、請求項8、11、及び18のいずれか一項に記載の装置。
【請求項20】
前記フィルタリング回路が、前記少なくとも1つのフィルタ基準のうちの1つとして、前記所与のサンプルレコードに対応する前記サンプル操作が、成立分岐操作又は非成立分岐操作のいずれかであるという基準を指定するように構成可能である、請求項8、11、18、及び19のいずれかに記載の装置。
【請求項21】
前記サンプリング回路が、間隔カウンタによってカウントされたサンプリング間隔の経過に応答して、次のサンプル操作を選択するように構成されている、請求項1~20のいずれか一項に記載の装置。
【請求項22】
前記サンプリング間隔のランダム撹乱が有効化されるとき、前記プロファイリング回路が、ランダム又は擬似ランダム撹乱を、前記間隔カウンタによってカウントされた前記サンプリング間隔に適用するように構成されている、請求項21に記載の装置。
【請求項23】
前記参照命令アドレスインジケータが、
前記参照命令の前記アドレスの絶対値、
前記所与の命令及び前記参照命令のうちの一方のアドレスの、前記所与の命令及び前記参照命令のうちの他方のアドレスに対する相対オフセット、及び
前記所与の命令と前記参照命令との間の命令の数、
のうちの1つを指定する、請求項1~22のいずれか一項に記載の装置。
【請求項24】
方法であって、
メモリ若しくはキャッシュからフェッチされた命令又は前記命令から復号されたマイクロ操作に応答してデータ処理操作を実行することと、
プロファイルされるサンプル操作として、命令又はマイクロ操作のサブセットを選択することと、
サンプリング回路によってサンプル操作として選択された命令又はマイクロ操作の処理に応答して、前記サンプル操作の操作タイプ及び前記サンプル操作に直接帰属する前記サンプル操作の挙動に関する情報を指定するサンプルレコードを取得することと、
を備え、
前記プロファイリング回路が、前記所与の命令に対応するサンプル操作について取得された前記サンプルレコードに、前記所与の命令よりもプログラム順において前又は後に現れる参照命令のアドレスを示す参照命令アドレスインジケータを含むことができ、前記制御フローは、プログラム順において前記参照命令と前記所与の命令との間で発生する任意の命令間で連続的である、方法。
【発明の詳細な説明】
【技術分野】
【0001】
本技法は、データ処理の分野に関する。より詳細には、プロファイリングに関する。
【0002】
処理回路は、メモリ若しくはキャッシュからフェッチされた命令又は命令から復号されたマイクロ操作に応答してデータ処理操作を実行する。フェッチされた命令は、ソフトウェア開発者によって必要とされる操作を実行するために書き込まれた又はコンパイルされたプログラムを表す。ソフトウェア開発を支援するために、開発者はプログラムのプロファイリングを実行することができ、プログラムの挙動に関する情報は、処理回路によって処理されるときに取得されるため、この情報を分析して、不十分なパフォーマンス及び不十分なパフォーマンスの原因を引き起こし得るプログラムの部分を識別することができる。プロファイリングの結果は、ソフトウェアエンジニアによって使用されて、ソフトウェアを最適化して、実行時間を低減し、処理システム内の利用可能なリソースをより良好に利用することができる。
【0003】
少なくともいくつかの実施例は、装置であって、
メモリ若しくはキャッシュからフェッチされた命令又は命令から復号されたマイクロ操作に応答してデータ処理操作を実行する処理回路と、
プロファイルされるサンプル操作として命令又はマイクロ操作のサブセットを選択するためのサンプリング回路と、
サンプリング回路によってサンプル操作として選択された命令又はマイクロ操作の処理に応答して、サンプル操作の操作タイプ及びサンプル操作に直接帰属するサンプル操作の挙動に関する情報を指定するサンプルレコードを取得する、プロファイリング回路と、を備え、
プロファイリング回路が、所与の命令に対応するサンプル操作について取得されたサンプルレコードに、所与の命令よりもプログラム順において前又は後に現れる参照命令のアドレスを示す参照命令アドレスインジケータを含むことができ、その制御フローが、プログラム順において参照命令と所与の命令との間で発生する任意の命令間で連続的である、装置を提供する。
【0004】
少なくともいくつかの実施例は、方法であって、
メモリ若しくはキャッシュからフェッチされた命令又は命令から復号されたマイクロ操作に応答してデータ処理操作を実行することと、
プロファイルされるサンプル操作として、命令又はマイクロ操作のサブセットを選択することと、
サンプリング回路によってサンプル操作として選択された命令又はマイクロ操作の処理に応答して、サンプル操作の操作タイプ及びサンプル操作に直接帰属するサンプル操作の挙動に関する情報を指定するサンプルレコードを取得することと、を備え、
プロファイリング回路が、所与の命令に対応するサンプル操作について取得されたサンプルレコードに、所与の命令よりもプログラム順において前又は後に現れる参照命令のアドレスを示す参照命令アドレスインジケータを含むことができ、その制御フローが、プログラム順において参照命令と所与の命令との間で発生する任意の命令間で連続的である、方法を提供する。
【図面の簡単な説明】
【0005】
本技術の更なる態様、特徴、及び利点は、添付の図面と併せて読まれる以下の例の説明から明らかとなる。
【0006】
図1】プロファイリング回路を有するデータ処理装置の例を概略的に示す。
図2】サンプルレコードが取得される操作を選択するための命令又はマイクロ操作のサンプリングを示す。
図3】サンプル操作についてのサンプルレコードの取得、及び診断分析のためにサンプルレコードがアクセス可能とされるかどうかについてのフィルタリングを示すフロー図である。
図4】サンプルレコードに含まれ得るパケットタイプの数を示す。
図5】いくつかのパケットを含むサンプルレコードの一例を示す。
図6】サンプルレコードに含まれ得るアドレスパケットの一例を示す。
図7】分岐命令を含むプログラム命令のシーケンスの一例を示す。
図8図7の例示的なシーケンスの参照命令アドレスを含むアドレスパケットを生成する例を示す。
図9図7の例示的なシーケンスの参照命令アドレスを含むアドレスパケットを生成する例を示す。
図10図7の例示的なシーケンスの参照命令アドレスを含むアドレスパケットを生成する例を示す。
図11図7の例示的なシーケンスの参照命令アドレスを含むアドレスパケットを生成する例を示す。
図12】追跡命令インジケータを使用して、その後のサンプル操作についての参照命令アドレスとして示されるべきアドレスを追跡する方法を示すフロー図である。
図13】サンプル操作のために参照命令アドレスインジケータを設定するための追跡命令インジケータの使用を示すフロー図である。
図14】参照命令アドレスインジケータが、サンプル操作に関連付けられた命令よりもプログラム順における後続命令のアドレスを示す、参照命令アドレスインジケータを設定する第2の例を示すフロー図である。
【発明を実施するための形態】
【0007】
プロセッサ上でのプログラム実行のプロファイリングにおいて遭遇する問題は、プロセッサが、毎秒数百万又は数十億回の操作を実行する可能性があり、そのため、実行される全ての正確な命令毎の挙動に関する情報を詳細に記録することは実行可能ではない。プロファイリングの1つのアプローチでは、パフォーマンス監視カウンタを定義することができ、このカウンタは、不良パフォーマンスに影響を及ぼし得るキャッシュミス又は分岐予測ミスなどの特定のイベントをカウントして、所与の数のかかるイベントが検出されたときに、例外処理ルーチンにレジスタからのアーキテクチャ状態、又は後に診断目的でアクセス可能にされ得る他のパフォーマンス監視情報を読み出させるパフォーマンス監視割り込みを生成する。しかしながら、このアプローチの問題は、通常のプログラムフローの割り込み要し、したがって、頻繁なサンプリング間隔で情報を収集するには高割り込みレートを必要とし、観察される挙動がプロファイリングを実施しないときに発生する挙動と一致しない場合があるため、プログラムの通常の操作に影響を及ぼし、診断分析の結果をあまり意味のないものにし得る。もう1つの問題は、実際には、パフォーマンス監視割り込みが信号で伝えられる時間と、例外ハンドラが取得されたアーキテクチャ状態又はパフォーマンス監視情報を収集し始める時間との間に「スキッド」遅延が存在し得ることであり、介入期間中、プロセッサは何百回もの他の命令を実行し続けていた可能性があるため、取得された情報は、割り込みがトリガされた時点で進行中の操作に直接帰属することができない。また、イベント主導のプロファイリング情報の取得の場合、イベント自体は、位置についてあまり正確な結果を提供しない。コードを最適化するために、エンジニアは、問題がどこにあるかに関する正確な情報、例えば、制御プレーンの問題の場合、正確には、影響を受ける命令、コードのライン、クラス、及び/又はモジュール、又は平坦プロファイルとして不明確になることが多いその命令へのコールスタック及び/又は経路、及びデータプレーンの問題の場合、影響を受ける変数、アレイ、又はオブジェクトのインジケーションを必要とし得る。これは、典型的なイベントトリガ型のサンプリング技術では特定することが困難であり得る。
【0008】
以下に説明する実施例では、処理回路は、メモリ若しくはキャッシュからフェッチされた命令又は命令から復号されたマイクロ操作に応答してデータ処理操作を実行する。サンプリング回路は、プロファイルされるサンプル操作として、命令又はマイクロ操作のサブセットを選択する。プロファイリング回路は、サンプリング回路によってサンプル操作として選択された命令又はマイクロ操作の処理に応答して、サンプル操作の操作タイプ及びサンプル操作に直接帰属するサンプル操作の挙動に関する情報を指定するサンプルレコードを取得する。
【0009】
このアプローチでは、サンプルレコードがサンプル操作に直接帰属する情報を取得すると、上述のような割り込みベースのプロファイリング機構によって生じるスキッド問題が回避される。サンプルレコードに含まれる情報は、サンプル操作の処理中に発生したイベント、例えば、所与のレベルのキャッシュでキャッシュミスが発生したかどうか、分岐予測ミスが所与の分岐に対して発生したかどうかを直接示すことができる、又はサンプル操作の処理中の特定のイベントの待ち時間を測定するサイクルカウントを示すことができる。にもかかわらず、サンプリング回路は、サンプル操作として命令又はマイクロ操作のサブセットのみを選択するため、サンプル操作に関する情報を収集する際のハードウェア及び電力オーバーヘッドが大幅に低減される。サンプル操作について取得されるサンプルレコードは、全ての操作の挙動を取得しようとするのではなく、全体としてプログラムのパフォーマンスの統計ビューを提供することができる。対応するサンプルレコードに各サンプル操作の操作タイプを示すことによって、どのタイプのサンプル操作がサンプリング回路によってサンプル操作として選択されるかについての制限を提供する必要がないため、サンプルレコードは、単一の所定タイプのサンプル操作に関する情報を取得することに制限されない。これは、(固定タイプのイベントが情報の取得をトリガするイベントトリガ型サンプリングの使用ではなく)1セットのサンプリング情報で2つ以上の異なる問題を監視する単一のプロファイリング実行の使用を支援することができる。また、プロファイルされるサンプル操作として特定の命令又はマイクロ操作を選択するサンプリング回路を提供することで、サンプル操作がパイプラインを通って進行するときに、パイプラインの異なる段階で発生するイベントを追跡することができ、このことは、プロファイリングが特定のイベントの発生時のアーキテクチャ状態又はパフォーマンス監視カウンタの取得に基づく実施例では可能ではなく、その情報は、特定の操作に直接帰属せず、複数の異なる動作に基づく可能性がある。
【0010】
サンプリング回路及びプロファイリング回路は、処理回路によって処理されている特定の操作の結果及びパフォーマンスに関する詳細な情報を提供するのに有用であり得、これは、所与のプログラムを実行するときに、不良パフォーマンスの可能性のあり得る理由を識別するのに有用であり得る。しかしながら、プロファイリングの別の態様は、プログラムコードのどの部分が他の部分よりも頻繁に実行されるかを識別することであってもよい。ソフトウェア開発者は、コード最適化に利用可能な時間量が限られている場合があり、あまり頻繁に実行されないコードセクションに優先して、頻繁に実行されるコードセクションのパフォーマンスを改善することを望むことがある。プロファイリングに対するサンプリングベースのアプローチでは、サンプリングは、サンプル操作について取得されたサンプルレコードにおいて多くの操作が追跡されないことを意味し、各サンプルレコードは、単一の命令が実行されたというインジケーションを提供するだけであり、プログラムがどのようにその命令に達したか、及び制御フローのどの経路を介したかについての情報を提供しないため、プログラム内の異なるコードセクションの実行頻度を分析することは困難であると考えることができる。したがって、サンプリングベースのアプローチでは、取得される非常に多量のサンプルが、相対実行頻度に関する有意味なホットスポットプロファイリング情報を提供する必要があり、これは、そのような大量のサンプリング情報を生成するストレージ及びデータ出力オーバーヘッドに関して高すぎるコストをもたらす可能性があると考えることができる。
【0011】
以下に記載される実施例では、プロファイリング回路が、所与の命令に対応するサンプル操作について取得されたサンプルレコードに、所与の命令よりもプログラム順において前又は後に現れる参照命令のアドレスを示す参照命令アドレスインジケータを含むことができ、その制御フローは、参照命令と所与の命令との間で発生する任意の命令間で連続的である。プロファイリング回路は、参照命令アドレスインジケータを、参照命令と所与の命令との間で発生する任意の2つの命令の間に制御フローの非連続的変化があった命令のアドレスに設定するのを禁止することができる(所与の命令は成立分岐命令であってもよく、これは、所与の命令と直後の命令との間の制御フローの非連続的変化が起こることを防止しない。その場合、所与の命令によって成立した分岐の後の、制御フローの後続の非連続的変化がない限り、参照命令アドレスは、所与の命令の後続命令のアドレスを依然として示すことができる)。
【0012】
したがって、所与のサンプル操作についてのサンプルレコードに、制御フローが所与の命令まで又は所与の命令に続いて連続的であった命令のアドレスのインジケーションを含めることにより、単一のサンプルレコードが、全範囲の命令アドレスが実行されたという証拠を提供して、プログラムの異なる部分を実行する相対頻度を示す統計的に意味のあるホットスポットプロファイルを生成するのに十分な情報を提供するために取得されるべきサンプルレコードの数を大幅に低減することができる。このため、参照命令アドレスインジケータの使用をサポートしないサンプルベースのプロファイリングアプローチと比較して、必要なプロファイリングデータの量が低減される。したがって、ソフトウェア開発者によるプログラム最適化は、より効率的になり得る。しかしながら、取られた制御フローの経路に関する情報のみを取得し、他の情報を示さないプログラムフロープロファイルを生成する代替的なトレースベースの技術とは異なり、取得されたサンプルレコードは、イベント又はサイクルカウントなどの他の非制御フロー情報も示すことができ、これにより、単一の診断実行ランが、複数の目的のためにプロファイリング情報を収集することを可能にし得る。
【0013】
いくつかの実施例では、プロファイリング回路が、所与の命令よりもプログラム順において前に現れる先行命令のアドレスを示す参照命令アドレスインジケータを設定することができ、その制御フローは、先行命令から所与の命令まで連続的である。このアプローチは、参照命令アドレスを追跡するために提供されるハードウェア回路ロジックの点で、より簡易に実行することができる。例えば、参照命令をマーキングするために使用され得るいくつかのタイプのイベントのうちの1つを表す命令が識別されるときにリセットすることができ、リセット点での命令のアドレスを追跡するか、又はリセット点以降に見られる命令の数をカウントするために使用することができる、記憶要素が提供され得る。その後のサンプル操作に遭遇すると、その記憶要素で追跡された値を使用して、サンプル操作のサンプルレコードに参照命令アドレスインジケータを設定することができる。
【0014】
しかしながら、他の実施例は、所与の命令よりもプログラム順において後に現れる後続命令のアドレスを示す参照命令アドレスインジケータを設定することができ、その制御フローが、所与の命令の後の次命令から後続命令まで連続的である、プロファイリング回路を提供することができる。このアプローチでは、参照命令アドレスインジケータは、制御フローの次の連続的ブロックが、参照命令アドレスの追跡を停止することを必要とする制御フロー又は他のイベントの非連続的変化に到達する前に、所与の命令を超えてどのくらい先まで継続したかについてのビューを効果的に提示する。
【0015】
いくつかの実施形態は、これらのオプションの両方をサポートすることができ、参照命令アドレスインジケータは、先行命令のアドレス若しくは後続命令のアドレスのいずれかのインジケーションを提供することができる(例えば、ホットスポットプロファイルについて可能な限り最大数の「命令実行カウント」を提供する最長ランの連続的実行を示すものを選択する)、又はサンプル操作に対応する所与の命令の前後の両方の制御フローに関する更なる情報を提供するために、同じサンプルレコードに両方のタイプの参照命令アドレスインジケータを示すことができる。しかしながら、多くの実施形態では、参照命令アドレスの追跡のハードウェアコストを制限するために、制御フローを所与の命令に対して一方向にのみ追跡する(プログラム順で後方の先行命令のみを見るか、又はプログラム順で前方の後続命令のみを見る)ことで十分であり得る。
【0016】
プロファイリング回路は、所与の命令の前の直近成立分岐命令の分岐ターゲットアドレスを示すか、又は所与の命令の後の次成立分岐命令の命令アドレスを示す参照命令アドレスインジケータを設定することが可能であってもよい。成立分岐命令は、制御フローの非連続的変化がある点を表すため、参照命令アドレスインジケータを使用して直近成立分岐又は次成立分岐のインジケーションを提供することは、所与の命令の前又は後に実行される命令の連続的ランのサイズに関する最大量の情報を与えて、ホットスポットプロファイルに寄与することができる最大数の「命令実行カウント」を提供することができる。したがって、所与の命令の前の先行命令を見返す場合、参照命令は、直近成立分岐命令の分岐ターゲットアドレスにおける命令であり得る一方、参照命令アドレスインジケータが、プログラム順において前方の所与の命令後の後続命令を見るために使用されている場合、参照命令は、所与の命令自体の後の次成立分岐命令であり得る。
【0017】
しかしながら、実際には、本発明者らは、参照命令アドレスインジケータを使用して、直近成立分岐又は次成立分岐の位置を示すことで、連続的に処理される命令のより大きなブロックを示すことができるが、いくつかの(全てではないが)プロファイリングシナリオでは、常に成立分岐位置を使用して参照命令アドレスインジケータを設定するアプローチが、ホットスポットプロファイリングのバイアスのかかった結果をもたらす可能性があることを認識した。したがって、所与の命令の前の直近成立分岐命令の分岐ターゲットアドレスでの命令、及び所与の命令の後の次成立分岐命令の命令アドレスのいずれか以外の命令の命令アドレスを示す参照命令アドレスインジケータを設定する機能もサポートするプロファイリング回路を提供することが有用であり得る。より具体的には、直近分岐命令が成立したか否かに関係なく、プログラムフローが、所与の命令の前の直近分岐命令の後に方向付けられる命令、又は次分岐命令が成立するか否かに関係なく、所与の命令の後の次分岐命令の命令アドレス、のうちの一方の命令アドレスを示す参照命令インジケータを設定できることも時には有用であり得る。
【0018】
非成立分岐の前又は後に連続的に実行される他の命令があると思われるため、前の/次の非成立分岐命令の位置を示す参照命令アドレスインジケータを使用したいと考えるのは反直観的であるとみなされ、したがって、このアプローチは、単一のサンプルレコードの内容によって実行されたものとして確認され得る命令の範囲を広げる可能性を断念すると思われる。しかしながら、以下でより詳細に説明されるように、成立分岐及び非成立分岐の両方のサンプルレコードが、成立分岐のみを参照して参照命令アドレスインジケータを記録し、結果として生じる参照命令アドレスインジケータがホットスポットプロファイリングのために使用される場合、たとえ両コードセクションが均等な回数実行されたとしても、一貫して非成立分岐の一方の側のコードセクションが、一貫して非成立分岐の他方の側のコードセクションよりも頻繁に実行されたと誤って示すホットスポットプロファイリングをもたらす可能性がある。この歪んだプロファイリング結果の問題は、分岐が成立したか否かに関係なく、前の分岐又は次の分岐の位置を使用して、参照命令アドレスインジケータを設定することによって防止され得る。いくつかのプロファイリングシナリオでは、これは、特定のセットの命令が実行された相対頻度をより正確に示し得る。
【0019】
しかしながら、この問題が生じないとき(例えば、非成立分岐のサンプルが分析のために出力されない場合)には他のプロファイリングシナリオがあり、その場合、参照命令アドレスインジケータを生成するための基準として、先行/後続成立分岐を使用することが好ましいことがある。
【0020】
本出願では、特に明記しない限り、命令の相対的順序を定義する用語(「前」、「後」、「次」、「直近」、「前の」、「後の」)は、命令がプログラム順において現れる順序を指す。プログラム順は、命令がインオーダープロセッサで実行される順序を指す。言い換えれば、プログラム順は、プログラマ又はプログラムを作成したコンパイラによって定義される順序に対応する。処理回路のフェッチ段階は、プログラム順で実行される命令をフェッチすることができる。いくつかの実施態様は、プログラム順に対応する順序で命令又はマイクロ操作も実行するインオーダー処理回路を使用することができる。しかしながら、他の実施例では、処理回路は、命令/マイクロ操作を並べ替えることができ、それにより、命令又はマイクロ操作をプログラム順とは異なる順序で処理することができるアウトオブオーダー処理回路であってもよい。例えば、オペランドが利用可能になるのを待機している間にプログラム順における先行命令が停止される場合、プログラム順における後続命令を、先行命令の前に実行することができる。したがって、参照命令アドレスインジケータを追跡する目的で、命令間の相対順序を指す用語は、プログラム順を指す。これは、処理回路が命令を異なる順序で実行することを除外するものではない。例えば、プログラム順における直近分岐は、場合によって、オペランドが利用可能になるタイミング及び命令間の従属性に応じて、実際にはプログラム順において先行分岐の後に実行することができる。
【0021】
参照命令アドレスとして示すアドレスを選択する1つの方法は、参照命令アドレスリセットイベントに関連付けられたアドレスが、後続又は先行サンプル操作についての参照命令アドレスとして記録されるべきであることを示す、特定のタイプの参照命令アドレスリセットイベントを定義することであり得る。サンプルレコードが、所与の命令の先行命令のアドレスを参照アドレスとして指定する実施例では、参照命令アドレスインジケータは、所与の命令の前に発生する直近参照命令アドレスリセットイベントに関連付けられたアドレスに設定することができる。サンプルレコードが、所与の命令の後続命令のアドレスを参照アドレスとして指定する実施例では、参照命令アドレスインジケータは、所与の命令の後に発生する次参照命令アドレスリセットイベントに関連付けられたアドレスに設定することができる。
【0022】
上述のように、所与の命令に対するプログラム順における直近成立又は次成立分岐命令の位置は、一般に、参照命令アドレスインジケータを使用して識別することができる、所与の命令の前又は後の最大範囲を表すことができる。したがって、プロファイリング回路が、参照命令アドレスリセットイベントとして、成立分岐の処理を検出することが有用であり得る。
【0023】
しかしながら、参照命令アドレスの追跡をリセットすることができる1つ以上の他のタイプのリセットイベントが存在し得、それにより、参照命令アドレスリセットイベントが、成立分岐命令と所与の命令との間で発生する場合、代わりに参照命令アドレスインジケータが、リセットイベントが発生した点に対応する命令の位置をマーキングするように設定することができる。
【0024】
例えば、非成立分岐操作の処理もまた、参照命令アドレスリセットイベントとして検出することができ、そのため、所与の命令と直近成立/次成立分岐との間に非成立分岐がある場合、参照命令アドレスはその代わりに、非成立分岐操作に関連付けられたアドレスを指し示すことができる。参照命令として非成立分岐のアドレス(又は非成立分岐に続く命令のアドレス)のアドレスを指すオプションをサポートすることは、ホットスポットプロファイリング結果の統計的有効性を改善するのに役立ち、それにより、ホットスポットプロファイリングによってサンプルレコードのセットから導出されるホットスポットプロファイリング測定値は、命令の異なるブロックの実際の相対頻度を表す。このようなリセットイベントとしての非成立分岐の使用が統計バイアスを回避する理由についてのより詳細な説明を図7を参照して以下に述べる。
【0025】
いくつかの実施態様では、非成立分岐の処理は、常に参照命令アドレスリセットイベントとして処理され得る。
【0026】
しかしながら、他の実施態様は、ソフトウェア又は外部デバイスによって(例えば、構成レジスタに記憶されている)構成可能な構成情報を提供して、非成立分岐操作の処理が参照命令アドレスリセットイベントとして検出されるべきかどうかを定義することができる。プロファイリング回路は、構成情報に基づいて、非成立分岐が参照命令アドレスリセットイベントとして検出されるべきかどうかを判定することができる。いくつかの形式の分析(例えば、非成立サンプルレコードは、出力の前に廃棄される、又は出力されるが分析では使用されない)の場合、成立分岐に関して参照命令アドレスインジケータを示すことは単に許容可能であり得、したがって、非成立分岐が参照命令アドレスリセットイベントとして扱われないようにプロファイリング回路を構成することによって、参照命令アドレスインジケータは、ホットスポットプロファイリングに使用することができる命令カウントをより多く提供するように、非成立分岐を超えて延びる、より広い範囲の連続的に実行される命令を示すことができる。対照的に、参照アドレス追跡が非成立分岐を参照しない場合にプロファイリング結果を歪めるリスクがある分析が実行される場合、構成情報は、非成立分岐が参照命令アドレスリセットイベントとして検出されるべきであることを示すように設定することができる。非成立分岐がリセットイベントとして処理されるか否かを制御する構成情報を提供することによって、採用されたアプローチを実行される分析のタイプに適合するように変更する柔軟性が提供される。
【0027】
いくつかの実施例では、装置は、サンプル操作が少なくとも1つのフィルタ基準を満たすかどうかに基づいて、プロファイリング回路によってサンプル操作に対して取得されたサンプルレコードが診断分析のために利用可能にされるかどうかを制御するフィルタリング回路を有することができる。プロファイリング回路によって取得された全てのサンプルレコードは、プロファイリングが実行される目的に関連しているわけではなく、したがって、フィルタリング回路は、特定のタイプのサンプルレコードのみが診断分析に利用可能になることを確実にして、サンプルレコードを記憶及び出力するためのリソースの容量又は帯域幅を節約するように構成可能であり得る。例えば、サンプルレコードは、例えば、サンプルレコードをメモリに書き込むことによって(そこからサンプルレコードは、デバッグされている処理システム上で実行される他のソフトウェアによって読み取り可能になり得る)、サンプルレコードをオンチップトレースバッファオンチップに出力することによって、及び/又はサンプルレコードを、トレースポートを介してサンプルレコードを記憶するか、又はサンプルレコードを使用して診断分析を実施する外部デバイスに出力することによって、様々な方法で診断目的のために利用され得る。いくつかのシステムは、診断分析のためにサンプルレコードを利用可能にするこれらの形式のうちの2つ以上をサポートすることができる。どの形式がサポートされるかに関係なく、(プロファイリング回路に関連付けられた構成レジスタに記憶されたフィルタ構成データを調整することによってユーザによって構成可能であり得る)少なくとも1つのフィルタ基準に基づいてフィルタリングを提供することによって、ソフトウェア開発者が、どのタイプのサンプルレコードが取得されるかを制御することを可能にする。
【0028】
一実施例では、非成立分岐リセットイベントがリセットイベントとして処理されるべきかどうかを判定するために使用される構成情報は、フィルタリング回路の1つ以上のフィルタ基準も制御するフィルタ基準構成情報であり得る。例えば、構成情報は、フィルタ基準を定義するときにユーザによって見ることができるが、フィルタ基準の特定の設定については、プロファイリング回路は非成立分岐をリセットイベントとして扱ってもよい一方、フィルタ基準の他の設定については、非成立分岐は、リセットイベントとして扱われなくてもよい。例えば、フィルタ基準が、非成立分岐操作のサンプルレコードが診断分析のために利用可能になることを許可され、参照命令アドレスインジケータが非成立分岐操作について取得されたサンプルレコードに含まれるように設定される場合、プロファイリング回路は、(非成立分岐操作自体がサンプル操作として選択されたかどうかに関係なく)非成立分岐操作の処理を、参照命令アドレスリセットイベントとして検出することができる。フィルタ基準が、非成立分岐操作のサンプルレコードが診断分析のために利用可能になることを許可されないか、又は非成立分岐操作のサンプルレコードが参照命令アドレスインジケータを含まないことを示すように設定される場合、非成立分岐操作の処理をリセットイベントとして扱う必要がない。
【0029】
しかしながら、他の実施例では、非成立分岐をリセットイベントとして処理するかどうかを判定するための構成情報は、フィルタリング回路のフィルタ基準を設定する任意の構成情報とは別に定義され得る。この場合、参照命令アドレス追跡をリセットするときに検出されるリセットイベントのタイプ、及びフィルタによって使用されるフィルタ基準の直交制御が存在し得る。バイアスのかかった分析結果のリスクを考慮するとき、リセットイベント/フィルタ設定のどのような組み合わせが、実行することを望む分析のタイプに使用される設定であるかを判定することは、ユーザ(又はプロファイリング分析を実行するソフトウェア)にゆだねることができる。
【0030】
他のタイプの参照命令アドレスリセットイベントは以下を含むことができる。
●プロファイリングが以前に無効にされた後、プロファイリング回路によるプロファイリングの有効化。プロファイリングがある期間にわたって無効化された場合、任意の以前に発生した成立分岐が追跡されていない場合があるため、参照命令アドレスの参照点は、プロファイリングが有効化される点であってもよい。
●例外の採用、及び/又は例外からの復帰。これは、プロファイルされているプログラムの処理を中断する例外ハンドラの処理中、例外ハンドラ内の命令は、プロファイリング回路の追跡リソースのいくつかを、参照命令アドレスインジケータを追跡するために使用される任意の追跡リソースを含めて状態を変化させることができ、したがって、例外からの復帰時、以前の成立分岐の追跡はもはや信頼できなくなり得ることを認識している。したがって、有効なプロファイリング結果を提供するために、例外の採用又は例外の復帰時に、参照命令アドレスの追跡をリセットすることが好ましい場合がある。
●また、場合によっては、サンプル操作の処理はそれ自体、参照命令アドレスリセットイベントとして処理され得る。例えば、サンプル操作が成立/非成立分岐であるとき、及びサンプリングされた分岐命令の後続/先行参照命令のアドレスを示すサンプルレコード内の参照命令アドレスインジケータを取得すると、サンプリングされた分岐命令自体(又はサンプル分岐後の次命令)のアドレスを、別のサンプル操作の参照アドレスとして使用するために記録することができる。
【0031】
全ての実施態様は、これらのタイプのリセットイベントの全てをサポートする必要があるわけではない。また、いくつかの実施態様は、どのタイプのイベントがリセットされるか(少なくともいくつかの形態のリセットイベントについて)を定義する構成情報をサポートすることができる。また、いくつかのタイプのリセットイベント(例えば、サンプル操作の処理)の場合、イベントがリセットを引き起こしてもよいが、他の場合、イベントはリセットを引き起こさなくてもよい(例えば、イベントがリセットイベントであるかどうかはまた、他の条件に依存し得る)。
【0032】
上述の他のタイプのリセットイベントに応答して参照命令アドレスの追跡をリセットする代替策(プロファイリングの有効化、例外の採用/例外からの復帰、サンプル操作の処理)は、そのようなイベントが発生すると、代わりに、参照命令アドレスの追跡を無効にすることができることであり得る。この場合、参照命令アドレスインジケータは有効化して、成立若しくは非成立分岐(又は成立若しくは非成立分岐に続く命令)の位置を示すことができるか、又は参照アドレスインジケータが信頼できない場合(例えば、プロファイリングの有効化若しくは例外の採用/復帰イベントが発生する場合)無効化することができる。また、サンプルレコード内の情報の取得のマイクロアーキテクチャ実施態様を簡易化するには、サンプル操作は多くの場合、参照命令として検出され得る命令のタイプのうちの1つと同じタイプであり得(例えば、サンプル操作自体が成立/非成立分岐であり得る)、したがって、サンプル操作自体が、上述したように参照命令アドレスのリセットを引き起こす可能性があるため、(必須ではないが)サンプル操作自体の処理を参照命令アドレス無効化イベントとして扱うことが有用であり得る。したがって、サンプル操作自体に応答して参照命令アドレスがリセットされる前に、任意の以前に設定された参照命令アドレスが、サンプル操作について出力されるサンプルレコードについて取得されることを確実にするのが望ましい場合があるが、これは、取得/リセットのタイミングを管理する際に問題を引き起こし得る。以前に追跡されたアドレスがサンプルレコードに取得される前に上書きされるのを防止する1つの方法は、サンプル操作自体がサンプリングされるために参照命令アドレスとして機能することを抑制し、サンプル操作に応答して参照命令アドレスを変化させないことである。サンプリング間隔が一般に、連続する参照命令アドレスリセットイベント(例えば、分岐)の間隔よりも大幅に大きくなると予想されることを考えると、参照命令アドレスが次のサンプル操作に遭遇する前にリセットされない可能性は非常に低いが、確実に、(及びプログラムフローの介在する非連続的変化があった参照アドレスを参照する可能性がある後続のサンプル操作のリスクを回避する)、参照命令アドレスは、サンプル操作のためにサンプルレコードに転送された後、サンプル操作に応答して無効化することができる。
【0033】
プロファイリング回路は、所与の命令についてのサンプルレコードに記憶された参照命令アドレスインジケータに所与の命令の先行又は後続命令のアドレスをプログラム順に示すことができるが、いくつかのシナリオでは、参照命令アドレスインジケータが、所与の命令自体のアドレスを示すことが可能であり得ることに留意されたい。例えば、参照命令アドレスインジケータが、成立/非成立分岐命令の分岐ターゲットアドレスを示すように設定されている実施例では、サンプリング回路が、サンプル操作として、成立分岐の分岐ターゲットアドレスでの命令又は非成立分岐に連続的に続く命令を選択する場合、参照命令アドレスインジケータは、所与の命令自体のアドレスを示すことになる。したがって、プロファイリング回路は、所与の命令よりもプログラム順において前の又は後の命令のアドレスを示すように参照命令アドレスインジケータを符号化することができるが、これは、プロファイリング回路が参照命令アドレスインジケータを使用して、所与の命令自体のアドレスを示すことができることを除外するものではない。
【0034】
いくつかの実装形態では、プロファイリング回路は、サンプル操作に対応する命令のタイプに関係なく、任意のタイプのサンプル操作について取得されたサンプルレコード内の参照命令アドレスインジケータを含むことができる。
【0035】
しかしながら、実際には、上述のタイプの統計バイアスを回避するために、参照アドレス追跡のための参照点が、サンプルレコードが参照命令アドレスインジケータを提供する操作タイプの集団と同じ操作タイプ集団から選択されることが望ましい場合がある。したがって、任意の操作タイプが、参照命令アドレスインジケータを含むサンプルレコードを提供することが許可された場合、ホットスポットプロファイリングに向けてより多くのサンプル数をカウントすることができるが、実際には、統計的にバイアスのかかっていない結果を確保するために、参照命令アドレスインジケータが、任意の操作タイプの直近に/次に処理された命令の位置を参照として使用することが必要であり得、このことは、単一サンプル内の参照命令アドレスインジケータによって示され得る先行/後続命令の範囲を制限する。
【0036】
したがって、バイアスのかかっていないプロファイリング結果を達成しながら、1つのサンプルレコード内の参照命令アドレスインジケータによって実行されるように示され得る命令の範囲を広げるために、参照命令アドレスインジケータが特定のサブセットのタイプの命令のサンプルレコードのみに含まれるように制限することが好ましい場合があり、それにより、参照命令アドレスインジケータは、プロファイリング結果を歪めることなく、所与の命令の更に前方/後方をプログラム順に見ることができる。
【0037】
一実施例では、参照命令アドレスインジケータは、少なくとも所与の命令が成立又は非成立分岐命令であるときに、所与の命令に対応するサンプル操作から取得されたサンプルレコードに含めることができる。いくつかの実施例は、非成立分岐命令ではなく、成立分岐命令についての参照命令アドレスインジケータのみを含むことができる。他の実施例は、成立及び非成立分岐命令の両方についての同じサンプルレコード内の参照命令アドレスインジケータを追跡することをサポートすることができる(この場合、上述のように、サンプル又は未サンプル非成立分岐操作の処理が、参照命令アドレスの追跡をリセットすることが望ましいであろう)。どのタイプの命令が、命令がサンプル操作として選択される場合に示される参照命令アドレスインジケータを有するかは、ハードウェアにおいて固定することができる、又は可変にすることができ、それにより、ユーザは(例えば、構成レジスタ内の構成情報を設定することによって)どのタイプの命令が、参照命令アドレスインジケータを含むサンプルレコードを有するべきか構成することができる。
【0038】
そのような構成情報はまた、参照命令アドレスインジケータが(任意のタイプの操作について)全てのサンプルレコードを含むべきかどうかを制御することができる。したがって、プロファイリング回路は、参照命令アドレスインジケータがサンプルレコードに含まれるように常に動作することは必須ではない。プロファイリング回路は、プロファイリング構成情報が参照命令アドレスインジケータの取得が無効になっていることを指定するときに、参照命令アドレスインジケータを省略することができる。プロファイリング構成情報が、参照命令アドレスインジケータの取得が有効化されていることを指定するとき、参照命令アドレスインジケータを含めることができる(しかし、他の理由で、例えば、参照命令アドレス無効化イベントが上述のように発生したために省略することもできる)。したがって、ユーザは、参照命令アドレスインジケータが関連するかどうかを選択して、ホットスポットプロファイリングを実行する能力を、診断記憶/帯域幅の保存と天秤にかけることができる。
【0039】
いくつかの実施例では、サンプルレコードは、サンプルレコードが1つ以上のパケットを含み得るパケット化フォーマットを有することができる。1つのサンプルレコードのパケットの数は、固定され得るか、又は実施態様に応じて可変であり得る。パケット化フォーマットを提供することによって、特定の実施態様に使用されるサンプルレコードの特定のフォーマットに関係なくソフトウェアがパケットを一貫して解釈できるように、パケットの特定のアーキテクチャ定義を依然として順守しながら、異なるマイクロアーキテクチャ設計者が異なるフォーマットを選択する柔軟性を提供する。異なるタイプのパケットは、サンプルレコード内に記録され得る異なるタイプの情報を示すように定義することができる。これらのタイプのパケットのうちの1つは、サンプル操作に関連付けられたアドレスを指定するアドレスパケットであり得る。アドレスパケットは、パケットがアドレスパケット(アドレスを提供しない他のタイプのパケットから区別する)であることを識別するパケットヘッダを有し得るが、パケットヘッダは、どのタイプのアドレスがサンプル操作に関連付けられているかを指定することもできる。これは、例えば、アドレス指定されたパケットとしてパケットを識別する第1のヘッダ部分及びアドレスタイプインジケータとして機能する第2の部分を有するか、又はパケットがアドレスパケットであり、かつアドレスタイプインジケータとしても機能すると識別する単一の結合ヘッダ値を有する(本実施例では、異なるアドレスタイプインジケータに対応するパケットヘッダの複数の異なる値は全て、アドレスパケットのヘッダとして扱うことができる)ことによって、様々な方法で実行され得る。
【0040】
アドレスパケットのアドレスタイプインジケータは、対応するアドレスパケットが参照命令アドレスインジケータを指定することを示す参照命令アドレス符号化と、アドレスパケットが参照命令アドレスインジケータ以外のアドレスを指定することを示す少なくとも1つの他の符号化とを含む、いくつかの有効な符号化を有することができる。アドレスパケットが参照命令アドレスを指定することを識別するためのアドレスタイプインジケータの専用符号化を割り当てることによって、診断分析ツールは、様々なサンプルレコードから参照命令アドレスを抽出し、これらをプロファイリングのために使用することを可能にする。
【0041】
上述のように、プロファイリング回路によって取得されたサンプルレコードは、診断分析のために利用可能にされ得る。一実施例では、サンプルレコードは、サンプルレコード書き込み回路を使用してサンプルレコードをメモリに書き込むことによって利用可能にすることができる。サンプルレコード書き込み回路は、処理回路が中断せずに処理を継続している間、プロファイリング回路によって取得されたサンプルレコードをメモリに書き込むことができる。したがって、上述した割り込みベースのアプローチとは異なり、サンプルレコードは、まずプロファイリング回路のハードウェア記憶要素内に取得され、次いで、処理回路によってソフトウェアで実行されてサンプルレコードをメモリに保存させる特定の記憶命令を必要とすることなく、処理回路上で実行される命令によって一般的にアクセス可能であるメモリに書き出すことができる。このため、プロファイリングが処理回路上で実行されるコードのパフォーマンスに及ぼす影響が大幅に低減され、収集されたプロファイリング情報内のアーチファクトにつながるパフォーマンス監視目的の遮断が回避される。例えば、バッファ構造は、ある特定の数のサンプルレコードを記憶するのに十分な特定のサイズのメモリに維持されてもよく、割り込みは、サンプルレコードが生成されるたびに生成されるのではなく、メモリ内のバッファがオーバーフローのリスクにあるときにのみトリガされる必要がある。
【0042】
サンプル操作が少なくとも1つのフィルタ基準を満たすかどうかに基づいて、サンプルレコード書き込み回路が、サンプル操作のプロファイリング回路によって取得されたサンプルレコードをメモリに書き込むべきかどうかを判定するフィルタリング回路を提供することができる。フィルタ基準は、サンプル操作のタイプに基づき得るか、又はサンプルレコード自体内の情報に基づき得る。例えば、フィルタ基準は、誤って予測された分岐についてのサンプルレコードのみがメモリに書き込まれるべきであると指定することができるが、ソフトウェア開発者が例えば予測ミスの理由を探ることに関心がある場合、正しく予測された分岐について取得されたサンプルレコードをメモリに書き込む必要はない。あるいは、フィルタ基準は、ロード操作のための特定のレベルのキャッシュにミスがあるかどうか、又はサンプル操作の命令アドレスが所与のアドレス範囲内にあるかどうかなどに基づき得る。広範囲のフィルタ基準を、フィルタリング回路によってサポートすることができる。
【0043】
フィルタ基準の1つのオプションは、所与のサンプルレコードに対応するサンプル操作が、成立分岐操作であるという基準であり得る。これは、ホットスポットプロファイリングにとって有用であり得る。非連続的プログラムフローの点を表す成立分岐のサンプルレコードのみを記録することによって、参照命令アドレスインジケータを使用して、(ホットスポットプロファイリングの結果を歪めずに)直近成立分岐の分岐ターゲットアドレス又は次成立分岐の命令アドレスを安全に参照することができ、それにより、先行/後続命令の最大可能範囲が各サンプルで実行されるように示されて、所与の数のサンプルレコードについて、可能な限り最大量のホットスポットプロファイリングを可能にし得る。しかしながら、成立分岐のみを追跡することによって、ホットスポットプロファイリングに加えて、同じサンプルレコードセット上で他の形態のパフォーマンス分析を実行することができない場合がある。
【0044】
別の実施例では、フィルタリング回路が、少なくとも1つのフィルタ基準のうちの1つとして、所与のサンプルレコードに対応するサンプル操作が、成立分岐操作又は非成立分岐操作のいずれかであるという基準を指定するように構成可能である。成立分岐でも非成立分岐でもない操作に関連する他のサンプルレコードを除外しながら、成立分岐操作と非成立分岐操作の両方のサンプルレコードがメモリに保存されるか、別の方法で診断分析に利用可能にされることを確実にする機能を提供することによって、同じ実行ランに基づいて他のタイプのパフォーマンス分析もサポートしつつ、成立/非成立分岐のサンプルレコードに含まれる参照命令アドレスインジケータを使用してホットスポットプロファイリングを実行することができる(例えば、誤って予測された分岐に起因する不良パフォーマンスの分析は、成立分岐と非成立分岐の両方が診断分析のためにサンプルレコード出力に含まれる場合に、より信頼性が高くなり得る)。したがって、プログラムを実行する単一のインスタンスのために取得されたサンプルレコードのセットは、(ホットスポットプロファイリングのための成立分岐の追跡及び誤って予測された分岐の追跡の2つの別個の実行ランを実施する必要なく)両方の目的のために使用することができる。フィルタが成立分岐と非成立分岐の両方についてサンプルを出力するように構成されるとき、参照命令アドレスインジケータが成立分岐イベントと非成立分岐イベントの両方に含まれている場合、参照命令アドレス追跡が成立分岐又は非成立分岐のいずれかに対して行われて、上記の理由でホットスポットプロファイリングの体系的歪みを回避することが望ましい。
【0045】
サンプリング回路による操作のサンプリングは、様々な方法で制御することができる。例えば、サンプリング回路は、処理パイプラインのフェッチ段階又は復号段階で、又は後のパイプライン段階で命令を選択することができる。しかしながら、パイプラインの比較的早い段階(フェッチ又は復号など)でサンプル操作を選択することにより、後続の段階での操作の処理の持続期間全体を通じて、それらのサンプル操作に関連付けられたイベントを追跡することが可能になる。
【0046】
サンプリング回路は、間隔カウンタによってカウントされたサンプリング間隔の経過に応答して、次のサンプル操作を選択することができる。間隔カウンタは、異なる形式の操作をカウントして、次にいつサンプル操作を選択することかを決定することができる。例えば、間隔は、キャッシュ又はメモリからフェッチされた命令の数、命令デコーダによって復号された命令の数、又は実行のためにデコーダによって生成されたマイクロ操作の数に基づいてカウントされ得る。
【0047】
サンプリング回路は、サンプリング間隔のランダム撹乱をサポートすることができ、それにより、サンプリング間隔のランダム撹乱が有効化される場合、プロファイリング回路は、サンプリング間隔をランダム又は擬似ランダム値に調整して、所与の期間に間隔カウンタによってカウントされたサンプリング間隔を設定することができる。例えば、サンプリング間隔は、2つの連続するサンプル操作間をカウントするための公称数の命令又はマイクロ操作を指定するように(レジスタ内の制御データを設定することによって)構成可能であり得るが、この公称値は、1つのカウント期間と次のカウント期間との間隔を変化させるために、ランダム/擬似ランダム値によって調整することができる。このことは、サンプリング回路が、プロファイリング結果を歪めるリスクがある、ループを介した複数の反復のプログラムループ内で同じ操作が繰り返し選択され得るリスクを低減する。
【0048】
参照命令アドレスインジケータは、いくつかの方法で表すことができる。一般に、参照命令アドレスインジケータは、参照命令のアドレスを識別することを可能にする任意の値であり得る。一実施例では、参照命令アドレスインジケータは、参照命令のアドレスの絶対値であり得る。別の実施例は、参照命令アドレスインジケータが、所与の命令及び参照命令の一方のアドレスの、他方のアドレスに対する相対オフセットを指定することであり得る。相対オフセットは通常、参照命令のアドレスの絶対値よりも少ないビットを使用して表現され得るため、このアプローチは、サンプルレコードに必要なデータの量を圧縮するのに役立ち得る。別の実施例では、参照命令アドレスインジケータは、プログラム順における所与の命令と参照命令との間の命令の数を示すことができる。
【0049】
図1は、データ処理を実行するための処理回路4を含むデータ処理装置2の例を概略的に示す。処理回路4は、本実施例では、データのフェッチ6、復号段階8、発行段階10、実行段階12、及び書き戻し段階14を含む、いくつかのパイプライン段階を有する処理パイプラインを備える。これは、可能なパイプライン構成の単なる一実施例であり、他の実施例は、異なる数の段階を有し、追加のタイプのパイプライン段階を含み得ることが理解されよう。
【0050】
フェッチ段階6は、パイプラインによる実行のためにレベル1の命令キャッシュ16から命令をフェッチする。分岐予測器18は、分岐命令の結果の予測を提供し、それらの予測は、フェッチ段階6によって使用されて、分岐を超えてフェッチする命令を決定することができる。フェッチ段階6でフェッチされた命令は、復号段階8によって復号されて、後のパイプライン段階を制御して、命令によって表される操作を実行するための制御信号を生成する。復号段階8は、命令を、実行段階12が実行することができる粒度で実行される操作を表すマイクロ操作にマッピングすることができる。
【0051】
いくつかのパイプライン実施態様では、メモリフェッチされた命令と後の段階で見られるマイクロ操作との間の1対1のマッピングが常に存在するため、マイクロ操作は、最初にフェッチされた命令自体同等であるか、又はその表現として単にみなすことができる(しかし、依然として、マイクロ操作は、対応する命令とは異なる形式で表すことができるが-例えば、マイクロ操作は、以下に記載の「サンプル操作」タグなどの追加の情報でタグ付けされ得る)。そのようなパイプラインの実施態様は、(マッピングの変化がないため、命令をマイクロ操作に復号することなく)直接命令を実行するものとみなすことができる、又は1対1のマッピングで命令から復号されるマイクロ操作を実行するものとみなすことができる。両方のビューは、同じパイプラインの同等の説明とみなすことができる。
【0052】
他の実施例では、少なくともいくつかの命令の場合、パイプラインは、マイクロ操作に対する命令の1対多又は多対1マッピングをサポートすることができる。いくつかの命令は、単一のマイクロ操作に依然として対応し得る。他の命令は、復号段階8によって複数のマイクロ操作に分割することができる。復号段階8はまた、キャッシュ16からフェッチされた2つ以上のプログラム命令の融合をサポートして、実行段階12によってサポートされる単一の結合マイクロ操作を形成することができる。したがって、実行段階12で見られるマイクロ操作は、データ処理装置2によってサポートされる命令セットアーキテクチャで定義される命令のアーキテクチャ定義とは異なり得る。
【0053】
以下の説明では、「マイクロ操作」という用語は、実行段階で見られるような命令の形式を指す。これは、いくつかのパイプラインに対する元の命令自体であってもよく、又は1つの命令を複数のマイクロ操作に分割するか、又は複数の命令を結合マイクロ操作に融合することによって取得される命令又はマイクロ操作の修正形態であってもよい。
【0054】
発行段階10は、オペランドが利用可能になるのを待っている間、デコーダ8によって生成されたマイクロ操作をキュー待ちに入れ、そのオペランドが利用可能となると(又はオペランドが、オペランドが必要とされる実行段階の関連サイクルにマイクロ操作が達する時点までに利用可能になると分かると)、実行のためのマイクロ操作を発行する。実行段階12は、異なるタイプのマイクロ操作を実行するためのいくつかの実行ユニット22~28を含む。処理操作は、レジスタ20から読み取られたオペランドに基づいて、実行ユニット22~28によって実行される。例えば、実行段階12の実行ユニットは、算術又は論理演算を実行するための算術/論理ユニット(ALU)22、浮動小数点値として表される数字を含む操作を実行するための浮動時点ユニット24、及び分岐命令が成立されるべきか否かを判定し、分岐が成立したときにプログラムフローの非連続的変化を実行するようにプログラムフローを調整するための分岐ユニット26、及びメモリシステムからレジスタ20にデータをロードするロード操作とレジスタ20からメモリシステムにデータを記憶するロード/記憶ユニット28を含むことができる。図1の実施例で実行段階12に示される実行ユニット22~28の特定のセットは、単に1つの可能な構成であり、他の実施例は、異なるタイプの実行ユニットを有し得るか、又は同じタイプの複数の実行ユニット(例えば、複数のALU22)を有し得ることが理解されよう。書き戻し段階14は、実行されたマイクロ操作の結果をレジスタ20に書き込む。
【0055】
処理パイプライン4は、命令がプログラマ又はコンパイラによって定義され、命令がフェッチ段階6によってフェッチされる、プログラム順に対応する順序でマイクロ操作を実行することに制限されるインオーダー処理パイプラインであり得る。あるいは、処理パイプライン4は、アウトオブオーダー処理をサポートすることができ、発行段階10は、プログラム順とは異なり得る順序で実行されるマイクロ操作を発行することができる。例えば、1つのマイクロ操作が停止されてオペランドが利用可能になるのを待っている間、プログラム順における後続命令に関連付けられた後のマイクロ操作は、停止された命令の前に実行することができる。パイプラインがアウトオブオーダー処理をサポートする場合、追加のパイプライン段階、例えば、復号されたプログラム命令によって指定されたアーキテクチャレジスタ指示子をレジスタバンク20内の特定のハードウェアレジスタを識別する物理レジスタ指示子に再マップする別名付け段階を提供することができる。
【0056】
本実施例では、メモリシステムは、レベル1の命令キャッシュ16、レベル1データキャッシュ30、データ及び命令の両方に使用することができる共有レベル2のキャッシュ32、及びメインメモリ34を含み、メインメモリは、パイプライン4によって実行される命令を介してアクセス可能ないくつかのメモリ記憶ユニット、周辺デバイス、及び他のデバイスを含むことができる。図1に示される特定のキャッシュ階層は単なる一実施例であり、他の実施例は、異なる数のキャッシュレベルを有することができる、又はデータキャッシュに対する命令キャッシュの異なる配置を提供することができる(例えば、レベル2のキャッシュ32は、別個のレベル2の命令及びデータキャッシュに分割することができる)と理解される。(処理パイプライン4によって処理された命令のオペランドに基づいて生成された)仮想アドレスとメモリシステムでアクセスされる位置を識別する物理アドレスとの間のアドレス変換を制御するために、メモリ管理ユニット36が提供される。MMU36は、アドレス変換マッピングを定義するメモリシステム34から取得されたページテーブルデータに依存する情報をキャッシュするための少なくとも1つの変換ルックアサイドバッファ(TLB)38を含むことができ、アドレス空間の特定の領域がパイプライン4上で実行される特定のプロセスにアクセス可能であるかどうかを制御するアクセス許可も提供することができる。簡潔化のため、MMU36は、データアクセスで使用するためにロード/記憶ユニット28に接続されているように図1に示されているが、MMU36は、アドレスを変換し、実行される命令をフェッチするときにフェッチユニット6によって発行された命令フェッチアドレスのアクセス許可をチェックするために使用することもできる。
【0057】
図1は、可能なプロセッサアーキテクチャの単なる一実施例であり、他の実施例は、図1に明示的に示されていない他の構成要素を有することができる。
【0058】
ソフトウェア開発を支援するために、プロセッサ2には、処理パイプライン4によって処理された命令の挙動に関するプロファイリング情報の収集を可能にするハードウェアリソースが提供され、ソフトウェア開発者はコードを修正する目的で、それを使用してコード最適化を実行することができる。サンプリング回路50は、プロファイリング回路52によってプロファイルされるサンプル操作として特定の命令又はマイクロ操作を選択するために提供される。サンプリング回路50は、パイプラインの異なる段階でサンプル操作を選択し得る。例えば、サンプリング回路50は、サンプル操作として特定のフェッチされた命令を選択し得、フェッチ段階6でそれらのフェッチされた命令をタグ付けして、命令がパイプライン4を下方に進む際に、プロファイリング回路52がサンプル操作の挙動に関する情報を収集するべきであることを示す。あるいは、サンプリング回路によるサンプル操作の命令のタグ付けは、復号段階8又は後の段階で行われ得る。また、サンプル操作は、メモリからフェッチされたアーキテクチャプログラム命令の粒度ではなく、個々のマイクロ操作の粒度で選択することができる。
【0059】
サンプリング回路は、命令又はマイクロ操作をカウントするための間隔カウンタ54を有し、次のサンプル操作がいつ選択されるべきかを判定する。図2は、サンプリング回路50による操作のサンプリングを示すフロー図である。ステップ60で、サンプリング回路50は、選択されている2つの連続するサンプル操作間でカウントされる命令又はマイクロ操作の数を表す特定のサンプリング間隔を選択する。サンプリング間隔は、制御レジスタ内のユーザ構成可能パラメータによって定義され得るか、又は特定の間隔に固定され得る。任意選択的に、サンプリング回路50は、ランダム撹乱関数をサポートすることができ、ユーザによって選択される設定サンプリング間隔は、乱数生成器又は擬似乱数生成器56によって生成されたランダム又は擬似ランダム値によって撹乱され得る。図1は、擬似乱数生成器56がサンプリング回路50内にあることを示すが、他の実施例では、サンプリング回路は、命令又はマイクロ操作サンプリング以外の他の目的にも使用される処理システム内の他の位置に提供される(擬似)乱数生成器によって生成された乱数を再利用することができる。例えば、(擬似)乱数生成器56は、ユーザによる公称サンプリング間隔として指定されたサンプリング間隔に追加される(又はサンプリング間隔から差し引かれる)特定の範囲内のランダムな値を生成して、次の操作期間にわたって間隔カウンタ54によってカウントされるサンプリング間隔を生成することができる。ランダム撹乱を有効化にすることは、命令のループを処理するときに、同じ命令又はマイクロ操作がループの複数の反復でサンプル操作として選択されるリスクを低減するために有用であり得る。いくつかの実施態様では、ランダム撹乱が有効化又は無効化されるかは任意選択的であり得、ユーザ構成可能な制御パラメータが、ランダム撹乱が有効化されているかどうかを選択する。
【0060】
したがって、ステップ60で、サンプリング間隔が選択され(固定値に設定される、又は可変のユーザ構成可能なパラメータによって直接指定され、又は固定/可変間隔値からランダムに又は擬似ランダムに撹乱される)、ステップ62で、間隔カウンタ54が、処理回路4によって処理された操作の数をカウントし始める。カウントされる操作は、フェッチされた命令、復号された命令、又は復号されたマイクロ操作のいずれかであり得る。いくつかのシステムは、これらのオプションのうちの1つのみをサポートすることができる。他のシステムは、ユーザが、どのタイプの操作が間隔カウンタ54によってカウントされるかを選択する構成データを設定する機能をサポートすることができる。ステップ64で、サンプリング回路50は、間隔カウンタ54がステップ60で選択されたサンプリング間隔が経過したことを示すかどうかを判定し、経過していない場合、間隔カウンタ54は、カウント操作を継続する。カウンタがサンプリング間隔が経過したことを示しているかどうかの判定は、異なる方法で実行することができる。例えば、カウンタは、ステップ60で選択されたサンプリング間隔に対応する値に設定することができ、次いで、カウントされた操作のうちの1つが見られる毎にデクリメントされ、カウンタが0に達するか、又は0を超えてオーバーフローするときに経過したとみなすことができる。あるいは、カウンタは、ステップ60で0にリセットすることができ、次いで、ステップ62でカウントされた各操作に応答してインクリメント又はデクリメントされ、ステップ64で、カウンタとサンプリング間隔に対応する値との比較が、十分な数の操作がカウントされてサンプリング間隔値に到達したことを示すとき、経過したとみなされる。
【0061】
サンプリング間隔の経過がどのように判定されるかに関係なく、サンプル間隔が経過した場合、ステップ66で、次の操作(例えば、フェッチされた命令、復号された命令、又は復号されたマイクロ操作)がサンプル操作としてタグ付けされる。例えば、命令に関連付けられたタグビットを設定することができ、このタグビットは、パイプライン4を下方に進行するにつれて、サンプル操作として選択された命令又はマイクロ操作を伴うことができる。次いで、サンプリング回路50は、ステップ60に戻り、新しいサンプリング間隔(ランダム撹乱がサポートされていないか若しくは無効化されている場合は予め設定されたサンプリング間隔と同じであり得る、又はランダム撹乱が有効化されている場合は予め設定されたサンプリング間隔と異なり得る)に基づいてカウンタ54を再度リセットする。図2を繰り返すことによって、サンプル操作は、周期的な間隔で選択され続ける。
【0062】
サンプル操作として操作のサブセットのみを選択するという利点は、プロファイリングのための追跡情報のオーバーヘッドを大幅に低減することである。例えば、サンプリング間隔は、実際には、パイプライン4内の作動時の単一の操作のみが一度にサンプル操作として選択されるように十分に長く設定され得るため、プロファイリング回路52は、一度に単一のサンプル操作の挙動を追跡するのに十分なハードウェアリソースを提供するだけでよい。このため、特定のサンプル操作に関連付けられた操作識別子に基づいて、複数の操作の情報を記憶することができ、特定のサンプル操作の情報に基づいて記憶構造のどのエントリを更新するかを選択するインデックスストレージ構造を有さなければならないというオーバーヘッドが回避される。
【0063】
にもかかわらず、他の実施態様は、より多額のハードウェアコストをもたらすことを選択することができ、一度に選択される複数のサンプル操作をサポートすることを選択することもできる。これらの実施形態では、サンプル操作としての操作のサブセットのサンプリングは、あらゆる命令を追跡しようとする実施態様と比較して、生成されたプロファイリング情報の量を大幅に低減するという利点を有し、各サンプル操作についてより広い範囲のデータを取得し、よってより有意味なプロファイリング分析を実行することを実行可能にする。
【0064】
プロファイリング回路52は、サンプリング回路50によって選択されたサンプル操作の挙動に関する情報を収集するための監視回路70を備える。監視回路70は、プロファイリング回路52内の単一のブロックとして示されているが、実際には、監視回路は、プロセッサの異なる構成要素から情報を収集するためにプロセッサの周りに分散されたいくつかの要素を含むことができる。例えば、監視回路70は、サンプル操作のための様々なタイプのイベントの発生を検出するためのイベント検出回路を含むことができる。検出されるイベントのタイプは、サンプル操作のタイプに依存し得る。例えば、サンプル操作として選択された分岐操作の場合、イベントは、分岐予測ミスが発生したかどうか、又は分岐予測器18が分岐を正しく予測したかどうかを追跡することができる。ロード/記憶操作の場合、イベントは、例えば、ロード/記憶操作が特定レベルのキャッシュ30、32内でミスしたかどうか、ロード/記憶命令についてのアドレス変換ルックアップがTLB38又は特定のレベルのTLBでミスしたかどうか、又はアドレス障害がロード/記憶命令に対して発生したかどうかを含むことができる。監視され得る他のタイプのイベントは、命令キャッシュ16でミスしている命令フェッチ、定義されていない命令例外などの障害、又はリソースの競合によって特定の命令が遅延したかどうかであってもよい。監視回路70はまた、サンプル操作の命令アドレス、ロード/記憶操作のターゲットアドレス、又は分岐操作の分岐ターゲットアドレスなどの特定の命令に関する情報、及びサンプル操作が処理の特定の段階に到達した時点で取得されるレジスタ20からのアーキテクチャ状態のアイテム(例えば、サンプル操作が処理された処理コンテキストを識別するコンテキスト識別子)を取得することができる。監視回路70はまた、例えば、アドレス変換又はキャッシュルックアップの待ち時間を測定することなどの競合する特定の操作にかかる処理サイクルの数、又は例えば、第1の処理点と第2の処理点との間で信号する操作のサイクルの数をカウントするサイクルカウンタを有することができる。したがって、モニタリング回路70によって様々な情報を収集することができることが理解されよう。
【0065】
取得された監視情報は、プロファイリング回路52のサンプルレコード記憶回路72(例えば、レジスタ又はバッファ)に記憶されたサンプルレコードに記録することができる。サンプルレコードは、以下に記載されるように、パケット化フォーマットを使用して生成することができる。所与のサンプル操作について取得されたサンプルレコード内で、レコードは、サンプル操作に関連付けられた操作のタイプ(例えば、分岐、ロード/記憶操作、又はALU操作など)を指定し、サンプル操作に直接帰属する各種情報も提供することができる。サンプルレコードストレージ72内のサンプルレコードの取得は、パイプライン4上で実行される処理の背景でハードウェアで実行され、そのため、サンプルレコード内の情報を収集するために、いかなる特定のソフトウェア命令も実行する必要はない。
【0066】
プロファイリング回路52が、特定のサンプル操作に対して取得されたサンプルレコードが診断分析のためにアクセス可能であるかどうかを選択することを可能にするフィルタリング回路74が提供される。図1に示される実施形態では、サンプルレコードは、メモリシステム34に記憶されたプロファイリングバッファ構造76に書き込むことによって、診断分析のためにアクセス可能にすることができる。プロファイリングバッファ76としての使用に割り当てられるアドレス範囲は、ソフトウェア制御下でユーザによって設定することができる、プロファイリング回路52の構成レジスタ78に記憶された情報を識別するバッファアドレスに基づいて決定され得る。構成レジスタ78はまた、フィルタリング回路74によって使用されるフィルタリング基準を設定して、サンプルレコード書き込み回路79が、取得されたサンプルレコードをサンプルレコードストレージ72からプロファイリングバッファ76に書き込むべきかどうかを判定するために、特定のタイプのサンプル操作についてサンプルレコード内に含まれるべき情報のタイプを指定する構成情報を含むことができる。メモリ内のプロファイリングバッファ76へのサンプルレコードの書き込みは、パイプライン4上の処理を中断する必要なく実行することができ、それにより、サンプルレコードをメモリシステムに記憶するための特定のソフトウェア命令は必要とされない。したがって、プロファイリングバッファのオーバーフローの危険性がある十分な数のサンプルレコードが生成され書き出されるまで、割り込みを発生させることなく、所定数のサンプルレコードをプロファイリングバッファ76に出力することができ、その時点で、パフォーマンス監視割り込みをトリガして処理を中断させることができ、それにより、次いで例外ハンドラが、(例えば、後続のサンプルレコードがアドレス空間の異なる領域内のプロファイリングバッファに記憶されることを可能にするように構成レジスタ78内のアドレスパラメータを更新することによって、又はプロファイリングバッファからサンプルレコードを読み出してそれらを他の位置に記憶するか、若しくは外部分析のためにそれらを出力することによって)以前にプロファイリングバッファ76に記憶されたサンプルレコードが診断分析のためにアクセス可能な状態を保つように確保することができる。図1は、サンプルレコードをメモリに書き込むことによって診断分析のためにアクセス可能にする実施例を示しているが、代替策は、診断情報をオンチップを記憶するためのメモリシステム34とは別の専用ハードウェア構造であるトレースバッファ73に出力すること、及び/又は取得されたサンプルレコードをトレース出力ポート75に(直接又はトレースバッファ73を介して)出力することであり、トレース出力ポートは集積回路ピンのセットであり、それを介してサンプルレコードを外部オフチップトレース分析器又はストレージデバイスに出力することができる。いくつかのシステムは、サンプルレコードをメモリに書き込む機能の代わりにこのトレース出力機能をサポートすることができる一方、他のシステムは、両方のアプローチをサポートし、レジスタ78内の構成情報を使用して、どちらのアプローチを使用するか選択することができる。
【0067】
図3は、プロファイリング回路52によるプロファイリングを示すフロー図である。ステップ80で、プロファイリング回路52は、サンプル操作が処理中であるかどうかを判定する。処理中でなければ、監視が必要ではない。最終的に、いったんサンプリング回路50によって選択されたサンプル操作が識別されると、ステップ82で、監視回路70は、サンプル操作の操作タイプ、及びサンプル操作に直接帰属するサンプル操作の挙動に関する情報を指定するサンプルレコードを取得する。サンプルレコードはまた、例えば、レジスタ状態のスナップショットなどのサンプル操作に直接帰属しない他の情報も含むことができる(例えば、条件付き命令の結果を判定するために使用される条件コードフラグの現在値を、それらの条件コードフラグ値が、サンプル操作によって直接引き起こされたかどうかに関係なく、取得することができる)。取得されたサンプルレコードは、サンプルレコードストレージ72に記憶される。ステップ82は、処理システムの様々な点で様々な監視情報を取得するいくつかの別個のインスタンスを含み得、これらは全て同時に準備が整わない場合があることが理解されよう。サンプルレコードストレージ72内のサンプルレコードは、パイプラインの異なる点で収集されるいくつかの情報から徐々に構成することができる。あるいは、監視回路70は、検出される際にイベント及び情報を追跡するいくつかの一時レジスタを含むことができ、その後、それらのイベント及び情報を使用して、出力準備が整った既知のサンプルレコードフォーマットでサンプルレコードを構成することができる。
【0068】
ステップ84で、フィルタリング回路は、サンプル操作が、構成レジスタ78で指定された少なくとも1つのフィルタ基準を満たすかどうかを判定する。このフィルタ基準は、サンプル操作の操作タイプに基づくことができる(例えば、ユーザは、サンプル操作として選択される場合でも他のタイプの操作に関してではなく、分岐操作に関してのみ情報を収集するようにフィルタを構成させることができる)。また、フィルタ基準は、監視回路70によって取得された監視情報の一部及び/又はサンプルレコードに追加された情報に依存し得る。例えば、フィルタ基準は、誤って予測された分岐に関連付けられたレコードのみがフィルタを通過することを許可されるべきである、又はレベル1のデータキャッシュ30でミスしているロード/記憶命令のサンプルレコードが追跡されるべきであると指定することができる。特定のフィルタ基準セットは、レジスタ78内のユーザ制御構成データに依存し、複数の基準のうちのいずれか1つ以上を満たすサンプルレコードがフィルタを超えて進行することができるようにOR操作で組み合わされた、又は2つ以上の基準の各々を満たすサンプルレコードがフィルタを通過するが、これらの基準のうちの1つしか満たさないサンプルレコードが拒絶されるようにAND操作で組み合わされたいくつかの代替基準を含むことができる。
【0069】
サンプル操作が少なくとも1つのフィルタ基準を満たさない場合、ステップ86で、プロファイリング回路52は、診断分析のためにサンプルレコードを利用可能にすることなく、取得されたサンプルレコードを廃棄又は上書きすることができる。したがって、このサンプルレコードをメモリシステムに書き込むか、又はトレースバッファ73若しくはトレース出力ポート75に出力する必要はない。次にサンプル操作が処理されるとき、任意の以前に取得された情報が上書きされ得る。
【0070】
サンプル操作が少なくとも1つのフィルタ基準を満たす場合、ステップ88で、診断分析のためにサンプルレコードをアクセス可能にするためのどのオプションが有効化されるかが判定される。システムがサンプルレコード書き込み回路79を有し、サンプルレコードのメモリへの書き込みが可能にされる場合、ステップ90で、プロファイリング回路52が、プロファイリングバッファ76の現在の占有率が所定の閾値を超えるかどうかを判定し、閾値を超える場合、ステップ92で、パフォーマンス監視割り込みがトリガされてパイプライン4に対する処理を中断し、(ソフトウェア内での)例外ハンドラの実行を呼び出し、例外ハンドラはその後、サンプルレコードの取得を継続できるように、プロファイリングバッファのオーバーフローを回避するアクションをとることができる。例えば、例外ハンドラは、プロファイリングバッファアドレスパラメータを更新して異なるアドレス範囲を示す、プロファイリングバッファ76に追加の能力を割り当てる、又は情報をプロファイリングバッファ76から異なる記憶位置に伝達して、同じプロファイリングバッファ位置を使用させ続けることができる。ステップ90で使用される閾値は、プロファイリングバッファの容量と一致するように設定することができる、又はオーバーフローが発生する前にパフォーマンス監視割り込みをトリガすることができるように、最大容量未満のレベルに設定することができる。ステップ90で、閾値にまだ到達していない場合、ステップ94で、サンプルレコードストレージ72に取得されたサンプルレコードを、メモリ内のプロファイリングバッファ76に書き出すことができ、現在のバッファ占有率を反映するように現在のバッファ占有率のパラメータ追跡を更新することができる。ステップ94での書き込みは、処理がパイプライン4上で中断されずに継続している間に、サンプルレコード書き込み回路79によってトリガされる。
【0071】
一方、ステップ88で、トレース出力方法が有効化及びサポートされる場合、ステップ96で、サンプルレコードストレージ72に取得されたサンプルレコードは、サンプルレコードをトレースバッファ73に、及び/又はトレース出力ポート75を介して外部デバイスに出力することによって、診断分析のために利用可能にされる。いくつかのシステムは、メモリ書き込み及びトレース出力オプションの両方をサポートすることができ、他のシステムは、これらのオプションのうちの1つのみをサポートすることができる。
【0072】
図4は、所与のサンプル操作のために取得されたサンプルレコード100のパケット化フォーマットの一例を示す。サンプルレコード100はいくつかのパケット102を含むことができ、各パケットは、使用され得る利用可能なパケットタイプのセットから選択される。各パケットは、パケットのタイプを識別する少なくともヘッダ部104を含むことができ、任意選択的に、他の情報も含むことができる(例えば、単一のタイプのパケット内であっても、パケットヘッダによって区別され得るいくつかの変形が存在し得るか、又はサンプル操作自体に関する限られた量の情報がヘッダに示され得る)。また、ヘッダは、そのパケットに関連付けられた監視データを提供する関連ペイロード106のサイズを指定することができる。いくつかのタイプのパケットは、ペイロード106を有さず、ヘッダ104のみを含むことができる。例えば、パケットタイプは、以下を含むことができる。
●ヘッダパケット:サンプルレコード100全体としてヘッダ情報を提供する。例えば、ヘッダパケットは、サンプルレコードを取得したソースを識別するプロファイリングソース識別子を指定することができる。例えば、マルチプロセッサシステムでは、各々がプロファイリング回路52を有する複数のプロセッサコアが存在し得、ソースIDが、サンプルレコードが取得された操作を処理したプロセッサコアのウィッシュインスタンスを区別する。
●タイムスタンプパケット:サンプル操作が処理された時間を識別するシステムタイマ値を提供する。
●コンテキストパケット:サンプル操作が処理された処理コンテキストを識別する1つ以上のコンテキスト識別子を提供する。例えば、コンテキスト識別子は、異なる仮想アドレス空間に関連付けられたプロセスを区別するアドレス空間識別子、及び/又はサンプル操作が処理された仮想マシンを識別する仮想マシン識別子を含むことができる。
●イベントパケット:サンプル操作について発生する1つ以上のイベントの概要を提供する。例えば、イベントパケットはいくつかのビットを含むイベントマスクを提供し得、各ビットが対応するタイプのイベントが発生したかどうかを示す。イベントパケットのヘッダ部分104は、異なるイベントタイプのセットを示すために、複数の代替タイプのイベントマスクを区別することができる。これにより、いずれのイベントも発生しなかったイベントタイプのセットのイベントマスクを符号化する必要性が回避される。
●カウンタパケット:サンプル操作について取得された特定のアクションに関連付けられた待ち時間を示す少なくとも1つのカウンタ値を提供する。例えば、待ち時間は、メモリアクセス操作又はアドレス変換に関連付けることができる。待ち時間はまた、サンプル操作がパイプラインの所与の点に到達し、パイプライン内の所与の後続点に到達するサイクル数を示すことができる。
●操作タイプ:サンプル操作のタイプを示すパケット。例えば、操作タイプは、ロード/記憶操作、分岐操作、又はALU操作を区別することができる。
●アドレスパケット:サンプル操作に関連付けられたアドレスを示す。
●エンドマーカパケット:現在のサンプルレコード100の終了を示し、その結果、任意の後続のパケットが次のサンプルレコードの一部であると解釈される。エンドマーカパケット102の使用は、どのくらいの関連情報が記録されるべきかどうかに応じて可変数のパケットを含めることができるように、可変サイズでサンプルレコードフォーマットをサポートすることが有用であり得る。しかしながら、他のアプローチは、何らかの既知のサイズのサンプルレコードの固定フォーマットを有することができる(又は所与のタイプのサンプル操作について、他のタイプのサンプル操作の固定サイズとは異なり得るサンプルレコードのサイズを固定することができる)。固定サイズレコードフォーマットが使用される場合、エンドマーカ102は必要とされない場合がある。
●パディングパケット:固定サイズフォーマットが使用される場合、固定サイズサンプルレコードの残りの部分を埋めるために使用される。パディングパケットはペイロードを有さない。
【0073】
どのタイプのパケットが表されるかを識別するためにヘッダ部分104に使用される特定の符号化は任意であり、特定のシステムの必要性に従って選択することができる。いくつかのパケットタイプは、可変サイズであり得るヘッダをサポートすることができ、それにより、正常なヘッダに加えて追加の情報を提供するためにプレフィックスヘッダを提供することができ、プレフィックスを含めることは任意選択的であるため、プレフィックス有りと無しの両方で同じヘッダを含めることができる。場合によっては、ヘッダは、可変サイズペイロードが可能であるように、ペイロード106のサイズを指定することができる。所与のタイプのサンプル操作のサンプルレコードに含まれるパケットの数は変更することができ、例えば、一部のレコードは、他のレコードよりも多数のイベント、カウンタ、又はアドレスを必要とし得る。
【0074】
図5は、(任意の例として選択された)ロード命令のサンプルレコード100の例を示す。下線付きテキストを有する部分は、パケットヘッダ104を表し、下線が付いていないテキストを有する以下の部分は、パケットペイロード106を表す。サンプルレコードの特定の内容は、サンプル操作が処理されたときに発生したことに依存し、大幅に変化する可能性があることが理解されるであろう。図5の特定の実施例では、サンプルレコードは、ソースIDを提供するヘッダパケット、システムタイマ値を提供するタイムスタンプパケット、2つのアドレスパケット(ロード命令自体の命令アドレスを識別するプログラムカウンタアドレスを提供する第1のアドレスパケットと、ロードが実行されるターゲットアドレスを表すデータアドレスを識別する第2のアドレスパケット)、それぞれアドレス空間識別子(CONTEXTIDR_EL1)及び仮想マシン識別子(CONTEXTIDR_EL2)を指定する2つのコンテキストパケット、この例ではロード操作に関連付けられたデータアクセスのサイズを示すプレフィックスヘッダを含む操作タイプパケット、を含み、主操作タイプヘッダは、サンプル操作が(分岐又はALU操作ではなく)ロードであることを示す。サンプルレコードはまた、待ち時間カウント値を提供する2つのカウンタパケットを含み、本実施例では、発行されているサンプル操作と生成されているロード操作のアドレスとの間の待ち時間を示す第1のカウント値と、生成されているアドレスとメモリシステムから返されているロードのデータとの間の待ち時間を示す第2のカウント値と、を示す。サンプルレコードはまた、ロードについて発生した1つ以上のイベント(TLB38内のキャッシュヒット/ミス、アドレス変換ヒット/ミスなど)を示すマスクを提供するイベントパケットを含む。最後に、サンプルレコードは、エンドマーカパケットを含む。したがって、サンプルレコード100は、サンプル操作の結果に関する詳細な情報、処理にかかる操作の時間、並びに操作が処理された時間及びそのコンテキストについての他の情報を提供し、それらの情報は全て、ソフトウェア開発者がコードの潜在的な問題を診断するために有用であり得る。
【0075】
図6は、アドレスパケット102の例をより詳細に示す。アドレスパケットの場合、アドレスタイプヘッダ104は、パケットがアドレスパケット(他のタイプのパケットと区別する)であることを示す値を有するが、いくつかの異なるタイプのアドレスのうちの1つから選択されたペイロード内に表される特定のタイプのアドレスも識別する。例えば、ペイロード内のアドレスは、サンプル操作自体に関連付けられた命令のアドレスを識別する命令仮想アドレス、データアクセスのターゲットアドレスを識別するデータアクセス仮想アドレス、分岐が成立する場合に分岐がプログラムフローを方向付けるべきアドレスを識別する分岐ターゲットアドレス、又はプログラム順において参照命令とサンプル操作に対応する所与の命令との間に介在する命令のうちの任意の2つの間で(成立分岐なく)連続的に実行が進行した参照命令のアドレスを示す参照命令アドレス、のうちの1つとして識別することができる。
【0076】
参照命令アドレスパケットの使用を、図7に示される命令の例示的なシーケンスに関して以下で更に説明する。図7の実施例では、成立分岐命令200は、更なる成立分岐が命令218で発生する前に、いくつかの非成立分岐命令208、216を含む、命令202、204などのブロックの処理につながる。本実施例における成立分岐命令218は、命令230~240での関数コードに対する関数呼び出しを表し、関数コードは、前の成立分岐218の直後の命令220に処理を戻すために取られる実行される復帰分岐240で終了する。成立分岐200、218、240以外の他の分岐命令は、本実施例では成立しない。成立分岐命令は、非連続的プログラムフローの点を表す。任意の2つの成立分岐間で、介在命令が連続的に実行される(つまり、これらの命令間に成立分岐がないことを意味する-アウトオブオーダープロセッサのように、介在命令はプログラム順とは異なる順序で実行することができる(命令210が命令206の前に順違いで実行される場合、これは、プログラムフローの非連続的変化とみなされない))。
【0077】
本実施例では、成立分岐命令218は、サンプリング回路50によってサンプル操作として選択され、したがって、プロファイリング回路52は、成立分岐218のサンプルレコードを取得すると想定される。成立分岐218のサンプルレコードは、参照命令のアドレスを識別するために、上述のように参照命令アドレスパケットを含むことができ、参照命令は、成立分岐よりも前又は後の命令であり(成立分岐自体に関連付けられたプログラムフローの非連続的変化を含まない)、その制御フローは、サンプル操作218と参照命令との間の介在命令のシーケンスにおいて連続的である。図7に見られるように、分岐218がサンプル操作としてサンプリングされる場合、参照命令は、成立分岐218の前の命令202~217のいずれか、又は成立分岐218の後の命令230~240のいずれかであり得る(成立分岐218自体によってトリガされたものを超えてプログラムフローの介在する非連続的変化に遭遇しなかった)。しかしながら、命令200又は命令220~224は、プログラムフローの介在する非連続的変化が存在しているため、参照命令アドレスパケットによって参照命令として示すことができない。
【0078】
参照命令アドレスパケットは、プロファイリング回路52によって取得されたサンプルレコードを使用して、プログラムコードのプロファイルガイド最適化(PGO)を支援するのに有用である。PGOは、プログラマがプロファイリングを使用してプログラムランタイムパフォーマンスを改善するために使用される技術である。PGOは、プログラムコードのいくつかの部分が他の部分よりも頻繁に実行されることを認識し、したがって、あまり頻繁に実行されないセクションに優先して、より頻繁に実行されるコードのパフォーマンスを最適化することに開発努力を集中させることが最も効率的であり得る。サンプルレコードが参照命令アドレスを追跡する能力がなくても、サンプリング回路50によって選択された体系的にサンプリングされた命令又はマイクロ操作に基づいてプロファイリング回路52によって取得されたサンプルレコードを使用して、PGOを支援することができる。例えば、プロファイリングが完了した後、プロファイリングバッファ76は、フィルタリング回路によって設定されたフィルタを通過するサンプル操作のレコードを含むことができ、任意のタイプの命令に関連付けられたサンプルレコードは、サンプル操作に関連付けられた命令アドレス(プログラムカウンタ又はPC)を指定することができる。これを使用して、異なる命令の実行の相対頻度を示すホットスポットプロファイルなど、プログラムの基本プロファイルを生成することができる。プログラマ又はコンパイラは、プロファイルを使用して、それらをコードの領域上に誘導して、パフォーマンスの改善に焦点を当てることができる。
【0079】
しかしながら、プロファイリングのための操作の体系的サンプリングに伴う問題は、処理回路によって実行される操作の大部分が、プロファイリングバッファ76に書き込まれたサンプルレコードによって追跡されないことである。各サンプル操作のPCアドレスに基づいて、単一のサンプルレコードから、(サンプル操作はいくつかの未知の分岐の分岐ターゲットであった可能性があるため)任意の先行命令ではなく、1つの特定の命令のみが実行されたことを推定することが可能である。したがって、各サンプルレコードが単一の命令が実行された証拠を単に提供する場合、これは、収集されたサンプルが、コードの異なる部分の実行の相対頻度の統計的に有効なビューを得るのに十分な情報を収集するために、非常に多くの数のサンプルを収集する必要があり、必要とされるデータレート及びストレージオーバーヘッドを前提とすると実用的ではないことを意味する。
【0080】
対照的に、他のタイプの診断監視技術は、命令毎により限定された情報のセットの取得をサポートすることができる。例えば、比較のために、最後の16個の成立分岐の分岐レコードを記録するために記憶要素が提供されるトレースソリューションを考慮すると、各分岐レコードは、成立分岐の命令アドレス及び成立分岐の分岐ターゲットアドレスの2つのアドレスを記憶する。成立分岐に遭遇するたびに、最も古いレコードが廃棄され、最新の成立分岐のレコードが記憶要素に割り当てられる。特定の数の命令(例えば、1,000,000回の命令毎)の間隔で、割り込みが生成されて、最後の16個の成立分岐のレコードがサンプリングされ、メモリに書き込まれるか、又はトレースポートを介して出力される。1秒当たり1,000、000,000回の命令で命令が実行されている場合、1秒当たり約1000個のサンプル(したがって、1秒当たり1000個の割り込み)が生成される。平均して、10個の命令毎に約1個が成立分岐であり得ることが一般的であるため、16個の成立分岐は、約150の命令に及ぶことがある(分岐記録の「植木算」特性-10個の命令の15ブロックがそれぞれ16個の成立分岐によって境界付けられるーのため、16個の分岐によって表される命令の数は160ではないことに注意されたい)。したがって、最後の16個の成立分岐のレコードは、約150の命令が実行された証拠を提供し、これを使用して、上述のようなPGOのホットスポットプロファイルを開発することができる。1秒当たり1000個のサンプルは、プロファイルが毎秒約150,000の命令に基づくことができることを意味する。各分岐レコードが16バイト(例えば、2つの64ビットアドレス)のデータである場合、各サンプルは256バイトになり、収集されたデータの約250KB/秒を意味する。しかしながら、このような単純なトレースソリューションの問題は、このサンプリングが、単に成立分岐命令の命令アドレス及び分岐ターゲットアドレスを取得し、他の診断情報を提供しないことである。
【0081】
その代わりに、図1の実施形態に記載されている統計サンプリングベースの方法の説明に戻ると、この方法は、他の多くのタイプの情報も記録することができるという利点を有する。しかしながら、これは、はるかに大きいサンプルレコードを生成することを犠牲にしている。ホットスポットプロファイリングに寄与するとして秒当たり150,000回の命令をカウントすることができるトレースアプローチと一致することができるためには、サンプリング回路50は、6700命令毎に約1のサンプリングレートを使用する必要がある。各サンプルレコードが64バイトを有し(例えば、上記のパディングパケットを使用することによって達成される固定サイズフォーマットを使用すると、ハードウェア実装を簡略化することができる)、64KBのバッファ76がメモリに割り当てられ、1024個のサンプルを保持することができると仮定すると、これは、上記のトレースソリューションのようにサンプル毎ではなく64KBのバッファが一杯になった時点で割り込みが生成されるだけでよいので、トレース実施例と比較して、割り込み速度が毎秒約145サンプル(割り込み)へと大幅に低減されることを意味する。しかしながら、統計プロファイリングソリューションでは、データレートは、1秒当たり9MBまで大幅に増加し、トレースソリューションよりもほぼ40倍高くなる。このデータレート増加の理由は、サンプル毎にはるかに大きい情報セットが収集されるためであり、統計サンプルベースのプロファイリングは通常、比較的低いサンプリングレートで動作すると予想されるが、妥当なPGOホットスポットプロファイルを与えるために必要なサンプルの数に適合できるように、サンプリングレートを増加させる必要がある。したがって、各サンプル操作のPCを取得することのみに基づいて、PGOを支援するためにサンプルベースのプロファイリング技術を使用することは困難であり得る。
【0082】
しかしながら、サンプル操作のサンプルレコード内に、介在する処理が連続的であったサンプル操作のPCよりもプログラム順において前の又は後の点をマークする参照命令アドレスとして提供されるアドレスを符号化することができるアドレスパケットの形態を含む機能を提供することによって、各サンプルレコードは、現在のサンプル操作が実行されただけでなく、特定の数の他の命令も実行されたという証拠を(他の命令のための追加のサンプルレコードを含む必要なしに)提供することができる。サンプルレコード毎に実行を推定することができる命令の数を増加させることによって、ホットスポットプロファイルの特定の数の命令の実行を追跡するために必要なサンプル操作の数が低減される。これにより、必要なデータレートを大幅に削減することができる。
【0083】
再び、前述の数値例を続けると、この追加の参照命令アドレスインジケータが、成立分岐について収集されたサンプルにのみ含まれ、直近成立分岐の分岐ターゲットアドレスを示し、フィルタ24が、成立分岐のサンプルレコードのみがプロファイリングバッファ76に書き込まれることを可能にするように構成されている場合、サンプリングレートが6700命令毎に依然として1であると仮定すると、フィルタ74は、サンプル操作の約90%を破棄する(10回の操作のうち約1回が成立分岐であると仮定する)が、各サンプルレコードは、(平均して)サンプリングされた命令を含む10個の命令が実行されたという証拠を提供する。したがって、上記のトレースソリューションと競合するためにホットスポットプロファイルに向かってカウントされた約150,000の命令に達するには、必要なサンプルレコードは10倍少なくてすむ。各サンプルレコードが上記のようにまだ64バイトである場合、このアプローチは、データレートを、PCアドレスのみを使用するサンプルベースのプロファイリングよりも10倍少ない毎秒930KBまで低減し、上記のトレースソリューションにはるかに近い。しかしながら、トレースソリューションとは異なり、各サンプルレコードは、例えば、サイクルカウント、均一マスクなど、はるかに広い範囲の処理された操作に関する情報を提供している。したがって、このアプローチは、PGOプロファイリングに使用されるサンプルレコードと同じサンプルレコードのセットを使用して、他のタイプのパフォーマンス分析を実行することを可能にするものであり、これはトレースソリューションでは不可能であった。したがって、ソフトウェア開発は、はるかに効率的であり得る。
【0084】
フィルタリング回路74は、診断分析のために開発者に対してどのサンプルレコードが利用可能とされるかを選択するための様々なオプションをサポートすることができ、フィルタが成立分岐命令についてのサンプルレコードのみを選択することができる1つのオプション、及び成立分岐と非成立分岐の両方がフィルタを通過するサンプルレコードを有する別のフィルタ設定をサポートすることができる。所与のサンプル操作について、プログラム順において近くの命令の実行頻度に関してサンプル毎に最大量の情報を利用するには、実行されると推定され得る介在命令の範囲を最大化できるために、プログラム順で直近成立分岐又は次成立分岐の位置を追跡することが望ましい場合があると想定することができる。しかしながら、フィルタが、成立分岐と非成立分岐の両方が分析のために出力されるサンプルレコードを有することを可能にし、成立分岐と非成立分岐の両方が参照命令アドレスインジケータを含む場合、取得された参照命令アドレスインジケータに基づいて決定されたホットスポットプロファイルの統計バイアスを引き起こす可能性があることが実験で観察されている。その理由は以下のとおりである。
【0085】
図7の実施例を考えると、論証のために、成立分岐200と成立分岐218との間に介在する分岐208、216は、常に成立しないように一貫した挙動を有し(例えば、分岐208、216は、現在の実行ランで発生しなかった稀なエラー状態についてテストすることができる)、シーケンス202~218の中間には他の分岐がないために、このコードが実行されるたびに、命令200からロード命令202への分岐の後にコードに到達したと仮定する。分岐208及び216が成立しなかったことは、命令202~218の全てが等しい回数で実行されたことを意味するため、どのホットスポットプロファイルも、命令202~218のシーケンス全体について等しい実行カウントを示すはずである。
【0086】
フィルタ74が、成立分岐のみのサンプルレコードを通過させるが、非成立分岐のサンプルレコードを破棄し、参照命令アドレスインジケータが直近成立分岐の分岐ターゲットアドレスを示す成立分岐のサンプルレコードに含まれる場合、図8に示されるように、成立分岐命令218のサンプルレコードは、直近成立分岐200の分岐ターゲットであった命令202のアドレスを示すことができる。同様に、成立分岐240がサンプル操作として選択された場合、そのサンプルレコードは、直近成立分岐218の分岐ターゲットアドレスにおける命令230を示す参照命令アドレスインジケータを示した。このアプローチは、成立分岐218がサンプリングされるたびに、命令202~218の全てが実行されると推定されるために、フィルタ74が成立分岐サンプルレコードのみを出力させるときに許容可能となり、したがって、ホットスポットプロファイルは、ブロック202~218の別の命令と比較して、ブロック202~218内の1つの命令が実行される相対頻度の公正な表現を提供することになる。
【0087】
しかしながら、その代わりに成立分岐及び非成立分岐の両方のサンプルレコードが診断分析のために出力されるようにフィルタ74が設定された(及び成立分岐及び非成立分岐の両方が、直近分岐の分岐ターゲットを記録する)場合、これは、サンプル操作が成立分岐218又は後続非成立分岐216として選択されるかどうかに関係なく、サンプルレコードが、直近成立分岐の分岐ターゲット202を表す同じアドレスを指定することを意味する。したがって、非成立分岐216がサンプリングされていない場合、ホットスポットプロファイルは、命令202~216が実行されたと推定するが、分岐218がサンプリングされる場合、ホットスポットプロファイルは、命令202~217が実行されたと推定するであろう。これは、命令202~216は、サンプリングされた選択分岐216又は分岐218に関係なく実行されたものとして推定されるが、命令217は、非成立分岐216がサンプリングされたときではなく、成立分岐218がサンプリングされたときに実行されたものとしてのみ推定されることを意味する。つまり、分岐216は常に成立していないため、たとえ実際に命令217が命令202~216と同じ頻度で実行されたとしても、命令217は、ホットスポットプロファイルにおいてより低い実行カウントで終了し得ることを意味する。したがって、参照命令アドレスインジケーションを指定する成立分岐と非成立分岐の両方をサンプリングするが、参照命令アドレスインジケーションを使用して前の成立分岐のみを参照することは、バイアスのかかったプロファイルを生成するリスクがある。
【0088】
このバイアスは、参照命令アドレスインジケータを生成するために使用される操作タイプの集団が、ホットスポットプロファイルの基礎として使用される操作タイプの集団と一致するように確保することによって回避することができる。これは、参照命令アドレスインジケータが参照命令として、(分岐が成立したか否かに関係なく、及び直近分岐自体がサンプリングされたかどうかに関係なく)プログラムフローが直近分岐の後に方向付けられる命令を示す機能をサポートするプロファイリング回路52を提供することによって達成することができる。したがって、図9に示すように、成立分岐218の参照命令アドレスパケットは、参照命令として、プログラム順において直近の非成立分岐216の後の次命令であるADD命令217を示すことができる。対照的に、非成立分岐216がサンプリングされていない場合、そのサンプルレコードは、参照命令アドレスパケット内の先行する非成立分岐210の後のADD命令210のアドレスを示したであろう。非成立分岐208がサンプリングされている場合、そのサンプルレコードは、LD命令202のアドレスを示したであろう(プログラムフローがプログラム順において直近分岐200の後に方向付けられた命令-分岐200が成立したとき、参照命令は、成立分岐の分岐ターゲットアドレスにおける命令であり、非成立分岐のように、次の連続的なアドレスにおける命令ではない)。このアプローチは、どの命令も直後の分岐がサンプリングされた場合に実行されると推定されることを意味し、他の命令と比較して実行カウントを人為的に増加させる可能性のある、複数の異なるサンプリングされた分岐についての命令の「ダブルカウント」を回避する。
【0089】
図8及び図9並びに上記の実施例は、参照命令アドレスが、前の分岐後の分岐ターゲット又は次命令に基づいてアドレスを追跡する実施態様を説明している。図10及び図11に示されるように、代替アプローチは、監視回路70を使用して、プログラム順においてサンプル操作よりも後の参照命令を追跡することであろう。
【0090】
図10に示されるように、非成立分岐が参照命令として使用されるべきではない場合、参照命令アドレスインジケータは、サンプル成立分岐の後の次成立分岐のアドレスを示すことができる。例えば、図7の成立分岐218がサンプリングされた場合、分岐218のサンプルレコードは、参照命令アドレスパケット内の次成立分岐240のアドレスを示すことができる。
【0091】
あるいは、上記のバイアス問題を回避するために、成立分岐と非成立分岐の両方が参照命令として使用される場合、参照命令アドレスは、(分岐が成立するか成立しないかに関係なく、及びその分岐自体がサンプリングされるかどうかに関係なく)プログラム順においてサンプル操作の後の次分岐のアドレスを指すべきであり、したがって、図7の実施例について図11に示すように、操作218のサンプルレコードは、次の非成立分岐命令234のアドレスを示すことができる。
【0092】
非成立分岐が参照命令として使用されるか否かは、プロファイリング回路52の構成レジスタ78内の構成情報に依存し得、この構成情報は、処理パイプライン4上で実行されるソフトウェアによって、及び/又はデバッグ/トレースポート75を介してデバッグ制御信号を提供する外部デバッグユニットによってプログラム可能である。一実施例では、フィルタリング回路74のフィルタ設定は、非成立分岐が参照命令として使用されるかどうかを制御することができる。フィルタが、参照命令アドレスインジケータを含む分岐サンプルレコードを出力することを可能にする場合、非成立分岐を参照命令として扱うことができるが、フィルタが、診断分析のために分岐サンプルレコードを出力することを防止する場合、非成立分岐を参照命令として扱う必要がない。
【0093】
しかしながら、別の実施例では、構成レジスタ78は、どのタイプの命令が参照命令として機能し得るかを定義する制御を、フィルタ74の制御と一緒に含むことができ、実行される分析のタイプに応じて、感知可能な組み合わせを作成することをソフトウェアにゆだねることができる。例えば、フィルタ設定と参照命令の定義とのミスマッチの組み合わせは、上述のバイアスを引き起こす場合があるが、にもかかわらず、プロファイリングを行う分析ソフトウェアが、信頼できない情報を無視するように、プロファイルを生成するときに注意を払う限り、そのようなミスマッチの組み合わせに従ってサンプルレコードを出力することは問題にならないであろう。例えば、ソフトウェアは、フィルタ74を完全に無効にすることを望む可能性があり、それにより、各サンプルがフィルタによって廃棄されるプロファイリング情報(イベント、待ち時間など)を含むために、全範囲の操作がサンプリングされる。バイアスのかかっていないホットスポットプロファイルを作成するために、たとえ出力サンプルレコードが、他の目的のために使用されている非成立分岐のサンプルレコードを含むとしても、ソフトウェアは、成立分岐のサンプルレコードに出力された参照命令アドレスパケットのみを選ぶように注意を払うことができる。したがって、ソフトウェアは、参照アドレス基準及びフィルタリング基準を独立して制御することができることを望む場合がある。ソフトウェアがバイアスのかかっていないプロファイルを得ることができる処理装置2のアーキテクチャを提供するためには、ソフトウェアによって所望される場合、プロファイリング回路52が非成立分岐を参照命令として扱うことができるよう確実にサポートすることで十分であるが、この機能を常に使用する、又は任意の特定のセットのフィルタ設定に使用されるように要求することは必須ではない。
【0094】
図7~11の実施例では、参照命令アドレスパケットは、分岐命令についてのみ含まれ、選択された場合、他のタイプのサンプル操作については含まれない。サンプル操作として選択された場合に、他の操作が参照命令アドレスを追跡するかどうかは任意選択である。
【0095】
図12及び図13は、参照命令が所与の命令自体である(所与の命令が直近の成立若しくは非成立分岐の直後に続く場合)又はプログラム順において所与の命令の先行命令である実施例において、サンプルレコードの参照命令アドレスを設定するための方法を示すフロー図である。このアプローチでは、監視回路70は、サンプル操作について取得されたサンプルレコードの参照命令アドレスインジケータを設定するために使用される追跡命令インジケータを記憶する記憶要素を含むことができる。様々なタイプのリセットイベントは、追跡命令インジケータを更新させ、次いで、後続のサンプル操作が発生したときに、参照命令アドレスインジケータを、追跡命令インジケータに基づいて設定することができる。
【0096】
図12は、追跡命令インジケータのメンテナンスを示す。ステップ300で、監視回路70は、成立分岐が実行段階12によって処理されたかどうかを判定し、処理されている場合、ステップ302で、追跡命令インジケータがリセットされ、有効であると示される。追跡命令インジケータは、様々な方法で表すことができる。一実施例では、追跡命令インジケータは、アドレスを直接識別することができる。この場合、ステップ302で、追跡命令インジケータは、成立分岐(すなわち、成立分岐の分岐ターゲットアドレス)に続く命令のアドレスに設定することができる。しかしながら、別のアプローチは、追跡命令インジケータがカウンタとして機能して、リセット追跡命令インジケータがリセットされた点から処理された命令の数をカウントすることであり得る。そのような実施形態では、ステップ302で、追跡命令インジケータをゼロにリセットすることができる。その後の命令が処理されると、その後の各処理された命令に応答してカウンタをインクリメントすることができる。
【0097】
成立分岐に遭遇しなかった場合、ステップ304で、非成立分岐が参照命令として使用され、非成立分岐が参照命令として使用されるべきかどうかが判定される(例えば、これは、(a)フィルタリング回路74によって適用されるフィルタ基準が、診断分析のために利用可能とすることが許可されると指定するか、(b)非成立分岐のサンプルレコードが参照命令アドレスインジケータを指定することが許可されるときであり得る)。はいである場合、ステップ302で、追跡命令インジケータがリセットされ、プログラム順において非成立分岐の直後の次命令のアドレスを示すように追跡命令インジケータを設定することによって、又は上述のようにカウンタをゼロにリセットすることによって有効とされる。これにより、直近分岐が非成立分岐であったサンプリングされた成立/非成立分岐操作が、直近成立分岐の分岐ターゲットアドレスではなく、直近の非成立分岐後の命令を示す参照命令アドレスインジケータを有することを確実にして、上記の偏り問題を回避する。
【0098】
いいえの場合、ステップ308で、プロファイリングが、プロファイリングが以前に無効化されたときの前の実行期間後に、新たに有効化されたかどうかが判定される。開発者は、プログラム全体についてサンプルレコードを収集することに関心がなく、特定のセクションに焦点を合わせることを望む場合がある。したがって、プロファイリング回路52は、構成レジスタ78内のユーザ構成情報に基づいてセットされた特定の事前構成された命令アドレスで有効化又は無効化されるプロファイリングの機能をサポートすることができる。プロファイリングが有効化されると、追跡命令インジケータ内の情報が信頼できない場合があり、したがって、この点で、ステップ302で、例えば、プロファイリングが有効化された点を表す命令のアドレスを示すように追跡命令インジケータを更新することによって、又はカウンタをゼロにリセットすることによって、追跡命令インジケータをリセットすることができる。
【0099】
ステップ310で、監視回路は、例外が採用されたかどうかを判定することができ、採用されている場合、テップ302に進み、例えば、例外が採用された点での命令のアドレスを示すように命令アドレスを設定することによって、又はカウンタをゼロにリセットすることによって、追跡命令インジケータをリセットすることができる。同様に、ステップ312で例外復帰が行われる場合、追跡命令インジケータは、例えば、命令アドレスを例外復帰アドレス(例外復帰処理のアドレス)を示すように設定することによって、ステップ302でリセットすることができる。これにより、割り込まれたプロファイリング中のプログラムを表すものではない例外ハンドラの処理中に実行される操作によって、追跡命令インジケータが歪むことが防止される。
【0100】
ステップ300~312でチェックされたイベントのタイプの全てが、所与の実施態様に適用可能であるとは限らず、いくつかの実施態様は、これらのイベントのサブセットのみをチェックすることができることが理解されよう。また、図12は、一定の順序で実行される連続した一連のチェックを示しているが、他の実施態様は、これらのチェックを異なる順序で実行することができるか、又は複数のチェックを並行して実行することができることが理解されよう。
【0101】
図12の実施例では、ステップ302で、追跡命令インジケータはリセットされるが、有効なままである。点線に示されるように、代替策は、ステップ308、310、又は312で検出されたイベントのうちの1つが発生する場合、追跡命令インジケータをステップ306で無効にされ得ることであり得る。サンプル操作が処理されたときに追跡命令インジケータが無効にされる場合、サンプルレコードは、参照命令アドレスインジケータを省略するか、又は参照命令アドレスインジケータが無効であるというインジケーションを含むことができる。
【0102】
上述のように、いくつかの実施態様では、サンプル操作自体の処理はまた、追跡命令インジケータをリセット又は無効化することもできる。
【0103】
図13は、追跡命令インジケータがどのように使用されて、サンプルレコードの参照命令アドレスインジケータを設定することができるかを示すフロー図である。ステップ320で、プロファイリング回路52は、サンプル操作が処理されるかどうかを検出する。サンプル操作が検出されると、監視回路70は、サンプル操作の挙動に関する情報を収集する。ステップ322で、サンプル操作によって表される特定の操作タイプについて、参照命令アドレスインジケータを含めることがサポートされ、有効化されているかどうかが判定される。参照命令アドレスインジケータを含めることは、サンプル操作の全てのタイプに対してサポートされない場合がある。例えば、いくつかの実施例では、参照命令アドレスインジケータは、(実施態様に応じて)分岐操作の、又は非成立分岐ではなく成立分岐のみのサンプルレコードに含めることができる。参照命令アドレスインジケータを含めることがサポートされるこれらの操作タイプの中でも、構成レジスタ78は、参照命令アドレスインジケータを有効にするか、又は無効にするかを示す構成データを指定することができる。したがって、サンプル操作として選択された現在の操作のいずれかが、参照命令アドレスインジケータがサポートされるタイプではない場合、又は構成データが、参照命令アドレスインジケータが含まれるべきではないことを示す場合、ステップ324で、参照命令アドレスインジケータは、サンプルレコードから省略される。
【0104】
参照命令アドレスインジケータが現在のサンプル操作についてのサンプルレコードに含まれる場合、ステップ326で、プロファイリング回路52は、図12に記載されるように維持された追跡命令インジケータが現在有効であるかどうかを判定し、有効ではない場合、ステップ324と同様に参照命令アドレスインジケータが省略され得る、又は代替的に、サンプルレコードは、参照アドレス命令インジケータが無効であるという明示的なインジケーションを含むことができる。無効な参照アドレスを示すか、又はそれを完全に省略するサポートを提供することによって、参照アドレスとして不適切なアドレスを含むことで引き起こされるプロファイルへの統計バイアスが回避される。
【0105】
一方、追跡命令インジケータが有効である場合、ステップ328で、有効な参照命令アドレスインジケータが、サンプル操作のサンプルレコードに含まれ、参照命令アドレスインジケータの値は、追跡命令インジケータに基づいて設定される。参照命令アドレスインジケータの特定のフォーマットは変更し得る。追跡命令インジケータが特定の命令のアドレスを示す場合、これは、上記の図8図11の実施例と同様に、参照命令アドレスインジケータとして明示的に出力することができ、その結果、参照命令アドレスインジケータは、参照命令アドレスの絶対値を示す。代替は、サンプル操作自体に関連付けられた命令の命令アドレス(PC)に対して計算された相対アドレスとして参照命令アドレスインジケータを示すことによって、サンプルレコードを圧縮することであり得る。追跡命令インジケータ内に設定された参照アドレスとサンプル操作に関連付けられた現在のプログラムカウンタアドレスとの間の差を判定し、参照命令アドレスインジケータとして符号化することができる。もう1つのオプションは、上述したように、追跡命令インジケータが、カウンタのリセット以降に処理された命令の数をカウントする命令カウントである場合、参照命令アドレスインジケータは、追跡命令インジケータによって表される命令カウントと等しく設定され得ることである。取得された特定の形態に関係なく、参照命令アドレスインジケータは、介在する命令の実行が連続しているプログラム順における先行命令の位置の判定を可能にする情報を提供する。
【0106】
図14は、参照アドレスによって示される参照命令が、サンプル操作よりもプログラム順における後続命令であり得る実施形態で参照アドレスを追跡するための代替アプローチを示す。例えば、参照命令は、上述のリセットイベント(プロファイリングの有効化、例外の採用、例外復帰)のうちの1つが発生するサンプル操作又は命令後の次の成立又は非成立分岐であり得る。このアプローチでは、分岐に遭遇するたびにリセットされる追跡命令インジケータを維持する必要はない。代わりに、監視回路70は、サンプル操作が検出されるのを待機し、次いで、参照アドレスインジケータを設定するために次の関連イベントを監視することができる。
【0107】
したがって、ステップ350で、監視回路70は、サンプル操作が識別されたかどうかを検出し、いいえである場合、サンプリング回路52によって選択された次のサンプル操作が識別されることを待機する。いったんサンプル操作が識別されると、ステップ352で、サンプルレコードに参照命令アドレスインジケータを含むことが、サンプル操作に対応する操作タイプに対してサポートされ、かつ有効化されているかどうかが判定される(図13のステップ322)。参照命令アドレスインジケータを含めることが、現在のサンプル操作に対してサポートされていないか、又は現在無効化されている場合、方法は、ステップ350に戻り、後のサンプル操作を待つ。このシナリオでは、他の情報が、サンプル操作のサンプルレコードに依然として含まれ得ることが理解されよう。
【0108】
参照命令アドレスインジケータを含めることが、サンプル操作として検出された現在の操作タイプに対してサポートされ、かつ有効化されている場合、ステップ354で、監視回路70は、次のうちのいずれかの磁界の発生について監視する:成立分岐、非成立分岐(構成情報78が、非成立分岐が参照命令として機能するべきであることを指定する場合)、プロファイリングが無効化された以前の期間後のプロファイリングの有効化、例外の採用、又は例外復帰イベント(及び、いくつかの実施態様では、別のサンプル操作の処理。しかし、実際には、次のサンプル操作が検出される前に、他のタイプのイベントのいずれも発生しない可能性は比較的低い)。次に、これらのイベントのいずれかが発生する場合、ステップ356で、次の発生が分岐であったかどうかが判定され、分岐であった場合、ステップ358で、有効な参照命令アドレスインジケータが、情報を示すサンプル操作のサンプルレコードに含まれる。例えば、示される参照命令アドレスは、分岐の命令アドレスを絶対値として、又はサンプル操作に関連付けられた命令のアドレスに対する相対値として直接示すことができる、又は示された参照命令アドレスは、サンプル操作と分岐との間の命令の数のカウントを示すことができる(カウンタが使用される場合、サンプル操作が検出されるときにステップ350でカウンタをリセットすることができる)。
【0109】
ステップ354に示されるリストから発生したイベントが分岐以外のイベントである場合、ステップ360で、発生イベントに関連付けられた参照命令の参照アドレスを示す参照命令アドレスインジケータをサンプルレコードに含めることができる。参照アドレスは、絶対値、相対値、又はステップ354で検出されたイベントに関連付けられた点でのサンプル操作の命令と命令との間の命令の数を示すカウントとして示され得る。参照アドレスは、プロファイリングが有効化された又は例外が採用された点を表す命令のアドレスであり得るか、又は例外復帰アドレスに対応し得る。あるいは、有効な参照命令アドレスインジケータを示す代わりに、ステップ360で、参照命令アドレスインジケータは、サンプルレコードから省略され得るか、又は無効であると示され得る。
【0110】
本発明の例示的な実施形態が添付の図面を参照して本明細書で詳細に説明されているが、本発明はこれらの正確な実施形態に限定されないこと、及び様々な変更及び修正が、当業者によって、添付の特許請求の範囲によって定義されている本発明の範囲から逸脱することなく、実施形態に行われ得ることが理解されよう。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
【国際調査報告】