docs(perf): record corrected Slice A RDP baselines

This commit is contained in:
Erik 2026-07-24 13:29:23 +02:00
parent 24f898c54d
commit 05a22dee99
4 changed files with 256 additions and 11 deletions

View file

@ -0,0 +1,158 @@
{
"schemaVersion": 1,
"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",
"rawArtifactPolicy": "Raw CSV, EventPipe, screenshot, and process logs remain local and uncommitted. This file contains the sanitized reproducible summary.",
"captures": [
{
"name": "capped-nine-stop",
"binaryCommit": "2c874b09771cfd0062b4e23083ee13142761fe80",
"sourceCommit": "2c874b09771cfd0062b4e23083ee13142761fe80",
"binaryMatchesSource": true,
"route": "Caul, Sawato, Rynthid, Aerlinthe, Sawato, Holtburg, Caul, Sawato, Caul",
"result": "pass-graceful",
"elapsedSeconds": 560.170,
"measuredSeconds": 549.427,
"frames": 17400,
"frameCpuUs": { "p50": 31240, "p95": 31868, "p99": 33032, "p999": 136090, "max": 396953 },
"gpuUs": { "p50": 3626, "p95": 5826, "p99": 6807, "p999": 7654, "max": 389392 },
"frameThreadAllocationBytes": { "p50": 31552, "p95": 159944, "p99": 2835704, "p999": 13780848, "max": 212677752 },
"updateUs": { "p50": 1071, "p95": 1962, "p99": 4079, "max": 247943 },
"process": {
"allocationBytesPerSecondMean": 36609676,
"allocationBytesPerSecondMax": 2754634720,
"gcPauseSecondsTotal": 2.623917,
"gcPauseSecondsMax": 0.270281,
"workingSetBytesMax": 1642217472,
"gen0Collections": 138,
"gen1Collections": 132,
"gen2Collections": 70,
"contentions": 5994
},
"portalWindows": [
{ "destination": "Caul", "cpuP99Us": 76758, "cpuMaxUs": 110974, "gpuP99Us": 7365, "allocationMaxBytes": 56550848, "updateP99Us": 47519, "uploadP99Us": 3637 },
{ "destination": "Sawato", "cpuP99Us": 99077, "cpuMaxUs": 396953, "gpuP99Us": 6957, "allocationMaxBytes": 212677752, "updateP99Us": 19542, "uploadP99Us": 4402 },
{ "destination": "Rynthid", "cpuP99Us": 55614, "cpuMaxUs": 308664, "gpuP99Us": 3118, "allocationMaxBytes": 15018512, "updateP99Us": 22441, "uploadP99Us": 2502 },
{ "destination": "Aerlinthe", "cpuP99Us": 47918, "cpuMaxUs": 259394, "gpuP99Us": 6205, "allocationMaxBytes": 13780848, "updateP99Us": 13808, "uploadP99Us": 553 },
{ "destination": "Sawato-revisit", "cpuP99Us": 64704, "cpuMaxUs": 325502, "gpuP99Us": 5356, "allocationMaxBytes": 145024240, "updateP99Us": 34717, "uploadP99Us": 907 },
{ "destination": "Holtburg", "cpuP99Us": 48965, "cpuMaxUs": 83478, "gpuP99Us": 5525, "allocationMaxBytes": 16950536, "updateP99Us": 19088, "uploadP99Us": 5231 },
{ "destination": "Caul-return", "cpuP99Us": 58393, "cpuMaxUs": 90350, "gpuP99Us": 6642, "allocationMaxBytes": 35985776, "updateP99Us": 29162, "uploadP99Us": 1333 },
{ "destination": "Sawato-plateau", "cpuP99Us": 76006, "cpuMaxUs": 312187, "gpuP99Us": 6454, "allocationMaxBytes": 144965224, "updateP99Us": 18399, "uploadP99Us": 2060 },
{ "destination": "Caul-plateau", "cpuP99Us": 48700, "cpuMaxUs": 87818, "gpuP99Us": 6788, "allocationMaxBytes": 35966704, "updateP99Us": 23387, "uploadP99Us": 329 }
]
},
{
"name": "uncapped-nine-stop",
"binaryCommit": "4285f1db",
"sourceCommit": "4285f1db",
"binaryMatchesSource": true,
"route": "Caul, Sawato, Rynthid, Aerlinthe, Sawato, Holtburg, Caul, Sawato, Caul",
"result": "pass-graceful",
"elapsedSeconds": 512.792,
"measuredSeconds": 501.819,
"frames": 229412,
"frameCpuUs": { "p50": 1537, "p95": 6077, "p99": 8938, "p999": 16157, "max": 439275 },
"gpuUs": { "p50": 935, "p95": 3288, "p99": 3470, "max": 357565 },
"frameThreadAllocationBytes": { "p50": 28968, "p95": 71136, "p99": 97296, "max": 216373536 },
"updateUs": { "p50": 177, "p95": 777, "p99": 1277, "max": 437906 },
"process": {
"allocationBytesPerSecondMean": 48457217,
"allocationBytesPerSecondMax": 2167972952,
"gcPauseSecondsTotal": 2.656187,
"gcPauseSecondsMax": 0.259869,
"workingSetBytesMax": 921333760,
"gen0Collections": 279,
"gen1Collections": 136,
"gen2Collections": 80,
"contentions": 5493
},
"portalWindows": [
{ "destination": "Caul", "cpuP99Us": 15768, "cpuMaxUs": 40775, "gpuP99Us": 3521, "allocationMaxBytes": 516296, "updateP99Us": 2112, "uploadP99Us": 61 },
{ "destination": "Sawato", "cpuP99Us": 9596, "cpuMaxUs": 361556, "gpuP99Us": 3339, "allocationMaxBytes": 216373536, "updateP99Us": 1360, "uploadP99Us": 71 },
{ "destination": "Rynthid", "cpuP99Us": 2753, "cpuMaxUs": 325975, "gpuP99Us": 1259, "allocationMaxBytes": 13296880, "updateP99Us": 735, "uploadP99Us": 56 },
{ "destination": "Aerlinthe", "cpuP99Us": 2351, "cpuMaxUs": 255745, "gpuP99Us": 1279, "allocationMaxBytes": 13790552, "updateP99Us": 431, "uploadP99Us": 17 },
{ "destination": "Sawato-revisit", "cpuP99Us": 3466, "cpuMaxUs": 322834, "gpuP99Us": 2177, "allocationMaxBytes": 146032504, "updateP99Us": 487, "uploadP99Us": 22 },
{ "destination": "Holtburg", "cpuP99Us": 2448, "cpuMaxUs": 291110, "gpuP99Us": 1104, "allocationMaxBytes": 15978352, "updateP99Us": 618, "uploadP99Us": 104 },
{ "destination": "Caul-return", "cpuP99Us": 6763, "cpuMaxUs": 292269, "gpuP99Us": 2344, "allocationMaxBytes": 36035840, "updateP99Us": 1072, "uploadP99Us": 70 },
{ "destination": "Sawato-plateau", "cpuP99Us": 9682, "cpuMaxUs": 439275, "gpuP99Us": 3371, "allocationMaxBytes": 213092152, "updateP99Us": 1407, "uploadP99Us": 67 },
{ "destination": "Caul-plateau", "cpuP99Us": 2185, "cpuMaxUs": 319036, "gpuP99Us": 1138, "allocationMaxBytes": 36032184, "updateP99Us": 908, "uploadP99Us": 47 }
]
},
{
"name": "uncapped-dense-arwic",
"binaryCommit": "24f898c54d7c6547555a4402543b6a3cd7ced7f6",
"sourceCommit": "24f898c54d7c6547555a4402543b6a3cd7ced7f6",
"binaryMatchesSource": true,
"result": "pass-graceful",
"elapsedSeconds": 66.861,
"measuredSeconds": 56.752,
"frames": 16350,
"frameCpuUs": { "p50": 3487, "p95": 7351, "p99": 12690, "p999": 75737, "max": 346276 },
"gpuUs": { "p50": 2299, "p95": 3236, "p99": 3653, "max": 342913 },
"frameThreadAllocationBytes": { "p50": 52000, "p95": 82416, "max": 33240128 },
"updateUs": { "p95": 1463 },
"stationaryFiveSeconds": {
"frames": 925,
"frameCpuUs": { "p50": 4802, "p95": 7422, "p99": 8281 },
"gpuUs": { "p50": 2711, "p99": 3242 },
"frameThreadAllocationBytes": { "p50": 37688, "max": 13654512 },
"updateUs": { "p95": 1328 }
},
"process": {
"allocationBytesPerSecondMean": 60704238,
"allocationBytesPerSecondMax": 2059370560,
"gcPauseSecondsTotal": 0.328081,
"gcPauseSecondsMax": 0.120149,
"workingSetBytesMax": 834510848,
"gen0Collections": 30,
"gen1Collections": 19,
"gen2Collections": 12,
"contentions": 2145
}
},
{
"name": "uncapped-dense-arwic-no-process-counters",
"binaryCommit": "24f898c54d7c6547555a4402543b6a3cd7ced7f6",
"sourceCommit": "24f898c54d7c6547555a4402543b6a3cd7ced7f6",
"binaryMatchesSource": true,
"result": "pass-graceful",
"stationaryFiveSeconds": {
"frames": 918,
"frameCpuUs": { "p50": 4870, "p95": 7212, "p99": 8081 },
"gpuUs": { "p50": 2726, "p99": 2861 },
"frameThreadAllocationBytes": { "p50": 38632, "max": 13661072 },
"updateUs": { "p95": 1245 }
}
}
],
"observerEffect": {
"comparison": "uncapped-dense-arwic process counters enabled versus disabled",
"cpuP50Percent": -1.396,
"cpuP95Percent": 2.912,
"cpuP99Percent": 2.475,
"gpuP50Percent": -0.550,
"frameThreadAllocationP50Percent": -2.440,
"interpretation": "The process-counter observer changes the stable sample by less than normal route variance."
},
"contentionStacks": {
"capture": "capped-nine-stop",
"totalAttributed": 5994,
"sites": [
{ "site": "AcDream.Content.DatDatabaseWrapper.TryGet", "count": 4516 },
{ "site": "ObjectMeshManager.ProcessQueue", "count": 976 },
{ "site": "DecodedTextureCache.GetOrCreate", "count": 254 },
{ "site": "LandblockBuildFactory.Build", "count": 90 },
{ "site": "LiveEntityHydrationController.OnCreate", "count": 74 },
{ "site": "DatDatabaseWrapper.TryGetFileBytes", "count": 27 },
{ "site": "other", "count": 57 }
]
},
"remainingGate": [
"Repeat the capped nine-stop route on the physical local AMD display path.",
"Repeat the uncapped nine-stop route on the physical local AMD display path.",
"Repeat the pinned uncapped dense-Arwic sample on the physical local AMD display path.",
"Commit the physical-local summary before starting behavior-changing Slice C."
]
}

