Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: lablup/all-smi
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v0.18.0
Choose a base ref
...
head repository: lablup/all-smi
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v0.18.1
Choose a head ref
  • 12 commits
  • 102 files changed
  • 2 contributors

Commits on Apr 7, 2026

  1. refactor: migrate to Rust 2024 edition (#145)

    * refactor: fix temporary value drop order for Rust 2024 compatibility
    
    Bind async results to explicit let variables before match expressions
    to ensure temporaries are dropped before MutexGuard and other locals
    with custom Drop impls, preventing drop order changes in Rust 2024.
    
    * refactor: rename gen variables for Rust 2024 keyword reservation
    
    Rename local variables named 'gen' to 'pcie_gen_value', 'generation',
    or 'generator' since 'gen' becomes a reserved keyword in Rust 2024.
    Use r#gen for external crate field access (amdgpu link.gen).
    
    * refactor: apply Rust 2024 edition auto-fixable changes
    
    - Change macro expr fragment specifiers to expr_2021 for forward compat
    - Convert if-let-else chains to match expressions (Rust 2024 requirement)
    - Remove unnecessary ref in if-let patterns
    - Add unsafe block inside unsafe fn body (Rust 2024 requirement)
    
    * chore: remove accidentally committed tmp.pb
    
    * refactor: switch Cargo.toml edition to 2024
    
    Update edition from 2021 to 2024 and apply all resulting changes:
    - Collapse nested if-let blocks using Rust 2024 let-chain syntax
    - Reorder imports per Rust 2024 formatting rules
    - Fix indentation in let-chain expressions
    
    * refactor: fix ref mut in implicit borrowing patterns for Rust 2024
    
    Remove explicit ref mut binding modifiers in patterns that already
    implicitly borrow through &mut references (Rust 2024 requirement).
    Also add tmp.pb to .gitignore.
    inureyes authored Apr 7, 2026
    Configuration menu
    Copy the full SHA
    4b9a3f6 View commit details
    Browse the repository at this point in the history

Commits on Apr 8, 2026

  1. feat: add DGX Spark (GB10) unified memory architecture support (#146)

    * feat: add DGX Spark (GB10) unified memory architecture support
    
    Detect UMA on Blackwell-class GPUs where NVML memory_info() returns
    unavailable, and fall back to system memory from /proc/meminfo.
    Suppress misleading PCIe metrics for UMA devices and annotate device
    details with memory type and interconnect information.
    
    * fix: correct swapped total/used memory destructuring for UMA devices
    
    get_system_memory_for_uma() returns (total, used) but the NVML code
    path destructured it as (used, total), causing memory values to be
    swapped on GB10 systems.
    
    * fix: correct swapped total/used memory for discrete GPUs in NVML path
    
    The previous fix (af86da0) swapped the destructuring order to fix UMA
    devices but inadvertently broke discrete GPUs by binding m.used to
    total_memory and m.total to used_memory. Align the tuple elements with
    the (total_memory, used_memory) destructuring.
    
    * refactor: reduce redundant NVML calls for UMA detection
    
    Call memory_info() once per device per tick instead of 3 times.
    Cache the result and pass memory_total to is_uma_device_with_mem().
    Remove redundant Memory Type insertion from hot path (already cached
    in device detail).
    
    * test: expand UMA coverage and extract is_uma_device_name helper
    
    Extract a pure `is_uma_device_name` function from the duplicated
    name-matching logic in `is_uma_device_with_mem` and the nvidia-smi
    fallback path, eliminating duplication and making the predicate
    directly testable.
    
    Add 10 new unit tests covering:
    - is_uma_device_name: gb10, dgx spark (case-insensitive), non-UMA GPUs,
      empty string
    - read_meminfo_memory: successful parse from a temp file, missing file
    - parse_meminfo_content: available > total saturating_sub, malformed lines
    inureyes authored Apr 8, 2026
    Configuration menu
    Copy the full SHA
    976ac04 View commit details
    Browse the repository at this point in the history
  2. feat: enrich chassis info with DMI data, thermal zones, and GPU power (

    …#148)
    
    * feat: enrich chassis info with DMI data, thermal zones, and GPU power
    
    - Read DMI fields (product name, vendor, board, version, BIOS) from
      /sys/class/dmi/id/ on Linux (no sudo required)
    - Read ACPI thermal zones for inlet/outlet board temperatures
    - Wire up chassis reader in API server data collection loop
    - Aggregate GPU power into chassis total_power_watts
    - Add all_smi_chassis_info Prometheus metric with DMI labels
    - Add inject_gpu_power helper for both TUI and API paths
    
    Closes #147
    
    * fix: improve Prometheus label escaping and cache DMI data
    
    - Escape backslash and newline in Prometheus label values per spec
      (previously only double-quote was escaped)
    - Cache static DMI fields at GenericChassisReader construction time
      instead of re-reading /sys/class/dmi/id/ on every collection cycle
    
    * test: add tests for Prometheus label escaping and chassis DMI metrics
    
    Add unit tests for MetricBuilder label escaping (backslash, double-quote,
    newline) and ChassisMetricExporter covering the all_smi_chassis_info DMI
    labels metric, inlet/outlet temperature, no-DMI guard, and
    MetricPresenceFlags::all_present.
    inureyes authored Apr 8, 2026
    Configuration menu
    Copy the full SHA
    7e75ec7 View commit details
    Browse the repository at this point in the history
  3. fix: gate Linux-only chassis functions with cfg(target_os) to suppres…

    …s macOS warnings
    
    DMI reading, thermal zone functions, and their tests are only
    applicable on Linux. Add #[cfg(target_os = "linux")] to prevent
    dead_code and unused_mut warnings on macOS and Windows builds.
    inureyes committed Apr 8, 2026
    Configuration menu
    Copy the full SHA
    e0863f6 View commit details
    Browse the repository at this point in the history
  4. fix: reduce TUI rendering overhead for remote/SSH sessions

    Two changes to reduce terminal output bandwidth:
    
    1. Only enable fast animation ticks (200ms) when there are actual
       scroll animations running, not unconditionally in remote mode.
       Previously !is_local_mode always activated fast ticks, causing
       200ms redraws even when no text was scrolling.
    
    2. Increase SCROLL_UPDATE_FREQUENCY from 1 to 5, so marquee text
       updates every 500ms instead of every 100ms. This reduces the
       number of changed lines per frame by ~5x for multi-node views.
    inureyes committed Apr 8, 2026
    Configuration menu
    Copy the full SHA
    2b5ee79 View commit details
    Browse the repository at this point in the history
  5. fix: make TUI terminal flush non-blocking for SSH responsiveness

    The root cause of keyboard lag over SSH: stdout.flush() is a blocking
    syscall that stalls the entire async event loop when the terminal pipe
    is congested. On slow SSH connections, flush can block for hundreds of
    milliseconds, during which keyboard events cannot be processed.
    
    Changes:
    - DifferentialRenderer now returns a byte buffer instead of writing
      directly to stdout, separating diff computation from I/O
    - Terminal write+flush is offloaded to spawn_blocking (fire-and-forget)
      so the event loop immediately returns to processing keyboard input
    - If a previous flush is still in progress, the current frame is
      skipped to prevent unbounded backpressure on slow pipes
    - Added flush_in_progress AtomicBool flag for lock-free coordination
    inureyes committed Apr 8, 2026
    Configuration menu
    Copy the full SHA
    da094a9 View commit details
    Browse the repository at this point in the history
  6. fix: drain pending key events after render to prevent input cascade

    Reverts the spawn_blocking fire-and-forget approach which caused frame
    drops and unresponsive UI. Instead, keeps synchronous flush but adds
    event draining after each render cycle.
    
    The root cause of key buffering over SSH: flush blocks for hundreds of
    ms, during which key events accumulate in the channel. Previously,
    each queued event triggered its own render+flush cycle, creating a
    cascade where a single keypress during a slow flush led to multiple
    sequential re-renders.
    
    Now after each render, all pending terminal events are drained from
    the channel and batch-processed, followed by a single re-render.
    This eliminates the per-event render cascade.
    inureyes committed Apr 8, 2026
    Configuration menu
    Copy the full SHA
    805aca4 View commit details
    Browse the repository at this point in the history
  7. fix: eliminate 1-second per-frame stall caused by RuntimeEnvironment:…

    …:detect()
    
    Root cause found: AppState::new() called RuntimeEnvironment::detect()
    which runs `systemd-detect-virt` (external process fork+exec) on every
    invocation. Since as_app_state() calls AppState::new() once per render
    frame, this added ~1 second of blocking per frame.
    
    - Add Default impl for RuntimeEnvironment (no detection, instant)
    - Change AppState::new() to use RuntimeEnvironment::default() instead
      of RuntimeEnvironment::detect()
    - RuntimeEnvironment::detect() is still called once at startup in
      main.rs and propagated via state; the per-frame as_app_state()
      copies the already-detected value from the snapshot
    
    Also fixes divide-by-zero panic in dashboard sparkline when
    available_width is 0.
    inureyes committed Apr 8, 2026
    Configuration menu
    Copy the full SHA
    6dde26a View commit details
    Browse the repository at this point in the history
  8. update: increase marquee scroll speed now that frame stall is fixed

    SCROLL_UPDATE_FREQUENCY 5 → 2 (scroll every 200ms instead of 500ms).
    The previous slowdown was a workaround for the RuntimeEnvironment::detect()
    stall which is now resolved.
    inureyes committed Apr 8, 2026
    Configuration menu
    Copy the full SHA
    361c1ee View commit details
    Browse the repository at this point in the history
  9. fix: cache per-frame filesystem reads and remove detect() from tests

    Audit found two additional hot-path performance issues:
    
    1. cpu_renderer.rs: /.dockerenv existence check + up to 3 cgroup file
       reads executed on EVERY frame when per-core CPU view is enabled.
       Now cached in OnceLock (read once, reused forever).
    
    2. ui/tabs.rs test helper: RuntimeEnvironment::detect() called in
       test fixture, adding ~1s per test run from systemd-detect-virt.
       Changed to RuntimeEnvironment::default().
    
    Test suite speedup: lib 1.02s→0.28s, integration 1.02s→0.10s.
    inureyes committed Apr 8, 2026
    Configuration menu
    Copy the full SHA
    7c73d56 View commit details
    Browse the repository at this point in the history
  10. fix: suppress macOS build warnings for Linux-only OnceLock and mut

    - Use fully qualified std::sync::OnceLock in #[cfg(target_os = "linux")]
      static to avoid unused import on macOS
    - Add #[allow(unused_mut)] to dmi_detail in GenericChassisReader::new()
      since mutation is cfg-gated to Linux only
    inureyes committed Apr 8, 2026
    Configuration menu
    Copy the full SHA
    9801279 View commit details
    Browse the repository at this point in the history
  11. release: v0.18.1

    inureyes committed Apr 8, 2026
    Configuration menu
    Copy the full SHA
    6b3f142 View commit details
    Browse the repository at this point in the history
Loading