xref: /aosp_15_r20/external/bcc/tools/funclatency_example.txt (revision 387f9dfdfa2baef462e92476d413c7bc2470293e)
1*387f9dfdSAndroid Build Coastguard WorkerDemonstrations of funclatency, the Linux eBPF/bcc version.
2*387f9dfdSAndroid Build Coastguard Worker
3*387f9dfdSAndroid Build Coastguard Worker
4*387f9dfdSAndroid Build Coastguard WorkerTiming the do_sys_open() kernel function until Ctrl-C:
5*387f9dfdSAndroid Build Coastguard Worker
6*387f9dfdSAndroid Build Coastguard Worker# ./funclatency do_sys_open
7*387f9dfdSAndroid Build Coastguard WorkerTracing do_sys_open... Hit Ctrl-C to end.
8*387f9dfdSAndroid Build Coastguard Worker^C
9*387f9dfdSAndroid Build Coastguard Worker     nsecs           : count     distribution
10*387f9dfdSAndroid Build Coastguard Worker       0 -> 1        : 0        |                                      |
11*387f9dfdSAndroid Build Coastguard Worker       2 -> 3        : 0        |                                      |
12*387f9dfdSAndroid Build Coastguard Worker       4 -> 7        : 0        |                                      |
13*387f9dfdSAndroid Build Coastguard Worker       8 -> 15       : 0        |                                      |
14*387f9dfdSAndroid Build Coastguard Worker      16 -> 31       : 0        |                                      |
15*387f9dfdSAndroid Build Coastguard Worker      32 -> 63       : 0        |                                      |
16*387f9dfdSAndroid Build Coastguard Worker      64 -> 127      : 0        |                                      |
17*387f9dfdSAndroid Build Coastguard Worker     128 -> 255      : 0        |                                      |
18*387f9dfdSAndroid Build Coastguard Worker     256 -> 511      : 0        |                                      |
19*387f9dfdSAndroid Build Coastguard Worker     512 -> 1023     : 0        |                                      |
20*387f9dfdSAndroid Build Coastguard Worker    1024 -> 2047     : 0        |                                      |
21*387f9dfdSAndroid Build Coastguard Worker    2048 -> 4095     : 124      |****************                      |
22*387f9dfdSAndroid Build Coastguard Worker    4096 -> 8191     : 291      |**************************************|
23*387f9dfdSAndroid Build Coastguard Worker    8192 -> 16383    : 36       |****                                  |
24*387f9dfdSAndroid Build Coastguard Worker   16384 -> 32767    : 16       |**                                    |
25*387f9dfdSAndroid Build Coastguard Worker   32768 -> 65535    : 8        |*                                     |
26*387f9dfdSAndroid Build Coastguard Worker   65536 -> 131071   : 0        |                                      |
27*387f9dfdSAndroid Build Coastguard Worker  131072 -> 262143   : 0        |                                      |
28*387f9dfdSAndroid Build Coastguard Worker  262144 -> 524287   : 0        |                                      |
29*387f9dfdSAndroid Build Coastguard Worker  524288 -> 1048575  : 0        |                                      |
30*387f9dfdSAndroid Build Coastguard Worker 1048576 -> 2097151  : 0        |                                      |
31*387f9dfdSAndroid Build Coastguard Worker 2097152 -> 4194303  : 1        |                                      |
32*387f9dfdSAndroid Build Coastguard Worker
33*387f9dfdSAndroid Build Coastguard Workeravg = 13746 nsecs, total: 6543360 nsecs, count: 476
34*387f9dfdSAndroid Build Coastguard Worker
35*387f9dfdSAndroid Build Coastguard WorkerDetaching...
36*387f9dfdSAndroid Build Coastguard Worker
37*387f9dfdSAndroid Build Coastguard WorkerThe output shows a histogram of function latency (call time), measured from when
38*387f9dfdSAndroid Build Coastguard Workerthe function began executing (was called) to when it finished (returned).
39*387f9dfdSAndroid Build Coastguard Worker
40*387f9dfdSAndroid Build Coastguard WorkerThis example output shows that most of the time, do_sys_open() took between
41*387f9dfdSAndroid Build Coastguard Worker2048 and 65536 nanoseconds (2 to 65 microseconds). The peak of this distribution
42*387f9dfdSAndroid Build Coastguard Workershows 291 calls of between 4096 and 8191 nanoseconds. There was also one
43*387f9dfdSAndroid Build Coastguard Workeroccurrence, an outlier, in the 2 to 4 millisecond range.
44*387f9dfdSAndroid Build Coastguard Worker
45*387f9dfdSAndroid Build Coastguard WorkerHow this works: the function entry and return are traced using the kernel kprobe
46*387f9dfdSAndroid Build Coastguard Workerand kretprobe tracer. Timestamps are collected, the delta time calculated, which
47*387f9dfdSAndroid Build Coastguard Workeris the bucketized and stored as an in-kernel histogram for efficiency. The
48*387f9dfdSAndroid Build Coastguard Workerhistogram is visible in the output: it's the "count" column; everything else is
49*387f9dfdSAndroid Build Coastguard Workerdecoration. Only the count column is copied to user-level on output. This is an
50*387f9dfdSAndroid Build Coastguard Workerefficient way to time kernel functions and examine their latency distribution.
51*387f9dfdSAndroid Build Coastguard Worker
52*387f9dfdSAndroid Build Coastguard Worker
53*387f9dfdSAndroid Build Coastguard WorkerNow trace a user function, pthread_mutex_lock in libpthread, to determine if
54*387f9dfdSAndroid Build Coastguard Workerthere is considerable lock contention:
55*387f9dfdSAndroid Build Coastguard Worker
56*387f9dfdSAndroid Build Coastguard Worker# ./funclatency pthread:pthread_mutex_lock -p $(pidof contentions)
57*387f9dfdSAndroid Build Coastguard WorkerTracing 1 function for "pthread:pthread_mutex_lock"... Hit Ctrl-C to end.
58*387f9dfdSAndroid Build Coastguard Worker     nsecs               : count     distribution
59*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
60*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 0        |                                        |
61*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 0        |                                        |
62*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 0        |                                        |
63*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 0        |                                        |
64*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 0        |                                        |
65*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 0        |                                        |
66*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 0        |                                        |
67*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 0        |                                        |
68*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 0        |                                        |
69*387f9dfdSAndroid Build Coastguard Worker      1024 -> 2047       : 0        |                                        |
70*387f9dfdSAndroid Build Coastguard Worker      2048 -> 4095       : 508967   |****************************************|
71*387f9dfdSAndroid Build Coastguard Worker      4096 -> 8191       : 70072    |*****                                   |
72*387f9dfdSAndroid Build Coastguard Worker      8192 -> 16383      : 27686    |**                                      |
73*387f9dfdSAndroid Build Coastguard Worker     16384 -> 32767      : 5075     |                                        |
74*387f9dfdSAndroid Build Coastguard Worker     32768 -> 65535      : 2318     |                                        |
75*387f9dfdSAndroid Build Coastguard Worker     65536 -> 131071     : 581      |                                        |
76*387f9dfdSAndroid Build Coastguard Worker    131072 -> 262143     : 38       |                                        |
77*387f9dfdSAndroid Build Coastguard Worker    262144 -> 524287     : 5        |                                        |
78*387f9dfdSAndroid Build Coastguard Worker    524288 -> 1048575    : 1        |                                        |
79*387f9dfdSAndroid Build Coastguard Worker   1048576 -> 2097151    : 9        |                                        |
80*387f9dfdSAndroid Build Coastguard Worker
81*387f9dfdSAndroid Build Coastguard Workeravg = 4317 nsecs, total: 2654426112 nsecs, count: 614752
82*387f9dfdSAndroid Build Coastguard Worker
83*387f9dfdSAndroid Build Coastguard WorkerDetaching...
84*387f9dfdSAndroid Build Coastguard Worker
85*387f9dfdSAndroid Build Coastguard WorkerIt seems that most calls to pthread_mutex_lock completed rather quickly (in
86*387f9dfdSAndroid Build Coastguard Workerunder 4us), but there were some cases of considerable contention, sometimes
87*387f9dfdSAndroid Build Coastguard Workerover a full millisecond.
88*387f9dfdSAndroid Build Coastguard Worker
89*387f9dfdSAndroid Build Coastguard Worker
90*387f9dfdSAndroid Build Coastguard WorkerRun a quick-and-dirty profiler over all the functions in an executable:
91*387f9dfdSAndroid Build Coastguard Worker# ./funclatency /home/user/primes:* -p $(pidof primes) -F
92*387f9dfdSAndroid Build Coastguard WorkerTracing 15 functions for "/home/user/primes:*"... Hit Ctrl-C to end.
93*387f9dfdSAndroid Build Coastguard Worker^C
94*387f9dfdSAndroid Build Coastguard Worker
95*387f9dfdSAndroid Build Coastguard WorkerFunction = is_prime [6556]
96*387f9dfdSAndroid Build Coastguard Worker     nsecs               : count     distribution
97*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
98*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 0        |                                        |
99*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 0        |                                        |
100*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 0        |                                        |
101*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 0        |                                        |
102*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 0        |                                        |
103*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 0        |                                        |
104*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 0        |                                        |
105*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 0        |                                        |
106*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 0        |                                        |
107*387f9dfdSAndroid Build Coastguard Worker      1024 -> 2047       : 0        |                                        |
108*387f9dfdSAndroid Build Coastguard Worker      2048 -> 4095       : 1495322  |****************************************|
109*387f9dfdSAndroid Build Coastguard Worker      4096 -> 8191       : 95744    |**                                      |
110*387f9dfdSAndroid Build Coastguard Worker      8192 -> 16383      : 9926     |                                        |
111*387f9dfdSAndroid Build Coastguard Worker     16384 -> 32767      : 3070     |                                        |
112*387f9dfdSAndroid Build Coastguard Worker     32768 -> 65535      : 1415     |                                        |
113*387f9dfdSAndroid Build Coastguard Worker     65536 -> 131071     : 112      |                                        |
114*387f9dfdSAndroid Build Coastguard Worker    131072 -> 262143     : 9        |                                        |
115*387f9dfdSAndroid Build Coastguard Worker    262144 -> 524287     : 3        |                                        |
116*387f9dfdSAndroid Build Coastguard Worker    524288 -> 1048575    : 0        |                                        |
117*387f9dfdSAndroid Build Coastguard Worker   1048576 -> 2097151    : 8        |                                        |
118*387f9dfdSAndroid Build Coastguard Worker
119*387f9dfdSAndroid Build Coastguard WorkerFunction = insert_result [6556]
120*387f9dfdSAndroid Build Coastguard Worker     nsecs               : count     distribution
121*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
122*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 0        |                                        |
123*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 0        |                                        |
124*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 0        |                                        |
125*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 0        |                                        |
126*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 0        |                                        |
127*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 0        |                                        |
128*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 0        |                                        |
129*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 0        |                                        |
130*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 0        |                                        |
131*387f9dfdSAndroid Build Coastguard Worker      1024 -> 2047       : 0        |                                        |
132*387f9dfdSAndroid Build Coastguard Worker      2048 -> 4095       : 111047   |****************************************|
133*387f9dfdSAndroid Build Coastguard Worker      4096 -> 8191       : 3998     |*                                       |
134*387f9dfdSAndroid Build Coastguard Worker      8192 -> 16383      : 720      |                                        |
135*387f9dfdSAndroid Build Coastguard Worker     16384 -> 32767      : 238      |                                        |
136*387f9dfdSAndroid Build Coastguard Worker     32768 -> 65535      : 106      |                                        |
137*387f9dfdSAndroid Build Coastguard Worker     65536 -> 131071     : 5        |                                        |
138*387f9dfdSAndroid Build Coastguard Worker    131072 -> 262143     : 4        |                                        |
139*387f9dfdSAndroid Build Coastguard Worker
140*387f9dfdSAndroid Build Coastguard Workeravg = 3404 nsecs, total: 5862276096 nsecs, count: 1721727
141*387f9dfdSAndroid Build Coastguard Worker
142*387f9dfdSAndroid Build Coastguard WorkerDetaching...
143*387f9dfdSAndroid Build Coastguard Worker
144*387f9dfdSAndroid Build Coastguard WorkerFrom the results, we can see that the is_prime function has something resembling
145*387f9dfdSAndroid Build Coastguard Workeran exponential distribution -- very few primes take a very long time to test,
146*387f9dfdSAndroid Build Coastguard Workerwhile most numbers are verified as prime or composite in less than 4us. The
147*387f9dfdSAndroid Build Coastguard Workerinsert_result function exhibits a similar phenomenon, likely due to contention
148*387f9dfdSAndroid Build Coastguard Workerover a shared results container.
149*387f9dfdSAndroid Build Coastguard Worker
150*387f9dfdSAndroid Build Coastguard Worker
151*387f9dfdSAndroid Build Coastguard WorkerNow vfs_read() is traced, and a microseconds histogram printed:
152*387f9dfdSAndroid Build Coastguard Worker
153*387f9dfdSAndroid Build Coastguard Worker# ./funclatency -u vfs_read
154*387f9dfdSAndroid Build Coastguard WorkerTracing vfs_read... Hit Ctrl-C to end.
155*387f9dfdSAndroid Build Coastguard Worker^C
156*387f9dfdSAndroid Build Coastguard Worker     usecs           : count     distribution
157*387f9dfdSAndroid Build Coastguard Worker       0 -> 1        : 1143     |**************************************|
158*387f9dfdSAndroid Build Coastguard Worker       2 -> 3        : 420      |*************                         |
159*387f9dfdSAndroid Build Coastguard Worker       4 -> 7        : 159      |*****                                 |
160*387f9dfdSAndroid Build Coastguard Worker       8 -> 15       : 295      |*********                             |
161*387f9dfdSAndroid Build Coastguard Worker      16 -> 31       : 25       |                                      |
162*387f9dfdSAndroid Build Coastguard Worker      32 -> 63       : 5        |                                      |
163*387f9dfdSAndroid Build Coastguard Worker      64 -> 127      : 1        |                                      |
164*387f9dfdSAndroid Build Coastguard Worker     128 -> 255      : 0        |                                      |
165*387f9dfdSAndroid Build Coastguard Worker     256 -> 511      : 0        |                                      |
166*387f9dfdSAndroid Build Coastguard Worker     512 -> 1023     : 0        |                                      |
167*387f9dfdSAndroid Build Coastguard Worker    1024 -> 2047     : 1        |                                      |
168*387f9dfdSAndroid Build Coastguard Worker    2048 -> 4095     : 0        |                                      |
169*387f9dfdSAndroid Build Coastguard Worker    4096 -> 8191     : 5        |                                      |
170*387f9dfdSAndroid Build Coastguard Worker    8192 -> 16383    : 0        |                                      |
171*387f9dfdSAndroid Build Coastguard Worker   16384 -> 32767    : 0        |                                      |
172*387f9dfdSAndroid Build Coastguard Worker   32768 -> 65535    : 0        |                                      |
173*387f9dfdSAndroid Build Coastguard Worker   65536 -> 131071   : 7        |                                      |
174*387f9dfdSAndroid Build Coastguard Worker  131072 -> 262143   : 7        |                                      |
175*387f9dfdSAndroid Build Coastguard Worker  262144 -> 524287   : 3        |                                      |
176*387f9dfdSAndroid Build Coastguard Worker  524288 -> 1048575  : 7        |                                      |
177*387f9dfdSAndroid Build Coastguard Worker
178*387f9dfdSAndroid Build Coastguard Workeravg = 4229 nsecs, total: 8789145 nsecs, count: 2078
179*387f9dfdSAndroid Build Coastguard Worker
180*387f9dfdSAndroid Build Coastguard WorkerDetaching...
181*387f9dfdSAndroid Build Coastguard Worker
182*387f9dfdSAndroid Build Coastguard WorkerThis shows a bimodal distribution. Many vfs_read() calls were faster than 15
183*387f9dfdSAndroid Build Coastguard Workermicroseconds, however, there was also a small handful between 65 milliseconds
184*387f9dfdSAndroid Build Coastguard Workerand 1 second, seen at the bottom of the table. These are likely network reads
185*387f9dfdSAndroid Build Coastguard Workerfrom SSH, waiting on interactive keystrokes.
186*387f9dfdSAndroid Build Coastguard Worker
187*387f9dfdSAndroid Build Coastguard Worker
188*387f9dfdSAndroid Build Coastguard WorkerTracing do_nanosleep() in milliseconds:
189*387f9dfdSAndroid Build Coastguard Worker
190*387f9dfdSAndroid Build Coastguard Worker# ./funclatency -m do_nanosleep
191*387f9dfdSAndroid Build Coastguard WorkerTracing do_nanosleep... Hit Ctrl-C to end.
192*387f9dfdSAndroid Build Coastguard Worker^C
193*387f9dfdSAndroid Build Coastguard Worker     msecs           : count     distribution
194*387f9dfdSAndroid Build Coastguard Worker       0 -> 1        : 0        |                                      |
195*387f9dfdSAndroid Build Coastguard Worker       2 -> 3        : 0        |                                      |
196*387f9dfdSAndroid Build Coastguard Worker       4 -> 7        : 0        |                                      |
197*387f9dfdSAndroid Build Coastguard Worker       8 -> 15       : 0        |                                      |
198*387f9dfdSAndroid Build Coastguard Worker      16 -> 31       : 0        |                                      |
199*387f9dfdSAndroid Build Coastguard Worker      32 -> 63       : 0        |                                      |
200*387f9dfdSAndroid Build Coastguard Worker      64 -> 127      : 0        |                                      |
201*387f9dfdSAndroid Build Coastguard Worker     128 -> 255      : 0        |                                      |
202*387f9dfdSAndroid Build Coastguard Worker     256 -> 511      : 0        |                                      |
203*387f9dfdSAndroid Build Coastguard Worker     512 -> 1023     : 328      |**************************************|
204*387f9dfdSAndroid Build Coastguard Worker    1024 -> 2047     : 0        |                                      |
205*387f9dfdSAndroid Build Coastguard Worker    2048 -> 4095     : 0        |                                      |
206*387f9dfdSAndroid Build Coastguard Worker    4096 -> 8191     : 32       |***                                   |
207*387f9dfdSAndroid Build Coastguard Worker    8192 -> 16383    : 0        |                                      |
208*387f9dfdSAndroid Build Coastguard Worker   16384 -> 32767    : 0        |                                      |
209*387f9dfdSAndroid Build Coastguard Worker   32768 -> 65535    : 2        |                                      |
210*387f9dfdSAndroid Build Coastguard Worker
211*387f9dfdSAndroid Build Coastguard Workeravg = 1510 nsecs, total: 546816 nsecs, count: 326
212*387f9dfdSAndroid Build Coastguard Worker
213*387f9dfdSAndroid Build Coastguard WorkerDetaching...
214*387f9dfdSAndroid Build Coastguard Worker
215*387f9dfdSAndroid Build Coastguard WorkerThis looks like it has found threads that are sleeping every 1, 5, and 60
216*387f9dfdSAndroid Build Coastguard Workerseconds.
217*387f9dfdSAndroid Build Coastguard Worker
218*387f9dfdSAndroid Build Coastguard Worker
219*387f9dfdSAndroid Build Coastguard WorkerAn interval can be provided using -i, and timestamps added using -T. For
220*387f9dfdSAndroid Build Coastguard Workerexample, tracing vfs_read() latency in milliseconds and printing output
221*387f9dfdSAndroid Build Coastguard Workerevery 5 seconds:
222*387f9dfdSAndroid Build Coastguard Worker
223*387f9dfdSAndroid Build Coastguard Worker# ./funclatency -mTi 5 vfs_read
224*387f9dfdSAndroid Build Coastguard WorkerTracing vfs_read... Hit Ctrl-C to end.
225*387f9dfdSAndroid Build Coastguard Worker
226*387f9dfdSAndroid Build Coastguard Worker20:10:08
227*387f9dfdSAndroid Build Coastguard Worker     msecs           : count     distribution
228*387f9dfdSAndroid Build Coastguard Worker       0 -> 1        : 1500     |*************************************+|
229*387f9dfdSAndroid Build Coastguard Worker       2 -> 3        : 3        |                                      |
230*387f9dfdSAndroid Build Coastguard Worker       4 -> 7        : 1        |                                      |
231*387f9dfdSAndroid Build Coastguard Worker       8 -> 15       : 2        |                                      |
232*387f9dfdSAndroid Build Coastguard Worker      16 -> 31       : 0        |                                      |
233*387f9dfdSAndroid Build Coastguard Worker      32 -> 63       : 0        |                                      |
234*387f9dfdSAndroid Build Coastguard Worker      64 -> 127      : 4        |                                      |
235*387f9dfdSAndroid Build Coastguard Worker     128 -> 255      : 3        |                                      |
236*387f9dfdSAndroid Build Coastguard Worker     256 -> 511      : 1        |                                      |
237*387f9dfdSAndroid Build Coastguard Worker     512 -> 1023     : 7        |                                      |
238*387f9dfdSAndroid Build Coastguard Worker
239*387f9dfdSAndroid Build Coastguard Workeravg = 5 nsecs, total: 8259 nsecs, count: 1521
240*387f9dfdSAndroid Build Coastguard Worker
241*387f9dfdSAndroid Build Coastguard Worker20:10:13
242*387f9dfdSAndroid Build Coastguard Worker     msecs           : count     distribution
243*387f9dfdSAndroid Build Coastguard Worker       0 -> 1        : 1251     |*************************************+|
244*387f9dfdSAndroid Build Coastguard Worker       2 -> 3        : 3        |                                      |
245*387f9dfdSAndroid Build Coastguard Worker       4 -> 7        : 2        |                                      |
246*387f9dfdSAndroid Build Coastguard Worker       8 -> 15       : 0        |                                      |
247*387f9dfdSAndroid Build Coastguard Worker      16 -> 31       : 2        |                                      |
248*387f9dfdSAndroid Build Coastguard Worker      32 -> 63       : 3        |                                      |
249*387f9dfdSAndroid Build Coastguard Worker      64 -> 127      : 5        |                                      |
250*387f9dfdSAndroid Build Coastguard Worker     128 -> 255      : 5        |                                      |
251*387f9dfdSAndroid Build Coastguard Worker     256 -> 511      : 3        |                                      |
252*387f9dfdSAndroid Build Coastguard Worker     512 -> 1023     : 6        |                                      |
253*387f9dfdSAndroid Build Coastguard Worker    1024 -> 2047     : 2        |                                      |
254*387f9dfdSAndroid Build Coastguard Worker
255*387f9dfdSAndroid Build Coastguard Workeravg = 9 nsecs, total: 11736 nsecs, count: 1282
256*387f9dfdSAndroid Build Coastguard Worker
257*387f9dfdSAndroid Build Coastguard Worker20:10:18
258*387f9dfdSAndroid Build Coastguard Worker     msecs           : count     distribution
259*387f9dfdSAndroid Build Coastguard Worker       0 -> 1        : 1265     |*************************************+|
260*387f9dfdSAndroid Build Coastguard Worker       2 -> 3        : 0        |                                      |
261*387f9dfdSAndroid Build Coastguard Worker       4 -> 7        : 5        |                                      |
262*387f9dfdSAndroid Build Coastguard Worker       8 -> 15       : 9        |                                      |
263*387f9dfdSAndroid Build Coastguard Worker      16 -> 31       : 7        |                                      |
264*387f9dfdSAndroid Build Coastguard Worker      32 -> 63       : 1        |                                      |
265*387f9dfdSAndroid Build Coastguard Worker      64 -> 127      : 2        |                                      |
266*387f9dfdSAndroid Build Coastguard Worker     128 -> 255      : 3        |                                      |
267*387f9dfdSAndroid Build Coastguard Worker     256 -> 511      : 5        |                                      |
268*387f9dfdSAndroid Build Coastguard Worker     512 -> 1023     : 5        |                                      |
269*387f9dfdSAndroid Build Coastguard Worker    1024 -> 2047     : 0        |                                      |
270*387f9dfdSAndroid Build Coastguard Worker    2048 -> 4095     : 1        |                                      |
271*387f9dfdSAndroid Build Coastguard Worker
272*387f9dfdSAndroid Build Coastguard Workeravg = 8 nsecs, total: 11219 nsecs, count: 1303
273*387f9dfdSAndroid Build Coastguard Worker
274*387f9dfdSAndroid Build Coastguard Worker^C
275*387f9dfdSAndroid Build Coastguard Worker20:10:20
276*387f9dfdSAndroid Build Coastguard Worker     msecs           : count     distribution
277*387f9dfdSAndroid Build Coastguard Worker       0 -> 1        : 249      |*************************************+|
278*387f9dfdSAndroid Build Coastguard Worker       2 -> 3        : 0        |                                      |
279*387f9dfdSAndroid Build Coastguard Worker       4 -> 7        : 0        |                                      |
280*387f9dfdSAndroid Build Coastguard Worker       8 -> 15       : 1        |                                      |
281*387f9dfdSAndroid Build Coastguard Worker      16 -> 31       : 0        |                                      |
282*387f9dfdSAndroid Build Coastguard Worker      32 -> 63       : 0        |                                      |
283*387f9dfdSAndroid Build Coastguard Worker      64 -> 127      : 0        |                                      |
284*387f9dfdSAndroid Build Coastguard Worker     128 -> 255      : 0        |                                      |
285*387f9dfdSAndroid Build Coastguard Worker     256 -> 511      : 0        |                                      |
286*387f9dfdSAndroid Build Coastguard Worker     512 -> 1023     : 1        |                                      |
287*387f9dfdSAndroid Build Coastguard Worker
288*387f9dfdSAndroid Build Coastguard Workeravg = 4 nsecs, total: 1029 nsecs, count: 251
289*387f9dfdSAndroid Build Coastguard Worker
290*387f9dfdSAndroid Build Coastguard WorkerDetaching...
291*387f9dfdSAndroid Build Coastguard Worker
292*387f9dfdSAndroid Build Coastguard Worker
293*387f9dfdSAndroid Build Coastguard WorkerA single process can be traced, which filters in-kernel for efficiency. Here,
294*387f9dfdSAndroid Build Coastguard Workerthe vfs_read() function is timed as milliseconds for PID 17064, which is a
295*387f9dfdSAndroid Build Coastguard Workerbash shell:
296*387f9dfdSAndroid Build Coastguard Worker
297*387f9dfdSAndroid Build Coastguard Worker# ./funclatency -mp 17064 vfs_read
298*387f9dfdSAndroid Build Coastguard WorkerTracing vfs_read... Hit Ctrl-C to end.
299*387f9dfdSAndroid Build Coastguard Worker^C
300*387f9dfdSAndroid Build Coastguard Worker     msecs           : count     distribution
301*387f9dfdSAndroid Build Coastguard Worker       0 -> 1        : 1        |**                                    |
302*387f9dfdSAndroid Build Coastguard Worker       2 -> 3        : 0        |                                      |
303*387f9dfdSAndroid Build Coastguard Worker       4 -> 7        : 0        |                                      |
304*387f9dfdSAndroid Build Coastguard Worker       8 -> 15       : 1        |**                                    |
305*387f9dfdSAndroid Build Coastguard Worker      16 -> 31       : 2        |*****                                 |
306*387f9dfdSAndroid Build Coastguard Worker      32 -> 63       : 0        |                                      |
307*387f9dfdSAndroid Build Coastguard Worker      64 -> 127      : 13       |**************************************|
308*387f9dfdSAndroid Build Coastguard Worker     128 -> 255      : 10       |*****************************         |
309*387f9dfdSAndroid Build Coastguard Worker     256 -> 511      : 4        |***********                           |
310*387f9dfdSAndroid Build Coastguard Worker
311*387f9dfdSAndroid Build Coastguard Workeravg = 153 nsecs, total: 4765 nsecs, count: 31
312*387f9dfdSAndroid Build Coastguard Worker
313*387f9dfdSAndroid Build Coastguard WorkerDetaching...
314*387f9dfdSAndroid Build Coastguard Worker
315*387f9dfdSAndroid Build Coastguard WorkerThe distribution between 64 and 511 milliseconds shows keystroke latency.
316*387f9dfdSAndroid Build Coastguard Worker
317*387f9dfdSAndroid Build Coastguard Worker
318*387f9dfdSAndroid Build Coastguard WorkerThe -F option can be used to print a histogram per function. Eg:
319*387f9dfdSAndroid Build Coastguard Worker
320*387f9dfdSAndroid Build Coastguard Worker# ./funclatency -uF 'vfs_r*'
321*387f9dfdSAndroid Build Coastguard WorkerTracing 5 functions for "vfs_r*"... Hit Ctrl-C to end.
322*387f9dfdSAndroid Build Coastguard Worker^C
323*387f9dfdSAndroid Build Coastguard Worker
324*387f9dfdSAndroid Build Coastguard WorkerFunction = vfs_read
325*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
326*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 1044     |****************************************|
327*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 383      |**************                          |
328*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 76       |**                                      |
329*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 41       |*                                       |
330*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 26       |                                        |
331*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 0        |                                        |
332*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 1        |                                        |
333*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 0        |                                        |
334*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 0        |                                        |
335*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 0        |                                        |
336*387f9dfdSAndroid Build Coastguard Worker      1024 -> 2047       : 0        |                                        |
337*387f9dfdSAndroid Build Coastguard Worker      2048 -> 4095       : 4        |                                        |
338*387f9dfdSAndroid Build Coastguard Worker      4096 -> 8191       : 2        |                                        |
339*387f9dfdSAndroid Build Coastguard Worker      8192 -> 16383      : 0        |                                        |
340*387f9dfdSAndroid Build Coastguard Worker     16384 -> 32767      : 0        |                                        |
341*387f9dfdSAndroid Build Coastguard Worker     32768 -> 65535      : 2        |                                        |
342*387f9dfdSAndroid Build Coastguard Worker     65536 -> 131071     : 5        |                                        |
343*387f9dfdSAndroid Build Coastguard Worker    131072 -> 262143     : 5        |                                        |
344*387f9dfdSAndroid Build Coastguard Worker    262144 -> 524287     : 3        |                                        |
345*387f9dfdSAndroid Build Coastguard Worker    524288 -> 1048575    : 7        |                                        |
346*387f9dfdSAndroid Build Coastguard Worker
347*387f9dfdSAndroid Build Coastguard WorkerFunction = vfs_rename
348*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
349*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 2        |****                                    |
350*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 2        |****                                    |
351*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 2        |****                                    |
352*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 0        |                                        |
353*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 6        |*************                           |
354*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 18       |****************************************|
355*387f9dfdSAndroid Build Coastguard Worker
356*387f9dfdSAndroid Build Coastguard Workeravg = 5087 nsecs, total: 8287001 nsecs, count: 1629
357*387f9dfdSAndroid Build Coastguard Worker
358*387f9dfdSAndroid Build Coastguard WorkerDetaching...
359*387f9dfdSAndroid Build Coastguard Worker
360*387f9dfdSAndroid Build Coastguard Worker
361*387f9dfdSAndroid Build Coastguard Worker
362*387f9dfdSAndroid Build Coastguard WorkerUSAGE message:
363*387f9dfdSAndroid Build Coastguard Worker
364*387f9dfdSAndroid Build Coastguard Worker# ./funclatency -h
365*387f9dfdSAndroid Build Coastguard Workerusage: funclatency [-h] [-p PID] [-i INTERVAL] [-T] [-u] [-m] [-F] [-r] [-v]
366*387f9dfdSAndroid Build Coastguard Worker                   pattern
367*387f9dfdSAndroid Build Coastguard Worker
368*387f9dfdSAndroid Build Coastguard WorkerTime functions and print latency as a histogram
369*387f9dfdSAndroid Build Coastguard Worker
370*387f9dfdSAndroid Build Coastguard Workerpositional arguments:
371*387f9dfdSAndroid Build Coastguard Worker  pattern               search expression for functions
372*387f9dfdSAndroid Build Coastguard Worker
373*387f9dfdSAndroid Build Coastguard Workeroptional arguments:
374*387f9dfdSAndroid Build Coastguard Worker  -h, --help            show this help message and exit
375*387f9dfdSAndroid Build Coastguard Worker  -p PID, --pid PID     trace this PID only
376*387f9dfdSAndroid Build Coastguard Worker  -i INTERVAL, --interval INTERVAL
377*387f9dfdSAndroid Build Coastguard Worker                        summary interval, in seconds
378*387f9dfdSAndroid Build Coastguard Worker  -d DURATION, --duration DURATION
379*387f9dfdSAndroid Build Coastguard Worker			total duration of trace, in seconds
380*387f9dfdSAndroid Build Coastguard Worker  -T, --timestamp       include timestamp on output
381*387f9dfdSAndroid Build Coastguard Worker  -u, --microseconds    microsecond histogram
382*387f9dfdSAndroid Build Coastguard Worker  -m, --milliseconds    millisecond histogram
383*387f9dfdSAndroid Build Coastguard Worker  -F, --function        show a separate histogram per function
384*387f9dfdSAndroid Build Coastguard Worker  -r, --regexp          use regular expressions. Default is "*" wildcards
385*387f9dfdSAndroid Build Coastguard Worker                        only.
386*387f9dfdSAndroid Build Coastguard Worker  -l LEVEL, --level LEVEL
387*387f9dfdSAndroid Build Coastguard Worker                        set the level of nested or recursive functions
388*387f9dfdSAndroid Build Coastguard Worker  -v, --verbose         print the BPF program (for debugging purposes)
389*387f9dfdSAndroid Build Coastguard Worker
390*387f9dfdSAndroid Build Coastguard Workerexamples:
391*387f9dfdSAndroid Build Coastguard Worker    ./funclatency do_sys_open       # time the do_sys_open() kernel function
392*387f9dfdSAndroid Build Coastguard Worker    ./funclatency c:read            # time the read() C library function
393*387f9dfdSAndroid Build Coastguard Worker    ./funclatency -u vfs_read       # time vfs_read(), in microseconds
394*387f9dfdSAndroid Build Coastguard Worker    ./funclatency -m do_nanosleep   # time do_nanosleep(), in milliseconds
395*387f9dfdSAndroid Build Coastguard Worker    ./funclatency -i 2 -d 10 c:open # output every 2 seconds, for duration 10s
396*387f9dfdSAndroid Build Coastguard Worker    ./funclatency -mTi 5 vfs_read   # output every 5 seconds, with timestamps
397*387f9dfdSAndroid Build Coastguard Worker    ./funclatency -p 181 vfs_read   # time process 181 only
398*387f9dfdSAndroid Build Coastguard Worker    ./funclatency 'vfs_fstat*'      # time both vfs_fstat() and vfs_fstatat()
399*387f9dfdSAndroid Build Coastguard Worker    ./funclatency 'c:*printf'       # time the *printf family of functions
400*387f9dfdSAndroid Build Coastguard Worker    ./funclatency -F 'vfs_r*'       # show one histogram per matched function
401