mirror of
https://github.com/qemu/qemu.git
synced 2026-07-08 17:46:10 +00:00
vfio/migration: Implement VFIO_PRECOPY_INFO_REINIT feature
According to VFIO uAPI, precopy initial_bytes is considered as critical data that should be transferred and loaded prior to moving to STOP_COPY state to ensure precopy phase would be effective. As currently defined, initial_bytes can only decrease as it's being read from the data fd. However, there are cases where a new chunk of initial_bytes should be transferred during precopy. The new VFIO_PRECOPY_INFO_REINIT feature addresses this and allows reporting a new value for initial_bytes regardless of any previously reported values. Implement VFIO_PRECOPY_INFO_REINIT feature: 1. Opt-in for VFIO_DEVICE_FEATURE_MIG_PRECOPY_INFOv2 to make VFIO_PRECOPY_INFO_REINIT available. 2. Request a new switchover ACK if initial_bytes increases post of a previous switchover ACK. This ensures the device is not moved to STOP_COPY before initial_bytes has reached zero again. Acked-by: Peter Xu <peterx@redhat.com> Signed-off-by: Avihai Horon <avihaih@nvidia.com> Link: https://lore.kernel.org/qemu-devel/20260706085211.13905-13-avihaih@nvidia.com Signed-off-by: Cédric Le Goater <clg@redhat.com>
This commit is contained in:
committed by
Cédric Le Goater
parent
f4ba2df1d9
commit
5fcadd7d14
@@ -23,6 +23,20 @@ and recommends that the initial bytes are sent and loaded in the destination
|
||||
before stopping the source VM. Enabling this migration capability will
|
||||
guarantee that and thus, can potentially reduce downtime even further.
|
||||
|
||||
For example, in mlx5 devices, the initial bytes hold metadata used for time
|
||||
consuming pre-allocations of resources on the destination. Although init bytes
|
||||
may be small in size and sending them may take little time, loading them in the
|
||||
destination can take a significant amount of time. Switchover-ack guarantees
|
||||
that this pre-allocation doesn't happen during downtime.
|
||||
|
||||
Initial bytes was originally defined to be monotonically decreasing, however
|
||||
there are cases where a new chunk of initial bytes should be transferred during
|
||||
precopy, e.g., due to a device reconfiguration, etc. The
|
||||
VFIO_PRECOPY_INFO_REINIT feature addresses this and when supported, allows to
|
||||
report a new initial bytes value regardless of any previously reported values.
|
||||
In this case, a new switchover ACK will be requested to make sure the new
|
||||
initial bytes are loaded in the destination before switching over.
|
||||
|
||||
To support migration of multiple devices that might do P2P transactions between
|
||||
themselves, VFIO migration uAPI defines an intermediate P2P quiescent state.
|
||||
While in the P2P quiescent state, P2P DMA transactions cannot be initiated by
|
||||
|
||||
Reference in New Issue
Block a user