Currently, we print the runnable task in /proc/sched_debug, but there is no
task state information.
We don't know which task is in runqueue, and which task is in sleep. For the
convenience of debugging,
in this patch, we add task state in runnable task list, like this:
runnable tasks:
S task PID tree-key switches prio wait-time
sum-exec sum-sleep
-----------------------------------------------------------------------------------------------------------
S watchdog/239 1452 -11.917445 2811 0 0.000000
8.949306 0.000000 7 0 /
S migration/239 1453 20686.367740 8 0 0.000000
16215.720897 0.000000 7 0 /
S ksoftirqd/239 1454 115383.841071 12 120 0.000000
0.200683 0.000000 7 0 /
>R test 21287 4872.190970 407 120 0.000000
4874.911790 0.000000 7 0 /autogroup-150
R test 21288 4868.385454 401 120 0.000000
3672.341489 0.000000 7 0 /autogroup-150
R test 21289 4868.326776 384 120 0.000000
3424.934159 0.000000 7 0 /autogroup-150
Signed-off-by: Xie XiuQi <[email protected]>
---
kernel/sched/debug.c | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c
index 38f0193..60f7e20 100644
--- a/kernel/sched/debug.c
+++ b/kernel/sched/debug.c
@@ -421,13 +421,19 @@ static char *task_group_path(struct task_group *tg)
}
#endif
+static const char stat_nam[] = TASK_STATE_TO_CHAR_STR;
+
static void
print_task(struct seq_file *m, struct rq *rq, struct task_struct *p)
{
- if (rq->curr == p)
- SEQ_printf(m, "R");
- else
- SEQ_printf(m, " ");
+ unsigned long state;
+
+ if (rq->curr == p) {
+ SEQ_printf(m, ">R");
+ } else {
+ state = p->state ? __ffs(p->state) + 1 : 0;
+ SEQ_printf(m, " %c", state < sizeof(stat_nam) - 1 ?
stat_nam[state] : '?');
+ }
SEQ_printf(m, "%15s %5d %9Ld.%06ld %9Ld %5d ",
p->comm, task_pid_nr(p),
@@ -456,9 +462,9 @@ static void print_rq(struct seq_file *m, struct rq *rq, int
rq_cpu)
SEQ_printf(m,
"\nrunnable tasks:\n"
- " task PID tree-key switches prio"
+ " S task PID tree-key switches prio"
" wait-time sum-exec sum-sleep\n"
- "------------------------------------------------------"
+ "-------------------------------------------------------"
"----------------------------------------------------\n");
rcu_read_lock();
--
1.8.3.1