Skip to content

Releases: lablup/all-smi

v0.23.0

Choose a tag to compare

@inureyes inureyes released this 30 Jun 14:24

Migrate the Tenstorrent reader to upstream luwen 0.8.5 (Wormhole and Blackhole only), suppress Windows console windows on subprocess spawn, and bump sysinfo to 0.39 (MSRV now Rust 1.95).

all-smi v0.23.0

3 commits since v0.22.0. (330 lines added, 257 lines deleted)

New Features

None

Improvements

  • Migrated the Tenstorrent NPU reader off the self-republished all-smi-luwen-* fork crates to the upstream-published luwen crates, removing the local vendoring step from the build. (#266)

Bug Fixes

  • Fixed console windows briefly appearing when all-smi spawns subprocesses on Windows. (#264)

CI/CD Improvements

  • Enforced the new_command subprocess helper with a clippy disallowed-methods rule, so any new direct std::process::Command::new spawn site fails the existing clippy -D warnings gate. (#264)
  • Moved the Docker build base and Launchpad PPA toolchain references to Rust 1.95. (#258)

Technical Details

  • Removed the obsolete scripts/vendor_all_luwen.sh vendoring script; luwen crates are now consumed directly from crates.io. (#266)
  • Grayskull is detected through a sysfs pre-check and skipped, with a catch_unwind guard as defense in depth, so the reader no longer aborts when luwen 0.8.x panics on opening a Grayskull device. (#266)

Dependencies

  • Migrated the Tenstorrent reader to luwen 0.8.5 (luwen-api, luwen-pci, luwen-def; luwen-kmd transitive). (#266)
  • Bumped sysinfo from 0.38 to 0.39. (#258)

Breaking Changes

  • Minimum Supported Rust Version (MSRV) raised to Rust 1.95, required by sysinfo 0.39. Building from source now needs Rust 1.95 or newer. (#258)
  • Tenstorrent Grayskull is no longer supported: luwen 0.8.x sunset Grayskull. Supported Tenstorrent architectures are now Wormhole and Blackhole, and Grayskull devices are detected and skipped. (#266)

Known Issues

None

What's Changed

  • chore: bump sysinfo to 0.39 and raise MSRV to Rust 1.95 by @inureyes in #258
  • Disable console window for subprocesses by @llMBQll in #264
  • refactor: migrate Tenstorrent reader to upstream luwen 0.8.5 crates by @inureyes in #266

New Contributors

Full Changelog: v0.22.0...v0.23.0

v0.22.0

Choose a tag to compare

@inureyes inureyes released this 27 May 10:55

Harden the release workflow (macOS notarization fix, rebuild of past tags, per-OS target selector) and document Intel client GPU support across the README, help, and developer docs.

all-smi v0.22.0

3 commits since v0.21.1. (145 lines added, 62 lines deleted)

New Features

None

Improvements

  • Documented Intel client GPU support (Arc / Iris Xe / Xe) across the README, all-smi --help, and the developer guide, covering privilege requirements, the optional Level Zero (Sysman) backend, per-process GPU memory attribution via fdinfo, and Linux engine-busy utilization.
  • Added a README note clarifying that release binaries are signed: macOS archives are notarized and Windows binaries are Authenticode code-signed.

Bug Fixes

None

CI/CD Improvements

  • Fixed macOS notarization by decoding the base64-stored App Store Connect .p8 key before invoking notarytool (resolves invalidAsn1 failures).
  • Made the release workflow self-healing: it now checks out the target tag's source (the release tag or the release_tag input) so a current run can rebuild and re-notarize past tags.
  • Added a workflow_dispatch targets input (windows, linux, macos, all; comma-separated, empty means all) that a new setup job resolves into a filtered build matrix.

Technical Details

  • 3 commits, 8 files changed, 145 insertions, 62 deletions since v0.21.1.
  • Release-workflow changes are isolated to .github/workflows/release.yml; documentation changes touch README.md, DEVELOPERS.md, and the doctor help text in src/cli.rs.
  • No application runtime code changed in this release; the version bump covers Cargo.toml, Cargo.lock, the Debian changelog, and the man page.

Dependencies

None

Breaking Changes

None

Known Issues

None

What's Changed

  • fix: notarization key decode + self-healing rebuild + build-target selector by @inureyes in #256

Full Changelog: v0.21.1...v0.22.0

v0.21.1

Choose a tag to compare

@inureyes inureyes released this 27 May 09:36

all-smi v0.21.1 adds Intel client GPU (Arc/Iris/Xe) monitoring on Windows and Linux with an opt-in Level Zero Sysman backend, plus notarized macOS and code-signed Windows release binaries.

all-smi v0.21.1

10 commits since v0.21.0. (8789 lines added, 65 lines deleted)

New Features

  • Intel client GPU reader for Arc, Iris, and Xe on Windows and Linux (#245)
  • Opt-in Level Zero (oneAPI Sysman) backend for advanced Intel GPU metrics, gated behind the level_zero Cargo feature (default off) (#251)
  • Per-process Intel GPU memory accounting via fdinfo on Linux (#250)
  • Linux Intel GPU utilization computed from engine-busy counters (#249)

Improvements

  • Level Zero Sysman is now the primary Intel GPU metrics source when the runtime is available, with automatic fallback to the sysfs/WMI baseline

Bug Fixes

  • Harden Intel Level Zero and fdinfo path handling to avoid failures on partial or unexpected driver layouts (#253)

CI/CD Improvements

  • Release builds now produce notarized macOS binaries and code-signed Windows binaries (#243)

Technical Details

  • The level_zero feature is off by default; when disabled the binary contains zero references to the Level Zero loader and the Intel readers behave exactly as before.
  • When enabled, the readers dynamically load libze_loader.so.1 (Linux) or ze_loader.dll (Windows) at runtime via libloading; absence of the runtime degrades gracefully back to the sysfs/WMI baseline.
  • v1 Level Zero surface: per-engine activity (including the XMX COMPUTE_SINGLE class) and power via the Sysman energy counter.

Dependencies

  • No external crate version changes. Adds an optional runtime dependency on the Intel Level Zero loader (libze_loader.so.1 / ze_loader.dll), used only when the level_zero feature is enabled.

Breaking Changes

None

Known Issues

  • The Level Zero backend requires the Intel compute runtime (oneAPI Level Zero loader) to be installed. Without it, advanced Intel GPU metrics are unavailable and all-smi falls back to baseline sysfs/WMI metrics.

What's Changed

  • build(release): add macOS notarization and Windows code signing by @inureyes in #243
  • feat: add Intel client GPU reader (Arc/Iris/Xe) for Windows and Linux by @inureyes in #245
  • feat(intel-gpu): compute Linux utilization from engine-busy counters by @inureyes in #249
  • feat(intel-gpu): per-process GPU memory accounting via fdinfo by @inureyes in #250
  • feat(intel-gpu): add opt-in Level Zero backend for advanced metrics by @inureyes in #251
  • fix: harden Intel Level Zero and fdinfo paths by @inureyes in #253
  • feat: make Level Zero Sysman primary metrics source by @inureyes in #254
  • docs: remove v0.21.0+ availability notes from README by @inureyes in #255

Full Changelog: v0.21.0...v0.21.1

v0.21.0

Choose a tag to compare

@inureyes inureyes released this 26 May 09:10

all-smi v0.21.0 is a major release adding new subcommands (snapshot, record, view --replay, config, doctor), cluster-wide Users and Topology tabs in remote view, agentless SSH transport, TOML config support, NVIDIA vGPU/MIG/thermal/hardware details, and energy accumulation with cost estimation. Includes one breaking change: Prometheus label rename (index/uuid to gpu_index/gpu_uuid and npu_index/npu_uuid).

all-smi v0.21.0

46 commits since v0.20.1. (53,474 lines added, 1,536 lines deleted)

New Features

  • snapshot subcommand (#195): One-shot JSON/CSV/Prometheus export to stdout or file without starting a long-running server, with multi-sample collection (--samples/--interval), --query dot-path column selection for CSV, symlink-safe atomic file writes (Unix O_NOFOLLOW + mode 0600), blocking-pool cap, and NaN/Inf float sanitization.
  • record subcommand and view --replay (#197): Capture a live metric stream to a compressed NDJSON file (plain, gzip, zstd; rotating segments; local and remote sources) and play it back through the same TUI for post-hoc incident investigation. Replay supports play/pause, per-frame stepping, speed cycling (0.25x to 8x), +/-10s seeks, timecode jumps, and loop mode. Security hardening includes O_NOFOLLOW symlink refusal, 16 MiB per-line cap, and 128 MiB zstd window ceiling.
  • doctor subcommand (#198): Read-only suite of 51 environment checks across 14 categories (platform, privileges, container, nvidia, amd, apple, gaudi, tpu, tenstorrent, rebellions, furiosa, windows, env, network) with stable dotted check IDs, parallel execution, 3-second per-check timeout, PASS/WARN/FAIL/SKIP report in human and JSON formats, and --bundle support-archive packer with O_NOFOLLOW symlink refusal, owner-only permissions, secret-value redaction, and network-identifier scrubbing.
  • Cluster-wide Users tab (V key) (#199): Aggregates per-process metrics across all scraped hosts into a single table with columns USER, NODES, GPUs, PROCS, VRAM, POWER (weighted approximation), LONGEST, and CMD. In-tab keys u/m/p/n/t for sorting, Enter for two-level drill-down (user to host to process list), ESC to exit drill-down, f to toggle system-account filter (uid<1000), and e to export the visible table to CSV. Mock support via ALL_SMI_MOCK_PROCESSES=1. CSV export hardened with O_NOFOLLOW + mode 0600 symlink refusal, RFC 4180 quoting, and formula-injection mitigation.
  • Topology view tab (T key) (#200): NvLink/NUMA/PCIe graph and matrix view in remote mode.
  • Energy accumulation (kWh) and cost estimation (#201): Cumulative energy with $/kWh config, disk-backed WAL for persistence across restarts.
  • TOML config file support (#202): config init, config print, config validate, and config path subcommands. Platform-canonical config search order with override via --config.
  • SSE streaming endpoint and /snapshot JSON (#203): Server-Sent Events streaming for API mode plus a one-shot snapshot endpoint.
  • Agentless SSH transport for view mode (#204): Pure-Rust russh client so musl static builds need no C dependency; no remote agent required.
  • NVIDIA vGPU SR-IOV monitoring (#172): Per-vGPU utilization, framebuffer memory, scheduler state, and host mode exported as Prometheus metrics. TUI renders per-GPU vGPU sub-sections. Remote parser reconstructs vGPU view from scraped metrics. Mock support via ALL_SMI_MOCK_VGPU=1.
  • NVIDIA extended thermal monitoring and P-state (#173): Slowdown, shutdown, max-operating, and acoustic temperature thresholds exported as Prometheus metrics. TUI shows per-GPU thermal row with proximity highlighting (yellow within 5C of slowdown, red within 2C of shutdown). P-state (P0 to P15) surfaced in TUI and metrics.
  • NVIDIA MIG (Multi-Instance GPU) monitoring (#174): Per-GPU MIG mode status and per-MIG-instance SM utilization, memory bandwidth utilization, and framebuffer used/total bytes exported as Prometheus metrics. TUI renders MIG instances as nested rows. Mock support via ALL_SMI_MOCK_MIG=1.
  • NVIDIA extended hardware details (#175): NUMA node ID, GSP firmware mode and version, NvLink remote endpoint classification per active link, and GPM SM occupancy and memory bandwidth utilization exported as Prometheus metrics. TUI shows a compact HW row per GPU with NUMA node, GSP state, and NvLink count.
  • System swap usage in TUI memory section (#226).
  • Interactive filter query bar (/) and threshold alerts (#196): DSL supporting field comparisons, range checks, and host-name pattern matching. Threshold alert history panel (A).
  • Targeted device refresh and stable correlation IDs (#225): Library API additions for selective refresh and per-device correlation identifiers.
  • config path subcommand and active TOML config path in --help (#224).
  • Unified cache paths via dirs::cache_dir() (#229, #230): Linux $XDG_CACHE_HOME/all-smi / ~/.cache/all-smi, macOS ~/Library/Caches/all-smi, Windows %LOCALAPPDATA%\all-smi; one-time best-effort migration from ~/.cache/all-smi/{records,energy-wal.bin}.
  • Standardize NPU Prometheus labels (#181): npu_index/npu_uuid across Tenstorrent, Rebellions, Furiosa, Gaudi, and Google TPU exporters and NPU mock templates.
  • ALL_SMI_MOCK_HARDWARE_DETAILS env-var gate (#182): Toggle extended NVIDIA mock metrics on demand.

Improvements

  • Standardize TUI sub-item indentation across all GPU renderers (#184).
  • Extract shared truncate_str helper into renderers/utils.rs (#183).
  • Resolve clippy lints in mock server and example (#239).

Bug Fixes

  • Correct view-mode remote node counter, spacing, and Topology alignment (#241).
  • Restore terminal cursor on exit (Linux/tmux/VTE) via process-global atomic + idempotent restore_terminal() callable from Drop, panic hook, and signal handlers (#240).
  • Anchor temperature/power/ANE sparklines to fixed Y-axis ranges (#237).
  • Align Docker Rust toolchain with MSRV (#233).
  • Harden cache migration symlink checks (#232).
  • Resolve cross-PR review issues for NVIDIA monitoring features 172 to 175 (#176, #231).
  • Resolve record default output path consistently (#223, #227).
  • Drop non-Press key events to fix Windows double-dispatch in view mode (#222).
  • Upgrade libamdgpu_top to 0.11.5 to fix AMD GPU file descriptor leak (#219).
  • Stabilize GPU Freq display on idle Apple Silicon (#217).
  • Remove unused imports in doctor checks modules (#208).
  • Pin libamdgpu_top to =0.11.4 and rename update_proc_usage call (#207).

CI/CD Improvements

  • Realign Rust MSRV to 1.93 for Launchpad PPA builds (#238).
  • Document Energy Session config in TUI help, --help, and manpage (#209).
  • Gate unreleased subcommands with v0.21.0+ availability notes (#221).
  • Add Teams release notification workflow.
  • Align Launchpad PPA packaging with Rust 1.92, then Rust 1.93.
  • Replace Ubuntu 24.10 packaging with Ubuntu 26.04 LTS.
  • Fix Launchpad noble packaging inputs.

Technical Details

  • New crate dependencies: russh 0.61 for agentless SSH, tar 0.4.46 for the doctor --bundle packer, zstd 0.13 and flate2 1 for compressed record/replay streams, toml 1 and dirs 6 for config file support.
  • The furiosa-smi-rs 2025.3.0 NPU support remains opt-in behind the furiosa Cargo feature; building it requires the Furiosa SDK C headers and is not enabled in default crate builds.
  • libamdgpu_top is pinned exactly to =0.11.5 because the crate has shipped semver-violating breaking changes in patch releases (0.11.4 renamed get_all_proc_usage to update_proc_usage); re-evaluate the exact version on each bump.
  • Both zstd and flate2 are required at the crate level for record/replay because the writer auto-selects by file extension; dynamically gating on a feature would force operators to rebuild to record into a .gz stream.

Dependencies

  • Bump dependencies to latest versions (#228).
  • Pin tar to 0.4.46.

Breaking Changes

  • Prometheus label rename: NVIDIA-specific metrics (pcie, thermal thresholds, performance state, hardware details, vGPU, MIG) now use gpu_index and gpu_uuid instead of index and uuid. All non-NVIDIA NPU exporters (Tenstorrent, Rebellions, Furiosa, Gaudi, Google TPU) and NPU mock templates use npu_index and npu_uuid instead of index and uuid. The remote parser accepts both old and new label names for backward compatibility during migration; alerting rules, dashboards, and external scrapers that hard-code the old label names must be updated.

Known Issues

None.

What's Changed

  • feat: add NVIDIA vGPU monitoring via nvml-wrapper 0.12 by @inureyes in #172
  • feat: add NVIDIA thermal thresholds and P-state monitoring by @inureyes in #173
  • feat: add NVIDIA MIG (Multi-Instance GPU) monitoring by @inureyes in #174
  • feat: add extended NVIDIA hardware details (NUMA, GSP firmware, NvLink, GPM) by @inureyes in #175
  • fix: cross-PR review fixes for NVIDIA monitoring features (#172-#175) by @inureyes in #176
  • feat: standardize NPU Prometheus labels to npu_index/npu_uuid by @inureyes in #181
  • feat: add ALL_SMI_MOCK_HARDWARE_DETAILS env-var gate for extended NVIDIA mock metrics by @inureyes in #182
  • refactor: extract shared truncate_str helper into renderers/utils.rs by @inureyes in #183
  • refactor: standardize TUI sub-item indentation across all GPU renderers by @inureyes in #184
  • feat: add 'snapshot' subcommand for one-shot JSON/CSV/Prometheus output by @inureyes in #195
  • feat(tui): interactive fil...
Read more

v0.20.1

Choose a tag to compare

@inureyes inureyes released this 10 Apr 10:31

Fix local header metric row jitter with fixed-width formatted fields and auto-promote CI releases.

all-smi v0.20.1

3 commits since v0.20.0. (169 lines added, 13 lines deleted)

New Features

None

Improvements

  • Auto-promote pre-release to release after all CI builds complete (#0af81f1)

Bug Fixes

  • Stabilize local header metric row width to prevent left-right jitter by using fixed-width formatted fields for CPU/GPU percentage, temperature, power, and RAM values (#170, #171)

CI/CD Improvements

  • Add auto-promotion workflow that converts pre-release to full release once all platform builds complete

Technical Details

  • format_pct(): right-aligned 5-char numeric field + % = fixed 6-column width (" 0.0%" through "100.0%")
  • format_temp(): right-aligned 3-char numeric field + °C = fixed 5-column width
  • Power format: right-aligned 5-char numeric field + W = fixed 6-char width
  • RAM format: used value padded to match total digit width for stable / separator position
  • Added 6 new stability tests for fixed-width formatting

Dependencies

None

Breaking Changes

None

Known Issues

None

Full Changelog

v0.20.0...v0.20.1

v0.20.0

Choose a tag to compare

@inureyes inureyes released this 10 Apr 07:51

Release v0.20.0

New Features

  • Redesigned local-mode TUI: Dedicated Activity panel with braille sparklines for GPU, ANE, and Pkg Power visualization
  • CPU per-core view: Promoted to always-on display in the local Activity panel
  • Host summary bar: One-line local-mode host summary for quick system overview
  • Per-node LED grid: Relocated next to Cluster Overview in remote mode for better visibility
  • Apple M5 Pro/Max Super core (S-CPU): Added support for the new S-CPU core type and new IOReport channel

Improvements

  • Gate Cluster Overview and tabs behind remote mode for a cleaner local monitoring experience
  • Polish local mode Activity panel — fix border off-by-one, P/E gauge alignment, @hostname suppression, ANE row always-on, and Processes header restyle
  • Complete remaining epic 152 TUI integration gaps

Bug Fixes

  • Fix Apple M5 Pro/Max Super core detection with new IOReport channel support (#168)
  • Fix Activity panel border off-by-one rendering (#166)
  • Fix P/E gauge alignment in local mode (#166)
  • Suppress @hostname display in local mode (#166)

CI/CD Improvements

None

Technical Details

  • New braille sparkline utility module (src/ui/sparkline.rs) for real-time metric visualization
  • Refactored TUI layout to separate local and remote mode rendering paths
  • IOReport channel updates for Apple M5 family support

Dependencies

None

Breaking Changes

None

Known Issues

None

v0.19.0

Choose a tag to compare

@inureyes inureyes released this 08 Apr 13:52

This release focuses on correctness on Apple Silicon: real CPU/GPU die temperatures are now reported through the native SMC path, macOS platform detection is cached to stop re-probing system_profiler every frame, and the process list's TIME+ column no longer pushes the Command column out of alignment for long-running processes.

New Features

None

Improvements

  • Platform detection (has_nvidia, has_gaudi, etc.) is now cached in a process-global OnceLock, so macOS no longer spawns system_profiler SPPCIDataType on every view refresh. The probe runs at most once per process, eliminating hundreds of milliseconds of per-frame work on Apple Silicon. (#149)
  • Dashboard "Avg. Temp" now reports numeric °C on every platform. Apple Silicon gains a dedicated "Thermal" cell carrying qualitative thermal pressure level in the second row so both pieces of information remain visible. (#150)
  • Per-GPU list view shows the real numeric die temperature on Apple Silicon instead of the thermal-pressure text, matching every other platform. (#150)
  • On Apple Silicon, when the GPU temperature sensor is unavailable, the reader now falls back to the SMC CPU die temperature (CPU and GPU share the same SoC die, so the readings track closely). (#150)

Bug Fixes

  • Apple Silicon SMC float decoding: SMC stores flt (IEEE 754 single-precision) sensors in little-endian byte order, unlike the legacy SP78/FP fixed-point types which remain big-endian. The convert_value() helper was calling f32::from_be_bytes() for the FLT type, so every Tg*/Tp*/Te* sensor returned a randomly varying garbage value (e.g. 1e-32, 3e36) and the (10..=120) sanity filter rejected almost everything. Symptoms: GPU temperature showed 0 °C or sporadic 6/7 °C, CPU temperature showed 0 °C, and "Avg. Temp" on the cluster overview only displayed thermal pressure text. Switching the FLT branch to f32::from_le_bytes() restores accurate die temperatures (~50–60 °C idle on M1 Ultra). A regression test (test_flt_little_endian_decoding) prevents the endianness from silently flipping back. (#150)
  • Apple Silicon architecture detail key: The dashboard and aggregator looked up the GPU architecture field as "Architecture", but apple_silicon_native (and the Prometheus exporter) wrote it lowercase as "architecture". The mismatch silently disabled the entire is_apple_silicon special-case path. Standardised on the lowercase form across all readers (Apple Silicon, NVIDIA, Jetson). (#150)
  • cpu_macos::get_cpu_temperature was a stub that always returned None, so the live "CPU Temp." gauge was permanently stuck at 0 °C even though SMC was already collecting the value. It is now wired through the cached NativeMetricsData fetched in get_apple_silicon_cpu_info. (#150)
  • Process list TIME+ column alignment: fixed_widths[11] was 8 characters, but format_cpu_time can emit values up to 10 chars ("8760:00:00" at the 365-day cap). Values like "213:16:04" (9 chars) overflowed the column and pushed Command one column right, breaking alignment with the header and with rows that had shorter times. The column is now 10 chars wide, format_cpu_time's width invariant is documented, and a new regression test (test_format_cpu_time_max_width_fits_time_column) enforces it at all boundary values. (#151)

CI/CD Improvements

None

Technical Details

  • src/device/macos_native/smc.rs: FLT sensor decoding switched from from_be_bytes to from_le_bytes; added test_flt_little_endian_decoding.
  • src/device/apple_silicon*.rs, src/device/cpu_macos.rs, aggregators: unified "architecture" key casing, wired through CPU die temperature, added GPU→CPU temperature fallback.
  • src/device/platform_detection.rs (and related): each detection function wrapped in OnceLock for per-process caching.
  • src/ui/process_renderer.rs: fixed_widths[11] bumped from 8 → 10; format_cpu_time doc comment documents the 10-char width invariant; regression test enforces the invariant across boundary inputs from 0s through 365 days.
  • src/view/ui_loop.rs, src/ui/layout.rs, src/common/config.rs: dashboard layout updates to carry thermal pressure in a second-row cell on Apple Silicon.

Dependencies

No dependency changes in this release.

Breaking Changes

None. The dashboard "Avg. Temp" cell now always shows a numeric temperature; on Apple Silicon, the second-row "Temp. Stdev" cell is repurposed as a "Thermal" cell carrying thermal pressure level. This is a visual change only and preserves all prior information.

Known Issues

None

What's Changed

  • fix: cache platform detection results to avoid per-frame system_profiler by @inureyes in #149
  • fix: decode SMC float sensors as little-endian on Apple Silicon by @inureyes in #150
  • fix: widen process list TIME+ column to prevent Command drift by @inureyes in #151

Full Changelog: v0.18.1...v0.19.0

v0.18.1

Choose a tag to compare

@inureyes inureyes released this 08 Apr 08:38

What's Changed

This release focuses on TUI responsiveness and performance, particularly for remote/SSH monitoring sessions.

New Features

None

Improvements

  • Increase marquee scroll speed now that per-frame stall is fixed

Bug Fixes

  • Eliminate 1-second per-frame stall caused by RuntimeEnvironment::detect() being invoked on every render
  • Make TUI terminal flush non-blocking to restore responsiveness over SSH
  • Reduce TUI rendering overhead for remote/SSH sessions
  • Drain pending key events after render to prevent input cascade when keys are held
  • Cache per-frame filesystem reads and remove detect() from tests
  • Gate Linux-only chassis functions with cfg(target_os) to suppress macOS build warnings
  • Suppress macOS build warnings for Linux-only OnceLock and mut bindings

CI/CD Improvements

None

Technical Details

  • RuntimeEnvironment::detect() is now cached rather than invoked on every frame, removing the dominant source of per-frame latency
  • TUI flush path converted to non-blocking writes so slow SSH links no longer block the render loop
  • Key event draining after each render prevents input cascades on held keys

Dependencies

None

Breaking Changes

None

Known Issues

None

What's Changed

  • refactor: migrate to Rust 2024 edition by @inureyes in #145
  • feat: add DGX Spark (GB10) unified memory architecture support by @inureyes in #146
  • feat: enrich chassis info with DMI data, thermal zones, and GPU power by @inureyes in #148

Full Changelog: v0.18.0...v0.18.1

v0.18.0

Choose a tag to compare

@inureyes inureyes released this 07 Apr 07:54

Release v0.18.0

Major TUI performance improvements: significantly reduced idle CPU usage through event-driven architecture, snapshot-based rendering, and hot-path optimizations.

New Features

  • Event-driven UI wakeups to reduce TUI idle CPU consumption (#139)
  • Snapshot AppState before rendering to shorten critical section (#140)
  • Cache derived TUI view data to avoid per-frame sorting and cloning (#141)
  • Trim hot-path rendering overhead in TUI frame assembly and diff pipeline (#142)

Improvements

  • Add protobuf-devel to Fedora/RHEL build prerequisites in documentation (#143)
  • Keep periodic refresh tick active so idle TUI stays alive

Bug Fixes

  • Fix scroll calculation to use actual visible process rows
  • Fix render throttle bypass for cursor/scroll input to restore responsiveness

CI/CD Improvements

None

Technical Details

  • Rendering pipeline now uses snapshot-based architecture to minimize lock contention
  • View data (sorting, filtering) is cached and only recomputed on state changes
  • Frame assembly and diff pipeline optimized to reduce allocations in hot paths
  • Event loop uses wakeup signals instead of polling for lower idle CPU

Dependencies

None

Breaking Changes

None

Known Issues

None

What's Changed

  • feat: reduce TUI idle CPU with event-driven UI wakeups by @inureyes in #139
  • feat: snapshot AppState before rendering to shorten critical section by @inureyes in #140
  • feat: cache derived TUI view data to avoid per-frame sorting and cloning by @inureyes in #141
  • feat: trim hot-path rendering overhead in TUI frame assembly and diff pipeline by @inureyes in #142
  • docs: add protobuf-devel to Fedora/RHEL build prerequisites by @inureyes in #143

Full Changelog: v0.17.6...v0.18.0

v0.17.6

Choose a tag to compare

@inureyes inureyes released this 06 Apr 03:53

What's Changed in v0.17.6

New Features

None

Improvements

  • Bump GitHub Actions to Node.js 24 compatible versions

Bug Fixes

None

CI/CD Improvements

  • Update GitHub Actions workflows to use Node.js 24 compatible action versions

Technical Details

None

Dependencies

  • Bump hyper from 1.6.0 to 1.9.0
  • Bump nvml-wrapper from 0.12.0 to 0.12.1
  • Bump libamdgpu_top from 0.11.2 to 0.11.3
  • Update transitive dependencies to latest compatible versions

Breaking Changes

None

Known Issues

None