mbox series

[v6,0/3] tracing: Support poll on event hist file

Message ID 172907575534.470540.12941248697563459082.stgit@mhiramat.roam.corp.google.com (mailing list archive)
Headers show
Series tracing: Support poll on event hist file | expand

Message

Masami Hiramatsu (Google) Oct. 16, 2024, 10:49 a.m. UTC
Hi,

Here is the v6 patch to support polling on event 'hist' file.
The previous version is here;

https://lore.kernel.org/all/172398710447.295714.4489282566285719918.stgit@devnote2

This version is rebased on the ftrace/for-next branch of the
linux-trace tree, and use global irq_work and wq instead of per-event
one.

Background
----------
There has been interest in allowing user programs to monitor kernel
events in real time. Ftrace provides `trace_pipe` interface to wait
on events in the ring buffer, but it is needed to wait until filling
up a page with events in the ring buffer. We can also peek the
`trace` file periodically, but that is inefficient way to monitor
a randomely happening event.

Overview
--------
This patch set allows user to `poll`(or `select`, `epoll`) on event
histogram interface. As you know each event has its own `hist` file
which shows histograms generated by trigger action. So user can set
a new hist trigger on any event you want to monitor, and poll on the
`hist` file until it is updated.

There are 2 poll events are supported, POLLIN and POLLPRI. POLLIN
means that there are any readable update on `hist` file and this
event will be flashed only when you call read(). So, this is
useful if you want to read the histogram periodically.
The other POLLPRI event is for monitoring trace event. Like the
POLLIN, this will be returned when the histogram is updated, but
you don't need to read() the file and use poll() again.

Note that this waits for histogram update (not event arrival), thus
you must set a histogram on the event at first.

Usage
-----
Here is an example usage:

----
TRACEFS=/sys/kernel/tracing
EVENT=$TRACEFS/events/sched/sched_process_free

# setup histogram trigger and enable event
echo "hist:key=comm" >> $EVENT/trigger
echo 1 > $EVENT/enable

# Wait for update
poll pri $EVENT/hist

# Event arrived.
echo "process free event is comming"
tail $TRACEFS/trace
----

The 'poll' command is in the selftest patch.

You can take this series also from here;

https://git.kernel.org/pub/scm/linux/kernel/git/mhiramat/linux.git/log/?h=topic/event-hist-poll

Thank you,
---

Masami Hiramatsu (Google) (3):
      tracing/hist: Add poll(POLLIN) support on hist file
      tracing/hist: Support POLLPRI event for poll on histogram
      selftests/tracing: Add hist poll() support test


 include/linux/trace_events.h                       |   14 +++
 kernel/trace/trace_events.c                        |   14 +++
 kernel/trace/trace_events_hist.c                   |  100 +++++++++++++++++++-
 tools/testing/selftests/ftrace/Makefile            |    2 
 tools/testing/selftests/ftrace/poll.c              |   74 +++++++++++++++
 .../ftrace/test.d/trigger/trigger-hist-poll.tc     |   74 +++++++++++++++
 6 files changed, 275 insertions(+), 3 deletions(-)
 create mode 100644 tools/testing/selftests/ftrace/poll.c
 create mode 100644 tools/testing/selftests/ftrace/test.d/trigger/trigger-hist-poll.tc

--
Masami Hiramatsu (Google) <mhiramat@kernel.org>

Comments

Masami Hiramatsu (Google) Oct. 29, 2024, 1:03 a.m. UTC | #1
On Wed, 16 Oct 2024 19:49:15 +0900
"Masami Hiramatsu (Google)" <mhiramat@kernel.org> wrote:

> Overview
> --------
> This patch set allows user to `poll`(or `select`, `epoll`) on event
> histogram interface. As you know each event has its own `hist` file
> which shows histograms generated by trigger action. So user can set
> a new hist trigger on any event you want to monitor, and poll on the
> `hist` file until it is updated.

Note: This `hist` is not disabled by tracing_on interface, because
that interface only disables `recording`.
Thus to monitor events via this interface, user must ensure the
tracing_on is enabled, also, set the same "filter" to the hist
action.

Thank you,

> 
> There are 2 poll events are supported, POLLIN and POLLPRI. POLLIN
> means that there are any readable update on `hist` file and this
> event will be flashed only when you call read(). So, this is
> useful if you want to read the histogram periodically.
> The other POLLPRI event is for monitoring trace event. Like the
> POLLIN, this will be returned when the histogram is updated, but
> you don't need to read() the file and use poll() again.
> 
> Note that this waits for histogram update (not event arrival), thus
> you must set a histogram on the event at first.
> 
> Usage
> -----
> Here is an example usage:
> 
> ----
> TRACEFS=/sys/kernel/tracing
> EVENT=$TRACEFS/events/sched/sched_process_free
> 
> # setup histogram trigger and enable event
> echo "hist:key=comm" >> $EVENT/trigger
> echo 1 > $EVENT/enable
> 
> # Wait for update
> poll pri $EVENT/hist
> 
> # Event arrived.
> echo "process free event is comming"
> tail $TRACEFS/trace
> ----
> 
> The 'poll' command is in the selftest patch.
> 
> You can take this series also from here;
> 
> https://git.kernel.org/pub/scm/linux/kernel/git/mhiramat/linux.git/log/?h=topic/event-hist-poll
> 
> Thank you,
> ---
> 
> Masami Hiramatsu (Google) (3):
>       tracing/hist: Add poll(POLLIN) support on hist file
>       tracing/hist: Support POLLPRI event for poll on histogram
>       selftests/tracing: Add hist poll() support test
> 
> 
>  include/linux/trace_events.h                       |   14 +++
>  kernel/trace/trace_events.c                        |   14 +++
>  kernel/trace/trace_events_hist.c                   |  100 +++++++++++++++++++-
>  tools/testing/selftests/ftrace/Makefile            |    2 
>  tools/testing/selftests/ftrace/poll.c              |   74 +++++++++++++++
>  .../ftrace/test.d/trigger/trigger-hist-poll.tc     |   74 +++++++++++++++
>  6 files changed, 275 insertions(+), 3 deletions(-)
>  create mode 100644 tools/testing/selftests/ftrace/poll.c
>  create mode 100644 tools/testing/selftests/ftrace/test.d/trigger/trigger-hist-poll.tc
> 
> --
> Masami Hiramatsu (Google) <mhiramat@kernel.org>