xref: /aosp_15_r20/external/bcc/tools/nfsdist_example.txt (revision 387f9dfdfa2baef462e92476d413c7bc2470293e)
1*387f9dfdSAndroid Build Coastguard WorkerDemonstrations of nfsdist, the Linux eBPF/bcc version.
2*387f9dfdSAndroid Build Coastguard Worker
3*387f9dfdSAndroid Build Coastguard Workernfsdist traces NFS reads, writes, opens, and getattr, and summarizes their
4*387f9dfdSAndroid Build Coastguard Workerlatency as a power-of-2 histogram. For example:
5*387f9dfdSAndroid Build Coastguard Worker
6*387f9dfdSAndroid Build Coastguard Worker
7*387f9dfdSAndroid Build Coastguard Worker./nfsdist.py
8*387f9dfdSAndroid Build Coastguard Worker
9*387f9dfdSAndroid Build Coastguard WorkerTracing NFS operation latency... Hit Ctrl-C to end.
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          : 4        |                                        |
14*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 0        |                                        |
15*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 0        |                                        |
16*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 7107     |**************                          |
17*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 19864    |****************************************|
18*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 1494     |***                                     |
19*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 491      |                                        |
20*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 1810     |***                                     |
21*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 6356     |************                            |
22*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 4860     |*********                               |
23*387f9dfdSAndroid Build Coastguard Worker      1024 -> 2047       : 3070     |******                                  |
24*387f9dfdSAndroid Build Coastguard Worker      2048 -> 4095       : 1853     |***                                     |
25*387f9dfdSAndroid Build Coastguard Worker      4096 -> 8191       : 921      |*                                       |
26*387f9dfdSAndroid Build Coastguard Worker      8192 -> 16383      : 122      |                                        |
27*387f9dfdSAndroid Build Coastguard Worker     16384 -> 32767      : 15       |                                        |
28*387f9dfdSAndroid Build Coastguard Worker     32768 -> 65535      : 5        |                                        |
29*387f9dfdSAndroid Build Coastguard Worker     65536 -> 131071     : 2        |                                        |
30*387f9dfdSAndroid Build Coastguard Worker    131072 -> 262143     : 1        |                                        |
31*387f9dfdSAndroid Build Coastguard Worker
32*387f9dfdSAndroid Build Coastguard Workeroperation = write
33*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
34*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
35*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 0        |                                        |
36*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 0        |                                        |
37*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 1        |                                        |
38*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 0        |                                        |
39*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 9        |                                        |
40*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 19491    |****************************************|
41*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 3064     |******                                  |
42*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 940      |*                                       |
43*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 365      |                                        |
44*387f9dfdSAndroid Build Coastguard Worker      1024 -> 2047       : 312      |                                        |
45*387f9dfdSAndroid Build Coastguard Worker      2048 -> 4095       : 119      |                                        |
46*387f9dfdSAndroid Build Coastguard Worker      4096 -> 8191       : 31       |                                        |
47*387f9dfdSAndroid Build Coastguard Worker      8192 -> 16383      : 84       |                                        |
48*387f9dfdSAndroid Build Coastguard Worker     16384 -> 32767      : 31       |                                        |
49*387f9dfdSAndroid Build Coastguard Worker     32768 -> 65535      : 5        |                                        |
50*387f9dfdSAndroid Build Coastguard Worker     65536 -> 131071     : 3        |                                        |
51*387f9dfdSAndroid Build Coastguard Worker    131072 -> 262143     : 0        |                                        |
52*387f9dfdSAndroid Build Coastguard Worker    262144 -> 524287     : 1        |                                        |
53*387f9dfdSAndroid Build Coastguard Worker
54*387f9dfdSAndroid Build Coastguard Workeroperation = getattr
55*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
56*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 27       |****************************************|
57*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 2        |**                                      |
58*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 3        |****                                    |
59*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 0        |                                        |
60*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 0        |                                        |
61*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 0        |                                        |
62*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 0        |                                        |
63*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 0        |                                        |
64*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 2        |**                                      |
65*387f9dfdSAndroid Build Coastguard Worker       512 -> 1023       : 2        |**                                      |
66*387f9dfdSAndroid Build Coastguard Worker
67*387f9dfdSAndroid Build Coastguard Workeroperation = open
68*387f9dfdSAndroid Build Coastguard Worker     usecs               : count     distribution
69*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
70*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 0        |                                        |
71*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 0        |                                        |
72*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 0        |                                        |
73*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 0        |                                        |
74*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 0        |                                        |
75*387f9dfdSAndroid Build Coastguard Worker        64 -> 127        : 0        |                                        |
76*387f9dfdSAndroid Build Coastguard Worker       128 -> 255        : 0        |                                        |
77*387f9dfdSAndroid Build Coastguard Worker       256 -> 511        : 2        |****************************************|
78*387f9dfdSAndroid Build Coastguard Worker
79*387f9dfdSAndroid Build Coastguard Worker
80*387f9dfdSAndroid Build Coastguard WorkerIn this example you can see that the read traffic is rather bi-modal, with about
81*387f9dfdSAndroid Build Coastguard Worker26K reads falling within 8 - 30 usecs and about 18K reads spread between 128 -
82*387f9dfdSAndroid Build Coastguard Worker8191 usecs. Write traffic is largely clustered in the 64 - 127 usecs bracket.
83*387f9dfdSAndroid Build Coastguard WorkerThe faster read traffic is probably coming from a filesystem cache and the slower
84*387f9dfdSAndroid Build Coastguard Workertraffic from disk. The reason why the writes are so consistently fast is because
85*387f9dfdSAndroid Build Coastguard Workerthis example test was run on a couple of VM's and I believe the hypervisor was
86*387f9dfdSAndroid Build Coastguard Workercaching all the write traffic to memory.
87*387f9dfdSAndroid Build Coastguard Worker
88*387f9dfdSAndroid Build Coastguard WorkerThis "latency" is measured from when the operation was issued from the VFS
89*387f9dfdSAndroid Build Coastguard Workerinterface to the file system, to when it completed. This spans everything:
90*387f9dfdSAndroid Build Coastguard WorkerRPC latency, network latency, file system CPU cycles, file system locks, run
91*387f9dfdSAndroid Build Coastguard Workerqueue latency, etc. This is a better measure of the latency suffered by
92*387f9dfdSAndroid Build Coastguard Workerapplications reading from a NFS share and can better expose problems
93*387f9dfdSAndroid Build Coastguard Workerexperienced by NFS clients.
94*387f9dfdSAndroid Build Coastguard Worker
95*387f9dfdSAndroid Build Coastguard WorkerNote that this only traces the common NFS operations (read, write, open and
96*387f9dfdSAndroid Build Coastguard Workergetattr). I chose to include getattr as a significant percentage of NFS
97*387f9dfdSAndroid Build Coastguard Workertraffic end up being getattr calls and are a good indicator of problems
98*387f9dfdSAndroid Build Coastguard Workerwith an NFS server.
99*387f9dfdSAndroid Build Coastguard Worker
100*387f9dfdSAndroid Build Coastguard WorkerAn optional interval and a count can be provided, as well as -m to show the
101*387f9dfdSAndroid Build Coastguard Workerdistributions in milliseconds. For example:
102*387f9dfdSAndroid Build Coastguard Worker
103*387f9dfdSAndroid Build Coastguard Worker./nfsdist -m 1 5
104*387f9dfdSAndroid Build Coastguard WorkerTracing NFS operation latency... Hit Ctrl-C to end.
105*387f9dfdSAndroid Build Coastguard Worker
106*387f9dfdSAndroid Build Coastguard Worker11:02:39:
107*387f9dfdSAndroid Build Coastguard Worker
108*387f9dfdSAndroid Build Coastguard Workeroperation = write
109*387f9dfdSAndroid Build Coastguard Worker     msecs               : count     distribution
110*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 1        |                                        |
111*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 24       |********                                |
112*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 114      |****************************************|
113*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 9        |***                                     |
114*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 1        |                                        |
115*387f9dfdSAndroid Build Coastguard Worker        32 -> 63         : 1        |                                        |
116*387f9dfdSAndroid Build Coastguard Worker
117*387f9dfdSAndroid Build Coastguard Worker11:02:40:
118*387f9dfdSAndroid Build Coastguard Worker
119*387f9dfdSAndroid Build Coastguard Workeroperation = write
120*387f9dfdSAndroid Build Coastguard Worker     msecs               : count     distribution
121*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
122*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 11       |***                                     |
123*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 111      |****************************************|
124*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 13       |****                                    |
125*387f9dfdSAndroid Build Coastguard Worker        16 -> 31         : 1        |                                        |
126*387f9dfdSAndroid Build Coastguard Worker
127*387f9dfdSAndroid Build Coastguard Worker11:02:41:
128*387f9dfdSAndroid Build Coastguard Worker
129*387f9dfdSAndroid Build Coastguard Workeroperation = write
130*387f9dfdSAndroid Build Coastguard Worker     msecs               : count     distribution
131*387f9dfdSAndroid Build Coastguard Worker         0 -> 1          : 0        |                                        |
132*387f9dfdSAndroid Build Coastguard Worker         2 -> 3          : 21       |******                                  |
133*387f9dfdSAndroid Build Coastguard Worker         4 -> 7          : 137      |****************************************|
134*387f9dfdSAndroid Build Coastguard Worker         8 -> 15         : 3        |                                        |
135*387f9dfdSAndroid Build Coastguard Worker
136*387f9dfdSAndroid Build Coastguard WorkerThis shows a write workload, with writes hovering primarily in the 4-7ms range.
137*387f9dfdSAndroid Build Coastguard Worker
138*387f9dfdSAndroid Build Coastguard WorkerUSAGE message:
139*387f9dfdSAndroid Build Coastguard Worker
140*387f9dfdSAndroid Build Coastguard Worker
141*387f9dfdSAndroid Build Coastguard Worker./nfsdist -h
142*387f9dfdSAndroid Build Coastguard Workerusage: nfsdist.py [-h] [-T] [-m] [-p PID] [interval] [count]
143*387f9dfdSAndroid Build Coastguard Worker
144*387f9dfdSAndroid Build Coastguard WorkerSummarize NFS operation latency
145*387f9dfdSAndroid Build Coastguard Worker
146*387f9dfdSAndroid Build Coastguard Workerpositional arguments:
147*387f9dfdSAndroid Build Coastguard Worker  interval            output interval, in seconds
148*387f9dfdSAndroid Build Coastguard Worker  count               number of outputs
149*387f9dfdSAndroid Build Coastguard Worker
150*387f9dfdSAndroid Build Coastguard Workeroptional arguments:
151*387f9dfdSAndroid Build Coastguard Worker  -h, --help          show this help message and exit
152*387f9dfdSAndroid Build Coastguard Worker  -T, --notimestamp   don't include timestamp on interval output
153*387f9dfdSAndroid Build Coastguard Worker  -m, --milliseconds  output in milliseconds
154*387f9dfdSAndroid Build Coastguard Worker  -p PID, --pid PID   trace this PID only
155*387f9dfdSAndroid Build Coastguard Worker
156*387f9dfdSAndroid Build Coastguard Workerexamples:
157*387f9dfdSAndroid Build Coastguard Worker    ./nfsdist            # show operation latency as a histogram
158*387f9dfdSAndroid Build Coastguard Worker    ./nfsdist -p 181     # trace PID 181 only
159*387f9dfdSAndroid Build Coastguard Worker    ./nfsdist 1 10       # print 1 second summaries, 10 times
160*387f9dfdSAndroid Build Coastguard Worker    ./nfsdist -m 5       # 5s summaries, milliseconds
161