On Fri, May 20, 2022 at 3:19 PM Alexei Starovoitov <alexei.starovoitov@xxxxxxxxx> wrote: > > On Fri, May 20, 2022 at 02:18:42PM -0700, Yosry Ahmed wrote: > > > > > > The userspace needs to specify the identity of the cgroup, when > > > creating bpf_iter. This identity could be cgroup id or fd. This > > > identity needs to be converted to cgroup object somewhere before > > > passing into bpf program to use. > > > > > > Let's sum up the discussion here, I feel like we are losing track of > > the main problem. IIUC the main concern is that cgroup_iter is not > > effectively an iterator, it rather dumps information for one cgroup. I > > like the suggestion to make it iterate cgroups by default, and an > > optional cgroup_id parameter to make it only "iterate" this one > > cgroup. > > We have bpf_map iterator that walks all bpf maps. > When map iterator is parametrized with map_fd the iterator walks > all elements of that map. > cgroup iterator should have similar semantics. > When non-parameterized it will walk all cgroups and their descendent > depth first way. I believe that's what Yonghong is proposing. > When parametrized it will start from that particular cgroup and > walk all descendant of that cgroup only. > The bpf prog can stop the iteration right away with ret 1. > Maybe we can add two parameters. One -> cgroup_fd to use and another -> > the order of iteration css_for_each_descendant_pre vs _post. > wdyt? So basically extend the current patch so that cgroup_id (or cgroup_fd) is optional, and it specifies where the iteration starts. If not provided, then we start at root. For our use case where we want the iterator to only be invoked for one cgroup we make it return 1 to stop after the first iteration. I assume an order parameter is also needed to specify "pre" for our use case to make sure we are starting iteration at the top cgroup (the one whose cgroup_id is the parameter of the iterator). Is my understanding correct? If yes, then this sounds very good. It is generic enough, actually iterates cgroups, and works for our use case.