Linux Trace Kernel
 help / color / mirror / Atom feed
From: Gabriele Monaco <gmonaco@redhat.com>
To: John Ogness <john.ogness@linutronix.de>,
	Steven Rostedt <rostedt@goodmis.org>
Cc: Nam Cao <namcao@linutronix.de>, Tomas Glozar <tglozar@redhat.com>,
	 Alexei Starovoitov <alexei.starovoitov@gmail.com>,
	linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org,
	 bpf@vger.kernel.org, Wen Yang <wen.yang@linux.dev>,
	Tobias Schaffner	 <tobias.schaffner@siemens.com>,
	Viktor Malik <vmalik@redhat.com>
Subject: Re: [PATCH v2 10/15] tools/rv: Add BPF monitors
Date: Thu, 22 Oct 2026 12:09:09 +0200	[thread overview]
Message-ID: <e778bbd7d5e2d2fc07ee365f37db59af04d9a36f.camel@redhat.com> (raw)
In-Reply-To: <874ieetakx.fsf@jogness.linutronix.de>

On Thu, 2026-10-22 at 10:21 +0206, John Ogness wrote:
> On 2026-10-22, Gabriele Monaco <gmonaco@redhat.com> wrote:
> > > I am wondering if coexistence should be the goal. For example, the
> > > monitor classes (DA, LTL, HTA) are only implemented in the kernel and
> > > provide kfuncs for the state transition functions to be available to BPF
> > > monitors. I would expect that this would allow BPF monitors to have the
> > > full functionality as in-kernel monitors, since the events, errors, and
> > > reactors would all trigger from the monitor class code.
> > 
> > Well, this would be yet another hybrid requiring BPF monitors registration
> > in the kernel like I proposed in the RFC [1], which was the main point of
> > contention (that fully shared reactors and sysfs interface, by the way).
> 
> I think there is a difference, because the registration could be via
> kfunc interface rather than requiring kernel patches. Similarly, the
> kernel is able to load drivers that it does not know about it advance.

Adding kfuncs requires a kernel patch nonetheless.

We avoid a STRUCT_OPS and craft our own way to register BPF monitors, but I
don't see a practical difference.

> > For this I would argue, though, that such monitors would be BPF just
> > on paper, we wouldn't be able to use many advantages BPF provides
> > (e.g. BPF maps).
> 
> It seems to me that your main motivation of BPF is to move the
> RV-machinery into BPF. For example, moving include/rv/ltl_monitor.h into
> BPF. But that code should not require the flexibility that BPF
> offers. It is the monitors themselves that I think benefit from BPF. For
> example, kernel/trace/rv/monitors/wakeup/wakeup.c
> 
> I do not understand why you would call it BPF on paper, when the
> semantics of the states and transitions is all coded in BPF. Everything
> that makes two monitors using the same monitor class different from each
> other. Only the generic state machine (with its tracepoints for events
> and errors) and calling of reactors is in the kernel.

Alright, that applies slightly differently to LTL, which has actual functions
inside the monitor header. For DA monitors the monitor header contains enums and
a "function" field which is essentially a matrix.

Functions like ltl_atom_update() , ltl_validate(), etc., the actual monitor
class logic is shared in the ltl header. Those are the things that I'd also have
in BPF (and share when possible, see more later).

I say BPF on paper because the monitor state and everything it stores is in the
kernel.

