# perfmonctl

## NAME



           perfmonctl - interface to IA-64 performance monitoring unit
    


## SYNOPSIS



           **#include <syscall.h>**
           **#include <perfmon.h>**
    
           **long perfmonctl(** int narg;
                           **int** _fd_**, int** _cmd_**, void** _arg_**[**_narg_**], int** _narg_**);**
    
           _Note_ : There is no glibc wrapper for this system call; see HISTORY.
    


## DESCRIPTION



           The IA-64-specific **perfmonctl**() system call provides an interface
           to the PMU (performance monitoring unit).  The PMU consists of PMD
           (performance monitoring data) registers and PMC (performance
           monitoring control) registers, which gather hardware statistics.
    
           **perfmonctl**() applies the operation _cmd_ to the input arguments
           specified by _arg_.  The number of arguments is defined by _narg_.
           The _fd_ argument specifies the perfmon context to operate on.
    
           Supported values for _cmd_ are:
    
           **PFM_CREATE_CONTEXT**
                  **perfmonctl(int** _fd_**, PFM_CREATE_CONTEXT, pfarg_context_t ***_ctxt_**, 1);**
                  Set up a context.
    
                  The _fd_ parameter is ignored.  A new perfmon context is
                  created as specified in _ctxt_ and its file descriptor is
                  returned in _ctxt- >ctx_fd_.
    
                  The file descriptor can be used in subsequent calls to
                  **perfmonctl**() and can be used to read event notifications
                  (type _pfm_msg_t_) using read(2).  The file descriptor is
                  pollable using select(2), poll(2), and epoll(7).
    
                  The context can be destroyed by calling close(2) on the
                  file descriptor.
    
           **PFM_WRITE_PMCS**
                  **perfmonctl(int** _fd_**, PFM_WRITE_PMCS, pfarg_reg_t ***_pmcs_**, n);**
                  Set PMC registers.
    
           **PFM_WRITE_PMDS**
                  **perfmonctl(int** _fd_**, PFM_WRITE_PMDS, pfarg_reg_t ***_pmds_**, n);**
                  Set PMD registers.
    
           **PFM_READ_PMDS**
                  **perfmonctl(int** _fd_**, PFM_READ_PMDS, pfarg_reg_t ***_pmds_**, n);**
                  Read PMD registers.
    
           **PFM_START**
                  **perfmonctl(int** _fd_**, PFM_START, NULL, 0);**
                  Start monitoring.
    
           **PFM_STOP**
                  **perfmonctl(int** _fd_**, PFM_STOP, NULL, 0);**
                  Stop monitoring.
    
           **PFM_LOAD_CONTEXT**
                  **perfmonctl(int** _fd_**, PFM_LOAD_CONTEXT, pfarg_load_t ***_largs_**, 1);**
                  Attach the context to a thread.
    
           **PFM_UNLOAD_CONTEXT**
                  **perfmonctl(int** _fd_**, PFM_UNLOAD_CONTEXT, NULL, 0);**
                  Detach the context from a thread.
    
           **PFM_RESTART**
                  **perfmonctl(int** _fd_**, PFM_RESTART, NULL, 0);**
                  Restart monitoring after receiving an overflow
                  notification.
    
           **PFM_GET_FEATURES**
                  **perfmonctl(int** _fd_**, PFM_GET_FEATURES, pfarg_features_t ***_arg_**, 1);**
    
           **PFM_DEBUG**
                  **perfmonctl(int** _fd_**, PFM_DEBUG,**_val_**, 0);**
                  If _val_ is nonzero, enable debugging mode, otherwise
                  disable.
    
           **PFM_GET_PMC_RESET_VAL**
                  **perfmonctl(int** _fd_**, PFM_GET_PMC_RESET_VAL, pfarg_reg_t ***_req_**, n);**
                  Reset PMC registers to default values.
    


## RETURN VALUE



           **perfmonctl**() returns zero when the operation is successful.  On
           error, -1 is returned and _errno_ is set to indicate the error.
    


## STANDARDS



           Linux on IA-64.
    


* * *