On Mon, Nov 13, 2023 at 09:31:07AM +0800, Huang, Ying wrote: > Gregory Price <gregory.price@xxxxxxxxxxxx> writes: > > > On Fri, Nov 10, 2023 at 02:16:05PM +0800, Huang, Ying wrote: > >> Gregory Price <gourry.memverge@xxxxxxxxx> writes: > >> > > > > weights are also inherited from parent cgroups, so if you set them in > > parent slices you can automatically set update system settings. > > > > by default the parent slice weights will always be 1 until set > > otherwise. Once they're set, children inherit naturally. > > > > Maybe there's an argument here for including interleave_weights in the > > root cgroup. > > Even if the interleave_weights is introduced in root cgroup, the initial > default weight need to be 1 to be back-compatible with the original > MPOL_INTERLEAVE. > Sorry, I am maybe not explaining correctly. Right now, the weights are not *replicated* when a child cgroup is created. Instead, when weights are requested (during allocation) the requestor searches for the first cgroup in its family that has weights. while (!memcg->weights && !memcg_is_root(memcg)) memcg = parent(memcg) We only create new weights on each child if the child explicitly has their weights set. We manage everything else via RCU to keep it all consistent. This would allow a set of weights in the root cgroup to be set and then immediately inherited by the entire system, though it does add the overhead of searching the cgroup family lineage on allocations (which could be non-trivial, we are still testing it). > If we don't reuse MPOL_INTERLEAVE, but use a new memory policy mode (say > MPOL_WEIGHTED_INTERLEAVE). The default values of the interleave weight > in root cgroup needn't to be 1. I agree, and I already have patches that do just this. Though based on other feedback, it's looking like I'll be reverting back to implementing all of this in mempolicy, and maybe trying to pull mempolicy forward into the procfs world. ~Gregory