1*387f9dfdSAndroid Build Coastguard WorkerDemonstrations of zfsslower, the Linux eBPF/bcc version. 2*387f9dfdSAndroid Build Coastguard Worker 3*387f9dfdSAndroid Build Coastguard Worker 4*387f9dfdSAndroid Build Coastguard Workerzfsslower shows ZFS reads, writes, opens, and fsyncs, slower than a threshold. 5*387f9dfdSAndroid Build Coastguard WorkerIt has been written to work on ZFS on Linux (http://zfsonlinux.org). For 6*387f9dfdSAndroid Build Coastguard Workerexample: 7*387f9dfdSAndroid Build Coastguard Worker 8*387f9dfdSAndroid Build Coastguard Worker# ./zfsslower 9*387f9dfdSAndroid Build Coastguard WorkerTracing ZFS operations slower than 10 ms 10*387f9dfdSAndroid Build Coastguard WorkerTIME COMM PID T BYTES OFF_KB LAT(ms) FILENAME 11*387f9dfdSAndroid Build Coastguard Worker06:31:28 dd 25570 W 131072 38784 303.92 data1 12*387f9dfdSAndroid Build Coastguard Worker06:31:34 dd 25686 W 131072 38784 388.28 data1 13*387f9dfdSAndroid Build Coastguard Worker06:31:35 dd 25686 W 131072 78720 519.66 data1 14*387f9dfdSAndroid Build Coastguard Worker06:31:35 dd 25686 W 131072 116992 405.94 data1 15*387f9dfdSAndroid Build Coastguard Worker06:31:35 dd 25686 W 131072 153600 433.52 data1 16*387f9dfdSAndroid Build Coastguard Worker06:31:36 dd 25686 W 131072 188672 314.37 data1 17*387f9dfdSAndroid Build Coastguard Worker06:31:36 dd 25686 W 131072 222336 372.33 data1 18*387f9dfdSAndroid Build Coastguard Worker06:31:36 dd 25686 W 131072 254592 309.59 data1 19*387f9dfdSAndroid Build Coastguard Worker06:31:37 dd 25686 W 131072 285440 304.52 data1 20*387f9dfdSAndroid Build Coastguard Worker06:31:37 dd 25686 W 131072 315008 236.45 data1 21*387f9dfdSAndroid Build Coastguard Worker06:31:37 dd 25686 W 131072 343424 193.54 data1 22*387f9dfdSAndroid Build Coastguard Worker06:31:38 dd 25686 W 131072 370560 286.07 data1 23*387f9dfdSAndroid Build Coastguard Worker06:31:38 dd 25686 W 131072 396672 251.92 data1 24*387f9dfdSAndroid Build Coastguard Worker[...] 25*387f9dfdSAndroid Build Coastguard Worker 26*387f9dfdSAndroid Build Coastguard WorkerThis shows writes to a "data1" file, each taking well over the 10 ms threshold. 27*387f9dfdSAndroid Build Coastguard Workerthe slowest, on the 3rd line of output, reached 519.66 ms for a 128 Kbyte 28*387f9dfdSAndroid Build Coastguard Workerwrite by the "dd" command. 29*387f9dfdSAndroid Build Coastguard Worker 30*387f9dfdSAndroid Build Coastguard WorkerThis "latency" is measured from when the operation was issued from the VFS 31*387f9dfdSAndroid Build Coastguard Workerinterface to the file system (via the ZFS POSIX layer), to when it completed. 32*387f9dfdSAndroid Build Coastguard WorkerThis spans everything: block device I/O (disk I/O), file system CPU cycles, 33*387f9dfdSAndroid Build Coastguard Workerfile system locks, run queue latency, etc. This is a better measure of the 34*387f9dfdSAndroid Build Coastguard Workerlatency suffered by applications reading from the file system than measuring 35*387f9dfdSAndroid Build Coastguard Workerthis down at the block device interface. 36*387f9dfdSAndroid Build Coastguard Worker 37*387f9dfdSAndroid Build Coastguard WorkerNote that this only traces the common file system operations previously 38*387f9dfdSAndroid Build Coastguard Workerlisted: other file system operations (eg, inode operations including 39*387f9dfdSAndroid Build Coastguard Workergetattr()) are not traced. 40*387f9dfdSAndroid Build Coastguard Worker 41*387f9dfdSAndroid Build Coastguard Worker 42*387f9dfdSAndroid Build Coastguard WorkerA threshold of 0 will trace all operations. Warning: the output will be 43*387f9dfdSAndroid Build Coastguard Workerverbose, as it will include all file system cache hits. 44*387f9dfdSAndroid Build Coastguard Worker 45*387f9dfdSAndroid Build Coastguard Worker# ./zfsslower 0 46*387f9dfdSAndroid Build Coastguard WorkerTracing ZFS operations 47*387f9dfdSAndroid Build Coastguard WorkerTIME COMM PID T BYTES OFF_KB LAT(ms) FILENAME 48*387f9dfdSAndroid Build Coastguard Worker06:36:07 dd 32242 O 0 0 0.01 data1 49*387f9dfdSAndroid Build Coastguard Worker06:36:07 dd 32242 W 131072 0 0.25 data1 50*387f9dfdSAndroid Build Coastguard Worker06:36:07 dd 32242 W 131072 128 0.03 data1 51*387f9dfdSAndroid Build Coastguard Worker06:36:07 dd 32242 W 131072 256 0.04 data1 52*387f9dfdSAndroid Build Coastguard Worker06:36:07 dd 32242 W 131072 384 0.04 data1 53*387f9dfdSAndroid Build Coastguard Worker06:36:07 dd 32242 W 131072 512 0.04 data1 54*387f9dfdSAndroid Build Coastguard Worker06:36:07 dd 32242 W 131072 640 0.03 data1 55*387f9dfdSAndroid Build Coastguard Worker06:36:07 dd 32242 W 131072 768 0.03 data1 56*387f9dfdSAndroid Build Coastguard Worker06:36:07 dd 32242 W 131072 896 0.04 data1 57*387f9dfdSAndroid Build Coastguard Worker06:36:07 dd 32242 W 131072 1024 0.28 data1 58*387f9dfdSAndroid Build Coastguard Worker06:36:07 dd 32242 W 131072 1152 0.04 data1 59*387f9dfdSAndroid Build Coastguard Worker06:36:07 dd 32242 W 131072 1280 0.03 data1 60*387f9dfdSAndroid Build Coastguard Worker[...] 61*387f9dfdSAndroid Build Coastguard Worker06:36:07 dd 32242 W 131072 13824 0.04 data1 62*387f9dfdSAndroid Build Coastguard Worker06:36:07 dd 32242 W 131072 13952 0.04 data1 63*387f9dfdSAndroid Build Coastguard Worker06:36:07 dd 32242 W 131072 14080 0.04 data1 64*387f9dfdSAndroid Build Coastguard Worker06:36:07 dd 32242 W 131072 14208 398.92 data1 65*387f9dfdSAndroid Build Coastguard Worker06:36:07 dd 32242 W 131072 14336 0.04 data1 66*387f9dfdSAndroid Build Coastguard Worker06:36:07 dd 32242 W 131072 14464 0.04 data1 67*387f9dfdSAndroid Build Coastguard Worker06:36:07 dd 32242 W 131072 15104 0.03 data1 68*387f9dfdSAndroid Build Coastguard Worker[...] 69*387f9dfdSAndroid Build Coastguard Worker 70*387f9dfdSAndroid Build Coastguard WorkerThe output now includes the open operation for this file ("O"), and then the 71*387f9dfdSAndroid Build Coastguard Workerwrites. Most of the writes are very fast, with only an occasional outlier that 72*387f9dfdSAndroid Build Coastguard Workeris in the hundreds of milliseconds. 73*387f9dfdSAndroid Build Coastguard Worker 74*387f9dfdSAndroid Build Coastguard WorkerFortunately this is not a real world environment: I setup a zpool on top of a 75*387f9dfdSAndroid Build Coastguard WorkerXFS file system for testing purposes. More debugging using other tools will 76*387f9dfdSAndroid Build Coastguard Workerexplain these outliers: possibly XFS flushing. 77*387f9dfdSAndroid Build Coastguard Worker 78*387f9dfdSAndroid Build Coastguard Worker 79*387f9dfdSAndroid Build Coastguard WorkerHere's a random read workload, and showing operations slower than 1 ms: 80*387f9dfdSAndroid Build Coastguard Worker 81*387f9dfdSAndroid Build Coastguard Worker# ./zfsslower 1 82*387f9dfdSAndroid Build Coastguard WorkerTracing ZFS operations slower than 1 ms 83*387f9dfdSAndroid Build Coastguard WorkerTIME COMM PID T BYTES OFF_KB LAT(ms) FILENAME 84*387f9dfdSAndroid Build Coastguard Worker06:47:30 randread.pl 15431 R 8192 97840 1.03 data1 85*387f9dfdSAndroid Build Coastguard Worker06:47:30 randread.pl 15431 R 8192 416744 1.12 data1 86*387f9dfdSAndroid Build Coastguard Worker06:47:31 randread.pl 15431 R 8192 228856 1.96 data1 87*387f9dfdSAndroid Build Coastguard Worker06:47:31 randread.pl 15431 R 8192 452248 1.02 data1 88*387f9dfdSAndroid Build Coastguard Worker06:47:31 randread.pl 15431 R 8192 315288 5.90 data1 89*387f9dfdSAndroid Build Coastguard Worker06:47:31 randread.pl 15431 R 8192 752696 1.20 data1 90*387f9dfdSAndroid Build Coastguard Worker06:47:31 randread.pl 15431 R 8192 481832 1.39 data1 91*387f9dfdSAndroid Build Coastguard Worker06:47:31 randread.pl 15431 R 8192 673752 1.39 data1 92*387f9dfdSAndroid Build Coastguard Worker06:47:31 randread.pl 15431 R 8192 691736 1.01 data1 93*387f9dfdSAndroid Build Coastguard Worker06:47:31 randread.pl 15431 R 8192 694776 1.78 data1 94*387f9dfdSAndroid Build Coastguard Worker06:47:31 randread.pl 15431 R 8192 403328 3.75 data1 95*387f9dfdSAndroid Build Coastguard Worker06:47:31 randread.pl 15431 R 8192 567688 1.08 data1 96*387f9dfdSAndroid Build Coastguard Worker06:47:31 randread.pl 15431 R 8192 694280 1.31 data1 97*387f9dfdSAndroid Build Coastguard Worker06:47:31 randread.pl 15431 R 8192 669280 1.06 data1 98*387f9dfdSAndroid Build Coastguard Worker06:47:31 randread.pl 15431 R 8192 426608 1.56 data1 99*387f9dfdSAndroid Build Coastguard Worker06:47:31 randread.pl 15431 R 8192 42512 1.01 data1 100*387f9dfdSAndroid Build Coastguard Worker06:47:31 randread.pl 15431 R 8192 22944 1.33 data1 101*387f9dfdSAndroid Build Coastguard Worker06:47:31 randread.pl 15431 R 8192 427432 1.48 data1 102*387f9dfdSAndroid Build Coastguard Worker06:47:31 randread.pl 15431 R 8192 261320 1.28 data1 103*387f9dfdSAndroid Build Coastguard Worker06:47:31 randread.pl 15431 R 8192 132248 1.23 data1 104*387f9dfdSAndroid Build Coastguard Worker06:47:31 randread.pl 15431 R 8192 96936 1.04 data1 105*387f9dfdSAndroid Build Coastguard Worker06:47:31 randread.pl 15431 R 8192 482800 2.63 data1 106*387f9dfdSAndroid Build Coastguard Worker[...] 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# ./zfsslower -j 1 112*387f9dfdSAndroid Build Coastguard WorkerENDTIME_us,TASK,PID,TYPE,BYTES,OFFSET_b,LATENCY_us,FILE 113*387f9dfdSAndroid Build Coastguard Worker252305490911,randread.pl,17922,R,8192,163446784,1156,data1 114*387f9dfdSAndroid Build Coastguard Worker252305493852,randread.pl,17922,R,8192,321437696,1129,data1 115*387f9dfdSAndroid Build Coastguard Worker252305498839,randread.pl,17922,R,8192,475152384,1154,data1 116*387f9dfdSAndroid Build Coastguard Worker252305505515,randread.pl,17922,R,8192,49094656,1082,data1 117*387f9dfdSAndroid Build Coastguard Worker252305506774,randread.pl,17922,R,8192,470401024,1245,data1 118*387f9dfdSAndroid Build Coastguard Worker252305509265,randread.pl,17922,R,8192,553246720,2412,data1 119*387f9dfdSAndroid Build Coastguard Worker252305512365,randread.pl,17922,R,8192,20963328,1093,data1 120*387f9dfdSAndroid Build Coastguard Worker252305513755,randread.pl,17922,R,8192,304111616,1350,data1 121*387f9dfdSAndroid Build Coastguard Worker252305583330,randread.pl,17922,R,8192,166174720,1154,data1 122*387f9dfdSAndroid Build Coastguard Worker252305593913,randread.pl,17922,R,8192,175079424,1241,data1 123*387f9dfdSAndroid Build Coastguard Worker252305602833,randread.pl,17922,R,8192,305340416,3307,data1 124*387f9dfdSAndroid Build Coastguard Worker252305608663,randread.pl,17922,R,8192,655958016,2704,data1 125*387f9dfdSAndroid Build Coastguard Worker252305611212,randread.pl,17922,R,8192,40951808,1033,data1 126*387f9dfdSAndroid Build Coastguard Worker252305614609,randread.pl,17922,R,8192,318922752,2687,data1 127*387f9dfdSAndroid Build Coastguard Worker252305623800,randread.pl,17922,R,8192,246734848,2983,data1 128*387f9dfdSAndroid Build Coastguard Worker252305711125,randread.pl,17922,R,8192,581795840,1091,data1 129*387f9dfdSAndroid Build Coastguard Worker252305728694,randread.pl,17922,R,8192,710483968,1034,data1 130*387f9dfdSAndroid Build Coastguard Worker252305762046,randread.pl,17922,R,8192,329367552,1405,data1 131*387f9dfdSAndroid Build Coastguard Worker252305798215,randread.pl,17922,R,8192,44482560,1030,data1 132*387f9dfdSAndroid Build Coastguard Worker252305806748,randread.pl,17922,R,8192,660602880,1069,data1 133*387f9dfdSAndroid Build Coastguard Worker252305826360,randread.pl,17922,R,8192,616144896,2327,data1 134*387f9dfdSAndroid Build Coastguard Worker[...] 135*387f9dfdSAndroid Build Coastguard Worker 136*387f9dfdSAndroid Build Coastguard Worker 137*387f9dfdSAndroid Build Coastguard WorkerUSAGE message: 138*387f9dfdSAndroid Build Coastguard Worker 139*387f9dfdSAndroid Build Coastguard Worker# ./zfsslower -h 140*387f9dfdSAndroid Build Coastguard Workerusage: zfsslower [-h] [-j] [-p PID] [min_ms] 141*387f9dfdSAndroid Build Coastguard Worker 142*387f9dfdSAndroid Build Coastguard WorkerTrace common ZFS file operations slower than a threshold 143*387f9dfdSAndroid Build Coastguard Worker 144*387f9dfdSAndroid Build Coastguard Workerpositional arguments: 145*387f9dfdSAndroid Build Coastguard Worker min_ms minimum I/O duration to trace, in ms (default 10) 146*387f9dfdSAndroid Build Coastguard Worker 147*387f9dfdSAndroid Build Coastguard Workeroptional arguments: 148*387f9dfdSAndroid Build Coastguard Worker -h, --help show this help message and exit 149*387f9dfdSAndroid Build Coastguard Worker -j, --csv just print fields: comma-separated values 150*387f9dfdSAndroid Build Coastguard Worker -p PID, --pid PID trace this PID only 151*387f9dfdSAndroid Build Coastguard Worker 152*387f9dfdSAndroid Build Coastguard Workerexamples: 153*387f9dfdSAndroid Build Coastguard Worker ./zfsslower # trace operations slower than 10 ms (default) 154*387f9dfdSAndroid Build Coastguard Worker ./zfsslower 1 # trace operations slower than 1 ms 155*387f9dfdSAndroid Build Coastguard Worker ./zfsslower -j 1 # ... 1 ms, parsable output (csv) 156*387f9dfdSAndroid Build Coastguard Worker ./zfsslower 0 # trace all operations (warning: verbose) 157*387f9dfdSAndroid Build Coastguard Worker ./zfsslower -p 185 # trace PID 185 only 158