[Libguestfs] [PATCH nbdkit 7/8] vddk: Implement extents.
Richard W.M. Jones
rjones at redhat.com
Mon Mar 25 17:34:25 UTC 2019
On Sat, Mar 23, 2019 at 02:29:54PM -0500, Eric Blake wrote:
> On 3/20/19 5:11 PM, Richard W.M. Jones wrote:
...
> > + for (i = 0; i < block_list->numBlocks; ++i) {
> > + uint64_t offset, length;
> > +
> > + offset = block_list->blocks[i].offset * VIXDISKLIB_SECTOR_SIZE;
> > + length = block_list->blocks[i].length * VIXDISKLIB_SECTOR_SIZE;
> > +
> > + /* The query returns blocks. We must insert holes between the
> > + * blocks as necessary.
> > + */
> > + if (position < offset) {
> > + if (nbdkit_add_extent (extents,
> > + offset, length,
> > + NBDKIT_EXTENT_HOLE | NBDKIT_EXTENT_ZERO) == -1)
> > + goto error_in_add;
> > + }
> > +
> > + if (nbdkit_add_extent (extents,
> > + offset, length, 0 /* allocated data */) == -1) {
> > + error_in_add:
> > + DEBUG_CALL ("VixDiskLib_FreeBlockList", "block_list");
> > + VixDiskLib_FreeBlockList (block_list);
> > + return -1;
> > + }
> > +
> > + position = offset + length;
>
> This inner loop might be long; you could add this:
>
> if (req_one)
> break;
The issue in practice is that VixDiskLib_QueryAllocatedBlocks is very
expensive (because it's a remote procedure call), but we expect
calling nbdkit_add_extent should be very cheap.
However I'll experiment with breaking earlier from the inner loop. I
need to do a lot more testing on this patch anyway.
Rich.
> > + }
> > + DEBUG_CALL ("VixDiskLib_FreeBlockList", "block_list");
> > + VixDiskLib_FreeBlockList (block_list);
> > +
> > + start_sector += nr_sectors;
> > +
> > + if (req_one)
> > + break;
>
> just as you break the outer loop here, to make REQ_ONE slightly faster.
>
> Otherwise looks sane. m not in a position to test it, but if 'qemu-img
> map --output=json nbd://...' pointing to your server matches what you
> expect for vddk, that's a good sign.
>
> --
> Eric Blake, Principal Software Engineer
> Red Hat, Inc. +1-919-301-3226
> Virtualization: qemu.org | libvirt.org
>
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-builder quickly builds VMs from scratch
http://libguestfs.org/virt-builder.1.html
More information about the Libguestfs
mailing list