BPF maps offer some flexibility and stability that is actually useful, I crafted
the per-obj thing myself and I'm sure there are more bugs than a simple BPF
hashmap.
per-task monitors use a static field inside a task_struct, we have a limited
number of those and obviously the size is fixed. This is great for use-cases
where verifying the code matters (i.e. can't use malloc), but a dynamic approach
as the one BPF offers rather simply can be useful for monitors that need to
store something else. The hack used in [1] could be simplified drastically using
a BPF map.

> > The current implementation already shares the header with in-kernel
> > monitors, so the actual logic is shared.
> 
> When you say "shared" you really mean "copied". If it was "shared" (in
> the kernel) then the whole tracepoint/reactor topic would nearly solve
> itself.

Half and half, I say shared because I include the exact same header, not a copy
of it. Then some things down the path cannot be represented in BPF (tracepoints)
so I re-define these.

The logic that translates the DA function[curr_state][event] to an actual
transition is shared.

> > Besides, we'd need to be extra careful on controlling the callers. Right now
> > handlers are static, so it's easier to make sure no rogue caller messes up
> > with monitoring.
> 
> That problem is orthogonal. But I expect kfunc flags, capabilities,
> and/or signed BPF objects will be the direction to take.
> 
> The reason for my suggestion of a "true" hybrid approach is because I
> feel like you were trying to completely relocate RV to BPF, and now due
> to the tracepoint/reactor requirements, we're trying to find some hacks
> to somehow make it work good enough.
> 
> I was suggesting to take a step back and consider an approach where
> there are in-kernel pieces to leverage the benefits of in-kernel
> (generic state machine, tracepoints, reactors) and BPF pieces to
> leverage the benefits of BPF (freedom to define the semantics of states
> and transitions for any domain-specific monitor).

I'm going to consider what this implies when I get back working on this, but it
still feels cleaner to me creating kfuncs for tracing only, if we consider
bpf_printk a hack.

Exporting all handlers functions is probably going to require a significant
redesign of the current RV internals.
Handlers have access to the monitor headers (everything is static/inlined),
kfuncs wouldn't.

Thanks,
Gabriele

[1] -
https://lore.kernel.org/all/96c7ee8abbe9b9b840ca6e112744b5c74f0e9b8f.1791745088.git.wen.yang@linux.dev


  reply	other threads:[~2026-10-22 10:09 UTC|newest]

Thread overview: 94+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-01 15:20 [PATCH v2 00/15] rv: Add support for BPF monitors Gabriele Monaco
2026-10-01 15:20 ` [PATCH v2 01/15] sched: Add task enqueue/dequeue trace points Gabriele Monaco
2026-10-01 15:49   ` Peter Zijlstra
2026-10-02  7:09     ` Gabriele Monaco
2026-10-02 10:29       ` Peter Zijlstra
2026-10-02 11:55         ` Gabriele Monaco
2026-10-02 19:18           ` Peter Zijlstra
2026-10-02 19:40             ` Gabriele Monaco
2026-10-04  7:57             ` Steven Rostedt
2026-10-12 11:54               ` Peter Zijlstra
2026-10-04  7:45         ` Steven Rostedt
2026-10-12 11:49           ` Peter Zijlstra
2026-10-02  0:42   ` bot+bpf-ci
2026-10-01 15:20 ` [PATCH v2 02/15] tools/rv: Skip empty pid error in selftest if command failed Gabriele Monaco
2026-10-02  0:42   ` bot+bpf-ci
2026-10-01 15:20 ` [PATCH v2 03/15] rv: Refactor da_trace() functions to get strings internally Gabriele Monaco
2026-10-01 15:20 ` [PATCH v2 04/15] rv: Cast result of model_get_*_name() Gabriele Monaco
2026-10-13  6:14   ` Nam Cao
2026-10-13  8:15     ` Gabriele Monaco
2026-10-14  9:52     ` Gabriele Monaco
2026-10-14 10:02       ` Nam Cao
2026-10-01 15:20 ` [PATCH v2 05/15] tools/rv: Move argument parsing from in_kernel to utils Gabriele Monaco
2026-10-02  0:25   ` bot+bpf-ci
2026-10-01 15:20 ` [PATCH v2 06/15] tools/build: Add a feature test for bpftool-btf Gabriele Monaco
2026-10-01 15:20 ` [PATCH v2 07/15] tools/rv: Implement BPF monitor discovery and listing Gabriele Monaco
2026-10-01 15:40   ` sashiko-bot
2026-10-02  0:42   ` bot+bpf-ci
2026-10-01 15:20 ` [PATCH v2 08/15] tools/rv: Implement BPF monitor loading and tracing Gabriele Monaco
2026-10-01 15:41   ` sashiko-bot
2026-10-02  0:43   ` bot+bpf-ci
2026-10-01 15:20 ` [PATCH v2 09/15] tools/rv: Copy stripped bpf_atomic.h from libarena Gabriele Monaco
2026-10-02  0:42   ` bot+bpf-ci
2026-10-07 12:59   ` Nam Cao
2026-10-08  9:00     ` Gabriele Monaco
2026-10-08 11:16       ` Nam Cao
2026-10-09 10:09         ` Gabriele Monaco
2026-10-11  0:43           ` Steven Rostedt
2026-10-12  7:43             ` Gabriele Monaco
2026-10-01 15:20 ` [PATCH v2 10/15] tools/rv: Add BPF monitors Gabriele Monaco
2026-10-01 15:55   ` sashiko-bot
2026-10-02  0:43   ` bot+bpf-ci
2026-10-06 13:29   ` Alexei Starovoitov
2026-10-08  9:54     ` Gabriele Monaco
2026-10-16 18:32       ` Alexei Starovoitov
2026-10-16 19:20         ` John Ogness
2026-10-17 10:42           ` Gabriele Monaco
2026-10-17 15:17             ` John Ogness
2026-10-17 16:09               ` Alexei Starovoitov
2026-10-17 16:56                 ` John Ogness
2026-10-17 23:25                   ` Alexei Starovoitov
2026-10-18 12:10                     ` John Ogness
2026-10-19  9:05                       ` Gabriele Monaco
2026-10-19  9:27                         ` John Ogness
2026-10-19  9:46                           ` Tomas Glozar
2026-10-19 13:16                           ` Steven Rostedt
2026-10-19 10:01                         ` Tomas Glozar
2026-10-19 10:43                           ` Gabriele Monaco
2026-10-19 11:05                             ` Tomas Glozar
2026-10-19 12:47                               ` Gabriele Monaco
2026-10-19 13:05                                 ` Tomas Glozar
2026-10-21  7:26                                   ` Nam Cao
2026-10-19 13:02                               ` John Ogness
2026-10-20  7:29                                 ` Gabriele Monaco
2026-10-21  8:01                                   ` Nam Cao
2026-10-21 11:54                                     ` Gabriele Monaco
2026-10-21 13:48                                       ` Steven Rostedt
2026-10-21 15:24                                         ` Gabriele Monaco
2026-10-21 16:47                                           ` John Ogness
2026-10-22  6:46                                             ` Gabriele Monaco
2026-10-22  8:15                                               ` John Ogness
2026-10-22 10:09                                                 ` Gabriele Monaco [this message]
2026-10-22 11:34                                                   ` Gabriele Monaco
2026-10-22  8:25                                               ` Nam Cao
2026-10-19  8:33               ` Gabriele Monaco
2026-10-19  9:10                 ` John Ogness
2026-10-19 10:48                   ` Gabriele Monaco
2026-10-19 12:51                   ` Nam Cao
2026-10-19 13:14                     ` John Ogness
2026-10-21  8:13                       ` Nam Cao
2026-10-21  8:46                         ` Gabriele Monaco
2026-10-21 11:12                           ` Nam Cao
2026-10-21 15:55                             ` Gabriele Monaco
2026-10-17 10:48         ` Gabriele Monaco
2026-10-01 15:20 ` [PATCH v2 11/15] tools/rv: Define CONFIG_X86_64 statically for " Gabriele Monaco
2026-10-01 15:49   ` sashiko-bot
2026-10-01 15:20 ` [PATCH v2 12/15] tools/rv: Add reactors support to " Gabriele Monaco
2026-10-01 15:57   ` sashiko-bot
2026-10-02  0:43   ` bot+bpf-ci
2026-10-01 15:20 ` [PATCH v2 13/15] verification/rvgen: Add support for " Gabriele Monaco
2026-10-02  0:25   ` bot+bpf-ci
2026-10-01 15:20 ` [PATCH v2 14/15] tools/rv: Add selftest for rv bpf monitors Gabriele Monaco
2026-10-01 16:03   ` sashiko-bot
2026-10-02  0:43   ` bot+bpf-ci
2026-10-01 15:20 ` [PATCH v2 15/15] verification/rvgen: Add selftest for rvgen -b Gabriele Monaco

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=e778bbd7d5e2d2fc07ee365f37db59af04d9a36f.camel@redhat.com \
    --to=gmonaco@redhat.com \
    --cc=alexei.starovoitov@gmail.com \
    --cc=bpf@vger.kernel.org \
    --cc=john.ogness@linutronix.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-trace-kernel@vger.kernel.org \
    --cc=namcao@linutronix.de \
    --cc=rostedt@goodmis.org \
    --cc=tglozar@redhat.com \
    --cc=tobias.schaffner@siemens.com \
    --cc=vmalik@redhat.com \
    --cc=wen.yang@linux.dev \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox