Played sessions
Testing is done with Walnut's rating tool (walnut-rate, on the console): how ratings are made and submitted.
Builds:
Walnut 0.1,
cube2-data 1.3-1
The platform builds under it (3)
| Linux kernel | 6.12.111+ps3.747 Walnut's build |
|---|---|
| Mesa | 26.2.4-1+ps3.721 Walnut's build |
| ps3rsx | 0.735+k6.12.111+ps3.747 Walnut's build |
| Date | Launcher | Rules | Play | Ended | Picture | |
|---|---|---|---|---|---|---|
| 2026-10-24 | Cube2:Demo | 1.0 | 3 min | quit | 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.
| Version | Tested | Medal | Rules | Frame rate | Smoothness | Sound | Picture | Stability | Display | Load | Play |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Walnut 0.1 cube2-data 1.3-1 |
2026-10-24 | Scrap · 51 | 1.0 | - | - | 96 | 100 | 90 | - | 100 | 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: BananaBread with cube2-data 1.3's maps. base: the user's recorded demo, copied to ~/.cube2/demo/bench.dmo and played with `mode -1; map bench`.
The recipe's full description
BananaBread (Debian's cube2, so this recipe is still called sauerbraten; our build: textures compressed at upload on Mesa too) with cube2-data 1.3's maps (the BananaBread content). base: the user's recorded demo (assets/sauerbraten-bench.dmo, 2026-10-17: an FFA round on cave with two bots, 93 s of game time, recorded by the local server with `recorddemo 1` and a map reload, saved with getdemo), copied to ~/.cube2/demo/bench.dmo and played with `mode -1; map bench` (demo mode on the local server, as the data's `demo` command does it: the server's setupdemoplayback reads <demodir>/bench.dmo and sends the recorded packets, so the client loads cave from them and runs `mapstart`; at the end, "demo playback finished" and the client runs `demoend`). A CubeScript (-x) counts frames (a sleep re-armed every frame, wall time from getmillis 1): each playback ("loop") prints "ps3bench: loop <k>: <n> frames in <ms> ms: <fps> fps, longest <ms> ms" at its end (fps= and maxms= are loop 1's, the whole first playback). Steady state: the window opens 60 s after the first mapstart (the map loaded) and closes at the playback's end; demoend plays the demo again (a reload, left out of the window: it reopens at the next mapstart) until the window holds ~120 s (114 s: the rest of loop 1 and loop 2), then "ps3bench: steady <n> frames in <ms> ms: <fps> fps, longest <ms> ms" and quit. The script marks the window ("ps3bench: window on/off": WIN_ON_RE, WIN_OFF_RE) so the HUD metrics use the same pieces. The bots in a demo are played back, not simulated: every run is the same. variant spawn: the method before the demo: -l loads map "cave" (its only player start, so every run looks from the same spot) and the player stands still; the script counts frames for 30 s from 10 s after the first frame and prints "ps3bench: <n> frames in <ms> ms: <fps> fps, longest <ms> ms" (fps=, maxms=), then its own steady window, 60 s after the first frame for 120 s (STEADY_RE), and quits. The view is static: one view's rendering once loading is over. The gun, towers and *skin variants use it (the hud gun and the other map only exist there). getfps itself averages only the last 60 frames. Settings go into ~/.cube2/autoexec.cfg (run after config.cfg, so the player's saved fullscreen or vsync can't override them); both files are restored after the run. Our cube2 (ps3.N, gamedb/engines/cube2/technical.md) ships the memory defaults of gamedb/engines/cube2/packages/cube2/patches: CPU skinning (gpuskel 0: GPU skinning indexes a bone array in the vertex shader, which nv30 compiles to if/else trees, 11 fps against 28; no GPU skinning shaders are built then), sky boxes and cube maps from their 256x256 .dds (skydds 1), lightmaps' CPU copies freed after upload (lmfreedata 1), dynamic light and water fade shader variants only as far as maxdynlights, waterrefract and waterfade ask. "base" is that; every variant below changes one thing (or, lean, the bundle that is meant to ship). Memory per run: during.log has MemAvailable and SwapFree every 5 s, bench.txt their lowest.
42 variants of the recipe
base stands for the game | the recipe as it is, without a variant |
|---|---|
gpuskel | GPU skinning on (the old default): shaders for it are built, the hud gun and players use them |
cpuskel | the old default spelled out (base is CPU skinning now) |
pngsky | sky and env map from the PNGs (six 2048x2048, decoded twice at load) instead of the 256x256 .dds |
keeplm | lightmaps' CPU copies kept (24 MB in cave) |
dyn5 | dynamic light shader variants: all five that the stock engine builds (maxdynlights 5 also draws five), or fewer. Lights and muzzle flashes light the world less |
dyn1 | - |
dyn0 | - |
nofade | water: no fade under the surface (no fade variants of every world shader), or no reflection and refraction at all (two extra scene passes when water is in view) |
nowater | - |
sd2 | the world shaders without specular and parallax (shaderdetail 2: no spec map; 1: no parallax either, the menu's "low detail"): fewer texture reads per pixel, fewer variants |
sd1 | - |
nobumpmdl | no normal-mapped or env-mapped models: far fewer model shader programs |
tex1 | textures dropped by a mip level (texreduce 1: a quarter of the memory of the DDS and JPG ones) or capped in size (maxtexsize also caps the sky and the lightmap textures) |
tex2 | - |
maxtex512 | - |
tc512 | compress the uncompressed textures from 512 or 256 pixels up (default 1024): water, models, particles, the HUD. Look for ragged text and HUD edges |
tc256 | - |
snd22 | sound at 22 kHz: the decoded samples are half the size |
lean | the bundle meant to ship if the single steps hold: no water passes, low-detail shaders, models without bump, one dynamic light, compressed 512 textures, 22 kHz sound |
notc | no texture compression at all (as upstream on Mesa): VRAM and load time against base |
spawn | hud gun: -l starts mode 1 (coop edit), where the player spawns with the pistol, and cube2-data 1.3 (the BananaBread content) has no pistol or fist hud gun model (models/hudguns: chaing gl rifle rocket shotg), so nothing is drawn. This switches to the grenade launcher (1 grenade at spawn) 2 s after the first frame, which adds the one skeletal model that CPU or GPU skinning has to move the method before the demo (recipe header) |
gun | - |
gungpu | the same with GPU skinning, to compare against gun |
towers | the biggest map with one player start (66 lights, an 8192 world) |
spuskin | CPU skinning through libspeq (our cube2 0006, ps3-spu's skin.spu), on the hud gun of variant gun (hands 1497 + grenade launcher 1683 vertices with tangent frames: the only skinned model on cave): on the SPEs, with libspeq's vector code on the PPE, or the engine's own loop (as before 0006). SPEQ_DEBUG=1 puts libspeq's counters in the log every 10 s and at exit (batches on the SPEs, mean and max wait, timeouts, errors); gun itself is the default, auto |
ppeskin | - |
offskin | - |
demospu | the same three on the recorded demo (base): the two bots' player models are skinned too, more work than the gun alone (the user, 2026-10-18: the spawn runs showed no demo). With sauerbraten-nonfree-data (the licensed suite) the player models and guns have their real meshes. |
demoppe | - |
demooff | - |
demo | the recorded demo: the same as base (named for the runs made before base became the demo) |
nouni | Fewer GL calls per frame (our cube2 0007-0009, each behind a cvar that is 1 by default; on cave under llvmpipe as GL 2.1 without GL_EXT_gpu_shader4, like the PS3: 1657 GL calls and 199 draws a frame with all off, 1300 and 199 with all on, with the hud gun; the same pixels). Each variant turns one off, to see what it is worth: slot and global shader uniforms sent only when their value changed (gluniformcache) |
notmu | a batch's textures bound together, right before its draw, a glActiveTexture per unit that changes (glbatchtmu) |
nopart | particle vertices uploaded by renderers that have particles only, one glBufferData each (glpartvbo) |
allbatchoff | all of them off: the drawing of ps3.315 and before |
rgbspu | DXT1 of RGB sources (libspeq 2026-10-18, packages/walnut/tools/ps3-spu/doc/dxt-rgb.md): the JPG and other alpha-less textures reach libspeq as 3 bytes a pixel ("speq: s3tc dxt1 ... comps 3" lines), which it used to encode on the PPE (165 ms for a 1024x1024, a hitch mid-game); now the SPEs take them. rgbppe sends them back to the PPE encoder (the old behaviour), rgbspu is the default with the same logging, so the pair differs in the switch alone: stall_cpu_s, load time and the "comps 3 ... spu/ppe" lines. |
rgbppe | - |
oqlag | The water's occlusion query (docs/HOTPATHS.md, target 1): drawreflections waited for this frame's result, the GPU behind (10% of the CPU spun in nv30_query_result). oqlag: our cube2 0010's oqwaterlag 1, this frame's result only if it is in, else last frame's (the first frame water shows again has its last reflection); oqnowait: the stock oqwait 0, every query not in yet counts as visible (the reflection passes then run whenever the result is late). The Mesa side is an ENVS token: NV30_QUERY_WAIT=US sleeps on the fence after US microseconds of spinning (base, pixels the same) |
oqnowait | - |
shortnormals | World normals and tangents as GL_SHORT normalized (our cube2 0011, vanormalshort; docs/MEMORY.md): nv30 can't fetch the stock GL_BYTE ones, so u_vbuf converts them at every world draw and nouveau keeps a malloc copy of every world vertex buffer to read them from. shortnormals uploads them as shorts (the RSX fetches those: no conversion, no copies; cave's world buffers 4.40 -> 5.50 MB of VRAM); off by default (on llvmpipe ~170 pixels a frame differ by 1-2 levels). bytenormals is the stock layout spelled out. With NV30_SYSMEM_STATS=300 (an ENVS token, Mesa 0037) the sysmem_* columns show the copies go |
bytenormals | - |
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 |
|---|---|---|---|---|---|---|---|---|
| BananaBread base | 25 | 117 | 39.1 | 0.1 | 25.6 | 103 | 40 | right, 60-181 underruns a run |
batch ssdroot11 Mesa 0044: NV30_MINMAX_VMX=1 against unset on Sauerbraten base and OpenArena gl2min x3 (SSD root .472 Mesa ps3.545~dev)
2026-10-20 · batch 2026-10-20-ssdroot11-minmax-vmx · 12 runs in the batch (all games)
· recorded as sauerbraten
| Variant | Conditions | Steady fps in the window |
1% low fps | Stalls frames over 100 ms |
|---|---|---|---|---|
base |
stall recorder at 10 ms | 39.6 | 26.9 | 0 |
base |
stall recorder at 10 ms switch minmax_vmx1 |
39.4 | 25.7 | 1 |
All numbers and setup of this batch
| Variant | Numbers | Setup |
|---|---|---|
base |
fps whole run 36.2 cpu 230.4 seconds underruns 141 underruns ram_free 23.0 MiB vram 117.0 MiB longest_ms 78.2 ms stall_disk_s 0.0 seconds stall_swap_s 0 seconds stall_reclaim_s 0 seconds stall_gpu_s 0 seconds stall_cpu_s 0 seconds stall_play_s 0.0 seconds longest_play_ms 78.2 ms | Kernel ps3.472, Mesa ps3.545~dev the game's resolution, warm-up + 120 s |
base |
fps whole run 36.1 cpu 232.4 seconds underruns 154 underruns ram_free 26.5 MiB vram 117.0 MiB longest_ms 139.1 ms stall_disk_s 0 seconds stall_swap_s 0 seconds stall_reclaim_s 0 seconds stall_gpu_s 0 seconds stall_cpu_s 0.1 seconds stall_play_s 0.2 seconds longest_play_ms 139.1 ms | Kernel ps3.472, Mesa ps3.545~dev the game's resolution, warm-up + 120 s |
Observations: same boot (2026-10-20 05:38-06:21Z), 12 runs rotated, none interfered. Sauerbraten steady 39.64 unset against 39.37 with 0044 (x0.993), 1% low 26.9 against 25.7, load 7.0 against 7.2 s; OpenArena gl2min steady 62.7 against 61.7 (x0.984), 1% low 7.6 against 7.5. Neutral off SuperTuxKart: 0044 pays only where the min/max loops run (SuperTuxKart)
batch ssdroot7 DUMPON=1 repro of the OpenAL wedge: SuperTuxKart x4 OpenArena x3 ClassiCube x3 Sauerbraten x3 (SSD root .472 Mesa ps3.545~dev)
2026-10-19 · batch 2026-10-19-ssdroot7-openal-wedge · 8 runs in the batch (all games)
· recorded as sauerbraten
| Variant | Conditions | Steady fps in the window |
1% low fps | Stalls frames over 100 ms |
|---|---|---|---|---|
base |
stall recorder at 10 ms | 39.4 | 26.3 | 1 |
All numbers and setup of this batch
| Variant | Numbers | Setup |
|---|---|---|
base |
fps whole run 36.0 cpu 231.6 seconds underruns 152 underruns ram_free 24.3 MiB vram 117.0 MiB longest_ms 128.9 ms stall_disk_s 0 seconds stall_swap_s 0 seconds stall_reclaim_s 0 seconds stall_gpu_s 0 seconds stall_cpu_s 0.1 seconds stall_play_s 0.1 seconds longest_play_ms 128.9 ms | Kernel ps3.472, Mesa ps3.545~dev the game's resolution, warm-up + 120 s |
Observations: investigation runs, not for fps: a dump freezes the game for seconds, and DUMPON itself costs (OpenArena's window was 71 s and 57 fps against 94 s and 62 fps without it), so the cells come from the 8 of 13 runs without a dump and are not comparable with other rows. Webcam picture right in all 13 (SuperTuxKart track, OpenArena spectator view, ClassiCube terrain, Sauerbraten cave). Which runs wedged OpenAL (oal_wedge, dump trigger; 2026-10-19 UTC): SuperTuxKart 20:53Z dump at 48 s (76 log lines of Wait timeout), 21:00Z none, 21:05Z dump at 33 s (2 mmap commit error), 21:11Z dump at 286 s (25 lines); the three dumped SuperTuxKart runs have an empty bench.txt, their counts are from game.log and the runs are not in the cells. OpenArena 21:25Z dump at 21.6 s (75, mmap commit error), 21:18Z and 21:21Z none. ClassiCube 21:36Z dump at 103.6 s (101, Wait timeout), 21:29Z and 21:33Z none. Sauerbraten 3 of 3 clean (underruns 96-171). So the wedge hit 3 of 4 SuperTuxKart, 1 of 3 OpenArena, 1 of 3 ClassiCube and 0 of 3 Sauerbraten, as early as 21 s into a run. The finding from the dumps (the sound card's DMA stops: snd_ps3's interrupt chain) is in commit cf64bd4
batch ssdroot7 Mesa 0042: NV30_QUERY_KICK=2 and =0 against unset on Sauerbraten base x3 (SSD root .472 Mesa ps3.545~dev)
2026-10-19 · batch 2026-10-19-ssdroot7-query-kick · 9 runs in the batch (all games)
· recorded as sauerbraten
| Variant | Conditions | Steady fps in the window |
1% low fps | Stalls frames over 100 ms |
|---|---|---|---|---|
base |
stall recorder at 10 ms | 39.4 | 26.6 | 1 |
base |
stall recorder at 10 ms switch query_kick0 |
39.6 | 27.1 | 1 |
base |
stall recorder at 10 ms switch query_kick2 |
39.8 | 27.1 | 1 |
All numbers and setup of this batch
| Variant | Numbers | Setup |
|---|---|---|
base |
fps whole run 36.2 cpu 231.4 seconds underruns 141 underruns ram_free 23.3 MiB vram 117.0 MiB longest_ms 159.5 ms stall_disk_s 0.0 seconds stall_swap_s 0 seconds stall_reclaim_s 0 seconds stall_gpu_s 0 seconds stall_cpu_s 0.1 seconds stall_play_s 0.2 seconds longest_play_ms 159.5 ms | Kernel ps3.472, Mesa ps3.545~dev the game's resolution, warm-up + 120 s |
base |
fps whole run 36.3 cpu 232.4 seconds underruns 132 underruns ram_free 24.4 MiB vram 117.0 MiB longest_ms 130.3 ms stall_disk_s 0 seconds stall_swap_s 0 seconds stall_reclaim_s 0 seconds stall_gpu_s 0 seconds stall_cpu_s 0.1 seconds stall_play_s 0.1 seconds longest_play_ms 130.3 ms | Kernel ps3.472, Mesa ps3.545~dev the game's resolution, warm-up + 120 s |
base |
fps whole run 36.6 cpu 231.3 seconds underruns 134 underruns ram_free 26.5 MiB vram 117.0 MiB longest_ms 136.9 ms stall_disk_s 0 seconds stall_swap_s 0 seconds stall_reclaim_s 0 seconds stall_gpu_s 0.0 seconds stall_cpu_s 0.1 seconds stall_play_s 0.2 seconds longest_play_ms 136.9 ms | Kernel ps3.472, Mesa ps3.545~dev the game's resolution, warm-up + 120 s |
Observations: same boot (2026-10-19 19:46-20:17Z), 9 runs rotated: unset (the rec10 column), query_kick2 and query_kick0; webcam picture right in all 9 (the same cave view, 60 s and 150 s). n=3 per arm, none interfered, oal_wedge 0 in all 9. Steady fps: unset 39.4 (39.54, 39.30, 39.36), query_kick2 39.8 (39.74, 40.64, 39.85), query_kick0 39.6 (39.64, 39.54, 40.54): +1.2% for 2, inside a 1 fps spread. 1% low 26.6 unset against 27.1 with 2 and 27.1 with 0; gameplay stalls 0-1 frames unset (0.2 s at most), 1-3 with 2 (0.1-0.4 s), 1 with 0. CPU 231 s unset, 231 s with 2, 232 s with 0: the expected -5% is not there. Verdict: neutral, nothing to turn on. The 0043 wedge run of 19:24Z (graph exception 0x106, docs/HOTPATHS.md, commit 5c3a8ad) is not in this row, and the batch's 19:41Z and 19:43Z Endless Sky smokes were killed by the OOM (VRAM) with oal_wedge 2 and 1
batch ssdroot6 libpng: libpng16 1.6.59 +ps3.560 against Debian's stock on SuperTuxKart lean x3 and Sauerbraten base x3 and OpenArena gl2min x2 (SSD root .472 Mesa ps3.545~dev zlib-ng on both arms)
2026-10-19 · batch 2026-10-19-ssdroot6-libpng · 15 runs in the batch (all games)
· recorded as sauerbraten
| Variant | Conditions | Steady fps in the window |
1% low fps | Stalls frames over 100 ms |
|---|---|---|---|---|
base |
stall recorder at 10 ms switch zng |
39.4 | 26.6 | 0 |
base |
stall recorder at 10 ms switch zng switch ldstock-png |
39.5 | 27.1 | 0 |
All numbers and setup of this batch
| Variant | Numbers | Setup |
|---|---|---|
base |
fps whole run 36.4 cpu 231.6 seconds underruns 123 underruns ram_free 25.1 MiB vram 117.0 MiB longest_ms 86.7 ms stall_disk_s 0.0 seconds stall_swap_s 0 seconds stall_reclaim_s 0 seconds stall_gpu_s 0 seconds stall_cpu_s 0 seconds stall_play_s 0.0 seconds longest_play_ms 86.7 ms | Kernel ps3.472, Mesa ps3.545~dev the game's resolution, warm-up + 120 s |
base |
fps whole run 36.6 cpu 231.8 seconds underruns 113 underruns ram_free 21.8 MiB vram 117.0 MiB longest_ms 95.3 ms stall_disk_s 0.0 seconds stall_swap_s 0 seconds stall_reclaim_s 0 seconds stall_gpu_s 0 seconds stall_cpu_s 0 seconds stall_play_s 0.0 seconds longest_play_ms 95.3 ms | Kernel ps3.472, Mesa ps3.545~dev the game's resolution, warm-up + 120 s |
Observations: same boot (2026-10-19 16:51-18:10Z), the stock arm is the column with the ldstock-png token, webcam picture right in all 22 runs (60 s and 150 s photos; OpenArena's 150 s photo is the map reload). SuperTuxKart lean, 3 rounds rotated, PERF_LOAD=1: round 1 (16:51Z stock, 16:57Z ours) is interfered (a login at 9 s, deliberate mouse moves) and out of the cells, so n=2 per arm, and its profile agrees with the rest. The png group of the load profile: stock 4.00 and 4.05 s (4.17 s in the interfered run), ours 1.61 and 1.61 s (1.67 s): -2.4 s, -60%, inside the predicted 2-3.3 s; the zlib group is 3.4 s in both. Load 30.3 s (30.42, 30.25) against 27.6 s (26.93, 28.20): -2.8 s, -9%; the main thread's CPU over the load 24.0 against 21.1-21.7 s. Gameplay unchanged: steady 20 against 19.5 fps (HUD), 1% low 11.9 against 11.5, 10 against 10 frames over 100 ms (1.4 against 1.25 s). The stock run of 17:16Z ended with rc=134 (SIGABRT) after the full race (21602 ticks), cause not looked at. Sauerbraten base, no load profile: load 7.19 s stock against 7.25 s ours, steady 39.5 fps both, 1% low 27.1 against 26.6, 0-1 stalls both, so libpng is too small a part of its load for the timer to see. OpenArena gl2min x2 as the control: load 6.80 against 6.62 s, steady 63.1 against 61.1 fps (59.6 to 63.5, noise), gameplay stalls 0 both; CPU 231-241 s with the stock libs against 211 s with ours, not explained (OpenArena loads few PNGs; the plain runs of the next row also have 211-213 s). OpenAL wedge lines (Wait timeout, mmap commit error) in 8 of the 10 SuperTuxKart runs of this and the previous batch, both arms, not counted in bench.txt yet. logscan: nothing new. Proven: the png group and SuperTuxKart's load; nothing measurable for Sauerbraten and OpenArena
batch ssdroot5 load-time libraries: libvorbis +ps3.549 and zlib-ng against stock on SuperTuxKart lean and Sauerbraten base x3, JSIMD=none x2 (SSD root .472 Mesa ps3.544)
2026-10-19 · batch 2026-10-19-ssdroot5-load-libraries · 22 runs in the batch (all games)
· recorded as sauerbraten
| Variant | Conditions | Steady fps in the window |
1% low fps | Stalls frames over 100 ms |
|---|---|---|---|---|
base |
stall recorder at 10 ms start-up profile |
39.1 | 25.3 | 2 |
base |
stall recorder at 10 ms start-up profile switch ldstock-vorbis |
39.4 | 25.9 | 2 |
base |
stall recorder at 10 ms start-up profile switch zng |
39.1 | 25.4 | 0 |
All numbers and setup of this batch
| Variant | Numbers | Setup |
|---|---|---|
base |
fps whole run 35.2 cpu 234.0 seconds underruns 157 underruns ram_free 21.4 MiB vram 117.0 MiB longest_ms 221.0 ms stall_disk_s 0.0 seconds stall_swap_s 0 seconds stall_reclaim_s 0.1 seconds stall_gpu_s 0 seconds stall_cpu_s 0.2 seconds stall_play_s 0.3 seconds longest_play_ms 221.0 ms | Kernel ps3.472, Mesa ps3.544 the game's resolution, warm-up + 120 s |
base |
fps whole run 34.9 cpu 223.2 seconds underruns 120 underruns ram_free 22.1 MiB vram 117.0 MiB longest_ms 146.0 ms stall_disk_s 0 seconds stall_swap_s 0 seconds stall_reclaim_s 0 seconds stall_gpu_s 0 seconds stall_cpu_s 0.1 seconds stall_play_s 0.2 seconds longest_play_ms 146.0 ms | Kernel ps3.472, Mesa ps3.544 the game's resolution, warm-up + 120 s |
base |
fps whole run 35.4 cpu 233.7 seconds underruns 165 underruns ram_free 23.1 MiB vram 117.0 MiB longest_ms 82.8 ms stall_disk_s 0.0 seconds stall_swap_s 0 seconds stall_reclaim_s 0 seconds stall_gpu_s 0 seconds stall_cpu_s 0 seconds stall_play_s 0.0 seconds longest_play_ms 82.8 ms | Kernel ps3.472, Mesa ps3.544 the game's resolution, warm-up + 120 s |
Observations: same boot (2026-10-19 14:29-16:35Z), PERF_LOAD=1, 22 runs. SuperTuxKart load 31.5 s with the new libvorbis against 32.2 s stock (-0.7 s), 30.6 s with zlib-ng (-0.9 s), 32.6 s with JSIMD=none (+1 s: libjpeg-turbo's AltiVec path is in use). Sauerbraten loads unchanged within the spread (8.4 / 7.5 / 8.1 s). Gameplay fps unchanged
batch ssdroot2 P2: ps3rsx shadow_fast (PS3RSX_SHADOW_FAST=1 against off, STALLS=1)
2026-10-19 · batch 2026-10-19-ssdroot2-shadow-fast · 12 runs in the batch (all games)
· recorded as sauerbraten
| Variant | Conditions | Steady fps in the window |
1% low fps | Stalls frames over 100 ms |
|---|---|---|---|---|
base |
stall recorder at 10 ms | 39.2 | 25.6 | 0.5 |
base |
stall recorder at 10 ms switch rsx_shadow_fast1 |
39.7 | 26.1 | 1.0 |
All numbers and setup of this batch
| Variant | Numbers | Setup |
|---|---|---|
base |
fps whole run 36.1 cpu 233.7 seconds underruns 160.0 underruns ram_free 27.5 MiB vram 117.0 MiB longest_ms 95.6 ms stall_disk_s 0.1 seconds stall_swap_s 0.0 seconds stall_reclaim_s 0.0 seconds stall_gpu_s 0.0 seconds stall_cpu_s 0.1 seconds stall_play_s 0.1 seconds longest_play_ms 95.6 ms | no build recorded the game's resolution, warm-up + 120 s |
base |
fps whole run 36.3 cpu 229.4 seconds underruns 115.0 underruns ram_free 20.8 MiB vram 120.3 MiB longest_ms 118.3 ms stall_disk_s 0.1 seconds stall_swap_s 0.0 seconds stall_reclaim_s 0.0 seconds stall_gpu_s 0.0 seconds stall_cpu_s 0.1 seconds stall_play_s 0.1 seconds longest_play_ms 118.3 ms | no build recorded the game's resolution, warm-up + 120 s |
Observations: same boot (2026-10-19 03:28-04:20Z), x2 interleaved per game, kernel .472 ps3rsx 0.443, parameter set per run and put back. ClassiCube steady 46.11 both arms (1% low 30.1 off, 29.7 on, client CPU 80.3 against 86.3 s: within the 79.8-86.6 s the same config showed across the boot), Sauerbraten 39.15 off against 39.7 on (spread of the unprofiled baseline 39.06-40.3; stalls 0.05 against 0.15 s, VRAM equal), X-Moto 158.4 against 159.0 (1% low 98.1 against 97.5). No gain resolved in fps, stalls or CPU at n=2 on three games; the switch stays off. In the ClassiCube and Sauerbraten profiles ps3rsx_shadow_burst and validate are 2-6% of the CPU, the most the switch could touch.
batch ssdroot2 P2: Mesa 0038 NV30_FORCE_DXT=opaque against off (MEM=1 STALLS=1 NV30_FORCE_DXT_STATS=50)
2026-10-19 · batch 2026-10-19-ssdroot2-force-dxt · 12 runs in the batch (all games)
· recorded as sauerbraten
| Variant | Conditions | Steady fps in the window |
1% low fps | Stalls frames over 100 ms |
|---|---|---|---|---|
base |
stall recorder at 10 ms switch force_dxt_stats50 |
40.0 | 25.9 | 4.0 |
base |
stall recorder at 10 ms switch force_dxtopaque_force_dxt_stats50 |
39.0 | 23.9 | 4.0 |
All numbers and setup of this batch
| Variant | Numbers | Setup |
|---|---|---|
base |
fps whole run 36.5 cpu 218.3 seconds underruns 65.5 underruns ram_free 21.4 MiB vram 117.0 MiB longest_ms 184.5 ms stall_disk_s 0.0 seconds stall_swap_s 0.0 seconds stall_reclaim_s 0.2 seconds stall_gpu_s 0.0 seconds stall_cpu_s 0.2 seconds stall_play_s 0.5 seconds longest_play_ms 184.5 ms | no build recorded the game's resolution, warm-up + 120 s |
base |
fps whole run 36.0 cpu 234.1 seconds underruns 173.0 underruns ram_free 26.5 MiB vram 73.8 MiB longest_ms 176.5 ms stall_disk_s 0.1 seconds stall_swap_s 0.0 seconds stall_reclaim_s 0.1 seconds stall_gpu_s 0.0 seconds stall_cpu_s 0.4 seconds stall_play_s 0.6 seconds longest_play_ms 176.5 ms | no build recorded the game's resolution, warm-up + 120 s |
Observations: same boot (2026-10-19 02:35-03:25Z), x2 interleaved per game, both arms with NV30_FORCE_DXT_STATS=50. Sauerbraten: 73 textures compressed (88 MB raw to 11 MB stored, all DXT1; 4 turned back, 17 skipped for alpha), peak VRAM 119.8 MB (the cap) to 73-78 MB, ps3rsx buffers at the middle snapshot 351 to 215 MB, RSS -3.5 MB; steady 39.9 off against 39.0 opaque (the unprofiled baseline runs span 39.1-40.3, so no fps change resolved), 1% low 26.0 against 23.9 (n=2, spread 22.9-26.2), stalls 0.5 against 0.55 s; the picture is slightly softer and darker on the webcam (grey difference 10 against 1-2 between repeats): lossy as expected. SuperTuxKart lean: 0 textures forced (skip_alpha 182, skip_format 173, skip_small 22, skip_npot 6: the game's own compression 0004 already covers its opaque ones), VRAM 98.5 against 97.3 MB, HUD 20 against 21 fps, stalls 2.8 against 1.7 s: noise. OpenArena gl2min: 0 forced (skip_format 2238: every upload is in a format the switch does not take), VRAM 120.1 against 119.7, steady 56.3 against 55.8: no effect. OpenArena runs 56 in both arms against 60-63 in the unprofiled baseline earlier in the boot (STATS=50 or drift, not separated). SuperTuxKart fps cells are the HUD.
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)
· recorded as sauerbraten
Not comparable: gameplay profiles (PERF=1 MEM=1), slower than plain runs.
| Variant | Conditions | Steady fps in the window |
1% low fps | Stalls frames over 100 ms |
|---|---|---|---|---|
basenot comparable |
perf recording | 38.3 | 23.5 | 3 |
All numbers and setup of this batch
| Variant | Numbers | Setup |
|---|---|---|
base |
fps whole run 36.1 cpu 236.0 seconds underruns 171 underruns ram_free 25.1 MiB vram 117.0 MiB longest_ms 164.9 ms stall_play_s 0.4 seconds longest_play_ms 164.9 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)
· recorded as sauerbraten
Not comparable: start-up profiles (PERF_LOAD=1 STALLS=1), slower than plain runs.
| Variant | Conditions | Steady fps in the window |
1% low fps | Stalls frames over 100 ms |
|---|---|---|---|---|
basenot comparable |
stall recorder at 10 ms start-up profile |
38.8 | 25.2 | 0 |
All numbers and setup of this batch
| Variant | Numbers | Setup |
|---|---|---|
base |
fps whole run 35.3 cpu 235.5 seconds underruns 160 underruns ram_free 23.0 MiB vram 117.0 MiB longest_ms 84.0 ms stall_disk_s 0 seconds stall_swap_s 0 seconds stall_reclaim_s 0 seconds stall_gpu_s 0 seconds stall_cpu_s 0 seconds stall_play_s 0.0 seconds longest_play_ms 84.0 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)
· recorded as sauerbraten
| Variant | Conditions | Steady fps in the window |
1% low fps | Stalls frames over 100 ms |
|---|---|---|---|---|
base |
stall recorder at 10 ms | 39.1 | 25.5 | 1.5 |
All numbers and setup of this batch
| Variant | Numbers | Setup |
|---|---|---|
base |
fps whole run 36.0 cpu 234.0 seconds underruns 169.0 underruns ram_free 24.9 MiB vram 117.0 MiB longest_ms 123.9 ms stall_disk_s 0.0 seconds stall_swap_s 0.0 seconds stall_reclaim_s 0.0 seconds stall_gpu_s 0.0 seconds stall_cpu_s 0.2 seconds stall_play_s 0.2 seconds longest_play_ms 123.9 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 ssd1: SSD game data and SSD swap spill against the USB disk (Sauerbraten base x3, OpenArena gl2min)
2026-10-18 · batch 2026-10-18-ssd1 · 15 runs in the batch (all games)
· recorded as sauerbraten
| Variant | Conditions | Steady fps in the window |
1% low fps | Stalls frames over 100 ms |
|---|---|---|---|---|
base |
stall recorder at 10 ms | 38.5 | 24.1 | 4 |
base |
stall recorder at 10 ms switch gdssd |
39.3 | 26.4 | 3 |
base |
stall recorder at 10 ms switch gdssd switch swssd |
38.5 | 24.1 | 5 |
All numbers and setup of this batch
| Variant | Numbers | Setup |
|---|---|---|
base |
fps whole run 32.7 cpu 234.8 seconds underruns 184 underruns ram_free 19.7 MiB vram 117.0 MiB longest_ms 459.1 ms stall_disk_s 0.2 seconds stall_swap_s 0.0 seconds stall_reclaim_s 0 seconds stall_gpu_s 0 seconds stall_cpu_s 0.2 seconds stall_play_s 1.6 seconds longest_play_ms 459.1 ms | no build recorded the game's resolution, warm-up + 120 s |
base |
fps whole run 34.2 cpu 230.5 seconds underruns 127 underruns ram_free 21.3 MiB vram 117.0 MiB longest_ms 406.9 ms stall_disk_s 0.0 seconds stall_swap_s 0.0 seconds stall_reclaim_s 0 seconds stall_gpu_s 0 seconds stall_cpu_s 0.1 seconds stall_play_s 1.0 seconds longest_play_ms 406.9 ms | no build recorded the game's resolution, warm-up + 120 s |
base |
fps whole run 33.7 cpu 233.6 seconds underruns 153 underruns ram_free 21.3 MiB vram 117.0 MiB longest_ms 454.3 ms stall_disk_s 0.2 seconds stall_swap_s 0.0 seconds stall_reclaim_s 0 seconds stall_gpu_s 0 seconds stall_cpu_s 0.2 seconds stall_play_s 1.6 seconds longest_play_ms 454.3 ms | no build recorded the game's resolution, warm-up + 120 s |
Observations: same boot 2026-10-18 ~22:10-23:25Z, kernel 6.12.111+ps3.472, USB root, STALLS=1 ROTATE=1, 3 arms (USB / GAMEDATA=ssd / GAMEDATA=ssd+SWAP=ssd). Sauerbraten 3 rounds complete (9 runs): the SSD lifts the game data only, the binary/libs/shader cache stay on USB, so the load's sda disk wait stays 4.8-5.5 s (usb 5.5, ssd 4.9, ssd+swap 5.4); load 16.9/15.9/16.4 s (the gap is round 1's cold start: round 3 15.4/15.4/15.3); stalls 1.6/1.0/1.6 s, 1% low 24.1/26.4/24.1, steady 38.5/39.3/38.5: no clear effect. OpenArena gl2min: load 10.7 (n=2) -> 7.7 / 7.6 s (-28%), map-reload stalls in the window 52 -> 41-44 s, gameplay-only stalls ~0 in every arm, steady 55.9-56.1; n=2/1/3, indicative only. 1 OpenArena run (230542Z, ssd) excluded: key press at 195 s (interfered=1, 94 s window). A last OpenArena run (232609Z, killed by the operator, arm reset under it) was not pulled and is invalid. Camera: picture shows in all 16 runs.
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)
· recorded as sauerbraten
| Variant | Conditions | Steady fps in the window |
1% low fps | Stalls frames over 100 ms |
|---|---|---|---|---|
base |
stall recorder at 10 ms start-up profile |
37.8 | 23.9 | 5 |
base |
stall recorder at 10 ms start-up profile switch sccold |
38.0 | 24.4 | 5 |
base |
stall recorder at 10 ms start-up profile switch scprime |
37.6 | 24.0 | 3 |
base |
stall recorder at 10 ms start-up profile switch scwarm |
38.7 | 24.7 | 5 |
base |
stall recorder at 10 ms switch sysmem_stats300 |
38.8 | 25.0 | 4 |
shortnormals |
stall recorder at 10 ms switch sysmem_stats300 |
45.1 | 30.4 | 4.0 |
All numbers and setup of this batch
| Variant | Numbers | Setup |
|---|---|---|
base |
fps whole run 30.6 cpu 238.9 seconds underruns 202 underruns ram_free 16.9 MiB vram 117.0 MiB longest_ms 547.3 ms stall_disk_s 0.3 seconds stall_swap_s 0.1 seconds stall_reclaim_s 0 seconds stall_gpu_s 0.0 seconds stall_cpu_s 0.2 seconds stall_play_s 1.5 seconds longest_play_ms 547.3 ms | no build recorded the game's resolution, warm-up + 120 s |
base |
fps whole run 31.4 cpu 238.6 seconds underruns 183 underruns ram_free 16.0 MiB vram 117.0 MiB longest_ms 460.0 ms stall_disk_s 0.3 seconds stall_swap_s 0.1 seconds stall_reclaim_s 0 seconds stall_gpu_s 0 seconds stall_cpu_s 0.3 seconds stall_play_s 1.3 seconds longest_play_ms 460.0 ms | no build recorded the game's resolution, warm-up + 120 s |
base |
fps whole run 30.6 cpu 238.8 seconds underruns 184 underruns ram_free 21.9 MiB vram 117.0 MiB longest_ms 525.7 ms stall_disk_s 0.5 seconds stall_swap_s 0.1 seconds stall_reclaim_s 0 seconds stall_gpu_s 0 seconds stall_cpu_s 0.1 seconds stall_play_s 1.2 seconds longest_play_ms 525.7 ms | no build recorded the game's resolution, warm-up + 120 s |
base |
fps whole run 32.5 cpu 236.2 seconds underruns 183 underruns ram_free 24.2 MiB vram 117.0 MiB longest_ms 474.2 ms stall_disk_s 0.1 seconds stall_swap_s 0.0 seconds stall_reclaim_s 0.1 seconds stall_gpu_s 0 seconds stall_cpu_s 0.2 seconds stall_play_s 1.5 seconds longest_play_ms 474.2 ms | no build recorded the game's resolution, warm-up + 120 s |
base |
fps whole run 33.0 cpu 234.7 seconds underruns 167 underruns ram_free 19.1 MiB vram 117.0 MiB longest_ms 473.4 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.2 seconds stall_play_s 1.2 seconds longest_play_ms 473.4 ms | no build recorded the game's resolution, warm-up + 120 s |
shortnormals |
fps whole run 38.4 cpu 236.4 seconds underruns 183.0 underruns ram_free 19.6 MiB vram 121.0 MiB longest_ms 511.5 ms stall_disk_s 0.3 seconds stall_swap_s 0.0 seconds stall_reclaim_s 0.0 seconds stall_gpu_s 0.0 seconds stall_cpu_s 0.2 seconds stall_play_s 1.6 seconds longest_play_ms 511.5 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)
· recorded as sauerbraten
| Variant | Conditions | Steady fps in the window |
1% low fps | Stalls frames over 100 ms |
|---|---|---|---|---|
base |
stall recorder at 10 ms | 38.8 | 24.1 | 4 |
base |
stall recorder at 10 ms switch gpffetch |
38.8 | 25.3 | 2 |
All numbers and setup of this batch
| Variant | Numbers | Setup |
|---|---|---|
base |
fps whole run 32.4 cpu 235.0 seconds underruns 159 underruns ram_free 22.0 MiB vram 117.0 MiB longest_ms 514.0 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.2 seconds stall_play_s 1.4 seconds longest_play_ms 514.0 ms | no build recorded the game's resolution, warm-up + 120 s |
base |
fps whole run 32.8 cpu 235.4 seconds underruns 185 underruns ram_free 21.6 MiB vram 117.0 MiB longest_ms 517.6 ms stall_disk_s 0.2 seconds stall_swap_s 0.0 seconds stall_reclaim_s 0 seconds stall_gpu_s 0 seconds stall_cpu_s 0.1 seconds stall_play_s 1.0 seconds longest_play_ms 517.6 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)
Sauerbraten NV30_QUERY_WAIT=200 repeat (Mesa ps3.416~dev, kick)
2026-10-18 · batch 2026-10-18-query-wait-repeat · 4 runs in the batch (all games)
· recorded as sauerbraten
| Variant | Conditions | Steady fps in the window |
1% low fps | Stalls frames over 100 ms |
|---|---|---|---|---|
base |
waker kick at 10 ms | 32.0 | 13.9 | 13.0 |
base |
waker kick at 10 ms switch query_wait200 |
28.2 | 10.2 | 12.0 |
All numbers and setup of this batch
| Variant | Numbers | Setup |
|---|---|---|
base |
fps whole run 30.9 cpu 191.5 seconds underruns 130.0 underruns ram_free 19.4 MiB vram 119.1 MiB longest_ms 456.5 ms stall_play_s 2.8 seconds longest_play_ms 456.5 ms | Mesa ps3.416~dev the game's resolution, warm-up + 120 s |
base |
fps whole run 30.7 cpu 146.6 seconds underruns 121.5 underruns ram_free 18.9 MiB vram 119.1 MiB longest_ms 1777.2 ms stall_play_s 4.6 seconds longest_play_ms 1777.2 ms | Mesa ps3.416~dev the game's resolution, warm-up + 120 s |
Observations: same boot 2026-10-18 ~14:20-14:40 local, x2 interleaved: base 26.0/37.9 steady vs QUERY_WAIT 23.0/33.4 (smooth 30.0/40.3 vs 32.1/35.9): no gain, the earlier 45.6 was a lucky single run; CPU lower with it (96-197 vs 151-232 s). Run-to-run swing is large in the first-person demo: more rounds needed for subtle A/Bs. Switch stays off
Mesa ps3.416~dev hot spots (staging pool, query wait), cube2 355 oqlag, xmoto 362 stream, ClassiCube chunks1 (kick)
2026-10-18 · batch 2026-10-18-mesa-416-hot-spots · 9 runs in the batch (all games)
· recorded as sauerbraten
| Variant | Conditions | Steady fps in the window |
1% low fps | Stalls frames over 100 ms |
|---|---|---|---|---|
base |
waker kick at 10 ms | 25 | 4.9 | 28 |
base |
waker kick at 10 ms switch query_wait200 |
45.6 | 16.9 | 18 |
oqlag |
waker kick at 10 ms | 39.4 | 14.7 | 20 |
All numbers and setup of this batch
| Variant | Numbers | Setup |
|---|---|---|
base |
fps whole run 30.1 cpu 153.3 seconds underruns 151 underruns ram_free 15.0 MiB vram 119.7 MiB longest_ms 900.4 ms stall_play_s 8.6 seconds longest_play_ms 900.4 ms | Mesa ps3.416~dev the game's resolution, warm-up + 120 s |
base |
fps whole run 27.7 cpu 202.3 seconds underruns 156 underruns ram_free 18.5 MiB vram 119.7 MiB longest_ms 998.3 ms stall_play_s 5.7 seconds longest_play_ms 998.3 ms | Mesa ps3.416~dev the game's resolution, warm-up + 120 s |
oqlag |
fps whole run 35.5 cpu 228.9 seconds underruns 164 underruns ram_free 17.9 MiB vram 119.7 MiB longest_ms 1531.0 ms stall_play_s 8.2 seconds longest_play_ms 1531.0 ms | Mesa ps3.416~dev the game's resolution, warm-up + 120 s |
Observations: same boot 2026-10-18 ~13:40-14:15 local, x1 (Sauerbraten demo now first-person with the nonfree data: gun/HUD visible, heavier than earlier spectator runs, not comparable). ClassiCube chunks1 50.9 vs base 48.4 (+5%); staging pool same fps, cpu -4%. Sauerbraten base 25.0 steady/30.3 smooth, NV30_QUERY_WAIT=200 45.6/50.0 (low1 4.9 -> 16.9), oqlag 39.4/43.5: single runs, repeat pending. X-Moto stream 163.1 vs 160.4, longest 146 vs 404 ms
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)
· recorded as sauerbraten
| Variant | Conditions | Steady fps in the window |
1% low fps | Stalls frames over 100 ms |
|---|---|---|---|---|
base |
waker kick at 10 ms | 39.2 | 26.4 | 6.0 |
base |
waker kick at 10 ms switch mmmap |
39.9 | 19.8 | 9.0 |
base |
waker kick at 10 ms switch mtrim |
38.2 | 21.5 | 8.0 |
All numbers and setup of this batch
| Variant | Numbers | Setup |
|---|---|---|
base |
fps whole run 30.7 cpu 231.5 seconds underruns 167.0 underruns ram_free 23.2 MiB vram 117.0 MiB longest_ms 690.2 ms stall_play_s 2.1 seconds longest_play_ms 690.2 ms | Mesa ps3.408 the game's resolution, warm-up + 120 s |
base |
fps whole run 35.1 cpu 193.2 seconds underruns 133.5 underruns ram_free 19.9 MiB vram 118.3 MiB longest_ms 538.1 ms stall_play_s 2.1 seconds longest_play_ms 538.1 ms | Mesa ps3.408 the game's resolution, warm-up + 120 s |
base |
fps whole run 33.9 cpu 232.1 seconds underruns 118.5 underruns ram_free 21.5 MiB vram 117.7 MiB longest_ms 462.6 ms stall_play_s 2.0 seconds longest_play_ms 462.6 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.
ioquake3 ps3.396 (r_keepImages + cl_preloadLate), libspeq 0.394 (RGB DXT on SPEs), Mesa ps3.408 default LUT; recorder + kick
2026-10-18 · batch 2026-10-18-ioquake3-396 · 8 runs in the batch (all games)
· recorded as sauerbraten
| Variant | Conditions | Steady fps in the window |
1% low fps | Stalls frames over 100 ms |
|---|---|---|---|---|
rgbppe |
SPEQ_S3TC_RGB=ppe SPEQ_DEBUG=1 stall recorder at 10 ms waker kick at 10 ms |
39.4 | 25.8 | 3.0 |
rgbspu |
SPEQ_DEBUG=1 stall recorder at 10 ms waker kick at 10 ms |
39.1 | 25.9 | 2.5 |
All numbers and setup of this batch
| Variant | Numbers | Setup |
|---|---|---|
rgbppe |
fps whole run 33.2 cpu 232.5 seconds underruns 132.5 underruns ram_free 23.0 MiB vram 117.0 MiB longest_ms 478.1 ms stall_disk_s 0.2 seconds stall_swap_s 0.0 seconds stall_reclaim_s 0.0 seconds stall_gpu_s 0.0 seconds stall_cpu_s 0.1 seconds stall_play_s 1.1 seconds longest_play_ms 478.1 ms | Mesa ps3.408 the game's resolution, warm-up + 120 s |
rgbspu |
fps whole run 32.9 cpu 233.2 seconds underruns 145.0 underruns ram_free 19.9 MiB vram 117.0 MiB longest_ms 500.4 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 0.2 seconds stall_play_s 0.7 seconds longest_play_ms 500.4 ms | Mesa ps3.408 the game's resolution, warm-up + 120 s |
Observations: same boot 2026-10-18 ~08:00-08:40 local, x2. OpenArena base (keep+preload) vs loads0: stall_play_s 0.0/0.0 vs 9.9/9.0, longest 64/47 ms vs 1057/807 ms, steady 70.4/70.8 vs 64.6/65.9. Sauerbraten rgbspu vs rgbppe: identical (39 fps): its demo uploads no RGB DXT1 (only a few DXT5), so the RGB path isn't exercised there; speq-dxt: RGB 1024^2 1.0 ms on 4 SPEs vs ~175 ms PPE
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)
· recorded as sauerbraten
| Variant | Conditions | Steady fps in the window |
1% low fps | Stalls frames over 100 ms |
|---|---|---|---|---|
base |
waker kick at 10 ms | 25.9 | 18.2 | 4.0 |
base |
waker kick at 10 ms switch translate_lut1 |
39.6 | 26.9 | 4.5 |
All numbers and setup of this batch
| Variant | Numbers | Setup |
|---|---|---|
base |
fps whole run 21.7 cpu 231.6 seconds underruns 111.5 underruns ram_free 18.4 MiB vram 118.3 MiB longest_ms 512.3 ms stall_play_s 1.1 seconds longest_play_ms 512.3 ms | Mesa ps3.407 the game's resolution, warm-up + 120 s |
base |
fps whole run 33.4 cpu 231.1 seconds underruns 108.0 underruns ram_free 19.0 MiB vram 117.0 MiB longest_ms 507.1 ms stall_play_s 1.4 seconds longest_play_ms 507.1 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
stall recorder (ps3-gpu-tools 0.385), ioquake3 ps3.379 (atlas off), Sauerbraten demo + nonfree data
2026-10-17 · batch 2026-10-17-stall-recorder · 7 runs in the batch (all games)
· recorded as sauerbraten
| Variant | Conditions | Steady fps in the window |
1% low fps | Stalls frames over 100 ms |
|---|---|---|---|---|
demooff |
SPEQ_SKIN=off | 25.3 | 17.6 | 4 |
demoppe |
SPEQ_SKIN=ppe SPEQ_DEBUG=1 |
25.5 | 18.3 | 3 |
demospu |
SPEQ_SKIN=spu SPEQ_DEBUG=1 |
25.8 | 18.8 | 4 |
All numbers and setup of this batch
| Variant | Numbers | Setup |
|---|---|---|
demooff |
fps whole run 20.6 cpu 233.7 seconds underruns 167 underruns ram_free 22.0 MiB vram 117.0 MiB longest_ms 494.2 ms stall_disk_s 0.1 seconds stall_swap_s 0.0 seconds stall_reclaim_s 0 seconds stall_gpu_s 0.0 seconds stall_cpu_s 0.3 seconds | no build recorded the game's resolution, warm-up + 120 s |
demoppe |
fps whole run 21.7 cpu 233.1 seconds underruns 154 underruns ram_free 24.3 MiB vram 117.0 MiB longest_ms 511.7 ms stall_disk_s 0.3 seconds stall_swap_s 0.0 seconds stall_reclaim_s 0 seconds stall_gpu_s 0 seconds stall_cpu_s 0.1 seconds | no build recorded the game's resolution, warm-up + 120 s |
demospu |
fps whole run 21.8 cpu 233.3 seconds underruns 134 underruns ram_free 18.2 MiB vram 117.0 MiB longest_ms 469.3 ms stall_disk_s 0.3 seconds stall_swap_s 0.0 seconds stall_reclaim_s 0 seconds stall_gpu_s 0 seconds stall_cpu_s 0.2 seconds | no build recorded the game's resolution, warm-up + 120 s |
Observations: same boot 2026-10-18 ~02:40-03:20 local. Recorder own cost 5.6% of a thread. OpenArena base recorder off/on alternated: stall_s 41.4/17.9/34.9/17.6 (on runs fewer stalls: unexplained, recheck). OA stalls are CPU (~700 ms of main-thread user time: mid-demo skin/texture loads from pk3, DXT on the PPE for RGB sources). Sauerbraten demo demospu/demoppe/demooff steady 25.8/25.5/25.3, 3-4 stalls each, causes file faults and disk reads from the USB HDD; load 16.5 s of which disk 5.3 s. Webcam checked
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)
· recorded as sauerbraten
| Variant | Conditions | Steady fps in the window |
1% low fps | Stalls frames over 100 ms |
|---|---|---|---|---|
offskin |
SPEQ_SKIN=off | 23.0 | 17.4 | 0 |
ppeskin |
SPEQ_SKIN=ppe SPEQ_DEBUG=1 |
28.1 | 20.6 | 0 |
spuskin |
SPEQ_SKIN=spu SPEQ_DEBUG=1 |
23.6 | 12.0 | 21 |
All numbers and setup of this batch
| Variant | Numbers | Setup |
|---|---|---|
offskin |
fps whole run 23.2 cpu 219.7 seconds underruns 96 underruns ram_free 22.9 MiB vram 117.0 MiB longest_ms 75.2 ms | no build recorded the game's resolution, warm-up + 120 s |
ppeskin |
fps whole run 28.0 cpu 220.4 seconds underruns 102 underruns ram_free 23.3 MiB vram 116.4 MiB longest_ms 81.4 ms | no build recorded the game's resolution, warm-up + 120 s |
spuskin |
fps whole run 28.4 cpu 217.9 seconds underruns 153 underruns ram_free 22.1 MiB vram 118.8 MiB longest_ms 614.1 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 + ps3rsx 0.249
2026-10-17 · batch 2026-10-17-mesa-262 · 12 runs in the batch (all games)
· recorded as sauerbraten
| Variant | Conditions | Steady fps in the window |
1% low fps | Stalls frames over 100 ms |
|---|---|---|---|---|
cpuskel |
the recipe as it is | - | - | - |
All numbers and setup of this batch
| Variant | Numbers | Setup |
|---|---|---|
cpuskel |
fps whole run 8 cpu 120.0 seconds underruns 207 underruns ram_free 12.8 MiB vram 140.3 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.
Group 4 smokes (Mesa ps3.246 + ps3rsx 0.249)
2026-10-17 · batch 2026-10-17-group4-smokes · 6 runs in the batch (all games)
· recorded as sauerbraten
| Variant | Conditions | Steady fps in the window |
1% low fps | Stalls frames over 100 ms |
|---|---|---|---|---|
base |
the recipe as it is | - | - | - |
cpuskel |
the recipe as it is | - | - | - |
All numbers and setup of this batch
| Variant | Numbers | Setup |
|---|---|---|
base |
fps whole run 0 cpu 145.0 seconds underruns 202 underruns ram_free 11.3 MiB vram 140.8 MiB | Mesa ps3.246, ps3rsx 0.249 the game's resolution, whole run |
cpuskel |
fps whole run 19.6 cpu 113.0 seconds underruns 171 underruns ram_free 9.3 MiB vram 134.8 MiB | Mesa ps3.246, ps3rsx 0.249 the game's resolution, whole run |
Observations: 2026-10-17 09:49-10:30Z, heavy games, VRAM swap on. OpenArena opengl2 (gl2min, 97 GLSL programs): the first launch hit the 90 s cap before the level loaded; the rerun with 240 s ran at 13.6 fps average with one 36.3 s stall, HUD median 31, 157.8 MB VRAM and MemAvailable down to 9.8 MB. With Debian's defaults (gl2, 115 programs) 10.7 fps, a 28.3 s stall, HUD median 23, 159.7 MB VRAM. The picture was right (webcam) and no driver bug showed; the games are memory-bound. SuperTuxKart quit after 29 s with a fatal error: 'SPMeshLoader: Not little endian machine' (thunderbird.spm). Sauerbraten with GPU skinning (base) ran to the 170 s cap with HUD median 0 and no fps line (GAME-PLAN has 11 fps by its own counter against 28 for CPU skinning); CPU skinning gives 19.6 fps in 601 frames (longest 380 ms) at 135 MB VRAM, load 27 s. 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)
· recorded as sauerbraten
| Variant | Conditions | Steady fps in the window |
1% low fps | Stalls frames over 100 ms |
|---|---|---|---|---|
cpuskel |
the recipe as it is | - | - | - |
All numbers and setup of this batch
| Variant | Numbers | Setup |
|---|---|---|
cpuskel |
fps whole run 28 cpu 116.2 seconds underruns 176 underruns ram_free 9.7 MiB vram 140.3 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)
· recorded as sauerbraten
| Variant | Conditions | Steady fps in the window |
1% low fps | Stalls frames over 100 ms |
|---|---|---|---|---|
cpuskel |
the recipe as it is | - | - | - |
All numbers and setup of this batch
| Variant | Numbers | Setup |
|---|---|---|
cpuskel |
fps whole run 15 cpu 95.3 seconds underruns 246.5 underruns ram_free 10.8 MiB vram 125.0 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.