diff options
author | Mathieu Poirier <mathieu.poirier@linaro.org> | 2017-07-19 14:51:49 -0600 |
---|---|---|
committer | Mathieu Poirier <mathieu.poirier@linaro.org> | 2018-02-13 10:05:39 -0700 |
commit | 4a95e8ab088160dbede104900f6a35d20db9a79b (patch) | |
tree | d2e66cda88d240f0350a2a52399a4fe7139c0a01 | |
parent | 9d6fed8706ca6d594ca85e77180329cb16e2adc1 (diff) |
sched/debug: Add 'rq_debug' proc entry
-rw-r--r-- | kernel/sched/debug.c | 47 |
1 files changed, 45 insertions, 2 deletions
diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c index 1ca0130ed4f9..0dcf9355941f 100644 --- a/kernel/sched/debug.c +++ b/kernel/sched/debug.c @@ -623,21 +623,37 @@ void print_rt_rq(struct seq_file *m, int cpu, struct rt_rq *rt_rq) void print_dl_rq(struct seq_file *m, int cpu, struct dl_rq *dl_rq) { struct dl_bw *dl_bw; +#ifdef CONFIG_SMP + struct rq *rq = container_of(dl_rq, struct rq, dl); +#endif SEQ_printf(m, "\ndl_rq[%d]:\n", cpu); #define PU(x) \ SEQ_printf(m, " .%-30s: %lu\n", #x, (unsigned long)(dl_rq->x)) +#ifdef CONFIG_SMP + SEQ_printf(m, " .%-30s: %s\n", "online", rq->online ? "yes":"no"); +#endif PU(dl_nr_running); + PU(running_bw); + PU(this_bw); + +#ifdef CONFIG_SMP + SEQ_printf(m, " .%-30s: %*pbl (%s)\n", + "rd->span", cpumask_pr_args(rq->rd->span), + rq->rd == &def_root_domain ? "default" : "normal"); +#endif + #ifdef CONFIG_SMP PU(dl_nr_migratory); dl_bw = &cpu_rq(cpu)->rd->dl_bw; + SEQ_printf(m, " .%-30s: %lld\n", "rd->dl_bw->bw", + dl_bw->bw * cpumask_weight(rq->rd->span)); #else dl_bw = &dl_rq->dl_bw; #endif - SEQ_printf(m, " .%-30s: %lld\n", "dl_bw->bw", dl_bw->bw); - SEQ_printf(m, " .%-30s: %lld\n", "dl_bw->total_bw", dl_bw->total_bw); + SEQ_printf(m, " .%-30s: %lld\n", "rd->dl_bw->total_bw", dl_bw->total_bw); #undef PU } @@ -864,6 +880,28 @@ static const struct file_operations sched_debug_fops = { .release = sched_debug_release, }; +static int rq_debug_show(struct seq_file *seq, void *v) +{ + int cpu; + + for_each_possible_cpu(cpu) + print_dl_stats(seq, cpu); + + return 0; +} + +static int rq_debug_open(struct inode *inode, struct file *file) +{ + return single_open(file, rq_debug_show, NULL); +} + +static const struct file_operations rq_debug_fops = { + .open = rq_debug_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, +}; + static int __init init_sched_debug_procfs(void) { struct proc_dir_entry *pe; @@ -871,6 +909,11 @@ static int __init init_sched_debug_procfs(void) pe = proc_create("sched_debug", 0444, NULL, &sched_debug_fops); if (!pe) return -ENOMEM; + + pe = proc_create("rq_debug", 0444, NULL, &rq_debug_fops); + if (!pe) + return -ENOMEM; + return 0; } |