パフォーマンスモニタリングの概要
パフォーマンスモニタリングについての簡単な説明
[パフォーマンスモニタリング]ウィンドウには、Cortex-A、よび Cortex-R、および一部の Cortex-M デバイスで使用可能なフォーマンスモニタリングユニット (PMU) を介して、イベントのカウントまたは CPU クロックサイクルを表示します。Cortex-M デバイスは、Armv8.1M アーキテクチャをもとにしています。
[パフォーマンスモニタリング]画面の PMU からイベントカウンタまたはCPU サイクルをモニタするには、まず画面で設定を作成し、モニタするイベントを選択する必要があります。
パフォーマンスモニタリングを使用するための要件と制限
ハードウェアデバッガシステムでパフォーマンスモニタリングを使用するには、以下の要件および制限を考慮してください。
この機能にはI-jetまたはJ-Linkプローブが必要です。
ターゲットデバイスには、PMU が搭載されている必要があります。異なるPMUプロトコルバージョンがあります。C-SPY はPMUv1 以降のすべてのバージョンを使用できます。
注:Arm v8-A(またはそれ以降)のPMUデバイスは、C-SPY パフォーマンスモニタリングウィンドウではサポートされません。
[自動更新]を使用するには、Cortex-AまたはCortex-Rデバイスで、IAR Embedded Workbenchにデバッグアクセスポインタ(DAP)を介してPMUに接続できるドライバがあるプローブが必要です。現在I-jetファミリーのプローブのみで使用できます。ターゲットはメモリマップドレジスタを持つ必要があります。これらの要件を満たしてない場合は、アプリケーションの実行が停止されたときイベントカウンタの値のみが更新されます。PMUが搭載されたCortex-Mの場合、自動更新を有効にするためにDAPは必要ありませんが、C-SPY では現在I-jetファミリーのプローブのみを公式にサポートしています。
警告
[パフォーマンスモニタリング]画面を開いているとき、[レジスタ]画面の(表示されている場合)の PMU レジスタは変更できず、その値は[パフォーマンスモニタリング]画面の値と確実に同期されません。
注記
Armv7 および Armv8 デバイスの場合、PMU カウンタは 32 ビットレジスタを使用しますが(Armv8.1M デバイスの場合は、PMU カウンタは 16 ビットのレジスタのみを使用)、パフォーマンスモニタリングウィンドウの値は、カウンタオーバーフローを考慮して 64 ビットデータが表示されます。
イベントタイプ
PMU は異なるタイプのイベントをカウントするように設計されています。common events と implementation-defined イベントの 2 つのカテゴリがあります。
Common events
common event を実装している場合、ARM architecture 仕様で提供された仕様に準拠する必要があります。[パフォーマンスモニタリング]画面には、これらのイベントの標準リストが表示されます。ターゲットデバイスで Common events が実装されてない場合、カウントはインクリメントされません。そのため、使用しているデバイスにイベントが実装されているかどうかを把握する必要があります。
Implementation-defined events
implementation-defined event はターゲットデバイスにより依存するので、チップ製造元がより自由に設計することができます。ただし、Arm は実装が Armアーキテクチャ仕様の定義に準拠することを強く推奨しています。
C-SPY の implementation-defined event リストには、現在のデバイスに固有のイベントを含めることができます。[パフォーマンスモニタリング]ウィンドウは、このリストを作成および変更が可能なテキストファイルとしてロードおよび保存するための機能を管理します。アーキテクチャ固有のimplementation-defined event リストの例は、arm\src\PMU ディレクトリにあります。このリストは、C-SPY の終了時に、現在の IAR Embedded Workbench プロジェクトフォルダのプロジェクト設定ファイルにも自動的に保存されます。
カウンタオーバーフローの検出
PMU カウンタの最上位ビット(32 ビットレジスタの 31 ビット)を 1 から 0に変更すると、カウンタオーバーフローが発生します。この変更は、[32ビットモード]の PMOVSR レジスタ、および[64 ビットモード]のPMOVSR_EL0(Armv8 デバイスでのみ利用可能)で確認できます。Armv8.1Mデバイスの場合は、レジスタは PMU_OVSR という名前です。
[自動更新]が有効な場合は、検出されるとオーバーフローがインクリメントされ、[パフォーマンスモニタリング]ウィンドウの[オーバーフロー]列に表示されます。
[自動更新]が無効な場合は、C-SPY はオーバーフローを追跡し続けることができなくなり、[値]列のカウンタの値が信頼できなくなります。実行を一時停止しカウンタでオーバーフローが検出されると、C-SPY は、実行中に 1 回以上オーバーフローが発生したかどうかを把握することができません。通常、関連のカウンタで[オーバーフロー]列にゼロ (0) より小さい値が表示されると、[値]列の値は信頼できません。
まれに、[値]列の値に、実際の値の前にアスタリスク (*) が表示され、影響のあるカウンタ値の上にマウスを移動させると、ツールチップに[オーバーフロー]と表示されます。これは、そのカウンタのオーバーフローが設定されているが、C-SPY がまだその値を更新していなくて、[オーバーフロー]列のオーバーフローカウンタをインクリメントしていることを意味します。