forked from luck/tmp_suning_uos_patched
locking/lockdep: Report more stack trace statistics
Report the number of stack traces and the number of stack trace hash chains. These two numbers are useful because these allow to estimate the number of stack trace hash collisions. Signed-off-by: Bart Van Assche <bvanassche@acm.org> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Waiman Long <longman@redhat.com> Cc: Will Deacon <will.deacon@arm.com> Link: https://lkml.kernel.org/r/20190722182443.216015-5-bvanassche@acm.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
12593b7467
commit
8c779229d0
|
@ -516,6 +516,35 @@ static struct lock_trace *save_trace(void)
|
||||||
|
|
||||||
return trace;
|
return trace;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return the number of stack traces in the stack_trace[] array. */
|
||||||
|
u64 lockdep_stack_trace_count(void)
|
||||||
|
{
|
||||||
|
struct lock_trace *trace;
|
||||||
|
u64 c = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(stack_trace_hash); i++) {
|
||||||
|
hlist_for_each_entry(trace, &stack_trace_hash[i], hash_entry) {
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return the number of stack hash chains that have at least one stack trace. */
|
||||||
|
u64 lockdep_stack_hash_count(void)
|
||||||
|
{
|
||||||
|
u64 c = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(stack_trace_hash); i++)
|
||||||
|
if (!hlist_empty(&stack_trace_hash[i]))
|
||||||
|
c++;
|
||||||
|
|
||||||
|
return c;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
unsigned int nr_hardirq_chains;
|
unsigned int nr_hardirq_chains;
|
||||||
|
|
|
@ -140,6 +140,10 @@ extern unsigned int max_bfs_queue_depth;
|
||||||
#ifdef CONFIG_PROVE_LOCKING
|
#ifdef CONFIG_PROVE_LOCKING
|
||||||
extern unsigned long lockdep_count_forward_deps(struct lock_class *);
|
extern unsigned long lockdep_count_forward_deps(struct lock_class *);
|
||||||
extern unsigned long lockdep_count_backward_deps(struct lock_class *);
|
extern unsigned long lockdep_count_backward_deps(struct lock_class *);
|
||||||
|
#ifdef CONFIG_TRACE_IRQFLAGS
|
||||||
|
u64 lockdep_stack_trace_count(void);
|
||||||
|
u64 lockdep_stack_hash_count(void);
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
static inline unsigned long
|
static inline unsigned long
|
||||||
lockdep_count_forward_deps(struct lock_class *class)
|
lockdep_count_forward_deps(struct lock_class *class)
|
||||||
|
|
|
@ -285,6 +285,12 @@ static int lockdep_stats_show(struct seq_file *m, void *v)
|
||||||
nr_process_chains);
|
nr_process_chains);
|
||||||
seq_printf(m, " stack-trace entries: %11lu [max: %lu]\n",
|
seq_printf(m, " stack-trace entries: %11lu [max: %lu]\n",
|
||||||
nr_stack_trace_entries, MAX_STACK_TRACE_ENTRIES);
|
nr_stack_trace_entries, MAX_STACK_TRACE_ENTRIES);
|
||||||
|
#if defined(CONFIG_TRACE_IRQFLAGS) && defined(CONFIG_PROVE_LOCKING)
|
||||||
|
seq_printf(m, " number of stack traces: %llu\n",
|
||||||
|
lockdep_stack_trace_count());
|
||||||
|
seq_printf(m, " number of stack hash chains: %llu\n",
|
||||||
|
lockdep_stack_hash_count());
|
||||||
|
#endif
|
||||||
seq_printf(m, " combined max dependencies: %11u\n",
|
seq_printf(m, " combined max dependencies: %11u\n",
|
||||||
(nr_hardirq_chains + 1) *
|
(nr_hardirq_chains + 1) *
|
||||||
(nr_softirq_chains + 1) *
|
(nr_softirq_chains + 1) *
|
||||||
|
|
Loading…
Reference in New Issue
Block a user