xref: /aosp_15_r20/external/bcc/tools/tcpretrans_example.txt (revision 387f9dfdfa2baef462e92476d413c7bc2470293e)
1*387f9dfdSAndroid Build Coastguard WorkerDemonstrations of tcpretrans, the Linux eBPF/bcc version.
2*387f9dfdSAndroid Build Coastguard Worker
3*387f9dfdSAndroid Build Coastguard Worker
4*387f9dfdSAndroid Build Coastguard WorkerThis tool traces the kernel TCP retransmit function to show details of these
5*387f9dfdSAndroid Build Coastguard Workerretransmits. For example:
6*387f9dfdSAndroid Build Coastguard Worker
7*387f9dfdSAndroid Build Coastguard Worker# ./tcpretrans
8*387f9dfdSAndroid Build Coastguard WorkerTIME     PID    IP LADDR:LPORT          T> RADDR:RPORT          STATE
9*387f9dfdSAndroid Build Coastguard Worker01:55:05 0      4  10.153.223.157:22    R> 69.53.245.40:34619   ESTABLISHED
10*387f9dfdSAndroid Build Coastguard Worker01:55:05 0      4  10.153.223.157:22    R> 69.53.245.40:34619   ESTABLISHED
11*387f9dfdSAndroid Build Coastguard Worker01:55:17 0      4  10.153.223.157:22    R> 69.53.245.40:22957   ESTABLISHED
12*387f9dfdSAndroid Build Coastguard Worker[...]
13*387f9dfdSAndroid Build Coastguard Worker
14*387f9dfdSAndroid Build Coastguard WorkerThis output shows three TCP retransmits, the first two were for an IPv4
15*387f9dfdSAndroid Build Coastguard Workerconnection from 10.153.223.157 port 22 to 69.53.245.40 port 34619. The TCP
16*387f9dfdSAndroid Build Coastguard Workerstate was "ESTABLISHED" at the time of the retransmit. The on-CPU PID at the
17*387f9dfdSAndroid Build Coastguard Workertime of the retransmit is printed, in this case 0 (the kernel, which will
18*387f9dfdSAndroid Build Coastguard Workerbe the case most of the time).
19*387f9dfdSAndroid Build Coastguard Worker
20*387f9dfdSAndroid Build Coastguard WorkerRetransmits are usually a sign of poor network health, and this tool is
21*387f9dfdSAndroid Build Coastguard Workeruseful for their investigation. Unlike using tcpdump, this tool has very
22*387f9dfdSAndroid Build Coastguard Workerlow overhead, as it only traces the retransmit function. It also prints
23*387f9dfdSAndroid Build Coastguard Workeradditional kernel details: the state of the TCP session at the time of the
24*387f9dfdSAndroid Build Coastguard Workerretransmit.
25*387f9dfdSAndroid Build Coastguard Worker
26*387f9dfdSAndroid Build Coastguard Worker
27*387f9dfdSAndroid Build Coastguard WorkerA -l option will include TCP tail loss probe attempts:
28*387f9dfdSAndroid Build Coastguard Worker
29*387f9dfdSAndroid Build Coastguard Worker# ./tcpretrans -l
30*387f9dfdSAndroid Build Coastguard WorkerTIME     PID    IP LADDR:LPORT          T> RADDR:RPORT          STATE
31*387f9dfdSAndroid Build Coastguard Worker01:55:45 0      4  10.153.223.157:22    R> 69.53.245.40:51601   ESTABLISHED
32*387f9dfdSAndroid Build Coastguard Worker01:55:46 0      4  10.153.223.157:22    R> 69.53.245.40:51601   ESTABLISHED
33*387f9dfdSAndroid Build Coastguard Worker01:55:46 0      4  10.153.223.157:22    R> 69.53.245.40:51601   ESTABLISHED
34*387f9dfdSAndroid Build Coastguard Worker01:55:53 0      4  10.153.223.157:22    L> 69.53.245.40:46444   ESTABLISHED
35*387f9dfdSAndroid Build Coastguard Worker01:56:06 0      4  10.153.223.157:22    R> 69.53.245.40:46444   ESTABLISHED
36*387f9dfdSAndroid Build Coastguard Worker01:56:06 0      4  10.153.223.157:22    R> 69.53.245.40:46444   ESTABLISHED
37*387f9dfdSAndroid Build Coastguard Worker01:56:08 0      4  10.153.223.157:22    R> 69.53.245.40:46444   ESTABLISHED
38*387f9dfdSAndroid Build Coastguard Worker01:56:08 0      4  10.153.223.157:22    R> 69.53.245.40:46444   ESTABLISHED
39*387f9dfdSAndroid Build Coastguard Worker01:56:08 1938   4  10.153.223.157:22    R> 69.53.245.40:46444   ESTABLISHED
40*387f9dfdSAndroid Build Coastguard Worker01:56:08 0      4  10.153.223.157:22    R> 69.53.245.40:46444   ESTABLISHED
41*387f9dfdSAndroid Build Coastguard Worker01:56:08 0      4  10.153.223.157:22    R> 69.53.245.40:46444   ESTABLISHED
42*387f9dfdSAndroid Build Coastguard Worker[...]
43*387f9dfdSAndroid Build Coastguard Worker
44*387f9dfdSAndroid Build Coastguard WorkerSee the "L>" in the "T>" column. These are attempts: the kernel probably
45*387f9dfdSAndroid Build Coastguard Workersent a TLP, but in some cases it might not have been ultimately sent.
46*387f9dfdSAndroid Build Coastguard Worker
47*387f9dfdSAndroid Build Coastguard WorkerTo spot heavily retransmitting flows quickly one can use the -c flag. It will
48*387f9dfdSAndroid Build Coastguard Workercount occurring retransmits per flow.
49*387f9dfdSAndroid Build Coastguard Worker
50*387f9dfdSAndroid Build Coastguard Worker# ./tcpretrans.py -c
51*387f9dfdSAndroid Build Coastguard WorkerTracing retransmits ... Hit Ctrl-C to end
52*387f9dfdSAndroid Build Coastguard Worker^C
53*387f9dfdSAndroid Build Coastguard WorkerLADDR:LPORT              RADDR:RPORT             RETRANSMITS
54*387f9dfdSAndroid Build Coastguard Worker192.168.10.50:60366  <-> 172.217.21.194:443         700
55*387f9dfdSAndroid Build Coastguard Worker192.168.10.50:666    <-> 172.213.11.195:443         345
56*387f9dfdSAndroid Build Coastguard Worker192.168.10.50:366    <-> 172.212.22.194:443         211
57*387f9dfdSAndroid Build Coastguard Worker[...]
58*387f9dfdSAndroid Build Coastguard Worker
59*387f9dfdSAndroid Build Coastguard WorkerThis can ease to quickly isolate congested or otherwise awry network paths
60*387f9dfdSAndroid Build Coastguard Workerresponsible for clamping tcp performance.
61*387f9dfdSAndroid Build Coastguard Worker
62*387f9dfdSAndroid Build Coastguard WorkerTCP sequence numbers can be included via -s, except in count mode. These numbers
63*387f9dfdSAndroid Build Coastguard Workerare useful for identifying specific retransmissions in large packet caputes.
64*387f9dfdSAndroid Build Coastguard WorkerNote, lossprobe -l output will display 0 for the sequence number for L type.
65*387f9dfdSAndroid Build Coastguard Worker
66*387f9dfdSAndroid Build Coastguard Worker# ./tcpretrans.py -s
67*387f9dfdSAndroid Build Coastguard WorkerTIME     PID    IP LADDR:LPORT          T> RADDR:RPORT          STATE        SEQ
68*387f9dfdSAndroid Build Coastguard Worker18:03:46 0      4  192.168.10.50:41976  R> 172.217.21.194:443   SYN_SENT     2879306108
69*387f9dfdSAndroid Build Coastguard Worker18:03:49 0      4  192.168.10.50:41976  R> 172.217.21.194:443   SYN_SENT     2879306108
70*387f9dfdSAndroid Build Coastguard Worker
71*387f9dfdSAndroid Build Coastguard WorkerUSAGE message:
72*387f9dfdSAndroid Build Coastguard Worker
73*387f9dfdSAndroid Build Coastguard Worker# ./tcpretrans -h
74*387f9dfdSAndroid Build Coastguard Workerusage: tcpretrans.py [-h] [-s] [-l] [-c] [-4 | -6]
75*387f9dfdSAndroid Build Coastguard Worker
76*387f9dfdSAndroid Build Coastguard WorkerTrace TCP retransmits
77*387f9dfdSAndroid Build Coastguard Worker
78*387f9dfdSAndroid Build Coastguard Workeroptional arguments:
79*387f9dfdSAndroid Build Coastguard Worker  -h, --help       show this help message and exit
80*387f9dfdSAndroid Build Coastguard Worker  -s, --sequence   display TCP sequence numbers
81*387f9dfdSAndroid Build Coastguard Worker  -l, --lossprobe  include tail loss probe attempts
82*387f9dfdSAndroid Build Coastguard Worker  -c, --count      count occurred retransmits per flow
83*387f9dfdSAndroid Build Coastguard Worker  -4, --ipv4       trace IPv4 family only
84*387f9dfdSAndroid Build Coastguard Worker  -6, --ipv6       trace IPv6 family only
85*387f9dfdSAndroid Build Coastguard Worker
86*387f9dfdSAndroid Build Coastguard Workerexamples:
87*387f9dfdSAndroid Build Coastguard Worker    ./tcpretrans           # trace TCP retransmits
88*387f9dfdSAndroid Build Coastguard Worker    ./tcpretrans -l        # include TLP attempts
89*387f9dfdSAndroid Build Coastguard Worker    ./tcpretrans -4        # trace IPv4 family only
90*387f9dfdSAndroid Build Coastguard Worker    ./tcpretrans -6        # trace IPv6 family only
91