xref: /aosp_15_r20/external/bcc/tools/softirqs_example.txt (revision 387f9dfdfa2baef462e92476d413c7bc2470293e)
1*387f9dfdSAndroid Build Coastguard WorkerDemonstrations of softirqs, the Linux eBPF/bcc version.
2*387f9dfdSAndroid Build Coastguard Worker
3*387f9dfdSAndroid Build Coastguard Worker
4*387f9dfdSAndroid Build Coastguard WorkerThis program traces soft interrupts (irqs), and stores timing statistics
5*387f9dfdSAndroid Build Coastguard Workerin-kernel for efficiency. For example:
6*387f9dfdSAndroid Build Coastguard Worker
7*387f9dfdSAndroid Build Coastguard Worker# ./softirqs
8*387f9dfdSAndroid Build Coastguard WorkerTracing soft irq event time... Hit Ctrl-C to end.
9*387f9dfdSAndroid Build Coastguard Worker^C
10*387f9dfdSAndroid Build Coastguard WorkerSOFTIRQ                    TOTAL_usecs
11*387f9dfdSAndroid Build Coastguard Workerrcu_process_callbacks              974
12*387f9dfdSAndroid Build Coastguard Workerrun_rebalance_domains             1809
13*387f9dfdSAndroid Build Coastguard Workerrun_timer_softirq                 2615
14*387f9dfdSAndroid Build Coastguard Workernet_tx_action                    14605
15*387f9dfdSAndroid Build Coastguard Workertasklet_action                   38692
16*387f9dfdSAndroid Build Coastguard Workernet_rx_action                    88188
17*387f9dfdSAndroid Build Coastguard Worker
18*387f9dfdSAndroid Build Coastguard WorkerThe SOFTIRQ column prints the interrupt action function name. While tracing,
19*387f9dfdSAndroid Build Coastguard Workerthe net_rx_action() soft interrupt ran for 20199 microseconds (20 milliseconds)
20*387f9dfdSAndroid Build Coastguard Workerin total.
21*387f9dfdSAndroid Build Coastguard Worker
22*387f9dfdSAndroid Build Coastguard WorkerThis tool works by dynamic tracing the individual softirq functions, and will
23*387f9dfdSAndroid Build Coastguard Workerneed to be adjusted to match kernel/module changes. Future versions should
24*387f9dfdSAndroid Build Coastguard Workeruse the softirq tracepoints instead.
25*387f9dfdSAndroid Build Coastguard Worker
26*387f9dfdSAndroid Build Coastguard Worker
27*387f9dfdSAndroid Build Coastguard WorkerAn interval can be provided, and also optionally a count. Eg, printing output
28*387f9dfdSAndroid Build Coastguard Workerevery 1 second, and including timestamps (-T):
29*387f9dfdSAndroid Build Coastguard Worker
30*387f9dfdSAndroid Build Coastguard Worker# ./softirqs -T 1 3
31*387f9dfdSAndroid Build Coastguard WorkerTracing soft irq event time... Hit Ctrl-C to end.
32*387f9dfdSAndroid Build Coastguard Worker
33*387f9dfdSAndroid Build Coastguard Worker22:29:16
34*387f9dfdSAndroid Build Coastguard WorkerSOFTIRQ                    TOTAL_usecs
35*387f9dfdSAndroid Build Coastguard Workerrcu_process_callbacks              456
36*387f9dfdSAndroid Build Coastguard Workerrun_rebalance_domains             1005
37*387f9dfdSAndroid Build Coastguard Workerrun_timer_softirq                 1196
38*387f9dfdSAndroid Build Coastguard Workernet_tx_action                     2796
39*387f9dfdSAndroid Build Coastguard Workertasklet_action                    5534
40*387f9dfdSAndroid Build Coastguard Workernet_rx_action                    15075
41*387f9dfdSAndroid Build Coastguard Worker
42*387f9dfdSAndroid Build Coastguard Worker22:29:17
43*387f9dfdSAndroid Build Coastguard WorkerSOFTIRQ                    TOTAL_usecs
44*387f9dfdSAndroid Build Coastguard Workerrcu_process_callbacks              456
45*387f9dfdSAndroid Build Coastguard Workerrun_rebalance_domains              839
46*387f9dfdSAndroid Build Coastguard Workerrun_timer_softirq                 1142
47*387f9dfdSAndroid Build Coastguard Workernet_tx_action                     1912
48*387f9dfdSAndroid Build Coastguard Workertasklet_action                    4428
49*387f9dfdSAndroid Build Coastguard Workernet_rx_action                    14652
50*387f9dfdSAndroid Build Coastguard Worker
51*387f9dfdSAndroid Build Coastguard Worker22:29:18
52*387f9dfdSAndroid Build Coastguard WorkerSOFTIRQ                    TOTAL_usecs
53*387f9dfdSAndroid Build Coastguard Workerrcu_process_callbacks              502
54*387f9dfdSAndroid Build Coastguard Workerrun_rebalance_domains              840
55*387f9dfdSAndroid Build Coastguard Workerrun_timer_softirq                 1192
56*387f9dfdSAndroid Build Coastguard Workernet_tx_action                     2341
57*387f9dfdSAndroid Build Coastguard Workertasklet_action                    5496
58*387f9dfdSAndroid Build Coastguard Workernet_rx_action                    15656
59*387f9dfdSAndroid Build Coastguard Worker
60*387f9dfdSAndroid Build Coastguard WorkerThis can be useful for quantifying where CPU cycles are spent among the soft
61*387f9dfdSAndroid Build Coastguard Workerinterrupts (summarized as the %softirq column from mpstat(1), and shown as
62*387f9dfdSAndroid Build Coastguard Workerevent counts in /proc/softirqs). The output above shows that most time was spent
63*387f9dfdSAndroid Build Coastguard Workerprocessing net_rx_action(), which was around 15 milliseconds per second (total
64*387f9dfdSAndroid Build Coastguard Workertime across all CPUs).
65*387f9dfdSAndroid Build Coastguard Worker
66*387f9dfdSAndroid Build Coastguard Worker
67*387f9dfdSAndroid Build Coastguard WorkerThe distribution of interrupt run time can be printed as a histogram with the -d
68*387f9dfdSAndroid Build Coastguard Workeroption. Eg:
69*387f9dfdSAndroid Build Coastguard Worker
70*387f9dfdSAndroid Build Coastguard Worker# ./softirqs -d
71*387f9dfdSAndroid Build Coastguard WorkerTracing soft irq event time... Hit Ctrl-C to end.
72*387f9dfdSAndroid Build Coastguard Worker^C
73*387f9dfdSAndroid Build Coastguard Worker
74*387f9dfdSAndroid Build Coastguard Workersoftirq = net_tx_action
75*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
76*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
77*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 0        |                                        |
78*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 0        |                                        |
79*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 0        |                                        |
80*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 0        |                                        |
81*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 0        |                                        |
82*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 0        |                                        |
83*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 0        |                                        |
84*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 440      |                                        |
85*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 27613    |****************************************|
86*387f9dfdSAndroid Build Coastguard Worker      1024 -> 2047       : 5728     |********                                |
87*387f9dfdSAndroid Build Coastguard Worker      2048 -> 4095       : 439      |                                        |
88*387f9dfdSAndroid Build Coastguard Worker      4096 -> 8191       : 53       |                                        |
89*387f9dfdSAndroid Build Coastguard Worker      8192 -> 16383      : 2        |                                        |
90*387f9dfdSAndroid Build Coastguard Worker
91*387f9dfdSAndroid Build Coastguard Workersoftirq = net_rx_action
92*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
93*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
94*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 0        |                                        |
95*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 0        |                                        |
96*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 0        |                                        |
97*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 0        |                                        |
98*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 0        |                                        |
99*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 0        |                                        |
100*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 0        |                                        |
101*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 0        |                                        |
102*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 6        |                                        |
103*387f9dfdSAndroid Build Coastguard Worker      1024 -> 2047       : 35       |                                        |
104*387f9dfdSAndroid Build Coastguard Worker      2048 -> 4095       : 3562     |****************                        |
105*387f9dfdSAndroid Build Coastguard Worker      4096 -> 8191       : 7023     |********************************        |
106*387f9dfdSAndroid Build Coastguard Worker      8192 -> 16383      : 8770     |****************************************|
107*387f9dfdSAndroid Build Coastguard Worker     16384 -> 32767      : 1780     |********                                |
108*387f9dfdSAndroid Build Coastguard Worker     32768 -> 65535      : 216      |                                        |
109*387f9dfdSAndroid Build Coastguard Worker     65536 -> 131071     : 4        |                                        |
110*387f9dfdSAndroid Build Coastguard Worker
111*387f9dfdSAndroid Build Coastguard Workersoftirq = tasklet_action
112*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
113*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
114*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 0        |                                        |
115*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 0        |                                        |
116*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 0        |                                        |
117*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 0        |                                        |
118*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 0        |                                        |
119*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 0        |                                        |
120*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 0        |                                        |
121*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 95       |                                        |
122*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 12521    |****************************************|
123*387f9dfdSAndroid Build Coastguard Worker      1024 -> 2047       : 1068     |***                                     |
124*387f9dfdSAndroid Build Coastguard Worker      2048 -> 4095       : 1077     |***                                     |
125*387f9dfdSAndroid Build Coastguard Worker      4096 -> 8191       : 12349    |*************************************** |
126*387f9dfdSAndroid Build Coastguard Worker      8192 -> 16383      : 464      |*                                       |
127*387f9dfdSAndroid Build Coastguard Worker     16384 -> 32767      : 1        |                                        |
128*387f9dfdSAndroid Build Coastguard Worker
129*387f9dfdSAndroid Build Coastguard Workersoftirq = rcu_process_callbacks
130*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
131*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
132*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 0        |                                        |
133*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 0        |                                        |
134*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 0        |                                        |
135*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 0        |                                        |
136*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 0        |                                        |
137*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 0        |                                        |
138*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 0        |                                        |
139*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 0        |                                        |
140*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 708      |****************************************|
141*387f9dfdSAndroid Build Coastguard Worker      1024 -> 2047       : 495      |***************************             |
142*387f9dfdSAndroid Build Coastguard Worker      2048 -> 4095       : 98       |*****                                   |
143*387f9dfdSAndroid Build Coastguard Worker      4096 -> 8191       : 62       |***                                     |
144*387f9dfdSAndroid Build Coastguard Worker      8192 -> 16383      : 4        |                                        |
145*387f9dfdSAndroid Build Coastguard Worker
146*387f9dfdSAndroid Build Coastguard Workersoftirq = run_timer_softirq
147*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
148*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
149*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 0        |                                        |
150*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 0        |                                        |
151*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 0        |                                        |
152*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 0        |                                        |
153*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 0        |                                        |
154*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 0        |                                        |
155*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 0        |                                        |
156*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 2        |                                        |
157*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 366      |*********                               |
158*387f9dfdSAndroid Build Coastguard Worker      1024 -> 2047       : 1525     |****************************************|
159*387f9dfdSAndroid Build Coastguard Worker      2048 -> 4095       : 629      |****************                        |
160*387f9dfdSAndroid Build Coastguard Worker      4096 -> 8191       : 87       |**                                      |
161*387f9dfdSAndroid Build Coastguard Worker      8192 -> 16383      : 1        |                                        |
162*387f9dfdSAndroid Build Coastguard Worker
163*387f9dfdSAndroid Build Coastguard Workersoftirq = run_rebalance_domains
164*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
165*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
166*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 0        |                                        |
167*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 0        |                                        |
168*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 0        |                                        |
169*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 0        |                                        |
170*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 0        |                                        |
171*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 0        |                                        |
172*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 0        |                                        |
173*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 3        |                                        |
174*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 18       |*                                       |
175*387f9dfdSAndroid Build Coastguard Worker      1024 -> 2047       : 80       |********                                |
176*387f9dfdSAndroid Build Coastguard Worker      2048 -> 4095       : 374      |****************************************|
177*387f9dfdSAndroid Build Coastguard Worker      4096 -> 8191       : 257      |***************************             |
178*387f9dfdSAndroid Build Coastguard Worker      8192 -> 16383      : 50       |*****                                   |
179*387f9dfdSAndroid Build Coastguard Worker     16384 -> 32767      : 24       |**                                      |
180*387f9dfdSAndroid Build Coastguard Worker
181*387f9dfdSAndroid Build Coastguard Worker
182*387f9dfdSAndroid Build Coastguard WorkerSometimes you just want counts of events, and don't need the distribution
183*387f9dfdSAndroid Build Coastguard Workerof times. You can use the -C or --events option:
184*387f9dfdSAndroid Build Coastguard Worker
185*387f9dfdSAndroid Build Coastguard Worker# ./softirqs.py -C
186*387f9dfdSAndroid Build Coastguard WorkerTracing soft irq events... Hit Ctrl-C to end.
187*387f9dfdSAndroid Build Coastguard Worker^C
188*387f9dfdSAndroid Build Coastguard WorkerSOFTIRQ          TOTAL_count
189*387f9dfdSAndroid Build Coastguard Workerblock                      5
190*387f9dfdSAndroid Build Coastguard Workertasklet                    6
191*387f9dfdSAndroid Build Coastguard Workernet_rx                   402
192*387f9dfdSAndroid Build Coastguard Workersched                   5251
193*387f9dfdSAndroid Build Coastguard Workerrcu                     5748
194*387f9dfdSAndroid Build Coastguard Workertimer                   9530
195*387f9dfdSAndroid Build Coastguard Worker
196*387f9dfdSAndroid Build Coastguard Worker
197*387f9dfdSAndroid Build Coastguard WorkerUSAGE message:
198*387f9dfdSAndroid Build Coastguard Worker
199*387f9dfdSAndroid Build Coastguard Worker# ./softirqs -h
200*387f9dfdSAndroid Build Coastguard Workerusage: softirqs [-h] [-T] [-N] [-C] [-d] [-c CPU] [interval] [count]
201*387f9dfdSAndroid Build Coastguard Worker
202*387f9dfdSAndroid Build Coastguard WorkerSummarize soft irq event time as histograms.
203*387f9dfdSAndroid Build Coastguard Worker
204*387f9dfdSAndroid Build Coastguard Workerpositional arguments:
205*387f9dfdSAndroid Build Coastguard Worker  interval           output interval, in seconds
206*387f9dfdSAndroid Build Coastguard Worker  count              number of outputs
207*387f9dfdSAndroid Build Coastguard Worker
208*387f9dfdSAndroid Build Coastguard Workeroptional arguments:
209*387f9dfdSAndroid Build Coastguard Worker  -h, --help         show this help message and exit
210*387f9dfdSAndroid Build Coastguard Worker  -T, --timestamp    include timestamp on output
211*387f9dfdSAndroid Build Coastguard Worker  -N, --nanoseconds  output in nanoseconds
212*387f9dfdSAndroid Build Coastguard Worker  -C, --events       show the number of soft irq events
213*387f9dfdSAndroid Build Coastguard Worker  -d, --dist         show distributions as histograms
214*387f9dfdSAndroid Build Coastguard Worker  -c CPU, --cpu CPU  trace this CPU only
215*387f9dfdSAndroid Build Coastguard Worker
216*387f9dfdSAndroid Build Coastguard Workerexamples:
217*387f9dfdSAndroid Build Coastguard Worker    ./softirqs            # sum soft irq event time
218*387f9dfdSAndroid Build Coastguard Worker    ./softirqs -C         # show the number of soft irq events
219*387f9dfdSAndroid Build Coastguard Worker    ./softirqs -d         # show soft irq event time as histograms
220*387f9dfdSAndroid Build Coastguard Worker    ./softirqs 1 10       # print 1 second summaries, 10 times
221*387f9dfdSAndroid Build Coastguard Worker    ./softirqs -NT 1      # 1s summaries, nanoseconds, and timestamps
222*387f9dfdSAndroid Build Coastguard Worker    ./softirqs -c 1       # sum soft irq event time on CPU 1 only
223*387f9dfdSAndroid Build Coastguard Worker
224