From patchwork Thu Apr 14 05:05:40 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 610370 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3qlpXk5V7fz9t41 for ; Thu, 14 Apr 2016 15:05:58 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b=Z5/jJAwM; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751562AbcDNFFv (ORCPT ); Thu, 14 Apr 2016 01:05:51 -0400 Received: from mail-pf0-f170.google.com ([209.85.192.170]:33836 "EHLO mail-pf0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751321AbcDNFFu (ORCPT ); Thu, 14 Apr 2016 01:05:50 -0400 Received: by mail-pf0-f170.google.com with SMTP id c20so42297328pfc.1 for ; Wed, 13 Apr 2016 22:05:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Kq25ITmOyI+ekZvGUmwVFqPVSJRpJ5ksMvWX/crMHf4=; b=Z5/jJAwM10M25OptzJx3Jj8QlHAx0QXSme/f2OX/4llsPdpgKBHuP9uOkp9l+yXnRb 6YXiDKlOqw8+dAbnqa73YyYGjVOh0sC8fPtV739WpoI48vKbX91M92cf6x7fIb6muAAs 2YiUMES8y9FpE2S1SbbU923I87wz+jUuQaUCcmKJT6O6DbbSj/ogxT98N+nNdtIMwfYt ERpGIVJdOyIXyzqg2nf6yRubVyWigLFdltcO5Jns04ZFIGdixvhe+RBgstHb6YKgeCzZ x0WQJXKDP8GEQlpAMiDq0IdR2qu+R4kt3n3NIRm1AA1t++6+kgA3sKQH3W64aYC3fplL YJPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Kq25ITmOyI+ekZvGUmwVFqPVSJRpJ5ksMvWX/crMHf4=; b=LSZkGMiVll8CCb7wjWeKJ4tPVyllQWUQDFi8AJzMcMjEzsFLcnBaudY5ziXhHfZ3g4 Ou6RkCzASWBqYYHsr6ZlvxtdoR1lJfevcoHJ7/50+GINDqXn5yv+m3wC+jcFLPHLzz/u XlmOpPtSl1fNp8fx1eGuLkcwG5wBOafRPvP02Vok0DUANFj/M7Q8hKcGFhrMgHZji3js AdiySvZNBQy+nSOVvkQYwsbh+CblvEiv15yM8jkXp8Pdgj8ELTSI9VNqrx3ZahDvLszb a+rUx3+x/CNGOJM/iNn89uHsl+gDGbgqs8uWGiGojkv/7m+WA2iQL8VbW7Tk0OQPJXT0 U6hQ== X-Gm-Message-State: AOPr4FVkbyBnDSWVqHLSnpSmyaYAtJl6Fi+/dy+BKT1WHZOqi+3B2+vdrPNmRb88To4lG+QB X-Received: by 10.98.80.70 with SMTP id e67mr18562088pfb.136.1460610349118; Wed, 13 Apr 2016 22:05:49 -0700 (PDT) Received: from localhost ([2620:0:1000:3002:acae:9b13:70dc:ed97]) by smtp.gmail.com with ESMTPSA id 27sm54656086pfo.58.2016.04.13.22.05.48 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Wed, 13 Apr 2016 22:05:48 -0700 (PDT) From: Eric Dumazet To: "David S . Miller" Cc: netdev , Eric Dumazet , Eric Dumazet Subject: [PATCH net-next 2/2] tcp: remove false sharing in tcp_rcv_state_process() Date: Wed, 13 Apr 2016 22:05:40 -0700 Message-Id: <1460610340-22163-3-git-send-email-edumazet@google.com> X-Mailer: git-send-email 2.8.0.rc3.226.g39d4020 In-Reply-To: <1460610340-22163-1-git-send-email-edumazet@google.com> References: <1460610340-22163-1-git-send-email-edumazet@google.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Last known hot point during SYNFLOOD attack is the clearing of rx_opt.saw_tstamp in tcp_rcv_state_process() It is not needed for a listener, so we move it where it matters. Performance while a SYNFLOOD hits a single listener socket went from 5 Mpps to 6 Mpps on my test server (24 cores, 8 NIC RX queues) Signed-off-by: Eric Dumazet --- net/ipv4/tcp_input.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 7ea7034af83f..90e0d9256b74 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -5796,8 +5796,6 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb) int queued = 0; bool acceptable; - tp->rx_opt.saw_tstamp = 0; - switch (sk->sk_state) { case TCP_CLOSE: goto discard; @@ -5838,6 +5836,7 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb) goto discard; case TCP_SYN_SENT: + tp->rx_opt.saw_tstamp = 0; queued = tcp_rcv_synsent_state_process(sk, skb, th); if (queued >= 0) return queued; @@ -5849,6 +5848,7 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb) return 0; } + tp->rx_opt.saw_tstamp = 0; req = tp->fastopen_rsk; if (req) { WARN_ON_ONCE(sk->sk_state != TCP_SYN_RECV &&