diff --git a/vmm/src/lib.rs b/vmm/src/lib.rs index 0811b23db..c94eee40e 100644 --- a/vmm/src/lib.rs +++ b/vmm/src/lib.rs @@ -1596,6 +1596,12 @@ impl Vmm { postponed_lifecycle_event: &Mutex>, return_if_cancelled_cb: &impl Fn(&mut SocketStream) -> result::Result<(), MigratableError>, ) -> result::Result { + let total_memory_size_bytes = vm + .memory_range_table()? + .ranges() + .iter() + .map(|range| range.length) + .sum::(); let update_migration_progress = |s: &mut MemoryMigrationContext, vm: &Vm| { let mut lock = MIGRATION_PROGRESS_SNAPSHOT.lock().unwrap(); lock.as_mut() @@ -1604,8 +1610,8 @@ impl Vmm { MigrationStateOngoingPhase::MemoryPrecopy, Some(MemoryTransmissionInfo { memory_iteration: s.iteration as u64, - memory_transmission_bps: s.current_iteration_total_bytes, - memory_bytes_total: s.bandwidth_bytes_per_second as u64, + memory_transmission_bps: s.bandwidth_bytes_per_second as u64, + memory_bytes_total: total_memory_size_bytes, memory_bytes_transmitted: s.total_sent_bytes, memory_pages_4k_transmitted: s.total_sent_bytes.div_ceil(PAGE_SIZE as u64), memory_pages_4k_remaining_iteration: s @@ -1652,16 +1658,13 @@ impl Vmm { }; ctx.update_metrics_before_transfer(iteration_begin, &iteration_table); - // Update before we might exit the loop. + // Update before we either exit the loop or transfer memory update_migration_progress(ctx, vm); if is_converged(ctx)? { info!("Precopy converged: {ctx}"); break Ok(iteration_table); } - // Update with new metrics before transmission. - update_migration_progress(ctx, vm); - // Send the current dirty pages let transfer_begin = Instant::now(); mem_send.send_memory(iteration_table, socket, return_if_cancelled_cb)?;