X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/adb524c4eae6ae92ecdb6eeb0167e6194eb149b6..5e472a6023eb14e7396b16fa4eb47c805d8f4acf:/examples/msg/README.doc diff --git a/examples/msg/README.doc b/examples/msg/README.doc index 9fc8e910e8..0e5654a04c 100644 --- a/examples/msg/README.doc +++ b/examples/msg/README.doc @@ -2,28 +2,28 @@ 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_basics - @ref msg_ex_async - @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_io + - @ref msg_ex_apps - @ref msg_ex_misc - -@section msg_ex_basic Basic examples and features + +@section msg_ex_basics Basic examples and features - Ping Pong: @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). - Token Ring. @@ -37,7 +37,7 @@ documentation, but it should remain readable directly. @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_async Asynchronous communications @@ -59,13 +59,18 @@ shipped in the archive: until all activities in a given set have completed. - Waiting for the first completed communication in a set. - @ref examples/msg/async-waitall/async-waitany.c\n + @ref examples/msg/async-waitany/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. - + @section msg_ex_process Acting on Processes + - Creating processes. + @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. + - Suspend and Resume processes. @ref examples/msg/process-suspend/process-suspend.c \n Processes can be suspended and resumed during their executions @@ -79,6 +84,12 @@ shipped in the archive: @ref examples/msg/process-migration/process-migration.c \n Processes can move or be moved from a host to another with the @ref MSG_process_migrate function. + - Yielding to other processes. + @ref examples/msg/process-yield/process-yield.c\n + The @ref MSG_process_yield function interrupts the execution of the + current process, leaving a chance to run to the other processes + that are ready to run at the exact same timestamp + - Controling the process life cycle from the XML. @ref examples/msg/process-startkilltime/process-startkilltime.c \n You can specify a start time and a kill time in the deployment @@ -90,189 +101,164 @@ 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". - - Basic example. @ref examples/msg/trace-simple/trace-simple.c \n - In this very simple program, each process creates, executes, - and destroy a task. You might want to run it with the - --cfg=tracing/uncategorized:yes option. +It is interesting to run the process-create example with the following +options to see the task executions: - Platform tracing. @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 --cfg=tracing:yes and - --cfg=tracing/categorized:yes options and visualize the - result. + you can play with the platform visualization. Recommanded options: + @verbatim --cfg=tracing:yes --cfg=tracing/categorized:yes + @endverbatim - Setting Categories. @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.\n - You want to run this program with the following options: - --cfg=tracing:yes, --cfg=tracing/categorized:yes, - --cfg=tracing/uncategorized:yes, --cfg=viva/categorized:viva_cat.plist, and - --cfg=viva/uncategorized:viva_uncat.plist. - + and links according to these categories. Recommanded options: + @verbatim --cfg=tracing:yes --cfg=tracing/categorized:yes --cfg=tracing/uncategorized:yes --cfg=viva/categorized:viva_cat.plist --cfg=viva/uncategorized:viva_uncat.plist + @endverbatim + - Master Workers tracing. + @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 --cfg=viva/categorized:viva_cat.plist --cfg=viva/uncategorized:viva_uncat.plist + @endverbatim -@example examples/msg/trace-masterworker/trace-masterworker.c -@example examples/msg/trace-process-migration/trace-process-migration.c -@example examples/msg/trace-user-variables/trace-user-variables.c -@example examples/msg/trace-link-user-variables/trace-link-user-variables.c -@example examples/msg/trace-link-srcdst-user-variables/trace-link-srcdst-user-variables.c -@example examples/msg/network-ns3/network-ns3.c -@example examples/msg/io-storage/io-storage.c -@example examples/msg/io-file/io-file.c -@example examples/msg/io-remote/io-remote.c -@example examples/msg/actions-comm/actions-comm.c -@example examples/msg/actions-storage/actions-storage.c -@example examples/msg/app-pmm/app-pmm.c -@example examples/msg/dht-chord -@example examples/msg/task-priority/task-priority.c -@example examples/msg/properties/properties.c + - Process migration tracing. + @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 (viva/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 + + - Attaching variables to Hosts. + @ref examples/msg/trace-host-user-variables/trace-host-user-variables.c + + - Attaching variables to Links. + @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. + + - Attaching variables to network Routes + @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. + +TODO: merge the C files + +TODO: show the XML files instead if it's what is interesting. On a "XML example files" page that does not exist yet. + +@subsection msg_ex_io Simulating disks and files +The examples of this section demonstrate how to interact with the +simulated storages. + + - Basic example. + @ref examples/msg/io-storage/io-storage.c \n + All main storage and file functions are demoed. + + - File Management. @ref examples/msg/io-file/io-file.c \n + This example illustrates the use of operations on file + (@ref MSG_file_open, @ref MSG_file_read, @ref MSG_file_write, + or @ref MSG_file_close). + + - Remote I/O. @ref examples/msg/io-remote/io-remote.c \n + I/O operations can also be done in a remote, i.e. when the + accessed disk is not mounted on the caller's host. + +@section msg_ex_misc Miscellaneous + + - Task priorities. + @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. + + - User-defined properties. + @ref examples/msg/platform-properties/platform-properties.c \n + Attaching arbitrary information to host, processes and + such, and retrieving them with @ref MSG_host_get_properties, + @ref MSG_host_get_property_value, @ref MSG_process_get_properties, and + @ref MSG_process_get_property_value. Also make sure to read the + platform and deployment XML files to see how to declare these data. + +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 (and the content is placed at the top of the -example file). +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/async-waitany/async-waitany.c +@example examples/msg/async-yield/async-yield.c +@example examples/msg/process-create/process-create.c @example examples/msg/process-suspend/process-suspend.c @example examples/msg/process-kill/process-kill.c @example examples/msg/process-migration/process-migration.c @example examples/msg/process-startkilltime/process-startkilltime.c -@example examples/msg/trace-simple/trace-simple.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-user-variables/trace-user-variables.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-link-srcdst-user-variables/trace-link-srcdst-user-variables.c +@example examples/msg/trace-route-user-variables/trace-route-user-variables.c @example examples/msg/network-ns3/network-ns3.c + @example examples/msg/io-storage/io-storage.c @example examples/msg/io-file/io-file.c @example examples/msg/io-remote/io-remote.c -@example examples/msg/actions-comm/actions-comm.c -@example examples/msg/actions-storage/actions-storage.c -@example examples/msg/app-pmm/app-pmm.c -@example examples/msg/dht-chord -@example examples/msg/task-priority/task-priority.c -@example examples/msg/properties/properties.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/task-priority/task-priority.c +@example examples/msg/platform-properties/platform-properties.c +*/