All games

OpenArena

Gold · 82 with OpenArena (GL 2.0) 0.2 h played, 0 crashes

A fast Quake III Arena style deathmatch shooter with bots, free data included.

made for keyboard and mouse keyboard and mouse shooter fps multiplayer bots 3d

Played sessions

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

DateVersionLauncherKindRulesPlayEndedPictureBuilds
2026-10-25Walnut 0.1
openarena 0.8.8+dfsg-13
OpenArena (GL 2.0) session1.09 minquit ok openarena 0.8.8+dfsg-13
Linux kernel 6.12.111+ps3.747
Mesa 26.2.4-1+ps3.721
ps3rsx 0.735+k6.12.111+ps3.747
Details
2026-10-25Walnut 0.1
openarena 0.8.8+dfsg-13
OpenArena (GL 1.2) session1.012 minquit ok openarena 0.8.8+dfsg-13
Linux kernel 6.12.111+ps3.747
Mesa 26.2.4-1+ps3.721
ps3rsx 0.735+k6.12.111+ps3.747
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.

OpenArena (GL 2.0)

VersionTestedMedalRules Frame rateSmoothnessSoundPictureStabilityDisplayLoad Play
Walnut 0.1
openarena 0.8.8+dfsg-13
2026-10-25 Gold · 82 1.0 646710010091-98 0.2 h
1 test

OpenArena (GL 1.2)

VersionTestedMedalRules Frame rateSmoothnessSoundPictureStabilityDisplayLoad Play
Walnut 0.1
openarena 0.8.8+dfsg-13
2026-10-25 Silver · 76 1.0 426810010091-100 0.2 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: OpenArena (ioquake3 0.8.8): timedemo of bench.dm_71 (as legacy/step0.sh), renderer and texture compression per variant. The game archives +set cvars to q3config.cfg on quit. Steady state: the timedemo repeated in one session (PASSES=1: every pass prints its line; passes starting 54 s or more after the first map load are counted until ~120 s, then the game is stopped). nextdemo is cleared before it runs (CL_NextDemo), so each pass sets it again: bench_loop = "set nextdemo vstr bench_again; demo bench", bench_again = "meminfo; vstr bench_loop" (in autoexec.cfg). Every pass reloads the map (CL_InitCGame again; opengl2 without r_glslKeepPrograms compiles its programs again too). fps=, maxms= and load= are the first pass's, as the single timedemo had them; steady is the median of the measured passes.

