Thread (6 messages) 6 messages, 6 authors, 2021-10-15

Re: [PATCH v2] memcg: page_alloc: skip bulk allocator for __GFP_ACCOUNT

From: Michal Hocko <hidden>
Date: 2021-10-14 15:32:54
Also in: linux-mm, lkml

On Thu 14-10-21 08:16:07, Shakeel Butt wrote:
The commit 5c1f4e690eec ("mm/vmalloc: switch to bulk allocator in
__vmalloc_area_node()") switched to bulk page allocator for order 0
allocation backing vmalloc. However bulk page allocator does not support
__GFP_ACCOUNT allocations and there are several users of
kvmalloc(__GFP_ACCOUNT).

For now make __GFP_ACCOUNT allocations bypass bulk page allocator. In
I would go with
For now make __GFP_ACCOUNT allocations bypass the fast path of the bulk
allocator and make it fallback to the regular page allocator as if the
former failed.
future if there is workload that can be significantly improved with the
bulk page allocator with __GFP_ACCCOUNT support, we can revisit the
decision.

Fixes: 5c1f4e690eec ("mm/vmalloc: switch to bulk allocator in __vmalloc_area_node()")
Signed-off-by: Shakeel Butt <redacted>
Acked-by: Michal Hocko <mhocko-IBi9RG/b67k@public.gmane.org>
Thanks!
quoted hunk ↗ jump to hunk
---
Changes since v1:
- do fallback allocation instead of failure, suggested by Michal Hocko.
- Added memcg_kmem_enabled() check, corrected by Vasily Averin

 mm/page_alloc.c | 4 ++++
 1 file changed, 4 insertions(+)
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 668edb16446a..9ca871dc8602 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -5230,6 +5230,10 @@ unsigned long __alloc_pages_bulk(gfp_t gfp, int preferred_nid,
 	if (unlikely(page_array && nr_pages - nr_populated == 0))
 		goto out;
 
+	/* Bulk allocator does not support memcg accounting. */
+	if (memcg_kmem_enabled() && (gfp & __GFP_ACCOUNT))
+		goto failed;
+
 	/* Use the single page allocator for one page. */
 	if (nr_pages - nr_populated == 1)
 		goto failed;
-- 
2.33.0.882.g93a45727a2-goog
-- 
Michal Hocko
SUSE Labs
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help