1*387f9dfdSAndroid Build Coastguard WorkerDemonstrations of tcpconnlat, the Linux eBPF/bcc version. 2*387f9dfdSAndroid Build Coastguard Worker 3*387f9dfdSAndroid Build Coastguard Worker 4*387f9dfdSAndroid Build Coastguard WorkerThis tool traces the kernel function performing active TCP connections 5*387f9dfdSAndroid Build Coastguard Worker(eg, via a connect() syscall), and shows the latency (time) for the connection 6*387f9dfdSAndroid Build Coastguard Workeras measured locally: the time from SYN sent to the response packet. 7*387f9dfdSAndroid Build Coastguard WorkerFor example: 8*387f9dfdSAndroid Build Coastguard Worker 9*387f9dfdSAndroid Build Coastguard Worker# ./tcpconnlat 10*387f9dfdSAndroid Build Coastguard WorkerPID COMM IP SADDR DADDR DPORT LAT(ms) 11*387f9dfdSAndroid Build Coastguard Worker1201 wget 4 10.153.223.157 23.23.100.231 80 1.65 12*387f9dfdSAndroid Build Coastguard Worker1201 wget 4 10.153.223.157 23.23.100.231 443 1.60 13*387f9dfdSAndroid Build Coastguard Worker1433 curl 4 10.153.223.157 104.20.25.153 80 0.75 14*387f9dfdSAndroid Build Coastguard Worker1690 wget 4 10.153.223.157 66.220.156.68 80 1.10 15*387f9dfdSAndroid Build Coastguard Worker1690 wget 4 10.153.223.157 66.220.156.68 443 0.95 16*387f9dfdSAndroid Build Coastguard Worker1690 wget 4 10.153.223.157 66.220.156.68 443 0.99 17*387f9dfdSAndroid Build Coastguard Worker2852 curl 4 10.153.223.157 23.101.17.61 80 250.86 18*387f9dfdSAndroid Build Coastguard Worker20337 python2.7 6 1234:ab12:2040:5020:2299:0:5:0 1234:ab12:20:9f1d:2299:dde9:0:f5 7001 62.20 19*387f9dfdSAndroid Build Coastguard Worker21588 nc 6 ::1 ::1 80 0.05 20*387f9dfdSAndroid Build Coastguard Worker[...] 21*387f9dfdSAndroid Build Coastguard Worker 22*387f9dfdSAndroid Build Coastguard WorkerThe first line shows a connection from the "wget" process to the IPv4 23*387f9dfdSAndroid Build Coastguard Workerdestination address 23.23.100.231, port 80. This took 1.65 milliseconds: the 24*387f9dfdSAndroid Build Coastguard Workertime from the SYN to the response. 25*387f9dfdSAndroid Build Coastguard Worker 26*387f9dfdSAndroid Build Coastguard WorkerTCP connection latency is a useful performance measure showing the time taken 27*387f9dfdSAndroid Build Coastguard Workerto establish a connection. This typically involves kernel TCP/IP processing 28*387f9dfdSAndroid Build Coastguard Workerand the network round trip time, and not application runtime. 29*387f9dfdSAndroid Build Coastguard Worker 30*387f9dfdSAndroid Build Coastguard Workertcpconnlat measures the time from any connection to the response packet, even 31*387f9dfdSAndroid Build Coastguard Workerif the response is a RST (port closed). 32*387f9dfdSAndroid Build Coastguard Worker 33*387f9dfdSAndroid Build Coastguard Worker 34*387f9dfdSAndroid Build Coastguard WorkerUSAGE message: 35*387f9dfdSAndroid Build Coastguard Worker 36*387f9dfdSAndroid Build Coastguard Worker# ./tcpconnlat -h 37*387f9dfdSAndroid Build Coastguard Workerusage: tcpconnlat [-h] [-t] [-p PID] [-L] [-4 | -6] [-v] [duration_ms] 38*387f9dfdSAndroid Build Coastguard Worker 39*387f9dfdSAndroid Build Coastguard WorkerTrace TCP connects and show connection latency 40*387f9dfdSAndroid Build Coastguard Worker 41*387f9dfdSAndroid Build Coastguard Workerpositional arguments: 42*387f9dfdSAndroid Build Coastguard Worker duration_ms minimum duration to trace (ms) 43*387f9dfdSAndroid Build Coastguard Worker 44*387f9dfdSAndroid Build Coastguard Workeroptional arguments: 45*387f9dfdSAndroid Build Coastguard Worker -h, --help show this help message and exit 46*387f9dfdSAndroid Build Coastguard Worker -t, --timestamp include timestamp on output 47*387f9dfdSAndroid Build Coastguard Worker -p PID, --pid PID trace this PID only 48*387f9dfdSAndroid Build Coastguard Worker -L, --lport include LPORT on output 49*387f9dfdSAndroid Build Coastguard Worker -4, --ipv4 trace IPv4 family only 50*387f9dfdSAndroid Build Coastguard Worker -6 --ipv6 trace IPv6 family only 51*387f9dfdSAndroid Build Coastguard Worker -v, --verbose print the BPF program for debugging purposes 52*387f9dfdSAndroid Build Coastguard Worker 53*387f9dfdSAndroid Build Coastguard Workerexamples: 54*387f9dfdSAndroid Build Coastguard Worker ./tcpconnlat # trace all TCP connect()s 55*387f9dfdSAndroid Build Coastguard Worker ./tcpconnlat 1 # trace connection latency slower than 1 ms 56*387f9dfdSAndroid Build Coastguard Worker ./tcpconnlat 0.1 # trace connection latency slower than 100 us 57*387f9dfdSAndroid Build Coastguard Worker ./tcpconnlat -t # include timestamps 58*387f9dfdSAndroid Build Coastguard Worker ./tcpconnlat -p 181 # only trace PID 181 59*387f9dfdSAndroid Build Coastguard Worker ./tcpconnlat -L # include LPORT while printing outputs 60*387f9dfdSAndroid Build Coastguard Worker ./tcpconnlat -4 # trace IPv4 family only 61*387f9dfdSAndroid Build Coastguard Worker ./tcpconnlat -6 # trace IPv6 family only 62