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. InI 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