All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Daniel P. Berrange" <berrange@redhat.com>
To: Anthony Liguori <anthony@codemonkey.ws>
Cc: "libvir-list@redhat.com" <libvir-list@redhat.com>,
	Paul Brook <paul@codesourcery.com>,
	qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] Re: [libvirt] Supporting hypervisor specific APIs in libvirt
Date: Tue, 23 Mar 2010 18:07:47 +0000	[thread overview]
Message-ID: <20100323180747.GM364@redhat.com> (raw)
In-Reply-To: <4BA8E6FC.9080207@codemonkey.ws>

On Tue, Mar 23, 2010 at 11:06:20AM -0500, Anthony Liguori wrote:
> On 03/23/2010 10:57 AM, Paul Brook wrote:
> >>>I think there is a serious divergence of approach there, instanciating
> >>>API stating 'we are gonna deprecate them sooner or later' tell the
> >>>application developper 'my time is more important than yours' and not
> >>>really something I like to carry to the API users.
> >>>The main goal of libvirt remains to provide APIs needed to unify the
> >>>development of the virtualization layers. Having APIs which makes
> >>>sense only for one or 2 virtualization engines is not a problem in
> >>>itself, it just raises questions about the actual semantic of that API.
> >>>If that semantic is sound, then I see no reason to not add it, really
> >>>and we actually often do.
> >>>       
> >>Yeah, but the problem we're facing is, I want there to be an API added
> >>to the management layer as part of the feature commit in qemu.  If there
> >>has to be a discussion and decisions about how to model the API, it's
> >>not going to be successful.
> >>     
> >I thought the monitor protocol *was* our API. If not, why not?
> 
> It is.  But our API is missing key components like guest enumeration.  
> So the fundamental topic here is, do we introduce these missing 
> components to allow people to build directly to our interface or do we 
> make use of the functionality that libvirt already provides if they can 
> plumb our API directly to users.

There's two levels of API here

 - VM level API - essentially APIs for the QMP protocol & qdev ARGV format

 - Host level API - guest enumeration, integration with other OS services
                    like cgroups, selinux, etc

QEMU has historically only cared about the per-VM level, but has not
actually provided any formal library APIs even for the monitor protocol
or command line syntax.

libvirt has obviously focused on the host level APIs, and directly figured
out the implicit VM level "API" that was exposed from QEMU. I think this is
a good split to maintain, because when you get to the host level API you 
start interacting / integrating beyond just QEMU with OS services like
cgroups, selinux, iptables, host networking, etc. QEMU might start with
a simple daemon for enumerating VMs....but that's how libvirt's QEMU driver
started off. Over time that "simple" demon would grow to end up doing all 
the things that libvirt currently does. This duplication of functionality
doesn't seem like a good use of development resources to me. 

Now libvirt does not currently directly expose the two VM level APIs that
QEMU has (qdev ARGV, and QMP protocol), which is where our feature timelag
comes from. If we can figure out a way to expose those two, then there 
shouldn't be a need for QEMU to get into duplicate host-level APIs like
enumeration.

There could still be useful APIs that QEMU can expose those. For example,
consider if QEMU provided 

 - libqmp.so - API(s) for each monitor command that serialized to/from JSON
               format string
 - libqdev.so - API(s) for constructing qdev strings, that can then be used
                as ARGV values, or QMP parameter values.

Next consider if libvirt provided a way to pass extra ARGV down to QEMU, 
and also provided a way to send/recv JSON commands/events.

The libqmp.so & libqdev.so could then be used both directly against a single
QEMU process spawned manually, but also indirectly via libvirt. eg, to use 
snapshots with libvirt, an app would use libqmp.so to generate a QMP command
for snapshotting, send it to the VM via the libvirt API for monitor injection
and get the response. The nice aspect of this is that libvirt is actually
adding value to libqmp.so, because users would now have secure remote
access to the QEMU monitor, tunnelled via libvirtd. It also avoids adding an
arbitrary number of extra APIs to libvirt - we just need the API to send
and recv JSON in libvirt, and libqmp.so can then be used ontop of that

