[PATCH v6 00/19] virtio-net: live-TAP local migration

Vladimir Sementsov-Ogievskiy posted 19 patches 5 days, 4 hours ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20250923100110.70862-1-vsementsov@yandex-team.ru
Maintainers: "Michael S. Tsirkin" <mst@redhat.com>, Jason Wang <jasowang@redhat.com>, Peter Xu <peterx@redhat.com>, Fabiano Rosas <farosas@suse.de>, Markus Armbruster <armbru@redhat.com>, Michael Roth <michael.roth@amd.com>, Stefan Weil <sw@weilnetz.de>, Eric Blake <eblake@redhat.com>, Thomas Huth <thuth@redhat.com>, "Philippe Mathieu-Daudé" <philmd@linaro.org>, "Daniel P. Berrangé" <berrange@redhat.com>
hw/net/virtio-net.c                           | 138 +++++-
include/migration/misc.h                      |   1 +
include/net/tap.h                             |   5 +
include/qapi/util.h                           |  17 +
migration/migration.c                         |   8 +-
migration/options.c                           |  27 +
migration/options.h                           |   2 +
net/tap-bsd.c                                 |   3 +-
net/tap-linux.c                               |  19 +-
net/tap-solaris.c                             |   3 +-
net/tap-stub.c                                |   3 +-
net/tap-win32.c                               |   5 +
net/tap.c                                     | 467 ++++++++++++++----
net/tap_int.h                                 |   4 +-
qapi/migration.json                           |  47 +-
tests/functional/qemu_test/decorators.py      |  16 +
tests/functional/test_x86_64_tap_migration.py | 344 +++++++++++++
17 files changed, 974 insertions(+), 135 deletions(-)
create mode 100644 tests/functional/test_x86_64_tap_migration.py
[PATCH v6 00/19] virtio-net: live-TAP local migration
Posted by Vladimir Sementsov-Ogievskiy 5 days, 4 hours ago
Hi all!

Here is a new migration parameter backend-transfer, which allows to
enable local migration of TAP virtio-net backend, including its
properties and open fds.

With this new option, management software doesn't need to
initialize new TAP and do a switch to it. Nothing should be
done around virtio-net in local migration: it just migrates
and continues to use same TAP device. So we avoid extra logic
in management software, extra allocations in kernel (for new TAP),
and corresponding extra delay in migration downtime.

v6:
- rebase on master (to solve conflict with merged
  "io: deal with blocking/non-blocking fds")
- use name "backend-transfer" for the whole feature consistently
  though the whole series. (live-backend is good, but actually,
  we are already in "live-migration", so every its feature may
  have "live-" prefix, and it seems redundant)

03-04: new, making changes in 05 correct
08-09: split "net/tap: rework tap_set_sndbuf()" into two commits
15: fix windows compilation
16: move has_ = true, to _params_init
18: use shorter name

and some other cosmetic changes.

Vladimir Sementsov-Ogievskiy (19):
  net/tap: net_init_tap_one(): drop extra error propagation
  net/tap: net_init_tap_one(): move parameter checking earlier
  net/tap: rework net_tap_init()
  net/tap: pass NULL to net_init_tap_one() in cases when scripts are
    NULL
  net/tap: rework scripts handling
  net/tap: setup exit notifier only when needed
  net/tap: split net_tap_fd_init()
  net/tap: tap_set_sndbuf(): add return value
  net/tap: rework tap_set_sndbuf()
  net/tap: rework sndbuf handling
  net/tap: introduce net_tap_setup()
  net/tap: move vhost fd initialization to net_tap_new()
  net/tap: finalize net_tap_set_fd() logic
  migration: add MIG_EVENT_PRE_INCOMING
  net/tap: postpone tap setup to pre-incoming
  qapi: add interface for backend-transfer virtio-net/tap migration
  virtio-net: support backend-transfer migration for virtio-net/tap
  tests/functional: add skipWithoutSudo() decorator
  tests/functional: add test_x86_64_tap_migration

 hw/net/virtio-net.c                           | 138 +++++-
 include/migration/misc.h                      |   1 +
 include/net/tap.h                             |   5 +
 include/qapi/util.h                           |  17 +
 migration/migration.c                         |   8 +-
 migration/options.c                           |  27 +
 migration/options.h                           |   2 +
 net/tap-bsd.c                                 |   3 +-
 net/tap-linux.c                               |  19 +-
 net/tap-solaris.c                             |   3 +-
 net/tap-stub.c                                |   3 +-
 net/tap-win32.c                               |   5 +
 net/tap.c                                     | 467 ++++++++++++++----
 net/tap_int.h                                 |   4 +-
 qapi/migration.json                           |  47 +-
 tests/functional/qemu_test/decorators.py      |  16 +
 tests/functional/test_x86_64_tap_migration.py | 344 +++++++++++++
 17 files changed, 974 insertions(+), 135 deletions(-)
 create mode 100644 tests/functional/test_x86_64_tap_migration.py

