Skip to content

nvme.device 1.65

Choose a tag to compare

@derfsss derfsss released this 12 Apr 21:47
· 23 commits to master since this release

nvme.device 1.65 — 2026-04-12

Second-generation performance pass on top of the v1.61 end-to-end-validated baseline.

What's new

  • IExec->CopyMem on the bounce path. We build -nostartfiles so newlib's memcpy isn't linked; the previous compat.c fallback was a byte-by-byte loop. Switching the bounce write/read copy to Exec's optimised CopyMem is the primary driver of the AmigaDiskBench write wins at 4 KiB – 64 KiB block sizes.
  • MDTS soft-cap raised 1 MiB → 2 MiB. Controllers that advertise MDTS=0 (unlimited) can now issue single NVMe commands up to 2 MiB — the exact capacity of a single 4 KiB PRP-list page. No change at AmigaDiskBench sizes; latent benefit for filesystem readahead / backup workloads.
  • Carries forward the v1.62 structural sweep: alignment-aware bounce selection, pre-allocated DMAEntry pool, split NVMeIO_SubmitNoRing / NVMeIO_RingSQ with event-loop doorbell batching.

AmigaDiskBench results vs v1.61 baseline

Suite totals (sum across 7 block sizes: 4 KiB, 16 KiB, 32 KiB, 64 KiB, 128 KiB, 256 KiB, 1 MiB), MB/s:

suite v1.61 v1.65 Δ
HeavyLifter 442 480 +8.6 %
Legacy 428 473 +10.5 %
Sequential 808 792 −2.1 %
Random4K 1171 1299 +11.0 %
SequentialRead 1377 1482 +7.6 %
Random4KRead 1106 1243 +12.3 %
MixedRW70/30 1164 1277 +9.7 %

Highlights:

  • Random4K 64 K: 85 → 117 MB/s (+37 %)
  • Random4KRead 64 K: 96 → 120 MB/s (+25 %)
  • SequentialRead 64 K: 128 → 159 MB/s (+24 %)
  • Legacy 1 M: 104 → 114 MB/s (+9 %)

Known regression

Sequential writes at 16–64 KiB block sizes are 5–28 % below v1.61. The direct-DMA path pays a write-side cache flush (dcbf + sync) in StartDMA that's expensive on fresh CPU-dirtied buffer lines — fine for HeavyLifter / Legacy's warm-buffer reuse pattern, but not for Sequential's fresh-buffer pattern. A write-side asymmetric heuristic could recover it; not shipped in this release.

Archive contents (nvme.lha)

Same layout as prior releases:

nvme/
├── AutoInstall
├── nvme.device           (v1.65 release, ~72 KB)
├── nvme.device.debug     (v1.65 debug — rename to install)
├── test_nvme
├── nvme_stats
├── nvme.readme
└── diskboot.config.sample
nvme.readme               (duplicate at archive root for os4depot)

Install

lha x nvme.lha
execute nvme/AutoInstall

For boot-drive use, copy nvme.device into Kickstart: and append nvme.device 1 1 to Kickstart:diskboot.config. Full procedure in docs/nvme_boot_strategy.md.

Links

  • Architecture + implementation reference: docs/architecture.md
  • Session-by-session changelog: docs/history.md (Session 10 covers the v1.63–v1.65 design exploration and two dead-ends — unsafe StartDMA pin caching, harmful hybrid-poll under QEMU TCG)
  • Source: https://github.com/derfsss/AmigaNVMeDevice