在 2023/9/12 15:01, Chuyi Zhou 写道:
> Hi,
>
> This is version 2 of process and css iters support. All the changes were
> suggested by Alexei.
>
> Thanks for your review!
>
> --- Changelog ---
> Changes from v1:
> - Add a pre-patch to make some preparations before supporting css_task
> iters.
> - Add an allowlist for css_task iters
> - Let bpf progs do explicit bpf_rcu_read_lock() when using process iters
> and css_descendant iters.
Sorry for missing the link to v1
(https://lore.kernel.org/lkml/20230827072057.1591929-1-zhouchuyi@bytedance.com/).
> ---------------------
>
> In some BPF usage scenarios, it will be useful to iterate the process and
> css directly in the BPF program. One of the expected scenarios is
> customizable OOM victim selection via BPF[1].
>
> Inspired by Dave's task_vma iter[2], this patchset adds three types of
> open-coded iterator kfuncs:
>
> 1. bpf_for_each(process, p). Just like for_each_process(p) in kernel to
> itearing all tasks in the system.
>
> 2. bpf_for_each(css_task, task, css). It works like
> css_task_iter_{start, next, end} and would be used to iterating
> tasks/threads under a css.
>
> 3. bpf_for_each(css_{post, pre}, pos, root_css). It works like
> css_next_descendant_{pre, post} to iterating all descendant css.
>
> BPF programs can use these kfuncs directly or through bpf_for_each macro.
>
> link[1]: https://lore.kernel.org/lkml/20230810081319.65668-1-zhouchuyi@bytedance.com/
> link[2]: https://lore.kernel.org/all/20230810183513.684836-1-davemarchevsky@fb.com/
>
> Chuyi Zhou (6):
> cgroup: Prepare for using css_task_iter_*() in BPF
> bpf: Introduce css_task open-coded iterator kfuncs
> bpf: Introduce process open coded iterator kfuncs
> bpf: Introduce css_descendant open-coded iterator kfuncs
> bpf: teach the verifier to enforce css_iter and process_iter in RCU CS
> selftests/bpf: Add tests for open-coded task and css iter
>
> include/linux/cgroup.h | 12 +-
> include/uapi/linux/bpf.h | 16 ++
> kernel/bpf/helpers.c | 12 ++
> kernel/bpf/task_iter.c | 130 +++++++++++++++++
> kernel/bpf/verifier.c | 53 ++++++-
> kernel/cgroup/cgroup.c | 18 ++-
> tools/include/uapi/linux/bpf.h | 16 ++
> tools/lib/bpf/bpf_helpers.h | 24 +++
> .../testing/selftests/bpf/prog_tests/iters.c | 138 ++++++++++++++++++
> .../testing/selftests/bpf/progs/iters_task.c | 104 +++++++++++++
> 10 files changed, 508 insertions(+), 15 deletions(-)
> create mode 100644 tools/testing/selftests/bpf/progs/iters_task.c
>