[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <71a20cf185c485fa23d9347bd846a6f4e9753405.1434053941.git.shli@fb.com>
Date: Thu, 11 Jun 2015 15:27:16 -0700
From: Shaohua Li <shli@...com>
To: <netdev@...r.kernel.org>
CC: <davem@...emloft.net>, <Kernel-team@...com>, <clm@...com>,
<linux-mm@...ck.org>, <dbavatar@...il.com>,
Eric Dumazet <edumazet@...gle.com>
Subject: [RFC v2] net: use atomic allocation for order-3 page allocation
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@...gle.com>
Signed-off-by: Shaohua Li <shli@...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 from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists