linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: David Woodhouse <dwmw2@infradead.org>
Cc: Peter Zijlstra <peterz@infradead.org>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	"Hillenbrand, Marius" <mhillenb@amazon.com>
Subject: Re: [RFC] Make need_resched() return true when rcu_urgent_qs requested
Date: Wed, 11 Jul 2018 05:51:37 -0700	[thread overview]
Message-ID: <20180711125137.GL3593@linux.vnet.ibm.com> (raw)
In-Reply-To: <1531306663.8759.39.camel@infradead.org>

On Wed, Jul 11, 2018 at 11:57:43AM +0100, David Woodhouse wrote:
> On Mon, 2018-07-09 at 15:08 -0700, Paul E. McKenney wrote:
> 
> > 
> > And the earlier patch was against my -rcu tree, which won't be all that
> > helpful for v4.15.  Please see below for a lightly tested backport to v4.15.
> > 
> > It should apply to all the releases of interest.  If other backports
> > are needed, please remind me of my woodhouse.v4.15.2018.07.09a tag.
> > 
> >                                                         Thanx, Paul
> > 
> > ------------------------------------------------------------------------
> > 
> > commit 6361b81827a8f93f582124da385258fc04a38a7f
> > Author: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> > Date:   Mon Jul 9 13:47:30 2018 -0700
> > 
> >     rcu: Make need_resched() respond to urgent RCU-QS needs
> >     
> >     The per-CPU rcu_dynticks.rcu_urgent_qs variable communicates an urgent
> >     need for an RCU quiescent state from the force-quiescent-state processing
> >     within the grace-period kthread to context switches and to cond_resched().
> >     Unfortunately, such urgent needs are not communicated to need_resched(),
> >     which is sometimes used to decide when to invoke cond_resched(), for
> >     but one example, within the KVM vcpu_run() function.  As of v4.15, this
> >     can result in synchronize_sched() being delayed by up to ten seconds,
> >     which can be problematic, to say nothing of annoying.
> >     
> >     This commit therefore checks rcu_dynticks.rcu_urgent_qs from within
> >     rcu_check_callbacks(), which is invoked from the scheduling-clock
> >     interrupt handler.  If the current task is not an idle task and is
> >     not executing in usermode, a context switch is forced, and either way,
> >     the rcu_dynticks.rcu_urgent_qs variable is set to false.  If the current
> >     task is an idle task, then RCU's dyntick-idle code will detect the
> >     quiescent state, so no further action is required.  Similarly, if the
> >     task is executing in usermode, other code in rcu_check_callbacks() and
> >     its called functions will report the corresponding quiescent state.
> >     
> >     Reported-by: David Woodhouse <dwmw2@infradead.org>
> >     Suggested-by: Peter Zijlstra <peterz@infradead.org>
> >     Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> >     [ paulmck: Backported to v4.15.  Probably applies elsewhere. ]
> 
> Hm, this doesn't appear to work. I'm still seeing latencies of 4-5
> seconds in my testing. In fact, even our old workaround of adding
> rcu_all_qs() into vcpu_enter_guest() didn't properly fix it AFAICT.
> 
> I'm just creating a VM with lots of CPUs, then attaching new devices to
> it to cause the VMM to open more file descriptors, until it hits a
> power of two and invokes expand_fdtable().
> 
> expand_fdtable (512) sync took 10472394964 cycles (3500000 µs).
> expand_fdtable (512) sync took 15298908072 cycles (5100000 µs).

Interesting.  (I am assuming that the guest is printing these messages,
not the host, but please let me know if my assumption is incorrect.)

Are the CPUs saturated?  If so, could you please try booting with
rcutree.kthread_prio=2?  If that prevents the messages from happening,
then I need to put some work into guaranteeing forward progress.
Otherwise, I need to figure out why the setting of rcu_urgent_qs is
being ignored.

I will assume the latter for the moment and see if I can spot the
problem.

							Thanx, Paul


> --- a/fs/file.c
> +++ b/fs/file.c
> @@ -162,8 +162,16 @@ static int expand_fdtable(struct files_struct *files, unsigned int nr)
>         /* make sure all __fd_install() have seen resize_in_progress
>          * or have finished their rcu_read_lock_sched() section.
>          */
> -       if (atomic_read(&files->count) > 1)
> +       if (atomic_read(&files->count) > 1) {
> +               unsigned long sync_start, sync_end;
> +               unsigned long j_start, j_end;
> +               j_start = jiffies;
> +               sync_start = get_cycles();
>                 synchronize_sched();
> +               sync_end = get_cycles();
> +               j_end = jiffies;
> +               printk("expand_fdtable (%d) sync took %ld cycles (%ld µs).\n", nr, sync_end - sync_start, jiffies_to_usecs(j_end - j_start));
> +       }
>  
>         spin_lock(&files->file_lock);
>         if (!new_fdt)



  reply	other threads:[~2018-07-11 12:49 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 [this message]
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
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=20180711125137.GL3593@linux.vnet.ibm.com \
    --to=paulmck@linux.vnet.ibm.com \
    --cc=dwmw2@infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mhillenb@amazon.com \
    --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).