[libvirt] [PATCH 03/11] Remote driver client and server for virDomainOpenConsole

Daniel Veillard veillard at redhat.com
Wed Nov 3 13:00:32 UTC 2010


On Wed, Nov 03, 2010 at 11:19:34AM +0000, Daniel P. Berrange wrote:
> On Wed, Nov 03, 2010 at 12:07:07PM +0100, Daniel Veillard wrote:
> > On Tue, Nov 02, 2010 at 05:49:07PM +0000, Daniel P. Berrange wrote:
> > > This provides an implementation of the virDomainOpenConsole
> > > API for the remote driver client and server.
> > > 
> > > * daemon/remote.c: Server side impl
> > > * src/remote/remote_driver.c: Client impl
> > > * src/remote/remote_protocol.x: Wire definition
> > > ---
> > >  daemon/remote.c                     |   52 ++++++++++++++++++++++
> > >  daemon/remote_dispatch_args.h       |    1 +
> > >  daemon/remote_dispatch_prototypes.h |    8 +++
> > >  daemon/remote_dispatch_table.h      |    5 ++
> > >  src/remote/remote_driver.c          |   82 +++++++++++++++++++++++++++--------
> > >  src/remote/remote_protocol.c        |   13 ++++++
> > >  src/remote/remote_protocol.h        |   10 ++++
> > >  src/remote/remote_protocol.x        |    9 +++-
> > >  src/remote_protocol-structs         |    5 ++
> > >  9 files changed, 165 insertions(+), 20 deletions(-)
> > 
> > Okay, ACK
> > My main question is actually what happen if the guest emitsa lot of
> > console data (let say some program is really flooding the pipe) and
> > the remote client doesn't consume the stream. virStream is lossless
> > as far as I understand and there will be a limit to the buffering
> > on the file descriptor and the network pipe, so as a result the guest
> > may stall (assuming a device coming from QEmu, the qemu process
> > will block on the console I/O), right ?
> > It would be an interesting experiment to try ...
> 
> There's two questions to answer here really

  right :-)

> If the libvirt client doesn't consume from the libvirtd server quickly
> enough, then libvirtd will stop consuming frm QEMU. Basically libvirtd
> will only allow 1 pending outbound stream packet for transmission
> at a time (max 256 kb data). So libvirtd is safe from unbounded mem
> usage in buffering here. The behaviour of QEMU i think depends on the
> device. A virtio console should block the guest OS from writing data.
> IIC, a serial device will either loose data, or block the guest, depending
> on whether flow control is properly used in the guest.

  Okay, we can't make assumptions on the producer behaviour.

> If a libvirt application doesn't consume data from the libvirt client
> quickly enough, the memory usage *can* balloon up unbounded, because
> the virStream on the libvirt client doesn't do any throttling when
> reading data from libvirtd. This could be addressed later, but since
> it is client side, I'm not too concerned.

  We could add a virStream opening extra flag to limit buffering, but
not urgent.

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list