From: Yuchung Cheng <ycheng@google.com>
To: davem@davemloft.net
Cc: netdev@vger.kernel.org, Yuchung Cheng <ycheng@google.com>,
Neal Cardwell <ncardwell@google.com>,
Eric Dumazet <edumazet@google.com>
Subject: [PATCH net-next 6/6] tcp: tcp_cong_control helper
Date: Thu, 14 Jan 2016 15:43:34 -0800 [thread overview]
Message-ID: <1452815014-601-7-git-send-email-ycheng@google.com> (raw)
In-Reply-To: <1452815014-601-1-git-send-email-ycheng@google.com>
Refactor and consolidate cwnd and rate updates into a new function
tcp_cong_control().
Signed-off-by: Yuchung Cheng <ycheng@google.com>
Signed-off-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
---
net/ipv4/tcp_input.c | 31 +++++++++++++++++++------------
1 file changed, 19 insertions(+), 12 deletions(-)
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 39c5326..52aa5df 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -3325,6 +3325,24 @@ static inline bool tcp_may_raise_cwnd(const struct sock *sk, const int flag)
return flag & FLAG_DATA_ACKED;
}
+/* The "ultimate" congestion control function that aims to replace the rigid
+ * cwnd increase and decrease control (tcp_cong_avoid,tcp_*cwnd_reduction).
+ * It's called toward the end of processing an ACK with precise rate
+ * information. All transmission or retransmission are delayed afterwards.
+ */
+static void tcp_cong_control(struct sock *sk, u32 ack, u32 acked_sacked,
+ int flag)
+{
+ if (tcp_in_cwnd_reduction(sk)) {
+ /* Reduce cwnd if state mandates */
+ tcp_cwnd_reduction(sk, acked_sacked, flag);
+ } else if (tcp_may_raise_cwnd(sk, flag)) {
+ /* Advance cwnd if state allows */
+ tcp_cong_avoid(sk, ack, acked_sacked);
+ }
+ tcp_update_pacing_rate(sk);
+}
+
/* Check that window update is acceptable.
* The function assumes that snd_una<=ack<=snd_next.
*/
@@ -3555,7 +3573,6 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)
int prior_packets = tp->packets_out;
u32 prior_delivered = tp->delivered;
int acked = 0; /* Number of packets newly acked */
- u32 acked_sacked; /* Number of packets newly acked or sacked */
int rexmit = REXMIT_NONE; /* Flag to (re)transmit to recover losses */
sack_state.first_sackt.v64 = 0;
@@ -3655,16 +3672,6 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)
if (tp->tlp_high_seq)
tcp_process_tlp_ack(sk, ack, flag);
- acked_sacked = tp->delivered - prior_delivered;
- /* Advance cwnd if state allows */
- if (tcp_in_cwnd_reduction(sk)) {
- /* Reduce cwnd if state mandates */
- tcp_cwnd_reduction(sk, acked_sacked, flag);
- } else if (tcp_may_raise_cwnd(sk, flag)) {
- /* Advance cwnd if state allows */
- tcp_cong_avoid(sk, ack, acked_sacked);
- }
-
if ((flag & FLAG_FORWARD_PROGRESS) || !(flag & FLAG_NOT_DUP)) {
struct dst_entry *dst = __sk_dst_get(sk);
if (dst)
@@ -3673,7 +3680,7 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)
if (icsk->icsk_pending == ICSK_TIME_RETRANS)
tcp_schedule_loss_probe(sk);
- tcp_update_pacing_rate(sk);
+ tcp_cong_control(sk, ack, tp->delivered - prior_delivered, flag);
tcp_xmit_recovery(sk, rexmit);
return 1;
--
2.6.0.rc2.230.g3dd15c0
next prev parent reply other threads:[~2016-01-14 23:44 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-14 23:43 [PATCH net-next 0/6] tcp: congestion control refactoring Yuchung Cheng
2016-01-14 23:43 ` [PATCH net-next 1/6] tcp: retransmit after recovery processing and congestion control Yuchung Cheng
2016-01-14 23:43 ` [PATCH net-next 2/6] tcp: move cwnd reduction after recovery state procesing Yuchung Cheng
2016-01-14 23:43 ` [PATCH net-next 3/6] tcp: new delivery accounting Yuchung Cheng
2016-01-14 23:43 ` [PATCH net-next 4/6] tcp: refactor pkts acked accounting Yuchung Cheng
2016-01-14 23:43 ` [PATCH net-next 5/6] tcp: make congestioin control more robust against reordering Yuchung Cheng
2016-01-14 23:43 ` Yuchung Cheng [this message]
2016-01-15 0:46 ` [PATCH net-next 0/6] tcp: congestion control refactoring Yuchung Cheng
2016-01-15 4:55 ` David Miller
-- strict thread matches above, loose matches on Subject: below --
2016-02-02 18:33 Yuchung Cheng
2016-02-02 18:33 ` [PATCH net-next 6/6] tcp: tcp_cong_control helper Yuchung Cheng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1452815014-601-7-git-send-email-ycheng@google.com \
--to=ycheng@google.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=ncardwell@google.com \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).