summaryrefslogtreecommitdiffstats
path: root/net/ipv4/fib_semantics.c
diff options
context:
space:
mode:
authorEric Dumazet2014-10-12 00:17:29 +0200
committerDavid S. Miller2014-10-14 21:59:37 +0200
commitad971f616aa98ea2503f1a1064637bfb4ef7b21e (patch)
tree4af81e7b2771ea06bd8bc93ea09eaab63a0dfb50 /net/ipv4/fib_semantics.c
parentMerge branch 'isdn' (diff)
downloadkernel-qcow2-linux-ad971f616aa98ea2503f1a1064637bfb4ef7b21e.tar.gz
kernel-qcow2-linux-ad971f616aa98ea2503f1a1064637bfb4ef7b21e.tar.xz
kernel-qcow2-linux-ad971f616aa98ea2503f1a1064637bfb4ef7b21e.zip
tcp: fix tcp_ack() performance problem
We worked hard to improve tcp_ack() performance, by not accessing skb_shinfo() in fast path (cd7d8498c9a5 tcp: change tcp_skb_pcount() location) We still have one spurious access because of ACK timestamping, added in commit e1c8a607b281 ("net-timestamp: ACK timestamp for bytestreams") By checking if sk_tsflags has SOF_TIMESTAMPING_TX_ACK set, we can avoid two cache line misses for the common case. While we are at it, add two prefetchw() : One in tcp_ack() to bring skb at the head of write queue. One in tcp_clean_rtx_queue() loop to bring following skb, as we will delete skb from the write queue and dirty skb->next->prev. Add a couple of [un]likely() clauses. After this patch, tcp_ack() is no longer the most consuming function in tcp stack. Signed-off-by: Eric Dumazet <edumazet@google.com> Cc: Willem de Bruijn <willemb@google.com> Cc: Neal Cardwell <ncardwell@google.com> Cc: Yuchung Cheng <ycheng@google.com> Cc: Van Jacobson <vanj@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/fib_semantics.c')
0 files changed, 0 insertions, 0 deletions