[Libguestfs] [libnbd PATCH v3 5/5] python: Slice structured read callback buffer from original

Eric Blake eblake at redhat.com
Fri Jun 10 19:09:36 UTC 2022


On Thu, Jun 09, 2022 at 03:34:19PM +0100, Richard W.M. Jones wrote:
> On Thu, Jun 09, 2022 at 08:34:47AM -0500, Eric Blake wrote:
> > The Py_BuildValue "y#" format copies data; this is because Python
> > assumes our C memory can go out of scope, while the user's python
> > callback can stash off whatever bytearray object it got.  But this
> > copying is inefficient.  Now that we already have a Python buffer-like
> > object in scope for the duration of all structured reads
> > (pread_structured since commit f8c76c01, aio_pread_structured since
> > commit 4f15d0e9), we know that the C memory parameter to our
> > chunk_callback is already (a portion of) the underlying contiguous
> > memory of an original Python object.  If we pass the Python callback a
> > memoryview object over the correct slice of that memory, then Python
> > will correctly handle the intricacies of what happens if the callback
> > saves our memoryview object for later use, all without any data
> > copying overhead, making use of the pread_structured form much faster.
> > 

> 
> Acked-by: Richard W.M. Jones <rjones at redhat.com>

Series is now pushed as 67dd054..8bb89d6

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org


More information about the Libguestfs mailing list