1*387f9dfdSAndroid Build Coastguard WorkerDemonstrations of xfsslower, the Linux eBPF/bcc version. 2*387f9dfdSAndroid Build Coastguard Worker 3*387f9dfdSAndroid Build Coastguard Worker 4*387f9dfdSAndroid Build Coastguard Workerxfsslower shows XFS reads, writes, opens, and fsyncs, slower than a threshold. 5*387f9dfdSAndroid Build Coastguard WorkerFor example: 6*387f9dfdSAndroid Build Coastguard Worker 7*387f9dfdSAndroid Build Coastguard Worker# ./xfsslower 8*387f9dfdSAndroid Build Coastguard WorkerTracing XFS operations slower than 10 ms 9*387f9dfdSAndroid Build Coastguard WorkerTIME COMM PID T BYTES OFF_KB LAT(ms) FILENAME 10*387f9dfdSAndroid Build Coastguard Worker06:23:06 randread.pl 32497 R 8192 24938024 17.93 data1 11*387f9dfdSAndroid Build Coastguard Worker06:23:06 randread.pl 32521 R 8192 13431528 18.27 data1 12*387f9dfdSAndroid Build Coastguard Worker06:23:08 randread.pl 32497 R 8192 5070904 16.37 data1 13*387f9dfdSAndroid Build Coastguard Worker06:23:08 randread.pl 32521 R 8192 12693016 16.06 data1 14*387f9dfdSAndroid Build Coastguard Worker06:23:18 randread.pl 32521 R 8192 27049136 21.68 data1 15*387f9dfdSAndroid Build Coastguard Worker06:23:18 randread.pl 32497 R 8192 257864 21.74 data1 16*387f9dfdSAndroid Build Coastguard Worker06:23:20 randread.pl 32497 R 8192 17797208 13.37 data1 17*387f9dfdSAndroid Build Coastguard Worker06:23:20 randread.pl 32497 R 8192 6088224 19.74 data1 18*387f9dfdSAndroid Build Coastguard Worker 19*387f9dfdSAndroid Build Coastguard WorkerThis shows several reads from a "randread.pl" program, each 8 Kbytes in size, 20*387f9dfdSAndroid Build Coastguard Workerand from a "data1" file. These all had over 10 ms latency. 21*387f9dfdSAndroid Build Coastguard Worker 22*387f9dfdSAndroid Build Coastguard WorkerThis "latency" is measured from when the operation was issued from the VFS 23*387f9dfdSAndroid Build Coastguard Workerinterface to the file system, to when it completed. This spans everything: 24*387f9dfdSAndroid Build Coastguard Workerblock device I/O (disk I/O), file system CPU cycles, file system locks, run 25*387f9dfdSAndroid Build Coastguard Workerqueue latency, etc. This is a better measure of the latency suffered by 26*387f9dfdSAndroid Build Coastguard Workerapplications reading from the file system than measuring this down at the 27*387f9dfdSAndroid Build Coastguard Workerblock device interface. 28*387f9dfdSAndroid Build Coastguard Worker 29*387f9dfdSAndroid Build Coastguard WorkerNote that this only traces the common file system operations previously 30*387f9dfdSAndroid Build Coastguard Workerlisted: other file system operations (eg, inode operations including 31*387f9dfdSAndroid Build Coastguard Workergetattr()) are not traced. 32*387f9dfdSAndroid Build Coastguard Worker 33*387f9dfdSAndroid Build Coastguard Worker 34*387f9dfdSAndroid Build Coastguard WorkerThe threshold can be provided as an argument. Eg, I/O slower than 1 ms: 35*387f9dfdSAndroid Build Coastguard Worker 36*387f9dfdSAndroid Build Coastguard Worker# ./xfsslower 1 37*387f9dfdSAndroid Build Coastguard WorkerTracing XFS operations slower than 1 ms 38*387f9dfdSAndroid Build Coastguard WorkerTIME COMM PID T BYTES OFF_KB LAT(ms) FILENAME 39*387f9dfdSAndroid Build Coastguard Worker06:26:59 randread.pl 5394 R 8192 9045728 1.24 data1 40*387f9dfdSAndroid Build Coastguard Worker06:26:59 randread.pl 5394 R 8192 23532136 1.17 data1 41*387f9dfdSAndroid Build Coastguard Worker06:26:59 randread.pl 5442 R 8192 2192376 2.06 data1 42*387f9dfdSAndroid Build Coastguard Worker06:27:00 randread.pl 5394 R 8192 3535176 1.27 data1 43*387f9dfdSAndroid Build Coastguard Worker06:27:00 randread.pl 5442 R 8192 21361784 3.18 data1 44*387f9dfdSAndroid Build Coastguard Worker06:27:00 randread.pl 5394 R 8192 2556336 3.23 data1 45*387f9dfdSAndroid Build Coastguard Worker06:27:00 randread.pl 5394 R 8192 20020880 2.87 data1 46*387f9dfdSAndroid Build Coastguard Worker06:27:00 randread.pl 5442 R 8192 20708888 3.32 data1 47*387f9dfdSAndroid Build Coastguard Worker06:27:00 randread.pl 5394 R 8192 4654680 2.00 data1 48*387f9dfdSAndroid Build Coastguard Worker06:27:00 randread.pl 5442 R 8192 5591744 1.98 data1 49*387f9dfdSAndroid Build Coastguard Worker06:27:00 randread.pl 5394 R 8192 2431056 1.22 data1 50*387f9dfdSAndroid Build Coastguard Worker06:27:00 randread.pl 5394 R 8192 384288 2.95 data1 51*387f9dfdSAndroid Build Coastguard Worker06:27:00 randread.pl 5442 R 8192 29277672 3.07 data1 52*387f9dfdSAndroid Build Coastguard Worker06:27:00 randread.pl 5442 R 8192 29508216 3.23 data1 53*387f9dfdSAndroid Build Coastguard Worker06:27:00 randread.pl 5394 R 8192 17200008 2.86 data1 54*387f9dfdSAndroid Build Coastguard Worker06:27:00 randread.pl 5442 R 8192 20693088 1.06 data1 55*387f9dfdSAndroid Build Coastguard Worker06:27:00 randread.pl 5394 R 8192 28124192 1.38 data1 56*387f9dfdSAndroid Build Coastguard Worker06:27:00 randread.pl 5442 R 8192 23821184 1.28 data1 57*387f9dfdSAndroid Build Coastguard Worker06:27:00 randread.pl 5394 R 8192 1623200 1.47 data1 58*387f9dfdSAndroid Build Coastguard Worker[...] 59*387f9dfdSAndroid Build Coastguard Worker 60*387f9dfdSAndroid Build Coastguard WorkerThere's now much more output (this spans only 2 seconds, the previous output 61*387f9dfdSAndroid Build Coastguard Workerspanned 14 seconds), as the lower threshold is catching more I/O. 62*387f9dfdSAndroid Build Coastguard Worker 63*387f9dfdSAndroid Build Coastguard Worker 64*387f9dfdSAndroid Build Coastguard WorkerA threshold of 0 will trace all operations. Warning: the output will be 65*387f9dfdSAndroid Build Coastguard Workerverbose, as it will include all file system cache hits. 66*387f9dfdSAndroid Build Coastguard Worker 67*387f9dfdSAndroid Build Coastguard Worker# ./xfsslower 0 68*387f9dfdSAndroid Build Coastguard WorkerTracing XFS operations 69*387f9dfdSAndroid Build Coastguard WorkerTIME COMM PID T BYTES OFF_KB LAT(ms) FILENAME 70*387f9dfdSAndroid Build Coastguard Worker06:29:43 ls 9291 O 0 0 0.00 bench 71*387f9dfdSAndroid Build Coastguard Worker06:29:47 cat 9361 O 0 0 0.00 date.txt 72*387f9dfdSAndroid Build Coastguard Worker06:29:47 cat 9361 R 29 0 0.01 date.txt 73*387f9dfdSAndroid Build Coastguard Worker06:29:47 cat 9361 R 0 0 0.00 date.txt 74*387f9dfdSAndroid Build Coastguard Worker06:29:50 bash 20500 O 0 0 0.00 bench 75*387f9dfdSAndroid Build Coastguard Worker06:29:50 bash 20500 O 0 0 0.00 bench 76*387f9dfdSAndroid Build Coastguard Worker06:29:50 bash 20500 O 0 0 0.00 bench 77*387f9dfdSAndroid Build Coastguard Worker06:29:50 bash 9431 O 0 0 0.00 bench 78*387f9dfdSAndroid Build Coastguard Worker06:29:50 bash 9432 O 0 0 0.00 bench 79*387f9dfdSAndroid Build Coastguard Worker06:29:50 bash 9456 O 0 0 0.00 newdate.txt 80*387f9dfdSAndroid Build Coastguard Worker06:29:50 date 9456 W 29 0 0.01 newdate.txt 81*387f9dfdSAndroid Build Coastguard Worker06:29:53 cksum 9503 O 0 0 0.00 data1 82*387f9dfdSAndroid Build Coastguard Worker06:29:53 cksum 9503 R 65536 0 0.06 data1 83*387f9dfdSAndroid Build Coastguard Worker06:29:53 cksum 9503 R 65536 64 0.01 data1 84*387f9dfdSAndroid Build Coastguard Worker06:29:53 cksum 9503 R 65536 128 0.02 data1 85*387f9dfdSAndroid Build Coastguard Worker06:29:53 cksum 9503 R 65536 192 0.01 data1 86*387f9dfdSAndroid Build Coastguard Worker06:29:53 cksum 9503 R 65536 256 0.01 data1 87*387f9dfdSAndroid Build Coastguard Worker06:29:53 cksum 9503 R 65536 320 0.01 data1 88*387f9dfdSAndroid Build Coastguard Worker06:29:53 cksum 9503 R 65536 384 0.01 data1 89*387f9dfdSAndroid Build Coastguard Worker06:29:53 cksum 9503 R 65536 448 0.04 data1 90*387f9dfdSAndroid Build Coastguard Worker06:29:53 cksum 9503 R 65536 512 0.01 data1 91*387f9dfdSAndroid Build Coastguard Worker06:29:53 cksum 9503 R 65536 576 0.02 data1 92*387f9dfdSAndroid Build Coastguard Worker06:29:53 cksum 9503 R 65536 640 0.01 data1 93*387f9dfdSAndroid Build Coastguard Worker06:29:53 cksum 9503 R 65536 704 0.01 data1 94*387f9dfdSAndroid Build Coastguard Worker06:29:53 cksum 9503 R 65536 768 0.01 data1 95*387f9dfdSAndroid Build Coastguard Worker06:29:53 cksum 9503 R 65536 832 0.01 data1 96*387f9dfdSAndroid Build Coastguard Worker06:29:53 cksum 9503 R 65536 896 0.01 data1 97*387f9dfdSAndroid Build Coastguard Worker06:29:53 cksum 9503 R 65536 960 0.01 data1 98*387f9dfdSAndroid Build Coastguard Worker06:29:53 cksum 9503 R 65536 1024 0.01 data1 99*387f9dfdSAndroid Build Coastguard Worker06:29:53 cksum 9503 R 65536 1088 0.02 data1 100*387f9dfdSAndroid Build Coastguard Worker06:29:53 cksum 9503 R 65536 1152 0.01 data1 101*387f9dfdSAndroid Build Coastguard Worker06:29:53 cksum 9503 R 65536 1216 0.01 data1 102*387f9dfdSAndroid Build Coastguard Worker[...] 103*387f9dfdSAndroid Build Coastguard Worker 104*387f9dfdSAndroid Build Coastguard WorkerThe output now includes open operations ("O"), and writes ("W"). A cksum(1) 105*387f9dfdSAndroid Build Coastguard Workercommand can be seen reading from a data1 file, from progressively increasing 106*387f9dfdSAndroid Build Coastguard Workeroffsets: a sequential workload. 107*387f9dfdSAndroid Build Coastguard Worker 108*387f9dfdSAndroid Build Coastguard Worker 109*387f9dfdSAndroid Build Coastguard WorkerA -j option will print just the fields (parsable output, csv): 110*387f9dfdSAndroid Build Coastguard Worker 111*387f9dfdSAndroid Build Coastguard Worker# ./xfsslower -j 1 112*387f9dfdSAndroid Build Coastguard WorkerENDTIME_us,TASK,PID,TYPE,BYTES,OFFSET_b,LATENCY_us,FILE 113*387f9dfdSAndroid Build Coastguard Worker125563830632,randread.pl,12155,R,8192,27824193536,1057,data1 114*387f9dfdSAndroid Build Coastguard Worker125565050578,randread.pl,12155,R,8192,16908525568,1969,data1 115*387f9dfdSAndroid Build Coastguard Worker125566331140,randread.pl,12202,R,8192,16310689792,1738,data1 116*387f9dfdSAndroid Build Coastguard Worker125566427955,randread.pl,12155,R,8192,11127439360,1058,data1 117*387f9dfdSAndroid Build Coastguard Worker125567223494,randread.pl,12202,R,8192,8422031360,1131,data1 118*387f9dfdSAndroid Build Coastguard Worker125567331145,randread.pl,12155,R,8192,9233088512,1230,data1 119*387f9dfdSAndroid Build Coastguard Worker125567331220,randread.pl,12202,R,8192,12716326912,1148,data1 120*387f9dfdSAndroid Build Coastguard Worker125567334983,randread.pl,12155,R,8192,24545206272,2182,data1 121*387f9dfdSAndroid Build Coastguard Worker[...] 122*387f9dfdSAndroid Build Coastguard Worker 123*387f9dfdSAndroid Build Coastguard WorkerThis may be useful for visualizing with another tool, for example, for 124*387f9dfdSAndroid Build Coastguard Workerproducing a scatter plot of ENDTIME vs LATENCY, to look for time-based 125*387f9dfdSAndroid Build Coastguard Workerpatterns. 126*387f9dfdSAndroid Build Coastguard Worker 127*387f9dfdSAndroid Build Coastguard Worker 128*387f9dfdSAndroid Build Coastguard WorkerUSAGE message: 129*387f9dfdSAndroid Build Coastguard Worker 130*387f9dfdSAndroid Build Coastguard Worker# ./xfsslower -h 131*387f9dfdSAndroid Build Coastguard Workerusage: xfsslower [-h] [-j] [-p PID] [min_ms] 132*387f9dfdSAndroid Build Coastguard Worker 133*387f9dfdSAndroid Build Coastguard WorkerTrace common XFS file operations slower than a threshold 134*387f9dfdSAndroid Build Coastguard Worker 135*387f9dfdSAndroid Build Coastguard Workerpositional arguments: 136*387f9dfdSAndroid Build Coastguard Worker min_ms minimum I/O duration to trace, in ms (default 10) 137*387f9dfdSAndroid Build Coastguard Worker 138*387f9dfdSAndroid Build Coastguard Workeroptional arguments: 139*387f9dfdSAndroid Build Coastguard Worker -h, --help show this help message and exit 140*387f9dfdSAndroid Build Coastguard Worker -j, --csv just print fields: comma-separated values 141*387f9dfdSAndroid Build Coastguard Worker -p PID, --pid PID trace this PID only 142*387f9dfdSAndroid Build Coastguard Worker 143*387f9dfdSAndroid Build Coastguard Workerexamples: 144*387f9dfdSAndroid Build Coastguard Worker ./xfsslower # trace operations slower than 10 ms (default) 145*387f9dfdSAndroid Build Coastguard Worker ./xfsslower 1 # trace operations slower than 1 ms 146*387f9dfdSAndroid Build Coastguard Worker ./xfsslower -j 1 # ... 1 ms, parsable output (csv) 147*387f9dfdSAndroid Build Coastguard Worker ./xfsslower 0 # trace all operations (warning: verbose) 148*387f9dfdSAndroid Build Coastguard Worker ./xfsslower -p 185 # trace PID 185 only 149