[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 04/16] migration: Abstract the number of bytes sent
From: |
Juan Quintela |
Subject: |
[Qemu-devel] [PULL 04/16] migration: Abstract the number of bytes sent |
Date: |
Wed, 27 Jun 2018 14:55:52 +0200 |
Right now we use the "position" inside the QEMUFile, but things like
RDMA already do weird things to be able to maintain that counter
right, and multifd will have some similar problems.
Signed-off-by: Juan Quintela <address@hidden>
Reviewed-by: Dr. David Alan Gilbert <address@hidden>
---
migration/migration.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index d3e6da9bfe..264f3ce84e 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2704,9 +2704,15 @@ static MigThrError migration_detect_error(MigrationState
*s)
}
}
+/* How many bytes have we transferred since the beggining of the migration */
+static uint64_t migration_total_bytes(MigrationState *s)
+{
+ return qemu_ftell(s->to_dst_file);
+}
+
static void migration_calculate_complete(MigrationState *s)
{
- uint64_t bytes = qemu_ftell(s->to_dst_file);
+ uint64_t bytes = migration_total_bytes(s);
int64_t end_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
int64_t transfer_time;
@@ -2729,13 +2735,15 @@ static void migration_update_counters(MigrationState *s,
int64_t current_time)
{
uint64_t transferred, time_spent;
+ uint64_t current_bytes; /* bytes transferred since the beginning */
double bandwidth;
if (current_time < s->iteration_start_time + BUFFER_DELAY) {
return;
}
- transferred = qemu_ftell(s->to_dst_file) - s->iteration_initial_bytes;
+ current_bytes = migration_total_bytes(s);
+ transferred = current_bytes - s->iteration_initial_bytes;
time_spent = current_time - s->iteration_start_time;
bandwidth = (double)transferred / time_spent;
s->threshold_size = bandwidth * s->parameters.downtime_limit;
@@ -2754,7 +2762,7 @@ static void migration_update_counters(MigrationState *s,
qemu_file_reset_rate_limit(s->to_dst_file);
s->iteration_start_time = current_time;
- s->iteration_initial_bytes = qemu_ftell(s->to_dst_file);
+ s->iteration_initial_bytes = current_bytes;
trace_migrate_transferred(transferred, time_spent,
bandwidth, s->threshold_size);
--
2.17.1
- [Qemu-devel] [PULL 00/16] Migration, Juan Quintela, 2018/06/27
- [Qemu-devel] [PULL 01/16] migration: Create multipage support, Juan Quintela, 2018/06/27
- [Qemu-devel] [PULL 02/16] migration: Create multifd packet, Juan Quintela, 2018/06/27
- [Qemu-devel] [PULL 04/16] migration: Abstract the number of bytes sent,
Juan Quintela <=
- [Qemu-devel] [PULL 05/16] migration: Add multifd traces for start/end thread, Juan Quintela, 2018/06/27
- [Qemu-devel] [PULL 03/16] migration: Calculate mbps only during transfer time, Juan Quintela, 2018/06/27
- [Qemu-devel] [PULL 06/16] migration: Multifd channels always wait on the sem, Juan Quintela, 2018/06/27
- [Qemu-devel] [PULL 07/16] migration: Add block where to send/receive packets, Juan Quintela, 2018/06/27
- [Qemu-devel] [PULL 08/16] migration: Synchronize multifd threads with main thread, Juan Quintela, 2018/06/27
- [Qemu-devel] [PULL 10/16] migration: Create ram_save_multifd_page, Juan Quintela, 2018/06/27
- [Qemu-devel] [PULL 09/16] migration: Create multifd_bytes ram_counter, Juan Quintela, 2018/06/27
- [Qemu-devel] [PULL 11/16] migration: Start sending messages, Juan Quintela, 2018/06/27
- [Qemu-devel] [PULL 12/16] migration: Wait for blocking IO, Juan Quintela, 2018/06/27
- [Qemu-devel] [PULL 13/16] migration: Remove not needed semaphore and quit, Juan Quintela, 2018/06/27