migration.c 28.5 KB
Newer Older
A
aliguori 已提交
1 2 3 4 5 6 7 8 9 10 11
/*
 * QEMU live migration
 *
 * Copyright IBM, Corp. 2008
 *
 * Authors:
 *  Anthony Liguori   <aliguori@us.ibm.com>
 *
 * This work is licensed under the terms of the GNU GPL, version 2.  See
 * the COPYING file in the top-level directory.
 *
12 13
 * Contributions after 2012-01-13 are licensed under the terms of the
 * GNU GPL, version 2 or (at your option) any later version.
A
aliguori 已提交
14 15 16
 */

#include "qemu-common.h"
17
#include "qemu/error-report.h"
18
#include "qemu/main-loop.h"
19
#include "migration/migration.h"
20
#include "migration/qemu-file.h"
21
#include "sysemu/sysemu.h"
22
#include "block/block.h"
23
#include "qapi/qmp/qerror.h"
24
#include "qemu/sockets.h"
25
#include "migration/block.h"
26
#include "qemu/thread.h"
L
Luiz Capitulino 已提交
27
#include "qmp-commands.h"
28
#include "trace.h"
29
#include "qapi/util.h"
30

31
#define MAX_THROTTLE  (32 << 20)      /* Migration speed throttling */
A
aliguori 已提交
32

J
Juan Quintela 已提交
33 34 35 36 37
/* Amount of time to allocate to each "chunk" of bandwidth-throttled
 * data. */
#define BUFFER_DELAY     100
#define XFER_LIMIT_RATIO (1000 / BUFFER_DELAY)

38 39
/* Default compression thread count */
#define DEFAULT_MIGRATE_COMPRESS_THREAD_COUNT 8
40 41 42
/* Default decompression thread count, usually decompression is at
 * least 4 times as fast as compression.*/
#define DEFAULT_MIGRATE_DECOMPRESS_THREAD_COUNT 2
43 44 45
/*0: means nocompress, 1: best speed, ... 9: best compress ratio */
#define DEFAULT_MIGRATE_COMPRESS_LEVEL 1

46 47 48
/* Migration XBZRLE default cache size */
#define DEFAULT_MIGRATE_CACHE_SIZE (64 * 1024 * 1024)

49 50 51
static NotifierList migration_state_notifiers =
    NOTIFIER_LIST_INITIALIZER(migration_state_notifiers);

D
Dr. David Alan Gilbert 已提交
52 53
static bool deferred_incoming;

54 55 56 57
/* When we add fault tolerance, we could have several
   migrations at once.  For now we don't need to add
   dynamic creation of migration */

58
/* For outgoing */
59
MigrationState *migrate_get_current(void)
60 61
{
    static MigrationState current_migration = {
62
        .state = MIGRATION_STATUS_NONE,
63
        .bandwidth_limit = MAX_THROTTLE,
64
        .xbzrle_cache_size = DEFAULT_MIGRATE_CACHE_SIZE,
65
        .mbps = -1,
66 67 68 69 70 71
        .parameters[MIGRATION_PARAMETER_COMPRESS_LEVEL] =
                DEFAULT_MIGRATE_COMPRESS_LEVEL,
        .parameters[MIGRATION_PARAMETER_COMPRESS_THREADS] =
                DEFAULT_MIGRATE_COMPRESS_THREAD_COUNT,
        .parameters[MIGRATION_PARAMETER_DECOMPRESS_THREADS] =
                DEFAULT_MIGRATE_DECOMPRESS_THREAD_COUNT,
72 73 74 75 76
    };

    return &current_migration;
}

77 78 79 80 81 82 83 84 85 86 87 88
/* For incoming */
static MigrationIncomingState *mis_current;

MigrationIncomingState *migration_incoming_get_current(void)
{
    return mis_current;
}

MigrationIncomingState *migration_incoming_state_new(QEMUFile* f)
{
    mis_current = g_malloc0(sizeof(MigrationIncomingState));
    mis_current->file = f;
89
    QLIST_INIT(&mis_current->loadvm_handlers);
90 91 92 93 94 95

    return mis_current;
}

void migration_incoming_state_destroy(void)
{
96
    loadvm_free_handlers(mis_current);
97 98 99 100
    g_free(mis_current);
    mis_current = NULL;
}

101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177

typedef struct {
    uint32_t size;
    uint8_t runstate[100];
} GlobalState;

static GlobalState global_state;

static int global_state_store(void)
{
    if (!runstate_store((char *)global_state.runstate,
                        sizeof(global_state.runstate))) {
        error_report("runstate name too big: %s", global_state.runstate);
        trace_migrate_state_too_big();
        return -EINVAL;
    }
    return 0;
}

static char *global_state_get_runstate(void)
{
    return (char *)global_state.runstate;
}

