From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 601D1C5ACD6 for ; Wed, 18 Mar 2020 09:46:59 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 35F7220767 for ; Wed, 18 Mar 2020 09:46:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727666AbgCRJq6 (ORCPT ); Wed, 18 Mar 2020 05:46:58 -0400 Received: from smtp-rs2-vallila1.fe.helsinki.fi ([128.214.173.73]:53282 "EHLO smtp-rs2-vallila1.fe.helsinki.fi" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727655AbgCRJq5 (ORCPT ); Wed, 18 Mar 2020 05:46:57 -0400 Received: from whs-18.cs.helsinki.fi (whs-18.cs.helsinki.fi [128.214.166.46]) by smtp-rs2.it.helsinki.fi (8.14.7/8.14.7) with ESMTP id 02I9cEjB006484; Wed, 18 Mar 2020 11:38:14 +0200 Received: by whs-18.cs.helsinki.fi (Postfix, from userid 1070048) id 9C2F0360F5D; Wed, 18 Mar 2020 11:38:14 +0200 (EET) From: =?ISO-8859-1?Q?Ilpo_J=E4rvinen?= To: netdev@vger.kernel.org Cc: Yuchung Cheng , Neal Cardwell , Eric Dumazet , Olivier Tilmans Subject: [RFC PATCH 23/28] tcp: AccECN option ceb/cep heuristic Date: Wed, 18 Mar 2020 11:38:04 +0200 Message-Id: <1584524289-24187-23-git-send-email-ilpo.jarvinen@helsinki.fi> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1584524289-24187-2-git-send-email-ilpo.jarvinen@helsinki.fi> References: <1584524289-24187-2-git-send-email-ilpo.jarvinen@helsinki.fi> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Ilpo Järvinen The heuristic algorithm from draft-09 Appendix A.2.2. Signed-off-by: Ilpo Järvinen --- include/net/tcp.h | 1 + net/ipv4/tcp_input.c | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/include/net/tcp.h b/include/net/tcp.h index a29109fa2ce2..54a640fed673 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -225,6 +225,7 @@ void tcp_time_wait(struct sock *sk, int state, int timeo); TCPOLEN_ACCECN_PERCOUNTER * \ TCP_ACCECN_NUMCOUNTERS) #define TCP_ACCECN_BEACON_FREQ_SHIFT 2 /* Send option at least 2^2 times per RTT */ +#define TCP_ACCECN_SAFETY_SHIFT 1 /* SAFETY_FACTOR in accecn draft */ /* tp->saw_accecn_opt states, empty seen & orderbit are overloaded */ #define TCP_ACCECN_OPT_EMPTY_SEEN 0x1 diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 826dfd5bf114..6bc9995202c8 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -518,14 +518,16 @@ static bool tcp_accecn_process_option(struct tcp_sock *tp, static u32 tcp_accecn_process(struct tcp_sock *tp, const struct sk_buff *skb, u32 delivered_pkts, u32 delivered_bytes, int flag) { - u32 delta, safe_delta; + u32 delta, safe_delta, d_ceb; u32 corrected_ace; + u32 old_ceb = tp->delivered_ecn_bytes[INET_ECN_CE - 1]; + bool opt_deltas_valid; /* Reordered ACK? (...or uncertain due to lack of data to send and ts) */ if (!(flag & (FLAG_FORWARD_PROGRESS|FLAG_TS_PROGRESS))) return 0; - tcp_accecn_process_option(tp, skb, delivered_bytes); + opt_deltas_valid = tcp_accecn_process_option(tp, skb, delivered_bytes); if (!(flag & FLAG_SLOWPATH)) { /* AccECN counter might overflow on large ACKs */ @@ -545,6 +547,16 @@ static u32 tcp_accecn_process(struct tcp_sock *tp, const struct sk_buff *skb, safe_delta = delivered_pkts - ((delivered_pkts - delta) & TCP_ACCECN_CEP_ACE_MASK); + if (opt_deltas_valid) { + d_ceb = tp->delivered_ecn_bytes[INET_ECN_CE - 1] - old_ceb; + if (!d_ceb) + return delta; + if (d_ceb > delta * tp->mss_cache) + return safe_delta; + if (d_ceb < safe_delta * tp->mss_cache >> TCP_ACCECN_SAFETY_SHIFT) + return delta; + } + return safe_delta; } -- 2.20.1