OpenFlash v0.3.0 - Queued Controller Bring-up
OpenFlash v0.3.0: Queued Controller Bring-up
OpenFlash v0.3.0 is the first packaged public release. It joins the NAND/FTL simulator,
behavioral controller, queue ABI, initial QEMU device, and Linux PCI bring-up path into a
single reproducible systems lab.
Highlights
- A seeded NAND model measures channel/die parallelism, latency distributions, GC, wear,
write amplification, ECC correction, retries, and uncorrectable reads. - A page-mapped FTL performs deterministic striping, invalidation, victim selection,
live-page relocation, erase, and reclamation. - FIFO and bounded read-priority policies provide repeatable scheduler comparisons.
- ABI v0.1 defines 64-byte little-endian commands/completions, feature bits, queue BARs,
phase ownership, status codes, reset, and flush/FUA durability. - The reference device and queue engine execute identify/read/write/flush/FUA/discard,
distinguish volatile and durable state, inject faults, batch interrupts, and test wrap. - The initial QEMU source implements BAR0, one DMA queue, one MSI-X vector, reset, and a
RAM-backed data path. - The Linux module validates ABI v0.1, allocates coherent admin rings, registers MSI-X,
publishes queue addresses, enables the controller, and waits for readiness.
Validation
- 22 Python unit, durability, queue, and ABI consistency tests passed.
- Ruff lint passed.
- Linux sources passed strict
checkpatch.plafter style fixes. - The GPL driver compiled and linked as
openflash.koagainst Linux
6.6.87.2-microsoft-standard-WSL2+headers. - GitHub Actions passed for commit
796ec27.
Reproducible model result
With 10,000 requests, 70% reads, 8 channels, 4 dies/channel, and seed 7, the current model
reported approximately 644.5 MiB/s and 211.4 ms read p99 for FIFO versus 817.6 MiB/s and
112.9 ms read p99 for bounded read-priority. These are simulator outputs for comparing
policies; they are not measurements from NAND silicon.
Compatibility and licensing
- Python 3.10 or newer is required.
- ABI version is
0.1; it remains experimental and may evolve before a stable hardware
contract. - Simulator, QEMU source, tools, and documentation are Apache-2.0.
- The Linux kernel driver subtree is GPL-2.0-only.
Known limitations
- QEMU source is not yet pinned and compiled against a specific upstream revision.
- QEMU supports one queue with volatile RAM backing and has no QTests yet.
- Linux does not yet submit identify, drain completions, or register a block device.
- FTL metadata is volatile and lacks journal/checkpoint recovery.
- NAND timing/error parameters need calibration against a real part.
Next milestone
The next release will pin QEMU, add MMIO/DMA QTests, submit identify through the Linux
admin queue, negotiate I/O queues, and expose the first data-verified blk-mq disk.
Upgrade notes
This is the first tagged release, so no migration is required. Existing clones should
pull main, recreate the editable Python install, and rerun tests. Do not load the driver
against arbitrary hardware or use the emulated path for valuable data.