[libvirt] [PATCH 25/27] fdstream: Suppress use of IO helper for sparse streams

Daniel P. Berrange berrange at redhat.com
Thu May 5 16:12:39 UTC 2016


On Thu, May 05, 2016 at 09:51:22AM -0600, Eric Blake wrote:
> On 05/05/2016 09:32 AM, Daniel P. Berrange wrote:
> > On Thu, Apr 28, 2016 at 12:05:12PM +0200, Michal Privoznik wrote:
> >> This is kind of a hacky approach to the following problem, but so
> >> far I am unable to come up with anything better. On some
> >> occasions (esp. when dealing with regular files) libvirt_iohelper
> >> is spawned to prefetch data for us. We will then have a pipe then
> >> for reading the data from it. This does not fit in our sparse
> >> stream implementation as one simply doesn't lseek() over a pipe.
> >> Until this is resolved, let's suppress use of the IO helper and
> >> read data from FD directly.
> > 
> > This doesn't really fly - the problem is that with regular files,
> > poll() on the FD will always return ready, even if the read or
> > write will block in I/O. So by nomt using the iohelper this is
> > going to cause our main loop to block on I/O for streams.
> 
> The only real solution is to teach libvirt_iohelper to do structured
> reads when requested.  That is, you'll have to add a command-line flag
> to libvirt_iohelper, which if present, says all of the output from
> libvirt_iohelper will be structured as tuples of either
> <type=data,length,bytes> or of <type=hole,length>.  When used in this
> mode, the client HAS to parse the tuples, rather than assuming that the
> pipe can be read literally.  So that means we also have to teach the
> consumer of libvirt_iohelper how to read tuples off the pipe, at which
> point it then knows whether to send a regular VIR_NET_STREAM or the
> compact VIR_NET_STREAM_SKIP.

Yeah, that doesn't sound too bad - its rather similar to the HTTP
chunked encoding idea. It isn't much extra overhead to have a
type + len field in the byte stream, as long as we put a sensible
min size on the holes we transmit. eg don't send a hole that's
less than 512 bytes in len.

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list