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;