Apple Silicon GPU/CPU/Memory monitoring CLI — like gpustat, but for Metal
Project description
metalstat
Apple Silicon GPU/CPU/Memory monitoring CLI — like gpustat, but for Metal.
No sudo required. Uses IOReport private API for GPU/power metrics.
Install
pip install metalstat
Or with uv:
uv tool install metalstat
Usage
# One-shot: all metrics + top processes
metalstat -a -p
# Watch mode: refresh every 1s
metalstat -a -i 1
# See all options
metalstat --help
Understanding Apple Silicon memory (vs. CUDA)
Apple Silicon uses Unified Memory Architecture (UMA) — the CPU and GPU share a single pool of RAM. There is no separate VRAM. This is fundamentally different from NVIDIA/CUDA where the GPU has its own dedicated memory (e.g. 24GB VRAM on an RTX 4090) and data must be copied between CPU and GPU over PCIe.
What the memory numbers mean
Memory 15.6 / 32.0 GB ●green ← system memory (shared by CPU + GPU)
2.7G wired / 12.9G active / ... ← breakdown by page state
Metal 0.0G / 25.0G ← GPU allocation / recommended max
System memory (15.6 / 32.0 GB) is the total unified memory usage — CPU and
GPU workloads combined. The breakdown shows:
- Wired: Locked by the kernel, cannot be paged out or compressed
- Active: Recently used pages
- Inactive: Not recently accessed, still in RAM, reclaimable
- Compressed: macOS compresses inactive pages in-memory before swapping to disk
Metal GPU allocation (0.0G / 25.0G) shows how much memory is currently
allocated for GPU resources (textures, buffers, ML model weights) vs. the
recommended maximum. This is the closest equivalent to "VRAM used / VRAM total"
on NVIDIA, but with important differences:
| NVIDIA (CUDA) | Apple Silicon (Metal) | |
|---|---|---|
| GPU memory pool | Dedicated VRAM (fixed) | Shared with CPU (unified) |
| "Total" | Physical VRAM size | recommendedMaxWorkingSetSize (~75% of RAM) |
| Hard limit? | Yes — allocation fails at VRAM cap | No — soft limit, but going over causes swap thrashing |
| Zero-copy CPU↔GPU? | No, must cudaMemcpy |
Yes, CPU and GPU see the same physical pages |
The recommended max (~75% of RAM) is not a hardware limit — Metal will let you allocate beyond it. But exceeding it forces the OS to compress or swap out other memory, degrading performance. This is why a 192GB Mac can load LLMs that would need multiple 80GB A100s: the GPU directly accesses main memory with no copy overhead, but you're sharing that memory budget with the rest of the system.
Pressure (●green / ●yellow / ●red) shows system-wide memory pressure:
- Green (>50% free): Healthy, plenty of headroom
- Yellow (25-50% free): Moderate pressure, compression active
- Red (<25% free): Heavy pressure, swapping likely
Requirements
- macOS on Apple Silicon (M1/M2/M3/M4)
- Python 3.10+
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file metalstat-0.1.1.tar.gz.
File metadata
- Download URL: metalstat-0.1.1.tar.gz
- Upload date:
- Size: 183.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
18f6c5ad4dd1fac5a381c38e63bd3e367fe77c0e3b06a860bbecdea53be297c0
|
|
| MD5 |
91f5e02937e85c27a545f18344230b36
|
|
| BLAKE2b-256 |
85db4d7f48d099f4d6f0fb468dfb6c72dca0153b69370525c66e3101ee6f235b
|
File details
Details for the file metalstat-0.1.1-py3-none-any.whl.
File metadata
- Download URL: metalstat-0.1.1-py3-none-any.whl
- Upload date:
- Size: 21.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5f5546b550d7b1b0c23ae591d04f3fefb5006ac31f1691023a2e91ac15e1d1a3
|
|
| MD5 |
9c2ecfdf4d2d2b4445e9f1fb0b3bc788
|
|
| BLAKE2b-256 |
e6fabf6a145a1984b67674c324bc01373e9a0591efd1a03b6b0388ef2834eeb9
|