# macOS 27 CPU power side by side: macmon, mactop and plottypus (M5 Pro)

Three tools read CPU power at the same time on one Mac running macOS 27.0, once a second.
macmon 0.8.2 and mactop 2.1.5 turn a per-interval delta of the IOReport Energy Model counter
into watts, and report `0.0` W CPU in every sample. plottypus 1.0.0 reads the SMC CPU power
rails on this model, and reports 0.18 to 50.46 W over the same seconds.

Page: https://plottypus.com/data/macos27-cpu-power-side-by-side ·
Write-up: https://plottypus.com/blog/macos-27-cpu-power-0w · License: CC BY 4.0

## The runs

All on 2026-09-24 (IST, +05:30). Each tool ran in its own process at a 1 s interval, started together.

| `run_id` | Tools | Samples per tool | CPU power reported |
|---|---|---:|---|
| `2026-09-24T00:28` | macmon, plottypus | 20 | macmon `0.0` in 20 of 20; plottypus 0.18 to 44.19 W |
| `2026-09-24T00:31` | macmon, plottypus | 30 | macmon `0.0` in 30 of 30; plottypus 21.37 to 50.46 W |
| `2026-09-24T00:39` | macmon, mactop, plottypus | 20 | macmon `0.0` in 20 of 20; mactop `0` in 20 of 20; plottypus 15.27 to 48.44 W |

Over the same samples macmon's `sys_power` ranged from 11.01 to 103.65 W and mactop's
`system_power` from 19.04 to 95.74 W. macmon and mactop also reported `0.0` for ANE and DRAM
power in every sample. plottypus reported `null` for both: it had no IOReport reading younger
than 10 s.

The machine was under heavy parallel load (the 1-minute load averages logged between 00:26
and 00:35 ranged from 24.65 to 142.87, on 18 cores) and on AC power (plottypus reported
`battery.on_ac: true` at 80% in every sample).

## Tools

| Tool | Version | Mode | Source of `cpu_power_w` |
|---|---|---|---|
| macmon | 0.8.2 (Homebrew) | `macmon pipe`, 1 s | IOReport Energy Model, energy delta ÷ sample interval |
| mactop | 2.1.5 (release tarball, SHA-256 `268c2dafdaa954875a2c684e4d6eef9832f96a027e7905f7fc716b42b2ea69b8`) | `mactop --headless`, 1 s | IOReport Energy Model, energy delta ÷ sample duration |
| plottypus | 1.0.0 | `plottypus --json-stream`, 1 s | the six SMC CPU rails of the Mac17,8 (`PP0b PP4b PP1b PP7b PR0b PR7b`) |

mactop ran from the checksum-verified release binary with its config pointed at a temporary
folder. Nothing was installed.

## Machine

MacBook Pro Mac17,8, Apple M5 Pro (6 Super + 12 Performance cores, 20-core GPU, 24 GB),
macOS 27.0 (build 26A428). No sudo.

## Files

| File | Rows | One row is |
|---|---:|---|
| `samples.csv` | 160 | one sample from one tool |
| `samples.ndjson` | 160 | the same, one JSON object per line (`null` where the CSV cell is empty) |

Rows are sorted by time within each run.

### Columns

| Column | Unit | Meaning | macmon field | mactop field | plottypus field |
|---|---|---|---|---|---|
| `run_id` | | which run (table above) | | | |
| `tool`, `tool_version` | | `macmon` 0.8.2, `mactop` 2.1.5, `plottypus` 1.0.0 | | | |
| `sample` | | 0-based index of the tool's sample within the run | | | |
| `t` | ISO 8601, UTC | the tool's own timestamp | `timestamp` (µs) | `timestamp` (whole seconds) | `unix_ms` |
| `unix_time_s` | s | the same as a UTC epoch | | | |
| `elapsed_s` | s | seconds since the run's earliest sample, any tool | | | |
| `cpu_power_w` | W | CPU power | `cpu_power` | `soc_metrics.cpu_power` | `cpu_power` |
| `sys_power_w` | W | whole-system power | `sys_power` | `soc_metrics.system_power` | `sys_power` (SMC `PSTR`) |
| `cpu_usage` | 0 to 1 | CPU busy share | `cpu_usage_pct` (already 0 to 1, despite the name) | `cpu_usage` ÷ 100 | `cpu.usage` |
| `gpu_power_w` | W | GPU power | `gpu_power` | `soc_metrics.gpu_power` | `gpu_power` |
| `ane_power_w` | W | Neural Engine power | `ane_power` | `soc_metrics.ane_power` | `ane_power` |
| `ram_power_w` | W | DRAM power | `ram_power` | `soc_metrics.dram_power` | `ram_power` |

Values are rounded to 4 decimals. An empty cell (`null` in NDJSON) is plottypus saying "not
measured right now". It is not a zero.

### Timing notes

- mactop's timestamps have one-second resolution, and its 20 samples span 23 s (some
  consecutive samples are 2 s apart).
- The three tools do not sample at the same instant. Compare runs by second, not by row.

## What was removed

The raw captures also hold per-process rows (names, users, pids), disk volume names, network
interfaces, fan and temperature readings. Only the numeric power and usage fields above are
published.

## Limits

- One machine and one OS build. A different chip, or a later macOS 27.x, may behave
  differently.
- The plottypus CPU figure comes from SMC rails that are mapped for the Mac17,8 only.
  On other Macs plottypus 1.0.0 holds the last published IOReport rate with its age and shows
  `—` once it is more than 10 s old. When the counters are as quiet as in the silent trace of
  the publication-trace dataset, that means `—`, not a number.
- `sys_power_w` is each tool's own figure. They do not match sample by sample.

## License and citation

CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). Use it for anything, with credit.
This license covers the data files in this folder only. macmon and mactop are MIT-licensed
projects by their own authors; this dataset records their output only.

> Sheth, L. (2026). macOS 27 CPU power side by side: macmon 0.8.2, mactop 2.1.5 and plottypus
> 1.0.0 (M5 Pro) (Version 1.0) [Data set]. plottypus.com.
> https://plottypus.com/data/macos27-cpu-power-side-by-side

Contact: Lay Sheth, hello@plottypus.com.

## Checksums (SHA-256)

```text
8f7df53f773f8d547ec9a659e730b4332281f4ddc57650c54cc760653e53c4dd  samples.csv
b971c63377cf118071b3f918cf77077294ae21b9fa32f03ff54d3fe60db18c8b  samples.ndjson
```

Verify with `shasum -a 256 -c` against these lines, or against https://plottypus.com/data/SHA256SUMS.
