[libvirt] [RFC v1 4/6] migration: Migration support for ephemeral hostdevs

Daniel P. Berrange berrange at redhat.com
Thu May 14 08:38:30 UTC 2015


On Thu, May 14, 2015 at 10:02:39AM +0800, Chen Fan wrote:
> 
> On 05/13/2015 10:30 PM, Laine Stump wrote:
> >On 05/13/2015 05:57 AM, Daniel P. Berrange wrote:
> >>On Wed, May 13, 2015 at 11:36:30AM +0800, Chen Fan wrote:
> >>>add migration support for ephemeral host devices, introduce
> >>>two 'detach' and 'restore' functions to unplug/plug host devices
> >>>during migration.
> >>>
> >>>Signed-off-by: Chen Fan <chen.fan.fnst at cn.fujitsu.com>
> >>>---
> >>>  src/qemu/qemu_migration.c | 171 ++++++++++++++++++++++++++++++++++++++++++++--
> >>>  src/qemu/qemu_migration.h |   9 +++
> >>>  src/qemu/qemu_process.c   |  11 +++
> >>>  3 files changed, 187 insertions(+), 4 deletions(-)
> >>>
> >>>diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
> >>>index 56112f9..d5a698f 100644
> >>>--- a/src/qemu/qemu_migration.c
> >>>+++ b/src/qemu/qemu_migration.c
> >>>+void
> >>>+qemuMigrationRestoreEphemeralDevices(virQEMUDriverPtr driver,
> >>>+                                     virConnectPtr conn,
> >>>+                                     virDomainObjPtr vm,
> >>>+                                     bool live)
> >>>+{
> >>>+    qemuDomainObjPrivatePtr priv = vm->privateData;
> >>>+    virDomainDeviceDefPtr dev;
> >>>+    int ret = -1;
> >>>+    size_t i;
> >>>+
> >>>+    VIR_DEBUG("Rum domain restore ephemeral devices");
> >>>+
> >>>+    for (i = 0; i < priv->nEphemeralDevices; i++) {
> >>>+        dev = priv->ephemeralDevices[i];
> >>>+
> >>>+        switch ((virDomainDeviceType) dev->type) {
> >>>+        case VIR_DOMAIN_DEVICE_NET:
> >>>+            if (live) {
> >>>+                ret = qemuDomainAttachNetDevice(conn, driver, vm,
> >>>+                                                dev->data.net);
> >>>+            } else {
> >>>+                ret = virDomainNetInsert(vm->def, dev->data.net);
> >>>+            }
> >>>+
> >>>+            if (!ret)
> >>>+                dev->data.net = NULL;
> >>>+            break;
> >>>+        case VIR_DOMAIN_DEVICE_HOSTDEV:
> >>>+            if (live) {
> >>>+                ret = qemuDomainAttachHostDevice(conn, driver, vm,
> >>>+                                                 dev->data.hostdev);
> >>>+           } else {
> >>>+                ret =virDomainHostdevInsert(vm->def, dev->data.hostdev);
> >>>+            }
> >>This re-attach step is where we actually have far far far worse problems
> >>than with detach. This is blindly assuming that the guest on the target
> >>host can use the same hostdev that it was using on the source host.
> >(kind of pointless to comment on, since pkrempa has changed my opinion
> >by forcing me to think about the "failure to reattach" condition, but
> >could be useful info for others)
> >
> >For a <hostdev>, yes, but not for <interface type='network'> (which
> >would point to a libvirt network pool of VFs).
> >
> >>This
> >>is essentially useless in the real world.
> >Agreed (for plain <hostdev>)
> >
> >>Even if the same vendor/model
> >>device is available on the target host, it is very unlikely to be available
> >>at the same bus/slot/function that it was on the source. It is quite likely
> >>neccessary to allocate a complete different NIC, or if using SRIOV allocate
> >>a different function. It is also not uncommon to have different vendor/models,
> >>so a completely different NIC may be required.
> >In the case of a network device, a different brand/model of NIC at a
> >different PCI address using a different guest driver shouldn't be a
> >problem for the guest, as long as the MAC address is the same (for a
> >Linux guest anyway; not sure what a Windows guest would do with a NIC
> >that had the same MAC but used a different driver). This points out the
> >folly of trying to do migration with attached hostdevs (managed at *any*
> >level), for anything other than SRIOV VFs (which can have their MAC
> >address set before attach, unlike non-SRIOV NICs).
> >
> >.
> So should we focus on implementing the feature that support migration with
> SRIOV
> VFs at first?
> 
> I think that is simple to achieve my original target that implement NIC
> passthrough
> device migration. because sometimes we assign a native NIC to guest to keep
> the
> performance of network I/O, due to the MAC limitation of the non-SRIOV NICs,
> as
> laine said the cost of SRIOV NIC is cheaper than what we try.

No, I think you should /not/ attempt to implement this in libvirt at all
and instead focus on the higher level apps.

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list