fix(vcores): the core-wait escape at 2 s, not 250 ms (#1929) #2127
No reviewers
Labels
No labels
accessibility
autorelease: pending
autorelease: tagged
bug
dependencies
documentation
duplicate
enhancement
github_actions
good first issue
help wanted
invalid
question
testing wanted
wontfix
No milestone
No assignees
1 participant
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Hookshot!2127
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/vcore-escape-2s"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Part of #1929. When a guest thread has waited too long for a virtual core, the scheduler lets it run without one (an "escape"). The holder is still running on that core, so the two threads share per-core state. That race is the risk #1929 is about.
On current main (after
9f42700e, "WaitAny's scan makes no vcore checkpoint while it holds mw_lock"), the waits that reach 250 ms end by themselves within about 1.2 s. The 250 ms escape fires anyway, 6-8 times per run. This raises both defaults (HOS_VCORE_ESCAPE_US,HOS_VCORE_ESCAPE_EQ_US) to 2 s. The escape stays as a deadlock breaker, and either value can still be set from the environment.A/B, measured on current main: 25-minute route (Kokiri Forest, Hyrule Field, Kakariko), RTX 4060 Ti, docked 1440p, two rounds each, alternating.
The longer waits do not show up as longer frames: the worst frame is the same or shorter at 2 s. An earlier A/B with a 5 s escape, before
9f42700e, did produce 5 s frames. Those long holds are gone on current main.🤖 Generated with Claude Code
Measured after the merge on Linux (Arch, RTX 4090, NVIDIA 615.78.08, headless): the issue's start (fresh profile, Start
about 95 s into the title, 165 s per run), the build of this pull request's commit with
HOS_VCORE_ESCAPE_US/_EQ_USset to 250000 (the old default) against the same build as merged, three runs each, interleaved in one sitting. Not
exclusive: load average 4-8 at the start of four runs, 20 and 66 at the other two.
The same as on your route: no escapes at 2 s, the longest waits end within 1.2 s, frame times the same within the spread.
At a first start (the button-prompt textures written again; 30 s, three runs each) it was 1, 6 and 1 escapes at 250 ms
and none at 2 s. Where the waits over 250 ms came from on this machine, and two host waits that keep a core, are in my
comment on #1929.
github-sync referenced this pull request2026-11-12 06:22:54 +00:00