nvme.device 1.65
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->CopyMemon the bounce path. We build-nostartfilesso newlib'smemcpyisn't linked; the previouscompat.cfallback was a byte-by-byte loop. Switching the bounce write/read copy to Exec's optimisedCopyMemis 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_RingSQwith 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