プログラミングインタフェース

設定インタフェース

cpc_set_t *cpc_set_create(cpc_t *cpc);
int cpc_set_destroy(cpc_t *cpc, cpc_set_t *set);
int cpc_set_add_request(cpc_t *cpc, cpc_set_t *set, const char *event,
          uint64_t preset, uint_t flags, uint_t nattrs,
          const cpc_attr_t *attrs);
int cpc_set_request_preset(cpc_t *cpc, cpc_set_t *set, int index,
          uint64_t preset);

不透明なデータ型 cpc_set_t は要求のコレクションを表します。これらのコレクションはセットと呼ばれます。cpc_set_create() 関数は空のセットを作成します。cpc_set_destroy() 関数はセットを削除して、セットが使用していたメモリーをすべて解放します。セットを削除すると、そのセットが使用していたハードウェア資源が解放されます。

cpc_set_add_request() 関数は要求をセットに追加します。要求のパラメータは次のとおりです。

event

カウントのイベント名を指定する文字列。

preset

カウンタの初期値に使用される 64 ビットの符号なし整数。

flags

要求フラグのグループに適用される論理和操作の結果。

nattrs

attrs が指す配列内の属性の数。

attrs

cpc_attr_t 構造体の配列へのポインタ。

有効な要求フラグは次のとおりです。

CPC_COUNT_USER

このフラグを使用すると、CPU がユーザーモードで実行している間に発生するイベントをカウントできます。

CPC_COUNT_SYSTEM

このフラグを使用すると、CPU が特権モードで実行している間に発生するイベントをカウントできます。

CPC_OVF_NOTIFY_EMT

このフラグは、ハードウェアのカウンタオーバーフローの通知を要求します。

CPC インタフェースは、cpc_attr_t 構造体の配列として属性を渡します。

cpc_set_add_request() 関数が正常終了して戻った場合、この関数はインデックスを返します。インデックスは、cpc_set_add_request() 関数の呼び出しにより追加された要求が生成したデータを参照します。

cpc_set_request_preset() 関数は、事前に設定された要求の値を変更します。これによって、オーバーフローしたセットを新しい事前設定で再構築できます。

cpc_walk_requests() 関数は、ユーザーが提供した action() ルーチンを cpc_set_t 内の要求ごとに呼び出します。arg パラメータの値は、非解釈でユーザーのルーチンに渡されます。cpc_walk_requests() 関数を使用すると、アプリケーションはセット内の要求ごとに構成を出力できます。cpc_walk_requests() 関数の構文は、次のとおりです。

void cpc_walk_requests(cpc_t *cpc, cpc_set_t *set, void *arg,
void (*action)(void *arg, int index, const char *event,
uint64_t preset, uint_t flags, int nattrs,
            const cpc_attr_t *attrs));