← N5 MAX dashboardDownload PDFNot yet measured
Minisforum N5 MAX · AI NAS · final benchmark report

N5 MAX: the final verdict

Five NVMe slots (four at PCIe Gen4 x1, one at Gen4 x4), a Ryzen AI Max+ 395 with 128 GB unified memory, and a seven-stage sealed campaign across ZFS, btrfs and mdadm, local LLM inference, a one-hour soak, USB ingest and drive-failure rebuilds. All figures come from sealed result.json files or the lab’s own report tooling, as of 2026-10-08.

Verdict. This is an AI box first and a fast NAS second. Make the pool ZFS RAIDZ1 5-wide: 14.11 TiB, 7.83 GB/s cold reads, 93.51 % of reads kept with a drive out, a 29-minute rebuild. btrfs raid5 and mdadm raid5 read faster when healthy (9.034 / 9.035 GB/s), but btrfs raid5 falls to 5.87 % degraded and still carries the upstream write hole. Inference speed does not depend on the pool once a model is resident. Expect roughly 0.7128–0.9715× of Minisforum’s published llama-bench floor.
7.83 GB/sRAIDZ1 5-wide cold seq read · 14.11 TiB
9.034 GB/sbtrfs raid5 cold seq read (fastest, tied with mdadm raid5 9.035)
93.51 %RAIDZ1 seq read kept with one drive out (btrfs raid5: 5.87 %)
×0.8976gpt-oss-120b tg128 vs vendor floor (53.23 vs 59.3 tok/s, HIP)

1 · Executive summary

