rcu: Trace expedited GP delays due to transitioning CPUs
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Thu, 1 Feb 2018 03:40:22 +0000 (19:40 -0800)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Wed, 21 Feb 2018 00:12:28 +0000 (16:12 -0800)
If a CPU is transitioning to or from offline state, an expedited
grace period may undergo a timed wait.  This timed wait can unduly
delay grace periods, so this commit adds a trace statement to make
it visible.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
include/trace/events/rcu.h
kernel/rcu/tree_exp.h

index e56a618..d8c3329 100644 (file)
@@ -181,6 +181,7 @@ TRACE_EVENT(rcu_grace_period_init,
  *     "start": Started a real expedited grace period.
  *     "reset": Started resetting the tree
  *     "select": Started selecting the CPUs to wait on.
+ *     "selectofl": Selected CPU partially offline.
  *     "startwait": Started waiting on selected CPUs.
  *     "end": Ended a real expedited grace period.
  *     "endwake": Woke piggybackers up.
index 70ad12a..fecb6b6 100644 (file)
@@ -32,7 +32,7 @@ static void rcu_exp_gp_seq_start(struct rcu_state *rsp)
  * Return then value that expedited-grace-period counter will have
  * at the end of the current grace period.
  */
-static unsigned long rcu_exp_gp_seq_endval(struct rcu_state *rsp)
+static __maybe_unused unsigned long rcu_exp_gp_seq_endval(struct rcu_state *rsp)
 {
        return rcu_seq_endval(&rsp->expedited_sequence);
 }
@@ -428,6 +428,7 @@ retry_ipi:
                            (rnp->expmask & mask)) {
                                /* Online, so delay for a bit and try again. */
                                raw_spin_unlock_irqrestore_rcu_node(rnp, flags);
+                               trace_rcu_exp_grace_period(rsp->name, rcu_exp_gp_seq_endval(rsp), TPS("selectofl"));
                                schedule_timeout_uninterruptible(1);
                                goto retry_ipi;
                        }