forked from mirrors/linux
		
	Documentation/rv: Add docs for the sched monitors
Add man page and kernel documentation for the sched monitors, as sched is a container of other monitors, document all in the same page. sched is the first nested monitor, also explain what is a nested monitor and how enabling containers or children monitors work. To: Ingo Molnar <mingo@redhat.com> To: Peter Zijlstra <peterz@infradead.org> Cc: Juri Lelli <juri.lelli@redhat.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Jonathan Corbet <corbet@lwn.net> Cc: John Kacur <jkacur@redhat.com> Cc: Clark Williams <williams@redhat.com> Link: https://lore.kernel.org/20250305140406.350227-9-gmonaco@redhat.com Signed-off-by: Gabriele Monaco <gmonaco@redhat.com> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
This commit is contained in:
		
							parent
							
								
									2334cf7d09
								
							
						
					
					
						commit
						03abeaa63c
					
				
					 2 changed files with 240 additions and 0 deletions
				
			
		
							
								
								
									
										69
									
								
								Documentation/tools/rv/rv-mon-sched.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								Documentation/tools/rv/rv-mon-sched.rst
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,69 @@ | |||
| .. SPDX-License-Identifier: GPL-2.0 | ||||
| 
 | ||||
| ============ | ||||
| rv-mon-sched | ||||
| ============ | ||||
| ----------------------------- | ||||
| Scheduler monitors collection | ||||
| ----------------------------- | ||||
| 
 | ||||
| :Manual section: 1 | ||||
| 
 | ||||
| SYNOPSIS | ||||
| ======== | ||||
| 
 | ||||
| **rv mon sched** [*OPTIONS*] | ||||
| 
 | ||||
| **rv mon <NESTED_MONITOR>** [*OPTIONS*] | ||||
| 
 | ||||
| **rv mon sched:<NESTED_MONITOR>** [*OPTIONS*] | ||||
| 
 | ||||
| DESCRIPTION | ||||
| =========== | ||||
| 
 | ||||
| The scheduler monitor collection is a container for several monitors to model | ||||
| the behaviour of the scheduler. Each monitor describes a specification that | ||||
| the scheduler should follow. | ||||
| 
 | ||||
| As a monitor container, it will enable all nested monitors and set them | ||||
| according to OPTIONS. | ||||
| Nevertheless nested monitors can also be activated independently both by name | ||||
| and by specifying sched: , e.g. to enable only monitor tss you can do any of: | ||||
| 
 | ||||
|     # rv mon sched:tss | ||||
| 
 | ||||
|     # rv mon tss | ||||
| 
 | ||||
| See kernel documentation for further information about this monitor: | ||||
| <https://docs.kernel.org/trace/rv/monitor_sched.html> | ||||
| 
 | ||||
| OPTIONS | ||||
| ======= | ||||
| 
 | ||||
| .. include:: common_ikm.rst | ||||
| 
 | ||||
| NESTED MONITOR | ||||
| ============== | ||||
| 
 | ||||
| The available nested monitors are: | ||||
|   * scpd: schedule called with preemption disabled | ||||
|   * snep: schedule does not enable preempt | ||||
|   * sncid: schedule not called with interrupt disabled | ||||
|   * snroc: set non runnable on its own context | ||||
|   * sco: scheduling context operations | ||||
|   * tss: task switch while scheduling | ||||
| 
 | ||||
| SEE ALSO | ||||
| ======== | ||||
| 
 | ||||
| **rv**\(1), **rv-mon**\(1) | ||||
| 
 | ||||
| Linux kernel *RV* documentation: | ||||
| <https://www.kernel.org/doc/html/latest/trace/rv/index.html> | ||||
| 
 | ||||
| AUTHOR | ||||
| ====== | ||||
| 
 | ||||
| Written by Gabriele Monaco <gmonaco@redhat.com> | ||||
| 
 | ||||
| .. include:: common_appendix.rst | ||||
							
								
								
									
										171
									
								
								Documentation/trace/rv/monitor_sched.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										171
									
								
								Documentation/trace/rv/monitor_sched.rst
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,171 @@ | |||
| Scheduler monitors | ||||
| ================== | ||||
| 
 | ||||
| - Name: sched | ||||
| - Type: container for multiple monitors | ||||
| - Author: Gabriele Monaco <gmonaco@redhat.com>, Daniel Bristot de Oliveira <bristot@kernel.org> | ||||
| 
 | ||||
| Description | ||||
| ----------- | ||||
| 
 | ||||
| Monitors describing complex systems, such as the scheduler, can easily grow to | ||||
| the point where they are just hard to understand because of the many possible | ||||
| state transitions. | ||||
| Often it is possible to break such descriptions into smaller monitors, | ||||
| sharing some or all events. Enabling those smaller monitors concurrently is, | ||||
| in fact, testing the system as if we had one single larger monitor. | ||||
| Splitting models into multiple specification is not only easier to | ||||
| understand, but gives some more clues when we see errors. | ||||
| 
 | ||||
| The sched monitor is a set of specifications to describe the scheduler behaviour. | ||||
| It includes several per-cpu and per-task monitors that work independently to verify | ||||
| different specifications the scheduler should follow. | ||||
| 
 | ||||
| To make this system as straightforward as possible, sched specifications are *nested* | ||||
| monitors, whereas sched itself is a *container*. | ||||
| From the interface perspective, sched includes other monitors as sub-directories, | ||||
| enabling/disabling or setting reactors to sched, propagates the change to all monitors, | ||||
| however single monitors can be used independently as well. | ||||
| 
 | ||||