Each headline finding below carries its evidence: stage, layout, test id and the run timestamp of the sealed case.

  1. Recommended default stays RAIDZ1 5-wide, and stage 7 now backs it.

    Degraded with one member out, RAIDZ1 still read 93.51 % of healthy sequential throughput and resilvered in 1,740 s at 1.1656 GB/s. btrfs raid5 fell to 5.87 % and took 3,720 s at 0.5498 GB/s.

    S7 · zfs-raidz1 / btrfs-raid5 · STO-09 STO-01_seq_read_1M_j4 · runs 2026-09-24-19.58 / 2026-09-24-05.07
  2. Fastest measured is now a tie: btrfs raid5 and mdadm raid5 (cold seq read).

    btrfs raid5 9.034 GB/s at 14.43 TiB, mdadm+ext4 raid5 9.035 GB/s at 14.41 TiB. Both are on the capacity × cold-read Pareto frontier from the lab’s Pareto tool. RAIDZ1 5-wide reads 7.83 GB/s (1.154× behind btrfs raid5).

    S5 · btrfs-raid5 / mdadm-ext4-raid5 · STO-01_seq_read_1M_j4 · runs 2026-09-14-13.57 / 2026-09-25-18.53
  3. The “mdadm is 8× slower” anomaly is resolved: it was a link fault, not mdadm.

    SN1 had trained at Gen1 2.5 GT/s x1 in every original mdadm cell (#72), which pinned seq read at 1.14 GB/s. The reruns at Gen4 read 9.035 GB/s.

    S5 · mdadm-ext4-raid5 · STO-01_seq_read_1M_j4 · run 2026-09-25-18.53 (superseded 2026-09-15-00.41)
  4. mdadm parity writes fast in sequence but collapses on 16K random writes.

    mdadm raid5 has the highest cold sequential write (5.04 GB/s vs btrfs raid5 4.066), but only 2,489 IOPS on 16K random writes vs btrfs raid5 22,981. That is partial-stripe read-modify-write. mdadm raid6 is the same: 2,313 IOPS.

    S5 · mdadm-ext4-raid5 · STO-01_seq_write_1M_j4, STO-02_rand_write_16k_j4 · run 2026-09-25-18.53
  5. The ZFS-vs-btrfs write gap in the FS controls is a drive-state effect, not a filesystem verdict.

    The ZFS stage-1 cells fully preconditioned their members before measuring, and the btrfs fs-control cells did not (per the lab’s backend notes). There btrfs raid5 wrote 4.066 GB/s vs RAIDZ1 0.718. Under STO-09 S1 (same protocol, file-on-FS, both after the same 50 % incompressible fill) RAIDZ1 wrote 4.499 GB/s and btrfs raid5 2.78 GB/s.

    S7 S1 · zfs-raidz1 / btrfs-raid5 · STO-01_seq_write_1M_j4 · runs 2026-09-24-19.58 / 2026-09-24-05.07
  6. The four x1 slots tax sequential work about 3×, but barely touch random and sync work.

    One NM790 at x4 vs x1: seq read 5.888 vs 1.8 GB/s (3.27×), 4K random read 41,318 vs 35,116 IOPS (1.18×), sync 16K 1,398 vs 1,283 (1.09×). One x1 drive reaches 91 % of the 1.969 GB/s lane.

    S1 · single-x1 / single-x4 · STO-01, STO-02, STO-04 · runs 2026-09-13-13.00 / 2026-09-12-19.42
  7. ZFS RAID10 is the sync-write layout; RAIDZ1 pays for parity on sync.

    Cold sync 16K: RAID10 1,675 IOPS vs RAIDZ1 415. primarycache=metadata does not help sync (RAIDZ1 256), but it lifts 4K random reads by 50.2 % on RAIDZ1 and 58.7 % on RAID10.

    S1/S2 · raid10 / raidz1 · STO-04_sync_write_16k_j4, STO-02_rand_read_4k_j4 · runs 2026-09-13-15.49 / 2026-09-13-17.14
  8. Once a model is resident, the pool does not matter for inference.

    Gemma 4 26B tg128 is 50.15 tok/s on btrfs and 50.08 on ZFS. Qwen3.8-27B (gufo-model-bench) decodes 12.44 tok/s from btrfs cold and 12.34 from ext4 warm. Pools differ only in cold load (5.035 s vs 6.758 s for Gemma).

    S3 · btrfs raid5 / ZFS RAIDZ1 · AI-01 card + load rail · runs 2026-09-22-06.02 / 2026-09-23-04.57
  9. We sit below the Minisforum vendor floor on all 16 comparisons.

    Ours ÷ floor ranges from 0.7128 to 0.9715. gpt-oss-120b HIP is 0.8562 (pp512) and 0.8976 (tg128). Decode on Gemma 4 and Qwen3.5-122B is the furthest behind (0.7128, 0.7252 HIP). The vendor states no conditions beyond ngl 99 and FA on.

    S3 · btrfs raid5 · AI-01 vendor group · run 2026-09-23-15.03
  10. Vulkan decodes faster, HIP prefills faster, and Vulkan loads much slower.

    Across the four floor models, Vulkan tg128 is 1.062–1.107× HIP and HIP pp512 is 1.038–1.082× Vulkan. Vulkan cold load takes 1.34–5.22× as long (gpt-oss-120b 49.375 s vs 11.256 s).

    S3 · btrfs raid5 · AI-01 vendor group + load rail · HIP/Vulkan cells
  11. Streaming models larger than memory is a load-time story, and ZFS loses it.

    Kimi K2 (streamed) cold load took 38.334 s on btrfs vs 181.147 s on ZFS (primarycache=all). Decode is unusable either way: 1.09 / 1.55 tok/s.

    S3 · btrfs raid5 / ZFS RAIDZ1 · AI-01 kimi-k2 streamed · runs 2026-09-29-03.21 / 2026-09-29-13.35
  12. Thermals are a non-issue for an hour of sustained work.

    In the 1-hour RAIDZ1 soak, mixed 70/30 held 0.886 GB/s and was steady, with drives peaking at 59.85 °C and the SoC at 52.0 °C. The sequential-write soak (1.178 GB/s) was not steady.

    S4 · raidz1 · SOAK-02_mixed_70r30w_16k_j4 · run 2026-09-12-14.31
Standing positions: where they moved Fastest measured was btrfs raid5 alone; it is now a tie with mdadm raid5. The mdadm reruns removed the link fault that hid it. Recommended default stays RAIDZ1, now with degraded and rebuild evidence behind it. “mdadm 8× slower” is withdrawn: #72 traced it to SN1 at Gen1; #55 is effectively answered. btrfs raid5/6 write hole: unchanged. #59 was never run (stage 8 deferred), so the upstream caveat stands as is.

2 · Setup & method

Platform

Minisforum N5 MAX (Ryzen AI Max+ 395, Radeon 8060S iGPU, 128 GB LPDDR5X unified memory). Five 4 TB Lexar NM790 NVMe drives, labelled SN1–SN5. SN1–SN4 sit on Gen4 x1 links (1.969 GB/s each) and SN5 on Gen4 x4 (7.88 GB/s). The NM790 is DRAM-less (HMB) and has no power-loss protection. Five 3.5″ SATA bays hang off a JMB58x bridge on a shared Gen3 x2 uplink; they were not benchmarked. The box has 2×10GbE.

Campaign

Stage 1/2: ZFS layouts in cold (primarycache=none) and metadata regimes. Stage 3: 21 AI cells. Stage 4: one-hour soaks. Stage 5: btrfs and mdadm+ext4 controls, cold and warm. Stage 6: USB. Stage 7: drive failure and rebuild (STO-09). Stage 8: write-hole, deferred.

Rules applied in this report

Storage claims use Protocol B cases (derived durations; params.protocol starting with B-) and the lab selector’s published case per subject (the lab’s publish selector). Non-steady cases (rails.steadiness.steady == false) are drawn hatched or flagged red. PROVISIONAL (≥2× spread against the subject’s own history) and RUN SUPERSEDED figures are marked and never carried into a conclusion. deprecated-fixed60, preliminary-omega, calibrate-mode cells and link-downtrained runs are excluded.

Regimes. Cold (ZFS primarycache=none, or dropped caches) is the layout story. Metadata and warm are separate regimes. Warm sequential reads converge on the DRAM ceiling (35.685–36.74 GB/s whatever the layout), so they are not layout evidence.

Access method. ZFS stage 1/2 random, mixed and sync tests ran on zvols; btrfs and mdadm ran on files. Random IO is compared within a stack only. Sequential STO-01 is file-on-FS everywhere.

Selector accounting at build time: 252 run directories, 964 published subjects. Case verdicts: VOID 250, PASS 1428, FAIL 127, UNMEASURED 37. Coverage of the campaign matrix:

Campaign matrix cells and whether a sealed result.json backs them. Stage-7 “failed” = arms whose S4 write return failed the harness rule, not crashed cells.
stagesealedno result.jsonlostmatrix status
Stage 11300passed 13
Stage 21000passed 10
Stage 32100passed 21
Stage 4200passed 2
Stage 51200passed 12
Stage 6001passed 1
Stage 71000passed 3, failed 7
Stage 8000deferred (write-hole, #59)

3 · Storage findings

3.1 Layouts: the tradeoff compass

Plotting capacity against cold sequential read shows the whole decision on one chart. The parity layouts on all five drives cluster at the top. With SN5 at x4 they read 9.0 GB/s (btrfs raid5/6, mdadm raid5/6) and 8.911 GB/s (RAIDZ2). RAIDZ1 sits a step lower at 7.83 GB/s with the second-highest usable capacity of any candidate (14.11 TiB, against 14.43 TiB for btrfs raid5). The mirrors pay half the raw capacity: ZFS RAID10 holds 6.71 TiB at 7.024 GB/s.

Tradeoff compass: capacity × cold sequential readCold regime (primarycache=none / dropped caches), Protocol B published cases. Bubble area = cold seq write 1M×4.Filled = steady on both axes; ring = control layout, not a candidate. ZFS cells were fully preconditioned, btrfs/mdadm cells not: seq write differs by drive state (see STO-09 S1).0246810seq read 1M ×4, GB/s (cold)024681012141618usable capacity, TiBZFS RAID10 · 4× x16.71 TiB · 7.024 GB/s · wr 0.894ZFS RAIDZ1 · 5-wide14.11 TiB · 7.83 GB/s · wr 0.718ZFS RAIDZ2 · 5-wide10.21 TiB · 8.911 GB/s · wr 0.961btrfs raid10 · 4× x17.08 TiB · 3.616 GB/s · wr 2.372btrfs raid5 · 5-wide14.43 TiB · 9.034 GB/s · wr 4.066btrfs raid6 · 5-wide10.71 TiB · 9.026 GB/s · wr 2.72mdadm raid10 · 4× x17.02 TiB · 7.223 GB/s · wr 2.521mdadm raid5 · 5-wide14.41 TiB · 9.035 GB/s · wr 5.04mdadm raid6 · 5-wide10.71 TiB · 9.029 GB/s · wr 3.451ZFS RAID0 · control17.85 TiB · 8.695 GB/s · wr 1.897ZFS mirrorRAIDZbtrfsmdadm+ext4Pareto frontier (capacity × cold seq read; candidates only):mdadm raid5: 14.41 TiB / 9.035 GB/sbtrfs raid5: 14.43 TiB / 9.034 GB/s
Capacity × cold sequential read; bubble area is cold sequential write. Pareto frontier computed the same way as the lab’s Pareto tool. RAID0 is a control.
Anomaly kept on the recordbtrfs raid10 reads only 3.616 GB/s cold, against 7.223 for mdadm raid10 on the same four x1 drives. Two ramp replicates (30 s and 210 s) reproduce it. The likely cause is btrfs raid10 read-mirror selection (PID-based, so a single reader stays on one mirror). That is unproven here; see gaps.

3.2 Every layout, six workloads

Small multiples: every cold layout, six workloadsProtocol B published cases, cold regime. Hatched = non-steady (rails.steadiness). ⚠ = PROVISIONAL (≥2× spread vs own history).ZFS random/mixed/sync ran on zvols, btrfs and mdadm on files: compare random IO within a stack, not across. Seq read/write (STO-01) is file-on-FS everywhere.Seq read 1M ×4GB/sZFS RAID107.024ZFS RAIDZ17.83ZFS RAIDZ28.911btrfs raid103.616btrfs raid59.034btrfs raid69.026mdadm raid107.223mdadm raid59.035mdadm raid69.029ZFS RAID08.695single SN11.8single SN55.888Seq write 1M ×4GB/sZFS RAID100.894ZFS RAIDZ10.718ZFS RAIDZ20.961btrfs raid102.372btrfs raid54.066btrfs raid62.72mdadm raid102.521mdadm raid55.04mdadm raid63.451ZFS RAID01.897single SN10.641single SN51.328Rand read 4KIOPSZFS RAID10115,855ZFS RAIDZ167,044ZFS RAIDZ281,540btrfs raid10555,448btrfs raid5573,194btrfs raid6573,937mdadm raid10575,998mdadm raid5530,451mdadm raid6514,941ZFS RAID0121,060single SN135,116single SN541,318Rand write 16KIOPSZFS RAID1051,195ZFS RAIDZ130,495ZFS RAIDZ210,912btrfs raid1035,553btrfs raid522,981btrfs raid622,066mdadm raid1026,508mdadm raid52,489mdadm raid62,313ZFS RAID059,950single SN116,762single SN547,112Mixed 70/30 16KIOPSZFS RAID10104,485ZFS RAIDZ1757 ⚠ZFS RAIDZ227,755btrfs raid1088,085btrfs raid548,472btrfs raid644,116mdadm raid1078,582mdadm raid5106,552mdadm raid617,213ZFS RAID0107,686single SN122,478single SN529,634Sync write 16KIOPSZFS RAID101,675ZFS RAIDZ1415ZFS RAIDZ2428btrfs raid102,153btrfs raid51,365btrfs raid61,183mdadm raid10323mdadm raid5934mdadm raid62,256ZFS RAID02,267single SN11,283single SN51,398
Small multiples of the cold published cases. Within a stack, read across a row; across stacks, compare only the seq-read and seq-write panels (file-on-FS everywhere).

Three patterns hold up. (1) Every parity layout reaches 9.0 GB/s sequential reads once SN5’s x4 lane is a member. The x1 members are the limit, not the filesystem. (2) Sync writes favour mirrors on ZFS (RAID10 1,675 vs RAIDZ1 415 IOPS). On files they favour btrfs over mdadm raid10 (2,153 vs 323). (3) mdadm parity is a sequential-write specialist: highest seq write (5.04 GB/s), worst 16K random write (2,489 IOPS).

RAIDZ1 cold mixed 70/30 (757 IOPS) is PROVISIONAL: its own prior good value was 14,582 IOPS, a 19× spread (lab storage report). Do not quote it.

3.3 Cold vs metadata

Cold vs metadata: the cache regime changes the storyZFS primarycache=none → primarycache=metadata, same pool, same members. Random 4K reads lift; sync writes do not.Hollow end = non-steady by rails.steadiness. Random/sync on ZFS run on zvols. Source: Protocol B published cases.seq read 1M ×4 (GB/s)coldmetadata8.9119.028 RAIDZ2 5w8.6958.979 RAID0 ctrl7.838.215 RAIDZ1 5w7.0247.221 RAID105.8886.201 single x41.81.808 single x1rand read 4K (IOPS)coldmetadata121,060185,497 RAID0 ctrl115,855183,883 RAID1081,540122,097 RAIDZ2 5w67,044100,690 RAIDZ1 5w41,31868,879 single x435,11662,656 single x1sync write 16K (IOPS)coldmetadata2,2672,243 RAID0 ctrl1,6751,792 RAID101,3981,337 single x41,2831,279 single x1428368 RAIDZ2 5w415256 RAIDZ1 5w
Same pool, same members; only the ARC policy changes.

primarycache=metadata keeps the indirect blocks in ARC, so random reads stop paying for metadata fetches. 4K random read rises 50.2 % on RAIDZ1 and 58.7 % on RAID10. Sync writes do not improve, and on RAIDZ1 they fall (415 → 256 IOPS). Sequential reads barely move. Production pools would normally run primarycache=all, which is warmer still, so the cold numbers here are a floor.

3.4 The x1 lane tax

The x1 lane tax: one NM790 on Gen4 x1 vs Gen4 x4Same drive model, ZFS single-drive pool, cold. Ratio x4 ÷ x1 per test; the dashed line is the 4.0× lane-bandwidth ratio.Sequential work pays the lane tax; small-block random and sync work is drive-bound, so the four x1 slots cost little there.1×2×3×4×lane ratio 7.88 / 1.969 = 4.0×seq read 1M ×41.8 → 5.888 GB/s3.27×seq write 1M ×40.641 → 1.328 GB/s2.07×rand write 16K16,762 → 47,112 IOPS2.81×rand read 4K35,116 → 41,318 IOPS1.18×rand write 4K14,114 → 20,551 IOPS1.46×sync write 16K1,283 → 1,398 IOPS1.09×mixed 70/30 16K22,478 → 29,634 IOPS1.32×
Single-drive pools, cold. The lane ratio is 4.0×; only sequential work comes near it.

One x1 drive reads 1.8 GB/s, 91 % of its 1.969 GB/s lane, and ZFS RAID10 over four x1 drives reads 3.90× that. So the striping works, and the lanes are the ceiling. Small-block random and sync IO are bound by the drive’s controller and flash, not the link. The four x1 slots are therefore a sequential-bandwidth tax, not a responsiveness tax.

3.5 ZFS vs btrfs vs mdadm

Healthy sequential. On the fs-control battery, btrfs raid5 out-reads RAIDZ1 (9.034 vs 7.83 GB/s at j4; 9.033 vs 6.748 at j1) and out-writes it by 5.66× (4.066 vs 0.718). That write gap does not survive a like-for-like test. STO-09 S1 runs the same file-on-FS protocol on both after the same 50 % incompressible fill. There RAIDZ1 wrote 4.499 GB/s and btrfs raid5 2.78. Reads kept their order: RAIDZ1 7.434 vs btrfs 9.045 GB/s.

The likeliest explanation is NM790 write state. The ZFS stage-1 cells fully wrote their zvols and benchmark file before measuring. The btrfs fs-control cells got no equivalent preconditioning (mkfs.btrfs takes seconds), as the lab notes in its backend code. The soak and stage-7 control show this drive slows sharply once its SLC cache is spent (§3.7, §6). The fs-control seq-write gap therefore compares different drive states, not filesystems.

Random IO cannot be ranked across stacks from this campaign: ZFS used zvols (volblocksize-bound), btrfs and mdadm used files. In STO-09 S1, ZFS 4K random reads on a recordsize=1M dataset ran at 0.033 GB/s against btrfs 2.226 GB/s. That is mostly whole-record read amplification of 1M records. It is a tuning artefact, and the reason a VM or database dataset needs a small recordsize or a zvol.

3.6 Write amplification

Write amplification on the physical railSeq write 1M ×4, cold. Pool/device counters ÷ fio logical bytes. Diamond = geometric expectation (mirror 2.0, 5-wide single parity 1.25, 5-wide double parity 1.667).Measured amplification tracks geometry; raid6 on btrfs/mdadm sits slightly above the 1.667 expectation (partial-stripe RMW).1×1.25×1.5×1.75×2×ZFS RAID102.006×logical 0.894 GB/sbtrfs raid102.002×logical 2.372 GB/smdadm raid101.999×logical 2.521 GB/sZFS RAIDZ1 5w1.245×logical 0.718 GB/sbtrfs raid51.255×logical 4.066 GB/smdadm raid51.25×logical 5.04 GB/sbtrfs raid61.764×logical 2.72 GB/smdadm raid61.716×logical 3.451 GB/sZFS RAIDZ2 5w1.679×logical 0.961 GB/s
Physical rail (pool or device counters) ÷ fio logical bytes for seq write 1M ×4.

Every layout amplifies writes by what its geometry predicts: mirrors 2.006× (ZFS), 2.002× (btrfs), 1.999× (mdadm); 5-wide single parity 1.245× / 1.255× / 1.25×. Double parity sits slightly above the 5/3 expectation on btrfs (1.764×) and mdadm (1.716×), and close to it on RAIDZ2 (1.679×). For endurance on a no-PLP, DRAM-less drive, RAIDZ1 writes 38 % fewer flash bytes per logical byte than a ZFS mirror.

3.7 Degraded, rebuild and the write return (stage 7)

Fail one drive: degraded throughput, rebuild, and the returnSTO-09, 50 % fill, file on FS. ● degraded idle S2 · ◆ rebuilding S3 (% of healthy ref = better of S1/S4) · ○ healthy-again S4 (% of S1; FAIL = >10 % below).Every arm's reads came back (S4 seq read 93.17–112.7 %). The S4 seq-write shortfall is partly drive write-state: a no-failure control returned 66.58 % / 67.71 % of S1 (n=2).Seq read 1M ×40%25%50%75%100%93.51102.8197.11102.8859.55101.7671.19112.75.8795.265.8793.175.8694.785.8696.0Seq write 1M ×40%25%50%75%100%64.2839.3273.8847.0478.6546.9591.4192.7598.03109.28100.2686.04106.5375.45117.9432.67ZFS RAIDZ129 min @ 1.1656 GB/s · FAILZFS RAIDZ1 · loaded26 min @ 1.3828 GB/s · FAILZFS RAIDZ228 min @ 1.186 GB/s · FAILbtrfs raid1046 min @ 0.7316 GB/s · PASSbtrfs raid562 min @ 0.5498 GB/s · PASSbtrfs raid5 · loaded58 min @ 0.6163 GB/s · FAILbtrfs raid5 · x4 victim43 min @ 0.7891 GB/s · FAILbtrfs raid6106 min @ 0.3207 GB/s · FAILrebuild time
STO-09 per arm. The control rows are in the appendix table. Loaded arms ran fio during the rebuild.

Reads with a drive out. ZFS reconstructs from parity at nearly full speed: RAIDZ1 93.51 %, loaded 97.11 %, RAIDZ2 59.55 %. btrfs raid5 and raid6 collapse to about 0.53 GB/s (5.87 % / 5.86 %), whichever member failed, including the x4 SN5 (5.86 %). btrfs raid10 keeps 71.19 %.

Rebuild. ZFS resilvers only allocated blocks, at 1.1656–1.3828 GB/s (29–28 min at 50 % fill). btrfs replace ran 0.5498 GB/s on raid5 (62 min) and 0.3207 GB/s on raid6 (106 min). The replacement received its allocated-only share as predicted (observed/predicted 1.002 on zfs-raidz1, lab storage report).

The write return. All arms got their reads back (S4 93.17–112.7 % of S1). Every ZFS arm and btrfs raid6 failed the harness’s S4 write test (more than 10 % below S1): RAIDZ1 39.32 %, RAIDZ2 46.95 %, btrfs raid6 32.67 %.

The preregistered no-failure control ran the same sequence with no failure and no rebuild. It returned 66.58 % and 67.71 % of S1, with S4/S2 = 0.9986 / 1.0167. So roughly two-thirds of the S4 level is what these drives deliver after the write volume of S1–S2 alone. The extra loss in the failure arms (RAIDZ1 down to 39.32 %) is failure- or rebuild-specific by the preregistered rule.

The lab report places the knee at about 2.3–2.4 TB written per survivor. Idle and TRIM recovery rungs did not restore the rate. This is a drive write-state and endurance characteristic; it says nothing about data integrity either way.

btrfs raid5/6 data write holeUnmitigated upstream. -m raid1c3 protects metadata only. The lab’s write-hole harness (#59) was built but never run (stage 8 deferred; a sysrq blocker), so this campaign adds no data either way. Combined with the 5.87 % degraded read, btrfs raid5/6 is not recommended for data you cannot re-download.

3.8 Soak and thermals (stage 4)

One-hour soaks on RAIDZ1 and RAID0, metadata regime. RAIDZ1 mixed 70/30 held 0.886 GB/s (54,107 IOPS, steady). Drives peaked at 59.85 °C and the SoC at 52.0 °C. RAID0 mixed held 1.616 GB/s (steady, drives 60.85 °C). The sequential-write soaks were not steady: RAIDZ1 1.178 GB/s, RAID0 1.473 GB/s. That is the same post-cache write sag as in stage 7, not thermal throttling: drive temperatures stayed under 60 °C.

3.9 USB ingest (stage 6)

The campaign’s stage-6 STO-13 cell passed, but its result was lost: it was written to a tmpfs scratchpad that a host reboot wiped. The post-campaign variant STO-13b (a USB-attached NVMe ↔ RAIDZ1 5-wide, 200.74 GiB corpus, different OS image) recorded 905.6 MB/s reading from USB into the pool and 376.2 MB/s writing out (rsync including the sync drain). The pool was not the limit in either direction. The enclosure fell back from UAS to usb-storage, so treat these as a floor for this enclosure, not for the port. Integrity: 0 failures.

4 · AI findings

Stage 3 ran llama.cpp (HIP/ROCm and Vulkan/RADV) on 11 models, from a 0.6B smoke model to Kimi K2 streamed from disk. Most cells load from cold btrfs raid5; paired cells load from ZFS RAIDZ1 (primarycache=all, ARC cold at start). All 21 cells passed. The lab’s status table still lists 21 per-test rows as UNMEASURED (#67/#68). Full table in the appendix.

4.1 Throughput per model

Resident models (HIP, pp512 / tg128 tok/s): gpt-oss-20b 1,488.02 / 75.49; Gemma 4 26B-A4B 1,130.87 / 50.15; gpt-oss-120b 564.01 / 53.12; Qwen3.5-122B-A10B 308.21 / 22.97; dense Qwen3.8-27B Q4 332.94 / 12.59; DeepSeek V4 Flash IQ2_XXS 27.35 / 15.26. Streamed models are not interactive: DeepSeek V3.1 Q2 1.78 and Kimi K2 1.09 tok/s decode.

Ours vs the Minisforum vendor floorllama-bench pp512 / tg128, ngl 99, FA on, model on the cold btrfs raid5 pool. Vendor conditions beyond that are unstated; we add -lm dio.Gold = "Minisforum reports" (vendor product page, via the lab’s vendor-floor register). Teal = HIP (ROCm), violet = Vulkan (RADV). Label = our value and ratio to the floor.Prompt processing pp512 (tok/s)gpt-oss-20bHIP 1,514.0×0.961VK 1,408.8×0.8941,575.75Gemma 4 26B-A4BHIP 1,149.0×0.957VK 1,102.5×0.9181,200.58gpt-oss-120bHIP 572.6×0.856VK 551.8×0.825668.79Qwen3.5-122B-A10BHIP 306.3×0.965VK 283.1×0.891317.58Token generation tg128 (tok/s)gpt-oss-20bHIP 75.3×0.906VK 80.7×0.97283.09Gemma 4 26B-A4BHIP 50.1×0.713VK 55.5×0.78970.33gpt-oss-120bHIP 53.2×0.898VK 57.3×0.96759.3Qwen3.5-122B-A10BHIP 23.0×0.725VK 24.5×0.77031.76
Ours vs the Minisforum floor for the four models it publishes. Values in the appendix vendor table.

4.2 Cold load, resident, streamed

Cold model load: backend and placement beat layoutSeconds from cold cache to first token-ready (stage 3, AI-01 load rail). Pairs differ in one factor only.Streamed = mmap without full residency (model larger than practical GPU memory). All ZFS AI cells: primarycache=all, ARC cold at start; btrfs: page cache dropped.Layout: btrfs raid5 vs ZFS RAIDZ1btrfsZFSGemma 4 26B5.0s6.8s (1.34×)Qwen3-0.6B smoke2.0s3.1s (1.52×)DeepSeek V3.1 Q2 · streamed5.1s6.6s (1.28×)Kimi K2 IQ1 · streamed38.3s181.1s (4.73×)Backend: HIP vs Vulkan (same btrfs pool)HIPVulkangpt-oss-20b5.0s6.8s (1.34×)Gemma 4 26B5.0s10.7s (2.12×)gpt-oss-120b11.3s49.4s (4.39×)Qwen3.5-122B12.1s63.2s (5.22×)1s2s5s10s20s50s100s200sseconds, log scale
Load time pairs that differ in one factor. Log scale.

Resident. Layout is irrelevant to pp and tg. Gemma 4 on btrfs vs ZFS: 1,130.87 vs 1,136.82 pp512, 50.15 vs 50.08 tg128. Qwen3.8-27B decodes 12.44 tok/s off cold btrfs and 12.34 off a warm ext4 USB boot. Cold load is where pools differ, and only modestly for resident models: 5.035 s btrfs vs 6.758 s ZFS for Gemma. Backend matters more than layout: Vulkan cold loads take 1.34–5.22× as long as HIP on the same pool. Streamed models (larger than practical GPU memory, read via mmap with ~21× read amplification) load 4.73× slower from ZFS (Kimi K2), although decode stays at 1–2 tok/s either way.

The DeepSeek V3.1 streamed cell’s load-rate field (49.927 GB/s) is mmap-deferred bytes over wall time, not a pool rate. Its pool rail read 3.761 GB/s.

4.3 Prefill and decode with context

Long context: prefill falls off, decode holds betterLeft: pp at prompt length (HIP, cold btrfs, % of pp512). Right: qwen3.8-27B Q4 pp2048 vs context depth to 131k (gufo-model-bench).Right panel: ours = btrfs cold (stage 3) and ext4 warm (USB live boot, post-campaign); "Gufo reports" = the external reference rows. Same engine, same flags.20%40%60%80%100%5122k8k32kprompt tokens (log)Qwen3.8-27B Q4 86%Qwen3.5-122B 85%gpt-oss-120b 81%gpt-oss-20b 72%Gemma 4 26B 66%Llama-2-7B Q4_0 33%100150200250300350d04k16k64k128kcontext depth (log; d0 plotted at left edge)Gufo reports: d0 357.54 → 131k 135.95ours · btrfs cold: d0 329.8 → 131k 130.25ours · ext4 warm: d0 323.58 → 131k 130.18
Left: stage-3 prefill curves to 32k. Right: gufo-model-bench depth sweep to 131k for Qwen3.8-27B Q4.
Decode retention with context depth (tg128 at depth ÷ depth 0)Stage 3, cold btrfs, f16 KV cache. Solid = HIP, dashed = Vulkan. The fastest decoders lose the largest share as KV reads grow.Depths 0 / 8192 / 32768 / 55000 tokens. KV-cache quantisation (q8_0) was not run (#61).60%70%80%90%100%d08k32k54kQwen3.5-122B 86.8% (19.94 tok/s at 55k)Qwen3.8-27B 84.1% (10.55 tok/s at 55k)Gemma 4 26B 74.6% (37.32 tok/s at 55k)gpt-oss-20b 60.4% (45.28 tok/s at 55k)gpt-oss-120b 59.0% (31.24 tok/s at 55k)
Decode retention to 55k tokens, f16 KV.

Prefill holds within a few percent to 8k for the MoE models and drops to 457.82 tok/s at 32k for gpt-oss-120b (81 % of pp512). The dense Llama-2-7B falls hardest (432.08 tok/s at 32k, 33 %).

Decode at 55k keeps 86.8 % on Qwen3.5-122B but only 59.0 % on gpt-oss-120b (31.24 tok/s). The fastest decoders lose the largest share, because the per-token KV read is a bigger fraction of a fast token.

Stage-3 curves stop at 32k (prefill) and 55k (decode). The gufo-model-bench rows carry Qwen3.8-27B to 131,072 tokens: pp2048 329.8 → 130.25 tok/s.

KV-cache quantisation was not run. Every cell used f16 KV. There are no q8_0 rows (#61).

Speculative decoding (USB live boot, ext4, post-campaign, gufo DFlash2): Qwen3.8-27B tg128 rises from 12.34 to 22.68 tok/s on prose (1.84×). That is the largest single decode lever measured on this box for a dense model.

4.4 Which layout helps AI

For resident models, none: put models wherever capacity is convenient. Cold load favours btrfs slightly for resident models (5.035 vs 6.758 s) and strongly for streamed ones. If you plan to stream models larger than memory, keep them on a non-ARC filesystem or a dataset with primarycache=metadata. The second option is a recommendation from mechanism; it was not tested here. For a RAG box the deciding properties are the storage ones: degraded reads, rebuild time, and capacity for embeddings and documents. All three point to RAIDZ1.

5 · Competitive analysis

External figures are quoted as “X reports Y”, with condition differences noted. None of them is our result.

SourceModel / testThey reportOurs (sealed)Conditions differ
Minisforum (vendor floor)gpt-oss-120b pp512/tg128668.79 / 59.3572.64 / 53.23llama-bench ngl 99 FA on; nothing else stated. We add -lm dio.
Minisforum (vendor floor)Qwen3.5-122B / gpt-oss-20b / Gemma 4 26B tg12831.76 / 83.09 / 70.3323.03 / 75.31 / 50.13 (HIP)as above. Decode is our largest shortfall.
ITProgpt-oss-20b decode, Vulkan72.9 tok/s (ROCm “40+”)80.70 VK / 75.49 HIPOllama-style chat prompt vs llama-bench tg128; their ROCm stack evidently older.
ITProGemma 4 26B decode44 tok/s50.15 HIP / 55.40 VKOllama, default ~30 GB GPU memory ceiling.
ServeTheHomeBeelink GTR9 Pro (same silicon) gpt-oss-120b31.41 tok/s53.12LM Studio, out-of-box 96 GB allocation, different chassis.
ServeTheHomeN5 Max, Qwen3.6 27B dense~9 tok/s12.59 (Qwen3.8-27B Q4)Different model generation and FP8 vs Q4 weights: shape only.
MLPerf v6.1 edge (Atlas)Qwen3.6-27B NVFP4, agentic replay10.216 output tok/s of wall12.59 tg128Different metric (end-to-end wall), engine and model.
Lin / llm-trackerLlama-2-7B Q4_0 Vulkan pp512/tg128881.71 / 52.221,366.27 / 54.16 (HIP)May 2025 stack, TheBloke conversion.
kyuz0 toolboxesLlama-2-7B Q4_0 pp512RADV 1337.70 · ROCm 7.2.3 1545.361,366.27 (HIP)Newer ROCm; we are 12 % behind their ROCm figure.
Gufo (gufo-model-bench)Qwen3.8-27B Q4 pp2048 d0 / tg128 d0357.54 / 12.06329.8 / 12.44Same engine and flags (matched rows). Ours pp is 92.2 % of theirs, tg 103.2 %.
Halogendecode retention at 32kgpt-oss-120b 92.6 %70.8 % (compare-external)Closed engine. Shape only; absolute numbers blocked.
Level1Techs / AMDLlama 3.1 70B 4.97 tok/s · Llama 4 Scout “up to 15”—not measuredNo matching model cell. Context only.

Reading. On llama-bench we land 3.5–4.3 % below the vendor’s prefill numbers for three of four models (HIP; gpt-oss-120b 14.4 %) and 9.4–28.7 % below its decode numbers. The vendor’s conditions are unstated, so this is a floor comparison and not a defect claim. Against reviewers using consumer front-ends (Ollama, LM Studio), our llama.cpp numbers are higher, as expected from the leaner engine. Against same-engine community references (Gufo), we match decode and trail prefill by about 8 %. Against newer ROCm toolboxes (kyuz0), we trail prefill by about 12 %. The gap tracks the software stack, not the box.

As a NAS. Every candidate pool reads well above what one 10GbE link carries (1.25 GB/s), so a single client will be network-bound on reads. In the post-cache write state, though, RAIDZ1 sequential write (0.718 GB/s cold, stage 1) is below 10GbE line rate. Sustained large ingest can therefore be drive-bound on this NM790 population. Network throughput itself was not measured in this campaign.

6 · Cross-test insights

7 · Recommendations

Recipe: which pool for which boxA decision path built from the sealed evidence. Numbers are the published cold-regime cases quoted in the report.SATA bays (5×3.5", JMB58x Gen3 x2 shared) were not benchmarked; SLOG (#57) and the btrfs write-hole test (#59) were not run.What does the box mostly do?AI-first RAG boxZFS RAIDZ1 · 5-wideWHY14.11 TiB, cold seq read 7.83 GB/sdegraded read keeps 93.51 %rebuild 29 min @ 1.1656 GB/stg btrfs 12.44 ≈ ext4 12.34 tok/sWATCH▸ HIP for prefill, Vulkan for decode▸ Vulkan cold load 1.34–5.22× slowerAI + VM serverZFS RAID10 (VMs) + RAIDZ1WHYRAID10 sync 16K 1,675 IOPSvs RAIDZ1 415 IOPSRAID10 mixed 16K 104,485 IOPSSATA bays → separate cold poolWATCH▸ NM790: no PLP, SLOG untested▸ SATA tier unmeasuredMedia / archiveZFS RAIDZ2 · 5-wideWHY10.21 TiB, cold seq read 8.911 GB/ssurvives two drive failuresdegraded read keeps 59.55 %USB ingest 905.6 / 376.2 MB/s r/wWATCH▸ RAIDZ1 if capacity matters more▸ scrub + offsite copy still requiredAny workload: btrfs raid5/6 is the fastest healthy pool, but not for data you cannot re-download.Degraded seq read 5.87 % of healthy · rebuild 62 min · write-hole unmitigated (raid1c3 = metadata only)
Decision graphic. Every number on it is pulled from the published cases.

Per workload

AI-first RAG boxZFS RAIDZ1 across all five NVMe (14.11 TiB). Models on a recordsize=1M dataset (as tested). Use a small-recordsize dataset or a zvol for the vector DB. HIP for batch prefill and embeddings, Vulkan for interactive decode (+6–11 % tg), and accept Vulkan’s slower cold load. Models larger than memory: keep them off ARC (primarycache=metadata) or on a btrfs volume. For dense models, try speculative decoding.
AI + VM serverTwo NVMe pools trade capacity for sync IOPS: RAID10 for VM disks (sync 1,675 IOPS, mixed 104,485) vs RAIDZ1 for everything else. Alternatively, one RAIDZ1 pool with VM zvols if capacity matters more. Use the five 3.5″ SATA bays as a separate cold ZFS pool (RAIDZ1/RAIDZ2) for backups and media. It is unmeasured and shares a Gen3 x2 uplink, so do not put VMs on it. No PLP: do not set sync=disabled; a SLOG was not tested.
Media / archiveRAIDZ2 5-wide (10.21 TiB, cold read 8.911 GB/s, survives two failures, 59.55 % degraded read) or RAIDZ1 for capacity. Scrub monthly. Large ingest over USB runs about 0.9 GB/s on a UAS-less enclosure.
Not recommendedbtrfs raid5/6 for primary data: write hole, 5.87 % degraded reads, slow replace. mdadm raid5/6 for VM or database work: 16K random writes collapse to 2,313–2,489 IOPS. btrfs raid10 for single-stream reads (3.616 GB/s).

Per OS / stack

StackDoAvoid / note
Proxmox VEZFS RAIDZ1 (or RAID10 + RAIDZ1 split) for local-zfs. VM disks as zvols (16K volblocksize default; not A/B-tested here). Pass the iGPU to an LXC for llama.cpp, or run it on the host.Check lspci -vv link speeds after every boot (SN1 downtrained twice). Separate pool for SATA bays.
TrueNAS SCALERAIDZ1 or RAIDZ2 pool. SMB/NFS datasets recordsize=1M for media and models, 16–64K for shares with small files.AI apps run in containers; ROCm support on TrueNAS was not tested. No SLOG without PLP.
Fedora / UbuntuOpenZFS RAIDZ1 for data. Current ROCm or Mesa RADV for llama.cpp (newer stacks reach the community’s higher pp). Keep models on ZFS or btrfs; resident speed is identical.If you choose btrfs, use raid1/raid10 profiles for data (raid1c3 metadata). mdadm raid5 suits bulk sequential only.

8 · Buying guidance

9 · Limitations & open questions

Each of these is tracked as a follow-up in the lab’s private issue tracker.

10 · What changed since the 2026-09-18 review

Topic2026-09-18Now (sealed)
mdadm raid5/6 cold seq read1.14 GB/s, HOLD (“8× slower”)9.035 GB/s after Gen4 reruns; the cause was SN1 at Gen1 (#72)
Fastest measuredbtrfs raid5 (sole frontier)Tie: btrfs raid5 9.034 / mdadm raid5 9.035 GB/s
Degraded / rebuildno data8 arms + pilot + 2 controls; RAIDZ1 93.51 % degraded read vs btrfs raid5 5.87 %
ZFS vs btrfs writebtrfs raid5 writes ~5.7× RAIDZ1Confounded by drive state: in matched STO-09 S1, RAIDZ1 4.499 vs btrfs 2.78 GB/s
AI coverage4 provisional cells21 passed cells: HIP + Vulkan, streamed models, vendor-floor ratios, depth to 55k (131k via Gufo)
USBmissingSTO-13 lost; STO-13b post-campaign 905.6 / 376.2 MB/s
Write hole · SLOGcaveat · untestedunchanged: still not run

A · Evidence tables

Run ids are timestamps of sealed result directories (appendix tables omit the 2026 year). Red = non-steady; grey = no steadiness verdict; ⚠ = PROVISIONAL. Full sealed precision is kept in the lab’s private metrics ledger.

A1 · Cold regime, published Protocol B cases
layoutmembersTiBseq R j1
GB/s
seq R j4
GB/s
seq W j1
GB/s
seq W j4
GB/s
r4K R
IOPS
r4K W
IOPS
r16K R
IOPS
r16K W
IOPS
mixed
IOPS
sync
IOPS
smallfiles
GB/s
runs
ZFS RAID10 · 4× x14×x16.716.2197.0240.6380.894115,85540,74051,67651,195104,4851,6750.52109-13-15.49
ZFS RAIDZ1 · 5-wide4×x1 + 1×x414.116.7487.830.4250.71867,04418,86519,66630,495757 ⚠4150.53409-13-17.14
ZFS RAIDZ2 · 5-wide4×x1 + 1×x410.218.0538.9110.4640.96181,54010,35726,93710,91227,7554280.53209-13-18.42
09-13-21.52
btrfs raid10 · 4× x14×x16.993.6013.6161.952.372555,44891,074153,30435,55388,0852,1530.51909-14-05.18
09-26-00.17
btrfs raid5 · 5-wide4×x1 + 1×x414.439.0339.0341.9124.066573,19455,450189,73122,98148,4721,3650.4409-14-13.57
btrfs raid6 · 5-wide4×x1 + 1×x410.719.0259.0261.4652.72573,93743,316215,28022,06644,1161,1830.41809-14-17.56
mdadm raid10 · 4× x14×x17.027.2237.2232.4832.521575,99833,934354,29926,50878,5823230.72409-25-16.03
mdadm raid5 · 5-wide4×x1 + 1×x414.419.0349.0354.4115.04530,45172,59889,4542,489106,5529340.7109-25-18.53
mdadm raid6 · 5-wide4×x1 + 1×x410.719.0279.0293.4153.451514,94125,541268,7242,31317,2132,2560.46909-25-21.38
ZFS RAID0 · control4×x1 + 1×x417.857.958.6950.5991.897121,06054,61247,48059,950107,6862,2670.54109-13-14.28
single SN1 · x1SN1 @x13.01.7821.80.6150.64135,11614,11413,87516,76222,4781,2830.46109-13-13.00
single SN5 · x4SN5 @x43.05.6655.8880.7021.32841,31820,55118,34347,11229,6341,3980.51409-12-19.42
ZFS RAID10 + spare4×x16.716.2326.6290.7571.172111,50125,04844,98238,95683,9971,6310.5409-13-04.48
ZFS mirror 2-way2×x13.193.3773.4550.6350.74771,09417,63232,09920,69351,8911,0940.55709-12-05.05
09-12-17.37
09-12-22.05
A2 · ZFS primarycache=metadata
layoutmembersTiBseq R j1
GB/s
seq R j4
GB/s
seq W j1
GB/s
seq W j4
GB/s
r4K R
IOPS
r4K W
IOPS
r16K R
IOPS
r16K W
IOPS
mixed
IOPS
sync
IOPS
smallfiles
GB/s
runs
ZFS RAID104×x16.717.1337.2210.4250.879183,88334,483191,19534,18071,8761,7920.5209-12-09.00
ZFS RAIDZ1 5w4×x1 + 1×x414.117.2528.2150.4830.664100,69026,46478,65132,929 ⚠35,2542560.55809-13-08.49
09-13-22.49
ZFS RAIDZ2 5w4×x1 + 1×x410.219.0229.0280.3660.943122,09725,21383,46919,02218,1573680.56209-13-10.13
09-13-22.26
ZFS RAID04×x1 + 1×x417.859.0138.9790.6182.002185,49752,320168,81467,998102,5212,2430.57609-13-07.30
ZFS RAID10 + spare4×x16.717.1347.2220.8541.14166,32432,942173,68729,28869,1471,6990.51409-13-11.37
ZFS mirror 2-way2×x13.013.6113.6110.5110.552127,64716,285127,45514,91632,4381,2500.55409-12-12.50
single x1SN1 @x13.01.8081.8080.7050.93462,65622,86963,13922,27635,9451,2790.57209-12-06.23
single x4SN5 @x43.06.1496.2011.2011.4468,87923,64968,52240,73541,1301,3370.55209-13-06.11
A3 · Warm FS controls (DRAM-ceiling regime, not layout evidence)
layoutmembersTiBseq R j1
GB/s
seq R j4
GB/s
seq W j1
GB/s
seq W j4
GB/s
r4K R
IOPS
r4K W
IOPS
r16K R
IOPS
r16K W
IOPS
mixed
IOPS
sync
IOPS
smallfiles
GB/s
runs
btrfs raid104×x17.4230.60635.6852.38112.1094,371,901163,1462,416,415156,718537,3083,5070.58809-14-12.44
btrfs raid54×x1 + 1×x414.8729.89336.2722.9843.2654,319,32874,4172,420,50386,081194,8373,1120.49409-14-16.40
btrfs raid64×x1 + 1×x411.1529.68235.7062.6192.7674,362,5468,7442,417,7849,31028,0021,6070.1909-14-19.15
mdadm raid104×x17.3730.26636.7411.70310.9234,350,99866,6972,396,82963,234201,0173250.78509-25-17.29
mdadm raid54×x1 + 1×x414.7630.78935.94111.25710.934,392,22599,3212,403,94279,364250,1916640.6609-25-20.14
mdadm raid64×x1 + 1×x411.0731.3636.71412.64110.124,311,695145,6382,413,874137,587473,3078000.69709-25-23.00
Stage 7 STO-09 arms (one member failed and replaced; 50 % fill). Ratios exactly as sealed in each arm’s degraded block.
armvictimrebuild srebuild GB/sS1 seq R GB/sS2 seq R %S4 seq R %S1 seq W GB/sS2 seq W %S4 seq W %verdict
ZFS RAIDZ1SN21740.01.16567.43493.51102.814.49964.2839.32FAIL
ZFS RAIDZ1 · loadedSN21550.01.38287.12997.11102.884.4373.8847.04FAIL
ZFS RAIDZ2SN21690.01.1868.86559.55101.763.13378.6546.95FAIL
btrfs raid10SN22790.00.73164.43271.19112.72.31691.4192.75PASS
btrfs raid5SN23720.00.54989.0455.8795.262.7898.03109.28PASS
btrfs raid5 · loadedSN23480.00.61639.0445.8793.172.657100.2686.04FAIL
btrfs raid5 · x4 victimSN52590.00.78919.0455.8694.782.863106.5375.45FAIL
btrfs raid6SN26380.00.32079.0425.8696.01.968117.9432.67FAIL
no-failure control · run 2026-09-25-11.29———7.62297.5599.514.2466.6766.58S4/S2 0.9986
no-failure control · run 2026-09-26-00.58———7.409103.1498.654.39766.5967.71S4/S2 1.0167
Ours (vendor-invocation group, cold btrfs raid5) vs “Minisforum reports” floor (vendor product page, via the lab’s vendor-floor register). Ratio = ours ÷ floor, as sealed.
modelbackendours pp512floor pp512ratioours tg128floor tg128ratiorun
gpt-oss-20bHIP1,514.001575.750.960875.3183.090.90642026-09-23-13.05
gpt-oss-20bVulkan1,408.841575.750.894180.7283.090.97152026-09-23-07.05
Gemma 4 26B-A4BHIP1,148.971200.580.95750.1370.330.71282026-09-22-06.02
Gemma 4 26B-A4BVulkan1,102.471200.580.918355.5070.330.78922026-09-22-15.58
gpt-oss-120bHIP572.64668.790.856253.2359.30.89762026-09-23-15.03
gpt-oss-120bVulkan551.75668.790.82557.3359.30.96682026-09-23-08.23
Qwen3.5-122B-A10BHIP306.34317.580.964623.0331.760.72522026-09-22-10.11
Qwen3.5-122B-A10BVulkan283.08317.580.891424.4731.760.77052026-09-23-00.06
Stage 3 AI cells: llama.cpp llama-bench card (pp512, tg128 at depth 0), cold-load rail. HIP unless “-vk”. Values exactly as sealed.
modelbackendpoolcold load spp512 tok/stg128 tok/spp @32k tok/stg @55k tok/srun
Qwen3-0.6B Q8 (smoke)HIPbtrfs raid5 · cold2.02511434.47435229.5296382745.061274—2026-09-22-05.43
Qwen3-0.6B Q8 (smoke)HIPZFS RAIDZ1 · pc=all, ARC cold3.07211585.991494229.8466612777.739635—2026-09-23-16.11
Llama-2-7B Q4_0HIPbtrfs raid5 · cold2.0251366.27299254.158066432.078239—2026-09-29-01.31
gpt-oss-20b MXFP4HIPbtrfs raid5 · cold5.041488.02356675.4919381071.68686645.284712026-09-23-13.05
gpt-oss-20b MXFP4Vulkanbtrfs raid5 · cold6.7611408.36632280.697347790.28237653.8807272026-09-23-07.05
Gemma 4 26B-A4B Q4_K_MHIPbtrfs raid5 · cold5.0351130.87434950.146229733.24166537.315282026-09-22-06.02
Gemma 4 26B-A4B Q4_K_MHIPZFS RAIDZ1 · pc=all, ARC cold6.7581136.8236150.079649721.19872237.2800242026-09-23-04.57
Gemma 4 26B-A4B Q4_K_MVulkanbtrfs raid5 · cold10.6541093.21353155.40021730.43689739.2732022026-09-22-15.58
Qwen3.8-27B Q4_K_XLHIPbtrfs raid5 · cold4.635332.93942412.589999278.51762810.5530172026-09-29-18.07
Qwen3.8-27B Q8_K_XLHIPbtrfs raid5 · cold6.782————2026-09-29-09.55
gpt-oss-120b MXFP4HIPbtrfs raid5 · cold11.256564.01221153.116634457.8177431.2406732026-09-23-15.03
gpt-oss-120b MXFP4Vulkanbtrfs raid5 · cold49.375548.47098657.253699373.16128837.6662482026-09-23-08.23
Qwen3.5-122B-A10B Q4_K_MHIPbtrfs raid5 · cold12.111308.20879722.969954264.91397619.9431982026-09-22-10.11
Qwen3.5-122B-A10B Q4_K_MVulkanbtrfs raid5 · cold63.25279.39272524.455856229.57777621.0935692026-09-23-00.06
DeepSeek V4 Flash IQ2_XXSHIPbtrfs raid5 · cold13.6527.35374415.261516——2026-09-29-16.41
DeepSeek V3.1 Q2_K_XL (streamed)HIPbtrfs raid5 · cold5.12214.671137963703381.782020828368677——2026-09-29-15.17
DeepSeek V3.1 Q2_K_XL (streamed)HIPZFS RAIDZ1 · pc=all, ARC cold6.55613.5009595537931481.4079943045119931——2026-09-29-05.00
Kimi K2 Thinking IQ1 (streamed)HIPbtrfs raid5 · cold38.3343.5696841.093135——2026-09-29-03.21
Kimi K2 Thinking IQ1 (streamed)HIPZFS RAIDZ1 · pc=all, ARC cold181.1474.6882611.548387——2026-09-29-13.35
Steadiness heat stripEach cell = one published case. Teal = rails.steadiness.steady true; coral = false (reported, labelled); grey = no verdict; blank = not run.STO-06 smallfiles has no steadiness verdict by design (single-stream copy). Warm rows converge near the DRAM ceiling and are not layout evidence.seqR j1seqR j4seqW j1seqW j4r4K Rr4K Wr16K Rr16K Wr64K Rmixedsyncsmallf.VM mixZFS RAID10ZFS RAIDZ1⚠ZFS RAIDZ2btrfs raid10btrfs raid5btrfs raid6mdadm raid10mdadm raid5mdadm raid6ZFS RAID0single SN1single SN5ZFS RAID10 · metaZFS RAIDZ1 · meta⚠⚠ZFS RAIDZ2 · metabtrfs raid5 · warmbtrfs raid6 · warmmdadm raid5 · warmsteady 182 · non-steady 25 · no verdict 18
Steadiness of every published case used in the appendix tables.