static int global_state_post_load(void *opaque, int version_id)
{
    GlobalState *s = opaque;
    int ret = 0;
    char *runstate = (char *)s->runstate;

    trace_migrate_global_state_post_load(runstate);

    if (strcmp(runstate, "running") != 0) {
        Error *local_err = NULL;
        int r = qapi_enum_parse(RunState_lookup, runstate, RUN_STATE_MAX,
                                -1, &local_err);

        if (r == -1) {
            if (local_err) {
                error_report_err(local_err);
            }
            return -EINVAL;
        }
        ret = vm_stop_force_state(r);
    }

   return ret;
}

static void global_state_pre_save(void *opaque)
{
    GlobalState *s = opaque;

    trace_migrate_global_state_pre_save((char *)s->runstate);
    s->size = strlen((char *)s->runstate) + 1;
}

static const VMStateDescription vmstate_globalstate = {
    .name = "globalstate",
    .version_id = 1,
    .minimum_version_id = 1,
    .post_load = global_state_post_load,
    .pre_save = global_state_pre_save,
    .fields = (VMStateField[]) {
        VMSTATE_UINT32(size, GlobalState),
        VMSTATE_BUFFER(runstate, GlobalState),
        VMSTATE_END_OF_LIST()
    },
};

void register_global_state(void)
{
    /* We would use it independently that we receive it */
    strcpy((char *)&global_state.runstate, "");
    vmstate_register(NULL, 0, &vmstate_globalstate, &global_state);
}

D
Dr. David Alan Gilbert 已提交
178 179 180 181 182 183 184 185 186 187 188 189 190
/*
 * Called on -incoming with a defer: uri.
 * The migration can be started later after any parameters have been
 * changed.
 */
static void deferred_incoming_migration(Error **errp)
{
    if (deferred_incoming) {
        error_setg(errp, "Incoming migration already deferred");
    }
    deferred_incoming = true;
}

191
void qemu_start_incoming_migration(const char *uri, Error **errp)
A
aliguori 已提交
192
{
A
aliguori 已提交
193 194
    const char *p;

D
Dr. David Alan Gilbert 已提交
195 196 197
    if (!strcmp(uri, "defer")) {
        deferred_incoming_migration(errp);
    } else if (strstart(uri, "tcp:", &p)) {
198
        tcp_start_incoming_migration(p, errp);
M
Michael R. Hines 已提交
199
#ifdef CONFIG_RDMA
D
Dr. David Alan Gilbert 已提交
200
    } else if (strstart(uri, "rdma:", &p)) {
M
Michael R. Hines 已提交
201 202
        rdma_start_incoming_migration(p, errp);
#endif
203
#if !defined(WIN32)
D
Dr. David Alan Gilbert 已提交
204
    } else if (strstart(uri, "exec:", &p)) {
205
        exec_start_incoming_migration(p, errp);
D
Dr. David Alan Gilbert 已提交
206
    } else if (strstart(uri, "unix:", &p)) {
207
        unix_start_incoming_migration(p, errp);
D
Dr. David Alan Gilbert 已提交
208
    } else if (strstart(uri, "fd:", &p)) {
209
        fd_start_incoming_migration(p, errp);
210
#endif
D
Dr. David Alan Gilbert 已提交
211
    } else {
212
        error_setg(errp, "unknown migration protocol: %s", uri);
J
Juan Quintela 已提交
213
    }
A
aliguori 已提交
214 215
}

216
static void process_incoming_migration_co(void *opaque)
217
{
218
    QEMUFile *f = opaque;
219
    Error *local_err = NULL;
220 221
    int ret;

222 223
    migration_incoming_state_new(f);

224
    ret = qemu_loadvm_state(f);
225

226
    qemu_fclose(f);
227
    free_xbzrle_decoded_buf();
228 229
    migration_incoming_state_destroy();

230
    if (ret < 0) {
231
        error_report("load of migration failed: %s", strerror(-ret));
232
        migrate_decompress_threads_join();
233
        exit(EXIT_FAILURE);
234 235 236
    }
    qemu_announce_self();

237
    /* Make sure all file formats flush their mutable metadata */
238 239
    bdrv_invalidate_cache_all(&local_err);
    if (local_err) {
240
        error_report_err(local_err);
241
        migrate_decompress_threads_join();
242 243
        exit(EXIT_FAILURE);
    }
244

245 246 247 248 249 250 251
    /* runstate == "" means that we haven't received it through the
     * wire, so we obey autostart.  runstate == runing means that we
     * need to run it, we need to make sure that we do it after
     * everything else has finished.  Every other state change is done
     * at the post_load function */

    if (strcmp(global_state_get_runstate(), "running") == 0) {
252
        vm_start();
253 254 255 256 257 258
    } else if (strcmp(global_state_get_runstate(), "") == 0) {
        if (autostart) {
            vm_start();
        } else {
            runstate_set(RUN_STATE_PAUSED);
        }
259
    }
260
    migrate_decompress_threads_join();
261 262
}

