public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
* [PATCH storage v2 0/7] add native ZFS over NVMe/TCP backend
@ 2026-08-02  3:31 Joaquin Varela
  2026-08-02  3:31 ` [PATCH storage v2 1/7] zfs: make LUN provider dispatch overridable Joaquin Varela
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: Joaquin Varela @ 2026-08-02  3:31 UTC (permalink / raw)
  To: pve-devel; +Cc: Joaquin Varela

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



^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2026-08-02  3:33 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-02  3:31 [PATCH storage v2 0/7] add native ZFS over NVMe/TCP backend Joaquin Varela
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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal