From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Dumazet Subject: [PATCH v4 net-next 0/3] tcp: better TCP_SKB_CB layout Date: Sat, 27 Sep 2014 09:50:54 -0700 Message-ID: <1411836657-9542-1-git-send-email-edumazet@google.com> Cc: netdev@vger.kernel.org, Yuchung Cheng , Neal Cardwell , Christoph Paasch , Eric Dumazet To: "David S. Miller" Return-path: Received: from mail-yh0-f73.google.com ([209.85.213.73]:45166 "EHLO mail-yh0-f73.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752809AbaI0QvE (ORCPT ); Sat, 27 Sep 2014 12:51:04 -0400 Received: by mail-yh0-f73.google.com with SMTP id b6so535795yha.0 for ; Sat, 27 Sep 2014 09:51:03 -0700 (PDT) Sender: netdev-owner@vger.kernel.org List-ID: TCP had the assumption that IPCB and IP6CB are first members of skb->cb[] This is fine, except that IPCB/IP6CB are used in TCP for a very short time in input path. What really matters for TCP stack is to get skb->next, TCP_SKB_CB(skb)->seq, and TCP_SKB_CB(skb)->end_seq in the same cache line. skb that are immediately consumed do not care because whole skb->cb[] is hot in cpu cache, while skb that sit in wocket write queue or receive queues do not need TCP_SKB_CB(skb)->header at all. This patch set implements the prereq for IPv4, IPv6, and TCP to make this possible. This makes TCP more efficient. Eric Dumazet (3): ipv4: rename ip_options_echo to __ip_options_echo() ipv6: add a struct inet6_skb_parm param to ipv6_opt_accepted() tcp: better TCP_SKB_CB layout to reduce cache line misses include/net/ip.h | 15 ++++++++++++--- include/net/ipv6.h | 3 ++- include/net/tcp.h | 12 ++++++------ net/dccp/ipv6.c | 2 +- net/ipv4/ip_options.c | 6 ++---- net/ipv4/ip_output.c | 8 +++++--- net/ipv4/tcp_ipv4.c | 29 ++++++++++++++++++----------- net/ipv4/tcp_output.c | 5 +++++ net/ipv6/af_inet6.c | 4 ++-- net/ipv6/syncookies.c | 2 +- net/ipv6/tcp_ipv6.c | 12 ++++++++++-- 11 files changed, 64 insertions(+), 34 deletions(-) -- 2.1.0.rc2.206.gedb03e5