From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Christian Borntraeger <borntraeger@de.ibm.com>
Cc: David Woodhouse <dwmw2@infradead.org>,
Peter Zijlstra <peterz@infradead.org>,
mhillenb@amazon.de, linux-kernel <linux-kernel@vger.kernel.org>,
kvm <kvm@vger.kernel.org>
Subject: Re: [RFC] Make need_resched() return true when rcu_urgent_qs requested
Date: Wed, 11 Jul 2018 13:17:59 -0700 [thread overview]
Message-ID: <20180711201759.GB3593@linux.vnet.ibm.com> (raw)
In-Reply-To: <9ee4d6fd-02e2-2c73-36a7-36ef4f6413b0@de.ibm.com>
On Wed, Jul 11, 2018 at 08:31:55PM +0200, Christian Borntraeger wrote:
> So why is the rcu_virt_note_context_switch(smp_processor_id());
> in guest_enter_irqoff not good enough?
>
> This was actually supposed to tell rcu that being in the guest
> is an extended quiescing period (like userspace).
>
> What has changed?
As I understand it, they would like to have their guest run uninterrupted
for extended times. Because rcu_virt_note_context_switch() is a
point-in-time quiescent state, it cannot tell RCU about the extended
quiescent state.
Should we replace the current calls to rcu_virt_note_context_switch()
with rcu_kvm_enter() and rcu_kvm_exit()? Would that be better
than the below architecture-by-architecture approach?
Thanx, Paul
> On 07/11/2018 07:03 PM, David Woodhouse wrote:
> > On Wed, 2018-07-11 at 09:49 -0700, Paul E. McKenney wrote:
> >> And here is an updated v4.15 patch with Marius's Reported-by and David's
> >> fix to my lost exclamation point.
> >
> > Thanks. Are you sending the original version of that to Linus? It'd be
> > useful to have the commit ID so that we can watch for it landing, and
> > chase this one up to Greg.
> >
> > As discussed on IRC, this patch reduces synchronize_sched() latency for
> > us from ~4600s to ~160ms, which is nice.
> >
> > However, it isn't going to be sufficient in the NO_HZ_FULL case. For
> > that you want a patch like the one below, which happily reduces the
> > latency in our (!NO_HZ_FULL) case still further to ~40ms.
> >
> > Adding kvm list for better review...
> >
> > From: David Woodhouse <dwmw@amazon.co.uk>
> > Subject: [PATCH] kvm/x86: Inform RCU of quiescent state when entering guest mode
> >
> > RCU can spend long periods of time waiting for a CPU which is actually in
> > KVM guest mode, entirely pointlessly. Treat it like the idle and userspace
> > modes, and don't wait for it.
> >
> > Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
> > ---
> > arch/x86/kvm/x86.c | 2 ++
> > include/linux/rcutree.h | 2 ++
> > kernel/rcu/tree.c | 16 ++++++++++++++++
> > 3 files changed, 20 insertions(+)
> >
> > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> > index 0046aa70205a..b0c82f70afa7 100644
> > --- a/arch/x86/kvm/x86.c
> > +++ b/arch/x86/kvm/x86.c
> > @@ -7458,7 +7458,9 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu)
> > vcpu->arch.switch_db_regs &= ~KVM_DEBUGREG_RELOAD;
> > }
> >
> > + rcu_kvm_enter();
> > kvm_x86_ops->run(vcpu);
> > + rcu_kvm_exit();
> >
> > /*
> > * Do this here before restoring debug registers on the host. And
> > diff --git a/include/linux/rcutree.h b/include/linux/rcutree.h
> > index 914655848ef6..6d07af5a50fc 100644
> > --- a/include/linux/rcutree.h
> > +++ b/include/linux/rcutree.h
> > @@ -82,6 +82,8 @@ void cond_synchronize_sched(unsigned long oldstate);
> >
> > void rcu_idle_enter(void);
> > void rcu_idle_exit(void);
> > +void rcu_kvm_enter(void);
> > +void rcu_kvm_exit(void);
> > void rcu_irq_enter(void);
> > void rcu_irq_exit(void);
> > void rcu_irq_enter_irqson(void);
> > diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
> > index aa7cade1b9f3..df7893273939 100644
> > --- a/kernel/rcu/tree.c
> > +++ b/kernel/rcu/tree.c
> > @@ -1019,6 +1019,22 @@ void rcu_irq_enter_irqson(void)
> > local_irq_restore(flags);
> > }
> >
> > +/*
> > + * These are currently identical to the _idle_ versions but let's
> > + * explicitly have separate copies to keep Paul honest in future.
> > + */
> > +void rcu_kvm_enter(void)
> > +{
> > + rcu_idle_enter();
> > +}
> > +EXPORT_SYMBOL_GPL(rcu_kvm_enter);
> > +
> > +void rcu_kvm_exit(void)
> > +{
> > + rcu_idle_exit();
> > +}
> > +EXPORT_SYMBOL_GPL(rcu_kvm_exit);
> > +
> > /**
> > * rcu_is_watching - see if RCU thinks that the current CPU is idle
> > *
> >
next prev parent reply other threads:[~2018-07-11 20:17 UTC|newest]
Thread overview: 93+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-06 14:53 [RFC] Make need_resched() return true when rcu_urgent_qs requested David Woodhouse
2018-07-06 16:29 ` Peter Zijlstra
2018-07-06 17:11 ` Paul E. McKenney
2018-07-06 17:14 ` David Woodhouse
2018-07-06 21:12 ` Paul E. McKenney
2018-07-09 8:58 ` Peter Zijlstra
2018-07-09 8:53 ` Peter Zijlstra
2018-07-09 9:18 ` David Woodhouse
2018-07-09 10:44 ` Peter Zijlstra
2018-07-09 10:56 ` David Woodhouse
2018-07-09 11:06 ` Peter Zijlstra
2018-07-09 11:12 ` David Woodhouse
2018-07-09 11:31 ` Peter Zijlstra
2018-07-09 12:34 ` Paul E. McKenney
2018-07-09 12:47 ` David Woodhouse
2018-07-09 14:30 ` Paul E. McKenney
2018-07-09 12:55 ` Peter Zijlstra
2018-07-09 12:57 ` David Woodhouse
2018-07-09 13:02 ` Peter Zijlstra
2018-07-09 14:29 ` Paul E. McKenney
2018-07-09 14:43 ` Peter Zijlstra
2018-07-09 14:54 ` Paul E. McKenney
2018-07-09 15:26 ` Peter Zijlstra
2018-07-09 16:34 ` Paul E. McKenney
2018-07-09 16:44 ` Paul E. McKenney
2018-07-09 18:50 ` David Woodhouse
2018-07-09 20:34 ` Paul E. McKenney
2018-07-09 20:35 ` David Woodhouse
2018-07-09 20:42 ` Paul E. McKenney
2018-07-09 20:45 ` David Woodhouse
2018-07-09 21:05 ` Paul E. McKenney
2018-07-09 22:08 ` Paul E. McKenney
2018-07-11 10:57 ` David Woodhouse
2018-07-11 12:51 ` Paul E. McKenney
2018-07-11 12:58 ` David Woodhouse
2018-07-11 14:25 ` Paul E. McKenney
2018-07-11 14:23 ` David Woodhouse
2018-07-11 14:43 ` Paul E. McKenney
2018-07-11 16:49 ` Paul E. McKenney
2018-07-11 17:03 ` David Woodhouse
2018-07-11 17:48 ` Paul E. McKenney
2018-07-11 18:01 ` [PATCH v2] kvm/x86: Inform RCU of quiescent state when entering guest mode David Woodhouse
2018-07-11 18:20 ` Paul E. McKenney
2018-07-11 18:36 ` Paul E. McKenney
2018-07-11 18:39 ` Christian Borntraeger
2018-07-11 20:27 ` Paul E. McKenney
2018-07-11 20:54 ` David Woodhouse
2018-07-11 21:09 ` Paul E. McKenney
2018-07-11 21:11 ` Christian Borntraeger
2018-07-11 21:32 ` Paul E. McKenney
2018-07-11 21:39 ` Christian Borntraeger
2018-07-11 23:47 ` Paul E. McKenney
2018-07-12 8:31 ` David Woodhouse
2018-07-12 11:00 ` Christian Borntraeger
2018-07-12 11:10 ` David Woodhouse
2018-07-12 11:58 ` Christian Borntraeger
2018-07-12 12:04 ` Christian Borntraeger
2018-07-11 23:37 ` Paul E. McKenney
2018-07-12 2:15 ` Paul E. McKenney
2018-07-12 6:21 ` Christian Borntraeger
2018-07-12 9:52 ` David Woodhouse
2018-07-11 18:31 ` [RFC] Make need_resched() return true when rcu_urgent_qs requested Christian Borntraeger
2018-07-11 20:17 ` Paul E. McKenney [this message]
2018-07-11 20:19 ` David Woodhouse
2018-07-11 21:08 ` Paul E. McKenney
2018-07-12 12:00 ` David Woodhouse
2018-07-12 12:53 ` Paul E. McKenney
2018-07-12 16:17 ` Paul E. McKenney
2018-07-16 15:40 ` Paul E. McKenney
2018-07-17 8:19 ` David Woodhouse
2018-07-17 12:56 ` Paul E. McKenney
2018-07-18 15:36 ` Paul E. McKenney
2018-07-18 16:01 ` David Woodhouse
2018-07-18 16:37 ` Paul E. McKenney
2018-07-18 19:41 ` David Woodhouse
2018-07-18 20:17 ` Paul E. McKenney
2018-07-19 0:26 ` Frederic Weisbecker
2018-07-19 6:45 ` Christian Borntraeger
2018-07-19 7:20 ` David Woodhouse
2018-07-19 10:23 ` Christian Borntraeger
2018-07-19 12:55 ` Paul E. McKenney
2018-07-19 13:14 ` Frederic Weisbecker
2018-07-19 13:36 ` David Woodhouse
2018-07-19 17:09 ` Paul E. McKenney
2018-07-23 8:08 ` David Woodhouse
2018-07-23 12:22 ` Paul E. McKenney
2018-07-19 0:32 ` Frederic Weisbecker
2018-07-19 3:11 ` Paul E. McKenney
2018-07-19 6:16 ` David Woodhouse
2018-07-19 13:17 ` Frederic Weisbecker
2018-07-19 13:15 ` Frederic Weisbecker
2018-07-10 9:24 ` Peter Zijlstra
2018-07-10 16:26 ` Paul E. McKenney
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=20180711201759.GB3593@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=borntraeger@de.ibm.com \
--cc=dwmw2@infradead.org \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mhillenb@amazon.de \
--cc=peterz@infradead.org \
/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.