Issues / #2361

#2361 gfx1100 (RX 7900 XTX): measurements of the two new default-ON 0.1.44 paths — STRATA_COMMIT_BATCH (sub-noise here) and the arena huge-page gate (never fires on a normal restart)

open · @xyzzing · 0 comentários · No GitHub

BenchmarksSetup & installAMD / HIPModels & quants

Descrição

0.1.44 turned two behaviours on by default that are on the gfx1100 (RDNA3) path, and neither carries a gfx1100 number: the batched commit graph (`STRATA_COMMIT_BATCH`, measured in 6f3e3810 on gfx1201) and the expert-arena huge-page gate (`src/core/pinned.cu`, the fix from #2126). Since this box runs a gfx1100 port (fork `xyzzing/Strata`, branch `refresh-0144` = v0.1.44.1 + the fork's replayed commits) as its daily driver, I measured both. Short version: **both defaults are safe here, and neither shows a measurable steady-state effect.**

**Setup.** Engine `0.1.44.1-7d4356d7`, RX 7900 XTX (gfx1100), Ryzen 9 7900X, 96 GB DDR5, ROCm 10.2 nightly SDK. Production-shaped args and env (IQ3_S native pack, `--kv int8`, `--spec 5`, `--prefill 8192`, `--expert-cache auto`, `--lookup-chain 2`, `STRATA_ROUTE_TAIL_SKIP=7`, `STRATA_SELECT_WMMA/HIP_WMMA/SH_STREAM=1`). Arms: shipped defaults; `STRATA_COMMIT_BATCH=0`; `STRATA_ARENA_THP=1`; `STRATA_NO_ARENA_THP=1`; both. Cells: 1K x4 and 128K x2 per arm, interleaved and reversed, one engine per cell, production stopped for the window.

**Metric.** Decode tok/s is not usable for this: it equals tokens-per-round / ms-per-round, and tokens-per-round follows speculative acceptance, which follows the trajectory (in the immediately preceding window on one binary, two 1K cells read 2.53 vs 2.87 tokens/round -> 65.53 vs 90.79 tok/s, 38%). I gate on **ms per verify round**, and check the window-size mix — because that mix moves it too (see below).

**1. `STRATA_COMMIT_BATCH` — no measurable effect on gfx1100.**

The 1K cells fall into exactly two trajectory states, and the mix alone swings ms/round ~10%:

| state | rounds | tok/round | window mix | acc | ms/round |
|---|---|---|---|---|---|
| T3-heavy | 94 | 2.72 | T3:69 T5:3 | 0.976 | ~28.2 |
| T5-heavy | ~90 | 2.87 | T5:35 T3:7 | 0.792 | ~31.2 |

The naive median over all four reps reads +5.11% for `=0`, but that compares different mixes. **At matched mix the arms are indistinguishable:**

- 1K T3-heavy: base (batch on) 28.21 / 28.25 / 28.25 vs `=0` 28.14 / 28.27
- 128K: base 35.97 / 36.16 vs `=0` 35.83 / 35.90; prefill 2152.4 vs 2151.1 tok/s

So the batched commit is not a regression here, and the 1.7 ms commit-graph saving from 6f3e3810 does not surface as a measurable share of a ~28–36 ms verify round on this card. That is a bound (sub-noise), not a measured zero.

**2. The arena huge-page gate — it never fires on this box.**

The gate reads `free_huge_bytes()` from `/proc/buddyinfo` (order>=9) **at arena setup**, before the arena is allocated — so it sees the state *after* the previous instance freed its memory, not the state while an engine runs. On this host the consequence is that the restrictive branch is essentially never taken:

- recent era (the 0.1.43.1 and 0.1.44.1 production lines, 15 sessions): **15/15 logged `transparent huge pages requested (MADV_HUGEPAGE)`**
- the gate-fired string `transparent huge pages NOT requested` occurs **0 times in the entire 75,438-line engine log**
- the 3 `using 4 KB pages` lines are at log lines 215/263/308, from long-superseded versions

So for a 96 GB box with a 46.84 GiB arena, the gate is insurance for the case #2126 describes (an overlapping start with memory still held), not something a normal restart hits. Measured consequence of the branch it would take, using `STRATA_NO_ARENA_THP=1` to force 4 KB:

- steady state, matched mix: 4 KB 31.22 / 31.30 ms/round vs THP 31.17 / 31.26 -> no difference; prefill @128K 2154.1 vs 2150.0 tok/s -> flat
- startup (load-dominated wall time): **+8 s at 1K (29/31 s vs 21 s)** and **+5 s at 128K (85 s vs 80 s)**

So the branch taken normally (THP) is the faster one, and the fallback costs a few seconds — cheap insurance, not a performance problem.

**Noise floor.** `STRATA_ARENA_THP=1` measured +1.13% ms/round while changing nothing at all in this window (base already got THP), and the forced-4 KB arm +1.27% while changing only the page strategy. So ±1.3% is this setup's resolvable floor, and every steady-state number above sits inside it.

**Not claimed.** I did not reproduce the #2126 compaction stall itself — it needs a machine where free 2 MiB blocks are below arena/2 at setup while still fitting the arena, which this measurement window cannot produce. All numbers are one binary on one host; no cross-engine claim.

Happy to re-run any arm, add reps, or hand over the raw per-cell logs and the A/B script if that is useful. Port notes, gate trail and records live in the fork's `GFX1100.md`.

No site

Links install, modelos, releases.