Thread (28 messages) 28 messages, 6 authors, 2021-10-16

Re: memcg memory accounting in vmalloc is broken

flat view

From: Vasily Averin <hidden>
Date: 2021-10-07 19:33:21
Also in: cgroups, lkml

On 10/7/21 11:50 AM, Vasily Averin wrote:
On 10/7/21 11:16 AM, Michal Hocko wrote:
quoted
Cc Mel and Uladzislau

On Thu 07-10-21 10:13:23, Michal Hocko wrote:
quoted
On Thu 07-10-21 11:04:40, Vasily Averin wrote:
quoted
vmalloc was switched to __alloc_pages_bulk but it does not account the memory to memcg.

Is it known issue perhaps?
No, I think this was just overlooked. Definitely doesn't look
intentional to me.
I use following patch as a quick fix,
it helps though it is far from ideal and can be optimized.
Dear all,
thanks a lot for your comments and suggestions!

Unfortunately current patch version does not work properly.
We cannot charge each page in this cycle, with taken pagesets spinlock,
lockdep reports about possible deadlock.
Trying to use pre-charge, as suggested by Mel Gorman.
 
quoted hunk ↗ jump to hunk
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index b37435c274cf..e6abe2cac159 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -5290,6 +5290,12 @@ unsigned long __alloc_pages_bulk(gfp_t gfp, int preferred_nid,
 
 		page = __rmqueue_pcplist(zone, 0, ac.migratetype, alloc_flags,
 								pcp, pcp_list);
+
+		if (memcg_kmem_enabled() && (gfp & __GFP_ACCOUNT) && page &&
+		    unlikely(__memcg_kmem_charge_page(page, gfp, 0) != 0)) {
+			__free_pages(page, 0);
+			page = NULL;
+		}
 		if (unlikely(!page)) {
 			/* Try and get at least one page */
 			if (!nr_populated)
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help