xref: /aosp_15_r20/external/bcc/tools/btrfsdist_example.txt (revision 387f9dfdfa2baef462e92476d413c7bc2470293e)
1*387f9dfdSAndroid Build Coastguard WorkerDemonstrations of btrfsdist, the Linux eBPF/bcc version.
2*387f9dfdSAndroid Build Coastguard Worker
3*387f9dfdSAndroid Build Coastguard Worker
4*387f9dfdSAndroid Build Coastguard Workerbtrfsdist traces btrfs reads, writes, opens, and fsyncs, and summarizes their
5*387f9dfdSAndroid Build Coastguard Workerlatency as a power-of-2 histogram. For example:
6*387f9dfdSAndroid Build Coastguard Worker
7*387f9dfdSAndroid Build Coastguard Worker# ./btrfsdist
8*387f9dfdSAndroid Build Coastguard WorkerTracing btrfs operation latency... Hit Ctrl-C to end.
9*387f9dfdSAndroid Build Coastguard Worker^C
10*387f9dfdSAndroid Build Coastguard Worker
11*387f9dfdSAndroid Build Coastguard Workeroperation = 'read'
12*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
13*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 15       |                                        |
14*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 1308     |*******                                 |
15*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 198      |*                                       |
16*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 0        |                                        |
17*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 11       |                                        |
18*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 361      |*                                       |
19*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 55       |                                        |
20*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 104      |                                        |
21*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 7312     |****************************************|
22*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 387      |**                                      |
23*387f9dfdSAndroid Build Coastguard Worker      1024 -> 2047       : 10       |                                        |
24*387f9dfdSAndroid Build Coastguard Worker      2048 -> 4095       : 4        |                                        |
25*387f9dfdSAndroid Build Coastguard Worker
26*387f9dfdSAndroid Build Coastguard Workeroperation = 'write'
27*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
28*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
29*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 0        |                                        |
30*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 0        |                                        |
31*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 4        |****************************************|
32*387f9dfdSAndroid Build Coastguard Worker
33*387f9dfdSAndroid Build Coastguard Workeroperation = 'open'
34*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
35*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 1        |**********                              |
36*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 4        |****************************************|
37*387f9dfdSAndroid Build Coastguard Worker
38*387f9dfdSAndroid Build Coastguard WorkerThis output shows a bi-modal distribution for read latency, with a faster
39*387f9dfdSAndroid Build Coastguard Workermode of 1,308 reads that took between 2 and 3 microseconds, and a slower
40*387f9dfdSAndroid Build Coastguard Workermode of over 7,312 reads that took between 256 and 511 microseconds. It's
41*387f9dfdSAndroid Build Coastguard Workerlikely that the faster mode was a hit from the in-memory file system cache,
42*387f9dfdSAndroid Build Coastguard Workerand the slower mode is a read from a storage device (disk).
43*387f9dfdSAndroid Build Coastguard Worker
44*387f9dfdSAndroid Build Coastguard WorkerThis "latency" is measured from when the operation was issued from the VFS
45*387f9dfdSAndroid Build Coastguard Workerinterface to the file system, to when it completed. This spans everything:
46*387f9dfdSAndroid Build Coastguard Workerblock device I/O (disk I/O), file system CPU cycles, file system locks, run
47*387f9dfdSAndroid Build Coastguard Workerqueue latency, etc. This is a better measure of the latency suffered by
48*387f9dfdSAndroid Build Coastguard Workerapplications reading from the file system than measuring this down at the
49*387f9dfdSAndroid Build Coastguard Workerblock device interface.
50*387f9dfdSAndroid Build Coastguard Worker
51*387f9dfdSAndroid Build Coastguard WorkerNote that this only traces the common file system operations previously
52*387f9dfdSAndroid Build Coastguard Workerlisted: other file system operations (eg, inode operations including
53*387f9dfdSAndroid Build Coastguard Workergetattr()) are not traced.
54*387f9dfdSAndroid Build Coastguard Worker
55*387f9dfdSAndroid Build Coastguard Worker
56*387f9dfdSAndroid Build Coastguard WorkerAn optional interval and a count can be provided, as well as -m to show the
57*387f9dfdSAndroid Build Coastguard Workerdistributions in milliseconds. For example, two second summaries, five times:
58*387f9dfdSAndroid Build Coastguard Worker
59*387f9dfdSAndroid Build Coastguard Worker# ./btrfsdist 2 5
60*387f9dfdSAndroid Build Coastguard WorkerTracing btrfs operation latency... Hit Ctrl-C to end.
61*387f9dfdSAndroid Build Coastguard Worker
62*387f9dfdSAndroid Build Coastguard Worker03:40:49:
63*387f9dfdSAndroid Build Coastguard Worker
64*387f9dfdSAndroid Build Coastguard Workeroperation = 'read'
65*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
66*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 15       |                                        |
67*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 833      |********                                |
68*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 127      |*                                       |
69*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 0        |                                        |
70*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 8        |                                        |
71*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 907      |********                                |
72*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 91       |                                        |
73*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 246      |**                                      |
74*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 4164     |****************************************|
75*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 193      |*                                       |
76*387f9dfdSAndroid Build Coastguard Worker      1024 -> 2047       : 4        |                                        |
77*387f9dfdSAndroid Build Coastguard Worker      2048 -> 4095       : 6        |                                        |
78*387f9dfdSAndroid Build Coastguard Worker      4096 -> 8191       : 2        |                                        |
79*387f9dfdSAndroid Build Coastguard Worker
80*387f9dfdSAndroid Build Coastguard Worker03:40:51:
81*387f9dfdSAndroid Build Coastguard Worker
82*387f9dfdSAndroid Build Coastguard Workeroperation = 'read'
83*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
84*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 25       |                                        |
85*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 1491     |***************                         |
86*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 218      |**                                      |
87*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 0        |                                        |
88*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 16       |                                        |
89*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 1527     |***************                         |
90*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 319      |***                                     |
91*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 429      |****                                    |
92*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 3841     |****************************************|
93*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 232      |**                                      |
94*387f9dfdSAndroid Build Coastguard Worker      1024 -> 2047       : 3        |                                        |
95*387f9dfdSAndroid Build Coastguard Worker      2048 -> 4095       : 6        |                                        |
96*387f9dfdSAndroid Build Coastguard Worker      4096 -> 8191       : 1        |                                        |
97*387f9dfdSAndroid Build Coastguard Worker      8192 -> 16383      : 1        |                                        |
98*387f9dfdSAndroid Build Coastguard Worker
99*387f9dfdSAndroid Build Coastguard Worker03:40:53:
100*387f9dfdSAndroid Build Coastguard Worker
101*387f9dfdSAndroid Build Coastguard Workeroperation = 'read'
102*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
103*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 27       |                                        |
104*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 2999     |*********************************       |
105*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 407      |****                                    |
106*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 0        |                                        |
107*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 46       |                                        |
108*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 3538     |****************************************|
109*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 595      |******                                  |
110*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 621      |*******                                 |
111*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 3532     |*************************************** |
112*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 212      |**                                      |
113*387f9dfdSAndroid Build Coastguard Worker      1024 -> 2047       : 1        |                                        |
114*387f9dfdSAndroid Build Coastguard Worker      2048 -> 4095       : 0        |                                        |
115*387f9dfdSAndroid Build Coastguard Worker      4096 -> 8191       : 0        |                                        |
116*387f9dfdSAndroid Build Coastguard Worker      8192 -> 16383      : 0        |                                        |
117*387f9dfdSAndroid Build Coastguard Worker     16384 -> 32767      : 1        |                                        |
118*387f9dfdSAndroid Build Coastguard Worker
119*387f9dfdSAndroid Build Coastguard Worker03:40:55:
120*387f9dfdSAndroid Build Coastguard Worker
121*387f9dfdSAndroid Build Coastguard Workeroperation = 'read'
122*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
123*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 221      |                                        |
124*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 12580    |****************************************|
125*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 1366     |****                                    |
126*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 0        |                                        |
127*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 289      |                                        |
128*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 10782    |**********************************      |
129*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 1232     |***                                     |
130*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 807      |**                                      |
131*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 2299     |*******                                 |
132*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 135      |                                        |
133*387f9dfdSAndroid Build Coastguard Worker      1024 -> 2047       : 5        |                                        |
134*387f9dfdSAndroid Build Coastguard Worker      2048 -> 4095       : 2        |                                        |
135*387f9dfdSAndroid Build Coastguard Worker
136*387f9dfdSAndroid Build Coastguard Worker03:40:57:
137*387f9dfdSAndroid Build Coastguard Worker
138*387f9dfdSAndroid Build Coastguard Workeroperation = 'read'
139*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
140*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 73951    |*************************               |
141*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 117639   |****************************************|
142*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 7943     |**                                      |
143*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 1841     |                                        |
144*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 1143     |                                        |
145*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 5006     |*                                       |
146*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 483      |                                        |
147*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 242      |                                        |
148*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 253      |                                        |
149*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 84       |                                        |
150*387f9dfdSAndroid Build Coastguard Worker      1024 -> 2047       : 23       |                                        |
151*387f9dfdSAndroid Build Coastguard Worker
152*387f9dfdSAndroid Build Coastguard WorkerThis shows a read workload that begins bimodal, and eventually the second
153*387f9dfdSAndroid Build Coastguard Workermode disappears. The reason for this is that the workload cached during
154*387f9dfdSAndroid Build Coastguard Workertracing. Note that the rate also increased, with over 200k reads for the
155*387f9dfdSAndroid Build Coastguard Workerfinal two second sample.
156*387f9dfdSAndroid Build Coastguard Worker
157*387f9dfdSAndroid Build Coastguard Worker
158*387f9dfdSAndroid Build Coastguard WorkerUSAGE message:
159*387f9dfdSAndroid Build Coastguard Worker
160*387f9dfdSAndroid Build Coastguard Worker# ./btrfsdist -h
161*387f9dfdSAndroid Build Coastguard Workerusage: btrfsdist [-h] [-T] [-m] [-p PID] [interval] [count]
162*387f9dfdSAndroid Build Coastguard Worker
163*387f9dfdSAndroid Build Coastguard WorkerSummarize btrfs operation latency
164*387f9dfdSAndroid Build Coastguard Worker
165*387f9dfdSAndroid Build Coastguard Workerpositional arguments:
166*387f9dfdSAndroid Build Coastguard Worker  interval            output interval, in seconds
167*387f9dfdSAndroid Build Coastguard Worker  count               number of outputs
168*387f9dfdSAndroid Build Coastguard Worker
169*387f9dfdSAndroid Build Coastguard Workeroptional arguments:
170*387f9dfdSAndroid Build Coastguard Worker  -h, --help          show this help message and exit
171*387f9dfdSAndroid Build Coastguard Worker  -T, --notimestamp   don't include timestamp on interval output
172*387f9dfdSAndroid Build Coastguard Worker  -m, --milliseconds  output in milliseconds
173*387f9dfdSAndroid Build Coastguard Worker  -p PID, --pid PID   trace this PID only
174*387f9dfdSAndroid Build Coastguard Worker
175*387f9dfdSAndroid Build Coastguard Workerexamples:
176*387f9dfdSAndroid Build Coastguard Worker    ./btrfsdist            # show operation latency as a histogram
177*387f9dfdSAndroid Build Coastguard Worker    ./btrfsdist -p 181     # trace PID 181 only
178*387f9dfdSAndroid Build Coastguard Worker    ./btrfsdist 1 10       # print 1 second summaries, 10 times
179*387f9dfdSAndroid Build Coastguard Worker    ./btrfsdist -m 5       # 5s summaries, milliseconds
180