SiliconScope

June 14, 2026 · View on GitHub

What SiliconScope shows and why. Derived from analysis of btop / NeoAsitop / iStat Menus plus the on-device-AI trend. All in-app labels are English (the names in the tables below are the actual UI labels).


0. Core insight — "where does an AI workload actually run?"

Tracing today's growing workloads makes the differentiator clear:

WorkloadEngine actually usedBottleneck
Local LLM (llama.cpp / MLX / Ollama)Metal GPU + unified memory (ANE not used)memory bandwidth (esp. 27B+)
AI photo/video, Siri, classification (CoreML)ANE (+ some GPU)ANE throughput / power & heat
Large resident modelunified-memory capacitymemory pressure / swap

Design principles

  1. Put GPU + memory bandwidth + memory pressure front and center — what LLM users actually care about.
  2. ANE is a "which engine is working" signal — for an LLM only the GPU lights up while ANE stays idle; a CoreML app lights up ANE. That contrast is the insight.
  3. Thermals/throttle + sustained power — AI is a sustained load, so throttling governs real performance.
  4. Because memory is unified, surface wired memory (Metal/GPU allocations) separately.

⚠️ ANE "utilization" is a power-based estimate (Apple exposes no true figure). Labelled est. in the UI.


1. Tool comparison — what each surfaces

ItembtopNeoAsitopiStat MenusSiliconScope
Per-core CPU✗ (E/P aggregate only)
E/P core split✓ (freq)✓✓ core feature
GPU usage/freqLinux only
ANE✓ differentiator
Memory bandwidth✓ (E/P/GPU/Media)✓✓ differentiator
Memory pressure
Wired/compressed/swapswap only
Power (per domain)✓ (CPU/GPU/sys/RAM)
Thermal / throttletempsensors
Fanslimited✓✓
Processes (top/tree/kill)✓✓top apps
Disk / Network✓✓
Batterybasic✓✓
Alerts✓✓ (bottleneck classifier, GPU throttle, memory pressure)

Read: NeoAsitop = strong chip metrics (plain UI) / iStat = broad (weak on AI; no ANE/bandwidth) / btop = strong processes & UX (thin on Apple Silicon). → SiliconScope = NeoAsitop's chip metrics + iStat's memory-pressure/thermal breadth + btop's process/UX, plus an AI-workload lens.


2. Information set

All data sources are sudoless (see ioreport-channels.md).

Apple Silicon / AI signature (the differentiators)

In-app labelContentSource
E-cores / P-coresper-cluster usage % + frequencyhost_processor_info (usage) + IOReport CPU Stats × DVFS (freq)
GPUusage %, frequency, powerIOReport GPU Stats + Energy Model
ANE (est.)power-based activity + "engine in use" hintIOReport Energy Model
Memory BandwidthCPU / GPU / Media / total GB/sIOReport AMC Stats
Memory pressurenormal / elevated / critical + wired/compressed/swaphost_statistics64 + sysctl
PowerCPU / GPU / ANE / DRAM / SoC WIOReport Energy Model
Thermalthermal pressure, fans, die tempsProcessInfo + SMC

Core system (parity)

In-app labelContentSource
Memorywired / active / compressed / free, swapvm_statistics64
Temperaturesgrouped CPU / GPU / Memory / Battery °CSMC
FansRPM (fanless models handled)SMC
Networkdownload / uploadgetifaddrs
Diskread / write + capacityIOBlockStorageDriver + volume capacity
Processestop by CPU/MEM, filter, kill/signallibproc
Battery%, charging stateIOPowerSources

Later / stretch

ItemNote
Per-app network/disk breakdownprivate NetworkStatistics — harder
Per-process GPU/ANE attribution⚠️ not reliably possible sudoless — deferred
History logging, configurable alertsnice-to-have

3. "AI Workload" view (shipped)

A curated hero card that answers "where does my AI workload run, and what limits it right now?" at a glance. A single bottleneck classifier verdict drives it:

┌─ AI Workload ─────────────────────────────────────────────────┐
│ ● Bandwidth-bound   Memory BW near ceiling, GPU not maxed      │
│ Mem BW % of ceiling ████████░░ 78% · 312 / 400 GB/s · M3 Max   │
│ GPU 64% · GPU/Metal (LLM-style)                                │
└────────────────────────────────────────────────────────────────┘
  • Verdict (precedence: memory > thermal > workload profile):
    • Memory-pressured — unified memory full (macOS pressure critical).
    • Thermal-throttled — GPU clock held below its rolling peak while pressure rises.
    • Bandwidth-bound — BW near the chip ceiling, GPU not maxed (LLM token generation).
    • Compute-bound — GPU saturated, BW has headroom (prompt processing).
    • GPU-active / Idle — otherwise.
  • "% of ceiling" uses a per-chip unified-memory-bandwidth table (M1–M4, Max bins split by P-core count), raised to the observed peak so it self-corrects and still works on chips not in the table.
  • Likely engine: GPU high / ANE low → GPU/Metal (LLM-style); ANE high → ANE (CoreML-style).

This interpretation layer — not the raw numbers — is what sets SiliconScope apart from general-purpose monitors.