54 variants of the recipe
base stands for the gamethe recipe as it is, without a variant
tc0opengl1, uncompressed textures (step 0's tc0)
tc1opengl1, compressed (shipped default, step 0's tc1)
gl2min stands for the game-
gl2-
gl2min_upevery switch of ours back to upstream (Debian's behaviour, except the VAO cache and the model tangents, which have no switch: for those, compare with Debian's deb)
gl2min_shaders0001: shader objects kept attached after linking (their source and IR in Mesa)
gl2min_bones0002: the 27 bone-animation programs (105-matrix arrays, compare trees on nv30)
gl2min_fboprog0003: the 15 shadow and post-processing programs that need framebuffer objects
gl2min_recompile0004: every program compiled again at the demo's map load (load time, the second compile burst)
gl2min_lazy0005 (opt-in): each program built at its first use; stalls when a variant is first drawn
gl2min_modelverts0007: the permanent CPU copy of every MD3 vertex frame (hunk: ~87 MB for the demo's models)
gl2min_lods10009 (opt-in): only the full-detail LOD of each model (no _1, _2: -41% model memory, more vertices)
gl2min_lodbias10009: r_lodbias 1, LOD 0 never drawn so no longer loaded (-59% model memory, coarser models)
gl2min_cpuanim0010 (opt-in): MD3 animation on the CPU as opengl1 (no model VBOs, 18 fewer programs, more PPE)
gl2min_leansettings only: lazy and lods1 together; texture resolution (r_picmip 2 against ioquake3's default 1; the run's q3config.cfg holds what OpenArena had); uncompressed textures in gl2
gl2min_picmip2-
gl2min_tc0-
gl2min_color160027: vertex colours as unsigned shorts again (R16G16B16A16_UNORM, which nv30 can't fetch: u_vbuf converts them on the CPU at every draw, and nouveau keeps malloc'ed copies of the VRAM buffers it reads, after a few such reads of every new one: docs/MEMORY.md "OpenArena opengl2")
gl2min_mippowf0028: the gamma-correct mipmaps with a powf per texel channel (the same bytes, more CPU at loads and joins)
gl2min_md3pack0029 (opt-in): animated MD3 frames in 12 bytes a vertex instead of 20 (the demo's model VBOs 62 -> 37.5 MB of VRAM; 8-bit normals: on llvmpipe 1734 pixels of 30 frames differ by at most 2 levels)
scan0011: R_FindShader scanned the whole shader text again after a miss in its hash table
crc0012: crc32 of every pk3 entry read (nobody looks at the result)
noaltivec0013: the AltiVec versions of the MD3 interpolation and the diffuse lighting (needs the -maltivec build)
markclear0014: two 272-byte memsets for every plane a decal triangle is clipped against
sndeager0015: the sounds of a player model read and decoded when the player joins instead of at their first play
zlib0016: zlib instead of libdeflate for the pk3 entries
huffslow0018: the message Huffman trees fed 1053340 symbols at the first message (a command line cvar: the first message comes before autoexec.cfg)
upall of them as before (not the build flags, nor the AltiVec code being compiled in)
mergelm1Batching (ioquake3 0019-0022, gamedb/engines/ioquake3/technical.md): fewer GL calls and draws a frame from renderergl1. On llvmpipe forced to GL 2.1 the demo went from 3022 GL calls and 198 draws a frame to 377 and 79, the same picture (atlas: 74 pixels differ by at most 2). Each variant turns one change back to upstream, allbatchoff all four. 0019: the map's 32 lightmaps as one atlas texture, so a texture lit from several lightmaps is one batch (world batches 114 -> 27 a frame). Off by default since 0024: on the PS3 any atlas page adds ~10 s of hitches per run (stall_s 34-36 vs 24), the frame cost equal. mergelm1 turns it back on.
glcache00020: texture unit, GL_TEXTURE_2D and client array state sent at every call (not only when a draw needs a change)
lockarrays0021: glLockArraysEXT/glUnlockArraysEXT around every batch (Mesa only records the range)
skystrips0022: the sky box as a glBegin strip per row, a call per vertex (the demo shows no sky: expect no change here; islanddm drops from ~1450 sky calls a frame to 18)
allbatchoff-
keepimg0Loads during play (ioquake3 0025-0026, docs/STALLS.md "OpenArena"). Five bots join the demo, one every 200 frames (bot_minplayers, and qagame's loaddefered makes the cgame load each at once): 3 models, 3 skins, 3-6 textures each, 4 stalls of 130-400 ms a pass on the PS3; and every pass reloads the map: 3 load-screen stalls of 340/700/380 ms (402 image files read, decoded, DXT on the PPE), 10 of the run's 17.6 s of stalls (bench/analysis/passsplit.py tells the two apart). Both switches are on in base (llvmpipe: picture identical over three passes; the second pass on loads nothing during the demo, the reload 0.46 -> 0.17 s). The first pass still loads them (unmeasured). 0025: r_keepImages 0, every texture freed and its file loaded again at each map load
preload00026: cl_preloadLate 0, the joining players' models and skins loaded when they join
loads0-
defer0026 (opt-in, changes the picture): loaddefered ignored, the bots keep a substitute model (the demo player's) for the whole demo: what the joins cost against no player loads at all
mergelm2(Before 0024 the atlas was the default and the variant was mergelm0; the notes below were measured that way, "base" there is the atlas on, "mergelm0" the atlas off.) The atlas's ~5% (ps3.362 on Mesa ps3.299) is not in the frames: the window's frames of 100 ms or less render at the same rate with and without it (report.py smooth: 64.0-64.3 fps both ways), the loss is stall time (stall_s 37-45 s with it, 30-37 without). 0023 separates the atlas textures from the batching. mergelm2: the atlas pages with a batch per lightmap (199 draws, the order of mergelm0): stalls as base = the big page's memory, as mergelm0 = the batching. lmsize512 / lmsize256: pages of up to 16 / 4 lightmaps (92 / 132 draws, 1 MB / 256 KB uploads).
lmsize512-
lmsize256-
tc1nowmtc1 with no window manager, as step 0 ran: the window never reached the screen (SDL's fullscreen went unanswered), so this measures what showing the frames costs
allog-
b16-
f44-
b16f44-
p1024-
alnull-
f32-
lin-
nosound-
kick100Mesa ps3.282: a submission every 100 draws (0026), the Armagetron fix, checked here
rgbspuDXT1 of RGB sources (libspeq 2026-10-18, packages/walnut/tools/ps3-spu/doc/dxt-rgb.md): an RGB source (3 bytes a pixel, "speq: s3tc dxt1 ... comps 3" lines) used to be encoded on the PPE (165 ms for a 1024x1024, 43 ms for a 512x512: hitches when a texture loads mid-demo); now the SPEs take it. rgbppe sends RGB back to the PPE encoder (the old behaviour), rgbspu is the default with the same logging, so the pair differs in the switch alone. opengl1 uploads its opaque textures as GL_RGBA data (RGBA DXT1, comps 4), so count the comps 3 lines in game.log first: without them the pair measures nothing.
rgbppe-

Conditions: what a variant adds to the recipe (its environment switches) and what ran alongside (the stall recorder, a profiler). Length: "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. Rows marked invalid or not comparable say why.

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
OpenArena, opengl1 base 263970.60.034.6560 right, right
OpenArena, opengl2 gl2min 1511960.40.225.61990 right, right

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)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
longest_ms
ms
stall_play_s
seconds
longest_play_ms
ms
base real-time priority 0 - the game's warm-up + 120 s 62.568.540.40 143.80645.70.039.6
base real-time priority 10 - the game's warm-up + 120 s 62.568.340.10 156.60700.80.043.5

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 ssdroot12 snd_ps3 DMA watchdog (kernel local/0047): dma_watchdog_ms=200 against 0 (off) on SuperTuxKart lean, OpenArena gl2min and ClassiCube base x3 (SSD root .472 Mesa ps3.545~dev, .472 with the test module)

2026-10-20 · batch 2026-10-20-ssdroot12-dma-watchdog · 17 runs in the batch (all games)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
longest_ms
ms
stall_disk_s
seconds
stall_swap_s
seconds
stall_reclaim_s
seconds
stall_gpu_s
seconds
stall_cpu_s
seconds
stall_play_s
seconds
longest_play_ms
ms
gl2min stall recorder at 10 ms Kernel ps3.472, Mesa ps3.545~dev the game's warm-up + 120 s 48.761.928.11 212.1018.9117.03076.01.10.21.00.539.00.2148.7
gl2min stall recorder at 10 ms
switch snd_dma_watchdog_ms0
Kernel ps3.472, Mesa ps3.545~dev the game's warm-up + 120 s 48.862.328.10.5 191.70.016.4116.921436.50.82.61.00.326.90.1139.2

Observations: same boot (2026-10-20 06:53-08:11Z), 18 runs rotated, DUMPON=1, arms base (watchdog 200 ms) and snd_dma_watchdog_ms0 (off); one OpenArena off run (07:45Z, two logins) interfered and out of the cells. Wedges (Wait timeout lines): off arm 2 of 9 runs (OpenArena snd_stall=95 oal_wait=65, ClassiCube snd_stall=164 oal_wait=155); watchdog on 0 of 9, with 2 restarts caught (OpenArena, ClassiCube) and the sound kept going. fps, 1% low and stalls equal: SuperTuxKart 21 against 20 fps, ClassiCube 48.4 both, OpenArena 61.9 against 62.3

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)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
longest_ms
ms
stall_disk_s
seconds
stall_swap_s
seconds
stall_reclaim_s
seconds
stall_gpu_s
seconds
stall_cpu_s
seconds
stall_play_s
seconds
longest_play_ms
ms
gl2min stall recorder at 10 ms Kernel ps3.472, Mesa ps3.545~dev the game's warm-up + 120 s 48.262.728.22 184.1019.2117.03211.01.00.31.70.432.10.3192.6
gl2min stall recorder at 10 ms
switch minmax_vmx1
Kernel ps3.472, Mesa ps3.545~dev the game's warm-up + 120 s 48.661.726.91 185.0017.0116.63222.01.10.51.20.431.20.1143.3

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 ssdroot9 Mesa 0041: NV30_FENCE_WORK_KICK=1024 against unset on OpenArena gl2min x5 (SSD root .472 Mesa ps3.545~dev)

2026-10-20 · batch 2026-10-20-ssdroot9-fence-work-kick · 10 runs in the batch (all games)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
longest_ms
ms
stall_disk_s
seconds
stall_swap_s
seconds
stall_reclaim_s
seconds
stall_gpu_s
seconds
stall_cpu_s
seconds
stall_play_s
seconds
longest_play_ms
ms
gl2min stall recorder at 10 ms Kernel ps3.472, Mesa ps3.545~dev the game's warm-up + 120 s 49.762.027.81 191.7016.2117.03202.01.30.41.30.431.90.2172.4
gl2min stall recorder at 10 ms
switch fence_work_kick1024
Kernel ps3.472, Mesa ps3.545~dev the game's warm-up + 120 s 49.862.928.22 209.7019.9119.53166.00.90.81.40.538.20.3165.8

Observations: same boot (2026-10-20 01:56-02:33Z), 10 runs rotated, none interfered. Steady 62.9 with 1024 against 62.0 unset (+1.5%), 1% low 7.5 both, gameplay unchanged, CPU not lower (210 s against 192 s). Neutral, stays off

batch ssdroot8 DUMPON=1 repro of the OpenAL wedge: SuperTuxKart x4 OpenArena x3 ClassiCube x3 (SSD root .472 Mesa ps3.545~dev, stock snd_ps3)

2026-10-20 · batch 2026-10-20-ssdroot8-openal-wedge · 10 runs in the batch (all games)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
longest_ms
ms
stall_disk_s
seconds
stall_swap_s
seconds
stall_reclaim_s
seconds
stall_gpu_s
seconds
stall_cpu_s
seconds
stall_play_s
seconds
longest_play_ms
ms
gl2min stall recorder at 10 ms Kernel ps3.472, Mesa ps3.545~dev the game's warm-up + 120 s 20.161.627.13 176.2016.0116.93773.01.12.51.20.431.00.4129.7

Observations: investigation runs, not for fps (a dump freezes the game for seconds and DUMPON costs), so the cells come only from the runs without a dump and are not comparable with other rows. 2026-10-20 00:39-01:25Z, same boot as the rest of ssdroot8. Webcam picture right in all 10. Dumps taken in 8 of 10 runs. Which runs wedged OpenAL (Wait timeout lines in game.log; the trigger, dump= and dump_at in bench.txt): SuperTuxKart 00:39Z none (1 xrun line), 00:45Z dump at 10.9 s on a Wait timeout, 291 lines, the card's hw pointer stood still 1.0 s before the trigger (the DMA stopped, as in cf64bd4), 00:51Z dump at 30.6 s on a mmap commit error, then 29 Wait timeout lines (the pointer still moved at the trigger), 00:57Z dump at 33.1 s on a mmap commit error, 2 lines, no Wait timeout, pointer moving. OpenArena 01:03Z, 01:07Z and 01:10Z dumps at 21.5, 20.5 and 33.4 s, all on a mmap commit error (2, 2 and 5 lines), no Wait timeout, pointer moving in all three. ClassiCube 01:15Z dump at 2.9 s on a mmap commit error, then 12 Wait timeout lines; 01:18Z none (0 lines); 01:22Z dump at 4.4 s on a mmap commit error, 1 line, pointer moving. So Wait timeout (the wedge) hit 2 of 4 SuperTuxKart, 0 of 3 OpenArena and 1 of 3 ClassiCube, 3 of 10; the other 5 dumps are client xruns that recovered. The SuperTuxKart runs of 00:51Z and 00:57Z have an empty bench.txt and a game.log cut at 12288 and 10855 bytes (a 164 MB core in /dev/shm on a 256 MB console, the likely cause, not checked): their counts come from game.log and the runs make no cell

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)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
longest_ms
ms
stall_disk_s
seconds
stall_swap_s
seconds
stall_reclaim_s
seconds
stall_gpu_s
seconds
stall_cpu_s
seconds
stall_play_s
seconds
longest_play_ms
ms
gl2min stall recorder at 10 ms
switch force_dxt_stats50
Kernel ps3.472, Mesa ps3.545~dev the game's warm-up + 120 s 48.261.827.22.0 187.20.013.4115.33206.01.61.41.40.532.00.3160.7
gl2min stall recorder at 10 ms
switch force_dxtopaque_force_dxt_stats50
Kernel ps3.472, Mesa ps3.545~dev the game's warm-up + 120 s 49.162.127.81.5 201.70.017.4117.03228.51.51.31.50.431.80.2159.3
gl2min_tc0 stall recorder at 10 ms
switch force_dxt_stats50
Kernel ps3.472, Mesa ps3.545~dev the game's warm-up + 120 s 46.458.625.63.0 187.50.019.8146.83498.01.10.61.50.131.10.6298.8
gl2min_tc0 stall recorder at 10 ms
switch force_dxtopaque_force_dxt_stats50
Kernel ps3.472, Mesa ps3.545~dev the game's warm-up + 120 s 47.358.925.43.0 185.90.019.1148.23227.01.11.11.30.130.90.5163.6

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 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)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
longest_ms
ms
stall_disk_s
seconds
stall_swap_s
seconds
stall_reclaim_s
seconds
stall_gpu_s
seconds
stall_cpu_s
seconds
stall_play_s
seconds
longest_play_ms
ms
gl2min stall recorder at 10 ms Kernel ps3.472, Mesa ps3.545~dev the game's warm-up + 120 s 47.057.025.20.0 185.90.021.1117.03337.01.60.11.60.531.80.091.2

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 ssdroot6 Mesa 0041: NV30_FENCE_WORK_KICK=1024 and =0 against unset on OpenArena gl2min x3 (SSD root .472 Mesa ps3.545~dev)

2026-10-19 · batch 2026-10-19-ssdroot6-fence-work-kick · 7 runs in the batch (all games)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
longest_ms
ms
stall_disk_s
seconds
stall_swap_s
seconds
stall_reclaim_s
seconds
stall_gpu_s
seconds
stall_cpu_s
seconds
stall_play_s
seconds
longest_play_ms
ms
gl2min stall recorder at 10 ms Kernel ps3.472, Mesa ps3.545~dev the game's warm-up + 120 s 50.062.328.10.0 211.90.015.6117.03142.51.10.80.60.532.10.063.8
gl2min stall recorder at 10 ms
switch fence_work_kick0
Kernel ps3.472, Mesa ps3.545~dev the game's warm-up + 120 s 51.963.228.90 216.5016.5119.63079.00.70.40.60.639.30.081.8
gl2min stall recorder at 10 ms
switch fence_work_kick1024
Kernel ps3.472, Mesa ps3.545~dev the game's warm-up + 120 s 52.265.329.50.5 222.20.014.4119.53147.51.00.80.60.639.50.197.7

Observations: same boot (2026-10-19 18:11-18:45Z), 9 runs rotated: unset (the rec10 column), fence_work_kick1024 and fence_work_kick0; webcam picture right in all 9 (the map's spectator view, the same in every arm). The last two runs (18:40Z unset, 18:44Z 1024) are interfered (an SSH session pushing a deb from 145 s on) and out of the cells: n=2 unset, n=2 for 1024, n=3 for the explicit 0. Steady fps (median of the passes): unset 62.3 (62.15, 62.4), 1024 65.4 (65.2, 65.5), 0 63.2 (61.6, 63.2, 63.8); the interfered runs (58.1, 62.6) stay out. That is +5% over unset but +3.5% over the explicit 0 and inside the spread of the unset arm, so indicative, not proven. Gameplay: 1% low 28.2 unset against 29.5 with 1024 and 28.9 with 0; gameplay stalls 0 in all runs but one frame each in a 1024 run (0.1 s) and a 0 run (longest 629 ms); load 6.7 s in every arm. CPU did not fall: 212 s unset, 222 s with 1024, 216 s with 0 (196 to 219): the expected -10% is not there, so the kick buys frames at best, not CPU, with n=2. Three of the 9 runs end in ioquake3's DOUBLE SIGNAL FAULT at the SIGTERM of the window's end (18:19Z, 18:23Z and the interfered 18:44Z; four ssdroot5 runs without 0041 did the same), not a result of 0041. oal_wedge was not counted yet; xrun 0

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)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
longest_ms
ms
stall_disk_s
seconds
stall_swap_s
seconds
stall_reclaim_s
seconds
stall_gpu_s
seconds
stall_cpu_s
seconds
stall_play_s
seconds
longest_play_ms
ms
gl2min stall recorder at 10 ms
switch zng
Kernel ps3.472, Mesa ps3.545~dev the game's warm-up + 120 s 51.061.127.40.0 211.60.014.4117.23154.01.00.80.60.432.50.071.7
gl2min stall recorder at 10 ms
switch zng
switch ldstock-png
Kernel ps3.472, Mesa ps3.545~dev the game's warm-up + 120 s 50.563.028.60.0 235.50.016.4117.03117.50.70.40.70.539.10.065.5

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 OpenAL: the new openal-soft +ps3.549 against Debian's stock (LDPATH) and int16 against float output (OAL=f32) on OpenArena gl2min and ClassiCube base x3 (SSD root .472 Mesa ps3.544)

2026-10-19 · batch 2026-10-19-ssdroot5-openal · 24 runs in the batch (all games)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
longest_ms
ms
stall_disk_s
seconds
stall_swap_s
seconds
stall_reclaim_s
seconds
stall_gpu_s
seconds
stall_cpu_s
seconds
stall_play_s
seconds
longest_play_ms
ms
gl2min stall recorder at 10 ms Kernel ps3.472, Mesa ps3.544 the game's warm-up + 120 s 46.257.225.20 183.7016.3117.03350.01.20.81.30.431.70.093.2
gl2min stall recorder at 10 ms
switch ldstock-openal
Kernel ps3.472, Mesa ps3.544 the game's warm-up + 120 s 45.056.223.53 194.1017.7117.03241.01.10.51.50.531.80.4200.7
gl2min stall recorder at 10 ms
switch oalf32
Kernel ps3.472, Mesa ps3.544 the game's warm-up + 120 s 46.256.825.02 186.4017.4116.93364.00.90.41.50.531.60.3177.9
gl2min stall recorder at 10 ms
switch oalf32
switch ldstock-openal
Kernel ps3.472, Mesa ps3.544 the game's warm-up + 120 s 46.856.924.40 190.3019.2117.03207.00.90.41.10.531.90.085.4

Observations: same boot (2026-10-19 12:26-13:53Z), 24 runs rotated, four arms per game: ours int16 (rec10), ours f32 (oalf32), stock int16 (ldstock-openal), stock f32. OpenArena steady 57.3 with the new library against 56.3 stock (+2%); ClassiCube unchanged (GPU-bound, 46.2 fps); int16 against float within the noise. Load times equal (6.8-7.1 s and 7.5-7.7 s)

batch ssdroot5 Mesa 0040: NV30_STAGING_POOL_MB=24 against off on ClassiCube base and OpenArena gl2min x3 (SSD root .472 Mesa ps3.544)

2026-10-19 · batch 2026-10-19-ssdroot5-staging-pool · 12 runs in the batch (all games)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
longest_ms
ms
stall_disk_s
seconds
stall_swap_s
seconds
stall_reclaim_s
seconds
stall_gpu_s
seconds
stall_cpu_s
seconds
stall_play_s
seconds
longest_play_ms
ms
gl2min stall recorder at 10 ms Kernel ps3.472, Mesa ps3.544 the game's warm-up + 120 s 47.757.625.81 183.8016.9117.23327.01.30.61.50.431.30.2205.4
gl2min stall recorder at 10 ms
switch staging_pool_mb24
Kernel ps3.472, Mesa ps3.544 the game's warm-up + 120 s 45.857.024.72 183.8016.1116.93166.01.20.31.50.531.50.3190.0

Observations: same boot (2026-10-19 11:19-12:00Z), 12 runs. ClassiCube steady 46.25 fps both arms, VRAM 61.5 MiB both, CPU 83 s both. OpenArena gl2min steady 57.65 off against 56.95 with the pool (inside the 56.5-61.4 spread), CPU 184 s both, gameplay stalls under 1 s in both. The pool only handles uploads over 256 KiB, so no change is expected here: no regression

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)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
longest_ms
ms
stall_disk_s
seconds
stall_swap_s
seconds
stall_reclaim_s
seconds
stall_gpu_s
seconds
stall_cpu_s
seconds
stall_play_s
seconds
longest_play_ms
ms
gl2min stall recorder at 10 ms
switch force_dxt_stats50
- the game's warm-up + 120 s 45.256.323.00.0 199.20.014.9117.33254.01.20.62.00.531.80.088.5
gl2min stall recorder at 10 ms
switch force_dxtopaque_force_dxt_stats50
- the game's warm-up + 120 s 45.055.822.93.0 197.50.019.8116.93157.51.10.21.60.631.60.4191.4

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)

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

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
longest_ms
ms
stall_play_s
seconds
longest_play_ms
ms
gl2min
not comparable
perf recording - the game's warm-up + 120 s 46.556.024.30 203.4019.6116.43265.00.086.9

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.

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
longest_ms
ms
stall_disk_s
seconds
stall_swap_s
seconds
stall_reclaim_s
seconds
stall_gpu_s
seconds
stall_cpu_s
seconds
stall_play_s
seconds
longest_play_ms
ms
gl2min
not comparable
stall recorder at 10 ms
start-up profile
- the game's warm-up + 120 s 47.764.927.62 202.9016.4117.23346.01.30.32.10.638.70.2131.2

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)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
longest_ms
ms
stall_disk_s
seconds
stall_swap_s
seconds
stall_reclaim_s
seconds
stall_gpu_s
seconds
stall_cpu_s
seconds
stall_play_s
seconds
longest_play_ms
ms
gl2min stall recorder at 10 ms Kernel ps3.472, Mesa ps3.476, ps3rsx 0.443 the game's warm-up + 120 s 48.860.425.61 194.4015.3116.33332.01.10.21.50.631.40.2199.3

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)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
longest_ms
ms
stall_disk_s
seconds
stall_swap_s
seconds
stall_reclaim_s
seconds
stall_gpu_s
seconds
stall_cpu_s
seconds
stall_play_s
seconds
longest_play_ms
ms
gl2min stall recorder at 10 ms - the game's warm-up + 120 s 36.555.923.13.0 197.00.013.4117.24750.04.30.31.50.631.40.3111.1
gl2min stall recorder at 10 ms
switch gdssd
- the game's warm-up + 120 s 39.756.123.50 196.2011.8117.23650.03.90.51.30.431.60.095.9
gl2min stall recorder at 10 ms
switch gdssd
switch swssd
- the game's warm-up + 120 s 42.456.124.41 195.7014.1117.23500.05.30.21.30.631.30.1105.2

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)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
longest_ms
ms
stall_disk_s
seconds
stall_swap_s
seconds
stall_reclaim_s
seconds
stall_gpu_s
seconds
stall_cpu_s
seconds
stall_play_s
seconds
longest_play_ms
ms
gl2min stall recorder at 10 ms - the game's warm-up + 120 s 40.559.521.98.0 200.30.015.2117.15067.55.60.91.80.532.02.4867.7
gl2min stall recorder at 10 ms
start-up profile
- the game's warm-up + 120 s 40.857.921.77 201.5015.9116.94620.05.80.20.90.632.31.9896.5
gl2min stall recorder at 10 ms
start-up profile
switch sccold
- the game's warm-up + 120 s 39.457.622.56 201.6020.4116.95068.06.90.41.30.532.61.0406.1
gl2min stall recorder at 10 ms
start-up profile
switch scprime
- the game's warm-up + 120 s 36.657.422.54 201.3013.9117.24304.06.10.91.00.532.41.1736.6
gl2min stall recorder at 10 ms
start-up profile
switch scwarm
- the game's warm-up + 120 s 37.655.422.75 199.8014.1117.24738.05.30.61.10.632.40.7207.5
gl2min_color16 stall recorder at 10 ms - the game's warm-up + 120 s 31.552.410.830.5 189.90.010.1116.611122.57.820.14.20.423.612.92023.0
gl2min_color16 stall recorder at 10 ms
switch invalidate_buffer1_sysmem_copy2_sysmem_stats300
- the game's warm-up + 120 s 39.759.122.88.5 197.80.016.5117.14838.56.60.92.10.531.61.4383.9
gl2min_color16 stall recorder at 10 ms
switch sysmem_stats300
- the game's warm-up + 120 s 31.253.713.922.0 187.00.010.4115.312139.57.822.94.50.522.711.13119.0
gl2min_md3pack stall recorder at 10 ms - the game's warm-up + 120 s 40.259.023.54.0 208.80.016.697.76304.06.61.01.80.435.81.3943.4
gl2min_mippowf stall recorder at 10 ms - the game's warm-up + 120 s 39.560.023.64.5 215.00.011.7117.25718.03.80.81.90.641.20.8368.3

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)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
longest_ms
ms
stall_disk_s
seconds
stall_swap_s
seconds
stall_reclaim_s
seconds
stall_gpu_s
seconds
stall_cpu_s
seconds
stall_play_s
seconds
longest_play_ms
ms
base the recipe as it is - the game's warm-up + 120 s 56.166.133.58.0 187.80.027.639.31478.7-----4.21267.5
gl2min stall recorder at 10 ms - the game's warm-up + 120 s 30.651.814.820 194.909.5117.210783.06.820.13.10.428.911.02038.0
gl2min stall recorder at 10 ms
switch gpffetch
- the game's warm-up + 120 s 31.453.115.518 195.209.1117.213510.08.817.83.00.428.910.41782.0

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)

