All games

Luanti

Rust · 60 0.2 h played, 0 crashes

A voxel sandbox engine for building and exploring, with Minetest Game and thousands of mods.

Genre
sandbox adventure
Players
single player online multiplayer
Input
made for keyboard and mouse
View
3D first-person
Content
mods
Keywords
voxel building

Played sessions

Testing is done with Walnut's rating tool (walnut-rate, planned): how ratings are made and submitted.

Same in every session: Walnut 0.1

DateLauncherGame buildPlatform builds that differRulesPlayEndedPicture
2026-10-29 Luanti luanti 5.15.2+dfsg-2+ps3.1124~dev20261029153146 Linux kernel 6.12.111+ps3.874
Mesa 26.2.4-1+ps3.924
ps3rsx 0.924+k6.12.111+ps3.874
2.211 minquit ok Details
2026-10-24 Luanti luanti 5.15.2+dfsg-2+ps3.786 Linux kernel 6.12.111+ps3.747
Mesa 26.2.4-1+ps3.721
ps3rsx 0.735+k6.12.111+ps3.747
1.08 minquit ok Details

Download all sessions as CSV (one row per session, the aspects as columns)

Rating history

The rating on each version it was tested on, newest first: each row is rated from that version's sessions alone, under the newest rules those sessions have the data for.

VersionTestedMedalRules Frame rateSmoothnessSoundPictureStabilityControlsDisplayFeaturesLoad Play
Walnut 0.1
luanti 5.15.2+dfsg-2+ps3.1124~dev20261029153146
2026-10-29 Rust · 60 2.2 10-99100911008510092 0.2 h
1 test
Walnut 0.1
luanti 5.15.2+dfsg-2
2026-10-24 Scrap · 56 1.0 22-9610090---98 0.1 h
1 test

Scripted benchmarks

Not rated: tests of driver and game changes. A script plays the same scene on the PS3 again and again (the desktop stopped, vsync off) to compare two builds of the game or of the graphics driver. The numbers say which build is faster; they never feed the medal.

How the script plays it: Luanti 5.15.2 with Minetest Game: a fixed flight over terrain generated from a fixed seed.

The recipe's full description

