pumas
A nvtop-inspired command line tool for Apple Silicon Macs: aka M1, M2, ... This is basically a reimplemented version of asitop in Rust.
| Type | Metrics | Available | Comments |
|---|---|---|---|
| Utilization | CPU Clusters, GPU, ANE | ✓ | History & current values. ANE util. is measured via power |
| Power | CPU, GPU, ANE, total package | ✓ | History & current values |
| Frequency | CPU Clusters, GPU | ✓ | Current avg. values |
| Frequency | CPU Clusters, GPU | planned | Residency distrib. histograms |
| Memory | RAM & Swap: size and usage | ✓ | Apple removed memory bandwidth from powermetrics. |
To gather data, Pumas uses both the macOS built-in powermetrics utility, and the sysinfo
crate (same data as htop).
The built-in powermetrics allows access to a variety of hardware performance counters. Note
that Pumas requires sudo to run only due to powermetrics needing root access to run.
Pumas is lightweight and has minimal performance impact.
Installation
or
Quickstart
Use the arrow keys to switch between tabs. Press Esc, q or x to quit.
Screenshots
Overview Tab: global metrics for utilization and power consumption.


CPU Tab: per-cluster CPU utilization (with short history) and frequency (with short history)


GPU Tab: GPU utilization (with short history) and frequency (with short history)


SoC Tab: misc info about the SoC

Startup:

Usage
)
Pumas can run in two modes: UI mode (the default) and JSON mode.
)
)
JSON Mode
In JSON mode, Pumas will stream metrics to stdout as JSON instead of running the UI. You can
then pipe the metrics to jq, or create a node-exporter for Prometheus, etc.
For instance, the following command will stream the active ratio of the third CPU core of the first CPU cluster at each sample interval:
|
The JSON schema and an example are available in the schema directory.
Source of metrics
sysinfo crate is used to measure the following:
- per-cluster CPU utilization
- per-core CPU utilization
- RAM & Swap usage & size
powermetrics is used to measure the following:
CPU usage via(removed: incorrect on M2 chips)powermetrics- GPU utilization via active residency
- CPU & GPU frequency
- Package/CPU/GPU/ANE energy consumption
sysctl is used to measure the following:
- CPU name
- CPU core counts
system_profiler is used to measure the following:
- GPU core count
Some information is guesstimate and hardcoded as there doesn't seem to be a official source for it on the system:
- CPU, GPU & ANE max power draw
License
Licensed under the MIT License.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the MIT license, shall be licensed as MIT, without any additional terms or conditions.