All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Xu <peterx@redhat.com>
To: Wei Wang <wei.w.wang@intel.com>
Cc: "Michael S. Tsirkin" <mst@redhat.com>,
	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,
	zhang.zhanghailiang@huawei.com
Subject: Re: [Qemu-devel] [PATCH v7 4/5] virtio-balloon: VIRTIO_BALLOON_F_FREE_PAGE_HINT
Date: Wed, 6 Jun 2018 19:02:17 +0800	[thread overview]
Message-ID: <20180606110217.GF7815@xz-mi> (raw)
In-Reply-To: <5B17B1A7.8060307@intel.com>

On Wed, Jun 06, 2018 at 06:04:23PM +0800, Wei Wang wrote:
> On 06/06/2018 01:42 PM, Peter Xu wrote:
> > 
> > IMHO migration states do not suite here.  IMHO bitmap syncing is too
> > frequently an operation, especially at the end of a precopy migration.
> > If you really want to introduce some notifiers, I would prefer
> > something new rather than fiddling around with migration state.  E.g.,
> > maybe a new migration event notifiers, then introduce two new events
> > for both start/end of bitmap syncing.
> 
> Please see if below aligns to what you meant:
> 
> MigrationState {
> ...
> + int ram_save_state;
> 
> }
> 
> typedef enum RamSaveState {
>     RAM_SAVE_BEGIN = 0,
>     RAM_SAVE_END = 1,
>     RAM_SAVE_MAX = 2
> }
> 
> then at the step 1) and 3) you concluded somewhere below, we change the
> state and invoke the callback.

I mean something like this:

1693c64c27 ("postcopy: Add notifier chain", 2018-03-20)

That was a postcopy-only notifier.  Maybe we can generalize it into a
more common notifier for the migration framework so that we can even
register with non-postcopy events like bitmap syncing?

> 
> 
> Btw, the migration_state_notifiers is already there, but seems not really
> used (I only tracked spice-core.c called
> add_migration_state_change_notifier). I thought adding new migration states
> can reuse all that we have.
> What's your real concern about that? (not sure how defining new events would
> make a difference)

Migration state is exposed via control path (QMP).  Adding new states
mean that the QMP clients will see more.  IMO that's not really
anything that a QMP client will need to know, instead we can keep it
internally.  That's a reason from compatibility pov.

Meanwhile, it's not really a state-thing at all for me.  It looks
really more like hook or event (start/stop of sync).

> 
> > > I would suggest to focus on the supplied interface and its usage in live
> > > migration. That is, now we have two APIs, start() and stop(), to start and
> > > stop the optimization.
> > > 
> > > 1) where in the migration code should we use them (do you agree with the
> > > step (1), (2), (3) you concluded below?)
> > > 2) how should we use them, directly do global call or via notifiers?
> > I don't know how Dave and Juan might think; here I tend to agree with
> > Michael that some notifier framework should be nicer.
> > 
> 
> What would be the advantages of using notifiers here?

Isolation of modules?  Then migration/ram.c at least won't need to
include something like "balloon.h".

And I think it's also possible too if some other modules would like to
hook at these places someday.

> 
> 
> 
> > This is not that obvious to me.  For now I think it's true, since when
> > we call stop() we'll take the mutex, meanwhile the mutex is actually
> > always held by the iothread (in the big loop in
> > virtio_balloon_poll_free_page_hints) until either:
> > 
> > - it sleeps in qemu_cond_wait() [1], or
> > - it leaves the big loop [2]
> > 
> > Since I don't see anyone who will set dev->block_iothread to true for
> > the balloon device, then [1] cannot happen;
> 
> there is a case in virtio_balloon_set_status which sets dev->block_iothread
> to true.
> 
> Did you mean the free_page_lock mutex? it is released at the bottom of the
> while() loop in virtio_balloon_poll_free_page_hint. It's actually released
> for every hint. That is,
> 
> while(1){
>     take the lock;
>     process 1 hint from the vq;
>     release the lock;
> }

Ah, so now I understand why you need the lock to be inside the loop,
since the loop is busy polling actually.  Is it possible to do this in
an async way?  I'm a bit curious on how much time will it use to do
one round of the free page hints (e.g., an idle guest with 8G mem, or
any configuration you tested)?  I suppose during that time the
iothread will be held steady with 100% cpu usage, am I right?

