Hi Jun -

That's the problem - none of this can be done whatsoever with libvirt.

The issue about libvirt is that it is a manager of virtualization programs
running in separate OS processes. Doing the kind of tight interaction with
several qemu instances in one userland process & thread, and full
encapsulation of all the guests' IO into handlers in that app, would
require Enormous amounts of IPC and OS context switching. To the best of my
knowledge, such an approach would mean an approx 1000% speed decrease in
the qemu performance, compared to if it's used as a library as I queried
for in the previous email.

Has anyone implemented a qemu 'library'?

For you who know how this could be done, how much work would it be?

(I suppose the big thing is that qemu not must use pretty much any global
state in it, as the library should deliver the ability for an app to
contain/run several qemu instances at the same time.
     The rest of the things (IO encapsulation features) already exist in
some form, they just need to be wrapped to into the form of an API rather
than being in the form of internal device drivers only.)

Thanks,
Mikael

Den 10 april 2012 04:43 skrev Jun Koi <junkoi2...@gmail.com>:

> On Tue, Apr 10, 2012 at 8:09 AM, Mikael <mikael.tr...@gmail.com> wrote:
> > Dear list,
> >
> > I understood that earlier on there was a "libqemu" library, using which
> an
> > ordinary userspace application could allocate a qemu virtual machine and
> get
> > it in a pointer/handle representation, run it as long as it wanted to,
> and
> > intercept any activity from or to it in detail.
> >
> > This is a *great* feature.
> >
> > Does it exist today? In case not, are there plans to introduce it now?
> >
> >
> > I suppose that it's QEMU and not KVM that should be the entry point for
> an
> > app for this purpose, as KVM only is a submodule of QEMU, for
> accelerating
> > part of its activity, correct?
> >
> >
> > The API functionality I'd want is:
> >  * Open or close machine
> >  * Monitor RAM consumption
> >  * Execute machine for specified number of milliseconds, or until the
> > machine somehow marks it's sleeping (does Linux and other OS:es signal
> this
> > somehow?)
> >  * Ability to feed machine with network and block device input. Callbacks
> > that receive network output and block device writes/responses from the
> > machine. I suppose this effectively means to implement an own, custom nic
> > and block device driver.
> >
> > Finally, if any callbacks could lead to that the machine execute
> procedure
> > returns (i.e. giving a behavior similar to Unix' select() and read() for
> > picking up new data on sockets), that would be incredibly good. (If
> having
> > several machines, there could be infinite recursion problems if events
> are
> > passed to a callback instead of as a return.)
> >
>
> most of these requirements can be done via libvirt, no?
>
> thanks,
> Jun
>

Reply via email to