qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [RFC 0/7] Live Migration with Pass-through Devices proposal
@ 2015-04-17  8:53 Chen Fan
  2015-04-17  8:53 ` [Qemu-devel] [RFC 1/7] qemu-agent: add agent init callback when detecting guest setup Chen Fan
                   ` (9 more replies)
  0 siblings, 10 replies; 45+ messages in thread
From: Chen Fan @ 2015-04-17  8:53 UTC (permalink / raw)
  To: libvir-list; +Cc: izumi.taku, qemu-devel

backgrond:
Live migration is one of the most important features of virtualization technology.
With regard to recent virtualization techniques, performance of network I/O is critical.
Current network I/O virtualization (e.g. Para-virtualized I/O, VMDq) has a significant
performance gap with native network I/O. Pass-through network devices have near
native performance, however, they have thus far prevented live migration. No existing
methods solve the problem of live migration with pass-through devices perfectly.

There was an idea to solve the problem in website:
https://www.kernel.org/doc/ols/2008/ols2008v2-pages-261-267.pdf
Please refer to above document for detailed information.

So I think this problem maybe could be solved by using the combination of existing
technology. and the following steps are we considering to implement:

-  before boot VM, we anticipate to specify two NICs for creating bonding device
   (one plugged and one virtual NIC) in XML. here we can specify the NIC's mac addresses
   in XML, which could facilitate qemu-guest-agent to find the network interfaces in guest.

-  when qemu-guest-agent startup in guest it would send a notification to libvirt,
   then libvirt will call the previous registered initialize callbacks. so through
   the callback functions, we can create the bonding device according to the XML
   configuration. and here we use netcf tool which can facilitate to create bonding device
   easily.

-  during migration, unplug the passthroughed NIC. then do native migration.

-  on destination side, check whether need to hotplug new NIC according to specified XML.
   usually, we use migrate "--xml" command option to specify the destination host NIC mac
   address to hotplug a new NIC, because source side passthrough NIC mac address is different,
   then hotplug the deivce according to the destination XML configuration.

TODO:
  1.  when hot add a new NIC in destination side after migration finished, the NIC device
      need to re-enslave on bonding device in guest. otherwise, it is offline. maybe
      we should consider bonding driver to support add interfaces dynamically.

This is an example on how this might work, so I want to hear some voices about this scenario.

Thanks,
Chen

Chen Fan (7):
  qemu-agent: add agent init callback when detecting guest setup
  qemu: add guest init event callback to do the initialize work for
    guest
  hostdev: add a 'bond' type element in <hostdev> element
  qemu-agent: add qemuAgentCreateBond interface
  hostdev: add parse ip and route for bond configure
  migrate: hot remove hostdev at perform phase for bond device
  migrate: add hostdev migrate status to support hostdev migration

 docs/schemas/basictypes.rng   |   6 ++
 docs/schemas/domaincommon.rng |  37 ++++++++
 src/conf/domain_conf.c        | 195 ++++++++++++++++++++++++++++++++++++++---
 src/conf/domain_conf.h        |  40 +++++++--
 src/conf/networkcommon_conf.c |  17 ----
 src/conf/networkcommon_conf.h |  17 ++++
 src/libvirt_private.syms      |   1 +
 src/qemu/qemu_agent.c         | 196 +++++++++++++++++++++++++++++++++++++++++-
 src/qemu/qemu_agent.h         |  12 +++
 src/qemu/qemu_command.c       |   3 +
 src/qemu/qemu_domain.c        |  70 +++++++++++++++
 src/qemu/qemu_domain.h        |  14 +++
 src/qemu/qemu_driver.c        |  38 ++++++++
 src/qemu/qemu_hotplug.c       |   8 +-
 src/qemu/qemu_migration.c     |  91 ++++++++++++++++++++
 src/qemu/qemu_migration.h     |   4 +
 src/qemu/qemu_process.c       |  32 +++++++
 src/util/virhostdev.c         |   3 +
 18 files changed, 745 insertions(+), 39 deletions(-)

-- 
1.9.3

^ permalink raw reply	[flat|nested] 45+ messages in thread

