1
2
3
4
5
6
7
8
9
10
11
12
13
14#ifndef QEMU_MIGRATION_H
15#define QEMU_MIGRATION_H
16
17#include "exec/cpu-common.h"
18#include "hw/qdev-core.h"
19#include "qapi/qapi-types-migration.h"
20#include "qemu/thread.h"
21#include "qemu/coroutine_int.h"
22#include "io/channel.h"
23#include "io/channel-buffer.h"
24#include "net/announce.h"
25#include "qom/object.h"
26
27struct PostcopyBlocktimeContext;
28
29#define MIGRATION_RESUME_ACK_VALUE (1)
30
31
32
33
34
35
36#define CLEAR_BITMAP_SHIFT_MIN 6
37
38
39
40
41#define CLEAR_BITMAP_SHIFT_DEFAULT 18
42
43
44
45
46#define CLEAR_BITMAP_SHIFT_MAX 31
47
48
49struct MigrationIncomingState {
50 QEMUFile *from_src_file;
51
52
53 void *transport_data;
54 void (*transport_cleanup)(void *data);
55
56
57
58
59
60 QemuEvent main_thread_load_event;
61
62
63 AnnounceTimer announce_timer;
64
65 size_t largest_page_size;
66 bool have_fault_thread;
67 QemuThread fault_thread;
68 QemuSemaphore fault_thread_sem;
69
70 bool fault_thread_quit;
71
72 bool have_listen_thread;
73 QemuThread listen_thread;
74 QemuSemaphore listen_thread_sem;
75
76
77 int userfault_fd;
78
79 int userfault_event_fd;
80 QEMUFile *to_src_file;
81 QemuMutex rp_mutex;
82
83 RAMBlock *last_rb;
84 void *postcopy_tmp_page;
85 void *postcopy_tmp_zero_page;
86
87 GArray *postcopy_remote_fds;
88
89 QEMUBH *bh;
90
91 int state;
92
93 bool have_colo_incoming_thread;
94 QemuThread colo_incoming_thread;
95
96 Coroutine *migration_incoming_co;
97 QemuSemaphore colo_incoming_sem;
98
99
100
101
102
103 struct PostcopyBlocktimeContext *blocktime_ctx;
104
105
106 bool postcopy_recover_triggered;
107 QemuSemaphore postcopy_pause_sem_dst;
108 QemuSemaphore postcopy_pause_sem_fault;
109
110
111 SocketAddressList *socket_address_list;
112
113
114 GTree *page_requested;
115
116 int page_requested_count;
117
118
119
120
121
122
123
124
125
126
127
128 QemuMutex page_request_mutex;
129};
130
131MigrationIncomingState *migration_incoming_get_current(void);
132void migration_incoming_state_destroy(void);
133
134
135
136void fill_destination_postcopy_migration_info(MigrationInfo *info);
137
138#define TYPE_MIGRATION "migration"
139
140typedef struct MigrationClass MigrationClass;
141DECLARE_OBJ_CHECKERS(MigrationState, MigrationClass,
142 MIGRATION_OBJ, TYPE_MIGRATION)
143
144struct MigrationClass {
145
146 DeviceClass parent_class;
147};
148
149struct MigrationState {
150
151 DeviceState parent_obj;
152
153
154 QemuThread thread;
155 QEMUBH *vm_start_bh;
156 QEMUBH *cleanup_bh;
157
158 QEMUFile *to_dst_file;
159 QIOChannelBuffer *bioc;
160
161
162
163
164
165 QemuMutex qemu_file_lock;
166
167
168
169
170 QemuSemaphore rate_limit_sem;
171
172
173 uint64_t iteration_initial_pages;
174
175
176 double pages_per_second;
177
178
179 uint64_t iteration_initial_bytes;
180
181 int64_t iteration_start_time;
182
183
184
185
186
187 int64_t threshold_size;
188
189
190 MigrationParameters parameters;
191
192 int state;
193
194
195 struct {
196
197 QEMUFile *from_dst_file;
198 QemuThread rp_thread;
199 bool error;
200
201
202
203
204
205
206 bool rp_thread_created;
207 QemuSemaphore rp_sem;
208 } rp_state;
209
210 double mbps;
211
212 int64_t start_time;
213
214 int64_t total_time;
215
216 int64_t downtime_start;
217 int64_t downtime;
218 int64_t expected_downtime;
219 bool enabled_capabilities[MIGRATION_CAPABILITY__MAX];
220 int64_t setup_time;
221
222
223
224
225
226 bool vm_was_running;
227
228
229 bool start_postcopy;
230
231 bool postcopy_after_devices;
232
233
234 bool migration_thread_running;
235
236
237 bool block_inactive;
238
239
240 QemuSemaphore wait_unplug_sem;
241
242
243 QemuSemaphore pause_sem;
244
245
246 QemuSemaphore colo_exit_sem;
247
248
249 QemuEvent colo_checkpoint_event;
250 int64_t colo_checkpoint_time;
251 QEMUTimer *colo_delay_timer;
252
253
254
255 Error *error;
256
257 QemuMutex error_mutex;
258
259
260
261 bool must_remove_block_options;
262
263
264
265
266
267 bool store_global_state;
268
269
270 bool send_configuration;
271
272 bool send_section_footer;
273
274
275 QemuSemaphore postcopy_pause_sem;
276 QemuSemaphore postcopy_pause_rp_sem;
277
278
279
280
281
282
283 bool decompress_error_check;
284
285
286
287
288
289
290
291
292
293 uint8_t clear_bitmap_shift;
294
295
296
297
298 char *hostname;
299};
300
301void migrate_set_state(int *state, int old_state, int new_state);
302
303void migration_fd_process_incoming(QEMUFile *f, Error **errp);
304void migration_ioc_process_incoming(QIOChannel *ioc, Error **errp);
305void migration_incoming_process(void);
306
307bool migration_has_all_channels(void);
308
309uint64_t migrate_max_downtime(void);
310
311void migrate_set_error(MigrationState *s, const Error *error);
312void migrate_fd_error(MigrationState *s, const Error *error);
313
314void migrate_fd_connect(MigrationState *s, Error *error_in);
315
316bool migration_is_setup_or_active(int state);
317bool migration_is_running(int state);
318
319void migrate_init(MigrationState *s);
320bool migration_is_blocked(Error **errp);
321
322bool migration_in_postcopy(void);
323MigrationState *migrate_get_current(void);
324
325bool migrate_postcopy(void);
326
327bool migrate_release_ram(void);
328bool migrate_postcopy_ram(void);
329bool migrate_zero_blocks(void);
330bool migrate_dirty_bitmaps(void);
331bool migrate_ignore_shared(void);
332bool migrate_validate_uuid(void);
333
334bool migrate_auto_converge(void);
335bool migrate_use_multifd(void);
336bool migrate_pause_before_switchover(void);
337int migrate_multifd_channels(void);
338MultiFDCompression migrate_multifd_compression(void);
339int migrate_multifd_zlib_level(void);
340int migrate_multifd_zstd_level(void);
341
342int migrate_use_xbzrle(void);
343uint64_t migrate_xbzrle_cache_size(void);
344bool migrate_colo_enabled(void);
345
346bool migrate_use_block(void);
347bool migrate_use_block_incremental(void);
348int migrate_max_cpu_throttle(void);
349bool migrate_use_return_path(void);
350
351uint64_t ram_get_total_transferred_pages(void);
352
353bool migrate_use_compression(void);
354int migrate_compress_level(void);
355int migrate_compress_threads(void);
356int migrate_compress_wait_thread(void);
357int migrate_decompress_threads(void);
358bool migrate_use_events(void);
359bool migrate_postcopy_blocktime(void);
360bool migrate_background_snapshot(void);
361
362
363void migrate_send_rp_shut(MigrationIncomingState *mis,
364 uint32_t value);
365void migrate_send_rp_pong(MigrationIncomingState *mis,
366 uint32_t value);
367int migrate_send_rp_req_pages(MigrationIncomingState *mis, RAMBlock *rb,
368 ram_addr_t start, uint64_t haddr);
369int migrate_send_rp_message_req_pages(MigrationIncomingState *mis,
370 RAMBlock *rb, ram_addr_t start);
371void migrate_send_rp_recv_bitmap(MigrationIncomingState *mis,
372 char *block_name);
373void migrate_send_rp_resume_ack(MigrationIncomingState *mis, uint32_t value);
374
375void dirty_bitmap_mig_before_vm_start(void);
376void dirty_bitmap_mig_cancel_outgoing(void);
377void dirty_bitmap_mig_cancel_incoming(void);
378bool check_dirty_bitmap_mig_alias_map(const BitmapMigrationNodeAliasList *bbm,
379 Error **errp);
380
381void migrate_add_address(SocketAddress *address);
382
383int foreach_not_ignored_block(RAMBlockIterFunc func, void *opaque);
384
385#define qemu_ram_foreach_block \
386 #warning "Use foreach_not_ignored_block in migration code"
387
388void migration_make_urgent_request(void);
389void migration_consume_urgent_request(void);
390bool migration_rate_limit(void);
391void migration_cancel(void);
392
393void populate_vfio_info(MigrationInfo *info);
394
395#endif
396