All of lore.kernel.org
 help / color / mirror / Atom feed
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 05/15] migration: Simplify unqueue_page()
Date: Tue, 25 Jan 2022 11:01:41 +0000	[thread overview]
Message-ID: <Ye/YlVwkP8wx5N86@work-vm> (raw)
In-Reply-To: <YejHvSYRUj5lAS3I@xz-m1.local>

* Peter Xu (peterx@redhat.com) wrote:
> On Wed, Jan 19, 2022 at 04:36:50PM +0000, Dr. David Alan Gilbert wrote:
> > * Peter Xu (peterx@redhat.com) wrote:
> > > This patch simplifies unqueue_page() on both sides of it (itself, and caller).
> > > 
> > > Firstly, due to the fact that right after unqueue_page() returned true, we'll
> > > definitely send a huge page (see ram_save_huge_page() call - it will _never_
> > > exit before finish sending that huge page), so unqueue_page() does not need to
> > > jump in small page size if huge page is enabled on the ramblock.  IOW, it's
> > > destined that only the 1st 4K page will be valid, when unqueue the 2nd+ time
> > > we'll notice the whole huge page has already been sent anyway.  Switching to
> > > operating on huge page reduces a lot of the loops of redundant unqueue_page().
> > > 
> > > Meanwhile, drop the dirty check.  It's not helpful to call test_bit() every
> > > time to jump over clean pages, as ram_save_host_page() has already done so,
> > > while in a faster way (see commit ba1b7c812c ("migration/ram: Optimize
> > > ram_save_host_page()", 2021-05-13)).  So that's not necessary too.
> > > 
> > > Drop the two tracepoints along the way - based on above analysis it's very
> > > possible that no one is really using it..
> > > 
> > > Signed-off-by: Peter Xu <peterx@redhat.com>
> > 
> > Yes, OK
> > 
> > Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> > 
> > Although:
> >   a) You might like to keep a trace in get_queued_page just to see
> > what's getting unqueued
> >   b) I think originally it was a useful diagnostic to find out when we
> > were getting a lot of queue requests for pages that were already sent.
> 
> Ah, that makes sense.  How about I keep the test_bit but remove the loop?  I
> can make both a) and b) into one tracepoint:

Yes, i think that's fine.


> ========
> diff --git a/migration/ram.c b/migration/ram.c
> index 0df15ff663..02f36fa6d5 100644
> --- a/migration/ram.c
> +++ b/migration/ram.c
> @@ -1572,6 +1572,9 @@ static RAMBlock *unqueue_page(RAMState *rs, ram_addr_t *offset)
>          migration_consume_urgent_request();
>      }
>  
> +    trace_unqueue_page(block->idstr, *offset,
> +                       test_bit((*offset >> TARGET_PAGE_BITS), block->bmap));
> +
>      return block;
>  }
>  
> diff --git a/migration/trace-events b/migration/trace-events
> index 3a9b3567ae..efa3a95f81 100644
> --- a/migration/trace-events
> +++ b/migration/trace-events
> @@ -110,6 +110,7 @@ ram_save_iterate_big_wait(uint64_t milliconds, int iterations) "big wait: %" PRI
>  ram_load_complete(int ret, uint64_t seq_iter) "exit_code %d seq iteration %" PRIu64
>  ram_write_tracking_ramblock_start(const char *block_id, size_t page_size, void *addr, size_t length) "%s: page_size: %zu addr: %p length: %zu"
>  ram_write_tracking_ramblock_stop(const char *block_id, size_t page_size, void *addr, size_t length) "%s: page_size: %zu addr: %p length: %zu"
> +unqueue_page(char *block, uint64_t offset, bool dirty) "ramblock '%s' offset 0x%"PRIx64" dirty %d"
>  
>  # multifd.c
>  multifd_new_send_channel_async(uint8_t id) "channel %d"
> ========
> 
> Thanks,
> 
> -- 
> Peter Xu
> 
-- 
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK



  reply	other threads:[~2022-01-25 11:07 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
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 [this message]
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=Ye/YlVwkP8wx5N86@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.