On Fri, 22 Nov 2024 13:00:14 GMT, Sergey Chernyshev <schernys...@openjdk.org> 
wrote:

>>> Here, `limit` at line 64 is not stored as a possible lowest limit, so if 
>>> the inner group has lower limit than the outer group, it won't be detected 
>>> (cg v2 is affected too).
>> 
>> Good spot! How about this to fix it?
>> 
>> 
>> jlong limit = mem->read_memory_limit_in_bytes(phys_mem); 
>> jlong lowest_limit = limit < 0 ? phys_mem: limit;
>> 
>> 
>>> The cgroup path will be adjusted to the outer group (when it's limited). 
>>> Another issue is in the loop at line 66 that reduces the path. In cg v1 in 
>>> `cgroupns=host` mode (default) the cgroup_path includes the base cgroup and 
>>> the subgroup (when moved). It may be not quite obvious which part of the 
>>> path is the actual subgroup (and the CloudFoundry case has demonstrated 
>>> it). It is suggested to determine the actual subgroup (path suffix) before 
>>> reducing the group path. Please see the updated patch.
>> 
>> I'm worried about the added complexity. 1.) Is this something that's needed 
>> in cg v2 too? If no, we are changing cg version agnostic code for a version 
>> specific issue. 2.) Wouldn't setting the cgroup path to 
>> `<mount_point>/<cgroup_path>` achieve the same thing, when it's currently 
>> `null` (in current master)?
>> 
>> After all, those are corner cases which don't seem very common.
>
>> Good spot! How about this to fix it?
>> 
>> ```
>> jlong limit = mem->read_memory_limit_in_bytes(phys_mem); 
>> jlong lowest_limit = limit < 0 ? phys_mem: limit;
>> ```
> 
> Make sense to me.
> 
>> I'm worried about the added complexity. 1.) Is this something that's needed 
>> in cg v2 too? If no, we are changing cg version agnostic code for a version 
>> specific issue. 2.) Wouldn't setting the cgroup path to 
>> `<mount_point>/<cgroup_path>` achieve the same thing, when it's currently 
>> `null` (in current master)?
> 
> The added complexity only kicks in in cg v1 when `_root != cgroup_path`, so 
> exactly in that corner case. In cg v2 it only works with `--cgroupns=host`, 
> it ends up calling stat() once and then continues normally, so the added 
> overhead is minimal.

The added code in `CgroupUtil::adjust_controller` runs for cg v1 and cg v2 when 
path adjustment is deemed needed. So I'm not clear why it's needed for cg v2. I 
thought we have established that for cg v2 && `--cgroupns=host` the current 
path adjustment is sufficient? What am I missing?

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/21808#discussion_r1854277359

Reply via email to