Markers Implementation for Preempt RCU Boost Tracing
PATCH 2/2 Markers Implementation for Preempt RCU Boost Tracing
This patch converts the tracing mechanism of Preempt RCU boosting into markers. The handler functions for these markers are included inside rcupreempt_trace.c and will be included only when PREEMPT_RCU_BOOST is chosen.
Signed-off-by K.Prasad <[email protected]>
--- include/linux/rcupreempt_trace.h | 46 ++++++++ kernel/rcupreempt-boost.c | 211 ++++----------------------------------- kernel/rcupreempt_trace.c | 183 +++++++++++++++++++++++++++++++++ 3 files changed, 251 insertions(+), 189 deletions(-)
include/linux/rcupreempt_trace.h +46 -0
@@ -102,5 +102,51 @@ extern int rcupreempt_flip_flag(int cpu)extern int rcupreempt_mb_flag (int cpu);extern char *rcupreempt_try_flip_state_name (void ); +#ifdef CONFIG_PREEMPT_RCU_BOOST +struct preempt_rcu_boost_trace { +unsigned long rbs_stat_task_boost_called; +unsigned long rbs_stat_task_boosted; +unsigned long rbs_stat_boost_called; +unsigned long rbs_stat_try_boost; +unsigned long rbs_stat_boosted; +unsigned long rbs_stat_unboost_called; +unsigned long rbs_stat_unboosted; +unsigned long rbs_stat_try_boost_readers; +unsigned long rbs_stat_boost_readers; +unsigned long rbs_stat_try_unboost_readers; +unsigned long rbs_stat_unboost_readers; +unsigned long rbs_stat_over_taken; +}; + +#define DEFINE_PREEMPT_RCU_BOOST_MARKER_HANDLER (preempt_rcu_boost_var) \ +void preempt_rcu_boost_var##_callback(const struct marker *mdata, \ + void *private_data, const char *format, ...) \ +{ \ + va_list ap; \ + int cpu; \ + struct preempt_rcu_boost_trace *boost_trace; \ + va_start(ap, format); \ + cpu = va_arg(ap, typeof(unsigned int)); \ + boost_trace = (&per_cpu(boost_trace_data, cpu)); \ + boost_trace->rbs_stat_##preempt_rcu_boost_var++; \ + va_end(ap); \ +} + +struct preempt_rcu_boost_probe { +const char *name; +const char *format; +marker_probe_func *probe_func; +}; + +#define INIT_PREEMPT_RCU_BOOST_PROBE (preempt_rcu_boost_probe_worker) \ +{ \ + .name = __stringify(preempt_rcu_boost_probe_worker), \ + .format = "%u", \ + .probe_func = preempt_rcu_boost_probe_worker##_callback \ +} + +extern int read_rcu_boost_prio (void ); +#endif /* CONFIG_PREEMPT_RCU_BOOST */ +#endif /* __KERNEL__ */ #endif /* __LINUX_RCUPREEMPT_TRACE_H */
kernel/rcupreempt_trace.c +183 -0
207 lines not on this page · raw message
kernel/rcupreempt-boost.c +22 -189
292 lines not on this page · raw message