kernel 6.12.111+ps3.419 idle fix on/off (OpenArena ioquake3 379, no kicker)

2026-10-18 · batch 2026-10-18-kernel-419-idle · 4 runs in the batch (all games)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
longest_ms
ms
stall_play_s
seconds
longest_play_ms
ms
base the recipe as it is Kernel ps3.419 the game's warm-up + 120 s 50.866.830.97.0 183.30.042.936.61352.73.0633.6

Observations: same boot 2026-10-18 ~15:13-15:31 local, switch alternated on/off/on/off: stall_play_s 0.5/8.2/0.1/5.6, longest 285/2598/122/982 ms, steady 71.2/64.4/66.7/67.0. CAVEAT: a stuck wait loop of mine ssh-polled the PS3 every ~11 s through all four runs (uniform across on/off, absolute values not clean); repeat clean on the final kernel

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)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
longest_ms
ms
stall_play_s
seconds
longest_play_ms
ms
base waker kick at 10 ms Mesa ps3.408 the game's warm-up + 120 s 55.867.836.90 121.90.036.438.0669.70.072.5
base waker kick at 10 ms
switch mmmap
Mesa ps3.408 the game's warm-up + 120 s 56.970.837.20 134.40.030.939.3619.10.090.1
base waker kick at 10 ms
switch mtrim
Mesa ps3.408 the game's warm-up + 120 s 56.170.936.61 136.10.026.436.2938.40.1112.2
gl2min waker kick at 10 ms
perf recording
Mesa ps3.408 the game's warm-up + 120 s 30.053.413.527 201.809.7114.716148.054.716148.0

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)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
longest_ms
ms
stall_disk_s
seconds
stall_swap_s
seconds
stall_reclaim_s
seconds
stall_gpu_s
seconds
stall_cpu_s
seconds
stall_play_s
seconds
longest_play_ms
ms
base stall recorder at 10 ms
waker kick at 10 ms
Mesa ps3.408 the game's warm-up + 120 s 55.970.634.60.0 205.10.026.039.3687.70.10.00.10.26.00.055.6
loads0 stall recorder at 10 ms
waker kick at 10 ms
Mesa ps3.408 the game's warm-up + 120 s 57.165.231.029.0 205.80.028.939.41369.50.80.00.60.216.69.4932.2

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

