rcuscale: Measure RCU Tasks Trace grace-period kthread CPU time
authorPaul E. McKenney <paulmck@kernel.org>
Fri, 2 Jun 2023 21:38:44 +0000 (14:38 -0700)
committerPaul E. McKenney <paulmck@kernel.org>
Fri, 14 Jul 2023 22:01:49 +0000 (15:01 -0700)
This commit causes RCU Tasks Trace to output the CPU time consumed by
its grace-period kthread.  The CPU time is whatever is in the designated
task's current->stime field, and thus is controlled by whatever CPU-time
accounting scheme is in effect.

This output appears in microseconds as follows on the console:

rcu_scale: Grace-period kthread CPU time: 42367.037

[ paulmck: Apply Willy Tarreau feedback. ]

Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
kernel/rcu/rcu.h
kernel/rcu/rcuscale.c
kernel/rcu/tasks.h

index 98c1544cf572bd4bca9f2dac641e5b23835fd363..d58bc0e8676918bc48c6b0cbf1ea1a473f8cc412 100644 (file)
@@ -505,6 +505,9 @@ void rcu_async_relax(void);
 void rcupdate_announce_bootup_oddness(void);
 #ifdef CONFIG_TASKS_RCU_GENERIC
 void show_rcu_tasks_gp_kthreads(void);
+# ifdef CONFIG_TASKS_RCU
+struct task_struct *get_rcu_tasks_gp_kthread(void);
+# endif // # ifdef CONFIG_TASKS_RCU
 #else /* #ifdef CONFIG_TASKS_RCU_GENERIC */
 static inline void show_rcu_tasks_gp_kthreads(void) {}
 #endif /* #else #ifdef CONFIG_TASKS_RCU_GENERIC */
index 7fba3ab66e35acdc8197f4199555ab755f382995..35e06c86acc981f0bd11c5ecaefd62b7d8a9cc13 100644 (file)
@@ -298,6 +298,7 @@ static struct rcu_scale_ops tasks_ops = {
        .gp_barrier     = rcu_barrier_tasks,
        .sync           = synchronize_rcu_tasks,
        .exp_sync       = synchronize_rcu_tasks,
+       .rso_gp_kthread = get_rcu_tasks_gp_kthread,
        .name           = "tasks"
 };
 
index 990a6cf5fa3511f935f3bddaade565654dee35ef..0f03de023097d7f2fab1e57eb94ee837e0104bed 100644 (file)
@@ -1042,6 +1042,12 @@ void show_rcu_tasks_classic_gp_kthread(void)
 EXPORT_SYMBOL_GPL(show_rcu_tasks_classic_gp_kthread);
 #endif // !defined(CONFIG_TINY_RCU)
 
+struct task_struct *get_rcu_tasks_gp_kthread(void)
+{
+       return rcu_tasks.kthread_ptr;
+}
+EXPORT_SYMBOL_GPL(get_rcu_tasks_gp_kthread);
+
 /*
  * Contribute to protect against tasklist scan blind spot while the
  * task is exiting and may be removed from the tasklist. See