From patchwork Thu May 17 17:47:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 915629 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b="RMusT/PE"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40mzKg2Q8dz9s3M for ; Fri, 18 May 2018 03:47:51 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752056AbeEQRrs (ORCPT ); Thu, 17 May 2018 13:47:48 -0400 Received: from mail-pl0-f67.google.com ([209.85.160.67]:39545 "EHLO mail-pl0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751984AbeEQRrq (ORCPT ); Thu, 17 May 2018 13:47:46 -0400 Received: by mail-pl0-f67.google.com with SMTP id c19-v6so2974368pls.6 for ; Thu, 17 May 2018 10:47:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=U+fu2lBXEB1fn6tT5YSqJto3yTlH5YM2iiPxzdBEMtk=; b=RMusT/PEUYsLc1jqmb9OBWRq6C62a+11xE0PfdHmac8NcFSee45ZRrQhp57t+9ljXN xGZo7GUyYmqJ2tKnCcwC4IEt6x7VVlN+hf9ftJySLNKxMkMGPrgeCGhX0GYugmEGSLE9 CyHfLpMjhXNLDEY3x+jSAhibdi6Mjkg3fKrFnEXohmbgno+wbdJPqb5BCSyfqa4+el93 LNKGp+TqD/nQX7PFMtbFShTcSLBjZ5fPsGwVvSJaXonEoXmNHMbwCsbCon2CjaFyQPyF 7WtrDvAin4ROh9x/4N7Jug0J9UBsIvYS66feKq3Ga3c8CLd47dnR3PmvOoD4pyzCQdEN QxjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=U+fu2lBXEB1fn6tT5YSqJto3yTlH5YM2iiPxzdBEMtk=; b=IEM5ter38C71NgwKQV8tpwaFbNfuLwcROi3W5e1Xx6POxb1FYQz5kKLTy5hTBj40lA ZtYsEGR49aUrngWz3yTmYjjTl4kXhTOq355k1uqowf0DC9prPp1VxTHWPahF7mOBGw6J TZwLlCZb/BIiG6b4p918JAN2+ZcabLbJuGveC2/2Y8FDKH9EZ9a7+/A4WlwK3xFGNwBV 5AR6T5ovJmCnanSLEMSbUzJ8mDTEFjiAd0s7iivq4cZZWnQK/JdNfIbgNWvolwrR3zb3 PHK/uN/aeqyp7rrBKOral6ahFqMt/mMmLJxycWYMsWSMJfNPryycgikYMUhd04F8H9As lZ6Q== X-Gm-Message-State: ALKqPweijgqWll6G9lQo6aQW4WcRZGm1Y8W1grR0mHucbXla5Z1WlGEH kfhN699tpMb+fQZrF2m9ZsTsl3X0e2E= X-Google-Smtp-Source: AB8JxZp2hTkBw3PiTObRPIw16Yu5mmokebVj/DIxLZt841AugCXXZM3f1b+1oOybbYJd4ieWKPY2NA== X-Received: by 2002:a17:902:8a95:: with SMTP id p21-v6mr6135267plo.325.1526579265791; Thu, 17 May 2018 10:47:45 -0700 (PDT) Received: from localhost ([2620:15c:2c4:201:f5a:7eca:440a:3ead]) by smtp.gmail.com with ESMTPSA id b28-v6sm13818954pfl.168.2018.05.17.10.47.44 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 17 May 2018 10:47:44 -0700 (PDT) From: Eric Dumazet To: "David S . Miller" Cc: netdev , =?utf-8?q?Toke_H=C3=B8iland-J=C3=B8rg?= =?utf-8?q?ensen?= , Neal Cardwell , Yuchung Cheng , Soheil Hassas Yeganeh , Eric Dumazet , Eric Dumazet Subject: [PATCH v2 net-next 1/6] tcp: use __sock_put() instead of sock_put() in tcp_clear_xmit_timers() Date: Thu, 17 May 2018 10:47:34 -0700 Message-Id: <20180517174739.192489-2-edumazet@google.com> X-Mailer: git-send-email 2.17.0.441.gb46fe60e1d-goog In-Reply-To: <20180517174739.192489-1-edumazet@google.com> References: <20180517174739.192489-1-edumazet@google.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Socket can not disappear under us. Signed-off-by: Eric Dumazet Acked-by: Neal Cardwell --- include/net/tcp.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/net/tcp.h b/include/net/tcp.h index a08eab58ef7001b3e141e3722fd8a3875e5c5d7d..6ffc8bd894876ad23407f5ec4994350139af85e7 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -558,7 +558,7 @@ void tcp_init_xmit_timers(struct sock *); static inline void tcp_clear_xmit_timers(struct sock *sk) { if (hrtimer_try_to_cancel(&tcp_sk(sk)->pacing_timer) == 1) - sock_put(sk); + __sock_put(sk); inet_csk_clear_xmit_timers(sk); } From patchwork Thu May 17 17:47:35 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 915630 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b="c99BlgBI"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40mzKk2nlZz9s3M for ; Fri, 18 May 2018 03:47:54 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752065AbeEQRrw (ORCPT ); Thu, 17 May 2018 13:47:52 -0400 Received: from mail-pf0-f194.google.com ([209.85.192.194]:46628 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751619AbeEQRrt (ORCPT ); Thu, 17 May 2018 13:47:49 -0400 Received: by mail-pf0-f194.google.com with SMTP id p12-v6so2435756pff.13 for ; Thu, 17 May 2018 10:47:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=M9JBi+JQxMzZlMovqshL5S+XLf/RDq5QM1zN2Bs6nx0=; b=c99BlgBIgtcW8PcW/lysLUnaL6r/x4nqoJNayyQj8ke9oYvkvVLRDge3rpdWdBbqdm iwKqFtwtfrHdTCr2Vpg4uTT6KwvooYZdIUcUFFwxABZH/ZawyytFW+d8RPGctFUk+hwL LGvz+T6NtCJciVdNSmsFdAfobWaycI5Vl2xfidUA1DZlK0HjHw8GtMCKt9RtSN6dyIb6 K9Yj8hnHKA3lYTOC9xc1XPV3BqSTfNL/WIKTkBQ0RdEMoOwZOscEhHkVspGmlCbfKEaZ Xol1XF5Hi0hBl6yC3UPdtcJYicWbPcXAduGnNM7ElOuF0iRJTRT9LKXfzMCZkqIGe1Q8 Lzqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=M9JBi+JQxMzZlMovqshL5S+XLf/RDq5QM1zN2Bs6nx0=; b=cyADHJIYsWIVVVxtSUjXkVerB6Iju2SEbOqKDbvOsVnXblDCOUjHdg00y8EqNKDTGN HwojleXu/TY4hjZpmQdtP8ePl7v2CILAYTLOafYQ6TdVKBtrwv6ss6IOzsH2DoJucByD J3S6oSGSuet6wqUNVlJUWe33sbjXV5kdl0HzEL9g+QmW7NXj6F2h2VrX69HyDrjt2vue Nc3A9EPj2pRZIlFXzyoduc0sU5CEy3cvKkhY9PPChG4V3QI/7LLGjo08BacKFJkVEklA vMAGQXFAXp2+L1UmmHD+1wFkm1L7Z1UplIn//TkcPpnpQ2CNZDpjqpbCV2ESOg/osVID YPfQ== X-Gm-Message-State: ALKqPwcpPcwiWLiZEMTP7FxWzzM4VkO2Lc0tLHFiW+RR1sAcF1T1mAl6 lsAcJrRldsFiO6MqseF67iRVRLrs+XE= X-Google-Smtp-Source: AB8JxZqklVbr9n9lvTidUJHjLHFoC0GPFHLBF8yZA+3kMT8prAOtSR0xRf3bm1uHaMxNjzEQvwI6vA== X-Received: by 2002:a63:8649:: with SMTP id x70-v6mr1557823pgd.226.1526579268493; Thu, 17 May 2018 10:47:48 -0700 (PDT) Received: from localhost ([2620:15c:2c4:201:f5a:7eca:440a:3ead]) by smtp.gmail.com with ESMTPSA id y7-v6sm10826558pfy.52.2018.05.17.10.47.46 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 17 May 2018 10:47:47 -0700 (PDT) From: Eric Dumazet To: "David S . Miller" Cc: netdev , =?utf-8?q?Toke_H=C3=B8iland-J=C3=B8rg?= =?utf-8?q?ensen?= , Neal Cardwell , Yuchung Cheng , Soheil Hassas Yeganeh , Eric Dumazet , Eric Dumazet Subject: [PATCH v2 net-next 2/6] tcp: do not force quickack when receiving out-of-order packets Date: Thu, 17 May 2018 10:47:35 -0700 Message-Id: <20180517174739.192489-3-edumazet@google.com> X-Mailer: git-send-email 2.17.0.441.gb46fe60e1d-goog In-Reply-To: <20180517174739.192489-1-edumazet@google.com> References: <20180517174739.192489-1-edumazet@google.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org As explained in commit 9f9843a751d0 ("tcp: properly handle stretch acks in slow start"), TCP stacks have to consider how many packets are acknowledged in one single ACK, because of GRO, but also because of ACK compression or losses. We plan to add SACK compression in the following patch, we must therefore not call tcp_enter_quickack_mode() Signed-off-by: Eric Dumazet Acked-by: Neal Cardwell Acked-by: Soheil Hassas Yeganeh --- net/ipv4/tcp_input.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index b188e0d75edd9e5e1c9f0355818caa932fef7416..99fcab7e6570c8b8758ea4b15cdd26df29fb4fd6 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -4708,8 +4708,6 @@ static void tcp_data_queue(struct sock *sk, struct sk_buff *skb) if (!before(TCP_SKB_CB(skb)->seq, tp->rcv_nxt + tcp_receive_window(tp))) goto out_of_window; - tcp_enter_quickack_mode(sk); - if (before(TCP_SKB_CB(skb)->seq, tp->rcv_nxt)) { /* Partial packet, seq < rcv_next < end_seq */ SOCK_DEBUG(sk, "partial packet: rcv_next %X seq %X - %X\n", From patchwork Thu May 17 17:47:36 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 915633 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b="JVDQDxiI"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40mzL12f8rz9s3M for ; Fri, 18 May 2018 03:48:09 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752176AbeEQRsH (ORCPT ); Thu, 17 May 2018 13:48:07 -0400 Received: from mail-pf0-f193.google.com ([209.85.192.193]:44923 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751644AbeEQRrw (ORCPT ); Thu, 17 May 2018 13:47:52 -0400 Received: by mail-pf0-f193.google.com with SMTP id q22-v6so2442329pff.11 for ; Thu, 17 May 2018 10:47:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=iRDn72OdTqWbYme9lWNCaM6wpGmPhZWwY8P36IghpuA=; b=JVDQDxiIC9Ezdyzeiqb2IRSM6oQzxfNCoGeqjZL2jgIp30dtH2vRli7uKMJqXvo6qW ORHsgNeYWHE5p2feN8oLo61Gxm211SeHT5xLhJxSV3CKzXQ8LKHAHmwzA2BDGmxij7sx pvzQCWzBO9dM0APETBneJxjk2ip5C4nTQUA0I1ws8EjUy9KL9Uq3Bp46kL6lVWCbEgVs dZoXTE9dfnWBXqWJf7e/HES08+E1vEin1OzEggPUGgKIBd3AZfWXbmLnA7yjcthsUYTV OrHTLQ0W0t4HeIWBKU5XioFm9NJhlEnLR//xRGGTNOhyR5wUNP/kx2AVXdfd9ROxX9xY ottA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=iRDn72OdTqWbYme9lWNCaM6wpGmPhZWwY8P36IghpuA=; b=Frr0jpFWBHxNytFL6viOjkTQy9TajtFOGOtzCuhSP65Uo/+/HSOoaoR/3MCZi8jY3A MKpYc6Db7Y0ZCQkmAbTmvovySizEsHA5nJv47/OmqyFD8pIpDJfeD/bTj2qXCjTOMiEM x90WW/TE/ScXT5xYriu06OJzu2ZHtZc0N9QOWmFlE0xLvt/AzWhlQfGD0EXLK6GFp4JE 5QiMx6pBGYpCOm1r6pt7qy5Ax5uzt6qXJUl/q1RdGMxtlXpxOvg1sZbX31W2wWTpLDr4 s3AXgIj/9Pk8BoJrJInOA56dTQjo+MNCktAgkAF2sRYCeQEvbrR06x3Je4h66n3N1SoN eAmw== X-Gm-Message-State: ALKqPwf6DGy7VTQRrS3aNp3m9cT44E60+tPIXt1E22khOmDxusA97Glg i48dssr321j9MIpXzDUqUXSSnw== X-Google-Smtp-Source: AB8JxZo8nNaYmaUpv1K+nuNxhjQ2nqkNPY5iaq4xehZ+T9ZEhwm7fwAFtexgB8Km2L7vqVnUgWd5ug== X-Received: by 2002:a63:6f89:: with SMTP id k131-v6mr4758356pgc.237.1526579271252; Thu, 17 May 2018 10:47:51 -0700 (PDT) Received: from localhost ([2620:15c:2c4:201:f5a:7eca:440a:3ead]) by smtp.gmail.com with ESMTPSA id a3-v6sm7075972pgw.14.2018.05.17.10.47.49 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 17 May 2018 10:47:49 -0700 (PDT) From: Eric Dumazet To: "David S . Miller" Cc: netdev , =?utf-8?q?Toke_H=C3=B8iland-J=C3=B8rg?= =?utf-8?q?ensen?= , Neal Cardwell , Yuchung Cheng , Soheil Hassas Yeganeh , Eric Dumazet , Eric Dumazet Subject: [PATCH v2 net-next 3/6] tcp: add SACK compression Date: Thu, 17 May 2018 10:47:36 -0700 Message-Id: <20180517174739.192489-4-edumazet@google.com> X-Mailer: git-send-email 2.17.0.441.gb46fe60e1d-goog In-Reply-To: <20180517174739.192489-1-edumazet@google.com> References: <20180517174739.192489-1-edumazet@google.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When TCP receives an out-of-order packet, it immediately sends a SACK packet, generating network load but also forcing the receiver to send 1-MSS pathological packets, increasing its RTX queue length/depth, and thus processing time. Wifi networks suffer from this aggressive behavior, but generally speaking, all these SACK packets add fuel to the fire when networks are under congestion. This patch adds a high resolution timer and tp->compressed_ack counter. Instead of sending a SACK, we program this timer with a small delay, based on SRTT and capped to 1 ms : delay = min ( 5 % of SRTT, 1 ms) If subsequent SACKs need to be sent while the timer has not yet expired, we simply increment tp->compressed_ack. When timer expires, a SACK is sent with the latest information. Whenever an ACK is sent (if data is sent, or if in-order data is received) timer is canceled. Note that tcp_sack_new_ofo_skb() is able to force a SACK to be sent if the sack blocks need to be shuffled, even if the timer has not expired. A new SNMP counter is added in the following patch. Two other patches add sysctls to allow changing the 1,000,000 and 44 values that this commit hard-coded. Signed-off-by: Eric Dumazet --- include/linux/tcp.h | 2 ++ include/net/tcp.h | 3 +++ net/ipv4/tcp.c | 1 + net/ipv4/tcp_input.c | 31 +++++++++++++++++++++++++------ net/ipv4/tcp_output.c | 7 +++++++ net/ipv4/tcp_timer.c | 25 +++++++++++++++++++++++++ 6 files changed, 63 insertions(+), 6 deletions(-) diff --git a/include/linux/tcp.h b/include/linux/tcp.h index 807776928cb8610fe97121fbc3c600b08d5d2991..72705eaf4b84060a45bf04d5170f389a18010eac 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h @@ -218,6 +218,7 @@ struct tcp_sock { reord:1; /* reordering detected */ } rack; u16 advmss; /* Advertised MSS */ + u8 compressed_ack; u32 chrono_start; /* Start time in jiffies of a TCP chrono */ u32 chrono_stat[3]; /* Time in jiffies for chrono_stat stats */ u8 chrono_type:2, /* current chronograph type */ @@ -297,6 +298,7 @@ struct tcp_sock { u32 sacked_out; /* SACK'd packets */ struct hrtimer pacing_timer; + struct hrtimer compressed_ack_timer; /* from STCP, retrans queue hinting */ struct sk_buff* lost_skb_hint; diff --git a/include/net/tcp.h b/include/net/tcp.h index 6ffc8bd894876ad23407f5ec4994350139af85e7..c8c65ae62955eb12a9a6489fa8e008fd89f89f16 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -560,6 +560,9 @@ static inline void tcp_clear_xmit_timers(struct sock *sk) if (hrtimer_try_to_cancel(&tcp_sk(sk)->pacing_timer) == 1) __sock_put(sk); + if (hrtimer_try_to_cancel(&tcp_sk(sk)->compressed_ack_timer) == 1) + __sock_put(sk); + inet_csk_clear_xmit_timers(sk); } diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 62b776f9003798eaf06992a4eb0914d17646aa61..0a2ea0bbf867271db05aedd7d48b193677664321 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -2595,6 +2595,7 @@ int tcp_disconnect(struct sock *sk, int flags) dst_release(sk->sk_rx_dst); sk->sk_rx_dst = NULL; tcp_saved_syn_free(tp); + tp->compressed_ack = 0; /* Clean up fastopen related fields */ tcp_free_fastopen_req(tp); diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 99fcab7e6570c8b8758ea4b15cdd26df29fb4fd6..2e03c1b4d327558fa4187b9dd53432df2e7d307f 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -4242,6 +4242,8 @@ static void tcp_sack_new_ofo_skb(struct sock *sk, u32 seq, u32 end_seq) * If the sack array is full, forget about the last one. */ if (this_sack >= TCP_NUM_SACKS) { + if (tp->compressed_ack) + tcp_send_ack(sk); this_sack--; tp->rx_opt.num_sacks--; sp--; @@ -5074,6 +5076,7 @@ static inline void tcp_data_snd_check(struct sock *sk) static void __tcp_ack_snd_check(struct sock *sk, int ofo_possible) { struct tcp_sock *tp = tcp_sk(sk); + unsigned long delay; /* More than one full frame received... */ if (((tp->rcv_nxt - tp->rcv_wup) > inet_csk(sk)->icsk_ack.rcv_mss && @@ -5085,15 +5088,31 @@ static void __tcp_ack_snd_check(struct sock *sk, int ofo_possible) (tp->rcv_nxt - tp->copied_seq < sk->sk_rcvlowat || __tcp_select_window(sk) >= tp->rcv_wnd)) || /* We ACK each frame or... */ - tcp_in_quickack_mode(sk) || - /* We have out of order data. */ - (ofo_possible && !RB_EMPTY_ROOT(&tp->out_of_order_queue))) { - /* Then ack it now */ + tcp_in_quickack_mode(sk)) { +send_now: tcp_send_ack(sk); - } else { - /* Else, send delayed ack. */ + return; + } + + if (!ofo_possible || RB_EMPTY_ROOT(&tp->out_of_order_queue)) { tcp_send_delayed_ack(sk); + return; } + + if (!tcp_is_sack(tp) || tp->compressed_ack >= 44) + goto send_now; + tp->compressed_ack++; + + if (hrtimer_is_queued(&tp->compressed_ack_timer)) + return; + + /* compress ack timer : 5 % of srtt, but no more than 1 ms */ + + delay = min_t(unsigned long, NSEC_PER_MSEC, + tp->rcv_rtt_est.rtt_us * (NSEC_PER_USEC >> 3)/20); + sock_hold(sk); + hrtimer_start(&tp->compressed_ack_timer, ns_to_ktime(delay), + HRTIMER_MODE_REL_PINNED_SOFT); } static inline void tcp_ack_snd_check(struct sock *sk) diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 0d8f950a9006598c70dbf51e281a3fe32dfaa234..7ee98aad82b758674ca7f3e90bd3fc165e8fcd45 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -162,6 +162,13 @@ static void tcp_event_data_sent(struct tcp_sock *tp, /* Account for an ACK we sent. */ static inline void tcp_event_ack_sent(struct sock *sk, unsigned int pkts) { + struct tcp_sock *tp = tcp_sk(sk); + + if (unlikely(tp->compressed_ack)) { + tp->compressed_ack = 0; + if (hrtimer_try_to_cancel(&tp->compressed_ack_timer) == 1) + __sock_put(sk); + } tcp_dec_quickack_mode(sk, pkts); inet_csk_clear_xmit_timer(sk, ICSK_TIME_DACK); } diff --git a/net/ipv4/tcp_timer.c b/net/ipv4/tcp_timer.c index 92bdf64fffae3a5be291ca419eb21276b4c8cbae..3b3611729928f77934e0298bb248e55c7a7c5def 100644 --- a/net/ipv4/tcp_timer.c +++ b/net/ipv4/tcp_timer.c @@ -708,6 +708,27 @@ static void tcp_keepalive_timer (struct timer_list *t) sock_put(sk); } +static enum hrtimer_restart tcp_compressed_ack_kick(struct hrtimer *timer) +{ + struct tcp_sock *tp = container_of(timer, struct tcp_sock, compressed_ack_timer); + struct sock *sk = (struct sock *)tp; + + bh_lock_sock(sk); + if (!sock_owned_by_user(sk)) { + if (tp->compressed_ack) + tcp_send_ack(sk); + } else { + if (!test_and_set_bit(TCP_DELACK_TIMER_DEFERRED, + &sk->sk_tsq_flags)) + sock_hold(sk); + } + bh_unlock_sock(sk); + + sock_put(sk); + + return HRTIMER_NORESTART; +} + void tcp_init_xmit_timers(struct sock *sk) { inet_csk_init_xmit_timers(sk, &tcp_write_timer, &tcp_delack_timer, @@ -715,4 +736,8 @@ void tcp_init_xmit_timers(struct sock *sk) hrtimer_init(&tcp_sk(sk)->pacing_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS_PINNED_SOFT); tcp_sk(sk)->pacing_timer.function = tcp_pace_kick; + + hrtimer_init(&tcp_sk(sk)->compressed_ack_timer, CLOCK_MONOTONIC, + HRTIMER_MODE_REL_PINNED_SOFT); + tcp_sk(sk)->compressed_ack_timer.function = tcp_compressed_ack_kick; } From patchwork Thu May 17 17:47:37 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 915631 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b="oFLsxnQK"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40mzKq2f7Yz9s3M for ; Fri, 18 May 2018 03:47:59 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752096AbeEQRr4 (ORCPT ); Thu, 17 May 2018 13:47:56 -0400 Received: from mail-pf0-f175.google.com ([209.85.192.175]:45859 "EHLO mail-pf0-f175.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751930AbeEQRrz (ORCPT ); Thu, 17 May 2018 13:47:55 -0400 Received: by mail-pf0-f175.google.com with SMTP id c10-v6so2437388pfi.12 for ; Thu, 17 May 2018 10:47:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=rZ/rsmHMCZ/Q1UNdaA/1RatYKqykoTaoAwUa2WtXSuE=; b=oFLsxnQKqS6N+oWQmqnRjbll0JyDeOt8iMijN+XqOCkzP830X29WPm6MrZ2QFvq1tI QwX1ADXhecpnj0p5yyRv0Eul/nvndkncO83DG/mcMZMsieHMn4Lv+ZFnInhl9qRRhpua 1wpKOiZKAnznF/jl3t81se8VOjKzrX2SIvMseLm10BDoB3QeyLInLpurEgt4AdSAatfa vQSs6hOElQ+cAm/5MG5gbLWP9o2RCtqla7+j0rGZCnLNYkoyDE51nfNUg++K9PiPTPWH irBrQ6Mz+hc8xP+RBDzgcB6tPBJbG8cuOH/9rccweYcIz3TJ3PokhmxoeuFHIcPe4SGg v9Hw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=rZ/rsmHMCZ/Q1UNdaA/1RatYKqykoTaoAwUa2WtXSuE=; b=OTofsxSMnLK/F36Z0mPPULMizmrzDdNtbhjHbPC/mzDGcAlCBFhOrMZOQeqTwm+Sb5 5WVc/WzgfCzbcXSo6XiHCcQ6FzP2JkOL/2qUdGYWZI4pfLZknI91KiK71BGTiNvwY+9F n5Ed6GgLnq1vBGYlq7VWTjVpnWY0rjFFC6jb82a4zH+HhdAqOZeuJirg1Bm0Jvh90AYT hglvp21zDMVe3XrxZLBhQfyLDRsR0U6XWd/NnyCTdI6M2ntDABH/cc2DI1L4SyGIhedn GS6wYlsAVtG4N4AUfiFE7AuE1xsi9oe2Zxl6cIdmNxSlL43GGKpa0eR1eHMaHut6JqLO X1QA== X-Gm-Message-State: ALKqPwd1yaSRWSiy1eBKWN0fAzPdthF2qFZT62/UFGZrqN8j0lfUh2u2 YVUaval+Hcy4T9ZkrN+oS3XwzQ== X-Google-Smtp-Source: AB8JxZoMayFPIn1DQIH2J0memeWxLpmhvCLMo2QAWhSzJFFq1ir7eP9OavbZWcd67zWy+ql3XeJvkA== X-Received: by 2002:a63:7043:: with SMTP id a3-v6mr4756596pgn.206.1526579273907; Thu, 17 May 2018 10:47:53 -0700 (PDT) Received: from localhost ([2620:15c:2c4:201:f5a:7eca:440a:3ead]) by smtp.gmail.com with ESMTPSA id u8-v6sm8591253pgq.7.2018.05.17.10.47.52 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 17 May 2018 10:47:52 -0700 (PDT) From: Eric Dumazet To: "David S . Miller" Cc: netdev , =?utf-8?q?Toke_H=C3=B8iland-J=C3=B8rg?= =?utf-8?q?ensen?= , Neal Cardwell , Yuchung Cheng , Soheil Hassas Yeganeh , Eric Dumazet , Eric Dumazet Subject: [PATCH v2 net-next 4/6] tcp: add TCPAckCompressed SNMP counter Date: Thu, 17 May 2018 10:47:37 -0700 Message-Id: <20180517174739.192489-5-edumazet@google.com> X-Mailer: git-send-email 2.17.0.441.gb46fe60e1d-goog In-Reply-To: <20180517174739.192489-1-edumazet@google.com> References: <20180517174739.192489-1-edumazet@google.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This counter tracks number of ACK packets that the host has not sent, thanks to ACK compression. Sample output : $ nstat -n;sleep 1;nstat|egrep "IpInReceives|IpOutRequests|TcpInSegs|TcpOutSegs|TcpExtTCPAckCompressed" IpInReceives 123250 0.0 IpOutRequests 3684 0.0 TcpInSegs 123251 0.0 TcpOutSegs 3684 0.0 TcpExtTCPAckCompressed 119252 0.0 Signed-off-by: Eric Dumazet Acked-by: Neal Cardwell --- include/uapi/linux/snmp.h | 1 + net/ipv4/proc.c | 1 + net/ipv4/tcp_output.c | 2 ++ 3 files changed, 4 insertions(+) diff --git a/include/uapi/linux/snmp.h b/include/uapi/linux/snmp.h index d02e859301ff499dd72a1c0e1b56bed10a9397a6..750d89120335eb489f698191edb6c5110969fa8c 100644 --- a/include/uapi/linux/snmp.h +++ b/include/uapi/linux/snmp.h @@ -278,6 +278,7 @@ enum LINUX_MIB_TCPMTUPSUCCESS, /* TCPMTUPSuccess */ LINUX_MIB_TCPDELIVERED, /* TCPDelivered */ LINUX_MIB_TCPDELIVEREDCE, /* TCPDeliveredCE */ + LINUX_MIB_TCPACKCOMPRESSED, /* TCPAckCompressed */ __LINUX_MIB_MAX }; diff --git a/net/ipv4/proc.c b/net/ipv4/proc.c index 261b71d0ccc5c17c6032bf67eb8f842006766e64..6c1ff89a60fa0a3485dcc71fafc799e798d5dc11 100644 --- a/net/ipv4/proc.c +++ b/net/ipv4/proc.c @@ -298,6 +298,7 @@ static const struct snmp_mib snmp4_net_list[] = { SNMP_MIB_ITEM("TCPMTUPSuccess", LINUX_MIB_TCPMTUPSUCCESS), SNMP_MIB_ITEM("TCPDelivered", LINUX_MIB_TCPDELIVERED), SNMP_MIB_ITEM("TCPDeliveredCE", LINUX_MIB_TCPDELIVEREDCE), + SNMP_MIB_ITEM("TCPAckCompressed", LINUX_MIB_TCPACKCOMPRESSED), SNMP_MIB_SENTINEL }; diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 7ee98aad82b758674ca7f3e90bd3fc165e8fcd45..437bb7ceba7fd388abac1c12f2920b02be77bad9 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -165,6 +165,8 @@ static inline void tcp_event_ack_sent(struct sock *sk, unsigned int pkts) struct tcp_sock *tp = tcp_sk(sk); if (unlikely(tp->compressed_ack)) { + NET_ADD_STATS(sock_net(sk), LINUX_MIB_TCPACKCOMPRESSED, + tp->compressed_ack); tp->compressed_ack = 0; if (hrtimer_try_to_cancel(&tp->compressed_ack_timer) == 1) __sock_put(sk); From patchwork Thu May 17 17:47:38 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 915632 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b="hqhl683f"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40mzKt3LbPz9s3M for ; Fri, 18 May 2018 03:48:02 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752163AbeEQRr7 (ORCPT ); Thu, 17 May 2018 13:47:59 -0400 Received: from mail-pl0-f65.google.com ([209.85.160.65]:38380 "EHLO mail-pl0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751930AbeEQRr5 (ORCPT ); Thu, 17 May 2018 13:47:57 -0400 Received: by mail-pl0-f65.google.com with SMTP id c11-v6so2977962plr.5 for ; Thu, 17 May 2018 10:47:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Gj5lgE+Xo198fnEdOOpHBd2j/N2irteUZMmMsjX2Kvs=; b=hqhl683fZyY3VZSHq39ZUheVdL5LAIDe3+TVd5kkC/oTUBf22A+E7nMoj7vcNZpGl9 4feKuhOp6pIxq0KYCZMlDe4ILVXAPbNWY0FKs+ST9jCSPp9ImRYO/gpBw8A53fXTK2Z8 XzCtwDO41U0WmtCRCTr7WgmliRkj2WjsDN/4EMOcdo677AdWazWtgY6o+NglIbdPnes4 eyR/TXuaE3bfW4fN8HHSH5uHz+eAIHRElH+oa7AXfjiarI3ojpna8+REEXRGRE12tu+0 NX7v9ifjMtH4nvXHlf8H7FQ6ju1DFqa+7r/YPZ88zD59CUStsEUEW0o9SAh1JZJlV77u kKkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Gj5lgE+Xo198fnEdOOpHBd2j/N2irteUZMmMsjX2Kvs=; b=eIoRxsBgpAL5MIQ9PcIbz84BB6vGJk+Jj1MCsNWuHdBzECjxorrMyH8AEll+nBU9IU K0qGv7n3jJJvgBqXOnkiiFxjefjFasXj1Y/cPEXqwyqs1GWagd4jzBmGxgqHHrIPG+mr VwbtjSfspC8j1aSDO90pWnXn6Syapk++K6p443S0MT7p6fuDcl9YLnFKyLBdetW6PilN gmSzURTmTUIaqLRqmPRR/raPmV4w/mOfv2FuuW4ZhzLWvQOzkmulPRKR9s4lctEbExQ8 PPKuX7xnJynekyapzl4CGv/nqyTy/2ATptJ32WTa7mL7m91TyBAeWpG+qc3sfvd0HXT9 8fUw== X-Gm-Message-State: ALKqPwc8useTzeusWCO0PaSD4LXX0TkXYAjLLxSaaQZLatwoVxguyjnj lqMRnmA/twZ1lyoWHItgNgesSw== X-Google-Smtp-Source: AB8JxZpmPk9IgF3VUtjUg82jNh3mhInKKw3EZIZmAw+Ns2ij/Ds7a0V/LZ/kaEZN1pNuCQJj/PO0QA== X-Received: by 2002:a17:902:b60a:: with SMTP id b10-v6mr5969845pls.221.1526579276472; Thu, 17 May 2018 10:47:56 -0700 (PDT) Received: from localhost ([2620:15c:2c4:201:f5a:7eca:440a:3ead]) by smtp.gmail.com with ESMTPSA id u70-v6sm13211127pfk.121.2018.05.17.10.47.55 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 17 May 2018 10:47:55 -0700 (PDT) From: Eric Dumazet To: "David S . Miller" Cc: netdev , =?utf-8?q?Toke_H=C3=B8iland-J=C3=B8rg?= =?utf-8?q?ensen?= , Neal Cardwell , Yuchung Cheng , Soheil Hassas Yeganeh , Eric Dumazet , Eric Dumazet Subject: [PATCH v2 net-next 5/6] tcp: add tcp_comp_sack_delay_ns sysctl Date: Thu, 17 May 2018 10:47:38 -0700 Message-Id: <20180517174739.192489-6-edumazet@google.com> X-Mailer: git-send-email 2.17.0.441.gb46fe60e1d-goog In-Reply-To: <20180517174739.192489-1-edumazet@google.com> References: <20180517174739.192489-1-edumazet@google.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This per netns sysctl allows for TCP SACK compression fine-tuning. Its default value is 1,000,000, or 1 ms to meet TSO autosizing period. Signed-off-by: Eric Dumazet --- Documentation/networking/ip-sysctl.txt | 7 +++++++ include/net/netns/ipv4.h | 1 + net/ipv4/sysctl_net_ipv4.c | 7 +++++++ net/ipv4/tcp_input.c | 4 ++-- net/ipv4/tcp_ipv4.c | 1 + 5 files changed, 18 insertions(+), 2 deletions(-) diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt index 59afc9a10b4f42bac6871f9183f2bac78ca87803..a7d44627d6356171891fb3c0ab5783f69b6dcb3d 100644 --- a/Documentation/networking/ip-sysctl.txt +++ b/Documentation/networking/ip-sysctl.txt @@ -523,6 +523,13 @@ tcp_rmem - vector of 3 INTEGERs: min, default, max tcp_sack - BOOLEAN Enable select acknowledgments (SACKS). +tcp_comp_sack_delay_ns - LONG INTEGER + TCP tries to reduce number of SACK sent, using a timer + based on 5% of SRTT, capped by this sysctl, in nano seconds. + The default is 1ms, based on TSO autosizing period. + + Default : 1,000,000 ns (1 ms) + tcp_slow_start_after_idle - BOOLEAN If set, provide RFC2861 behavior and time out the congestion window after an idle period. An idle period is defined at diff --git a/include/net/netns/ipv4.h b/include/net/netns/ipv4.h index 8491bc9c86b1553ab603e4363e8e38ca7ff547e0..927318243cfaa2ddd8eb423c6ba6e66253f771d3 100644 --- a/include/net/netns/ipv4.h +++ b/include/net/netns/ipv4.h @@ -160,6 +160,7 @@ struct netns_ipv4 { int sysctl_tcp_pacing_ca_ratio; int sysctl_tcp_wmem[3]; int sysctl_tcp_rmem[3]; + unsigned long sysctl_tcp_comp_sack_delay_ns; struct inet_timewait_death_row tcp_death_row; int sysctl_max_syn_backlog; int sysctl_tcp_fastopen; diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c index 4b195bac8ac0eefe0a224528ad854338c4f8e6e3..11fbfdc1566eca95f91360522178295318277588 100644 --- a/net/ipv4/sysctl_net_ipv4.c +++ b/net/ipv4/sysctl_net_ipv4.c @@ -1151,6 +1151,13 @@ static struct ctl_table ipv4_net_table[] = { .proc_handler = proc_dointvec_minmax, .extra1 = &one, }, + { + .procname = "tcp_comp_sack_delay_ns", + .data = &init_net.ipv4.sysctl_tcp_comp_sack_delay_ns, + .maxlen = sizeof(unsigned long), + .mode = 0644, + .proc_handler = proc_doulongvec_minmax, + }, { .procname = "udp_rmem_min", .data = &init_net.ipv4.sysctl_udp_rmem_min, diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 2e03c1b4d327558fa4187b9dd53432df2e7d307f..480a647fd5922c1736455e625890da5f85d19ea7 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -5106,9 +5106,9 @@ static void __tcp_ack_snd_check(struct sock *sk, int ofo_possible) if (hrtimer_is_queued(&tp->compressed_ack_timer)) return; - /* compress ack timer : 5 % of srtt, but no more than 1 ms */ + /* 5 % of srtt, but no more than tcp_comp_sack_delay_ns */ - delay = min_t(unsigned long, NSEC_PER_MSEC, + delay = min_t(unsigned long, sock_net(sk)->ipv4.sysctl_tcp_comp_sack_delay_ns, tp->rcv_rtt_est.rtt_us * (NSEC_PER_USEC >> 3)/20); sock_hold(sk); hrtimer_start(&tp->compressed_ack_timer, ns_to_ktime(delay), diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index caf23de88f8a369c2038cecd34ce42c522487e90..a3f4647341db2eb5a63c3e9f1e8b93099aedadab 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c @@ -2572,6 +2572,7 @@ static int __net_init tcp_sk_init(struct net *net) init_net.ipv4.sysctl_tcp_wmem, sizeof(init_net.ipv4.sysctl_tcp_wmem)); } + net->ipv4.sysctl_tcp_comp_sack_delay_ns = NSEC_PER_MSEC; net->ipv4.sysctl_tcp_fastopen = TFO_CLIENT_ENABLE; spin_lock_init(&net->ipv4.tcp_fastopen_ctx_lock); net->ipv4.sysctl_tcp_fastopen_blackhole_timeout = 60 * 60; From patchwork Thu May 17 17:47:39 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 915641 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b="EAklTNwt"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40mzPG1j8vz9s3M for ; Fri, 18 May 2018 03:50:58 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751564AbeEQRuz (ORCPT ); Thu, 17 May 2018 13:50:55 -0400 Received: from mail-pl0-f65.google.com ([209.85.160.65]:33710 "EHLO mail-pl0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750924AbeEQRuy (ORCPT ); Thu, 17 May 2018 13:50:54 -0400 Received: by mail-pl0-f65.google.com with SMTP id n10-v6so2979050plp.0 for ; Thu, 17 May 2018 10:50:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=+y7Iw8QmISyajAFmpSwbIuQSKnCoDGAzuTnWy6GKdQo=; b=EAklTNwth2c0jtYA+ZP1ktXuwB4AiYNAjH0S7w8QbvUKUe2y1Zl855Kd5U5Ck+zy5M MQEn82iXoBerH5Z15Ww8/70yVzlazCsDJKFHk8r7wO/w/A/XB/rBuqfk3X2WEtqWb4sL tW/WHM8JDZlZZvl/PeR55cg0/pZmarmNZ6PIgMoKKwXwgGwok+uOOY879k3x+bUht47e xCy+qAatb+OvpGLCjczBrmHD+EfrI2jJYJIWBIbyq/ChE/rBU03Ab3s4aC2CdJ0n9SNR alWJoQkMb5PZ2A0p0lYA8LLnCbk0tB2ozI68+vk4L9fwWIeY1S+9T9q3o0SLkh7qMv9r PxIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=+y7Iw8QmISyajAFmpSwbIuQSKnCoDGAzuTnWy6GKdQo=; b=Xc5pQOa/H9C6kb2K6JjvdbkdBNW1IJ071+ecACES1mq5DGZ7B2LgYX/N3WJYoNLzeA 9fkcJJPoe2IFCpp2yOTowtUM2e4X4wIOSwEGIdtshFumH998CtYuW4Mz0m9zuARJqxdt G9FU9bF/oup0uvCQE2Eg3kOGMk72EsWV0F6WrEczdYIQI7pBj3LhBGete0ifMLGGB1FH 2tJ1ateiuIlNH5AUtFv30nqCUNfisMDwGFRFtiu0mw2pWQLK7MwOMcCGPa/sIiFfXuef yRO9oaGvA3gj0TqQMusp0qSszzWSVGcIrZ5VqWuE0D4hVFl/l7FBh7CFSUqyxSX/pAea GGAQ== X-Gm-Message-State: ALKqPweU4XRn3IYx/0a4lkcwE29ERNxM4EisatjkhR14N0tHH1Nwr0XM h6eSc9wcgWIeQafu74H2L/9Rpw== X-Google-Smtp-Source: AB8JxZqzkUOt8eiwzs9JuN+hbnJ80YA+Lkqrk2KLWbJIJNsvQGd8yWTsHDXYnqLl6c7wYWhx0Z3ZcA== X-Received: by 2002:a17:902:7402:: with SMTP id g2-v6mr6291938pll.246.1526579453435; Thu, 17 May 2018 10:50:53 -0700 (PDT) Received: from localhost ([2620:15c:2c4:201:f5a:7eca:440a:3ead]) by smtp.gmail.com with ESMTPSA id z13-v6sm14353334pfk.156.2018.05.17.10.50.51 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 17 May 2018 10:50:51 -0700 (PDT) From: Eric Dumazet To: "David S . Miller" Cc: netdev , =?utf-8?q?Toke_H=C3=B8iland-J=C3=B8rg?= =?utf-8?q?ensen?= , Neal Cardwell , Yuchung Cheng , Soheil Hassas Yeganeh , Eric Dumazet , Eric Dumazet Subject: [PATCH v2 net-next 6/6] tcp: add tcp_comp_sack_nr sysctl Date: Thu, 17 May 2018 10:47:39 -0700 Message-Id: <20180517174739.192489-7-edumazet@google.com> X-Mailer: git-send-email 2.17.0.441.gb46fe60e1d-goog In-Reply-To: <20180517174739.192489-1-edumazet@google.com> References: <20180517174739.192489-1-edumazet@google.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This per netns sysctl allows for TCP SACK compression fine-tuning. This limits number of SACK that can be compressed. Using 0 disables SACK compression. Signed-off-by: Eric Dumazet --- Documentation/networking/ip-sysctl.txt | 6 ++++++ include/net/netns/ipv4.h | 1 + net/ipv4/sysctl_net_ipv4.c | 10 ++++++++++ net/ipv4/tcp_input.c | 3 ++- net/ipv4/tcp_ipv4.c | 1 + 5 files changed, 20 insertions(+), 1 deletion(-) diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt index a7d44627d6356171891fb3c0ab5783f69b6dcb3d..e46fe037da48ace9bb03bb61690fb238601c3558 100644 --- a/Documentation/networking/ip-sysctl.txt +++ b/Documentation/networking/ip-sysctl.txt @@ -530,6 +530,12 @@ tcp_comp_sack_delay_ns - LONG INTEGER Default : 1,000,000 ns (1 ms) +tcp_comp_sack_nr - INTEGER + Max numer of SACK that can be compressed. + Using 0 disables SACK compression. + + Detault : 44 + tcp_slow_start_after_idle - BOOLEAN If set, provide RFC2861 behavior and time out the congestion window after an idle period. An idle period is defined at diff --git a/include/net/netns/ipv4.h b/include/net/netns/ipv4.h index 927318243cfaa2ddd8eb423c6ba6e66253f771d3..661348f23ea5a3a9320b2cafcd17e23960214771 100644 --- a/include/net/netns/ipv4.h +++ b/include/net/netns/ipv4.h @@ -160,6 +160,7 @@ struct netns_ipv4 { int sysctl_tcp_pacing_ca_ratio; int sysctl_tcp_wmem[3]; int sysctl_tcp_rmem[3]; + int sysctl_tcp_comp_sack_nr; unsigned long sysctl_tcp_comp_sack_delay_ns; struct inet_timewait_death_row tcp_death_row; int sysctl_max_syn_backlog; diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c index 11fbfdc1566eca95f91360522178295318277588..d2eed3ddcb0a1ad9778d96d46c685f6c60b93d8d 100644 --- a/net/ipv4/sysctl_net_ipv4.c +++ b/net/ipv4/sysctl_net_ipv4.c @@ -46,6 +46,7 @@ static int tcp_syn_retries_min = 1; static int tcp_syn_retries_max = MAX_TCP_SYNCNT; static int ip_ping_group_range_min[] = { 0, 0 }; static int ip_ping_group_range_max[] = { GID_T_MAX, GID_T_MAX }; +static int comp_sack_nr_max = 255; /* obsolete */ static int sysctl_tcp_low_latency __read_mostly; @@ -1158,6 +1159,15 @@ static struct ctl_table ipv4_net_table[] = { .mode = 0644, .proc_handler = proc_doulongvec_minmax, }, + { + .procname = "tcp_comp_sack_nr", + .data = &init_net.ipv4.sysctl_tcp_comp_sack_nr, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = proc_dointvec_minmax, + .extra1 = &zero, + .extra2 = &comp_sack_nr_max, + }, { .procname = "udp_rmem_min", .data = &init_net.ipv4.sysctl_udp_rmem_min, diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 480a647fd5922c1736455e625890da5f85d19ea7..f763637e83c7412da73cea77b0eae4076e90ca6a 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -5099,7 +5099,8 @@ static void __tcp_ack_snd_check(struct sock *sk, int ofo_possible) return; } - if (!tcp_is_sack(tp) || tp->compressed_ack >= 44) + if (!tcp_is_sack(tp) || + tp->compressed_ack >= sock_net(sk)->ipv4.sysctl_tcp_comp_sack_nr) goto send_now; tp->compressed_ack++; diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index a3f4647341db2eb5a63c3e9f1e8b93099aedadab..adbdb503db0c983ef4185f83b138aa51bafd15bf 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c @@ -2573,6 +2573,7 @@ static int __net_init tcp_sk_init(struct net *net) sizeof(init_net.ipv4.sysctl_tcp_wmem)); } net->ipv4.sysctl_tcp_comp_sack_delay_ns = NSEC_PER_MSEC; + net->ipv4.sysctl_tcp_comp_sack_nr = 44; net->ipv4.sysctl_tcp_fastopen = TFO_CLIENT_ENABLE; spin_lock_init(&net->ipv4.tcp_fastopen_ctx_lock); net->ipv4.sysctl_tcp_fastopen_blackhole_timeout = 60 * 60;