263 264 265 266 267 268
void process_incoming_migration(QEMUFile *f)
{
    Coroutine *co = qemu_coroutine_create(process_incoming_migration_co);
    int fd = qemu_get_fd(f);

    assert(fd != -1);
269
    migrate_decompress_threads_create();
270
    qemu_set_nonblock(fd);
271 272 273
    qemu_coroutine_enter(co, f);
}

274 275 276 277
/* amount of nanoseconds we are willing to wait for migration to be down.
 * the choice of nanoseconds is because it is the maximum resolution that
 * get_clock() can achieve. It is an internal measure. All user-visible
 * units must be in seconds */
278
static uint64_t max_downtime = 300000000;
279 280 281 282 283 284

uint64_t migrate_max_downtime(void)
{
    return max_downtime;
}

O
Orit Wasserman 已提交
285 286 287 288 289 290 291
MigrationCapabilityStatusList *qmp_query_migrate_capabilities(Error **errp)
{
    MigrationCapabilityStatusList *head = NULL;
    MigrationCapabilityStatusList *caps;
    MigrationState *s = migrate_get_current();
    int i;

292
    caps = NULL; /* silence compiler warning */
O
Orit Wasserman 已提交
293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309
    for (i = 0; i < MIGRATION_CAPABILITY_MAX; i++) {
        if (head == NULL) {
            head = g_malloc0(sizeof(*caps));
            caps = head;
        } else {
            caps->next = g_malloc0(sizeof(*caps));
            caps = caps->next;
        }
        caps->value =
            g_malloc(sizeof(*caps->value));
        caps->value->capability = i;
        caps->value->state = s->enabled_capabilities[i];
    }

    return head;
}

310 311 312 313 314 315 316 317 318 319 320 321 322 323 324
MigrationParameters *qmp_query_migrate_parameters(Error **errp)
{
    MigrationParameters *params;
    MigrationState *s = migrate_get_current();

    params = g_malloc0(sizeof(*params));
    params->compress_level = s->parameters[MIGRATION_PARAMETER_COMPRESS_LEVEL];
    params->compress_threads =
            s->parameters[MIGRATION_PARAMETER_COMPRESS_THREADS];
    params->decompress_threads =
            s->parameters[MIGRATION_PARAMETER_DECOMPRESS_THREADS];

    return params;
}

O
Orit Wasserman 已提交
325 326 327 328 329 330 331 332 333
static void get_xbzrle_cache_stats(MigrationInfo *info)
{
    if (migrate_use_xbzrle()) {
        info->has_xbzrle_cache = true;
        info->xbzrle_cache = g_malloc0(sizeof(*info->xbzrle_cache));
        info->xbzrle_cache->cache_size = migrate_xbzrle_cache_size();
        info->xbzrle_cache->bytes = xbzrle_mig_bytes_transferred();
        info->xbzrle_cache->pages = xbzrle_mig_pages_transferred();
        info->xbzrle_cache->cache_miss = xbzrle_mig_pages_cache_miss();
334
        info->xbzrle_cache->cache_miss_rate = xbzrle_mig_cache_miss_rate();
O
Orit Wasserman 已提交
335 336 337 338
        info->xbzrle_cache->overflow = xbzrle_mig_pages_overflow();
    }
}