In ascii art you'd end up with two models

Interacting with a single VM directly:

  Application   -> libqmp.so/libqdev.so -> QEMU

Interacting with many VMs via libvirt

  Application -------------> libvirt API ----> libvirtd ----> QEMU
      |                       ^
      |                       |
      +--------> libqmp.so ---+
      +--------> libqdev.so --+

So primarily an app would still use libvirt as the host level management
API, but libqmp.so proxied via libvirt would also allow access to arbitrary
extra features. This avoids the big overlap in functionality between libvirt
& QEMU apis, which would occurr if QEMU started doing multiple VM mgmt too.

Regards,
Daniel
-- 
|: Red Hat, Engineering, London    -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :|
|: http://autobuild.org        -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-   F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|

  parent reply	other threads:[~2010-03-23 18:08 UTC|newest]

Thread overview: 109+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-22 19:25 [Qemu-devel] Supporting hypervisor specific APIs in libvirt Anthony Liguori
2010-03-22 20:10 ` [Qemu-devel] Re: [libvirt] " Daniel P. Berrange
2010-03-22 21:33   ` Gerd Hoffmann
2010-03-22 21:53     ` Anthony Liguori
2010-03-23  8:54       ` Jes Sorensen
2010-03-23 10:25         ` Gerd Hoffmann
2010-03-23 10:31           ` Jes Sorensen
2010-03-23 10:58             ` Gerd Hoffmann
2010-03-22 23:36     ` Cole Robinson
2010-03-22 21:49   ` Anthony Liguori
2010-03-23  7:35     ` Alexander Graf
2010-03-23 23:25       ` Jamie Lokier
2010-03-24  0:55         ` Anthony Liguori
2010-03-24 10:05           ` Markus Armbruster
2010-03-24 12:25             ` Paul Brook
2010-03-24 12:48               ` Anthony Liguori
2010-03-25  2:43                 ` Jamie Lokier
2010-03-23 11:33     ` Daniel P. Berrange
2010-03-24 10:23     ` Daniel P. Berrange
2010-03-22 20:25 ` [Qemu-devel] " Daniel P. Berrange
2010-03-23 10:06 ` [Qemu-devel] " Juan Quintela
2010-03-23 10:41   ` Gerd Hoffmann
2010-03-23 10:50     ` Juan Quintela
2010-03-23 11:08       ` Daniel P. Berrange
2010-03-23 12:19         ` Juan Quintela
2010-03-23 23:13     ` Jamie Lokier
2010-03-24  7:59       ` Gerd Hoffmann
2010-03-24 13:52         ` Cole Robinson
2010-03-24 14:00           ` Gerd Hoffmann
2010-03-23 23:19   ` Jamie Lokier
2010-03-24  2:22   ` Andi Kleen
2010-03-24  8:49     ` Juan Quintela
     [not found] ` <20100323145105.GV16253@redhat.com>
