diff mbox

[2/4] Postcopy: Add stats on page requests

Message ID 1461784125-578-3-git-send-email-dgilbert@redhat.com
State New
Headers show

Commit Message

Dr. David Alan Gilbert April 27, 2016, 7:08 p.m. UTC
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>

On the source, add a count of page requests received from the
destination.

Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 hmp.c                         |  4 +++
 include/migration/migration.h |  2 ++
 migration/migration.c         | 59 ++++++++++++++++++-------------------------
 migration/ram.c               |  1 +
 qapi-schema.json              |  6 ++++-
 5 files changed, 36 insertions(+), 36 deletions(-)

Comments

Eric Blake April 27, 2016, 7:18 p.m. UTC | #1
On 04/27/2016 01:08 PM, Dr. David Alan Gilbert (git) wrote:
> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> 
> On the source, add a count of page requests received from the
> destination.
> 
> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> ---
>  hmp.c                         |  4 +++
>  include/migration/migration.h |  2 ++
>  migration/migration.c         | 59 ++++++++++++++++++-------------------------
>  migration/ram.c               |  1 +
>  qapi-schema.json              |  6 ++++-
>  5 files changed, 36 insertions(+), 36 deletions(-)
> 

> +++ b/migration/migration.c
> @@ -561,6 +561,26 @@ static void get_xbzrle_cache_stats(MigrationInfo *info)
>      }
>  }
>  
> +static void populate_ram_info(MigrationInfo *info, MigrationState *s)
> +{
> +    info->has_ram = true;
> +    info->ram = g_malloc0(sizeof(*info->ram));

> @@ -585,18 +605,7 @@ MigrationInfo *qmp_query_migrate(Error **errp)
>          info->has_setup_time = true;
>          info->setup_time = s->setup_time;
>  
> -        info->has_ram = true;
> -        info->ram = g_malloc0(sizeof(*info->ram));

If you respin, please split the refactoring into one patch, and the
addition of postcopy stats in another, so that the addition is not lost
in the noise.

Otherwise looks fine.
Dr. David Alan Gilbert April 29, 2016, 11:42 a.m. UTC | #2
* Eric Blake (eblake@redhat.com) wrote:
> On 04/27/2016 01:08 PM, Dr. David Alan Gilbert (git) wrote:
> > From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> > 
> > On the source, add a count of page requests received from the
> > destination.
> > 
> > Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> > ---
> >  hmp.c                         |  4 +++
> >  include/migration/migration.h |  2 ++
> >  migration/migration.c         | 59 ++++++++++++++++++-------------------------
> >  migration/ram.c               |  1 +
> >  qapi-schema.json              |  6 ++++-
> >  5 files changed, 36 insertions(+), 36 deletions(-)
> > 
> 
> > +++ b/migration/migration.c
> > @@ -561,6 +561,26 @@ static void get_xbzrle_cache_stats(MigrationInfo *info)
> >      }
> >  }
> >  
> > +static void populate_ram_info(MigrationInfo *info, MigrationState *s)
> > +{
> > +    info->has_ram = true;
> > +    info->ram = g_malloc0(sizeof(*info->ram));
> 
> > @@ -585,18 +605,7 @@ MigrationInfo *qmp_query_migrate(Error **errp)
> >          info->has_setup_time = true;
> >          info->setup_time = s->setup_time;
> >  
> > -        info->has_ram = true;
> > -        info->ram = g_malloc0(sizeof(*info->ram));
> 
> If you respin, please split the refactoring into one patch, and the
> addition of postcopy stats in another, so that the addition is not lost
> in the noise.

Done.

> Otherwise looks fine.

Thanks.

Dave

> 
> -- 
> Eric Blake   eblake redhat com    +1-919-301-3266
> Libvirt virtualization library http://libvirt.org
> 


--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
diff mbox

Patch

diff --git a/hmp.c b/hmp.c
index d510236..cd5fae3 100644
--- a/hmp.c
+++ b/hmp.c
@@ -209,6 +209,10 @@  void hmp_info_migrate(Monitor *mon, const QDict *qdict)
             monitor_printf(mon, "dirty pages rate: %" PRIu64 " pages\n",
                            info->ram->dirty_pages_rate);
         }
+        if (info->ram->postcopy_requests) {
+            monitor_printf(mon, "postcopy request count: %" PRIu64 "\n",
+                           info->ram->postcopy_requests);
+        }
     }
 
     if (info->has_disk) {
diff --git a/include/migration/migration.h b/include/migration/migration.h
index ac2c12c..78fa59b 100644
--- a/include/migration/migration.h
+++ b/include/migration/migration.h
@@ -157,6 +157,8 @@  struct MigrationState
     int64_t xbzrle_cache_size;
     int64_t setup_time;
     int64_t dirty_sync_count;
+    /* Count of requests incoming from destination */
+    int64_t postcopy_requests;
 
     /* Flag set once the migration has been asked to enter postcopy */
     bool start_postcopy;
diff --git a/migration/migration.c b/migration/migration.c
index 991313a..9d41618 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -561,6 +561,26 @@  static void get_xbzrle_cache_stats(MigrationInfo *info)
     }
 }
 
+static void populate_ram_info(MigrationInfo *info, MigrationState *s)
+{
+    info->has_ram = true;
+    info->ram = g_malloc0(sizeof(*info->ram));
+    info->ram->transferred = ram_bytes_transferred();
+    info->ram->total = ram_bytes_total();
+    info->ram->duplicate = dup_mig_pages_transferred();
+    info->ram->skipped = skipped_mig_pages_transferred();
+    info->ram->normal = norm_mig_pages_transferred();
+    info->ram->normal_bytes = norm_mig_bytes_transferred();
+    info->ram->mbps = s->mbps;
+    info->ram->dirty_sync_count = s->dirty_sync_count;
+    info->ram->postcopy_requests = s->postcopy_requests;
+
+    if (s->state != MIGRATION_STATUS_COMPLETED) {
+        info->ram->remaining = ram_bytes_remaining();
+        info->ram->dirty_pages_rate = s->dirty_pages_rate;
+    }
+}
+
 MigrationInfo *qmp_query_migrate(Error **errp)
 {
     MigrationInfo *info = g_malloc0(sizeof(*info));
@@ -585,18 +605,7 @@  MigrationInfo *qmp_query_migrate(Error **errp)
         info->has_setup_time = true;
         info->setup_time = s->setup_time;
 
-        info->has_ram = true;
-        info->ram = g_malloc0(sizeof(*info->ram));
-        info->ram->transferred = ram_bytes_transferred();
-        info->ram->remaining = ram_bytes_remaining();
-        info->ram->total = ram_bytes_total();
-        info->ram->duplicate = dup_mig_pages_transferred();
-        info->ram->skipped = skipped_mig_pages_transferred();
-        info->ram->normal = norm_mig_pages_transferred();
-        info->ram->normal_bytes = norm_mig_bytes_transferred();
-        info->ram->dirty_pages_rate = s->dirty_pages_rate;
-        info->ram->mbps = s->mbps;
-        info->ram->dirty_sync_count = s->dirty_sync_count;
+        populate_ram_info(info, s);
 
         if (blk_mig_active()) {
             info->has_disk = true;
@@ -624,18 +633,7 @@  MigrationInfo *qmp_query_migrate(Error **errp)
         info->has_setup_time = true;
         info->setup_time = s->setup_time;
 
-        info->has_ram = true;
-        info->ram = g_malloc0(sizeof(*info->ram));
-        info->ram->transferred = ram_bytes_transferred();
-        info->ram->remaining = ram_bytes_remaining();
-        info->ram->total = ram_bytes_total();
-        info->ram->duplicate = dup_mig_pages_transferred();
-        info->ram->skipped = skipped_mig_pages_transferred();
-        info->ram->normal = norm_mig_pages_transferred();
-        info->ram->normal_bytes = norm_mig_bytes_transferred();
-        info->ram->dirty_pages_rate = s->dirty_pages_rate;
-        info->ram->mbps = s->mbps;
-        info->ram->dirty_sync_count = s->dirty_sync_count;
+        populate_ram_info(info, s);
 
         if (blk_mig_active()) {
             info->has_disk = true;
@@ -658,17 +656,7 @@  MigrationInfo *qmp_query_migrate(Error **errp)
         info->has_setup_time = true;
         info->setup_time = s->setup_time;
 
-        info->has_ram = true;
-        info->ram = g_malloc0(sizeof(*info->ram));
-        info->ram->transferred = ram_bytes_transferred();
-        info->ram->remaining = 0;
-        info->ram->total = ram_bytes_total();
-        info->ram->duplicate = dup_mig_pages_transferred();
-        info->ram->skipped = skipped_mig_pages_transferred();
-        info->ram->normal = norm_mig_pages_transferred();
-        info->ram->normal_bytes = norm_mig_bytes_transferred();
-        info->ram->mbps = s->mbps;
-        info->ram->dirty_sync_count = s->dirty_sync_count;
+        populate_ram_info(info, s);
         break;
     case MIGRATION_STATUS_FAILED:
         info->has_status = true;
@@ -946,6 +934,7 @@  MigrationState *migrate_init(const MigrationParams *params)
     s->dirty_sync_count = 0;
     s->start_postcopy = false;
     s->postcopy_after_devices = false;
+    s->postcopy_requests = 0;
     s->migration_thread_running = false;
     s->last_req_rb = NULL;
 
diff --git a/migration/ram.c b/migration/ram.c
index e96c2af..eeb1902 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -1169,6 +1169,7 @@  int ram_save_queue_pages(MigrationState *ms, const char *rbname,
 {
     RAMBlock *ramblock;
 
+    ms->postcopy_requests++;
     rcu_read_lock();
     if (!rbname) {
         /* Reuse last RAMBlock */
diff --git a/qapi-schema.json b/qapi-schema.json
index 54634c4..8bc581e 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -382,13 +382,17 @@ 
 #
 # @dirty-sync-count: number of times that dirty ram was synchronized (since 2.1)
 #
+# @postcopy-requests: The number of page requests received from the destination
+#        (since 2.7)
+#
 # Since: 0.14.0
 ##
 { 'struct': 'MigrationStats',
   'data': {'transferred': 'int', 'remaining': 'int', 'total': 'int' ,
            'duplicate': 'int', 'skipped': 'int', 'normal': 'int',
            'normal-bytes': 'int', 'dirty-pages-rate' : 'int',
-           'mbps' : 'number', 'dirty-sync-count' : 'int' } }
+           'mbps' : 'number', 'dirty-sync-count' : 'int',
+           'postcopy-requests' : 'int' } }
 
 ##
 # @XBZRLECacheStats