Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix a few broken references and other warnings in the doc
[simgrid.git] / docs / source / Configuring_SimGrid.rst
index 6ff989b..d420c71 100644 (file)
@@ -67,7 +67,7 @@ with :cpp:func:`simgrid::s4u::Engine::set_config` or :cpp:func:`MSG_config`.
    int main(int argc, char *argv[]) {
      simgrid::s4u::Engine e(&argc, argv);
 
-     e.set_config("Item:Value");
+     simgrid::s4u::Engine::set_config("Item:Value");
 
      // Rest of your code
    }
@@ -87,7 +87,6 @@ Existing Configuration Items
 - **contexts/factory:** :ref:`cfg=contexts/factory`
 - **contexts/guard-size:** :ref:`cfg=contexts/guard-size`
 - **contexts/nthreads:** :ref:`cfg=contexts/nthreads`
-- **contexts/parallel-threshold:** :ref:`cfg=contexts/parallel-threshold`
 - **contexts/stack-size:** :ref:`cfg=contexts/stack-size`
 - **contexts/synchro:** :ref:`cfg=contexts/synchro`
 
@@ -124,6 +123,8 @@ Existing Configuration Items
 - **network/bandwidth-factor:** :ref:`cfg=network/bandwidth-factor`
 - **network/crosstraffic:** :ref:`cfg=network/crosstraffic`
 - **network/latency-factor:** :ref:`cfg=network/latency-factor`
+- **network/loopback-lat:** :ref:`cfg=network/loopback`
+- **network/loopback-bw:** :ref:`cfg=network/loopback`
 - **network/maxmin-selective-update:** :ref:`Network Optimization Level <options_model_optim>`
 - **network/model:** :ref:`options_model_select`
 - **network/optim:** :ref:`Network Optimization Level <options_model_optim>`
@@ -131,6 +132,7 @@ Existing Configuration Items
 - **network/weight-S:** :ref:`cfg=network/weight-S`
 
 - **ns3/TcpModel:** :ref:`options_pls`
+- **ns3/seed:** :ref:`options_pls`
 - **path:** :ref:`cfg=path`
 - **plugin:** :ref:`cfg=plugin`
 
@@ -395,6 +397,16 @@ can be set to 0 (disable this feature) or 1 (enable it).
 
 Note that with the default host model this option is activated by default.
 
+.. _cfg=network/loopback:
+
+Configuring loopback link
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Several network model provide an implicit loopback link to account for local 
+communication on a host. By default it has a 10GBps bandwidth and a null latency.
+This can be changed with ``network/loopback-lat`` and ``network/loopback-bw`` 
+items.
+
 .. _cfg=smpi/async-small-thresh:
 
 Simulating Asynchronous Send
@@ -402,9 +414,9 @@ Simulating Asynchronous Send
 
 (this configuration item is experimental and may change or disappear)
 
-It is possible to specify that messages below a certain size will be
+It is possible to specify that messages below a certain size (in bytes) will be
 sent as soon as the call to MPI_Send is issued, without waiting for
-the correspondant receive. This threshold can be configured through
+the correspondent receive. This threshold can be configured through
 the ``smpi/async-small-thresh`` item. The default value is 0. This
 behavior can also be manually set for mailboxes, by setting the
 receiving mode of the mailbox with a call to
@@ -428,12 +440,21 @@ ns-3. The only valid values (enforced on the SimGrid side) are
 'default' (no change to the ns-3 configuration), 'NewReno' or 'Reno' or
 'Tahoe'.
 
