Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add dummy instruction to please sonar.
[simgrid.git] / examples / msg / README.doc
index 0eaa34f..0cd0792 100644 (file)
@@ -1,28 +1,27 @@
-This file follows the Doxygen syntax to be included in the documentation.
+This file follows the Doxygen syntax to be included in the
+documentation, but it should remain readable directly.
 
 /** 
- @defgroup MSG_examples MSG examples
+ @defgroup msg_examples MSG examples
  @ingroup MSG_API
  @brief Find the MSG example fitting your needs from the extensive set provided in the archive.
 
-  - @ref msg_ex_basic
-  - @ref msg_ex_async
+  - @ref msg_ex_basics
   - @ref msg_ex_process
   - @ref msg_ex_tracing
-  - @ref msg_ex_tracing_user_variables
+    - @ref msg_ex_tracing_user_variables
   - @ref msg_ex_models
-  - @ref msg_ex_io
-  - @ref msg_ex_actions
-  - @ref msg_ex_full_apps
+    - @ref msg_ex_ns3
+  - @ref msg_ex_apps
   - @ref msg_ex_misc
-                   
-@section msg_ex_basic Basic examples and features
+
+@section msg_ex_basics Basic examples and features
 
  - <b>Ping Pong</b>: @ref examples/msg/app-pingpong/app-pingpong.c\n
    It's hard to think of a simpler example: it is just sending one
    message back and forth.  
    The tesh file laying in the directory show how to start the
-   simulator binary, enlighting how to pass options to the simulators
+   simulator binary, highlighting how to pass options to the simulators
    (as detailed in Section \ref options). 
 
  - <b>Token Ring</b>.
@@ -36,148 +35,139 @@ This file follows the Doxygen syntax to be included in the documentation.
    @ref examples/msg/app-masterworker/app-masterworker.c\n
    Another good old example, where one Master process has a bunch of
    task to dispatch to a set of several Worker processes. It is fully
-   commented in @ref MSG_ex_master_worker.
+   commented in @ref msg_ex_master_worker.
+
+@section msg_ex_process Acting on Processes
+
+  - <b>Creating processes</b>. 
+    @ref examples/msg/process-create/process-create.c \n
+    Most processes are started from the deployment XML file, but they
+    can also be used with the @ref MSG_process_create() function.
+
+@section msg_ex_tracing Tracing and visualization features
+
+Tracing can be activated by various configuration options which
+are illustrated in these example. See also the 
+@ref tracing_tracing_options "full list of options related to tracing".
+
+It is interesting to run the process-create example with the following
+options to see the task executions:
+
+  - <b>Platform tracing</b>.
+    @ref examples/msg/trace-platform/trace-platform.c \n
+    This program is a toy example just loading the platform, so that
+    you can play with the platform visualization. Recommanded options:
+    @verbatim --cfg=tracing:yes --cfg=tracing/categorized:yes
+    @endverbatim
+
+  - <b>Setting Categories</b>.
+    @ref examples/msg/trace-categories/trace-categories.c \n
+    This example declares several tracing categories
+    to that are used to classify its tasks. When the program is executed,
+    the tracing mechanism registers the resource utilization of hosts
+    and links according to these categories. Recommanded options:
+    @verbatim --cfg=tracing:yes --cfg=tracing/categorized:yes --cfg=tracing/uncategorized:yes
+    @endverbatim
+    
+  - <b>Master Workers tracing</b>.
+    @ref examples/msg/trace-masterworker/trace-masterworker.c \n
+    This is an augmented version of our basic master/worker example
+    using several tracing features. It traces resource usage, sorted
+    out in several categories; Trace marks and user variables are also
+    used. Recommanded options:
+    @verbatim --cfg=tracing/categorized:yes --cfg=tracing/uncategorized:yes
+    @endverbatim
+    
+  - <b>Process migration tracing</b>.
+    @ref examples/msg/trace-process-migration/trace-process-migration.c \n
+    This version is enhanced so that the process migrations can be
+    displayed as arrows in a Gantt-chart visualization. Recommanded
+    options to that extend:
+    @verbatim -cfg=tracing:yes --cfg=tracing/msg/process:yes
+    @endverbatim 
+    
+TODO: These tracing examples should be integrated in the examples to
+not duplicate the C files. A full command line to see the result in
+the right tool (vite/FrameSoc) should be given along with some
+screenshots.
+
+@subsection msg_ex_tracing_user_variables Tracing user variables
+
+You can also attach your own variables to a any resource described in
+the platform file. The following examples illustrate this feature.
+They have to be run with the following options:
+@verbatim --cfg=tracing:yes --cfg=tracing/platform:yes
+@endverbatim
+
+  - <b>Attaching variables to Hosts</b>.
+    @ref examples/msg/trace-host-user-variables/trace-host-user-variables.c 
+
+  - <b>Attaching variables to Links</b>.
+    @ref examples/msg/trace-link-user-variables/trace-link-user-variables.c \n
+    The tricky part is that you have to know the name of the link you
+    want to enhance with a variable.
+
+  - <b>Attaching variables to network Routes</b>
+    @ref examples/msg/trace-route-user-variables/trace-route-user-variables.c \n
+    It is often easier to update a given variable for all links of a
+    given network path (identified by its source and destination
+    hosts) instead of knowing the name of each specific link.
+
+@section msg_ex_models Models-related examples
+
+@subsection msg_ex_ns3 NS3 as a SimGrid Network Model
+
+This example demonstrates how to use the bindings to the Network
+Simulator, as explained in @ref pls_ns3. The most
+interesting is probably not the C files since they are unchanged from
+the other simulations, but the associated files, such as the platform
+file to see how to declare a platform to be used with the ns-3 bindings
+of SimGrid and the tesh file to see how to actually start a simulation
+in these settings.
+  
+  - @ref examples/msg/network-ns3/network-ns3.c. Simple ping-pong using
+    ns-3 instead of the SimGrid network models.
 
-@section msg_ex_async Asynchronous communications
+TODO: merge the C files
 
-In addition to the fully documented example of @ref
-MSG_ex_asynchronous_communications, there are several other examples
-shipped in the archive:
-  
- - <b>Basic asynchronous communications</b>. 
-   @ref examples/msg/async-wait/async-wait.c \n
-   Illustrates how to have non-blocking communications, that are
-   communications running in the background leaving the process free
-   to do something else during their completion. The main functions
-   involved are @ref MSG_task_isend, @ref MSG_task_irecv, and @ref
-   MSG_comm_wait.
- - <b>Waiting for all communications in a set</b>.
-   @ref examples/msg/async-waitall/async-waitall.c\n
-   The @ref MSG_comm_waitall function is useful when you want to block
-   until all activities in a given set have completed.
-   
- - <b>Waiting for the first completed communication in a set</b>.
-   @ref examples/msg/async-waitall/async-waitany.c\n
-   The @ref MSG_comm_waitany function is useful when you want to block
-   until one activity of the set completes, no matter which terminates
-   first.
+TODO: show the XML files instead if it's what is interesting. On a "XML example files" page that does not exist yet.
+
+@section msg_ex_misc Miscellaneous
 
+ - <b>Task priorities</b>.
+   @ref examples/msg/task-priority/task-priority.c \n
+   Demonstrates the use of @ref MSG_task_set_priority to change the
+   computation priority of  a given task.
+TODO: Document the many other examples that we have 
 */
 
 As a human, you can stop reading at this point. The rest is garbage:
 
 Every example must be listed in the following, but it's not possible
