When we are copying storage we should also preserve the block dirty
bitmaps. This series implements their migration.
For standard migration with shared storage we let qemu flush the bitmaps
to disk and reload them on destination. There is possibility to migrate
them using the migration stream too but it's not implemented in this
series.
v2:
Patches from v1:
- patches 4-7 from v1 were pushed already
- patch 8 from v1 was dropped
This version:
- patch 1 was updated to capture the latest capabilities
- patch 4 is new, replaces patch 8 from v1
- all other patches apply review feedback from Jirka
- patch 14 has one additional change (thus I didn't carry Jirka's R-b):
The migration of bitmaps is enabled based on
QEMU_CAPS_MIGRATION_PARAM_BLOCK_BITMAP_MAPPING instead of
QEMU_CAPS_INCREMENTAL_BACKUP.
Peter Krempa (15):
qemucapabilitiesdata: Update test data for qemu-6.0 on x86_64
qemu: capabilities: Introduce
QEMU_CAPS_MIGRATION_PARAM_BLOCK_BITMAP_MAPPING
qemu: Probe whether an image is 'qcow2 v2' from
query-named-block-nodes
qemu: migration: Create qcow2 v3 images for
VIR_MIGRATE_NON_SHARED_DISK
qemu: monitor: Introduce qemuMonitorBitmapRemove
qemu: blockjob: Use qemuMonitorBitmapRemove for single bitmap removal
qemu: migration_params: Add infrastructure for 'dirty-bitmaps'
migration feature
qemu: migration_cookie: Add XML handling for setting up bitmap
migration
qemu: migration_cookie: Add helpers for transforming the cookie into
migration params
qemu: domain: Store list of temporary bitmaps for migration in status
XML
tests: qemustatusxml2xml: Add status XML from migration with bitmaps
tests: qemumigrationcookie: Add testing for block dirty bitmap
migration
qemu: migration: Clean up temporary bitmaps when cancelling a
migration
qemu: migration: Migrate block dirty bitmaps corresponding to
checkpoints
qemu: capabilities: Enable QEMU_CAPS_INCREMENTAL_BACKUP
src/qemu/qemu_blockjob.c | 24 +-
src/qemu/qemu_capabilities.c | 9 +-
src/qemu/qemu_capabilities.h | 1 +
src/qemu/qemu_domain.c | 87 +-
src/qemu/qemu_domain.h | 15 +
src/qemu/qemu_migration.c | 369 ++++++++-
src/qemu/qemu_migration_cookie.c | 261 ++++++
src/qemu/qemu_migration_cookie.h | 42 +
src/qemu/qemu_migration_params.c | 29 +
src/qemu/qemu_migration_params.h | 5 +
src/qemu/qemu_monitor.c | 13 +
src/qemu/qemu_monitor.h | 8 +
src/qemu/qemu_monitor_json.c | 35 +
src/qemu/qemu_monitor_json.h | 6 +
tests/meson.build | 2 +-
tests/qemublocktest.c | 2 +
tests/qemublocktestdata/bitmap/synthetic.json | 2 +-
tests/qemublocktestdata/bitmap/synthetic.out | 1 +
.../caps_6.0.0.x86_64.replies | 741 ++++++++++--------
.../caps_6.0.0.x86_64.xml | 23 +-
.../nbd-bitmaps-xml2xml-in.xml | 52 ++
.../nbd-bitmaps-xml2xml-migparams.json | 25 +
.../nbd-bitmaps-xml2xml-out.xml | 51 ++
tests/qemumigrationcookiexmltest.c | 166 +++-
tests/qemumonitorjsontest.c | 2 +
.../migration-out-nbd-bitmaps-in.xml | 574 ++++++++++++++
.../migration-out-nbd-bitmaps-out.xml | 1 +
tests/qemustatusxml2xmltest.c | 1 +
28 files changed, 2172 insertions(+), 375 deletions(-)
create mode 100644 tests/qemumigrationcookiexmldata/nbd-bitmaps-xml2xml-in.xml
create mode 100644 tests/qemumigrationcookiexmldata/nbd-bitmaps-xml2xml-migparams.json
create mode 100644 tests/qemumigrationcookiexmldata/nbd-bitmaps-xml2xml-out.xml
create mode 100644 tests/qemustatusxml2xmldata/migration-out-nbd-bitmaps-in.xml
create mode 120000 tests/qemustatusxml2xmldata/migration-out-nbd-bitmaps-out.xml
--
2.29.2