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
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