| ====================================== |
| QEMU virtio-net standby (net_failover) |
| ====================================== |
| |
| This document explains the setup and usage of virtio-net standby feature which |
| is used to create a net_failover pair of devices. |
| |
| The general idea is that we have a pair of devices, a (vfio-)pci and a |
| virtio-net device. Before migration the vfio device is unplugged and data flows |
| through the virtio-net device, on the target side another vfio-pci device is |
| plugged in to take over the data-path. In the guest the net_failover kernel |
| module will pair net devices with the same MAC address. |
| |
| The two devices are called primary and standby device. The fast hardware based |
| networking device is called the primary device and the virtio-net device is the |
| standby device. |
| |
| Restrictions |
| ------------ |
| |
| Currently only PCIe devices are allowed as primary devices, this restriction |
| can be lifted in the future with enhanced QEMU support. Also, only networking |
| devices are allowed as primary device. The user needs to ensure that primary |
| and standby devices are not plugged into the same PCIe slot. |
| |
| Usecase |
| ------- |
| |
| Virtio-net standby allows easy migration while using a passed-through fast |
| networking device by falling back to a virtio-net device for the duration of |
| the migration. It is like a simple version of a bond, the difference is that it |
| requires no configuration in the guest. When a guest is live-migrated to |
| another host QEMU will unplug the primary device via the PCIe based hotplug |
| handler and traffic will go through the virtio-net device. On the target |
| system the primary device will be automatically plugged back and the |
| net_failover module registers it again as the primary device. |
| |
| Usage |
| ----- |
| |
| The primary device can be hotplugged or be part of the startup configuration |
| |
| -device virtio-net-pci,netdev=hostnet1,id=net1,mac=52:54:00:6f:55:cc, \ |
| bus=root2,failover=on |
| |
| With the parameter failover=on the VIRTIO_NET_F_STANDBY feature will be enabled. |
| |
| -device vfio-pci,host=5e:00.2,id=hostdev0,bus=root1,failover_pair_id=net1 |
| |
| failover_pair_id references the id of the virtio-net standby device. This |
| is only for pairing the devices within QEMU. The guest kernel module |
| net_failover will match devices with identical MAC addresses. |
| |
| Hotplug |
| ------- |
| |
| Both primary and standby device can be hotplugged via the QEMU monitor. Note |
| that if the virtio-net device is plugged first a warning will be issued that it |
| couldn't find the primary device. |
| |
| Migration |
| --------- |
| |
| A new migration state wait-unplug was added for this feature. If failover primary |
| devices are present in the configuration, migration will go into this state. |
| It will wait until the device unplug is completed in the guest and then move into |
| active state. On the target system the primary devices will be automatically hotplugged |
| when the feature bit was negotiated for the virtio-net standby device. |