From patchwork Thu May 17 21:47:24 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 915823 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="g48Alq6r"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40n4fN3dHWz9s1w for ; Fri, 18 May 2018 07:47:40 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751977AbeEQVri (ORCPT ); Thu, 17 May 2018 17:47:38 -0400 Received: from mail-pf0-f194.google.com ([209.85.192.194]:39960 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751698AbeEQVrg (ORCPT ); Thu, 17 May 2018 17:47:36 -0400 Received: by mail-pf0-f194.google.com with SMTP id f189-v6so2715910pfa.7 for ; Thu, 17 May 2018 14:47:35 -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=a0SDOKRDG/baXCFSddlGoFiZ9zXormCr6VVxI2xZ/E0=; b=g48Alq6rbS5qMqRFWKmpJzefuZijWPYABetgIdJx+24gNiByniqdZ4L+sXiPgVus8c JDm3yUna0B/fu2auan8EWZjMQiZ5I9t7XFdLHu6T0Wa7Ua2eI37ZbYUC/ToLLtbYK/SR 9wcEhasXCnQpU3DTFEacLFn779Bg4cClJS+J0uRjC5pNhHfIJ+MMcTGQf612OjCv0ROD Z9kZXE2ORciDMDCUYoCovvoqqXVjmZ4x4pYhrtqNiKYTjeXOMQ2CpfmVpg2qfK2Fl307 05EfI2v1h01QFbNhLNzu637pUrA2FCpwoPiLlmInRcizEu6jjkYvjptM2kXYQrWQAWKB SNPA== 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=a0SDOKRDG/baXCFSddlGoFiZ9zXormCr6VVxI2xZ/E0=; b=Wii5s7Yk9iTiRLZtugy73ZLBzlMZtf/wx+mXfv3d8HPzmOyx72lrMdPadW1ZQjdq3Z JJ6dLSgNoCo1IMLSEtmTyT4x1ZFmWfqomhsthUCJfEJMH8LEBga91AkqoBJtTGuJwxf7 ZmiaqBVHzY9PYz0LXqlWCEs+jtc9UYj+PUN0sMcF1TaA8vMgE0TcuXXJUXU4oX6exsuD 2hIAVGSXACtLv5VkpnF+Isa9/GKwxmzSbEIxQdtME8FxT+0IrNC+AuCTootuib/pna2w gWMFQTaBMldEE6VvtJ/WNq7mn86LFUF5mIWnThN6CIuFk2NKg0gKUgDKHyOBGFB8y+n1 H/Qg== X-Gm-Message-State: ALKqPwehChC+ZxEvJVQEfdUca9VoY692UBIS3K0EgguJAGLaS9xpZccn 1HnecGDNuycWFeIkqh4mTVbu32g0vUE= X-Google-Smtp-Source: AB8JxZrZFhUttqO0+qaIKFp/iNS9vMe4QXVbB9DFzJMLYtSQT/FOZc9gsvww26oKDTYZw7Prt7dQ5Q== X-Received: by 2002:a62:4387:: with SMTP id l7-v6mr6588533pfi.55.1526593655131; Thu, 17 May 2018 14:47:35 -0700 (PDT) Received: from localhost ([2620:15c:2c4:201:f5a:7eca:440a:3ead]) by smtp.gmail.com with ESMTPSA id x71-v6sm16356641pfe.47.2018.05.17.14.47.33 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 17 May 2018 14:47:34 -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 v3 net-next 1/6] tcp: use __sock_put() instead of sock_put() in tcp_clear_xmit_timers() Date: Thu, 17 May 2018 14:47:24 -0700 Message-Id: <20180517214729.186094-2-edumazet@google.com> X-Mailer: git-send-email 2.17.0.441.gb46fe60e1d-goog In-Reply-To: <20180517214729.186094-1-edumazet@google.com> References: <20180517214729.186094-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 6deb540297ccaa1f05ce633efe313d1ca2c15dd9..511bd0fde1dc1dd842598d083905b0425bcb05f8 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -559,7 +559,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 21:47:25 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 915824 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="gj0G+Yx8"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40n4fP5w6Kz9s1w for ; Fri, 18 May 2018 07:47:41 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752075AbeEQVrj (ORCPT ); Thu, 17 May 2018 17:47:39 -0400 Received: from mail-pl0-f68.google.com ([209.85.160.68]:36876 "EHLO mail-pl0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751898AbeEQVri (ORCPT ); Thu, 17 May 2018 17:47:38 -0400 Received: by mail-pl0-f68.google.com with SMTP id w19-v6so3313088plq.4 for ; Thu, 17 May 2018 14:47:38 -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=sXmAo7zEomzHAnwErwPEc1E8FzgIS4KAAeLA8IMVaRI=; b=gj0G+Yx8o93D8vMTK5QHgCHQAsVoCspl6FFpdyTjBUxTyBI3pHHg8nV0R+G1TYMNt2 /iPxCeMFA3kY4lOLf/KRO7597Xe1clJRU/+HAkPswVNguOTuNeHX2JWRWKI5BEuu2L9O Qip50pOCxThf8ScbiIQq5+lIDfZ6PPOF7uJo89XoTRph+h8c3cFBUFrIAYgO2N9xWBXF hT4nHfbxUJBHlMaDXzezP1weqcM7ewjWXkvsNO445+9JFn3VdtP9Toe8wOw8ZJ1JOyls 7xb/w0f0vTX6ZF5Irc98iaGpRMoc2BsxoQtu81KkQ/lbEU4V7s0XoHmoWB3DaeM3r5Pe AcMA== 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=sXmAo7zEomzHAnwErwPEc1E8FzgIS4KAAeLA8IMVaRI=; b=ZpMRojGAj+iwkgO3pwAX0EcMJT/8v5VvQ0Ax60X3hVU0jBPmXr3aAM4qmwVQbWQBpO tHW5y8tYlQm/qaaRBh3Jq27af5CkYlsPT0BIzEdQBKQI4+15pFKEKHvxqZHy2U7u6wKi I0aST6sSyjKIj+VA8jtQQco54E4WzuFoeO1UYiFcrXPT4vXYfh5jS/M2j6ztAzHQ/b7d VxaXHrfBMm+Ki0IL8aq+vdXj3ufEwfVuye/dT3JJ1zQlc8HHrG+0Lr8oIejIr6a1560z 0szIcuQpUqpLH7rs5GQNRFwz33v2BZtM6c5+KUqrT2NcgryTAor5gADSGg2Sm+mQVzQD dRCw== X-Gm-Message-State: ALKqPwdTRANPLY+zS77mWygE5ZLk0mqgox615mHLb6BmiXaV3wbc0bXa FhmeFWGL9+pTR4UsAKBOw4JbmJXn/wY= X-Google-Smtp-Source: AB8JxZoAlH5ksVhjE6n6F5OZoYJHqD+uIdLQU1UU5syNLIoxaKfRbvMkxoQJC2jmSRFlyy4AIH95aw== X-Received: by 2002:a17:902:e8:: with SMTP id a95-v6mr6794656pla.274.1526593657572; Thu, 17 May 2018 14:47:37 -0700 (PDT) Received: from localhost ([2620:15c:2c4:201:f5a:7eca:440a:3ead]) by smtp.gmail.com with ESMTPSA id u75-v6sm10947058pfd.92.2018.05.17.14.47.36 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 17 May 2018 14:47:36 -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 v3 net-next 2/6] tcp: do not force quickack when receiving out-of-order packets Date: Thu, 17 May 2018 14:47:25 -0700 Message-Id: <20180517214729.186094-3-edumazet@google.com> X-Mailer: git-send-email 2.17.0.441.gb46fe60e1d-goog In-Reply-To: <20180517214729.186094-1-edumazet@google.com> References: <20180517214729.186094-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 0bf032839548f8dccb7f24a6fb5a7d47ea29208b..f5622b250665178e44460fa2cd4a11af23dfb23d 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -4715,8 +4715,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 21:47:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 915825 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="Bp0x5PBH"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40n4fT1McHz9s1w for ; Fri, 18 May 2018 07:47:45 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752130AbeEQVrn (ORCPT ); Thu, 17 May 2018 17:47:43 -0400 Received: from mail-pf0-f196.google.com ([209.85.192.196]:39965 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751898AbeEQVrl (ORCPT ); Thu, 17 May 2018 17:47:41 -0400 Received: by mail-pf0-f196.google.com with SMTP id f189-v6so2715998pfa.7 for ; Thu, 17 May 2018 14:47:40 -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=1FYzDArY/dOIWwpyAbDO/l6ZVydkjMAXRpVDNbt4qGk=; b=Bp0x5PBH9MwocV0OlFZPS8tu8obUDKjCrrLKmZnfVpulr/vONw2L1uvYhNIByetQTw 5WWG0UFJktrccGteDKZQexhDQMyy18MbYiHOZksiml5y7hXGjSmnNxOfA90kTZFXnb81 GiVAwZDZVQn+ktX5+8gsIQsnJCiW7kD+LZOCu45oDe4GJntA7HBZh5WNreKCm4AV0xVO FmqyFMzB+MFQ7m2xUXBFTcXzJJXOhm6RV8kLo1LQr2Xi28+00JDqfHSSPckrZlN218DT 0KAUFZhQ5Y0R11Nd2XDJlNVB2xGgyPffkZB5/kfHTEJjB2EZlYHiv9BNyJOa8PBJPK3D 7o3w== 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=1FYzDArY/dOIWwpyAbDO/l6ZVydkjMAXRpVDNbt4qGk=; b=By6kLRWZ+FVlfF40DH68QxyA02bBp3NXQndD772u1CVZKtYjVVyKMQrs+r1hgmA3M6 oryTSIYN+tCze60GdewfrtOQiQ72LPqmkcTQ3xXygciseQlAkvxmOR7TrWqfUOKrPxXn xU4Kdrm3wvy6cyw83c6mU4Icgm4riQKbXFIZfhs/m2C9Zg9fy4O+P7Og5XSgUJ5Lwsjg a0KS2uaGhEdvkNgBQOJ817TsKuX8IGirq4ys/o02ec8BdHQAHKFx1VI26OChOWSsA2ro rDmZZvQVvSj/N/REuROlVeYYdQu3VnqXU1sRP8D7+ZC/HeF/1beJ4hZhHLxdcjQ+Xn+F wzeQ== X-Gm-Message-State: ALKqPwew8GuW+fSXVjqbSSuILGn9BReGq6QG2MoVpPU9Y1VQDoKeUS01 SnSdUkbl/WjQtXNdbMIjKpRf5A== X-Google-Smtp-Source: AB8JxZrj5Tah6eV2gyvjzcCMIe7juJ+hJ4Ne464XHnat1fLJIPkBV7uq1lxAnaV9nDBhnjSEXsnPgQ== X-Received: by 2002:a65:4a87:: with SMTP id b7-v6mr5302759pgu.271.1526593660053; Thu, 17 May 2018 14:47:40 -0700 (PDT) Received: from localhost ([2620:15c:2c4:201:f5a:7eca:440a:3ead]) by smtp.gmail.com with ESMTPSA id u10-v6sm7351788pgp.32.2018.05.17.14.47.38 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 17 May 2018 14:47:38 -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 v3 net-next 3/6] tcp: add SACK compression Date: Thu, 17 May 2018 14:47:26 -0700 Message-Id: <20180517214729.186094-4-edumazet@google.com> X-Mailer: git-send-email 2.17.0.441.gb46fe60e1d-goog In-Reply-To: <20180517214729.186094-1-edumazet@google.com> References: <20180517214729.186094-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 RTT and capped to 1 ms : delay = min ( 5 % of RTT, 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 Acked-by: Neal Cardwell Acked-by: Yuchung Cheng Acked-by: Toke Høiland-Jørgensen --- include/linux/tcp.h | 2 ++ include/net/tcp.h | 3 +++ net/ipv4/tcp.c | 1 + net/ipv4/tcp_input.c | 35 +++++++++++++++++++++++++++++------ net/ipv4/tcp_output.c | 7 +++++++ net/ipv4/tcp_timer.c | 25 +++++++++++++++++++++++++ 6 files changed, 67 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 511bd0fde1dc1dd842598d083905b0425bcb05f8..952d842a604a3ed79e1bf87a712db20a461c35a9 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -561,6 +561,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 f5622b250665178e44460fa2cd4a11af23dfb23d..cc2ac5346b92b968593f919192d543384865bcb8 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -4249,6 +4249,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--; @@ -5081,6 +5083,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 rtt, delay; /* More than one full frame received... */ if (((tp->rcv_nxt - tp->rcv_wup) > inet_csk(sk)->icsk_ack.rcv_mss && @@ -5092,15 +5095,35 @@ 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 rtt, but no more than 1 ms */ + + rtt = tp->rcv_rtt_est.rtt_us; + if (tp->srtt_us && tp->srtt_us < rtt) + rtt = tp->srtt_us; + + delay = min_t(unsigned long, NSEC_PER_MSEC, + rtt * (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 21:47:27 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 915826 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="L+F92JvD"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40n4fW4MBFz9s1w for ; Fri, 18 May 2018 07:47:47 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752162AbeEQVrp (ORCPT ); Thu, 17 May 2018 17:47:45 -0400 Received: from mail-pg0-f54.google.com ([74.125.83.54]:33348 "EHLO mail-pg0-f54.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752080AbeEQVrn (ORCPT ); Thu, 17 May 2018 17:47:43 -0400 Received: by mail-pg0-f54.google.com with SMTP id v7-v6so2403262pgs.0 for ; Thu, 17 May 2018 14:47:43 -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=L+F92JvD9dSv6qKnJTm9YW0c4u0MFcubz7TSjtn6bQEeX3XhX6Tb8nQwOMHWm1dTji alk1HRqdJuPg8taZO7/oZHKstkwRtdqalJz1GV17cwP/kBd+LqtDncBCUWnbludla6gC k6dh7fZ81obLfHG838gM4R1IHMivPiST3SWw9B7UDSXzE3bnMDzr7OWUsCqRqJHKI1Ob 4kcHGpcXdqUhxD2N0X5EKEUQsN/etQHpY3pHpw/jz0aZ/9aOxg0X5/GZi8m6IVW13ZFi uOIFwMkkVQMyeYQNEbiI+qP5TFnVkEJLEGusEihvnbmdq0URvrVV58hsxR6I6eg3Nh7C cpkQ== 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=aVXNfv3/DOzbi+PP2IPNFDqqBfKGGLD4csKP0oQ3CAMW4Hf0K27GO8Rd6zoErAfVQx 9vj0Fl2V54UiiqqweFrrBGcGLdMhgIxbxWaHip9l2SDD2r51ZzgDzZuYnqhPt0sHBDNl 5Bskf6XnxZ1oQHC5INst9uQPnPvnnntyJh8ufg0aMDUniDUMn0U2uUPLH8geAUhJEVFb lbW7o4zssi/O8S/uAUJOYmiFan5hcthggGYg47ugqXSq4+0mL5VBA0JpH5b+fpWqIPfp 0N2QTa5WMjz6aIy04L50cKixpEfny9S6ejxCxKHe4dvZuECJkzLeTKco9RXm5pi69tYs kDeA== X-Gm-Message-State: ALKqPwcx+SYYAZcICcjfMSFI9agGzUpmSBje6Tgm7jIJoFTA8TKZbUKB vcBU0MoKVvcAV2fP3RWR/B5LAA== X-Google-Smtp-Source: AB8JxZptjqaDN4oMLelkKgiOmkPms5NVFpTVmWXSGHxS7cYbUeDdac4lLDyseGNKb4tKi3lskgZpow== X-Received: by 2002:a62:883:: with SMTP id 3-v6mr6773623pfi.154.1526593662568; Thu, 17 May 2018 14:47:42 -0700 (PDT) Received: from localhost ([2620:15c:2c4:201:f5a:7eca:440a:3ead]) by smtp.gmail.com with ESMTPSA id n5-v6sm9158442pff.134.2018.05.17.14.47.41 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 17 May 2018 14:47:41 -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 v3 net-next 4/6] tcp: add TCPAckCompressed SNMP counter Date: Thu, 17 May 2018 14:47:27 -0700 Message-Id: <20180517214729.186094-5-edumazet@google.com> X-Mailer: git-send-email 2.17.0.441.gb46fe60e1d-goog In-Reply-To: <20180517214729.186094-1-edumazet@google.com> References: <20180517214729.186094-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 21:47:28 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 915827 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="urg1kSTD"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40n4fd002jz9s1w for ; Fri, 18 May 2018 07:47:52 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752175AbeEQVrt (ORCPT ); Thu, 17 May 2018 17:47:49 -0400 Received: from mail-pg0-f68.google.com ([74.125.83.68]:41050 "EHLO mail-pg0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752080AbeEQVrq (ORCPT ); Thu, 17 May 2018 17:47:46 -0400 Received: by mail-pg0-f68.google.com with SMTP id w4-v6so2377719pgq.8 for ; Thu, 17 May 2018 14:47:45 -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=jD2LhcKeTzTNqkgTlCbfMCcR942/xfdAEEo/YAfKGAQ=; b=urg1kSTD+xDT2wEwZS6OLAVk2F5dHu78RuF3Zto5krbOI+5JdLnoqtx8qwomyqVPIx seHUwcpLnKqV4Fw6oCnXFWG2Xgo6Qrrja/Ki01h6vvoDNmDDhKvXScCLdNjZrfAaLLlw swF5Dv5zjjbdL+81gHeynuDzDvy0Ha9nLIRgXJUjbl5nKDSbyowyMYv5j9zWIuu3luo5 G9xVEF5UgeUZ17f0FcAbz2I212PN3asvDShREPsRepBQTmqcsIveyCjqT5P1EsDFRrKy PwxPT5dZURamoV9A1k/gSVM4fOxstPUALTSICIU+3Go7z3y50I5JE3tREJQttEJiG4Uy XFYA== 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=jD2LhcKeTzTNqkgTlCbfMCcR942/xfdAEEo/YAfKGAQ=; b=UtEN6C9EhCtD3KxvFgpRkSnSkwS7GZUp5I2sdI0xY/cRkw1uOG5PUp4488EsKyHlae 93opcTomMKbdsBjTtEB6MdUz8p4COgfIQW6yJT3dwS/pzbURHAZEUty7MEPEVO9fmeRK OIm5vY/PnmIQjsSVx1xCzEyFJRZWoXyZAmMDW0wOtyVlnuYys53LQwTig6/9M1Q/irpk JGBremeiPXtL3P7cOmTq1kqigsOpJvRUssjrN10D+TNtzEl0JTFvcVEERTVirkJn5y7O KbpyKxJv+pAPdWlYJk4XDefaiC0F503zPQzRjqqPJtvgBZA5aE2y/IqcZR1qhQO7yE10 lwsQ== X-Gm-Message-State: ALKqPwdpUYH3GVB9s2oynSLNKIHqfCfpK8iV47lYTkbHGwkzep2fA/P2 ya+SDWalq/hc245e6TLnwZezxg== X-Google-Smtp-Source: AB8JxZow6NbehJtZ/iwLaCi09Ee6X1znAIIVVC6z0pbQUTcqcXZPK7HDGjc9/byjHjBQCIHFTO3/QQ== X-Received: by 2002:a62:3a94:: with SMTP id v20-v6mr6728069pfj.90.1526593665197; Thu, 17 May 2018 14:47:45 -0700 (PDT) Received: from localhost ([2620:15c:2c4:201:f5a:7eca:440a:3ead]) by smtp.gmail.com with ESMTPSA id t80-v6sm11817165pfg.0.2018.05.17.14.47.43 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 17 May 2018 14: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 v3 net-next 5/6] tcp: add tcp_comp_sack_delay_ns sysctl Date: Thu, 17 May 2018 14:47:28 -0700 Message-Id: <20180517214729.186094-6-edumazet@google.com> X-Mailer: git-send-email 2.17.0.441.gb46fe60e1d-goog In-Reply-To: <20180517214729.186094-1-edumazet@google.com> References: <20180517214729.186094-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 Acked-by: Neal Cardwell --- 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 ea304a23c8d72c92a925d0c107bfd2bcfbbb92ec..7ba952959bca0eee4ecf81fb5837e17790db0fde 100644 --- a/Documentation/networking/ip-sysctl.txt +++ b/Documentation/networking/ip-sysctl.txt @@ -525,6 +525,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 cc2ac5346b92b968593f919192d543384865bcb8..6a1dae38c9558c7bc9dd31e9f16c4e8ea8c78149 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -5113,13 +5113,13 @@ 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 rtt, but no more than 1 ms */ + /* compress ack timer : 5 % of rtt, but no more than tcp_comp_sack_delay_ns */ rtt = tp->rcv_rtt_est.rtt_us; if (tp->srtt_us && tp->srtt_us < rtt) rtt = tp->srtt_us; - delay = min_t(unsigned long, NSEC_PER_MSEC, + delay = min_t(unsigned long, sock_net(sk)->ipv4.sysctl_tcp_comp_sack_delay_ns, rtt * (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 21:47:29 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 915828 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="bY1tk/A5"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40n4ff49Q9z9s1w for ; Fri, 18 May 2018 07:47:54 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752188AbeEQVrw (ORCPT ); Thu, 17 May 2018 17:47:52 -0400 Received: from mail-pl0-f67.google.com ([209.85.160.67]:36716 "EHLO mail-pl0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752176AbeEQVrt (ORCPT ); Thu, 17 May 2018 17:47:49 -0400 Received: by mail-pl0-f67.google.com with SMTP id v24-v6so3316648plo.3 for ; Thu, 17 May 2018 14: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=z/RUFH11S75XWeJIV2aBsWF5eqNvjRfKmaOw3GZ2MV0=; b=bY1tk/A5zJGinuXTNOXoNTQDzohfVDBqhgnaiYzpTf3H3xdptdJefsZIspoi9zVPFH gVjbdrtnwf+9rvn7waKk7I+PDVXZHBNbXZXfItBPyYX1f08A/bojMmS3/lYYqVmoWnxu ar8Dxw5vC5g1MmtHJR6heutR5bky7YlJCmfNGnglYiR9zsKe/bpF32bDKGzheX4kh5vl OyqgwjGYgOCU72HX2eiY4fQ/jijRoh609h+uM+16Xa7dkG8twm5rLHGNEHJ7PGG4IqDp rBnMO1xtpZ5XtBWr0CPlOLmjy/JkyTf+wC0IP8ZL/MAAv7v72HRSV+2cuFUQcfKD7AS5 Jtyw== 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=z/RUFH11S75XWeJIV2aBsWF5eqNvjRfKmaOw3GZ2MV0=; b=UoWw7EdLXkBZEoAVHqq+K+JMo+5It+VN6PWw6jyRG0bx/DrthbaDAMPjXBYYdQLNTB WdkSNwiCHJfAuRCgFV2jpP1OyynJzDtfwBbi9WlxiH5n3mEEcYaY53E7pumLu2tqVN9I HJtIS/tpfPyKM0IDgmAHfWX7ou1f0M/Rl1I9IGhMMyCqgvBYy2fu9EOgmrSq2/MLQpom 9AgYfFDOrK5FlE+Qc8d8ETOQhAlm/q+CIiSKF+VRQucdt4HrT2tfB2kiyCB6dsFMtrNy sIjAvTrVY85QbBkVDa/gkPK+5rFtF3N3VmjsyiuoYxYRmU4po0wcoj3/iLkIp8M/O1rx IPYw== X-Gm-Message-State: ALKqPwd9dFhIIn0Xak/l18U/DSmeNVF0cZC14/SjJ/fdVbz3q9Qlse8V gzbUULe8vqFkJNH22eQ9BvtO5i1ZXy8= X-Google-Smtp-Source: AB8JxZo4dTioF+IKeXeffJ19pE5cd3voqIezIIpuH67WxVxl44uWql9ENY++WVWsbmVUQk1Zr0NSZQ== X-Received: by 2002:a17:902:2f43:: with SMTP id s61-v6mr6620861plb.99.1526593668384; Thu, 17 May 2018 14:47:48 -0700 (PDT) Received: from localhost ([2620:15c:2c4:201:f5a:7eca:440a:3ead]) by smtp.gmail.com with ESMTPSA id o10-v6sm7937474pgc.80.2018.05.17.14.47.46 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 17 May 2018 14: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 v3 net-next 6/6] tcp: add tcp_comp_sack_nr sysctl Date: Thu, 17 May 2018 14:47:29 -0700 Message-Id: <20180517214729.186094-7-edumazet@google.com> X-Mailer: git-send-email 2.17.0.441.gb46fe60e1d-goog In-Reply-To: <20180517214729.186094-1-edumazet@google.com> References: <20180517214729.186094-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 Acked-by: Neal Cardwell --- 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 7ba952959bca0eee4ecf81fb5837e17790db0fde..924bd51327b7a8dff3503d7afccdd54e1eb5c29b 100644 --- a/Documentation/networking/ip-sysctl.txt +++ b/Documentation/networking/ip-sysctl.txt @@ -532,6 +532,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 6a1dae38c9558c7bc9dd31e9f16c4e8ea8c78149..aebb29ab2fdf2ceaa182cd11928f145a886149ff 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -5106,7 +5106,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;