hardirqs从字面意思我们基本就可以知道是其作用肯定与硬中断相关
还是老样子,先hardirqs --help查看下其支持哪些功能:
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 用ns的形式显示 -C, --count show event counts instead of timing 不显示各中断执行时间,而是显示中断发生的次数 -d, --dist show distributions as histograms 对每一个硬中断各自采用矩形图方式显示出来
从help来看,hardirqs功能支持过于单调,甚至没法支持单独跟踪某一个硬中断的功能,这块可能让人觉得很无语,但是这么做原因是为什么呢? 笔者认为主要有两个
原因
- 想单独跟踪某个函数的话,采用funclatency足矣
- hardirqs相比采用perf跟踪中断情况更加轻量高效
下面重点介绍下使用方法:
./hardirqs
./hardirqs Tracing hard irq event time... Hit Ctrl-C to end. ^C HARDIRQ TOTAL_usecs 注意显示的单位是us vmw_vmci 31 ehci_hcd:usb1 532 ens33 743 ata_piix 831
./hardirqs -d
显示各硬中断执行矩形图
Tracing hard irq event time... Hit Ctrl-C to end. ^C hardirq = 'ehci_hcd:usb1' usecs : count distribution 0 -> 1 : 0 | | 2 -> 3 : 0 | | 4 -> 7 : 0 | | 8 -> 15 : 0 | | 16 -> 31 : 1 |******************** | 32 -> 63 : 2 |****************************************| 64 -> 127 : 0 | | 128 -> 255 : 2 |****************************************| 256 -> 511 : 1 |******************** | hardirq = 'ata_piix' usecs : count distribution 0 -> 1 : 0 | | 2 -> 3 : 0 | | 4 -> 7 : 0 | | 8 -> 15 : 1 |** | 16 -> 31 : 20 |****************************************| 32 -> 63 : 20 |****************************************| 64 -> 127 : 5 |********** |
./hardirqs 1 10
采用每隔一秒共显示十次的形式
Tracing hard irq event time... Hit Ctrl-C to end. HARDIRQ TOTAL_usecs ens33 34 ata_piix 66 HARDIRQ TOTAL_usecs vmw_vmci 9 ens33 45 HARDIRQ TOTAL_usecs ens33 57
./hardirqs -NT 1
每隔1s显示一次,单位为ns,并显示时间戳
Tracing hard irq event time... Hit Ctrl-C to end. 03:50:04 HARDIRQ TOTAL_nsecs vmw_vmci 9434 ens33 57355 ata_piix 67812 03:50:05 HARDIRQ TOTAL_nsecs ens33 36448 03:50:06 HARDIRQ TOTAL_nsecs ens33 48302 ata_piix 388860 03:50:07 HARDIRQ TOTAL_nsecs ens33 38183 ehci_hcd:usb1 396930