Skip to main content

Apple Silicon GPU/CPU/Memory monitoring CLI — like gpustat, but for Metal

Project description

metalstat

PyPI

Apple Silicon GPU/CPU/Memory monitoring CLI — like gpustat, but for Metal.

screenshot

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

metalstat-0.1.1.tar.gz (183.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

metalstat-0.1.1-py3-none-any.whl (21.9 kB view details)

Uploaded Python 3

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

Hashes for metalstat-0.1.1.tar.gz
Algorithm Hash digest
SHA256 18f6c5ad4dd1fac5a381c38e63bd3e367fe77c0e3b06a860bbecdea53be297c0
MD5 91f5e02937e85c27a545f18344230b36
BLAKE2b-256 85db4d7f48d099f4d6f0fb468dfb6c72dca0153b69370525c66e3101ee6f235b

See more details on using hashes here.

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

Hashes for metalstat-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5f5546b550d7b1b0c23ae591d04f3fefb5006ac31f1691023a2e91ac15e1d1a3
MD5 9c2ecfdf4d2d2b4445e9f1fb0b3bc788
BLAKE2b-256 e6fabf6a145a1984b67674c324bc01373e9a0591efd1a03b6b0388ef2834eeb9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page