Deck: the same install on microSD holds ~15-20% fewer fps than on internal storage (measured, Steam Deck OLED) #386
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#386
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
What happens
The game installed on the Deck's microSD card sustains ~15-20 % fewer fps in the same scene than the identical install on the internal NVMe, with the same build, save, options, and walk protocol. The tell is draw counts: on SD the scene's per-frame draw count sits several times as high (asset requests keep failing to settle and get re-issued), and the log's streaming hitches lengthen. This reads as the "low fps on my Deck" reports to expect once more people install to SD, so it seems worth naming as a known factor and possibly a builder/README hint.
One session, measured (Steam Deck OLED)
Same save slot (
KokiriForest_Child), same walk-and-turn protocol through the control bridge (idle 3 samples, then right-stick full-speed turn 4 samples of 3 s, then 20 s forward walk), warm pipeline caches both sides, same wrapper env. The like-for-like pair is the twofabcd2c0rows: the same build on the same save, one install on internal NVMe (from my earlier A/B sessions, upscaler row at the game's own network), one on microSD (this session; the ini carries no upscaling key so it also defaults to the game's own network). Thecf605c85rows are from this session with FSR 3.1 set (dlss=3, 640x400 -> 1280x800), which on this build runs ~1-2 fps slower than its own network, so they are honest but a slightly different configuration.fabcd2c0@ NVMe, game's own networkfabcd2c0@ microSD, game's own networkcf605c85@ NVMe, FSR 3.1Both
fabcd2c0rows are the same build on the same save slot with the Upscaler row on the game's own network (verified from each run's own log:Auto (this PC) would be: ... the game's own upscaler), only the storage differs. The microSD run's steady draw count at idle is four to five times the NVMe run's - the tell that asset requests are not settling. Thecf605c85row is this session's build with FSR 3.1, shown separately because the upscaler differs.NVMe vs microSD on this machine, raw storage measurement while nothing else ran:
The card is the stock-class SanNano-ish UHS card that ships in most Decks; the game folder is 30-35 GB, ext4, no compression.
What I think it means, as an observation not a diagnosis
The runtime's streaming wants small random reads at a rate the SD bus physically cannot do (63x gap at 4K). Nothing is wrong with the game; the Deck community's standing advice is already "keep games on internal storage when you can", but the builder gives no hint either way, and SD installs are the default for people managing space. Options that exist today: builder note ("internal storage measures ~60x faster for this game's read pattern"), or
--romfssplit (big romfs files on SD, hot streaming pieces on internal). Whether any runtime-side change could help (bigger readahead for slow media, detected by probing read latency at startup) is beyond what I can tell from outside.Not known
HOS_CHAINduring an SD-session walk would split it, happy to run it.