diff options
author | David S. Miller | 2014-09-28 22:35:49 +0200 |
---|---|---|
committer | David S. Miller | 2014-09-28 22:35:49 +0200 |
commit | dc83d4d8f6c897022c974a00769b7a6efee6aed8 (patch) | |
tree | 0d769e6155899c89ae95c3e31c79ce011eb96a39 /net/ipv4/tcp_output.c | |
parent | net : optimize skb_release_data() (diff) | |
parent | tcp: better TCP_SKB_CB layout to reduce cache line misses (diff) | |
download | kernel-qcow2-linux-dc83d4d8f6c897022c974a00769b7a6efee6aed8.tar.gz kernel-qcow2-linux-dc83d4d8f6c897022c974a00769b7a6efee6aed8.tar.xz kernel-qcow2-linux-dc83d4d8f6c897022c974a00769b7a6efee6aed8.zip |
Merge branch 'tcp_skb_cb'
Eric Dumazet says:
====================
tcp: better TCP_SKB_CB layout
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.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/tcp_output.c')
-rw-r--r-- | net/ipv4/tcp_output.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index f173b1c4f815..a462fb1db896 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -974,6 +974,11 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it, /* Our usage of tstamp should remain private */ skb->tstamp.tv64 = 0; + + /* Cleanup our debris for IP stacks */ + memset(skb->cb, 0, max(sizeof(struct inet_skb_parm), + sizeof(struct inet6_skb_parm))); + err = icsk->icsk_af_ops->queue_xmit(sk, skb, &inet->cork.fl); if (likely(err <= 0)) |