On 04.03.2016 21:00, John Snow wrote:
On 02/17/2016 10:28 AM, Vladimir Sementsov-Ogievskiy wrote:
This series add persistent dirty bitmaps feature to qcow2.
Specification is in docs/spec/qcow2.txt (not merged yet, see
[PATCH v10] spec: add qcow2 bitmaps extension specification)
This series are based on Fam's
[PATCH v2 00/13] Dirty bitmap changes for migration/persistence work
(meta bitmaps not used, and only hbitmap_deserialize_finish from
serialization)
This also needs some preparation patches, most of them are in my
bitmap-migration series. I've not listed them here to keep things
simpler, this is RFC any way.
v4:
Previous version was posted more than five months ago, so I will not
carefully list all changes.
What should be noted:
- some changes are made to sutisfy last version of specification
- removed staff, related to possibility of saving bitmaps for one
disk in the other qcow2.
- to make bitmap store/load zero-copy, I've moved load/store code to
HBitmap - this is new patch 01.
so, bdrv_dirty_bitmap_serialize_part and friends are not needed,
only hbitmap_deserialize_finish, to repair bitmap consistency after
loading its last level.
- two patches added about AUTO and EXTRA_DATA_COMPATIBLE flags
- some fixes made after John's comments on v3
Vladimir Sementsov-Ogievskiy (17):
hbitmap: load/store
qcow2: Bitmaps extension: structs and consts
qcow2-dirty-bitmap: read dirty bitmap directory
qcow2-dirty-bitmap: add qcow2_bitmap_load()
qcow2-dirty-bitmap: add qcow2_bitmap_store()
qcow2: add dirty bitmaps extension
qcow2-dirty-bitmap: add qcow2_bitmap_load_check()
block: store persistent dirty bitmaps
block: add bdrv_load_dirty_bitmap()
qcow2-dirty-bitmap: add autoclear bit
qemu: command line option for dirty bitmaps
qcow2-dirty-bitmap: add IN_USE flag
qcow2-dirty-bitmaps: disallow stroing bitmap to other bs
iotests: add VM.test_launcn()
iotests: test internal persistent dirty bitmap
qcow2-dirty-bitmap: add AUTO flag
qcow2-dirty-bitmap: add EXTRA_DATA_COMPATIBLE flag
block.c | 3 +
block/Makefile.objs | 2 +-
block/dirty-bitmap.c | 101 +++++
block/qcow2-dirty-bitmap.c | 839 ++++++++++++++++++++++++++++++++++++++++++
block/qcow2.c | 105 +++++-
block/qcow2.h | 59 +++
blockdev.c | 36 ++
include/block/block_int.h | 9 +
include/block/dirty-bitmap.h | 21 ++
include/qemu/hbitmap.h | 12 +
include/sysemu/blockdev.h | 1 +
include/sysemu/sysemu.h | 1 +
qemu-options.hx | 35 ++
tests/qemu-iotests/160 | 112 ++++++
tests/qemu-iotests/160.out | 21 ++
tests/qemu-iotests/group | 1 +
tests/qemu-iotests/iotests.py | 25 ++
util/hbitmap.c | 182 +++++++++
vl.c | 78 ++++
19 files changed, 1640 insertions(+), 3 deletions(-)
create mode 100644 block/qcow2-dirty-bitmap.c
create mode 100755 tests/qemu-iotests/160
create mode 100644 tests/qemu-iotests/160.out
In your prerequisite patches,
"iotests-add-default-node-name" breaks qemu iotests 055 and 118. Didn't
look hard enough to find out why, yet.
118 doesn't work for me anyway (./check -qcow2 118 , yes?), for 055 you
are right, it's not hard, the following helps:
def add_drive(self, path, opts='', interface='virtio'):
'''Add a virtio-blk drive to the VM'''
options = ['if=%s' % interface,
- 'id=drive%d' % self._num_drives,
- 'node-name=drivenode%d' % self._num_drives]
+ 'id=drive%d' % self._num_drives]
if path is not None:
+ options.append('node-name=drivenode%d' % self._num_drives)
options.append('file=%s' % path)
options.append('format=%s' % imgfmt)
options.append('cache=%s' % cachemode)
--
Best regards,
Vladimir