blob: 5e65eafb7273d08cddc0c2ac22ace9aaaf6750f7 [file] [log] [blame] [view]
# Memory samples
The Harvester gathers a collection of memory samples.
These counters are not always accurate. Its possible for the sum of the various
page types (`free_bytes`, `mmu_overhead_bytes`, `free_heap_bytes`, and more) to
temporarily add up to more than the total memory. In the rare cases where the
values don't add up accurately, the differences should only one or two memory
pages.
The counts are tracked by incrementing/decrementing atomic integers when a page
transitions from one state to another (for example, from `free_bytes` to
`free_heap_bytes`). The relaxed accuracy allows for higher system performance.
This can be adjusted in the future, but so far there's been no call to make the
trade for that extra tiny bit of accuracy.
## Dockyard paths
The path to each sample includes `memory` and the sample name. For example,
`memory:free_bytes`.
## Samples
Graph data collected by the Harvester along with timestamp and a Dockyard path
is called a sample. The following sections describe the samples collected.
This data is often tracked in pages. So values will change by several KB at a
time.
### Memory in the device
Device memory refers to the memory within the machine. It's not specific to any
process or the kernel.
#### memory:device_total_bytes
The total physical memory available to the machine.
#### memory:device_free_bytes
The bytes within `device_total_bytes` that are unallocated.
### Memory in the kernel
This memory is related to the kernel rather than any user process or ipc.
#### memory:kernel_total_bytes
The total kernel bytes as reported by page state counter.
#### memory:kernel_free_bytes
The bytes within `kernel_total_bytes` that are unallocated.
#### memory:kernel_other_bytes
The amount of memory reserved by and mapped into the kernel for reasons not
reported elsewhere. Typically for read-only data like the RAM disk and kernel
image, and for early-boot dynamic memory.
### Categorized memory
These group memory used by category, with a catch-all 'other' category for
miscellaneous memory that doesn't fit in another category.
#### memory:vmo_bytes
The number of bytes used for Virtual Memory Objects. Ownership of a VMO may be
transferred between processes.
#### memory:mmu_overhead_bytes
Tracking the memory state also requires memory. This is the number of bytes of
overhead used for tracking page tables.
#### memory:ipc_bytes
Current amount of memory used for inter-process communication. Currently this
reflects the memory used for Zircon channels, but in the future it may include
memory for sockets and fifos.
#### memory:other_bytes
Memory that is in use but not tracked as kernel, user, ipc, and so on.