| It is important that future modules are built after their container (sched, in | ||||
| this case), otherwise the linker would not respect the order and the nesting | ||||
| wouldn't work as expected. | ||||
| To do so, simply add them after sched in the Makefile. | ||||
| 
 | ||||
| Specifications | ||||
| -------------- | ||||
| 
 | ||||
| The specifications included in sched are currently a work in progress, adapting the ones | ||||
| defined in by Daniel Bristot in [1]. | ||||
| 
 | ||||
| Currently we included the following: | ||||
| 
 | ||||
| Monitor tss | ||||
| ~~~~~~~~~~~ | ||||
| 
 | ||||
| The task switch while scheduling (tss) monitor ensures a task switch happens | ||||
| only in scheduling context, that is inside a call to `__schedule`:: | ||||
| 
 | ||||
|                      | | ||||
|                      | | ||||
|                      v | ||||
|                    +-----------------+ | ||||
|                    |     thread      | <+ | ||||
|                    +-----------------+  | | ||||
|                      |                  | | ||||
|                      | schedule_entry   | schedule_exit | ||||
|                      v                  | | ||||
|     sched_switch                        | | ||||
|   +---------------                      | | ||||
|   |                       sched         | | ||||
|   +-------------->                     -+ | ||||
| 
 | ||||
| Monitor sco | ||||
| ~~~~~~~~~~~ | ||||
| 
 | ||||
| The scheduling context operations (sco) monitor ensures changes in a task state | ||||
| happen only in thread context:: | ||||
| 
 | ||||
| 
 | ||||
|                         | | ||||
|                         | | ||||
|                         v | ||||
|     sched_set_state   +------------------+ | ||||
|   +------------------ |                  | | ||||
|   |                   |  thread_context  | | ||||
|   +-----------------> |                  | <+ | ||||
|                       +------------------+  | | ||||
|                         |                   | | ||||
|                         | schedule_entry    | schedule_exit | ||||
|                         v                   | | ||||
|                                             | | ||||
|                        scheduling_context  -+ | ||||
| 
 | ||||
| Monitor snroc | ||||
| ~~~~~~~~~~~~~ | ||||
| 
 | ||||
| The set non runnable on its own context (snroc) monitor ensures changes in a | ||||
| task state happens only in the respective task's context. This is a per-task | ||||
| monitor:: | ||||
| 
 | ||||
|                         | | ||||
|                         | | ||||
|                         v | ||||
|                       +------------------+ | ||||
|                       |  other_context   | <+ | ||||
|                       +------------------+  | | ||||
|                         |                   | | ||||
|                         | sched_switch_in   | sched_switch_out | ||||
|                         v                   | | ||||
|     sched_set_state                         | | ||||
|   +------------------                       | | ||||
|   |                       own_context       | | ||||
|   +----------------->                      -+ | ||||
| 
 | ||||
| Monitor scpd | ||||
| ~~~~~~~~~~~~ | ||||
| 
 | ||||
| The schedule called with preemption disabled (scpd) monitor ensures schedule is | ||||
| called with preemption disabled:: | ||||
| 
 | ||||
|                        | | ||||
|                        | | ||||
|                        v | ||||
|                      +------------------+ | ||||
|                      |    cant_sched    | <+ | ||||
|                      +------------------+  | | ||||
|                        |                   | | ||||
|                        | preempt_disable   | preempt_enable | ||||
|                        v                   | | ||||
|     schedule_entry                         | | ||||
|     schedule_exit                          | | ||||
|   +-----------------      can_sched        | | ||||
|   |                                        | | ||||
|   +---------------->                      -+ | ||||
| 
 | ||||
| Monitor snep | ||||
| ~~~~~~~~~~~~ | ||||
| 
 | ||||
| The schedule does not enable preempt (snep) monitor ensures a schedule call | ||||
| does not enable preemption:: | ||||
| 
 | ||||
|                         | | ||||
|                         | | ||||
|                         v | ||||
|     preempt_disable   +------------------------+ | ||||
|     preempt_enable    |                        | | ||||
|   +------------------ | non_scheduling_context | | ||||
|   |                   |                        | | ||||
|   +-----------------> |                        | <+ | ||||
|                       +------------------------+  | | ||||
|                         |                         | | ||||
|                         | schedule_entry          | schedule_exit | ||||
|                         v                         | | ||||
|                                                   | | ||||
|                           scheduling_contex      -+ | ||||
| 
 | ||||
| Monitor sncid | ||||
| ~~~~~~~~~~~~~ | ||||
| 
 | ||||
| The schedule not called with interrupt disabled (sncid) monitor ensures | ||||
| schedule is not called with interrupt disabled:: | ||||
| 
 | ||||
|                        | | ||||
|                        | | ||||
|                        v | ||||
|     schedule_entry   +--------------+ | ||||
|     schedule_exit    |              | | ||||
|   +----------------- |  can_sched   | | ||||
|   |                  |              | | ||||
|   +----------------> |              | <+ | ||||
|                      +--------------+  | | ||||
|                        |               | | ||||
|                        | irq_disable   | irq_enable | ||||
|                        v               | | ||||
|                                        | | ||||
|                         cant_sched    -+ | ||||
| 
 | ||||
| References | ||||
| ---------- | ||||
| 
 | ||||
| [1] - https://bristot.me/linux-task-model | ||||
		Loading…
	
		Reference in a new issue
	
	 Gabriele Monaco
						Gabriele Monaco