perf #418: publish landblocks under the meter, not one per streaming tick
Phase-1 measurement (new [publish-timing]/[stream-tick] probe surfaces, ACDREAM_PROBE_REVEAL_TIMING=1) refuted the ~31 ms-per-admission hypothesis: the hold runs at ~64 fps with the streaming tick at ~32 Hz, the whole 625-block window costs only ~500 ms of publication CPU (far blocks ~0.17 ms, near 2-43 ms), and steady state showed ZERO meter yields with ~0.22 ms of the 2 ms budget used - yet exactly one block published per tick against a ~400-deep completion queue. The real limiter: Runtime's collision-generation activation is a deliberate two-poll transaction (the first TryAcquireCollisionPrefixMutationPermission poll parks residents and refuses by design), and LandblockPresentationPipeline.Advance's metered arm returned Completed=false on ANY nonterminal commit, which DrainAndApply treats as end-of-frame. One landblock per 32 Hz tick = the flat 32/s, with the authored budget ~90% idle. Fix: the metered arm now uses the same Runtime-owned gate the unmetered arm and the synchronous CompletePublication API always used (CanContinueMutationSynchronously). The second poll runs in the same frame under the same meter, so the unchanged 2 ms elapsed-time ceiling is now genuinely the authoritative per-frame bound; with any real debt (live residents parked mid-game, pending withdrawals, dispatch backlog) publication defers to the next frame exactly as before. No budget values change, no reveal-gate/readiness change, and the streamed result is byte-identical - only the frame scheduling of identical operations. Measured A/B (this binary, two runs): totalMs 12689 / 12734 vs baseline 26728/27395/27503; loaded slope 32/s -> bursts of 100-360/s, 625/625 in ~6-7 s vs ~23 s. The remaining ~12.7 s floor is fully attributed in docs/ISSUES.md: ~8 s of real budgeted readiness work plus retail's authored tunnel exit (TunnelContinue 2-5 s + two 1 s fades, golden constants), so the <12 s acceptance needs a lead decision on the hold-time budget, not another hidden limiter. New regression pin: MeteredLoaded_NonterminalCommitWithoutDebt_CompletesInOneMeteredAdvance. Gates: Release build 0 errors; App tests 5576/3 skips/0 failed; Runtime tests 1756/0. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
45f379560a
commit
11106c70e7
6 changed files with 408 additions and 5 deletions
|
|
@ -47,6 +47,7 @@ internal sealed class RevealTimingProbe
|
|||
private long _gateReadyMs = -1;
|
||||
private long _materializedMs = -1;
|
||||
private long _lastProgressMs;
|
||||
private int _framesSinceProgress;
|
||||
|
||||
public RevealTimingProbe(Func<int>? loadedLandblockCount) =>
|
||||
_loadedLandblockCount = loadedLandblockCount;
|
||||
|
|
@ -88,6 +89,7 @@ internal sealed class RevealTimingProbe
|
|||
if (_generation == 0 || portal.Generation != _generation)
|
||||
return;
|
||||
|
||||
_framesSinceProgress++;
|
||||
long elapsed = _clock.ElapsedMilliseconds;
|
||||
if (!_render && readiness.IsRenderNeighborhoodReady)
|
||||
{
|
||||
|
|
@ -136,13 +138,21 @@ internal sealed class RevealTimingProbe
|
|||
if (!_summarized && elapsed - _lastProgressMs >= 1000)
|
||||
{
|
||||
_lastProgressMs = elapsed;
|
||||
// #418: frames = render frames observed since the previous
|
||||
// progress line (the hold's effective frame rate). The paired
|
||||
// [stream-tick] line carries the same window's streaming-tick
|
||||
// wall clock, meter operation/yield/admission counts, backlogs,
|
||||
// and the reasons the meter refused work.
|
||||
Console.WriteLine(
|
||||
$"[reveal-timing] elapsedMs={elapsed} "
|
||||
+ $"render={(_render ? 1 : 0)} "
|
||||
+ $"composites={(_composites ? 1 : 0)} "
|
||||
+ $"collision={(_collision ? 1 : 0)} "
|
||||
+ $"loaded={_loadedLandblockCount?.Invoke() ?? -1}"
|
||||
+ $"/{_windowLandblocks}");
|
||||
+ $"/{_windowLandblocks} "
|
||||
+ $"frames={_framesSinceProgress}");
|
||||
PublicationTimingProbe.EmitStreamingTickWindow();
|
||||
_framesSinceProgress = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue