From: Soheil Hassas Yeganeh <soheil@google.com>
To: Eric Dumazet <edumazet@google.com>
Cc: "David S . Miller" <davem@davemloft.net>,
netdev <netdev@vger.kernel.org>, Van Jacobson <vanj@google.com>,
Neal Cardwell <ncardwell@google.com>,
Yuchung Cheng <ycheng@google.com>,
Eric Dumazet <eric.dumazet@gmail.com>
Subject: Re: [PATCH net-next 1/2] tcp: add max_quickacks param to tcp_incr_quickack and tcp_enter_quickack_mode
Date: Tue, 22 May 2018 10:03:19 -0400 [thread overview]
Message-ID: <CACSApvZWVeST8y6DO9hB606KMMKhJ1ha_Y+myrxp20Y+_wCqoQ@mail.gmail.com> (raw)
In-Reply-To: <20180521220857.229273-2-edumazet@google.com>
On Mon, May 21, 2018 at 6:08 PM, Eric Dumazet <edumazet@google.com> wrote:
> We want to add finer control of the number of ACK packets sent after
> ECN events.
>
> This patch is not changing current behavior, it only enables following
> change.
>
> Signed-off-by: Eric Dumazet <edumazet@google.com>
Acked-by: Soheil Hassas Yeganeh <soheil@google.com>
> ---
> net/ipv4/tcp_input.c | 24 +++++++++++++-----------
> 1 file changed, 13 insertions(+), 11 deletions(-)
>
> diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
> index aebb29ab2fdf2ceaa182cd11928f145a886149ff..2e970e9f4e09d966b703af2d14d521a4328eba7e 100644
> --- a/net/ipv4/tcp_input.c
> +++ b/net/ipv4/tcp_input.c
> @@ -203,21 +203,23 @@ static void tcp_measure_rcv_mss(struct sock *sk, const struct sk_buff *skb)
> }
> }
>
> -static void tcp_incr_quickack(struct sock *sk)
> +static void tcp_incr_quickack(struct sock *sk, unsigned int max_quickacks)
> {
> struct inet_connection_sock *icsk = inet_csk(sk);
> unsigned int quickacks = tcp_sk(sk)->rcv_wnd / (2 * icsk->icsk_ack.rcv_mss);
>
> if (quickacks == 0)
> quickacks = 2;
> + quickacks = min(quickacks, max_quickacks);
> if (quickacks > icsk->icsk_ack.quick)
> - icsk->icsk_ack.quick = min(quickacks, TCP_MAX_QUICKACKS);
> + icsk->icsk_ack.quick = quickacks;
> }
>
> -static void tcp_enter_quickack_mode(struct sock *sk)
> +static void tcp_enter_quickack_mode(struct sock *sk, unsigned int max_quickacks)
> {
> struct inet_connection_sock *icsk = inet_csk(sk);
> - tcp_incr_quickack(sk);
> +
> + tcp_incr_quickack(sk, max_quickacks);
> icsk->icsk_ack.pingpong = 0;
> icsk->icsk_ack.ato = TCP_ATO_MIN;
> }
> @@ -261,7 +263,7 @@ static void __tcp_ecn_check_ce(struct tcp_sock *tp, const struct sk_buff *skb)
> * it is probably a retransmit.
> */
> if (tp->ecn_flags & TCP_ECN_SEEN)
> - tcp_enter_quickack_mode((struct sock *)tp);
> + tcp_enter_quickack_mode((struct sock *)tp, TCP_MAX_QUICKACKS);
> break;
> case INET_ECN_CE:
> if (tcp_ca_needs_ecn((struct sock *)tp))
> @@ -269,7 +271,7 @@ static void __tcp_ecn_check_ce(struct tcp_sock *tp, const struct sk_buff *skb)
>
> if (!(tp->ecn_flags & TCP_ECN_DEMAND_CWR)) {
> /* Better not delay acks, sender can have a very low cwnd */
> - tcp_enter_quickack_mode((struct sock *)tp);
> + tcp_enter_quickack_mode((struct sock *)tp, TCP_MAX_QUICKACKS);
> tp->ecn_flags |= TCP_ECN_DEMAND_CWR;
> }
> tp->ecn_flags |= TCP_ECN_SEEN;
> @@ -686,7 +688,7 @@ static void tcp_event_data_recv(struct sock *sk, struct sk_buff *skb)
> /* The _first_ data packet received, initialize
> * delayed ACK engine.
> */
> - tcp_incr_quickack(sk);
> + tcp_incr_quickack(sk, TCP_MAX_QUICKACKS);
> icsk->icsk_ack.ato = TCP_ATO_MIN;
> } else {
> int m = now - icsk->icsk_ack.lrcvtime;
> @@ -702,7 +704,7 @@ static void tcp_event_data_recv(struct sock *sk, struct sk_buff *skb)
> /* Too long gap. Apparently sender failed to
> * restart window, so that we send ACKs quickly.
> */
> - tcp_incr_quickack(sk);
> + tcp_incr_quickack(sk, TCP_MAX_QUICKACKS);
> sk_mem_reclaim(sk);
> }
> }
> @@ -4179,7 +4181,7 @@ static void tcp_send_dupack(struct sock *sk, const struct sk_buff *skb)
> if (TCP_SKB_CB(skb)->end_seq != TCP_SKB_CB(skb)->seq &&
> before(TCP_SKB_CB(skb)->seq, tp->rcv_nxt)) {
> NET_INC_STATS(sock_net(sk), LINUX_MIB_DELAYEDACKLOST);
> - tcp_enter_quickack_mode(sk);
> + tcp_enter_quickack_mode(sk, TCP_MAX_QUICKACKS);
>
> if (tcp_is_sack(tp) && sock_net(sk)->ipv4.sysctl_tcp_dsack) {
> u32 end_seq = TCP_SKB_CB(skb)->end_seq;
> @@ -4706,7 +4708,7 @@ static void tcp_data_queue(struct sock *sk, struct sk_buff *skb)
> tcp_dsack_set(sk, TCP_SKB_CB(skb)->seq, TCP_SKB_CB(skb)->end_seq);
>
> out_of_window:
> - tcp_enter_quickack_mode(sk);
> + tcp_enter_quickack_mode(sk, TCP_MAX_QUICKACKS);
> inet_csk_schedule_ack(sk);
> drop:
> tcp_drop(sk, skb);
> @@ -5790,7 +5792,7 @@ static int tcp_rcv_synsent_state_process(struct sock *sk, struct sk_buff *skb,
> * to stand against the temptation 8) --ANK
> */
> inet_csk_schedule_ack(sk);
> - tcp_enter_quickack_mode(sk);
> + tcp_enter_quickack_mode(sk, TCP_MAX_QUICKACKS);
> inet_csk_reset_xmit_timer(sk, ICSK_TIME_DACK,
> TCP_DELACK_MAX, TCP_RTO_MAX);
>
> --
> 2.17.0.441.gb46fe60e1d-goog
>
next prev parent reply other threads:[~2018-05-22 14:04 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-21 22:08 [PATCH net-next 0/2] tcp: reduce quickack pressure for ECN Eric Dumazet
2018-05-21 22:08 ` [PATCH net-next 1/2] tcp: add max_quickacks param to tcp_incr_quickack and tcp_enter_quickack_mode Eric Dumazet
2018-05-22 14:03 ` Soheil Hassas Yeganeh [this message]
2018-05-22 17:27 ` Neal Cardwell
2018-05-23 0:30 ` kbuild test robot
2018-05-23 1:37 ` Neal Cardwell
2018-05-21 22:08 ` [PATCH net-next 2/2] tcp: do not aggressively quick ack after ECN events Eric Dumazet
2018-05-22 14:04 ` Soheil Hassas Yeganeh
2018-05-22 16:54 ` Yuchung Cheng
2018-05-22 17:36 ` Neal Cardwell
2018-05-22 19:43 ` [PATCH net-next 0/2] tcp: reduce quickack pressure for ECN David Miller
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=CACSApvZWVeST8y6DO9hB606KMMKhJ1ha_Y+myrxp20Y+_wCqoQ@mail.gmail.com \
--to=soheil@google.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=eric.dumazet@gmail.com \
--cc=ncardwell@google.com \
--cc=netdev@vger.kernel.org \
--cc=vanj@google.com \
--cc=ycheng@google.com \
/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).