[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v4 RFC 00/17] qcow2: persistent dirty bitmaps

From: Vladimir Sementsov-Ogievskiy
Subject: Re: [Qemu-devel] [PATCH v4 RFC 00/17] qcow2: persistent dirty bitmaps
Date: Sat, 5 Mar 2016 15:26:48 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.8.0

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

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.


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,

reply via email to

[Prev in Thread] Current Thread [Next in Thread]