+**Option** ``ns3/seed`` **Default:** "" (don't set the seed in ns-3)
+
+This option is the random seed to provide to ns-3 with
+``ns3::RngSeedManager::SetSeed`` and ``ns3::RngSeedManager::SetRun``.
+
+If left blank, no seed is set in ns-3. If the value 'time' is
+provided, the current amount of seconds since epoch is used as a seed.
+Otherwise, the provided value must be a number to use as a seed.
+
 Configuring the Storage model
 .............................
 
 .. _cfg=storage/max_file_descriptors:
 
-File Descriptor Cound per Host
+File Descriptor Count per Host
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 **Option** ``storage/max_file_descriptors`` **Default:** 1024
@@ -504,10 +525,10 @@ In SMPI, this depends on the message size, that is compared against two threshol
 - if (:ref:`smpi/send-is-detached-thresh <cfg=smpi/send-is-detached-thresh>` < size) then
   MPI_Send returns only when the message has actually been sent over the network. This is known as the rendez-vous mode.
 
-The ``smpi/buffering`` option gives an easier interface to choose between these semantics. It can take two values:
+The ``smpi/buffering`` (only valid with MC) option gives an easier interface to choose between these semantics. It can take two values:
 
-- **zero:** means that buffering should be disabled. Blocking communications are actually blocking.
-- **infty:** means that buffering should be made infinite. Blocking communications are non-blocking.
+- **zero:** means that buffering should be disabled. All communications are actually blocking.
+- **infty:** means that buffering should be made infinite. All communications are non-blocking.
 
 .. _cfg=model-check/property:
 
@@ -519,7 +540,7 @@ Specifying a liveness property
 If you want to specify liveness properties, you have to pass them on
 the command line, specifying the name of the file containing the
 property, as formatted by the `ltl2ba <https://github.com/utwente-fmt/ltl2ba>`_ program.
-Note that ltl2ba is not part of SimGrid and must be installed separatly.
+Note that ltl2ba is not part of SimGrid and must be installed separately.
 
 .. code-block:: shell
 
@@ -615,7 +636,7 @@ If set, the ``model-check/dot-output`` configuration item is the name
 of a file in which to write a dot file of the path leading to the
 property violation discovered (safety or liveness violation), as well
 as the cycle for liveness properties. This dot file can then be fed to the
-graphviz dot tool to generate an corresponding graphical representation.
+graphviz dot tool to generate a corresponding graphical representation.
 
 .. _cfg=model-check/max-depth:
 
@@ -708,7 +729,7 @@ MC-related options, keep non-MC-related ones and add
 Currently, if the path is of the form ``X;Y;Z``, each number denotes
 the actor's pid that is selected at each indecision point. If it's of
 the form ``X/a;Y/b``, the X and Y are the selected pids while the a
-and b are the return values of their simcalls. In the previouse
+and b are the return values of their simcalls. In the previous
 example, ``1/3;1/4``, you can see from the full output that the actor
 1 is doing MC_RANDOM simcalls, so the 3 and 4 simply denote the values
 that these simcall return.
@@ -782,10 +803,16 @@ stacks), leading to segfaults with corrupted stack traces.
 If you want to push the scalability limits of your code, you might
 want to reduce the ``contexts/stack-size`` item. Its default value is
 8192 (in KiB), while our Chord simulation works with stacks as small
-as 16 KiB, for example. This *setting is ignored* when using the
-thread factory. Instead, you should compile SimGrid and your
-application with ``-fsplit-stack``. Note that this compilation flag is
-not compatible with the model checker right now.
+as 16 KiB, for example. You can ensure that some actors have a specific
+size by simply changing the value of this configuration item before
+creating these actors. The :cpp:func:`simgrid::s4u::Engine::set_config` 
+functions are handy for that.
+
+This *setting is ignored* when using the thread factory (because there
+is no way to modify the stack size with C++ system threads). Instead,
+you should compile SimGrid and your application with
+``-fsplit-stack``. Note that this compilation flag is not compatible
+with the model checker right now.
 
 The operating system should only allocate memory for the pages of the
 stack which are actually used and you might not need to use this in
@@ -814,7 +841,6 @@ on other parts of the memory if their size is too small for the
 application.
 
 .. _cfg=contexts/nthreads:
-.. _cfg=contexts/parallel-threshold:
 .. _cfg=contexts/synchro:
 
 Running User Code in Parallel
@@ -832,17 +858,6 @@ run. To activate this, set the ``contexts/nthreads`` item to the amount
 of cores that you have in your computer (or lower than 1 to have the
 amount of cores auto-detected).
 
-Even if you asked several worker threads using the previous option,
-you can request to start the parallel execution (and pay the
-associated synchronization costs) only if the potential parallelism is
-large enough. For that, set the ``contexts/parallel-threshold``
-item to the minimal amount of user contexts needed to start the
-parallel execution. In any given simulation round, if that amount is
-not reached, the contexts will be run sequentially directly by the
-main thread (thus saving the synchronization costs). Note that this
-option is mainly useful when the grain of the user code is very fine,
-because our synchronization is now very efficient.
-
 When parallel execution is activated, you can choose the
 synchronization schema used with the ``contexts/synchro`` item,
 which value is either:
@@ -862,10 +877,10 @@ Configuring the Tracing
 -----------------------
 
 The :ref:`tracing subsystem <outcomes_vizu>` can be configured in
