Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

tcp: tcp_sendmsg() page recycling

If our TCP_PAGE(sk) is not shared (page_count() == 1), we can set page
offset to 0.

This permits better filling of the pages on small to medium tcp writes.

"tbench 16" results on my dev server (2x4x2 machine) :

Before : 3072 MB/s
After : 3146 MB/s (2.4 % gain)

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Eric Dumazet and committed by
David S. Miller
761965ea 117632e6

+6 -1
+6 -1
net/ipv4/tcp.c
··· 1009 1009 int merge = 0; 1010 1010 int i = skb_shinfo(skb)->nr_frags; 1011 1011 struct page *page = TCP_PAGE(sk); 1012 - int off = TCP_OFF(sk); 1012 + int off; 1013 + 1014 + if (page && page_count(page) == 1) 1015 + TCP_OFF(sk) = 0; 1016 + 1017 + off = TCP_OFF(sk); 1013 1018 1014 1019 if (skb_can_coalesce(skb, i, page, off) && 1015 1020 off != PAGE_SIZE) {