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