linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Christian Borntraeger <borntraeger@de.ibm.com>
Cc: David Woodhouse <dwmw2@infradead.org>,
	peterz@infradead.org, mhillenb@amazon.de,
	linux-kernel@vger.kernel.org, kvm@vger.kernel.org
Subject: Re: [PATCH v2] kvm/x86: Inform RCU of quiescent state when entering guest mode
Date: Wed, 11 Jul 2018 14:32:59 -0700	[thread overview]
Message-ID: <20180711213259.GF3593@linux.vnet.ibm.com> (raw)
In-Reply-To: <2f7ba67e-0442-13cc-628c-2dca56520c21@de.ibm.com>

On Wed, Jul 11, 2018 at 11:11:19PM +0200, Christian Borntraeger wrote:
> 
> 
> On 07/11/2018 10:27 PM, Paul E. McKenney wrote:
> > On Wed, Jul 11, 2018 at 08:39:36PM +0200, Christian Borntraeger wrote:
> >>
> >>
> >> On 07/11/2018 08:36 PM, Paul E. McKenney wrote:
> >>> On Wed, Jul 11, 2018 at 11:20:53AM -0700, Paul E. McKenney wrote:
> >>>> On Wed, Jul 11, 2018 at 07:01:01PM +0100, David Woodhouse wrote:
> >>>>> From: David Woodhouse <dwmw@amazon.co.uk>
> >>>>>
> >>>>> 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>
> >>>>
> >>>> And idiot here forgot about some of the debugging code in RCU's dyntick-idle
> >>>> code.  I will reply with a fixed patch.
> >>>>
> >>>> The code below works just fine as long as you don't enable CONFIG_RCU_EQS_DEBUG,
> >>>> so should be OK for testing, just not for mainline.
> >>>
> >>> And here is the updated code that allegedly avoids splatting when run with
> >>> CONFIG_RCU_EQS_DEBUG.
> >>>
> >>> Thoughts?
> >>>
> >>> 							Thanx, Paul
> >>>
> >>> ------------------------------------------------------------------------
> >>>
> >>> commit 12cd59e49cf734f907f44b696e2c6e4b46a291c3
> >>> Author: David Woodhouse <dwmw@amazon.co.uk>
> >>> Date:   Wed Jul 11 19:01:01 2018 +0100
> >>>
> >>>     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>
> >>>     Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> >>>     [ paulmck: Adjust to avoid bad advice I gave to dwmw, avoid WARN_ON()s. ]
> >>>
> >>> 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();
> >>
> >> As indicated in my other mail. This is supposed to be handled in the guest_enter|exit_ calls around
> >> the run function. This would also handle other architectures. So if the guest_enter_irqoff code is
> >> not good enough, we should rather fix that instead of adding another rcu hint.
> > 
> > Something like this, on top of the earlier patch?  I am not at all
> > confident of this patch because there might be other entry/exit
> > paths I am missing.  Plus there might be RCU uses on the arch-specific
> > patch to and from the guest OS.
> > 
> > Thoughts?
> > 
> 
> If you instrment guest_enter/exit, you should cover all cases and all architectures as far
> as I can tell. FWIW, we did this rcu_note thing back then actually handling this particular
> case of long running guests blocking rcu for many seconds. And I am pretty sure that
> this did help back then.

And my second patch on the email you replied to replaced the only call
to rcu_virt_note_context_switch().  So maybe it covers what it needs to,
but yes, there might well be things I missed.  Let's see what David
comes up with.

What changed was RCU's reactions to longish grace periods.  It used to
be very aggressive about forcing the scheduler to do otherwise-unneeded
context switches, which became a problem somewhere between v4.9 and v4.15.
I therefore reduced the number of such context switches, which in turn
caused KVM to tell RCU about quiescent states way too infrequently.

The advantage of the rcu_kvm_enter()/rcu_kvm_exit() approach is that
it tells RCU of an extended duration in the guest, which means that
RCU can ignore the corresponding CPU, which in turn allows the guest
to proceed without any RCU-induced interruptions.

Does that make sense, or am I missing something?  I freely admit to
much ignorance of both kvm and s390!  ;-)

						Thanx, Paul


  reply	other threads:[~2018-07-11 21:30 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 [this message]
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
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=20180711213259.GF3593@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 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).