From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Peter Xu <peterx@redhat.com>
Cc: Juan Quintela <quintela@redhat.com>,
qemu-devel@nongnu.org,
Leonardo Bras Soares Passos <lsoaresp@redhat.com>
Subject: Re: [PATCH RFC 04/15] migration: Add postcopy_has_request()
Date: Wed, 19 Jan 2022 14:27:26 +0000 [thread overview]
Message-ID: <Yegfzj/O3wKaj8BI@work-vm> (raw)
In-Reply-To: <20220119080929.39485-5-peterx@redhat.com>
* Peter Xu (peterx@redhat.com) wrote:
> Add a helper to detect whether postcopy has pending request.
>
> Since at it, cleanup the code a bit, e.g. in unqueue_page() we shouldn't need
> to check it again on queue empty because we're the only one (besides cleanup
> code, which should never run during this process) that will take a request off
> the list, so the request list can only grow but not shrink under the hood.
>
> Signed-off-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> ---
> migration/ram.c | 45 ++++++++++++++++++++++++++++-----------------
> 1 file changed, 28 insertions(+), 17 deletions(-)
>
> diff --git a/migration/ram.c b/migration/ram.c
> index 94b0ad4234..dc6ba041fa 100644
> --- a/migration/ram.c
> +++ b/migration/ram.c
> @@ -354,6 +354,12 @@ static RAMState *ram_state;
>
> static NotifierWithReturnList precopy_notifier_list;
>
> +/* Whether postcopy has queued requests? */
> +static bool postcopy_has_request(RAMState *rs)
> +{
> + return !QSIMPLEQ_EMPTY_ATOMIC(&rs->src_page_requests);
> +}
> +
> void precopy_infrastructure_init(void)
> {
> notifier_with_return_list_init(&precopy_notifier_list);
> @@ -1533,28 +1539,33 @@ static bool find_dirty_block(RAMState *rs, PageSearchStatus *pss, bool *again)
> */
> static RAMBlock *unqueue_page(RAMState *rs, ram_addr_t *offset)
> {
> + struct RAMSrcPageRequest *entry;
> RAMBlock *block = NULL;
>
> - if (QSIMPLEQ_EMPTY_ATOMIC(&rs->src_page_requests)) {
> + if (!postcopy_has_request(rs)) {
> return NULL;
> }
>
> QEMU_LOCK_GUARD(&rs->src_page_req_mutex);
> - if (!QSIMPLEQ_EMPTY(&rs->src_page_requests)) {
> - struct RAMSrcPageRequest *entry =
> - QSIMPLEQ_FIRST(&rs->src_page_requests);
> - block = entry->rb;
> - *offset = entry->offset;
> -
> - if (entry->len > TARGET_PAGE_SIZE) {
> - entry->len -= TARGET_PAGE_SIZE;
> - entry->offset += TARGET_PAGE_SIZE;
> - } else {
> - memory_region_unref(block->mr);
> - QSIMPLEQ_REMOVE_HEAD(&rs->src_page_requests, next_req);
> - g_free(entry);
> - migration_consume_urgent_request();
> - }
> +
> + /*
> + * This should _never_ change even after we take the lock, because no one
> + * should be taking anything off the request list other than us.
> + */
> + assert(postcopy_has_request(rs));
> +
> + entry = QSIMPLEQ_FIRST(&rs->src_page_requests);
> + block = entry->rb;
> + *offset = entry->offset;
> +
> + if (entry->len > TARGET_PAGE_SIZE) {
> + entry->len -= TARGET_PAGE_SIZE;
> + entry->offset += TARGET_PAGE_SIZE;
> + } else {
> + memory_region_unref(block->mr);
> + QSIMPLEQ_REMOVE_HEAD(&rs->src_page_requests, next_req);
> + g_free(entry);
> + migration_consume_urgent_request();
> }
>
> return block;
> @@ -2996,7 +3007,7 @@ static int ram_save_iterate(QEMUFile *f, void *opaque)
> t0 = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
> i = 0;
> while ((ret = qemu_file_rate_limit(f)) == 0 ||
> - !QSIMPLEQ_EMPTY(&rs->src_page_requests)) {
> + postcopy_has_request(rs)) {
> int pages;
>
> if (qemu_file_get_error(f)) {
> --
> 2.32.0
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2022-01-19 15:21 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-19 8:09 [PATCH RFC 00/15] migration: Postcopy Preemption Peter Xu
2022-01-19 8:09 ` [PATCH RFC 01/15] migration: No off-by-one for pss->page update in host page size Peter Xu
2022-01-19 12:58 ` Dr. David Alan Gilbert
2022-01-27 9:40 ` Juan Quintela
2022-01-19 8:09 ` [PATCH RFC 02/15] migration: Allow pss->page jump over clean pages Peter Xu
2022-01-19 13:42 ` Dr. David Alan Gilbert
2022-01-20 2:12 ` Peter Xu
2022-02-03 18:19 ` Dr. David Alan Gilbert
2022-02-08 3:20 ` Peter Xu
2022-01-19 8:09 ` [PATCH RFC 03/15] migration: Enable UFFD_FEATURE_THREAD_ID even without blocktime feat Peter Xu
2022-01-19 14:15 ` Dr. David Alan Gilbert
2022-01-27 9:40 ` Juan Quintela
2022-01-19 8:09 ` [PATCH RFC 04/15] migration: Add postcopy_has_request() Peter Xu
2022-01-19 14:27 ` Dr. David Alan Gilbert [this message]
2022-01-27 9:41 ` Juan Quintela
2022-01-19 8:09 ` [PATCH RFC 05/15] migration: Simplify unqueue_page() Peter Xu
2022-01-19 16:36 ` Dr. David Alan Gilbert
2022-01-20 2:23 ` Peter Xu
2022-01-25 11:01 ` Dr. David Alan Gilbert
2022-01-27 9:41 ` Juan Quintela
2022-01-19 8:09 ` [PATCH RFC 06/15] migration: Move temp page setup and cleanup into separate functions Peter Xu
2022-01-19 16:58 ` Dr. David Alan Gilbert
2022-01-27 9:43 ` Juan Quintela
2022-01-19 8:09 ` [PATCH RFC 07/15] migration: Introduce postcopy channels on dest node Peter Xu
2022-02-03 15:08 ` Dr. David Alan Gilbert
2022-02-08 3:27 ` Peter Xu
2022-02-08 9:43 ` Dr. David Alan Gilbert
2022-02-08 10:07 ` Peter Xu
2022-01-19 8:09 ` [PATCH RFC 08/15] migration: Dump ramblock and offset too when non-same-page detected Peter Xu
2022-02-03 15:15 ` Dr. David Alan Gilbert
2022-01-19 8:09 ` [PATCH RFC 09/15] migration: Add postcopy_thread_create() Peter Xu
2022-02-03 15:19 ` Dr. David Alan Gilbert
2022-02-08 3:37 ` Peter Xu
2022-02-08 11:16 ` Dr. David Alan Gilbert
2022-01-19 8:09 ` [PATCH RFC 10/15] migration: Move static var in ram_block_from_stream() into global Peter Xu
2022-02-03 17:48 ` Dr. David Alan Gilbert
2022-02-08 3:51 ` Peter Xu
2022-01-19 8:09 ` [PATCH RFC 11/15] migration: Add pss.postcopy_requested status Peter Xu
2022-02-03 15:42 ` Dr. David Alan Gilbert
2022-01-19 8:09 ` [PATCH RFC 12/15] migration: Move migrate_allow_multifd and helpers into migration.c Peter Xu
2022-02-03 15:44 ` Dr. David Alan Gilbert
2022-01-19 8:09 ` [PATCH RFC 13/15] migration: Add postcopy-preempt capability Peter Xu
2022-02-03 15:46 ` Dr. David Alan Gilbert
2022-01-19 8:09 ` [PATCH RFC 14/15] migration: Postcopy preemption on separate channel Peter Xu
2022-02-03 17:45 ` Dr. David Alan Gilbert
2022-02-08 4:22 ` Peter Xu
2022-02-08 11:24 ` Dr. David Alan Gilbert
2022-02-08 11:39 ` Peter Xu
2022-02-08 13:23 ` Dr. David Alan Gilbert
2022-02-09 2:16 ` Peter Xu
2022-01-19 8:09 ` [PATCH RFC 15/15] tests: Add postcopy preempt test Peter Xu
2022-02-03 15:53 ` Dr. David Alan Gilbert
2022-01-19 12:32 ` [PATCH RFC 00/15] migration: Postcopy Preemption Dr. David Alan Gilbert
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=Yegfzj/O3wKaj8BI@work-vm \
--to=dgilbert@redhat.com \
--cc=lsoaresp@redhat.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.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.