1*387f9dfdSAndroid Build Coastguard WorkerDemonstrations of btrfsslower, the Linux eBPF/bcc version. 2*387f9dfdSAndroid Build Coastguard Worker 3*387f9dfdSAndroid Build Coastguard Worker 4*387f9dfdSAndroid Build Coastguard Workerbtrfsslower shows btrfs reads, writes, opens, and fsyncs, slower than a 5*387f9dfdSAndroid Build Coastguard Workerthreshold. For example: 6*387f9dfdSAndroid Build Coastguard Worker 7*387f9dfdSAndroid Build Coastguard Worker# ./btrfsslower 8*387f9dfdSAndroid Build Coastguard WorkerTracing btrfs operations slower than 10 ms 9*387f9dfdSAndroid Build Coastguard WorkerTIME COMM PID T BYTES OFF_KB LAT(ms) FILENAME 10*387f9dfdSAndroid Build Coastguard Worker01:22:03 randread.pl 13602 R 8192 391384 10.40 data1 11*387f9dfdSAndroid Build Coastguard Worker01:22:03 randread.pl 13602 R 8192 92632 10.41 data1 12*387f9dfdSAndroid Build Coastguard Worker01:22:06 randread.pl 13602 R 8192 199800 17.33 data1 13*387f9dfdSAndroid Build Coastguard Worker01:22:06 randread.pl 13602 R 8192 415160 17.21 data1 14*387f9dfdSAndroid Build Coastguard Worker01:22:07 randread.pl 13602 R 8192 729984 11.93 data1 15*387f9dfdSAndroid Build Coastguard Worker01:22:09 randread.pl 13602 R 8192 342784 11.90 data1 16*387f9dfdSAndroid Build Coastguard Worker[...] 17*387f9dfdSAndroid Build Coastguard Worker 18*387f9dfdSAndroid Build Coastguard WorkerThis shows several reads from a "randread.pl" program, each 8 Kbytes in size, 19*387f9dfdSAndroid Build Coastguard Workerand from a "data1" file. These all had over 10 ms latency. 20*387f9dfdSAndroid Build Coastguard Worker 21*387f9dfdSAndroid Build Coastguard WorkerThis "latency" is measured from when the operation was issued from the VFS 22*387f9dfdSAndroid Build Coastguard Workerinterface to the file system, to when it completed. This spans everything: 23*387f9dfdSAndroid Build Coastguard Workerblock device I/O (disk I/O), file system CPU cycles, file system locks, run 24*387f9dfdSAndroid Build Coastguard Workerqueue latency, etc. This is a better measure of the latency suffered by 25*387f9dfdSAndroid Build Coastguard Workerapplications reading from the file system than measuring this down at the 26*387f9dfdSAndroid Build Coastguard Workerblock device interface. 27*387f9dfdSAndroid Build Coastguard Worker 28*387f9dfdSAndroid Build Coastguard WorkerNote that this only traces the common file system operations previously 29*387f9dfdSAndroid Build Coastguard Workerlisted: other file system operations (eg, inode operations including 30*387f9dfdSAndroid Build Coastguard Workergetattr()) are not traced. 31*387f9dfdSAndroid Build Coastguard Worker 32*387f9dfdSAndroid Build Coastguard Worker 33*387f9dfdSAndroid Build Coastguard WorkerThe threshold can be provided as an argument. Eg, I/O slower than 1 ms: 34*387f9dfdSAndroid Build Coastguard Worker 35*387f9dfdSAndroid Build Coastguard Worker# ./btrfsslower 1 36*387f9dfdSAndroid Build Coastguard WorkerTracing btrfs operations slower than 1 ms 37*387f9dfdSAndroid Build Coastguard WorkerTIME COMM PID T BYTES OFF_KB LAT(ms) FILENAME 38*387f9dfdSAndroid Build Coastguard Worker03:26:54 randread.pl 30578 R 8192 214864 1.87 data1 39*387f9dfdSAndroid Build Coastguard Worker03:26:54 randread.pl 30578 R 8192 267600 1.48 data1 40*387f9dfdSAndroid Build Coastguard Worker03:26:54 randread.pl 30578 R 8192 704200 1.30 data1 41*387f9dfdSAndroid Build Coastguard Worker03:26:54 randread.pl 30578 R 8192 492352 3.09 data1 42*387f9dfdSAndroid Build Coastguard Worker03:26:55 randread.pl 30578 R 8192 319448 1.34 data1 43*387f9dfdSAndroid Build Coastguard Worker03:26:55 randread.pl 30578 R 8192 676032 1.88 data1 44*387f9dfdSAndroid Build Coastguard Worker03:26:55 randread.pl 30578 R 8192 646712 2.24 data1 45*387f9dfdSAndroid Build Coastguard Worker03:26:55 randread.pl 30578 R 8192 124376 1.02 data1 46*387f9dfdSAndroid Build Coastguard Worker03:26:55 randread.pl 30578 R 8192 223064 2.64 data1 47*387f9dfdSAndroid Build Coastguard Worker03:26:55 randread.pl 30578 R 8192 521280 1.55 data1 48*387f9dfdSAndroid Build Coastguard Worker03:26:55 randread.pl 30578 R 8192 272992 2.48 data1 49*387f9dfdSAndroid Build Coastguard Worker03:26:55 randread.pl 30578 R 8192 450112 2.67 data1 50*387f9dfdSAndroid Build Coastguard Worker03:26:55 randread.pl 30578 R 8192 361808 1.78 data1 51*387f9dfdSAndroid Build Coastguard Worker03:26:55 randread.pl 30578 R 8192 41088 1.46 data1 52*387f9dfdSAndroid Build Coastguard Worker03:26:55 randread.pl 30578 R 8192 756576 1.67 data1 53*387f9dfdSAndroid Build Coastguard Worker03:26:55 randread.pl 30578 R 8192 711776 2.74 data1 54*387f9dfdSAndroid Build Coastguard Worker03:26:55 randread.pl 30578 R 8192 129472 1.34 data1 55*387f9dfdSAndroid Build Coastguard Worker03:26:55 randread.pl 30578 R 8192 526928 1.82 data1 56*387f9dfdSAndroid Build Coastguard Worker03:26:56 randread.pl 30578 R 8192 312768 1.44 data1 57*387f9dfdSAndroid Build Coastguard Worker03:26:56 randread.pl 30578 R 8192 34720 1.14 data1 58*387f9dfdSAndroid Build Coastguard Worker03:26:56 randread.pl 30578 R 8192 258376 1.13 data1 59*387f9dfdSAndroid Build Coastguard Worker03:26:56 randread.pl 30578 R 8192 308456 1.44 data1 60*387f9dfdSAndroid Build Coastguard Worker03:26:56 randread.pl 30578 R 8192 759656 1.27 data1 61*387f9dfdSAndroid Build Coastguard Worker03:26:56 randread.pl 30578 R 8192 387424 3.24 data1 62*387f9dfdSAndroid Build Coastguard Worker03:26:56 randread.pl 30578 R 8192 168864 3.38 data1 63*387f9dfdSAndroid Build Coastguard Worker03:26:56 randread.pl 30578 R 8192 699296 1.38 data1 64*387f9dfdSAndroid Build Coastguard Worker03:26:56 randread.pl 30578 R 8192 405688 2.37 data1 65*387f9dfdSAndroid Build Coastguard Worker03:26:56 randread.pl 30578 R 8192 559064 1.18 data1 66*387f9dfdSAndroid Build Coastguard Worker03:26:56 randread.pl 30578 R 8192 264808 1.13 data1 67*387f9dfdSAndroid Build Coastguard Worker03:26:56 randread.pl 30578 R 8192 369240 2.20 data1 68*387f9dfdSAndroid Build Coastguard Worker[...] 69*387f9dfdSAndroid Build Coastguard Worker 70*387f9dfdSAndroid Build Coastguard WorkerThere's now much more output (this spans less than 3 seconds, the previous output 71*387f9dfdSAndroid Build Coastguard Workerspanned 6 seconds), as the lower threshold is catching more I/O. 72*387f9dfdSAndroid Build Coastguard Worker 73*387f9dfdSAndroid Build Coastguard Worker 74*387f9dfdSAndroid Build Coastguard WorkerA threshold of 0 will trace all operations. Warning: the output will be 75*387f9dfdSAndroid Build Coastguard Workerverbose, as it will include all file system cache hits. 76*387f9dfdSAndroid Build Coastguard Worker 77*387f9dfdSAndroid Build Coastguard Worker# ./btrfsslower 0 78*387f9dfdSAndroid Build Coastguard WorkerTracing btrfs operations 79*387f9dfdSAndroid Build Coastguard WorkerTIME COMM PID T BYTES OFF_KB LAT(ms) FILENAME 80*387f9dfdSAndroid Build Coastguard Worker03:28:17 bash 32597 O 0 0 0.00 date.txt 81*387f9dfdSAndroid Build Coastguard Worker03:28:17 date 32597 W 29 0 0.02 date.txt 82*387f9dfdSAndroid Build Coastguard Worker03:28:23 cksum 32743 O 0 0 0.00 date.txt 83*387f9dfdSAndroid Build Coastguard Worker03:28:23 cksum 32743 R 29 0 0.01 date.txt 84*387f9dfdSAndroid Build Coastguard Worker03:28:23 cksum 32743 R 0 0 0.00 date.txt 85*387f9dfdSAndroid Build Coastguard Worker 86*387f9dfdSAndroid Build Coastguard WorkerWhile tracing, the following commands were run in another window: 87*387f9dfdSAndroid Build Coastguard Worker 88*387f9dfdSAndroid Build Coastguard Worker# date > date.txt 89*387f9dfdSAndroid Build Coastguard Worker# cksum date.txt 90*387f9dfdSAndroid Build Coastguard Worker 91*387f9dfdSAndroid Build Coastguard WorkerThe output of btrfsslower now includes open operations ("O"), and writes ("W"). 92*387f9dfdSAndroid Build Coastguard WorkerThe first read from cksum(1) returned 29 bytes, and the second returned 0: 93*387f9dfdSAndroid Build Coastguard Workercausing cksum(1) to stop reading. 94*387f9dfdSAndroid Build Coastguard Worker 95*387f9dfdSAndroid Build Coastguard Worker 96*387f9dfdSAndroid Build Coastguard WorkerA -j option will print just the fields (parsable output, csv): 97*387f9dfdSAndroid Build Coastguard Worker 98*387f9dfdSAndroid Build Coastguard Worker# ./btrfsslower -j 1 99*387f9dfdSAndroid Build Coastguard WorkerENDTIME_us,TASK,PID,TYPE,BYTES,OFFSET_b,LATENCY_us,FILE 100*387f9dfdSAndroid Build Coastguard Worker8930665366,randread.pl,2717,R,8192,230391808,4312,data1 101*387f9dfdSAndroid Build Coastguard Worker8930670746,randread.pl,2717,R,8192,347832320,1296,data1 102*387f9dfdSAndroid Build Coastguard Worker8930675995,randread.pl,2717,R,8192,409812992,4207,data1 103*387f9dfdSAndroid Build Coastguard Worker8930680213,randread.pl,2717,R,8192,498204672,3104,data1 104*387f9dfdSAndroid Build Coastguard Worker8930685970,randread.pl,2717,R,8192,553164800,1843,data1 105*387f9dfdSAndroid Build Coastguard Worker8930687568,randread.pl,2717,R,8192,339492864,1475,data1 106*387f9dfdSAndroid Build Coastguard Worker8930694108,randread.pl,2717,R,8192,500711424,6276,data1 107*387f9dfdSAndroid Build Coastguard Worker8930697139,randread.pl,2717,R,8192,485801984,2180,data1 108*387f9dfdSAndroid Build Coastguard Worker8930705755,randread.pl,2717,R,8192,376922112,7535,data1 109*387f9dfdSAndroid Build Coastguard Worker8930711340,randread.pl,2717,R,8192,380084224,3314,data1 110*387f9dfdSAndroid Build Coastguard Worker8930740964,randread.pl,2717,R,8192,226091008,24762,data1 111*387f9dfdSAndroid Build Coastguard Worker8930743169,randread.pl,2717,R,8192,361570304,1809,data1 112*387f9dfdSAndroid Build Coastguard Worker8930748789,randread.pl,2717,R,8192,346931200,1530,data1 113*387f9dfdSAndroid Build Coastguard Worker8930763514,randread.pl,2717,R,8192,59719680,13938,data1 114*387f9dfdSAndroid Build Coastguard Worker8930764870,randread.pl,2717,R,8192,406511616,1313,data1 115*387f9dfdSAndroid Build Coastguard Worker8930774327,randread.pl,2717,R,8192,661430272,7361,data1 116*387f9dfdSAndroid Build Coastguard Worker8930780360,randread.pl,2717,R,8192,406904832,2220,data1 117*387f9dfdSAndroid Build Coastguard Worker8930785736,randread.pl,2717,R,8192,523419648,2005,data1 118*387f9dfdSAndroid Build Coastguard Worker8930794560,randread.pl,2717,R,8192,342974464,8388,data1 119*387f9dfdSAndroid Build Coastguard Worker[...] 120*387f9dfdSAndroid Build Coastguard Worker 121*387f9dfdSAndroid Build Coastguard WorkerThis may be useful for visualizing with another tool, for example, for 122*387f9dfdSAndroid Build Coastguard Workerproducing a scatter plot of ENDTIME vs LATENCY, to look for time-based 123*387f9dfdSAndroid Build Coastguard Workerpatterns. 124*387f9dfdSAndroid Build Coastguard Worker 125*387f9dfdSAndroid Build Coastguard Worker 126*387f9dfdSAndroid Build Coastguard WorkerUSAGE message: 127*387f9dfdSAndroid Build Coastguard Worker 128*387f9dfdSAndroid Build Coastguard Worker# ./btrfsslower -h 129*387f9dfdSAndroid Build Coastguard Workerusage: btrfsslower [-h] [-j] [-p PID] [min_ms] [-d DURATION] 130*387f9dfdSAndroid Build Coastguard Worker 131*387f9dfdSAndroid Build Coastguard WorkerTrace common btrfs file operations slower than a threshold 132*387f9dfdSAndroid Build Coastguard Worker 133*387f9dfdSAndroid Build Coastguard Workerpositional arguments: 134*387f9dfdSAndroid Build Coastguard Worker min_ms minimum I/O duration to trace, in ms (default 10) 135*387f9dfdSAndroid Build Coastguard Worker 136*387f9dfdSAndroid Build Coastguard Workeroptional arguments: 137*387f9dfdSAndroid Build Coastguard Worker -h, --help show this help message and exit 138*387f9dfdSAndroid Build Coastguard Worker -j, --csv just print fields: comma-separated values 139*387f9dfdSAndroid Build Coastguard Worker -p PID, --pid PID trace this PID only 140*387f9dfdSAndroid Build Coastguard Worker -d DURATION, --duration DURATION 141*387f9dfdSAndroid Build Coastguard Worker total duration of trace in seconds 142*387f9dfdSAndroid Build Coastguard Worker 143*387f9dfdSAndroid Build Coastguard Workerexamples: 144*387f9dfdSAndroid Build Coastguard Worker ./btrfsslower # trace operations slower than 10 ms (default) 145*387f9dfdSAndroid Build Coastguard Worker ./btrfsslower 1 # trace operations slower than 1 ms 146*387f9dfdSAndroid Build Coastguard Worker ./btrfsslower -j 1 # ... 1 ms, parsable output (csv) 147*387f9dfdSAndroid Build Coastguard Worker ./btrfsslower 0 # trace all operations (warning: verbose) 148*387f9dfdSAndroid Build Coastguard Worker ./btrfsslower -p 185 # trace PID 185 only 149*387f9dfdSAndroid Build Coastguard Worker ./btrfsslower -d 10 # trace for 10 seconds only 150*387f9dfdSAndroid Build Coastguard Worker 151