From: Shaohua Li <shli@fb.com>
To: netdev@vger.kernel.org
Cc: davem@davemloft.net, Kernel-team@fb.com, clm@fb.com,
linux-mm@kvack.org, dbavatar@gmail.com,
Eric Dumazet <edumazet@google.com>
Subject: [RFC v2] net: use atomic allocation for order-3 page allocation
Date: Thu, 11 Jun 2015 15:27:16 -0700 [thread overview]
Message-ID: <71a20cf185c485fa23d9347bd846a6f4e9753405.1434053941.git.shli@fb.com> (raw)
We saw excessive direct memory compaction triggered by skb_page_frag_refill.
This causes performance issues and add latency. Commit 5640f7685831e0
introduces the order-3 allocation. According to the changelog, the order-3
allocation isn't a must-have but to improve performance. But direct memory
compaction has high overhead. The benefit of order-3 allocation can't
compensate the overhead of direct memory compaction.
This patch makes the order-3 page allocation atomic. If there is no memory
pressure and memory isn't fragmented, the alloction will still success, so we
don't sacrifice the order-3 benefit here. If the atomic allocation fails,
direct memory compaction will not be triggered, skb_page_frag_refill will
fallback to order-0 immediately, hence the direct memory compaction overhead is
avoided. In the allocation failure case, kswapd is waken up and doing
compaction, so chances are allocation could success next time.
The mellanox driver does similar thing, if this is accepted, we must fix
the driver too.
V2: make the changelog clearer
Cc: Eric Dumazet <edumazet@google.com>
Signed-off-by: Shaohua Li <shli@fb.com>
---
net/core/sock.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/core/sock.c b/net/core/sock.c
index 292f422..e9855a4 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -1883,7 +1883,7 @@ bool skb_page_frag_refill(unsigned int sz, struct page_frag *pfrag, gfp_t gfp)
pfrag->offset = 0;
if (SKB_FRAG_PAGE_ORDER) {
- pfrag->page = alloc_pages(gfp | __GFP_COMP |
+ pfrag->page = alloc_pages((gfp & ~__GFP_WAIT) | __GFP_COMP |
__GFP_NOWARN | __GFP_NORETRY,
SKB_FRAG_PAGE_ORDER);
if (likely(pfrag->page)) {
--
1.8.1
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next reply other threads:[~2015-06-11 22:27 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-11 22:27 Shaohua Li [this message]
2015-06-11 20:48 ` [RFC] " Eric Dumazet
2015-06-11 21:16 ` Chris Mason
2015-06-11 21:22 ` Eric Dumazet
2015-06-11 21:45 ` Shaohua Li
2015-06-11 21:56 ` Eric Dumazet
2015-06-11 22:01 ` Shaohua Li
2015-06-11 22:18 ` Chris Mason
2015-06-11 22:55 ` Eric Dumazet
2015-06-11 21:35 ` Debabrata Banerjee
2015-06-11 22:18 ` David Miller
2015-06-12 9:25 ` Vlastimil Babka
2015-06-11 21:25 ` Debabrata Banerjee
2015-06-11 21:28 ` Debabrata Banerjee
2015-06-12 9:34 ` Vlastimil Babka
2015-06-11 22:53 ` [RFC v2] " Eric Dumazet
2015-06-11 23:32 ` Shaohua Li
2015-06-11 23:38 ` Eric Dumazet
-- strict thread matches above, loose matches on Subject: below --
2015-06-11 22:27 Shaohua Li
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=71a20cf185c485fa23d9347bd846a6f4e9753405.1434053941.git.shli@fb.com \
--to=shli@fb.com \
--cc=Kernel-team@fb.com \
--cc=clm@fb.com \
--cc=davem@davemloft.net \
--cc=dbavatar@gmail.com \
--cc=edumazet@google.com \
--cc=linux-mm@kvack.org \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox