Skip to main content

macOS GPU/ANE Monitor for Apple Silicon

Project description

metop

A Python-based GPU/ANE monitoring tool for Apple Silicon Macs. Like nvtop or nvidia-smi, but for Metal and the Neural Engine.

Features

  • GPU Monitoring (no sudo required)

    • Device, Renderer, and Tiler utilization percentage
    • GPU memory usage (in-use vs allocated)
    • Top GPU-active processes from AGX user client GPU time deltas
    • Selectable process list with keyboard and mouse-wheel scrolling
    • Real-time sparkline history
  • System Monitoring

    • CPU usage and load average
    • Memory usage and swap
    • Disk usage and read/write throughput
  • ANE + Power Metrics (requires sudo / powermetrics)

    • CPU/GPU/ANE/Total power (mW/W)
    • GPU/ANE frequency and active/idle residency (when available)
    • ANE utilization estimated from residency (fallback: power-based)
  • Display Modes

    • Default stacked layout: top for GPU+ANE, CPU, and power; middle for memory, disk, and history; bottom for top GPU processes
    • Runtime switching with m (1 for stacked, 2 for classic)
  • System Info

    • Chip detection (M1/M2/M3/M4 series)
    • CPU/GPU/ANE core counts
    • Total memory

Installation

# Install from source
pip install -e .

# Or with optional fast IOKit bindings
pip install -e ".[fast]"

Usage

# Basic monitoring (GPU only)
metop

# Enable ANE + power metrics (requires sudo)
sudo metop

# Custom refresh interval (500ms)
metop -i 500

# Disable ANE/powermetrics even with sudo
metop --no-ane

# Start in the classic layout
metop --layout classic

# Debug mode (single sample, raw output)
metop --debug

Screenshot

metop main screen

How It Works

GPU Monitoring

Uses IOKit via ioreg command to query the AGXAccelerator driver's PerformanceStatistics. This provides:

  • Device Utilization % - Overall GPU busy percentage
  • Renderer Utilization % - Shader/compute units
  • Tiler Utilization % - Geometry processing
  • Per-process GPU activity by diffing each AGX user client's accumulatedGPUTime

Per-process activity is reported as GPU time over the sample window, normalized into an estimated percentage. This is a best-effort approximation, not a direct hardware residency counter.

ANE + Power Metrics

Uses powermetrics (-f plist) to collect CPU/GPU/ANE power and residency/frequency data. Requires sudo because powermetrics needs root access.

ANE utilization is estimated from:

  • preferred: ANE active residency reported by powermetrics
  • fallback: power-based estimate
utilization = (current_power / max_power) * 100%

Requirements

  • macOS Monterey (12.0) or later
  • Apple Silicon Mac (M1/M2/M3/M4 series)
  • Python 3.9+
  • rich (terminal UI)
  • psutil (memory stats)

License

MIT License

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

metop-0.2.1.tar.gz (28.2 kB view details)

Uploaded Source

Built Distribution

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

metop-0.2.1-py3-none-any.whl (30.7 kB view details)

Uploaded Python 3

File details

Details for the file metop-0.2.1.tar.gz.

File metadata

  • Download URL: metop-0.2.1.tar.gz
  • Upload date:
  • Size: 28.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for metop-0.2.1.tar.gz
Algorithm Hash digest
SHA256 bcfe1dcf28aefd09ce6c2414842658fd50825bf19675960f5901f500691d09ff
MD5 198a6297540d0ddb427c82c318bbe050
BLAKE2b-256 56f4a198bc351a739fb38ed52e6def61c96f14f51f65fb7a0e4a2fe3fdf7c80a

See more details on using hashes here.

Provenance

The following attestation bundles were made for metop-0.2.1.tar.gz:

Publisher: python-publish.yml on FanBB2333/metop

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file metop-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: metop-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 30.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for metop-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 410b81b870bd5b1da7a324684c72b71a035ee1947f3411dce0be17874dd11d0e
MD5 2ef2231f9f94b91c80307f1eda8f1355
BLAKE2b-256 143fdaedbaff990f0b974aba6169fb3f207bd1202651023f4cf85e1dfe7b0ce4

See more details on using hashes here.

Provenance

The following attestation bundles were made for metop-0.2.1-py3-none-any.whl:

Publisher: python-publish.yml on FanBB2333/metop

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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