mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
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 <[email protected]> Cc: David Rientjes <[email protected]> Signed-off-by: David S. Miller <[email protected]>
This commit is contained in:
parent
e370a72363
commit
28d6427109
6 changed files with 60 additions and 55 deletions
|
|
@ -1479,7 +1479,8 @@ static int unix_dgram_sendmsg(struct kiocb *kiocb, struct socket *sock,
|
|||
MAX_SKB_FRAGS * PAGE_SIZE);
|
||||
|
||||
skb = sock_alloc_send_pskb(sk, len - data_len, data_len,
|
||||
msg->msg_flags & MSG_DONTWAIT, &err);
|
||||
msg->msg_flags & MSG_DONTWAIT, &err,
|
||||
PAGE_ALLOC_COSTLY_ORDER);
|
||||
if (skb == NULL)
|
||||
goto out;
|
||||
|
||||
|
|
@ -1651,7 +1652,8 @@ static int unix_stream_sendmsg(struct kiocb *kiocb, struct socket *sock,
|
|||
data_len = max_t(int, 0, size - SKB_MAX_HEAD(0));
|
||||
|
||||
skb = sock_alloc_send_pskb(sk, size - data_len, data_len,
|
||||
msg->msg_flags & MSG_DONTWAIT, &err);
|
||||
msg->msg_flags & MSG_DONTWAIT, &err,
|
||||
get_order(UNIX_SKB_FRAGS_SZ));
|
||||
if (!skb)
|
||||
goto out_err;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue