1*387f9dfdSAndroid Build Coastguard WorkerDemonstrations of btrfsdist, the Linux eBPF/bcc version. 2*387f9dfdSAndroid Build Coastguard Worker 3*387f9dfdSAndroid Build Coastguard Worker 4*387f9dfdSAndroid Build Coastguard Workerbtrfsdist traces btrfs reads, writes, opens, and fsyncs, and summarizes their 5*387f9dfdSAndroid Build Coastguard Workerlatency as a power-of-2 histogram. For example: 6*387f9dfdSAndroid Build Coastguard Worker 7*387f9dfdSAndroid Build Coastguard Worker# ./btrfsdist 8*387f9dfdSAndroid Build Coastguard WorkerTracing btrfs operation latency... Hit Ctrl-C to end. 9*387f9dfdSAndroid Build Coastguard Worker^C 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 : 15 | | 14*387f9dfdSAndroid Build Coastguard Worker 2 -> 3 : 1308 |******* | 15*387f9dfdSAndroid Build Coastguard Worker 4 -> 7 : 198 |* | 16*387f9dfdSAndroid Build Coastguard Worker 8 -> 15 : 0 | | 17*387f9dfdSAndroid Build Coastguard Worker 16 -> 31 : 11 | | 18*387f9dfdSAndroid Build Coastguard Worker 32 -> 63 : 361 |* | 19*387f9dfdSAndroid Build Coastguard Worker 64 -> 127 : 55 | | 20*387f9dfdSAndroid Build Coastguard Worker 128 -> 255 : 104 | | 21*387f9dfdSAndroid Build Coastguard Worker 256 -> 511 : 7312 |****************************************| 22*387f9dfdSAndroid Build Coastguard Worker 512 -> 1023 : 387 |** | 23*387f9dfdSAndroid Build Coastguard Worker 1024 -> 2047 : 10 | | 24*387f9dfdSAndroid Build Coastguard Worker 2048 -> 4095 : 4 | | 25*387f9dfdSAndroid Build Coastguard Worker 26*387f9dfdSAndroid Build Coastguard Workeroperation = 'write' 27*387f9dfdSAndroid Build Coastguard Worker usecs : count distribution 28*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 0 | | 29*387f9dfdSAndroid Build Coastguard Worker 2 -> 3 : 0 | | 30*387f9dfdSAndroid Build Coastguard Worker 4 -> 7 : 0 | | 31*387f9dfdSAndroid Build Coastguard Worker 8 -> 15 : 4 |****************************************| 32*387f9dfdSAndroid Build Coastguard Worker 33*387f9dfdSAndroid Build Coastguard Workeroperation = 'open' 34*387f9dfdSAndroid Build Coastguard Worker usecs : count distribution 35*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 1 |********** | 36*387f9dfdSAndroid Build Coastguard Worker 2 -> 3 : 4 |****************************************| 37*387f9dfdSAndroid Build Coastguard Worker 38*387f9dfdSAndroid Build Coastguard WorkerThis output shows a bi-modal distribution for read latency, with a faster 39*387f9dfdSAndroid Build Coastguard Workermode of 1,308 reads that took between 2 and 3 microseconds, and a slower 40*387f9dfdSAndroid Build Coastguard Workermode of over 7,312 reads that took between 256 and 511 microseconds. It's 41*387f9dfdSAndroid Build Coastguard Workerlikely that the faster mode was a hit from the in-memory file system cache, 42*387f9dfdSAndroid Build Coastguard Workerand the slower mode is a read from a storage device (disk). 43*387f9dfdSAndroid Build Coastguard Worker 44*387f9dfdSAndroid Build Coastguard WorkerThis "latency" is measured from when the operation was issued from the VFS 45*387f9dfdSAndroid Build Coastguard Workerinterface to the file system, to when it completed. This spans everything: 46*387f9dfdSAndroid Build Coastguard Workerblock device I/O (disk I/O), file system CPU cycles, file system locks, run 47*387f9dfdSAndroid Build Coastguard Workerqueue latency, etc. This is a better measure of the latency suffered by 48*387f9dfdSAndroid Build Coastguard Workerapplications reading from the file system than measuring this down at the 49*387f9dfdSAndroid Build Coastguard Workerblock device interface. 50*387f9dfdSAndroid Build Coastguard Worker 51*387f9dfdSAndroid Build Coastguard WorkerNote that this only traces the common file system operations previously 52*387f9dfdSAndroid Build Coastguard Workerlisted: other file system operations (eg, inode operations including 53*387f9dfdSAndroid Build Coastguard Workergetattr()) are not traced. 54*387f9dfdSAndroid Build Coastguard Worker 55*387f9dfdSAndroid Build Coastguard Worker 56*387f9dfdSAndroid Build Coastguard WorkerAn optional interval and a count can be provided, as well as -m to show the 57*387f9dfdSAndroid Build Coastguard Workerdistributions in milliseconds. For example, two second summaries, five times: 58*387f9dfdSAndroid Build Coastguard Worker 59*387f9dfdSAndroid Build Coastguard Worker# ./btrfsdist 2 5 60*387f9dfdSAndroid Build Coastguard WorkerTracing btrfs operation latency... Hit Ctrl-C to end. 61*387f9dfdSAndroid Build Coastguard Worker 62*387f9dfdSAndroid Build Coastguard Worker03:40:49: 63*387f9dfdSAndroid Build Coastguard Worker 64*387f9dfdSAndroid Build Coastguard Workeroperation = 'read' 65*387f9dfdSAndroid Build Coastguard Worker usecs : count distribution 66*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 15 | | 67*387f9dfdSAndroid Build Coastguard Worker 2 -> 3 : 833 |******** | 68*387f9dfdSAndroid Build Coastguard Worker 4 -> 7 : 127 |* | 69*387f9dfdSAndroid Build Coastguard Worker 8 -> 15 : 0 | | 70*387f9dfdSAndroid Build Coastguard Worker 16 -> 31 : 8 | | 71*387f9dfdSAndroid Build Coastguard Worker 32 -> 63 : 907 |******** | 72*387f9dfdSAndroid Build Coastguard Worker 64 -> 127 : 91 | | 73*387f9dfdSAndroid Build Coastguard Worker 128 -> 255 : 246 |** | 74*387f9dfdSAndroid Build Coastguard Worker 256 -> 511 : 4164 |****************************************| 75*387f9dfdSAndroid Build Coastguard Worker 512 -> 1023 : 193 |* | 76*387f9dfdSAndroid Build Coastguard Worker 1024 -> 2047 : 4 | | 77*387f9dfdSAndroid Build Coastguard Worker 2048 -> 4095 : 6 | | 78*387f9dfdSAndroid Build Coastguard Worker 4096 -> 8191 : 2 | | 79*387f9dfdSAndroid Build Coastguard Worker 80*387f9dfdSAndroid Build Coastguard Worker03:40:51: 81*387f9dfdSAndroid Build Coastguard Worker 82*387f9dfdSAndroid Build Coastguard Workeroperation = 'read' 83*387f9dfdSAndroid Build Coastguard Worker usecs : count distribution 84*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 25 | | 85*387f9dfdSAndroid Build Coastguard Worker 2 -> 3 : 1491 |*************** | 86*387f9dfdSAndroid Build Coastguard Worker 4 -> 7 : 218 |** | 87*387f9dfdSAndroid Build Coastguard Worker 8 -> 15 : 0 | | 88*387f9dfdSAndroid Build Coastguard Worker 16 -> 31 : 16 | | 89*387f9dfdSAndroid Build Coastguard Worker 32 -> 63 : 1527 |*************** | 90*387f9dfdSAndroid Build Coastguard Worker 64 -> 127 : 319 |*** | 91*387f9dfdSAndroid Build Coastguard Worker 128 -> 255 : 429 |**** | 92*387f9dfdSAndroid Build Coastguard Worker 256 -> 511 : 3841 |****************************************| 93*387f9dfdSAndroid Build Coastguard Worker 512 -> 1023 : 232 |** | 94*387f9dfdSAndroid Build Coastguard Worker 1024 -> 2047 : 3 | | 95*387f9dfdSAndroid Build Coastguard Worker 2048 -> 4095 : 6 | | 96*387f9dfdSAndroid Build Coastguard Worker 4096 -> 8191 : 1 | | 97*387f9dfdSAndroid Build Coastguard Worker 8192 -> 16383 : 1 | | 98*387f9dfdSAndroid Build Coastguard Worker 99*387f9dfdSAndroid Build Coastguard Worker03:40:53: 100*387f9dfdSAndroid Build Coastguard Worker 101*387f9dfdSAndroid Build Coastguard Workeroperation = 'read' 102*387f9dfdSAndroid Build Coastguard Worker usecs : count distribution 103*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 27 | | 104*387f9dfdSAndroid Build Coastguard Worker 2 -> 3 : 2999 |********************************* | 105*387f9dfdSAndroid Build Coastguard Worker 4 -> 7 : 407 |**** | 106*387f9dfdSAndroid Build Coastguard Worker 8 -> 15 : 0 | | 107*387f9dfdSAndroid Build Coastguard Worker 16 -> 31 : 46 | | 108*387f9dfdSAndroid Build Coastguard Worker 32 -> 63 : 3538 |****************************************| 109*387f9dfdSAndroid Build Coastguard Worker 64 -> 127 : 595 |****** | 110*387f9dfdSAndroid Build Coastguard Worker 128 -> 255 : 621 |******* | 111*387f9dfdSAndroid Build Coastguard Worker 256 -> 511 : 3532 |*************************************** | 112*387f9dfdSAndroid Build Coastguard Worker 512 -> 1023 : 212 |** | 113*387f9dfdSAndroid Build Coastguard Worker 1024 -> 2047 : 1 | | 114*387f9dfdSAndroid Build Coastguard Worker 2048 -> 4095 : 0 | | 115*387f9dfdSAndroid Build Coastguard Worker 4096 -> 8191 : 0 | | 116*387f9dfdSAndroid Build Coastguard Worker 8192 -> 16383 : 0 | | 117*387f9dfdSAndroid Build Coastguard Worker 16384 -> 32767 : 1 | | 118*387f9dfdSAndroid Build Coastguard Worker 119*387f9dfdSAndroid Build Coastguard Worker03:40:55: 120*387f9dfdSAndroid Build Coastguard Worker 121*387f9dfdSAndroid Build Coastguard Workeroperation = 'read' 122*387f9dfdSAndroid Build Coastguard Worker usecs : count distribution 123*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 221 | | 124*387f9dfdSAndroid Build Coastguard Worker 2 -> 3 : 12580 |****************************************| 125*387f9dfdSAndroid Build Coastguard Worker 4 -> 7 : 1366 |**** | 126*387f9dfdSAndroid Build Coastguard Worker 8 -> 15 : 0 | | 127*387f9dfdSAndroid Build Coastguard Worker 16 -> 31 : 289 | | 128*387f9dfdSAndroid Build Coastguard Worker 32 -> 63 : 10782 |********************************** | 129*387f9dfdSAndroid Build Coastguard Worker 64 -> 127 : 1232 |*** | 130*387f9dfdSAndroid Build Coastguard Worker 128 -> 255 : 807 |** | 131*387f9dfdSAndroid Build Coastguard Worker 256 -> 511 : 2299 |******* | 132*387f9dfdSAndroid Build Coastguard Worker 512 -> 1023 : 135 | | 133*387f9dfdSAndroid Build Coastguard Worker 1024 -> 2047 : 5 | | 134*387f9dfdSAndroid Build Coastguard Worker 2048 -> 4095 : 2 | | 135*387f9dfdSAndroid Build Coastguard Worker 136*387f9dfdSAndroid Build Coastguard Worker03:40:57: 137*387f9dfdSAndroid Build Coastguard Worker 138*387f9dfdSAndroid Build Coastguard Workeroperation = 'read' 139*387f9dfdSAndroid Build Coastguard Worker usecs : count distribution 140*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 73951 |************************* | 141*387f9dfdSAndroid Build Coastguard Worker 2 -> 3 : 117639 |****************************************| 142*387f9dfdSAndroid Build Coastguard Worker 4 -> 7 : 7943 |** | 143*387f9dfdSAndroid Build Coastguard Worker 8 -> 15 : 1841 | | 144*387f9dfdSAndroid Build Coastguard Worker 16 -> 31 : 1143 | | 145*387f9dfdSAndroid Build Coastguard Worker 32 -> 63 : 5006 |* | 146*387f9dfdSAndroid Build Coastguard Worker 64 -> 127 : 483 | | 147*387f9dfdSAndroid Build Coastguard Worker 128 -> 255 : 242 | | 148*387f9dfdSAndroid Build Coastguard Worker 256 -> 511 : 253 | | 149*387f9dfdSAndroid Build Coastguard Worker 512 -> 1023 : 84 | | 150*387f9dfdSAndroid Build Coastguard Worker 1024 -> 2047 : 23 | | 151*387f9dfdSAndroid Build Coastguard Worker 152*387f9dfdSAndroid Build Coastguard WorkerThis shows a read workload that begins bimodal, and eventually the second 153*387f9dfdSAndroid Build Coastguard Workermode disappears. The reason for this is that the workload cached during 154*387f9dfdSAndroid Build Coastguard Workertracing. Note that the rate also increased, with over 200k reads for the 155*387f9dfdSAndroid Build Coastguard Workerfinal two second sample. 156*387f9dfdSAndroid Build Coastguard Worker 157*387f9dfdSAndroid Build Coastguard Worker 158*387f9dfdSAndroid Build Coastguard WorkerUSAGE message: 159*387f9dfdSAndroid Build Coastguard Worker 160*387f9dfdSAndroid Build Coastguard Worker# ./btrfsdist -h 161*387f9dfdSAndroid Build Coastguard Workerusage: btrfsdist [-h] [-T] [-m] [-p PID] [interval] [count] 162*387f9dfdSAndroid Build Coastguard Worker 163*387f9dfdSAndroid Build Coastguard WorkerSummarize btrfs operation latency 164*387f9dfdSAndroid Build Coastguard Worker 165*387f9dfdSAndroid Build Coastguard Workerpositional arguments: 166*387f9dfdSAndroid Build Coastguard Worker interval output interval, in seconds 167*387f9dfdSAndroid Build Coastguard Worker count number of outputs 168*387f9dfdSAndroid Build Coastguard Worker 169*387f9dfdSAndroid Build Coastguard Workeroptional arguments: 170*387f9dfdSAndroid Build Coastguard Worker -h, --help show this help message and exit 171*387f9dfdSAndroid Build Coastguard Worker -T, --notimestamp don't include timestamp on interval output 172*387f9dfdSAndroid Build Coastguard Worker -m, --milliseconds output in milliseconds 173*387f9dfdSAndroid Build Coastguard Worker -p PID, --pid PID trace this PID only 174*387f9dfdSAndroid Build Coastguard Worker 175*387f9dfdSAndroid Build Coastguard Workerexamples: 176*387f9dfdSAndroid Build Coastguard Worker ./btrfsdist # show operation latency as a histogram 177*387f9dfdSAndroid Build Coastguard Worker ./btrfsdist -p 181 # trace PID 181 only 178*387f9dfdSAndroid Build Coastguard Worker ./btrfsdist 1 10 # print 1 second summaries, 10 times 179*387f9dfdSAndroid Build Coastguard Worker ./btrfsdist -m 5 # 5s summaries, milliseconds 180