lost decrementer: wakers (ps3-gpu-tools 0.399), OpenArena ioquake3 379

2026-10-18 · batch 2026-10-18-lost-decrementer · 10 runs in the batch (all games)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
longest_ms
ms
stall_disk_s
seconds
stall_swap_s
seconds
stall_reclaim_s
seconds
stall_gpu_s
seconds
stall_cpu_s
seconds
stall_play_s
seconds
longest_play_ms
ms
base the recipe as it is - the game's warm-up + 120 s 51.056.828.038.0 181.70.027.839.42564.5-----14.72320.0
base probe20 - the game's warm-up + 120 s 51.457.921.539.0 171.50.023.539.31331.0-----13.41064.5
base stall recorder at 10 ms - the game's warm-up + 120 s 54.362.728.127.5 194.60.028.539.41462.50.80.00.30.215.47.9706.0
base waker kick at 10 ms - the game's warm-up + 120 s 55.464.333.425.5 202.70.027.639.41166.5-----6.3435.4
base waker sleep at 10 ms - the game's warm-up + 120 s 56.058.926.233.5 194.10.026.139.41902.0-----12.11272.0

Observations: same boot 2026-10-18 ~04:00-04:50 local, ENVS alternated x2. stall_play_s plain 16.1/13.3 (longest 2.8/1.8 s), rec10 7.7/8.1, sleep-waker 11.1/13.0, kick 6.5/6.2 (longest 0.45/0.42 s, low1 33.6/33.2), probe 12.2/14.7. Probe without a game: cpu1 up to 1.44 s late, none with a 10 ms kick. Fix: kernel 0009 (6.12.111+ps3.402), stopgap kicker in game mode

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)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
longest_ms
ms
stall_disk_s
seconds
stall_swap_s
seconds
stall_reclaim_s
seconds
stall_gpu_s
seconds
stall_cpu_s
seconds
base the recipe as it is - the game's warm-up + 120 s 49.257.88.669.0 183.00.026.439.42168.50.00.00.10.215.6

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

