docs(tested): measure partially covered guest frees on Deck #471
No reviewers
Labels
No labels
area/accessibility
area/audio
area/input
area/install
area/menu
area/renderer
area/saves
area/upscaling
beanstalk: approved @ 1697603
beanstalk: approved @ 2c5a62e
beanstalk: approved @ 4fd82b7
beanstalk: approved @ 64d6d09
beanstalk: approved @ 6f91fae
beanstalk: approved @ 70a78f9
beanstalk: approved @ 8d361dc
beanstalk: approved @ 9d8356e
beanstalk: approved @ abf2227
beanstalk: approved @ d82f202
beanstalk: approved @ e5f1e40
beanstalk: approved @ ee8ab5f
ci: approved
good first issue
gpu/amd
gpu/igpu
gpu/intel
gpu/nvidia
help wanted
kind
bug
kind
chore
kind
docs
kind
feature
kind
performance
kind
question
needs measurements
platform/linux
platform/macos
platform/steam-deck
platform/windows
preview
priority
critical
priority
high
priority
low
regression
status
blocked
status
confirmed
status
duplicate
status
invalid
status
needs-info
status
wontfix
testing wanted
ci: approved
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Longshot!471
Loading…
Reference in a new issue
No description provided.
Delete branch "zeldaootr/Longshot:measure-partial-import-frees"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Type: docs · Risk: low · Tested on: Linux, no GPU (game-free checks); the records are Steam Deck OLED runs (SteamOS 3.9.5, RADV) · Needs: none
Why
The host zeroes an entire freed range when even part of it still belongs to a Vulkan import. Before anyone changes how the host discards memory, these records say how many bytes that decision covers unnecessarily on the Deck: under 2 MiB at the Field transition in the refined run.
What changed
Two Deck run records from passive release probes, no code. The first probe kept the original decision and measured the union of live, retired, evicted, deferred and pending imports; the second used the actual allocation extent of sparse DMA buffers, including their padding.
2026-11-14-field-renderer-zeldaootr-partial.md(first probe) and2026-11-14-field-renderer-zeldaootr-partial-v2.md(refined probe), one run each.Measurements
Verdict: passes: records only; the two pass
tests/test_tested_configurations.pyand join the assembled catalogue (225 to 227 rows), two rounds each onmainand this PR.Hardware: Linux x86-64 server (Ubuntu 24.04), no GPU used; Python 3.15
Scene: no game: the game-free checks
Method:
python3 -I -B tests/test_tested_configurations.pyonmainand on this branch, two interleaved rounds;scripts/tested_configurations.py --outputonce on each, counting the assembled table's rowsHow to reproduce: run both commands from the repository root on each commit
aa95d35f20861e19tests/test_tested_configurations.py, round 1 / round 2docs/tested/What the records hold (instrumented RC3 builds, not
mainor this PR): both runs use the same RC3 host with corrected memory reporting, Steam Deck OLED on SteamOS 3.9.5 and RADV VANGOGH, 16 GB shared, 1280×720, frame generation off; from the copied child Kokiri save, settle 20 s, teleport to the Field and record 45 s after warm-up. The first probe treated every query as unknown because sparse pools were present with unrecorded allocation padding; its zero lower bound was inconclusive. In the refined run, 56 partially overlapping free requests spanned 19,083,264 bytes (18.2 MiB) outside known ownership over the whole launch. Four occurred from the teleport request onward, totaling 1,851,392 bytes (1.77 MiB). The largest single uncovered span across the entire launch was 2.50 MiB. No refined query had uncertain ownership. These are cumulative requested bytes with possible reuse across calls; actual resident or reclaimable bytes were not measured. The per-request tracing's timing overhead makes these runs unsuitable as an FPS benchmark.Flags and settings
None
Testing
Tested: Linux, game-free: on this branch rebased onto
mainaa95d35f(20861e19), the two records passtests/test_tested_configurations.pyandscripts/tested_configurations.pyassembles the catalogue with them. The probe preserved the original RC3 decisions on 5,151 nonempty and empty test inputs; live and deferred sparse padding, duplicate overlaps, touching ranges and disjoint gaps were checked separately. Both Deck runs reached the Field map and completed normally.Not tested: Windows and other GPUs: the records describe Steam Deck runs only. Resident or reclaimable bytes (see above).
Must be tested: None
Risks
What could break: nothing at run time: measurement records only. A future partial-discard implementation must coordinate ownership checks with the discard, protect alignment padding, and keep reads of freed pages zero.
Turning it off: revert the commit
Compatibility: Nothing changes
Issues
None filed. Related: the adjacent-only lookup fix (#469) and pending import ownership (#468).
Checklist
Everyone
type(scope): description) of the status line's type.main. Onto mainaa95d35f, no conflict; the commit is the same change as before (git patch-id).python -I -B tests/run_all.pypasses (any failure that also fails onmainis named). The full suite on mainaa95d35f(Linux, g++ 13.3, the Vulkan headers set): 528 passed, 15 failed, 50 skipped; this PR adds run records only, and the one check that reads them,tests/test_tested_configurations.py, passes here. The 15 that fail on main read nothing underdocs/:test_appimage_player_build,test_bake_portability,test_cpm_discovery,test_crash_dialog,test_env_on,test_lift_cache,test_lift_cleanup_error,test_make_game_cache,test_mods_size_table,test_options_budget_once,test_pipeline_tour,test_readback_late,test_vk_pgo,test_walk_keyandnx2/test_texture_init_barrier.py.third_party/untouched (a new folder with aPROVENANCE.mdinstead).When it applies
Assisted-by:/Co-Authored-By:trailers.docs/tested/for each new measured run (format indocs/tested-configurations.md).Rebased onto main
9c9d69edand rewritten so the run records are named with the tester handle zeldaootr (file contents unchanged). The description now has the game-free checks on main and on this branch, two interleaved runs each, with the failures that also fail on main named.3c143c771bae77860315WIP: docs(tested): measure partially covered guest frees on Deckto docs(tested): measure partially covered guest frees on DeckRebased onto
mainaa95d35fwith no conflict (the same records,git patch-id; commits now under the noreply identity) and the description moved to the current template.The game-free check was run again on the new base (
tests/test_tested_configurations.pyOK onmainand here, two rounds; the catalogue assembles with the records); the Deck numbers are what the records hold, from instrumented RC3 builds, so no rebase changes them.ae7786031520861e19ffView command line instructions
Checkout
From your project repository, check out a new branch and test the changes.