You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
672 lines
37 KiB
672 lines
37 KiB
Demonstrations of hardirqs, the Linux eBPF/bcc version. |
|
|
|
|
|
This program traces hard interrupts (irqs), and stores timing statistics |
|
in-kernel for efficiency. For example: |
|
|
|
# ./hardirqs |
|
Tracing hard irq event time... Hit Ctrl-C to end. |
|
^C |
|
HARDIRQ TOTAL_usecs |
|
callfuncsingle0 2 |
|
callfuncsingle5 5 |
|
callfuncsingle6 5 |
|
callfuncsingle7 21 |
|
blkif 66 |
|
timer7 84 |
|
resched5 94 |
|
resched0 97 |
|
resched3 102 |
|
resched7 111 |
|
resched6 255 |
|
timer3 362 |
|
resched4 367 |
|
timer5 474 |
|
timer1 529 |
|
timer6 679 |
|
timer2 746 |
|
timer4 943 |
|
resched1 1048 |
|
timer0 1558 |
|
resched2 1750 |
|
eth0 11441 |
|
|
|
The HARDIRQ column prints the interrupt action name. While tracing, the eth0 |
|
hard irq action ran for 11441 microseconds (11 milliseconds) in total. |
|
|
|
Many other interrupts are visible in the output: this is an 8 CPU system, and |
|
some of these interrupts have a separate action per-CPU (eg, "timer", |
|
"resched"). |
|
|
|
|
|
An interval can be provided, and also optionally a count. Eg, printing output |
|
every 1 second, and including timestamps (-T): |
|
|
|
# ./hardirqs -T 1 3 |
|
Tracing hard irq event time... Hit Ctrl-C to end. |
|
|
|
22:16:14 |
|
HARDIRQ TOTAL_usecs |
|
callfuncsingle0 2 |
|
callfuncsingle7 5 |
|
callfuncsingle3 5 |
|
callfuncsingle2 5 |
|
callfuncsingle6 6 |
|
callfuncsingle1 11 |
|
resched0 32 |
|
blkif 51 |
|
resched5 71 |
|
resched7 71 |
|
resched4 72 |
|
resched6 82 |
|
timer7 172 |
|
resched1 187 |
|
resched2 236 |
|
timer3 252 |
|
resched3 282 |
|
timer1 320 |
|
timer2 374 |
|
timer6 396 |
|
timer5 427 |
|
timer4 470 |
|
timer0 1430 |
|
eth0 7498 |
|
|
|
22:16:15 |
|
HARDIRQ TOTAL_usecs |
|
callfuncsingle7 6 |
|
callfuncsingle5 11 |
|
callfuncsingle4 13 |
|
timer2 17 |
|
callfuncsingle6 18 |
|
resched0 21 |
|
blkif 33 |
|
resched3 40 |
|
resched5 60 |
|
resched4 69 |
|
resched6 70 |
|
resched7 74 |
|
timer7 86 |
|
resched2 91 |
|
timer3 134 |
|
resched1 293 |
|
timer5 354 |
|
timer1 433 |
|
timer6 497 |
|
timer4 1112 |
|
timer0 1768 |
|
eth0 6972 |
|
|
|
22:16:16 |
|
HARDIRQ TOTAL_usecs |
|
callfuncsingle7 5 |
|
callfuncsingle3 5 |
|
callfuncsingle2 6 |
|
timer3 10 |
|
resched0 18 |
|
callfuncsingle4 22 |
|
resched5 27 |
|
resched6 44 |
|
blkif 45 |
|
resched7 65 |
|
resched4 69 |
|
timer4 77 |
|
resched2 97 |
|
timer7 98 |
|
resched3 103 |
|
timer2 169 |
|
resched1 226 |
|
timer5 525 |
|
timer1 691 |
|
timer6 697 |
|
timer0 1415 |
|
eth0 7152 |
|
|
|
This can be useful for quantifying where CPU cycles are spent among the hard |
|
interrupts (summarized as the %irq column from mpstat(1)). The output above |
|
shows that most time was spent processing for eth0 (network interface), which |
|
was around 7 milliseconds per second (total across all CPUs). |
|
|
|
Note that the time spent among the "timer" interrupts was low, and usually less |
|
than one microsecond per second. Here's the hardirq per-second output when the |
|
perf tool is performing a 999 Hertz CPU profile ("perf record -F 999 -a ..."): |
|
|
|
22:13:59 |
|
HARDIRQ TOTAL_usecs |
|
callfuncsingle7 5 |
|
callfuncsingle5 5 |
|
callfuncsingle3 6 |
|
callfuncsingle4 7 |
|
callfuncsingle6 19 |
|
blkif 66 |
|
resched0 66 |
|
resched2 82 |
|
resched7 87 |
|
resched3 96 |
|
resched4 118 |
|
resched5 120 |
|
resched6 130 |
|
resched1 230 |
|
timer3 946 |
|
timer1 1981 |
|
timer7 2618 |
|
timer5 3063 |
|
timer6 3141 |
|
timer4 3511 |
|
timer2 3554 |
|
timer0 5044 |
|
eth0 16015 |
|
|
|
This sheds some light into the CPU overhead of the perf profiler, which cost |
|
around 3 milliseconds per second. Note that I'm usually profiling at a much |
|
lower rate, 99 Hertz, which looks like this: |
|
|
|
22:22:12 |
|
HARDIRQ TOTAL_usecs |
|
callfuncsingle3 5 |
|
callfuncsingle6 5 |
|
callfuncsingle5 22 |
|
blkif 46 |
|
resched6 47 |
|
resched5 57 |
|
resched4 66 |
|
resched7 78 |
|
resched2 97 |
|
resched0 214 |
|
timer2 326 |
|
timer0 498 |
|
timer5 536 |
|
timer6 576 |
|
timer1 600 |
|
timer4 982 |
|
resched1 1315 |
|
timer7 1364 |
|
timer3 1825 |
|
resched3 5708 |
|
eth0 9743 |
|
|
|
Much lower (and remember to compare this to the baseline). Note that perf has |
|
other overheads (non-irq CPU cycles, file system storage). |
|
|
|
|
|
The distribution of interrupt run time can be printed as a histogram with the -d |
|
option. Eg: |
|
|
|
# ./hardirqs -d |
|
Tracing hard irq event time... Hit Ctrl-C to end. |
|
^C |
|
|
|
hardirq = 'callfuncsingle1' |
|
usecs : count distribution |
|
0 -> 1 : 0 | | |
|
2 -> 3 : 0 | | |
|
4 -> 7 : 0 | | |
|
8 -> 15 : 0 | | |
|
16 -> 31 : 0 | | |
|
32 -> 63 : 0 | | |
|
64 -> 127 : 0 | | |
|
128 -> 255 : 0 | | |
|
256 -> 511 : 0 | | |
|
512 -> 1023 : 0 | | |
|
1024 -> 2047 : 0 | | |
|
2048 -> 4095 : 0 | | |
|
4096 -> 8191 : 0 | | |
|
8192 -> 16383 : 1 |****************************************| |
|
|
|
hardirq = 'callfuncsingle0' |
|
usecs : count distribution |
|
0 -> 1 : 0 | | |
|
2 -> 3 : 0 | | |
|
4 -> 7 : 0 | | |
|
8 -> 15 : 0 | | |
|
16 -> 31 : 0 | | |
|
32 -> 63 : 0 | | |
|
64 -> 127 : 0 | | |
|
128 -> 255 : 0 | | |
|
256 -> 511 : 0 | | |
|
512 -> 1023 : 0 | | |
|
1024 -> 2047 : 0 | | |
|
2048 -> 4095 : 1 |****************************************| |
|
|
|
hardirq = 'callfuncsingle3' |
|
usecs : count distribution |
|
0 -> 1 : 0 | | |
|
2 -> 3 : 0 | | |
|
4 -> 7 : 0 | | |
|
8 -> 15 : 0 | | |
|
16 -> 31 : 0 | | |
|
32 -> 63 : 0 | | |
|
64 -> 127 : 0 | | |
|
128 -> 255 : 0 | | |
|
256 -> 511 : 0 | | |
|
512 -> 1023 : 0 | | |
|
1024 -> 2047 : 0 | | |
|
2048 -> 4095 : 0 | | |
|
4096 -> 8191 : 3 |****************************************| |
|
|
|
hardirq = 'callfuncsingle2' |
|
usecs : count distribution |
|
0 -> 1 : 0 | | |
|
2 -> 3 : 0 | | |
|
4 -> 7 : 0 | | |
|
8 -> 15 : 0 | | |
|
16 -> 31 : 0 | | |
|
32 -> 63 : 0 | | |
|
64 -> 127 : 0 | | |
|
128 -> 255 : 0 | | |
|
256 -> 511 : 0 | | |
|
512 -> 1023 : 0 | | |
|
1024 -> 2047 : 0 | | |
|
2048 -> 4095 : 0 | | |
|
4096 -> 8191 : 2 |****************************************| |
|
|
|
hardirq = 'callfuncsingle5' |
|
usecs : count distribution |
|
0 -> 1 : 0 | | |
|
2 -> 3 : 0 | | |
|
4 -> 7 : 0 | | |
|
8 -> 15 : 0 | | |
|
16 -> 31 : 0 | | |
|
32 -> 63 : 0 | | |
|
64 -> 127 : 0 | | |
|
128 -> 255 : 0 | | |
|
256 -> 511 : 0 | | |
|
512 -> 1023 : 0 | | |
|
1024 -> 2047 : 0 | | |
|
2048 -> 4095 : 0 | | |
|
4096 -> 8191 : 5 |****************************************| |
|
|
|
hardirq = 'callfuncsingle4' |
|
usecs : count distribution |
|
0 -> 1 : 0 | | |
|
2 -> 3 : 0 | | |
|
4 -> 7 : 0 | | |
|
8 -> 15 : 0 | | |
|
16 -> 31 : 0 | | |
|
32 -> 63 : 0 | | |
|
64 -> 127 : 0 | | |
|
128 -> 255 : 0 | | |
|
256 -> 511 : 0 | | |
|
512 -> 1023 : 0 | | |
|
1024 -> 2047 : 0 | | |
|
2048 -> 4095 : 0 | | |
|
4096 -> 8191 : 6 |****************************************| |
|
|
|
hardirq = 'callfuncsingle7' |
|
usecs : count distribution |
|
0 -> 1 : 0 | | |
|
2 -> 3 : 0 | | |
|
4 -> 7 : 0 | | |
|
8 -> 15 : 0 | | |
|
16 -> 31 : 0 | | |
|
32 -> 63 : 0 | | |
|
64 -> 127 : 0 | | |
|
128 -> 255 : 0 | | |
|
256 -> 511 : 0 | | |
|
512 -> 1023 : 0 | | |
|
1024 -> 2047 : 0 | | |
|
2048 -> 4095 : 0 | | |
|
4096 -> 8191 : 4 |****************************************| |
|
|
|
hardirq = 'callfuncsingle6' |
|
usecs : count distribution |
|
0 -> 1 : 0 | | |
|
2 -> 3 : 0 | | |
|
4 -> 7 : 0 | | |
|
8 -> 15 : 0 | | |
|
16 -> 31 : 0 | | |
|
32 -> 63 : 0 | | |
|
64 -> 127 : 0 | | |
|
128 -> 255 : 0 | | |
|
256 -> 511 : 0 | | |
|
512 -> 1023 : 0 | | |
|
1024 -> 2047 : 0 | | |
|
2048 -> 4095 : 0 | | |
|
4096 -> 8191 : 4 |****************************************| |
|
|
|
hardirq = 'eth0' |
|
usecs : count distribution |
|
0 -> 1 : 0 | | |
|
2 -> 3 : 0 | | |
|
4 -> 7 : 0 | | |
|
8 -> 15 : 0 | | |
|
16 -> 31 : 0 | | |
|
32 -> 63 : 0 | | |
|
64 -> 127 : 0 | | |
|
128 -> 255 : 0 | | |
|
256 -> 511 : 0 | | |
|
512 -> 1023 : 5102 |********* | |
|
1024 -> 2047 : 20617 |****************************************| |
|
2048 -> 4095 : 4832 |********* | |
|
4096 -> 8191 : 12 | | |
|
|
|
hardirq = 'timer7' |
|
usecs : count distribution |
|
0 -> 1 : 0 | | |
|
2 -> 3 : 0 | | |
|
4 -> 7 : 0 | | |
|
8 -> 15 : 0 | | |
|
16 -> 31 : 0 | | |
|
32 -> 63 : 0 | | |
|
64 -> 127 : 0 | | |
|
128 -> 255 : 0 | | |
|
256 -> 511 : 0 | | |
|
512 -> 1023 : 0 | | |
|
1024 -> 2047 : 9 |*** | |
|
2048 -> 4095 : 70 |***************************** | |
|
4096 -> 8191 : 94 |****************************************| |
|
|
|
hardirq = 'timer6' |
|
usecs : count distribution |
|
0 -> 1 : 0 | | |
|
2 -> 3 : 0 | | |
|
4 -> 7 : 0 | | |
|
8 -> 15 : 0 | | |
|
16 -> 31 : 0 | | |
|
32 -> 63 : 0 | | |
|
64 -> 127 : 0 | | |
|
128 -> 255 : 0 | | |
|
256 -> 511 : 0 | | |
|
512 -> 1023 : 0 | | |
|
1024 -> 2047 : 1 | | |
|
2048 -> 4095 : 86 |*********** | |
|
4096 -> 8191 : 295 |****************************************| |
|
8192 -> 16383 : 28 |*** | |
|
|
|
hardirq = 'timer5' |
|
usecs : count distribution |
|
0 -> 1 : 0 | | |
|
2 -> 3 : 0 | | |
|
4 -> 7 : 0 | | |
|
8 -> 15 : 0 | | |
|
16 -> 31 : 0 | | |
|
32 -> 63 : 0 | | |
|
64 -> 127 : 0 | | |
|
128 -> 255 : 0 | | |
|
256 -> 511 : 0 | | |
|
512 -> 1023 : 1 | | |
|
1024 -> 2047 : 0 | | |
|
2048 -> 4095 : 137 |****************************************| |
|
4096 -> 8191 : 123 |*********************************** | |
|
8192 -> 16383 : 8 |** | |
|
|
|
hardirq = 'timer4' |
|
usecs : count distribution |
|
0 -> 1 : 0 | | |
|
2 -> 3 : 0 | | |
|
4 -> 7 : 0 | | |
|
8 -> 15 : 0 | | |
|
16 -> 31 : 0 | | |
|
32 -> 63 : 0 | | |
|
64 -> 127 : 0 | | |
|
128 -> 255 : 0 | | |
|
256 -> 511 : 0 | | |
|
512 -> 1023 : 0 | | |
|
1024 -> 2047 : 0 | | |
|
2048 -> 4095 : 46 |********* | |
|
4096 -> 8191 : 198 |****************************************| |
|
8192 -> 16383 : 49 |********* | |
|
|
|
hardirq = 'timer3' |
|
usecs : count distribution |
|
0 -> 1 : 0 | | |
|
2 -> 3 : 0 | | |
|
4 -> 7 : 0 | | |
|
8 -> 15 : 0 | | |
|
16 -> 31 : 0 | | |
|
32 -> 63 : 0 | | |
|
64 -> 127 : 0 | | |
|
128 -> 255 : 0 | | |
|
256 -> 511 : 0 | | |
|
512 -> 1023 : 0 | | |
|
1024 -> 2047 : 4 | | |
|
2048 -> 4095 : 210 |****************************************| |
|
4096 -> 8191 : 186 |*********************************** | |
|
|
|
hardirq = 'timer2' |
|
usecs : count distribution |
|
0 -> 1 : 0 | | |
|
2 -> 3 : 0 | | |
|
4 -> 7 : 0 | | |
|
8 -> 15 : 0 | | |
|
16 -> 31 : 0 | | |
|
32 -> 63 : 0 | | |
|
64 -> 127 : 0 | | |
|
128 -> 255 : 0 | | |
|
256 -> 511 : 0 | | |
|
512 -> 1023 : 0 | | |
|
1024 -> 2047 : 0 | | |
|
2048 -> 4095 : 245 |****************************************| |
|
4096 -> 8191 : 227 |************************************* | |
|
8192 -> 16383 : 6 | | |
|
|
|
hardirq = 'timer1' |
|
usecs : count distribution |
|
0 -> 1 : 0 | | |
|
2 -> 3 : 0 | | |
|
4 -> 7 : 0 | | |
|
8 -> 15 : 0 | | |
|
16 -> 31 : 0 | | |
|
32 -> 63 : 0 | | |
|
64 -> 127 : 0 | | |
|
128 -> 255 : 0 | | |
|
256 -> 511 : 0 | | |
|
512 -> 1023 : 0 | | |
|
1024 -> 2047 : 6 |* | |
|
2048 -> 4095 : 112 |************************ | |
|
4096 -> 8191 : 181 |****************************************| |
|
8192 -> 16383 : 7 |* | |
|
|
|
hardirq = 'timer0' |
|
usecs : count distribution |
|
0 -> 1 : 0 | | |
|
2 -> 3 : 0 | | |
|
4 -> 7 : 0 | | |
|
8 -> 15 : 0 | | |
|
16 -> 31 : 0 | | |
|
32 -> 63 : 0 | | |
|
64 -> 127 : 0 | | |
|
128 -> 255 : 0 | | |
|
256 -> 511 : 0 | | |
|
512 -> 1023 : 0 | | |
|
1024 -> 2047 : 0 | | |
|
2048 -> 4095 : 0 | | |
|
4096 -> 8191 : 887 |****************************************| |
|
8192 -> 16383 : 92 |**** | |
|
|
|
hardirq = 'blkif' |
|
usecs : count distribution |
|
0 -> 1 : 0 | | |
|
2 -> 3 : 0 | | |
|
4 -> 7 : 0 | | |
|
8 -> 15 : 0 | | |
|
16 -> 31 : 0 | | |
|
32 -> 63 : 0 | | |
|
64 -> 127 : 0 | | |
|
128 -> 255 : 0 | | |
|
256 -> 511 : 0 | | |
|
512 -> 1023 : 0 | | |
|
1024 -> 2047 : 0 | | |
|
2048 -> 4095 : 0 | | |
|
4096 -> 8191 : 9 |****************************************| |
|
8192 -> 16383 : 7 |******************************* | |
|
16384 -> 32767 : 2 |******** | |
|
|
|
hardirq = 'resched4' |
|
usecs : count distribution |
|
0 -> 1 : 0 | | |
|
2 -> 3 : 0 | | |
|
4 -> 7 : 0 | | |
|
8 -> 15 : 0 | | |
|
16 -> 31 : 0 | | |
|
32 -> 63 : 0 | | |
|
64 -> 127 : 0 | | |
|
128 -> 255 : 0 | | |
|
256 -> 511 : 0 | | |
|
512 -> 1023 : 0 | | |
|
1024 -> 2047 : 104 |****************************************| |
|
2048 -> 4095 : 80 |****************************** | |
|
|
|
hardirq = 'resched5' |
|
usecs : count distribution |
|
0 -> 1 : 0 | | |
|
2 -> 3 : 0 | | |
|
4 -> 7 : 0 | | |
|
8 -> 15 : 0 | | |
|
16 -> 31 : 0 | | |
|
32 -> 63 : 0 | | |
|
64 -> 127 : 0 | | |
|
128 -> 255 : 0 | | |
|
256 -> 511 : 0 | | |
|
512 -> 1023 : 27 |***** | |
|
1024 -> 2047 : 216 |****************************************| |
|
2048 -> 4095 : 27 |***** | |
|
4096 -> 8191 : 1 | | |
|
|
|
hardirq = 'resched6' |
|
usecs : count distribution |
|
0 -> 1 : 0 | | |
|
2 -> 3 : 0 | | |
|
4 -> 7 : 0 | | |
|
8 -> 15 : 0 | | |
|
16 -> 31 : 0 | | |
|
32 -> 63 : 0 | | |
|
64 -> 127 : 0 | | |
|
128 -> 255 : 0 | | |
|
256 -> 511 : 0 | | |
|
512 -> 1023 : 480 |******************* | |
|
1024 -> 2047 : 1003 |****************************************| |
|
2048 -> 4095 : 64 |** | |
|
|
|
hardirq = 'resched7' |
|
usecs : count distribution |
|
0 -> 1 : 0 | | |
|
2 -> 3 : 0 | | |
|
4 -> 7 : 0 | | |
|
8 -> 15 : 0 | | |
|
16 -> 31 : 0 | | |
|
32 -> 63 : 0 | | |
|
64 -> 127 : 0 | | |
|
128 -> 255 : 0 | | |
|
256 -> 511 : 0 | | |
|
512 -> 1023 : 46 |********* | |
|
1024 -> 2047 : 190 |****************************************| |
|
2048 -> 4095 : 42 |******** | |
|
|
|
hardirq = 'resched0' |
|
usecs : count distribution |
|
0 -> 1 : 0 | | |
|
2 -> 3 : 0 | | |
|
4 -> 7 : 0 | | |
|
8 -> 15 : 0 | | |
|
16 -> 31 : 0 | | |
|
32 -> 63 : 0 | | |
|
64 -> 127 : 0 | | |
|
128 -> 255 : 0 | | |
|
256 -> 511 : 0 | | |
|
512 -> 1023 : 11 |**** | |
|
1024 -> 2047 : 100 |****************************************| |
|
2048 -> 4095 : 23 |********* | |
|
|
|
hardirq = 'resched1' |
|
usecs : count distribution |
|
0 -> 1 : 0 | | |
|
2 -> 3 : 0 | | |
|
4 -> 7 : 0 | | |
|
8 -> 15 : 0 | | |
|
16 -> 31 : 0 | | |
|
32 -> 63 : 0 | | |
|
64 -> 127 : 0 | | |
|
128 -> 255 : 0 | | |
|
256 -> 511 : 0 | | |
|
512 -> 1023 : 96 |******** | |
|
1024 -> 2047 : 462 |****************************************| |
|
2048 -> 4095 : 36 |*** | |
|
|
|
hardirq = 'resched2' |
|
usecs : count distribution |
|
0 -> 1 : 0 | | |
|
2 -> 3 : 0 | | |
|
4 -> 7 : 0 | | |
|
8 -> 15 : 0 | | |
|
16 -> 31 : 0 | | |
|
32 -> 63 : 0 | | |
|
64 -> 127 : 0 | | |
|
128 -> 255 : 0 | | |
|
256 -> 511 : 0 | | |
|
512 -> 1023 : 120 |************************** | |
|
1024 -> 2047 : 183 |****************************************| |
|
2048 -> 4095 : 41 |******** | |
|
|
|
hardirq = 'resched3' |
|
usecs : count distribution |
|
0 -> 1 : 0 | | |
|
2 -> 3 : 0 | | |
|
4 -> 7 : 0 | | |
|
8 -> 15 : 0 | | |
|
16 -> 31 : 0 | | |
|
32 -> 63 : 0 | | |
|
64 -> 127 : 0 | | |
|
128 -> 255 : 0 | | |
|
256 -> 511 : 0 | | |
|
512 -> 1023 : 0 | | |
|
1024 -> 2047 : 789 |****************************************| |
|
2048 -> 4095 : 39 |* | |
|
|
|
|
|
Sometimes you just want counts of events, and don't need the distribution |
|
of times. You can use the -C or --count option: |
|
|
|
# ./hardirqs.py -C |
|
Tracing hard irq events... Hit Ctrl-C to end. |
|
^C |
|
HARDIRQ TOTAL_count |
|
blkif 2 |
|
callfuncsingle3 8 |
|
callfuncsingle2 10 |
|
callfuncsingle1 18 |
|
resched7 25 |
|
callfuncsingle6 25 |
|
callfuncsingle5 27 |
|
callfuncsingle0 27 |
|
eth0 34 |
|
resched2 40 |
|
resched1 66 |
|
timer7 70 |
|
resched6 71 |
|
resched0 73 |
|
resched5 79 |
|
resched4 90 |
|
timer6 95 |
|
timer4 100 |
|
timer1 109 |
|
timer2 115 |
|
timer0 117 |
|
timer3 123 |
|
resched3 140 |
|
timer5 288 |
|
|
|
|
|
USAGE message: |
|
|
|
# ./hardirqs -h |
|
usage: hardirqs [-h] [-T] [-N] [-C] [-d] [interval] [outputs] |
|
|
|
Summarize hard irq event time as histograms |
|
|
|
positional arguments: |
|
interval output interval, in seconds |
|
outputs number of outputs |
|
|
|
optional arguments: |
|
-h, --help show this help message and exit |
|
-T, --timestamp include timestamp on output |
|
-N, --nanoseconds output in nanoseconds |
|
-C, --count show event counts instead of timing |
|
-d, --dist show distributions as histograms |
|
|
|
examples: |
|
./hardirqs # sum hard irq event time |
|
./hardirqs -d # show hard irq event time as histograms |
|
./hardirqs 1 10 # print 1 second summaries, 10 times |
|
./hardirqs -NT 1 # 1s summaries, nanoseconds, and timestamps
|
|
|