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.0.tar.gz (27.1 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.0-py3-none-any.whl (29.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: metop-0.2.0.tar.gz
  • Upload date:
  • Size: 27.1 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.0.tar.gz
Algorithm Hash digest
SHA256 cb4f7493dcdcfcb655dfe16f785dc902e90dd45bdc24fbe62282042ba45b85b1
MD5 baa49af04965601fb35022a74b7140a9
BLAKE2b-256 0e639d1304f0a479609d0eb8086d64316a29f55d82d34b2aa94ff855c078f380

See more details on using hashes here.

Provenance

The following attestation bundles were made for metop-0.2.0.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.0-py3-none-any.whl.

File metadata

  • Download URL: metop-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 29.6 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 978aae971cab1ebfcabf4fa9f097e6f42fab311cabcff8db72d5825db0c36ae9
MD5 8fcc68f29e5b019ceeeca3e11e6b86ae
BLAKE2b-256 cd9180beb182cfcf015c664a64060da33123377422eaf93840a9ceddf46fb19d

See more details on using hashes here.

Provenance

The following attestation bundles were made for metop-0.2.0-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