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: Leonardo Bras Soares Passos <lsoaresp@redhat.com>,
	qemu-devel@nongnu.org, Juan Quintela <quintela@redhat.com>
Subject: Re: [PATCH 20/20] tests: Add postcopy preempt test
Date: Tue, 1 Mar 2022 17:00:15 +0000	[thread overview]
Message-ID: <Yh5RHyQ9Oy8zZki1@work-vm> (raw)
In-Reply-To: <Yh2wdswUis7TSspK@xz-m1.local>

* Peter Xu (peterx@redhat.com) wrote:
> On Wed, Feb 23, 2022 at 03:50:24PM +0800, Peter Xu wrote:
> > On Tue, Feb 22, 2022 at 12:51:59PM +0000, Dr. David Alan Gilbert wrote:
> > > * Peter Xu (peterx@redhat.com) wrote:
> > > > Two tests are added: a normal postcopy preempt test, and a recovery test.
> > > 
> > > Yes, this is difficult; without hugepages the tests are limited; did you
> > > see if this test actually causes pages to go down the fast path?
> > 
> > I didn't observe the test case explicitly, but I did observe in my own test
> > that I ran that it goes with the fast path, or I can't get a huge speed up.
> > 
> > Meanwhile my own test is only using 2M huge pages, and I can observe
> > interruptions of huge page sendings frequently.
> > 
> > But yeah let me try to capture something in this test too, at least to make
> > sure the standalone socket is being used.  Covering of huge pages might be
> > doable but obviously requires host privileges, so I'll leave that for later.
> 
> When I tried to observe the test case today, I found that the preempt new
> tests are all running with the new channels, however funnily I found the
> original vanilla test is using it too!
> 
> Looked into it, that's because the MigrateStart* pointer is freed in
> test_migrate_start() but the test referenced it after that... so it's a
> use-after-free bug in the test code.  I need to squash this:
> 
> ---8<---
> diff --git a/tests/qtest/migration-test.c b/tests/qtest/migration-test.c
> index 5053b40589..09a9ce4401 100644
> --- a/tests/qtest/migration-test.c
> +++ b/tests/qtest/migration-test.c
> @@ -664,6 +664,8 @@ static int migrate_postcopy_prepare(QTestState **from_ptr,
>                                      MigrateStart *args)
>  {
>      g_autofree char *uri = g_strdup_printf("unix:%s/migsocket", tmpfs);
> +    /* NOTE: args will be freed in test_migrate_start(), cache it */
> +    bool postcopy_preempt = args->postcopy_preempt;
>      QTestState *from, *to;
>  
>      if (test_migrate_start(&from, &to, uri, args)) {
> @@ -674,7 +676,7 @@ static int migrate_postcopy_prepare(QTestState **from_ptr,
>      migrate_set_capability(to, "postcopy-ram", true);
>      migrate_set_capability(to, "postcopy-blocktime", true);
>  
> -    if (args->postcopy_preempt) {
> +    if (postcopy_preempt) {
>          migrate_set_capability(from, "postcopy-preempt", true);
>          migrate_set_capability(to, "postcopy-preempt", true);
>      }
> ---8<---

Ah OK, yes I guess that's needed.

> That's tricky, and we could have done something better.. E.g., we could
> pass in the MigrateStart** into test_migrate_start() so it can clear it
> when free, that's not silent use-after-free but crashing, which is better
> in this case.
> 
> I feel lucky I tried..

It could at least do with a comment on test_migrate_start?

Dave

> 
> -- 
> Peter Xu
> 
-- 
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK



  reply	other threads:[~2022-03-01 17:05 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-16  6:27 [PATCH 00/20] migration: Postcopy Preemption Peter Xu
2022-02-16  6:27 ` [PATCH 01/20] migration: Dump sub-cmd name in loadvm_process_command tp Peter Xu
2022-02-16 15:42   ` Dr. David Alan Gilbert
2022-02-16  6:27 ` [PATCH 02/20] migration: Finer grained tracepoints for POSTCOPY_LISTEN Peter Xu
2022-02-16 15:43   ` Dr. David Alan Gilbert
2022-02-16  6:27 ` [PATCH 03/20] migration: Tracepoint change in postcopy-run bottom half Peter Xu
2022-02-16 19:00   ` Dr. David Alan Gilbert
2022-02-16  6:27 ` [PATCH 04/20] migration: Introduce postcopy channels on dest node Peter Xu
2022-02-21 15:49   ` Dr. David Alan Gilbert
2022-02-16  6:27 ` [PATCH 05/20] migration: Dump ramblock and offset too when non-same-page detected Peter Xu
2022-02-16  6:27 ` [PATCH 06/20] migration: Add postcopy_thread_create() Peter Xu
2022-02-21 16:00   ` Dr. David Alan Gilbert
2022-02-16  6:27 ` [PATCH 07/20] migration: Move static var in ram_block_from_stream() into global Peter Xu
2022-02-16  6:27 ` [PATCH 08/20] migration: Add pss.postcopy_requested status Peter Xu
2022-02-16  6:27 ` [PATCH 09/20] migration: Move migrate_allow_multifd and helpers into migration.c Peter Xu
2022-02-16  6:27 ` [PATCH 10/20] migration: Enlarge postcopy recovery to capture !-EIO too Peter Xu
2022-02-21 16:15   ` Dr. David Alan Gilbert
2022-02-16  6:28 ` [PATCH 11/20] migration: postcopy_pause_fault_thread() never fails Peter Xu
2022-02-21 16:16   ` Dr. David Alan Gilbert
2022-02-16  6:28 ` [PATCH 12/20] migration: Export ram_load_postcopy() Peter Xu
2022-02-21 16:17   ` Dr. David Alan Gilbert
2022-02-16  6:28 ` [PATCH 13/20] migration: Move channel setup out of postcopy_try_recover() Peter Xu
2022-02-22 10:57   ` Dr. David Alan Gilbert
2022-02-23  6:40     ` Peter Xu
2022-02-23  9:47       ` Dr. David Alan Gilbert
2022-02-23 12:55         ` Peter Xu
2022-02-16  6:28 ` [PATCH 14/20] migration: Add migration_incoming_transport_cleanup() Peter Xu
2022-02-21 16:56   ` Dr. David Alan Gilbert
2022-02-16  6:28 ` [PATCH 15/20] migration: Allow migrate-recover to run multiple times Peter Xu
2022-02-21 17:03   ` Dr. David Alan Gilbert
2022-02-22  2:51     ` Peter Xu
2022-02-16  6:28 ` [PATCH 16/20] migration: Add postcopy-preempt capability Peter Xu
2022-02-16  6:28 ` [PATCH 17/20] migration: Postcopy preemption preparation on channel creation Peter Xu
2022-02-21 18:39   ` Dr. David Alan Gilbert
2022-02-22  8:34     ` Peter Xu
2022-02-22 10:19       ` Dr. David Alan Gilbert
2022-02-16  6:28 ` [PATCH 18/20] migration: Postcopy preemption enablement Peter Xu
2022-02-22 10:52   ` Dr. David Alan Gilbert
2022-02-23  7:01     ` Peter Xu
2022-02-23  9:56       ` Dr. David Alan Gilbert
2022-02-23 13:05         ` Peter Xu
2022-02-16  6:28 ` [PATCH 19/20] migration: Postcopy recover with preempt enabled Peter Xu
2022-02-22 11:32   ` Dr. David Alan Gilbert
2022-02-23  7:45     ` Peter Xu
2022-02-23  9:52       ` Dr. David Alan Gilbert
2022-02-23 13:14         ` Peter Xu
2022-02-23 18:53           ` Dr. David Alan Gilbert
2022-02-16  6:28 ` [PATCH 20/20] tests: Add postcopy preempt test Peter Xu
2022-02-22 12:51   ` Dr. David Alan Gilbert
2022-02-23  7:50     ` Peter Xu
2022-03-01  5:34       ` Peter Xu
2022-03-01 17:00         ` Dr. David Alan Gilbert [this message]
2022-03-02  6:41           ` Peter Xu
2022-02-16  9:28 ` [PATCH 00/20] migration: Postcopy Preemption Peter Xu

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=Yh5RHyQ9Oy8zZki1@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.