> 
> >   then I think when stop()
> > has taken the mutex then the thread must have quitted the big loop,
> > which goes to path [2].  I am not sure my understanding is correct,
> > but in all cases "Step(1) guarantees us that the QEMU side
> > optimization call has exited" is not obvious to me.  Would you add
> > some comment to the code (or even improve the code itself somehow) to
> > help people understand that?
> > 
> > For example, I saw that the old github code has a pthread_join() (in
> > that old code it was not using iothread at all).  That's a very good
> > code example so that people can understand that it's a synchronous
> > operations.
> 
> > > This is enough. If the guest continues to report after that, that
> > > reported hints will be detected as stale hints and dropped in the next start
> > > of optimization.
> > This is not clear to me too.  Say, stop() only sets the balloon status
> > to STOP, AFAIU it does not really modify the cmd_id field immediately,
> > then how will the new coming hints be known as stale hints?
> 
> Yes, you get that correctly - stop() only sets the status to STOP. On the
> other side, virtio_balloon_poll_free_page_hints will stop when it sees the
> staus is STOP. The free_page_lock guarantees that when stop() returns,
> virtio_balloon_poll_free_page_hints will not proceed. When
> virtio_balloon_poll_free_page_hints exits, the coming hints are not
> processed any more. They just stay in the vq. The next time start() is
> called, virtio_balloon_poll_free_page_hints works again, it will first drop
> all those stale hints.
> I'll see where I could add some comments to explain.

That'll be nice.

Thanks,

-- 
Peter Xu

  reply	other threads:[~2018-06-06 11:02 UTC|newest]

