On Tue, May 05, 2026 at 11:14:09AM +0300, Avihai Horon wrote:
> Performance tests were done by migrating a single VM with:
> * 8 GB RAM
> * 4 mlx5 VFIO devices:
>   - One device with 1GB of device data (stopcopy data) that runs
>     workload during precopy so VFIO_PRECOPY_INFO_REINIT is exercised
>     (generate new initial_bytes chunks during precopy).

Could you elaborate a bit more on what workload is executed, and how that
will affect REINIT reportings (e.g. is only one REINIT generated, or it
keeps generating)?

Can I understand it in this way: without REINIT, device is forced to put
those data into stopcopy size; then with REINIT, some stopcopy size is
essentially moved back to precopy phase?

Thanks,

>   - The other 3 devices are idle.
> 
> In this setup, VFIO_PRECOPY_INFO_REINIT reduced total migration downtime by
> about 43%, and downtime attributed to the busy VFIO device by about 67%:
> 
> With VFIO_PRECOPY_INFO_REINIT:
>   1335ms total (~520ms from the VFIO device running the workload).
> 
> Without VFIO_PRECOPY_INFO_REINIT:
>   2352ms total (~1600ms from the VFIO device running the workload).
> 
> Functional tests covered the main code paths and combinations, including
> legacy and new switchover-ack across versions, for example:
> * Migration between QEMU 11.0 (old binary) and 11.1 (new binary).
> * Migration between two 11.1 binaries with different machine versions.
> * Migration when the VFIO device has no VFIO_PRECOPY_INFO_REINIT.
> * Migration when the VFIO device has no VFIO precopy support.
> 
> === Patch Breakdown ===
> 
> * Patches 1-2: Update Linux headers
> * Patches 3-8,14: Migration cleanups and the new switchover-ack mechanism
> * Patches 9-13: VFIO cleanups and VFIO_PRECOPY_INFO_REINIT
> 
> Thanks.
> 
> [1] https://lore.kernel.org/all/[email protected]/
> [2] 
> https://lore.kernel.org/qemu-devel/[email protected]/
> 
> Avihai Horon (14):
>   scripts/update-linux-headers: Add typelimits.h
>   linux-headers: Update to Linux v7.1-rc1
>   migration: Propagate errors in migration_completion_precopy()
>   migration: Log the approver in qemu_loadvm_approve_switchover()
>   migration: Replace switchover_ack_needed SaveVMHandler
>   migration: Rename switchover-ack code to legacy
>   migration: Make switchover-ack re-usable
>   migration: Check switchover-ack during switchover phase
>   vfio/migration: Re-query precopy size before sending
>     VFIO_MIG_FLAG_DEV_INIT_DATA_SENT
>   vfio/migration: Add Error ** parameter to vfio_migration_init()
>   vfio/migration: Add new switchover-ack mechanism
>   vfio/migration: Implement VFIO_PRECOPY_INFO_REINIT feature
>   vfio/migration: Check VFIO_PRECOPY_INFO_REINIT during switchover
>   migration: Enable new switchover-ack
> 
>  docs/devel/migration/vfio.rst                 |   4 +-
>  hw/vfio/vfio-migration-internal.h             |   2 +
>  include/migration/client-options.h            |   1 +
>  include/migration/misc.h                      |   2 +
>  include/migration/register.h                  |  21 +-
>  include/standard-headers/drm/drm_fourcc.h     |  28 +-
>  include/standard-headers/linux/const.h        |  18 +
>  include/standard-headers/linux/ethtool.h      |  28 +-
>  .../linux/input-event-codes.h                 |  13 +
>  include/standard-headers/linux/pci_regs.h     |  71 ++-
>  include/standard-headers/linux/typelimits.h   |   8 +
>  include/standard-headers/linux/virtio_ring.h  |   3 +-
>  include/standard-headers/linux/virtio_rtc.h   | 237 ++++++++++
>  include/standard-headers/linux/vmclock-abi.h  |  20 +
>  linux-headers/asm-arm64/kvm.h                 |   1 +
>  linux-headers/asm-arm64/unistd_64.h           |   1 +
>  linux-headers/asm-generic/unistd.h            |   5 +-
>  linux-headers/asm-loongarch/kvm.h             |   5 +
>  linux-headers/asm-loongarch/kvm_para.h        |   1 +
>  linux-headers/asm-loongarch/unistd_64.h       |   2 +
>  linux-headers/asm-mips/unistd_n32.h           |   1 +
>  linux-headers/asm-mips/unistd_n64.h           |   1 +
>  linux-headers/asm-mips/unistd_o32.h           |   1 +
>  linux-headers/asm-powerpc/unistd_32.h         |   1 +
>  linux-headers/asm-powerpc/unistd_64.h         |   1 +
>  linux-headers/asm-riscv/kvm.h                 |  11 +-
>  linux-headers/asm-riscv/ptrace.h              |  37 ++
>  linux-headers/asm-riscv/unistd_32.h           |   1 +
>  linux-headers/asm-riscv/unistd_64.h           |   1 +
>  linux-headers/asm-s390/unistd_32.h            | 446 ------------------
>  linux-headers/asm-s390/unistd_64.h            |   1 +
>  linux-headers/asm-x86/kvm.h                   |  21 +-
>  linux-headers/asm-x86/unistd_32.h             |   1 +
>  linux-headers/asm-x86/unistd_64.h             |   1 +
>  linux-headers/asm-x86/unistd_x32.h            |   1 +
>  linux-headers/linux/const.h                   |  18 +
>  linux-headers/linux/iommufd.h                 |  48 ++
>  linux-headers/linux/kvm.h                     |  46 +-
>  linux-headers/linux/mshv.h                    |   4 +-
>  linux-headers/linux/psp-sev.h                 |   2 +-
>  linux-headers/linux/stddef.h                  |   4 +
>  linux-headers/linux/vduse.h                   |  85 +++-
>  linux-headers/linux/vfio.h                    |  30 +-
>  migration/migration.h                         |  17 +-
>  migration/savevm.h                            |   4 +-
>  hw/core/machine.c                             |   4 +-
>  hw/vfio/migration.c                           | 195 +++++++-
>  migration/migration.c                         |  65 ++-
>  migration/options.c                           |   9 +
>  migration/savevm.c                            | 146 ++++--
>  hw/vfio/trace-events                          |   5 +-
>  migration/trace-events                        |   8 +-
>  scripts/update-linux-headers.sh               |   2 +
>  53 files changed, 1109 insertions(+), 580 deletions(-)
>  create mode 100644 include/standard-headers/linux/typelimits.h
>  create mode 100644 include/standard-headers/linux/virtio_rtc.h
>  delete mode 100644 linux-headers/asm-s390/unistd_32.h
> 
> -- 
> 2.40.1
> 

-- 
Peter Xu


Reply via email to