#include <syscall.h> #include <perfmon.h> long perfmonctl(int fd, int cmd, void *arg, int narg);
perfmonctl will apply a function cmd to input arguments arg. The number of arguments is defined by input variable narg. fd specifies the perfmon context to operate on.
The implemented commands cmd are:
perfmonctl(int fd, PFM_CREATE_CONTEXT , pfarg_context_t *ctxt, 1);
The fd parameter is ignored. A new context is created as specified in ctxt and its file descriptor is returned in ctxt->ctx_fd.
The file descriptor, apart from passing it to perfmonctl, can be used to read event notifications (type pfm_msg_t) using the read(2) system call. Both select(2) and poll(2) can be used to wait for event notifications.
The context can be destroyed using the close(2) system call.
perfmonctl(int fd, PFM_WRITE_PMCS , pfarg_pmc_t *pmcs, n);
perfmonctl(int fd, PFM_WRITE_PMDS , pfarg_pmd_t *pmds, n);
perfmonctl(int fd, PFM_READ_PMDS , pfarg_pmd_t *pmds, n);
perfmonctl(int fd, PFM_START , arg , 1); perfmonctl(int fd, PFM_START , NULL , 0);
perfmonctl(int fd, PFM_START , NULL , 0);
perfmonctl(int fd, PFM_LOAD_CONTEXT ,pfarg_load_t *largs,1);
perfmonctl(int fd, PFM_UNLOAD_CONTEXT , NULL , 0);
perfmonctl(int fd, PFM_RESTART , NULL , 0);
perfmonctl(int fd, PFM_CREATE_EVTSETS, pfarg_setdesc_t *desc , n);
perfmonctl(int fd, PFM_DELETE_EVTSET, pfarg_setdesc_t *desc , n);
perfmonctl(int fd, PFM_GETINFO_EVTSETS, pfarg_setinfo_t *info, n);