xref: /xnu-10002.61.3/doc/cpu_counters.md (revision 0f4c859e951fba394238ab619495c4e1d54d0f34)
1*0f4c859eSApple OSS Distributions# CPU Counters
2*0f4c859eSApple OSS Distributions
3*0f4c859eSApple OSS DistributionsCPU performance counters are hardware registers that count events of interest to efficient CPU execution.
4*0f4c859eSApple OSS DistributionsCounters that measure events closely correlated with each CPU's execution pipeline are managed by the Core Performance Monitoring Unit (CPMU).
5*0f4c859eSApple OSS DistributionsThe CPMU contains both fixed instructions and cycles counters, as well as configurable counters that can be programmed to count any of several hundred possible events.
6*0f4c859eSApple OSS DistributionsIn addition to the CPMU, the Last Level Cache (LLC) hosts the Uncore Performance Monitoring Unit (UPMU), which measures effects that aren't necessarily correlated to a single CPU.
7*0f4c859eSApple OSS DistributionsAll counters in the UPMU are configurable.
8*0f4c859eSApple OSS Distributions
9*0f4c859eSApple OSS DistributionsCounters are typically used in one of two ways.
10*0f4c859eSApple OSS DistributionsIn "counting" mode, their counts are periodically queried and tallied up for a duration of interest.
11*0f4c859eSApple OSS DistributionsIn "sampling" mode, the counters are programmed to generate a Performance Monitor Interrupt (PMI) periodically, during which the currently running code can be sampled, like a time profiler.
12*0f4c859eSApple OSS Distributions
13*0f4c859eSApple OSS Distributions## Subsystems
14*0f4c859eSApple OSS Distributions
15*0f4c859eSApple OSS DistributionsThere are several subsystems that provide access to CPU counter hardware:
16*0f4c859eSApple OSS Distributions
17*0f4c859eSApple OSS Distributions- kpc: The Kernel Performance Counter system is the oldest subsystem and still manages the configurable CPMU counters.
18*0f4c859eSApple OSS DistributionsIt can use PMIs from these counters to trigger kperf samples and counter values can be recorded in kperf samples.
19*0f4c859eSApple OSS Distributions
20*0f4c859eSApple OSS Distributions- Monotonic: The Monotonic system provides access to the fixed CPMU counters with limited support for PMIs.
21*0f4c859eSApple OSS DistributionsAdditionally, the UPMU is entirely provided by a Monotonic dev node interface.
22*0f4c859eSApple OSS Distributions
23*0f4c859eSApple OSS Distributions- cpc: The CPU Performance Counter subsystem provides a policy layer on top of kpc and Monotonic to prevent malicious use of the hardware.
24*0f4c859eSApple OSS Distributions
25*0f4c859eSApple OSS DistributionsEventually, cpc will subsume kpc's and Monotonic's roles in the system.
26*0f4c859eSApple OSS Distributions
27*0f4c859eSApple OSS Distributions## Integrations
28*0f4c859eSApple OSS Distributions
29*0f4c859eSApple OSS Distributions- The Recount subsystem makes extensive use of the fixed CPMU counters to attribute CPU resources back to threads and processes.
30*0f4c859eSApple OSS Distributions
31*0f4c859eSApple OSS Distributions- Microstackshot telemetry is sampled periodically using the CPMU's cycle PMI trigger.
32*0f4c859eSApple OSS Distributions
33*0f4c859eSApple OSS Distributions- Stackshot includes cycles and instructions for each thread container in its kcdata.
34*0f4c859eSApple OSS Distributions
35*0f4c859eSApple OSS Distributions- The kperf profiling system can trigger samples of thread states and call stacks using CPMU PMIs, allowing it to sample thread states and call stacks.
36*0f4c859eSApple OSS DistributionsAnd CPU counter values can be sampled by kperf on other triggers, like timers or kdebug events.
37*0f4c859eSApple OSS Distributions
38*0f4c859eSApple OSS Distributions## See Also
39*0f4c859eSApple OSS Distributions
40*0f4c859eSApple OSS Distributions- `doc/recount.md`
41