View file

@ -0,0 +1,72 @@
# Slice A corrected RDP baselines
**Date:** 2026-07-24
**Authority:** diagnostic only; these captures do not satisfy the physical-local
Slice A exit gate.
The corrected tooling was exercised over capped and uncapped nine-stop routes,
plus a pinned uncapped dense-Arwic sample. All runs reached the world, completed
their route, and disconnected gracefully. The final dense run was made after
binary provenance became part of every soak report: source and measured binary
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).
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,
untracked diagnostic artifacts.
## Headline measurements
| Capture | Frames | CPU p50 / p95 / p99 | GPU p50 / p95 / p99 | Frame-thread allocation p50 / max |
|---|---:|---:|---:|---:|
| Capped nine-stop | 17,400 | 31.240 / 31.868 / 33.032 ms | 3.626 / 5.826 / 6.807 ms | 31.6 KiB / 202.8 MiB |
| Uncapped nine-stop | 229,412 | 1.537 / 6.077 / 8.938 ms | 0.935 / 3.288 / 3.470 ms | 28.3 KiB / 206.3 MiB |
| Uncapped dense Arwic | 16,350 | 3.487 / 7.351 / 12.690 ms | 2.299 / 3.236 / 3.653 ms | 50.8 KiB / 31.7 MiB |
| Dense Arwic, stable 5 s | 925 | 4.802 / 7.422 / 8.281 ms | 2.711 / — / 3.242 ms | 36.8 KiB / 13.0 MiB |
The capped CPU distribution is the expected 32 ms RDP/pacing envelope, while
the GL timestamps show only 3.66.8 ms of ordinary GPU work. The corrected GPU
timer therefore no longer measures frame pacing as GPU submission time.
Portal materialization remains the dominant transient cost. The uncapped
Sawato materializations reached 206.3 MiB and 203.2 MiB of frame-thread
allocation in a single frame. Process-wide allocation averaged 48.5 MB/s over
the uncapped route, with 80 Gen-2 collections and a longest GC pause of
260 ms. This evidence keeps prepared-content work as the next architectural
priority.
## Observer effect
The dense-Arwic stationary sample was repeated without the process counter
observer. Enabling it changed CPU p50 by -1.4%, p95 by +2.9%, p99 by +2.5%,
GPU p50 by -0.6%, and frame-thread allocation p50 by -2.4%. Those differences
are within natural route variance, so the observer is suitable for directional
process-wide allocation and GC attribution.
## Contention attribution
The capped route recorded 5,994 contentions with stacks:
| Site | Count | Share |
|---|---:|---:|
| `DatDatabaseWrapper.TryGet` | 4,516 | 75.3% |
| `ObjectMeshManager.ProcessQueue` | 976 | 16.3% |
| `DecodedTextureCache.GetOrCreate` | 254 | 4.2% |
| `LandblockBuildFactory.Build` | 90 | 1.5% |
| `LiveEntityHydrationController.OnCreate` | 74 | 1.2% |
| `DatDatabaseWrapper.TryGetFileBytes` | 27 | 0.5% |
| Other | 57 | 1.0% |
This replaces speculation with a concrete ranking. It does not authorize
lock-shape changes yet; the prepared-content slices should first remove demand
from these paths and then the same capture must be repeated.
## Gate state
Slice As instrumentation and RDP validation are complete. The remaining exit
gate is a capped nine-stop, uncapped nine-stop, and pinned dense-Arwic capture
on the physical local AMD display path. Slice B is baseline-independent and may
proceed. Slice C remains blocked until the physical-local evidence is committed.