Skip to content

xpustat 0.5.0

Choose a tag to compare

@Bekhouche Bekhouche released this 27 Oct 09:53
· 7 commits to main since this release

Feature release: the host CPU as a device, per-process and health detail on NVIDIA and AMD, Apple Silicon sensors without sudo, a cluster view, diagnostics, recording, two new NPU vendors, and a native Windows run.

Host CPU, opt-in

  • xpustat --cpu and query_all(include_cpu=True) add one [CPU] row: model, ISA, cores and threads, 4P+6E layout on Apple Silicon, sockets, NUMA nodes, frequency, load average, RAM and swap, temperature and power where the OS exposes them, cgroup limits in containers, and the top processes by resident memory. The cpu JSON key appears only when asked, so existing output is unchanged.

Processes

  • Per-process compute utilization (sm_pct, from NVML samples or nvidia-smi pmon), memory-bandwidth and codec utilization, full command line (--full-cmd), host RSS and CPU.
  • Container or job attribution on every process from its cgroup: docker, containerd, podman, Kubernetes pod, SLURM job. Shown with -k, exported as a container label.

Health and hardware columns

  • NVIDIA and AMD: fan (-F), SM/graphics and memory clocks (-C), encoder/decoder load (-E), and health (-H): P-state or perf level, active throttle reasons, uncorrected ECC. throttled and healthy on every device, energy counters where available, PCIe link, power limit.
  • MIG inventory on the nvidia-smi path; Jetson engines (NVENC, NVDEC, DLA, ...) and nvpmodel mode.
  • --id 0,2 to pick devices, --print-completion bash|zsh|fish.

Apple Silicon

  • GPU temperature, GPU power and ANE power without sudo, read in-process from the SMC and the IOReport energy counters; the CPU row gets temperature and power too. Free memory is the OS "available" figure.

Several machines, diagnostics, recording

  • --hosts http://n1:9400 ... reads other exporters' new /json endpoint; --ssh n1 n2 runs xpustat over ssh. One table with a host column; an unreachable host never hides the others.
  • --doctor explains every backend: tool path, probe answer, native binding, env vars, device count, errors.
  • --record FILE writes one JSON frame per line (gzip optional); --replay FILE renders it.

New backends and fixes

  • Rebellions (rbln-stat --json) and FuriosaAI (furiosa-smi), written from the tools' JSON schemas and awaiting a hardware run; RBLN_DEVICES and FURIOSA_DEVICES honoured.
  • Plugin backends through the xpustat.backends entry point or register_backend().
  • The optional amdsmi and nvidia-ml-py bindings no longer break import xpustat when they fail to load against the installed driver.
  • Windows: the console is switched to UTF-8 so the table renders on cp1252 consoles, and the CPU model is read from the registry.
  • Sole author: Salah Eddine Bekhouche; Hichem Telli is acknowledged for testing the Ascend backend.

Tested hardware

Platform Device
Apple Apple M5, 10-core GPU, macOS 26
AMD Radeon AI PRO R9700 (gfx1201), ROCm 10.0 / amd-smi 27.0, Ryzen 9 9950X3D
NVIDIA 7x NVIDIA L4 (cc8.9), nvidia-smi and nvidia-ml-py paths, dual Xeon Silver 4314
CPU only Intel N200 (Linux)
Windows 11 Ryzen 7 5800X3D, native Python 3.12: suite, CLI, JSON, doctor

Upgrade

pip install -U xpustat