-to move this content upper as each example directive seems to eat the
-next doxygen commands. 
+to move this content upper as each @example directive seems to eat
+everything until the next */ marker (and the content is placed at the
+top of the example file). 
 
 
 /**
-@defgroup MSG_ex_examples ignored
-@example examples/msg/app-pingpong/app-pingpong.c        
-@example examples/msg/app-token-ring/app-token-ring.c    
+@example examples/msg/app-pingpong/app-pingpong.c
+@example examples/msg/app-token-ring/app-token-ring.c
 @example examples/msg/app-masterworker/app-masterworker.c
 
-@example examples/msg/async-wait/async-wait.c
-@example examples/msg/async-waitall/async-waitall.c
-@example examples/msg/async-waitall/async-waitany.c
-*/
+@example examples/msg/process-create/process-create.c
+
+@example examples/msg/trace-platform/trace-platform.c
+@example examples/msg/trace-categories/trace-categories.c
+@example examples/msg/trace-masterworker/trace-masterworker.c
+@example examples/msg/trace-process-migration/trace-process-migration.c
+@example examples/msg/trace-host-user-variables/trace-host-user-variables.c
+@example examples/msg/trace-link-user-variables/trace-link-user-variables.c
+@example examples/msg/trace-route-user-variables/trace-route-user-variables.c
 
