diff options
author | Peter Zijlstra <a.p.zijlstra@chello.nl> | 2008-04-19 21:45:00 +0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-04-19 21:45:00 +0400 |
commit | 7ba2e74ab5a0518bc953042952dd165724bc70c9 (patch) | |
tree | c6a1495130ebef022f21cb3b7acde0842588acb4 | |
parent | 8f1bc385cfbab474db6c27b5af1e439614f3025c (diff) | |
download | linux-7ba2e74ab5a0518bc953042952dd165724bc70c9.tar.xz |
sched: debug: show a weight tree
Print a tree of weights.
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r-- | kernel/sched_fair.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c index d72e8b41b3e4..89fa32b4edf2 100644 --- a/kernel/sched_fair.c +++ b/kernel/sched_fair.c @@ -1611,6 +1611,30 @@ static const struct sched_class fair_sched_class = { }; #ifdef CONFIG_SCHED_DEBUG +static void +print_cfs_rq_tasks(struct seq_file *m, struct cfs_rq *cfs_rq, int depth) +{ + struct sched_entity *se; + + if (!cfs_rq) + return; + + list_for_each_entry_rcu(se, &cfs_rq->tasks, group_node) { + int i; + + for (i = depth; i; i--) + seq_puts(m, " "); + + seq_printf(m, "%lu %s %lu\n", + se->load.weight, + entity_is_task(se) ? "T" : "G", + calc_delta_weight(SCHED_LOAD_SCALE, se) + ); + if (!entity_is_task(se)) + print_cfs_rq_tasks(m, group_cfs_rq(se), depth + 1); + } +} + static void print_cfs_stats(struct seq_file *m, int cpu) { struct cfs_rq *cfs_rq; @@ -1618,6 +1642,9 @@ static void print_cfs_stats(struct seq_file *m, int cpu) rcu_read_lock(); for_each_leaf_cfs_rq(cpu_rq(cpu), cfs_rq) print_cfs_rq(m, cpu, cfs_rq); + + seq_printf(m, "\nWeight tree:\n"); + print_cfs_rq_tasks(m, &cpu_rq(cpu)->cfs, 1); rcu_read_unlock(); } #endif |