[libvirt PATCH v2 0/6] <interface> <teaming> element (was: virtio failover / vfio auto-plug-on-migrate)

Dan Kenigsberg danken at redhat.com
Sat Jan 25 19:57:41 UTC 2020


On Fri, 24 Jan 2020, 17:54 Laine Stump, <laine at redhat.com> wrote:

> V1: https://www.redhat.com/archives/libvir-list/2020-January/msg00813.html
>
> This all used different names in V1 - in that incarnation the
> configuration was done using "failover" and "backupAlias" attributes
> added to the <driver> subelement of <interface>. But the resulting
> code was cumbersome and had little bits scattered all over the place
> due to needing it in both hostdev and interface parsing/formatting.
>
> In his review of V1, danpb suggesting just adding a new subelement for
> this configuration to free ourselves from the constraints of <driver>
> parsing/formatting. This ended up dramatically simplifying the code
> (hence the lack of V1's refactoring patches in V2, and a decrease in
> patch count from 12 to 6).
>
> During further discussion in email and on IRC, we decided that naming
> the element <failover> was too limiting, as it implied the behavior of
> what is, to libvirt, just two network devices that should be
> teamed/bonded together - it's completely up to the hypervisor and
> guest what is done with this information. In light of that, we decided
> to name the new subelement <teaming>, and to specify the two
> interfaces as "persistent" (an interface that will always remain
> plugged in) and "transient" (an interface that may be periodically
> unplugged (during migration, in the case of QEMU). So the virtio
> device will have
>
>    <teaming type='persistent'/>
>
> and the hostdev device will have
>
>    <teaming type='transient' persistent='ua-myvirtio'/>
>
> (note that the persistent interface must have <alias name='ua-myvirtio'/>)
>
> Given this config, libvirt will add "failover=on" to the device
> commandline arg for the virtio device, and
> "failover_pair_id=ua-myvirtio" to the arg for the hostdev device (and
> when a migration is requested, it will notice if there is a hostdev
> that has <teaming type='transient'/> set, and will allow the migration
> in this case, but still disallow migrations of domains with normal
> hostdevs).
>
> In response to these extra commandline options, QEMU will set some
> extra capabilities in the virtio device PCI capabilities data, and
> will also automatically unplug/re-plug the hostdev device before and
> after migration.
>
> In the guest, the virtio-net driver will notice the extra PCI
> capabilities and use this as a clue that it should search for another
> device with matching MAC address (NB: the guest driver requires the
> two devices to have matching MAC addresses) to join into a bond with
> the virtio-net device.


I like the <teaming/> abstraction.

As I wrote earlier, as a virt-manager user I'd like to specify that two
interfaces are teamed; I would not care to copy the mac address of one onto
the other. I prefer that libvirt hides this virtio awkwardness by passing
the "persistent" mac address to both qemu nics. Would libvirt do this
service to its multiple clients?


This bond is hard-wired to always prefer the
> hostdev device whenever it is present, and use the virtio device as
> backup when the hostdev is unplugged.
>
> ----
>
> As mentioned in a followup to the V1 cover letter, there is a
> regression in QEMU 4.2.0 that causes QEMU to segv when a hostdev is
> unplugged. That bug is fixed with this upstream QEMU patch:
>
>
> https://git.qemu.org/?p=qemu.git;a=commitdiff;h=0446f8121723b134ca1d1ed0b73e96d4a0a8689d;hp=48008198270e3ebcc9394401d676c54ed5ac139c
>
> Be sure to use a qemu build with this patch applied, or you may not
> even be able to start the guest! Also we've found that the
> DEVICE_DELETED event is never sent to libvirt when one of these
> hostdevs is manually unplugged, meaning that libvirt keeps the device
> marked as
> "in-use", and it therefore cannot be re-plugged to the guest until
> after a complete guest "power cycle". AFAIK there isn't yet a fix for
> that bug, so don't expect manual unplug of the device to work.
>
> Laine Stump (6):
>   qemu: add capabilities flag for failover feature
>   conf: parse/format <teaming> subelement of <interface>
>   qemu: support interface <teaming> functionality
>   qemu: allow migration with assigned PCI hostdev if <teaming> is set
>   qemu: add wait-unplug to qemu migration status enum
>   docs: document <interface> subelement <teaming>
>
>  docs/formatdomain.html.in                     | 100 ++++++++++++++++++
>  docs/news.xml                                 |  28 +++++
>  docs/schemas/domaincommon.rng                 |  19 ++++
>  src/conf/domain_conf.c                        |  45 ++++++++
>  src/conf/domain_conf.h                        |  14 +++
>  src/qemu/qemu_capabilities.c                  |   4 +
>  src/qemu/qemu_capabilities.h                  |   3 +
>  src/qemu/qemu_command.c                       |   9 ++
>  src/qemu/qemu_domain.c                        |  36 ++++++-
>  src/qemu/qemu_migration.c                     |  53 +++++++++-
>  src/qemu/qemu_monitor.c                       |   1 +
>  src/qemu/qemu_monitor.h                       |   1 +
>  src/qemu/qemu_monitor_json.c                  |   1 +
>  .../caps_4.2.0.aarch64.xml                    |   1 +
>  .../caps_4.2.0.x86_64.xml                     |   1 +
>  .../net-virtio-teaming-network.xml            |  37 +++++++
>  .../qemuxml2argvdata/net-virtio-teaming.args  |  40 +++++++
>  tests/qemuxml2argvdata/net-virtio-teaming.xml |  50 +++++++++
>  tests/qemuxml2argvtest.c                      |   4 +
>  .../net-virtio-teaming-network.xml            |  51 +++++++++
>  .../qemuxml2xmloutdata/net-virtio-teaming.xml |  66 ++++++++++++
>  tests/qemuxml2xmltest.c                       |   6 ++
>  22 files changed, 563 insertions(+), 7 deletions(-)
>  create mode 100644 tests/qemuxml2argvdata/net-virtio-teaming-network.xml
>  create mode 100644 tests/qemuxml2argvdata/net-virtio-teaming.args
>  create mode 100644 tests/qemuxml2argvdata/net-virtio-teaming.xml
>  create mode 100644 tests/qemuxml2xmloutdata/net-virtio-teaming-network.xml
>  create mode 100644 tests/qemuxml2xmloutdata/net-virtio-teaming.xml
>
> --
> 2.24.1
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20200125/cbe8801a/attachment-0001.htm>


More information about the libvir-list mailing list