| # Intel Hardware Performance Monitor Data Collection |
| |
| See Chapters 18,19 of the Intel Architecture Software Developer's Manual. |
| |
| ## IOCTLs |
| |
| Several ioctls are provided to control performance data collection. |
| |
| ### *ioctl_ipm_get_state* |
| |
| ``` |
| ssize_t ioctl_ipm_get_state(int fd, mx_x86_ipm_state_t* state); |
| ``` |
| |
| Return various aspects of IPM state in |state|. |
| |
| Returns 0 on success or a negative error code. |
| |
| ### *ioctl_ipm_init* |
| |
| ``` |
| ssize_t ioctl_ipm_init(int fd); |
| ``` |
| |
| Allocate various resources needed. This must be called before configuring |
| the hardware and collecting data. |
| |
| Returns 0 on success or a negative error code. |
| |
| ### *ioctl_ipm_stage_simple_config* |
| |
| ``` |
| ssize_t ioctl_ipm_stage_simple_config(int fd, |
| ioctl_ipm_simple_config_t* config); |
| ``` |
| |
| Configure data collection by specifying a mask of what data to collect. |
| The device driver will convert this to the needed configuration data. |
| |
| Returns 0 on success or a negative error code. |
| |
| ### *ioctl_ipm_stage_cpu_config* |
| |
| ``` |
| ssize_t ioctl_ipm_stage_cpu_config(int fd, |
| ioctl_ipm_cpu_config_t* config); |
| ``` |
| |
| Configure data collection by specifying the raw values for the hardware |
| configuration registers. |
| |
| Returns 0 on success or a negative error code. |
| |
| ### *ioctl_ipm_get_cpu_config* |
| |
| ``` |
| ssize_t ioctl_ipm_get_cpu_config(int fd, |
| uint32_t *cpu, |
| const mx_x86_ipm_config_t* config); |
| ``` |
| |
| Fetch the configuration for |cpu|. |
| |
| Returns 0 on success or a negative error code. |
| |
| ### *ioctl_ipm_get_cpu_data* |
| |
| ``` |
| ssize_t ioctl_ipm_get_cpu_data(int fd, |
| uint32_t *cpu, |
| const mx_x86_ipm_counters_t* config); |
| ``` |
| |
| Fetch the collected data for |cpu|. |
| |
| Returns 0 on success or a negative error code. |
| |
| ### *ioctl_ipm_start* |
| |
| ``` |
| ssize_t ioctl_ipm_start(int fd); |
| ``` |
| |
| Start data collection. |
| |
| Returns 0 on success or a negative error code. |
| |
| |
| ### *ioctl_ipm_stop* |
| |
| ``` |
| ssize_t ioctl_ipm_stop(int fd); |
| ``` |
| |
| Stop tracing and collect current data from each cpu. |
| |
| Returns 0 on success or a negative error code. |
| |
| ### *ioctl_ipm_free* |
| |
| ``` |
| ssize_t ioctl_ipm_free(int fd); |
| ``` |
| |
| Request the kernel free all internal data structures for managing IPM. |
| |
| Returns 0 on success or a negative error code. |
| |
| ## Usage |
| |
| Here's a sketch of typical usage: |
| |
| 1) ??? |
| |
| ## Notes |
| |
| - ??? |
| |
| ## TODOs (beyond those in the source) |
| |
| - ??? |