ioquake3 ps3.378 (0023 atlas variants), Mesa ps3.299

2026-10-17 · batch 2026-10-17-ioquake3-378-atlas · 12 runs in the batch (all games)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
longest_ms
ms
base the recipe as it is Mesa ps3.299 the game's warm-up + 120 s 50.557.06.187 132.3027.939.31843.0
lmsize256 the recipe as it is Mesa ps3.299 the game's warm-up + 120 s 48.654.46.292 144.8030.439.43300.0
mergelm0 the recipe as it is Mesa ps3.299 the game's warm-up + 120 s 52.258.89.962 180.7027.239.42356.0
mergelm2 the recipe as it is Mesa ps3.299 the game's warm-up + 120 s 51.755.65.788 150.8027.439.41737.0

Observations: same boot 2026-10-18 00:20-01:20 local, 3 rounds. stall_s: base 34.1, mergelm0 23.9, mergelm2 (atlas, old draws) 35.6, lmsize256 36.2; smooth fps 63.7-65.7 all; low1 6.1 / 9.9 / 5.7 / 6.2. Any atlas page adds ~10 s of hitches per run, the batching itself doesn't: atlas off by default next. Webcam: picture right

ioquake3 ps3.362 batching (0019-0022), Mesa ps3.299

2026-10-17 · batch 2026-10-17-ioquake3-362-batching · 8 runs in the batch (all games)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
longest_ms
ms
base the recipe as it is Mesa ps3.299 the game's warm-up + 120 s 49.653.45.496 130.6028.339.42831.0
allbatchoff the recipe as it is Mesa ps3.299 the game's warm-up + 120 s 50.856.47.186.0 182.70.024.739.42171.0
glcache0 the recipe as it is Mesa ps3.299 the game's warm-up + 120 s 42.853.66.393 134.5026.239.44799.0
lockarrays the recipe as it is Mesa ps3.299 the game's warm-up + 120 s 42.255.45.789 131.0031.939.42549.0
mergelm0 the recipe as it is Mesa ps3.299 the game's warm-up + 120 s 47.356.16.182 159.4032.239.42573.0

