Hi Changes on this series: - Address review by Philippe. - Added review by.
Please review. [v3] This is just a rebase on top of latest upstream and make scripts/checkpatch.pl happy. Please, review. [v2] I just resized this patch for latest upstream, we still have the same trouble for huge guests, we are doing lots of RCU operations that are not needed at all. As David explained on the previous submission, ram_mig_ram_block_resized() aborts migration when size changes. Please review. [v1] Current migration code recalculates the amount of RAM each time that is needed. This calculation requires RCU and other operations. During migration we disable hot/unplug of memory, so we can store it. Notice the times difference, and specially that ram_bytes_total() don't appears anymore in the perf output. total time: 75852 ms downtime: 264 ms setup: 273 ms transferred ram: 19671939 kbytes throughput: 2132.28 mbps remaining ram: 0 kbytes total ram: 1077936904 kbytes duplicate: 265170289 pages skipped: 0 pages normal: 4316628 pages normal bytes: 17266512 kbytes dirty sync count: 4 page size: 4 kbytes multifd bytes: 17341329 kbytes pages-per-second: 1236658 precopy ram: 2330608 kbytes downtime ram: 1 kbytes 37.97% live_migration qemu-system-x86_64 [.] buffer_zero_avx512 10.42% live_migration qemu-system-x86_64 [.] ram_find_and_save_block.part.0 6.67% live_migration qemu-system-x86_64 [.] add_to_iovec 3.71% live_migration qemu-system-x86_64 [.] ram_bytes_total_common 2.79% live_migration qemu-system-x86_64 [.] qemu_ram_is_migratable 2.69% live_migration qemu-system-x86_64 [.] qemu_put_byte.part.0 2.41% live_migration qemu-system-x86_64 [.] bitmap_test_and_clear_atomic 1.55% live_migration qemu-system-x86_64 [.] qemu_put_be32 1.26% live_migration qemu-system-x86_64 [.] find_next_bit 1.07% multifdsend_0 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 1.07% multifdsend_13 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 1.06% multifdsend_6 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 1.05% multifdsend_2 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 1.04% multifdsend_15 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 1.03% multifdsend_12 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 1.02% live_migration qemu-system-x86_64 [.] migrate_ignore_shared 1.01% multifdsend_7 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 1.01% multifdsend_3 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 1.01% multifdsend_10 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 0.98% live_migration qemu-system-x86_64 [.] ram_save_iterate 0.96% multifdsend_4 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 0.93% multifdsend_8 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 0.92% multifdsend_5 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 0.90% multifdsend_14 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 0.88% multifdsend_9 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 0.85% multifdsend_1 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 0.83% multifdsend_11 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 0.61% live_migration qemu-system-x86_64 [.] save_zero_page_to_file.part.0 0.48% live_migration [kernel.kallsyms] [k] copy_user_enhanced_fast_string Migration status: completed total time: 70033 ms downtime: 279 ms setup: 280 ms transferred ram: 19692747 kbytes throughput: 2312.82 mbps remaining ram: 0 kbytes total ram: 1077936904 kbytes duplicate: 265164421 pages skipped: 0 pages normal: 4322415 pages normal bytes: 17289660 kbytes dirty sync count: 3 page size: 4 kbytes multifd bytes: 17362190 kbytes pages-per-second: 2523447 precopy ram: 2330555 kbytes downtime ram: 1 kbytes 43.64% live_migration qemu-system-x86_64 [.] buffer_zero_avx512 11.32% live_migration qemu-system-x86_64 [.] ram_find_and_save_block.part.0 7.60% live_migration qemu-system-x86_64 [.] add_to_iovec 2.95% live_migration qemu-system-x86_64 [.] qemu_put_byte.part.0 2.73% live_migration qemu-system-x86_64 [.] bitmap_test_and_clear_atomic 1.76% live_migration qemu-system-x86_64 [.] qemu_put_be32 1.44% live_migration qemu-system-x86_64 [.] find_next_bit 0.84% multifdsend_1 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 0.84% multifdsend_7 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 0.81% multifdsend_15 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 0.80% multifdsend_4 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 0.80% multifdsend_3 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 0.79% multifdsend_12 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 0.79% multifdsend_14 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 0.79% multifdsend_11 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 0.78% multifdsend_13 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 0.78% live_migration qemu-system-x86_64 [.] ram_save_iterate 0.77% multifdsend_9 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 0.77% multifdsend_5 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 0.77% multifdsend_10 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 0.77% multifdsend_2 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 0.77% multifdsend_6 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 0.76% multifdsend_8 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 0.71% multifdsend_0 [kernel.kallsyms] [k] copy_user_enhanced_fast_string 0.66% live_migration qemu-system-x86_64 [.] save_zero_page_to_file.part.0 0.62% live_migration qemu-system-x86_64 [.] qemu_ram_is_migratable 0.54% live_migration [kernel.kallsyms] [k] copy_user_enhanced_fast_string 0.51% live_migration qemu-system-x86_64 [.] qemu_put_byte Please, review. Thanks, Juan. Juan Quintela (2): migration: Split ram_bytes_total_common() in two functions migration: Calculate ram size once migration/ram.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) -- 2.39.1