2

他のプロセスの情報を除外しながら、インテル パフォーマンス カウンターモニターを使用して、特定のプロセスの実行 (つまり、Branch Trace Store からのそのブランチ) を監視するにはどうすればよいですか?

4

2 に答える 2

2

BTS (ブランチ トレース ストア) とパフォーマンス モニタリング イベント/カウンター (CPU 内部、その PMU ブロック) は非常に異なるものであることを知っておく必要があります。

分岐トレース ストアは、取られたすべての分岐 (eip のペア - 分岐命令の最初と分岐ターゲットの 2 番目。各ペアにフラグのワードも追加されます) をメモリの特別な領域に記録するときの CPU の機能です。その結果は、実行されたコード ブロック (基本ブロック) のシングル ステップと記録順序に非常に似ています。これは、すべての分岐がコンパイラーによってインストルメント化されるときに、コンパイラーの支援を受けてコード カバレッジを行うようなものです。

BTS は MSR_DEBUGCTLA MSR のほんの一部です (インテル x86 レジスターです)。このレジスターは (Linux のように) スレッド固有であることはほぼ確実なので、スケジューラーをフックする必要はありません。Windows でこの MSR を使用するがいくつかあります。しかし、別のビットが使用されます。また、DS_AREA を正しく設定することを忘れないでください。したがって、本当に BTS が必要な場合は、Intel Arch マニュアル(ボリューム 3b、パート「デバッグとパフォーマンスの監視」、セクション「19.7.8 ブランチ トレース ストア (BTS)」) のコピーを取り、BTS を手動でプログラムします。最も難しい部分は、DS 領域のオーバーフローを処理することです (カスタムの割り込みハンドラーが必要です)。

実行されたコードのトレースではなく、プログラムの統計 (実行された命令の数、分岐の予測の精度、ここでの間接分岐の数など) を知りたい場合は、パフォーマンス監視イベント (別名「正確なイベント ベース」) を使用する必要があります。サンプリング」(PEBS)。Intel Vtune はこれを行います。リンクされたIntel PBSでさえ、他のツールがいくつかあるはずです。唯一の問題 (これは無料のツールでは少し難しくなります) は、必要なイベントの名前を見つけることです。命令の実行に基づくイベントは、常に何らかのスレッドにバインドされます。

イベントベースのサンプリングとは何を意味しますか: イベントに対して 1000 などの制限を設定できます。BR_INST_EXEC.COND (「実行された条件付きニア分岐命令の数」) または BR_INST_EXEC.DIRECT (「呼び出しと間接分岐を除くすべての無条件ニア分岐命令」)、一度に最大 2 ~ 4 個のイベント。その後、CPU はこのイベントに対応するすべての状況をカウントします。1000 番目のシチュエーションになると、EIP 命令に対してイベント (割り込み) が生成されます。サンプリングを使用すると、コードの動作の詳細な統計を簡単に取得できます。制限を非常に低い値に設定し、eip のイベントを合計しない場合は、トレースが取得されます;)

PEBS を使用すると、CPU にとってコードがどれほど悪いか、予測を誤った分岐がどこにあるか、どの命令がキャッシュからのデータを待機しているかなどを知ることができます。何百ものイベントがあります (Volume 3b の付録 A)。

PS BTS/win 用のコードがあります: http://blog.csdn.net/quincy_hu/article/details/4053163

PPS には、PEBS と BTS の両方の PMU プログラミングの短い概要があります。software.intel.com/file/30320 Nehalem 用ですが、Sandy でも実際に使用できます。

于 2012-05-18T00:26:24.750 に答える
1

この情報を取得するために、MSR を直接読み取る独自の計測プロファイラーを構築する必要がありました。パフォーマンス カウンター モニターのソース コードは、それらを読み取るカーネル ドライバーを構築する方法を示しています。

以前は VTune を使用していましたが、アプリで実行するとクラッシュします。(Linux バージョンで OProfile を試したところ、実際にカーネル全体がクラッシュし、マシンの電源を入れ直さなければならなくなりました。これはかなりおかしな話でした。)

于 2012-05-18T00:32:22.103 に答える