Observations: same boot 2026-10-17 evening; base = all four on; allbatchoff/mergelm0/glcache0/lockarrays turn changes off. Steady: on 51.8, all off 56.4, atlas off 56.1, others ~base: the lightmap atlas (0019) costs ~5% GPU-side on the RSX (CPU time drops, frames slower). Webcam: picture right

Mesa ps3.299 + ps3rsx 0.249

2026-10-17 · batch 2026-10-17-mesa-299 · 24 runs in the batch (all games)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
base the recipe as it is Mesa ps3.299, ps3rsx 0.249 the game's whole run 52.3--- 38.20.026.738.0

Observations: Mesa round 3 (0027 adaptive submission, 0028 index buffer fenced, 0029 state reset, 0030 index upload, 0031 FP constants from GART). Clean runs (one-ssh webcam watcher), 2 each: Armagetron 61.5 (ps3.282: 50), OpenArena tc1 52.4 (51.3), ClassiCube 46.3 (same-boot ps3.282 A/B: 46.9: noise), X-Moto 44.5 (same-boot ps3.282: 47.0, real -5%; neither autooff 45.5 nor idxoff 45.0 restores it; fpvram 46, idxlate 46: 0031 and 0028 about a frame each). 0031 checked on the webcam with OpenArena opengl2: right picture, no wedge. GL tests pass. Runs 13:05-14:50 UTC with the old watcher (an ssh every 5 s) were slowed and are left out.

ioquake3 ps3.285 + Mesa ps3.282 + ps3rsx 0.249

2026-10-17 · batch 2026-10-17-ioquake3-285 · 7 runs in the batch (all games)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
gl2 the recipe as it is Mesa ps3.282, ps3rsx 0.249 the game's whole run 15.9--- 62.6011.9138.1
gl2min the recipe as it is Mesa ps3.282, ps3rsx 0.249 the game's whole run 29.0--- 51.80.014.0114.1
gl2min_cpuanim the recipe as it is Mesa ps3.282, ps3rsx 0.249 the game's whole run 30.5--- 53.1024.141.2
gl2min_lean the recipe as it is Mesa ps3.282, ps3rsx 0.249 the game's whole run 28.0--- 48.9032.290.4
gl2min_modelverts the recipe as it is Mesa ps3.282, ps3rsx 0.249 the game's whole run 17.6--- 59.3011.6106.3
gl2min_up the recipe as it is Mesa ps3.282, ps3rsx 0.249 the game's whole run 14.8--- 103.0013.5112.4

Observations: OpenArena opengl2 memory patches 0001-0010 (our ioquake3). Demo playing confirmed on the webcam for every run listed. gl2min_up (all patches back to upstream) 14.8 fps, longest frame 24.7 s, 103 s CPU; gl2min (all on) 26.1 and 31.8 in two runs, longest frame 6.0 s, 55 s CPU. modelverts (0007 off: CPU copy of model vertices kept) 17.6 fps with an 18 s stall: 0007 is the big one. cpuanim 30.5 fps at 42 MB VRAM. lean (lazy compile + one LOD) 28.0: lazy compile adds stalls. gl2 (Debian's settings, our patches) 15.9, was 10.7 on Debian's build. The first gl2min_up run sat in the menu (36 '+' commands, the engine keeps 32): fixed in the recipe (5e95bba), that run left out.

Mesa ps3.282 + ps3rsx 0.249: kick100 against base in OpenArena X-Moto ClassiCube

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

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
base the recipe as it is Mesa ps3.282, ps3rsx 0.249 the game's whole run 51.3--- 37.10.026.536.6
kick100 NV30_PS3_KICK_DRAWS=100 Mesa ps3.282, ps3rsx 0.249 the game's whole run 53.0--- 37.00.026.738.0

Observations: 12:24-12:44Z, Mesa ps3.282 (0026: NV30_PS3_KICK_DRAWS=100 submits every 100 draws), two base and two kick100 runs per game, interleaved, libspeq0 0.288. OpenArena tc1: base 52.2 and 50.4 fps, kick100 52.2 and 53.9 (+3%), CPU 36-38 s in all, longest frame 892-935 ms base against 954-1216 ms. X-Moto (HUD median): base 47 and 48, kick100 42 and 44 (-9%), CPU 88-90 s in all, underruns 22-43 against 22-29. ClassiCube fly-through (own counter): base 48.1 and 48.5 fps, kick100 48.8 and 49.0 (about +1%, neutral) but 59-60 s of CPU against 54.6 s (+9%). With the Armagetron row (kick100 restores 60.5 fps there): 0019 cost Armagetron its CPU/GPU overlap; NV30_PS3_RELOCS=1 or a submission every 100 draws gets it back, but kick100 costs X-Moto 9%, gains OpenArena 3% and is neutral for ClassiCube, so there is no fixed-N default that is good for every game. The reason X-Moto loses is not established. Four runs per game; spread between two runs of the same variant is 1-2 fps.

Mesa ps3.262 runs with perf recording (audio profiling)

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

Not comparable: runs with perf recording (audio profiling), slower than plain runs.

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
base
not comparable
the recipe as it is Mesa ps3.262 the game's whole run 31.6--- 41.50.025.339.4

Observations: 11:38-11:49Z, plain-named runs between the profiled ones: dsda-doom 'play' twice (1276 and 1422 underruns, HUD 51 and 50; probably the runs behind the profile that gave libfluidsynth 48.3% of the process samples), OpenArena base 39.7 fps with a 5.9 s longest frame and then 23.4 fps with a 15 s stall (rc 1; the suite run had 54.4), Yamagi 55.2 fps (63.9 in the suite). MemAvailable fell to 38 and 13 MB in the two OpenArena runs. Perf was recording during these runs (told by the coordinator; the run directories have no during.log), which explains the slow OpenArena and Yamagi runs. Do not read them as a change in Mesa ps3.262; the cells are not for comparison.

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.

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
allog
not comparable
the recipe as it is Mesa ps3.262 the game's whole run 46.2--- 38.0034.936.6

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)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
base the recipe as it is Mesa ps3.262, ps3rsx 0.249 the game's whole run 54.4--- 35.7023.436.6

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)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
gl2 the recipe as it is Mesa ps3.246, ps3rsx 0.249 the game's whole run 10.7--- 118.3013.1159.7
gl2min the recipe as it is Mesa ps3.246, ps3rsx 0.249 the game's whole run 13.6--- 80.10.011.897.9

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)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
underruns
underruns
ram_free
MiB
vram
MiB
base the recipe as it is Mesa ps3.246, ps3rsx 0.249 the game's whole run 44.2--- 38.5037.339.4

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.