end of thread, other threads:[~2015-05-29  7:37 UTC | newest]

Thread overview: 45+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-04-17  8:53 [Qemu-devel] [RFC 0/7] Live Migration with Pass-through Devices proposal Chen Fan
2015-04-17  8:53 ` [Qemu-devel] [RFC 1/7] qemu-agent: add agent init callback when detecting guest setup Chen Fan
2015-04-17  8:53 ` [Qemu-devel] [RFC 2/7] qemu: add guest init event callback to do the initialize work for guest Chen Fan
2015-04-17  8:53 ` [Qemu-devel] [RFC 3/7] hostdev: add a 'bond' type element in <hostdev> element Chen Fan
2015-04-17  8:53 ` [Qemu-devel] [RFC 4/7] qemu-agent: add qemuAgentCreateBond interface Chen Fan
2015-05-19  9:13   ` Michael S. Tsirkin
2015-05-29  7:37   ` Michal Privoznik
2015-04-17  8:53 ` [Qemu-devel] [RFC 5/7] hostdev: add parse ip and route for bond configure Chen Fan
2015-04-17  8:53 ` [Qemu-devel] [RFC 6/7] migrate: hot remove hostdev at perform phase for bond device Chen Fan
2015-04-17  8:53 ` [Qemu-devel] [RFC 7/7] migrate: add hostdev migrate status to support hostdev migration Chen Fan
2015-04-17  8:53 ` [Qemu-devel] [RFC 0/3] add support migration with passthrough device Chen Fan
2015-04-17  8:53   ` [Qemu-devel] [RFC 1/3] qemu-agent: add guest-network-set-interface command Chen Fan
2015-05-21 13:52     ` Olga Krishtal
2015-05-21 14:43       ` [Qemu-devel] [libvirt] " Eric Blake
2015-04-17  8:53   ` [Qemu-devel] [RFC 2/3] qemu-agent: add guest-network-delete-interface command Chen Fan
2015-04-17  8:53   ` [Qemu-devel] [RFC 3/3] qemu-agent: add notify for qemu-ga boot Chen Fan
2015-04-21 23:38     ` Eric Blake
2015-04-19 22:29 ` [Qemu-devel] [libvirt] [RFC 0/7] Live Migration with Pass-through Devices proposal Laine Stump
2015-04-22  4:22   ` Chen Fan
2015-04-23 14:14     ` Laine Stump
2015-04-23  8:34   ` Chen Fan
2015-04-23 15:01     ` Laine Stump
2015-05-19  9:10       ` Michael S. Tsirkin
2015-04-22  9:23 ` [Qemu-devel] " Daniel P. Berrange
2015-04-22 13:05   ` Daniel P. Berrange
2015-04-22 17:01   ` Dr. David Alan Gilbert
2015-04-22 17:06     ` Daniel P. Berrange
2015-04-22 17:12       ` Dr. David Alan Gilbert
2015-04-22 17:15         ` Daniel P. Berrange
2015-04-22 17:20           ` Dr. David Alan Gilbert
2015-04-23 16:35             ` [Qemu-devel] [libvirt] " Laine Stump
2015-05-19  9:04               ` Michael S. Tsirkin
2015-05-19  9:07   ` [Qemu-devel] " Michael S. Tsirkin
2015-05-19 14:15     ` [Qemu-devel] [libvirt] " Laine Stump
2015-05-19 14:21       ` Daniel P. Berrange
2015-05-19 15:03         ` Dr. David Alan Gilbert
2015-05-19 15:18           ` Michael S. Tsirkin
2015-05-19 15:35           ` Daniel P. Berrange
2015-05-19 15:39             ` Michael S. Tsirkin
2015-05-19 15:45               ` Daniel P. Berrange
2015-05-19 16:08                 ` Michael S. Tsirkin
2015-05-19 16:13                   ` Daniel P. Berrange
2015-05-19 16:27                   ` Dr. David Alan Gilbert
2015-05-19 15:21         ` Michael S. Tsirkin
2015-05-19 15:14       ` Michael S. Tsirkin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).