qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [RFC PATCH 00/13] Add a plugin to support out-of-band live migration


From: Dong, Eddie
Subject: RE: [RFC PATCH 00/13] Add a plugin to support out-of-band live migration for VFIO pass-through device
Date: Wed, 1 Jun 2022 17:09:25 +0000


> -----Original Message-----
> From: Qemu-devel <qemu-devel-
> bounces+eddie.dong=intel.com@nongnu.org> On Behalf Of Alex Williamson
> Sent: Thursday, May 26, 2022 11:44 AM
> To: Rao, Lei <Lei.Rao@intel.com>
> Cc: Tian, Kevin <kevin.tian@intel.com>; Dong, Eddie
> <eddie.dong@intel.com>; Zeng, Jason <jason.zeng@intel.com>;
> quintela@redhat.com; dgilbert@redhat.com; Li, Yadong
> <yadong.li@intel.com>; Liu, Yi L <yi.l.liu@intel.com>; qemu-
> devel@nongnu.org
> Subject: Re: [RFC PATCH 00/13] Add a plugin to support out-of-band live
> migration for VFIO pass-through device
> 
> On Tue, 24 May 2022 14:18:35 +0800
> Lei Rao <lei.rao@intel.com> wrote:
> 
> > Migration of a VFIO passthrough device can be supported by using a
> > device specific kernel driver to save/restore the device state thru
> > device specific interfaces. But this approach doesn't work for devices
> > that lack a state migration interface, e.g. NVMe.
> >
> > On the other hand, Infrastructure Process Unit (IPU) or Data
> > Processing Unit
> > (DPU) vendors may choose to implement an out-of-band interface from
> > the SoC to help manage the state of such non-migratable devices e.g.
> > via gRPC or JSON-RPC protocols.
> >
> > This RFC attempts to support such out-of-band migration interface by
> > introducing the concept of migration backends in vfio. The existing
> > logic around vfio migration uAPI is now called the 'local' backend while a
> new 'out-of-band'
> > backend is further introduced allowing vfio to redirect VMState ops to
> > an external plugin.
> >
> > Currently, the backend migration Ops is defined close to
> > SaveVMHandlers. We also considered whether there is value of
> > abstracting it in a lower level e.g. close to vfio migration uAPI but
> > no clear conclusion. Hence this is one part which we'd like to hear
> suggestions.
> >
> > This proposal adopts a plugin mechanism (an example can be found in
> > [1]) given that IPU/DPU vendors usually implement proprietary
> > migration interfaces without a standard. But we are also open if an
> > alternative option makes better sense, e.g. via loadable modules (with
> > Qemu supporting gRPC or JSON-RPC support) or an IPC mechanism similar
> to vhost-user.
> 
> AFAIU, QEMU is not interested in supporting plugin modules, especially
> proprietary ones.  I don't see that a case has really been made that this
> cannot be done in-band, through a vfio-pci variant driver, possibly making
> use of proprietary interfaces to a userspace agent if necessary (though
> please don't ask such to be accepted in-tree for the kernel either).  A vfio-
> user device server might also host such proprietary, device specific agents
> while supporting the standard, in-band migration interface.  Thanks,
> 

Thanks Alex. Removing plug-in module is not a problem.

Do you mean to implement the migration and protocol handling inside Qemu-client 
(probably vfio-client after the VFIO-user is merged)? Or to build as part of 
libvfio-user? We can also build it as a separate process of Qemu-server as part 
of Multi-Process Qemu.

In here, the protocol between host CPU and SoC is based on gRPC, which support 
Rust code in client (Host CPU side here) more than C/C++. Do you have any 
suggestion to better support Rust code with Qemu C/C++ code? 


Thx Eddie




> Alex
> 
> >
> > The following graph describes the overall component relationship:
> >
> >  +----------------------------------------------------+
> >  | QEMU                                               |
> >  | +------------------------------------------------+ |
> >  | |        VFIO Live Migration Framework           | |
> >  | |    +--------------------------------------+    | |
> >  | |    |         VFIOMigrationOps             |    | |
> >  | |    +-------^---------------------^--------+    | |
> >  | |            |                     |             | |
> >  | |    +-------v-------+     +-------v--------+    | |
> >  | |    | LM Backend Via|     | LM Backend Via |    | |
> >  | |    |   Device Fd   |     |    Plugins     |    | |
> >  | |    +-------^-------+     |     +----------+    | |
> >  | |            |             |     |Plugin Ops+----+-+------------+
> >  | |            |             +-----+----------+    | |            |
> >  | |            |                                   | |  
> > +---------v----------+
> >  | +------------+-----------------------------------+ |  |  Vendor Specific 
> >   |
> >  |              |                                     |  |    Plugins(.so)  
> >   |
> >  +--------------+-------------------------------------+  
> > +----------+---------+
> >   UserSpace     |                                                   |
> > ----------------+---------------------------------------------      |
> >   Kernel        |                                                   |
> >                 |                                                   |
> >      +----------v----------------------+                            |
> >      |        Kernel VFIO Driver       |                            |
> >      |    +-------------------------+  |                            |
> >      |    |                         |  |                            | 
> > Network
> >      |    | Vendor-Specific Driver  |  |                            |
> >      |    |                         |  |                            |
> >      |    +----------^--------------+  |                            |
> >      |               |                 |                            |
> >      +---------------+-----------------+                            |
> >                      |                                              |
> >                      |                                              |
> > ---------------------+-----------------------------------------     |
> >   Hardware           |                                              |
> >                      |            +-----+-----+-----+----+-----+    |
> >           +----------v------+     | VF0 | VF1 | VF2 | ...| VFn |    |
> >           |   Traditional   |     +-----+-----+-----+----+-----+    |
> >           |  PCIe Devices   |     |                            |    |
> >           +-----------------+     |   +--------+------------+  |    |
> >                                   |   |        |   Agent    |<-+----+
> >                                   |   |        +------------+  |
> >                                   |   |                     |  |
> >                                   |   | SOC                 |  |
> >                                   |   +---------------------+  |
> >                                   | IPU                        |
> >                                   +----------------------------+
> >
> > Two command-line parameters (x-plugin-path and x-plugin-arg) are
> > introduced to enable the out-of-band backend. If specified, vfio will
> > attempt to use the out-of-band backend.
> >
> > The following is an example of VFIO command-line parameters for OOB-
> Approach:
> >
> >   -device
> > vfio-pci,id=$ID,host=$bdf,x-enable-migration,x-plugin-path=$plugin_pat
> > h,x-plugin-arg=$plugin_arg
> >
> > [1] https://github.com/raolei-intel/vfio-lm-plugin-example.git
> >
> > Lei Rao (13):
> >   vfio/migration: put together checks of migration initialization
> >     conditions
> >   vfio/migration: move migration struct allocation out of
> >     vfio_migration_init
> >   vfio/migration: move vfio_get_dev_region_info out of
> >     vfio_migration_probe
> >   vfio/migration: Separated functions that relate to the In-Band
> >     approach
> >   vfio/migration: rename functions that relate to the In-Band approach
> >   vfio/migration: introduce VFIOMigrationOps layer in VFIO live
> >     migration framework
> >   vfio/migration: move the statistics of bytes_transferred to generic
> >     VFIO migration layer
> >   vfio/migration: split migration handler registering from
> >     vfio_migration_init
> >   vfio/migration: move the functions of In-Band approach to a new file
> >   vfio/pci: introduce command-line parameters to specify migration
> >     method
> >   vfio/migration: add a plugin layer to support out-of-band live
> >     migration
> >   vfio/migration: add some trace-events for vfio migration plugin
> >   vfio/migration: make the region and plugin member of struct
> >     VFIOMigration to be a union
> >
> >  docs/devel/vfio-migration-plugin.rst    | 165 +++++++
> >  hw/vfio/meson.build                     |   2 +
> >  hw/vfio/migration-local.c               | 456 +++++++++++++++++++
> >  hw/vfio/migration-plugin.c              | 266 +++++++++++
> >  hw/vfio/migration.c                     | 577 ++++++------------------
> >  hw/vfio/pci.c                           |   2 +
> >  hw/vfio/trace-events                    |   9 +-
> >  include/hw/vfio/vfio-common.h           |  37 +-
> >  include/hw/vfio/vfio-migration-plugin.h |  21 +
> >  9 files changed, 1096 insertions(+), 439 deletions(-)  create mode
> > 100644 docs/devel/vfio-migration-plugin.rst
> >  create mode 100644 hw/vfio/migration-local.c  create mode 100644
> > hw/vfio/migration-plugin.c  create mode 100644
> > include/hw/vfio/vfio-migration-plugin.h
> >
> 


reply via email to

[Prev in Thread] Current Thread [Next in Thread]