From 7bc0b00bd90f5ae1bb8baa22027277817350c656 Mon Sep 17 00:00:00 2001 From: Qiao Nuohan Date: Sun, 28 Sep 2014 16:22:26 +0800 Subject: [PATCH v3 20/21] modify runq to hide offline cpus' data With the patch, runq [-t/-m/-g/-d] can hide data on offline cpus. The original output of thest command is like below: crash> runq CPU 0 RUNQUEUE: ffff88002c216680 CURRENT: PID: 0 TASK: ffffffff81a8d020 COMMAND: "swapper" RT PRIO_ARRAY: ffff88002c216808 [no tasks queued] CFS RB_ROOT: ffff88002c216718 [no tasks queued] ... CPU 3 RUNQUEUE: ffff88002c396680 CURRENT: PID: 0 TASK: ffff880219f9aaa0 COMMAND: "swapper" RT PRIO_ARRAY: ffff88002c396808 [no tasks queued] CFS RB_ROOT: ffff88002c396718 [no tasks queued] crash> runq -t CPU 0: 107470918732460 000000000000000 PID: 0 TASK: ffffffff81a8d020 COMMAND: "swapper" CPU 1: 107470922094506 000000000000000 PID: 0 TASK: ffff880219f5b540 COMMAND: "swapper" CPU 2: 107470921985118 107470921000315 PID: 16905 TASK: ffff88018f6e3500 COMMAND: "crash" CPU 3: 15082503595357 00000000000000 PID: 0 TASK: ffff880219f9aaa0 COMMAND: "swapper" crash> runq -m CPU 0: [1 05:51:25.919] PID: 0 TASK: ffffffff81a8d020 COMMAND: "swapper" CPU 1: [0 00:00:00.002] PID: 16905 TASK: ffff88018f6e3500 COMMAND: "crash" CPU 2: [1 05:51:25.911] PID: 0 TASK: ffff880219f64040 COMMAND: "swapper" CPU 3: [0 04:11:22.503] PID: 0 TASK: ffff880219f9aaa0 COMMAND: "swapper" crash> runq -g CPU 0 CURRENT: PID: 0 TASK: ffffffff81a8d020 COMMAND: "swapper" INIT_TASK_GROUP: ffffffff81e1f780 RT_RQ: ffff88002c216808 [no tasks queued] INIT_TASK_GROUP: ffffffff81e1f780 CFS_RQ: ffff88002c2166e8 [no tasks queued] ... CPU 3 CURRENT: PID: 0 TASK: ffff880219f9aaa0 COMMAND: "swapper" INIT_TASK_GROUP: ffffffff81e1f780 RT_RQ: ffff88002c396808 [no tasks queued] INIT_TASK_GROUP: ffffffff81e1f780 CFS_RQ: ffff88002c3966e8 [no tasks queued] crash> runq -d CPU 0 [no tasks queued] CPU 1 [120] PID: 2760 TASK: ffff88021305aaa0 COMMAND: "Xorg" CPU 2 [120] PID: 16905 TASK: ffff88018f6e3500 COMMAND: "crash" CPU 3 [no tasks queued] With data of offline cpu(cpu #3) hiden, the output is like below: crash> runq CPU 0 RUNQUEUE: ffff88002c216680 CURRENT: PID: 0 TASK: ffffffff81a8d020 COMMAND: "swapper" RT PRIO_ARRAY: ffff88002c216808 [no tasks queued] CFS RB_ROOT: ffff88002c216718 [no tasks queued] ... CPU 2 RUNQUEUE: ffff88002c316680 CURRENT: PID: 16905 TASK: ffff88018f6e3500 COMMAND: "crash" RT PRIO_ARRAY: ffff88002c316808 [no tasks queued] CFS RB_ROOT: ffff88002c316718 [no tasks queued] CPU 3 [OFFLINE] crash> runq -t CPU 0: 107605503006397 107605495037692 PID: 16905 TASK: ffff88018f6e3500 COMMAND: "crash" CPU 1: 107605503645955 000000000000000 PID: 0 TASK: ffff880219f5b540 COMMAND: "swapper" CPU 2: 107605500267130 000000000000000 PID: 0 TASK: ffff880219f64040 COMMAND: "swapper" CPU 3: [OFFLINE] crash> runq -m CPU 0: [1 05:53:41.958] PID: 0 TASK: ffffffff81a8d020 COMMAND: "swapper" CPU 1: [1 05:53:41.959] PID: 0 TASK: ffff880219f5b540 COMMAND: "swapper" CPU 2: [0 00:00:00.000] PID: 16905 TASK: ffff88018f6e3500 COMMAND: "crash" CPU 3: [OFFLINE] crash> runq -g CPU 0 CURRENT: PID: 0 TASK: ffffffff81a8d020 COMMAND: "swapper" INIT_TASK_GROUP: ffffffff81e1f780 RT_RQ: ffff88002c216808 [no tasks queued] INIT_TASK_GROUP: ffffffff81e1f780 CFS_RQ: ffff88002c2166e8 [no tasks queued] ... CPU 2 CURRENT: PID: 0 TASK: ffff880219f64040 COMMAND: "swapper" INIT_TASK_GROUP: ffffffff81e1f780 RT_RQ: ffff88002c316808 [no tasks queued] INIT_TASK_GROUP: ffffffff81e1f780 CFS_RQ: ffff88002c3166e8 [no tasks queued] CPU 3 [OFFLINE] crash> runq -d CPU 0 [no tasks queued] CPU 1 [120] PID: 16905 TASK: ffff88018f6e3500 COMMAND: "crash" CPU 2 [no tasks queued] CPU 3 [OFFLINE] Signed-off-by: Qiao Nuohan --- task.c | 49 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/task.c b/task.c index 86be744..b8ff658 100755 --- a/task.c +++ b/task.c @@ -7619,8 +7619,14 @@ dump_on_rq_timestamp(void) sprintf(buf, pc->output_radix == 10 ? "%llu" : "%llx", timestamp); - fprintf(fp, "%sCPU %d: %s\n", cpu < 10 ? " " : "", - cpu, buf); + fprintf(fp, "%sCPU %d: ", cpu < 10 ? " " : "", cpu); + + if (hide_offline_cpu(cpu)) { + fprintf(fp, "[OFFLINE]\n"); + continue; + } else + fprintf(fp, "%s\n", buf); + len = strlen(buf); if ((tc = task_to_context(tt->active_set[cpu]))){ @@ -7699,6 +7705,11 @@ dump_on_rq_milliseconds(void) else indent = max_indent - 4; + if (hide_offline_cpu(cpu)) { + fprintf(fp, "%sCPU %d: [OFFLINE]\n", space(indent), cpu); + continue; + } + if ((tc = task_to_context(tt->active_set[cpu]))) task_timestamp = task_last_run(tc->task); else { @@ -7826,8 +7837,13 @@ dump_runqueues(void) runq = rq_sp->value; } - fprintf(fp, "%sCPU %d RUNQUEUE: %lx\n", cpu ? "\n" : "", - cpu, runq); + fprintf(fp, "%sCPU %d ", cpu ? "\n" : "", cpu); + + if (hide_offline_cpu(cpu)) { + fprintf(fp, "[OFFLINE]\n"); + continue; + } else + fprintf(fp, "RUNQUEUE: %lx\n", runq); fprintf(fp, " CURRENT: "); if ((tc = task_to_context(tt->active_set[cpu]))) @@ -8281,8 +8297,13 @@ dump_on_rq_tasks(void) } for (cpu = 0; cpu < kt->cpus; cpu++) { + fprintf(fp, "%sCPU %d", cpu ? "\n" : "", cpu); - fprintf(fp, "%sCPU %d\n", cpu ? "\n" : "", cpu); + if (hide_offline_cpu(cpu)) { + fprintf(fp, " [OFFLINE]\n"); + continue; + } else + fprintf(fp, "\n"); tc = FIRST_CONTEXT(); tot = 0; @@ -8415,8 +8436,13 @@ dump_CFS_runqueues(void) else runq = rq_sp->value; - fprintf(fp, "%sCPU %d RUNQUEUE: %lx\n", cpu ? "\n" : "", - cpu, runq); + fprintf(fp, "%sCPU %d ", cpu ? "\n" : "", cpu); + + if (hide_offline_cpu(cpu)) { + fprintf(fp, "[OFFLINE]\n"); + continue; + } else + fprintf(fp, "RUNQUEUE: %lx\n", runq); fprintf(fp, " CURRENT: "); if ((tc = task_to_context(tt->active_set[cpu]))) @@ -8908,7 +8934,14 @@ dump_tasks_by_task_group(void) sizeof(ulong), "task_group rt_rq", FAULT_ON_ERROR); readmem(cfs_rq + cpu * sizeof(ulong), KVADDR, &cfs_rq_p, sizeof(ulong), "task_group cfs_rq", FAULT_ON_ERROR); - fprintf(fp, "%sCPU %d\n", cpu ? "\n" : "", cpu); + fprintf(fp, "%sCPU %d", cpu ? "\n" : "", cpu); + + if (hide_offline_cpu(cpu)) { + fprintf(fp, " [OFFLINE]\n"); + continue; + } else + fprintf(fp, "\n"); + fprintf(fp, " CURRENT: "); if ((tc = task_to_context(tt->active_set[cpu]))) fprintf(fp, "PID: %-5ld TASK: %lx COMMAND: \"%s\"\n", -- 1.8.5.3