-Basic examples and features
-===========================
-
- * migration/migration.c Demonstrates how to use the
-   MSG_process_migrate() function to let processes change the host
-   they run on after their start.
-
- * suspend/suspend.c: Demonstrates how to suspend and resume processes
-   using MSG_process_suspend() and MSG_process_resume().
-
- * properties/msg_prop.c Attaching arbitrary information to host,
-   processes and such, and retrieving them with
-   MSG_host_get_properties(), MSG_host_get_property_value(),
-   MSG_process_get_properties() and MSG_process_get_property_value().
-   Also make sure to read the platform and deployment XML files to see
-   how to declare these data.
-
- * parallel_task/parallel_task.c: Demonstrates the use of
-   MSG_parallel_task_create(), to create special tasks that run on
-   several hosts at the same time. The resulting simulations are very
-   close to what can be achieved in SimDag, but still allows to use
-   the other features of MSG (it'd be cool to be able to mix
-   interfaces, but it's not possible ATM).
-
- * priority/priority.c: Demonstrates the use of
-   MSG_task_set_priority() to change the computation priority of a
-   given task.
-
-Tracing and visualization features
-==================================
- * tracing/simple.c very simple program that creates, executes and
-   destroy a task
- * tracing/ms.c TODO
- * tracing/categories.c example with the declaration of multiple
-   categories
- * tracing/procmig.c example to trace process migration using the mask
-   TRACE_PROCESS
- * tracing/trace_platform.c: Demonstrates how to trace the platform
- * tracing/user_variables.c: Demonstrates how to trace user-provided
-   variables
-
-Models-related examples
-=======================
-
-Packet level simulators
------------------------
-These examples demonstrate how to use the bindings to classical
-Packet-Level Simulators (PLS), as explained in the relevant part of
-the web documentation. The most interesting is probably not the C
-files since they are unchanged from the other simulations, but the
-associated files, such as the platform files to see how to declare a
-platform to be used with the PLS bindings of SimGrid and the tesh
-files to see how to actually start a simulation in these settings.
-   
- * ns3: Simple ping-pong using ns3 instead of the SimGrid models
- * gtnets Simple ping-pong using GTNeTs instead of the SimGrid models
-
-Other resource kinds
---------------------
-This section contains some sparse examples of how to use the other
-kind of resources, such as disk. These resources are quite
-experimental for now, but here we go anyway. 
-
- * io/file.c Example with the disk resource
-
-Trace driven simulations
-========================
-
-The actions/actions.c example demonstrates how to run trace-driven
-simulations. It is very handy when you want to test an algorithm or
-protocol that does nothing unless it receives some events from
-outside. For example, a P2P protocol reacts to requests from the user,
-but does nothing if there is no such event.
-
-In such situations, SimGrid allows to write your protocol in your C
-file, and the events to react to in a separate text file. Declare a
-function handling each of the events that you want to accept in your
-trace files, register them using MSG_action_register in your main, and
-then use MSG_action_trace_run to launch the simulation. You can either
-have one trace file containing all your events, or a file per
-simulated process. Check the tesh files in the example directory for
-details on how to do it.
-
-This example uses this approach to replay MPI-like traces. It comes
-with a set of event handlers reproducing MPI events. This is somehow
-similar to SMPI, yet differently implemented. This code should
-probably be changed to use SMPI internals instead, but wasn't, so far.
-
-Examples of full applications
-=============================
-
- * chord/chord.c: Classical Chord P2P protocol This example implements
-   the well known Chord P2P protocol. Its main advantage is that it
-   constitute a fully working non-trivial example. In addition, its
-   implementation is rather efficient, as demonstrated in
-   [57]http://hal.inria.fr/inria-00602216/
+@example examples/msg/network-ns3/network-ns3.c
 
+@example examples/msg/task-priority/task-priority.c
+
+*/