1 /* 2 * QEMU System Emulator 3 * 4 * Copyright (c) 2003-2008 Fabrice Bellard 5 * Copyright (c) 2011-2015 Red Hat Inc 6 * 7 * Authors: 8 * Juan Quintela <quintela@redhat.com> 9 * 10 * Permission is hereby granted, free of charge, to any person obtaining a copy 11 * of this software and associated documentation files (the "Software"), to deal 12 * in the Software without restriction, including without limitation the rights 13 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 * copies of the Software, and to permit persons to whom the Software is 15 * furnished to do so, subject to the following conditions: 16 * 17 * The above copyright notice and this permission notice shall be included in 18 * all copies or substantial portions of the Software. 19 * 20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 23 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 26 * THE SOFTWARE. 27 */ 28 29 #include "qemu/osdep.h" 30 #include "qemu/cutils.h" 31 #include "qemu/bitops.h" 32 #include "qemu/bitmap.h" 33 #include "qemu/main-loop.h" 34 #include "xbzrle.h" 35 #include "ram.h" 36 #include "migration.h" 37 #include "migration/register.h" 38 #include "migration/misc.h" 39 #include "qemu-file.h" 40 #include "postcopy-ram.h" 41 #include "page_cache.h" 42 #include "qemu/error-report.h" 43 #include "qapi/error.h" 44 #include "qapi/qapi-types-migration.h" 45 #include "qapi/qapi-events-migration.h" 46 #include "qapi/qmp/qerror.h" 47 #include "trace.h" 48 #include "exec/ram_addr.h" 49 #include "exec/target_page.h" 50 #include "qemu/rcu_queue.h" 51 #include "migration/colo.h" 52 #include "block.h" 53 #include "sysemu/cpu-throttle.h" 54 #include "savevm.h" 55 #include "qemu/iov.h" 56 #include "multifd.h" 57 #include "sysemu/runstate.h" 58 59 #if defined(__linux__) 60 #include "qemu/userfaultfd.h" 61 #endif /* defined(__linux__) */ 62 63 /***********************************************************/ 64 /* ram save/restore */ 65 66 /* RAM_SAVE_FLAG_ZERO used to be named RAM_SAVE_FLAG_COMPRESS, it 67 * worked for pages that where filled with the same char. We switched 68 * it to only search for the zero value. And to avoid confusion with 69 * RAM_SSAVE_FLAG_COMPRESS_PAGE just rename it. 70 */ 71 72 #define RAM_SAVE_FLAG_FULL 0x01 /* Obsolete, not used anymore */ 73 #define RAM_SAVE_FLAG_ZERO 0x02 74 #define RAM_SAVE_FLAG_MEM_SIZE 0x04 75 #define RAM_SAVE_FLAG_PAGE 0x08 76 #define RAM_SAVE_FLAG_EOS 0x10 77 #define RAM_SAVE_FLAG_CONTINUE 0x20 78 #define RAM_SAVE_FLAG_XBZRLE 0x40 79 /* 0x80 is reserved in migration.h start with 0x100 next */ 80 #define RAM_SAVE_FLAG_COMPRESS_PAGE 0x100 81 82 static inline bool is_zero_range(uint8_t *p, uint64_t size) 83 { 84 return buffer_is_zero(p, size); 85 } 86 87 XBZRLECacheStats xbzrle_counters; 88 89 /* struct contains XBZRLE cache and a static page 90 used by the compression */ 91 static struct { 92 /* buffer used for XBZRLE encoding */ 93 uint8_t *encoded_buf; 94 /* buffer for storing page content */ 95 uint8_t *current_buf; 96 /* Cache for XBZRLE, Protected by lock. */ 97 PageCache *cache; 98 QemuMutex lock; 99 /* it will store a page full of zeros */ 100 uint8_t *zero_target_page; 101 /* buffer used for XBZRLE decoding */ 102 uint8_t *decoded_buf; 103 } XBZRLE; 104 105 static void XBZRLE_cache_lock(void) 106 { 107 if (migrate_use_xbzrle()) { 108 qemu_mutex_lock(&XBZRLE.lock); 109 } 110 } 111 112 static void XBZRLE_cache_unlock(void) 113 { 114 if (migrate_use_xbzrle()) { 115 qemu_mutex_unlock(&XBZRLE.lock); 116 } 117 } 118 119 /** 120 * xbzrle_cache_resize: resize the xbzrle cache 121 * 122 * This function is called from migrate_params_apply in main 123 * thread, possibly while a migration is in progress. A running 124 * migration may be using the cache and might finish during this call, 125 * hence changes to the cache are protected by XBZRLE.lock(). 126 * 127 * Returns 0 for success or -1 for error 128 * 129 * @new_size: new cache size 130 * @errp: set *errp if the check failed, with reason 131 */ 132 int xbzrle_cache_resize(uint64_t new_size, Error **errp) 133 { 134 PageCache *new_cache; 135 int64_t ret = 0; 136 137 /* Check for truncation */ 138 if (new_size != (size_t)new_size) { 139 error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cache size", 140 "exceeding address space"); 141 return -1; 142 } 143 144 if (new_size == migrate_xbzrle_cache_size()) { 145 /* nothing to do */ 146 return 0; 147 } 148 149 XBZRLE_cache_lock(); 150 151 if (XBZRLE.cache != NULL) { 152 new_cache = cache_init(new_size, TARGET_PAGE_SIZE, errp); 153 if (!new_cache) { 154 ret = -1; 155 goto out; 156 } 157 158 cache_fini(XBZRLE.cache); 159 XBZRLE.cache = new_cache; 160 } 161 out: 162 XBZRLE_cache_unlock(); 163 return ret; 164 } 165 166 bool ramblock_is_ignored(RAMBlock *block) 167 { 168 return !qemu_ram_is_migratable(block) || 169 (migrate_ignore_shared() && qemu_ram_is_shared(block)); 170 } 171 172 #undef RAMBLOCK_FOREACH 173 174 int foreach_not_ignored_block(RAMBlockIterFunc func, void *opaque) 175 { 176 RAMBlock *block; 177 int ret = 0; 178 179 RCU_READ_LOCK_GUARD(); 180 181 RAMBLOCK_FOREACH_NOT_IGNORED(block) { 182 ret = func(block, opaque); 183 if (ret) { 184 break; 185 } 186 } 187 return ret; 188 } 189 190 static void ramblock_recv_map_init(void) 191 { 192 RAMBlock *rb; 193 194 RAMBLOCK_FOREACH_NOT_IGNORED(rb) { 195 assert(!rb->receivedmap); 196 rb->receivedmap = bitmap_new(rb->max_length >> qemu_target_page_bits()); 197 } 198 } 199 200 int ramblock_recv_bitmap_test(RAMBlock *rb, void *host_addr) 201 { 202 return test_bit(ramblock_recv_bitmap_offset(host_addr, rb), 203 rb->receivedmap); 204 } 205 206 bool ramblock_recv_bitmap_test_byte_offset(RAMBlock *rb, uint64_t byte_offset) 207 { 208 return test_bit(byte_offset >> TARGET_PAGE_BITS, rb->receivedmap); 209 } 210 211 void ramblock_recv_bitmap_set(RAMBlock *rb, void *host_addr) 212 { 213 set_bit_atomic(ramblock_recv_bitmap_offset(host_addr, rb), rb->receivedmap); 214 } 215 216 void ramblock_recv_bitmap_set_range(RAMBlock *rb, void *host_addr, 217 size_t nr) 218 { 219 bitmap_set_atomic(rb->receivedmap, 220 ramblock_recv_bitmap_offset(host_addr, rb), 221 nr); 222 } 223 224 #define RAMBLOCK_RECV_BITMAP_ENDING (0x0123456789abcdefULL) 225 226 /* 227 * Format: bitmap_size (8 bytes) + whole_bitmap (N bytes). 228 * 229 * Returns >0 if success with sent bytes, or <0 if error. 230 */ 231 int64_t ramblock_recv_bitmap_send(QEMUFile *file, 232 const char *block_name) 233 { 234 RAMBlock *block = qemu_ram_block_by_name(block_name); 235 unsigned long *le_bitmap, nbits; 236 uint64_t size; 237 238 if (!block) { 239 error_report("%s: invalid block name: %s", __func__, block_name); 240 return -1; 241 } 242 243 nbits = block->postcopy_length >> TARGET_PAGE_BITS; 244 245 /* 246 * Make sure the tmp bitmap buffer is big enough, e.g., on 32bit 247 * machines we may need 4 more bytes for padding (see below 248 * comment). So extend it a bit before hand. 249 */ 250 le_bitmap = bitmap_new(nbits + BITS_PER_LONG); 251 252 /* 253 * Always use little endian when sending the bitmap. This is 254 * required that when source and destination VMs are not using the 255 * same endianness. (Note: big endian won't work.) 256 */ 257 bitmap_to_le(le_bitmap, block->receivedmap, nbits); 258 259 /* Size of the bitmap, in bytes */ 260 size = DIV_ROUND_UP(nbits, 8); 261 262 /* 263 * size is always aligned to 8 bytes for 64bit machines, but it 264 * may not be true for 32bit machines. We need this padding to 265 * make sure the migration can survive even between 32bit and 266 * 64bit machines. 267 */ 268 size = ROUND_UP(size, 8); 269 270 qemu_put_be64(file, size); 271 qemu_put_buffer(file, (const uint8_t *)le_bitmap, size); 272 /* 273 * Mark as an end, in case the middle part is screwed up due to 274 * some "mysterious" reason. 275 */ 276 qemu_put_be64(file, RAMBLOCK_RECV_BITMAP_ENDING); 277 qemu_fflush(file); 278 279 g_free(le_bitmap); 280 281 if (qemu_file_get_error(file)) { 282 return qemu_file_get_error(file); 283 } 284 285 return size + sizeof(size); 286 } 287 288 /* 289 * An outstanding page request, on the source, having been received 290 * and queued 291 */ 292 struct RAMSrcPageRequest { 293 RAMBlock *rb; 294 hwaddr offset; 295 hwaddr len; 296 297 QSIMPLEQ_ENTRY(RAMSrcPageRequest) next_req; 298 }; 299 300 /* State of RAM for migration */ 301 struct RAMState { 302 /* QEMUFile used for this migration */ 303 QEMUFile *f; 304 /* UFFD file descriptor, used in 'write-tracking' migration */ 305 int uffdio_fd; 306 /* Last block that we have visited searching for dirty pages */ 307 RAMBlock *last_seen_block; 308 /* Last block from where we have sent data */ 309 RAMBlock *last_sent_block; 310 /* Last dirty target page we have sent */ 311 ram_addr_t last_page; 312 /* last ram version we have seen */ 313 uint32_t last_version; 314 /* How many times we have dirty too many pages */ 315 int dirty_rate_high_cnt; 316 /* these variables are used for bitmap sync */ 317 /* last time we did a full bitmap_sync */ 318 int64_t time_last_bitmap_sync; 319 /* bytes transferred at start_time */ 320 uint64_t bytes_xfer_prev; 321 /* number of dirty pages since start_time */ 322 uint64_t num_dirty_pages_period; 323 /* xbzrle misses since the beginning of the period */ 324 uint64_t xbzrle_cache_miss_prev; 325 /* Amount of xbzrle pages since the beginning of the period */ 326 uint64_t xbzrle_pages_prev; 327 /* Amount of xbzrle encoded bytes since the beginning of the period */ 328 uint64_t xbzrle_bytes_prev; 329 /* Start using XBZRLE (e.g., after the first round). */ 330 bool xbzrle_enabled; 331 332 /* compression statistics since the beginning of the period */ 333 /* amount of count that no free thread to compress data */ 334 uint64_t compress_thread_busy_prev; 335 /* amount bytes after compression */ 336 uint64_t compressed_size_prev; 337 /* amount of compressed pages */ 338 uint64_t compress_pages_prev; 339 340 /* total handled target pages at the beginning of period */ 341 uint64_t target_page_count_prev; 342 /* total handled target pages since start */ 343 uint64_t target_page_count; 344 /* number of dirty bits in the bitmap */ 345 uint64_t migration_dirty_pages; 346 /* Protects modification of the bitmap and migration dirty pages */ 347 QemuMutex bitmap_mutex; 348 /* The RAMBlock used in the last src_page_requests */ 349 RAMBlock *last_req_rb; 350 /* Queue of outstanding page requests from the destination */ 351 QemuMutex src_page_req_mutex; 352 QSIMPLEQ_HEAD(, RAMSrcPageRequest) src_page_requests; 353 }; 354 typedef struct RAMState RAMState; 355 356 static RAMState *ram_state; 357 358 static NotifierWithReturnList precopy_notifier_list; 359 360 void precopy_infrastructure_init(void) 361 { 362 notifier_with_return_list_init(&precopy_notifier_list); 363 } 364 365 void precopy_add_notifier(NotifierWithReturn *n) 366 { 367 notifier_with_return_list_add(&precopy_notifier_list, n); 368 } 369 370 void precopy_remove_notifier(NotifierWithReturn *n) 371 { 372 notifier_with_return_remove(n); 373 } 374 375 int precopy_notify(PrecopyNotifyReason reason, Error **errp) 376 { 377 PrecopyNotifyData pnd; 378 pnd.reason = reason; 379 pnd.errp = errp; 380 381 return notifier_with_return_list_notify(&precopy_notifier_list, &pnd); 382 } 383 384 uint64_t ram_bytes_remaining(void) 385 { 386 return ram_state ? (ram_state->migration_dirty_pages * TARGET_PAGE_SIZE) : 387 0; 388 } 389 390 MigrationStats ram_counters; 391 392 /* used by the search for pages to send */ 393 struct PageSearchStatus { 394 /* Current block being searched */ 395 RAMBlock *block; 396 /* Current page to search from */ 397 unsigned long page; 398 /* Set once we wrap around */ 399 bool complete_round; 400 }; 401 typedef struct PageSearchStatus PageSearchStatus; 402 403 CompressionStats compression_counters; 404 405 struct CompressParam { 406 bool done; 407 bool quit; 408 bool zero_page; 409 QEMUFile *file; 410 QemuMutex mutex; 411 QemuCond cond; 412 RAMBlock *block; 413 ram_addr_t offset; 414 415 /* internally used fields */ 416 z_stream stream; 417 uint8_t *originbuf; 418 }; 419 typedef struct CompressParam CompressParam; 420 421 struct DecompressParam { 422 bool done; 423 bool quit; 424 QemuMutex mutex; 425 QemuCond cond; 426 void *des; 427 uint8_t *compbuf; 428 int len; 429 z_stream stream; 430 }; 431 typedef struct DecompressParam DecompressParam; 432 433 static CompressParam *comp_param; 434 static QemuThread *compress_threads; 435 /* comp_done_cond is used to wake up the migration thread when 436 * one of the compression threads has finished the compression. 437 * comp_done_lock is used to co-work with comp_done_cond. 438 */ 439 static QemuMutex comp_done_lock; 440 static QemuCond comp_done_cond; 441 /* The empty QEMUFileOps will be used by file in CompressParam */ 442 static const QEMUFileOps empty_ops = { }; 443 444 static QEMUFile *decomp_file; 445 static DecompressParam *decomp_param; 446 static QemuThread *decompress_threads; 447 static QemuMutex decomp_done_lock; 448 static QemuCond decomp_done_cond; 449 450 static bool do_compress_ram_page(QEMUFile *f, z_stream *stream, RAMBlock *block, 451 ram_addr_t offset, uint8_t *source_buf); 452 453 static void *do_data_compress(void *opaque) 454 { 455 CompressParam *param = opaque; 456 RAMBlock *block; 457 ram_addr_t offset; 458 bool zero_page; 459 460 qemu_mutex_lock(¶m->mutex); 461 while (!param->quit) { 462 if (param->block) { 463 block = param->block; 464 offset = param->offset; 465 param->block = NULL; 466 qemu_mutex_unlock(¶m->mutex); 467 468 zero_page = do_compress_ram_page(param->file, ¶m->stream, 469 block, offset, param->originbuf); 470 471 qemu_mutex_lock(&comp_done_lock); 472 param->done = true; 473 param->zero_page = zero_page; 474 qemu_cond_signal(&comp_done_cond); 475 qemu_mutex_unlock(&comp_done_lock); 476 477 qemu_mutex_lock(¶m->mutex); 478 } else { 479 qemu_cond_wait(¶m->cond, ¶m->mutex); 480 } 481 } 482 qemu_mutex_unlock(¶m->mutex); 483 484 return NULL; 485 } 486 487 static void compress_threads_save_cleanup(void) 488 { 489 int i, thread_count; 490 491 if (!migrate_use_compression() || !comp_param) { 492 return; 493 } 494 495 thread_count = migrate_compress_threads(); 496 for (i = 0; i < thread_count; i++) { 497 /* 498 * we use it as a indicator which shows if the thread is 499 * properly init'd or not 500 */ 501 if (!comp_param[i].file) { 502 break; 503 } 504 505 qemu_mutex_lock(&comp_param[i].mutex); 506 comp_param[i].quit = true; 507 qemu_cond_signal(&comp_param[i].cond); 508 qemu_mutex_unlock(&comp_param[i].mutex); 509 510 qemu_thread_join(compress_threads + i); 511 qemu_mutex_destroy(&comp_param[i].mutex); 512 qemu_cond_destroy(&comp_param[i].cond); 513 deflateEnd(&comp_param[i].stream); 514 g_free(comp_param[i].originbuf); 515 qemu_fclose(comp_param[i].file); 516 comp_param[i].file = NULL; 517 } 518 qemu_mutex_destroy(&comp_done_lock); 519 qemu_cond_destroy(&comp_done_cond); 520 g_free(compress_threads); 521 g_free(comp_param); 522 compress_threads = NULL; 523 comp_param = NULL; 524 } 525 526 static int compress_threads_save_setup(void) 527 { 528 int i, thread_count; 529 530 if (!migrate_use_compression()) { 531 return 0; 532 } 533 thread_count = migrate_compress_threads(); 534 compress_threads = g_new0(QemuThread, thread_count); 535 comp_param = g_new0(CompressParam, thread_count); 536 qemu_cond_init(&comp_done_cond); 537 qemu_mutex_init(&comp_done_lock); 538 for (i = 0; i < thread_count; i++) { 539 comp_param[i].originbuf = g_try_malloc(TARGET_PAGE_SIZE); 540 if (!comp_param[i].originbuf) { 541 goto exit; 542 } 543 544 if (deflateInit(&comp_param[i].stream, 545 migrate_compress_level()) != Z_OK) { 546 g_free(comp_param[i].originbuf); 547 goto exit; 548 } 549 550 /* comp_param[i].file is just used as a dummy buffer to save data, 551 * set its ops to empty. 552 */ 553 comp_param[i].file = qemu_fopen_ops(NULL, &empty_ops); 554 comp_param[i].done = true; 555 comp_param[i].quit = false; 556 qemu_mutex_init(&comp_param[i].mutex); 557 qemu_cond_init(&comp_param[i].cond); 558 qemu_thread_create(compress_threads + i, "compress", 559 do_data_compress, comp_param + i, 560 QEMU_THREAD_JOINABLE); 561 } 562 return 0; 563 564 exit: 565 compress_threads_save_cleanup(); 566 return -1; 567 } 568 569 /** 570 * save_page_header: write page header to wire 571 * 572 * If this is the 1st block, it also writes the block identification 573 * 574 * Returns the number of bytes written 575 * 576 * @f: QEMUFile where to send the data 577 * @block: block that contains the page we want to send 578 * @offset: offset inside the block for the page 579 * in the lower bits, it contains flags 580 */ 581 static size_t save_page_header(RAMState *rs, QEMUFile *f, RAMBlock *block, 582 ram_addr_t offset) 583 { 584 size_t size, len; 585 586 if (block == rs->last_sent_block) { 587 offset |= RAM_SAVE_FLAG_CONTINUE; 588 } 589 qemu_put_be64(f, offset); 590 size = 8; 591 592 if (!(offset & RAM_SAVE_FLAG_CONTINUE)) { 593 len = strlen(block->idstr); 594 qemu_put_byte(f, len); 595 qemu_put_buffer(f, (uint8_t *)block->idstr, len); 596 size += 1 + len; 597 rs->last_sent_block = block; 598 } 599 return size; 600 } 601 602 /** 603 * mig_throttle_guest_down: throotle down the guest 604 * 605 * Reduce amount of guest cpu execution to hopefully slow down memory 606 * writes. If guest dirty memory rate is reduced below the rate at 607 * which we can transfer pages to the destination then we should be 608 * able to complete migration. Some workloads dirty memory way too 609 * fast and will not effectively converge, even with auto-converge. 610 */ 611 static void mig_throttle_guest_down(uint64_t bytes_dirty_period, 612 uint64_t bytes_dirty_threshold) 613 { 614 MigrationState *s = migrate_get_current(); 615 uint64_t pct_initial = s->parameters.cpu_throttle_initial; 616 uint64_t pct_increment = s->parameters.cpu_throttle_increment; 617 bool pct_tailslow = s->parameters.cpu_throttle_tailslow; 618 int pct_max = s->parameters.max_cpu_throttle; 619 620 uint64_t throttle_now = cpu_throttle_get_percentage(); 621 uint64_t cpu_now, cpu_ideal, throttle_inc; 622 623 /* We have not started throttling yet. Let's start it. */ 624 if (!cpu_throttle_active()) { 625 cpu_throttle_set(pct_initial); 626 } else { 627 /* Throttling already on, just increase the rate */ 628 if (!pct_tailslow) { 629 throttle_inc = pct_increment; 630 } else { 631 /* Compute the ideal CPU percentage used by Guest, which may 632 * make the dirty rate match the dirty rate threshold. */ 633 cpu_now = 100 - throttle_now; 634 cpu_ideal = cpu_now * (bytes_dirty_threshold * 1.0 / 635 bytes_dirty_period); 636 throttle_inc = MIN(cpu_now - cpu_ideal, pct_increment); 637 } 638 cpu_throttle_set(MIN(throttle_now + throttle_inc, pct_max)); 639 } 640 } 641 642 /** 643 * xbzrle_cache_zero_page: insert a zero page in the XBZRLE cache 644 * 645 * @rs: current RAM state 646 * @current_addr: address for the zero page 647 * 648 * Update the xbzrle cache to reflect a page that's been sent as all 0. 649 * The important thing is that a stale (not-yet-0'd) page be replaced 650 * by the new data. 651 * As a bonus, if the page wasn't in the cache it gets added so that 652 * when a small write is made into the 0'd page it gets XBZRLE sent. 653 */ 654 static void xbzrle_cache_zero_page(RAMState *rs, ram_addr_t current_addr) 655 { 656 if (!rs->xbzrle_enabled) { 657 return; 658 } 659 660 /* We don't care if this fails to allocate a new cache page 661 * as long as it updated an old one */ 662 cache_insert(XBZRLE.cache, current_addr, XBZRLE.zero_target_page, 663 ram_counters.dirty_sync_count); 664 } 665 666 #define ENCODING_FLAG_XBZRLE 0x1 667 668 /** 669 * save_xbzrle_page: compress and send current page 670 * 671 * Returns: 1 means that we wrote the page 672 * 0 means that page is identical to the one already sent 673 * -1 means that xbzrle would be longer than normal 674 * 675 * @rs: current RAM state 676 * @current_data: pointer to the address of the page contents 677 * @current_addr: addr of the page 678 * @block: block that contains the page we want to send 679 * @offset: offset inside the block for the page 680 * @last_stage: if we are at the completion stage 681 */ 682 static int save_xbzrle_page(RAMState *rs, uint8_t **current_data, 683 ram_addr_t current_addr, RAMBlock *block, 684 ram_addr_t offset, bool last_stage) 685 { 686 int encoded_len = 0, bytes_xbzrle; 687 uint8_t *prev_cached_page; 688 689 if (!cache_is_cached(XBZRLE.cache, current_addr, 690 ram_counters.dirty_sync_count)) { 691 xbzrle_counters.cache_miss++; 692 if (!last_stage) { 693 if (cache_insert(XBZRLE.cache, current_addr, *current_data, 694 ram_counters.dirty_sync_count) == -1) { 695 return -1; 696 } else { 697 /* update *current_data when the page has been 698 inserted into cache */ 699 *current_data = get_cached_data(XBZRLE.cache, current_addr); 700 } 701 } 702 return -1; 703 } 704 705 /* 706 * Reaching here means the page has hit the xbzrle cache, no matter what 707 * encoding result it is (normal encoding, overflow or skipping the page), 708 * count the page as encoded. This is used to calculate the encoding rate. 709 * 710 * Example: 2 pages (8KB) being encoded, first page encoding generates 2KB, 711 * 2nd page turns out to be skipped (i.e. no new bytes written to the 712 * page), the overall encoding rate will be 8KB / 2KB = 4, which has the 713 * skipped page included. In this way, the encoding rate can tell if the 714 * guest page is good for xbzrle encoding. 715 */ 716 xbzrle_counters.pages++; 717 prev_cached_page = get_cached_data(XBZRLE.cache, current_addr); 718 719 /* save current buffer into memory */ 720 memcpy(XBZRLE.current_buf, *current_data, TARGET_PAGE_SIZE); 721 722 /* XBZRLE encoding (if there is no overflow) */ 723 encoded_len = xbzrle_encode_buffer(prev_cached_page, XBZRLE.current_buf, 724 TARGET_PAGE_SIZE, XBZRLE.encoded_buf, 725 TARGET_PAGE_SIZE); 726 727 /* 728 * Update the cache contents, so that it corresponds to the data 729 * sent, in all cases except where we skip the page. 730 */ 731 if (!last_stage && encoded_len != 0) { 732 memcpy(prev_cached_page, XBZRLE.current_buf, TARGET_PAGE_SIZE); 733 /* 734 * In the case where we couldn't compress, ensure that the caller 735 * sends the data from the cache, since the guest might have 736 * changed the RAM since we copied it. 737 */ 738 *current_data = prev_cached_page; 739 } 740 741 if (encoded_len == 0) { 742 trace_save_xbzrle_page_skipping(); 743 return 0; 744 } else if (encoded_len == -1) { 745 trace_save_xbzrle_page_overflow(); 746 xbzrle_counters.overflow++; 747 xbzrle_counters.bytes += TARGET_PAGE_SIZE; 748 return -1; 749 } 750 751 /* Send XBZRLE based compressed page */ 752 bytes_xbzrle = save_page_header(rs, rs->f, block, 753 offset | RAM_SAVE_FLAG_XBZRLE); 754 qemu_put_byte(rs->f, ENCODING_FLAG_XBZRLE); 755 qemu_put_be16(rs->f, encoded_len); 756 qemu_put_buffer(rs->f, XBZRLE.encoded_buf, encoded_len); 757 bytes_xbzrle += encoded_len + 1 + 2; 758 /* 759 * Like compressed_size (please see update_compress_thread_counts), 760 * the xbzrle encoded bytes don't count the 8 byte header with 761 * RAM_SAVE_FLAG_CONTINUE. 762 */ 763 xbzrle_counters.bytes += bytes_xbzrle - 8; 764 ram_counters.transferred += bytes_xbzrle; 765 766 return 1; 767 } 768 769 /** 770 * migration_bitmap_find_dirty: find the next dirty page from start 771 * 772 * Returns the page offset within memory region of the start of a dirty page 773 * 774 * @rs: current RAM state 775 * @rb: RAMBlock where to search for dirty pages 776 * @start: page where we start the search 777 */ 778 static inline 779 unsigned long migration_bitmap_find_dirty(RAMState *rs, RAMBlock *rb, 780 unsigned long start) 781 { 782 unsigned long size = rb->used_length >> TARGET_PAGE_BITS; 783 unsigned long *bitmap = rb->bmap; 784 785 if (ramblock_is_ignored(rb)) { 786 return size; 787 } 788 789 return find_next_bit(bitmap, size, start); 790 } 791 792 static inline bool migration_bitmap_clear_dirty(RAMState *rs, 793 RAMBlock *rb, 794 unsigned long page) 795 { 796 bool ret; 797 798 QEMU_LOCK_GUARD(&rs->bitmap_mutex); 799 800 /* 801 * Clear dirty bitmap if needed. This _must_ be called before we 802 * send any of the page in the chunk because we need to make sure 803 * we can capture further page content changes when we sync dirty 804 * log the next time. So as long as we are going to send any of 805 * the page in the chunk we clear the remote dirty bitmap for all. 806 * Clearing it earlier won't be a problem, but too late will. 807 */ 808 if (rb->clear_bmap && clear_bmap_test_and_clear(rb, page)) { 809 uint8_t shift = rb->clear_bmap_shift; 810 hwaddr size = 1ULL << (TARGET_PAGE_BITS + shift); 811 hwaddr start = (((ram_addr_t)page) << TARGET_PAGE_BITS) & (-size); 812 813 /* 814 * CLEAR_BITMAP_SHIFT_MIN should always guarantee this... this 815 * can make things easier sometimes since then start address 816 * of the small chunk will always be 64 pages aligned so the 817 * bitmap will always be aligned to unsigned long. We should 818 * even be able to remove this restriction but I'm simply 819 * keeping it. 820 */ 821 assert(shift >= 6); 822 trace_migration_bitmap_clear_dirty(rb->idstr, start, size, page); 823 memory_region_clear_dirty_bitmap(rb->mr, start, size); 824 } 825 826 ret = test_and_clear_bit(page, rb->bmap); 827 828 if (ret) { 829 rs->migration_dirty_pages--; 830 } 831 832 return ret; 833 } 834 835 /* Called with RCU critical section */ 836 static void ramblock_sync_dirty_bitmap(RAMState *rs, RAMBlock *rb) 837 { 838 uint64_t new_dirty_pages = 839 cpu_physical_memory_sync_dirty_bitmap(rb, 0, rb->used_length); 840 841 rs->migration_dirty_pages += new_dirty_pages; 842 rs->num_dirty_pages_period += new_dirty_pages; 843 } 844 845 /** 846 * ram_pagesize_summary: calculate all the pagesizes of a VM 847 * 848 * Returns a summary bitmap of the page sizes of all RAMBlocks 849 * 850 * For VMs with just normal pages this is equivalent to the host page 851 * size. If it's got some huge pages then it's the OR of all the 852 * different page sizes. 853 */ 854 uint64_t ram_pagesize_summary(void) 855 { 856 RAMBlock *block; 857 uint64_t summary = 0; 858 859 RAMBLOCK_FOREACH_NOT_IGNORED(block) { 860 summary |= block->page_size; 861 } 862 863 return summary; 864 } 865 866 uint64_t ram_get_total_transferred_pages(void) 867 { 868 return ram_counters.normal + ram_counters.duplicate + 869 compression_counters.pages + xbzrle_counters.pages; 870 } 871 872 static void migration_update_rates(RAMState *rs, int64_t end_time) 873 { 874 uint64_t page_count = rs->target_page_count - rs->target_page_count_prev; 875 double compressed_size; 876 877 /* calculate period counters */ 878 ram_counters.dirty_pages_rate = rs->num_dirty_pages_period * 1000 879 / (end_time - rs->time_last_bitmap_sync); 880 881 if (!page_count) { 882 return; 883 } 884 885 if (migrate_use_xbzrle()) { 886 double encoded_size, unencoded_size; 887 888 xbzrle_counters.cache_miss_rate = (double)(xbzrle_counters.cache_miss - 889 rs->xbzrle_cache_miss_prev) / page_count; 890 rs->xbzrle_cache_miss_prev = xbzrle_counters.cache_miss; 891 unencoded_size = (xbzrle_counters.pages - rs->xbzrle_pages_prev) * 892 TARGET_PAGE_SIZE; 893 encoded_size = xbzrle_counters.bytes - rs->xbzrle_bytes_prev; 894 if (xbzrle_counters.pages == rs->xbzrle_pages_prev || !encoded_size) { 895 xbzrle_counters.encoding_rate = 0; 896 } else { 897 xbzrle_counters.encoding_rate = unencoded_size / encoded_size; 898 } 899 rs->xbzrle_pages_prev = xbzrle_counters.pages; 900 rs->xbzrle_bytes_prev = xbzrle_counters.bytes; 901 } 902 903 if (migrate_use_compression()) { 904 compression_counters.busy_rate = (double)(compression_counters.busy - 905 rs->compress_thread_busy_prev) / page_count; 906 rs->compress_thread_busy_prev = compression_counters.busy; 907 908 compressed_size = compression_counters.compressed_size - 909 rs->compressed_size_prev; 910 if (compressed_size) { 911 double uncompressed_size = (compression_counters.pages - 912 rs->compress_pages_prev) * TARGET_PAGE_SIZE; 913 914 /* Compression-Ratio = Uncompressed-size / Compressed-size */ 915 compression_counters.compression_rate = 916 uncompressed_size / compressed_size; 917 918 rs->compress_pages_prev = compression_counters.pages; 919 rs->compressed_size_prev = compression_counters.compressed_size; 920 } 921 } 922 } 923 924 static void migration_trigger_throttle(RAMState *rs) 925 { 926 MigrationState *s = migrate_get_current(); 927 uint64_t threshold = s->parameters.throttle_trigger_threshold; 928 929 uint64_t bytes_xfer_period = ram_counters.transferred - rs->bytes_xfer_prev; 930 uint64_t bytes_dirty_period = rs->num_dirty_pages_period * TARGET_PAGE_SIZE; 931 uint64_t bytes_dirty_threshold = bytes_xfer_period * threshold / 100; 932 933 /* During block migration the auto-converge logic incorrectly detects 934 * that ram migration makes no progress. Avoid this by disabling the 935 * throttling logic during the bulk phase of block migration. */ 936 if (migrate_auto_converge() && !blk_mig_bulk_active()) { 937 /* The following detection logic can be refined later. For now: 938 Check to see if the ratio between dirtied bytes and the approx. 939 amount of bytes that just got transferred since the last time 940 we were in this routine reaches the threshold. If that happens 941 twice, start or increase throttling. */ 942 943 if ((bytes_dirty_period > bytes_dirty_threshold) && 944 (++rs->dirty_rate_high_cnt >= 2)) { 945 trace_migration_throttle(); 946 rs->dirty_rate_high_cnt = 0; 947 mig_throttle_guest_down(bytes_dirty_period, 948 bytes_dirty_threshold); 949 } 950 } 951 } 952 953 static void migration_bitmap_sync(RAMState *rs) 954 { 955 RAMBlock *block; 956 int64_t end_time; 957 958 ram_counters.dirty_sync_count++; 959 960 if (!rs->time_last_bitmap_sync) { 961 rs->time_last_bitmap_sync = qemu_clock_get_ms(QEMU_CLOCK_REALTIME); 962 } 963 964 trace_migration_bitmap_sync_start(); 965 memory_global_dirty_log_sync(); 966 967 qemu_mutex_lock(&rs->bitmap_mutex); 968 WITH_RCU_READ_LOCK_GUARD() { 969 RAMBLOCK_FOREACH_NOT_IGNORED(block) { 970 ramblock_sync_dirty_bitmap(rs, block); 971 } 972 ram_counters.remaining = ram_bytes_remaining(); 973 } 974 qemu_mutex_unlock(&rs->bitmap_mutex); 975 976 memory_global_after_dirty_log_sync(); 977 trace_migration_bitmap_sync_end(rs->num_dirty_pages_period); 978 979 end_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME); 980 981 /* more than 1 second = 1000 millisecons */ 982 if (end_time > rs->time_last_bitmap_sync + 1000) { 983 migration_trigger_throttle(rs); 984 985 migration_update_rates(rs, end_time); 986 987 rs->target_page_count_prev = rs->target_page_count; 988 989 /* reset period counters */ 990 rs->time_last_bitmap_sync = end_time; 991 rs->num_dirty_pages_period = 0; 992 rs->bytes_xfer_prev = ram_counters.transferred; 993 } 994 if (migrate_use_events()) { 995 qapi_event_send_migration_pass(ram_counters.dirty_sync_count); 996 } 997 } 998 999 static void migration_bitmap_sync_precopy(RAMState *rs) 1000 { 1001 Error *local_err = NULL; 1002 1003 /* 1004 * The current notifier usage is just an optimization to migration, so we 1005 * don't stop the normal migration process in the error case. 1006 */ 1007 if (precopy_notify(PRECOPY_NOTIFY_BEFORE_BITMAP_SYNC, &local_err)) { 1008 error_report_err(local_err); 1009 local_err = NULL; 1010 } 1011 1012 migration_bitmap_sync(rs); 1013 1014 if (precopy_notify(PRECOPY_NOTIFY_AFTER_BITMAP_SYNC, &local_err)) { 1015 error_report_err(local_err); 1016 } 1017 } 1018 1019 /** 1020 * save_zero_page_to_file: send the zero page to the file 1021 * 1022 * Returns the size of data written to the file, 0 means the page is not 1023 * a zero page 1024 * 1025 * @rs: current RAM state 1026 * @file: the file where the data is saved 1027 * @block: block that contains the page we want to send 1028 * @offset: offset inside the block for the page 1029 */ 1030 static int save_zero_page_to_file(RAMState *rs, QEMUFile *file, 1031 RAMBlock *block, ram_addr_t offset) 1032 { 1033 uint8_t *p = block->host + offset; 1034 int len = 0; 1035 1036 if (is_zero_range(p, TARGET_PAGE_SIZE)) { 1037 len += save_page_header(rs, file, block, offset | RAM_SAVE_FLAG_ZERO); 1038 qemu_put_byte(file, 0); 1039 len += 1; 1040 } 1041 return len; 1042 } 1043 1044 /** 1045 * save_zero_page: send the zero page to the stream 1046 * 1047 * Returns the number of pages written. 1048 * 1049 * @rs: current RAM state 1050 * @block: block that contains the page we want to send 1051 * @offset: offset inside the block for the page 1052 */ 1053 static int save_zero_page(RAMState *rs, RAMBlock *block, ram_addr_t offset) 1054 { 1055 int len = save_zero_page_to_file(rs, rs->f, block, offset); 1056 1057 if (len) { 1058 ram_counters.duplicate++; 1059 ram_counters.transferred += len; 1060 return 1; 1061 } 1062 return -1; 1063 } 1064 1065 static void ram_release_pages(const char *rbname, uint64_t offset, int pages) 1066 { 1067 if (!migrate_release_ram() || !migration_in_postcopy()) { 1068 return; 1069 } 1070 1071 ram_discard_range(rbname, offset, ((ram_addr_t)pages) << TARGET_PAGE_BITS); 1072 } 1073 1074 /* 1075 * @pages: the number of pages written by the control path, 1076 * < 0 - error 1077 * > 0 - number of pages written 1078 * 1079 * Return true if the pages has been saved, otherwise false is returned. 1080 */ 1081 static bool control_save_page(RAMState *rs, RAMBlock *block, ram_addr_t offset, 1082 int *pages) 1083 { 1084 uint64_t bytes_xmit = 0; 1085 int ret; 1086 1087 *pages = -1; 1088 ret = ram_control_save_page(rs->f, block->offset, offset, TARGET_PAGE_SIZE, 1089 &bytes_xmit); 1090 if (ret == RAM_SAVE_CONTROL_NOT_SUPP) { 1091 return false; 1092 } 1093 1094 if (bytes_xmit) { 1095 ram_counters.transferred += bytes_xmit; 1096 *pages = 1; 1097 } 1098 1099 if (ret == RAM_SAVE_CONTROL_DELAYED) { 1100 return true; 1101 } 1102 1103 if (bytes_xmit > 0) { 1104 ram_counters.normal++; 1105 } else if (bytes_xmit == 0) { 1106 ram_counters.duplicate++; 1107 } 1108 1109 return true; 1110 } 1111 1112 /* 1113 * directly send the page to the stream 1114 * 1115 * Returns the number of pages written. 1116 * 1117 * @rs: current RAM state 1118 * @block: block that contains the page we want to send 1119 * @offset: offset inside the block for the page 1120 * @buf: the page to be sent 1121 * @async: send to page asyncly 1122 */ 1123 static int save_normal_page(RAMState *rs, RAMBlock *block, ram_addr_t offset, 1124 uint8_t *buf, bool async) 1125 { 1126 ram_counters.transferred += save_page_header(rs, rs->f, block, 1127 offset | RAM_SAVE_FLAG_PAGE); 1128 if (async) { 1129 qemu_put_buffer_async(rs->f, buf, TARGET_PAGE_SIZE, 1130 migrate_release_ram() & 1131 migration_in_postcopy()); 1132 } else { 1133 qemu_put_buffer(rs->f, buf, TARGET_PAGE_SIZE); 1134 } 1135 ram_counters.transferred += TARGET_PAGE_SIZE; 1136 ram_counters.normal++; 1137 return 1; 1138 } 1139 1140 /** 1141 * ram_save_page: send the given page to the stream 1142 * 1143 * Returns the number of pages written. 1144 * < 0 - error 1145 * >=0 - Number of pages written - this might legally be 0 1146 * if xbzrle noticed the page was the same. 1147 * 1148 * @rs: current RAM state 1149 * @block: block that contains the page we want to send 1150 * @offset: offset inside the block for the page 1151 * @last_stage: if we are at the completion stage 1152 */ 1153 static int ram_save_page(RAMState *rs, PageSearchStatus *pss, bool last_stage) 1154 { 1155 int pages = -1; 1156 uint8_t *p; 1157 bool send_async = true; 1158 RAMBlock *block = pss->block; 1159 ram_addr_t offset = ((ram_addr_t)pss->page) << TARGET_PAGE_BITS; 1160 ram_addr_t current_addr = block->offset + offset; 1161 1162 p = block->host + offset; 1163 trace_ram_save_page(block->idstr, (uint64_t)offset, p); 1164 1165 XBZRLE_cache_lock(); 1166 if (rs->xbzrle_enabled && !migration_in_postcopy()) { 1167 pages = save_xbzrle_page(rs, &p, current_addr, block, 1168 offset, last_stage); 1169 if (!last_stage) { 1170 /* Can't send this cached data async, since the cache page 1171 * might get updated before it gets to the wire 1172 */ 1173 send_async = false; 1174 } 1175 } 1176 1177 /* XBZRLE overflow or normal page */ 1178 if (pages == -1) { 1179 pages = save_normal_page(rs, block, offset, p, send_async); 1180 } 1181 1182 XBZRLE_cache_unlock(); 1183 1184 return pages; 1185 } 1186 1187 static int ram_save_multifd_page(RAMState *rs, RAMBlock *block, 1188 ram_addr_t offset) 1189 { 1190 if (multifd_queue_page(rs->f, block, offset) < 0) { 1191 return -1; 1192 } 1193 ram_counters.normal++; 1194 1195 return 1; 1196 } 1197 1198 static bool do_compress_ram_page(QEMUFile *f, z_stream *stream, RAMBlock *block, 1199 ram_addr_t offset, uint8_t *source_buf) 1200 { 1201 RAMState *rs = ram_state; 1202 uint8_t *p = block->host + (offset & TARGET_PAGE_MASK); 1203 bool zero_page = false; 1204 int ret; 1205 1206 if (save_zero_page_to_file(rs, f, block, offset)) { 1207 zero_page = true; 1208 goto exit; 1209 } 1210 1211 save_page_header(rs, f, block, offset | RAM_SAVE_FLAG_COMPRESS_PAGE); 1212 1213 /* 1214 * copy it to a internal buffer to avoid it being modified by VM 1215 * so that we can catch up the error during compression and 1216 * decompression 1217 */ 1218 memcpy(source_buf, p, TARGET_PAGE_SIZE); 1219 ret = qemu_put_compression_data(f, stream, source_buf, TARGET_PAGE_SIZE); 1220 if (ret < 0) { 1221 qemu_file_set_error(migrate_get_current()->to_dst_file, ret); 1222 error_report("compressed data failed!"); 1223 return false; 1224 } 1225 1226 exit: 1227 ram_release_pages(block->idstr, offset & TARGET_PAGE_MASK, 1); 1228 return zero_page; 1229 } 1230 1231 static void 1232 update_compress_thread_counts(const CompressParam *param, int bytes_xmit) 1233 { 1234 ram_counters.transferred += bytes_xmit; 1235 1236 if (param->zero_page) { 1237 ram_counters.duplicate++; 1238 return; 1239 } 1240 1241 /* 8 means a header with RAM_SAVE_FLAG_CONTINUE. */ 1242 compression_counters.compressed_size += bytes_xmit - 8; 1243 compression_counters.pages++; 1244 } 1245 1246 static bool save_page_use_compression(RAMState *rs); 1247 1248 static void flush_compressed_data(RAMState *rs) 1249 { 1250 int idx, len, thread_count; 1251 1252 if (!save_page_use_compression(rs)) { 1253 return; 1254 } 1255 thread_count = migrate_compress_threads(); 1256 1257 qemu_mutex_lock(&comp_done_lock); 1258 for (idx = 0; idx < thread_count; idx++) { 1259 while (!comp_param[idx].done) { 1260 qemu_cond_wait(&comp_done_cond, &comp_done_lock); 1261 } 1262 } 1263 qemu_mutex_unlock(&comp_done_lock); 1264 1265 for (idx = 0; idx < thread_count; idx++) { 1266 qemu_mutex_lock(&comp_param[idx].mutex); 1267 if (!comp_param[idx].quit) { 1268 len = qemu_put_qemu_file(rs->f, comp_param[idx].file); 1269 /* 1270 * it's safe to fetch zero_page without holding comp_done_lock 1271 * as there is no further request submitted to the thread, 1272 * i.e, the thread should be waiting for a request at this point. 1273 */ 1274 update_compress_thread_counts(&comp_param[idx], len); 1275 } 1276 qemu_mutex_unlock(&comp_param[idx].mutex); 1277 } 1278 } 1279 1280 static inline void set_compress_params(CompressParam *param, RAMBlock *block, 1281 ram_addr_t offset) 1282 { 1283 param->block = block; 1284 param->offset = offset; 1285 } 1286 1287 static int compress_page_with_multi_thread(RAMState *rs, RAMBlock *block, 1288 ram_addr_t offset) 1289 { 1290 int idx, thread_count, bytes_xmit = -1, pages = -1; 1291 bool wait = migrate_compress_wait_thread(); 1292 1293 thread_count = migrate_compress_threads(); 1294 qemu_mutex_lock(&comp_done_lock); 1295 retry: 1296 for (idx = 0; idx < thread_count; idx++) { 1297 if (comp_param[idx].done) { 1298 comp_param[idx].done = false; 1299 bytes_xmit = qemu_put_qemu_file(rs->f, comp_param[idx].file); 1300 qemu_mutex_lock(&comp_param[idx].mutex); 1301 set_compress_params(&comp_param[idx], block, offset); 1302 qemu_cond_signal(&comp_param[idx].cond); 1303 qemu_mutex_unlock(&comp_param[idx].mutex); 1304 pages = 1; 1305 update_compress_thread_counts(&comp_param[idx], bytes_xmit); 1306 break; 1307 } 1308 } 1309 1310 /* 1311 * wait for the free thread if the user specifies 'compress-wait-thread', 1312 * otherwise we will post the page out in the main thread as normal page. 1313 */ 1314 if (pages < 0 && wait) { 1315 qemu_cond_wait(&comp_done_cond, &comp_done_lock); 1316 goto retry; 1317 } 1318 qemu_mutex_unlock(&comp_done_lock); 1319 1320 return pages; 1321 } 1322 1323 /** 1324 * find_dirty_block: find the next dirty page and update any state 1325 * associated with the search process. 1326 * 1327 * Returns true if a page is found 1328 * 1329 * @rs: current RAM state 1330 * @pss: data about the state of the current dirty page scan 1331 * @again: set to false if the search has scanned the whole of RAM 1332 */ 1333 static bool find_dirty_block(RAMState *rs, PageSearchStatus *pss, bool *again) 1334 { 1335 pss->page = migration_bitmap_find_dirty(rs, pss->block, pss->page); 1336 if (pss->complete_round && pss->block == rs->last_seen_block && 1337 pss->page >= rs->last_page) { 1338 /* 1339 * We've been once around the RAM and haven't found anything. 1340 * Give up. 1341 */ 1342 *again = false; 1343 return false; 1344 } 1345 if (!offset_in_ramblock(pss->block, 1346 ((ram_addr_t)pss->page) << TARGET_PAGE_BITS)) { 1347 /* Didn't find anything in this RAM Block */ 1348 pss->page = 0; 1349 pss->block = QLIST_NEXT_RCU(pss->block, next); 1350 if (!pss->block) { 1351 /* 1352 * If memory migration starts over, we will meet a dirtied page 1353 * which may still exists in compression threads's ring, so we 1354 * should flush the compressed data to make sure the new page 1355 * is not overwritten by the old one in the destination. 1356 * 1357 * Also If xbzrle is on, stop using the data compression at this 1358 * point. In theory, xbzrle can do better than compression. 1359 */ 1360 flush_compressed_data(rs); 1361 1362 /* Hit the end of the list */ 1363 pss->block = QLIST_FIRST_RCU(&ram_list.blocks); 1364 /* Flag that we've looped */ 1365 pss->complete_round = true; 1366 /* After the first round, enable XBZRLE. */ 1367 if (migrate_use_xbzrle()) { 1368 rs->xbzrle_enabled = true; 1369 } 1370 } 1371 /* Didn't find anything this time, but try again on the new block */ 1372 *again = true; 1373 return false; 1374 } else { 1375 /* Can go around again, but... */ 1376 *again = true; 1377 /* We've found something so probably don't need to */ 1378 return true; 1379 } 1380 } 1381 1382 /** 1383 * unqueue_page: gets a page of the queue 1384 * 1385 * Helper for 'get_queued_page' - gets a page off the queue 1386 * 1387 * Returns the block of the page (or NULL if none available) 1388 * 1389 * @rs: current RAM state 1390 * @offset: used to return the offset within the RAMBlock 1391 */ 1392 static RAMBlock *unqueue_page(RAMState *rs, ram_addr_t *offset) 1393 { 1394 RAMBlock *block = NULL; 1395 1396 if (QSIMPLEQ_EMPTY_ATOMIC(&rs->src_page_requests)) { 1397 return NULL; 1398 } 1399 1400 QEMU_LOCK_GUARD(&rs->src_page_req_mutex); 1401 if (!QSIMPLEQ_EMPTY(&rs->src_page_requests)) { 1402 struct RAMSrcPageRequest *entry = 1403 QSIMPLEQ_FIRST(&rs->src_page_requests); 1404 block = entry->rb; 1405 *offset = entry->offset; 1406 1407 if (entry->len > TARGET_PAGE_SIZE) { 1408 entry->len -= TARGET_PAGE_SIZE; 1409 entry->offset += TARGET_PAGE_SIZE; 1410 } else { 1411 memory_region_unref(block->mr); 1412 QSIMPLEQ_REMOVE_HEAD(&rs->src_page_requests, next_req); 1413 g_free(entry); 1414 migration_consume_urgent_request(); 1415 } 1416 } 1417 1418 return block; 1419 } 1420 1421 #if defined(__linux__) 1422 /** 1423 * poll_fault_page: try to get next UFFD write fault page and, if pending fault 1424 * is found, return RAM block pointer and page offset 1425 * 1426 * Returns pointer to the RAMBlock containing faulting page, 1427 * NULL if no write faults are pending 1428 * 1429 * @rs: current RAM state 1430 * @offset: page offset from the beginning of the block 1431 */ 1432 static RAMBlock *poll_fault_page(RAMState *rs, ram_addr_t *offset) 1433 { 1434 struct uffd_msg uffd_msg; 1435 void *page_address; 1436 RAMBlock *block; 1437 int res; 1438 1439 if (!migrate_background_snapshot()) { 1440 return NULL; 1441 } 1442 1443 res = uffd_read_events(rs->uffdio_fd, &uffd_msg, 1); 1444 if (res <= 0) { 1445 return NULL; 1446 } 1447 1448 page_address = (void *)(uintptr_t) uffd_msg.arg.pagefault.address; 1449 block = qemu_ram_block_from_host(page_address, false, offset); 1450 assert(block && (block->flags & RAM_UF_WRITEPROTECT) != 0); 1451 return block; 1452 } 1453 1454 /** 1455 * ram_save_release_protection: release UFFD write protection after 1456 * a range of pages has been saved 1457 * 1458 * @rs: current RAM state 1459 * @pss: page-search-status structure 1460 * @start_page: index of the first page in the range relative to pss->block 1461 * 1462 * Returns 0 on success, negative value in case of an error 1463 */ 1464 static int ram_save_release_protection(RAMState *rs, PageSearchStatus *pss, 1465 unsigned long start_page) 1466 { 1467 int res = 0; 1468 1469 /* Check if page is from UFFD-managed region. */ 1470 if (pss->block->flags & RAM_UF_WRITEPROTECT) { 1471 void *page_address = pss->block->host + (start_page << TARGET_PAGE_BITS); 1472 uint64_t run_length = (pss->page - start_page + 1) << TARGET_PAGE_BITS; 1473 1474 /* Flush async buffers before un-protect. */ 1475 qemu_fflush(rs->f); 1476 /* Un-protect memory range. */ 1477 res = uffd_change_protection(rs->uffdio_fd, page_address, run_length, 1478 false, false); 1479 } 1480 1481 return res; 1482 } 1483 1484 /* ram_write_tracking_available: check if kernel supports required UFFD features 1485 * 1486 * Returns true if supports, false otherwise 1487 */ 1488 bool ram_write_tracking_available(void) 1489 { 1490 uint64_t uffd_features; 1491 int res; 1492 1493 res = uffd_query_features(&uffd_features); 1494 return (res == 0 && 1495 (uffd_features & UFFD_FEATURE_PAGEFAULT_FLAG_WP) != 0); 1496 } 1497 1498 /* ram_write_tracking_compatible: check if guest configuration is 1499 * compatible with 'write-tracking' 1500 * 1501 * Returns true if compatible, false otherwise 1502 */ 1503 bool ram_write_tracking_compatible(void) 1504 { 1505 const uint64_t uffd_ioctls_mask = BIT(_UFFDIO_WRITEPROTECT); 1506 int uffd_fd; 1507 RAMBlock *block; 1508 bool ret = false; 1509 1510 /* Open UFFD file descriptor */ 1511 uffd_fd = uffd_create_fd(UFFD_FEATURE_PAGEFAULT_FLAG_WP, false); 1512 if (uffd_fd < 0) { 1513 return false; 1514 } 1515 1516 RCU_READ_LOCK_GUARD(); 1517 1518 RAMBLOCK_FOREACH_NOT_IGNORED(block) { 1519 uint64_t uffd_ioctls; 1520 1521 /* Nothing to do with read-only and MMIO-writable regions */ 1522 if (block->mr->readonly || block->mr->rom_device) { 1523 continue; 1524 } 1525 /* Try to register block memory via UFFD-IO to track writes */ 1526 if (uffd_register_memory(uffd_fd, block->host, block->max_length, 1527 UFFDIO_REGISTER_MODE_WP, &uffd_ioctls)) { 1528 goto out; 1529 } 1530 if ((uffd_ioctls & uffd_ioctls_mask) != uffd_ioctls_mask) { 1531 goto out; 1532 } 1533 } 1534 ret = true; 1535 1536 out: 1537 uffd_close_fd(uffd_fd); 1538 return ret; 1539 } 1540 1541 /* 1542 * ram_block_populate_pages: populate memory in the RAM block by reading 1543 * an integer from the beginning of each page. 1544 * 1545 * Since it's solely used for userfault_fd WP feature, here we just 1546 * hardcode page size to qemu_real_host_page_size. 1547 * 1548 * @block: RAM block to populate 1549 */ 1550 static void ram_block_populate_pages(RAMBlock *block) 1551 { 1552 char *ptr = (char *) block->host; 1553 1554 for (ram_addr_t offset = 0; offset < block->used_length; 1555 offset += qemu_real_host_page_size) { 1556 char tmp = *(ptr + offset); 1557 1558 /* Don't optimize the read out */ 1559 asm volatile("" : "+r" (tmp)); 1560 } 1561 } 1562 1563 /* 1564 * ram_write_tracking_prepare: prepare for UFFD-WP memory tracking 1565 */ 1566 void ram_write_tracking_prepare(void) 1567 { 1568 RAMBlock *block; 1569 1570 RCU_READ_LOCK_GUARD(); 1571 1572 RAMBLOCK_FOREACH_NOT_IGNORED(block) { 1573 /* Nothing to do with read-only and MMIO-writable regions */ 1574 if (block->mr->readonly || block->mr->rom_device) { 1575 continue; 1576 } 1577 1578 /* 1579 * Populate pages of the RAM block before enabling userfault_fd 1580 * write protection. 1581 * 1582 * This stage is required since ioctl(UFFDIO_WRITEPROTECT) with 1583 * UFFDIO_WRITEPROTECT_MODE_WP mode setting would silently skip 1584 * pages with pte_none() entries in page table. 1585 */ 1586 ram_block_populate_pages(block); 1587 } 1588 } 1589 1590 /* 1591 * ram_write_tracking_start: start UFFD-WP memory tracking 1592 * 1593 * Returns 0 for success or negative value in case of error 1594 */ 1595 int ram_write_tracking_start(void) 1596 { 1597 int uffd_fd; 1598 RAMState *rs = ram_state; 1599 RAMBlock *block; 1600 1601 /* Open UFFD file descriptor */ 1602 uffd_fd = uffd_create_fd(UFFD_FEATURE_PAGEFAULT_FLAG_WP, true); 1603 if (uffd_fd < 0) { 1604 return uffd_fd; 1605 } 1606 rs->uffdio_fd = uffd_fd; 1607 1608 RCU_READ_LOCK_GUARD(); 1609 1610 RAMBLOCK_FOREACH_NOT_IGNORED(block) { 1611 /* Nothing to do with read-only and MMIO-writable regions */ 1612 if (block->mr->readonly || block->mr->rom_device) { 1613 continue; 1614 } 1615 1616 /* Register block memory with UFFD to track writes */ 1617 if (uffd_register_memory(rs->uffdio_fd, block->host, 1618 block->max_length, UFFDIO_REGISTER_MODE_WP, NULL)) { 1619 goto fail; 1620 } 1621 /* Apply UFFD write protection to the block memory range */ 1622 if (uffd_change_protection(rs->uffdio_fd, block->host, 1623 block->max_length, true, false)) { 1624 goto fail; 1625 } 1626 block->flags |= RAM_UF_WRITEPROTECT; 1627 memory_region_ref(block->mr); 1628 1629 trace_ram_write_tracking_ramblock_start(block->idstr, block->page_size, 1630 block->host, block->max_length); 1631 } 1632 1633 return 0; 1634 1635 fail: 1636 error_report("ram_write_tracking_start() failed: restoring initial memory state"); 1637 1638 RAMBLOCK_FOREACH_NOT_IGNORED(block) { 1639 if ((block->flags & RAM_UF_WRITEPROTECT) == 0) { 1640 continue; 1641 } 1642 /* 1643 * In case some memory block failed to be write-protected 1644 * remove protection and unregister all succeeded RAM blocks 1645 */ 1646 uffd_change_protection(rs->uffdio_fd, block->host, block->max_length, 1647 false, false); 1648 uffd_unregister_memory(rs->uffdio_fd, block->host, block->max_length); 1649 /* Cleanup flags and remove reference */ 1650 block->flags &= ~RAM_UF_WRITEPROTECT; 1651 memory_region_unref(block->mr); 1652 } 1653 1654 uffd_close_fd(uffd_fd); 1655 rs->uffdio_fd = -1; 1656 return -1; 1657 } 1658 1659 /** 1660 * ram_write_tracking_stop: stop UFFD-WP memory tracking and remove protection 1661 */ 1662 void ram_write_tracking_stop(void) 1663 { 1664 RAMState *rs = ram_state; 1665 RAMBlock *block; 1666 1667 RCU_READ_LOCK_GUARD(); 1668 1669 RAMBLOCK_FOREACH_NOT_IGNORED(block) { 1670 if ((block->flags & RAM_UF_WRITEPROTECT) == 0) { 1671 continue; 1672 } 1673 /* Remove protection and unregister all affected RAM blocks */ 1674 uffd_change_protection(rs->uffdio_fd, block->host, block->max_length, 1675 false, false); 1676 uffd_unregister_memory(rs->uffdio_fd, block->host, block->max_length); 1677 1678 trace_ram_write_tracking_ramblock_stop(block->idstr, block->page_size, 1679 block->host, block->max_length); 1680 1681 /* Cleanup flags and remove reference */ 1682 block->flags &= ~RAM_UF_WRITEPROTECT; 1683 memory_region_unref(block->mr); 1684 } 1685 1686 /* Finally close UFFD file descriptor */ 1687 uffd_close_fd(rs->uffdio_fd); 1688 rs->uffdio_fd = -1; 1689 } 1690 1691 #else 1692 /* No target OS support, stubs just fail or ignore */ 1693 1694 static RAMBlock *poll_fault_page(RAMState *rs, ram_addr_t *offset) 1695 { 1696 (void) rs; 1697 (void) offset; 1698 1699 return NULL; 1700 } 1701 1702 static int ram_save_release_protection(RAMState *rs, PageSearchStatus *pss, 1703 unsigned long start_page) 1704 { 1705 (void) rs; 1706 (void) pss; 1707 (void) start_page; 1708 1709 return 0; 1710 } 1711 1712 bool ram_write_tracking_available(void) 1713 { 1714 return false; 1715 } 1716 1717 bool ram_write_tracking_compatible(void) 1718 { 1719 assert(0); 1720 return false; 1721 } 1722 1723 int ram_write_tracking_start(void) 1724 { 1725 assert(0); 1726 return -1; 1727 } 1728 1729 void ram_write_tracking_stop(void) 1730 { 1731 assert(0); 1732 } 1733 #endif /* defined(__linux__) */ 1734 1735 /** 1736 * get_queued_page: unqueue a page from the postcopy requests 1737 * 1738 * Skips pages that are already sent (!dirty) 1739 * 1740 * Returns true if a queued page is found 1741 * 1742 * @rs: current RAM state 1743 * @pss: data about the state of the current dirty page scan 1744 */ 1745 static bool get_queued_page(RAMState *rs, PageSearchStatus *pss) 1746 { 1747 RAMBlock *block; 1748 ram_addr_t offset; 1749 bool dirty; 1750 1751 do { 1752 block = unqueue_page(rs, &offset); 1753 /* 1754 * We're sending this page, and since it's postcopy nothing else 1755 * will dirty it, and we must make sure it doesn't get sent again 1756 * even if this queue request was received after the background 1757 * search already sent it. 1758 */ 1759 if (block) { 1760 unsigned long page; 1761 1762 page = offset >> TARGET_PAGE_BITS; 1763 dirty = test_bit(page, block->bmap); 1764 if (!dirty) { 1765 trace_get_queued_page_not_dirty(block->idstr, (uint64_t)offset, 1766 page); 1767 } else { 1768 trace_get_queued_page(block->idstr, (uint64_t)offset, page); 1769 } 1770 } 1771 1772 } while (block && !dirty); 1773 1774 if (!block) { 1775 /* 1776 * Poll write faults too if background snapshot is enabled; that's 1777 * when we have vcpus got blocked by the write protected pages. 1778 */ 1779 block = poll_fault_page(rs, &offset); 1780 } 1781 1782 if (block) { 1783 /* 1784 * We want the background search to continue from the queued page 1785 * since the guest is likely to want other pages near to the page 1786 * it just requested. 1787 */ 1788 pss->block = block; 1789 pss->page = offset >> TARGET_PAGE_BITS; 1790 1791 /* 1792 * This unqueued page would break the "one round" check, even is 1793 * really rare. 1794 */ 1795 pss->complete_round = false; 1796 } 1797 1798 return !!block; 1799 } 1800 1801 /** 1802 * migration_page_queue_free: drop any remaining pages in the ram 1803 * request queue 1804 * 1805 * It should be empty at the end anyway, but in error cases there may 1806 * be some left. in case that there is any page left, we drop it. 1807 * 1808 */ 1809 static void migration_page_queue_free(RAMState *rs) 1810 { 1811 struct RAMSrcPageRequest *mspr, *next_mspr; 1812 /* This queue generally should be empty - but in the case of a failed 1813 * migration might have some droppings in. 1814 */ 1815 RCU_READ_LOCK_GUARD(); 1816 QSIMPLEQ_FOREACH_SAFE(mspr, &rs->src_page_requests, next_req, next_mspr) { 1817 memory_region_unref(mspr->rb->mr); 1818 QSIMPLEQ_REMOVE_HEAD(&rs->src_page_requests, next_req); 1819 g_free(mspr); 1820 } 1821 } 1822 1823 /** 1824 * ram_save_queue_pages: queue the page for transmission 1825 * 1826 * A request from postcopy destination for example. 1827 * 1828 * Returns zero on success or negative on error 1829 * 1830 * @rbname: Name of the RAMBLock of the request. NULL means the 1831 * same that last one. 1832 * @start: starting address from the start of the RAMBlock 1833 * @len: length (in bytes) to send 1834 */ 1835 int ram_save_queue_pages(const char *rbname, ram_addr_t start, ram_addr_t len) 1836 { 1837 RAMBlock *ramblock; 1838 RAMState *rs = ram_state; 1839 1840 ram_counters.postcopy_requests++; 1841 RCU_READ_LOCK_GUARD(); 1842 1843 if (!rbname) { 1844 /* Reuse last RAMBlock */ 1845 ramblock = rs->last_req_rb; 1846 1847 if (!ramblock) { 1848 /* 1849 * Shouldn't happen, we can't reuse the last RAMBlock if 1850 * it's the 1st request. 1851 */ 1852 error_report("ram_save_queue_pages no previous block"); 1853 return -1; 1854 } 1855 } else { 1856 ramblock = qemu_ram_block_by_name(rbname); 1857 1858 if (!ramblock) { 1859 /* We shouldn't be asked for a non-existent RAMBlock */ 1860 error_report("ram_save_queue_pages no block '%s'", rbname); 1861 return -1; 1862 } 1863 rs->last_req_rb = ramblock; 1864 } 1865 trace_ram_save_queue_pages(ramblock->idstr, start, len); 1866 if (!offset_in_ramblock(ramblock, start + len - 1)) { 1867 error_report("%s request overrun start=" RAM_ADDR_FMT " len=" 1868 RAM_ADDR_FMT " blocklen=" RAM_ADDR_FMT, 1869 __func__, start, len, ramblock->used_length); 1870 return -1; 1871 } 1872 1873 struct RAMSrcPageRequest *new_entry = 1874 g_malloc0(sizeof(struct RAMSrcPageRequest)); 1875 new_entry->rb = ramblock; 1876 new_entry->offset = start; 1877 new_entry->len = len; 1878 1879 memory_region_ref(ramblock->mr); 1880 qemu_mutex_lock(&rs->src_page_req_mutex); 1881 QSIMPLEQ_INSERT_TAIL(&rs->src_page_requests, new_entry, next_req); 1882 migration_make_urgent_request(); 1883 qemu_mutex_unlock(&rs->src_page_req_mutex); 1884 1885 return 0; 1886 } 1887 1888 static bool save_page_use_compression(RAMState *rs) 1889 { 1890 if (!migrate_use_compression()) { 1891 return false; 1892 } 1893 1894 /* 1895 * If xbzrle is enabled (e.g., after first round of migration), stop 1896 * using the data compression. In theory, xbzrle can do better than 1897 * compression. 1898 */ 1899 if (rs->xbzrle_enabled) { 1900 return false; 1901 } 1902 1903 return true; 1904 } 1905 1906 /* 1907 * try to compress the page before posting it out, return true if the page 1908 * has been properly handled by compression, otherwise needs other 1909 * paths to handle it 1910 */ 1911 static bool save_compress_page(RAMState *rs, RAMBlock *block, ram_addr_t offset) 1912 { 1913 if (!save_page_use_compression(rs)) { 1914 return false; 1915 } 1916 1917 /* 1918 * When starting the process of a new block, the first page of 1919 * the block should be sent out before other pages in the same 1920 * block, and all the pages in last block should have been sent 1921 * out, keeping this order is important, because the 'cont' flag 1922 * is used to avoid resending the block name. 1923 * 1924 * We post the fist page as normal page as compression will take 1925 * much CPU resource. 1926 */ 1927 if (block != rs->last_sent_block) { 1928 flush_compressed_data(rs); 1929 return false; 1930 } 1931 1932 if (compress_page_with_multi_thread(rs, block, offset) > 0) { 1933 return true; 1934 } 1935 1936 compression_counters.busy++; 1937 return false; 1938 } 1939 1940 /** 1941 * ram_save_target_page: save one target page 1942 * 1943 * Returns the number of pages written 1944 * 1945 * @rs: current RAM state 1946 * @pss: data about the page we want to send 1947 * @last_stage: if we are at the completion stage 1948 */ 1949 static int ram_save_target_page(RAMState *rs, PageSearchStatus *pss, 1950 bool last_stage) 1951 { 1952 RAMBlock *block = pss->block; 1953 ram_addr_t offset = ((ram_addr_t)pss->page) << TARGET_PAGE_BITS; 1954 int res; 1955 1956 if (control_save_page(rs, block, offset, &res)) { 1957 return res; 1958 } 1959 1960 if (save_compress_page(rs, block, offset)) { 1961 return 1; 1962 } 1963 1964 res = save_zero_page(rs, block, offset); 1965 if (res > 0) { 1966 /* Must let xbzrle know, otherwise a previous (now 0'd) cached 1967 * page would be stale 1968 */ 1969 if (!save_page_use_compression(rs)) { 1970 XBZRLE_cache_lock(); 1971 xbzrle_cache_zero_page(rs, block->offset + offset); 1972 XBZRLE_cache_unlock(); 1973 } 1974 ram_release_pages(block->idstr, offset, res); 1975 return res; 1976 } 1977 1978 /* 1979 * Do not use multifd for: 1980 * 1. Compression as the first page in the new block should be posted out 1981 * before sending the compressed page 1982 * 2. In postcopy as one whole host page should be placed 1983 */ 1984 if (!save_page_use_compression(rs) && migrate_use_multifd() 1985 && !migration_in_postcopy()) { 1986 return ram_save_multifd_page(rs, block, offset); 1987 } 1988 1989 return ram_save_page(rs, pss, last_stage); 1990 } 1991 1992 /** 1993 * ram_save_host_page: save a whole host page 1994 * 1995 * Starting at *offset send pages up to the end of the current host 1996 * page. It's valid for the initial offset to point into the middle of 1997 * a host page in which case the remainder of the hostpage is sent. 1998 * Only dirty target pages are sent. Note that the host page size may 1999 * be a huge page for this block. 2000 * The saving stops at the boundary of the used_length of the block 2001 * if the RAMBlock isn't a multiple of the host page size. 2002 * 2003 * Returns the number of pages written or negative on error 2004 * 2005 * @rs: current RAM state 2006 * @ms: current migration state 2007 * @pss: data about the page we want to send 2008 * @last_stage: if we are at the completion stage 2009 */ 2010 static int ram_save_host_page(RAMState *rs, PageSearchStatus *pss, 2011 bool last_stage) 2012 { 2013 int tmppages, pages = 0; 2014 size_t pagesize_bits = 2015 qemu_ram_pagesize(pss->block) >> TARGET_PAGE_BITS; 2016 unsigned long hostpage_boundary = 2017 QEMU_ALIGN_UP(pss->page + 1, pagesize_bits); 2018 unsigned long start_page = pss->page; 2019 int res; 2020 2021 if (ramblock_is_ignored(pss->block)) { 2022 error_report("block %s should not be migrated !", pss->block->idstr); 2023 return 0; 2024 } 2025 2026 do { 2027 /* Check the pages is dirty and if it is send it */ 2028 if (migration_bitmap_clear_dirty(rs, pss->block, pss->page)) { 2029 tmppages = ram_save_target_page(rs, pss, last_stage); 2030 if (tmppages < 0) { 2031 return tmppages; 2032 } 2033 2034 pages += tmppages; 2035 /* 2036 * Allow rate limiting to happen in the middle of huge pages if 2037 * something is sent in the current iteration. 2038 */ 2039 if (pagesize_bits > 1 && tmppages > 0) { 2040 migration_rate_limit(); 2041 } 2042 } 2043 pss->page = migration_bitmap_find_dirty(rs, pss->block, pss->page); 2044 } while ((pss->page < hostpage_boundary) && 2045 offset_in_ramblock(pss->block, 2046 ((ram_addr_t)pss->page) << TARGET_PAGE_BITS)); 2047 /* The offset we leave with is the min boundary of host page and block */ 2048 pss->page = MIN(pss->page, hostpage_boundary) - 1; 2049 2050 res = ram_save_release_protection(rs, pss, start_page); 2051 return (res < 0 ? res : pages); 2052 } 2053 2054 /** 2055 * ram_find_and_save_block: finds a dirty page and sends it to f 2056 * 2057 * Called within an RCU critical section. 2058 * 2059 * Returns the number of pages written where zero means no dirty pages, 2060 * or negative on error 2061 * 2062 * @rs: current RAM state 2063 * @last_stage: if we are at the completion stage 2064 * 2065 * On systems where host-page-size > target-page-size it will send all the 2066 * pages in a host page that are dirty. 2067 */ 2068 2069 static int ram_find_and_save_block(RAMState *rs, bool last_stage) 2070 { 2071 PageSearchStatus pss; 2072 int pages = 0; 2073 bool again, found; 2074 2075 /* No dirty page as there is zero RAM */ 2076 if (!ram_bytes_total()) { 2077 return pages; 2078 } 2079 2080 pss.block = rs->last_seen_block; 2081 pss.page = rs->last_page; 2082 pss.complete_round = false; 2083 2084 if (!pss.block) { 2085 pss.block = QLIST_FIRST_RCU(&ram_list.blocks); 2086 } 2087 2088 do { 2089 again = true; 2090 found = get_queued_page(rs, &pss); 2091 2092 if (!found) { 2093 /* priority queue empty, so just search for something dirty */ 2094 found = find_dirty_block(rs, &pss, &again); 2095 } 2096 2097 if (found) { 2098 pages = ram_save_host_page(rs, &pss, last_stage); 2099 } 2100 } while (!pages && again); 2101 2102 rs->last_seen_block = pss.block; 2103 rs->last_page = pss.page; 2104 2105 return pages; 2106 } 2107 2108 void acct_update_position(QEMUFile *f, size_t size, bool zero) 2109 { 2110 uint64_t pages = size / TARGET_PAGE_SIZE; 2111 2112 if (zero) { 2113 ram_counters.duplicate += pages; 2114 } else { 2115 ram_counters.normal += pages; 2116 ram_counters.transferred += size; 2117 qemu_update_position(f, size); 2118 } 2119 } 2120 2121 static uint64_t ram_bytes_total_common(bool count_ignored) 2122 { 2123 RAMBlock *block; 2124 uint64_t total = 0; 2125 2126 RCU_READ_LOCK_GUARD(); 2127 2128 if (count_ignored) { 2129 RAMBLOCK_FOREACH_MIGRATABLE(block) { 2130 total += block->used_length; 2131 } 2132 } else { 2133 RAMBLOCK_FOREACH_NOT_IGNORED(block) { 2134 total += block->used_length; 2135 } 2136 } 2137 return total; 2138 } 2139 2140 uint64_t ram_bytes_total(void) 2141 { 2142 return ram_bytes_total_common(false); 2143 } 2144 2145 static void xbzrle_load_setup(void) 2146 { 2147 XBZRLE.decoded_buf = g_malloc(TARGET_PAGE_SIZE); 2148 } 2149 2150 static void xbzrle_load_cleanup(void) 2151 { 2152 g_free(XBZRLE.decoded_buf); 2153 XBZRLE.decoded_buf = NULL; 2154 } 2155 2156 static void ram_state_cleanup(RAMState **rsp) 2157 { 2158 if (*rsp) { 2159 migration_page_queue_free(*rsp); 2160 qemu_mutex_destroy(&(*rsp)->bitmap_mutex); 2161 qemu_mutex_destroy(&(*rsp)->src_page_req_mutex); 2162 g_free(*rsp); 2163 *rsp = NULL; 2164 } 2165 } 2166 2167 static void xbzrle_cleanup(void) 2168 { 2169 XBZRLE_cache_lock(); 2170 if (XBZRLE.cache) { 2171 cache_fini(XBZRLE.cache); 2172 g_free(XBZRLE.encoded_buf); 2173 g_free(XBZRLE.current_buf); 2174 g_free(XBZRLE.zero_target_page); 2175 XBZRLE.cache = NULL; 2176 XBZRLE.encoded_buf = NULL; 2177 XBZRLE.current_buf = NULL; 2178 XBZRLE.zero_target_page = NULL; 2179 } 2180 XBZRLE_cache_unlock(); 2181 } 2182 2183 static void ram_save_cleanup(void *opaque) 2184 { 2185 RAMState **rsp = opaque; 2186 RAMBlock *block; 2187 2188 /* We don't use dirty log with background snapshots */ 2189 if (!migrate_background_snapshot()) { 2190 /* caller have hold iothread lock or is in a bh, so there is 2191 * no writing race against the migration bitmap 2192 */ 2193 memory_global_dirty_log_stop(); 2194 } 2195 2196 RAMBLOCK_FOREACH_NOT_IGNORED(block) { 2197 g_free(block->clear_bmap); 2198 block->clear_bmap = NULL; 2199 g_free(block->bmap); 2200 block->bmap = NULL; 2201 } 2202 2203 xbzrle_cleanup(); 2204 compress_threads_save_cleanup(); 2205 ram_state_cleanup(rsp); 2206 } 2207 2208 static void ram_state_reset(RAMState *rs) 2209 { 2210 rs->last_seen_block = NULL; 2211 rs->last_sent_block = NULL; 2212 rs->last_page = 0; 2213 rs->last_version = ram_list.version; 2214 rs->xbzrle_enabled = false; 2215 } 2216 2217 #define MAX_WAIT 50 /* ms, half buffered_file limit */ 2218 2219 /* 2220 * 'expected' is the value you expect the bitmap mostly to be full 2221 * of; it won't bother printing lines that are all this value. 2222 * If 'todump' is null the migration bitmap is dumped. 2223 */ 2224 void ram_debug_dump_bitmap(unsigned long *todump, bool expected, 2225 unsigned long pages) 2226 { 2227 int64_t cur; 2228 int64_t linelen = 128; 2229 char linebuf[129]; 2230 2231 for (cur = 0; cur < pages; cur += linelen) { 2232 int64_t curb; 2233 bool found = false; 2234 /* 2235 * Last line; catch the case where the line length 2236 * is longer than remaining ram 2237 */ 2238 if (cur + linelen > pages) { 2239 linelen = pages - cur; 2240 } 2241 for (curb = 0; curb < linelen; curb++) { 2242 bool thisbit = test_bit(cur + curb, todump); 2243 linebuf[curb] = thisbit ? '1' : '.'; 2244 found = found || (thisbit != expected); 2245 } 2246 if (found) { 2247 linebuf[curb] = '\0'; 2248 fprintf(stderr, "0x%08" PRIx64 " : %s\n", cur, linebuf); 2249 } 2250 } 2251 } 2252 2253 /* **** functions for postcopy ***** */ 2254 2255 void ram_postcopy_migrated_memory_release(MigrationState *ms) 2256 { 2257 struct RAMBlock *block; 2258 2259 RAMBLOCK_FOREACH_NOT_IGNORED(block) { 2260 unsigned long *bitmap = block->bmap; 2261 unsigned long range = block->used_length >> TARGET_PAGE_BITS; 2262 unsigned long run_start = find_next_zero_bit(bitmap, range, 0); 2263 2264 while (run_start < range) { 2265 unsigned long run_end = find_next_bit(bitmap, range, run_start + 1); 2266 ram_discard_range(block->idstr, 2267 ((ram_addr_t)run_start) << TARGET_PAGE_BITS, 2268 ((ram_addr_t)(run_end - run_start)) 2269 << TARGET_PAGE_BITS); 2270 run_start = find_next_zero_bit(bitmap, range, run_end + 1); 2271 } 2272 } 2273 } 2274 2275 /** 2276 * postcopy_send_discard_bm_ram: discard a RAMBlock 2277 * 2278 * Returns zero on success 2279 * 2280 * Callback from postcopy_each_ram_send_discard for each RAMBlock 2281 * 2282 * @ms: current migration state 2283 * @block: RAMBlock to discard 2284 */ 2285 static int postcopy_send_discard_bm_ram(MigrationState *ms, RAMBlock *block) 2286 { 2287 unsigned long end = block->used_length >> TARGET_PAGE_BITS; 2288 unsigned long current; 2289 unsigned long *bitmap = block->bmap; 2290 2291 for (current = 0; current < end; ) { 2292 unsigned long one = find_next_bit(bitmap, end, current); 2293 unsigned long zero, discard_length; 2294 2295 if (one >= end) { 2296 break; 2297 } 2298 2299 zero = find_next_zero_bit(bitmap, end, one + 1); 2300 2301 if (zero >= end) { 2302 discard_length = end - one; 2303 } else { 2304 discard_length = zero - one; 2305 } 2306 postcopy_discard_send_range(ms, one, discard_length); 2307 current = one + discard_length; 2308 } 2309 2310 return 0; 2311 } 2312 2313 /** 2314 * postcopy_each_ram_send_discard: discard all RAMBlocks 2315 * 2316 * Returns 0 for success or negative for error 2317 * 2318 * Utility for the outgoing postcopy code. 2319 * Calls postcopy_send_discard_bm_ram for each RAMBlock 2320 * passing it bitmap indexes and name. 2321 * (qemu_ram_foreach_block ends up passing unscaled lengths 2322 * which would mean postcopy code would have to deal with target page) 2323 * 2324 * @ms: current migration state 2325 */ 2326 static int postcopy_each_ram_send_discard(MigrationState *ms) 2327 { 2328 struct RAMBlock *block; 2329 int ret; 2330 2331 RAMBLOCK_FOREACH_NOT_IGNORED(block) { 2332 postcopy_discard_send_init(ms, block->idstr); 2333 2334 /* 2335 * Postcopy sends chunks of bitmap over the wire, but it 2336 * just needs indexes at this point, avoids it having 2337 * target page specific code. 2338 */ 2339 ret = postcopy_send_discard_bm_ram(ms, block); 2340 postcopy_discard_send_finish(ms); 2341 if (ret) { 2342 return ret; 2343 } 2344 } 2345 2346 return 0; 2347 } 2348 2349 /** 2350 * postcopy_chunk_hostpages_pass: canonicalize bitmap in hostpages 2351 * 2352 * Helper for postcopy_chunk_hostpages; it's called twice to 2353 * canonicalize the two bitmaps, that are similar, but one is 2354 * inverted. 2355 * 2356 * Postcopy requires that all target pages in a hostpage are dirty or 2357 * clean, not a mix. This function canonicalizes the bitmaps. 2358 * 2359 * @ms: current migration state 2360 * @block: block that contains the page we want to canonicalize 2361 */ 2362 static void postcopy_chunk_hostpages_pass(MigrationState *ms, RAMBlock *block) 2363 { 2364 RAMState *rs = ram_state; 2365 unsigned long *bitmap = block->bmap; 2366 unsigned int host_ratio = block->page_size / TARGET_PAGE_SIZE; 2367 unsigned long pages = block->used_length >> TARGET_PAGE_BITS; 2368 unsigned long run_start; 2369 2370 if (block->page_size == TARGET_PAGE_SIZE) { 2371 /* Easy case - TPS==HPS for a non-huge page RAMBlock */ 2372 return; 2373 } 2374 2375 /* Find a dirty page */ 2376 run_start = find_next_bit(bitmap, pages, 0); 2377 2378 while (run_start < pages) { 2379 2380 /* 2381 * If the start of this run of pages is in the middle of a host 2382 * page, then we need to fixup this host page. 2383 */ 2384 if (QEMU_IS_ALIGNED(run_start, host_ratio)) { 2385 /* Find the end of this run */ 2386 run_start = find_next_zero_bit(bitmap, pages, run_start + 1); 2387 /* 2388 * If the end isn't at the start of a host page, then the 2389 * run doesn't finish at the end of a host page 2390 * and we need to discard. 2391 */ 2392 } 2393 2394 if (!QEMU_IS_ALIGNED(run_start, host_ratio)) { 2395 unsigned long page; 2396 unsigned long fixup_start_addr = QEMU_ALIGN_DOWN(run_start, 2397 host_ratio); 2398 run_start = QEMU_ALIGN_UP(run_start, host_ratio); 2399 2400 /* Clean up the bitmap */ 2401 for (page = fixup_start_addr; 2402 page < fixup_start_addr + host_ratio; page++) { 2403 /* 2404 * Remark them as dirty, updating the count for any pages 2405 * that weren't previously dirty. 2406 */ 2407 rs->migration_dirty_pages += !test_and_set_bit(page, bitmap); 2408 } 2409 } 2410 2411 /* Find the next dirty page for the next iteration */ 2412 run_start = find_next_bit(bitmap, pages, run_start); 2413 } 2414 } 2415 2416 /** 2417 * postcopy_chunk_hostpages: discard any partially sent host page 2418 * 2419 * Utility for the outgoing postcopy code. 2420 * 2421 * Discard any partially sent host-page size chunks, mark any partially 2422 * dirty host-page size chunks as all dirty. In this case the host-page 2423 * is the host-page for the particular RAMBlock, i.e. it might be a huge page 2424 * 2425 * Returns zero on success 2426 * 2427 * @ms: current migration state 2428 * @block: block we want to work with 2429 */ 2430 static int postcopy_chunk_hostpages(MigrationState *ms, RAMBlock *block) 2431 { 2432 postcopy_discard_send_init(ms, block->idstr); 2433 2434 /* 2435 * Ensure that all partially dirty host pages are made fully dirty. 2436 */ 2437 postcopy_chunk_hostpages_pass(ms, block); 2438 2439 postcopy_discard_send_finish(ms); 2440 return 0; 2441 } 2442 2443 /** 2444 * ram_postcopy_send_discard_bitmap: transmit the discard bitmap 2445 * 2446 * Returns zero on success 2447 * 2448 * Transmit the set of pages to be discarded after precopy to the target 2449 * these are pages that: 2450 * a) Have been previously transmitted but are now dirty again 2451 * b) Pages that have never been transmitted, this ensures that 2452 * any pages on the destination that have been mapped by background 2453 * tasks get discarded (transparent huge pages is the specific concern) 2454 * Hopefully this is pretty sparse 2455 * 2456 * @ms: current migration state 2457 */ 2458 int ram_postcopy_send_discard_bitmap(MigrationState *ms) 2459 { 2460 RAMState *rs = ram_state; 2461 RAMBlock *block; 2462 int ret; 2463 2464 RCU_READ_LOCK_GUARD(); 2465 2466 /* This should be our last sync, the src is now paused */ 2467 migration_bitmap_sync(rs); 2468 2469 /* Easiest way to make sure we don't resume in the middle of a host-page */ 2470 rs->last_seen_block = NULL; 2471 rs->last_sent_block = NULL; 2472 rs->last_page = 0; 2473 2474 RAMBLOCK_FOREACH_NOT_IGNORED(block) { 2475 /* Deal with TPS != HPS and huge pages */ 2476 ret = postcopy_chunk_hostpages(ms, block); 2477 if (ret) { 2478 return ret; 2479 } 2480 2481 #ifdef DEBUG_POSTCOPY 2482 ram_debug_dump_bitmap(block->bmap, true, 2483 block->used_length >> TARGET_PAGE_BITS); 2484 #endif 2485 } 2486 trace_ram_postcopy_send_discard_bitmap(); 2487 2488 return postcopy_each_ram_send_discard(ms); 2489 } 2490 2491 /** 2492 * ram_discard_range: discard dirtied pages at the beginning of postcopy 2493 * 2494 * Returns zero on success 2495 * 2496 * @rbname: name of the RAMBlock of the request. NULL means the 2497 * same that last one. 2498 * @start: RAMBlock starting page 2499 * @length: RAMBlock size 2500 */ 2501 int ram_discard_range(const char *rbname, uint64_t start, size_t length) 2502 { 2503 trace_ram_discard_range(rbname, start, length); 2504 2505 RCU_READ_LOCK_GUARD(); 2506 RAMBlock *rb = qemu_ram_block_by_name(rbname); 2507 2508 if (!rb) { 2509 error_report("ram_discard_range: Failed to find block '%s'", rbname); 2510 return -1; 2511 } 2512 2513 /* 2514 * On source VM, we don't need to update the received bitmap since 2515 * we don't even have one. 2516 */ 2517 if (rb->receivedmap) { 2518 bitmap_clear(rb->receivedmap, start >> qemu_target_page_bits(), 2519 length >> qemu_target_page_bits()); 2520 } 2521 2522 return ram_block_discard_range(rb, start, length); 2523 } 2524 2525 /* 2526 * For every allocation, we will try not to crash the VM if the 2527 * allocation failed. 2528 */ 2529 static int xbzrle_init(void) 2530 { 2531 Error *local_err = NULL; 2532 2533 if (!migrate_use_xbzrle()) { 2534 return 0; 2535 } 2536 2537 XBZRLE_cache_lock(); 2538 2539 XBZRLE.zero_target_page = g_try_malloc0(TARGET_PAGE_SIZE); 2540 if (!XBZRLE.zero_target_page) { 2541 error_report("%s: Error allocating zero page", __func__); 2542 goto err_out; 2543 } 2544 2545 XBZRLE.cache = cache_init(migrate_xbzrle_cache_size(), 2546 TARGET_PAGE_SIZE, &local_err); 2547 if (!XBZRLE.cache) { 2548 error_report_err(local_err); 2549 goto free_zero_page; 2550 } 2551 2552 XBZRLE.encoded_buf = g_try_malloc0(TARGET_PAGE_SIZE); 2553 if (!XBZRLE.encoded_buf) { 2554 error_report("%s: Error allocating encoded_buf", __func__); 2555 goto free_cache; 2556 } 2557 2558 XBZRLE.current_buf = g_try_malloc(TARGET_PAGE_SIZE); 2559 if (!XBZRLE.current_buf) { 2560 error_report("%s: Error allocating current_buf", __func__); 2561 goto free_encoded_buf; 2562 } 2563 2564 /* We are all good */ 2565 XBZRLE_cache_unlock(); 2566 return 0; 2567 2568 free_encoded_buf: 2569 g_free(XBZRLE.encoded_buf); 2570 XBZRLE.encoded_buf = NULL; 2571 free_cache: 2572 cache_fini(XBZRLE.cache); 2573 XBZRLE.cache = NULL; 2574 free_zero_page: 2575 g_free(XBZRLE.zero_target_page); 2576 XBZRLE.zero_target_page = NULL; 2577 err_out: 2578 XBZRLE_cache_unlock(); 2579 return -ENOMEM; 2580 } 2581 2582 static int ram_state_init(RAMState **rsp) 2583 { 2584 *rsp = g_try_new0(RAMState, 1); 2585 2586 if (!*rsp) { 2587 error_report("%s: Init ramstate fail", __func__); 2588 return -1; 2589 } 2590 2591 qemu_mutex_init(&(*rsp)->bitmap_mutex); 2592 qemu_mutex_init(&(*rsp)->src_page_req_mutex); 2593 QSIMPLEQ_INIT(&(*rsp)->src_page_requests); 2594 2595 /* 2596 * Count the total number of pages used by ram blocks not including any 2597 * gaps due to alignment or unplugs. 2598 * This must match with the initial values of dirty bitmap. 2599 */ 2600 (*rsp)->migration_dirty_pages = ram_bytes_total() >> TARGET_PAGE_BITS; 2601 ram_state_reset(*rsp); 2602 2603 return 0; 2604 } 2605 2606 static void ram_list_init_bitmaps(void) 2607 { 2608 MigrationState *ms = migrate_get_current(); 2609 RAMBlock *block; 2610 unsigned long pages; 2611 uint8_t shift; 2612 2613 /* Skip setting bitmap if there is no RAM */ 2614 if (ram_bytes_total()) { 2615 shift = ms->clear_bitmap_shift; 2616 if (shift > CLEAR_BITMAP_SHIFT_MAX) { 2617 error_report("clear_bitmap_shift (%u) too big, using " 2618 "max value (%u)", shift, CLEAR_BITMAP_SHIFT_MAX); 2619 shift = CLEAR_BITMAP_SHIFT_MAX; 2620 } else if (shift < CLEAR_BITMAP_SHIFT_MIN) { 2621 error_report("clear_bitmap_shift (%u) too small, using " 2622 "min value (%u)", shift, CLEAR_BITMAP_SHIFT_MIN); 2623 shift = CLEAR_BITMAP_SHIFT_MIN; 2624 } 2625 2626 RAMBLOCK_FOREACH_NOT_IGNORED(block) { 2627 pages = block->max_length >> TARGET_PAGE_BITS; 2628 /* 2629 * The initial dirty bitmap for migration must be set with all 2630 * ones to make sure we'll migrate every guest RAM page to 2631 * destination. 2632 * Here we set RAMBlock.bmap all to 1 because when rebegin a 2633 * new migration after a failed migration, ram_list. 2634 * dirty_memory[DIRTY_MEMORY_MIGRATION] don't include the whole 2635 * guest memory. 2636 */ 2637 block->bmap = bitmap_new(pages); 2638 bitmap_set(block->bmap, 0, pages); 2639 block->clear_bmap_shift = shift; 2640 block->clear_bmap = bitmap_new(clear_bmap_size(pages, shift)); 2641 } 2642 } 2643 } 2644 2645 static void ram_init_bitmaps(RAMState *rs) 2646 { 2647 /* For memory_global_dirty_log_start below. */ 2648 qemu_mutex_lock_iothread(); 2649 qemu_mutex_lock_ramlist(); 2650 2651 WITH_RCU_READ_LOCK_GUARD() { 2652 ram_list_init_bitmaps(); 2653 /* We don't use dirty log with background snapshots */ 2654 if (!migrate_background_snapshot()) { 2655 memory_global_dirty_log_start(); 2656 migration_bitmap_sync_precopy(rs); 2657 } 2658 } 2659 qemu_mutex_unlock_ramlist(); 2660 qemu_mutex_unlock_iothread(); 2661 } 2662 2663 static int ram_init_all(RAMState **rsp) 2664 { 2665 if (ram_state_init(rsp)) { 2666 return -1; 2667 } 2668 2669 if (xbzrle_init()) { 2670 ram_state_cleanup(rsp); 2671 return -1; 2672 } 2673 2674 ram_init_bitmaps(*rsp); 2675 2676 return 0; 2677 } 2678 2679 static void ram_state_resume_prepare(RAMState *rs, QEMUFile *out) 2680 { 2681 RAMBlock *block; 2682 uint64_t pages = 0; 2683 2684 /* 2685 * Postcopy is not using xbzrle/compression, so no need for that. 2686 * Also, since source are already halted, we don't need to care 2687 * about dirty page logging as well. 2688 */ 2689 2690 RAMBLOCK_FOREACH_NOT_IGNORED(block) { 2691 pages += bitmap_count_one(block->bmap, 2692 block->used_length >> TARGET_PAGE_BITS); 2693 } 2694 2695 /* This may not be aligned with current bitmaps. Recalculate. */ 2696 rs->migration_dirty_pages = pages; 2697 2698 ram_state_reset(rs); 2699 2700 /* Update RAMState cache of output QEMUFile */ 2701 rs->f = out; 2702 2703 trace_ram_state_resume_prepare(pages); 2704 } 2705 2706 /* 2707 * This function clears bits of the free pages reported by the caller from the 2708 * migration dirty bitmap. @addr is the host address corresponding to the 2709 * start of the continuous guest free pages, and @len is the total bytes of 2710 * those pages. 2711 */ 2712 void qemu_guest_free_page_hint(void *addr, size_t len) 2713 { 2714 RAMBlock *block; 2715 ram_addr_t offset; 2716 size_t used_len, start, npages; 2717 MigrationState *s = migrate_get_current(); 2718 2719 /* This function is currently expected to be used during live migration */ 2720 if (!migration_is_setup_or_active(s->state)) { 2721 return; 2722 } 2723 2724 for (; len > 0; len -= used_len, addr += used_len) { 2725 block = qemu_ram_block_from_host(addr, false, &offset); 2726 if (unlikely(!block || offset >= block->used_length)) { 2727 /* 2728 * The implementation might not support RAMBlock resize during 2729 * live migration, but it could happen in theory with future 2730 * updates. So we add a check here to capture that case. 2731 */ 2732 error_report_once("%s unexpected error", __func__); 2733 return; 2734 } 2735 2736 if (len <= block->used_length - offset) { 2737 used_len = len; 2738 } else { 2739 used_len = block->used_length - offset; 2740 } 2741 2742 start = offset >> TARGET_PAGE_BITS; 2743 npages = used_len >> TARGET_PAGE_BITS; 2744 2745 qemu_mutex_lock(&ram_state->bitmap_mutex); 2746 ram_state->migration_dirty_pages -= 2747 bitmap_count_one_with_offset(block->bmap, start, npages); 2748 bitmap_clear(block->bmap, start, npages); 2749 qemu_mutex_unlock(&ram_state->bitmap_mutex); 2750 } 2751 } 2752 2753 /* 2754 * Each of ram_save_setup, ram_save_iterate and ram_save_complete has 2755 * long-running RCU critical section. When rcu-reclaims in the code 2756 * start to become numerous it will be necessary to reduce the 2757 * granularity of these critical sections. 2758 */ 2759 2760 /** 2761 * ram_save_setup: Setup RAM for migration 2762 * 2763 * Returns zero to indicate success and negative for error 2764 * 2765 * @f: QEMUFile where to send the data 2766 * @opaque: RAMState pointer 2767 */ 2768 static int ram_save_setup(QEMUFile *f, void *opaque) 2769 { 2770 RAMState **rsp = opaque; 2771 RAMBlock *block; 2772 2773 if (compress_threads_save_setup()) { 2774 return -1; 2775 } 2776 2777 /* migration has already setup the bitmap, reuse it. */ 2778 if (!migration_in_colo_state()) { 2779 if (ram_init_all(rsp) != 0) { 2780 compress_threads_save_cleanup(); 2781 return -1; 2782 } 2783 } 2784 (*rsp)->f = f; 2785 2786 WITH_RCU_READ_LOCK_GUARD() { 2787 qemu_put_be64(f, ram_bytes_total_common(true) | RAM_SAVE_FLAG_MEM_SIZE); 2788 2789 RAMBLOCK_FOREACH_MIGRATABLE(block) { 2790 qemu_put_byte(f, strlen(block->idstr)); 2791 qemu_put_buffer(f, (uint8_t *)block->idstr, strlen(block->idstr)); 2792 qemu_put_be64(f, block->used_length); 2793 if (migrate_postcopy_ram() && block->page_size != 2794 qemu_host_page_size) { 2795 qemu_put_be64(f, block->page_size); 2796 } 2797 if (migrate_ignore_shared()) { 2798 qemu_put_be64(f, block->mr->addr); 2799 } 2800 } 2801 } 2802 2803 ram_control_before_iterate(f, RAM_CONTROL_SETUP); 2804 ram_control_after_iterate(f, RAM_CONTROL_SETUP); 2805 2806 multifd_send_sync_main(f); 2807 qemu_put_be64(f, RAM_SAVE_FLAG_EOS); 2808 qemu_fflush(f); 2809 2810 return 0; 2811 } 2812 2813 /** 2814 * ram_save_iterate: iterative stage for migration 2815 * 2816 * Returns zero to indicate success and negative for error 2817 * 2818 * @f: QEMUFile where to send the data 2819 * @opaque: RAMState pointer 2820 */ 2821 static int ram_save_iterate(QEMUFile *f, void *opaque) 2822 { 2823 RAMState **temp = opaque; 2824 RAMState *rs = *temp; 2825 int ret = 0; 2826 int i; 2827 int64_t t0; 2828 int done = 0; 2829 2830 if (blk_mig_bulk_active()) { 2831 /* Avoid transferring ram during bulk phase of block migration as 2832 * the bulk phase will usually take a long time and transferring 2833 * ram updates during that time is pointless. */ 2834 goto out; 2835 } 2836 2837 WITH_RCU_READ_LOCK_GUARD() { 2838 if (ram_list.version != rs->last_version) { 2839 ram_state_reset(rs); 2840 } 2841 2842 /* Read version before ram_list.blocks */ 2843 smp_rmb(); 2844 2845 ram_control_before_iterate(f, RAM_CONTROL_ROUND); 2846 2847 t0 = qemu_clock_get_ns(QEMU_CLOCK_REALTIME); 2848 i = 0; 2849 while ((ret = qemu_file_rate_limit(f)) == 0 || 2850 !QSIMPLEQ_EMPTY(&rs->src_page_requests)) { 2851 int pages; 2852 2853 if (qemu_file_get_error(f)) { 2854 break; 2855 } 2856 2857 pages = ram_find_and_save_block(rs, false); 2858 /* no more pages to sent */ 2859 if (pages == 0) { 2860 done = 1; 2861 break; 2862 } 2863 2864 if (pages < 0) { 2865 qemu_file_set_error(f, pages); 2866 break; 2867 } 2868 2869 rs->target_page_count += pages; 2870 2871 /* 2872 * During postcopy, it is necessary to make sure one whole host 2873 * page is sent in one chunk. 2874 */ 2875 if (migrate_postcopy_ram()) { 2876 flush_compressed_data(rs); 2877 } 2878 2879 /* 2880 * we want to check in the 1st loop, just in case it was the 1st 2881 * time and we had to sync the dirty bitmap. 2882 * qemu_clock_get_ns() is a bit expensive, so we only check each 2883 * some iterations 2884 */ 2885 if ((i & 63) == 0) { 2886 uint64_t t1 = (qemu_clock_get_ns(QEMU_CLOCK_REALTIME) - t0) / 2887 1000000; 2888 if (t1 > MAX_WAIT) { 2889 trace_ram_save_iterate_big_wait(t1, i); 2890 break; 2891 } 2892 } 2893 i++; 2894 } 2895 } 2896 2897 /* 2898 * Must occur before EOS (or any QEMUFile operation) 2899 * because of RDMA protocol. 2900 */ 2901 ram_control_after_iterate(f, RAM_CONTROL_ROUND); 2902 2903 out: 2904 if (ret >= 0 2905 && migration_is_setup_or_active(migrate_get_current()->state)) { 2906 multifd_send_sync_main(rs->f); 2907 qemu_put_be64(f, RAM_SAVE_FLAG_EOS); 2908 qemu_fflush(f); 2909 ram_counters.transferred += 8; 2910 2911 ret = qemu_file_get_error(f); 2912 } 2913 if (ret < 0) { 2914 return ret; 2915 } 2916 2917 return done; 2918 } 2919 2920 /** 2921 * ram_save_complete: function called to send the remaining amount of ram 2922 * 2923 * Returns zero to indicate success or negative on error 2924 * 2925 * Called with iothread lock 2926 * 2927 * @f: QEMUFile where to send the data 2928 * @opaque: RAMState pointer 2929 */ 2930 static int ram_save_complete(QEMUFile *f, void *opaque) 2931 { 2932 RAMState **temp = opaque; 2933 RAMState *rs = *temp; 2934 int ret = 0; 2935 2936 WITH_RCU_READ_LOCK_GUARD() { 2937 if (!migration_in_postcopy()) { 2938 migration_bitmap_sync_precopy(rs); 2939 } 2940 2941 ram_control_before_iterate(f, RAM_CONTROL_FINISH); 2942 2943 /* try transferring iterative blocks of memory */ 2944 2945 /* flush all remaining blocks regardless of rate limiting */ 2946 while (true) { 2947 int pages; 2948 2949 pages = ram_find_and_save_block(rs, !migration_in_colo_state()); 2950 /* no more blocks to sent */ 2951 if (pages == 0) { 2952 break; 2953 } 2954 if (pages < 0) { 2955 ret = pages; 2956 break; 2957 } 2958 } 2959 2960 flush_compressed_data(rs); 2961 ram_control_after_iterate(f, RAM_CONTROL_FINISH); 2962 } 2963 2964 if (ret >= 0) { 2965 multifd_send_sync_main(rs->f); 2966 qemu_put_be64(f, RAM_SAVE_FLAG_EOS); 2967 qemu_fflush(f); 2968 } 2969 2970 return ret; 2971 } 2972 2973 static void ram_save_pending(QEMUFile *f, void *opaque, uint64_t max_size, 2974 uint64_t *res_precopy_only, 2975 uint64_t *res_compatible, 2976 uint64_t *res_postcopy_only) 2977 { 2978 RAMState **temp = opaque; 2979 RAMState *rs = *temp; 2980 uint64_t remaining_size; 2981 2982 remaining_size = rs->migration_dirty_pages * TARGET_PAGE_SIZE; 2983 2984 if (!migration_in_postcopy() && 2985 remaining_size < max_size) { 2986 qemu_mutex_lock_iothread(); 2987 WITH_RCU_READ_LOCK_GUARD() { 2988 migration_bitmap_sync_precopy(rs); 2989 } 2990 qemu_mutex_unlock_iothread(); 2991 remaining_size = rs->migration_dirty_pages * TARGET_PAGE_SIZE; 2992 } 2993 2994 if (migrate_postcopy_ram()) { 2995 /* We can do postcopy, and all the data is postcopiable */ 2996 *res_compatible += remaining_size; 2997 } else { 2998 *res_precopy_only += remaining_size; 2999 } 3000 } 3001 3002 static int load_xbzrle(QEMUFile *f, ram_addr_t addr, void *host) 3003 { 3004 unsigned int xh_len; 3005 int xh_flags; 3006 uint8_t *loaded_data; 3007 3008 /* extract RLE header */ 3009 xh_flags = qemu_get_byte(f); 3010 xh_len = qemu_get_be16(f); 3011 3012 if (xh_flags != ENCODING_FLAG_XBZRLE) { 3013 error_report("Failed to load XBZRLE page - wrong compression!"); 3014 return -1; 3015 } 3016 3017 if (xh_len > TARGET_PAGE_SIZE) { 3018 error_report("Failed to load XBZRLE page - len overflow!"); 3019 return -1; 3020 } 3021 loaded_data = XBZRLE.decoded_buf; 3022 /* load data and decode */ 3023 /* it can change loaded_data to point to an internal buffer */ 3024 qemu_get_buffer_in_place(f, &loaded_data, xh_len); 3025 3026 /* decode RLE */ 3027 if (xbzrle_decode_buffer(loaded_data, xh_len, host, 3028 TARGET_PAGE_SIZE) == -1) { 3029 error_report("Failed to load XBZRLE page - decode error!"); 3030 return -1; 3031 } 3032 3033 return 0; 3034 } 3035 3036 /** 3037 * ram_block_from_stream: read a RAMBlock id from the migration stream 3038 * 3039 * Must be called from within a rcu critical section. 3040 * 3041 * Returns a pointer from within the RCU-protected ram_list. 3042 * 3043 * @f: QEMUFile where to read the data from 3044 * @flags: Page flags (mostly to see if it's a continuation of previous block) 3045 */ 3046 static inline RAMBlock *ram_block_from_stream(QEMUFile *f, int flags) 3047 { 3048 static RAMBlock *block; 3049 char id[256]; 3050 uint8_t len; 3051 3052 if (flags & RAM_SAVE_FLAG_CONTINUE) { 3053 if (!block) { 3054 error_report("Ack, bad migration stream!"); 3055 return NULL; 3056 } 3057 return block; 3058 } 3059 3060 len = qemu_get_byte(f); 3061 qemu_get_buffer(f, (uint8_t *)id, len); 3062 id[len] = 0; 3063 3064 block = qemu_ram_block_by_name(id); 3065 if (!block) { 3066 error_report("Can't find block %s", id); 3067 return NULL; 3068 } 3069 3070 if (ramblock_is_ignored(block)) { 3071 error_report("block %s should not be migrated !", id); 3072 return NULL; 3073 } 3074 3075 return block; 3076 } 3077 3078 static inline void *host_from_ram_block_offset(RAMBlock *block, 3079 ram_addr_t offset) 3080 { 3081 if (!offset_in_ramblock(block, offset)) { 3082 return NULL; 3083 } 3084 3085 return block->host + offset; 3086 } 3087 3088 static void *host_page_from_ram_block_offset(RAMBlock *block, 3089 ram_addr_t offset) 3090 { 3091 /* Note: Explicitly no check against offset_in_ramblock(). */ 3092 return (void *)QEMU_ALIGN_DOWN((uintptr_t)(block->host + offset), 3093 block->page_size); 3094 } 3095 3096 static ram_addr_t host_page_offset_from_ram_block_offset(RAMBlock *block, 3097 ram_addr_t offset) 3098 { 3099 return ((uintptr_t)block->host + offset) & (block->page_size - 1); 3100 } 3101 3102 static inline void *colo_cache_from_block_offset(RAMBlock *block, 3103 ram_addr_t offset, bool record_bitmap) 3104 { 3105 if (!offset_in_ramblock(block, offset)) { 3106 return NULL; 3107 } 3108 if (!block->colo_cache) { 3109 error_report("%s: colo_cache is NULL in block :%s", 3110 __func__, block->idstr); 3111 return NULL; 3112 } 3113 3114 /* 3115 * During colo checkpoint, we need bitmap of these migrated pages. 3116 * It help us to decide which pages in ram cache should be flushed 3117 * into VM's RAM later. 3118 */ 3119 if (record_bitmap && 3120 !test_and_set_bit(offset >> TARGET_PAGE_BITS, block->bmap)) { 3121 ram_state->migration_dirty_pages++; 3122 } 3123 return block->colo_cache + offset; 3124 } 3125 3126 /** 3127 * ram_handle_compressed: handle the zero page case 3128 * 3129 * If a page (or a whole RDMA chunk) has been 3130 * determined to be zero, then zap it. 3131 * 3132 * @host: host address for the zero page 3133 * @ch: what the page is filled from. We only support zero 3134 * @size: size of the zero page 3135 */ 3136 void ram_handle_compressed(void *host, uint8_t ch, uint64_t size) 3137 { 3138 if (ch != 0 || !is_zero_range(host, size)) { 3139 memset(host, ch, size); 3140 } 3141 } 3142 3143 /* return the size after decompression, or negative value on error */ 3144 static int 3145 qemu_uncompress_data(z_stream *stream, uint8_t *dest, size_t dest_len, 3146 const uint8_t *source, size_t source_len) 3147 { 3148 int err; 3149 3150 err = inflateReset(stream); 3151 if (err != Z_OK) { 3152 return -1; 3153 } 3154 3155 stream->avail_in = source_len; 3156 stream->next_in = (uint8_t *)source; 3157 stream->avail_out = dest_len; 3158 stream->next_out = dest; 3159 3160 err = inflate(stream, Z_NO_FLUSH); 3161 if (err != Z_STREAM_END) { 3162 return -1; 3163 } 3164 3165 return stream->total_out; 3166 } 3167 3168 static void *do_data_decompress(void *opaque) 3169 { 3170 DecompressParam *param = opaque; 3171 unsigned long pagesize; 3172 uint8_t *des; 3173 int len, ret; 3174 3175 qemu_mutex_lock(¶m->mutex); 3176 while (!param->quit) { 3177 if (param->des) { 3178 des = param->des; 3179 len = param->len; 3180 param->des = 0; 3181 qemu_mutex_unlock(¶m->mutex); 3182 3183 pagesize = TARGET_PAGE_SIZE; 3184 3185 ret = qemu_uncompress_data(¶m->stream, des, pagesize, 3186 param->compbuf, len); 3187 if (ret < 0 && migrate_get_current()->decompress_error_check) { 3188 error_report("decompress data failed"); 3189 qemu_file_set_error(decomp_file, ret); 3190 } 3191 3192 qemu_mutex_lock(&decomp_done_lock); 3193 param->done = true; 3194 qemu_cond_signal(&decomp_done_cond); 3195 qemu_mutex_unlock(&decomp_done_lock); 3196 3197 qemu_mutex_lock(¶m->mutex); 3198 } else { 3199 qemu_cond_wait(¶m->cond, ¶m->mutex); 3200 } 3201 } 3202 qemu_mutex_unlock(¶m->mutex); 3203 3204 return NULL; 3205 } 3206 3207 static int wait_for_decompress_done(void) 3208 { 3209 int idx, thread_count; 3210 3211 if (!migrate_use_compression()) { 3212 return 0; 3213 } 3214 3215 thread_count = migrate_decompress_threads(); 3216 qemu_mutex_lock(&decomp_done_lock); 3217 for (idx = 0; idx < thread_count; idx++) { 3218 while (!decomp_param[idx].done) { 3219 qemu_cond_wait(&decomp_done_cond, &decomp_done_lock); 3220 } 3221 } 3222 qemu_mutex_unlock(&decomp_done_lock); 3223 return qemu_file_get_error(decomp_file); 3224 } 3225 3226 static void compress_threads_load_cleanup(void) 3227 { 3228 int i, thread_count; 3229 3230 if (!migrate_use_compression()) { 3231 return; 3232 } 3233 thread_count = migrate_decompress_threads(); 3234 for (i = 0; i < thread_count; i++) { 3235 /* 3236 * we use it as a indicator which shows if the thread is 3237 * properly init'd or not 3238 */ 3239 if (!decomp_param[i].compbuf) { 3240 break; 3241 } 3242 3243 qemu_mutex_lock(&decomp_param[i].mutex); 3244 decomp_param[i].quit = true; 3245 qemu_cond_signal(&decomp_param[i].cond); 3246 qemu_mutex_unlock(&decomp_param[i].mutex); 3247 } 3248 for (i = 0; i < thread_count; i++) { 3249 if (!decomp_param[i].compbuf) { 3250 break; 3251 } 3252 3253 qemu_thread_join(decompress_threads + i); 3254 qemu_mutex_destroy(&decomp_param[i].mutex); 3255 qemu_cond_destroy(&decomp_param[i].cond); 3256 inflateEnd(&decomp_param[i].stream); 3257 g_free(decomp_param[i].compbuf); 3258 decomp_param[i].compbuf = NULL; 3259 } 3260 g_free(decompress_threads); 3261 g_free(decomp_param); 3262 decompress_threads = NULL; 3263 decomp_param = NULL; 3264 decomp_file = NULL; 3265 } 3266 3267 static int compress_threads_load_setup(QEMUFile *f) 3268 { 3269 int i, thread_count; 3270 3271 if (!migrate_use_compression()) { 3272 return 0; 3273 } 3274 3275 thread_count = migrate_decompress_threads(); 3276 decompress_threads = g_new0(QemuThread, thread_count); 3277 decomp_param = g_new0(DecompressParam, thread_count); 3278 qemu_mutex_init(&decomp_done_lock); 3279 qemu_cond_init(&decomp_done_cond); 3280 decomp_file = f; 3281 for (i = 0; i < thread_count; i++) { 3282 if (inflateInit(&decomp_param[i].stream) != Z_OK) { 3283 goto exit; 3284 } 3285 3286 decomp_param[i].compbuf = g_malloc0(compressBound(TARGET_PAGE_SIZE)); 3287 qemu_mutex_init(&decomp_param[i].mutex); 3288 qemu_cond_init(&decomp_param[i].cond); 3289 decomp_param[i].done = true; 3290 decomp_param[i].quit = false; 3291 qemu_thread_create(decompress_threads + i, "decompress", 3292 do_data_decompress, decomp_param + i, 3293 QEMU_THREAD_JOINABLE); 3294 } 3295 return 0; 3296 exit: 3297 compress_threads_load_cleanup(); 3298 return -1; 3299 } 3300 3301 static void decompress_data_with_multi_threads(QEMUFile *f, 3302 void *host, int len) 3303 { 3304 int idx, thread_count; 3305 3306 thread_count = migrate_decompress_threads(); 3307 QEMU_LOCK_GUARD(&decomp_done_lock); 3308 while (true) { 3309 for (idx = 0; idx < thread_count; idx++) { 3310 if (decomp_param[idx].done) { 3311 decomp_param[idx].done = false; 3312 qemu_mutex_lock(&decomp_param[idx].mutex); 3313 qemu_get_buffer(f, decomp_param[idx].compbuf, len); 3314 decomp_param[idx].des = host; 3315 decomp_param[idx].len = len; 3316 qemu_cond_signal(&decomp_param[idx].cond); 3317 qemu_mutex_unlock(&decomp_param[idx].mutex); 3318 break; 3319 } 3320 } 3321 if (idx < thread_count) { 3322 break; 3323 } else { 3324 qemu_cond_wait(&decomp_done_cond, &decomp_done_lock); 3325 } 3326 } 3327 } 3328 3329 static void colo_init_ram_state(void) 3330 { 3331 ram_state_init(&ram_state); 3332 } 3333 3334 /* 3335 * colo cache: this is for secondary VM, we cache the whole 3336 * memory of the secondary VM, it is need to hold the global lock 3337 * to call this helper. 3338 */ 3339 int colo_init_ram_cache(void) 3340 { 3341 RAMBlock *block; 3342 3343 WITH_RCU_READ_LOCK_GUARD() { 3344 RAMBLOCK_FOREACH_NOT_IGNORED(block) { 3345 block->colo_cache = qemu_anon_ram_alloc(block->used_length, 3346 NULL, 3347 false); 3348 if (!block->colo_cache) { 3349 error_report("%s: Can't alloc memory for COLO cache of block %s," 3350 "size 0x" RAM_ADDR_FMT, __func__, block->idstr, 3351 block->used_length); 3352 RAMBLOCK_FOREACH_NOT_IGNORED(block) { 3353 if (block->colo_cache) { 3354 qemu_anon_ram_free(block->colo_cache, block->used_length); 3355 block->colo_cache = NULL; 3356 } 3357 } 3358 return -errno; 3359 } 3360 } 3361 } 3362 3363 /* 3364 * Record the dirty pages that sent by PVM, we use this dirty bitmap together 3365 * with to decide which page in cache should be flushed into SVM's RAM. Here 3366 * we use the same name 'ram_bitmap' as for migration. 3367 */ 3368 if (ram_bytes_total()) { 3369 RAMBlock *block; 3370 3371 RAMBLOCK_FOREACH_NOT_IGNORED(block) { 3372 unsigned long pages = block->max_length >> TARGET_PAGE_BITS; 3373 block->bmap = bitmap_new(pages); 3374 } 3375 } 3376 3377 colo_init_ram_state(); 3378 return 0; 3379 } 3380 3381 /* TODO: duplicated with ram_init_bitmaps */ 3382 void colo_incoming_start_dirty_log(void) 3383 { 3384 RAMBlock *block = NULL; 3385 /* For memory_global_dirty_log_start below. */ 3386 qemu_mutex_lock_iothread(); 3387 qemu_mutex_lock_ramlist(); 3388 3389 memory_global_dirty_log_sync(); 3390 WITH_RCU_READ_LOCK_GUARD() { 3391 RAMBLOCK_FOREACH_NOT_IGNORED(block) { 3392 ramblock_sync_dirty_bitmap(ram_state, block); 3393 /* Discard this dirty bitmap record */ 3394 bitmap_zero(block->bmap, block->max_length >> TARGET_PAGE_BITS); 3395 } 3396 memory_global_dirty_log_start(); 3397 } 3398 ram_state->migration_dirty_pages = 0; 3399 qemu_mutex_unlock_ramlist(); 3400 qemu_mutex_unlock_iothread(); 3401 } 3402 3403 /* It is need to hold the global lock to call this helper */ 3404 void colo_release_ram_cache(void) 3405 { 3406 RAMBlock *block; 3407 3408 memory_global_dirty_log_stop(); 3409 RAMBLOCK_FOREACH_NOT_IGNORED(block) { 3410 g_free(block->bmap); 3411 block->bmap = NULL; 3412 } 3413 3414 WITH_RCU_READ_LOCK_GUARD() { 3415 RAMBLOCK_FOREACH_NOT_IGNORED(block) { 3416 if (block->colo_cache) { 3417 qemu_anon_ram_free(block->colo_cache, block->used_length); 3418 block->colo_cache = NULL; 3419 } 3420 } 3421 } 3422 ram_state_cleanup(&ram_state); 3423 } 3424 3425 /** 3426 * ram_load_setup: Setup RAM for migration incoming side 3427 * 3428 * Returns zero to indicate success and negative for error 3429 * 3430 * @f: QEMUFile where to receive the data 3431 * @opaque: RAMState pointer 3432 */ 3433 static int ram_load_setup(QEMUFile *f, void *opaque) 3434 { 3435 if (compress_threads_load_setup(f)) { 3436 return -1; 3437 } 3438 3439 xbzrle_load_setup(); 3440 ramblock_recv_map_init(); 3441 3442 return 0; 3443 } 3444 3445 static int ram_load_cleanup(void *opaque) 3446 { 3447 RAMBlock *rb; 3448 3449 RAMBLOCK_FOREACH_NOT_IGNORED(rb) { 3450 qemu_ram_block_writeback(rb); 3451 } 3452 3453 xbzrle_load_cleanup(); 3454 compress_threads_load_cleanup(); 3455 3456 RAMBLOCK_FOREACH_NOT_IGNORED(rb) { 3457 g_free(rb->receivedmap); 3458 rb->receivedmap = NULL; 3459 } 3460 3461 return 0; 3462 } 3463 3464 /** 3465 * ram_postcopy_incoming_init: allocate postcopy data structures 3466 * 3467 * Returns 0 for success and negative if there was one error 3468 * 3469 * @mis: current migration incoming state 3470 * 3471 * Allocate data structures etc needed by incoming migration with 3472 * postcopy-ram. postcopy-ram's similarly names 3473 * postcopy_ram_incoming_init does the work. 3474 */ 3475 int ram_postcopy_incoming_init(MigrationIncomingState *mis) 3476 { 3477 return postcopy_ram_incoming_init(mis); 3478 } 3479 3480 /** 3481 * ram_load_postcopy: load a page in postcopy case 3482 * 3483 * Returns 0 for success or -errno in case of error 3484 * 3485 * Called in postcopy mode by ram_load(). 3486 * rcu_read_lock is taken prior to this being called. 3487 * 3488 * @f: QEMUFile where to send the data 3489 */ 3490 static int ram_load_postcopy(QEMUFile *f) 3491 { 3492 int flags = 0, ret = 0; 3493 bool place_needed = false; 3494 bool matches_target_page_size = false; 3495 MigrationIncomingState *mis = migration_incoming_get_current(); 3496 /* Temporary page that is later 'placed' */ 3497 void *postcopy_host_page = mis->postcopy_tmp_page; 3498 void *host_page = NULL; 3499 bool all_zero = true; 3500 int target_pages = 0; 3501 3502 while (!ret && !(flags & RAM_SAVE_FLAG_EOS)) { 3503 ram_addr_t addr; 3504 void *page_buffer = NULL; 3505 void *place_source = NULL; 3506 RAMBlock *block = NULL; 3507 uint8_t ch; 3508 int len; 3509 3510 addr = qemu_get_be64(f); 3511 3512 /* 3513 * If qemu file error, we should stop here, and then "addr" 3514 * may be invalid 3515 */ 3516 ret = qemu_file_get_error(f); 3517 if (ret) { 3518 break; 3519 } 3520 3521 flags = addr & ~TARGET_PAGE_MASK; 3522 addr &= TARGET_PAGE_MASK; 3523 3524 trace_ram_load_postcopy_loop((uint64_t)addr, flags); 3525 if (flags & (RAM_SAVE_FLAG_ZERO | RAM_SAVE_FLAG_PAGE | 3526 RAM_SAVE_FLAG_COMPRESS_PAGE)) { 3527 block = ram_block_from_stream(f, flags); 3528 if (!block) { 3529 ret = -EINVAL; 3530 break; 3531 } 3532 3533 /* 3534 * Relying on used_length is racy and can result in false positives. 3535 * We might place pages beyond used_length in case RAM was shrunk 3536 * while in postcopy, which is fine - trying to place via 3537 * UFFDIO_COPY/UFFDIO_ZEROPAGE will never segfault. 3538 */ 3539 if (!block->host || addr >= block->postcopy_length) { 3540 error_report("Illegal RAM offset " RAM_ADDR_FMT, addr); 3541 ret = -EINVAL; 3542 break; 3543 } 3544 target_pages++; 3545 matches_target_page_size = block->page_size == TARGET_PAGE_SIZE; 3546 /* 3547 * Postcopy requires that we place whole host pages atomically; 3548 * these may be huge pages for RAMBlocks that are backed by 3549 * hugetlbfs. 3550 * To make it atomic, the data is read into a temporary page 3551 * that's moved into place later. 3552 * The migration protocol uses, possibly smaller, target-pages 3553 * however the source ensures it always sends all the components 3554 * of a host page in one chunk. 3555 */ 3556 page_buffer = postcopy_host_page + 3557 host_page_offset_from_ram_block_offset(block, addr); 3558 /* If all TP are zero then we can optimise the place */ 3559 if (target_pages == 1) { 3560 host_page = host_page_from_ram_block_offset(block, addr); 3561 } else if (host_page != host_page_from_ram_block_offset(block, 3562 addr)) { 3563 /* not the 1st TP within the HP */ 3564 error_report("Non-same host page %p/%p", host_page, 3565 host_page_from_ram_block_offset(block, addr)); 3566 ret = -EINVAL; 3567 break; 3568 } 3569 3570 /* 3571 * If it's the last part of a host page then we place the host 3572 * page 3573 */ 3574 if (target_pages == (block->page_size / TARGET_PAGE_SIZE)) { 3575 place_needed = true; 3576 } 3577 place_source = postcopy_host_page; 3578 } 3579 3580 switch (flags & ~RAM_SAVE_FLAG_CONTINUE) { 3581 case RAM_SAVE_FLAG_ZERO: 3582 ch = qemu_get_byte(f); 3583 /* 3584 * Can skip to set page_buffer when 3585 * this is a zero page and (block->page_size == TARGET_PAGE_SIZE). 3586 */ 3587 if (ch || !matches_target_page_size) { 3588 memset(page_buffer, ch, TARGET_PAGE_SIZE); 3589 } 3590 if (ch) { 3591 all_zero = false; 3592 } 3593 break; 3594 3595 case RAM_SAVE_FLAG_PAGE: 3596 all_zero = false; 3597 if (!matches_target_page_size) { 3598 /* For huge pages, we always use temporary buffer */ 3599 qemu_get_buffer(f, page_buffer, TARGET_PAGE_SIZE); 3600 } else { 3601 /* 3602 * For small pages that matches target page size, we 3603 * avoid the qemu_file copy. Instead we directly use 3604 * the buffer of QEMUFile to place the page. Note: we 3605 * cannot do any QEMUFile operation before using that 3606 * buffer to make sure the buffer is valid when 3607 * placing the page. 3608 */ 3609 qemu_get_buffer_in_place(f, (uint8_t **)&place_source, 3610 TARGET_PAGE_SIZE); 3611 } 3612 break; 3613 case RAM_SAVE_FLAG_COMPRESS_PAGE: 3614 all_zero = false; 3615 len = qemu_get_be32(f); 3616 if (len < 0 || len > compressBound(TARGET_PAGE_SIZE)) { 3617 error_report("Invalid compressed data length: %d", len); 3618 ret = -EINVAL; 3619 break; 3620 } 3621 decompress_data_with_multi_threads(f, page_buffer, len); 3622 break; 3623 3624 case RAM_SAVE_FLAG_EOS: 3625 /* normal exit */ 3626 multifd_recv_sync_main(); 3627 break; 3628 default: 3629 error_report("Unknown combination of migration flags: 0x%x" 3630 " (postcopy mode)", flags); 3631 ret = -EINVAL; 3632 break; 3633 } 3634 3635 /* Got the whole host page, wait for decompress before placing. */ 3636 if (place_needed) { 3637 ret |= wait_for_decompress_done(); 3638 } 3639 3640 /* Detect for any possible file errors */ 3641 if (!ret && qemu_file_get_error(f)) { 3642 ret = qemu_file_get_error(f); 3643 } 3644 3645 if (!ret && place_needed) { 3646 if (all_zero) { 3647 ret = postcopy_place_page_zero(mis, host_page, block); 3648 } else { 3649 ret = postcopy_place_page(mis, host_page, place_source, 3650 block); 3651 } 3652 place_needed = false; 3653 target_pages = 0; 3654 /* Assume we have a zero page until we detect something different */ 3655 all_zero = true; 3656 } 3657 } 3658 3659 return ret; 3660 } 3661 3662 static bool postcopy_is_advised(void) 3663 { 3664 PostcopyState ps = postcopy_state_get(); 3665 return ps >= POSTCOPY_INCOMING_ADVISE && ps < POSTCOPY_INCOMING_END; 3666 } 3667 3668 static bool postcopy_is_running(void) 3669 { 3670 PostcopyState ps = postcopy_state_get(); 3671 return ps >= POSTCOPY_INCOMING_LISTENING && ps < POSTCOPY_INCOMING_END; 3672 } 3673 3674 /* 3675 * Flush content of RAM cache into SVM's memory. 3676 * Only flush the pages that be dirtied by PVM or SVM or both. 3677 */ 3678 void colo_flush_ram_cache(void) 3679 { 3680 RAMBlock *block = NULL; 3681 void *dst_host; 3682 void *src_host; 3683 unsigned long offset = 0; 3684 3685 memory_global_dirty_log_sync(); 3686 WITH_RCU_READ_LOCK_GUARD() { 3687 RAMBLOCK_FOREACH_NOT_IGNORED(block) { 3688 ramblock_sync_dirty_bitmap(ram_state, block); 3689 } 3690 } 3691 3692 trace_colo_flush_ram_cache_begin(ram_state->migration_dirty_pages); 3693 WITH_RCU_READ_LOCK_GUARD() { 3694 block = QLIST_FIRST_RCU(&ram_list.blocks); 3695 3696 while (block) { 3697 offset = migration_bitmap_find_dirty(ram_state, block, offset); 3698 3699 if (!offset_in_ramblock(block, 3700 ((ram_addr_t)offset) << TARGET_PAGE_BITS)) { 3701 offset = 0; 3702 block = QLIST_NEXT_RCU(block, next); 3703 } else { 3704 migration_bitmap_clear_dirty(ram_state, block, offset); 3705 dst_host = block->host 3706 + (((ram_addr_t)offset) << TARGET_PAGE_BITS); 3707 src_host = block->colo_cache 3708 + (((ram_addr_t)offset) << TARGET_PAGE_BITS); 3709 memcpy(dst_host, src_host, TARGET_PAGE_SIZE); 3710 } 3711 } 3712 } 3713 trace_colo_flush_ram_cache_end(); 3714 } 3715 3716 /** 3717 * ram_load_precopy: load pages in precopy case 3718 * 3719 * Returns 0 for success or -errno in case of error 3720 * 3721 * Called in precopy mode by ram_load(). 3722 * rcu_read_lock is taken prior to this being called. 3723 * 3724 * @f: QEMUFile where to send the data 3725 */ 3726 static int ram_load_precopy(QEMUFile *f) 3727 { 3728 int flags = 0, ret = 0, invalid_flags = 0, len = 0, i = 0; 3729 /* ADVISE is earlier, it shows the source has the postcopy capability on */ 3730 bool postcopy_advised = postcopy_is_advised(); 3731 if (!migrate_use_compression()) { 3732 invalid_flags |= RAM_SAVE_FLAG_COMPRESS_PAGE; 3733 } 3734 3735 while (!ret && !(flags & RAM_SAVE_FLAG_EOS)) { 3736 ram_addr_t addr, total_ram_bytes; 3737 void *host = NULL, *host_bak = NULL; 3738 uint8_t ch; 3739 3740 /* 3741 * Yield periodically to let main loop run, but an iteration of 3742 * the main loop is expensive, so do it each some iterations 3743 */ 3744 if ((i & 32767) == 0 && qemu_in_coroutine()) { 3745 aio_co_schedule(qemu_get_current_aio_context(), 3746 qemu_coroutine_self()); 3747 qemu_coroutine_yield(); 3748 } 3749 i++; 3750 3751 addr = qemu_get_be64(f); 3752 flags = addr & ~TARGET_PAGE_MASK; 3753 addr &= TARGET_PAGE_MASK; 3754 3755 if (flags & invalid_flags) { 3756 if (flags & invalid_flags & RAM_SAVE_FLAG_COMPRESS_PAGE) { 3757 error_report("Received an unexpected compressed page"); 3758 } 3759 3760 ret = -EINVAL; 3761 break; 3762 } 3763 3764 if (flags & (RAM_SAVE_FLAG_ZERO | RAM_SAVE_FLAG_PAGE | 3765 RAM_SAVE_FLAG_COMPRESS_PAGE | RAM_SAVE_FLAG_XBZRLE)) { 3766 RAMBlock *block = ram_block_from_stream(f, flags); 3767 3768 host = host_from_ram_block_offset(block, addr); 3769 /* 3770 * After going into COLO stage, we should not load the page 3771 * into SVM's memory directly, we put them into colo_cache firstly. 3772 * NOTE: We need to keep a copy of SVM's ram in colo_cache. 3773 * Previously, we copied all these memory in preparing stage of COLO 3774 * while we need to stop VM, which is a time-consuming process. 3775 * Here we optimize it by a trick, back-up every page while in 3776 * migration process while COLO is enabled, though it affects the 3777 * speed of the migration, but it obviously reduce the downtime of 3778 * back-up all SVM'S memory in COLO preparing stage. 3779 */ 3780 if (migration_incoming_colo_enabled()) { 3781 if (migration_incoming_in_colo_state()) { 3782 /* In COLO stage, put all pages into cache temporarily */ 3783 host = colo_cache_from_block_offset(block, addr, true); 3784 } else { 3785 /* 3786 * In migration stage but before COLO stage, 3787 * Put all pages into both cache and SVM's memory. 3788 */ 3789 host_bak = colo_cache_from_block_offset(block, addr, false); 3790 } 3791 } 3792 if (!host) { 3793 error_report("Illegal RAM offset " RAM_ADDR_FMT, addr); 3794 ret = -EINVAL; 3795 break; 3796 } 3797 if (!migration_incoming_in_colo_state()) { 3798 ramblock_recv_bitmap_set(block, host); 3799 } 3800 3801 trace_ram_load_loop(block->idstr, (uint64_t)addr, flags, host); 3802 } 3803 3804 switch (flags & ~RAM_SAVE_FLAG_CONTINUE) { 3805 case RAM_SAVE_FLAG_MEM_SIZE: 3806 /* Synchronize RAM block list */ 3807 total_ram_bytes = addr; 3808 while (!ret && total_ram_bytes) { 3809 RAMBlock *block; 3810 char id[256]; 3811 ram_addr_t length; 3812 3813 len = qemu_get_byte(f); 3814 qemu_get_buffer(f, (uint8_t *)id, len); 3815 id[len] = 0; 3816 length = qemu_get_be64(f); 3817 3818 block = qemu_ram_block_by_name(id); 3819 if (block && !qemu_ram_is_migratable(block)) { 3820 error_report("block %s should not be migrated !", id); 3821 ret = -EINVAL; 3822 } else if (block) { 3823 if (length != block->used_length) { 3824 Error *local_err = NULL; 3825 3826 ret = qemu_ram_resize(block, length, 3827 &local_err); 3828 if (local_err) { 3829 error_report_err(local_err); 3830 } 3831 } 3832 /* For postcopy we need to check hugepage sizes match */ 3833 if (postcopy_advised && migrate_postcopy_ram() && 3834 block->page_size != qemu_host_page_size) { 3835 uint64_t remote_page_size = qemu_get_be64(f); 3836 if (remote_page_size != block->page_size) { 3837 error_report("Mismatched RAM page size %s " 3838 "(local) %zd != %" PRId64, 3839 id, block->page_size, 3840 remote_page_size); 3841 ret = -EINVAL; 3842 } 3843 } 3844 if (migrate_ignore_shared()) { 3845 hwaddr addr = qemu_get_be64(f); 3846 if (ramblock_is_ignored(block) && 3847 block->mr->addr != addr) { 3848 error_report("Mismatched GPAs for block %s " 3849 "%" PRId64 "!= %" PRId64, 3850 id, (uint64_t)addr, 3851 (uint64_t)block->mr->addr); 3852 ret = -EINVAL; 3853 } 3854 } 3855 ram_control_load_hook(f, RAM_CONTROL_BLOCK_REG, 3856 block->idstr); 3857 } else { 3858 error_report("Unknown ramblock \"%s\", cannot " 3859 "accept migration", id); 3860 ret = -EINVAL; 3861 } 3862 3863 total_ram_bytes -= length; 3864 } 3865 break; 3866 3867 case RAM_SAVE_FLAG_ZERO: 3868 ch = qemu_get_byte(f); 3869 ram_handle_compressed(host, ch, TARGET_PAGE_SIZE); 3870 break; 3871 3872 case RAM_SAVE_FLAG_PAGE: 3873 qemu_get_buffer(f, host, TARGET_PAGE_SIZE); 3874 break; 3875 3876 case RAM_SAVE_FLAG_COMPRESS_PAGE: 3877 len = qemu_get_be32(f); 3878 if (len < 0 || len > compressBound(TARGET_PAGE_SIZE)) { 3879 error_report("Invalid compressed data length: %d", len); 3880 ret = -EINVAL; 3881 break; 3882 } 3883 decompress_data_with_multi_threads(f, host, len); 3884 break; 3885 3886 case RAM_SAVE_FLAG_XBZRLE: 3887 if (load_xbzrle(f, addr, host) < 0) { 3888 error_report("Failed to decompress XBZRLE page at " 3889 RAM_ADDR_FMT, addr); 3890 ret = -EINVAL; 3891 break; 3892 } 3893 break; 3894 case RAM_SAVE_FLAG_EOS: 3895 /* normal exit */ 3896 multifd_recv_sync_main(); 3897 break; 3898 default: 3899 if (flags & RAM_SAVE_FLAG_HOOK) { 3900 ram_control_load_hook(f, RAM_CONTROL_HOOK, NULL); 3901 } else { 3902 error_report("Unknown combination of migration flags: 0x%x", 3903 flags); 3904 ret = -EINVAL; 3905 } 3906 } 3907 if (!ret) { 3908 ret = qemu_file_get_error(f); 3909 } 3910 if (!ret && host_bak) { 3911 memcpy(host_bak, host, TARGET_PAGE_SIZE); 3912 } 3913 } 3914 3915 ret |= wait_for_decompress_done(); 3916 return ret; 3917 } 3918 3919 static int ram_load(QEMUFile *f, void *opaque, int version_id) 3920 { 3921 int ret = 0; 3922 static uint64_t seq_iter; 3923 /* 3924 * If system is running in postcopy mode, page inserts to host memory must 3925 * be atomic 3926 */ 3927 bool postcopy_running = postcopy_is_running(); 3928 3929 seq_iter++; 3930 3931 if (version_id != 4) { 3932 return -EINVAL; 3933 } 3934 3935 /* 3936 * This RCU critical section can be very long running. 3937 * When RCU reclaims in the code start to become numerous, 3938 * it will be necessary to reduce the granularity of this 3939 * critical section. 3940 */ 3941 WITH_RCU_READ_LOCK_GUARD() { 3942 if (postcopy_running) { 3943 ret = ram_load_postcopy(f); 3944 } else { 3945 ret = ram_load_precopy(f); 3946 } 3947 } 3948 trace_ram_load_complete(ret, seq_iter); 3949 3950 return ret; 3951 } 3952 3953 static bool ram_has_postcopy(void *opaque) 3954 { 3955 RAMBlock *rb; 3956 RAMBLOCK_FOREACH_NOT_IGNORED(rb) { 3957 if (ramblock_is_pmem(rb)) { 3958 info_report("Block: %s, host: %p is a nvdimm memory, postcopy" 3959 "is not supported now!", rb->idstr, rb->host); 3960 return false; 3961 } 3962 } 3963 3964 return migrate_postcopy_ram(); 3965 } 3966 3967 /* Sync all the dirty bitmap with destination VM. */ 3968 static int ram_dirty_bitmap_sync_all(MigrationState *s, RAMState *rs) 3969 { 3970 RAMBlock *block; 3971 QEMUFile *file = s->to_dst_file; 3972 int ramblock_count = 0; 3973 3974 trace_ram_dirty_bitmap_sync_start(); 3975 3976 RAMBLOCK_FOREACH_NOT_IGNORED(block) { 3977 qemu_savevm_send_recv_bitmap(file, block->idstr); 3978 trace_ram_dirty_bitmap_request(block->idstr); 3979 ramblock_count++; 3980 } 3981 3982 trace_ram_dirty_bitmap_sync_wait(); 3983 3984 /* Wait until all the ramblocks' dirty bitmap synced */ 3985 while (ramblock_count--) { 3986 qemu_sem_wait(&s->rp_state.rp_sem); 3987 } 3988 3989 trace_ram_dirty_bitmap_sync_complete(); 3990 3991 return 0; 3992 } 3993 3994 static void ram_dirty_bitmap_reload_notify(MigrationState *s) 3995 { 3996 qemu_sem_post(&s->rp_state.rp_sem); 3997 } 3998 3999 /* 4000 * Read the received bitmap, revert it as the initial dirty bitmap. 4001 * This is only used when the postcopy migration is paused but wants 4002 * to resume from a middle point. 4003 */ 4004 int ram_dirty_bitmap_reload(MigrationState *s, RAMBlock *block) 4005 { 4006 int ret = -EINVAL; 4007 QEMUFile *file = s->rp_state.from_dst_file; 4008 unsigned long *le_bitmap, nbits = block->used_length >> TARGET_PAGE_BITS; 4009 uint64_t local_size = DIV_ROUND_UP(nbits, 8); 4010 uint64_t size, end_mark; 4011 4012 trace_ram_dirty_bitmap_reload_begin(block->idstr); 4013 4014 if (s->state != MIGRATION_STATUS_POSTCOPY_RECOVER) { 4015 error_report("%s: incorrect state %s", __func__, 4016 MigrationStatus_str(s->state)); 4017 return -EINVAL; 4018 } 4019 4020 /* 4021 * Note: see comments in ramblock_recv_bitmap_send() on why we 4022 * need the endianness conversion, and the paddings. 4023 */ 4024 local_size = ROUND_UP(local_size, 8); 4025 4026 /* Add paddings */ 4027 le_bitmap = bitmap_new(nbits + BITS_PER_LONG); 4028 4029 size = qemu_get_be64(file); 4030 4031 /* The size of the bitmap should match with our ramblock */ 4032 if (size != local_size) { 4033 error_report("%s: ramblock '%s' bitmap size mismatch " 4034 "(0x%"PRIx64" != 0x%"PRIx64")", __func__, 4035 block->idstr, size, local_size); 4036 ret = -EINVAL; 4037 goto out; 4038 } 4039 4040 size = qemu_get_buffer(file, (uint8_t *)le_bitmap, local_size); 4041 end_mark = qemu_get_be64(file); 4042 4043 ret = qemu_file_get_error(file); 4044 if (ret || size != local_size) { 4045 error_report("%s: read bitmap failed for ramblock '%s': %d" 4046 " (size 0x%"PRIx64", got: 0x%"PRIx64")", 4047 __func__, block->idstr, ret, local_size, size); 4048 ret = -EIO; 4049 goto out; 4050 } 4051 4052 if (end_mark != RAMBLOCK_RECV_BITMAP_ENDING) { 4053 error_report("%s: ramblock '%s' end mark incorrect: 0x%"PRIx64, 4054 __func__, block->idstr, end_mark); 4055 ret = -EINVAL; 4056 goto out; 4057 } 4058 4059 /* 4060 * Endianness conversion. We are during postcopy (though paused). 4061 * The dirty bitmap won't change. We can directly modify it. 4062 */ 4063 bitmap_from_le(block->bmap, le_bitmap, nbits); 4064 4065 /* 4066 * What we received is "received bitmap". Revert it as the initial 4067 * dirty bitmap for this ramblock. 4068 */ 4069 bitmap_complement(block->bmap, block->bmap, nbits); 4070 4071 trace_ram_dirty_bitmap_reload_complete(block->idstr); 4072 4073 /* 4074 * We succeeded to sync bitmap for current ramblock. If this is 4075 * the last one to sync, we need to notify the main send thread. 4076 */ 4077 ram_dirty_bitmap_reload_notify(s); 4078 4079 ret = 0; 4080 out: 4081 g_free(le_bitmap); 4082 return ret; 4083 } 4084 4085 static int ram_resume_prepare(MigrationState *s, void *opaque) 4086 { 4087 RAMState *rs = *(RAMState **)opaque; 4088 int ret; 4089 4090 ret = ram_dirty_bitmap_sync_all(s, rs); 4091 if (ret) { 4092 return ret; 4093 } 4094 4095 ram_state_resume_prepare(rs, s->to_dst_file); 4096 4097 return 0; 4098 } 4099 4100 static SaveVMHandlers savevm_ram_handlers = { 4101 .save_setup = ram_save_setup, 4102 .save_live_iterate = ram_save_iterate, 4103 .save_live_complete_postcopy = ram_save_complete, 4104 .save_live_complete_precopy = ram_save_complete, 4105 .has_postcopy = ram_has_postcopy, 4106 .save_live_pending = ram_save_pending, 4107 .load_state = ram_load, 4108 .save_cleanup = ram_save_cleanup, 4109 .load_setup = ram_load_setup, 4110 .load_cleanup = ram_load_cleanup, 4111 .resume_prepare = ram_resume_prepare, 4112 }; 4113 4114 static void ram_mig_ram_block_resized(RAMBlockNotifier *n, void *host, 4115 size_t old_size, size_t new_size) 4116 { 4117 PostcopyState ps = postcopy_state_get(); 4118 ram_addr_t offset; 4119 RAMBlock *rb = qemu_ram_block_from_host(host, false, &offset); 4120 Error *err = NULL; 4121 4122 if (ramblock_is_ignored(rb)) { 4123 return; 4124 } 4125 4126 if (!migration_is_idle()) { 4127 /* 4128 * Precopy code on the source cannot deal with the size of RAM blocks 4129 * changing at random points in time - especially after sending the 4130 * RAM block sizes in the migration stream, they must no longer change. 4131 * Abort and indicate a proper reason. 4132 */ 4133 error_setg(&err, "RAM block '%s' resized during precopy.", rb->idstr); 4134 migrate_set_error(migrate_get_current(), err); 4135 error_free(err); 4136 migration_cancel(); 4137 } 4138 4139 switch (ps) { 4140 case POSTCOPY_INCOMING_ADVISE: 4141 /* 4142 * Update what ram_postcopy_incoming_init()->init_range() does at the 4143 * time postcopy was advised. Syncing RAM blocks with the source will 4144 * result in RAM resizes. 4145 */ 4146 if (old_size < new_size) { 4147 if (ram_discard_range(rb->idstr, old_size, new_size - old_size)) { 4148 error_report("RAM block '%s' discard of resized RAM failed", 4149 rb->idstr); 4150 } 4151 } 4152 rb->postcopy_length = new_size; 4153 break; 4154 case POSTCOPY_INCOMING_NONE: 4155 case POSTCOPY_INCOMING_RUNNING: 4156 case POSTCOPY_INCOMING_END: 4157 /* 4158 * Once our guest is running, postcopy does no longer care about 4159 * resizes. When growing, the new memory was not available on the 4160 * source, no handler needed. 4161 */ 4162 break; 4163 default: 4164 error_report("RAM block '%s' resized during postcopy state: %d", 4165 rb->idstr, ps); 4166 exit(-1); 4167 } 4168 } 4169 4170 static RAMBlockNotifier ram_mig_ram_notifier = { 4171 .ram_block_resized = ram_mig_ram_block_resized, 4172 }; 4173 4174 void ram_mig_init(void) 4175 { 4176 qemu_mutex_init(&XBZRLE.lock); 4177 register_savevm_live("ram", 0, 4, &savevm_ram_handlers, &ram_state); 4178 ram_block_notifier_add(&ram_mig_ram_notifier); 4179 } 4180