blob: 29d14043b66a53e0ac837d7836f9a3538404eb6f [file] [log] [blame] [view]
# CPU samples
The [Harvester](README.md) gathers a collection of CPU samples from each CPU on
the device. This document describes how the data is labelled and what the values
represent.
## Dockyard path
The path to each sample includes `cpu`, the processor index, and the sample
name. For example,`cpu:0:busy_time`.
## Samples
Data collected by the Harvester along with timestamp and a Dockyard path is
called a sample. The following sections describe CPU samples collected. They are
grouped in four broad categories.
### Load
The busy and idle times are complementary. The busy time is derived from the
idle time.
#### cpu:count
The number of main CPUs. For the `cpu:*:` sample paths the `*` will be a
number from 0 to `cpu:count` - 1.
#### cpu:\*:busy_time
The total accumulated time this processor has been busy.
#### cpu:\*:idle_time
The total accumulated time this processor was not doing work (not running any
threads).
### Kernel scheduler counters
The scheduler schedules threads. It determines which thread a given CPU should
be running.
#### cpu:\*:reschedules
How many potential `context_switches` occurred. All `context_switches` are preceded
by a reschedule, but not all reschedules result in a `context_switch`.
#### cpu:\*:context_switches
How many thread switches have occurred. A high value may indicate threads are
thrashing (spending an inordinate amount of time switching places rather than
doing work).
#### cpu:\*:meaningful_irq_preempts
How many thread preemptions have occurred due to an interrupt (`irq`) while the
CPU is not idle. If the thread is idle the interrupt is not considered
meaningful and is not tracked here.
#### cpu:\*:preempts
How many thread preemptions have occurred. (Not currently used).
#### cpu:\*:yields
How many times a thread has yielded its use of a processor to allow another
thread to execute.
### CPU level interrupts and exceptions
An interrupt causes the current flow of a thread to be "interrupted". The thread
is stopped, the state is preserved (so it can be resumed) and the processor
executes an interrupt handler (function).
#### cpu:\*:external_hardware_interrupts
External hardware interrupts indicate a signal or event happening outside of the
machine. Common examples are serial input, or a physical button like a volume up
or down button. Does not include timer or inter-processor interrupts.
#### cpu:\*:timer_interrupts
A timer interrupt occurs when a "clock" (or some kind of time keeping device)
creates an interrupt.
#### cpu:\*:timer_callbacks
How many times a function (callback) has been called due to a timer. Each time a
timer interrupt occurs, zero-to-many timer callbacks may be called.
#### cpu:\*:syscalls
How many system (kernel) API calls have been made.
### Inter-processor interrupts
An inter-processor interrupt occurs when a processor signals another processor.
#### cpu:\*:reschedule_ipis
The count of times the scheduler (running on some CPU) has requested a schedule
change (waking up another CPU).
#### cpu:\*:generic_ipis
The count of inter-process interrupts that were not a schedule change (tracked
as `reschedule_ipis`), ipi interrupt (untracked), or ipi halt (untracked).