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;