From: "Wang, Lei" <lei4.wang@intel.com>
To: Joao Martins <joao.m.martins@oracle.com>, qemu-devel@nongnu.org
Cc: Juan Quintela <quintela@redhat.com>, Peter Xu <peterx@redhat.com>,
Leonardo Bras <leobras@redhat.com>,
Eric Blake <eblake@redhat.com>,
Markus Armbruster <armbru@redhat.com>,
Avihai Horon <avihaih@nvidia.com>,
Yishai Hadas <yishaih@nvidia.com>,
"Maciej S. Szmigiero" <maciej.szmigiero@oracle.com>
Subject: Re: [PATCH 1/5] migration: Store downtime timestamps in an array
Date: Thu, 28 Sep 2023 09:55:46 +0800 [thread overview]
Message-ID: <35b4b8d2-3cb1-819f-28d2-5eeff3db789c@intel.com> (raw)
In-Reply-To: <20230926161841.98464-2-joao.m.martins@oracle.com>
On 9/27/2023 0:18, Joao Martins wrote:
> Right now downtime_start is stored in MigrationState.
>
> In preparation to having more downtime timestamps during
> switchover, move downtime_start to an array namely, @timestamp.
>
> Add a setter/getter surrounding which timestamps to record,
> to make it easier to spread to various migration functions.
>
> Signed-off-by: Joao Martins <joao.m.martins@oracle.com>
> ---
> qapi/migration.json | 14 ++++++++++++++
> migration/migration.h | 7 +++++--
> migration/migration.c | 24 ++++++++++++++++++++----
> 3 files changed, 39 insertions(+), 6 deletions(-)
>
> diff --git a/qapi/migration.json b/qapi/migration.json
> index 8843e74b59c7..b836cc881d33 100644
> --- a/qapi/migration.json
> +++ b/qapi/migration.json
> @@ -190,6 +190,20 @@
> { 'struct': 'VfioStats',
> 'data': {'transferred': 'int' } }
>
> +##
> +# @MigrationDowntime:
> +#
> +# An enumeration of downtime timestamps for all
> +# steps of the switchover.
> +#
> +# @start:Timestamp taken at the start of the switchover right before
^
Suggest adding a space here to keep consistent with other attributes.
> +# we stop the VM.
> +#
> +# Since: 8.2
> +##
> +{ 'enum': 'MigrationDowntime',
> + 'data': [ 'start' ] }
> +
> ##
> # @MigrationInfo:
> #
> diff --git a/migration/migration.h b/migration/migration.h
> index c390500604b6..180dc31c5306 100644
> --- a/migration/migration.h
> +++ b/migration/migration.h
> @@ -319,8 +319,8 @@ struct MigrationState {
> int64_t start_time;
> /* Total time used by latest migration (ms) */
> int64_t total_time;
> - /* Timestamp when VM is down (ms) to migrate the last stuff */
> - int64_t downtime_start;
> + /* Timestamps e.g. when VM is down (ms) to migrate the last stuff */
> + int64_t timestamp[MIGRATION_DOWNTIME__MAX];
> int64_t downtime;
> int64_t expected_downtime;
> bool capabilities[MIGRATION_CAPABILITY__MAX];
> @@ -516,4 +516,7 @@ void migration_populate_vfio_info(MigrationInfo *info);
> void migration_reset_vfio_bytes_transferred(void);
> void postcopy_temp_page_reset(PostcopyTmpPage *tmp_page);
>
> +void migration_set_timestamp(MigrationDowntime tm);
> +int64_t migration_get_timestamp(MigrationDowntime tm);
> +
> #endif
> diff --git a/migration/migration.c b/migration/migration.c
> index d61e5727429a..dd955c61acc7 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -2312,6 +2312,21 @@ static int migration_maybe_pause(MigrationState *s,
> return s->state == new_state ? 0 : -EINVAL;
> }
>
> +void migration_set_timestamp(MigrationDowntime type)
> +{
> + MigrationState *s = migrate_get_current();
> +
> + s->timestamp[type] = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
> +}
> +
> +int64_t migration_get_timestamp(MigrationDowntime type)
> +{
> + MigrationState *s = migrate_get_current();
> +
> + return s->timestamp[type];
> +}
> +
> +
> /**
> * migration_completion: Used by migration_thread when there's not much left.
> * The caller 'breaks' the loop when this returns.
> @@ -2325,7 +2340,7 @@ static void migration_completion(MigrationState *s)
>
> if (s->state == MIGRATION_STATUS_ACTIVE) {
> qemu_mutex_lock_iothread();
> - s->downtime_start = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
> + migration_set_timestamp(MIGRATION_DOWNTIME_START);
> qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER, NULL);
>
> s->vm_old_state = runstate_get();
> @@ -2670,7 +2685,7 @@ static void migration_calculate_complete(MigrationState *s)
> * It's still not set, so we are precopy migration. For
> * postcopy, downtime is calculated during postcopy_start().
> */
> - s->downtime = end_time - s->downtime_start;
> + s->downtime = end_time - migration_get_timestamp(MIGRATION_DOWNTIME_START);
> }
>
> transfer_time = s->total_time - s->setup_time;
> @@ -3069,7 +3084,8 @@ static void bg_migration_vm_start_bh(void *opaque)
> s->vm_start_bh = NULL;
>
> vm_start();
> - s->downtime = qemu_clock_get_ms(QEMU_CLOCK_REALTIME) - s->downtime_start;
> + s->downtime = qemu_clock_get_ms(QEMU_CLOCK_REALTIME) -
> + migration_get_timestamp(MIGRATION_DOWNTIME_START);
> }
>
> /**
> @@ -3134,7 +3150,7 @@ static void *bg_migration_thread(void *opaque)
> s->setup_time = qemu_clock_get_ms(QEMU_CLOCK_HOST) - setup_start;
>
> trace_migration_thread_setup_complete();
> - s->downtime_start = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
> + migration_set_timestamp(MIGRATION_DOWNTIME_START);
>
> qemu_mutex_lock_iothread();
>
next prev parent reply other threads:[~2023-09-28 1:56 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-26 16:18 [PATCH 0/5] migration: Downtime observability improvements Joao Martins
2023-09-26 16:18 ` [PATCH 1/5] migration: Store downtime timestamps in an array Joao Martins
2023-09-28 1:55 ` Wang, Lei [this message]
2023-09-28 13:31 ` Joao Martins
2023-09-26 16:18 ` [PATCH 2/5] migration: Collect more timestamps during switchover Joao Martins
2023-09-26 16:18 ` [PATCH 3/5] migration: Add a tracepoint for the downtime stats Joao Martins
2023-09-26 16:18 ` [PATCH 4/5] migration: Provide QMP access to " Joao Martins
2023-10-04 17:10 ` Peter Xu
2023-10-06 11:37 ` Joao Martins
2023-10-06 14:27 ` Peter Xu
2023-09-26 16:18 ` [PATCH 5/5] migration: Print expected-downtime on completion Joao Martins
2023-10-04 19:33 ` Peter Xu
2023-10-06 11:45 ` Joao Martins
2023-10-31 13:14 ` Juan Quintela
2023-11-02 10:22 ` Joao Martins
2023-10-04 17:19 ` [PATCH 0/5] migration: Downtime observability improvements Peter Xu
2023-10-06 11:39 ` Joao Martins
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=35b4b8d2-3cb1-819f-28d2-5eeff3db789c@intel.com \
--to=lei4.wang@intel.com \
--cc=armbru@redhat.com \
--cc=avihaih@nvidia.com \
--cc=eblake@redhat.com \
--cc=joao.m.martins@oracle.com \
--cc=leobras@redhat.com \
--cc=maciej.szmigiero@oracle.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=yishaih@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.