• P
    migration: Create the postcopy preempt channel asynchronously · d0edb8a1
    Peter Xu 提交于
    This patch allows the postcopy preempt channel to be created
    asynchronously.  The benefit is that when the connection is slow, we won't
    take the BQL (and potentially block all things like QMP) for a long time
    without releasing.
    
    A function postcopy_preempt_wait_channel() is introduced, allowing the
    migration thread to be able to wait on the channel creation.  The channel
    is always created by the main thread, in which we'll kick a new semaphore
    to tell the migration thread that the channel has created.
    
    We'll need to wait for the new channel in two places: (1) when there's a
    new postcopy migration that is starting, or (2) when there's a postcopy
    migration to resume.
    
    For the start of migration, we don't need to wait for this channel until
    when we want to start postcopy, aka, postcopy_start().  We'll fail the
    migration if we found that the channel creation failed (which should
    probably not happen at all in 99% of the cases, because the main channel is
    using the same network topology).
    
    For a postcopy recovery, we'll need to wait in postcopy_pause().  In that
    case if the channel creation failed, we can't fail the migration or we'll
    crash the VM, instead we keep in PAUSED state, waiting for yet another
    recovery.
    Reviewed-by: NDr. David Alan Gilbert <dgilbert@redhat.com>
    Reviewed-by: NManish Mishra <manish.mishra@nutanix.com>
    Signed-off-by: NPeter Xu <peterx@redhat.com>
    Message-Id: <20220707185509.27311-1-peterx@redhat.com>
    Signed-off-by: NDr. David Alan Gilbert <dgilbert@redhat.com>
    d0edb8a1
postcopy-ram.c 51.7 KB