Mesa ps3.223 + ps3rsx 0.219

2026-10-16 · batch 2026-10-16-mesa-223 · 5 runs in the batch (all games)

Not comparable: every game was profiled with perf during the run, which slows it.

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
ram_free
MiB
vram
MiB
tc1
not comparable
the recipe as it is Mesa ps3.223, ps3rsx 0.219 the game's whole run 37.2--- 43.519.039.4

Observations: 22:08-22:17Z, the five games profiled with perf for GAME-PLAN's 'where the CPU goes' table (15 s per game; the perf recording is stated there, the run directories do not show it), so fps are lower than plain runs. X-Moto 34.6 fps (own counter), OpenArena tc1 37.2 (longest frame 3.1 s), ClassiCube 54 (HUD), Extreme Tux Racer 40 (menu, HUD), Armagetron 102 (HUD, live first-run game). 208 X-Moto underruns. Result: the driver stack, not the games, takes most of the CPU (Mesa 28-56%, ps3rsx 6-16%), which started the per-draw work in Mesa ps3.246/ps3.262 and ps3rsx 0.249. One run per game.

Stage 0 validation (Mesa ps3.186 + ps3rsx 0.219; picture on screen)

2026-10-16 · batch 2026-10-16-stage0-validation · 7 runs in the batch (all games)

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
ram_free
MiB
vram
MiB
tc1 the recipe as it is Mesa ps3.186, ps3rsx 0.219 the game's whole run 42.2--- 42.446.536.6

Observations: 20:43-20:52Z, first runs with the picture on screen, checked on the webcam (ac08e38). xfix1 and xfix2: glxgears 57.8 and 57.7 fps vsync after a1f1b91 (a new X after the last one quit no longer starts muted); then OpenArena tc1 (3 runs, 42.2 fps [40.9..46.4], load 10.8 s [10.6..11.9], game VRAM 36.6-39.4 MB) and ClassiCube (2 runs, 50.5 HUD median). Showing the frames costs: the same OpenArena runs with nothing on screen gave 45-54 fps. Proves a1f1b91 and 8baa747 (ps3rsx) together with Openbox in client.sh (fa723f9). Mesa ps3.186, libspeq0 0.210, kernel .178.

Stage 0 after ps3rsx 8baa747 (second X still black)

2026-10-16 · batch 2026-10-16-stage0-8baa747 · 8 runs in the batch (all games)

Invalid: the second X was still black, so the frame rates are not of a shown picture.

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
ram_free
MiB
vram
MiB
tc1
invalid
the recipe as it is - the game's whole run 45.0--- 39.235.036.6
tc1nowm
invalid
the recipe as it is - the game's whole run 44.6--- 39.938.038.0

Observations: 20:06-20:27Z, OpenArena (openarena-tc1, tc1nowm, oa-tc1) and one ClassiCube run. client.sh now starts Openbox (wm.log present). 8baa747 (always send the unmute) was committed at 19:13Z; whether it was installed for these runs is not recorded. The remaining bug, a new X after the last one quit starting muted, was fixed in a1f1b91 at 20:35Z, after these runs, so the screen was presumably still black and the numbers are not valid: OpenArena tc1 45.0 fps and 44.6 for tc1nowm with longest frames of 1.9-2.6 s, ClassiCube 45 (HUD median). The validated numbers are in the next row.

Stage 0 first games/bench runs (ps3rsx before a1f1b91; black screen)

2026-10-16 · batch 2026-10-16-stage0-first · 11 runs in the batch (all games)

Invalid: a black screen (ps3rsx before a1f1b91), so the frame rates are not of a shown picture.

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
ram_free
MiB
vram
MiB
tc1
invalid
the recipe as it is - the game's whole run 51.1--- 40.538.739.4
tc1nowm
invalid
the recipe as it is - the game's whole run 50.3--- 38.437.438.0

Observations: 17:49-18:04Z, the first OpenArena runs through games/bench client.sh (openarena-tc1 and tc1nowm, kernel .178, Mesa ps3.186) interleaved with old-harness oa-tc1 runs, then glxgears under X on vt1 and vt2. No wm.log in these runs: no window manager was started, so SDL's fullscreen request went unanswered, and the desktop and bench screens stayed black (ps3rsx muted the video for X sessions after the first; 8baa747 records X rendering fine and a forced DPMS cycle showing the picture). The frame rates (openarena tc1 51.1 and tc1nowm 50.3) are therefore not valid. glxgears ran at 58.1 and 59.9 fps (vsync) on vt1 and 59.7 and 59.9 on vt2 and left no cell. The load column of the games/bench runs varies from 10.1 to 19.0 s; the harness's load regex was fixed afterwards (ac08e38, 'takes its padded seconds'), so these load values may be misparsed.

libspeq SPU DXT1 encoder 0.210 (Mesa ps3.186; nothing on screen)

2026-10-16 · batch 2026-10-16-speq-spu-dxt1 · 14 runs in the batch (all games)

Invalid: nothing reached the screen, so the frame rates are not of a shown picture.

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
ram_free
MiB
tc0
invalid
the recipe as it is Mesa ps3.186 the game's whole run 49.1--- 35.527.3
tc1
invalid
the recipe as it is Mesa ps3.186 the game's whole run 52.7--- 35.328.6
tc1debug
invalid
the recipe as it is Mesa ps3.186 the game's whole run 54.4--- 35.328.7

Observations: 17:03-17:18Z, libspeq0 0.210 with the SPU DXT1 encoder (888b0fe), SPEQ_S3TC=auto, Mesa ps3.186, VRAM swap on. dxt-check passes (100 images on the SPEs and 3 on the PPE equal the reference byte for byte, a faulting job is redone on the PPE, 0 failures); dxt-bench 1173 Mpixel/s hot on six SPEs for 1024x1024 against 6.7 on the PPE; gl-dxt through glTexImage 352 Mpixel/s against 6.5 with the PPE encoder, blocks still sample within 1. OpenArena 5 tc0/tc1 pairs: load 13.84 s [13.70..15.74] uncompressed against 13.63 s [13.45..15.39] compressed, so compression no longer costs load; fps 49.1 and 52.7; game VRAM 51.7 to 37.5 MB (survey); the debug run (SPEQ_DEBUG=1, tc1debug) shows 1476 compressions per level load, 254 on the SPEs with 0 failures. One tc0 run at 39.6 fps and 3.2 s longest frame is an outlier. Nothing on screen, so fps are invalid; load, VRAM and the SPU results stand (9f7100e).

