
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@veillard.com | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/