]> Git Repo - qemu.git/blame - include/migration/migration.h
migration_is_setup_or_active
[qemu.git] / include / migration / migration.h
CommitLineData
5bb7910a
AL
1/*
2 * QEMU live migration
3 *
4 * Copyright IBM, Corp. 2008
5 *
6 * Authors:
7 * Anthony Liguori <[email protected]>
8 *
9 * This work is licensed under the terms of the GNU GPL, version 2. See
10 * the COPYING file in the top-level directory.
11 *
12 */
13
14#ifndef QEMU_MIGRATION_H
15#define QEMU_MIGRATION_H
16
7b1b5d19 17#include "qapi/qmp/qdict.h"
376253ec 18#include "qemu-common.h"
9848a404 19#include "qemu/thread.h"
1de7afc9 20#include "qemu/notify.h"
7b1b5d19 21#include "qapi/error.h"
caf71f86 22#include "migration/vmstate.h"
bbf6da32 23#include "qapi-types.h"
43487c67 24#include "exec/cpu-common.h"
376253ec 25
b5503338
EH
26#define QEMU_VM_FILE_MAGIC 0x5145564d
27#define QEMU_VM_FILE_VERSION_COMPAT 0x00000002
28#define QEMU_VM_FILE_VERSION 0x00000003
29
30#define QEMU_VM_EOF 0x00
31#define QEMU_VM_SECTION_START 0x01
32#define QEMU_VM_SECTION_PART 0x02
33#define QEMU_VM_SECTION_END 0x03
34#define QEMU_VM_SECTION_FULL 0x04
35#define QEMU_VM_SUBSECTION 0x05
8118f095 36#define QEMU_VM_VMDESCRIPTION 0x06
61964c23 37#define QEMU_VM_CONFIGURATION 0x07
c76ca188 38#define QEMU_VM_COMMAND 0x08
f68945d4 39#define QEMU_VM_SECTION_FOOTER 0x7e
b5503338 40
6607ae23
IY
41struct MigrationParams {
42 bool blk;
43 bool shared;
44};
45
6decec93
DDAG
46/* Messages sent on the return path from destination to source */
47enum mig_rp_message_type {
48 MIG_RP_MSG_INVALID = 0, /* Must be 0 */
49 MIG_RP_MSG_SHUT, /* sibling will not send any more RP messages */
50 MIG_RP_MSG_PONG, /* Response to a PING; data (seq: be32 ) */
51
52 MIG_RP_MSG_MAX
53};
54
1a8f46f8 55typedef QLIST_HEAD(, LoadStateEntry) LoadStateEntry_Head;
bca7856a
DDAG
56/* State for the incoming migration */
57struct MigrationIncomingState {
42e2aa56 58 QEMUFile *from_src_file;
1a8f46f8 59
2e37701e 60 QEMUFile *to_src_file;
6decec93 61 QemuMutex rp_mutex; /* We send replies from multiple threads */
2e37701e 62
1a8f46f8
DDAG
63 /* See savevm.c */
64 LoadStateEntry_Head loadvm_handlers;
bca7856a
DDAG
65};
66
67MigrationIncomingState *migration_incoming_get_current(void);
68MigrationIncomingState *migration_incoming_state_new(QEMUFile *f);
69void migration_incoming_state_destroy(void);
70
22f00a44 71struct MigrationState
065e2813 72{
065e2813 73 int64_t bandwidth_limit;
9848a404
JQ
74 size_t bytes_xfer;
75 size_t xfer_limit;
9848a404 76 QemuThread thread;
bb1fadc4 77 QEMUBH *cleanup_bh;
065e2813 78 QEMUFile *file;
43c60a81 79 int parameters[MIGRATION_PARAMETER_MAX];
f8bbc128 80
f8bbc128 81 int state;
6607ae23 82 MigrationParams params;
7e114f8c 83 double mbps;
d5f8a570 84 int64_t total_time;
9c5a9fcf 85 int64_t downtime;
2c52ddf1 86 int64_t expected_downtime;
8d017193 87 int64_t dirty_pages_rate;
90f8ae72 88 int64_t dirty_bytes_rate;
bbf6da32 89 bool enabled_capabilities[MIGRATION_CAPABILITY_MAX];
17ad9b35 90 int64_t xbzrle_cache_size;
ed4fbd10 91 int64_t setup_time;
58570ed8 92 int64_t dirty_sync_count;
065e2813
AL
93};
94
511c0231
JQ
95void process_incoming_migration(QEMUFile *f);
96
43eaae28 97void qemu_start_incoming_migration(const char *uri, Error **errp);
5bb7910a 98
a0a3fd60
GC
99uint64_t migrate_max_downtime(void);
100
43eaae28 101void exec_start_incoming_migration(const char *host_port, Error **errp);
065e2813 102
f37afb5a 103void exec_start_outgoing_migration(MigrationState *s, const char *host_port, Error **errp);
065e2813 104
43eaae28 105void tcp_start_incoming_migration(const char *host_port, Error **errp);
34c9dd8e 106
f37afb5a 107void tcp_start_outgoing_migration(MigrationState *s, const char *host_port, Error **errp);
34c9dd8e 108
43eaae28 109void unix_start_incoming_migration(const char *path, Error **errp);
4951f65b 110
f37afb5a 111void unix_start_outgoing_migration(MigrationState *s, const char *path, Error **errp);
4951f65b 112
43eaae28 113void fd_start_incoming_migration(const char *path, Error **errp);
5ac1fad3 114
f37afb5a 115void fd_start_outgoing_migration(MigrationState *s, const char *fdname, Error **errp);
5ac1fad3 116
2da776db
MH
117void rdma_start_outgoing_migration(void *opaque, const char *host_port, Error **errp);
118
119void rdma_start_incoming_migration(const char *host_port, Error **errp);
120
22f00a44 121void migrate_fd_error(MigrationState *s);
065e2813 122
22f00a44 123void migrate_fd_connect(MigrationState *s);
065e2813 124
11c76741 125int migrate_fd_close(MigrationState *s);
c87b015b 126
99a0db9b
GH
127void add_migration_state_change_notifier(Notifier *notify);
128void remove_migration_state_change_notifier(Notifier *notify);
aefeb18b 129MigrationState *migrate_init(const MigrationParams *params);
02edd2e7 130bool migration_in_setup(MigrationState *);
7073693b 131bool migration_has_finished(MigrationState *);
afe2df69 132bool migration_has_failed(MigrationState *);
859bc756 133MigrationState *migrate_get_current(void);
99a0db9b 134
8706d2d5
LL
135void migrate_compress_threads_create(void);
136void migrate_compress_threads_join(void);
3fcb38c2
LL
137void migrate_decompress_threads_create(void);
138void migrate_decompress_threads_join(void);
adc56dda
BS
139uint64_t ram_bytes_remaining(void);
140uint64_t ram_bytes_transferred(void);
141uint64_t ram_bytes_total(void);
905f26f2 142void free_xbzrle_decoded_buf(void);
adc56dda 143
2b0ce079
MH
144void acct_update_position(QEMUFile *f, size_t size, bool zero);
145
004d4c10
OW
146uint64_t dup_mig_bytes_transferred(void);
147uint64_t dup_mig_pages_transferred(void);
f1c72795
PL
148uint64_t skipped_mig_bytes_transferred(void);
149uint64_t skipped_mig_pages_transferred(void);
004d4c10
OW
150uint64_t norm_mig_bytes_transferred(void);
151uint64_t norm_mig_pages_transferred(void);
f36d55af
OW
152uint64_t xbzrle_mig_bytes_transferred(void);
153uint64_t xbzrle_mig_pages_transferred(void);
154uint64_t xbzrle_mig_pages_overflow(void);
155uint64_t xbzrle_mig_pages_cache_miss(void);
8bc39233 156double xbzrle_mig_cache_miss_rate(void);
004d4c10 157
44c3b58c 158void ram_handle_compressed(void *host, uint8_t ch, uint64_t size);
4f2e4252 159void ram_debug_dump_bitmap(unsigned long *todump, bool expected);
44c3b58c 160
fa2756b7
AL
161/**
162 * @migrate_add_blocker - prevent migration from proceeding
163 *
164 * @reason - an error to be returned whenever migration is attempted
165 */
166void migrate_add_blocker(Error *reason);
167
168/**
169 * @migrate_del_blocker - remove a blocking error from migration
170 *
171 * @reason - the error blocking migration
172 */
173void migrate_del_blocker(Error *reason);
174
323004a3 175bool migrate_zero_blocks(void);
60d9222c 176
bde1e2ec
CV
177bool migrate_auto_converge(void);
178
302dfbeb
OW
179int xbzrle_encode_buffer(uint8_t *old_buf, uint8_t *new_buf, int slen,
180 uint8_t *dst, int dlen);
181int xbzrle_decode_buffer(uint8_t *src, int slen, uint8_t *dst, int dlen);
182
17ad9b35
OW
183int migrate_use_xbzrle(void);
184int64_t migrate_xbzrle_cache_size(void);
185
9e1ba4cc 186int64_t xbzrle_cache_resize(int64_t new_size);
43487c67 187
8706d2d5
LL
188bool migrate_use_compression(void);
189int migrate_compress_level(void);
190int migrate_compress_threads(void);
3fcb38c2 191int migrate_decompress_threads(void);
b05dc723 192bool migrate_use_events(void);
8706d2d5 193
6decec93
DDAG
194/* Sending on the return path - generic and then for each message type */
195void migrate_send_rp_message(MigrationIncomingState *mis,
196 enum mig_rp_message_type message_type,
197 uint16_t len, void *data);
198void migrate_send_rp_shut(MigrationIncomingState *mis,
199 uint32_t value);
200void migrate_send_rp_pong(MigrationIncomingState *mis,
201 uint32_t value);
202
43487c67
MH
203void ram_control_before_iterate(QEMUFile *f, uint64_t flags);
204void ram_control_after_iterate(QEMUFile *f, uint64_t flags);
632e3a5c 205void ram_control_load_hook(QEMUFile *f, uint64_t flags, void *data);
43487c67
MH
206
207/* Whenever this is found in the data stream, the flags
208 * will be passed to ram_control_load_hook in the incoming-migration
209 * side. This lets before_ram_iterate/after_ram_iterate add
210 * transport-specific sections to the RAM migration data.
211 */
212#define RAM_SAVE_FLAG_HOOK 0x80
213
214#define RAM_SAVE_CONTROL_NOT_SUPP -1000
215#define RAM_SAVE_CONTROL_DELAYED -2000
216
217size_t ram_control_save_page(QEMUFile *f, ram_addr_t block_offset,
218 ram_addr_t offset, size_t size,
6e1dea46 219 uint64_t *bytes_sent);
43487c67 220
56e93d26 221void ram_mig_init(void);
37fb569c 222void savevm_skip_section_footers(void);
df4b1024 223void register_global_state(void);
13d16814 224void global_state_set_optional(void);
61964c23 225void savevm_skip_configuration(void);
560d027b 226int global_state_store(void);
c69adea4 227void global_state_store_running(void);
5bb7910a 228#endif
This page took 0.580664 seconds and 4 git commands to generate.