L
Luiz Capitulino 已提交
339
MigrationInfo *qmp_query_migrate(Error **errp)
A
aliguori 已提交
340
{
L
Luiz Capitulino 已提交
341
    MigrationInfo *info = g_malloc0(sizeof(*info));
342 343 344
    MigrationState *s = migrate_get_current();

    switch (s->state) {
345
    case MIGRATION_STATUS_NONE:
346 347
        /* no migration has happened ever */
        break;
348
    case MIGRATION_STATUS_SETUP:
349
        info->has_status = true;
350
        info->has_total_time = false;
351
        break;
352 353
    case MIGRATION_STATUS_ACTIVE:
    case MIGRATION_STATUS_CANCELLING:
L
Luiz Capitulino 已提交
354
        info->has_status = true;
355
        info->has_total_time = true;
356
        info->total_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME)
357
            - s->total_time;
358 359
        info->has_expected_downtime = true;
        info->expected_downtime = s->expected_downtime;
360 361
        info->has_setup_time = true;
        info->setup_time = s->setup_time;
362

L
Luiz Capitulino 已提交
363 364 365 366 367
        info->has_ram = true;
        info->ram = g_malloc0(sizeof(*info->ram));
        info->ram->transferred = ram_bytes_transferred();
        info->ram->remaining = ram_bytes_remaining();
        info->ram->total = ram_bytes_total();
368
        info->ram->duplicate = dup_mig_pages_transferred();
369
        info->ram->skipped = skipped_mig_pages_transferred();
370 371
        info->ram->normal = norm_mig_pages_transferred();
        info->ram->normal_bytes = norm_mig_bytes_transferred();
372
        info->ram->dirty_pages_rate = s->dirty_pages_rate;
373
        info->ram->mbps = s->mbps;
374
        info->ram->dirty_sync_count = s->dirty_sync_count;
375

376
        if (blk_mig_active()) {
L
Luiz Capitulino 已提交
377 378 379 380 381
            info->has_disk = true;
            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();
A
aliguori 已提交
382
        }
O
Orit Wasserman 已提交
383 384

        get_xbzrle_cache_stats(info);
385
        break;
386
    case MIGRATION_STATUS_COMPLETED:
O
Orit Wasserman 已提交
387 388
        get_xbzrle_cache_stats(info);

L
Luiz Capitulino 已提交
389
        info->has_status = true;
390
        info->has_total_time = true;
391
        info->total_time = s->total_time;
392 393
        info->has_downtime = true;
        info->downtime = s->downtime;
394 395
        info->has_setup_time = true;
        info->setup_time = s->setup_time;
J
Juan Quintela 已提交
396 397 398 399 400 401

        info->has_ram = true;
        info->ram = g_malloc0(sizeof(*info->ram));
        info->ram->transferred = ram_bytes_transferred();
        info->ram->remaining = 0;
        info->ram->total = ram_bytes_total();
402
        info->ram->duplicate = dup_mig_pages_transferred();
403
        info->ram->skipped = skipped_mig_pages_transferred();
404 405
        info->ram->normal = norm_mig_pages_transferred();
        info->ram->normal_bytes = norm_mig_bytes_transferred();
406
        info->ram->mbps = s->mbps;
407
        info->ram->dirty_sync_count = s->dirty_sync_count;
408
        break;
409
    case MIGRATION_STATUS_FAILED:
L
Luiz Capitulino 已提交
410
        info->has_status = true;
411
        break;
412
    case MIGRATION_STATUS_CANCELLED:
L
Luiz Capitulino 已提交
413
        info->has_status = true;
414
        break;
A
aliguori 已提交
415
    }
416
    info->status = s->state;
L
Luiz Capitulino 已提交
417 418

    return info;
A
aliguori 已提交
419 420
}

O
Orit Wasserman 已提交
421 422 423 424 425 426
void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params,
                                  Error **errp)
{
    MigrationState *s = migrate_get_current();
    MigrationCapabilityStatusList *cap;

427 428
    if (s->state == MIGRATION_STATUS_ACTIVE ||
        s->state == MIGRATION_STATUS_SETUP) {
429
        error_setg(errp, QERR_MIGRATION_ACTIVE);
O
Orit Wasserman 已提交
430 431 432 433 434 435 436 437
        return;
    }

    for (cap = params; cap; cap = cap->next) {
        s->enabled_capabilities[cap->value->capability] = cap->value->state;
    }
}

438 439 440 441 442 443 444 445 446 447
void qmp_migrate_set_parameters(bool has_compress_level,
                                int64_t compress_level,
                                bool has_compress_threads,
                                int64_t compress_threads,
                                bool has_decompress_threads,
                                int64_t decompress_threads, Error **errp)
{
    MigrationState *s = migrate_get_current();

    if (has_compress_level && (compress_level < 0 || compress_level > 9)) {
448 449
        error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "compress_level",
                   "is invalid, it should be in the range of 0 to 9");
450 451 452 453
        return;
    }
    if (has_compress_threads &&
            (compress_threads < 1 || compress_threads > 255)) {
454 455 456
        error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
                   "compress_threads",
                   "is invalid, it should be in the range of 1 to 255");
457 458 459 460
        return;
    }
    if (has_decompress_threads &&
            (decompress_threads < 1 || decompress_threads > 255)) {
461 462 463
        error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
                   "decompress_threads",
                   "is invalid, it should be in the range of 1 to 255");
464 465 466 467 468 469 470 471 472 473 474 475 476 477 478
        return;
    }

    if (has_compress_level) {
        s->parameters[MIGRATION_PARAMETER_COMPRESS_LEVEL] = compress_level;
    }
    if (has_compress_threads) {
        s->parameters[MIGRATION_PARAMETER_COMPRESS_THREADS] = compress_threads;
    }
    if (has_decompress_threads) {
        s->parameters[MIGRATION_PARAMETER_DECOMPRESS_THREADS] =
                                                    decompress_threads;
    }
}

479 480
/* shared migration helpers */

