Thread (13 messages) 13 messages, 4 authors, 2024-09-10

Re: [PATCH v4] memcg: add charging of already allocated slab objects

From: Yosry Ahmed <hidden>
Date: 2024-09-06 17:39:21
Also in: cgroups, linux-mm, lkml

On Fri, Sep 6, 2024 at 10:29 AM Vlastimil Babka [off-list ref] wrote:
On 9/6/24 19:19, Yosry Ahmed wrote:
quoted
[..]
quoted
I felt it could be improved more, so ended up with this. Thoughts?

/**
 * kmem_cache_charge - memcg charge an already allocated slab memory
 * @objp: address of the slab object to memcg charge
 * @gfpflags: describe the allocation context
 *
 * kmem_cache_charge allows charging a slab object to the current memcg,
 * primarily in cases where charging at allocation time might not be possible
 * because the target memcg is not known (i.e. softirq context)
 *
 * The objp should be pointer returned by the slab allocator functions like
 * kmalloc (with __GFP_ACCOUNT in flags) or kmem_cache_alloc. The memcg charge
Aren't allocations done with kmalloc(__GFP_ACCOUNT) already accounted?
Why would we need to call kmem_cache_charge() for those?
AFAIU current_obj_cgroup() returns NULL because we're in the interrupt
context and no remote memcg context has been set. Thus the charging is
skipped. The patch commit log describes such scenario for network receive.
Oh yeah I missed that part. I thought the networking allocations in
interrupt context are made without __GFP_ACCOUNT to begin with.
But in case of kmalloc() the allocation must have been still attempted with
__GFP_ACCOUNT so a kmalloc-cg cache is used even if the charging fails.
It is still possible that the initial allocation did not have
__GFP_ACCOUNT, but not from a KMALLOC_NORMAL cache (e.g. KMALLOC_DMA
or KMALLOC_RECLAIM). In this case kmem_cache_charge() should still
work, right?
If there's another usage for kmem_cache_charge() where the memcg is
available but we don't want to charge immediately on purpose (such as the
Linus' idea for struct file), we might need to find another way to tell
kmalloc() to use the kmalloc-cg cache but not charge immediately...
Can we just use a dedicated kmem_cache for this instead?
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help