Re: [PATCH v2 1/2] mm/memcontrol: add dmem charge/uncharge functions
From: Christian König
Date: Tue May 26 2026 - 03:42:22 EST
On 5/22/26 17:55, Shakeel Butt wrote:
> On Fri, May 22, 2026 at 08:53:10AM -0700, Shakeel Butt wrote:
>> On Tue, May 19, 2026 at 11:59:01AM -0400, Eric Chanudet wrote:
>>> Add mem_cgroup_dmem_charge() and mem_cgroup_dmem_uncharge() to allow
>>> dmem pool allocations to optionally be double-charged against the memory
>>> controller. Take the struct cgroup from the dmem pool's css as there is
>>> no convenient object exported to represent these allocations. These will
>>> resolve the effective memory css from that cgroup and perform the
>>> charge.
>>>
>>> Introduce a MEMCG_DMEM stat counter to memory.stat to make the cgroup's
>>> dmem charge visible.
>>>
>>> Signed-off-by: Eric Chanudet <echanude@xxxxxxxxxx>
>>> ---
>>> include/linux/memcontrol.h | 16 ++++++++++++
>>> mm/memcontrol.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++
>>> 2 files changed, 81 insertions(+)
>>>
>>> diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h
>>> index dc3fa687759b45748b2acee6d7f43da325eb50c1..8e1d49b87fb64e6114f3eb920293e14920290fe7 100644
>>> --- a/include/linux/memcontrol.h
>>> +++ b/include/linux/memcontrol.h
>>> @@ -39,6 +39,7 @@ enum memcg_stat_item {
>>> MEMCG_ZSWAP_B,
>>> MEMCG_ZSWAPPED,
>>> MEMCG_ZSWAP_INCOMP,
>>> + MEMCG_DMEM,
>>> MEMCG_NR_STAT,
>>> };
>>>
>>> @@ -1872,6 +1873,21 @@ static inline bool mem_cgroup_zswap_writeback_enabled(struct mem_cgroup *memcg)
>>> }
>>> #endif
>>>
>>> +#if defined(CONFIG_MEMCG) && defined(CONFIG_CGROUP_DMEM)
>>> +bool mem_cgroup_dmem_charge(struct cgroup *cgrp, unsigned int nr_pages,
>>> + gfp_t gfp_mask);
>>> +void mem_cgroup_dmem_uncharge(struct cgroup *cgrp, unsigned int nr_pages);
>>> +#else
>>> +static inline bool mem_cgroup_dmem_charge(struct cgroup *cgrp,
>>> + unsigned int nr_pages, gfp_t gfp_mask)
>>
>> Please follow Johannes's request to pass the actually memory object instead of
>> naked numbers.
>>
>
> Also what exactly is the backing memory here? Is it system memory? If yes, then
> you need to pass struct page. For non-system memory, I am not sure memcg is the
> right place to charge such memory.
The object might be backed by system memory, but might also be backed by device memory.
The charge is there because when applications over allocate device memory they get swapped to system memory.
Regards,
Christian.