xref: /aosp_15_r20/external/bcc/tools/klockstat_example.txt (revision 387f9dfdfa2baef462e92476d413c7bc2470293e)
1*387f9dfdSAndroid Build Coastguard WorkerDemonstrations of klockstat, the Linux eBPF/bcc version.
2*387f9dfdSAndroid Build Coastguard Worker
3*387f9dfdSAndroid Build Coastguard Workerklockstat traces kernel mutex lock events and display locks statistics
4*387f9dfdSAndroid Build Coastguard Worker
5*387f9dfdSAndroid Build Coastguard Worker# klockstat.py
6*387f9dfdSAndroid Build Coastguard WorkerTracing lock events... Hit Ctrl-C to end.
7*387f9dfdSAndroid Build Coastguard Worker^C
8*387f9dfdSAndroid Build Coastguard Worker                                  Caller   Avg Spin  Count   Max spin Total spin
9*387f9dfdSAndroid Build Coastguard Worker                      psi_avgs_work+0x2e       3675      5       5468      18379
10*387f9dfdSAndroid Build Coastguard Worker                     flush_to_ldisc+0x22       2833      2       4210       5667
11*387f9dfdSAndroid Build Coastguard Worker                       n_tty_write+0x30c       3914      1       3914       3914
12*387f9dfdSAndroid Build Coastguard Worker                               isig+0x5d       2390      1       2390       2390
13*387f9dfdSAndroid Build Coastguard Worker                   tty_buffer_flush+0x2a       1604      1       1604       1604
14*387f9dfdSAndroid Build Coastguard Worker                      commit_echoes+0x22       1400      1       1400       1400
15*387f9dfdSAndroid Build Coastguard Worker          n_tty_receive_buf_common+0x3b9       1399      1       1399       1399
16*387f9dfdSAndroid Build Coastguard Worker
17*387f9dfdSAndroid Build Coastguard Worker                                  Caller   Avg Hold  Count   Max hold Total hold
18*387f9dfdSAndroid Build Coastguard Worker                     flush_to_ldisc+0x22      42558      2      76135      85116
19*387f9dfdSAndroid Build Coastguard Worker                      psi_avgs_work+0x2e      14821      5      20446      74106
20*387f9dfdSAndroid Build Coastguard Worker          n_tty_receive_buf_common+0x3b9      12300      1      12300      12300
21*387f9dfdSAndroid Build Coastguard Worker                       n_tty_write+0x30c      10712      1      10712      10712
22*387f9dfdSAndroid Build Coastguard Worker                               isig+0x5d       3362      1       3362       3362
23*387f9dfdSAndroid Build Coastguard Worker                   tty_buffer_flush+0x2a       3078      1       3078       3078
24*387f9dfdSAndroid Build Coastguard Worker                      commit_echoes+0x22       3017      1       3017       3017
25*387f9dfdSAndroid Build Coastguard Worker
26*387f9dfdSAndroid Build Coastguard Worker
27*387f9dfdSAndroid Build Coastguard WorkerEvery caller to using kernel's mutex is displayed on every line.
28*387f9dfdSAndroid Build Coastguard Worker
29*387f9dfdSAndroid Build Coastguard WorkerFirst portion of lines show the lock acquiring data, showing the
30*387f9dfdSAndroid Build Coastguard Workeramount of time it took to acquired given lock.
31*387f9dfdSAndroid Build Coastguard Worker
32*387f9dfdSAndroid Build Coastguard Worker  'Caller'       - symbol acquiring the mutex
33*387f9dfdSAndroid Build Coastguard Worker  'Average Spin' - average time to acquire the mutex
34*387f9dfdSAndroid Build Coastguard Worker  'Count'        - number of times mutex was acquired
35*387f9dfdSAndroid Build Coastguard Worker  'Max spin'     - maximum time to acquire the mutex
36*387f9dfdSAndroid Build Coastguard Worker  'Total spin'   - total time spent in acquiring the mutex
37*387f9dfdSAndroid Build Coastguard Worker
38*387f9dfdSAndroid Build Coastguard WorkerSecond portion of lines show the lock holding data, showing the
39*387f9dfdSAndroid Build Coastguard Workeramount of time it took to hold given lock.
40*387f9dfdSAndroid Build Coastguard Worker
41*387f9dfdSAndroid Build Coastguard Worker  'Caller'       - symbol holding the mutex
42*387f9dfdSAndroid Build Coastguard Worker  'Average Hold' - average time mutex was held
43*387f9dfdSAndroid Build Coastguard Worker  'Count'        - number of times mutex was held
44*387f9dfdSAndroid Build Coastguard Worker  'Max hold'     - maximum time mutex was held
45*387f9dfdSAndroid Build Coastguard Worker  'Total hold'   - total time spent in holding the mutex
46*387f9dfdSAndroid Build Coastguard Worker
47*387f9dfdSAndroid Build Coastguard WorkerThis works by tracing mutex_lock/unlock kprobes, updating the
48*387f9dfdSAndroid Build Coastguard Workerlock stats in maps and processing them in the python part.
49*387f9dfdSAndroid Build Coastguard Worker
50*387f9dfdSAndroid Build Coastguard Worker
51*387f9dfdSAndroid Build Coastguard WorkerAn -i option can be used to display stats in interval (5 seconds in example below):
52*387f9dfdSAndroid Build Coastguard Worker
53*387f9dfdSAndroid Build Coastguard Worker# klockstat.py -i 5
54*387f9dfdSAndroid Build Coastguard WorkerTracing lock events... Hit Ctrl-C to end.
55*387f9dfdSAndroid Build Coastguard Worker
56*387f9dfdSAndroid Build Coastguard Worker                                  Caller   Avg Spin  Count   Max spin Total spin
57*387f9dfdSAndroid Build Coastguard Worker                      psi_avgs_work+0x2e       3822     15       5650      57338
58*387f9dfdSAndroid Build Coastguard Worker                     flush_to_ldisc+0x22       4630      1       4630       4630
59*387f9dfdSAndroid Build Coastguard Worker                            work_fn+0x4f       4185      1       4185       4185
60*387f9dfdSAndroid Build Coastguard Worker
61*387f9dfdSAndroid Build Coastguard Worker                                  Caller   Avg Hold  Count   Max hold Total hold
62*387f9dfdSAndroid Build Coastguard Worker                      psi_avgs_work+0x2e      12155     15      15739     182329
63*387f9dfdSAndroid Build Coastguard Worker                     flush_to_ldisc+0x22      13809      1      13809      13809
64*387f9dfdSAndroid Build Coastguard Worker                            work_fn+0x4f       5274      1       5274       5274
65*387f9dfdSAndroid Build Coastguard Worker
66*387f9dfdSAndroid Build Coastguard Worker                                  Caller   Avg Spin  Count   Max spin Total spin
67*387f9dfdSAndroid Build Coastguard Worker                      psi_avgs_work+0x2e       3715     17       4374      63163
68*387f9dfdSAndroid Build Coastguard Worker
69*387f9dfdSAndroid Build Coastguard Worker                                  Caller   Avg Hold  Count   Max hold Total hold
70*387f9dfdSAndroid Build Coastguard Worker                      psi_avgs_work+0x2e      13141     17      19510     223399
71*387f9dfdSAndroid Build Coastguard Worker^C
72*387f9dfdSAndroid Build Coastguard Worker
73*387f9dfdSAndroid Build Coastguard Worker
74*387f9dfdSAndroid Build Coastguard WorkerA -p option can be used to trace only selected process:
75*387f9dfdSAndroid Build Coastguard Worker
76*387f9dfdSAndroid Build Coastguard Worker# klockstat.py -p 883
77*387f9dfdSAndroid Build Coastguard WorkerTracing lock events... Hit Ctrl-C to end.
78*387f9dfdSAndroid Build Coastguard Worker^C
79*387f9dfdSAndroid Build Coastguard Worker                                  Caller   Avg Spin  Count   Max spin Total spin
80*387f9dfdSAndroid Build Coastguard Worker                          pipe_wait+0xa9        625 412686      16930  258277958
81*387f9dfdSAndroid Build Coastguard Worker                          pipe_read+0x3f        420 413425      16872  174017649
82*387f9dfdSAndroid Build Coastguard Worker                         pipe_write+0x35        471 413425      16765  194792253
83*387f9dfdSAndroid Build Coastguard Worker
84*387f9dfdSAndroid Build Coastguard Worker                                  Caller   Avg Hold  Count   Max hold Total hold
85*387f9dfdSAndroid Build Coastguard Worker                          pipe_read+0x3f        473 413425      20063  195773647
86*387f9dfdSAndroid Build Coastguard Worker                          pipe_wait+0xa9        604 412686      16972  249598153
87*387f9dfdSAndroid Build Coastguard Worker                         pipe_write+0x35        481 413425      16944  199008064
88*387f9dfdSAndroid Build Coastguard Worker
89*387f9dfdSAndroid Build Coastguard Worker
90*387f9dfdSAndroid Build Coastguard WorkerA -c option can be used to display only callers with specific substring:
91*387f9dfdSAndroid Build Coastguard Worker
92*387f9dfdSAndroid Build Coastguard Worker# klockstat.py  -c pipe_
93*387f9dfdSAndroid Build Coastguard WorkerTracing lock events... Hit Ctrl-C to end.
94*387f9dfdSAndroid Build Coastguard Worker^C
95*387f9dfdSAndroid Build Coastguard Worker                                  Caller   Avg Spin  Count   Max spin Total spin
96*387f9dfdSAndroid Build Coastguard Worker                          pipe_read+0x3f        422 469554      18665  198354705
97*387f9dfdSAndroid Build Coastguard Worker                          pipe_wait+0xa9        679 469536      17196  319017069
98*387f9dfdSAndroid Build Coastguard Worker                         pipe_write+0x35        469 469554      17057  220338525
99*387f9dfdSAndroid Build Coastguard Worker
100*387f9dfdSAndroid Build Coastguard Worker                                  Caller   Avg Hold  Count   Max hold Total hold
101*387f9dfdSAndroid Build Coastguard Worker                         pipe_write+0x35        638 469554      17330  299857180
102*387f9dfdSAndroid Build Coastguard Worker                          pipe_wait+0xa9        779 469535      16912  366047392
103*387f9dfdSAndroid Build Coastguard Worker                          pipe_read+0x3f        575 469554      13251  270005394
104*387f9dfdSAndroid Build Coastguard Worker
105*387f9dfdSAndroid Build Coastguard Worker
106*387f9dfdSAndroid Build Coastguard WorkerAn -n option can be used to display only specific number of callers:
107*387f9dfdSAndroid Build Coastguard Worker
108*387f9dfdSAndroid Build Coastguard Worker# klockstat.py -n 3
109*387f9dfdSAndroid Build Coastguard WorkerTracing lock events... Hit Ctrl-C to end.
110*387f9dfdSAndroid Build Coastguard Worker^C
111*387f9dfdSAndroid Build Coastguard Worker                                  Caller   Avg Spin  Count   Max spin Total spin
112*387f9dfdSAndroid Build Coastguard Worker                          pipe_read+0x3f        420 334120      16964  140632284
113*387f9dfdSAndroid Build Coastguard Worker                          pipe_wait+0xa9        688 334116      16876  229957062
114*387f9dfdSAndroid Build Coastguard Worker                         pipe_write+0x35        463 334120      16791  154981747
115*387f9dfdSAndroid Build Coastguard Worker
116*387f9dfdSAndroid Build Coastguard Worker                                  Caller   Avg Hold  Count   Max hold Total hold
117*387f9dfdSAndroid Build Coastguard Worker                     flush_to_ldisc+0x22      27754      3      63270      83264
118*387f9dfdSAndroid Build Coastguard Worker                          pipe_read+0x3f        571 334120      17123  190976463
119*387f9dfdSAndroid Build Coastguard Worker                          pipe_wait+0xa9        759 334115      17068  253747213
120*387f9dfdSAndroid Build Coastguard Worker
121*387f9dfdSAndroid Build Coastguard Worker
122*387f9dfdSAndroid Build Coastguard WorkerAn -s option can be used to display number of callers backtrace entries:
123*387f9dfdSAndroid Build Coastguard Worker
124*387f9dfdSAndroid Build Coastguard Worker# klockstat.py -n 1 -s 3
125*387f9dfdSAndroid Build Coastguard WorkerTracing lock events... Hit Ctrl-C to end.
126*387f9dfdSAndroid Build Coastguard Worker^C
127*387f9dfdSAndroid Build Coastguard Worker                                  Caller   Avg Spin  Count   Max spin Total spin
128*387f9dfdSAndroid Build Coastguard Worker                          pipe_wait+0xa9        685 811947      17376  556542328
129*387f9dfdSAndroid Build Coastguard Worker                          pipe_wait+0xa9
130*387f9dfdSAndroid Build Coastguard Worker                         pipe_read+0x206
131*387f9dfdSAndroid Build Coastguard Worker
132*387f9dfdSAndroid Build Coastguard Worker                                  Caller   Avg Hold  Count   Max hold Total hold
133*387f9dfdSAndroid Build Coastguard Worker                     flush_to_ldisc+0x22      28145      3      63872      84437
134*387f9dfdSAndroid Build Coastguard Worker                     flush_to_ldisc+0x22
135*387f9dfdSAndroid Build Coastguard Worker                  process_one_work+0x1b0
136*387f9dfdSAndroid Build Coastguard Worker
137*387f9dfdSAndroid Build Coastguard Worker
138*387f9dfdSAndroid Build Coastguard WorkerOutput can be sorted by using -S <fields> option on various
139*387f9dfdSAndroid Build Coastguard Workerfields, the acq_total will force the acquired table to be
140*387f9dfdSAndroid Build Coastguard Workersorted on 'Total spin' column:
141*387f9dfdSAndroid Build Coastguard Worker
142*387f9dfdSAndroid Build Coastguard Worker# klockstat.py -S acq_total
143*387f9dfdSAndroid Build Coastguard WorkerTracing lock events... Hit Ctrl-C to end.
144*387f9dfdSAndroid Build Coastguard Worker^C
145*387f9dfdSAndroid Build Coastguard Worker                                  Caller   Avg Spin  Count   Max spin Total spin
146*387f9dfdSAndroid Build Coastguard Worker                          pipe_wait+0xa9        691 269343      17190  186263983
147*387f9dfdSAndroid Build Coastguard Worker                         pipe_write+0x35        464 269351      11730  125205417
148*387f9dfdSAndroid Build Coastguard Worker                          pipe_read+0x3f        422 269351      17107  113724697
149*387f9dfdSAndroid Build Coastguard Worker                      psi_avgs_work+0x2e       2499     11       4454      27494
150*387f9dfdSAndroid Build Coastguard Worker                     flush_to_ldisc+0x22       3111      3       5096       9334
151*387f9dfdSAndroid Build Coastguard Worker                       n_tty_write+0x30c       2764      1       2764       2764
152*387f9dfdSAndroid Build Coastguard Worker                               isig+0x5d       1287      1       1287       1287
153*387f9dfdSAndroid Build Coastguard Worker                   tty_buffer_flush+0x2a        961      1        961        961
154*387f9dfdSAndroid Build Coastguard Worker                      commit_echoes+0x22        892      1        892        892
155*387f9dfdSAndroid Build Coastguard Worker          n_tty_receive_buf_common+0x3b9        868      1        868        868
156*387f9dfdSAndroid Build Coastguard Worker
157*387f9dfdSAndroid Build Coastguard Worker                                  Caller   Avg Hold  Count   Max hold Total hold
158*387f9dfdSAndroid Build Coastguard Worker                          pipe_wait+0xa9        788 269343      17128  212496240
159*387f9dfdSAndroid Build Coastguard Worker                         pipe_write+0x35        637 269351      17209  171596811
160*387f9dfdSAndroid Build Coastguard Worker                          pipe_read+0x3f        585 269351      11834  157606323
161*387f9dfdSAndroid Build Coastguard Worker                      psi_avgs_work+0x2e       8726     11      19177      95996
162*387f9dfdSAndroid Build Coastguard Worker                     flush_to_ldisc+0x22      22158      3      43731      66474
163*387f9dfdSAndroid Build Coastguard Worker                       n_tty_write+0x30c       9770      1       9770       9770
164*387f9dfdSAndroid Build Coastguard Worker          n_tty_receive_buf_common+0x3b9       6830      1       6830       6830
165*387f9dfdSAndroid Build Coastguard Worker                               isig+0x5d       3114      1       3114       3114
166*387f9dfdSAndroid Build Coastguard Worker                   tty_buffer_flush+0x2a       2032      1       2032       2032
167*387f9dfdSAndroid Build Coastguard Worker                      commit_echoes+0x22       1616      1       1616       1616
168