Repository navigation
Conversation
Complete the publication checklist and series cross-links for boykopovar#7466. No source or test changes.
|
Some comparisons could not be completed because a pull request conflicts with the base branch. Review these shared files manually before concluding that there is no overlap.
|
|
This pull request is labeled |
|
Intel and AMD Windows data: with this PR the 56 tests built from Windows 11 Pro 26300, WinLibs GCC 15.2.0 r7, Release, every execution test built,
This is a correctness check only; I measured no speed. I also ran full CTest with this PR and the 13 other open AGC and shader PRs I tested in the same batch merged together (#7668, #7659, #7504, #7432, #7426, #7413, #7480, #7465, #7464, #7449, #7489, #7673, #7560). Neither GPU showed a failure beyond AI-assisted: yes (Claude Code) |
|
Updated the description: before/after summary lines from the same machine and SuperTuxKart scene (main AI-assisted: yes (Claude Code) |
CnRJay
left a comment
There was a problem hiding this comment.
The change is small (35 lines) and the four real Vulkan cases pass on main and on the topic. The description itself says the FPS difference is within the run-to-run spread and that "this PR claims no FPS change", so what is the PR for?
- Post what it saves: the lookups or lease operations per frame that the registered-owner validation avoids, and the time they took on the queue worker, from SuperTuxKart (the profiling workload). The "what it saves" sentence is cut off in the description before it gives a number. If the saving is below the capture-to-capture noise (9.51-9.73 against 9.53-9.58 fps here), say that this is a cleanup, not a performance change, and drop the
perfprefix. - The maintainers asked for the same on #7473 and #7464 from this series: a title scene where the changed path is a measurable share of frame time, with
tools/trace_digest.pysummaries of main and the change. Item 03 of ten needs the same before it can be weighed. - "Keep full reconciliation for replaced owners, aliases, joined imports and adjacent ranges that can extend an import run": list the cases the owner shortcut does cover, with a test that fails when the shortcut is applied to one of the excluded cases (a replaced owner at the same address), since the cost of a wrong shortcut is a stale import served.
What
This PR is part of a series of graphics and memory-management performance improvements for AnyPS5, with SuperTuxKart as the main profiling workload. This is item 03/10; the UI Lab startup/cache fix follows as a separate eleventh PR. Each topic's measurements are distinguished from the combined result.
Validate an existing single-range host import through its registered owner after an unrelated registry mutation. Keep full reconciliation for replaced owners, aliases, joined imports and adjacent ranges that can extend an import run.
Tested
Pinned benchmark base:
6447ed1ed7fd11c7eef60df336e8d66fac271188. Tested topic snapshot:a32fe0a42ca02bd0a77ecf03827324e6e633e866. Windows 11 Pro build 26300, Ryzen 7 5800H, RTX 3070 Laptop, NVIDIA 617.42. Frozen runtime module hashes and raw traces were verified. No opt-in optimization flags are required.4/4 real Vulkan cases passed on main and this topic: import windows, unmap, retirement/readback and a second direct-memory mapping. Serial identity is checked immediately after unrelated registration, owner replacement and creation of an alias, before the next fill can repair a stale entry.
SuperTuxKart captures for the bot's before/after requirement: Windows 11 Pro build 26300, Ryzen 7 5800H, RTX 3070 Laptop GPU, NVIDIA 617.42, WinLibs GCC 15.2.0 r7, Release; SuperTuxKart (PPSA69421) tutorial prompt over the main menu, 1920x1080 internal rendering in a maximized 2560x1369 window, warm shader caches, audio muted, no input;
APS5_TRACE_SECONDS=20:8withAPS5_TRACE_EVENTS=1048576, console output not redirected, no profiling switches; 2026-10-18, two captures per side, order main, PR, main, PR.required1018-main-64476447ed1ed7fd6447ed1ed7fdrequired1018-main-6447-awake-r26447ed1ed7fd6447ed1ed7fdrequired1018-74667cea858cf57erequired1018-7466-awake-r27cea858cf57eThe FPS difference is within the run-to-run spread of main; this PR claims no FPS change. What it saves is shown under Where it helps.
Summary lines (main first, then this PR)
{"commit":"6447ed1ed7fd","dirty":false,"env":{"APS5_TRACE_SECONDS":"20:8"},"gpu":"NVIDIA GeForce RTX 3070 Laptop GPU","driver":"NVIDIA 617.42","os":"Windows 10.0.26300","resolution":"1920x1080","window":{"spec":"seconds 20:8","first_present":42,"ms":8034.483},"presents":77,"frame_ms":{"p50":103.246,"p90":111.156,"p99":116.826,"max":116.826},"gpu_busy_ms_per_present":5.271,"worker_busy_pct":{"queue worker 0x0":3.148},"top_phases_ms_per_frame":{"Driver.Packet":3.234,"Driver.Packet.draw":2.618,"Driver.Draw":2.562,"Driver.Draw.shader_compile_and_link":1.512,"Driver.Present":0.815,"Shader.DrawStage":0.813,"Driver.Present.queue_present":0.547,"Vulkan.QueuePresent":0.545},"trace_dropped":false,"trace":"aps5-trace-6447ed1ed7fd-21748.json.gz"} {"commit":"6447ed1ed7fd","dirty":false,"env":{"APS5_TRACE_SECONDS":"20:8"},"gpu":"NVIDIA GeForce RTX 3070 Laptop GPU","driver":"NVIDIA 617.42","os":"Windows 10.0.26300","resolution":"1920x1080","window":{"spec":"seconds 20:8","first_present":45,"ms":8081.323},"presents":77,"frame_ms":{"p50":103.882,"p90":112.153,"p99":121.116,"max":121.116},"gpu_busy_ms_per_present":5.214,"worker_busy_pct":{"queue worker 0x0":3.193},"top_phases_ms_per_frame":{"Driver.Packet":3.301,"Driver.Packet.draw":2.672,"Driver.Draw":2.617,"Driver.Draw.shader_compile_and_link":1.540,"Driver.Present":0.839,"Shader.DrawStage":0.828,"Driver.Present.queue_present":0.571,"Vulkan.QueuePresent":0.566},"trace_dropped":false,"trace":"aps5-trace-6447ed1ed7fd-38428.json.gz"} {"commit":"7cea858cf57e","dirty":false,"env":{"APS5_TRACE_SECONDS":"20:8"},"gpu":"NVIDIA GeForce RTX 3070 Laptop GPU","driver":"NVIDIA 617.42","os":"Windows 10.0.26300","resolution":"1920x1080","window":{"spec":"seconds 20:8","first_present":47,"ms":8097.035},"presents":77,"frame_ms":{"p50":104.599,"p90":109.886,"p99":125.292,"max":125.292},"gpu_busy_ms_per_present":5.263,"worker_busy_pct":{"queue worker 0x0":3.197},"top_phases_ms_per_frame":{"Driver.Packet":3.311,"Driver.Packet.draw":2.687,"Driver.Draw":2.629,"Driver.Draw.shader_compile_and_link":1.565,"Shader.DrawStage":0.856,"Driver.Present":0.841,"Driver.Present.queue_present":0.572,"Vulkan.QueuePresent":0.571},"trace_dropped":false,"trace":"aps5-trace-7cea858cf57e-15412.json.gz"} {"commit":"7cea858cf57e","dirty":false,"env":{"APS5_TRACE_SECONDS":"20:8"},"gpu":"NVIDIA GeForce RTX 3070 Laptop GPU","driver":"NVIDIA 617.42","os":"Windows 10.0.26300","resolution":"1920x1080","window":{"spec":"seconds 20:8","first_present":48,"ms":8013.801},"presents":78,"frame_ms":{"p50":101.898,"p90":105.632,"p99":117.162,"max":117.162},"gpu_busy_ms_per_present":5.268,"worker_busy_pct":{"queue worker 0x0":2.952},"top_phases_ms_per_frame":{"Driver.Packet":2.986,"Driver.Packet.draw":2.440,"Driver.Draw":2.388,"Driver.Draw.shader_compile_and_link":1.412,"Driver.Present":0.843,"Shader.DrawStage":0.757,"Driver.Present.queue_present":0.575,"Vulkan.QueuePresent":0.572},"trace_dropped":false,"trace":"aps5-trace-7cea858cf57e-2908.json.gz"}tools/performance_compare.py(first capture of each side)Performance comparison
Configuration differences
Frame and GPU times (ms)
Top phases (ms per frame)
tools/trace_digest.pyoutput (first capture of each side; all digests are in the evidence archive)required1018-main-6447seconds 20:8 from present 42: 77 presents, frame p50 103.2 / p90 111.2 / p99 116.8 / max 116.8 ms, GPU busy 5.3 ms per present
NVIDIA GeForce RTX 3070 Laptop GPU, NVIDIA 617.42, Windows 10.0.26300, 1920x1080, commit 6447ed1, dropped: no
{"commit":"6447ed1ed7fd","dirty":false,"env":{"APS5_TRACE_SECONDS":"20:8"},"gpu":"NVIDIA GeForce RTX 3070 Laptop GPU","driver":"NVIDIA 617.42","os":"Windows 10.0.26300","resolution":"1920x1080","window":{"spec":"seconds 20:8","first_present":42,"ms":8034.483},"presents":77,"frame_ms":{"p50":103.246,"p90":111.156,"p99":116.826,"max":116.826},"gpu_busy_ms_per_present":5.271,"worker_busy_pct":{"queue worker 0x0":3.148},"top_phases_ms_per_frame":{"Driver.Packet":3.234,"Driver.Packet.draw":2.618,"Driver.Draw":2.562,"Driver.Draw.shader_compile_and_link":1.512,"Driver.Present":0.815,"Shader.DrawStage":0.813,"Driver.Present.queue_present":0.547,"Vulkan.QueuePresent":0.545},"trace_dropped":false,"trace":"aps5-trace-6447ed1ed7fd-21748.json.gz"}Slowest frames (largest slices inside each, inclusive)
Threads (ms per frame)
required1018-7466seconds 20:8 from present 47: 77 presents, frame p50 104.6 / p90 109.9 / p99 125.3 / max 125.3 ms, GPU busy 5.3 ms per present
NVIDIA GeForce RTX 3070 Laptop GPU, NVIDIA 617.42, Windows 10.0.26300, 1920x1080, commit 7cea858, dropped: no
{"commit":"7cea858cf57e","dirty":false,"env":{"APS5_TRACE_SECONDS":"20:8"},"gpu":"NVIDIA GeForce RTX 3070 Laptop GPU","driver":"NVIDIA 617.42","os":"Windows 10.0.26300","resolution":"1920x1080","window":{"spec":"seconds 20:8","first_present":47,"ms":8097.035},"presents":77,"frame_ms":{"p50":104.599,"p90":109.886,"p99":125.292,"max":125.292},"gpu_busy_ms_per_present":5.263,"worker_busy_pct":{"queue worker 0x0":3.197},"top_phases_ms_per_frame":{"Driver.Packet":3.311,"Driver.Packet.draw":2.687,"Driver.Draw":2.629,"Driver.Draw.shader_compile_and_link":1.565,"Shader.DrawStage":0.856,"Driver.Present":0.841,"Driver.Present.queue_present":0.572,"Vulkan.QueuePresent":0.571},"trace_dropped":false,"trace":"aps5-trace-7cea858cf57e-15412.json.gz"}Slowest frames (largest slices inside each, inclusive)
Threads (ms per frame)
Where it helps
In the SuperTuxKart scene,
HostImportSerialruns about 119 times per frame. On main, after an unrelated registry change it reconciles all imports throughrefreshImports; with this PR the registered owner of the import is checked instead.2185dbf92eHostImportSerialcalls per frameHostImportSerialµs per callHostImportSerialms per framerefreshImports called from HostImportSerialcalls per framerefreshImports called from HostImportSerialµs per callrefreshImports called from HostImportSerialms per frameCounters come from a local probe build that is not part of this PR (
review-probe.patchin the evidence archive): the same counters and timers were inserted into main2185dbf92eand into main with all eleven series PRs merged (#7464 in its rebased form), anchored on function definitions present in both trees. Runs were in the mirrored order main, series with #7464 reduced to its wake only, series, series, reduced series, main, in the scene above withAPS5_PROFILE_DRAW=1; values are medians of two runs over the same 8-second window as the trace, starting 20 s after the first flip, per flip. These runs carry profiling overhead and are not used for FPS. Each optimised function below is changed by this PR only; counters show where the work goes, not an isolated FPS gain.Other homebrew checks
UI Lab: the 21 default concepts were rendered and visually reviewed in a navigation cycle for this topic. Artwork was present; this covers default navigation, not all themes or every widget interaction.
Known baseline rendering issue: vkQuake still has intermittent flickering and an intermittently black floor on main and the tested performance branches. These changes do not fix it. Yamagi Quake II gameplay stops at unsupported last-provoking-vertex flat interpolation, and UZDoom at unsupported clip/cull-distance handling on the baseline; neither supplies a valid gameplay FPS comparison.
Dependencies, series and overlap
#6917 retains registry lease snapshots; #6951 memoizes run bounds per lease; #7261 reconciles resource-set proofs after registry changes. This topic checks the registered owner of an individual import before full reconciliation. They optimize related paths and are not claimed as new work here.
The project overlap scan compared the local topics against 785 open PRs and checked merges into main
e5c2b3c325e485ba7fd417c47c46f48aa2c89115. This topic merges cleanly in that snapshot. Some other PRs already conflict with main, so the tool cannot compare all their shared-file hunks; the full report is retained with the common series evidence package. No exact duplicate was identified in the inspected implementations. This is not a certification that every conflicting foreign branch is composition-tested.Conventions and whitespace checks passed for the tested topic range. The benchmark base remains pinned for comparability; this is not a fresh-current-main build/test claim. Measurements and focused tests refer to the pinned source revisions above; no full-suite CI run is claimed.
Re-checked on 2026-10-21: this head still merges cleanly into main
2185dbf92e. #6658, which the earlier combined runs carried, merged into main on 2026-10-20.Combined series result
Re-measured on 2026-10-21 on current main
2185dbf92e(Windows 11 Pro build 26300, Ryzen 7 5800H, RTX 3070 Laptop GPU, NVIDIA 617.42, WinLibs GCC 15.2.0 r7, Release; SuperTuxKart (PPSA69421) tutorial prompt over the main menu, 1920x1080 internal rendering in a maximized 2560x1369 window, warm shader caches, audio muted, no input;APS5_TRACE_SECONDS=20:8withAPS5_TRACE_EVENTS=1048576, console output not redirected, no profiling switches). Runs in the order A-B-C-D-D-C-B-A, two per configuration; FPS is presents over the 8-s window.2185dbf92e#7464 and #7465 make the largest step together: the title's per-frame host imports disappear (see their PRs). With #7464 reduced to its CPU-label wake only, the whole series measured 10.07 / 9.01 FPS against main 9.24 / 9.30 in a separate block of the same session. Combined numbers are not the gain of any single PR. The combined builds are local merges of the published (#7465-#7470, #7472, #7474) and rebased (#7464, #7471, #7473) heads into main
2185dbf92e; the commits in their summary lines are those merges, not pushed. Summary lines, traces and digests: series-evidence.zip.Checklist
6447ed1ed7fd; merges cleanly into current main2185dbf92e(git merge-tree, 2026-10-21); related overlaps are listed aboveNotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file.mdfiles or images added to the repository (attach them to this PR)The published head adds publication metadata only; its complete source tree is identical to the tested snapshot above.
Series index
These are the ten performance topics from the same profiling effort, followed by a separate UI Lab cache-preservation fix. Membership in the series does not imply a dependency.
Reproduction evidence
Series traces, summary lines, module hashes, focused-test logs and UI contact sheets. Game measurements use the pinned base and source revisions described above; assets contain no game binaries.
Update of 2026-10-21: 7466-evidence.zip (traces, summary lines,
trace_digest.pyandperformance_compare.pyoutput, loaded-module hashes), counters where.json and the probe review-probe.patch with probe_window.py.