Re: Question on damon_sysfs_memcg_path_to_id() path resolution

Song Hu <[email protected]>
Newsgroups dev.linux.lists.damon
Message-ID <[email protected]>
Hi,

Sorry for the late reply.

在 2026/7/15 21:51, SJ Park 写道:
> On Wed, 15 Jul 2026 14:35:46 +0800 Song Hu <[email protected]> wrote:
>
>> Hi SeongJae,
>>
>> I've been reading the memcg path->id resolution used by DAMOS filters
>> and quota goals, and I'd like to ask about a design choice before
>> suggesting any change.
> Thank you for asking this question!
>
>> damon_sysfs_memcg_path_to_id() (mm/damon/sysfs-common.c) resolves the
>> user-written cgroup path by iterating all memcgs with
>> mem_cgroup_iter() and comparing each one's cgroup_path() to the
>> target.  It could instead call cgroup_get_from_path() directly, but
>> the two don't resolve the path the same way:
>>
>>   - current code: cgroup_path(memcg->css.cgroup) is just kernfs_path(),
>>     i.e. the absolute path in the cgroup hierarchy, independent of the
>>     caller's cgroup namespace;
>>
>>   - cgroup_get_from_path(): resolves the path against
>>     current_cgns_cgroup_dfl(), i.e. relative to the caller's cgroup
>>     namespace.
> Today I learned cgroup_get_from_path() :)
>
> And it seems it will work for not only memcg but any cgroups?
>
>> So in a cgroup-namespaced (container) setup the two disagree: today
>> the lookup is absolute; switching to cgroup_get_from_path() would make
>> it namespace-relative.  On the host / init namespace they agree.
> If my above guess is correct, it may also differently work if the user gives
> non-memcg cgroup path.
>
>> I ask because the iteration has already needed one stable fix
>> (d4e7b5c4cc35, a missing mem_cgroup_iter_break() that leaked a cgroup
>> reference), and cgroup_get_from_path() is a matched get/put pair that
>> would avoid that whole class of mistake -- but only if the namespace
>> behavior change is acceptable.
>>
>> Is the absolute-path behavior intentional?  If namespace-relative
>> resolution is fine, I'm happy to send a patch (keeping the
>> mem_cgroup_online() skip).  If not, I'll leave it as is.
> It was not very intentional.  I just didn't think about container-inside DAMON
> use case.
>
> I find the current behavior might be tedious if the user runs DAMON inside
> cgroups.  Finding the absolute cgroup path inside containers might be
> challenging.  If that's the case, I'm up to change or extend the behaviors.
>
> If this is only for making the code easier to maintain, I don't really feel
> like it deserves the behavioral changes, to be honest.
I looked into the container case more carefully and I'm no longer sure
it justifies the change.

DAMON sysfs is root-only (state is 0600 under /sys/kernel/mm/damon), so
whoever configures a scheme is effectively a host-level operator.  That
operator can obtain the absolute cgroup path directly (e.g. from
/proc/<pid>/cgroup), and the usage docs already show host-absolute
paths.  A process able to write host DAMON sysfs from inside a non-init
cgroup namespace is a privileged host-admin case, not really a "DAMON
inside a container" user.  So I think the namespace-relative benefit is
marginal at best.

Given that, and your point that maintainability alone isn't worth a
behavioral change, I'll leave damon_sysfs_memcg_path_to_id() as-is.

Thanks for thinking it through with me -- and for the cgroup_get_from_path pointer.

Song
>
> Thanks,
> SJ
>
> [...]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.