From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: linux-kernel@vger.kernel.org
Cc: mingo@kernel.org, laijs@cn.fujitsu.com, dipankar@in.ibm.com,
akpm@linux-foundation.org, mathieu.desnoyers@efficios.com,
josh@joshtriplett.org, tglx@linutronix.de, peterz@infradead.org,
rostedt@goodmis.org, dhowells@redhat.com, edumazet@google.com,
dvhart@linux.intel.com, fweisbec@gmail.com, oleg@redhat.com,
bobby.prani@gmail.com
Subject: [PATCH v2 tip/core/rcu 0/10] RCU-tasks implementation
Date: Wed, 30 Jul 2014 17:39:14 -0700 [thread overview]
Message-ID: <20140731003914.GA3872@linux.vnet.ibm.com> (raw)
Hello!
This series provides a prototype of an RCU-tasks implementation, which has
been requested to assist with tramopoline removal. This flavor of RCU
is task-based rather than CPU-based, and has voluntary context switch,
usermode execution, and the idle loops as its only quiescent states.
This selection of quiescent states ensures that at the end of a grace
period, there will no longer be any tasks depending on a trampoline that
was removed before the beginning of that grace period. This works because
such trampolines do not contain function calls, do not contain voluntary
context switches, do not switch to usermode, and do not switch to idle.
The patches in this series are as follows:
1. Adds the basic call_rcu_tasks() functionality.
2. Provides cond_resched_rcu_qs() to force quiescent states, including
RCU-tasks quiescent states, in long loops.
3. Adds synchronous APIs: synchronize_rcu_tasks() and
rcu_barrier_tasks().
4. Adds GPL exports for the above APIs, courtesy of Steven Rostedt.
5. Adds rcutorture tests for RCU-tasks.
6. Adds RCU-tasks test cases to rcutorture scripting.
7. Adds stall-warning checks for RCU-tasks.
8. Improves RCU-tasks energy efficiency by replacing polling with
wait/wakeup.
9. Document RCU-tasks stall-warning messages.
10. Adds synchronization with exiting tasks, preventing RCU-tasks from
waiting on exited tasks.
Changes from v1:
o The lockdep issue with list locking was finessed by ditching
list locking in favor of having the list manipulated by a single
kthread. This change trimmed about 150 highly concurrent lines
from the implementation.
o Passes more aggressive rcutorture runs, which indicates that
an increase in rcutorture's aggression is called for.
o Handled review comments from Peter Zijlstra, Lai Jiangshan,
Frederic Weisbecker, and Oleg Nesterov.
o Added RCU-tasks stall-warning documentation.
Remaining issues include:
o It is not clear that trampolines in functions called from the
idle loop are correctly handled. Or if anyone cares about
trampolines in functions called from the idle loop.
o The current implementation does not yet recognize tasks that start
out executing is usermode. Instead, it waits for the next
scheduling-clock tick to note them.
o As a result, the current implementation does not handle nohz_full=
CPUs executing tasks running in usermode. There are a couple of
possible fixes under consideration.
o If a task is preempted while executing in usermode, the RCU-tasks
grace period will not end until that task resumes. (Is there
some reasonable way to determine that a given preempted task
was preempted from usermode execution?)
o More about RCU-tasks needs to be added to Documentation/RCU.
o There are probably still bugs.
Thanx, Paul
------------------------------------------------------------------------
b/Documentation/RCU/stallwarn.txt | 33
b/Documentation/kernel-parameters.txt | 5
b/fs/file.c | 2
b/include/linux/init_task.h | 15
b/include/linux/rcupdate.h | 60 +
b/include/linux/sched.h | 30
b/init/Kconfig | 10
b/kernel/exit.c | 1
b/kernel/rcu/rcutorture.c | 44 -
b/kernel/rcu/tiny.c | 2
b/kernel/rcu/tree.c | 14
b/kernel/rcu/tree_plugin.h | 2
b/kernel/rcu/update.c | 438 ++++++++--
b/mm/mlock.c | 2
b/tools/testing/selftests/rcutorture/configs/rcu/TASKS01 | 7
b/tools/testing/selftests/rcutorture/configs/rcu/TASKS01.boot | 1
b/tools/testing/selftests/rcutorture/configs/rcu/TASKS02 | 6
b/tools/testing/selftests/rcutorture/configs/rcu/TASKS02.boot | 1
18 files changed, 590 insertions(+), 83 deletions(-)
next reply other threads:[~2014-07-31 0:39 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-31 0:39 Paul E. McKenney [this message]
2014-07-31 0:39 ` [PATCH v2 tip/core/rcu 01/10] rcu: Add call_rcu_tasks() Paul E. McKenney
2014-07-31 0:39 ` [PATCH v2 tip/core/rcu 02/10] rcu: Provide cond_resched_rcu_qs() to force quiescent states in long loops Paul E. McKenney
2014-07-31 0:39 ` [PATCH v2 tip/core/rcu 03/10] rcu: Add synchronous grace-period waiting for RCU-tasks Paul E. McKenney
2014-07-31 16:58 ` josh
2014-07-31 18:34 ` Paul E. McKenney
2014-07-31 0:39 ` [PATCH v2 tip/core/rcu 04/10] rcu: Export RCU-tasks APIs to GPL modules Paul E. McKenney
2014-07-31 16:56 ` josh
2014-07-31 20:55 ` Paul E. McKenney
2014-07-31 0:39 ` [PATCH v2 tip/core/rcu 05/10] rcutorture: Add torture tests for RCU-tasks Paul E. McKenney
2014-07-31 17:01 ` josh
2014-07-31 20:55 ` Paul E. McKenney
2014-07-31 0:39 ` [PATCH v2 tip/core/rcu 06/10] rcutorture: Add RCU-tasks test cases Paul E. McKenney
2014-07-31 0:39 ` [PATCH v2 tip/core/rcu 07/10] rcu: Add stall-warning checks for RCU-tasks Paul E. McKenney
2014-07-31 0:39 ` [PATCH v2 tip/core/rcu 08/10] rcu: Improve RCU-tasks energy efficiency Paul E. McKenney
2014-07-31 0:39 ` [PATCH v2 tip/core/rcu 09/10] documentation: Add verbiage on RCU-tasks stall warning messages Paul E. McKenney
2014-07-31 0:39 ` [PATCH v2 tip/core/rcu 10/10] rcu: Make RCU-tasks track exiting tasks Paul E. McKenney
2014-07-31 7:30 ` [PATCH v2 tip/core/rcu 01/10] rcu: Add call_rcu_tasks() Lai Jiangshan
2014-07-31 16:09 ` Paul E. McKenney
2014-07-31 16:20 ` Peter Zijlstra
2014-07-31 16:47 ` Paul E. McKenney
2014-07-31 16:57 ` Peter Zijlstra
2014-07-31 16:31 ` Oleg Nesterov
2014-07-31 17:02 ` Paul E. McKenney
2014-07-31 17:27 ` Oleg Nesterov
2014-07-31 17:44 ` Paul E. McKenney
2014-08-01 0:53 ` Lai Jiangshan
2014-08-01 2:09 ` Paul E. McKenney
2014-08-01 15:53 ` Oleg Nesterov
2014-08-01 18:19 ` Paul E. McKenney
2014-08-01 18:36 ` Oleg Nesterov
2014-07-31 16:19 ` [PATCH v2 tip/core/rcu 0/10] RCU-tasks implementation josh
2014-07-31 16:30 ` Peter Zijlstra
2014-07-31 16:43 ` josh
2014-07-31 16:49 ` Paul E. McKenney
2014-07-31 16:58 ` Paul E. McKenney
2014-07-31 17:20 ` josh
2014-07-31 18:38 ` Paul E. McKenney
2014-07-31 20:58 ` josh
2014-07-31 21:11 ` Paul E. McKenney
2014-07-31 19:29 ` Andi Kleen
2014-07-31 21:08 ` 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=20140731003914.GA3872@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=bobby.prani@gmail.com \
--cc=dhowells@redhat.com \
--cc=dipankar@in.ibm.com \
--cc=dvhart@linux.intel.com \
--cc=edumazet@google.com \
--cc=fweisbec@gmail.com \
--cc=josh@joshtriplett.org \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mingo@kernel.org \
--cc=oleg@redhat.com \
--cc=peterz@infradead.org \
--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 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).