All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: linux-kernel@vger.kernel.org, mingo@elte.hu,
	laijs@cn.fujitsu.com, dipankar@in.ibm.com,
	akpm@linux-foundation.org, mathieu.desnoyers@polymtl.ca,
	josh@joshtriplett.org, niv@us.ibm.com, tglx@linutronix.de,
	rostedt@goodmis.org, Valdis.Kletnieks@vt.edu,
	dhowells@redhat.com, eric.dumazet@gmail.com, darren@dvhart.com,
	patches@linaro.org
Subject: Re: [PATCH tip/core/rcu 01/28] rcu: Simplify curing of load woes
Date: Fri, 10 Jun 2011 16:18:32 +0200	[thread overview]
Message-ID: <1307715512.3941.168.camel@twins> (raw)
In-Reply-To: <1307561407-13809-1-git-send-email-paulmck@linux.vnet.ibm.com>

On Wed, 2011-06-08 at 12:29 -0700, Paul E. McKenney wrote:
> Make the functions creating the kthreads wake them up.  Leverage the
> fact that the per-node and boost kthreads can run anywhere, thus
> dispensing with the need to wake them up once the incoming CPU has
> gone fully online.

Indeed, I failed to notice the node and boost threads weren't bound.

> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> ---
>  kernel/rcutree.c        |   65 +++++++++++++++-------------------------------
>  kernel/rcutree_plugin.h |   11 +-------
>  2 files changed, 22 insertions(+), 54 deletions(-)
> 
> diff --git a/kernel/rcutree.c b/kernel/rcutree.c
> index 4cc6a94..36e79d2 100644
> --- a/kernel/rcutree.c
> +++ b/kernel/rcutree.c
> @@ -1634,6 +1634,20 @@ static int rcu_cpu_kthread(void *arg)
>   * to manipulate rcu_cpu_kthread_task.  There might be another CPU
>   * attempting to access it during boot, but the locking in kthread_bind()
>   * will enforce sufficient ordering.
> + *
> + * Please note that we cannot simply refuse to wake up the per-CPU
> + * kthread because kthreads are created in TASK_UNINTERRUPTIBLE state,
> + * which can result in softlockup complaints if the task ends up being
> + * idle for more than a couple of minutes.
> + *
> + * However, please note also that we cannot bind the per-CPU kthread to its
> + * CPU until that CPU is fully online.  We also cannot wait until the
> + * CPU is fully online before we create its per-CPU kthread, as this would
> + * deadlock the system when CPU notifiers tried waiting for grace
> + * periods.  So we bind the per-CPU kthread to its CPU only if the CPU
> + * is online.  If its CPU is not yet fully online, then the code in
> + * rcu_cpu_kthread() will wait until it is fully online, and then do
> + * the binding.
>   */
>  static int __cpuinit rcu_spawn_one_cpu_kthread(int cpu)
>  {
> @@ -1646,12 +1660,14 @@ static int __cpuinit rcu_spawn_one_cpu_kthread(int cpu)
>         t = kthread_create(rcu_cpu_kthread, (void *)(long)cpu, "rcuc%d", cpu);
>         if (IS_ERR(t))
>                 return PTR_ERR(t);
> -       kthread_bind(t, cpu);
> +       if (cpu_online(cpu))
> +               kthread_bind(t, cpu);
>         per_cpu(rcu_cpu_kthread_cpu, cpu) = cpu;
>         WARN_ON_ONCE(per_cpu(rcu_cpu_kthread_task, cpu) != NULL);
> -       per_cpu(rcu_cpu_kthread_task, cpu) = t;
>         sp.sched_priority = RCU_KTHREAD_PRIO;
>         sched_setscheduler_nocheck(t, SCHED_FIFO, &sp);
> +       per_cpu(rcu_cpu_kthread_task, cpu) = t;
> +       wake_up_process(t); /* Get to TASK_INTERRUPTIBLE quickly. */
>         return 0;
>  } 