-- 
2.48.1
Re: [PATCH v6 00/19] virtio-net: live-TAP local migration
Posted by Lei Yang 4 days, 6 hours ago
Tested this series of patches with virtio-net regression tests,
everything works fine.

Tested-by: Lei Yang <leiyang@redhat.com>

On Tue, Sep 23, 2025 at 6:01 PM Vladimir Sementsov-Ogievskiy
<vsementsov@yandex-team.ru> wrote:
>
> Hi all!
>
> Here is a new migration parameter backend-transfer, which allows to
> enable local migration of TAP virtio-net backend, including its
> properties and open fds.
>
> With this new option, management software doesn't need to
> initialize new TAP and do a switch to it. Nothing should be
> done around virtio-net in local migration: it just migrates
> and continues to use same TAP device. So we avoid extra logic
> in management software, extra allocations in kernel (for new TAP),
> and corresponding extra delay in migration downtime.
>
> v6:
> - rebase on master (to solve conflict with merged
>   "io: deal with blocking/non-blocking fds")
> - use name "backend-transfer" for the whole feature consistently
>   though the whole series. (live-backend is good, but actually,
>   we are already in "live-migration", so every its feature may
>   have "live-" prefix, and it seems redundant)
>
> 03-04: new, making changes in 05 correct
> 08-09: split "net/tap: rework tap_set_sndbuf()" into two commits
> 15: fix windows compilation
> 16: move has_ = true, to _params_init
> 18: use shorter name
>
> and some other cosmetic changes.
>
> Vladimir Sementsov-Ogievskiy (19):
>   net/tap: net_init_tap_one(): drop extra error propagation
>   net/tap: net_init_tap_one(): move parameter checking earlier
>   net/tap: rework net_tap_init()
>   net/tap: pass NULL to net_init_tap_one() in cases when scripts are
>     NULL
>   net/tap: rework scripts handling
>   net/tap: setup exit notifier only when needed
>   net/tap: split net_tap_fd_init()
>   net/tap: tap_set_sndbuf(): add return value
>   net/tap: rework tap_set_sndbuf()
>   net/tap: rework sndbuf handling
>   net/tap: introduce net_tap_setup()
>   net/tap: move vhost fd initialization to net_tap_new()
>   net/tap: finalize net_tap_set_fd() logic
>   migration: add MIG_EVENT_PRE_INCOMING
>   net/tap: postpone tap setup to pre-incoming
>   qapi: add interface for backend-transfer virtio-net/tap migration
>   virtio-net: support backend-transfer migration for virtio-net/tap
>   tests/functional: add skipWithoutSudo() decorator
>   tests/functional: add test_x86_64_tap_migration
>
>  hw/net/virtio-net.c                           | 138 +++++-
>  include/migration/misc.h                      |   1 +
>  include/net/tap.h                             |   5 +
>  include/qapi/util.h                           |  17 +
>  migration/migration.c                         |   8 +-
>  migration/options.c                           |  27 +
>  migration/options.h                           |   2 +
>  net/tap-bsd.c                                 |   3 +-
>  net/tap-linux.c                               |  19 +-
>  net/tap-solaris.c                             |   3 +-
>  net/tap-stub.c                                |   3 +-
>  net/tap-win32.c                               |   5 +
>  net/tap.c                                     | 467 ++++++++++++++----
>  net/tap_int.h                                 |   4 +-
>  qapi/migration.json                           |  47 +-
>  tests/functional/qemu_test/decorators.py      |  16 +
>  tests/functional/test_x86_64_tap_migration.py | 344 +++++++++++++
>  17 files changed, 974 insertions(+), 135 deletions(-)
>  create mode 100644 tests/functional/test_x86_64_tap_migration.py
>
> --
> 2.48.1
>