Commit Graph

21 Commits

Author SHA1 Message Date
Geoffrey McRae
ee9d958626 [idd] scheduler: avoid secondary subscription replays 2026-08-06 18:04:10 +10:00
Geoffrey McRae
807ea52b02 [idd] scheduler: reject isolated work timing stalls 2026-08-06 18:04:10 +10:00
Geoffrey McRae
d3ee46f376 [idd] scheduler: prioritize deadline publication 2026-08-06 18:04:10 +10:00
Geoffrey McRae
3e9dadf340 [idd] scheduler: reserve slots for frame subscribers
Replace the oldest provisional schedule entry when the bounded client
table has no empty slot. Never evict a client whose frame subscription has
already been observed.

This prevents rapid failed reconnects from filling every scheduler slot
before a real frame subscriber can be registered.
2026-08-06 18:02:08 +10:00
Geoffrey McRae
ece6afd74e [idd] scheduler: retain frames behind stalled owners
Keep preparing the newest frame when both private owner lanes remain
referenced by a non-consuming timing client. Reuse only an unreferenced
completed buffer and continue serving eligible shared subscribers.

Track owner delivery separately from local retention so cadence advances
without acknowledging owner delivery or accepting phase feedback. Republish
the newest completed frame as soon as an owner lane becomes available.
2026-08-06 18:02:08 +10:00
Geoffrey McRae
eaf8de5e1d [idd] scheduler: republish after owner subscription
Consume subscription notifications from the private owner queues. When
any lane gains a subscriber, request a retained-frame publication for
the current timing owner so a static desktop cannot leave it waiting.
2026-08-06 18:02:08 +10:00
Geoffrey McRae
515f4ba06f [client/host/idd/obs] scheduler: validate phase feedback
Bump KVMFR to version 28 and attach generation, epoch, and deadline
identities to cadence deliveries and their timing records.

Accept phase corrections only for the exact completed publication. Keep
VM and client clocks independent by exchanging relative phase errors.

Make submission, completion, and work-estimate accounting best effort
so scheduler state cannot delay GPU submission or frame publication.
2026-08-06 18:02:08 +10:00
Geoffrey McRae
983cf588e3 [idd] scheduler: skip expired publication slots
Advance past cadence deadlines whose publication targets have already
expired after a completed periodic frame.

Use the same slack, work, and safety lead as target selection so the next
publisher wait cannot immediately expire again.
2026-08-06 18:02:08 +10:00
Geoffrey McRae
909271bfe1 [idd] scheduler: preserve concurrent force requests
Replace the shared force and republish booleans with request tickets.
A completed publication now acknowledges only requests captured when it
began, so a concurrent immediate or cadence-break request survives.
2026-08-06 18:02:08 +10:00
Geoffrey McRae
160c5fd1fa [idd] scheduler: fold late forces into cadence
Treat a forced publication as periodic once the normal pre-deadline
send point is due. This prevents an immediate forced copy from being
followed by another copy for the same cadence slot.
2026-08-06 18:02:08 +10:00
Geoffrey McRae
c56b10b194 [idd] scheduler: detect high-rate cadence breaks
Keep the client schedule floor at 2 ms while accepting shorter guest
frame intervals for cadence tracking. This lets sources above 500 Hz
trigger immediate final-frame delivery when their cadence breaks.
2026-08-06 18:02:08 +10:00
Geoffrey McRae
4c1722feac [idd] scheduler: report actual acquired frame rate
Derive the source rate from unique frames observed over the actual log
interval. The old EWMA discarded intervals below 2 ms, capping the
reported rate at 500 Hz and understating high-rate sources.
2026-08-06 18:02:07 +10:00
Geoffrey McRae
f95c8f0660 [idd] scheduler: pace secondary frame delivery 2026-08-05 17:10:35 +10:00
Geoffrey McRae
c7ed04412e [client/idd/obs] scheduler: isolate timing owner delivery 2026-08-05 15:45:30 +10:00
Geoffrey McRae
0b9b805530 [idd] scheduler: retain frames for publication deadlines
Prepare each acquired content frame into one of two private GPU
candidates so the IddCx frame can be released without copying it to
IVSHMEM immediately.

Wake a high-resolution publisher at the client deadline and send the
newest completed candidate. Preserve accumulated damage across
superseded candidates, include the scheduling hold in end-to-end timing,
and keep transport work on the existing physical copy queue.
2026-08-05 12:38:07 +10:00
Geoffrey McRae
d0fa4a8ddd [idd] scheduler: publish frames after guest cadence breaks
Discard the learned guest arrival period when a frame follows a gap
much larger than expected. Force that frame through and relearn the
arrival rate so sparse updates are not held for a frame that never
arrives.
2026-08-05 10:24:57 +10:00
Geoffrey McRae
5be46121a2 [client/idd] preserve frame timing across reconnects 2026-08-04 13:49:07 +10:00
Geoffrey McRae
5ebc208d43 [client/idd] harden demand-driven frame delivery 2026-08-04 13:49:07 +10:00
Geoffrey McRae
97e7f439c2 [client/idd] align frame delivery to presentation 2026-08-04 13:49:07 +10:00
Geoffrey McRae
32ced2f24a [idd] publish the latest frame before its deadline 2026-08-04 13:49:07 +10:00
Geoffrey McRae
1176e78a7f [idd] elect the fastest frame timing client 2026-08-04 13:49:07 +10:00