proc: export statistics for softirq to /proc
Export statistics for softirq in /proc/softirqs and /proc/stat. 1. /proc/softirqs Implement /proc/softirqs which shows the number of softirq for each CPU like /proc/interrupts. 2. /proc/stat Add the "softirq" line to /proc/stat. This line shows the number of softirq for all cpu. The first column is the total of all softirqs and each subsequent column is the total for particular softirq. [kosaki.motohiro@jp.fujitsu.com: remove redundant for_each_possible_cpu() loop] Signed-off-by: Keika Kobayashi <kobayashi.kk@ncos.nec.co.jp> Reviewed-by: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com> Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Eric Dumazet <dada1@cosmosbay.com> Cc: Alexey Dobriyan <adobriyan@gmail.com> Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:

committed by
Linus Torvalds

parent
9d9b8fb0e5
commit
d3d64df21d
@@ -29,6 +29,8 @@ static int show_stat(struct seq_file *p, void *v)
|
||||
cputime64_t user, nice, system, idle, iowait, irq, softirq, steal;
|
||||
cputime64_t guest;
|
||||
u64 sum = 0;
|
||||
u64 sum_softirq = 0;
|
||||
unsigned int per_softirq_sums[NR_SOFTIRQS] = {0};
|
||||
struct timespec boottime;
|
||||
unsigned int per_irq_sum;
|
||||
|
||||
@@ -53,6 +55,13 @@ static int show_stat(struct seq_file *p, void *v)
|
||||
sum += kstat_irqs_cpu(j, i);
|
||||
}
|
||||
sum += arch_irq_stat_cpu(i);
|
||||
|
||||
for (j = 0; j < NR_SOFTIRQS; j++) {
|
||||
unsigned int softirq_stat = kstat_softirqs_cpu(j, i);
|
||||
|
||||
per_softirq_sums[j] += softirq_stat;
|
||||
sum_softirq += softirq_stat;
|
||||
}
|
||||
}
|
||||
sum += arch_irq_stat();
|
||||
|
||||
@@ -115,6 +124,12 @@ static int show_stat(struct seq_file *p, void *v)
|
||||
nr_running(),
|
||||
nr_iowait());
|
||||
|
||||
seq_printf(p, "softirq %llu", (unsigned long long)sum_softirq);
|
||||
|
||||
for (i = 0; i < NR_SOFTIRQS; i++)
|
||||
seq_printf(p, " %u", per_softirq_sums[i]);
|
||||
seq_printf(p, "\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user