tcp: use sequence distance to detect reordering
Replace the reordering distance measurement in packet unit with sequence based approach. Previously it trackes the number of "packets" toward the forward ACK (i.e. highest sacked sequence)in a state variable "fackets_out". Precisely measuring reordering degree on packet distance has not much benefit, as the degree constantly changes by factors like path, load, and congestion window. It is also complicated and prone to arcane bugs. This patch replaces with sequence-based approach that's much simpler. Signed-off-by: Yuchung Cheng <ycheng@google.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Neal Cardwell <ncardwell@google.com> Reviewed-by: Soheil Hassas Yeganeh <soheil@google.com> Reviewed-by: Priyaranjan Jha <priyarjha@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
713bafea92
commit
737ff31456
@@ -1218,21 +1218,6 @@ static void tcp_set_skb_tso_segs(struct sk_buff *skb, unsigned int mss_now)
|
||||
}
|
||||
}
|
||||
|
||||
/* When a modification to fackets out becomes necessary, we need to check
|
||||
* skb is counted to fackets_out or not.
|
||||
*/
|
||||
static void tcp_adjust_fackets_out(struct sock *sk, const struct sk_buff *skb,
|
||||
int decr)
|
||||
{
|
||||
struct tcp_sock *tp = tcp_sk(sk);
|
||||
|
||||
if (!tp->sacked_out || tcp_is_reno(tp))
|
||||
return;
|
||||
|
||||
if (after(tcp_highest_sack_seq(tp), TCP_SKB_CB(skb)->seq))
|
||||
tp->fackets_out -= decr;
|
||||
}
|
||||
|
||||
/* Pcount in the middle of the write queue got changed, we need to do various
|
||||
* tweaks to fix counters
|
||||
*/
|
||||
@@ -1253,8 +1238,6 @@ static void tcp_adjust_pcount(struct sock *sk, const struct sk_buff *skb, int de
|
||||
if (tcp_is_reno(tp) && decr > 0)
|
||||
tp->sacked_out -= min_t(u32, tp->sacked_out, decr);
|
||||
|
||||
tcp_adjust_fackets_out(sk, skb, decr);
|
||||
|
||||
if (tp->lost_skb_hint &&
|
||||
before(TCP_SKB_CB(skb)->seq, TCP_SKB_CB(tp->lost_skb_hint)->seq) &&
|
||||
(TCP_SKB_CB(skb)->sacked & TCPCB_SACKED_ACKED))
|
||||
|
||||
Reference in New Issue
Block a user