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