481 482 483 484 485 486 487
static void migrate_set_state(MigrationState *s, int old_state, int new_state)
{
    if (atomic_cmpxchg(&s->state, old_state, new_state) == new_state) {
        trace_migrate_set_state(new_state);
    }
}

488
static void migrate_fd_cleanup(void *opaque)
489
{
490 491 492 493 494
    MigrationState *s = opaque;

    qemu_bh_delete(s->cleanup_bh);
    s->cleanup_bh = NULL;

495
    if (s->file) {
496
        trace_migrate_fd_cleanup();
497 498 499 500
        qemu_mutex_unlock_iothread();
        qemu_thread_join(&s->thread);
        qemu_mutex_lock_iothread();

501
        migrate_compress_threads_join();
502 503
        qemu_fclose(s->file);
        s->file = NULL;
504 505
    }

506
    assert(s->state != MIGRATION_STATUS_ACTIVE);
507

508
    if (s->state != MIGRATION_STATUS_COMPLETED) {
509
        qemu_savevm_state_cancel();
510 511 512
        if (s->state == MIGRATION_STATUS_CANCELLING) {
            migrate_set_state(s, MIGRATION_STATUS_CANCELLING,
                              MIGRATION_STATUS_CANCELLED);
513
        }
514
    }
515 516

    notifier_list_notify(&migration_state_notifiers, s);
517 518
}

519
void migrate_fd_error(MigrationState *s)
520
{
521
    trace_migrate_fd_error();
522
    assert(s->file == NULL);
523 524
    s->state = MIGRATION_STATUS_FAILED;
    trace_migrate_set_state(MIGRATION_STATUS_FAILED);
525
    notifier_list_notify(&migration_state_notifiers, s);
526 527
}

528
static void migrate_fd_cancel(MigrationState *s)
529
{
530
    int old_state ;
531
    QEMUFile *f = migrate_get_current()->file;
532
    trace_migrate_fd_cancel();
533

534 535
    do {
        old_state = s->state;
536 537
        if (old_state != MIGRATION_STATUS_SETUP &&
            old_state != MIGRATION_STATUS_ACTIVE) {
538 539
            break;
        }
540 541
        migrate_set_state(s, old_state, MIGRATION_STATUS_CANCELLING);
    } while (s->state != MIGRATION_STATUS_CANCELLING);
542 543 544 545 546 547 548 549

    /*
     * If we're unlucky the migration code might be stuck somewhere in a
     * send/write while the network has failed and is waiting to timeout;
     * if we've got shutdown(2) available then we can force it to quit.
     * The outgoing qemu file gets closed in migrate_fd_cleanup that is
     * called in a bh, so there is no race against this cancel.
     */
550
    if (s->state == MIGRATION_STATUS_CANCELLING && f) {
551 552
        qemu_file_shutdown(f);
    }
553 554
}

555 556 557 558 559 560 561
void add_migration_state_change_notifier(Notifier *notify)
{
    notifier_list_add(&migration_state_notifiers, notify);
}

void remove_migration_state_change_notifier(Notifier *notify)
{
P
Paolo Bonzini 已提交
562
    notifier_remove(notify);
563 564
}

S
Stefan Hajnoczi 已提交
565
bool migration_in_setup(MigrationState *s)
566
{
567
    return s->state == MIGRATION_STATUS_SETUP;
568 569
}

570
bool migration_has_finished(MigrationState *s)
571
{
572
    return s->state == MIGRATION_STATUS_COMPLETED;
573
}
574

575 576
bool migration_has_failed(MigrationState *s)
{
577 578
    return (s->state == MIGRATION_STATUS_CANCELLED ||
            s->state == MIGRATION_STATUS_FAILED);
579 580
}

I
Isaku Yamahata 已提交
581
static MigrationState *migrate_init(const MigrationParams *params)
582
{
583
    MigrationState *s = migrate_get_current();
584
    int64_t bandwidth_limit = s->bandwidth_limit;
O
Orit Wasserman 已提交
585
    bool enabled_capabilities[MIGRATION_CAPABILITY_MAX];
586
    int64_t xbzrle_cache_size = s->xbzrle_cache_size;
587 588 589 590 591
    int compress_level = s->parameters[MIGRATION_PARAMETER_COMPRESS_LEVEL];
    int compress_thread_count =
            s->parameters[MIGRATION_PARAMETER_COMPRESS_THREADS];
    int decompress_thread_count =
            s->parameters[MIGRATION_PARAMETER_DECOMPRESS_THREADS];
O
Orit Wasserman 已提交
592 593 594

    memcpy(enabled_capabilities, s->enabled_capabilities,
           sizeof(enabled_capabilities));
595

596
    memset(s, 0, sizeof(*s));
I
Isaku Yamahata 已提交
597
    s->params = *params;
O
Orit Wasserman 已提交
598 599
    memcpy(s->enabled_capabilities, enabled_capabilities,
           sizeof(enabled_capabilities));
600
    s->xbzrle_cache_size = xbzrle_cache_size;
601

602 603 604 605 606
    s->parameters[MIGRATION_PARAMETER_COMPRESS_LEVEL] = compress_level;
    s->parameters[MIGRATION_PARAMETER_COMPRESS_THREADS] =
               compress_thread_count;
    s->parameters[MIGRATION_PARAMETER_DECOMPRESS_THREADS] =
               decompress_thread_count;
607
    s->bandwidth_limit = bandwidth_limit;
608 609
    s->state = MIGRATION_STATUS_SETUP;
    trace_migrate_set_state(MIGRATION_STATUS_SETUP);
610

611
    s->total_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
612 613
    return s;
}
614

