• Jason Gunthorpe's avatar
    vfio: Extend the device migration protocol with PRE_COPY · 4db52602
    Jason Gunthorpe authored
    The optional PRE_COPY states open the saving data transfer FD before
    reaching STOP_COPY and allows the device to dirty track internal state
    changes with the general idea to reduce the volume of data transferred
    in the STOP_COPY stage.
    
    While in PRE_COPY the device remains RUNNING, but the saving FD is open.
    
    Only if the device also supports RUNNING_P2P can it support PRE_COPY_P2P,
    which halts P2P transfers while continuing the saving FD.
    
    PRE_COPY, with P2P support, requires the driver to implement 7 new arcs
    and exists as an optional FSM branch between RUNNING and STOP_COPY:
        RUNNING -> PRE_COPY -> PRE_COPY_P2P -> STOP_COPY
    
    A new ioctl VFIO_MIG_GET_PRECOPY_INFO is provided to allow userspace to
    query the progress of the precopy operation in the driver with the idea it
    will judge to move to STOP_COPY at least once the initial data set is
    transferred, and possibly after the dirty size has shrunk appropriately.
    
    This ioctl is valid only in PRE_COPY states and kernel driver should
    return -EINVAL from any other migration state.
    
    Compared to the v1 clarification, STOP_COPY -> PRE_COPY is blocked
    and to be defined in future.
    We also split the pending_bytes report into the initial and sustaining
    values, e.g.: initial_bytes and dirty_bytes.
    initial_bytes: Amount of initial precopy data.
    dirty_bytes: Device state changes relative to data previously retrieved.
    These fields are not required to have any bearing to STOP_COPY phase.
    
    It is recommended to leave PRE_COPY for STOP_COPY only after the
    initial_bytes field reaches zero. Leaving PRE_COPY earlier might make
    things slower.
    Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: default avatarShay Drory <shayd@nvidia.com>
    Reviewed-by: default avatarKevin Tian <kevin.tian@intel.com>
    Reviewed-by: default avatarShameer Kolothum <shameerali.kolothum.thodi@huawei.com>
    Signed-off-by: default avatarYishai Hadas <yishaih@nvidia.com>
    Link: https://lore.kernel.org/r/20221206083438.37807-3-yishaih@nvidia.comSigned-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
    4db52602
vfio_main.c 51.2 KB