Skip to content
Snippets Groups Projects
  • Leonardo Bras's avatar
    5b1d9bab
    multifd: Implement zero copy write in multifd migration (multifd-zero-copy) · 5b1d9bab
    Leonardo Bras authored
    
    Implement zero copy send on nocomp_send_write(), by making use of QIOChannel
    writev + flags & flush interface.
    
    Change multifd_send_sync_main() so flush_zero_copy() can be called
    after each iteration in order to make sure all dirty pages are sent before
    a new iteration is started. It will also flush at the beginning and at the
    end of migration.
    
    Also make it return -1 if flush_zero_copy() fails, in order to cancel
    the migration process, and avoid resuming the guest in the target host
    without receiving all current RAM.
    
    This will work fine on RAM migration because the RAM pages are not usually freed,
    and there is no problem on changing the pages content between writev_zero_copy() and
    the actual sending of the buffer, because this change will dirty the page and
    cause it to be re-sent on a next iteration anyway.
    
    A lot of locked memory may be needed in order to use multifd migration
    with zero-copy enabled, so disabling the feature should be necessary for
    low-privileged users trying to perform multifd migrations.
    
    Signed-off-by: default avatarLeonardo Bras <leobras@redhat.com>
    Reviewed-by: default avatarPeter Xu <peterx@redhat.com>
    Reviewed-by: default avatarDaniel P. Berrangé <berrange@redhat.com>
    Message-Id: <20220513062836.965425-9-leobras@redhat.com>
    Signed-off-by: default avatarDr. David Alan Gilbert <dgilbert@redhat.com>
    5b1d9bab
    History
    multifd: Implement zero copy write in multifd migration (multifd-zero-copy)
    Leonardo Bras authored
    
    Implement zero copy send on nocomp_send_write(), by making use of QIOChannel
    writev + flags & flush interface.
    
    Change multifd_send_sync_main() so flush_zero_copy() can be called
    after each iteration in order to make sure all dirty pages are sent before
    a new iteration is started. It will also flush at the beginning and at the
    end of migration.
    
    Also make it return -1 if flush_zero_copy() fails, in order to cancel
    the migration process, and avoid resuming the guest in the target host
    without receiving all current RAM.
    
    This will work fine on RAM migration because the RAM pages are not usually freed,
    and there is no problem on changing the pages content between writev_zero_copy() and
    the actual sending of the buffer, because this change will dirty the page and
    cause it to be re-sent on a next iteration anyway.
    
    A lot of locked memory may be needed in order to use multifd migration
    with zero-copy enabled, so disabling the feature should be necessary for
    low-privileged users trying to perform multifd migrations.
    
    Signed-off-by: default avatarLeonardo Bras <leobras@redhat.com>
    Reviewed-by: default avatarPeter Xu <peterx@redhat.com>
    Reviewed-by: default avatarDaniel P. Berrangé <berrange@redhat.com>
    Message-Id: <20220513062836.965425-9-leobras@redhat.com>
    Signed-off-by: default avatarDr. David Alan Gilbert <dgilbert@redhat.com>