Perf plugin
The perf plugin creates an Alumet source that collects measurements using the Performance Counters for Linux (aka perf_events).
It can obtain valuable data about the system and/or a specific process, such as the number of instructions executed, cache-misses suffered, …
This plugin works in a similar way to the perf command-line tool.
Requirements
- Linux (
perf_eventsis a kernel feature) - Required capabilities.
Metrics
Here are the metrics collected by the plugin's source. All the metrics are counters.
To learn more about the standard events, please refer to the perf_event_open manual.
To list the events that are available on your machine, run the perf list command.
For hardware related metrics:
perf_hardware_{hardware-event-name} where hardware-event-name is one of:
CPU_CYCLES, INSTRUCTIONS, CACHE_REFERENCES, CACHE_MISSES, BRANCH_INSTRUCTIONS, BRANCH_MISSES, BUS_CYCLES, STALLED_CYCLES_FRONTEND, STALLED_CYCLES_BACKEND, REF_CPU_CYCLES.
For software related metrics:
perf_software_{software-event-name} where software-event-name is one of:
PAGE_FAULTS, CONTEXT_SWITCHES, CPU_MIGRATIONS, PAGE_FAULTS_MIN, PAGE_FAULTS_MAJ, ALIGNMENT_FAULTS, EMULATION_FAULTS, CGROUP_SWITCHES.
For cache related metrics:
perf_cache_{cache-id}_{cache-op}_{cache-result} where:
cache-id is one of L1D, L1I, LL, DTLB, ITLB, BPU, NODE
cache-op is one of READ, WRITE or PREFETCH.
cache-result is one of ACCESS or MISS.
Note that based on your kernel version, some events could be unavailable.
Attributes
Configuration
Here is a configuration example of the plugin. It's part of the Alumet configuration file (eg: alumet-config.toml).
[plugins.perf]
# Description.
poll_interval = "1s"
flush_interval = "1s"
hardware_events = [
"REF_CPU_CYCLES",
"CACHE_MISSES",
"BRANCH_MISSES",
# // any {hardware-event-name} from the list previously mentionned
]
software_events = [
"PAGE_FAULTS",
"CONTEXT_SWITCH",
# // any {software-event-name} from the list previously mentionned
]
cache_events = [
"LL_READ_MISS",
# // any combination of {cache-id}_{cache-op}_{cache-result} from the lists previously mentionned
]
More information
perf_event_paranoid and capabilities
| perf_event_paranoid value | Description | Required capabilities (binary) | perf plugin works (unprivileged) |
Below is a summary of how different perf_event_paranoid values affect perf plugin functionality when running as an unprivileged user:
perf_event_paranoid value | Description | Required capabilities (binary) | RAPL plugin works (unprivileged) |
|---|---|---|---|
| 4 (Debian-based systems only) | Disables all perf event usage for unprivileged users | − | ❌ Not supported |
| 2 | Allows only user-space measurements | cap_perfmon (or cap_sys_admin for Linux < 5.8) | ✅ Supported |
| 1 | Allows user-space and kernel-space measurements | cap_perfmon (or cap_sys_admin for Linux < 5.8) | ✅ Supported |
| 0 | Allows user-space, kernel-space, and CPU-specific data | cap_perfmon (or cap_sys_admin for Linux < 5.8) | ✅ Supported |
| -1 | Full access, including raw tracepoints | − | ✅ Supported |
Example for setting perf_event_paranoid: sudo sysctl -w kernel.perf_event_paranoid=2 will set the value to 2.
Note that this command will not make it permanent (reset after restart).
To make it permanent, create a configuration file in /etc/sysctl.d/ (this may change depending on your Linux distro).
Alternatively, you can run Alumet as a privileged user (root), but this is not recommended for security reasons.