Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[mc] Marh the model-check/snapshot_fds option as disabled
[simgrid.git] / doc / doxygen / options.doc
index 402e447..5e3df6a 100644 (file)
@@ -306,6 +306,7 @@ be executed with the command line argument
 \verbatim
 --cfg=model-check:1
 \endverbatim
+
 Safety properties are expressed as assertions using the function
 \verbatim
 void MC_assert(int prop);
@@ -370,20 +371,119 @@ Of course, specifying a reduction technique enables the model-checking
 so that you don't have to give <tt>--cfg=model-check:1</tt> in
 addition.
 
+\subsection options_modelchecking_timeout Handling of timeout
+
+By default, the model-checker does not handle timeout conditions: the `wait`
+operations never time out. With the \b model-check/timeout configuration item
+set to \b yes, the model-checker will explore timeouts of `wait` operations.
+
+\subsection options_modelchecking_comm_determinism Communication determinism
+
+The \b model-check/communications_determinism and
+\b model-check/send_determinism items can be used to select the communication
+determinism mode of the model-checker which checks determinism properties of
+the communications of an application.
+
+\subsection options_modelchecking_sparse_checkpoint Per page checkpoints
+
+When the model-checker is configured to take a snapshot of each explored state
+(with the \b model-checker/visited item), the memory consumption can rapidly
+reach GiB ou Tib of memory. However, for many workloads, the memory does not
+change much between different snapshots and taking a complete copy of each
+snapshot is a waste of memory.
+
+The \b model-check/sparse-checkpoint option item can be set to \b yes in order
+to avoid making a complete copy of each snapshot: instead, each snapshot will be
+decomposed in blocks which will be stored separately.
+If multiple snapshots share the same block (or if the same block
+is used in the same snapshot), the same copy of the block will be shared leading
+to a reduction of the memory footprint.
+
+For many applications, this option considerably reduces the memory consumption.
+In somes cases, the model-checker might be slightly slower because of the time
+taken to manage the metadata about the blocks. In other cases however, this
+snapshotting strategy will be much faster by reducing the cache consumption.
+When the memory consumption is important, by avoiding to hit the swap or
+reducing the swap usage, this option might be much faster than the basic
+snapshotting strategy.
+
+This option is currently disabled by default.
+
 \subsection options_mc_perf Performance considerations for the model checker
 
 The size of the stacks can have a huge impact on the memory
-consumption when using model-checking. Currently each snapshot, will
-save a copy of the whole stack and not only of the part which is
+consumption when using model-checking. By default, each snapshot will
+save a copy of the whole stacks and not only of the part which is
 really meaningful: you should expect the contribution of the memory
 consumption of the snapshots to be \f$ \mbox{number of processes}
 \times \mbox{stack size} \times \mbox{number of states} \f$.
 
-However, when compiled against the model checker, the stacks are not
+The \b model-check/sparse-checkpoint can be used to reduce the memory
+consumption by trying to share memory between the different snapshots.
+
+When compiled against the model checker, the stacks are not
 protected with guards: if the stack size is too small for your
 application, the stack will silently overflow on other parts of the
 memory.
 
+\subsection options_modelchecking_hash Hashing of the state (experimental)
+
+Usually most of the time of the model-checker is spent comparing states. This
+process is complicated and consumes a lot of bandwidth and cache.
+In order to speedup the state comparison, the experimental \b model-checker/hash
+configuration item enables the computation of a hash summarizing as much
+information of the state as possible into a single value. This hash can be used
+to avoid most of the comparisons: the costly comparison is then only used when
+the hashes are identical.
+
+Currently most of the state is not included in the hash because the
+implementation was found to be buggy and this options is not as useful as
+it could be. For this reason, it is currently disabled by default.
+
+\subsection options_recordreplay Record/replay (experimental)
+
+As the model-checker keeps jumping at different places in the execution graph,
+it is difficult to understand what happens when trying to debug an application
+under the model-checker. Event the output of the program is difficult to
+interpret. Moreover, the model-checker does not behave nicely with advanced
+debugging tools such as valgrind. For those reason, to identify a trajectory
+in the execution graph with the model-checker and replay this trajcetory and
+without the model-checker black-magic but with more standard tools
+(such as a debugger, valgrind, etc.). For this reason, Simgrid implements an
+experimental record/replay functionnality in order to record a trajectory with
+the model-checker and replay it without the model-checker.
+
+When the model-checker finds an interesting path in the application execution
+graph (where a safety or liveness property is violated), it can generate an
+identifier for this path. In order to enable this behavious the
+\b model-check/record must be set to \b yes. By default, this behaviour is not
+enabled.
+
+This is an example of output:
+
+<pre>
+[  0.000000] (0:@) Check a safety property
+[  0.000000] (0:@) **************************
+[  0.000000] (0:@) *** PROPERTY NOT VALID ***
+[  0.000000] (0:@) **************************
+[  0.000000] (0:@) Counter-example execution trace:
+[  0.000000] (0:@) Path = 1/3;1/4
+[  0.000000] (0:@) [(1)Tremblay (app)] MC_RANDOM(3)
+[  0.000000] (0:@) [(1)Tremblay (app)] MC_RANDOM(4)
+[  0.000000] (0:@) Expanded states = 27
+[  0.000000] (0:@) Visited states = 68
+[  0.000000] (0:@) Executed transitions = 46
+</pre>
+
+This path can then be replayed outside of the model-checker (and even in
+non-MC build of simgrid) by setting the \b model-check/replay item to the given
+path. The other options should be the same (but the model-checker should
+be disabled).
+
+The format and meaning of the path may change between different releases so
+the same release of Simgrid should be used for the record phase and the replay
+phase.
+
 \section options_virt Configuring the User Process Virtualization
 
 \subsection options_virt_factory Selecting the virtualization factory