A
Anthony Liguori 已提交
615 616 617 618 619 620 621 622 623 624 625 626
static GSList *migration_blockers;

void migrate_add_blocker(Error *reason)
{
    migration_blockers = g_slist_prepend(migration_blockers, reason);
}

void migrate_del_blocker(Error *reason)
{
    migration_blockers = g_slist_remove(migration_blockers, reason);
}

D
Dr. David Alan Gilbert 已提交
627 628 629
void qmp_migrate_incoming(const char *uri, Error **errp)
{
    Error *local_err = NULL;
630
    static bool once = true;
D
Dr. David Alan Gilbert 已提交
631 632

    if (!deferred_incoming) {
633
        error_setg(errp, "For use with '-incoming defer'");
D
Dr. David Alan Gilbert 已提交
634 635
        return;
    }
636 637 638
    if (!once) {
        error_setg(errp, "The incoming migration has already been started");
    }
D
Dr. David Alan Gilbert 已提交
639 640 641 642 643 644 645 646

    qemu_start_incoming_migration(uri, &local_err);

    if (local_err) {
        error_propagate(errp, local_err);
        return;
    }

647
    once = false;
D
Dr. David Alan Gilbert 已提交
648 649
}

L
Luiz Capitulino 已提交
650 651 652
void qmp_migrate(const char *uri, bool has_blk, bool blk,
                 bool has_inc, bool inc, bool has_detach, bool detach,
                 Error **errp)
653
{
654
    Error *local_err = NULL;
655
    MigrationState *s = migrate_get_current();
I
Isaku Yamahata 已提交
656
    MigrationParams params;
657 658
    const char *p;

659 660
    params.blk = has_blk && blk;
    params.shared = has_inc && inc;
I
Isaku Yamahata 已提交
661

662 663 664
    if (s->state == MIGRATION_STATUS_ACTIVE ||
        s->state == MIGRATION_STATUS_SETUP ||
        s->state == MIGRATION_STATUS_CANCELLING) {
665
        error_setg(errp, QERR_MIGRATION_ACTIVE);
L
Luiz Capitulino 已提交
666
        return;
667 668
    }

669 670 671 672 673
    if (runstate_check(RUN_STATE_INMIGRATE)) {
        error_setg(errp, "Guest is waiting for an incoming migration");
        return;
    }

L
Luiz Capitulino 已提交
674 675
    if (qemu_savevm_state_blocked(errp)) {
        return;
676 677
    }

A
Anthony Liguori 已提交
678
    if (migration_blockers) {
L
Luiz Capitulino 已提交
679 680
        *errp = error_copy(migration_blockers->data);
        return;
A
Anthony Liguori 已提交
681 682
    }

I
Isaku Yamahata 已提交
683
    s = migrate_init(&params);
684 685

    if (strstart(uri, "tcp:", &p)) {
686
        tcp_start_outgoing_migration(s, p, &local_err);
M
Michael R. Hines 已提交
687
#ifdef CONFIG_RDMA
688
    } else if (strstart(uri, "rdma:", &p)) {
M
Michael R. Hines 已提交
689 690
        rdma_start_outgoing_migration(s, p, &local_err);
#endif
691 692
#if !defined(WIN32)
    } else if (strstart(uri, "exec:", &p)) {
693
        exec_start_outgoing_migration(s, p, &local_err);
694
    } else if (strstart(uri, "unix:", &p)) {
695
        unix_start_outgoing_migration(s, p, &local_err);
696
    } else if (strstart(uri, "fd:", &p)) {
697
        fd_start_outgoing_migration(s, p, &local_err);
698
#endif
699
    } else {
700 701
        error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "uri",
                   "a valid migration protocol");
702
        s->state = MIGRATION_STATUS_FAILED;
L
Luiz Capitulino 已提交
703
        return;
704 705
    }

706
    if (local_err) {
707
        migrate_fd_error(s);
708
        error_propagate(errp, local_err);
L
Luiz Capitulino 已提交
709
        return;
710
    }
711 712
}

L
Luiz Capitulino 已提交
713
void qmp_migrate_cancel(Error **errp)
714
{
715
    migrate_fd_cancel(migrate_get_current());
716 717
}

718 719 720
void qmp_migrate_set_cache_size(int64_t value, Error **errp)
{
    MigrationState *s = migrate_get_current();
721
    int64_t new_size;
722 723 724

    /* Check for truncation */
    if (value != (size_t)value) {
725 726
        error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cache size",
                   "exceeding address space");
727 728 729
        return;
    }

730 731
    /* Cache should not be larger than guest ram size */
    if (value > ram_bytes_total()) {
732 733
        error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cache size",
                   "exceeds guest ram size ");
734 735 736
        return;
    }

737 738
    new_size = xbzrle_cache_resize(value);
    if (new_size < 0) {
739 740
        error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cache size",
                   "is smaller than page size");
741 742 743 744
        return;
    }

    s->xbzrle_cache_size = new_size;
745 746 747 748 749 750 751
}

int64_t qmp_query_migrate_cache_size(Error **errp)
{
    return migrate_xbzrle_cache_size();
}

L
Luiz Capitulino 已提交
752
void qmp_migrate_set_speed(int64_t value, Error **errp)
753 754 755
{
    MigrationState *s;

L
Luiz Capitulino 已提交
756 757
    if (value < 0) {
        value = 0;
758
    }
759 760 761
    if (value > SIZE_MAX) {
        value = SIZE_MAX;
    }
762

763
    s = migrate_get_current();
L
Luiz Capitulino 已提交
764
    s->bandwidth_limit = value;
765 766 767
    if (s->file) {
        qemu_file_set_rate_limit(s->file, s->bandwidth_limit / XFER_LIMIT_RATIO);
    }
768 769
}

770
void qmp_migrate_set_downtime(double value, Error **errp)
771
{
772 773 774
    value *= 1e9;
    value = MAX(0, MIN(UINT64_MAX, value));
    max_downtime = (uint64_t)value;
775
}
776

777 778 779 780 781 782 783 784 785
bool migrate_auto_converge(void)
{
    MigrationState *s;

    s = migrate_get_current();

    return s->enabled_capabilities[MIGRATION_CAPABILITY_AUTO_CONVERGE];
}

786 787 788 789 790 791 792 793 794
bool migrate_zero_blocks(void)
{
    MigrationState *s;

    s = migrate_get_current();

    return s->enabled_capabilities[MIGRATION_CAPABILITY_ZERO_BLOCKS];
}

795 796
bool migrate_use_compression(void)
{
797 798 799 800 801
    MigrationState *s;

    s = migrate_get_current();

    return s->enabled_capabilities[MIGRATION_CAPABILITY_COMPRESS];
802 803 804 805 806 807 808 809
}

int migrate_compress_level(void)
{
    MigrationState *s;

    s = migrate_get_current();

810
    return s->parameters[MIGRATION_PARAMETER_COMPRESS_LEVEL];
811 812 813 814 815 816 817 818
}

int migrate_compress_threads(void)
{
    MigrationState *s;

    s = migrate_get_current();

819
    return s->parameters[MIGRATION_PARAMETER_COMPRESS_THREADS];
820 821
}

822 823 824 825 826 827
int migrate_decompress_threads(void)
{
    MigrationState *s;

    s = migrate_get_current();

828
    return s->parameters[MIGRATION_PARAMETER_DECOMPRESS_THREADS];
829 830
}

831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847
int migrate_use_xbzrle(void)
{
    MigrationState *s;

    s = migrate_get_current();

    return s->enabled_capabilities[MIGRATION_CAPABILITY_XBZRLE];
}

int64_t migrate_xbzrle_cache_size(void)
{
    MigrationState *s;

    s = migrate_get_current();

    return s->xbzrle_cache_size;
}
848 849 850

/* migration thread support */

