Re: [PATCH v2] memcg: page_alloc: skip bulk allocator for __GFP_ACCOUNT
From: David Hildenbrand <hidden>
Date: 2021-10-14 15:24:48
Also in:
linux-mm, lkml
On 14.10.21 17:16, Shakeel Butt wrote:
quoted hunk ↗ jump to hunk
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 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> --- 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;
LGTM Acked-by: David Hildenbrand <redacted> -- Thanks, David / dhildenb