qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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 11:18:23 +0800	[thread overview]
Message-ID: <5AB07D7F.90205@intel.com> (raw)
In-Reply-To: <20180320045134-mutt-send-email-mst@kernel.org>

On 03/20/2018 10:59 AM, Michael S. Tsirkin wrote:
> On Tue, Mar 20, 2018 at 10:16:09AM +0800, Wei Wang wrote:
>> 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)
> I would say it makes more sense to make it block on something.
>
> BTW I still think you are engaging in premature optimization here.
> What you are doing here is a "data plane for balloon".
> I would make the feature work first by processing this in a BH.
> Creating threads immediately opens up questions of isolation,
> cgroups etc.
>

Could you please share more about how creating threads affects isolation 
and cgroup? and how does BH solve it? Thanks.

Best,
Wei

  reply	other threads:[~2018-03-20  3:15 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
2018-03-20  2:59               ` Michael S. Tsirkin
2018-03-20  3:18                 ` Wei Wang [this message]
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=5AB07D7F.90205@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).