mirror of
https://github.com/Comfy-Org/comfy-aimdo.git
synced 2026-11-04 23:37:21 +00:00
[GH-ISSUE #122] Idle busy-spin in kfd_wait_on_events (~80k ioctls/s, one core at 100%) on gfx1151 APU with 0.5.5; fixed by 0.5.6 upgrade #46
Labels
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Comfy-Org/comfy-aimdo#46
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Originally created by @LeonJi on GitHub (Oct 12, 2026).
Original GitHub issue: https://github.com/Comfy-Org/comfy-aimdo/issues/122
Environment
gfx1151(Strix Halo), 128 GB unified memory, no dGPUe8665ca(2026-10-13), launched with--reserve-vram 32 --cache-ram 4 8 --highvramSymptom (comfy-aimdo 0.5.5)
Idle ComfyUI service burned ~100% of one full CPU core (~82% of it in kernel time) continuously for 5+ hours. A native thread created ~2-3 s after process start (thread
comminherited as "python", invisible to py-spy) was hot:strace -c -p <tid>: 100% of samples inioctl, ~80,000 ioctls/sec on/dev/kfdperf record:[k] kfd_wait_on_events+[k] __raw_spin_lock_irqsavedominating--highvramwas set, but fast_disk/model-mmap paths were loaded)Result after upgrading to 0.5.6
Idle CPU 0%. I then re-ran the same full model matrix that used to sit next to the spinning service:
So the 0.5.5 → 0.5.6 upgrade resolved this for me.
Why this is maybe still worth tracking
kfd_wait_on_eventsin a tight loop with no visible backoff on this APU — if the 0.5.6 fix simply switched that loop to sleep/interrupt mode, it would be good to confirm, since Strix Halo's KFD event behavior under interrupt-less polling has bitten other projects too.Questions
@LeonJi commented on GitHub (Oct 12, 2026):
Closing — my own follow-up investigation shows the 0.5.5 vs 0.5.6 delta is only the NULL-guard refactor in
physical_page_unref(identical export sets, +72 byte .so), i.e. nothing on the event-wait path. The idle spin was most likely armed by runtime state rather than the version. I'm running a controlled replay (load-failure churn on 0.5.6) and will reopen with exact repro steps if it reproduces.