Message ID | 20230912070149.969939-1-zhouchuyi@bytedance.com (mailing list archive) |
---|---|
Headers | show |
Series | Add Open-coded process and css iters | expand |
在 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 >