FYI I now have a VDDK extents function which now works and is tested
against a real server on real guests:
https://github.com/rwmjones/nbdkit/commit/b327a79ee3fa0af0fe27d5d18ac7b5f...
There were quite a lot of changes:
- The offset and length of the hole before each block was
plain wrong: fixed.
- I needed to add the implicit hole after the list of blocks
returned by QueryAllocatedBlocks.
- Don't consider req_one until we've got past the initial offset.
- Centralise the add_extents code into one function and add
a debug flag (-D) so we can debug it.
Unfortunately qemu's habit of setting req_one on every request hurts
performance quite a lot, because calling QueryAllocatedBlocks is very
expensive. You end up having to call QAB before each pread and
constantly re-requesting data which we've already asked for. We might
cache the QAB output but that's complex and hairy.
Rich.
--
Richard Jones, Virtualization Group, Red Hat
http://people.redhat.com/~rjones
Read my programming and virtualization blog:
http://rwmj.wordpress.com
virt-top is 'top' for virtual machines. Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.
http://people.redhat.com/~rjones/virt-top