Skip to content

Releases: derfsss/AmigaNVMeDevice

nvme.device 1.68 (beta)

11 Jun 17:15

Choose a tag to compare

Pre-release

Beta release of nvme.device — native NVMe block device driver for AmigaOS 4.1 Final Edition.

⚠️ Beta — actively under development. Validated end-to-end under QEMU (Pegasos2, SAM460ex, AmigaOne, including boot-from-NVMe). On real hardware the practical targets are the AmigaOne X1000 and X5000 — the only models with a free PCIe slot for an NVMe drive (via an M.2 adapter card); confirmation on them is pending. Use at your own risk.

Highlights of 1.68

  • Code-review hardening: held-request handling in TD_ADDCHANGEINT/TD_REMOVE, explicit 16-bit NLB ceiling on the submit path
  • New AmigaOS Installation Utility wizard (install.py — double-click its icon): choose between a standard install to DEVS: or a Kickstart-module install (boot from NVMe) with automatic Kicklayout update
  • 67/67 automated QEMU checks (base, multi-controller, SAM460ex, no-device)

Install: extract nvme.lha, open the nvme drawer, double-click install.py. Full details in the bundled nvme.readme.

See docs/history.md for the complete changelog.

nvme.device 1.66

12 Apr 22:37

Choose a tag to compare

nvme.device 1.66 — 2026-04-12

Feature-completeness release. Four new SCSI sub-commands added to HD_SCSICMD, driven by an integration survey of blockdev.library and what SAT-aware tools actually call. Includes the first NVMe TRIM implementation in the Amiga ecosystem.

What's new

  • UNMAP (CDB 0x42) → NVMe Dataset Management with Deallocate (AD=1). Translates up to 256 16-byte SCSI block descriptors per call into the NVMe DSM range-descriptor format and issues one DSM command. Pre-pinned 4 KiB range buffer per unit. Gated on ONCS.DSM from Identify Controller and on successful buffer allocation; unsupported gracefully with CHECK CONDITION.
  • READ CAPACITY(16) (CDB 0x9E). 32-byte response with 64-bit last LBA. Future-proofs > 2 TiB namespaces.
  • SYNCHRONIZE CACHE(10) (CDB 0x35). Translates to NVMe Flush via the new NVMeIO_SubmitAndWait primitive (sync variant of submit that poll-harvests and suppresses the normal Harvest reply so the SCSI handler can translate status before replying).
  • MODE SENSE / MODE SELECT page 0x08 (Caching) — CDB 0x1A / 0x5A / 0x15 / 0x55. The WCE bit maps to NVMe Set Features 0x06 (Volatile Write Cache) via new NVMe_SetFeature / NVMe_GetFeature admin wrappers. State tracked on the controller, seeded from Identify byte 525 bit 0.

What's kept from v1.65

All performance wins from the prior sweep are carried forward unchanged:

  • IExec->CopyMem on the bounce hot path
  • Alignment-aware bounce vs direct-DMA selection
  • Pre-allocated DMAEntry pool per inflight slot
  • NVMeIO_SubmitNoRing + event-loop SQ doorbell batching
  • MDTS soft-cap 2 MiB
  • Signal-handshake shutdown, volatile cross-task fields, ATA PASS-THROUGH SMART tab, et al.

Archive contents (nvme.lha)

nvme/
├── AutoInstall               (AmiUpdate installer)
├── nvme.device               (v1.66 release, 74 204 B)
├── nvme.device.debug         (v1.66 debug — rename to install)
├── test_nvme                 (10-step functional test)
├── nvme_stats                (CLI monitor for NSCMD_NVME_GETSTATS)
├── nvme.readme               (plain-text end-user docs)
└── diskboot.config.sample    (example Kickstart: diskboot.config entry)
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.

Tested

  • QEMU Pegasos2 end-to-end: boots to DOS / Workbench, partitioned via Media Toolbox, formatted with SFS/00, AmigaDiskBench passes, SMART tab via HD_SCSICMD ATA PASS-THROUGH.
  • New SCSI sub-commands build clean and dispatch correctly; blockdev.library integration will exercise them at runtime.

Links

nvme.device 1.65

12 Apr 21:47

Choose a tag to compare

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

nvme.device 1.61

12 Apr 18:14

Choose a tag to compare

nvme.device 1.61 — 2026-04-12

Native AmigaOS 4.1 Final Edition block-device driver for NVMe controllers on PCIe. Single binary runs on every AmigaOS 4.1 FE platform whose PCIe bridge forwards CPU memory cycles.

Highlights

  • Validated end-to-end on QEMU Pegasos2: boots to DOS / Workbench, partitioned via Media Toolbox, formatted with SmartFilesystem (SFS/00), benchmarked with AmigaDiskBench — sustained 265–279 MB/s sequential.
  • SMART telemetry visible in AmigaDiskBench's SMART tab via HD_SCSICMD ATA PASS-THROUGH (CDB 0x85 / 0xA1) translation from NVMe Log Page 0x02.
  • Multi-controller: up to 4 NVMe devices × 8 namespaces each (32 flat units).
  • Boot-drive compatible (resident priority 0, matching virtioscsi.device).
  • Release build is silent except for the startup banner on the serial console; debug build ships alongside (rename to swap in).

Supported platforms (one binary, runtime-detected)

Platform Host bridge Status
QEMU Pegasos2 MV64361 Tested end-to-end
Pegasos II MV64361 Should work
Sam440ep AMCC 440EP Expected to work
Sam460ex AMCC 460EX Expected to work
X1000 PA6T Nemo Expected to work
X5000 QorIQ P5020/P5040 Expected to work
A1222 "Tabor" QorIQ P1022 Expected to work
AmigaOne 500 Expected to work
AmigaOne XE/SE Mai Logic Articia S Unsupported — bridge does not forward MMIO; driver aborts cleanly

Archive contents (nvme.lha)

nvme/
├── AutoInstall               (AmiUpdate-ready installer)
├── nvme.device               (release build — this is the driver)
├── nvme.device.debug         (debug build — full verbose trace, rename to swap in)
├── test_nvme                 (10-step functional smoke test)
├── nvme_stats                (CLI monitor for NSCMD_NVME_GETSTATS)
├── nvme.readme               (plain-text end-user docs)
└── diskboot.config.sample    (example Kickstart: diskboot.config entry)
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. See docs/nvme_boot_strategy.md in the source repository for the full procedure (including the QEMU Pegasos2 kickstart.zip layout).

Links