[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