1*387f9dfdSAndroid Build Coastguard WorkerDemonstrations of tcppktlat, the Linux BPF CO-RE version. 2*387f9dfdSAndroid Build Coastguard Worker 3*387f9dfdSAndroid Build Coastguard Workertcppktlat traces latency between TCP received pkt and picked up by userspace thread system-wide, and prints various details. 4*387f9dfdSAndroid Build Coastguard WorkerExample output: 5*387f9dfdSAndroid Build Coastguard Worker 6*387f9dfdSAndroid Build Coastguard Worker# tcppktlat 7*387f9dfdSAndroid Build Coastguard WorkerPID COMM LADDR LPORT RADDR RPORT MS 8*387f9dfdSAndroid Build Coastguard Worker4424 etcd 127.0.0.1 2379 127.0.0.1 53202 0.06 9*387f9dfdSAndroid Build Coastguard Worker4405 kube-apiserver 127.0.0.1 53202 127.0.0.1 2379 0.06 10*387f9dfdSAndroid Build Coastguard Worker1370211 wakatime-cli 172.22.130.115 59394 143.244.210.202 443 2.75 11*387f9dfdSAndroid Build Coastguard Worker3894 kubelet 172.18.0.3 51584 172.18.0.4 6443 0.08 12*387f9dfdSAndroid Build Coastguard Worker^C 13*387f9dfdSAndroid Build Coastguard Worker 14*387f9dfdSAndroid Build Coastguard WorkerIn the process of tracing, when a network soft interrupt reads a TCP packet, it is placed into the corresponding socket's receive queue, and then copied from kernel space to user space by a user-level thread. The latency between receiving the packet and it being retrieved can be used to determine if there are any performance issues in the user-level path for handling received TCP packet. 15*387f9dfdSAndroid Build Coastguard Worker 16*387f9dfdSAndroid Build Coastguard WorkerThe -l option can be used to filter on a local port, which is filtered in-kernel. 17*387f9dfdSAndroid Build Coastguard Worker 18*387f9dfdSAndroid Build Coastguard Worker# tcppktlat -l 7000 19*387f9dfdSAndroid Build Coastguard WorkerPID COMM LADDR LPORT RADDR RPORT MS 20*387f9dfdSAndroid Build Coastguard Worker1354840 server 127.0.0.1 7000 127.0.0.1 43932 0.05 21*387f9dfdSAndroid Build Coastguard Worker1354840 server 127.0.0.1 7000 127.0.0.1 43932 4.88 22*387f9dfdSAndroid Build Coastguard Worker1354840 server 127.0.0.1 7000 127.0.0.1 43932 6.02 23*387f9dfdSAndroid Build Coastguard Worker^C 24*387f9dfdSAndroid Build Coastguard Worker 25*387f9dfdSAndroid Build Coastguard WorkerThe output shows server experiences jitter and higher latency in reading data, requiring troubleshooting. 26*387f9dfdSAndroid Build Coastguard Worker 27*387f9dfdSAndroid Build Coastguard Worker 28*387f9dfdSAndroid Build Coastguard WorkerWe can use minimum latency(us) as a filtering condition. 29*387f9dfdSAndroid Build Coastguard Worker 30*387f9dfdSAndroid Build Coastguard Worker# tcppktlat 1000 31*387f9dfdSAndroid Build Coastguard WorkerPID COMM LADDR LPORT RADDR RPORT MS 32*387f9dfdSAndroid Build Coastguard Worker1354840 server 127.0.0.1 7000 127.0.0.1 35924 130.21 33*387f9dfdSAndroid Build Coastguard Worker1370211 wakatime-cli 172.22.130.115 59394 143.244.210.202 443 2.75 34*387f9dfdSAndroid Build Coastguard Worker4405 kube-apiserver :: 6443 :: 55726 1.61 35*387f9dfdSAndroid Build Coastguard Worker1370227 wakatime-cli 172.22.130.115 50642 143.244.210.202 443 2.80 36*387f9dfdSAndroid Build Coastguard Worker4405 kube-apiserver 127.0.0.1 53178 127.0.0.1 2379 1.57 37*387f9dfdSAndroid Build Coastguard Worker1370281 wakatime-cli 172.22.130.115 40908 143.244.210.202 443 3.31 38*387f9dfdSAndroid Build Coastguard Worker1370315 sshd 127.0.0.1 22 127.0.0.1 42070 6.41 39*387f9dfdSAndroid Build Coastguard Worker^C 40*387f9dfdSAndroid Build Coastguard Worker 41*387f9dfdSAndroid Build Coastguard Worker 42*387f9dfdSAndroid Build Coastguard Worker# tcppktlat --help 43*387f9dfdSAndroid Build Coastguard WorkerUsage: tcppktlat [OPTION...] 44*387f9dfdSAndroid Build Coastguard WorkerTrace latency between TCP received pkt and picked up by userspace thread. 45*387f9dfdSAndroid Build Coastguard Worker 46*387f9dfdSAndroid Build Coastguard WorkerUSAGE: tcppktlat [--help] [-T] [-p PID] [-t TID] [-l LPORT] [-r RPORT] [-v] 47*387f9dfdSAndroid Build Coastguard Worker 48*387f9dfdSAndroid Build Coastguard WorkerEXAMPLES: 49*387f9dfdSAndroid Build Coastguard Worker tcppktlat # Trace all TCP packet picked up latency 50*387f9dfdSAndroid Build Coastguard Worker tcppktlat -T # summarize with timestamps 51*387f9dfdSAndroid Build Coastguard Worker tcppktlat -p # filter for pid 52*387f9dfdSAndroid Build Coastguard Worker tcppktlat -t # filter for tid 53*387f9dfdSAndroid Build Coastguard Worker tcppktlat -l # filter for local port 54*387f9dfdSAndroid Build Coastguard Worker tcppktlat -r # filter for remote port 55*387f9dfdSAndroid Build Coastguard Worker tcppktlat 1000 # filter for latency higher than 1000us 56*387f9dfdSAndroid Build Coastguard Worker 57*387f9dfdSAndroid Build Coastguard Worker -l, --lport=LPORT filter for local port 58*387f9dfdSAndroid Build Coastguard Worker -p, --pid=PID Process PID to trace 59*387f9dfdSAndroid Build Coastguard Worker -r, --rport=RPORT filter for remote port 60*387f9dfdSAndroid Build Coastguard Worker -t, --tid=TID Thread TID to trace 61*387f9dfdSAndroid Build Coastguard Worker -T, --timestamp include timestamp on output 62*387f9dfdSAndroid Build Coastguard Worker -v, --verbose Verbose debug output 63*387f9dfdSAndroid Build Coastguard Worker -?, --help Give this help list 64*387f9dfdSAndroid Build Coastguard Worker --usage Give a short usage message 65*387f9dfdSAndroid Build Coastguard Worker -V, --version Print program version 66*387f9dfdSAndroid Build Coastguard Worker 67*387f9dfdSAndroid Build Coastguard WorkerMandatory or optional arguments to long options are also mandatory or optional 68*387f9dfdSAndroid Build Coastguard Workerfor any corresponding short options. 69*387f9dfdSAndroid Build Coastguard Worker 70*387f9dfdSAndroid Build Coastguard WorkerReport bugs to https://github.com/iovisor/bcc/tree/master/libbpf-tools. 71