Harvester

Memory Samples

The Harvester gathers a collection of memory samples.

These counters are not always accurate. It’s possible for the sum of the various page types (free_bytes, mmu_overhead_bytes, free_heap_bytes, etc.) 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 (e.g. 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 will include "memory" and the sample name: e.g. "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, etcetera.