xref: /aosp_15_r20/external/bcc/tools/zfsdist_example.txt (revision 387f9dfdfa2baef462e92476d413c7bc2470293e)
1*387f9dfdSAndroid Build Coastguard WorkerDemonstrations of zfsdist, the Linux eBPF/bcc version.
2*387f9dfdSAndroid Build Coastguard Worker
3*387f9dfdSAndroid Build Coastguard Worker
4*387f9dfdSAndroid Build Coastguard Workerzfsdist traces ZFS reads, writes, opens, and fsyncs, and summarizes their
5*387f9dfdSAndroid Build Coastguard Workerlatency as a power-of-2 histogram. It has been written to work on ZFS on Linux
6*387f9dfdSAndroid Build Coastguard Worker(http://zfsonlinux.org). For example:
7*387f9dfdSAndroid Build Coastguard Worker
8*387f9dfdSAndroid Build Coastguard Worker# ./zfsdist
9*387f9dfdSAndroid Build Coastguard WorkerTracing ZFS operation latency... Hit Ctrl-C to end.
10*387f9dfdSAndroid Build Coastguard Worker^C
11*387f9dfdSAndroid Build Coastguard Worker
12*387f9dfdSAndroid Build Coastguard Workeroperation = 'read'
13*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
14*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
15*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 0        |                                        |
16*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 4479     |****************************************|
17*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 1028     |*********                               |
18*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 14       |                                        |
19*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 1        |                                        |
20*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 2        |                                        |
21*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 6        |                                        |
22*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 1        |                                        |
23*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 1256     |***********                             |
24*387f9dfdSAndroid Build Coastguard Worker      1024 -> 2047       : 9        |                                        |
25*387f9dfdSAndroid Build Coastguard Worker      2048 -> 4095       : 1        |                                        |
26*387f9dfdSAndroid Build Coastguard Worker      4096 -> 8191       : 2        |                                        |
27*387f9dfdSAndroid Build Coastguard Worker
28*387f9dfdSAndroid Build Coastguard Workeroperation = 'write'
29*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
30*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
31*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 0        |                                        |
32*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 0        |                                        |
33*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 0        |                                        |
34*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 0        |                                        |
35*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 0        |                                        |
36*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 0        |                                        |
37*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 75       |****************************************|
38*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 11       |*****                                   |
39*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 0        |                                        |
40*387f9dfdSAndroid Build Coastguard Worker      1024 -> 2047       : 0        |                                        |
41*387f9dfdSAndroid Build Coastguard Worker      2048 -> 4095       : 0        |                                        |
42*387f9dfdSAndroid Build Coastguard Worker      4096 -> 8191       : 0        |                                        |
43*387f9dfdSAndroid Build Coastguard Worker      8192 -> 16383      : 0        |                                        |
44*387f9dfdSAndroid Build Coastguard Worker     16384 -> 32767      : 0        |                                        |
45*387f9dfdSAndroid Build Coastguard Worker     32768 -> 65535      : 0        |                                        |
46*387f9dfdSAndroid Build Coastguard Worker     65536 -> 131071     : 13       |******                                  |
47*387f9dfdSAndroid Build Coastguard Worker    131072 -> 262143     : 1        |                                        |
48*387f9dfdSAndroid Build Coastguard Worker
49*387f9dfdSAndroid Build Coastguard Workeroperation = 'open'
50*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
51*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
52*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 2        |****************************************|
53*387f9dfdSAndroid Build Coastguard Worker
54*387f9dfdSAndroid Build Coastguard WorkerThis output shows a bimodal distribution for read latency, with a faster
55*387f9dfdSAndroid Build Coastguard Workermode of around 5 thousand reads that took between 4 and 15 microseconds, and a
56*387f9dfdSAndroid Build Coastguard Workerslower mode of 1256 reads that took between 512 and 1023 microseconds. It's
57*387f9dfdSAndroid Build Coastguard Workerlikely that the faster mode was a hit from the in-memory file system cache,
58*387f9dfdSAndroid Build Coastguard Workerand the slower mode is a read from a storage device (disk).
59*387f9dfdSAndroid Build Coastguard Worker
60*387f9dfdSAndroid Build Coastguard WorkerThe write latency is also bimodal, with a faster mode between 128 and 511 us,
61*387f9dfdSAndroid Build Coastguard Workerand the slower mode between 65 and 131 ms.
62*387f9dfdSAndroid Build Coastguard Worker
63*387f9dfdSAndroid Build Coastguard WorkerThis "latency" is measured from when the operation was issued from the VFS
64*387f9dfdSAndroid Build Coastguard Workerinterface to the file system (via the ZFS POSIX layer), to when it completed.
65*387f9dfdSAndroid Build Coastguard WorkerThis spans everything: block device I/O (disk I/O), file system CPU cycles,
66*387f9dfdSAndroid Build Coastguard Workerfile system locks, run queue latency, etc. This is a better measure of the
67*387f9dfdSAndroid Build Coastguard Workerlatency suffered by applications reading from the file system than measuring
68*387f9dfdSAndroid Build Coastguard Workerthis down at the block device interface.
69*387f9dfdSAndroid Build Coastguard Worker
70*387f9dfdSAndroid Build Coastguard WorkerNote that this only traces the common file system operations previously
71*387f9dfdSAndroid Build Coastguard Workerlisted: other file system operations (eg, inode operations including
72*387f9dfdSAndroid Build Coastguard Workergetattr()) are not traced.
73*387f9dfdSAndroid Build Coastguard Worker
74*387f9dfdSAndroid Build Coastguard Worker
75*387f9dfdSAndroid Build Coastguard WorkerAn optional interval and a count can be provided, as well as -m to show the
76*387f9dfdSAndroid Build Coastguard Workerdistributions in milliseconds. For example:
77*387f9dfdSAndroid Build Coastguard Worker
78*387f9dfdSAndroid Build Coastguard Worker# ./zfsdist 1 5
79*387f9dfdSAndroid Build Coastguard WorkerTracing ZFS operation latency... Hit Ctrl-C to end.
80*387f9dfdSAndroid Build Coastguard Worker
81*387f9dfdSAndroid Build Coastguard Worker06:55:41:
82*387f9dfdSAndroid Build Coastguard Worker
83*387f9dfdSAndroid Build Coastguard Workeroperation = 'read'
84*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
85*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
86*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 0        |                                        |
87*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 3976     |****************************************|
88*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 1181     |***********                             |
89*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 18       |                                        |
90*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 4        |                                        |
91*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 17       |                                        |
92*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 16       |                                        |
93*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 0        |                                        |
94*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 1275     |************                            |
95*387f9dfdSAndroid Build Coastguard Worker      1024 -> 2047       : 36       |                                        |
96*387f9dfdSAndroid Build Coastguard Worker      2048 -> 4095       : 3        |                                        |
97*387f9dfdSAndroid Build Coastguard Worker      4096 -> 8191       : 0        |                                        |
98*387f9dfdSAndroid Build Coastguard Worker      8192 -> 16383      : 1        |                                        |
99*387f9dfdSAndroid Build Coastguard Worker     16384 -> 32767      : 1        |                                        |
100*387f9dfdSAndroid Build Coastguard Worker
101*387f9dfdSAndroid Build Coastguard Worker06:55:42:
102*387f9dfdSAndroid Build Coastguard Worker
103*387f9dfdSAndroid Build Coastguard Workeroperation = 'read'
104*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
105*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
106*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 0        |                                        |
107*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 12751    |****************************************|
108*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 1190     |***                                     |
109*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 38       |                                        |
110*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 7        |                                        |
111*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 85       |                                        |
112*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 47       |                                        |
113*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 0        |                                        |
114*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 1010     |***                                     |
115*387f9dfdSAndroid Build Coastguard Worker      1024 -> 2047       : 49       |                                        |
116*387f9dfdSAndroid Build Coastguard Worker      2048 -> 4095       : 12       |                                        |
117*387f9dfdSAndroid Build Coastguard Worker
118*387f9dfdSAndroid Build Coastguard Worker06:55:43:
119*387f9dfdSAndroid Build Coastguard Worker
120*387f9dfdSAndroid Build Coastguard Workeroperation = 'read'
121*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
122*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
123*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 0        |                                        |
124*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 80925    |****************************************|
125*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 1645     |                                        |
126*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 251      |                                        |
127*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 24       |                                        |
128*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 16       |                                        |
129*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 12       |                                        |
130*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 0        |                                        |
131*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 80       |                                        |
132*387f9dfdSAndroid Build Coastguard Worker      1024 -> 2047       : 1        |                                        |
133*387f9dfdSAndroid Build Coastguard Worker
134*387f9dfdSAndroid Build Coastguard Worker06:55:44:
135*387f9dfdSAndroid Build Coastguard Worker
136*387f9dfdSAndroid Build Coastguard Workeroperation = 'read'
137*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
138*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
139*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 0        |                                        |
140*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 81207    |****************************************|
141*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 2075     |*                                       |
142*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 2005     |                                        |
143*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 177      |                                        |
144*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 3        |                                        |
145*387f9dfdSAndroid Build Coastguard Worker
146*387f9dfdSAndroid Build Coastguard Worker06:55:45:
147*387f9dfdSAndroid Build Coastguard Worker
148*387f9dfdSAndroid Build Coastguard Workeroperation = 'read'
149*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
150*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
151*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 0        |                                        |
152*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 74364    |****************************************|
153*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 865      |                                        |
154*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 4960     |**                                      |
155*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 625      |                                        |
156*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 2        |                                        |
157*387f9dfdSAndroid Build Coastguard Worker
158*387f9dfdSAndroid Build Coastguard WorkerThis workload was randomly reading from a file that became cached. The slower
159*387f9dfdSAndroid Build Coastguard Workermode can be seen to disappear by the final summaries.
160*387f9dfdSAndroid Build Coastguard Worker
161*387f9dfdSAndroid Build Coastguard Worker
162*387f9dfdSAndroid Build Coastguard WorkerUSAGE message:
163*387f9dfdSAndroid Build Coastguard Worker
164*387f9dfdSAndroid Build Coastguard Worker# ./zfsdist -h
165*387f9dfdSAndroid Build Coastguard Workerusage: zfsdist [-h] [-T] [-m] [-p PID] [interval] [count]
166*387f9dfdSAndroid Build Coastguard Worker
167*387f9dfdSAndroid Build Coastguard WorkerSummarize ZFS operation latency
168*387f9dfdSAndroid Build Coastguard Worker
169*387f9dfdSAndroid Build Coastguard Workerpositional arguments:
170*387f9dfdSAndroid Build Coastguard Worker  interval            output interval, in seconds
171*387f9dfdSAndroid Build Coastguard Worker  count               number of outputs
172*387f9dfdSAndroid Build Coastguard Worker
173*387f9dfdSAndroid Build Coastguard Workeroptional arguments:
174*387f9dfdSAndroid Build Coastguard Worker  -h, --help          show this help message and exit
175*387f9dfdSAndroid Build Coastguard Worker  -T, --notimestamp   don't include timestamp on interval output
176*387f9dfdSAndroid Build Coastguard Worker  -m, --milliseconds  output in milliseconds
177*387f9dfdSAndroid Build Coastguard Worker  -p PID, --pid PID   trace this PID only
178*387f9dfdSAndroid Build Coastguard Worker
179*387f9dfdSAndroid Build Coastguard Workerexamples:
180*387f9dfdSAndroid Build Coastguard Worker    ./zfsdist            # show operation latency as a histogram
181*387f9dfdSAndroid Build Coastguard Worker    ./zfsdist -p 181     # trace PID 181 only
182*387f9dfdSAndroid Build Coastguard Worker    ./zfsdist 1 10       # print 1 second summaries, 10 times
183*387f9dfdSAndroid Build Coastguard Worker    ./zfsdist -m 5       # 5s summaries, milliseconds
184