I'm not quite seeing how this is working though, I cannot find any code
in rcu_cpu_kthread() that sets the thread affinity (not a hunk in this
patch that adds it).

  reply	other threads:[~2011-06-10 14:19 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-08 19:29 [PATCH tip/core/rcu 0/28] patches queued for 3.1, first installment Paul E. McKenney
2011-06-08 19:29 ` [PATCH tip/core/rcu 01/28] rcu: Simplify curing of load woes Paul E. McKenney
2011-06-10 14:18   ` Peter Zijlstra [this message]
2011-06-10 19:53     ` Paul E. McKenney
2011-06-08 19:29 ` [PATCH tip/core/rcu 02/28] rcu: Use kthread_create_on_node() Paul E. McKenney
2011-06-08 19:29 ` [PATCH tip/core/rcu 03/28] rcu: Streamline code produced by __rcu_read_unlock() Paul E. McKenney
2011-06-08 23:17   ` Mathieu Desnoyers
     [not found]   ` <BLU0-SMTP16E45D0FAD13ACF913B28B96620@phx.gbl>
2011-06-08 23:58     ` Paul E. McKenney
2011-06-09  3:45   ` Josh Triplett
2011-06-09 14:17     ` Paul E. McKenney
2011-06-10  7:14   ` Lai Jiangshan
2011-06-10 19:35     ` Paul E. McKenney
2011-06-08 19:29 ` [PATCH tip/core/rcu 04/28] rcu: Restore checks for blocking in RCU read-side critical sections Paul E. McKenney
2011-06-08 23:28   ` Frederic Weisbecker
2011-06-08 23:46     ` Paul E. McKenney
2011-06-08 23:48       ` Frederic Weisbecker
2011-06-08 19:29 ` [PATCH tip/core/rcu 05/28] rcu: Move rcu_head definition to types.h Paul E. McKenney
2011-06-08 23:26   ` Mathieu Desnoyers
     [not found]   ` <BLU0-SMTP635E2E394E1488A2717A5B96620@phx.gbl>
2011-06-09  0:02     ` Paul E. McKenney
2011-06-09  0:11       ` Mathieu Desnoyers
     [not found]       ` <BLU0-SMTP796363CC311D3AB84B196996650@phx.gbl>
2011-06-09 18:38         ` Paul E. McKenney
2011-06-09 20:12           ` Mathieu Desnoyers
2011-06-08 19:29 ` [PATCH tip/core/rcu 06/28] rcu: Update rcutorture documentation Paul E. McKenney
2011-06-08 19:29 ` [PATCH tip/core/rcu 07/28] Fix mismatched variable in rcutree_trace.c Paul E. McKenney
2011-06-08 23:23   ` Mathieu Desnoyers
     [not found]   ` <BLU0-SMTP181D8DEE03E1353C8A106396620@phx.gbl>
2011-06-09  0:03     ` Paul E. McKenney
2011-06-08 19:29 ` [PATCH tip/core/rcu 08/28] rcu: Abstract common code for RCU grace-period-wait primitives Paul E. McKenney
2011-06-08 19:29 ` [PATCH tip/core/rcu 09/28] rcu: Catch rcutorture up to new RCU API additions Paul E. McKenney
2011-06-08 19:29 ` [PATCH tip/core/rcu 10/28] rcu: Fix RCU's NMI documentation Paul E. McKenney
2011-06-08 23:19   ` Mathieu Desnoyers
2011-06-08 19:29 ` [PATCH tip/core/rcu 11/28] audit_tree,rcu: Convert call_rcu(__put_tree) to kfree_rcu() Paul E. McKenney
2011-06-08 19:29 ` [PATCH tip/core/rcu 12/28] block,rcu: Convert call_rcu(cfq_cfqd_free) " Paul E. McKenney
2011-06-08 19:29 ` [PATCH tip/core/rcu 13/28] nfs,rcu: Convert call_rcu(nfs_free_delegation_callback) " Paul E. McKenney
2011-06-09 17:12   ` Trond Myklebust
2011-06-08 19:29 ` [PATCH tip/core/rcu 14/28] security,rcu: Convert call_rcu(whitelist_item_free) " Paul E. McKenney
2011-06-09  0:39   ` James Morris
2011-06-09 18:45     ` Paul E. McKenney
2011-06-08 19:29 ` [PATCH tip/core/rcu 15/28] scsi,rcu: Convert call_rcu(fc_rport_free_rcu) " Paul E. McKenney
2011-06-08 19:29 ` [PATCH tip/core/rcu 16/28] block,rcu: Convert call_rcu(disk_free_ptbl_rcu_cb) " Paul E. McKenney
2011-06-08 19:29 ` [PATCH tip/core/rcu 17/28] ia64,rcu: Convert call_rcu(sn_irq_info_free) " Paul E. McKenney
2011-06-08 19:29 ` [PATCH tip/core/rcu 18/28] jbd2,rcu: Convert call_rcu(free_devcache) " Paul E. McKenney
2011-06-08 19:34   ` Jan Kara
2011-06-08 19:47     ` Paul E. McKenney
2011-06-08 19:29 ` [PATCH tip/core/rcu 19/28] md,rcu: Convert call_rcu(free_conf) " Paul E. McKenney
2011-06-09  2:03   ` NeilBrown
2011-06-08 19:29 ` [PATCH tip/core/rcu 20/28] security,rcu: Convert call_rcu(sel_netnode_free) " Paul E. McKenney
2011-06-08 19:30 ` [PATCH tip/core/rcu 21/28] security,rcu: Convert call_rcu(sel_netport_free) " Paul E. McKenney
2011-06-08 19:30 ` [PATCH tip/core/rcu 22/28] ipc,rcu: Convert call_rcu(free_un) " Paul E. McKenney
2011-06-08 19:30 ` [PATCH tip/core/rcu 23/28] ipc,rcu: Convert call_rcu(ipc_immediate_free) " Paul E. McKenney
2011-06-08 19:30 ` [PATCH tip/core/rcu 24/28] vmalloc,rcu: Convert call_rcu(rcu_free_va) " Paul E. McKenney
2011-06-08 19:30 ` [PATCH tip/core/rcu 25/28] vmalloc,rcu: Convert call_rcu(rcu_free_vb) " Paul E. McKenney
2011-06-08 19:30 ` [PATCH tip/core/rcu 26/28] sysctl,rcu: Convert call_rcu(free_head) to kfree Paul E. McKenney
2011-06-08 19:30 ` [PATCH tip/core/rcu 27/28] net,rcu: Convert call_rcu(xt_rateest_free_rcu) to kfree_rcu() Paul E. McKenney
2011-06-08 19:30 ` [PATCH tip/core/rcu 28/28] net,rcu: Convert call_rcu(sk_filter_release_rcu) to kfree_rcu 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=1307715512.3941.168.camel@twins \
    --to=peterz@infradead.org \
    --cc=Valdis.Kletnieks@vt.edu \
    --cc=akpm@linux-foundation.org \
    --cc=darren@dvhart.com \
    --cc=dhowells@redhat.com \
    --cc=dipankar@in.ibm.com \
    --cc=eric.dumazet@gmail.com \
    --cc=josh@joshtriplett.org \
    --cc=laijs@cn.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@polymtl.ca \
    --cc=mingo@elte.hu \
    --cc=niv@us.ibm.com \
    --cc=patches@linaro.org \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    /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.