docs(perf): commit physical Slice A baselines
Capture the authoritative capped, uncapped, and dense-Arwic routes on the physical AMD display path. Preserve the portal allocation, exception-storm, and repeated-Caul memory failures as MP1c's before-state while unblocking the prepared-asset cutover.
This commit is contained in:
parent
49f3a48ee6
commit
2421d09f5d
6 changed files with 335 additions and 19 deletions
|
|
@ -1562,8 +1562,8 @@ port in any phase — no separate listing here.
|
|||
> remains DEFERRED**: ECS is the *throughput* lever (raise avg FPS ~230→300), a
|
||||
> DIFFERENT goal from steadiness — revisit ONLY if the user wants a higher raw FPS
|
||||
> number and accepts the rewrite risk. Rust rejected. Parked (resume from the table
|
||||
> below): MP1b pak/bake is now complete; MP1c remains gated on corrected
|
||||
> physical-local baselines. The remaining parked items are
|
||||
> below): MP1b pak/bake is now complete and the corrected physical-local
|
||||
> baselines have landed, so MP1c is active. The remaining parked items are
|
||||
> MP-Alloc hard sites and MP1c. MP2 has shipped. Full rationale:
|
||||
> `project_mp_track_findings.md`.
|
||||
> The 2026-07-18 portal/resource-lifetime repair does not resume MP's ECS, pak,
|
||||
|
|
@ -1582,11 +1582,14 @@ port in any phase — no separate listing here.
|
|||
> unifies the unfinished MP pak/render-world work with future Track LH, preserves
|
||||
> retail-shaped simulation and the N.5 renderer, and reorders execution around
|
||||
> prepared content and cost-budgeted streaming before render-ECS throughput.
|
||||
> **Execution update 2026-07-24:** Slice A's corrected tooling and diagnostic
|
||||
> RDP captures have landed. The committed evidence includes capped/uncapped
|
||||
> nine-stop routes, dense Arwic, portal windows, observer-effect measurement,
|
||||
> binary provenance, and contention stacks. The physical-local AMD-display gate
|
||||
> remains open and blocks Slice C. Slice B EnvCell dedup is complete; its
|
||||
> **Execution update 2026-07-24:** Slice A's corrected tooling, diagnostic RDP
|
||||
> captures, and authoritative physical-local captures have landed. The
|
||||
> committed evidence includes capped/uncapped nine-stop routes, dense Arwic,
|
||||
> portal windows, observer-effect measurement, binary provenance, and
|
||||
> contention stacks. The physical runs confirm fast steady rendering but also
|
||||
> preserve repeated-portal memory plateau failures, ~200 MiB allocation frames,
|
||||
> and thousands of invalid typed-Setup probes as MP1c's before-state. Slice C
|
||||
> is unblocked and active. Slice B EnvCell dedup is complete; its
|
||||
> [full-bake report](../research/2026-07-24-slice-b-full-bake-report.md)
|
||||
> records the 42.6× result and corrected geometry-identity collision.
|
||||
|
||||
|
|
@ -1613,7 +1616,7 @@ hitch and follows.
|
|||
| MP1b | Pak format + `acdream-bake` CLI + mmap `PakReader` + equivalence/full-scale gate | ✅ **SHIPPED 2026-07-24** — 729,888 EnvCell keys → 17,117 unique geometries + 712,771 aliases (42.6×), 751,141 total keys / 38,370 physical blobs, zero failures, 28,192.4 MiB, 81.4 s validated atomic publish; full-DAT gate also corrected a real collision in WB's legacy geometry hash. [Report](../research/2026-07-24-slice-b-full-bake-report.md) |
|
||||
| **MP-Alloc (safe batch)** | Reuse per-frame buffers: anim pose, particle draw-list, interior partition, animatedIds/drawableCells sets | ✅ SHIPPED + USER-GATED 2026-07-05 — dense-town frame-time spikes 20–87ms → 6–10ms, alloc spikes (30–75MB single-frame) eliminated, gen2 GC 5–11/window → ~0; user confirms FPS steady. 4 commits `b8c05e2b`..`91afea24` |
|
||||
| MP-Alloc (hard sites) | EnvCell settled-camera rebuild gate + physics `Transition` pooling — the residual steady ~1.6MB/frame | ⚪ OPTIONAL follow-up — would lower the median too, but the wild-swing complaint is already resolved; each needs its own careful gate (batch correctness / physics faithfulness) |
|
||||
| MP1c | Streaming cutover to pak + hitch gate | ⏸ blocked on the physical-local corrected Slice A baseline; Slice B package foundation is complete |
|
||||
| MP1c | Streaming cutover to pak + hitch gate | **ACTIVE 2026-07-24** — physical-local Slice A gate committed; baseline: uncapped CPU p50/p95/p99 1.520/5.694/7.825 ms, GPU 0.897/3.239/3.406 ms, portal allocation max 212.7 MiB, repeated-Caul working-set growth 295.1 MiB. Slice B package foundation is complete |
|
||||
| MP2 | Retail particle distance/cell-view degradation: DAT-authored range, exact infinite/finite off-view update branches, emitter-first render scan, user-requested 2× default range | ✅ SHIPPED 2026-07-17 — Aerlinthe hotspot `0x32000223` resolves to retail 64m and defaults to 128m; landscape/entity streaming distance unchanged |
|
||||
| MP3 | Arch ECS render world + delta submission (the 300-FPS lever) | ⚪ — note: does NOT fix the steady-state GC churn (that's MP-Alloc); MP3 is the draw-submission throughput lever |
|
||||
| MP4 | Zero-alloc frame loop + flat physics data (residual, post-MP-Alloc) | ⚪ hard-queued behind M1.5 #137 |
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
**Date:** 2026-07-24
|
||||
|
||||
**Status:** Slice A tooling and diagnostic RDP baselines landed; Slice B
|
||||
complete. The physical-local Slice A gate still blocks Slice C.
|
||||
**Status:** Slice A complete on the physical reference display; Slice B
|
||||
complete. Slice C is unblocked and active.
|
||||
|
||||
**Scope:** Reconcile and sequence the existing Modern Pipeline (`MP`) and
|
||||
Linux/headless (`LH`) tracks using the 2026-07-24 connected performance audit.
|
||||
|
|
@ -577,8 +577,14 @@ and uncapped nine-stop RDP routes, a pinned dense-Arwic RDP sample, observer
|
|||
effect, portal windows, and contention stacks are committed in
|
||||
[`../research/2026-07-24-slice-a-rdp-baselines.md`](../research/2026-07-24-slice-a-rdp-baselines.md)
|
||||
and its machine-readable companion. They prove the tooling is usable but are
|
||||
diagnostic-only. The physical-local AMD-display repetitions remain required,
|
||||
so Slice C is still blocked. Slice B was baseline-independent and is complete.
|
||||
diagnostic-only. The authoritative capped/uncapped nine-stop and pinned
|
||||
dense-Arwic repetitions are committed in
|
||||
[`../research/2026-07-24-slice-a-physical-local-baselines.md`](../research/2026-07-24-slice-a-physical-local-baselines.md)
|
||||
and its machine-readable companion. All routes completed and disconnected
|
||||
gracefully. They also preserve the two repeated-portal memory plateau failures,
|
||||
~200 MiB portal allocation frames, and typed-Setup exception storm as Slice C's
|
||||
before-state instead of weakening the gates. Slice A and Slice B are complete;
|
||||
Slice C is unblocked.
|
||||
|
||||
### Slice B — Finish MP1b EnvCell dedup and full bake
|
||||
|
||||
|
|
@ -1123,11 +1129,13 @@ an improvement" carries the same evidence burden as a regression claim.
|
|||
|
||||
## 14. Current execution point
|
||||
|
||||
Slice A's tooling and diagnostic RDP evidence are complete, and Slice B's
|
||||
prepared-content bake is complete. The next implementation is Slice C, but its
|
||||
physical-local prerequisite remains open. Do not start Slice C until the
|
||||
capped/uncapped nine-stop and pinned dense-Arwic routes have been repeated on
|
||||
the physical local AMD display path and committed.
|
||||
Slice A's tooling and authoritative physical-local evidence are complete, and
|
||||
Slice B's prepared-content bake is complete. Slice C is active. Its comparison
|
||||
baseline is the committed physical-local capture at
|
||||
`49f3a48ee63b82d00731b0f91497930925279c86`: uncapped CPU p50/p95/p99
|
||||
1.520/5.694/7.825 ms, GPU p50/p95/p99 0.897/3.239/3.406 ms, portal allocation
|
||||
max 212.7 MiB, process allocation mean 50.0 MB/s, and a repeated-Caul working
|
||||
set plateau failure of 295.1 MiB.
|
||||
|
||||
The intended order is therefore:
|
||||
|
||||
|
|
|
|||
216
docs/research/2026-07-24-slice-a-physical-local-baselines.json
Normal file
216
docs/research/2026-07-24-slice-a-physical-local-baselines.json
Normal file
|
|
@ -0,0 +1,216 @@
|
|||
{
|
||||
"schemaVersion": 1,
|
||||
"capturedUtcDate": "2026-07-24",
|
||||
"authority": "physical-local-performance-gate",
|
||||
"referenceConfig": "docs/research/2026-07-24-performance-reference-configuration.json",
|
||||
"sourceCommit": "49f3a48ee63b82d00731b0f91497930925279c86",
|
||||
"binaryCommit": "49f3a48ee63b82d00731b0f91497930925279c86",
|
||||
"binaryMatchesSource": true,
|
||||
"trackedSourceCleanAtLaunch": true,
|
||||
"rawArtifactPolicy": "Raw CSV, EventPipe, screenshot, process report, and runtime logs remain local and uncommitted.",
|
||||
"captures": [
|
||||
{
|
||||
"name": "capped-nine-stop",
|
||||
"renderMode": "default-240hz-cap",
|
||||
"route": "Caul, Sawato, Rynthid, Aerlinthe, Sawato, Holtburg, Caul, Sawato, Caul",
|
||||
"result": "behavior-pass-graceful-memory-plateau-fail",
|
||||
"failures": [
|
||||
"Caul plateau: private memory grew by 699.8 MiB",
|
||||
"Caul plateau: working set grew by 685.6 MiB"
|
||||
],
|
||||
"elapsedSeconds": 518.992,
|
||||
"measuredSeconds": 506.231,
|
||||
"frames": 107081,
|
||||
"frameCpuUs": { "p50": 4287, "p95": 6972, "p99": 9404, "p999": 24353, "max": 400864 },
|
||||
"gpuUs": { "p50": 1702, "p95": 3261, "p99": 3847, "max": 392882 },
|
||||
"frameThreadAllocationBytes": {
|
||||
"p50": 28736,
|
||||
"p95": 71792,
|
||||
"p99": 138872,
|
||||
"max": 213380600,
|
||||
"total": 6479379592
|
||||
},
|
||||
"updateUs": { "p50": 330, "p95": 918, "p99": 1451, "max": 344610 },
|
||||
"uploadUs": { "p50": 3, "p95": 14, "p99": 95, "max": 26968 },
|
||||
"process": {
|
||||
"allocationBytesPerSecondMean": 44249541,
|
||||
"allocationBytesPerSecondMax": 3058988720,
|
||||
"gcPauseSecondsTotal": 2.900301,
|
||||
"gcPauseSecondsMax": 0.311808,
|
||||
"gen0Collections": 191,
|
||||
"gen1Collections": 159,
|
||||
"gen2Collections": 54,
|
||||
"contentions": 7292,
|
||||
"workingSetBytesMax": 1714360320,
|
||||
"privateMiBMax": 2193.0,
|
||||
"argumentOutOfRangeExceptions": 4851
|
||||
},
|
||||
"caulOwnership": {
|
||||
"baseline": {
|
||||
"worldEntities": 21031,
|
||||
"animatedEntities": 18,
|
||||
"meshRenderData": 604,
|
||||
"meshAtlasArrays": 41,
|
||||
"trackedGpuBytes": 389182880,
|
||||
"ownedCompositeTextures": 163,
|
||||
"managedBytes": 236408440,
|
||||
"managedCommittedBytes": 449298432,
|
||||
"lohSizeBytes": 177433280,
|
||||
"lohFragmentationBytes": 91783776
|
||||
},
|
||||
"plateau": {
|
||||
"worldEntities": 21025,
|
||||
"animatedEntities": 13,
|
||||
"meshRenderData": 560,
|
||||
"meshAtlasArrays": 40,
|
||||
"trackedGpuBytes": 426820784,
|
||||
"ownedCompositeTextures": 120,
|
||||
"managedBytes": 303350840,
|
||||
"managedCommittedBytes": 1235050496,
|
||||
"lohSizeBytes": 258374440,
|
||||
"lohFragmentationBytes": 156493168
|
||||
}
|
||||
},
|
||||
"portalWindows": [
|
||||
{ "destination": "Caul", "cpuP99Us": 15014, "cpuMaxUs": 133252, "gpuP99Us": 4720, "allocationMaxBytes": 55772024, "updateP99Us": 3533, "uploadP99Us": 341 },
|
||||
{ "destination": "Sawato", "cpuP99Us": 9807, "cpuMaxUs": 400864, "gpuP99Us": 2825, "allocationMaxBytes": 213252672, "updateP99Us": 1544, "uploadP99Us": 192 },
|
||||
{ "destination": "Rynthid", "cpuP99Us": 5995, "cpuMaxUs": 274134, "gpuP99Us": 1436, "allocationMaxBytes": 13526920, "updateP99Us": 1297, "uploadP99Us": 168 },
|
||||
{ "destination": "Aerlinthe", "cpuP99Us": 5108, "cpuMaxUs": 315555, "gpuP99Us": 1383, "allocationMaxBytes": 13427160, "updateP99Us": 744, "uploadP99Us": 91 },
|
||||
{ "destination": "Sawato-revisit", "cpuP99Us": 5131, "cpuMaxUs": 323338, "gpuP99Us": 2193, "allocationMaxBytes": 213380600, "updateP99Us": 727, "uploadP99Us": 129 },
|
||||
{ "destination": "Holtburg", "cpuP99Us": 8234, "cpuMaxUs": 292479, "gpuP99Us": 1876, "allocationMaxBytes": 14842560, "updateP99Us": 2160, "uploadP99Us": 599 },
|
||||
{ "destination": "Caul-return", "cpuP99Us": 13311, "cpuMaxUs": 333240, "gpuP99Us": 4885, "allocationMaxBytes": 36023344, "updateP99Us": 1570, "uploadP99Us": 109 },
|
||||
{ "destination": "Sawato-plateau", "cpuP99Us": 10072, "cpuMaxUs": 335565, "gpuP99Us": 3314, "allocationMaxBytes": 213099368, "updateP99Us": 1419, "uploadP99Us": 169 },
|
||||
{ "destination": "Caul-plateau", "cpuP99Us": 9972, "cpuMaxUs": 299721, "gpuP99Us": 5049, "allocationMaxBytes": 36022664, "updateP99Us": 1290, "uploadP99Us": 185 }
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "uncapped-nine-stop",
|
||||
"renderMode": "uncapped",
|
||||
"route": "Caul, Sawato, Rynthid, Aerlinthe, Sawato, Holtburg, Caul, Sawato, Caul",
|
||||
"result": "behavior-pass-graceful-memory-plateau-fail",
|
||||
"failures": [
|
||||
"Caul plateau: working set grew by 295.1 MiB"
|
||||
],
|
||||
"elapsedSeconds": 511.607,
|
||||
"measuredSeconds": 501.007,
|
||||
"frames": 232974,
|
||||
"frameCpuUs": { "p50": 1520, "p95": 5694, "p99": 7825, "p999": 14316, "max": 366745 },
|
||||
"gpuUs": { "p50": 897, "p95": 3239, "p99": 3406, "max": 363685 },
|
||||
"frameThreadAllocationBytes": {
|
||||
"p50": 27912,
|
||||
"p95": 70496,
|
||||
"p99": 96224,
|
||||
"max": 212712648,
|
||||
"total": 11250290080
|
||||
},
|
||||
"updateUs": { "p50": 179, "p95": 651, "p99": 1029, "max": 303775 },
|
||||
"uploadUs": { "p50": 2, "p95": 14, "p99": 25, "max": 29763 },
|
||||
"process": {
|
||||
"allocationBytesPerSecondMean": 50017254,
|
||||
"allocationBytesPerSecondMax": 3040363520,
|
||||
"gcPauseSecondsTotal": 2.567187,
|
||||
"gcPauseSecondsMax": 0.288320,
|
||||
"gen0Collections": 278,
|
||||
"gen1Collections": 143,
|
||||
"gen2Collections": 58,
|
||||
"contentions": 5944,
|
||||
"workingSetBytesMax": 1297494016,
|
||||
"privateMiBMax": 1731.8,
|
||||
"argumentOutOfRangeExceptions": 4659
|
||||
},
|
||||
"caulOwnership": {
|
||||
"baseline": {
|
||||
"worldEntities": 21031,
|
||||
"animatedEntities": 18,
|
||||
"meshRenderData": 543,
|
||||
"meshAtlasArrays": 30,
|
||||
"trackedGpuBytes": 262573784,
|
||||
"ownedCompositeTextures": 163,
|
||||
"managedBytes": 271950608,
|
||||
"managedCommittedBytes": 438009856,
|
||||
"lohSizeBytes": 249819600,
|
||||
"lohFragmentationBytes": 155506192
|
||||
},
|
||||
"plateau": {
|
||||
"worldEntities": 21025,
|
||||
"animatedEntities": 13,
|
||||
"meshRenderData": 560,
|
||||
"meshAtlasArrays": 37,
|
||||
"trackedGpuBytes": 393876972,
|
||||
"ownedCompositeTextures": 120,
|
||||
"managedBytes": 274691720,
|
||||
"managedCommittedBytes": 867143680,
|
||||
"lohSizeBytes": 223628576,
|
||||
"lohFragmentationBytes": 115311320
|
||||
}
|
||||
},
|
||||
"portalWindows": [
|
||||
{ "destination": "Caul", "cpuP99Us": 14462, "cpuMaxUs": 44835, "gpuP99Us": 3406, "allocationMaxBytes": 355200, "updateP99Us": 1730, "uploadP99Us": 52 },
|
||||
{ "destination": "Sawato", "cpuP99Us": 7804, "cpuMaxUs": 366745, "gpuP99Us": 3322, "allocationMaxBytes": 148397032, "updateP99Us": 1004, "uploadP99Us": 80 },
|
||||
{ "destination": "Rynthid", "cpuP99Us": 1946, "cpuMaxUs": 304536, "gpuP99Us": 1153, "allocationMaxBytes": 13062928, "updateP99Us": 627, "uploadP99Us": 49 },
|
||||
{ "destination": "Aerlinthe", "cpuP99Us": 2227, "cpuMaxUs": 312978, "gpuP99Us": 1244, "allocationMaxBytes": 13556576, "updateP99Us": 329, "uploadP99Us": 18 },
|
||||
{ "destination": "Sawato-revisit", "cpuP99Us": 3026, "cpuMaxUs": 301905, "gpuP99Us": 1926, "allocationMaxBytes": 212712648, "updateP99Us": 360, "uploadP99Us": 29 },
|
||||
{ "destination": "Holtburg", "cpuP99Us": 3522, "cpuMaxUs": 300609, "gpuP99Us": 1437, "allocationMaxBytes": 15578112, "updateP99Us": 720, "uploadP99Us": 98 },
|
||||
{ "destination": "Caul-return", "cpuP99Us": 4304, "cpuMaxUs": 318926, "gpuP99Us": 2287, "allocationMaxBytes": 36022976, "updateP99Us": 957, "uploadP99Us": 69 },
|
||||
{ "destination": "Sawato-plateau", "cpuP99Us": 8143, "cpuMaxUs": 321871, "gpuP99Us": 3257, "allocationMaxBytes": 145983776, "updateP99Us": 1096, "uploadP99Us": 58 },
|
||||
{ "destination": "Caul-plateau", "cpuP99Us": 3273, "cpuMaxUs": 300828, "gpuP99Us": 1427, "allocationMaxBytes": 36021144, "updateP99Us": 1111, "uploadP99Us": 63 }
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "uncapped-dense-arwic",
|
||||
"renderMode": "uncapped",
|
||||
"result": "pass-graceful",
|
||||
"elapsedSeconds": 68.447,
|
||||
"measuredSeconds": 58.288,
|
||||
"frames": 15785,
|
||||
"frameCpuUs": { "p50": 3672, "p95": 6561, "p99": 14121, "p999": 114715, "max": 388321 },
|
||||
"gpuUs": { "p50": 2476, "p95": 3284, "p99": 3752, "max": 383673 },
|
||||
"frameThreadAllocationBytes": {
|
||||
"p50": 41680,
|
||||
"p95": 82352,
|
||||
"p99": 627032,
|
||||
"max": 29875456,
|
||||
"total": 1401888696
|
||||
},
|
||||
"updateUs": { "p50": 496, "p95": 1125, "p99": 4821, "max": 226228 },
|
||||
"uploadUs": { "p50": 3, "p95": 79, "p99": 254, "max": 26022 },
|
||||
"stableFiveSeconds": {
|
||||
"frames": 1044,
|
||||
"frameCpuUs": { "p50": 4239, "p95": 6139, "p99": 6760 },
|
||||
"gpuUs": { "p50": 2712, "p95": 3235, "p99": 3263 },
|
||||
"frameThreadAllocationBytes": { "p50": 38400, "max": 13634832 },
|
||||
"updateUs": { "p95": 982 },
|
||||
"worldEntities": 15530,
|
||||
"animatedEntities": 111
|
||||
},
|
||||
"process": {
|
||||
"allocationBytesPerSecondMean": 88929887,
|
||||
"allocationBytesPerSecondMax": 1925396448,
|
||||
"gcPauseSecondsTotal": 0.622912,
|
||||
"gcPauseSecondsMax": 0.260645,
|
||||
"gen0Collections": 53,
|
||||
"gen1Collections": 34,
|
||||
"gen2Collections": 14,
|
||||
"contentions": 2396,
|
||||
"workingSetBytesMax": 970518528,
|
||||
"privateMiBMax": 1489.0,
|
||||
"argumentOutOfRangeExceptions": 331
|
||||
},
|
||||
"portalWindows": [
|
||||
{ "destination": "Arwic-dense", "cpuP99Us": 9076, "cpuMaxUs": 115845, "gpuP99Us": 3717, "allocationMaxBytes": 29875456, "updateP99Us": 1509, "uploadP99Us": 437 }
|
||||
]
|
||||
}
|
||||
],
|
||||
"gate": {
|
||||
"sliceAPhysicalLocalEvidenceCommitted": true,
|
||||
"sliceCUnblocked": true,
|
||||
"memoryBehaviorAccepted": false,
|
||||
"requiredSliceCImprovements": [
|
||||
"Materially reduce portal single-frame allocation and p99.",
|
||||
"Remove the invalid typed-Setup exception storm.",
|
||||
"Reduce process-wide allocation and GC pressure.",
|
||||
"Pass the repeated-Caul memory plateau assertion without weakening it.",
|
||||
"Preserve screenshot pixels, gameplay, ownership convergence, and graceful teardown."
|
||||
]
|
||||
}
|
||||
}
|
||||
89
docs/research/2026-07-24-slice-a-physical-local-baselines.md
Normal file
89
docs/research/2026-07-24-slice-a-physical-local-baselines.md
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
# Slice A physical-local baselines
|
||||
|
||||
**Date:** 2026-07-24
|
||||
|
||||
**Authority:** performance-gate baseline
|
||||
|
||||
**Source and measured binary:** `49f3a48ee63b82d00731b0f91497930925279c86`
|
||||
|
||||
The corrected Slice A tooling was exercised on the authoritative physical AMD
|
||||
display path defined by
|
||||
[`2026-07-24-performance-reference-configuration.md`](2026-07-24-performance-reference-configuration.md):
|
||||
RX 9070 XT driver `32.0.31021.5001`, 2560 x 1440 at 240 Hz, with the client
|
||||
rendering 1280 x 720 Release gameplay without developer UI. The tracked source
|
||||
tree was clean at every launch, source and binary commits matched exactly, all
|
||||
route actions completed, and all three clients disconnected gracefully.
|
||||
|
||||
The full sanitized metrics and every portal window are in
|
||||
[`2026-07-24-slice-a-physical-local-baselines.json`](2026-07-24-slice-a-physical-local-baselines.json).
|
||||
Raw CSV, EventPipe, screenshots, logs, and process reports remain local
|
||||
untracked diagnostic artifacts.
|
||||
|
||||
## Headline measurements
|
||||
|
||||
| Capture | Frames | CPU p50 / p95 / p99 | GPU p50 / p95 / p99 | Frame-thread allocation p50 / max |
|
||||
|---|---:|---:|---:|---:|
|
||||
| 240 Hz capped nine-stop | 107,081 | 4.287 / 6.972 / 9.404 ms | 1.702 / 3.261 / 3.847 ms | 28.1 KiB / 203.5 MiB |
|
||||
| Uncapped nine-stop | 232,974 | 1.520 / 5.694 / 7.825 ms | 0.897 / 3.239 / 3.406 ms | 27.3 KiB / 202.9 MiB |
|
||||
| Uncapped dense Arwic | 15,785 | 3.672 / 6.561 / 14.121 ms | 2.476 / 3.284 / 3.752 ms | 40.7 KiB / 28.5 MiB |
|
||||
| Dense Arwic, stable 5 s | 1,044 | 4.239 / 6.139 / 6.760 ms | 2.712 / 3.235 / 3.263 ms | 37.5 KiB / 13.0 MiB |
|
||||
|
||||
The physical path confirms that ordinary steady rendering is fast. The stable
|
||||
dense-Arwic window contained 15,530 world entities and 111 animated entities
|
||||
while remaining below 6.8 ms CPU p99 and 3.3 ms GPU p99. The 32 ms RDP envelope
|
||||
was therefore a remote-presentation artifact rather than local renderer cost.
|
||||
|
||||
Portal materialization remains the dominant transient. Sawato allocated up to
|
||||
203.5 MiB in one capped frame and 202.9 MiB in one uncapped frame. The
|
||||
uncapped route allocated 11.25 GB on the frame thread in 501 seconds, while the
|
||||
process-wide runtime counter averaged 50.0 MB/s and recorded 58 Gen-2
|
||||
collections. `ArgumentOutOfRangeException` was also emitted 4,659 times during
|
||||
that route. This is the invalid typed-Setup probe storm already in Slice C's
|
||||
scope, not an accepted steady-state mechanism.
|
||||
|
||||
## Repeated-portal memory result
|
||||
|
||||
Both nine-stop sessions completed behaviorally but deliberately failed the
|
||||
existing memory plateau assertion:
|
||||
|
||||
- The capped final Caul checkpoint was 685.6 MiB higher in working set and
|
||||
699.8 MiB higher in private memory than the first Caul checkpoint.
|
||||
- The uncapped final Caul checkpoint was 295.1 MiB higher in working set.
|
||||
- In the uncapped comparison, world entities returned from 21,031 to 21,025,
|
||||
animated entities from 18 to 13, and owned composite textures from 163 to
|
||||
120. Managed live bytes changed only 271.95 MB to 274.69 MB, while committed
|
||||
managed memory rose from 438.01 MB to 867.14 MB.
|
||||
- The capped comparison likewise ended with fewer mesh records, atlas arrays,
|
||||
and composite textures than the first Caul checkpoint, but committed managed
|
||||
memory rose from 449.30 MB to 1,235.05 MB.
|
||||
|
||||
The evidence does not point to retained world ownership. It points to very high
|
||||
allocation churn, LOH fragmentation, and GC heap segment reservation after
|
||||
portal decode. The baseline is intentionally recorded as a failure instead of
|
||||
loosening the assertion; prepared-content Slice C must remove the decode/probe
|
||||
traffic and then repeat this exact gate.
|
||||
|
||||
## Contention and ownership interpretation
|
||||
|
||||
The physical capped route recorded 7,292 runtime contentions. The committed
|
||||
stack-attributed RDP capture remains the attribution oracle because the same
|
||||
code and route ranked `DatDatabaseWrapper.TryGet` first (75.3%), followed by
|
||||
`ObjectMeshManager.ProcessQueue` (16.3%) and
|
||||
`DecodedTextureCache.GetOrCreate` (4.2%). Slice C removes demand from those
|
||||
paths before any lock redesign is considered.
|
||||
|
||||
Canonical ownership counters and graceful teardown passed on every run. No
|
||||
pending mesh uploads, landblock retirements, live-entity teardowns, or
|
||||
composite warmups remained at the final checkpoints.
|
||||
|
||||
## Gate state
|
||||
|
||||
Slice A's physical-local exit criterion is complete: a committed 240 Hz capped
|
||||
nine-stop baseline, uncapped nine-stop baseline, pinned uncapped dense-Arwic
|
||||
baseline, and per-portal frame/allocation windows now exist on the reference
|
||||
display path. This unblocks Slice C.
|
||||
|
||||
It does **not** mark the measured memory behavior healthy. The plateau failures,
|
||||
~200 MiB portal frames, ~50 MB/s process allocation, exception storm, and
|
||||
heap-reservation growth are the before-state that Slice C must materially
|
||||
improve without changing pixels or gameplay.
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
"capturedUtcDate": "2026-07-24",
|
||||
"authority": "diagnostic-rdp-only",
|
||||
"purpose": "Corrected Slice A tooling validation and directional baseline. This does not satisfy the physical-local exit criterion.",
|
||||
"referenceConfig": "docs/research/2026-07-24-performance-reference-config.md",
|
||||
"referenceConfig": "docs/research/2026-07-24-performance-reference-configuration.md",
|
||||
"rawArtifactPolicy": "Raw CSV, EventPipe, screenshot, and process logs remain local and uncommitted. This file contains the sanitized reproducible summary.",
|
||||
"captures": [
|
||||
{
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ were both commit `24f898c54d7c6547555a4402543b6a3cd7ced7f6`, the tracked source
|
|||
tree was clean, and the report recorded an exact match.
|
||||
|
||||
The machine/display contract is defined in
|
||||
[`2026-07-24-performance-reference-config.md`](2026-07-24-performance-reference-config.md).
|
||||
[`2026-07-24-performance-reference-configuration.md`](2026-07-24-performance-reference-configuration.md).
|
||||
The full sanitized figures and portal windows are in
|
||||
[`2026-07-24-slice-a-rdp-baselines.json`](2026-07-24-slice-a-rdp-baselines.json).
|
||||
Raw CSV, EventPipe, screenshot, and process logs are intentionally local,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue