Patchwork [01/10] Add spent time to migration

login
register
mail settings
Submitter Juan Quintela
Date Nov. 23, 2010, 11:02 p.m.
Message ID <2ee1eb4ccf1bc79ae8fc25c850c399965f8f3e97.1290552026.git.quintela@redhat.com>
Download mbox | patch
Permalink /patch/72769/
State New
Headers show

Comments

Juan Quintela - Nov. 23, 2010, 11:02 p.m.
From: Juan Quintela <quintela@trasno.org>

When printing debug information for migration, print total time spent.

Signed-off-by: Juan Quintela <quintela@trasno.org>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 migration.c |   13 +++++++++++++
 1 files changed, 13 insertions(+), 0 deletions(-)
Anthony Liguori - Nov. 30, 2010, 1:56 a.m.
On 11/23/2010 05:02 PM, Juan Quintela wrote:
> From: Juan Quintela<quintela@trasno.org>
>
> When printing debug information for migration, print total time spent.
>
> Signed-off-by: Juan Quintela<quintela@trasno.org>
> Signed-off-by: Juan Quintela<quintela@redhat.com>
> ---
>   migration.c |   13 +++++++++++++
>   1 files changed, 13 insertions(+), 0 deletions(-)
>
> diff --git a/migration.c b/migration.c
> index 9ee8b17..4786406 100644
> --- a/migration.c
> +++ b/migration.c
> @@ -26,9 +26,16 @@
>   #ifdef DEBUG_MIGRATION
>   #define DPRINTF(fmt, ...) \
>       do { printf("migration: " fmt, ## __VA_ARGS__); } while (0)
> +static int64_t start, stop;
> +#define START_MIGRATION_CLOCK()	do { start = qemu_get_clock(rt_clock); } while (0)
> +#define STOP_MIGRATION_CLOCK() \
> +	do { stop = qemu_get_clock(rt_clock) - start; \
> +	} while (0)
>   #else
>   #define DPRINTF(fmt, ...) \
>       do { } while (0)
> +#define START_MIGRATION_CLOCK()	do {} while (0)
> +#define STOP_MIGRATION_CLOCK()	do {} while (0)
>   #endif
>
>   /* Migration speed throttling */
> @@ -88,6 +95,7 @@ int do_migrate(Monitor *mon, const QDict *qdict, QObject **ret_data)
>           return -1;
>       }
>
> +    START_MIGRATION_CLOCK();
>    

This is hideous :-)

Recording the time is not a bad idea but it should be stored in the 
migration state and available via info migrate.

Regards,

Anthony Liguori

>       if (strstart(uri, "tcp:",&p)) {
>           s = tcp_start_outgoing_migration(mon, p, max_throttle, detach,
>                                            blk, inc);
> @@ -127,6 +135,8 @@ int do_migrate_cancel(Monitor *mon, const QDict *qdict, QObject **ret_data)
>       if (s)
>           s->cancel(s);
>
> +    STOP_MIGRATION_CLOCK();
> +    DPRINTF("canceled after %lu milliseconds\n", stop);
>       return 0;
>   }
>
> @@ -378,6 +388,9 @@ void migrate_fd_put_ready(void *opaque)
>           } else {
>               state = MIG_STATE_COMPLETED;
>           }
> +	STOP_MIGRATION_CLOCK();
> +	DPRINTF("ended after %lu milliseconds\n", stop);
> +
>           if (migrate_fd_cleanup(s)<  0) {
>               if (old_vm_running) {
>                   vm_start();
>
Juan Quintela - Nov. 30, 2010, 2:07 a.m.
Anthony Liguori <anthony@codemonkey.ws> wrote:
> On 11/23/2010 05:02 PM, Juan Quintela wrote:
>> From: Juan Quintela<quintela@trasno.org>
>>
>> When printing debug information for migration, print total time spent.
>>
>> Signed-off-by: Juan Quintela<quintela@trasno.org>
>> Signed-off-by: Juan Quintela<quintela@redhat.com>
>> ---
>>   migration.c |   13 +++++++++++++
>>   1 files changed, 13 insertions(+), 0 deletions(-)
>>
>> diff --git a/migration.c b/migration.c
>> index 9ee8b17..4786406 100644
>> --- a/migration.c
>> +++ b/migration.c
>> @@ -26,9 +26,16 @@
>>   #ifdef DEBUG_MIGRATION
>>   #define DPRINTF(fmt, ...) \
>>       do { printf("migration: " fmt, ## __VA_ARGS__); } while (0)
>> +static int64_t start, stop;
>> +#define START_MIGRATION_CLOCK()	do { start = qemu_get_clock(rt_clock); } while (0)
>> +#define STOP_MIGRATION_CLOCK() \
>> +	do { stop = qemu_get_clock(rt_clock) - start; \
>> +	} while (0)
>>   #else
>>   #define DPRINTF(fmt, ...) \
>>       do { } while (0)
>> +#define START_MIGRATION_CLOCK()	do {} while (0)
>> +#define STOP_MIGRATION_CLOCK()	do {} while (0)
>>   #endif
>>
>>   /* Migration speed throttling */
>> @@ -88,6 +95,7 @@ int do_migrate(Monitor *mon, const QDict *qdict, QObject **ret_data)
>>           return -1;
>>       }
>>
>> +    START_MIGRATION_CLOCK();
>>    
>
> This is hideous :-)
>
> Recording the time is not a bad idea but it should be stored in the
> migration state and available via info migrate.

ok with me.
will change.

> Regards,
>
> Anthony Liguori
>
>>       if (strstart(uri, "tcp:",&p)) {
>>           s = tcp_start_outgoing_migration(mon, p, max_throttle, detach,
>>                                            blk, inc);
>> @@ -127,6 +135,8 @@ int do_migrate_cancel(Monitor *mon, const QDict *qdict, QObject **ret_data)
>>       if (s)
>>           s->cancel(s);
>>
>> +    STOP_MIGRATION_CLOCK();
>> +    DPRINTF("canceled after %lu milliseconds\n", stop);
>>       return 0;
>>   }
>>
>> @@ -378,6 +388,9 @@ void migrate_fd_put_ready(void *opaque)
>>           } else {
>>               state = MIG_STATE_COMPLETED;
>>           }
>> +	STOP_MIGRATION_CLOCK();
>> +	DPRINTF("ended after %lu milliseconds\n", stop);
>> +
>>           if (migrate_fd_cleanup(s)<  0) {
>>               if (old_vm_running) {
>>                   vm_start();
>>

Patch

diff --git a/migration.c b/migration.c
index 9ee8b17..4786406 100644
--- a/migration.c
+++ b/migration.c
@@ -26,9 +26,16 @@ 
 #ifdef DEBUG_MIGRATION
 #define DPRINTF(fmt, ...) \
     do { printf("migration: " fmt, ## __VA_ARGS__); } while (0)
+static int64_t start, stop;
+#define START_MIGRATION_CLOCK()	do { start = qemu_get_clock(rt_clock); } while (0)
+#define STOP_MIGRATION_CLOCK() \
+	do { stop = qemu_get_clock(rt_clock) - start; \
+	} while (0)
 #else
 #define DPRINTF(fmt, ...) \
     do { } while (0)
+#define START_MIGRATION_CLOCK()	do {} while (0)
+#define STOP_MIGRATION_CLOCK()	do {} while (0)
 #endif

 /* Migration speed throttling */
@@ -88,6 +95,7 @@  int do_migrate(Monitor *mon, const QDict *qdict, QObject **ret_data)
         return -1;
     }

+    START_MIGRATION_CLOCK();
     if (strstart(uri, "tcp:", &p)) {
         s = tcp_start_outgoing_migration(mon, p, max_throttle, detach,
                                          blk, inc);
@@ -127,6 +135,8 @@  int do_migrate_cancel(Monitor *mon, const QDict *qdict, QObject **ret_data)
     if (s)
         s->cancel(s);

+    STOP_MIGRATION_CLOCK();
+    DPRINTF("canceled after %lu milliseconds\n", stop);
     return 0;
 }

@@ -378,6 +388,9 @@  void migrate_fd_put_ready(void *opaque)
         } else {
             state = MIG_STATE_COMPLETED;
         }
+	STOP_MIGRATION_CLOCK();
+	DPRINTF("ended after %lu milliseconds\n", stop);
+
         if (migrate_fd_cleanup(s) < 0) {
             if (old_vm_running) {
                 vm_start();