Luanti 5.15.2 (our build, LuaJIT, ppc64) with Minetest Game (luanti-game-minetest): a fixed flight over terrain generated from a fixed seed. A server-side mod can't count frames, so the world mod ps3bench (assets/luanti-ps3bench) only makes every run the same: it holds the player at the start for 15 s while the first blocks are generated and meshed, logs "ps3bench: path start", flies 45 s (240 nodes north looking down, then a full turn), logs "ps3bench: path end" and shuts the game down. fps from the Gallium HUD from the "path start" line (the load time includes the 15 s hold; parse prints joined=, Luanti's own stamps from its first log line to the join). Steady state: the path is flown 4 times (ps3bench_loops; the mod logs "path loop K"), 180 s after the hold. WARMUP=45 from "path start": the hold and the first loop (60 s after joining, the fresh world's first terrain generated) don't count; the HUD window is loops 2-4 (MEASURE=135), the same terrain flown again (generated by then; blocks the server or client unloaded come back). World and config live in /var/tmp/ps3-bench/luanti (the player's ~/.minetest worlds and minetest.conf are untouched). The world is made new for every run, so each run generates the same terrain (mapgen CPU time counts, as for a player exploring); variant saved keeps the last map. The mod also logs the process's memory every 5 s; parse() turns it into mem_* keys (KiB). The other variants (below) change one memory or load-stall lever each; the game's technical.md has the reasoning, the sizes assumed for each, and the measurements.

57 variants of the recipe
base stands for the gamethe recipe as it is, without a variant
savedthe map from the previous run: loaded from disk instead of generated
nopppost-processing off (on by default: the scene goes through an FBO)
mipmipmapping on (off by default): Mesa generates the levels on the GPU
chunk3Mapgen. The built-in server generates a whole chunk at a time (chunksize 5 = 80^3 nodes) inside a voxel manipulator that is one block larger on every side (7^3 blocks: 5.6 MB of nodes, 1.4 MB of flags, 343 MapBlocks of 16 KB created in the map), with v7's two 3D noises kept for good (2 x 4.2 MB) and the cave noises made and freed per chunk (2 x 4.2 MB): ~30 MB at the peak, all touched for every chunk. chunksize 3 (48^3) is ~8 MB. A world-creation setting (a new world here): the terrain's shape is the same, trees and ores near chunk borders differ; the border is a bigger share of each chunk (5^3 blocks processed per 3^3 instead of 7^3 per 5^3), so generation costs more CPU per node.
srvunloadThe server keeps a block 29 s after the last time it was wanted (generated chunks include blocks nobody is sent: out of view, air, underground) and saves it on unloading. 8 s keeps what the flight is still using (the active and send ranges refresh the timer).
active2Blocks within active_block_range (default 4: 9^3 = 729 blocks) are loaded from the database and kept alive for ABMs and mobs; 2 is 5^3 = 125 (Luanti's own Android default).
gen3Generate no further than 3 blocks (48 nodes) from the player; blocks beyond that are sent only when they already exist (chunks generated whole still reach ~4 blocks further). Far terrain appears later or only as the player comes closer: watch for gaps at the edge of the view.
ioSave less often and without a full fsync per commit (sqlite_synchronous 1 = NORMAL, Android's value, instead of FULL; map_save_interval 15 s instead of 5.3). The PS3's disk takes one command at a time, so a world save can hold up page faults.
cliunloadClient map. The client keeps every block it was sent that is within the view range of the camera (all around, not only the frustum) and the others for client_unload_unused_data_timeout (600 s) up to client_mapblock_limit (7500 blocks, "about 120 MB" says the source) or the number of blocks in a view-range sphere, whichever is larger (3600 at the default range 190, 268 at 60): a 45 s flight cannot show this, a 10 minute session can. 15 s makes the flight drop what it left behind (about 60 nodes behind after ~9 s) and so shows the saving; blocks seen again are re-sent.
leavesEvery block's mesh is kept twice: S3DVertex (36 B, 4 per quad) and u16 indices in Irrlicht's CPU buffer, and the VBO. Fancy leaves draw every face between leaf nodes; simple draws only the outer ones (Android's default). Changes the look of trees.
tradeoffsmooth_lighting asks for 26 neighbours to be re-meshed whenever a block arrives, 6 without it (performance_tradeoffs keeps the lighting and re-meshes 6; edges may be wrong for a moment).
flatlight-
nominimapThe minimap thread, its per-block copy (2 KB a block) and the mesh thread's scan for it.
view40Fewer blocks everywhere (about the square of the range): 40 and 90 around the 60 of the base.
view90-
view120-
view190-
nomergeStalls while blocks arrive. renderMap merges every mesh buffer of under 300 vertices of the visible blocks into new buffers (copy, new VBO with EHM_STREAM), cached by the exact set of buffers: while blocks arrive or the camera turns the set changes and the merge is redone, with VBOs of up to 65535 vertices (2.3 MB) created and destroyed, in a driver and memory where both are expensive. 0 turns it off (more draw calls); 100 merges only the smallest.
merge100-
meshdelayThe mesh thread sleeps this many ms after each mesh ("reduces jitter on slower clients"): leaves the two hardware threads to the renderer and the server while blocks arrive.
meshchunk2One mesh and one buffer set per 2^3 blocks: an eighth of the VBOs and draw calls, but a block arriving re-meshes eight.
noraycullOcclusion culling by raycasts in the render thread, every time the draw list is rebuilt.
profLuanti's own profiler (the F6 numbers: updateDrawList, renderMap's collecting and drawing, merged buffers and their cache hit rate, blocks drawn, mesh queue) printed every 5 s into a log file at info level on the disk ($LU_DIR, not the run directory in RAM), gzipped into the run directory as luanti-debug.txt.gz after the run. For a diagnosis, not for fps: info level logs more.
v120prof-
v120nice-
v120srv10the server dropping blocks it has not used for 10 s instead of 29 (4128 server blocks in memory at 120, about half the heap): less to swap, more blocks loaded again from the world database. luanti 0011 (ps3.1125 on) makes 10 the default: v120srv29 is its off-switch, v120old both 0010's and 0011's (the game as ps3.1123 ran it), v120srv5 a shorter timeout still
v120srv29-
v120srv5-
v120old-
v120noniceluanti 0010 (ps3.1124 on) sets nice 10 inside the engine (LU_NICE, default 10): v120nonice is the game as before it, the off-switch for the same-boot A/B
v120mesh2two mesh threads instead of one (Luanti's automatic count is a quarter of the CPUs, at least 1)
mallocglibc's malloc. Threads have their own arenas, and a freed block inside one stays resident: dirty garbage the kernel swaps out. The mapgen's 2-8 MB arrays, the voxel manipulator and the mesh vectors are above the 128 KB mmap threshold only until the first big free raises it (up to 32 MB); with the threshold fixed they are mmapped and returned when freed. Luanti's own malloc_trim() (porting.cpp) waits until 256 MB were freed in all. Environment only, no rebuild.
trim16Luanti's own malloc_trim() threshold (our luanti 0007, LU_TRIM_MB; 256 MB freed by default): the MEM=1 profile of 2026-10-18 had 23-28 MB free inside the arenas (18-22 MB in one thread arena), resident or swapped out (docs/MEMORY.md). Trims run in the emerge and mesh threads, not the renderer. The generic alternative for every game is run.sh MALLOC=trim (ps3-malloctrim.so).
trim64-
leanCombinations. lean: no change a player would notice (the view range and mapgen shape stay); leaner: also simple leaves, no minimap, no buffer merging, a mesh delay.
leaner-
allbatchoffOur luanti build's GL submission switches (gamedb/games/luanti/packages/luanti/patches 0004-0006, irr/include/LuGlOpt.h): all on in the base run, LU_GL=0 is the game as upstream draws it. On the host (llvmpipe, GL 2.1, the same flight) they take the GL calls from ~1180 to ~835 a frame and the buffer bytes uploaded from ~32 KB to ~16 KB a frame; each variant turns one off (or all, allbatchoff).
nodupup-
nobind-
noxform-
noptr-
nofog-
noskin-
nosky-
nomatreuse-
allog-
b16-
f44-
b16f44-
p1024-
alnull-
f32-
lin-
nosound-
menu-
freshmenuthe main menu on an empty configuration: the package's own defaults (0008 fullscreen, 0009 viewing range 60)

Conditions: what a variant adds to the recipe (its environment switches) and what ran alongside (the stall recorder, a profiler). Rows marked invalid or not comparable say why. The other numbers, the build and the run length are under "All numbers" in each batch.

What the run length means

"warm-up + 120 s" is a steady-state run, which leaves out a 60 s warm-up and measures 120 s or more; "whole run" counted everything from the start, the way runs before 2026-10-17 did.

Suite summary

2026-10-20 · batch suite-summary-2026-10

Purpose: The 13 benchmarked games (15 rows) with their known numbers, the rules-1 calibration of the rating formula (docs/GAMEDB.md "Calibration", tools/gamedb/score.py). Each value names its source: a batch's cell, or the suite table of docs/games/README.md where the number is a reading or a range (no single cell holds it). Stutter is the stall seconds over the 2-minute window; load unmeasured, stability assumed clean, picture and display right.

Row ram_free
MiB
vram
MiB
fps_steady
frames a second
stall_play_s
seconds
low1_play
frames a second
longest_play_ms
ms
sound_faults_per_min
faults a minute
Picture, sound
Luanti base 196346.03.519.17240 right, no underruns

Mesa ps3.924 + kernel .874, luajit ps3.931~dev (0002), luanti ps3.1124~dev (0010, 0011 at 5 s)

2026-10-29 · batch 2026-10-29-luanti-shipped · 8 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
v120old LU_NICE=0
stall recorder at 10 ms
214.3185
v120old LU_NICE=0
stall recorder at 10 ms
screenshots in the window
204.0201
view120 stall recorder at 10 ms 3816.714
view120 stall recorder at 10 ms
screenshots in the window
3413.124
All numbers and setup of this batch
VariantNumbersSetup
v120old fps whole run 24 cpu 314.3 seconds underruns 0 underruns ram_free 11.8 MiB vram 83.7 MiB longest_ms 1409.0 ms stall_disk_s 0.9 seconds stall_swap_s 8.2 seconds stall_reclaim_s 0.5 seconds stall_gpu_s 0 seconds stall_cpu_s 21.6 seconds stall_play_s 30.9 seconds longest_play_ms 1409.0 ms no build recorded
the game's resolution, warm-up + 120 s
v120old fps whole run 23 cpu 311.9 seconds underruns 0 underruns ram_free 13.2 MiB vram 78.6 MiB longest_ms 1453.0 ms stall_disk_s 1.1 seconds stall_swap_s 9.9 seconds stall_reclaim_s 1.1 seconds stall_gpu_s 0 seconds stall_cpu_s 23.2 seconds stall_play_s 37.1 seconds longest_play_ms 1453.0 ms no build recorded
the game's resolution, warm-up + 120 s
view120 fps whole run 41 cpu 326.2 seconds underruns 0 underruns ram_free 12.3 MiB vram 70.0 MiB longest_ms 209.8 ms stall_disk_s 0.1 seconds stall_swap_s 0.1 seconds stall_reclaim_s 0.0 seconds stall_gpu_s 0.0 seconds stall_cpu_s 1.5 seconds stall_play_s 1.8 seconds longest_play_ms 209.8 ms no build recorded
the game's resolution, warm-up + 120 s
view120 fps whole run 38 cpu 318.5 seconds underruns 0 underruns ram_free 16.4 MiB vram 69.3 MiB longest_ms 819.7 ms stall_disk_s 0.1 seconds stall_swap_s 0.6 seconds stall_reclaim_s 0.2 seconds stall_gpu_s 0.0 seconds stall_cpu_s 2.4 seconds stall_play_s 5.0 seconds longest_play_ms 819.7 ms no build recorded
the game's resolution, warm-up + 120 s

Observations: The luanti build with 0010 (background threads at nice 10) and 0011 at its final 5 s (the server unloads unused map blocks after 5 s) against both switched off (v120old: LU_NICE=0 and the timeout at 29, the game as ps3.1123 ran it) at viewing range 120, 3 rounds alternating, same boot, STALLS=1, the screenshot at 20 s in the warm-up; then one more round with three screenshots inside the window (60, 100, 150 s; @shot) to look at the picture. view120: 38 fps steady (38-39), 1% low 16.7, 1.8 s of stalls in 135 s (1.3-2.4), longest 210 ms, swap stalls 0.1 s, the game's swap at the end 49-53 MB; v120old: 21 fps (19-21), 4.3, 30.9 s (30.8-35.1), longest 1409 ms, swap stalls 8.2 s, 97-105 MB. Every run fullscreen 1920x1080, no interference, the process check clean. Pictures: the 100 s shot of the shipped build is the world (the mountain ahead, sea, sky); the 60 and 150 s shots of both builds and the 100 s shot of the old one are black, and the 20 s warm-up shots grey with a black hand: the flight path runs through a mountain, the camera in its rock (black) or in blocks not yet generated (grey), the same for both builds (gamedb:luanti todo.toml).

Mesa ps3.924 + kernel .874, luajit ps3.931~dev (0002), luanti ps3.1124~dev (0010, 0011 at 10 s)

2026-10-29 · batch 2026-10-29-luanti-srvunload · 11 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
v120old LU_NICE=0
stall recorder at 10 ms
214.7175
v120srv29 stall recorder at 10 ms 31.08.956.0
v120srv5 stall recorder at 10 ms 3816.98
view120 stall recorder at 10 ms 3413.225
All numbers and setup of this batch
VariantNumbersSetup
v120old fps whole run 25 cpu 310.4 seconds underruns 0 underruns ram_free 10.6 MiB vram 80.8 MiB longest_ms 1426.0 ms stall_disk_s 0.6 seconds stall_swap_s 7.5 seconds stall_reclaim_s 0.4 seconds stall_gpu_s 0.0 seconds stall_cpu_s 21.7 seconds stall_play_s 31.6 seconds longest_play_ms 1426.0 ms no build recorded
the game's resolution, warm-up + 120 s
v120srv29 fps whole run 35.5 cpu 312.9 seconds underruns 0.0 underruns ram_free 11.3 MiB vram 81.9 MiB longest_ms 784.1 ms stall_disk_s 0.4 seconds stall_swap_s 2.4 seconds stall_reclaim_s 0.3 seconds stall_gpu_s 0.1 seconds stall_cpu_s 6.0 seconds stall_play_s 9.3 seconds longest_play_ms 784.1 ms no build recorded
the game's resolution, warm-up + 120 s
v120srv5 fps whole run 40 cpu 327.7 seconds underruns 0 underruns ram_free 14.2 MiB vram 70.4 MiB longest_ms 345.2 ms stall_disk_s 0.1 seconds stall_swap_s 0.1 seconds stall_reclaim_s 0.0 seconds stall_gpu_s 0.0 seconds stall_cpu_s 1.0 seconds stall_play_s 1.2 seconds longest_play_ms 345.2 ms no build recorded
the game's resolution, warm-up + 120 s
view120 fps whole run 37 cpu 322.6 seconds underruns 0 underruns ram_free 12.4 MiB vram 74.2 MiB longest_ms 236.2 ms stall_disk_s 0.0 seconds stall_swap_s 0.5 seconds stall_reclaim_s 0.1 seconds stall_gpu_s 0 seconds stall_cpu_s 2.6 seconds stall_play_s 3.8 seconds longest_play_ms 236.2 ms no build recorded
the game's resolution, warm-up + 120 s

Observations: luanti with 0010 (background threads at nice 10) and 0011 (the built-in server unloads map blocks unused for 10 s instead of 29) at viewing range 120: view120 (both on) against v120old (both off: LU_NICE=0 and the timeout at 29, the game as ps3.1123 ran it), v120srv29 (0011 off) and v120srv5 (5 s), 3 rounds alternating, same boot, STALLS=1, the screenshot at 30 s in the warm-up (outside the window: a capture costs 4-9 s of Xorg time and 1-3 s of stalls at this load). view120: 34 fps steady, 1% low 13.2, 3.8 s of stalls in 135 s (3.3-4.4), longest 230-800 ms; v120old: 21 fps, 4.7, 31.6 s (26.7-35.0), longest up to 2.8 s; v120srv29: 31 fps, 9.0, 9.1-9.6 s (one run left out: nm-dispatcher ran during it, the process check); v120srv5: 38 fps, 16.9, 1.2 s (1.1-2.2), swap stalls 0.1 s; the game's swap at the end 50-56 MB at 5 and 10 s against 80-101 MB at 29. Every run fullscreen 1920x1080, the world drawn in every 30 s screenshot, no input or SSH interference. luanti 0011's default became 5 s on these numbers.

Mesa ps3.924 + kernel .874, luajit ps3.931~dev (0002), luanti ps3.1124~dev (0010: background threads at nice 10)

2026-10-29 · batch 2026-10-29-luanti-nice · 12 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
v120mesh2 stall recorder at 10 ms
screenshots in the window
287.178
v120nonice LU_NICE=0
stall recorder at 10 ms
screenshots in the window
204.2177
v120srv10 stall recorder at 10 ms
screenshots in the window
3511.133
view120 stall recorder at 10 ms
screenshots in the window
308.565
All numbers and setup of this batch
VariantNumbersSetup
v120mesh2 fps whole run 31 cpu 309.6 seconds underruns 0 underruns ram_free 12.0 MiB vram 80.8 MiB longest_ms 795.9 ms stall_disk_s 0.2 seconds stall_swap_s 2.8 seconds stall_reclaim_s 0.0 seconds stall_gpu_s 0.0 seconds stall_cpu_s 9.4 seconds stall_play_s 12.8 seconds longest_play_ms 795.9 ms no build recorded
the game's resolution, warm-up + 120 s
v120nonice fps whole run 23 cpu 312.8 seconds underruns 0 underruns ram_free 11.6 MiB vram 83.8 MiB longest_ms 1218.0 ms stall_disk_s 0.4 seconds stall_swap_s 5.8 seconds stall_reclaim_s 0.5 seconds stall_gpu_s 0.0 seconds stall_cpu_s 22.3 seconds stall_play_s 30.1 seconds longest_play_ms 1218.0 ms no build recorded
the game's resolution, warm-up + 120 s
v120srv10 fps whole run 38 cpu 320.9 seconds underruns 0 underruns ram_free 14.3 MiB vram 71.6 MiB longest_ms 546.4 ms stall_disk_s 0.1 seconds stall_swap_s 0.7 seconds stall_reclaim_s 0.3 seconds stall_gpu_s 0.0 seconds stall_cpu_s 3.4 seconds stall_play_s 5.3 seconds longest_play_ms 546.4 ms no build recorded
the game's resolution, warm-up + 120 s
view120 fps whole run 34 cpu 306.3 seconds underruns 0 underruns ram_free 10.7 MiB vram 80.4 MiB longest_ms 516.4 ms stall_disk_s 0.2 seconds stall_swap_s 2.1 seconds stall_reclaim_s 0.9 seconds stall_gpu_s 0.0 seconds stall_cpu_s 7.3 seconds stall_play_s 10.7 seconds longest_play_ms 516.4 ms no build recorded
the game's resolution, warm-up + 120 s

Observations: luanti 0010 (the MeshUpdate, Emerge, Server, MinimapUpdate and AsyncWorker threads set themselves to nice 10, LU_NICE) at viewing range 120 against its off-switch v120nonice (LU_NICE=0), two mesh threads (v120mesh2) and the server unloading blocks after 10 s instead of 29 (v120srv10), 3 rounds alternating, same boot, STALLS=1, SHOTS=100. 0010: 30 fps steady (27-31), 1% low 8.5, 10.7 s of stalls in 135 s, longest 516 ms; without it 20 fps, 4.2, 30.1 s, 1218 ms: the renice of the earlier batch, now in the engine (threads.tsv shows nice 10 on those threads). Two mesh threads are worse (28 fps, 12.8 s). srv10 is the best: 35 fps (34-35), 1% low 11.1, 5.3 s (3.5-6.2), swap stalls 0.7 s against 2.1, lowest MemAvailable 14.6 MB against 11.0, the game's swap at the end 57-65 MB against 77-105. Every run fullscreen 1920x1080, no interference, process lists before the runs held system services only; the world drawn in every 100 s screenshot.

Mesa ps3.924 + kernel .874, luajit ps3.931~dev (0002), luanti ps3.1123, background threads reniced

2026-10-29 · batch 2026-10-29-luanti-renice · 8 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
v120nice stall recorder at 10 ms
screenshots in the window
308.466
v120prof stall recorder at 10 ms
perf recording
screenshots in the window
142.1242
view120 stall recorder at 10 ms
perf recording
screenshots in the window
143.2307
view120 stall recorder at 10 ms
screenshots in the window
204.1183
All numbers and setup of this batch
VariantNumbersSetup
v120nice fps whole run 34 cpu 313.4 seconds underruns 0 underruns ram_free 10.8 MiB vram 79.3 MiB longest_ms 811.3 ms stall_disk_s 0.2 seconds stall_swap_s 2.1 seconds stall_reclaim_s 0.0 seconds stall_gpu_s 0 seconds stall_cpu_s 8.1 seconds stall_play_s 10.2 seconds longest_play_ms 811.3 ms no build recorded
the game's resolution, warm-up + 120 s
v120prof fps whole run 19 cpu 299.9 seconds underruns 0 underruns ram_free 18.9 MiB vram 79.0 MiB longest_ms 2669.0 ms stall_disk_s 1.4 seconds stall_swap_s 17.3 seconds stall_reclaim_s 11.1 seconds stall_gpu_s 0 seconds stall_cpu_s 25.5 seconds stall_play_s 58.7 seconds longest_play_ms 2669.0 ms no build recorded
the game's resolution, warm-up + 120 s
view120 fps whole run 17 cpu 298.8 seconds underruns 0 underruns ram_free 15.2 MiB vram 80.5 MiB longest_ms 2017.0 ms stall_disk_s 0.7 seconds stall_swap_s 16.8 seconds stall_reclaim_s 0.2 seconds stall_gpu_s 0 seconds stall_cpu_s 36.7 seconds stall_play_s 55.9 seconds longest_play_ms 2017.0 ms no build recorded
the game's resolution, warm-up + 120 s
view120 fps whole run 23 cpu 309.2 seconds underruns 0 underruns ram_free 11.0 MiB vram 83.6 MiB longest_ms 1937.0 ms stall_disk_s 0.7 seconds stall_swap_s 9.3 seconds stall_reclaim_s 0.2 seconds stall_gpu_s 0 seconds stall_cpu_s 23.3 seconds stall_play_s 35.1 seconds longest_play_ms 1937.0 ms no build recorded
the game's resolution, warm-up + 120 s

Observations: Luanti at viewing range 120: why the frames stall. Two profiled runs first (STALLS=1, PERF=1, MEM=1; view120 and v120prof, Luanti's own profiler in a log; their fps don't count): perf samples placed in the stall recorder's stall frames (bench/analysis/stallperf.py) show the main thread on the CPU only 22% of its 55.9 s of stall frames (46% in the other frames), while MeshUpdate (28%), kswapd0 (27%), Emerge-0 (25%) and Server (14%) had the two PPE threads; the recorder called it cpu, as the process as a whole got its CPU. The server held 4128 map blocks, malloc 152-177 MB in use. Then view120 against v120nice (MeshUpdate, Emerge, Server, MinimapUpdate and AsyncWorker threads at nice 10 from outside, recipe lu_renice), 3 runs each, alternating, same boot, STALLS=1, SHOTS=100: 30 fps steady against 20, 1% low 8.4 against 4.1, 10.2 s of stalls in 135 s against 35.1, longest frame 811 against 1937 ms, swap stalls 2.1 against 9.3 s. Every run fullscreen 1920x1080, no interference, process lists before the runs held system services only. Screenshots: the world drawn in every run; the one black frame (a 120 run of the earlier batch too) is most likely the camera inside the mountain the path flies through (the sky is black too: Luanti blacks out the whole screen when the camera is in a solid node, and the other runs' 100 s shots are at that mountain's face), not missing meshes.

Mesa ps3.924 + kernel .874, luajit ps3.931~dev (0002), luanti ps3.1025

2026-10-29 · batch 2026-10-29-luanti-view120 · 4 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base stall recorder at 10 ms
screenshots in the window
4616.830
view120 stall recorder at 10 ms
screenshots in the window
204.0203
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 47 cpu 254.8 seconds underruns 0 underruns ram_free 11.7 MiB vram 61.1 MiB longest_ms 500.5 ms stall_disk_s 0.2 seconds stall_swap_s 0.1 seconds stall_reclaim_s 1.0 seconds stall_gpu_s 0 seconds stall_cpu_s 2.9 seconds stall_play_s 4.5 seconds longest_play_ms 500.5 ms no build recorded
the game's resolution, warm-up + 120 s
view120 fps whole run 24 cpu 309.0 seconds underruns 0 underruns ram_free 12.3 MiB vram 81.4 MiB longest_ms 1602.0 ms stall_disk_s 0.5 seconds stall_swap_s 9.4 seconds stall_reclaim_s 0.4 seconds stall_gpu_s 0.0 seconds stall_cpu_s 25.4 seconds stall_play_s 36.2 seconds longest_play_ms 1602.0 ms no build recorded
the game's resolution, warm-up + 120 s

Observations: Luanti's viewing_range 120 (variant view120, three runs) next to the recipe's 60 (base, one run), same boot, STALLS=1, SHOTS=100, order base then view120 once, then two view120 runs (the user ruled out anything under 120). Every run fullscreen 1920x1080, no interference, the process list before the runs held system services only. 120: 20 fps steady (19-20), 1% low 4.0 (3.9-4.3), 36 s of frames over 100 ms in the 135 s window (35.7-41.0), longest frame 1.0-3.8 s; 60: 46 fps, 16.8, 4.5 s, 500 ms. One 120 run showed a black world with only the HUD at its 100 s screenshot (meshes not caught up). The default of the package is 120 (0009), the smoothness work starts from these numbers (gamedb:luanti todo.toml).

Mesa ps3.924 + kernel .874, luajit ps3.931~dev (0002)

2026-10-28 · batch 2026-10-28-luanti-view190 · 2 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base stall recorder at 10 ms 4618.014
view190 stall recorder at 10 ms 153.0318
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 46 cpu 249.4 seconds underruns 0 underruns ram_free 21.2 MiB vram 61.0 MiB longest_ms 272.8 ms stall_disk_s 0.1 seconds stall_swap_s 0.1 seconds stall_reclaim_s 0.0 seconds stall_gpu_s 0 seconds stall_cpu_s 2.0 seconds stall_play_s 2.3 seconds longest_play_ms 272.8 ms no build recorded
the game's resolution, warm-up + 120 s
view190 fps whole run 18 cpu 311.9 seconds underruns 0 underruns ram_free 10.6 MiB vram 90.5 MiB longest_ms 641.8 ms stall_disk_s 0.5 seconds stall_swap_s 13.2 seconds stall_reclaim_s 0.2 seconds stall_gpu_s 0 seconds stall_cpu_s 41.0 seconds stall_play_s 55.8 seconds longest_play_ms 641.8 ms no build recorded
the game's resolution, warm-up + 120 s

Observations: Luanti's own default viewing_range 190 against the recipe's 60 (base), one run each, same boot, STALLS=1, SHOTS=40: 190 gave 15 fps steady, 1% low 3.0, 56 s of frames over 100 ms in the 135 s window (318 stalls, the main thread on the CPU, swap through the VRAM), 129 MB RSS and 93 MB VRAM; 60 gave 46 fps, 1% low 18, 2.3 s, 118 MB and 62 MB. The played session of 2026-10-24 ran on 190. Basis for the package's default of 60 (gamedb:luanti).

RT mixer: RTPRIO=10 against RTPRIO=0 (OpenAL's mixer on SCHED_RR) on OpenArena, Yamagi Quake II and Luanti base x3 (kernel .874)

2026-10-28 · batch 2026-10-28-rtprio-openal · 18 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base real-time priority 0 4619.810
base real-time priority 10 4520.98
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 47 cpu 254.9 seconds underruns 0 underruns longest_ms 1764.0 ms stall_play_s 4.1 seconds longest_play_ms 1764.0 ms no build recorded
the game's resolution, warm-up + 120 s
base fps whole run 46 cpu 252.1 seconds underruns 0 underruns longest_ms 1022.0 ms stall_play_s 2.6 seconds longest_play_ms 1022.0 ms no build recorded
the game's resolution, warm-up + 120 s

Observations: same boot (2026-10-28 00:19-01:23Z), 18 runs, rounds alternating the order, none interfered; every run fullscreen at 1920x1080 (geom=) and a screenshot 40 s after the load (OpenArena's mostly the demo's map load screen, Yamagi's demo, Luanti's flight). No audible dropout in either arm; inaudible gaps 4 without the limit (Luanti 3, up to 102 ms; Yamagi 1, 67 ms), 1 with it (Yamagi, 7 ms). OpenArena steady 68.55 against 68.3, 1% low 37.5 against 36.6; Yamagi steady 86.8 against 86.3 (ranges not overlapping); Luanti HUD 46 against 45, 1% low 19.8 against 20.9, stall time 4.1 against 2.6 s. With the 20 live runs (OpenArena and Quake III with bots, outside the harness: docs/SPU-AUDIO.md "Real-time mixer"): no gain, a small fps cost, not shipped. Extreme Tux Racer and Armagetron left out: their base recipes need evemu-device, which is not installed (the runs sat in menus), and neither plays through OpenAL

batch ssdroot8 Mesa 0038 force-DXT on the rest of the suite: Luanti and ClassiCube off/opaque/opaque+NEAREST, OpenArena gl2min and gl2min_tc0 off/opaque, SuperTuxKart lean opaque/all (SSD root .472 Mesa ps3.545~dev)

2026-10-20 · batch 2026-10-20-ssdroot8-force-dxt · 24 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base stall recorder at 10 ms
switch force_dxt_stats50
46.517.417.5
base stall recorder at 10 ms
switch force_dxtopaque_force_dxt_nearest1_force_dxt_stats50
46.016.420.5
base stall recorder at 10 ms
switch force_dxtopaque_force_dxt_stats50
46.017.117.5
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 46.5 cpu 245.7 seconds underruns 0.0 underruns ram_free 23.2 MiB vram 62.4 MiB longest_ms 370.9 ms stall_disk_s 0.1 seconds stall_swap_s 0.2 seconds stall_reclaim_s 1.4 seconds stall_gpu_s 0.0 seconds stall_cpu_s 1.5 seconds stall_play_s 3.2 seconds longest_play_ms 370.9 ms Kernel ps3.472, Mesa ps3.545~dev
the game's resolution, warm-up + 120 s
base fps whole run 46.5 cpu 241.9 seconds underruns 0.0 underruns ram_free 23.0 MiB vram 62.0 MiB longest_ms 486.9 ms stall_disk_s 0.2 seconds stall_swap_s 0.5 seconds stall_reclaim_s 1.3 seconds stall_gpu_s 0.0 seconds stall_cpu_s 1.8 seconds stall_play_s 3.9 seconds longest_play_ms 486.9 ms Kernel ps3.472, Mesa ps3.545~dev
the game's resolution, warm-up + 120 s
base fps whole run 46.5 cpu 243.0 seconds underruns 0.0 underruns ram_free 21.1 MiB vram 60.9 MiB longest_ms 459.3 ms stall_disk_s 0.1 seconds stall_swap_s 0.2 seconds stall_reclaim_s 1.5 seconds stall_gpu_s 0.0 seconds stall_cpu_s 1.4 seconds stall_play_s 3.3 seconds longest_play_ms 459.3 ms Kernel ps3.472, Mesa ps3.545~dev
the game's resolution, warm-up + 120 s

Observations: same boot (2026-10-19 23:01Z to 2026-10-20 00:39Z), 24 runs rotated per game, MEM=1 STALLS=1, NV30_FORCE_DXT_STATS=50 in every arm (the plain column carries only that), none interfered, webcam picture right in all (Luanti world, ClassiCube terrain, OpenArena spectator view, SuperTuxKart track). Nothing was forced in four of the five games, so the numbers are equal inside the noise (VRAM in MiB as the vram matrix has it): Luanti (n=2 per arm) tex=0, skip_nodata 516 (every upload is a NULL glTexImage2D filled by sub-images) and skip_format 1; peak VRAM 62.4 (off, 63.1 and 61.6), 60.9 (opaque), 61.9 (+NEAREST); steady 46.5, 46.0, 46.0 fps (HUD); 1% low 17.4, 17.2, 16.4; stalls 17.5, 17.5, 20.5 frames (3.3, 3.3, 3.9 s); load 25.5, 25.2, 25.1 s. ClassiCube tex=0, skip_small 214 (under 64 px) and 10 textures kept as NEAREST-filtered (opaque) or with alpha (+NEAREST): VRAM 60.1 MiB in every arm, 47.2-47.3 fps, 1% low 30.0, 30.6, 31.0, no stalls, load 7.8-8.0 s. OpenArena gl2min tex=0 (skip_format 2593, skip_nodata 8): off 61.8 against opaque 62.1 steady fps, VRAM 114.4-116.2 against 116.9-117.0 MiB, gameplay stalls 0.2-0.3 s both, CPU 187 s off against 187 and 216 s (one outlier) with opaque; gl2min_tc0 (the game's own compression off, 145-149 MiB VRAM) tex=0 (skip_nodata 2244: textures made with a NULL glTexImage2D): off 58.6 against opaque 58.9 fps, VRAM 144.8-148.7 against 147.5-149.0 MiB. SuperTuxKart lean opaque forces nothing again (skip_alpha 182, skip_format 173, skip_small 22, skip_npot 6), while all takes 182 textures as DXT5 (52-53 MB of levels sent as 13 MB; 5 textures, 2.8 MB, go back to uncompressed): peak VRAM 95.5 MiB (96.1, 95.0) with opaque against 58.1 MiB (58.2, 57.9) with all, -37 MiB or -39%; steady 20 fps (HUD) against 20.5 (20, 21); 1% low 11.3 against 11.4; frames over 100 ms 12 against 10.5 (1.8 against 1.4 s), longest gameplay frame 310 against 226 ms; CPU 323 and 311 s against 307 and 326 s; load 28.1 against 28.4 s (mipgen_ms 0, scan_ms 1-3: nothing visible); lowest MemAvailable 26-32 MiB in both arms (the VRAM saved is VRAM, not RAM). Picture: the SuperTuxKart photos with all show the same track, sky, kart and dirt road as with opaque (different moments of the race), no blockiness or banding at the webcam's resolution; DXT5's loss on fine detail is not judged by a webcam, so the user has the last word. OpenAL wedge lines (Wait timeout) in 9 of the 24 runs: Luanti 2 of 6 (160, 194 lines), ClassiCube 2 of 6 (14, 9), OpenArena 3 of 8 (11, 19, 7), SuperTuxKart 2 of 4 (275, 277), in off arms as well, the wedged runs' fps unchanged

batch ssdroot2 P1b: gameplay profiles on the SSD root (PERF=1 MEM=1 x1)

2026-10-19 · batch 2026-10-19-ssdroot2-gameplay-profiles · 7 runs in the batch (all games)

Not comparable: gameplay profiles (PERF=1 MEM=1), slower than plain runs.

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base
not comparable
perf recording 4615.724
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 46 cpu 253.3 seconds underruns 0 underruns ram_free 18.2 MiB vram 61.1 MiB longest_ms 491.3 ms stall_play_s 5.2 seconds longest_play_ms 491.3 ms no build recorded
the game's resolution, warm-up + 120 s

Observations: same boot (2026-10-19 02:01-02:30Z), one run per game, perf at 499 Hz over the window (profiled runs are for profiles, not fps: OpenArena 56 against 60 unprofiled). Share of the game process's samples: Sauerbraten Mesa 62.8% (kgpu 4.8, game 10.5), ClassiCube Mesa 41.2 + kernel 20.1 + kgpu 7.1, SuperTuxKart game 36.5 + Mesa 35.5 + libc 15.1, OpenArena game 27.6 + Mesa 23.1 + other 20.4 (OpenAL 12.4, libdeflate 3.9), Luanti game 47.2 (MeshUpdate thread 20.7% of all samples) + Mesa 14.6 + libc 13.7, dsda-doom Mesa 22.3 + game 20.5 + audio 30 (FluidSynth 15, libspeq 12), OpenTTD kernel 49.5 (36.7 of them in __replay_soft_interrupts, 8.3 in HPTE invalidation, 5.1 in ps3rsx_gart_clear from buffer creation) + audio 17. OpenTTD ran at its title screen (a menu, not gameplay: 18 fps, 4172 underruns). Mesa has no symbols in these runs (perf.data not pulled: PC-side symbolisation later). SuperTuxKart fps cells are the HUD.

batch ssdroot2 P1a: start-up profiles on the SSD root (PERF_LOAD=1 STALLS=1 x1)

2026-10-19 · batch 2026-10-19-ssdroot2-startup-profiles · 5 runs in the batch (all games)

Not comparable: start-up profiles (PERF_LOAD=1 STALLS=1), slower than plain runs.

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base
not comparable
stall recorder at 10 ms
start-up profile
4620.59
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 46 cpu 253.3 seconds underruns 0 underruns ram_free 18.4 MiB vram 63.4 MiB longest_ms 541.2 ms stall_disk_s 0.2 seconds stall_swap_s 0.4 seconds stall_reclaim_s 1.1 seconds stall_gpu_s 0 seconds stall_cpu_s 0.7 seconds stall_play_s 2.3 seconds longest_play_ms 541.2 ms no build recorded
the game's resolution, warm-up + 120 s

Observations: same boot as the baseline (2026-10-19 01:34-02:00Z), cold page cache, one run per game. load_end (exec to the end of the loading screens, loadprof.py) against the USB profiles of batch 17: Sauerbraten 7.7 s (19.8), OpenArena 14.2 (28.1), Luanti 26.1 (43.1), SuperTuxKart 31.5 (54.3), ClassiCube 7.5 (13.9): -39 to -61%. The main thread's disk wait in the load fell from 4.8-18.6 s to 1.0-3.2 s (SB 1.9, OA 2.1, Luanti 3.0, STK 3.2, CB 1.0) and its CPU stayed (SB 3.9 s against 4.1, OA 8.7 against 9.0, STK 23.8 against 22.5, CB 3.2 against 2.9), so the loads are now 47-77% CPU on the main thread, not fully CPU-bound (disk 13-26%, rest: GPU, reclaim, runq, sleeps). On top now: Sauerbraten zlib 1.6 s (map inflate), OpenArena the game's own load path 3.9 s (shader scripts, mipmaps), Luanti mapgen on Emerge-0 8.6 s plus the 15 s hold, STK png 4.2 + zlib 3.9 + audio 2.2 + jpeg 2.1 s, ClassiCube the game 1.5 s and ld.so 0.6 s. Profiled runs are for profiles, not fps.

batch ssdroot1+2 A: baseline on the SSD root (kernel .472 Mesa .476 ps3rsx 0.443 ps3-gpu-tools 0.477~dev)

2026-10-19 · batch 2026-10-19-ssdroot1-baseline · 12 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base stall recorder at 10 ms 4619.111
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 46 cpu 247.2 seconds underruns 0 underruns ram_free 19.0 MiB vram 61.5 MiB longest_ms 724.1 ms stall_disk_s 0.3 seconds stall_swap_s 0.2 seconds stall_reclaim_s 1.6 seconds stall_gpu_s 0 seconds stall_cpu_s 0.9 seconds stall_play_s 3.5 seconds longest_play_ms 724.1 ms Kernel ps3.472, Mesa ps3.476, ps3rsx 0.443
the game's resolution, warm-up + 120 s

Observations: same boot 2026-10-19 00:22-01:30Z, kernel 6.12.111+ps3.472, root on the internal SSD image (this console has an upgraded SSD; a stock PS3 has an HDD), STALLS=1 ROTATE=1, the stall recorder samples ps3db now. 5 of 17 runs excluded as interfered (SSH logins and a key press): Sauerbraten 0022 (the check run) and 0034, SuperTuxKart 0101 0106 0112 (a polling loop at the batch switch). Against the USB root (cross-boot: ssd1 '-' arm for Sauerbraten and OpenArena, batch 16 on .433 and older Mesa for the rest) the game's load is 7.1 s against 16.9 (Sauerbraten), 6.9 against 10.7 (OpenArena), 25.0 against 40.8 (Luanti), 31.1 against 53.6 (STK), 7.6 against 14.2 (ClassiCube); the load's disk wait is 1.3-3.4 s against 5.5-10.9; gameplay stalls Sauerbraten 0.05 s against 1.6, OpenArena 0.2 against 0.3, Luanti 3.5 against 2.5 (reclaim 1.6 s against 0.4), STK 0.2 s (n=1); steady fps about the same (Sauerbraten 39.1 against 38.5, Luanti 46 against 46, STK 22 by the HUD against 20, ClassiCube 48.1 against 45.9, falling to 46.1 from 02:00 on with nothing changed) except OpenArena 60.4 against 55.9. SuperTuxKart fps cells are the HUD median now: its own 'Average FPS' (105-111) is the physics tick rate (120 Hz x 180 s = 21602 ticks in every run), not rendered frames. Photos show the right scenes; Luanti's 60 s and 150 s photos fall in the path's turn over the sea (cyan, no terrain) because the load is shorter than on USB, not a missing world. Mic: OpenArena audible, Sauerbraten/STK/Luanti/ClassiCube mostly at the room-hum floor.

batch 17: ETR uncapped, start-up profiles x5, shader cache cold/warm, OpenArena gl2 memory variants, Mesa sysmem switches, Sauerbraten shortnormals

2026-10-18 · batch 2026-10-18-batch17 · 29 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base stall recorder at 10 ms
start-up profile
4717.816
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 46 cpu 245.9 seconds underruns 0 underruns ram_free 16.9 MiB vram 61.3 MiB longest_ms 445.3 ms stall_disk_s 0.6 seconds stall_swap_s 0.1 seconds stall_reclaim_s 0.3 seconds stall_gpu_s 0.0 seconds stall_cpu_s 1.5 seconds stall_play_s 2.9 seconds longest_play_ms 445.3 ms no build recorded
the game's resolution, warm-up + 120 s

Observations: same boot as batch 16 (kernel 433), ioquake3 462, Mesa 442~dev, cube2 442~dev, ps3-gpu-tools 0.469; 1 run excluded (sauerbraten shortnormals round 3: a key press). OpenArena gl2min on ioquake3 462 (snorm colours default): steady 57-60, stalls 0.7-2.6 s (batch 16 on 396: 51-53, 9-11 s); gl2min_color16 (old colour path) 52-53, stalls 12.9 s, swap 20 s; md3pack -20 MB VRAM, same stalls; mippowf lowest stalls (0.7-0.9 s). Mesa NV30_SYSMEM_COPY=2+NV30_INVALIDATE_BUFFER=1 on color16: stalls 9.9/12.3 -> 1.5/1.4 s, swap 20-26 -> 0.6-1.1 s, steady 53-54 -> 59. Sauerbraten shortnormals 38.7 -> 45.4 (+17%), stalls equal, VRAM +4 MB. Shader cache cold vs warm: no load gain (OA 10.3 cold vs 10.6 warm, Sauerbraten 17.4 vs 18.4). ETR uncapped still 59: not a vsync cap

batch 16: game prefetch A/B, idle fix on/off (433), ClassiCube chunks1, X-Moto stream, Luanti lean parts

2026-10-18 · batch 2026-10-18-batch16 · 41 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base stall recorder at 10 ms 4617.516
base stall recorder at 10 ms
switch gpffetch
4620.013
active2 the recipe as it is 4618.114
chunk3 the recipe as it is 4521.97
srvunload the recipe as it is 4517.625
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 47 cpu 247.0 seconds underruns 0 underruns ram_free 16.8 MiB vram 62.6 MiB longest_ms 357.7 ms stall_disk_s 0.5 seconds stall_swap_s 0.2 seconds stall_reclaim_s 0.4 seconds stall_gpu_s 0.0 seconds stall_cpu_s 1.1 seconds stall_play_s 2.5 seconds longest_play_ms 357.7 ms no build recorded
the game's resolution, warm-up + 120 s
base fps whole run 47 cpu 247.3 seconds underruns 0 underruns ram_free 17.3 MiB vram 61.9 MiB longest_ms 3089.0 ms stall_disk_s 2.6 seconds stall_swap_s 0.4 seconds stall_reclaim_s 0.6 seconds stall_gpu_s 0.0 seconds stall_cpu_s 0.6 seconds stall_play_s 5.5 seconds longest_play_ms 3089.0 ms no build recorded
the game's resolution, warm-up + 120 s
active2 fps whole run 46 cpu 241.6 seconds underruns 0 underruns ram_free 17.8 MiB vram 59.7 MiB longest_ms 2142.0 ms stall_play_s 6.7 seconds longest_play_ms 2142.0 ms no build recorded
the game's resolution, warm-up + 120 s
chunk3 fps whole run 44 cpu 266.2 seconds underruns 0 underruns ram_free 18.1 MiB vram 65.7 MiB longest_ms 225.6 ms stall_play_s 1.2 seconds longest_play_ms 225.6 ms no build recorded
the game's resolution, warm-up + 120 s
srvunload fps whole run 45 cpu 279.6 seconds underruns 0 underruns ram_free 12.6 MiB vram 59.9 MiB longest_ms 1025.0 ms stall_play_s 6.3 seconds longest_play_ms 1025.0 ms no build recorded
the game's resolution, warm-up + 120 s

Observations: same boot 2026-10-18 ~18:00-20:25 local, kernel 433 (idle fix, no kicker), interference detector on (3 interfered runs excluded: ssh logins). Prefetch fetch vs base x3: no gain (Sauerbraten load 18.1-18.6 vs 15.2-18.8 s; OA gl2min ~0.5 s faster; Luanti WORSE: load +1-4 s, two runs with 3 s hitches): turn the default off. Idle fix on/off x2: stall_play_s 0.4/0.4 vs 9.0/7.9 s, longest 0.22-0.38 vs 2.2-2.8 s (clean). ClassiCube chunks1 48.1 vs 46.0 (+4.7%). X-Moto stream 162.1 vs 160.6 (+1%). Luanti chunk3 renders a black void at 150 s (the lean culprit); srvunload/active2 render but stall more (6.3/6.7 s vs ~2.5)

Luanti ps3.405 clean re-runs (interference detector, kernel 433, kick)

2026-10-18 · batch 2026-10-18-luanti-clean-reruns · 6 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base stall recorder at 10 ms
waker kick at 10 ms
45.518.412.5
cliunload stall recorder at 10 ms
waker kick at 10 ms
46.020.19.5
lean stall recorder at 10 ms
waker kick at 10 ms
56.522.24.0
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 46.0 cpu 241.8 seconds underruns 0.0 underruns ram_free 16.9 MiB vram 62.0 MiB longest_ms 185.2 ms stall_disk_s 0.3 seconds stall_swap_s 0.1 seconds stall_reclaim_s 0.0 seconds stall_gpu_s 0.0 seconds stall_cpu_s 1.0 seconds stall_play_s 1.8 seconds longest_play_ms 185.2 ms Kernel ps3.433
the game's resolution, warm-up + 120 s
cliunload fps whole run 46.5 cpu 265.6 seconds underruns 0.0 underruns ram_free 21.0 MiB vram 58.5 MiB longest_ms 2065.5 ms stall_disk_s 2.4 seconds stall_swap_s 0.1 seconds stall_reclaim_s 0.3 seconds stall_gpu_s 0.0 seconds stall_cpu_s 0.6 seconds stall_play_s 4.5 seconds longest_play_ms 2065.5 ms Kernel ps3.433
the game's resolution, warm-up + 120 s
lean fps whole run 57.0 cpu 304.0 seconds underruns 0.0 underruns ram_free 22.1 MiB vram 45.4 MiB longest_ms 238.2 ms stall_disk_s 0.1 seconds stall_swap_s 0.0 seconds stall_reclaim_s 0.3 seconds stall_gpu_s 0.0 seconds stall_cpu_s 0.1 seconds stall_play_s 0.7 seconds longest_play_ms 238.2 ms Kernel ps3.433
the game's resolution, warm-up + 120 s

Observations: 2026-10-18 ~16:00-16:35 local, x2, interfered=0 on all. base: stalls 1.5/2.1 s, longest 167/203 ms, 45-46 fps. cliunload: WORSE, stalls 3.8/5.2 s, longest 2.05/2.08 s (unload -> reload hitches). lean: 56-57 fps, stalls 0.4/0.9 s BUT webcam shows a BLACK VOID at 150 s in both runs (no sky, no terrain): renders nothing, not a win. Base stays default; find which lean part (srvunload/active2/chunk3) empties the world

Luanti ps3.405 memory variants + ClassiCube PERF (kick, STALLS)

2026-10-18 · batch 2026-10-18-luanti-memory · 8 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base stall recorder at 10 ms
waker kick at 10 ms
4516.224
cliunload stall recorder at 10 ms
waker kick at 10 ms
4821.65
lean stall recorder at 10 ms
waker kick at 10 ms
5419.91
nomerge stall recorder at 10 ms
waker kick at 10 ms
4617.114
tradeoff stall recorder at 10 ms
waker kick at 10 ms
4618.421
view40 stall recorder at 10 ms
waker kick at 10 ms
5929.25
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 46 cpu 254.0 seconds underruns 0 underruns ram_free 13.3 MiB vram 61.6 MiB longest_ms 1943.0 ms stall_disk_s 1.8 seconds stall_swap_s 1.2 seconds stall_reclaim_s 0.0 seconds stall_gpu_s 0.0 seconds stall_cpu_s 1.8 seconds stall_play_s 6.5 seconds longest_play_ms 1943.0 ms no build recorded
the game's resolution, warm-up + 120 s
cliunload fps whole run 48 cpu 272.0 seconds underruns 0 underruns ram_free 21.0 MiB vram 57.9 MiB longest_ms 258.9 ms stall_disk_s 0.2 seconds stall_swap_s 0 seconds stall_reclaim_s 0.3 seconds stall_gpu_s 0.0 seconds stall_cpu_s 0.2 seconds stall_play_s 0.8 seconds longest_play_ms 258.9 ms no build recorded
the game's resolution, warm-up + 120 s
lean fps whole run 54 cpu 316.6 seconds underruns 0 underruns ram_free 30.8 MiB vram 44.0 MiB longest_ms 164.8 ms stall_disk_s 0.1 seconds stall_swap_s 0.0 seconds stall_reclaim_s 0 seconds stall_gpu_s 0 seconds stall_cpu_s 0.0 seconds stall_play_s 0.2 seconds longest_play_ms 164.8 ms no build recorded
the game's resolution, warm-up + 120 s
nomerge fps whole run 47 cpu 259.3 seconds underruns 0 underruns ram_free 14.4 MiB vram 64.6 MiB longest_ms 360.7 ms stall_disk_s 0.3 seconds stall_swap_s 0.1 seconds stall_reclaim_s 0.7 seconds stall_gpu_s 0.0 seconds stall_cpu_s 0.9 seconds stall_play_s 2.5 seconds longest_play_ms 360.7 ms no build recorded
the game's resolution, warm-up + 120 s
tradeoff fps whole run 47 cpu 230.3 seconds underruns 0 underruns ram_free 12.6 MiB vram 63.5 MiB longest_ms 2983.0 ms stall_disk_s 2.8 seconds stall_swap_s 0.6 seconds stall_reclaim_s 1.1 seconds stall_gpu_s 0.0 seconds stall_cpu_s 1.0 seconds stall_play_s 6.7 seconds longest_play_ms 2983.0 ms no build recorded
the game's resolution, warm-up + 120 s
view40 fps whole run 58 cpu 241.0 seconds underruns 0 underruns ram_free 18.7 MiB vram 54.5 MiB longest_ms 362.4 ms stall_disk_s 0.4 seconds stall_swap_s 0.0 seconds stall_reclaim_s 0.1 seconds stall_gpu_s 0.0 seconds stall_cpu_s 0.1 seconds stall_play_s 0.9 seconds longest_play_ms 362.4 ms no build recorded
the game's resolution, warm-up + 120 s

Observations: same boot 2026-10-18 ~12:35-13:15 local, x1. Luanti stall_play_s / longest / avail MB: base 6.5/1.9 s/13.6, lean 0.2/0.17 s/31.5 BUT webcam shows missing nearby terrain at 150 s (renders less: not a free win), view40 0.9/0.36 s/19.1 (59 fps, closer fog), cliunload 0.8/0.26 s/21.5 (same picture: default candidate), tradeoff 6.7/3.0 s, nomerge 2.5/0.36 s. ClassiCube PERF base vs gloff: steady 48.4 vs 50.3; perf game 15.6 vs 9.5 %, mesa 42.8 vs 57.7 % INTERFERENCE (retro-scan 2026-10-18, docs/STALLS.md): somebody played Luanti in base (2 digs, 4 clicks at 142-148 s, its 1943 ms frame right after), lean (41 digs, 31 clicks; the webcam's 'missing terrain' is the digging and looking at the sky) and tradeoff (3 clicks): those cells are invalid, re-run base, lean, cliunload before deciding. view40, cliunload, nomerge and ClassiCube clean as far as the files show.

smoke re-runs (teeworlds ps3.422) + vm.watermark_boost_factor A/B on Luanti (kick)

2026-10-18 · batch 2026-10-18-smoke-reruns-watermark · 4 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base waker kick at 10 ms 47.021.612.0
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 47.0 cpu 247.0 seconds underruns 0.0 underruns ram_free 14.2 MiB vram 62.3 MiB longest_ms 321.5 ms stall_play_s 2.0 seconds longest_play_ms 321.5 ms no build recorded
the game's resolution, warm-up + 120 s

Observations: same boot 2026-10-18 ~11:35-12:10 local. Teeworlds: in game (warmup on dm1), 183 fps: BE FIONBIO fix works. Red Eclipse: no OOM with lean sound/textures, stops at the first-start profile menu. SuperTux: still on the title card (virtual key didn't arrive). Luanti watermark_boost_factor 15000/0/15000/0: stall_play_s 12.5/0.8/2.0/2.1 (first run outlier): no clear gain, not shipped. Webcam view moved (PC monitor left, PS3 right)

batch 8: STK lean, OpenTTD gl, ClassiCube/dsda batching, malloc presets, profiles (Mesa ps3.408, kick)

2026-10-18 · batch 2026-10-18-batch8 · 26 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base waker kick at 10 ms
perf recording
4615.431
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 47 cpu 246.5 seconds underruns 0 underruns ram_free 20.6 MiB vram 61.6 MiB longest_ms 2763.0 ms stall_play_s 10.4 seconds longest_play_ms 2763.0 ms Mesa ps3.408
the game's resolution, warm-up + 120 s

Observations: same boot 2026-10-18 ~09:30-11:50 local. SuperTuxKart: TRACK DRAWS (webcam), lean smooth 21.4 vs base 13, stalls 2.4 vs 13.5 s. OpenTTD gl: right picture, 21 fps (software 8-12). ClassiCube base (batching) 47.3 vs gloff 49.4 (-4%), low1 31 vs 27.6. dsda gl 55.9 vs gloff 54.2 (+3%), low1 40.8 vs 36.5. Malloc presets inconsistent between rounds (noise). OA gl2min 55 s stalls, longest 16 s, 66 MB swapped; Luanti 10 s stalls, 51 MB swapped INTERFERENCE (retro-scan 2026-10-18, docs/STALLS.md): luanti-base@wkkick10+perf (20261018T081125Z) had a right click in the window: distrust its cell.

Mesa ps3.407 NV30_TRANSLATE_LUT, yquake2 ps3.408 kiss4k, luanti ps3.405 trim16 (all with WAKER kick)

2026-10-18 · batch 2026-10-18-mesa-407-lut · 12 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base waker kick at 10 ms 47.020.315.5
trim16 LU_TRIM_MB=16
waker kick at 10 ms
47.520.611.0
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 47.5 cpu 250.7 seconds underruns 0.0 underruns ram_free 15.8 MiB vram 62.9 MiB longest_ms 425.4 ms stall_play_s 3.4 seconds longest_play_ms 425.4 ms Mesa ps3.407
the game's resolution, warm-up + 120 s
trim16 fps whole run 48.0 cpu 246.1 seconds underruns 0.0 underruns ram_free 15.9 MiB vram 61.0 MiB longest_ms 3648.0 ms stall_play_s 8.6 seconds longest_play_ms 3648.0 ms Mesa ps3.407
the game's resolution, warm-up + 120 s

Observations: same boot 2026-10-18 ~05:50-06:50 local, x2. Sauerbraten demo: steady 25.9 -> 39.6 (+53%), low1 18.3 -> 26.9 with NV30_TRANSLATE_LUT=1 (8-bit vertex attributes via a lookup table). Yamagi Q2: kiss4k RSS 125 -> 56 MB, swap used 80 -> 9 MB, stall_play_s 22.6 -> 0.05, longest 4.5 s -> 91 ms, steady 65.7 -> 68.7. Luanti trim16: no gain, more stalls (3.35 -> 8.6 s): rejected. Webcam: pictures right

Luanti ps3.364 batching, Neverball ps3.370 batching, Sauerbraten libspeq 0.381 skinning (spawn)

2026-10-17 · batch 2026-10-17-luanti-neverball-batching · 10 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base the recipe as it is 45.018.920.0
allbatchoff LU_GL=0 46.017.526.5
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 45.5 cpu 246.1 seconds underruns 0.0 underruns ram_free 15.1 MiB vram 62.5 MiB longest_ms 1685.1 ms no build recorded
the game's resolution, warm-up + 120 s
allbatchoff fps whole run 46.0 cpu 241.6 seconds underruns 0.0 underruns ram_free 16.8 MiB vram 61.5 MiB longest_ms 3415.0 ms no build recorded
the game's resolution, warm-up + 120 s

Observations: same boot 2026-10-18 01:40-02:20 local. Luanti base vs allbatchoff x2: steady 45.0/46.0, stall_s 6.25/9.1, longest 1.7/3.4 s, underruns 0, webcam right. Neverball base vs gloff: smooth 78.7/79.1, cpu 65/80 s, stalls similar (one base run ended before the window: 12 loops too few, now 20). Sauerbraten spawn+gun x1: steady spuskin 23.6 (21 stalls, 4.3 s), ppeskin 28.1 (0 stalls), offskin 23.0 (0 stalls): libspeq's PPE path is the best; the SPU path adds hitches INTERFERENCE (retro-scan 2026-10-18, docs/STALLS.md): allbatchoff run 20261017T224350Z had 3 digs (mouse button in the game) in the warm-up; the window had no logged action, but its luanti-allbatchoff cell includes that run.

Mesa ps3.262 OpenAL log variants (allog; perf recording)

2026-10-17 · batch 2026-10-17-mesa-262-allog · 4 runs in the batch (all games)

Not comparable: OpenAL logging runs with perf recording, slower than plain runs.

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
allog
not comparable
the recipe as it is ---
All numbers and setup of this batch
VariantNumbersSetup
allog fps whole run 58 cpu 115.7 seconds underruns 0 underruns ram_free 21.0 MiB vram 53.0 MiB Mesa ps3.262
the game's resolution, whole run

Observations: 11:30-11:38Z, the 'allog' variant (stock OpenAL settings, OpenAL log in the run directory) of OpenArena, Yamagi, Luanti and ClassiCube with perf attached for 20 s from the sound start (during.log), for SPU-AUDIO.md's M0. The profiled runs are slower (OpenArena 46.2 fps, Yamagi 32.1 against 63.9, ClassiCube 45.6, Luanti HUD 58), so the fps and CPU cells are not for comparison. Result: libopenal itself is 3.7-4.7% of the process samples (OpenArena 4.7, ClassiCube 3.7), under the 6% bar for an SPU mixer; the device was Stereo Float32 48000 Hz (OpenAL's ALSA path). No underruns in any of them except Yamagi (14). One run each.

Mesa ps3.262 + ps3rsx 0.249

2026-10-17 · batch 2026-10-17-mesa-262 · 12 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base the recipe as it is ---
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 53 cpu 117.2 seconds underruns 0 underruns ram_free 16.7 MiB vram 52.4 MiB Mesa ps3.262, ps3rsx 0.249
the game's resolution, whole run

Observations: 2026-10-17 10:42-11:04Z, suite round after Mesa 0019-0025 (fewer words per draw: no relocations, texture cache invalidate only after texture changes, no duplicate VTXFMT writes, batched VP constants; bcd99d7, 5fe2290), one run per game. Against ps3.246: OpenArena tc1 44.2 to 54.4 (+23%), Yamagi 51.4 to 63.9 (+24%), X-Moto 39 to 47 (+21%), Extreme Tux Racer 46 to 53 (+15%), dsda-doom software 33 to 38 and now finishes (+15%), ClassiCube 47.6 to 50.1 (+5%), Neverball 78.2 to 71.5 (noise), QuakeSpasm 70.5 to 66.3 (repeated in the next row), Luanti 53 to 53. Armagetron drops from 60 to 51 (HUD). Sauerbraten reads 28 to 8 (HUD): it is memory-stalled (MemAvailable 13 MB, killed at the cap), so that is not a driver number and the cause is uncertain. No validator rejects. Single runs.

Mesa ps3.246 + ps3rsx 0.249

2026-10-17 · batch 2026-10-17-mesa-246-ps3rsx-249 · 12 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base the recipe as it is ---
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 53 cpu 105.3 seconds underruns 0 underruns ram_free 27.1 MiB vram 53.6 MiB Mesa ps3.246, ps3rsx 0.249
the game's resolution, whole run

Observations: 2026-10-17 08:32-08:54Z, first suite round after the reboot, one run per game. fps: Armagetron 60 (HUD), ClassiCube 47.6, dsda-doom software 33 (HUD, demo unfinished), Extreme Tux Racer 46 (HUD), Luanti 53 (HUD), Neverball 78.2, OpenArena tc1 44.2 (longest frame 2.1 s), QuakeSpasm 70.5, Sauerbraten CPU skinning 28 (HUD), X-Moto 39 (HUD), Yamagi Quake II 51.4. Pictures right and sound right for these games except dsda-doom (1161 underruns, MIDI music), Sauerbraten (176) and OpenTTD (1429, choppy). OpenTTD base ran 55.5 s of CPU with no frame rate (plain X11 path). Single runs, so differences of a few fps are within the run-to-run spread.

ps3rsx 0.249 first boot (Mesa ps3.246; SDL3 ps3.254)

2026-10-17 · batch 2026-10-17-ps3rsx-249-first-boot · 9 runs in the batch (all games)

VariantConditions Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
base the recipe as it is ---
All numbers and setup of this batch
VariantNumbersSetup
base fps whole run 67 cpu 92.3 seconds underruns 0 underruns ram_free 31.4 MiB vram 48.9 MiB Mesa ps3.246, ps3rsx 0.249
the game's resolution, whole run

Observations: 2026-10-17 07:59-08:24Z, after the reboot into ps3rsx 0.249 (9e2a3b9, 8e99b76). Per 1c1b09a the GL tests pass and VT switches work with a GL client (those runs are not in build/bench). Neverball (our +ps3.257 with NEVERBALL_BENCH, about 23 s) runs without the wedge: 76.4 and 70.2 fps by its own count, longest frames 320 and 378 ms, 15 and 36 underruns. OpenTTD with libsdl3 ps3.254 (native BGRA upload) goes from ~2 to 8 fps (HUD; 9.5 across the two runs) and 12 fps with the 8bpp blitter (accel8); its own software drawing is the limit. Luanti and Sauerbraten run for the first time, both memory-bound: Luanti load 37 s, HUD median 67 (p10 23, stalls to 0 while chunks load), 31 MB MemAvailable at the lowest; Sauerbraten (CPU skinning) was OOM-killed in the first run (dmesg oom-killer, MemAvailable down to 10 MB) and reached a HUD median of 15 in the second (236 underruns). Smoke runs, single or paired.