mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
rv: Add nomiss deadline monitor
Add the deadline monitors collection to validate the deadline scheduler,
both for deadline tasks and servers.
The currently implemented monitors are:
* nomiss:
validate dl entities run to completion before their deadiline
Reviewed-by: Nam Cao <namcao@linutronix.de>
Reviewed-by: Juri Lelli <juri.lelli@redhat.com>
Link: https://lore.kernel.org/r/20260330111010.153663-13-gmonaco@redhat.com
Signed-off-by: Gabriele Monaco <gmonaco@redhat.com>
This commit is contained in:
@@ -17,3 +17,4 @@ Runtime Verification
|
||||
monitor_sched.rst
|
||||
monitor_rtapp.rst
|
||||
monitor_stall.rst
|
||||
monitor_deadline.rst
|
||||
|
||||
84
Documentation/trace/rv/monitor_deadline.rst
Normal file
84
Documentation/trace/rv/monitor_deadline.rst
Normal file
@@ -0,0 +1,84 @@
|
||||
Deadline monitors
|
||||
=================
|
||||
|
||||
- Name: deadline
|
||||
- Type: container for multiple monitors
|
||||
- Author: Gabriele Monaco <gmonaco@redhat.com>
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
The deadline monitor is a set of specifications to describe the deadline
|
||||
scheduler behaviour. It includes monitors per scheduling entity (deadline tasks
|
||||
and servers) that work independently to verify different specifications the
|
||||
deadline scheduler should follow.
|
||||
|
||||
Specifications
|
||||
--------------
|
||||
|
||||
Monitor nomiss
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
The nomiss monitor ensures dl entities get to run *and* run to completion
|
||||
before their deadline, although deferrable servers may not run. An entity is
|
||||
considered done if ``throttled``, either because it yielded or used up its
|
||||
runtime, or when it voluntarily starts ``sleeping``.
|
||||
The monitor includes a user configurable deadline threshold. If the total
|
||||
utilisation of deadline tasks is larger than 1, they are only guaranteed
|
||||
bounded tardiness. See Documentation/scheduler/sched-deadline.rst for more
|
||||
details. The threshold (module parameter ``nomiss.deadline_thresh``) can be
|
||||
configured to avoid the monitor to fail based on the acceptable tardiness in
|
||||
the system. Since ``dl_throttle`` is a valid outcome for the entity to be done,
|
||||
the minimum tardiness needs be 1 tick to consider the throttle delay, unless
|
||||
the ``HRTICK_DL`` scheduler feature is active.
|
||||
|
||||
Servers have also an intermediate ``idle`` state, occurring as soon as no
|
||||
runnable task is available from ready or running where no timing constraint
|
||||
is applied. A server goes to sleep by stopping, there is no wakeup equivalent
|
||||
as the order of a server starting and replenishing is not defined, hence a
|
||||
server can run from sleeping without being ready::
|
||||
|
||||
|
|
||||
sched_wakeup v
|
||||
dl_replenish;reset(clk) -- #=========================#
|
||||
| H H dl_replenish;reset(clk)
|
||||
+-----------> H H <--------------------+
|
||||
H H |
|
||||
+- dl_server_stop ---- H ready H |
|
||||
| +-----------------> H clk < DEADLINE_NS() H dl_throttle; |
|
||||
| | H H is_defer == 1 |
|
||||
| | sched_switch_in - H H -----------------+ |
|
||||
| | | #=========================# | |
|
||||
| | | | ^ | |
|
||||
| | | dl_server_idle dl_replenish;reset(clk) | |
|
||||
| | | v | | |
|
||||
| | | +--------------+ | |
|
||||
| | | +------ | | | |
|
||||
| | | dl_server_idle | | dl_throttle | |
|
||||
| | | | | idle | -----------------+ | |
|
||||
| | | +-----> | | | | |
|
||||
| | | | | | | |
|
||||
| | | | | | | |
|
||||
+--+--+---+--- dl_server_stop -- +--------------+ | | |
|
||||
| | | | | ^ | | |
|
||||
| | | | sched_switch_in dl_server_idle | | |
|
||||
| | | | v | | | |
|
||||
| | | | +---------- +---------------------+ | | |
|
||||
| | | | sched_switch_in | | | | |
|
||||
| | | | sched_wakeup | | | | |
|
||||
| | | | dl_replenish; | running | -------+ | | |
|
||||
| | | | reset(clk) | clk < DEADLINE_NS() | | | | |
|
||||
| | | | +---------> | | dl_throttle | | |
|
||||
| | | +----------------> | | | | | |
|
||||
| | | +---------------------+ | | | |
|
||||
| | sched_wakeup ^ sched_switch_suspend | | | |
|
||||
v v dl_replenish;reset(clk) | dl_server_stop | | | |
|
||||
+--------------+ | | v v v |
|
||||
| | - sched_switch_in + | +---------------+
|
||||
| | <---------------------+ dl_throttle +-- | |
|
||||
| sleeping | sched_wakeup | | throttled |
|
||||
| | -- dl_server_stop dl_server_idle +-> | |
|
||||
| | dl_server_idle sched_switch_suspend +---------------+
|
||||
+--------------+ <---------+ ^
|
||||
| |
|
||||
+------ dl_throttle;is_constr_dl == 1 || is_defer == 1 ------+
|
||||
Reference in New Issue
Block a user