net: attempt high order allocations in sock_alloc_send_pskb()
authorEric Dumazet <edumazet@google.com>
Thu, 8 Aug 2013 21:38:47 +0000 (14:38 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sat, 10 Aug 2013 08:16:44 +0000 (01:16 -0700)
commit28d6427109d13b0f447cba5761f88d3548e83605
tree5f463fa756d508625e8cea1da31406e66a0b263e
parente370a7236321773245c5522d8bb299380830d3b2
net: attempt high order allocations in sock_alloc_send_pskb()

Adding paged frags skbs to af_unix sockets introduced a performance
regression on large sends because of additional page allocations, even
if each skb could carry at least 100% more payload than before.

We can instruct sock_alloc_send_pskb() to attempt high order
allocations.

Most of the time, it does a single page allocation instead of 8.

I added an additional parameter to sock_alloc_send_pskb() to
let other users to opt-in for this new feature on followup patches.

Tested:

Before patch :

$ netperf -t STREAM_STREAM
STREAM STREAM TEST
Recv   Send    Send
Socket Socket  Message  Elapsed
Size   Size    Size     Time     Throughput
bytes  bytes   bytes    secs.    10^6bits/sec

 2304  212992  212992    10.00    46861.15

After patch :

$ netperf -t STREAM_STREAM
STREAM STREAM TEST
Recv   Send    Send
Socket Socket  Message  Elapsed
Size   Size    Size     Time     Throughput
bytes  bytes   bytes    secs.    10^6bits/sec

 2304  212992  212992    10.00    57981.11

Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: David Rientjes <rientjes@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/macvtap.c
drivers/net/tun.c
include/net/sock.h
net/core/sock.c
net/packet/af_packet.c
net/unix/af_unix.c