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

Chen Fan chen.fan.fnst at cn.fujitsu.com
Thu May 14 02:02:39 UTC 2015


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.

Thanks,
Chen





More information about the libvir-list mailing list