1*387f9dfdSAndroid Build Coastguard WorkerDemonstrations of ext4slower, the Linux eBPF/bcc version. 2*387f9dfdSAndroid Build Coastguard Worker 3*387f9dfdSAndroid Build Coastguard Worker 4*387f9dfdSAndroid Build Coastguard Workerext4slower shows ext4 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# ./ext4slower 8*387f9dfdSAndroid Build Coastguard WorkerTracing ext4 operations slower than 10 ms 9*387f9dfdSAndroid Build Coastguard WorkerTIME COMM PID T BYTES OFF_KB LAT(ms) FILENAME 10*387f9dfdSAndroid Build Coastguard Worker06:35:01 cron 16464 R 1249 0 16.05 common-auth 11*387f9dfdSAndroid Build Coastguard Worker06:35:01 cron 16463 R 1249 0 16.04 common-auth 12*387f9dfdSAndroid Build Coastguard Worker06:35:01 cron 16465 R 1249 0 16.03 common-auth 13*387f9dfdSAndroid Build Coastguard Worker06:35:01 cron 16465 R 4096 0 10.62 login.defs 14*387f9dfdSAndroid Build Coastguard Worker06:35:01 cron 16464 R 4096 0 10.61 login.defs 15*387f9dfdSAndroid Build Coastguard Worker06:35:01 cron 16463 R 4096 0 10.63 login.defs 16*387f9dfdSAndroid Build Coastguard Worker06:35:01 cron 16465 R 2972 0 18.52 pam_env.conf 17*387f9dfdSAndroid Build Coastguard Worker06:35:01 cron 16464 R 2972 0 18.51 pam_env.conf 18*387f9dfdSAndroid Build Coastguard Worker06:35:01 cron 16463 R 2972 0 18.49 pam_env.conf 19*387f9dfdSAndroid Build Coastguard Worker06:35:01 dumpsystemstat 16473 R 128 0 12.58 date 20*387f9dfdSAndroid Build Coastguard Worker06:35:01 debian-sa1 16474 R 283 0 12.66 sysstat 21*387f9dfdSAndroid Build Coastguard Worker06:35:01 debian-sa1 16474 R 128 0 10.39 sa1 22*387f9dfdSAndroid Build Coastguard Worker06:35:01 dumpsystemstat 16491 R 128 0 13.22 ifconfig 23*387f9dfdSAndroid Build Coastguard Worker06:35:01 DumpThreads 16534 R 128 0 12.78 cut 24*387f9dfdSAndroid Build Coastguard Worker06:35:01 cron 16545 R 128 0 14.76 sendmail 25*387f9dfdSAndroid Build Coastguard Worker06:35:01 sendmail 16545 R 274 0 10.88 dynamicmaps.cf 26*387f9dfdSAndroid Build Coastguard Worker06:35:02 postdrop 16546 R 118 0 32.94 Universal 27*387f9dfdSAndroid Build Coastguard Worker06:35:02 pickup 9574 R 118 0 21.02 localtime 28*387f9dfdSAndroid Build Coastguard Worker[...] 29*387f9dfdSAndroid Build Coastguard Worker 30*387f9dfdSAndroid Build Coastguard WorkerThis shows various system tasks reading from ext4. The high latency here is 31*387f9dfdSAndroid Build Coastguard Workerdue to disk I/O, as I had just evicted the file system cache for this example. 32*387f9dfdSAndroid Build Coastguard Worker 33*387f9dfdSAndroid Build Coastguard WorkerThis "latency" is measured from when the operation was issued from the VFS 34*387f9dfdSAndroid Build Coastguard Workerinterface to the file system, to when it completed. This spans everything: 35*387f9dfdSAndroid Build Coastguard Workerblock device I/O (disk I/O), file system CPU cycles, file system locks, run 36*387f9dfdSAndroid Build Coastguard Workerqueue latency, etc. This is a better measure of the latency suffered by 37*387f9dfdSAndroid Build Coastguard Workerapplications reading from the file system than measuring this down at the 38*387f9dfdSAndroid Build Coastguard Workerblock device interface. 39*387f9dfdSAndroid Build Coastguard Worker 40*387f9dfdSAndroid Build Coastguard WorkerNote that this only traces the common file system operations previously 41*387f9dfdSAndroid Build Coastguard Workerlisted: other file system operations (eg, inode operations including 42*387f9dfdSAndroid Build Coastguard Workergetattr()) are not traced. 43*387f9dfdSAndroid Build Coastguard Worker 44*387f9dfdSAndroid Build Coastguard Worker 45*387f9dfdSAndroid Build Coastguard WorkerThe threshold can be provided as an argument. Eg, I/O slower than 1 ms: 46*387f9dfdSAndroid Build Coastguard Worker 47*387f9dfdSAndroid Build Coastguard Worker# ./ext4slower 1 48*387f9dfdSAndroid Build Coastguard WorkerTracing ext4 operations slower than 1 ms 49*387f9dfdSAndroid Build Coastguard WorkerTIME COMM PID T BYTES OFF_KB LAT(ms) FILENAME 50*387f9dfdSAndroid Build Coastguard Worker06:49:17 bash 3616 R 128 0 7.75 cksum 51*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 39552 0 1.34 [ 52*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 96 0 5.36 2to3-2.7 53*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 96 0 14.94 2to3-3.4 54*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 10320 0 6.82 411toppm 55*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 65536 0 4.01 a2p 56*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 55400 0 8.77 ab 57*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 36792 0 16.34 aclocal-1.14 58*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 15008 0 19.31 acpi_listen 59*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 6123 0 17.23 add-apt-repository 60*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 6280 0 18.40 addpart 61*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 27696 0 2.16 addr2line 62*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 58080 0 10.11 ag 63*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 906 0 6.30 ec2-meta-data 64*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 6320 0 10.00 animate.im6 65*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 5680 0 18.69 anytopnm 66*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 2671 0 20.27 apport-bug 67*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 12566 0 16.72 apport-cli 68*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 1622 0 7.95 apport-unpack 69*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 10440 0 2.37 appres 70*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 48112 0 5.42 whatis 71*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 14832 0 6.24 apt 72*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 65536 0 24.74 apt-cache 73*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 27264 0 1.68 apt-cdrom 74*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 23224 0 5.31 apt-extracttemplates 75*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 65536 0 8.08 apt-ftparchive 76*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 65536 128 2.92 apt-ftparchive 77*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 65536 0 9.58 aptitude-curses 78*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 65536 128 44.25 aptitude-curses 79*387f9dfdSAndroid Build Coastguard Worker06:49:17 cksum 3616 R 65536 384 1.69 aptitude-curses 80*387f9dfdSAndroid Build Coastguard Worker[...] 81*387f9dfdSAndroid Build Coastguard Worker 82*387f9dfdSAndroid Build Coastguard WorkerThis time a cksum(1) command can be seen reading various files (from /usr/bin). 83*387f9dfdSAndroid Build Coastguard Worker 84*387f9dfdSAndroid Build Coastguard Worker 85*387f9dfdSAndroid Build Coastguard WorkerA threshold of 0 will trace all operations. Warning: the output will be 86*387f9dfdSAndroid Build Coastguard Workerverbose, as it will include all file system cache hits. 87*387f9dfdSAndroid Build Coastguard Worker 88*387f9dfdSAndroid Build Coastguard Worker# ./ext4slower 0 89*387f9dfdSAndroid Build Coastguard WorkerTracing ext4 operations 90*387f9dfdSAndroid Build Coastguard WorkerTIME COMM PID T BYTES OFF_KB LAT(ms) FILENAME 91*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 1884 O 0 0 0.00 status.new 92*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 1884 W 18 0 0.02 status.new 93*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 1884 O 0 0 0.00 status.new 94*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 1884 W 18 0 0.01 status.new 95*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 15817 O 0 0 0.00 run 96*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 15817 R 92 0 0.00 run 97*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 15817 O 0 0 0.00 bash 98*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 15817 R 128 0 0.00 bash 99*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 15817 R 504 0 0.00 bash 100*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 15817 R 28 0 0.00 bash 101*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 15817 O 0 0 0.00 ld-2.19.so 102*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 15817 R 64 0 0.00 ld-2.19.so 103*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 15817 R 392 0 0.00 ld-2.19.so 104*387f9dfdSAndroid Build Coastguard Worker06:58:05 run 15817 O 0 0 0.00 ld.so.cache 105*387f9dfdSAndroid Build Coastguard Worker06:58:05 run 15817 O 0 0 0.00 libtinfo.so.5.9 106*387f9dfdSAndroid Build Coastguard Worker06:58:05 run 15817 R 832 0 0.00 libtinfo.so.5.9 107*387f9dfdSAndroid Build Coastguard Worker06:58:05 run 15817 O 0 0 0.00 libdl-2.19.so 108*387f9dfdSAndroid Build Coastguard Worker06:58:05 run 15817 R 832 0 0.00 libdl-2.19.so 109*387f9dfdSAndroid Build Coastguard Worker06:58:05 run 15817 O 0 0 0.00 libc-2.19.so 110*387f9dfdSAndroid Build Coastguard Worker06:58:05 run 15817 R 832 0 0.00 libc-2.19.so 111*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 1876 O 0 0 0.00 status.new 112*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 1876 W 18 0 0.01 status.new 113*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 1895 O 0 0 0.00 status.new 114*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 1895 W 18 0 0.02 status.new 115*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 1876 O 0 0 0.00 status.new 116*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 1876 W 18 0 0.01 status.new 117*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 1872 O 0 0 0.00 status.new 118*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 1872 W 18 0 0.02 status.new 119*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 1895 O 0 0 0.00 status.new 120*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 1895 W 18 0 0.01 status.new 121*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 15818 R 92 0 0.00 run 122*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 15818 O 0 0 0.00 bash 123*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 15818 R 128 0 0.00 bash 124*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 15818 R 504 0 0.00 bash 125*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 15818 R 28 0 0.00 bash 126*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 15818 O 0 0 0.00 ld-2.19.so 127*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 15818 R 64 0 0.00 ld-2.19.so 128*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 15818 R 392 0 0.00 ld-2.19.so 129*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 15818 O 0 0 0.00 run 130*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 1888 O 0 0 0.00 status.new 131*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 1888 W 18 0 0.01 status.new 132*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 1888 O 0 0 0.00 status.new 133*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 1888 W 18 0 0.02 status.new 134*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 15822 R 119 0 0.00 run 135*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 15822 O 0 0 0.00 bash 136*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 15822 R 128 0 0.00 bash 137*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 15822 R 504 0 0.00 bash 138*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 15822 R 28 0 0.00 bash 139*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 15822 O 0 0 0.00 ld-2.19.so 140*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 15822 R 64 0 0.00 ld-2.19.so 141*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 15822 R 392 0 0.00 ld-2.19.so 142*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 1892 O 0 0 0.00 status.new 143*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 1892 W 18 0 0.02 status.new 144*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 1892 O 0 0 0.00 status.new 145*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 1892 W 18 0 0.02 status.new 146*387f9dfdSAndroid Build Coastguard Worker06:58:05 supervise 15820 O 0 0 0.00 run 147*387f9dfdSAndroid Build Coastguard Worker[...] 148*387f9dfdSAndroid Build Coastguard Worker 149*387f9dfdSAndroid Build Coastguard WorkerThe output now includes open operations ("O"), and writes ("W"). 150*387f9dfdSAndroid Build Coastguard Worker 151*387f9dfdSAndroid Build Coastguard Worker 152*387f9dfdSAndroid Build Coastguard WorkerA -j option will print just the fields (parsable output, csv): 153*387f9dfdSAndroid Build Coastguard Worker 154*387f9dfdSAndroid Build Coastguard Worker# ./ext4slower -j 1 155*387f9dfdSAndroid Build Coastguard WorkerENDTIME_us,TASK,PID,TYPE,BYTES,OFFSET_b,LATENCY_us,FILE 156*387f9dfdSAndroid Build Coastguard Worker127200712278,bash,17225,R,128,0,14329,cksum 157*387f9dfdSAndroid Build Coastguard Worker127200722986,cksum,17225,R,3274,0,8368,command-not-found 158*387f9dfdSAndroid Build Coastguard Worker127200735581,cksum,17225,R,65536,0,10903,libbfd-2.24-system.so 159*387f9dfdSAndroid Build Coastguard Worker127200738482,cksum,17225,R,65536,131072,2419,libbfd-2.24-system.so 160*387f9dfdSAndroid Build Coastguard Worker127200749226,cksum,17225,R,65536,655360,8995,libbfd-2.24-system.so 161*387f9dfdSAndroid Build Coastguard Worker127200776273,cksum,17225,R,55080,0,25297,libbind9.so.90.0.9 162*387f9dfdSAndroid Build Coastguard Worker127200784688,cksum,17225,R,65536,0,7873,libblas.so.3.0 163*387f9dfdSAndroid Build Coastguard Worker127200787551,cksum,17225,R,65536,131072,2386,libblas.so.3.0 164*387f9dfdSAndroid Build Coastguard Worker127200795524,cksum,17225,R,18624,0,4947,libcpupower.so.3.13.0-49 165*387f9dfdSAndroid Build Coastguard Worker127200802073,cksum,17225,R,65536,0,6410,libcwidget.so.3.0.0 166*387f9dfdSAndroid Build Coastguard Worker127200808718,cksum,17225,R,65536,131072,6181,libcwidget.so.3.0.0 167*387f9dfdSAndroid Build Coastguard Worker127200829518,cksum,17225,R,65536,0,14213,libdns.so.100.2.2 168*387f9dfdSAndroid Build Coastguard Worker127200832916,cksum,17225,R,65536,131072,2911,libdns.so.100.2.2 169*387f9dfdSAndroid Build Coastguard Worker127200841044,cksum,17225,R,65536,655360,6376,libdns.so.100.2.2 170*387f9dfdSAndroid Build Coastguard Worker127200853646,cksum,17225,R,956,0,1022,libdumbnet.la 171*387f9dfdSAndroid Build Coastguard Worker127200857814,cksum,17225,R,61096,0,4111,libdumbnet.so.1.0.1 172*387f9dfdSAndroid Build Coastguard Worker127200869655,cksum,17225,R,65536,0,11252,libgettextlib-0.18.3.so 173*387f9dfdSAndroid Build Coastguard Worker127200872985,cksum,17225,R,65536,131072,2882,libgettextlib-0.18.3.so 174*387f9dfdSAndroid Build Coastguard Worker127200883063,cksum,17225,R,65536,0,9661,libgettextsrc-0.18.3.so 175*387f9dfdSAndroid Build Coastguard Worker127200884767,cksum,17225,R,65536,131072,1251,libgettextsrc-0.18.3.so 176*387f9dfdSAndroid Build Coastguard Worker127200904830,cksum,17225,R,65536,0,19571,libgirepository-1.0.so.1.0.0 177*387f9dfdSAndroid Build Coastguard Worker127200906354,cksum,17225,R,65536,131072,1080,libgirepository-1.0.so.1.0.0 178*387f9dfdSAndroid Build Coastguard Worker127200936047,cksum,17225,R,65536,0,28674,libGraphicsMagick.a 179*387f9dfdSAndroid Build Coastguard Worker127200939091,cksum,17225,R,65536,131072,2576,libGraphicsMagick.a 180*387f9dfdSAndroid Build Coastguard Worker127200947295,cksum,17225,R,65536,655360,6463,libGraphicsMagick.a 181*387f9dfdSAndroid Build Coastguard Worker127200958793,cksum,17225,R,65536,1966080,7034,libGraphicsMagick.a 182*387f9dfdSAndroid Build Coastguard Worker[...] 183*387f9dfdSAndroid Build Coastguard Worker 184*387f9dfdSAndroid Build Coastguard WorkerThis may be useful for visualizing with another tool, for example, for 185*387f9dfdSAndroid Build Coastguard Workerproducing a scatter plot of ENDTIME vs LATENCY, to look for time-based 186*387f9dfdSAndroid Build Coastguard Workerpatterns. 187*387f9dfdSAndroid Build Coastguard Worker 188*387f9dfdSAndroid Build Coastguard Worker 189*387f9dfdSAndroid Build Coastguard WorkerUSAGE message: 190*387f9dfdSAndroid Build Coastguard Worker 191*387f9dfdSAndroid Build Coastguard Worker# ./ext4slower -h 192*387f9dfdSAndroid Build Coastguard Workerusage: ext4slower [-h] [-j] [-p PID] [min_ms] 193*387f9dfdSAndroid Build Coastguard Worker 194*387f9dfdSAndroid Build Coastguard WorkerTrace common ext4 file operations slower than a threshold 195*387f9dfdSAndroid Build Coastguard Worker 196*387f9dfdSAndroid Build Coastguard Workerpositional arguments: 197*387f9dfdSAndroid Build Coastguard Worker min_ms minimum I/O duration to trace, in ms (default 10) 198*387f9dfdSAndroid Build Coastguard Worker 199*387f9dfdSAndroid Build Coastguard Workeroptional arguments: 200*387f9dfdSAndroid Build Coastguard Worker -h, --help show this help message and exit 201*387f9dfdSAndroid Build Coastguard Worker -j, --csv just print fields: comma-separated values 202*387f9dfdSAndroid Build Coastguard Worker -p PID, --pid PID trace this PID only 203*387f9dfdSAndroid Build Coastguard Worker 204*387f9dfdSAndroid Build Coastguard Workerexamples: 205*387f9dfdSAndroid Build Coastguard Worker ./ext4slower # trace operations slower than 10 ms (default) 206*387f9dfdSAndroid Build Coastguard Worker ./ext4slower 1 # trace operations slower than 1 ms 207*387f9dfdSAndroid Build Coastguard Worker ./ext4slower -j 1 # ... 1 ms, parsable output (csv) 208*387f9dfdSAndroid Build Coastguard Worker ./ext4slower 0 # trace all operations (warning: verbose) 209*387f9dfdSAndroid Build Coastguard Worker ./ext4slower -p 185 # trace PID 185 only 210