-several different ways depending on the nature of the simulator (MSG,
-SimDag, SMPI) and the kind of traces that need to be obtained. See the
+several different ways depending on the used interface (S4U, SMPI, SimDag)
+and the kind of traces that needs to be obtained. See the
 :ref:`Tracing Configuration Options subsection
-<tracing_tracing_options>` to get a detailed description of each
+<tracing_tracing_options>` for a full description of each
 configuration option.
 
 We detail here a simple way to get the traces working for you, even if
@@ -958,10 +973,16 @@ a ``MPI_Send()``, SMPI will automatically benchmark the duration of
 this code, and create an execution task within the simulator to take
 this into account. For that, the actual duration is measured on the
 host machine and then scaled to the power of the corresponding
-simulated machine. The variable ``smpi/host-speed`` allows one to specify
-the computational speed of the host machine (in flop/s) to use when
-scaling the execution times. It defaults to 20000, but you really want
-to adjust it to get accurate simulation results.
+simulated machine. The variable ``smpi/host-speed`` allows one to
+specify the computational speed of the host machine (in flop/s by
+default) to use when scaling the execution times.
+
+The default value is ``smpi/host-speed=20kf`` (= 20,000 flop/s). This
+is probably underestimated for most machines, leading SimGrid to
+overestimate the amount of flops in the execution blocks that are
+automatically injected in the simulator. As a result, the execution
+time of the whole application will probably be overestimated until you
+use a realistic value.
 
 When the code consists of numerous consecutive MPI calls, the
 previous mechanism feeds the simulation kernel with numerous tiny
@@ -1047,7 +1068,7 @@ The possible throughput of network links is often dependent on the
 message sizes, as protocols may adapt to different message sizes. With
 this option, a series of message sizes and factors are given, helping
 the simulation to be more realistic. For instance, the current default
-value means that messages with size 65472 and more will get a total of
+value means that messages with size 65472 bytes and more will get a total of
 MAX_BANDWIDTH*0.940694, messages of size 15424 to 65471 will get
 MAX_BANDWIDTH*0.697866, and so on (where MAX_BANDWIDTH denotes the
 bandwidth of the link).
@@ -1286,7 +1307,7 @@ values, for example ``1:3:2;10:5:1``.  The sections are divided by ";"
 so this example contains two sections.  Furthermore, each section
 consists of three values.
 
-1. The first value denotes the minimum size for this section to take effect;
+1. The first value denotes the minimum size in bytes for this section to take effect;
    read it as "if message size is greater than this value (and other section has a larger
    first value that is also smaller than the message size), use this".
    In the first section above, this value is "1".
@@ -1379,7 +1400,7 @@ for each shared block.
 With the ``global`` algorithm, each call to SMPI_SHARED_MALLOC()
 returns a new address, but it only points to a shadow block: its memory
 area is mapped on a 1 MiB file on disk. If the returned block is of size
-N MiB, then the same file is mapped N times to cover the whole bloc.
+N MiB, then the same file is mapped N times to cover the whole block.
 At the end, no matter how many times you call SMPI_SHARED_MALLOC, this will
 only consume 1 MiB in memory.
 
@@ -1519,10 +1540,122 @@ the tests: the full file path would makes the tests non-reproducible because
 the paths of source files depend of the build settings. That would
 break most of the tests since their output is continually compared.
 
-Logging Configuration
+.. _logging_config:
+
+Logging configuration
 ---------------------
 
-This can be done by using XBT. Go to :ref:`XBT_log` for more details.
+As introduced in :ref:`outcome_logs`, the SimGrid logging mechanism allows to configure at runtime the messages that should be displayed and those that should be omitted. Each
+message produced in the code is given a category (denoting its topic) and a priority. Then at runtime, each category is given a threshold (only messages of priority higher than
+that threshold are displayed), a layout (deciding how the messages in this category are formatted), and an appender (deciding what to do with the message: either print on stderr or
+to a file).
+
+This section explains how to configure this logging features. You can also refer to the documentation of the :ref:`programmer's interface <logging_prog>`, that allows to produce
+messages from your code.
+
+Most of the time, the logging mechanism is configured at runtime using the ``--log`` command-line argument, even if you can also use :c:func:`xbt_log_control_set()` to control it from
+your program. To pass configure more than one setting, you can either pass several ``--log`` arguments, or separate your settings with spaces, that must be quoted accordingly. In
+practice, the following is equivalent to the above settings: ``--log=root.thresh:error --log=s4u_host.thresh:debug``.
+
+If you want to specify more than one setting, you can either pass several ``--log`` argument to your program as above, or separate them with spaces. In this case, you want to quote
+your settings, as in ``--log="root.thresh:error s4u_host.thresh:debug"``. The parameters are interpreted in order, from left to right.
+
+
+Threshold configuration
+.......................
+
+The keyword ``threshold`` controls which logging event will get displayed in a given category. For example, ``--log=root.threshold:debug`` displays *every* message produced in the
+``root`` category and its subcategories (i.e., every message produced -- this is *extremely* verbose), while ``--log=root.thres:critical`` turns almost everything off. As you can
+see, ``threshold`` can be abbreviated here.
+
+Existing thresholds:
+
+ - ``trace`` some functions display a message at this level when entering or returning
+ - ``debug`` output that is mostly useful when debugging the corresponding module.
+ - ``verbose`` verbose output that is only mildly interesting and can easily be ignored
+ - ``info`` usual output (this is the default threshold of all categories)
+ - ``warning`` minor issue encountered
+ - ``error`` issue encountered
+ - ``critical`` major issue encountered, such as assertions failures
+
+.. _log/fmt:
+
+Format configuration
+....................
+
+The keyword ``fmt`` controls the layout (the format) of a logging category. For example, ``--log=root.fmt:%m`` reduces the output to the user-message only, removing any decoration such
+as the date, or the actor ID, everything. Existing format directives:
+
+ - %%: the % char
+ - %n: line separator (LOG4J compatible)
+ - %e: plain old space (SimGrid extension)
+
+ - %m: user-provided message
+
+ - %c: Category name (LOG4J compatible)
+ - %p: Priority name (LOG4J compatible)
+
+ - %h: Hostname (SimGrid extension)
+ - %a: Actor name (SimGrid extension -- note that with SMPI this is the integer value of the process rank)
+ - %i: Actor PID (SimGrid extension -- this is a 'i' as in 'i'dea)
+ - %t: Thread "name" (LOG4J compatible -- actually the address of the thread in memory)
+
+ - %F: file name where the log event was raised (LOG4J compatible)
+ - %l: location where the log event was raised (LOG4J compatible, like '%%F:%%L' -- this is a l as in 'l'etter)
+ - %L: line number where the log event was raised (LOG4J compatible)
+ - %M: function name (LOG4J compatible -- called method name here of course).
+
+ - %d: date (UNIX-like epoch)
+ - %r: application age (time elapsed since the beginning of the application)
+
+
+``--log=root.fmt:'[%h:%a:(%i) %r] %l: %m%n'`` gives you the default layout used for info messages while ``--log=root.fmt:'[%h:%a:(%i) %r] %l: [%c/%p] %m%n'`` gives you the default
+layout for the other priorities (it adds the source code location). Also, the actor identification is omitted by the default layout for the messages coming directly from the
+SimGrid kernel, so info messages are formatted with ``[%r] [%c/%p] %m%n`` in this case. When specifying the layout manually, such distinctions are currently impossible, and the
+provided layout is used for every messages.
+
+As with printf, you can specify the precision and width of the fields. For example, ``%.4r`` limits the date precision to four digits while ``%15h`` limits the host name to at most
+15 chars.
+
+
+If you want to have spaces in your log format, you should protect it. Otherwise, SimGrid will consider that this is a space-separated list of several parameters. But you should
+also protect it from the shell that also splits command line arguments on spaces. At the end, you should use something such as ``--log="'root.fmt:%l: [%p/%c]: %m%n'"``. 
+Another option is to use the ``%e`` directive for spaces, as in ``--log=root.fmt:%l:%e[%p/%c]:%e%m%n``. 
+
+Category appender
+.................
+
+The keyword ``app`` controls the appended of a logging category. For example ``--log=root.app:file:mylogfile`` redirects every output to the file ``mylogfile``.
+
+With the ``splitfile`` appender, a new file is created when the size of the output reaches the specified size. The format is ``--log=root.app:splitfile:<size>:<file name>``. For
+example, ``--log=root.app:splitfile:500:mylog_%`` creates log files of at most 500 bytes, using the names ``mylog_0``, ``mylog_1``, ``mylog_2``, etc.
+
+The ``rollfile`` appender uses one file only, but the file is emptied and recreated when its size reaches the specified maximum. For example, ``--log=root.app:rollfile:500:mylog``
+ensures that the log file ``mylog`` will never overpass 500 bytes in size.
+
+Any appender setup this way have its own layout format, that you may change afterward. When specifying a new appender, its additivity is set to false to prevent log event displayed
+by this appender to "leak" to any other appender higher in the hierarchy. You can naturally change that if you want your messages to be displayed twice.
+
+Category additivity
+...................
+
+The keyword ``add`` controls the additivity of a logging category. By default, the messages are only passed one appender only: the more specific, i.e. the first one found when
+climbing the tree from the category in which they were produced. In Log4J parlance, it is said that the default additivity of appenders is false. If you change this setting to
+``on`` (or ``yes`` or ``1``), the produced messages will also be passed to the upper appender.
+
+Let's consider a more complex example: ``--log="root.app:file:all.log s4u.app:file:iface.log xbt.app:file:xbt.log xbt.add:yes``. Here, the logging of s4u will be sent to the
+``iface.log`` file; the logging of the xbt toolbox will be sent to both the ``xbt.log`` file and the ``all.log`` file (because xbt additivity was enabled); and every other loggings
+will only be sent to ``all.log``.
+
+Other options
+.............
+
+``--help-logs`` displays a complete help message about logging in SimGrid.
+
+``--help-log-categories`` displays the actual hierarchy of log categories for this binary.
+
+``--log=no_loc`` hides the source locations (file names and line numbers) from the messages. This is useful to make tests reproducible.
+
 
 .. |br| raw:: html