From: Joaquin Varela <joaquinvarela@neatech.ar>
To: pve-devel@lists.proxmox.com
Cc: Joaquin Varela <joaquinvarela@neatech.ar>
Subject: [PATCH storage v2 0/7] add native ZFS over NVMe/TCP backend
Date: Sun, 2 Aug 2026 00:31:34 -0300 [thread overview]
Message-ID: <cover.1785636979.git.joaquinvarela@neatech.ar> (raw)
Hi,
this series adds an in-tree `zfsnvme` shared storage backend. It reuses the
remote ZFS lifecycle model of ZFS over iSCSI, publishes zvols through Linux
nvmet, and uses native NVMe multipath on PVE initiators.
The ZFS dataset remains the source of truth for namespace identity. The
backend stores NQN, NSID and UUID as ZFS user properties and reconstructs
derived configfs state after a target restart. Target publication is atomic:
all namespaces, Host NQN ACLs and authentication keys are restored before
the subsystem is linked to its NVMe/TCP ports.
This revision follows the feedback on the RFC:
* new Perl modules use v5.36;
* regular expressions are named constants using n/x and named captures;
* module-private helpers use lexical subroutines where appropriate;
* postfix dereferencing is used throughout;
* no debian/changelog entries are included.
It also makes the all-path-loss policy explicit, checks active users before
teardown, and handles both the current activation-hints API and the short
activation form used by cloud-init.
Test target:
* Ubuntu 24.04, kernel 6.8.0-136-generic;
* ZFS 2.2.2, Linux nvmet, nvme-cli 2.8;
* one ZFS pool with two independent 100 Mbit/s NVMe/TCP paths.
Initiators were a two-node nested PVE 9.2 cluster running kernel
7.0.14-8-pve and nvme-cli 2.13. The test matrix covered thin provisioning
and discard, snapshots and clones, concurrent allocation, ANA multipath,
single/all-path faults, bidirectional live migration under guest I/O,
watchdog fencing, live split-brain isolation, target reboot reconstruction,
package upgrade protection, and a verified 45.7 GB mixed-I/O soak. No
dual-writer interval was observed.
The complete report, machine-readable results and raw logs are available at:
https://github.com/joaquinv98/pve-storage/tree/feature/zfs-nvme-tcp
The branch corresponding exactly to this series is:
https://github.com/joaquinv98/pve-storage/tree/submission/zfs-nvme-tcp-rfc-v2
This remains a lab-qualified release candidate; hardware qualification and a
long-duration production-hardware soak are intentionally not claimed.
Joaquin Varela (7):
zfs: make LUN provider dispatch overridable
zfs: add native NVMe/TCP storage backend
zfsnvme: harden node preflight and storage teardown
zfsnvme: make all-path loss policy explicit
zfsnvme: accept activation hints from storage API
zfsnvme: accept short volume activation calls
zfsnvme: restore ACLs before publishing target
debian/control | 1 +
src/PVE/Storage.pm | 2 +
src/PVE/Storage/LunCmd/Makefile | 2 +-
src/PVE/Storage/LunCmd/NVMET.pm | 722 +++++++++++++++++++++++++
src/PVE/Storage/Makefile | 1 +
src/PVE/Storage/Plugin.pm | 2 +-
src/PVE/Storage/ZFSNVMePlugin.pm | 893 +++++++++++++++++++++++++++++++
src/PVE/Storage/ZFSPlugin.pm | 45 +-
src/test/run_plugin_tests.pl | 1 +
src/test/zfsnvme_test.pm | 513 ++++++++++++++++++
10 files changed, 2158 insertions(+), 24 deletions(-)
create mode 100644 src/PVE/Storage/LunCmd/NVMET.pm
create mode 100644 src/PVE/Storage/ZFSNVMePlugin.pm
create mode 100644 src/test/zfsnvme_test.pm
--
2.54.0.windows.1
next reply other threads:[~2026-08-02 3:32 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-02 3:31 Joaquin Varela [this message]
2026-08-02 3:31 ` [PATCH storage v2 1/7] zfs: make LUN provider dispatch overridable Joaquin Varela
2026-08-02 3:31 ` [PATCH storage v2 2/7] zfs: add native NVMe/TCP storage backend Joaquin Varela
2026-08-02 3:31 ` [PATCH storage v2 3/7] zfsnvme: harden node preflight and storage teardown Joaquin Varela
2026-08-02 3:31 ` [PATCH storage v2 4/7] zfsnvme: make all-path loss policy explicit Joaquin Varela
2026-08-02 3:31 ` [PATCH storage v2 5/7] zfsnvme: accept activation hints from storage API Joaquin Varela
2026-08-02 3:31 ` [PATCH storage v2 6/7] zfsnvme: accept short volume activation calls Joaquin Varela
2026-08-02 3:31 ` [PATCH storage v2 7/7] zfsnvme: restore ACLs before publishing target Joaquin Varela
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cover.1785636979.git.joaquinvarela@neatech.ar \
--to=joaquinvarela@neatech.ar \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.