On Thu, Jul 11, 2024 at 03:13:12PM -0400, Waiman Long wrote: > > On 7/11/24 14:59, Tejun Heo wrote: > > On Thu, Jul 11, 2024 at 02:51:38PM -0400, Waiman Long wrote: > >> On 7/11/24 14:44, Tejun Heo wrote: > >>> Hello, > >>> > >>> On Thu, Jul 11, 2024 at 01:39:38PM -0400, Waiman Long wrote: > >>>> On 7/11/24 13:18, Tejun Heo wrote: > >>> ... > >>>> Currently, I use the for_each_css() macro for iteration. If you mean > >>>> displaying all the possible cgroup subsystems even if they are not enabled > >>>> for the current cgroup, I will have to manually do the iteration. > >>> Just wrapping it with for_each_subsys() should do, no? for_each_css() won't > >>> iterate anything if css doesn't exist for the cgroup. > >> OK, I wasn't sure if you were asking to list all the possible cgroup v2 > >> cgroup subsystems even if they weren't enabled in the current cgroup. > >> Apparently, that is the case. I prefer it that way too. > > Yeah, I think listing all is better. If the list corresponded directly to > > cgroup.controllers, it may make sense to only show enabled ones but we can > > have dying ones and implicitly enabled memory and so on, so I think it'd be > > cleaner to just list them all. > > That will means cgroup subsystems that are seldomly used like rdma, misc > or even hugetlb will always be shown in all the cgroup.stat output. I > actually prefer just showing those that are enabled. As for dying memory > cgroups, they will only be shown in its online ancestors. We currently > don't know how many level down are each of the dying ones. It seems odd to me to not show dead ones after a cgroup has disabled the controller again. They still consume memory, after all, and so continue to be property of that cgroup afterwards. Instead of doing for_each_css(), would it make more sense to have struct cgroup { ... int nr_dying_subsys[CGROUP_SUBSYS_COUNT]; ... } and just always print them all, regardless of what is, or was, enabled?