libspeq PPE DXT1 encoder in Mesa ps3.186 (kernel .178; nothing on screen)

2026-10-16 · batch 2026-10-16-speq-ppe-dxt1 · 10 runs in the batch (all games)

Invalid: nothing reached the screen, so the frame rates are not of a shown picture (load times and VRAM are valid).

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
ram_free
MiB
tc0
invalid
the recipe as it is Kernel ps3.178, Mesa ps3.186 the game's whole run 49.9--- 35.326.9
tc1
invalid
the recipe as it is Kernel ps3.178, Mesa ps3.186 the game's whole run 53.0--- 35.828.4

Observations: 15:43-15:55Z, kernel .178, Mesa ps3.186 with the hook that calls libspeq's van Waveren DXT1 encoder on the PPE (patch 0011, 1083758), VRAM swap on, 5 tc0/tc1 pairs. tc0 49.9 fps with load 13.68 s [13.66..13.87]; tc1 53.0 fps with load 14.16 s [14.08..14.68], so compression now costs +0.5 s of load instead of +1.5 s; longest frame 956 against 1008 ms (medians), no hitch. Game VRAM 51.6 to 37.5 MB (survey). Nothing on screen, so fps are invalid but load, VRAM and the encoder comparison do not depend on the display. Basis for shipping r_ext_compressed_textures 1 (7423f5b). The survey also has this encoder at 6.5 Mpixel/s through glTexImage against 2.6 for Mesa's.

Step 0: OpenArena perf profiles A/B/C (nothing on screen)

2026-10-16 · batch 2026-10-16-step0-perf · 3 runs in the batch (all games)

Invalid: nothing reached the screen, and the runs recorded perf profiles.

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
ram_free
MiB
profA
invalid
the recipe as it is - the game's whole run 57--- 51.739.6
profB
invalid
the recipe as it is - the game's whole run 57--- 53.145.0
profC
invalid
the recipe as it is - the game's whole run 57--- 52.638.0

Observations: 15:21-15:26Z, oa-profile.sh runs of sound variants A, B and C with perf recording (CPU 52-53 s against 35 s in the plain runs, so the CPU and fps cells are not comparable; fps here is the Gallium HUD median 57). Nothing on screen. The profiles left OpenAL's mixer thread as [unknown] (SPU-AUDIO.md), so they could not say how much of the 10% sound cost is the mixer; the M0 re-profile with matching debug symbols came on 2026-10-17.

Step 0: OpenArena sound variants A/B/B22/C/Z (nothing on screen)

2026-10-16 · batch 2026-10-16-step0-sound · 15 runs in the batch (all games)

Invalid: nothing reached the screen, so the frame rates are not of a shown picture.

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
ram_free
MiB
sndA
invalid
the recipe as it is - the game's whole run 49.7--- 35.228.6
sndB
invalid
the recipe as it is - the game's whole run 49.8--- 37.329.6
sndB22
invalid
the recipe as it is - the game's whole run 50.0--- 37.328.2
sndC
invalid
the recipe as it is - the game's whole run 50.0--- 33.328.4
sndZ
invalid
the recipe as it is - the game's whole run 55.3--- 26.235.7

Observations: 15:03-15:20Z, same versions, VRAM swap on, 3 interleaved runs per variant. A stock OpenAL 49.7 fps; B (OpenAL int16 with a linear resampler) 49.8; B22 (the same at 22 kHz) 50.0; C (the game's own mixer, s_useOpenAL 0) 50.0; Z (sound off) 55.3 fps, level load 11.9 s against 13.8-14.1 s, about 7 MB more MemAvailable. Reading in the survey: sound costs about 10% of the frame rate and no OpenAL setting helps. Caveats found later (SPU-AUDIO.md): B also switched on OpenAL's output limiter and dither, and B22 probably still ran at 48 kHz. Nothing was on screen, so the absolute fps are invalid; the sound-on against sound-off difference was not repeated with the picture on screen in these run directories.

Step 0: OpenArena tc0/tc1 on Mesa ps3.152 (VRAM swap on; nothing on screen)

2026-10-16 · batch 2026-10-16-step0-vswap-on · 6 runs in the batch (all games)

Invalid: nothing reached the screen, so the frame rates are not of a shown picture.

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
ram_free
MiB
tc0
invalid
the recipe as it is Mesa ps3.152 the game's whole run 48.8--- 35.631.4
tc1
invalid
the recipe as it is Mesa ps3.152 the game's whole run 52.4--- 36.625.3

Observations: Same harness and versions as the previous row, VRAM swap on (ps3vswap0 listed in the pre-run snapshots from 14:55Z), 3 tc0/tc1 pairs. Nothing on screen, so the frame rates are invalid as above. tc0 48.8 fps with load 14.02 s [13.94..14.63]; tc1 52.4 fps with load 15.14 s [15.10..15.70], one tc1 run with a 4.4 s longest frame. These three pairs are the survey's VRAM-swap-on table: Mesa's encoder costs +1.1 s of load and hitches in play, so tc1 was not shipped on it.

Step 0: OpenArena tc0/tc1 on Mesa ps3.152 (VRAM swap off; nothing on screen)

2026-10-16 · batch 2026-10-16-step0-vswap-off · 14 runs in the batch (all games)

Invalid: nothing reached the screen (no window manager, and ps3rsx left the video muted), so the frame rates are not of a shown picture.

VariantConditionsBuildResolutionLength fps
whole run
Steady fps
in the window
1% low
fps
Stalls
frames over 100 ms
cpu
seconds
ram_free
MiB
tc0
invalid
the recipe as it is Mesa ps3.152 the game's whole run 49.8--- 35.526.4
tc1
invalid
the recipe as it is Mesa ps3.152 the game's whole run 51.6--- 36.827.8

Observations: Run times are UTC (local is UTC+3). 2026-10-16 14:39-14:55Z, kernel .163, Mesa 26.2.4-1+ps3.152 with Mesa's own DXT1 encoder, OpenArena timedemo through the old ps3-bench.sh x harness, VRAM swap off. Nothing reached the screen (no window manager, and ps3rsx left the video muted for every X after the first until a1f1b91), so the frame rates are not valid measurements of a shown picture; kept as history. Runs: gl-dxt (the first DXT ever sampled on the RSX: blocks sample within 1 of the decoded value, no graph exception; Mesa's encoder 2.6 Mpixel/s, RMSE 29.7), glxinfo (NV47, 245 MB video memory, GL 2.1 compat), the first OpenArena launch (tc0 settings, 49.6 fps, load 14.3 s) and 5 tc0/tc1 pairs. tc0 49.8 fps (6 runs) with level load 13.98 s [13.51..14.37]; tc1 (r_ext_compressed_textures 1) 51.6 fps (6 runs, the very first tc1 run 43.1 fps with a 3.3 s longest frame) with load 15.50 s [14.99..15.98]: Mesa's PPE encoder adds about 1.5 s of load. The survey puts the game's VRAM at 51.7 MB against 40.3 MB with compressed textures.