1*387f9dfdSAndroid Build Coastguard WorkerDemonstrations of xfsdist, the Linux eBPF/bcc version. 2*387f9dfdSAndroid Build Coastguard Worker 3*387f9dfdSAndroid Build Coastguard Worker 4*387f9dfdSAndroid Build Coastguard Workerxfsdist traces XFS 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# ./xfsdist 8*387f9dfdSAndroid Build Coastguard WorkerTracing XFS 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 : 0 | | 14*387f9dfdSAndroid Build Coastguard Worker 2 -> 3 : 362 | | 15*387f9dfdSAndroid Build Coastguard Worker 4 -> 7 : 807 |* | 16*387f9dfdSAndroid Build Coastguard Worker 8 -> 15 : 20686 |****************************************| 17*387f9dfdSAndroid Build Coastguard Worker 16 -> 31 : 512 | | 18*387f9dfdSAndroid Build Coastguard Worker 32 -> 63 : 4 | | 19*387f9dfdSAndroid Build Coastguard Worker 64 -> 127 : 2744 |***** | 20*387f9dfdSAndroid Build Coastguard Worker 128 -> 255 : 7127 |************* | 21*387f9dfdSAndroid Build Coastguard Worker 256 -> 511 : 2483 |**** | 22*387f9dfdSAndroid Build Coastguard Worker 512 -> 1023 : 1281 |** | 23*387f9dfdSAndroid Build Coastguard Worker 1024 -> 2047 : 39 | | 24*387f9dfdSAndroid Build Coastguard Worker 2048 -> 4095 : 5 | | 25*387f9dfdSAndroid Build Coastguard Worker 4096 -> 8191 : 1 | | 26*387f9dfdSAndroid Build Coastguard Worker 27*387f9dfdSAndroid Build Coastguard Workeroperation = 'open' 28*387f9dfdSAndroid Build Coastguard Worker usecs : count distribution 29*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 0 | | 30*387f9dfdSAndroid Build Coastguard Worker 2 -> 3 : 3 |****************************************| 31*387f9dfdSAndroid Build Coastguard Worker 32*387f9dfdSAndroid Build Coastguard WorkerThis output shows a bi-modal distribution for read latency, with a faster 33*387f9dfdSAndroid Build Coastguard Workermode of 20,686 reads that took between 8 and 15 microseconds, and a slower 34*387f9dfdSAndroid Build Coastguard Workermode of over 10,000 reads that took between 64 and 1023 microseconds. It's 35*387f9dfdSAndroid Build Coastguard Workerlikely that the faster mode was a hit from the in-memory file system cache, 36*387f9dfdSAndroid Build Coastguard Workerand the slower mode is a read from a storage device (disk). 37*387f9dfdSAndroid Build Coastguard Worker 38*387f9dfdSAndroid Build Coastguard WorkerThis "latency" is measured from when the operation was issued from the VFS 39*387f9dfdSAndroid Build Coastguard Workerinterface to the file system, to when it completed. This spans everything: 40*387f9dfdSAndroid Build Coastguard Workerblock device I/O (disk I/O), file system CPU cycles, file system locks, run 41*387f9dfdSAndroid Build Coastguard Workerqueue latency, etc. This is a better measure of the latency suffered by 42*387f9dfdSAndroid Build Coastguard Workerapplications reading from the file system than measuring this down at the 43*387f9dfdSAndroid Build Coastguard Workerblock device interface. 44*387f9dfdSAndroid Build Coastguard Worker 45*387f9dfdSAndroid Build Coastguard WorkerNote that this only traces the common file system operations previously 46*387f9dfdSAndroid Build Coastguard Workerlisted: other file system operations (eg, inode operations including 47*387f9dfdSAndroid Build Coastguard Workergetattr()) are not traced. 48*387f9dfdSAndroid Build Coastguard Worker 49*387f9dfdSAndroid Build Coastguard Worker 50*387f9dfdSAndroid Build Coastguard WorkerAn optional interval and a count can be provided, as well as -m to show the 51*387f9dfdSAndroid Build Coastguard Workerdistributions in milliseconds. For example: 52*387f9dfdSAndroid Build Coastguard Worker 53*387f9dfdSAndroid Build Coastguard Worker# ./xfsdist -m 1 5 54*387f9dfdSAndroid Build Coastguard WorkerTracing XFS operation latency... Hit Ctrl-C to end. 55*387f9dfdSAndroid Build Coastguard Worker 56*387f9dfdSAndroid Build Coastguard Worker10:14:15: 57*387f9dfdSAndroid Build Coastguard Worker 58*387f9dfdSAndroid Build Coastguard Workeroperation = 'read' 59*387f9dfdSAndroid Build Coastguard Worker msecs : count distribution 60*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 1366 |****************************************| 61*387f9dfdSAndroid Build Coastguard Worker 2 -> 3 : 86 |** | 62*387f9dfdSAndroid Build Coastguard Worker 4 -> 7 : 95 |** | 63*387f9dfdSAndroid Build Coastguard Worker 8 -> 15 : 132 |*** | 64*387f9dfdSAndroid Build Coastguard Worker 16 -> 31 : 72 |** | 65*387f9dfdSAndroid Build Coastguard Worker 66*387f9dfdSAndroid Build Coastguard Workeroperation = 'write' 67*387f9dfdSAndroid Build Coastguard Worker msecs : count distribution 68*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 685 |****************************************| 69*387f9dfdSAndroid Build Coastguard Worker 70*387f9dfdSAndroid Build Coastguard Worker10:14:16: 71*387f9dfdSAndroid Build Coastguard Worker 72*387f9dfdSAndroid Build Coastguard Workeroperation = 'read' 73*387f9dfdSAndroid Build Coastguard Worker msecs : count distribution 74*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 984 |****************************************| 75*387f9dfdSAndroid Build Coastguard Worker 2 -> 3 : 66 |** | 76*387f9dfdSAndroid Build Coastguard Worker 4 -> 7 : 67 |** | 77*387f9dfdSAndroid Build Coastguard Worker 8 -> 15 : 104 |**** | 78*387f9dfdSAndroid Build Coastguard Worker 16 -> 31 : 70 |** | 79*387f9dfdSAndroid Build Coastguard Worker 32 -> 63 : 12 | | 80*387f9dfdSAndroid Build Coastguard Worker 81*387f9dfdSAndroid Build Coastguard Workeroperation = 'write' 82*387f9dfdSAndroid Build Coastguard Worker msecs : count distribution 83*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 536 |****************************************| 84*387f9dfdSAndroid Build Coastguard Worker 85*387f9dfdSAndroid Build Coastguard Worker10:14:17: 86*387f9dfdSAndroid Build Coastguard Worker 87*387f9dfdSAndroid Build Coastguard Workeroperation = 'read' 88*387f9dfdSAndroid Build Coastguard Worker msecs : count distribution 89*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 1262 |****************************************| 90*387f9dfdSAndroid Build Coastguard Worker 2 -> 3 : 75 |** | 91*387f9dfdSAndroid Build Coastguard Worker 4 -> 7 : 80 |** | 92*387f9dfdSAndroid Build Coastguard Worker 8 -> 15 : 119 |*** | 93*387f9dfdSAndroid Build Coastguard Worker 16 -> 31 : 75 |** | 94*387f9dfdSAndroid Build Coastguard Worker 32 -> 63 : 3 | | 95*387f9dfdSAndroid Build Coastguard Worker 96*387f9dfdSAndroid Build Coastguard Workeroperation = 'write' 97*387f9dfdSAndroid Build Coastguard Worker msecs : count distribution 98*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 639 |****************************************| 99*387f9dfdSAndroid Build Coastguard Worker 100*387f9dfdSAndroid Build Coastguard Worker10:14:18: 101*387f9dfdSAndroid Build Coastguard Worker 102*387f9dfdSAndroid Build Coastguard Workeroperation = 'read' 103*387f9dfdSAndroid Build Coastguard Worker msecs : count distribution 104*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 1070 |****************************************| 105*387f9dfdSAndroid Build Coastguard Worker 2 -> 3 : 58 |** | 106*387f9dfdSAndroid Build Coastguard Worker 4 -> 7 : 74 |** | 107*387f9dfdSAndroid Build Coastguard Worker 8 -> 15 : 140 |***** | 108*387f9dfdSAndroid Build Coastguard Worker 16 -> 31 : 60 |** | 109*387f9dfdSAndroid Build Coastguard Worker 32 -> 63 : 5 | | 110*387f9dfdSAndroid Build Coastguard Worker 111*387f9dfdSAndroid Build Coastguard Workeroperation = 'write' 112*387f9dfdSAndroid Build Coastguard Worker msecs : count distribution 113*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 556 |****************************************| 114*387f9dfdSAndroid Build Coastguard Worker 115*387f9dfdSAndroid Build Coastguard Worker10:14:19: 116*387f9dfdSAndroid Build Coastguard Worker 117*387f9dfdSAndroid Build Coastguard Workeroperation = 'read' 118*387f9dfdSAndroid Build Coastguard Worker msecs : count distribution 119*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 1176 |****************************************| 120*387f9dfdSAndroid Build Coastguard Worker 2 -> 3 : 53 |* | 121*387f9dfdSAndroid Build Coastguard Worker 4 -> 7 : 94 |*** | 122*387f9dfdSAndroid Build Coastguard Worker 8 -> 15 : 112 |*** | 123*387f9dfdSAndroid Build Coastguard Worker 16 -> 31 : 77 |** | 124*387f9dfdSAndroid Build Coastguard Worker 32 -> 63 : 3 | | 125*387f9dfdSAndroid Build Coastguard Worker 126*387f9dfdSAndroid Build Coastguard Workeroperation = 'write' 127*387f9dfdSAndroid Build Coastguard Worker msecs : count distribution 128*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 613 |****************************************| 129*387f9dfdSAndroid Build Coastguard Worker 130*387f9dfdSAndroid Build Coastguard WorkerThis shows a mixed read/write workload, where the slower read mode was around 131*387f9dfdSAndroid Build Coastguard Worker10 ms. 132*387f9dfdSAndroid Build Coastguard Worker 133*387f9dfdSAndroid Build Coastguard Worker 134*387f9dfdSAndroid Build Coastguard WorkerUSAGE message: 135*387f9dfdSAndroid Build Coastguard Worker 136*387f9dfdSAndroid Build Coastguard Worker# ./xfsdist -h 137*387f9dfdSAndroid Build Coastguard Workerusage: xfsdist [-h] [-T] [-m] [-p PID] [interval] [count] 138*387f9dfdSAndroid Build Coastguard Worker 139*387f9dfdSAndroid Build Coastguard WorkerSummarize XFS operation latency 140*387f9dfdSAndroid Build Coastguard Worker 141*387f9dfdSAndroid Build Coastguard Workerpositional arguments: 142*387f9dfdSAndroid Build Coastguard Worker interval output interval, in seconds 143*387f9dfdSAndroid Build Coastguard Worker count number of outputs 144*387f9dfdSAndroid Build Coastguard Worker 145*387f9dfdSAndroid Build Coastguard Workeroptional arguments: 146*387f9dfdSAndroid Build Coastguard Worker -h, --help show this help message and exit 147*387f9dfdSAndroid Build Coastguard Worker -T, --notimestamp don't include timestamp on interval output 148*387f9dfdSAndroid Build Coastguard Worker -m, --milliseconds output in milliseconds 149*387f9dfdSAndroid Build Coastguard Worker -p PID, --pid PID trace this PID only 150*387f9dfdSAndroid Build Coastguard Worker 151*387f9dfdSAndroid Build Coastguard Workerexamples: 152*387f9dfdSAndroid Build Coastguard Worker ./xfsdist # show operation latency as a histogram 153*387f9dfdSAndroid Build Coastguard Worker ./xfsdist -p 181 # trace PID 181 only 154*387f9dfdSAndroid Build Coastguard Worker ./xfsdist 1 10 # print 1 second summaries, 10 times 155*387f9dfdSAndroid Build Coastguard Worker ./xfsdist -m 5 # 5s summaries, milliseconds 156