Am Mo., 11. Mai 2026 um 20:00 Uhr schrieb Stefan Hajnoczi <[email protected]>: > > On Mon, May 11, 2026 at 05:11:23PM +0200, Alexander Mikhalitsyn wrote: > > From: Alexander Mikhalitsyn <[email protected]> > > > > Dear friends, > > > > This patchset adds basic live migration support for > > QEMU emulated NVMe device. > > > > Implementation has some limitations: > > - only one NVMe namespace is supported > > - SMART counters are not preserved > > - CMB is not supported > > - PMR is not supported > > - SPDM is not supported > > - SR-IOV is not supported > > > > I believe this is something I can support in next patchset versions or > > separately on-demand (when usecase appears). > > > > Testing. > > > > This patch series was manually tested on: > > - Debian 13.3 VM (kernel 6.12.69+deb13-amd64) using fio on *non-root* NVMe > > disk > > (root disk was virtio-scsi): > > > > time fio --name=nvme-verify \ > > --filename=/dev/nvme0n1 \ > > --size=5G \ > > --rw=randwrite \ > > --bs=4k \ > > --iodepth=16 \ > > --numjobs=1 \ > > --direct=0 \ > > --ioengine=io_uring \ > > --verify=crc32c \ > > --verify_fatal=1 > > > > - Windows Server 2022 VM (NVMe drive was a *root* disk) with opened browser > > playing video. > > > > No defects were found. > > > > Git tree: > > https://github.com/mihalicyn/qemu/commits/nvme-live-migration > > > > Changelog for version 7: > > - rebased on top of recent main > > - addressed review comments from Stefan Hajnoczi: > > - better incoming migration stream validation (SQ/CQids correctness) > > - endianness bugs are fixed in qtest (validated on s390x) > > - added RWB tags from Klaus > > > > Changelog for version 6: > > - rebased on top of: > > https://gitlab.com/peterx/qemu/-/tree/vmstate-array-null > > (see also > > https://lore.kernel.org/all/[email protected]) > > - addressed review comments from Stefan Hajnoczi: > > - supported "full CQ" case by serializing NvmeRequest state > > - added qtest for NVMe device migration with full CQ > > > > Changelog for version 5: > > - rebased on top of > > https://lore.kernel.org/all/[email protected]/ > > (as Peter has requested) > > > > Changelog for version 4: > > - vmstate dynamic array support reworked as suggested by Peter Xu > > VMS_ARRAY_OF_POINTER_ALLOW_NULL flag was introduced > > qtests were added > > - NVMe migration blockers were reworked as Klaus has requested earlier > > Now, instead of having "deny list" approach, we have more strict pattern > > of NVMe features filtering and it should be harded to break migration when > > adding new NVMe features. > > > > Changelog for version 3: > > - rebased > > - simple functional test was added (in accordance with Klaus Jensen's > > review comment) > > $ meson test 'func-x86_64-nvme_migration' --setup thorough -C build > > > > Changelog for version 2: > > - full support for AERs (in-flight requests and queued events too) > > > > Kind regards, > > Alex > > > > Alexander Mikhalitsyn (8): > > tests/functional/migration: add VM launch/configure hooks > > hw/nvme: add migration blockers for non-supported cases > > hw/nvme: split nvme_init_sq/nvme_init_cq into helpers > > hw/nvme: set CQE.sq_id earlier in nvme_process_sq > > hw/nvme: unmap req->sg earlier in nvme_enqueue_req_completion > > hw/nvme: add basic live migration support > > tests/functional/x86_64: add migration test for NVMe device > > tests/qtest/nvme-test: add migration test with full CQ > > > > hw/nvme/ctrl.c | 1007 ++++++++++++++++- > > hw/nvme/ns.c | 160 +++ > > hw/nvme/nvme.h | 12 + > > hw/nvme/trace-events | 10 + > > include/block/nvme.h | 12 + > > tests/functional/migration.py | 22 +- > > tests/functional/x86_64/meson.build | 1 + > > .../functional/x86_64/test_nvme_migration.py | 159 +++ > > tests/qtest/nvme-test.c | 395 +++++++ > > 9 files changed, 1742 insertions(+), 36 deletions(-) > > create mode 100755 tests/functional/x86_64/test_nvme_migration.py > > > > -- > > 2.47.3 > > > > Acked-by: Stefan Hajnoczi <[email protected]>
Thanks for reviews, Stefan! ;-) Kind regards, Alex
