perfmonctl - IA-64 の PMU
(性能監視ユニット)
のインターフェース
#include <syscall.h>
#include <perfmon.h>
long perfmonctl(int fd, int cmd, void *arg, int narg);
注:
このシステムコールには
glibc
のラッパー関数は存在しない。「注意」の節を参照。
IA-64 固有の
perfmonctl()
システムコールは PMU
(性能監視ユニット; performance
monitoring unit)
へのインターフェースを提供する。
PMU は PMD (performance monitoring data)
レジスターと PMC (performance monitoring
control)
レジスターで構成され、
ハードウェアの統計を収集する。
perfmonctl() は、 操作
cmd を
arg
で指定された入力引数で行う。
引数の数は
narg
で規定される。
fd
引数は操作対象の perfmon
コンテキストを指定する。
cmd
に指定できる値は以下のとおりである。
- PFM_CREATE_CONTEXT
-
perfmonctl(int fd, PFM_CREATE_CONTEXT, pfarg_context_t *ctxt, 1);
コンテキストを用意する。
-
fd
引数は無視される。
新しい perfmon
コンテキストを ctxt
で指定した内容で作成し、
そのファイルディスクリプターを
ctxt->ctx_fd で返す。
- ファイルディスクリプターはそれ以降の
perfmonctl()
の呼び出しで使用したり、
read(2)
を使ってイベント通知
( pfm_msg_t 型)
を読み出したりするのに使用できる。
このファイルディスクリプターは
select(2), poll(2), epoll(7)
で状態監視
(ポーリング)
することができる。
- コンテキストを破棄するには、
そのファイルディスクリプターに対して
close(2) を呼び出す。
- PFM_WRITE_PMCS
-
perfmonctl(int fd, PFM_WRITE_PMCS, pfarg_reg_t *pmcs, n);
PMC
レジスターを設定する。
- PFM_WRITE_PMDS
-
perfmonctl(int fd, PFM_WRITE_PMDS, pfarg_reg_t *pmds, n);
PMD
レジスターを設定する。
- PFM_READ_PMDS
-
perfmonctl(int fd, PFM_READ_PMDS, pfarg_reg_t *pmds, n);
PMD
レジスターを読み出す。
- PFM_START
-
perfmonctl(int fd, PFM_START, NULL, 0);
監視を開始する。
- PFM_STOP
-
perfmonctl(int fd, PFM_STOP, NULL, 0);
監視を停止する。
- PFM_LOAD_CONTEXT
-
perfmonctl(int fd, PFM_LOAD_CONTEXT, pfarg_load_t *largs, 1);
指定したコンテキストをスレッドに接続する。
- PFM_UNLOAD_CONTEXT
-
perfmonctl(int fd, PFM_UNLOAD_CONTEXT, NULL, 0);
指定したコンテキストをスレッドが切り離す。
- PFM_RESTART
-
perfmonctl(int fd, PFM_RESTART, NULL, 0);
オーバーフロー通知を受信した後、
監視を再開する。
- PFM_GET_FEATURES
-
perfmonctl(int fd, PFM_GET_FEATURES, pfarg_features_t *arg, 1);
- PFM_DEBUG
-
perfmonctl(int fd, PFM_DEBUG, val, 0);
val が 0
以外の場合、デバッグモードを有効にする。
そうでない場合、
無効にする。
- PFM_GET_PMC_RESET_VAL
-
perfmonctl(int fd, PFM_GET_PMC_RESET_VAL, pfarg_reg_t *req, n);
PMC
レジスターをデフォルト値にリセットする。
perfmonctl()
は操作が成功すると 0
を返す。
エラーの場合、 -1
が返り、
errno
にエラーの原因を示す値が設定される。
perfmonctl() は Linux 2.4
以降で利用可能である。
perfmonctl() は Linux 固有で、 IA-64
アーキテクチャーでのみ利用できる。
glibc
はこのシステムコールに対するラッパー関数を提供していない。
syscall(2)
を使って呼び出すこと。
gprof(1)
perfmon2
インターフェース仕様
この man ページは Linux
man-pages
プロジェクトのリリース
5.10
の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/
に書かれている。