Re: [PATCH net] net: tcp: don't allocate fast clones for fastopen SYN
From: Eric Dumazet <edumazet@google.com>
Date: 2021-03-04 19:43:16
On Thu, Mar 4, 2021 at 8:06 PM Jakub Kicinski [off-list ref] wrote:
On Thu, 4 Mar 2021 13:51:15 +0100 Eric Dumazet wrote:quoted
I think we are over thinking this really (especially if the fix needs a change in core networking or drivers) We can reuse TSQ logic to have a chance to recover when the clone is eventually freed. This will be more generic, not only for the SYN+data of FastOpen. Can you please test the following patch ?#7 - Eric comes up with something much better :) But so far doesn't seem to quite do it, I'm looking but maybe you'll know right away (FWIW testing a v5.6 backport but I don't think TSQ changed?): On __tcp_retransmit_skb kretprobe: ==> Hit TFO case ret:-16 ca_state:0 skb:ffff888fdb4bac00! First hit: __tcp_retransmit_skb+1 tcp_rcv_state_process+2488 tcp_v6_do_rcv+405 tcp_v6_rcv+2984 ip6_protocol_deliver_rcu+180 ip6_input_finish+17 Successful hit: __tcp_retransmit_skb+1 tcp_retransmit_skb+18 tcp_retransmit_timer+716 tcp_write_timer_handler+136 tcp_write_timer+141 call_timer_fn+43 skb:ffff888fdb4bac00 --- delay:51642us bytes_acked:1
Humm maybe one of the conditions used in tcp_tsq_write() does not hold...
if (tp->lost_out > tp->retrans_out &&
tp->snd_cwnd > tcp_packets_in_flight(tp)) {
tcp_mstamp_refresh(tp);
tcp_xmit_retransmit_queue(sk);
}
Maybe FastOpen case is 'special' and tp->lost_out is wrong.