mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 08:13:54 -06:00
migration: Remove block migration
The block migration has been considered obsolete since QEMU 8.2 in
favor of the more flexible storage migration provided by the
blockdev-mirror driver. Two releases have passed so now it's time to
remove it.
Deprecation commit 66db46ca83
("migration: Deprecate block
migration").
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Signed-off-by: Fabiano Rosas <farosas@suse.de>
This commit is contained in:
parent
18d154f575
commit
eef0bae3a7
19 changed files with 26 additions and 1236 deletions
1018
migration/block.c
1018
migration/block.c
File diff suppressed because it is too large
Load diff
|
@ -1,52 +0,0 @@
|
|||
/*
|
||||
* QEMU live block migration
|
||||
*
|
||||
* Copyright IBM, Corp. 2009
|
||||
*
|
||||
* Authors:
|
||||
* Liran Schour <lirans@il.ibm.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2. See
|
||||
* the COPYING file in the top-level directory.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef MIGRATION_BLOCK_H
|
||||
#define MIGRATION_BLOCK_H
|
||||
|
||||
#ifdef CONFIG_LIVE_BLOCK_MIGRATION
|
||||
int blk_mig_active(void);
|
||||
int blk_mig_bulk_active(void);
|
||||
uint64_t blk_mig_bytes_transferred(void);
|
||||
uint64_t blk_mig_bytes_remaining(void);
|
||||
uint64_t blk_mig_bytes_total(void);
|
||||
|
||||
#else
|
||||
static inline int blk_mig_active(void)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline int blk_mig_bulk_active(void)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline uint64_t blk_mig_bytes_transferred(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline uint64_t blk_mig_bytes_remaining(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline uint64_t blk_mig_bytes_total(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_LIVE_BLOCK_MIGRATION */
|
||||
|
||||
void migrate_set_block_enabled(bool value, Error **errp);
|
||||
#endif /* MIGRATION_BLOCK_H */
|
|
@ -18,7 +18,6 @@
|
|||
#include "qemu-file.h"
|
||||
#include "savevm.h"
|
||||
#include "migration/colo.h"
|
||||
#include "block.h"
|
||||
#include "io/channel-buffer.h"
|
||||
#include "trace.h"
|
||||
#include "qemu/error-report.h"
|
||||
|
|
|
@ -39,9 +39,6 @@ else
|
|||
endif
|
||||
|
||||
system_ss.add(when: rdma, if_true: files('rdma.c'))
|
||||
if get_option('live_block_migration').allowed()
|
||||
system_ss.add(files('block.c'))
|
||||
endif
|
||||
system_ss.add(when: zstd, if_true: files('multifd-zstd.c'))
|
||||
|
||||
specific_ss.add(when: 'CONFIG_SYSTEM_ONLY',
|
||||
|
|
|
@ -145,15 +145,6 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdict)
|
|||
}
|
||||
}
|
||||
|
||||
if (info->disk) {
|
||||
monitor_printf(mon, "transferred disk: %" PRIu64 " kbytes\n",
|
||||
info->disk->transferred >> 10);
|
||||
monitor_printf(mon, "remaining disk: %" PRIu64 " kbytes\n",
|
||||
info->disk->remaining >> 10);
|
||||
monitor_printf(mon, "total disk: %" PRIu64 " kbytes\n",
|
||||
info->disk->total >> 10);
|
||||
}
|
||||
|
||||
if (info->xbzrle_cache) {
|
||||
monitor_printf(mon, "cache size: %" PRIu64 " bytes\n",
|
||||
info->xbzrle_cache->cache_size);
|
||||
|
@ -726,24 +717,8 @@ static void hmp_migrate_status_cb(void *opaque)
|
|||
info = qmp_query_migrate(NULL);
|
||||
if (!info->has_status || info->status == MIGRATION_STATUS_ACTIVE ||
|
||||
info->status == MIGRATION_STATUS_SETUP) {
|
||||
if (info->disk) {
|
||||
int progress;
|
||||
|
||||
if (info->disk->remaining) {
|
||||
progress = info->disk->transferred * 100 / info->disk->total;
|
||||
} else {
|
||||
progress = 100;
|
||||
}
|
||||
|
||||
monitor_printf(status->mon, "Completed %d %%\r", progress);
|
||||
monitor_flush(status->mon);
|
||||
}
|
||||
|
||||
timer_mod(status->timer, qemu_clock_get_ms(QEMU_CLOCK_REALTIME) + 1000);
|
||||
} else {
|
||||
if (migrate_block()) {
|
||||
monitor_printf(status->mon, "\n");
|
||||
}
|
||||
if (info->error_desc) {
|
||||
error_report("%s", info->error_desc);
|
||||
}
|
||||
|
|
|
@ -46,7 +46,6 @@
|
|||
#include "qapi/qmp/qerror.h"
|
||||
#include "qapi/qmp/qnull.h"
|
||||
#include "qemu/rcu.h"
|
||||
#include "block.h"
|
||||
#include "postcopy-ram.h"
|
||||
#include "qemu/thread.h"
|
||||
#include "trace.h"
|
||||
|
@ -240,7 +239,6 @@ void migration_object_init(void)
|
|||
|
||||
migration_object_check(current_migration, &error_fatal);
|
||||
|
||||
blk_mig_init();
|
||||
ram_mig_init();
|
||||
dirty_bitmap_mig_init();
|
||||
}
|
||||
|
@ -1206,16 +1204,6 @@ static void populate_ram_info(MigrationInfo *info, MigrationState *s)
|
|||
}
|
||||
}
|
||||
|
||||
static void populate_disk_info(MigrationInfo *info)
|
||||
{
|
||||
if (blk_mig_active()) {
|
||||
info->disk = g_malloc0(sizeof(*info->disk));
|
||||
info->disk->transferred = blk_mig_bytes_transferred();
|
||||
info->disk->remaining = blk_mig_bytes_remaining();
|
||||
info->disk->total = blk_mig_bytes_total();
|
||||
}
|
||||
}
|
||||
|
||||
static void fill_source_migration_info(MigrationInfo *info)
|
||||
{
|
||||
MigrationState *s = migrate_get_current();
|
||||
|
@ -1258,7 +1246,6 @@ static void fill_source_migration_info(MigrationInfo *info)
|
|||
/* TODO add some postcopy stats */
|
||||
populate_time_info(info, s);
|
||||
populate_ram_info(info, s);
|
||||
populate_disk_info(info);
|
||||
migration_populate_vfio_info(info);
|
||||
break;
|
||||
case MIGRATION_STATUS_COLO:
|
||||
|
@ -1423,7 +1410,6 @@ static void migrate_fd_cleanup(MigrationState *s)
|
|||
type = migration_has_failed(s) ? MIG_EVENT_PRECOPY_FAILED :
|
||||
MIG_EVENT_PRECOPY_DONE;
|
||||
migration_call_notifiers(s, type, NULL);
|
||||
block_cleanup_parameters();
|
||||
yank_unregister_instance(MIGRATION_YANK_INSTANCE);
|
||||
}
|
||||
|
||||
|
@ -2102,7 +2088,6 @@ void qmp_migrate(const char *uri, bool has_channels,
|
|||
"a valid migration protocol");
|
||||
migrate_set_state(&s->state, MIGRATION_STATUS_SETUP,
|
||||
MIGRATION_STATUS_FAILED);
|
||||
block_cleanup_parameters();
|
||||
}
|
||||
|
||||
if (local_err) {
|
||||
|
|
|
@ -195,7 +195,6 @@ Property migration_properties[] = {
|
|||
MIGRATION_CAPABILITY_POSTCOPY_PREEMPT),
|
||||
DEFINE_PROP_MIG_CAP("x-colo", MIGRATION_CAPABILITY_X_COLO),
|
||||
DEFINE_PROP_MIG_CAP("x-release-ram", MIGRATION_CAPABILITY_RELEASE_RAM),
|
||||
DEFINE_PROP_MIG_CAP("x-block", MIGRATION_CAPABILITY_BLOCK),
|
||||
DEFINE_PROP_MIG_CAP("x-return-path", MIGRATION_CAPABILITY_RETURN_PATH),
|
||||
DEFINE_PROP_MIG_CAP("x-multifd", MIGRATION_CAPABILITY_MULTIFD),
|
||||
DEFINE_PROP_MIG_CAP("x-background-snapshot",
|
||||
|
@ -225,13 +224,6 @@ bool migrate_background_snapshot(void)
|
|||
return s->capabilities[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT];
|
||||
}
|
||||
|
||||
bool migrate_block(void)
|
||||
{
|
||||
MigrationState *s = migrate_get_current();
|
||||
|
||||
return s->capabilities[MIGRATION_CAPABILITY_BLOCK];
|
||||
}
|
||||
|
||||
bool migrate_colo(void)
|
||||
{
|
||||
MigrationState *s = migrate_get_current();
|
||||
|
@ -484,18 +476,6 @@ bool migrate_caps_check(bool *old_caps, bool *new_caps, Error **errp)
|
|||
ERRP_GUARD();
|
||||
MigrationIncomingState *mis = migration_incoming_get_current();
|
||||
|
||||
#ifndef CONFIG_LIVE_BLOCK_MIGRATION
|
||||
if (new_caps[MIGRATION_CAPABILITY_BLOCK]) {
|
||||
error_setg(errp, "QEMU compiled without old-style block migration");
|
||||
error_append_hint(errp, "Use blockdev-mirror with NBD instead.\n");
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
if (new_caps[MIGRATION_CAPABILITY_BLOCK]) {
|
||||
warn_report("block migration is deprecated;"
|
||||
" use blockdev-mirror with NBD instead");
|
||||
}
|
||||
|
||||
if (new_caps[MIGRATION_CAPABILITY_COMPRESS]) {
|
||||
warn_report("old compression method is deprecated;"
|
||||
" use multifd compression methods instead");
|
||||
|
@ -706,11 +686,6 @@ MigrationCapabilityStatusList *qmp_query_migrate_capabilities(Error **errp)
|
|||
int i;
|
||||
|
||||
for (i = 0; i < MIGRATION_CAPABILITY__MAX; i++) {
|
||||
#ifndef CONFIG_LIVE_BLOCK_MIGRATION
|
||||
if (i == MIGRATION_CAPABILITY_BLOCK) {
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
caps = g_malloc0(sizeof(*caps));
|
||||
caps->capability = i;
|
||||
caps->state = s->capabilities[i];
|
||||
|
|
|
@ -25,7 +25,6 @@ extern Property migration_properties[];
|
|||
/* capabilities */
|
||||
|
||||
bool migrate_auto_converge(void);
|
||||
bool migrate_block(void);
|
||||
bool migrate_colo(void);
|
||||
bool migrate_compress(void);
|
||||
bool migrate_dirty_bitmaps(void);
|
||||
|
|
|
@ -53,7 +53,6 @@
|
|||
#include "exec/target_page.h"
|
||||
#include "qemu/rcu_queue.h"
|
||||
#include "migration/colo.h"
|
||||
#include "block.h"
|
||||
#include "sysemu/cpu-throttle.h"
|
||||
#include "savevm.h"
|
||||
#include "qemu/iov.h"
|
||||
|
@ -1025,13 +1024,6 @@ static void migration_trigger_throttle(RAMState *rs)
|
|||
uint64_t bytes_dirty_period = rs->num_dirty_pages_period * TARGET_PAGE_SIZE;
|
||||
uint64_t bytes_dirty_threshold = bytes_xfer_period * threshold / 100;
|
||||
|
||||
/* During block migration the auto-converge logic incorrectly detects
|
||||
* that ram migration makes no progress. Avoid this by disabling the
|
||||
* throttling logic during the bulk phase of block migration. */
|
||||
if (blk_mig_bulk_active()) {
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* The following detection logic can be refined later. For now:
|
||||
* Check to see if the ratio between dirtied bytes and the approx.
|
||||
|
@ -3230,13 +3222,6 @@ static int ram_save_iterate(QEMUFile *f, void *opaque)
|
|||
int64_t t0;
|
||||
int done = 0;
|
||||
|
||||
if (blk_mig_bulk_active()) {
|
||||
/* Avoid transferring ram during bulk phase of block migration as
|
||||
* the bulk phase will usually take a long time and transferring
|
||||
* ram updates during that time is pointless. */
|
||||
goto out;
|
||||
}
|
||||
|
||||
/*
|
||||
* We'll take this lock a little bit long, but it's okay for two reasons.
|
||||
* Firstly, the only possible other thread to take it is who calls
|
||||
|
|
|
@ -1711,11 +1711,6 @@ static int qemu_savevm_state(QEMUFile *f, Error **errp)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (migrate_block()) {
|
||||
error_setg(errp, "Block migration and snapshots are incompatible");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = migrate_init(ms, errp);
|
||||
if (ret) {
|
||||
return ret;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue