[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