From 6d8a2817a3e9611f948238591e78129889646779 Mon Sep 17 00:00:00 2001 From: MechaCat02 Date: Thu, 18 Jun 2026 15:47:16 +0200 Subject: [PATCH] [iterate-3R] Fix --ui boot throttle: demote idle-advance scheduler log to DEBUG MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The publisher-splash draws first appear ~30M instructions and ramp through 80M-150M. Headless `check` reaches that window and renders the textured logo (DRAW_INDX=568, gpu.texture.decode{K8888}=279 at -n 150M). The interactive `exec --ui` path appeared to "self-terminate at ~8.8s / ~33M" before reaching the splash. Root cause (measured, not inferred): NO termination and NO guest halt. The `exec --ui` default path runs at the INFO log level (headless `check` runs `--quiet` = WARN). During the boot idle-spin the scheduler has no Ready thread for long stretches and `advance_to_next_wake_if_due` fires once per timed-wait deadline-wake — hundreds of thousands of times. That `tracing::info!` emitted ~286K lines / 154 MB to disk in ~25s, throttling the guest so hard that the instruction count crawled (deadline raced to 325M timebase while instructions stayed near ~5M). The verbose run never terminated — it was alive and logging-bound. Quiet `--ui` (no flood) reaches 161M instr / 2636 GPU draws in ~31s, exactly tracking headless. Fix: demote the per-deadline-wake log from INFO to DEBUG (it is a hot-path scheduler internal). Default `exec --ui` now emits ~1.6K log lines instead of ~235K over the same window; the idle-advance flood drops 286700 -> 0 at INFO, and boot flows to the splash window. Log-level only: deterministic golden byte-identical (n50m --stable-digest --expect matches, exit 0), 679 tests green. Refutes the iterate-3O/3Q "8.8s --ui auto-close / BreakOuter" hypothesis (T1-T5 all negative): the cause was logging wall-clock cost, not a window/present deadlock, watchdog, or guest exception. Co-Authored-By: Claude Opus 4.8 (1M context) --- crates/xenia-cpu/src/scheduler.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/crates/xenia-cpu/src/scheduler.rs b/crates/xenia-cpu/src/scheduler.rs index 8ea53a6..aba1905 100644 --- a/crates/xenia-cpu/src/scheduler.rs +++ b/crates/xenia-cpu/src/scheduler.rs @@ -1293,7 +1293,15 @@ impl Scheduler { }; t.quantum_remaining = QUANTUM_DEFAULT; self.recompute_slot_runnable(r.hw_id); - tracing::info!( + // DEBUG, not INFO: this fires once per timed-wait deadline-wake, which + // during the boot idle-spin happens hundreds of thousands of times. At + // INFO it floods the console/log file and throttles the interactive + // `exec --ui` path so hard (≈286K lines flushed to disk) that the guest + // crawls and never reaches the ~30–150M-instruction splash window — + // which masqueraded as a "--ui early termination" (iterate-3R). The + // headless `check` path runs `--quiet` (WARN) so it was never throttled. + // No execution-semantics change; deterministic golden is unaffected. + tracing::debug!( "scheduler: advanced to deadline {} waking hw={} idx={}", deadline, r.hw_id,