All of lore.kernel.org
 help / color / mirror / Atom feed
From: Roman Gushchin <roman.gushchin@linux.dev>
To: Song Liu <song@kernel.org>
Cc: Andrii Nakryiko <andrii.nakryiko@gmail.com>,
	 Martin KaFai Lau <martin.lau@linux.dev>,
	 Alexei Starovoitov <alexei.starovoitov@gmail.com>,
	 Kumar Kartikeya Dwivedi <memxor@gmail.com>,
	 linux-mm <linux-mm@kvack.org>,  bpf <bpf@vger.kernel.org>,
	 Suren Baghdasaryan <surenb@google.com>,
	 Johannes Weiner <hannes@cmpxchg.org>,
	 Michal Hocko <mhocko@suse.com>,
	 David Rientjes <rientjes@google.com>,
	 Matt Bobrowski <mattbobrowski@google.com>,
	 Alexei Starovoitov <ast@kernel.org>,
	 Andrew Morton <akpm@linux-foundation.org>,
	 LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v1 01/14] mm: introduce bpf struct ops for OOM handling
Date: Tue, 07 Oct 2025 19:15:40 -0700	[thread overview]
Message-ID: <87playf8ab.fsf@linux.dev> (raw)
In-Reply-To: <CAHzjS_v+N7UO-yEt-d0w3nE5_Y1LExQ5hFWYnHqARp9L-5P_cg@mail.gmail.com> (Song Liu's message of "Tue, 7 Oct 2025 18:07:03 -0700")

Song Liu <song@kernel.org> writes:

> On Mon, Oct 6, 2025 at 5:42 PM Roman Gushchin <roman.gushchin@linux.dev> wrote:
> [...]
>> >> >
>> >> > So, there cannot be bpf_link__attach_cgroup(), but there can be (at
>> >> > least conceptually) bpf_map__attach_cgroup(), where map is struct_ops
>> >> > map.
>> >>
>> >> I see...
>> >> So basically when a struct ops map is created we have a fd and then
>> >> we can attach it (theoretically multiple times) using BPF_LINK_CREATE.
>> >
>> > Yes, exactly. "theoretically" part is true right now because of how
>> > things are wired up internally, but this must be fixable
>>
>> Ok, one more question: do you think it's better to alter the existing
>> bpf_struct_ops.reg() callback and add the bpf_attr parameter
>> or add the new .attach() callback?
>
> IIUC, bpf_struct_ops_link is just for bpf_struct_ops.reg(). The
> attach() operation can be separate, and it doesn't need to be
> implemented in sys_bpf() syscall. BPF TCP congestion control
> uses setsockopt() to do the attach(). Current sched_ext does
> the attach as part of reg(). Tejun is proposing to use reg() for
> sub scheduler [1]. In my earlier patch set for fanotify-bpf, I
> was planning to use ioctl on the fanotify fd [2]. I think these
> all work for the given use case.
>
> I am not sure what is the best option for cgroup oom killer. There
> are multiple options. Technically, it can even be a sysfs entry.
> We can use it as:
>
> # load and pin oom killers first
> $ cat /sys/fs/cgroup/user.slice/oom.killer
> [oom_a] oom_b oom_c
> $ echo oom_b > /sys/fs/cgroup/user.slice/oom.killer
> $ cat /sys/fs/cgroup/user.slice/oom.killer
> oom_a [oom_b] oom_c

It actually looks nice!
But I expect that most users of bpf_oom won't use it directly,
but through some sort of middleware (e.g. systemd), so Idk if
such a user-oriented interface makes a lot of sense.

> Note that, I am not proposing to use sysfs entries for oom killer.
> I just want to say it is an option.
>
> Given attach() can be implemented in different ways, we probably
> don't need to add it to bpf_struct_ops. But if that turns out to be
> the best option, I would not argue against it. OTOH, I think it is
> better to keep reg() and attach() separate, though sched_ext is
> using reg() for both options.

I'm inclining towards a similar approach, except that I don't want
to embed cgroup_id into the struct_ops, but keep it in the link,
as Martin suggested. But I need to implement it end-to-end before I can
be sure that it's the best option. Working on it...

>
> Does this make sense?

Yes, thank you for the great summary!

  reply	other threads:[~2025-10-08  2:15 UTC|newest]

Thread overview: 83+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-18 17:01 [PATCH v1 00/14] mm: BPF OOM Roman Gushchin
2025-08-18 17:01 ` [PATCH v1 01/14] mm: introduce bpf struct ops for OOM handling Roman Gushchin
2025-08-19  4:09   ` Suren Baghdasaryan
2025-08-19 20:06     ` Roman Gushchin
2025-08-20 19:34       ` Suren Baghdasaryan
2025-08-20 19:52         ` Roman Gushchin
2025-08-20 20:01           ` Suren Baghdasaryan
2025-08-26 16:23         ` Amery Hung
2025-08-20 11:28   ` Kumar Kartikeya Dwivedi
2025-08-21  0:24     ` Roman Gushchin
2025-08-21  0:36       ` Kumar Kartikeya Dwivedi
2025-08-21  2:22         ` Roman Gushchin
2025-08-21 15:54           ` Suren Baghdasaryan
2025-08-22 19:27       ` Martin KaFai Lau
2025-08-25 17:00         ` Roman Gushchin
2025-08-26 18:01           ` Martin KaFai Lau
2025-08-26 19:52             ` Alexei Starovoitov
2025-08-27 18:28               ` Roman Gushchin
2025-09-02 17:31               ` Roman Gushchin
2025-09-02 22:30                 ` Martin KaFai Lau
2025-09-02 23:36                   ` Roman Gushchin
2025-10-04  2:00                   ` Roman Gushchin
2025-10-06 23:21                     ` Andrii Nakryiko
2025-10-06 23:52                       ` Roman Gushchin
2025-10-06 23:57                         ` Andrii Nakryiko
2025-10-07  0:41                           ` Roman Gushchin
2025-10-08  1:07                             ` Song Liu
2025-10-08  2:15                               ` Roman Gushchin [this message]
2025-10-08  7:03                                 ` Song Liu
2025-10-08 17:02                                   ` Roman Gushchin
2025-10-07  2:25                     ` Martin KaFai Lau
2025-09-03  0:29                 ` Tejun Heo
2025-09-03 23:30                   ` Roman Gushchin
2025-09-04  6:39                     ` Tejun Heo
2025-09-04 14:32                       ` Roman Gushchin
2025-09-04 16:26                         ` Alexei Starovoitov
2025-09-04 16:58                           ` Tejun Heo
2025-08-26 16:56   ` Amery Hung
2025-08-18 17:01 ` [PATCH v1 02/14] bpf: mark struct oom_control's memcg field as TRUSTED_OR_NULL Roman Gushchin
2025-08-20  9:17   ` Kumar Kartikeya Dwivedi
2025-08-20 22:32     ` Roman Gushchin
2025-08-18 17:01 ` [PATCH v1 03/14] mm: introduce bpf_oom_kill_process() bpf kfunc Roman Gushchin
2025-08-18 17:01 ` [PATCH v1 04/14] mm: introduce bpf kfuncs to deal with memcg pointers Roman Gushchin
2025-08-20  9:21   ` Kumar Kartikeya Dwivedi
2025-08-20 22:43     ` Roman Gushchin
2025-08-20 23:33       ` Kumar Kartikeya Dwivedi
2025-08-18 17:01 ` [PATCH v1 05/14] mm: introduce bpf_get_root_mem_cgroup() bpf kfunc Roman Gushchin
2025-08-20  9:25   ` Kumar Kartikeya Dwivedi
2025-08-20 22:45     ` Roman Gushchin
2025-08-18 17:01 ` [PATCH v1 06/14] mm: introduce bpf_out_of_memory() " Roman Gushchin
2025-08-19  4:09   ` Suren Baghdasaryan
2025-08-19 20:16     ` Roman Gushchin
2025-08-20  9:34   ` Kumar Kartikeya Dwivedi
2025-08-20 22:59     ` Roman Gushchin
2025-08-18 17:01 ` [PATCH v1 07/14] mm: allow specifying custom oom constraint for bpf triggers Roman Gushchin
2025-10-02 16:37   ` ChaosEsque Team
2025-08-18 17:01 ` [PATCH v1 08/14] mm: introduce bpf_task_is_oom_victim() kfunc Roman Gushchin
2025-08-18 17:01 ` [PATCH v1 09/14] bpf: selftests: introduce read_cgroup_file() helper Roman Gushchin
2025-08-18 17:01 ` [PATCH v1 10/14] bpf: selftests: bpf OOM handler test Roman Gushchin
2025-08-20  9:33   ` Kumar Kartikeya Dwivedi
2025-08-20 22:49     ` Roman Gushchin
2025-08-20 20:23   ` Andrii Nakryiko
2025-08-21  0:10     ` Roman Gushchin
2025-08-18 17:01 ` [PATCH v1 11/14] sched: psi: refactor psi_trigger_create() Roman Gushchin
2025-08-19  4:09   ` Suren Baghdasaryan
2025-08-19 20:28     ` Roman Gushchin
2025-08-18 17:01 ` [PATCH v1 12/14] sched: psi: implement psi trigger handling using bpf Roman Gushchin
2025-08-19  4:11   ` Suren Baghdasaryan
2025-08-19 22:31     ` Roman Gushchin
2025-08-19 23:31       ` Roman Gushchin
2025-08-20 23:56         ` Suren Baghdasaryan
2025-08-26 17:03   ` Amery Hung
2025-08-18 17:01 ` [PATCH v1 13/14] sched: psi: implement bpf_psi_create_trigger() kfunc Roman Gushchin
2025-08-20 20:30   ` Andrii Nakryiko
2025-08-21  0:36     ` Roman Gushchin
2025-08-22 19:13       ` Andrii Nakryiko
2025-08-22 19:57       ` Martin KaFai Lau
2025-08-25 16:56         ` Roman Gushchin
2025-08-18 17:01 ` [PATCH v1 14/14] bpf: selftests: psi struct ops test Roman Gushchin
2025-08-19  4:08 ` [PATCH v1 00/14] mm: BPF OOM Suren Baghdasaryan
2025-08-19 19:52   ` Roman Gushchin
2025-08-20 21:06 ` Shakeel Butt
2025-08-21  0:01   ` Roman Gushchin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87playf8ab.fsf@linux.dev \
    --to=roman.gushchin@linux.dev \
    --cc=akpm@linux-foundation.org \
    --cc=alexei.starovoitov@gmail.com \
    --cc=andrii.nakryiko@gmail.com \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=hannes@cmpxchg.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=martin.lau@linux.dev \
    --cc=mattbobrowski@google.com \
    --cc=memxor@gmail.com \
    --cc=mhocko@suse.com \
    --cc=rientjes@google.com \
    --cc=song@kernel.org \
    --cc=surenb@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.