1*387f9dfdSAndroid Build Coastguard WorkerDemonstrations of tcprtt, the Linux eBPF/bcc version. 2*387f9dfdSAndroid Build Coastguard Worker 3*387f9dfdSAndroid Build Coastguard Worker 4*387f9dfdSAndroid Build Coastguard WorkerThis program traces TCP RTT(round-trip time) to analyze the quality of 5*387f9dfdSAndroid Build Coastguard Workernetwork, then help us to distinguish the network latency trouble is from 6*387f9dfdSAndroid Build Coastguard Workeruser process or physical network. 7*387f9dfdSAndroid Build Coastguard Worker 8*387f9dfdSAndroid Build Coastguard WorkerFor example, wrk show the http request latency distribution: 9*387f9dfdSAndroid Build Coastguard Worker# wrk -d 30 -c 10 --latency http://192.168.122.100/index.html 10*387f9dfdSAndroid Build Coastguard WorkerRunning 30s test @ http://192.168.122.100/index.html 11*387f9dfdSAndroid Build Coastguard Worker 2 threads and 10 connections 12*387f9dfdSAndroid Build Coastguard Worker Thread Stats Avg Stdev Max +/- Stdev 13*387f9dfdSAndroid Build Coastguard Worker Latency 86.75ms 153.76ms 1.54s 90.85% 14*387f9dfdSAndroid Build Coastguard Worker Req/Sec 160.91 76.07 424.00 67.06% 15*387f9dfdSAndroid Build Coastguard Worker Latency Distribution 16*387f9dfdSAndroid Build Coastguard Worker 50% 14.55ms 17*387f9dfdSAndroid Build Coastguard Worker 75% 119.21ms 18*387f9dfdSAndroid Build Coastguard Worker 90% 230.22ms 19*387f9dfdSAndroid Build Coastguard Worker 99% 726.90ms 20*387f9dfdSAndroid Build Coastguard Worker 9523 requests in 30.02s, 69.62MB read 21*387f9dfdSAndroid Build Coastguard Worker Socket errors: connect 0, read 0, write 0, timeout 1 22*387f9dfdSAndroid Build Coastguard Worker 23*387f9dfdSAndroid Build Coastguard WorkerDuring wrk testing, run tcprtt: 24*387f9dfdSAndroid Build Coastguard Worker# ./tcprtt -i 1 -d 10 -m 25*387f9dfdSAndroid Build Coastguard WorkerTracing TCP RTT... Hit Ctrl-C to end. 26*387f9dfdSAndroid Build Coastguard Worker msecs : count distribution 27*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 4 | | 28*387f9dfdSAndroid Build Coastguard Worker 2 -> 3 : 0 | | 29*387f9dfdSAndroid Build Coastguard Worker 4 -> 7 : 1055 |****************************************| 30*387f9dfdSAndroid Build Coastguard Worker 8 -> 15 : 26 | | 31*387f9dfdSAndroid Build Coastguard Worker 16 -> 31 : 0 | | 32*387f9dfdSAndroid Build Coastguard Worker 32 -> 63 : 0 | | 33*387f9dfdSAndroid Build Coastguard Worker 64 -> 127 : 18 | | 34*387f9dfdSAndroid Build Coastguard Worker 128 -> 255 : 14 | | 35*387f9dfdSAndroid Build Coastguard Worker 256 -> 511 : 14 | | 36*387f9dfdSAndroid Build Coastguard Worker 512 -> 1023 : 12 | | 37*387f9dfdSAndroid Build Coastguard Worker 38*387f9dfdSAndroid Build Coastguard WorkerThe wrk output shows that the latency of web service is not stable, and tcprtt 39*387f9dfdSAndroid Build Coastguard Workeralso shows unstable TCP RTT. So in this situation, we need to make sure the 40*387f9dfdSAndroid Build Coastguard Workerquality of network is good or not firstly. 41*387f9dfdSAndroid Build Coastguard Worker 42*387f9dfdSAndroid Build Coastguard Worker 43*387f9dfdSAndroid Build Coastguard WorkerUse filter for address and(or) port. Ex, only collect local address 192.168.122.200 44*387f9dfdSAndroid Build Coastguard Workerand remote address 192.168.122.100 and remote port 80. 45*387f9dfdSAndroid Build Coastguard Worker# ./tcprtt -i 1 -d 10 -m -a 192.168.122.200 -A 192.168.122.100 -P 80 46*387f9dfdSAndroid Build Coastguard Worker 47*387f9dfdSAndroid Build Coastguard Worker 48*387f9dfdSAndroid Build Coastguard WorkerTracing at server side, show each clients with its own histogram. 49*387f9dfdSAndroid Build Coastguard WorkerFor example, run tcprtt on a storage node to show initiators' rtt histogram: 50*387f9dfdSAndroid Build Coastguard Worker# ./tcprtt -i 1 --lport 3260 --byraddr -e 51*387f9dfdSAndroid Build Coastguard WorkerTracing TCP RTT... Hit Ctrl-C to end. 52*387f9dfdSAndroid Build Coastguard Worker 53*387f9dfdSAndroid Build Coastguard Worker 54*387f9dfdSAndroid Build Coastguard WorkerRemote Addres = 10.194.87.206 [AVG 170] 55*387f9dfdSAndroid Build Coastguard Worker usecs : count distribution 56*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 0 | | 57*387f9dfdSAndroid Build Coastguard Worker 2 -> 3 : 0 | | 58*387f9dfdSAndroid Build Coastguard Worker 4 -> 7 : 0 | | 59*387f9dfdSAndroid Build Coastguard Worker 8 -> 15 : 0 | | 60*387f9dfdSAndroid Build Coastguard Worker 16 -> 31 : 0 | | 61*387f9dfdSAndroid Build Coastguard Worker 32 -> 63 : 31 | | 62*387f9dfdSAndroid Build Coastguard Worker 64 -> 127 : 5150 |******************* | 63*387f9dfdSAndroid Build Coastguard Worker 128 -> 255 : 10327 |****************************************| 64*387f9dfdSAndroid Build Coastguard Worker 256 -> 511 : 1014 |*** | 65*387f9dfdSAndroid Build Coastguard Worker 512 -> 1023 : 10 | | 66*387f9dfdSAndroid Build Coastguard Worker 1024 -> 2047 : 7 | | 67*387f9dfdSAndroid Build Coastguard Worker 2048 -> 4095 : 14 | | 68*387f9dfdSAndroid Build Coastguard Worker 4096 -> 8191 : 10 | | 69*387f9dfdSAndroid Build Coastguard Worker 70*387f9dfdSAndroid Build Coastguard WorkerRemote Addres = 10.194.87.197 [AVG 4293] 71*387f9dfdSAndroid Build Coastguard Worker usecs : count distribution 72*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 0 | | 73*387f9dfdSAndroid Build Coastguard Worker 2 -> 3 : 0 | | 74*387f9dfdSAndroid Build Coastguard Worker 4 -> 7 : 0 | | 75*387f9dfdSAndroid Build Coastguard Worker 8 -> 15 : 0 | | 76*387f9dfdSAndroid Build Coastguard Worker 16 -> 31 : 0 | | 77*387f9dfdSAndroid Build Coastguard Worker 32 -> 63 : 0 | | 78*387f9dfdSAndroid Build Coastguard Worker 64 -> 127 : 0 | | 79*387f9dfdSAndroid Build Coastguard Worker 128 -> 255 : 0 | | 80*387f9dfdSAndroid Build Coastguard Worker 256 -> 511 : 0 | | 81*387f9dfdSAndroid Build Coastguard Worker 512 -> 1023 : 0 | | 82*387f9dfdSAndroid Build Coastguard Worker 1024 -> 2047 : 3 |******** | 83*387f9dfdSAndroid Build Coastguard Worker 2048 -> 4095 : 12 |********************************** | 84*387f9dfdSAndroid Build Coastguard Worker 4096 -> 8191 : 14 |****************************************| 85*387f9dfdSAndroid Build Coastguard Worker 86*387f9dfdSAndroid Build Coastguard WorkerRemote Addres = 10.194.88.148 [AVG 6215] 87*387f9dfdSAndroid Build Coastguard Worker usecs : count distribution 88*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 0 | | 89*387f9dfdSAndroid Build Coastguard Worker 2 -> 3 : 0 | | 90*387f9dfdSAndroid Build Coastguard Worker 4 -> 7 : 0 | | 91*387f9dfdSAndroid Build Coastguard Worker 8 -> 15 : 0 | | 92*387f9dfdSAndroid Build Coastguard Worker 16 -> 31 : 0 | | 93*387f9dfdSAndroid Build Coastguard Worker 32 -> 63 : 0 | | 94*387f9dfdSAndroid Build Coastguard Worker 64 -> 127 : 0 | | 95*387f9dfdSAndroid Build Coastguard Worker 128 -> 255 : 0 | | 96*387f9dfdSAndroid Build Coastguard Worker 256 -> 511 : 0 | | 97*387f9dfdSAndroid Build Coastguard Worker 512 -> 1023 : 0 | | 98*387f9dfdSAndroid Build Coastguard Worker 1024 -> 2047 : 0 | | 99*387f9dfdSAndroid Build Coastguard Worker 2048 -> 4095 : 0 | | 100*387f9dfdSAndroid Build Coastguard Worker 4096 -> 8191 : 2 |****************************************| 101*387f9dfdSAndroid Build Coastguard Worker 102*387f9dfdSAndroid Build Coastguard WorkerRemote Addres = 10.194.87.90 [AVG 2188] 103*387f9dfdSAndroid Build Coastguard Worker usecs : count distribution 104*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 0 | | 105*387f9dfdSAndroid Build Coastguard Worker 2 -> 3 : 0 | | 106*387f9dfdSAndroid Build Coastguard Worker 4 -> 7 : 0 | | 107*387f9dfdSAndroid Build Coastguard Worker 8 -> 15 : 0 | | 108*387f9dfdSAndroid Build Coastguard Worker 16 -> 31 : 0 | | 109*387f9dfdSAndroid Build Coastguard Worker 32 -> 63 : 0 | | 110*387f9dfdSAndroid Build Coastguard Worker 64 -> 127 : 0 | | 111*387f9dfdSAndroid Build Coastguard Worker 128 -> 255 : 0 | | 112*387f9dfdSAndroid Build Coastguard Worker 256 -> 511 : 15 |********* | 113*387f9dfdSAndroid Build Coastguard Worker 512 -> 1023 : 30 |****************** | 114*387f9dfdSAndroid Build Coastguard Worker 1024 -> 2047 : 50 |****************************** | 115*387f9dfdSAndroid Build Coastguard Worker 2048 -> 4095 : 65 |****************************************| 116*387f9dfdSAndroid Build Coastguard Worker 4096 -> 8191 : 22 |************* | 117*387f9dfdSAndroid Build Coastguard Worker 118*387f9dfdSAndroid Build Coastguard Worker.... 119*387f9dfdSAndroid Build Coastguard Worker 120*387f9dfdSAndroid Build Coastguard Worker 121*387f9dfdSAndroid Build Coastguard WorkerUse -e(--extension) to show extension RTT: 122*387f9dfdSAndroid Build Coastguard Worker# ./tcprtt -i 1 -e 123*387f9dfdSAndroid Build Coastguard Worker 124*387f9dfdSAndroid Build Coastguard WorkerAll Addresses = ******* [AVG 324] 125*387f9dfdSAndroid Build Coastguard Worker usecs : count distribution 126*387f9dfdSAndroid Build Coastguard Worker 0 -> 1 : 0 | | 127*387f9dfdSAndroid Build Coastguard Worker 2 -> 3 : 0 | | 128*387f9dfdSAndroid Build Coastguard Worker 4 -> 7 : 0 | | 129*387f9dfdSAndroid Build Coastguard Worker 8 -> 15 : 0 | | 130*387f9dfdSAndroid Build Coastguard Worker 16 -> 31 : 0 | | 131*387f9dfdSAndroid Build Coastguard Worker 32 -> 63 : 0 | | 132*387f9dfdSAndroid Build Coastguard Worker 64 -> 127 : 5360 |******** | 133*387f9dfdSAndroid Build Coastguard Worker 128 -> 255 : 23834 |****************************************| 134*387f9dfdSAndroid Build Coastguard Worker 256 -> 511 : 11276 |****************** | 135*387f9dfdSAndroid Build Coastguard Worker 512 -> 1023 : 700 |* | 136*387f9dfdSAndroid Build Coastguard Worker 1024 -> 2047 : 434 | | 137*387f9dfdSAndroid Build Coastguard Worker 2048 -> 4095 : 356 | | 138*387f9dfdSAndroid Build Coastguard Worker 4096 -> 8191 : 328 | | 139*387f9dfdSAndroid Build Coastguard Worker 8192 -> 16383 : 91 | | 140*387f9dfdSAndroid Build Coastguard Worker 141*387f9dfdSAndroid Build Coastguard Worker 142*387f9dfdSAndroid Build Coastguard WorkerFull USAGE: 143*387f9dfdSAndroid Build Coastguard Worker 144*387f9dfdSAndroid Build Coastguard Worker# ./tcprtt -h 145*387f9dfdSAndroid Build Coastguard Workerusage: tcprtt [-h] [-i INTERVAL] [-d DURATION] [-T] [-m] [-p LPORT] 146*387f9dfdSAndroid Build Coastguard Worker [-P RPORT] [-a LADDR] [-A RADDR] [-b] [-B] [-e] [-D] 147*387f9dfdSAndroid Build Coastguard Worker [-4 | -6] 148*387f9dfdSAndroid Build Coastguard Worker 149*387f9dfdSAndroid Build Coastguard WorkerSummarize TCP RTT as a histogram 150*387f9dfdSAndroid Build Coastguard Worker 151*387f9dfdSAndroid Build Coastguard Workeroptional arguments: 152*387f9dfdSAndroid Build Coastguard Worker -h, --help show this help message and exit 153*387f9dfdSAndroid Build Coastguard Worker -i INTERVAL, --interval INTERVAL 154*387f9dfdSAndroid Build Coastguard Worker summary interval, seconds 155*387f9dfdSAndroid Build Coastguard Worker -d DURATION, --duration DURATION 156*387f9dfdSAndroid Build Coastguard Worker total duration of trace, seconds 157*387f9dfdSAndroid Build Coastguard Worker -T, --timestamp include timestamp on output 158*387f9dfdSAndroid Build Coastguard Worker -m, --milliseconds millisecond histogram 159*387f9dfdSAndroid Build Coastguard Worker -p LPORT, --lport LPORT 160*387f9dfdSAndroid Build Coastguard Worker filter for local port 161*387f9dfdSAndroid Build Coastguard Worker -P RPORT, --rport RPORT 162*387f9dfdSAndroid Build Coastguard Worker filter for remote port 163*387f9dfdSAndroid Build Coastguard Worker -a LADDR, --laddr LADDR 164*387f9dfdSAndroid Build Coastguard Worker filter for local address 165*387f9dfdSAndroid Build Coastguard Worker -A RADDR, --raddr RADDR 166*387f9dfdSAndroid Build Coastguard Worker filter for remote address 167*387f9dfdSAndroid Build Coastguard Worker -b, --byladdr show sockets histogram by local address 168*387f9dfdSAndroid Build Coastguard Worker -B, --byraddr show sockets histogram by remote address 169*387f9dfdSAndroid Build Coastguard Worker -e, --extension show extension summary(average) 170*387f9dfdSAndroid Build Coastguard Worker -D, --debug print BPF program before starting (for debugging 171*387f9dfdSAndroid Build Coastguard Worker purposes) 172*387f9dfdSAndroid Build Coastguard Worker -4, --ipv4 trace IPv4 family only 173*387f9dfdSAndroid Build Coastguard Worker -6, --ipv6 trace IPv6 family only 174*387f9dfdSAndroid Build Coastguard Worker 175*387f9dfdSAndroid Build Coastguard Workerexamples: 176*387f9dfdSAndroid Build Coastguard Worker ./tcprtt # summarize TCP RTT 177*387f9dfdSAndroid Build Coastguard Worker ./tcprtt -i 1 -d 10 # print 1 second summaries, 10 times 178*387f9dfdSAndroid Build Coastguard Worker ./tcprtt -m -T # summarize in millisecond, and timestamps 179*387f9dfdSAndroid Build Coastguard Worker ./tcprtt -p # filter for local port 180*387f9dfdSAndroid Build Coastguard Worker ./tcprtt -P # filter for remote port 181*387f9dfdSAndroid Build Coastguard Worker ./tcprtt -a # filter for local address 182*387f9dfdSAndroid Build Coastguard Worker ./tcprtt -A # filter for remote address 183*387f9dfdSAndroid Build Coastguard Worker ./tcprtt -b # show sockets histogram by local address 184*387f9dfdSAndroid Build Coastguard Worker ./tcprtt -B # show sockets histogram by remote address 185*387f9dfdSAndroid Build Coastguard Worker ./tcprtt -D # show debug bpf text 186*387f9dfdSAndroid Build Coastguard Worker ./tcprtt -e # show extension summary(average) 187*387f9dfdSAndroid Build Coastguard Worker ./tcprtt -4 # trace IPv4 family only 188*387f9dfdSAndroid Build Coastguard Worker ./tcprtt -6 # trace IPv6 family only 189