[Libguestfs] pread(into) (was: Re: [PATCH nbdkit v2 10/10] tests: Test the Python plugin thoroughly.)
Richard W.M. Jones
rjones at redhat.com
Mon Nov 25 10:00:40 UTC 2019
> > On Sat, Nov 23, 2019 at 06:11:47PM +0200, Nir Soffer wrote:
> > > There is performance implication for v1 plugins like rhv-upload-plugin
> > that
> > > need to copy the bytes from imageio server on python side:
> > >
> > > r = http.getresponse()
> > > ...
> > > return bytearray(r.read())
> > >
> > > This is sad because on the C side we mempcpy the data again. So with
> > this patch
> > > we avoid one copy of the two.
> > >
> > > To avoid all unneeded copies, we need to change pread() to:
> > >
> > > def pread(h, buf, offset):
> > >
> > > So the python side we can do:
> > >
> > > f.readinto(buf)
> > >
> > > Or:
> > >
> > > sock.recv_info(buf)
> > >
> > > It does not work for HTTPResponse, so in this case we have to do:
> > >
> > > buf[:] = r.read()
> > >
> > > Since we work on v2 now, I think we should consider this change.
> >
> > Right, we can consider this for v2, while leaving v1 callers alone.
> >
> > > An uglier alternative is:
> > >
> > > def preadinto(h, buf, offset):
> > >
> > > Matching python read() and readinto() interface.
So if I'm understand this correctly, is it true that Python would be
writing directly to the C buffer allocated by nbdkit? This sounds
like it would be beneficial.
Would you like to do a patch for this? For v2 it's fine to just have:
def pread(h, buf, offset)
since that is the same as the C API.
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine. Supports Linux and Windows.
http://people.redhat.com/~rjones/virt-df/
More information about the Libguestfs
mailing list