2010-03-23 15:05   ` [Qemu-devel] Re: [libvirt] " Anthony Liguori
2010-03-23 15:57     ` Paul Brook
2010-03-23 16:06       ` Anthony Liguori
2010-03-23 18:00         ` Avi Kivity
2010-03-23 18:23           ` [libvirt] [Qemu-devel] " Daniel P. Berrange
2010-03-24  1:05             ` Anthony Liguori
2010-03-24  4:48             ` Avi Kivity
2010-03-23 19:28           ` [Qemu-devel] Re: [libvirt] " Anthony Liguori
2010-03-23 23:09             ` Jamie Lokier
2010-03-24  5:17           ` Avi Kivity
2010-03-24 10:36             ` Daniel P. Berrange
2010-03-24 10:42               ` Avi Kivity
2010-03-24 12:23                 ` Anthony Liguori
2010-03-24 12:29                   ` Avi Kivity
2010-03-24 12:32                     ` Anthony Liguori
2010-03-24 12:33                       ` Avi Kivity
2010-03-25  0:28                         ` Jamie Lokier
2010-03-24 16:42                 ` Luiz Capitulino
2010-03-24 19:49                   ` Avi Kivity
2010-03-24 20:12                     ` Luiz Capitulino
2010-03-24 20:32                       ` Anthony Liguori
2010-03-24 20:54                         ` Alexander Graf
2010-03-24 21:33                           ` Luiz Capitulino
2010-03-25  7:49                             ` Alexander Graf
2010-03-24 21:25                         ` Luiz Capitulino
2010-03-24 21:40                           ` Anthony Liguori
2010-03-25  8:26                             ` Vincent Hanquez
2010-03-25  8:49                               ` Avi Kivity
2010-03-25 12:33                               ` Anthony Liguori
2010-03-25 12:37                                 ` Avi Kivity
2010-03-25 13:44                                   ` Anthony Liguori
2010-03-25 13:48                                     ` Avi Kivity
2010-03-25 13:57                                       ` Anthony Liguori
2010-03-25 14:09                                         ` Luiz Capitulino
2010-03-25 15:59                                           ` Anthony Liguori
2010-03-26  2:11                                             ` Jamie Lokier
2010-03-25 14:21                                         ` Avi Kivity
2010-03-25 14:22                                         ` Vincent Hanquez
2010-03-25 16:50                                     ` Markus Armbruster
2010-03-25 17:40                                       ` Anthony Liguori
2010-03-26  7:37                                         ` Markus Armbruster
2010-03-26  9:26                                           ` [libvirt] [Qemu-devel] " Paolo Bonzini
2010-03-26  9:51                                           ` [Qemu-devel] Re: [libvirt] " Avi Kivity
2010-03-26 12:53                                             ` Anthony Liguori
2010-03-26 13:53                                           ` Anthony Liguori
2010-03-25 13:37                                 ` Gildas Le Nadan
2010-03-25 13:59                               ` Daniel P. Berrange
2010-03-25 14:56                                 ` Vincent Hanquez
2010-03-25 15:07                                   ` Daniel P. Berrange
2010-03-25 15:14                                     ` Vincent Hanquez
2010-03-25 15:16                                       ` Daniel P. Berrange
2010-03-25 16:01                                         ` Anthony Liguori
2010-03-25 16:30                                           ` Alexander Graf
2010-03-26  2:18                                           ` Jamie Lokier
2010-03-25 13:23                             ` Luiz Capitulino
2010-03-25 13:55                               ` Anthony Liguori
2010-03-26 12:52                                 ` Luiz Capitulino
2010-03-25  6:37                         ` Avi Kivity
2010-03-25  8:18                           ` Alexander Graf
2010-03-26 16:01                             ` Avi Kivity
2010-03-24 12:19             ` Anthony Liguori
2010-03-24 12:27               ` Avi Kivity
2010-03-24 12:30                 ` Anthony Liguori
2010-03-24 12:32                   ` Avi Kivity
2010-03-23 18:07         ` Daniel P. Berrange [this message]
2010-03-23 19:24           ` Anthony Liguori
2010-03-24  5:49             ` Avi Kivity
2010-03-24 12:30               ` Paul Brook
2010-03-24 12:34                 ` Avi Kivity
2010-03-24 13:03                   ` Paul Brook
2010-03-24 15:55                     ` Markus Armbruster
2010-03-24 16:12                       ` Paul Brook
2010-03-23 23:22         ` Jamie Lokier
2010-03-23 17:57 ` [Qemu-devel] " Avi Kivity
2010-03-23 19:31   ` Anthony Liguori
2010-03-24  4:53     ` Avi Kivity
2010-03-26  2:31       ` Jamie Lokier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20100323180747.GM364@redhat.com \
    --to=berrange@redhat.com \
    --cc=anthony@codemonkey.ws \
    --cc=libvir-list@redhat.com \
    --cc=paul@codesourcery.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.