* [PATCH net-next v2 0/2] minor tail loss probe improvements
@ 2015-08-12 18:18 Yuchung Cheng
2015-08-12 18:18 ` [PATCH net-next v2 1/2] tcp: don't extend RTO on failed loss probe attempts Yuchung Cheng
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Yuchung Cheng @ 2015-08-12 18:18 UTC (permalink / raw)
To: davem; +Cc: netdev, Yuchung Cheng
This patch series enhance the tail loss probe (TLP) on some error
conditions. When TLP fails to send a probe, it will no longer
extend the RTO. When it fails to send a new packet because of
receiver window limit, it'll try to retransmit the last packet.
Yuchung Cheng (2):
tcp: don't extend RTO on failed loss probe attempts
tcp: TLP retransmits last if failed to send new packet
net/ipv4/tcp_output.c | 41 +++++++++++++++++++++++------------------
1 file changed, 23 insertions(+), 18 deletions(-)
--
2.5.0.276.gf5e568e
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH net-next v2 1/2] tcp: don't extend RTO on failed loss probe attempts
2015-08-12 18:18 [PATCH net-next v2 0/2] minor tail loss probe improvements Yuchung Cheng
@ 2015-08-12 18:18 ` Yuchung Cheng
2015-08-13 18:07 ` Eric Dumazet
2015-08-12 18:18 ` [PATCH net-next v2 2/2] tcp: TLP retransmits last if failed to send new packet Yuchung Cheng
2015-08-13 23:52 ` [PATCH net-next v2 0/2] minor tail loss probe improvements David Miller
2 siblings, 1 reply; 5+ messages in thread
From: Yuchung Cheng @ 2015-08-12 18:18 UTC (permalink / raw)
To: davem; +Cc: netdev, Yuchung Cheng, Neal Cardwell, Nandita Dukkipati
If TLP was unable to send a probe, it extended the RTO to
now + icsk_rto. But extending the RTO makes little sense
if no TLP probe went out. With this commit, instead of
extending the RTO we re-arm it relative to the transmit time
of the write queue head.
Signed-off-by: Yuchung Cheng <ycheng@google.com>
Signed-off-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: Nandita Dukkipati <nanditad@google.com>
---
net/ipv4/tcp_output.c | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index 7d1efa7..78fc89c 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -2275,13 +2275,12 @@ void tcp_send_loss_probe(struct sock *sk)
tp->tlp_high_seq = tp->snd_nxt;
rearm_timer:
- inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS,
- inet_csk(sk)->icsk_rto,
- TCP_RTO_MAX);
-
- if (likely(!err))
- NET_INC_STATS_BH(sock_net(sk),
- LINUX_MIB_TCPLOSSPROBES);
+ if (likely(!err)) {
+ NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPLOSSPROBES);
+ /* Reset s.t. tcp_rearm_rto will restart timer from now */
+ inet_csk(sk)->icsk_pending = 0;
+ }
+ tcp_rearm_rto(sk);
}
/* Push out any pending frames which were held back due to
--
2.5.0.276.gf5e568e
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH net-next v2 2/2] tcp: TLP retransmits last if failed to send new packet
2015-08-12 18:18 [PATCH net-next v2 0/2] minor tail loss probe improvements Yuchung Cheng
2015-08-12 18:18 ` [PATCH net-next v2 1/2] tcp: don't extend RTO on failed loss probe attempts Yuchung Cheng
@ 2015-08-12 18:18 ` Yuchung Cheng
2015-08-13 23:52 ` [PATCH net-next v2 0/2] minor tail loss probe improvements David Miller
2 siblings, 0 replies; 5+ messages in thread
From: Yuchung Cheng @ 2015-08-12 18:18 UTC (permalink / raw)
To: davem; +Cc: netdev, Yuchung Cheng, Neal Cardwell, Nandita Dukkipati
When TLP fails to send new packet because of receive window
limit, it should fall back to retransmit the last packet instead.
Signed-off-by: Yuchung Cheng <ycheng@google.com>
Signed-off-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: Nandita Dukkipati <nanditad@google.com>
---
v2: condition the fallback retransmit on receiver window limit
net/ipv4/tcp_output.c | 38 ++++++++++++++++++++++----------------
1 file changed, 22 insertions(+), 16 deletions(-)
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index 78fc89c..444ab5b 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -2149,7 +2149,7 @@ repair:
tcp_cwnd_validate(sk, is_cwnd_limited);
return false;
}
- return (push_one == 2) || (!tp->packets_out && tcp_send_head(sk));
+ return !tp->packets_out && tcp_send_head(sk);
}
bool tcp_schedule_loss_probe(struct sock *sk)
@@ -2226,7 +2226,7 @@ static bool skb_still_in_host_queue(const struct sock *sk,
return false;
}
-/* When probe timeout (PTO) fires, send a new segment if one exists, else
+/* When probe timeout (PTO) fires, try send a new segment if possible, else
* retransmit the last segment.
*/
void tcp_send_loss_probe(struct sock *sk)
@@ -2235,11 +2235,19 @@ void tcp_send_loss_probe(struct sock *sk)
struct sk_buff *skb;
int pcount;
int mss = tcp_current_mss(sk);
- int err = -1;
- if (tcp_send_head(sk)) {
- err = tcp_write_xmit(sk, mss, TCP_NAGLE_OFF, 2, GFP_ATOMIC);
- goto rearm_timer;
+ skb = tcp_send_head(sk);
+ if (skb) {
+ if (tcp_snd_wnd_test(tp, skb, mss)) {
+ pcount = tp->packets_out;
+ tcp_write_xmit(sk, mss, TCP_NAGLE_OFF, 2, GFP_ATOMIC);
+ if (tp->packets_out > pcount)
+ goto probe_sent;
+ goto rearm_timer;
+ }
+ skb = tcp_write_queue_prev(sk, skb);
+ } else {
+ skb = tcp_write_queue_tail(sk);
}
/* At most one outstanding TLP retransmission. */
@@ -2247,7 +2255,6 @@ void tcp_send_loss_probe(struct sock *sk)
goto rearm_timer;
/* Retransmit last segment. */
- skb = tcp_write_queue_tail(sk);
if (WARN_ON(!skb))
goto rearm_timer;
@@ -2262,24 +2269,23 @@ void tcp_send_loss_probe(struct sock *sk)
if (unlikely(tcp_fragment(sk, skb, (pcount - 1) * mss, mss,
GFP_ATOMIC)))
goto rearm_timer;
- skb = tcp_write_queue_tail(sk);
+ skb = tcp_write_queue_next(sk, skb);
}
if (WARN_ON(!skb || !tcp_skb_pcount(skb)))
goto rearm_timer;
- err = __tcp_retransmit_skb(sk, skb);
+ if (__tcp_retransmit_skb(sk, skb))
+ goto rearm_timer;
/* Record snd_nxt for loss detection. */
- if (likely(!err))
- tp->tlp_high_seq = tp->snd_nxt;
+ tp->tlp_high_seq = tp->snd_nxt;
+probe_sent:
+ NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPLOSSPROBES);
+ /* Reset s.t. tcp_rearm_rto will restart timer from now */
+ inet_csk(sk)->icsk_pending = 0;
rearm_timer:
- if (likely(!err)) {
- NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPLOSSPROBES);
- /* Reset s.t. tcp_rearm_rto will restart timer from now */
- inet_csk(sk)->icsk_pending = 0;
- }
tcp_rearm_rto(sk);
}
--
2.5.0.276.gf5e568e
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH net-next v2 1/2] tcp: don't extend RTO on failed loss probe attempts
2015-08-12 18:18 ` [PATCH net-next v2 1/2] tcp: don't extend RTO on failed loss probe attempts Yuchung Cheng
@ 2015-08-13 18:07 ` Eric Dumazet
0 siblings, 0 replies; 5+ messages in thread
From: Eric Dumazet @ 2015-08-13 18:07 UTC (permalink / raw)
To: Yuchung Cheng; +Cc: davem, netdev, Neal Cardwell, Nandita Dukkipati
On Wed, 2015-08-12 at 11:18 -0700, Yuchung Cheng wrote:
> If TLP was unable to send a probe, it extended the RTO to
> now + icsk_rto. But extending the RTO makes little sense
> if no TLP probe went out. With this commit, instead of
> extending the RTO we re-arm it relative to the transmit time
> of the write queue head.
>
> Signed-off-by: Yuchung Cheng <ycheng@google.com>
> Signed-off-by: Neal Cardwell <ncardwell@google.com>
> Signed-off-by: Nandita Dukkipati <nanditad@google.com>
> ---
Acked-by: Eric Dumazet <edumazet@google.com>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH net-next v2 0/2] minor tail loss probe improvements
2015-08-12 18:18 [PATCH net-next v2 0/2] minor tail loss probe improvements Yuchung Cheng
2015-08-12 18:18 ` [PATCH net-next v2 1/2] tcp: don't extend RTO on failed loss probe attempts Yuchung Cheng
2015-08-12 18:18 ` [PATCH net-next v2 2/2] tcp: TLP retransmits last if failed to send new packet Yuchung Cheng
@ 2015-08-13 23:52 ` David Miller
2 siblings, 0 replies; 5+ messages in thread
From: David Miller @ 2015-08-13 23:52 UTC (permalink / raw)
To: ycheng; +Cc: netdev
From: Yuchung Cheng <ycheng@google.com>
Date: Wed, 12 Aug 2015 11:18:17 -0700
> This patch series enhance the tail loss probe (TLP) on some error
> conditions. When TLP fails to send a probe, it will no longer
> extend the RTO. When it fails to send a new packet because of
> receiver window limit, it'll try to retransmit the last packet.
Series applied, thanks.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2015-08-13 23:52 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-08-12 18:18 [PATCH net-next v2 0/2] minor tail loss probe improvements Yuchung Cheng
2015-08-12 18:18 ` [PATCH net-next v2 1/2] tcp: don't extend RTO on failed loss probe attempts Yuchung Cheng
2015-08-13 18:07 ` Eric Dumazet
2015-08-12 18:18 ` [PATCH net-next v2 2/2] tcp: TLP retransmits last if failed to send new packet Yuchung Cheng
2015-08-13 23:52 ` [PATCH net-next v2 0/2] minor tail loss probe improvements David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).