diff mbox series

[RFC,v1,14/26] migration: Add completion tracepoint

Message ID 20230330180336.2791-15-farosas@suse.de (mailing list archive)
State New, archived
Headers show
Series migration: File based migration with multifd and fixed-ram | expand

Commit Message

Fabiano Rosas March 30, 2023, 6:03 p.m. UTC
Add a completion tracepoint that provides basic stats for
debug. Displays throughput (MB/s and pages/s) and total time (ms).

Usage:
  $QEMU ... -trace migration_status

Output:
  migration_status 1506 MB/s, 436725 pages/s, 8698 ms

Signed-off-by: Fabiano Rosas <farosas@suse.de>
---
 migration/migration.c  | 6 +++---
 migration/migration.h  | 4 +++-
 migration/savevm.c     | 4 ++++
 migration/trace-events | 1 +
 4 files changed, 11 insertions(+), 4 deletions(-)
diff mbox series

Patch

diff --git a/migration/migration.c b/migration/migration.c
index 29630523e2..17b26c1808 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -3811,7 +3811,7 @@  static uint64_t migration_total_bytes(MigrationState *s)
         ram_counters.multifd_bytes;
 }
 
-static void migration_calculate_complete(MigrationState *s)
+void migration_calculate_complete(MigrationState *s)
 {
     uint64_t bytes = migration_total_bytes(s);
     int64_t end_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
@@ -3843,8 +3843,7 @@  static void update_iteration_initial_status(MigrationState *s)
     s->iteration_initial_pages = ram_get_total_transferred_pages();
 }
 
-static void migration_update_counters(MigrationState *s,
-                                      int64_t current_time)
+void migration_update_counters(MigrationState *s, int64_t current_time)
 {
     uint64_t transferred, transferred_pages, time_spent;
     uint64_t current_bytes; /* bytes transferred since the beginning */
@@ -3941,6 +3940,7 @@  static void migration_iteration_finish(MigrationState *s)
     case MIGRATION_STATUS_COMPLETED:
         migration_calculate_complete(s);
         runstate_set(RUN_STATE_POSTMIGRATE);
+        trace_migration_status((int)s->mbps / 8, (int)s->pages_per_second, s->total_time);
         break;
     case MIGRATION_STATUS_COLO:
         if (!migrate_colo_enabled()) {
diff --git a/migration/migration.h b/migration/migration.h
index 84be34587f..01c8201cfa 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -387,7 +387,9 @@  struct MigrationState {
 };
 
 void migrate_set_state(int *state, int old_state, int new_state);
-
+void migration_calculate_complete(MigrationState *s);
+void migration_update_counters(MigrationState *s,
+                               int64_t current_time);
 void migration_fd_process_incoming(QEMUFile *f, Error **errp);
 void migration_ioc_process_incoming(QIOChannel *ioc, Error **errp);
 void migration_incoming_process(void);
diff --git a/migration/savevm.c b/migration/savevm.c
index 1f1bc19224..b369d11b19 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -1638,6 +1638,7 @@  static int qemu_savevm_state(QEMUFile *f, Error **errp)
     qemu_mutex_lock_iothread();
 
     while (qemu_file_get_error(f) == 0) {
+        migration_update_counters(ms, qemu_clock_get_ms(QEMU_CLOCK_REALTIME));
         if (qemu_savevm_state_iterate(f, false) > 0) {
             break;
         }
@@ -1660,6 +1661,9 @@  static int qemu_savevm_state(QEMUFile *f, Error **errp)
     }
     migrate_set_state(&ms->state, MIGRATION_STATUS_SETUP, status);
 
+    migration_calculate_complete(ms);
+    trace_migration_status((int)ms->mbps / 8, (int)ms->pages_per_second, ms->total_time);
+
     /* f is outer parameter, it should not stay in global migration state after
      * this function finished */
     ms->to_dst_file = NULL;
diff --git a/migration/trace-events b/migration/trace-events
index 92161eeac5..23e4dad1ec 100644
--- a/migration/trace-events
+++ b/migration/trace-events
@@ -165,6 +165,7 @@  migration_return_path_end_after(int rp_error) "%d"
 migration_thread_after_loop(void) ""
 migration_thread_file_err(void) ""
 migration_thread_setup_complete(void) ""
+migration_status(int mpbs, int pages_per_second, int64_t total_time) "%d MB/s, %d pages/s, %ld ms"
 open_return_path_on_source(void) ""
 open_return_path_on_source_continue(void) ""
 postcopy_start(void) ""