@@ -582,7 +682,7 @@ To disable the benchmarking/simulation of computation in the simulated
 application, the variable \b
 smpi/simulation_computation should be set to no
 
-\subsection options_smpi_bw_factor smpi/bw_factor: Bandwidth factors
+\subsection options_model_smpi_bw_factor smpi/bw_factor: Bandwidth factors
 
 The possible throughput of network links is often dependent on the
 message sizes, as protocols may adapt to different message sizes. With
@@ -609,7 +709,22 @@ to 1, \c smpirun will display this information when the simulation ends. \verbat
 Simulation time: 1e3 seconds.
 \endverbatim
 
-\subsection options_smpi_global Automatic privatization of global variables
+\subsection options_model_smpi_lat_factor smpi/lat_factor: Latency factors
+
+The motivation and syntax for this option is identical to the motivation/syntax
+of smpi/bw_factor, see \ref options_model_smpi_bw_factor for details.
+
+There is an important difference, though: While smpi/bw_factor \a reduces the
+actual bandwidth (i.e., values between 0 and 1 are valid), latency factors
+increase the latency, i.e., values larger than or equal to 1 are valid here.
+
+This is the default value:
+
+\verbatim
+65472:11.6436;15424:3.48845;9376:2.59299;5776:2.18796;3484:1.88101;1426:1.61075;732:1.9503;257:1.95341;0:2.01467
+\endverbatim
+
+\subsection options_smpi_global smpi/privatize_global_variables: Automatic privatization of global variables
 
 MPI executables are meant to be executed in separated processes, but SMPI is
 executed in only one process. Global variables from executables will be placed
@@ -656,6 +771,61 @@ simulate the behavior of most of the existing MPI libraries. The \b smpi/coll_se
 uses naive version of collective operations). Each collective operation can be manually selected with a
 \b smpi/collective_name:algo_name. Available algorithms are listed in \ref SMPI_collective_algorithms .
 
+\subsection options_model_smpi_iprobe smpi/iprobe: Inject constant times for calls to MPI_Iprobe
+
+\b Default value: 0.0001
+
+The behavior and motivation for this configuration option is identical with \a smpi/test, see
+Section \ref options_model_smpi_test for details.
+
+\subsection options_model_smpi_test smpi/test: Inject constant times for calls to MPI_Test
+
+\b Default value: 0.0001
+
+By setting this option, you can control the amount of time a process sleeps
+when MPI_Test() is called; this is important, because SimGrid normally only
+advances the time while communication is happening and thus,
+MPI_Test will not add to the time, resulting in a deadlock if used as a
+break-condition.
+
+Here is an example:
+
+\code{.unparsed}
+    while(!flag) {
+        MPI_Test(request, flag, status);
+        ...
+    }
+\endcode
+
+\note
+    Internally, in order to speed up execution, we use a counter to keep track
+    on how often we already checked if the handle is now valid or not. Hence, we
+    actually use counter*SLEEP_TIME, that is, the time MPI_Test() causes the process
+    to sleep increases linearly with the number of previously failed testk.
+
+
+\subsection options_model_smpi_wtime smpi/wtime: Inject constant times for calls to MPI_Wtime
+
+\b Default value: 0
+
+By setting this option, you can control the amount of time a process sleeps
+when MPI_Wtime() is called; this is important, because SimGrid normally only
+advances the time while communication is happening and thus,
+MPI_Wtime will not add to the time, resulting in a deadlock if used as a
+break-condition.
+
+Here is an example:
+
+\code{.unparsed}
+    while(MPI_Wtime() < some_time_bound) {
+        ...
+    }
+\endcode
+
+If the time is never advanced, this loop will clearly never end as MPI_Wtime()
+always returns the same value. Hence, pass a (small) value to the smpi/wtime
+option to force a call to MPI_Wtime to advance the time as well.
+
 
 \section options_generic Configuring other aspects of SimGrid
 
@@ -726,7 +896,7 @@ silently overflow on other parts of the memory.
   for the moment (May 2015).
 
 \note
-  \b Please \b note: You can also pass the command-line option "\b--help" and
+  \b Please \b note: You can also pass the command-line option "\b --help" and
      "--help-cfg" to an executable that uses simgrid.
 
 - \c clean_atexit: \ref options_generic_clean_atexit
@@ -754,15 +924,15 @@ silently overflow on other parts of the memory.
 - \c model-check: \ref options_modelchecking
 - \c model-check/checkpoint: \ref options_modelchecking_steps
 - \c model-check/communications_determinism: \ref options_modelchecking_comm_determinism
+- \c model-check/communications_determinism: \ref options_modelchecking_send_determinism
 - \c model-check/dot_output: \ref options_modelchecking_dot_output
 - \c model-check/hash: \ref options_modelchecking_hash
 - \c model-check/property: \ref options_modelchecking_liveness
 - \c model-check/max_depth: \ref options_modelchecking_max_depth
-- \c model-check/record: \ref options_modelchecking_record
+- \c model-check/record: \ref options_modelchecking_recordreplay
 - \c model-check/reduction: \ref options_modelchecking_reduction
-- \c model-check/replay: \ref options_modelchecking_replay
+- \c model-check/replay: \ref options_modelchecking_recordreplay
 - \c model-check/send_determinism: \ref options_modelchecking_sparse_checkpoint
-- \c model-check/snapshot_fds: \ref options_modelchecking_snapshot_fds
 - \c model-check/sparse-checkpoint: \ref options_modelchecking_sparse_checkpoint
 - \c model-check/termination: \ref options_modelchecking_termination
 - \c model-check/timeout: \ref options_modelchecking_timeout