EN JA
PMC.MIPS24K(3)
PMC.MIPS24K(3) FreeBSD Library Functions Manual PMC.MIPS24K(3)

名称

pmc.mips24kMIPS24K ファミリ CPU のための測定イベント

ライブラリ

Performance Counters Library (libpmc, -lpmc)

書式

#include < pmc.h>

解説

MIPS PMC は、MIPS 24k と MIPS ファミリの他のプロセッサに存在します。

各々 32 ビットの幅がある、ハードウェアによってサポートされた 2 つのカウンタがあります。

MIPS PMC は、次に文書化されています。 MIPS32 24K Processor Core Family Software User's Manual, MIPS Technologies Inc., December 2008.

イベント指定子 (プログラマブル PMC)

MIPS プログラマブル PMC は、次のイベントをサポートします:
CYCLE
(Event 0, Counter 0/1) サイクルの合計数。性能カウンタは、トップレベルのゲート制御されたクロックによってクロックの計測されます。コアが存在するそのクロックゲート者 (gater) で構築されているなら、カウンタのどれも増加しません、一方、クロックは、WAIT 命令のために - 停止されます。
INSTR_EXECUTED
(Event 1, Counter 0/1) 完了した命令の合計数。
BRANCH_COMPLETED
(Event 2, Counter 0) 完了した分岐命令の合計数。
BRANCH_MISPRED
(Event 2, Counter 1) 完成したすべての分岐命令をカウントしますが、予測ミスされました。
RETURN
(Event 3, Counter 0) 完了したすべての JR R31 命令をカウントします。
RETURN_MISPRED
(Event 3, Counter 1) RPS を予測に使用して、完了したすべての JR $31 命令をカウントしますが、予測ミスされました。
RETURN_NOT_31
(Event 4, Counter 0) すべての JR $xx ($31 ではない) と JALR 命令 (間接ジャンプ) をカウントします。
RETURN_NOTPRED
(Event 4, Counter 1) RPS の使用が無効にされるなら、JR $31 は、予測されません。
ITLB_ACCESS
(Event 5, Counter 0) パイプラインの命令フェッチ段階で現われるフェッチのために、固定マップを使用しないか、またはマップされていない空間でない、 ITLB アクセスをカウントします。アドレスが (キャッシュミスの場合のように) パイプから 2 度フェッチされるなら、その命令は、 2 つの ITLB アクセスとしてカウントします。各フェッチが 2 つの命令を取得するので、ダブルワードごとにマークされた 1 つのアクセスがあります。
ITLB_MISS
(Event 5, Counter 1) 別のミスの後ろにあるもの以外の ITLB のすべてのミスをカウントします。ミスを戻すために処理を戻すことができません、したがって、それらが無視されます。また、アドレスエラーのいくつかの形式があるなら、それらは、無視されます。
DTLB_ACCESS
(Event 6, Counter 0) マップされていないアドレス空間のものを含む DTLB アクセスをカウントします。
DTLB_MISS
(Event 6, Counter 1) DTLB ミスをカウントします。単一のミスとしてカウントされる詰め替えされる取得されているたった 1 つの DTLB エントリの結果となるミスを戻すために戻ります。
JTLB_IACCESS
(Event 7, Counter 0) 命令 JTLB アクセスは、ITLB ミスと同様に、正確にカウントされます。
JTLB_IMISS
(Event 7, Counter 1) 無効のトランザクションで一致しないか、または一致する結果となる命令 JTLB アクセスをカウントします。
JTLB_DACCESS
(Event 8, Counter 0) データ JTLB アクセス。
JTLB_DMISS
(Event 8, Counter 1) 無効のトランザクションで一致しないか、または一致する結果となるデータ JTLB アクセスをカウントします。
IC_FETCH
(Event 9, Counter 0) 命令キャッシュがアクセスされるごとにカウントします。すべてのやり直し、無駄なフェッチなど、がカウントされます。例えば、分岐に続いて、たとえ予測が取られても、フォールスルー (fall through) アクセスがカウントされます。
IC_MISS
(Event 9, Counter 1) バス要求の結果となるすべての命令キャッシュミスをカウントします。
DC_LOADSTORE
(Event 10, Counter 0) キャッシュされたロードと格納をカウントします。
DC_WRITEBACK
(Event 10, Counter 1) 置換または cacheops のためにメモリに書き戻されるキャッシュラインをカウントします。
DC_MISS
(Event 11, Counter 0/1) キャッシュのミスしたロードと格納をカウントします。
LOAD_MISS
(Event 13, Counter 0) キャッシュのミスしたキャッシュ可能なロードの数をカウントします。
STORE_MISS
(Event 13, Counter 1) キャッシュのミスしたキャッシュ可能な格納の数をカウントします。
INTEGER_COMPLETED
(Event 14, Counter 0) 浮動小数点でない、コプロセッサでない 2 つの命令。
FP_COMPLETED
(Event 14, Counter 1) 完了した浮動小数点命令。
LOAD_COMPLETED
(Event 15, Counter 0) 完了した整数とコプロセッサのロード。
STORE_COMPLETED
(Event 15, Counter 1) 完了した整数とコプロセッサの格納。
BARRIER_COMPLETED
(Event 16, Counter 0) 完了した直接ジャンプ (とリンク) 命令。
MIPS16_COMPLETED
(Event 16, Counter 1) 完了した MIPS16c 命令。
NOP_COMPLETED
(Event 17, Counter 0) 完了した NOP。これは、汎用登録に通常書き込まれるすべての命令を含んでいますが、宛先登録が r0 に設定されたところです。
INTEGER_MULDIV_COMPLETED
(Event 17, Counter 1) 完了した整数の乗算と除算命令。 (MULxx、DIVx、MADDx、MSUBx)。
RF_STALL
(Event 18, Counter 0) 以前の 2 つのイベントの両方を含んでいる、命令が IFU から ALU (RF 段階は、進みません) に発行されないところのサイクルの合計の数をカウントします。 RT_STALL は、それらの合計と異なりますが、両方のストールがアクティブなときのサイクルが一度だけカウントされるためです。
INSTR_REFETCH
(Event 18, Counter 1) (uTLB 以外の) トラップを再生。
STORE_COND_COMPLETED
(Event 19, Counter 0) 完了した条件付きの格納。失敗した格納を含む、すべてのイベントをカウントする。
STORE_COND_FAILED
(Event 19, Counter 1) メモリを更新しなかった条件付きの格納命令。注: このイベントと SC 命令カウントのイベントが、特定のオペレーティングモードでカウントするように設定することができますが、イベントのタイミングは、たいへん異なり、観測されるオペレーティングモードは、測定された比率でいくつかの間違いを引き起こして、それらの間に変更するかもしれません。
ICACHE_REQUESTS
(Event 20, Counter 0) これは、実際に試みられる PREF のみをカウントすることに注意してください。キャッシュされていないアドレスへの PREF またはトランザクションエラーがあるものは、カウントされません。
ICACHE_HIT
(Event 20, Counter 1) キャッシュのヒットした PREF 命令をカウントする。
L2_WRITEBACK
(Event 21, Counter 0) 置換または cacheops のためにメモリに書き戻されたキャッシュラインをカウントする。
L2_ACCESS
(Event 21, Counter 1) L2 キャッシュへのアクセスの数。
L2_MISS
(Event 22, Counter 0) L2 キャッシュで失敗したアクセスの数。
L2_ERR_CORRECTED
(Event 22, Counter 1) 検出され修正された L2 キャッシュの単一のビットエラー。
EXCEPTIONS
(Event 23, Counter 0) 取られたあらゆるタイプの例外。
RF_CYCLES_STALLED
(Event 24, Counter 0) LSU が fixup であり、ALU から新しい命令を受け付けることができないサイクルをカウントします。 fixup は、命令がキャッシュまたは DTLB に再アクセスする必要があるとき、生じる LSU 内のやり直しです。
IFU_CYCLES_STALLED
(Event 25, Counter 0) フェッチユニットが ALU に有効な命令を提供していないところで、サイクルの数をカウントします。
ALU_CYCLES_STALLED
(Event 25, Counter 1) ALU パイプラインが進むことができないところでサイクルの数をカウントします。
UNCACHED_LOAD
(Event 33, Counter 0) キャッシュされない、キャッシュされない加速されたロードをカウントします。
UNCACHED_STORE
(Event 33, Counter 1) キャッシュされない、キャッシュされない加速された格納をカウントします。
CP2_REG_TO_REG_COMPLETED
(Event 35, Counter 0) 完了したレジスタ命令へのコプロセッサ 2 つのレジスタ。
MFTC_COMPLETED
(Event 35, Counter 1) ロードと格納と同様に命令に、命令から移動されるコプロセッサ 2。
IC_BLOCKED_CYCLES
(Event 37, Counter 0) IFU が命令ミスがあらゆる実行可能な命令がない IFU を引き起こすために、ストールするときのサイクル。 4 つのサイクルの続くリダイレクトと同様に、ITLB ミスのためのストール無視します。
DC_BLOCKED_CYCLES
(Event 37, Counter 1) 整数パイプラインが D-cache ミスのために Load リターンデータで待つところのすべてのサイクルをカウントします。 LSU は、D-cache ミスで "long stall"シグナルを起こすことができます、その場合に、TC を待つことは、再スケジュールされるかもしれないので、他の TC は、データが返るまで、命令を実行することができます。
L2_IMISS_STALL_CYCLES
(Event 38, Counter 0) SYNC が完了するのを待って、主なパイプラインがストールされるところのサイクル。
L2_DMISS_STALL_CYCLES
(Event 38, Counter 1) Fill Store Buffer でインデックスの矛盾のために、主なパイプラインがストールするところのサイクル。
DMISS_CYCLES
(Event 39, Counter 0) データミスは、未解決ですが、必ずしもパイプラインをストールしません。これと D$ ミスのストールサイクルの間の差分は、ブロックされないキャッシュミスから再び表示することができます。
L2_MISS_CYCLES
(Event 39, Counter 1) L2 ミスは、未解決ですが、必ずしもパイプラインをストールしません。
UNCACHED_BLOCK_CYCLES
(Event 40, Counter 0) プロセッサがキャッシュされないフェッチ、ロードまたは格納でストールされるところのサイクル。
MDU_STALL_CYCLES
(Event 41, Counter 0) プロセッサがキャッシュされないフェッチ、ロードまたは格納でストールされるところのサイクル。
FPU_STALL_CYCLES
(Event 41, Counter 1) 整数パイプラインが FPU リターンデータで待つところのすべてのサイクルをカウントします。
CP2_STALL_CYCLES
(Event 42, Counter 0) 整数パイプラインが CP2 リターンデータを待つところのすべてのサイクルをカウントします。
COREXTEND_STALL_CYCLES
(Event 42, Counter 1) 整数パイプラインが CorExtend リターンデータを待つところのすべてのサイクルをカウントします。
ISPRAM_STALL_CYCLES
(Event 43, Counter 0) マルチサイクルの ISPRAM アクセスの結果であるすべてのパイプラインのバブルをカウントします。パイプラインのバブルは、IFU が ALU への命令を存在しないすべてのサイクルとして定義されます。リダイレクトがカウントされない後の、4 つのサイクル。
DSPRAM_STALL_CYCLES
(Event 43, Counter 1) DSPRAM へのアクセスを待つ命令によって作成されたストールサイクルをカウントします。
CACHE_STALL_CYCLES
(Event 44, Counter 0) パイプラインが、CACHE 命令のためにストールされるところのすべてのサイクルをカウントします。 CACHE 命令がそれ自体が ALU でストールされるところのサイクルと、 CACHE 命令によって続く命令をストールされるサイクルを含んでいます。
LOAD_TO_USE_STALLS
(Event 45, Counter 0) 整数パイプラインがロードリターンデータを待つところのすべてのサイクルをカウントします。
BASE_MISPRED_STALLS
(Event 45, Counter 1) アドレス生成へのバイパスが特別のサイクルを取るところのスキューされた ALU のためにストールされるサイクルをカウントします。
CPO_READ_STALLS
(Event 46, Counter 0) 整数パイプラインが MFC0、RDHWR 命令からのリターンデータで待つところのすべてのサイクルをカウントします。
BRANCH_MISPRED_CYCLES
(Event 46, Counter 1) これは、次の遅れのないスロット命令が実行されるまで、予測ミスされた分岐からのサイクルの数をカウントします。
IFETCH_BUFFER_FULL
(Event 48, Counter 0) 命令キャッシュミスが検出された回数をカウントしますが、両方の満たされたバッファは、既に割り付けられていました。
FETCH_BUFFER_ALLOCATED
(Event 48, Counter 1) IFU 満杯のバッファの少なくとも 1 つが割り付けられる (ミス保留中) ところのサイクルの数。
EJTAG_ITRIGGER
(Event 49, Counter 0) EJTAG 命令 Trigger Point 条件が一致した回数。
EJTAG_DTRIGGER
(Event 49, Counter 1) EJTAG Data Trigger Point 条件が一致した回数。
FSB_LT_QUARTER
(Event 50, Counter 0) 満杯の 4 分の 1 未満の満杯の格納バッファ。
FSB_QUARTER_TO_HALF
(Event 50, Counter 1) 満杯の 4 分の 1 と 2 分の 1 の間の満杯の格納バッファ。
FSB_GT_HALF
(Event 51, Counter 0) 満杯の半分を越える満杯の格納バッファ。
FSB_FULL_PIPELINE_STALLS
(Event 51, Counter 1) LSU の Fill-Store Buffer が満杯であるために、パイプラインがストールされるところのサイクル。
LDQ_LT_QUARTER
(Event 52, Counter 0) 満杯の 4 分の 1 未満のロードデータキュー (queue)。
LDQ_QUARTER_TO_HALF
(Event 52, Counter 1) 満杯の 4 分の 1 と 2 分の 1 の間のロードデータキュー。
LDQ_GT_HALF
(Event 53, Counter 0) 満杯の 2 分の 1 を超えるロードデータキュー。
LDQ_FULL_PIPELINE_STALLS
(Event 53, Counter 1) LSU の Load Data Queue が満杯であるために、パイプラインがストールされるところのサイクル。
WBB_LT_QUARTER
(Event 54, Counter 0) 満杯の 4 分の 1 未満の書き込み back バッファ。
WBB_QUARTER_TO_HALF
(Event 54, Counter 1) 満杯の 4 分の 1 と 2 分の 1 の間の書き込み back バッファ。
WBB_GT_HALF
(Event 55, Counter 0) 満杯の 2 分の 1 を超える書き込み back バッファ。
WBB_FULL_PIPELINE_STALLS
(Event 55 Counter 1) LSU の Load Data Queue が満杯であるために、パイプラインがストールされるところのサイクル。
REQUEST_LATENCY
(Event 61, Counter 0) キャッシュ可能な読み込みのカウントだけ、応答の重大な dword が返されるまで、ミスの検出からレイテンシ (latency) を測定します。
REQUEST_COUNT
(Event 61, Counter 1) 以前のレイテンシ (latency) のカウンタのために使用されるキャッシュ可能な読み込み要求の数をカウントします。

イベント名の別名

次のテーブルは、 Performance Counters Library (libpmc, -lpmc) と使用される基本的なハードウェアイベントによってサポートされた PMC から独立している別名の間のマッピングを表示しています。
Alias Event
instructions INSTR_EXECUTED
branches BRANCH_COMPLETED
branch-mispredicts BRANCH_MISPRED

歴史

pmc ライブラリは、 FreeBSD 6.0 ではじめて登場しました。

作者

Performance Counters Library (libpmc, -lpmc) ライブラリは、 Joseph Koshy <jkoshy@FreeBSD.org>によって書かれました。 MIPS のサポートは、 George Neville-Neil <gnn@FreeBSD.org>によって追加されました。
March 24, 2012 FreeBSD