On Thu, Aug 25, 2022 at 4:50 PM Michal Hocko <mhocko@xxxxxxxx> wrote: > > On Thu 25-08-22 16:34:04, Zhaoyang Huang wrote: > > On Thu, Aug 25, 2022 at 2:40 PM Michal Hocko <mhocko@xxxxxxxx> wrote: > > > > > > On Thu 25-08-22 08:43:52, Zhaoyang Huang wrote: > > > > On Wed, Aug 24, 2022 at 6:27 PM Michal Hocko <mhocko@xxxxxxxx> wrote: > > > > > > > > > > On Wed 24-08-22 17:34:42, Zhaoyang Huang wrote: > > > [...] > > > > > > IMHO, charging the pages which out of explicitly memory > > > > > > enabled group to root could solve all of the above constraints with no > > > > > > harm. > > > > > > > > > > This would break the hierarchical property of the controller. So a > > > > > strong no no. Consider the following example > > > > > > > > > > root > > > > > | > > > > > A > > > > > controllers="memory" > > > > > memory.max = 1G > > > > > subtree_control="" > > > > > | | | > > > > > A1 A2 A3 > > > > > > > > > > althought A1,2,3 do not have their memory controller enabled explicitly > > > > > they are still constrained by the A memcg limit. If you just charge to > > > > > the root because it doesn't have memory controller enabled explicitly > > > > > then you just evade that constrain. I hope you understand why that is a > > > > > problem. > > > > IMO, A1-A3 should be explicitly enabled via echo "+memory" > > > > > A/subtree_control since memory.max has been set. > > > > > > You seem to be missing the point I've triedy to make here. It is not > > > about how the respective subtree should or shouldn't be configured. It > > > is about the hierarchical behavior. Configuration at a higher level should be > > > enforced under subtree no matter how that subtree decides to > > > enabled/disable controllers. Such subtree might have beeb delegated > > > and configured differently yet the constrain should be still applied. > > > See the point? > > > > > > What you seem to be proposing is similar to cgroup v1 use_hierarchy > > > configuration. It has been decided that this is undesirable very early > > > in the cgroup v2 development because it make delegation impossible > > > (among other reasons). > > Ok, I would like to know how AA3 achieve the goal of competing with A1 > > and A2 for cpu but keep memory out of control under current policy? > > root > > | > > A > > controllers="memory,cpu" > > memory.max = 1G > > subtree_control="memory,cpu" > > | | | > > A1 A2 A3 subtree_control="cpu" > > | | > > AA3 AA4 controllers="cpu" > > I cannot really give you configuration you want without understanding > what you are trying to achieve and why do you need it that way. Really, > you can construct arbitrary hierarchies and only a very small subset of > them actually makes sense. So far you have been very terse at your goals > and intentions but rather demanding on the underlying mechanisms. This > doesn't really makes the discussion productive. > > I hope you have at least understood that hierarchical property of the > cgroup v2 is a must and it won't change. If you need a help to construct > hierarchy for your specific workload I would recommend to clearly state > your final goal and reasoning behind. Maybe you will get a more specific > help that way. Good luck! Sorry for any misunderstanding among the discussion. My purpose is real and simple as I have stated from the very beginning that I would like to have per-app cgroup hierarchy to charge memory to root if it is not enabled explicitly for memory. The reason has also been stated like reclaim and workingset regression in suren's report. I don't think my proposal will do any harm to current v2's mechanism besides asking for the admin echo "+memory" to their desire group. > -- > Michal Hocko > SUSE Labs