EN JA
PMC_CAPABILITIES(3)
PMC_CAPABILITIES(3) FreeBSD Library Functions Manual PMC_CAPABILITIES(3)

名称

pmc_capabilities, pmc_cpuinfo, pmc_ncpu, pmc_npmc, pmc_pmcinfo, pmc_width性能のモニタリングカウンタに関する情報を検索する

ライブラリ

Performance Counters Library (libpmc, -lpmc)

書式

#include < pmc.h>

int
pmc_capabilities( pmc_id_t pmc, uint32_t *caps);

int
pmc_cpuinfo( const struct pmc_cpuinfo **cpu_info);

int
pmc_ncpu( void);

int
pmc_npmc( int cpu);

int
pmc_pmcinfo( int cpu, struct pmc_pmcinfo **pmc_info);

int
pmc_width( pmc_id_t pmc, uint32_t *width);

解説

これらの関数は、性能モニタリングハードウェアに関する情報を検索します。

関数 pmc_capabilities() は、PMC のハードウェアケーパビリティを検索します。引数 pmc は、 pmc_allocate() への前の呼び出しで取得された PMC ハンドルです。関数は、引数 caps を、引数 pmc によって示された PMC によってサポートされたケーパビリティのビットマスクに設定します。 PMC ケーパビリティは、 pmc(3) に説明されています。

関数 pmc_cpuinfo() は、システムの CPU に関する情報を検索します。引数 cpu_info は、システムの CPU に関する情報で内部の構造体を指すように設定されます。呼び出し側は、このポインタ値を解放するべきではありません。この構造体には、次のフィールドがあります:

pm_cputype
CPU タイプを指定します。
pm_ncpu
システムの CPU の数を指定します。
pm_npmc
CPU 毎の PMC 行の数を指定します。
pm_nclass
システムの PMC の異なったクラスの数を指定します。
pm_classes
システムの PMC のそれぞれのクラスの特性について記述する struct pmc_classinfo 記述子の配列を含んでいます。

関数 pmc_ncpu() は、システムの最大の CPU の数を返す便利な関数です。まばらに番号付けられた CPU をサポートするシステムでは、すべての CPU が物理的に存在するとは限りません。アプリケーションは、存在しない CPU に対処するように準備する必要があります。

関数 pmc_npmc() は、引数 cpu によって指定された CPU で利用可能な PMC の数を返す便利な関数です。

関数 pmc_pmcinfo() は、引数 cpu によって指定された CPU の PMC ハードウェアの現在の状態に関する情報を返します。引数 pmc_info によって指定された位置は、CPU の 1 つの PMC の状態についてそれぞれ記述する struct pmc_info 構造体の配列へのポインタに設定されます。これらの構造体は、次のフィールドを含んでいます:

pm_name
PMC のための人間に読み込み可能な名前。
pm_class
PMC のための PMC のクラス。
pm_enabled
PMC が有効にされているなら、0 以外です。
pm_rowdisp
この PMC のための PMC 行の傾向。行の傾向は、 hwpmc(4) に文書化されています。
pm_ownerpid
ハードウェアが使用中であるなら、PMC の所有者のプロセス ID です。
pm_mode
pmc(3) で説明される PMC モード。
pm_event
ハードウェアが使用中であるなら、測定される PMC イベントです。
pm_flags
ハードウェアが使用中であるなら、フラグは、PMC と関連しています。
pm_reloadcount
サンプリング PMC に関して、再ロードカウントは、PMC と関連しています。

関数 pmc_width() は、PMC に関連しているハードウェアカウンタのビット幅を検索するために使用されます。引数 pmc は、 pmc_allocate() への前の呼び出しで所得された PMC ハンドルです。関数は、引数 width によって指された位置を、 PMC pmc に関連している物理的なカウンタの幅に設定します。

戻り値

関数 pmc_ncpu() と pmc_npmc() は、成功するなら、正の整数を返します。そうでなければ、値 -1 が返され、グローバル変数 errno は、エラーを示す値に設定されます。

関数 pmc_capabilities(), pmc_cpuinfo(), pmc_pmcinfo() と pmc_width() は、成功するなら、0 を返します。そうでなければ、値 -1 が返され、グローバル変数 errno は、エラーを示す値に設定されます。

エラー

関数 pmc_capabilities() への呼び出しは、次のエラーで失敗します:
[ EINVAL]
関数への引数が、不正でした。

関数 pmc_cpuinfo(), pmc_ncpu() と pmc_npmc() への呼び出しは、次のエラーで失敗します:

[ ENXIO]
PMC ライブラリを初期化する pmc_init() への前の呼び出しが、失敗しました。

関数 pmc_pmcinfo() への呼び出しは、次のエラーで失敗します:

[ EINVAL]
引数 cpu が、不正です。
[ ENXIO]
引数 cpu が、無効にされた CPU または、不足している CPU を指定しました。

関数 pmc_width() への呼び出しは、次のエラーで失敗します:

[ EINVAL]
関数への引数が、不正でした。
September 22, 2008 FreeBSD