From: Juri Lelli <juri.lelli@redhat.com>
To: Gabriele Monaco <gmonaco@redhat.com>
Cc: linux-kernel@vger.kernel.org,
Steven Rostedt <rostedt@goodmis.org>,
Masami Hiramatsu <mhiramat@kernel.org>,
linux-trace-kernel@vger.kernel.org,
Nam Cao <namcao@linutronix.de>, Tomas Glozar <tglozar@redhat.com>,
Juri Lelli <jlelli@redhat.com>,
Clark Williams <williams@redhat.com>,
John Kacur <jkacur@redhat.com>
Subject: Re: [RFC PATCH 08/17] rv: Add Hybrid Automata monitor type
Date: Tue, 19 Aug 2025 12:08:48 +0200 [thread overview]
Message-ID: <aKRNMHCslAt3dx5t@jlelli-thinkpadt14gen4.remote.csb> (raw)
In-Reply-To: <762f7d52bf75475d3ec2587a8e370e4fb2a5ae6a.camel@redhat.com>
On 19/08/25 11:48, Gabriele Monaco wrote:
>
>
> On Tue, 2025-08-19 at 11:18 +0200, Juri Lelli wrote:
> > Hi!
> >
> > On 14/08/25 17:08, Gabriele Monaco wrote:
> >
> > ...
> >
> > > +/*
> > > + * ha_monitor_init_env - setup timer and reset all environment
> > > + *
> > > + * Called from a hook in the DA start functions, it supplies the
> > > da_mon
> > > + * corresponding to the current ha_mon.
> > > + * Not all hybrid automata require the timer, still set it for
> > > simplicity.
> > > + */
> > > +static inline void ha_monitor_init_env(struct da_monitor *da_mon)
> > > +{
> > > + struct ha_monitor *ha_mon = to_ha_monitor(da_mon);
> > > +
> > > + ha_monitor_reset_all_stored(ha_mon);
> > > + if (unlikely(!ha_mon->timer.base))
> > > + hrtimer_setup(&ha_mon->timer,
> > > ha_monitor_timer_callback,
> > > + CLOCK_MONOTONIC, HRTIMER_MODE_REL);
> > > +}
> >
> > ...
> >
> > > +/*
> > > + * Helper functions to handle the monitor timer.
> > > + * Not all monitors require a timer, in such case the timer will
> > > be set up but
> > > + * never armed.
> > > + * Timers start since the last reset of the supplied env or from
> > > now if env is
> > > + * not an environment variable. If env was not initialised no
> > > timer starts.
> > > + * Timers can expire on any CPU unless the monitor is per-cpu,
> > > + * where we assume every event occurs on the local CPU.
> > > + */
> > > +static inline void ha_start_timer_ns(struct ha_monitor *ha_mon,
> > > enum envs env,
> > > + u64 expire)
> > > +{
> > > + int mode = HRTIMER_MODE_REL;
> > > + u64 passed = 0;
> > > +
> > > + if (env >= 0 && env < ENV_MAX_STORED) {
> > > + if (ha_monitor_env_invalid(ha_mon, env))
> > > + return;
> > > + passed = ha_get_env(ha_mon, env);
> > > + }
> > > + if (RV_MON_TYPE == RV_MON_PER_CPU)
> > > + mode |= HRTIMER_MODE_PINNED;
> > > + hrtimer_start(&ha_mon->timer, ns_to_ktime(expire -
> > > passed), mode);
> > > +}
> >
> > Also, my only concern with the usage of per-task timers is that
> > reprogramming add overhead, so I wonder if this gets noticeable when
> > running some kind of performance sensitive workload in production (as
> > it was reported for dl-server). Did you test such a case?
>
> That's a good point, I need to check the actual overhead..
>
> One thing to note is that this timer is used only on state constraints,
> one could write roughly the same monitor like this:
>
> +------------------------------------------+
> | enqueued |
> +------------------------------------------+
> |
> | sched_switch_in;clk < threshold_jiffies
> v
>
> or like this:
>
> +------------------------------------------+
> | enqueued |
> | clk < threshold_jiffies |
> +------------------------------------------+
> |
> | sched_switch_in
> v
>
> the first won't fail as soon as the threshold passes, but will
> eventually fail when the sched_switch_in event occurs. This won't use a
> timer at all (well, mostly, some calls are still made to keep the code
> general, I could improve that if it matters).
>
> Depending on the monitor, the first option could be a lower overhead
> yet valid alternative to the second, if it's guaranteed sched_switch_in
> will eventually come and reaction latency isn't an issue.
Right, as in the first example you have in the docs. I was thinking it
would be cool to possibly replace the hung task monitor with this one,
but again we would need to check for overhead, as the definition that
does expect a switch_in to eventually happen wouldn't work in this case.
> > Does this also need to be _HARD on RT for the monitor to work?
>
> That might be something we want configurable actually.. I assume the
> more aggressive the timer is, the more overhead it will have on the
> system.
> Some monitors might be fine with a bit of latency.
It might not only be about latency, as if the callback timer is not
serviced in case of starvation (if it's not hard) then the monitor won't
probably react and we won't be able to rely on it.
> For example in the deadline case, I believe, the monitor is not
> supposed to fix anything, but merely report violations. So we don't
> really care to react on time, but to react at all.
>
> I'm going to assess the overhead and see how to offer some more
> configurability.
Thanks!
next prev parent reply other threads:[~2025-08-19 10:08 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-14 15:07 [RFC PATCH 00/17] rv: Add Hybrid Automata monitor type, per-object and deadline monitors Gabriele Monaco
2025-08-14 15:07 ` [RFC PATCH 01/17] rv: Refactor da_monitor to minimise macros Gabriele Monaco
2025-08-21 8:14 ` Nam Cao
2025-08-21 8:49 ` Gabriele Monaco
2025-08-25 8:02 ` Gabriele Monaco
2025-08-25 8:03 ` Nam Cao
2025-08-14 15:07 ` [RFC PATCH 02/17] rv: Cleanup da_monitor after refactor Gabriele Monaco
2025-08-14 15:07 ` [RFC PATCH 03/17] Documentation/rv: Adapt documentation after da_monitor refactoring Gabriele Monaco
2025-08-14 15:07 ` [RFC PATCH 04/17] verification/rvgen: Adapt dot2k and templates after refactoring da_monitor.h Gabriele Monaco
2025-08-14 15:07 ` [RFC PATCH 05/17] verification/rvgen: Annotate DA functions with types Gabriele Monaco
2025-08-21 8:29 ` Nam Cao
2025-08-21 8:51 ` Gabriele Monaco
2025-08-14 15:07 ` [RFC PATCH 06/17] verification/dot2c: Remove __buff_to_string() and cleanup Gabriele Monaco
2025-08-21 8:32 ` Nam Cao
2025-08-14 15:07 ` [RFC PATCH 07/17] verification/rvgen: Remove unused variable declaration from containers Gabriele Monaco
2025-08-21 8:33 ` Nam Cao
2025-08-14 15:08 ` [RFC PATCH 08/17] rv: Add Hybrid Automata monitor type Gabriele Monaco
2025-08-19 9:18 ` Juri Lelli
2025-08-19 9:48 ` Gabriele Monaco
2025-08-19 10:08 ` Juri Lelli [this message]
2025-08-19 10:53 ` Gabriele Monaco
2025-08-21 12:18 ` Nam Cao
2025-08-25 7:48 ` Gabriele Monaco
2025-08-25 8:13 ` Nam Cao
2025-08-25 8:32 ` Gabriele Monaco
2025-08-14 15:08 ` [RFC PATCH 09/17] verification/rvgen: Allow spaces in and events strings Gabriele Monaco
2025-08-21 12:22 ` Nam Cao
2025-08-21 13:22 ` Gabriele Monaco
2025-08-21 15:15 ` Nam Cao
2025-08-21 15:58 ` Gabriele Monaco
2025-08-14 15:08 ` [RFC PATCH 10/17] verification/rvgen: Add support for Hybrid Automata Gabriele Monaco
2025-08-21 12:38 ` Nam Cao
2025-08-21 13:15 ` Gabriele Monaco
2025-08-25 9:55 ` Nam Cao
2025-08-25 14:24 ` Gabriele Monaco
2025-08-25 10:06 ` Nam Cao
2025-08-25 14:02 ` Gabriele Monaco
2025-08-14 15:08 ` [RFC PATCH 11/17] Documentation/rv: Add documentation about hybrid automata Gabriele Monaco
2025-08-19 8:53 ` Juri Lelli
2025-08-19 9:14 ` Juri Lelli
2025-08-19 10:46 ` Gabriele Monaco
2025-08-19 10:40 ` Gabriele Monaco
2025-08-14 15:08 ` [RFC PATCH 12/17] rv: Add sample hybrid monitors stall Gabriele Monaco
2025-08-14 15:08 ` [RFC PATCH 13/17] rv: Convert the opid monitor to a hybrid automaton Gabriele Monaco
2025-09-02 9:28 ` Nam Cao
2025-08-14 15:08 ` [RFC PATCH 14/17] sched: Add deadline tracepoints Gabriele Monaco
2025-08-19 9:56 ` Juri Lelli
2025-08-19 10:12 ` Peter Zijlstra
2025-08-19 10:34 ` Gabriele Monaco
2025-08-19 14:02 ` Juri Lelli
2025-08-19 14:21 ` Gabriele Monaco
2025-08-19 14:38 ` Phil Auld
2025-08-20 5:20 ` Juri Lelli
2025-09-02 14:55 ` Juri Lelli
2025-08-14 15:08 ` [RFC PATCH 15/17] rv: Add support for per-object monitors in DA/HA Gabriele Monaco
2025-08-14 15:08 ` [RFC PATCH 16/17] verification/rvgen: Add support for per-obj monitors Gabriele Monaco
2025-09-04 8:20 ` Nam Cao
2025-09-04 8:39 ` Gabriele Monaco
2025-09-04 8:58 ` Nam Cao
2025-08-14 15:08 ` [RFC PATCH 17/17] rv: Add deadline monitors 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=aKRNMHCslAt3dx5t@jlelli-thinkpadt14gen4.remote.csb \
--to=juri.lelli@redhat.com \
--cc=gmonaco@redhat.com \
--cc=jkacur@redhat.com \
--cc=jlelli@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=mhiramat@kernel.org \
--cc=namcao@linutronix.de \
--cc=rostedt@goodmis.org \
--cc=tglozar@redhat.com \
--cc=williams@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).