J
Juan Quintela 已提交
851
static void *migration_thread(void *opaque)
852
{
853
    MigrationState *s = opaque;
854 855
    int64_t initial_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
    int64_t setup_start = qemu_clock_get_ms(QEMU_CLOCK_HOST);
856
    int64_t initial_bytes = 0;
857
    int64_t max_size = 0;
858 859
    int64_t start_time = initial_time;
    bool old_vm_running = false;
860

861
    qemu_savevm_state_header(s->file);
862
    qemu_savevm_state_begin(s->file, &s->params);
863

864
    s->setup_time = qemu_clock_get_ms(QEMU_CLOCK_HOST) - setup_start;
865
    migrate_set_state(s, MIGRATION_STATUS_SETUP, MIGRATION_STATUS_ACTIVE);
866

867
    while (s->state == MIGRATION_STATUS_ACTIVE) {
868
        int64_t current_time;
869
        uint64_t pending_size;
870

871
        if (!qemu_file_rate_limit(s->file)) {
872
            pending_size = qemu_savevm_state_pending(s->file, max_size);
873
            trace_migrate_pending(pending_size, max_size);
874
            if (pending_size && pending_size >= max_size) {
875
                qemu_savevm_state_iterate(s->file);
876
            } else {
877 878
                int ret;

879
                qemu_mutex_lock_iothread();
880
                start_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
881
                qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER);
882
                old_vm_running = runstate_is_running();
883

884 885 886 887 888 889 890
                ret = global_state_store();
                if (!ret) {
                    ret = vm_stop_force_state(RUN_STATE_FINISH_MIGRATE);
                    if (ret >= 0) {
                        qemu_file_set_rate_limit(s->file, INT64_MAX);
                        qemu_savevm_state_complete(s->file);
                    }
891
                }
892
                qemu_mutex_unlock_iothread();
893 894

                if (ret < 0) {
895 896
                    migrate_set_state(s, MIGRATION_STATUS_ACTIVE,
                                      MIGRATION_STATUS_FAILED);
897 898 899
                    break;
                }

P
Paolo Bonzini 已提交
900
                if (!qemu_file_get_error(s->file)) {
901 902
                    migrate_set_state(s, MIGRATION_STATUS_ACTIVE,
                                      MIGRATION_STATUS_COMPLETED);
P
Paolo Bonzini 已提交
903 904
                    break;
                }
905 906
            }
        }
907

908
        if (qemu_file_get_error(s->file)) {
909 910
            migrate_set_state(s, MIGRATION_STATUS_ACTIVE,
                              MIGRATION_STATUS_FAILED);
911 912
            break;
        }
913
        current_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
914
        if (current_time >= initial_time + BUFFER_DELAY) {
915
            uint64_t transferred_bytes = qemu_ftell(s->file) - initial_bytes;
916
            uint64_t time_spent = current_time - initial_time;
917 918 919
            double bandwidth = transferred_bytes / time_spent;
            max_size = bandwidth * migrate_max_downtime() / 1000000;

920 921 922
            s->mbps = time_spent ? (((double) transferred_bytes * 8.0) /
                    ((double) time_spent / 1000.0)) / 1000.0 / 1000.0 : -1;

923 924
            trace_migrate_transferred(transferred_bytes, time_spent,
                                      bandwidth, max_size);
925 926 927 928 929
            /* if we haven't sent anything, we don't want to recalculate
               10000 is a small enough number for our purposes */
            if (s->dirty_bytes_rate && transferred_bytes > 10000) {
                s->expected_downtime = s->dirty_bytes_rate / bandwidth;
            }
930

931
            qemu_file_reset_rate_limit(s->file);
932
            initial_time = current_time;
933
            initial_bytes = qemu_ftell(s->file);
934
        }
935
        if (qemu_file_rate_limit(s->file)) {
936 937 938
            /* usleep expects microseconds */
            g_usleep((initial_time + BUFFER_DELAY - current_time)*1000);
        }
939 940
    }

941
    qemu_mutex_lock_iothread();
942
    if (s->state == MIGRATION_STATUS_COMPLETED) {
943
        int64_t end_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
944
        uint64_t transferred_bytes = qemu_ftell(s->file);
945 946
        s->total_time = end_time - s->total_time;
        s->downtime = end_time - start_time;
947 948 949 950
        if (s->total_time) {
            s->mbps = (((double) transferred_bytes * 8.0) /
                       ((double) s->total_time)) / 1000;
        }
951 952 953 954
        runstate_set(RUN_STATE_POSTMIGRATE);
    } else {
        if (old_vm_running) {
            vm_start();
955
        }
956
    }
957
    qemu_bh_schedule(s->cleanup_bh);
958
    qemu_mutex_unlock_iothread();
959

960 961 962
    return NULL;
}

963
void migrate_fd_connect(MigrationState *s)
964
{
965 966
    /* This is a best 1st approximation. ns to ms */
    s->expected_downtime = max_downtime/1000000;
967
    s->cleanup_bh = qemu_bh_new(migrate_fd_cleanup, s);
968

969 970 971
    qemu_file_set_rate_limit(s->file,
                             s->bandwidth_limit / XFER_LIMIT_RATIO);

972 973 974
    /* Notify before starting migration thread */
    notifier_list_notify(&migration_state_notifiers, s);

975
    migrate_compress_threads_create();
976
    qemu_thread_create(&s->thread, "migration", migration_thread, s,
977
                       QEMU_THREAD_JOINABLE);
978
}