Statistics
| Branch: | Revision:

root / migration.c @ d1a0cf73

History | View | Annotate | Download (16.8 kB)

1 5bb7910a aliguori
/*
2 5bb7910a aliguori
 * QEMU live migration
3 5bb7910a aliguori
 *
4 5bb7910a aliguori
 * Copyright IBM, Corp. 2008
5 5bb7910a aliguori
 *
6 5bb7910a aliguori
 * Authors:
7 5bb7910a aliguori
 *  Anthony Liguori   <aliguori@us.ibm.com>
8 5bb7910a aliguori
 *
9 5bb7910a aliguori
 * This work is licensed under the terms of the GNU GPL, version 2.  See
10 5bb7910a aliguori
 * the COPYING file in the top-level directory.
11 5bb7910a aliguori
 *
12 6b620ca3 Paolo Bonzini
 * Contributions after 2012-01-13 are licensed under the terms of the
13 6b620ca3 Paolo Bonzini
 * GNU GPL, version 2 or (at your option) any later version.
14 5bb7910a aliguori
 */
15 5bb7910a aliguori
16 5bb7910a aliguori
#include "qemu-common.h"
17 caf71f86 Paolo Bonzini
#include "migration/migration.h"
18 83c9089e Paolo Bonzini
#include "monitor/monitor.h"
19 0d82d0e8 Juan Quintela
#include "migration/qemu-file.h"
20 9c17d615 Paolo Bonzini
#include "sysemu/sysemu.h"
21 737e150e Paolo Bonzini
#include "block/block.h"
22 1de7afc9 Paolo Bonzini
#include "qemu/sockets.h"
23 caf71f86 Paolo Bonzini
#include "migration/block.h"
24 766bd176 Juan Quintela
#include "qemu/thread.h"
25 791e7c82 Luiz Capitulino
#include "qmp-commands.h"
26 c09e5bb1 Kazuya Saito
#include "trace.h"
27 065e2813 aliguori
28 065e2813 aliguori
//#define DEBUG_MIGRATION
29 065e2813 aliguori
30 065e2813 aliguori
#ifdef DEBUG_MIGRATION
31 d0f2c4c6 malc
#define DPRINTF(fmt, ...) \
32 065e2813 aliguori
    do { printf("migration: " fmt, ## __VA_ARGS__); } while (0)
33 065e2813 aliguori
#else
34 d0f2c4c6 malc
#define DPRINTF(fmt, ...) \
35 065e2813 aliguori
    do { } while (0)
36 065e2813 aliguori
#endif
37 5bb7910a aliguori
38 7dc688ed Juan Quintela
enum {
39 7dc688ed Juan Quintela
    MIG_STATE_ERROR,
40 7dc688ed Juan Quintela
    MIG_STATE_SETUP,
41 7dc688ed Juan Quintela
    MIG_STATE_CANCELLED,
42 7dc688ed Juan Quintela
    MIG_STATE_ACTIVE,
43 7dc688ed Juan Quintela
    MIG_STATE_COMPLETED,
44 7dc688ed Juan Quintela
};
45 5bb7910a aliguori
46 d0ae46c1 Juan Quintela
#define MAX_THROTTLE  (32 << 20)      /* Migration speed throttling */
47 5bb7910a aliguori
48 5b4e1eb7 Juan Quintela
/* Amount of time to allocate to each "chunk" of bandwidth-throttled
49 5b4e1eb7 Juan Quintela
 * data. */
50 5b4e1eb7 Juan Quintela
#define BUFFER_DELAY     100
51 5b4e1eb7 Juan Quintela
#define XFER_LIMIT_RATIO (1000 / BUFFER_DELAY)
52 5b4e1eb7 Juan Quintela
53 17ad9b35 Orit Wasserman
/* Migration XBZRLE default cache size */
54 17ad9b35 Orit Wasserman
#define DEFAULT_MIGRATE_CACHE_SIZE (64 * 1024 * 1024)
55 17ad9b35 Orit Wasserman
56 99a0db9b Gerd Hoffmann
static NotifierList migration_state_notifiers =
57 99a0db9b Gerd Hoffmann
    NOTIFIER_LIST_INITIALIZER(migration_state_notifiers);
58 99a0db9b Gerd Hoffmann
59 17549e84 Juan Quintela
/* When we add fault tolerance, we could have several
60 17549e84 Juan Quintela
   migrations at once.  For now we don't need to add
61 17549e84 Juan Quintela
   dynamic creation of migration */
62 17549e84 Juan Quintela
63 859bc756 Juan Quintela
MigrationState *migrate_get_current(void)
64 17549e84 Juan Quintela
{
65 17549e84 Juan Quintela
    static MigrationState current_migration = {
66 17549e84 Juan Quintela
        .state = MIG_STATE_SETUP,
67 d0ae46c1 Juan Quintela
        .bandwidth_limit = MAX_THROTTLE,
68 17ad9b35 Orit Wasserman
        .xbzrle_cache_size = DEFAULT_MIGRATE_CACHE_SIZE,
69 17549e84 Juan Quintela
    };
70 17549e84 Juan Quintela
71 17549e84 Juan Quintela
    return &current_migration;
72 17549e84 Juan Quintela
}
73 17549e84 Juan Quintela
74 43eaae28 Paolo Bonzini
void qemu_start_incoming_migration(const char *uri, Error **errp)
75 5bb7910a aliguori
{
76 34c9dd8e aliguori
    const char *p;
77 34c9dd8e aliguori
78 34c9dd8e aliguori
    if (strstart(uri, "tcp:", &p))
79 43eaae28 Paolo Bonzini
        tcp_start_incoming_migration(p, errp);
80 065e2813 aliguori
#if !defined(WIN32)
81 065e2813 aliguori
    else if (strstart(uri, "exec:", &p))
82 43eaae28 Paolo Bonzini
        exec_start_incoming_migration(p, errp);
83 4951f65b Chris Lalancette
    else if (strstart(uri, "unix:", &p))
84 43eaae28 Paolo Bonzini
        unix_start_incoming_migration(p, errp);
85 5ac1fad3 Paolo Bonzini
    else if (strstart(uri, "fd:", &p))
86 43eaae28 Paolo Bonzini
        fd_start_incoming_migration(p, errp);
87 065e2813 aliguori
#endif
88 8ca5e801 Juan Quintela
    else {
89 312fd5f2 Markus Armbruster
        error_setg(errp, "unknown migration protocol: %s", uri);
90 8ca5e801 Juan Quintela
    }
91 5bb7910a aliguori
}
92 5bb7910a aliguori
93 82a4da79 Paolo Bonzini
static void process_incoming_migration_co(void *opaque)
94 511c0231 Juan Quintela
{
95 82a4da79 Paolo Bonzini
    QEMUFile *f = opaque;
96 1c12e1f5 Paolo Bonzini
    int ret;
97 1c12e1f5 Paolo Bonzini
98 1c12e1f5 Paolo Bonzini
    ret = qemu_loadvm_state(f);
99 1c12e1f5 Paolo Bonzini
    qemu_fclose(f);
100 1c12e1f5 Paolo Bonzini
    if (ret < 0) {
101 511c0231 Juan Quintela
        fprintf(stderr, "load of migration failed\n");
102 511c0231 Juan Quintela
        exit(0);
103 511c0231 Juan Quintela
    }
104 511c0231 Juan Quintela
    qemu_announce_self();
105 511c0231 Juan Quintela
    DPRINTF("successfully loaded vm state\n");
106 511c0231 Juan Quintela
107 901862cb Benoît Canet
    bdrv_clear_incoming_migration_all();
108 0f15423c Anthony Liguori
    /* Make sure all file formats flush their mutable metadata */
109 0f15423c Anthony Liguori
    bdrv_invalidate_cache_all();
110 0f15423c Anthony Liguori
111 f5bbfba1 Luiz Capitulino
    if (autostart) {
112 511c0231 Juan Quintela
        vm_start();
113 f5bbfba1 Luiz Capitulino
    } else {
114 29ed72f1 Paolo Bonzini
        runstate_set(RUN_STATE_PAUSED);
115 f5bbfba1 Luiz Capitulino
    }
116 511c0231 Juan Quintela
}
117 511c0231 Juan Quintela
118 82a4da79 Paolo Bonzini
void process_incoming_migration(QEMUFile *f)
119 82a4da79 Paolo Bonzini
{
120 82a4da79 Paolo Bonzini
    Coroutine *co = qemu_coroutine_create(process_incoming_migration_co);
121 82a4da79 Paolo Bonzini
    int fd = qemu_get_fd(f);
122 82a4da79 Paolo Bonzini
123 82a4da79 Paolo Bonzini
    assert(fd != -1);
124 82a4da79 Paolo Bonzini
    socket_set_nonblock(fd);
125 82a4da79 Paolo Bonzini
    qemu_coroutine_enter(co, f);
126 82a4da79 Paolo Bonzini
}
127 82a4da79 Paolo Bonzini
128 a0a3fd60 Glauber Costa
/* amount of nanoseconds we are willing to wait for migration to be down.
129 a0a3fd60 Glauber Costa
 * the choice of nanoseconds is because it is the maximum resolution that
130 a0a3fd60 Glauber Costa
 * get_clock() can achieve. It is an internal measure. All user-visible
131 a0a3fd60 Glauber Costa
 * units must be in seconds */
132 a0a3fd60 Glauber Costa
static uint64_t max_downtime = 30000000;
133 a0a3fd60 Glauber Costa
134 a0a3fd60 Glauber Costa
uint64_t migrate_max_downtime(void)
135 a0a3fd60 Glauber Costa
{
136 a0a3fd60 Glauber Costa
    return max_downtime;
137 a0a3fd60 Glauber Costa
}
138 a0a3fd60 Glauber Costa
139 bbf6da32 Orit Wasserman
MigrationCapabilityStatusList *qmp_query_migrate_capabilities(Error **errp)
140 bbf6da32 Orit Wasserman
{
141 bbf6da32 Orit Wasserman
    MigrationCapabilityStatusList *head = NULL;
142 bbf6da32 Orit Wasserman
    MigrationCapabilityStatusList *caps;
143 bbf6da32 Orit Wasserman
    MigrationState *s = migrate_get_current();
144 bbf6da32 Orit Wasserman
    int i;
145 bbf6da32 Orit Wasserman
146 bbf6da32 Orit Wasserman
    for (i = 0; i < MIGRATION_CAPABILITY_MAX; i++) {
147 bbf6da32 Orit Wasserman
        if (head == NULL) {
148 bbf6da32 Orit Wasserman
            head = g_malloc0(sizeof(*caps));
149 bbf6da32 Orit Wasserman
            caps = head;
150 bbf6da32 Orit Wasserman
        } else {
151 bbf6da32 Orit Wasserman
            caps->next = g_malloc0(sizeof(*caps));
152 bbf6da32 Orit Wasserman
            caps = caps->next;
153 bbf6da32 Orit Wasserman
        }
154 bbf6da32 Orit Wasserman
        caps->value =
155 bbf6da32 Orit Wasserman
            g_malloc(sizeof(*caps->value));
156 bbf6da32 Orit Wasserman
        caps->value->capability = i;
157 bbf6da32 Orit Wasserman
        caps->value->state = s->enabled_capabilities[i];
158 bbf6da32 Orit Wasserman
    }
159 bbf6da32 Orit Wasserman
160 bbf6da32 Orit Wasserman
    return head;
161 bbf6da32 Orit Wasserman
}
162 bbf6da32 Orit Wasserman
163 f36d55af Orit Wasserman
static void get_xbzrle_cache_stats(MigrationInfo *info)
164 f36d55af Orit Wasserman
{
165 f36d55af Orit Wasserman
    if (migrate_use_xbzrle()) {
166 f36d55af Orit Wasserman
        info->has_xbzrle_cache = true;
167 f36d55af Orit Wasserman
        info->xbzrle_cache = g_malloc0(sizeof(*info->xbzrle_cache));
168 f36d55af Orit Wasserman
        info->xbzrle_cache->cache_size = migrate_xbzrle_cache_size();
169 f36d55af Orit Wasserman
        info->xbzrle_cache->bytes = xbzrle_mig_bytes_transferred();
170 f36d55af Orit Wasserman
        info->xbzrle_cache->pages = xbzrle_mig_pages_transferred();
171 f36d55af Orit Wasserman
        info->xbzrle_cache->cache_miss = xbzrle_mig_pages_cache_miss();
172 f36d55af Orit Wasserman
        info->xbzrle_cache->overflow = xbzrle_mig_pages_overflow();
173 f36d55af Orit Wasserman
    }
174 f36d55af Orit Wasserman
}
175 f36d55af Orit Wasserman
176 791e7c82 Luiz Capitulino
MigrationInfo *qmp_query_migrate(Error **errp)
177 5bb7910a aliguori
{
178 791e7c82 Luiz Capitulino
    MigrationInfo *info = g_malloc0(sizeof(*info));
179 17549e84 Juan Quintela
    MigrationState *s = migrate_get_current();
180 17549e84 Juan Quintela
181 17549e84 Juan Quintela
    switch (s->state) {
182 17549e84 Juan Quintela
    case MIG_STATE_SETUP:
183 17549e84 Juan Quintela
        /* no migration has happened ever */
184 17549e84 Juan Quintela
        break;
185 17549e84 Juan Quintela
    case MIG_STATE_ACTIVE:
186 791e7c82 Luiz Capitulino
        info->has_status = true;
187 791e7c82 Luiz Capitulino
        info->status = g_strdup("active");
188 7aa939af Juan Quintela
        info->has_total_time = true;
189 7aa939af Juan Quintela
        info->total_time = qemu_get_clock_ms(rt_clock)
190 7aa939af Juan Quintela
            - s->total_time;
191 2c52ddf1 Juan Quintela
        info->has_expected_downtime = true;
192 2c52ddf1 Juan Quintela
        info->expected_downtime = s->expected_downtime;
193 17549e84 Juan Quintela
194 791e7c82 Luiz Capitulino
        info->has_ram = true;
195 791e7c82 Luiz Capitulino
        info->ram = g_malloc0(sizeof(*info->ram));
196 791e7c82 Luiz Capitulino
        info->ram->transferred = ram_bytes_transferred();
197 791e7c82 Luiz Capitulino
        info->ram->remaining = ram_bytes_remaining();
198 791e7c82 Luiz Capitulino
        info->ram->total = ram_bytes_total();
199 004d4c10 Orit Wasserman
        info->ram->duplicate = dup_mig_pages_transferred();
200 004d4c10 Orit Wasserman
        info->ram->normal = norm_mig_pages_transferred();
201 004d4c10 Orit Wasserman
        info->ram->normal_bytes = norm_mig_bytes_transferred();
202 8d017193 Juan Quintela
        info->ram->dirty_pages_rate = s->dirty_pages_rate;
203 8d017193 Juan Quintela
204 17549e84 Juan Quintela
205 17549e84 Juan Quintela
        if (blk_mig_active()) {
206 791e7c82 Luiz Capitulino
            info->has_disk = true;
207 791e7c82 Luiz Capitulino
            info->disk = g_malloc0(sizeof(*info->disk));
208 791e7c82 Luiz Capitulino
            info->disk->transferred = blk_mig_bytes_transferred();
209 791e7c82 Luiz Capitulino
            info->disk->remaining = blk_mig_bytes_remaining();
210 791e7c82 Luiz Capitulino
            info->disk->total = blk_mig_bytes_total();
211 ff8d81d8 aliguori
        }
212 f36d55af Orit Wasserman
213 f36d55af Orit Wasserman
        get_xbzrle_cache_stats(info);
214 17549e84 Juan Quintela
        break;
215 17549e84 Juan Quintela
    case MIG_STATE_COMPLETED:
216 f36d55af Orit Wasserman
        get_xbzrle_cache_stats(info);
217 f36d55af Orit Wasserman
218 791e7c82 Luiz Capitulino
        info->has_status = true;
219 791e7c82 Luiz Capitulino
        info->status = g_strdup("completed");
220 7aa939af Juan Quintela
        info->total_time = s->total_time;
221 9c5a9fcf Juan Quintela
        info->has_downtime = true;
222 9c5a9fcf Juan Quintela
        info->downtime = s->downtime;
223 d5f8a570 Juan Quintela
224 d5f8a570 Juan Quintela
        info->has_ram = true;
225 d5f8a570 Juan Quintela
        info->ram = g_malloc0(sizeof(*info->ram));
226 d5f8a570 Juan Quintela
        info->ram->transferred = ram_bytes_transferred();
227 d5f8a570 Juan Quintela
        info->ram->remaining = 0;
228 d5f8a570 Juan Quintela
        info->ram->total = ram_bytes_total();
229 004d4c10 Orit Wasserman
        info->ram->duplicate = dup_mig_pages_transferred();
230 004d4c10 Orit Wasserman
        info->ram->normal = norm_mig_pages_transferred();
231 004d4c10 Orit Wasserman
        info->ram->normal_bytes = norm_mig_bytes_transferred();
232 17549e84 Juan Quintela
        break;
233 17549e84 Juan Quintela
    case MIG_STATE_ERROR:
234 791e7c82 Luiz Capitulino
        info->has_status = true;
235 791e7c82 Luiz Capitulino
        info->status = g_strdup("failed");
236 17549e84 Juan Quintela
        break;
237 17549e84 Juan Quintela
    case MIG_STATE_CANCELLED:
238 791e7c82 Luiz Capitulino
        info->has_status = true;
239 791e7c82 Luiz Capitulino
        info->status = g_strdup("cancelled");
240 17549e84 Juan Quintela
        break;
241 5bb7910a aliguori
    }
242 791e7c82 Luiz Capitulino
243 791e7c82 Luiz Capitulino
    return info;
244 5bb7910a aliguori
}
245 5bb7910a aliguori
246 00458433 Orit Wasserman
void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params,
247 00458433 Orit Wasserman
                                  Error **errp)
248 00458433 Orit Wasserman
{
249 00458433 Orit Wasserman
    MigrationState *s = migrate_get_current();
250 00458433 Orit Wasserman
    MigrationCapabilityStatusList *cap;
251 00458433 Orit Wasserman
252 00458433 Orit Wasserman
    if (s->state == MIG_STATE_ACTIVE) {
253 00458433 Orit Wasserman
        error_set(errp, QERR_MIGRATION_ACTIVE);
254 00458433 Orit Wasserman
        return;
255 00458433 Orit Wasserman
    }
256 00458433 Orit Wasserman
257 00458433 Orit Wasserman
    for (cap = params; cap; cap = cap->next) {
258 00458433 Orit Wasserman
        s->enabled_capabilities[cap->value->capability] = cap->value->state;
259 00458433 Orit Wasserman
    }
260 00458433 Orit Wasserman
}
261 00458433 Orit Wasserman
262 065e2813 aliguori
/* shared migration helpers */
263 065e2813 aliguori
264 bb1fadc4 Paolo Bonzini
static void migrate_fd_cleanup(void *opaque)
265 065e2813 aliguori
{
266 bb1fadc4 Paolo Bonzini
    MigrationState *s = opaque;
267 bb1fadc4 Paolo Bonzini
268 bb1fadc4 Paolo Bonzini
    qemu_bh_delete(s->cleanup_bh);
269 bb1fadc4 Paolo Bonzini
    s->cleanup_bh = NULL;
270 bb1fadc4 Paolo Bonzini
271 065e2813 aliguori
    if (s->file) {
272 d0f2c4c6 malc
        DPRINTF("closing file\n");
273 404a7c05 Paolo Bonzini
        qemu_mutex_unlock_iothread();
274 404a7c05 Paolo Bonzini
        qemu_thread_join(&s->thread);
275 404a7c05 Paolo Bonzini
        qemu_mutex_lock_iothread();
276 404a7c05 Paolo Bonzini
277 6f190a06 Paolo Bonzini
        qemu_fclose(s->file);
278 6f190a06 Paolo Bonzini
        s->file = NULL;
279 065e2813 aliguori
    }
280 065e2813 aliguori
281 a3fa1d78 Paolo Bonzini
    assert(s->state != MIG_STATE_ACTIVE);
282 7a2c1721 Paolo Bonzini
283 a3fa1d78 Paolo Bonzini
    if (s->state != MIG_STATE_COMPLETED) {
284 7a2c1721 Paolo Bonzini
        qemu_savevm_state_cancel();
285 7a2c1721 Paolo Bonzini
    }
286 a3fa1d78 Paolo Bonzini
287 a3fa1d78 Paolo Bonzini
    notifier_list_notify(&migration_state_notifiers, s);
288 065e2813 aliguori
}
289 065e2813 aliguori
290 f4410a5d Paolo Bonzini
static void migrate_finish_set_state(MigrationState *s, int new_state)
291 f4410a5d Paolo Bonzini
{
292 f4410a5d Paolo Bonzini
    if (__sync_val_compare_and_swap(&s->state, MIG_STATE_ACTIVE,
293 f4410a5d Paolo Bonzini
                                    new_state) == new_state) {
294 f4410a5d Paolo Bonzini
        trace_migrate_set_state(new_state);
295 f4410a5d Paolo Bonzini
    }
296 f4410a5d Paolo Bonzini
}
297 f4410a5d Paolo Bonzini
298 8b6b99b3 Juan Quintela
void migrate_fd_error(MigrationState *s)
299 065e2813 aliguori
{
300 8b6b99b3 Juan Quintela
    DPRINTF("setting error state\n");
301 bb1fadc4 Paolo Bonzini
    assert(s->file == NULL);
302 bb1fadc4 Paolo Bonzini
    s->state = MIG_STATE_ERROR;
303 bb1fadc4 Paolo Bonzini
    trace_migrate_set_state(MIG_STATE_ERROR);
304 bb1fadc4 Paolo Bonzini
    notifier_list_notify(&migration_state_notifiers, s);
305 458cf28e Juan Quintela
}
306 458cf28e Juan Quintela
307 0edda1c4 Juan Quintela
static void migrate_fd_cancel(MigrationState *s)
308 065e2813 aliguori
{
309 d0f2c4c6 malc
    DPRINTF("cancelling migration\n");
310 065e2813 aliguori
311 f4410a5d Paolo Bonzini
    migrate_finish_set_state(s, MIG_STATE_CANCELLED);
312 065e2813 aliguori
}
313 065e2813 aliguori
314 99a0db9b Gerd Hoffmann
void add_migration_state_change_notifier(Notifier *notify)
315 99a0db9b Gerd Hoffmann
{
316 99a0db9b Gerd Hoffmann
    notifier_list_add(&migration_state_notifiers, notify);
317 99a0db9b Gerd Hoffmann
}
318 99a0db9b Gerd Hoffmann
319 99a0db9b Gerd Hoffmann
void remove_migration_state_change_notifier(Notifier *notify)
320 99a0db9b Gerd Hoffmann
{
321 31552529 Paolo Bonzini
    notifier_remove(notify);
322 99a0db9b Gerd Hoffmann
}
323 99a0db9b Gerd Hoffmann
324 afe2df69 Gerd Hoffmann
bool migration_is_active(MigrationState *s)
325 afe2df69 Gerd Hoffmann
{
326 afe2df69 Gerd Hoffmann
    return s->state == MIG_STATE_ACTIVE;
327 afe2df69 Gerd Hoffmann
}
328 afe2df69 Gerd Hoffmann
329 7073693b Juan Quintela
bool migration_has_finished(MigrationState *s)
330 99a0db9b Gerd Hoffmann
{
331 7073693b Juan Quintela
    return s->state == MIG_STATE_COMPLETED;
332 99a0db9b Gerd Hoffmann
}
333 0edda1c4 Juan Quintela
334 afe2df69 Gerd Hoffmann
bool migration_has_failed(MigrationState *s)
335 afe2df69 Gerd Hoffmann
{
336 afe2df69 Gerd Hoffmann
    return (s->state == MIG_STATE_CANCELLED ||
337 afe2df69 Gerd Hoffmann
            s->state == MIG_STATE_ERROR);
338 afe2df69 Gerd Hoffmann
}
339 afe2df69 Gerd Hoffmann
340 6607ae23 Isaku Yamahata
static MigrationState *migrate_init(const MigrationParams *params)
341 0edda1c4 Juan Quintela
{
342 17549e84 Juan Quintela
    MigrationState *s = migrate_get_current();
343 d0ae46c1 Juan Quintela
    int64_t bandwidth_limit = s->bandwidth_limit;
344 bbf6da32 Orit Wasserman
    bool enabled_capabilities[MIGRATION_CAPABILITY_MAX];
345 17ad9b35 Orit Wasserman
    int64_t xbzrle_cache_size = s->xbzrle_cache_size;
346 bbf6da32 Orit Wasserman
347 bbf6da32 Orit Wasserman
    memcpy(enabled_capabilities, s->enabled_capabilities,
348 bbf6da32 Orit Wasserman
           sizeof(enabled_capabilities));
349 0edda1c4 Juan Quintela
350 17549e84 Juan Quintela
    memset(s, 0, sizeof(*s));
351 d0ae46c1 Juan Quintela
    s->bandwidth_limit = bandwidth_limit;
352 6607ae23 Isaku Yamahata
    s->params = *params;
353 bbf6da32 Orit Wasserman
    memcpy(s->enabled_capabilities, enabled_capabilities,
354 bbf6da32 Orit Wasserman
           sizeof(enabled_capabilities));
355 17ad9b35 Orit Wasserman
    s->xbzrle_cache_size = xbzrle_cache_size;
356 1299c631 Juan Quintela
357 0edda1c4 Juan Quintela
    s->bandwidth_limit = bandwidth_limit;
358 d5934dde Juan Quintela
    s->state = MIG_STATE_SETUP;
359 c09e5bb1 Kazuya Saito
    trace_migrate_set_state(MIG_STATE_SETUP);
360 0edda1c4 Juan Quintela
361 c09e5bb1 Kazuya Saito
    s->total_time = qemu_get_clock_ms(rt_clock);
362 0edda1c4 Juan Quintela
    return s;
363 0edda1c4 Juan Quintela
}
364 cab30143 Juan Quintela
365 fa2756b7 Anthony Liguori
static GSList *migration_blockers;
366 fa2756b7 Anthony Liguori
367 fa2756b7 Anthony Liguori
void migrate_add_blocker(Error *reason)
368 fa2756b7 Anthony Liguori
{
369 fa2756b7 Anthony Liguori
    migration_blockers = g_slist_prepend(migration_blockers, reason);
370 fa2756b7 Anthony Liguori
}
371 fa2756b7 Anthony Liguori
372 fa2756b7 Anthony Liguori
void migrate_del_blocker(Error *reason)
373 fa2756b7 Anthony Liguori
{
374 fa2756b7 Anthony Liguori
    migration_blockers = g_slist_remove(migration_blockers, reason);
375 fa2756b7 Anthony Liguori
}
376 fa2756b7 Anthony Liguori
377 e1c37d0e Luiz Capitulino
void qmp_migrate(const char *uri, bool has_blk, bool blk,
378 e1c37d0e Luiz Capitulino
                 bool has_inc, bool inc, bool has_detach, bool detach,
379 e1c37d0e Luiz Capitulino
                 Error **errp)
380 cab30143 Juan Quintela
{
381 be7059cd Paolo Bonzini
    Error *local_err = NULL;
382 17549e84 Juan Quintela
    MigrationState *s = migrate_get_current();
383 6607ae23 Isaku Yamahata
    MigrationParams params;
384 cab30143 Juan Quintela
    const char *p;
385 cab30143 Juan Quintela
386 6607ae23 Isaku Yamahata
    params.blk = blk;
387 6607ae23 Isaku Yamahata
    params.shared = inc;
388 6607ae23 Isaku Yamahata
389 17549e84 Juan Quintela
    if (s->state == MIG_STATE_ACTIVE) {
390 e1c37d0e Luiz Capitulino
        error_set(errp, QERR_MIGRATION_ACTIVE);
391 e1c37d0e Luiz Capitulino
        return;
392 cab30143 Juan Quintela
    }
393 cab30143 Juan Quintela
394 e1c37d0e Luiz Capitulino
    if (qemu_savevm_state_blocked(errp)) {
395 e1c37d0e Luiz Capitulino
        return;
396 cab30143 Juan Quintela
    }
397 cab30143 Juan Quintela
398 fa2756b7 Anthony Liguori
    if (migration_blockers) {
399 e1c37d0e Luiz Capitulino
        *errp = error_copy(migration_blockers->data);
400 e1c37d0e Luiz Capitulino
        return;
401 fa2756b7 Anthony Liguori
    }
402 fa2756b7 Anthony Liguori
403 6607ae23 Isaku Yamahata
    s = migrate_init(&params);
404 cab30143 Juan Quintela
405 cab30143 Juan Quintela
    if (strstart(uri, "tcp:", &p)) {
406 f37afb5a Paolo Bonzini
        tcp_start_outgoing_migration(s, p, &local_err);
407 cab30143 Juan Quintela
#if !defined(WIN32)
408 cab30143 Juan Quintela
    } else if (strstart(uri, "exec:", &p)) {
409 f37afb5a Paolo Bonzini
        exec_start_outgoing_migration(s, p, &local_err);
410 cab30143 Juan Quintela
    } else if (strstart(uri, "unix:", &p)) {
411 f37afb5a Paolo Bonzini
        unix_start_outgoing_migration(s, p, &local_err);
412 cab30143 Juan Quintela
    } else if (strstart(uri, "fd:", &p)) {
413 f37afb5a Paolo Bonzini
        fd_start_outgoing_migration(s, p, &local_err);
414 cab30143 Juan Quintela
#endif
415 99a0db9b Gerd Hoffmann
    } else {
416 e1c37d0e Luiz Capitulino
        error_set(errp, QERR_INVALID_PARAMETER_VALUE, "uri", "a valid migration protocol");
417 e1c37d0e Luiz Capitulino
        return;
418 cab30143 Juan Quintela
    }
419 cab30143 Juan Quintela
420 f37afb5a Paolo Bonzini
    if (local_err) {
421 342ab8d1 Paolo Bonzini
        migrate_fd_error(s);
422 f37afb5a Paolo Bonzini
        error_propagate(errp, local_err);
423 e1c37d0e Luiz Capitulino
        return;
424 1299c631 Juan Quintela
    }
425 cab30143 Juan Quintela
}
426 cab30143 Juan Quintela
427 6cdedb07 Luiz Capitulino
void qmp_migrate_cancel(Error **errp)
428 cab30143 Juan Quintela
{
429 17549e84 Juan Quintela
    migrate_fd_cancel(migrate_get_current());
430 cab30143 Juan Quintela
}
431 cab30143 Juan Quintela
432 9e1ba4cc Orit Wasserman
void qmp_migrate_set_cache_size(int64_t value, Error **errp)
433 9e1ba4cc Orit Wasserman
{
434 9e1ba4cc Orit Wasserman
    MigrationState *s = migrate_get_current();
435 9e1ba4cc Orit Wasserman
436 9e1ba4cc Orit Wasserman
    /* Check for truncation */
437 9e1ba4cc Orit Wasserman
    if (value != (size_t)value) {
438 9e1ba4cc Orit Wasserman
        error_set(errp, QERR_INVALID_PARAMETER_VALUE, "cache size",
439 9e1ba4cc Orit Wasserman
                  "exceeding address space");
440 9e1ba4cc Orit Wasserman
        return;
441 9e1ba4cc Orit Wasserman
    }
442 9e1ba4cc Orit Wasserman
443 9e1ba4cc Orit Wasserman
    s->xbzrle_cache_size = xbzrle_cache_resize(value);
444 9e1ba4cc Orit Wasserman
}
445 9e1ba4cc Orit Wasserman
446 9e1ba4cc Orit Wasserman
int64_t qmp_query_migrate_cache_size(Error **errp)
447 9e1ba4cc Orit Wasserman
{
448 9e1ba4cc Orit Wasserman
    return migrate_xbzrle_cache_size();
449 9e1ba4cc Orit Wasserman
}
450 9e1ba4cc Orit Wasserman
451 3dc85383 Luiz Capitulino
void qmp_migrate_set_speed(int64_t value, Error **errp)
452 cab30143 Juan Quintela
{
453 cab30143 Juan Quintela
    MigrationState *s;
454 cab30143 Juan Quintela
455 3dc85383 Luiz Capitulino
    if (value < 0) {
456 3dc85383 Luiz Capitulino
        value = 0;
457 99a0db9b Gerd Hoffmann
    }
458 442773ce Paolo Bonzini
    if (value > SIZE_MAX) {
459 442773ce Paolo Bonzini
        value = SIZE_MAX;
460 442773ce Paolo Bonzini
    }
461 cab30143 Juan Quintela
462 17549e84 Juan Quintela
    s = migrate_get_current();
463 3dc85383 Luiz Capitulino
    s->bandwidth_limit = value;
464 442773ce Paolo Bonzini
    if (s->file) {
465 442773ce Paolo Bonzini
        qemu_file_set_rate_limit(s->file, s->bandwidth_limit / XFER_LIMIT_RATIO);
466 442773ce Paolo Bonzini
    }
467 cab30143 Juan Quintela
}
468 cab30143 Juan Quintela
469 4f0a993b Luiz Capitulino
void qmp_migrate_set_downtime(double value, Error **errp)
470 cab30143 Juan Quintela
{
471 4f0a993b Luiz Capitulino
    value *= 1e9;
472 4f0a993b Luiz Capitulino
    value = MAX(0, MIN(UINT64_MAX, value));
473 4f0a993b Luiz Capitulino
    max_downtime = (uint64_t)value;
474 99a0db9b Gerd Hoffmann
}
475 17ad9b35 Orit Wasserman
476 17ad9b35 Orit Wasserman
int migrate_use_xbzrle(void)
477 17ad9b35 Orit Wasserman
{
478 17ad9b35 Orit Wasserman
    MigrationState *s;
479 17ad9b35 Orit Wasserman
480 17ad9b35 Orit Wasserman
    s = migrate_get_current();
481 17ad9b35 Orit Wasserman
482 17ad9b35 Orit Wasserman
    return s->enabled_capabilities[MIGRATION_CAPABILITY_XBZRLE];
483 17ad9b35 Orit Wasserman
}
484 17ad9b35 Orit Wasserman
485 17ad9b35 Orit Wasserman
int64_t migrate_xbzrle_cache_size(void)
486 17ad9b35 Orit Wasserman
{
487 17ad9b35 Orit Wasserman
    MigrationState *s;
488 17ad9b35 Orit Wasserman
489 17ad9b35 Orit Wasserman
    s = migrate_get_current();
490 17ad9b35 Orit Wasserman
491 17ad9b35 Orit Wasserman
    return s->xbzrle_cache_size;
492 17ad9b35 Orit Wasserman
}
493 0d82d0e8 Juan Quintela
494 0d82d0e8 Juan Quintela
/* migration thread support */
495 0d82d0e8 Juan Quintela
496 5f496a1b Juan Quintela
static void *migration_thread(void *opaque)
497 0d82d0e8 Juan Quintela
{
498 9848a404 Juan Quintela
    MigrationState *s = opaque;
499 0d82d0e8 Juan Quintela
    int64_t initial_time = qemu_get_clock_ms(rt_clock);
500 7161082c Juan Quintela
    int64_t sleep_time = 0;
501 be7172e2 Paolo Bonzini
    int64_t initial_bytes = 0;
502 0d82d0e8 Juan Quintela
    int64_t max_size = 0;
503 a3fa1d78 Paolo Bonzini
    int64_t start_time = initial_time;
504 a3fa1d78 Paolo Bonzini
    bool old_vm_running = false;
505 76f5933a Juan Quintela
506 76f5933a Juan Quintela
    DPRINTF("beginning savevm\n");
507 dba433c0 Paolo Bonzini
    qemu_savevm_state_begin(s->file, &s->params);
508 0d82d0e8 Juan Quintela
509 dba433c0 Paolo Bonzini
    while (s->state == MIG_STATE_ACTIVE) {
510 a3e879cd Juan Quintela
        int64_t current_time;
511 c369f40d Juan Quintela
        uint64_t pending_size;
512 0d82d0e8 Juan Quintela
513 a0ff044b Paolo Bonzini
        if (!qemu_file_rate_limit(s->file)) {
514 c369f40d Juan Quintela
            DPRINTF("iterate\n");
515 c369f40d Juan Quintela
            pending_size = qemu_savevm_state_pending(s->file, max_size);
516 c369f40d Juan Quintela
            DPRINTF("pending size %lu max %lu\n", pending_size, max_size);
517 b22ff1fb Juan Quintela
            if (pending_size && pending_size >= max_size) {
518 dba433c0 Paolo Bonzini
                qemu_savevm_state_iterate(s->file);
519 c369f40d Juan Quintela
            } else {
520 c369f40d Juan Quintela
                DPRINTF("done iterating\n");
521 32c835ba Paolo Bonzini
                qemu_mutex_lock_iothread();
522 c369f40d Juan Quintela
                start_time = qemu_get_clock_ms(rt_clock);
523 c369f40d Juan Quintela
                qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER);
524 a3fa1d78 Paolo Bonzini
                old_vm_running = runstate_is_running();
525 891518ab Paolo Bonzini
                vm_stop_force_state(RUN_STATE_FINISH_MIGRATE);
526 442773ce Paolo Bonzini
                qemu_file_set_rate_limit(s->file, INT_MAX);
527 dba433c0 Paolo Bonzini
                qemu_savevm_state_complete(s->file);
528 32c835ba Paolo Bonzini
                qemu_mutex_unlock_iothread();
529 059f896c Paolo Bonzini
                if (!qemu_file_get_error(s->file)) {
530 059f896c Paolo Bonzini
                    migrate_finish_set_state(s, MIG_STATE_COMPLETED);
531 059f896c Paolo Bonzini
                    break;
532 059f896c Paolo Bonzini
                }
533 c369f40d Juan Quintela
            }
534 c369f40d Juan Quintela
        }
535 f4410a5d Paolo Bonzini
536 fd45ee2c Paolo Bonzini
        if (qemu_file_get_error(s->file)) {
537 fd45ee2c Paolo Bonzini
            migrate_finish_set_state(s, MIG_STATE_ERROR);
538 fd45ee2c Paolo Bonzini
            break;
539 fd45ee2c Paolo Bonzini
        }
540 a3e879cd Juan Quintela
        current_time = qemu_get_clock_ms(rt_clock);
541 0d82d0e8 Juan Quintela
        if (current_time >= initial_time + BUFFER_DELAY) {
542 be7172e2 Paolo Bonzini
            uint64_t transferred_bytes = qemu_ftell(s->file) - initial_bytes;
543 7161082c Juan Quintela
            uint64_t time_spent = current_time - initial_time - sleep_time;
544 0d82d0e8 Juan Quintela
            double bandwidth = transferred_bytes / time_spent;
545 0d82d0e8 Juan Quintela
            max_size = bandwidth * migrate_max_downtime() / 1000000;
546 0d82d0e8 Juan Quintela
547 0d82d0e8 Juan Quintela
            DPRINTF("transferred %" PRIu64 " time_spent %" PRIu64
548 0d82d0e8 Juan Quintela
                    " bandwidth %g max_size %" PRId64 "\n",
549 0d82d0e8 Juan Quintela
                    transferred_bytes, time_spent, bandwidth, max_size);
550 90f8ae72 Juan Quintela
            /* if we haven't sent anything, we don't want to recalculate
551 90f8ae72 Juan Quintela
               10000 is a small enough number for our purposes */
552 90f8ae72 Juan Quintela
            if (s->dirty_bytes_rate && transferred_bytes > 10000) {
553 90f8ae72 Juan Quintela
                s->expected_downtime = s->dirty_bytes_rate / bandwidth;
554 90f8ae72 Juan Quintela
            }
555 0d82d0e8 Juan Quintela
556 1964a397 Paolo Bonzini
            qemu_file_reset_rate_limit(s->file);
557 7161082c Juan Quintela
            sleep_time = 0;
558 0d82d0e8 Juan Quintela
            initial_time = current_time;
559 be7172e2 Paolo Bonzini
            initial_bytes = qemu_ftell(s->file);
560 0d82d0e8 Juan Quintela
        }
561 a0ff044b Paolo Bonzini
        if (qemu_file_rate_limit(s->file)) {
562 0d82d0e8 Juan Quintela
            /* usleep expects microseconds */
563 0d82d0e8 Juan Quintela
            g_usleep((initial_time + BUFFER_DELAY - current_time)*1000);
564 7161082c Juan Quintela
            sleep_time += qemu_get_clock_ms(rt_clock) - current_time;
565 0d82d0e8 Juan Quintela
        }
566 a3fa1d78 Paolo Bonzini
    }
567 a3fa1d78 Paolo Bonzini
568 f4410a5d Paolo Bonzini
    qemu_mutex_lock_iothread();
569 a3fa1d78 Paolo Bonzini
    if (s->state == MIG_STATE_COMPLETED) {
570 a3fa1d78 Paolo Bonzini
        int64_t end_time = qemu_get_clock_ms(rt_clock);
571 a3fa1d78 Paolo Bonzini
        s->total_time = end_time - s->total_time;
572 a3fa1d78 Paolo Bonzini
        s->downtime = end_time - start_time;
573 a3fa1d78 Paolo Bonzini
        runstate_set(RUN_STATE_POSTMIGRATE);
574 a3fa1d78 Paolo Bonzini
    } else {
575 a3fa1d78 Paolo Bonzini
        if (old_vm_running) {
576 a3fa1d78 Paolo Bonzini
            vm_start();
577 dba433c0 Paolo Bonzini
        }
578 0d82d0e8 Juan Quintela
    }
579 bb1fadc4 Paolo Bonzini
    qemu_bh_schedule(s->cleanup_bh);
580 dba433c0 Paolo Bonzini
    qemu_mutex_unlock_iothread();
581 f4410a5d Paolo Bonzini
582 0d82d0e8 Juan Quintela
    return NULL;
583 0d82d0e8 Juan Quintela
}
584 0d82d0e8 Juan Quintela
585 9848a404 Juan Quintela
void migrate_fd_connect(MigrationState *s)
586 0d82d0e8 Juan Quintela
{
587 9848a404 Juan Quintela
    s->state = MIG_STATE_ACTIVE;
588 c09e5bb1 Kazuya Saito
    trace_migrate_set_state(MIG_STATE_ACTIVE);
589 c09e5bb1 Kazuya Saito
590 cc283e3b Juan Quintela
    /* This is a best 1st approximation. ns to ms */
591 cc283e3b Juan Quintela
    s->expected_downtime = max_downtime/1000000;
592 bb1fadc4 Paolo Bonzini
    s->cleanup_bh = qemu_bh_new(migrate_fd_cleanup, s);
593 0d82d0e8 Juan Quintela
594 442773ce Paolo Bonzini
    qemu_file_set_rate_limit(s->file,
595 442773ce Paolo Bonzini
                             s->bandwidth_limit / XFER_LIMIT_RATIO);
596 442773ce Paolo Bonzini
597 5f496a1b Juan Quintela
    qemu_thread_create(&s->thread, migration_thread, s,
598 bb1fadc4 Paolo Bonzini
                       QEMU_THREAD_JOINABLE);
599 0d3b26f5 Juan Quintela
    notifier_list_notify(&migration_state_notifiers, s);
600 0d82d0e8 Juan Quintela
}