Thread overview: 93+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-24  6:13 [virtio-dev] [PATCH v7 0/5] virtio-balloon: free page hint reporting support Wei Wang
2018-04-24  6:13 ` [Qemu-devel] " Wei Wang
2018-04-24  6:13 ` [virtio-dev] [PATCH v7 1/5] bitmap: bitmap_count_one_with_offset Wei Wang
2018-04-24  6:13   ` [Qemu-devel] " Wei Wang
2018-04-24  6:13 ` [virtio-dev] [PATCH v7 2/5] migration: use bitmap_mutex in migration_bitmap_clear_dirty Wei Wang
2018-04-24  6:13   ` [Qemu-devel] " Wei Wang
2018-06-01  3:37   ` Peter Xu
2018-04-24  6:13 ` [virtio-dev] [PATCH v7 3/5] migration: API to clear bits of guest free pages from the dirty bitmap Wei Wang
2018-04-24  6:13   ` [Qemu-devel] " Wei Wang
2018-06-01  4:00   ` Peter Xu
2018-06-01  7:36     ` [virtio-dev] " Wei Wang
2018-06-01  7:36       ` Wei Wang
2018-06-01 10:06       ` Peter Xu
2018-06-01 12:32         ` [virtio-dev] " Wei Wang
2018-06-01 12:32           ` Wei Wang
2018-06-04  2:49           ` Peter Xu
2018-06-04  7:43             ` [virtio-dev] " Wei Wang
2018-06-04  7:43               ` Wei Wang
2018-04-24  6:13 ` [virtio-dev] [PATCH v7 4/5] virtio-balloon: VIRTIO_BALLOON_F_FREE_PAGE_HINT Wei Wang
2018-04-24  6:13   ` [Qemu-devel] " Wei Wang
2018-05-29 15:24   ` [virtio-dev] " Michael S. Tsirkin
2018-05-29 15:24     ` [Qemu-devel] " Michael S. Tsirkin
2018-05-30  9:12     ` [virtio-dev] " Wei Wang
2018-05-30  9:12       ` [Qemu-devel] " Wei Wang
2018-05-30 12:47       ` [virtio-dev] " Michael S. Tsirkin
2018-05-30 12:47         ` [Qemu-devel] " Michael S. Tsirkin
2018-05-31  2:27         ` [virtio-dev] " Wei Wang
2018-05-31  2:27           ` [Qemu-devel] " Wei Wang
2018-05-31 17:42           ` [virtio-dev] " Michael S. Tsirkin
2018-05-31 17:42             ` [Qemu-devel] " Michael S. Tsirkin
2018-06-01  3:18             ` [virtio-dev] " Wei Wang
2018-06-01  3:18               ` [Qemu-devel] " Wei Wang
2018-06-04  8:04         ` [virtio-dev] " Wei Wang
2018-06-04  8:04           ` [Qemu-devel] " Wei Wang
2018-06-05  6:58           ` Peter Xu
2018-06-05 13:22             ` [virtio-dev] " Wei Wang
2018-06-05 13:22               ` [Qemu-devel] " Wei Wang
2018-06-06  5:42               ` Peter Xu
2018-06-06 10:04                 ` [virtio-dev] " Wei Wang
2018-06-06 10:04                   ` [Qemu-devel] " Wei Wang
2018-06-06 11:02                   ` Peter Xu [this message]
2018-06-07  5:24                     ` [virtio-dev] " Wei Wang
2018-06-07  5:24                       ` [Qemu-devel] " Wei Wang
2018-06-07  6:32                       ` Peter Xu
2018-06-07 11:59                         ` [virtio-dev] " Wei Wang
2018-06-07 11:59                           ` [Qemu-devel] " Wei Wang
2018-06-08  2:17                           ` Peter Xu
2018-06-08  7:14                             ` [virtio-dev] " Wei Wang
2018-06-08  7:14                               ` [Qemu-devel] " Wei Wang
2018-06-08  7:31                         ` [virtio-dev] " Wei Wang
2018-06-08  7:31                           ` [Qemu-devel] " Wei Wang
2018-06-06  6:43   ` Peter Xu
2018-06-06 10:11     ` [virtio-dev] " Wei Wang
2018-06-06 10:11       ` Wei Wang
2018-06-07  3:17       ` Peter Xu
2018-06-07  5:29         ` [virtio-dev] " Wei Wang
2018-06-07  5:29           ` Wei Wang
2018-06-07  6:58           ` Peter Xu
2018-06-07 12:01             ` [virtio-dev] " Wei Wang
2018-06-07 12:01               ` Wei Wang
2018-06-08  1:37               ` Peter Xu
2018-06-08  1:58                 ` Peter Xu
2018-06-08  1:58                 ` [virtio-dev] " Michael S. Tsirkin
2018-06-08  1:58                   ` Michael S. Tsirkin
2018-06-08  2:34                   ` Peter Xu
2018-06-08  2:49                     ` [virtio-dev] " Michael S. Tsirkin
2018-06-08  2:49                       ` Michael S. Tsirkin
2018-06-08  3:34                       ` Peter Xu
2018-04-24  6:13 ` [virtio-dev] [PATCH v7 5/5] migration: use the free page hint feature from balloon Wei Wang
2018-04-24  6:13   ` [Qemu-devel] " Wei Wang
2018-04-24  6:42 ` [virtio-dev] Re: [PATCH v7 0/5] virtio-balloon: free page hint reporting support Wei Wang
2018-04-24  6:42   ` [Qemu-devel] " Wei Wang
2018-05-14  1:22 ` [virtio-dev] " Wei Wang
2018-05-14  1:22   ` [Qemu-devel] " Wei Wang
2018-05-29 15:00 ` Hailiang Zhang
2018-05-29 15:24   ` [virtio-dev] " Michael S. Tsirkin
2018-05-29 15:24     ` Michael S. Tsirkin
2018-06-01  4:58 ` Peter Xu
2018-06-01  5:07   ` Peter Xu
2018-06-01  7:29     ` [virtio-dev] " Wei Wang
2018-06-01  7:29       ` Wei Wang
2018-06-01 10:02       ` Peter Xu
2018-06-01 12:31         ` [virtio-dev] " Wei Wang
2018-06-01 12:31           ` Wei Wang
2018-06-01  7:21   ` [virtio-dev] " Wei Wang
2018-06-01  7:21     ` Wei Wang
2018-06-01 10:40     ` Peter Xu
2018-06-01 15:33       ` Dr. David Alan Gilbert
2018-06-05  6:42         ` Peter Xu
2018-06-05 14:40           ` [virtio-dev] " Michael S. Tsirkin
2018-06-05 14:40             ` Michael S. Tsirkin
2018-06-05 14:39         ` [virtio-dev] " Michael S. Tsirkin
2018-06-05 14:39           ` Michael S. Tsirkin

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=20180606110217.GF7815@xz-mi \
    --to=peterx@redhat.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=wei.w.wang@intel.com \
    --cc=yang.zhang.wz@gmail.com \
    --cc=zhang.zhanghailiang@huawei.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.