From: Juan Quintela <quintela@redhat.com>
To: Peter Xu <peterx@redhat.com>
Cc: Fiona Ebner <f.ebner@proxmox.com>,
qemu-devel@nongnu.org, leobras@redhat.com, eblake@redhat.com,
vsementsov@yandex-team.ru, jsnow@redhat.com,
stefanha@redhat.com, fam@euphon.net, qemu-block@nongnu.org,
pbonzini@redhat.com, t.lamprecht@proxmox.com,
Kevin Wolf <kwolf@redhat.com>
Subject: Re: [PATCH] migration: for snapshots, hold the BQL during setup callbacks
Date: Wed, 10 May 2023 08:31:13 +0200 [thread overview]
Message-ID: <87v8h0aea6.fsf@secure.mitica> (raw)
In-Reply-To: <ZFUZuiubiReBGucl@x1n> (Peter Xu's message of "Fri, 5 May 2023 10:59:06 -0400")
Peter Xu <peterx@redhat.com> wrote:
Hi
[Adding Kevin to the party]
> On Fri, May 05, 2023 at 03:46:52PM +0200, Fiona Ebner wrote:
>> To fix it, ensure that the BQL is held during setup. To avoid changing
>> the behavior for migration too, introduce conditionals for the setup
>> callbacks that need the BQL and only take the lock if it's not already
>> held.
>
> The major complexity of this patch is the "conditionally taking" part.
Yeap.
I don't want that bit.
This is another case of:
- I have a problem
- I will use recursive mutexes to solve it
Now you have two problems O:-)
> Pure question: what is the benefit of not holding BQL always during
> save_setup(), if after all we have this coroutine issue to be solved?
Dunno.
I would like that paolo commented on this. I "reviewed the code" 10
years ago. I don't remember at all why we wanted to change that.
> I can understand that it helps us to avoid taking BQL too long, but we'll
> need to take it anyway during ramblock dirty track initializations, and so
> far IIUC it's the major time to be consumed during setup().
>
> Commit message of 9b0950375277467 says, "Only the migration_bitmap_sync()
> call needs the iothread lock". Firstly I think it's also covering
> enablement of dirty tracking:
>
> + qemu_mutex_lock_iothread();
> + qemu_mutex_lock_ramlist();
> + bytes_transferred = 0;
> + reset_ram_globals();
> +
> memory_global_dirty_log_start();
> migration_bitmap_sync();
> + qemu_mutex_unlock_iothread();
>
> And I think enablement itself can be slow too, maybe even slower than
> migration_bitmap_sync() especially with KVM_DIRTY_LOG_INITIALLY_SET
> supported in the kernel.
>
> Meanwhile I always got confused on why we need to sync dirty bitmap when
> setup at all. Say, what if we drop migration_bitmap_sync() here? After
> all, shouldn't all pages be dirty from start (ram_list_init_bitmaps())?
How do you convince KVM (or the other lists) to start doing dirty
tracking? Doing a bitmap sync.
And yeap, probably there is a better way of doing it.
> This is slightly off-topic, but I'd like to know if someone can help
> answer.
>
> My whole point is still questioning whether we can unconditionally take bql
> during save_setup().
I agree with you.
> I could have missed something, though, where we want to do in setup() but
> avoid holding BQL. Help needed on figuring this out (and if there is, IMHO
> it'll be worthwhile to put that into comment of save_setup() hook).
I am more towards revert completely
9b0950375277467fd74a9075624477ae43b9bb22
and call it a day. On migration we don't use coroutines on the sending
side (I mean the migration code, the block layer uses coroutines for
everything/anything).
Paolo, Stefan any clues for not run setup with the BKL?
Later, Juan.
next prev parent reply other threads:[~2023-05-10 6:31 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-05 13:46 [PATCH] migration: for snapshots, hold the BQL during setup callbacks Fiona Ebner
2023-05-05 14:59 ` Peter Xu
2023-05-10 6:31 ` Juan Quintela [this message]
2023-05-17 19:19 ` Peter Xu
2023-05-23 15:48 ` Fiona Ebner
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=87v8h0aea6.fsf@secure.mitica \
--to=quintela@redhat.com \
--cc=eblake@redhat.com \
--cc=f.ebner@proxmox.com \
--cc=fam@euphon.net \
--cc=jsnow@redhat.com \
--cc=kwolf@redhat.com \
--cc=leobras@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=t.lamprecht@proxmox.com \
--cc=vsementsov@yandex-team.ru \
/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.