From: Wei Wang <wei.w.wang@intel.com>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: qemu-devel@nongnu.org, virtio-dev@lists.oasis-open.org,
quintela@redhat.com, dgilbert@redhat.com, pbonzini@redhat.com,
liliang.opensource@gmail.com, yang.zhang.wz@gmail.com,
quan.xu0@gmail.com, nilal@redhat.com, riel@redhat.com
Subject: Re: [Qemu-devel] [virtio-dev] Re: [PATCH v5 4/5] virtio-balloon: VIRTIO_BALLOON_F_FREE_PAGE_HINT
Date: Tue, 20 Mar 2018 10:16:09 +0800 [thread overview]
Message-ID: <5AB06EE9.1030306@intel.com> (raw)
In-Reply-To: <20180320004900-mutt-send-email-mst@kernel.org>
On 03/20/2018 06:55 AM, Michael S. Tsirkin wrote:
> On Mon, Mar 19, 2018 at 05:01:38PM +0800, Wei Wang wrote:
>> On 03/19/2018 12:24 PM, Michael S. Tsirkin wrote:
>>> On Sun, Mar 18, 2018 at 06:36:20PM +0800, Wei Wang wrote:
>>>> On 03/16/2018 11:16 PM, Michael S. Tsirkin wrote:
>>>>> On Fri, Mar 16, 2018 at 06:48:28PM +0800, Wei Wang wrote:
>>> OTOH it seems that if thread stops nothing will wake it up
>>> whem vm is restarted. Such bahaviour change across vmstop/vmstart
>>> is unexpected.
>>> I do not understand why we want to increment the counter
>>> on vm stop though. It does make sense to stop the thread
>>> but why not resume where we left off when vm is resumed?
>>>
>> I'm not sure which counter we incremented. But it would be clear if we have
>> a high level view of how it works (it is symmetric actually). Basically, we
>> start the optimization when each round starts and stop it at the end of each
>> round (i.e. before we do the bitmap sync), as shown below:
>>
>> 1) 1st Round starts --> free_page_start
>> 2) 1st Round in progress..
>> 3) 1st Round ends --> free_page_stop
>> 4) 2nd Round starts --> free_page_start
>> 5) 2nd Round in progress..
>> 6) 2nd Round ends --> free_page_stop
>> ......
>>
>> For example, in 2), the VM is stopped. virtio_balloon_poll_free_page_hints
>> finds the vq is empty (i.e. elem == NULL) and the runstate is stopped, the
>> optimization thread exits immediately. That is, this optimization thread is
>> gone forever (the optimization we can do for this round is done). We won't
>> know when would the VM be woken up:
>> A) If the VM is woken up very soon when the migration thread is still in
>> progress of 2), then in 4) a new optimization thread (not the same one for
>> the first round) will be created and start the optimization for the 2nd
>> round as usual (If you have questions about 3) in this case, that
>> free_page_stop will do nothing than just return, since the optimization
>> thread has exited) ;
>> B) If the VM is woken up after the whole migration has ended, there is still
>> no point in resuming the optimization.
>>
>> I think this would be the simple design for the first release of this
>> optimization. There are possibilities to improve case A) above by continuing
>> optimization for the 1st Round as it is still in progress, but I think
>> adding that complexity for this rare case wouldn't be worthwhile (at least
>> for now). What would you think?
>>
>>
>> Best,
>> Wei
> In my opinion this just makes the patch very messy.
>
> E.g. attempts to attach a debugger to the guest will call vmstop and
> then behaviour changes. This is a receipe for heisenbugs which are then
> extremely painful to debug.
>
> It is not really hard to make things symmetrical:
> e.g. if you stop on vmstop then you should start on vmstart, etc.
> And stopping thread should not involve a bunch of state
> changes, just stop it and that's it.
>
"stop it" - do you mean to
1) make the thread exit (i.e.make virtio_balloon_poll_free_page_hints
exit the while loop and return NULL); or
2) keep the thread staying in the while loop but yield running (e.g.
sleep(1) or block on a mutex)? (or please let me know if you suggested a
different implementation about stopping the thread)
If we go with 1), then we would not be able to resume the thread.
If we go with 2), then there is no guarantee to make the thread continue
to run immediately (there will be a scheduling delay which is not
predictable) when the vm is woken up. If the thread cannot run
immediately when the the VM is woken up, it will be effectively the same
as 1).
In terms of heisenbugs, I think we can recommend developers (of this
feature) to use methods that don't stop the VM (e.g. print).
Best,
Wei
next prev parent reply other threads:[~2018-03-20 2:13 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-16 10:48 [Qemu-devel] [PATCH v5 0/5] virtio-balloon: free page hint reporting support Wei Wang
2018-03-16 10:48 ` [Qemu-devel] [PATCH v5 1/5] bitmap: bitmap_count_one_with_offset Wei Wang
2018-03-16 10:48 ` [Qemu-devel] [PATCH v5 2/5] migration: use bitmap_mutex in migration_bitmap_clear_dirty Wei Wang
2018-03-16 10:48 ` [Qemu-devel] [PATCH v5 3/5] migration: API to clear bits of guest free pages from the dirty bitmap Wei Wang
2018-03-16 10:48 ` [Qemu-devel] [PATCH v5 4/5] virtio-balloon: VIRTIO_BALLOON_F_FREE_PAGE_HINT Wei Wang
2018-03-16 15:16 ` Michael S. Tsirkin
2018-03-18 10:36 ` Wei Wang
2018-03-19 4:24 ` Michael S. Tsirkin
2018-03-19 9:01 ` [Qemu-devel] [virtio-dev] " Wei Wang
2018-03-19 22:55 ` Michael S. Tsirkin
2018-03-20 2:16 ` Wei Wang [this message]
2018-03-20 2:59 ` Michael S. Tsirkin
2018-03-20 3:18 ` Wei Wang
2018-03-20 3:24 ` Michael S. Tsirkin
2018-03-22 3:13 ` Wei Wang
2018-03-26 10:58 ` Wei Wang
2018-03-26 11:09 ` Daniel P. Berrangé
2018-03-26 14:54 ` Wang, Wei W
2018-03-26 15:04 ` Daniel P. Berrangé
2018-03-26 15:35 ` Wang, Wei W
2018-03-30 9:52 ` Wei Wang
2018-03-16 10:48 ` [Qemu-devel] [PATCH v5 5/5] migration: use the free page hint feature from balloon Wei Wang
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=5AB06EE9.1030306@intel.com \
--to=wei.w.wang@intel.com \
--cc=dgilbert@redhat.com \
--cc=liliang.opensource@gmail.com \
--cc=mst@redhat.com \
--cc=nilal@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quan.xu0@gmail.com \
--cc=quintela@redhat.com \
--cc=riel@redhat.com \
--cc=virtio-dev@lists.oasis-open.org \
--cc=yang.zhang.wz@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).