SimGrid 3.6.2
Scalable simulation of distributed systems
|
The trace visualization is widely used to observe and understand the behavior of parallel applications and distributed algorithms. Usually, this is done in a two-step fashion: the user instruments the application and the traces are analyzed after the end of the execution. The visualization itself can highlights unexpected behaviors, bottlenecks and sometimes can be used to correct distributed algorithms. The SimGrid team has instrumented the library in order to let users trace their simulations and analyze them. This part of the user manual explains how the tracing-related features can be enabled and used during the development of simulators using the SimGrid library.
For now, the SimGrid library is instrumented so users can trace the platform utilization using the MSG, SimDAG and SMPI interface. This means that the tracing will register how much power is used for each host and how much bandwidth is used for each link of the platform. The idea with this type of tracing is to observe the overall view of resources utilization in the first place, especially the identification of bottlenecks, load-balancing among hosts, and so on.
The idea of the tracing facilities is to give SimGrid users to possibility to classify MSG and SimDAG tasks by category, tracing the platform utilization (hosts and links) for each of the categories. For that, the tracing interface enables the declaration of categories and a function to mark a task with a previously declared category. The tasks that are not classified according to a category are not traced. Even if the user does not specify any category, the simulations can still be traced in terms of resource utilization by using a special parameter that is detailed below.
With the sources of SimGrid, it is possible to enable the tracing using the parameter -Denable_tracing=ON when the cmake is executed. The section Tracing Functions describes all the functions available when this Cmake options is activated. These functions will have no effect if SimGrid is configured without this option (they are wiped-out by the C-preprocessor).
$ cmake -Denable_tracing=ON . $ make
TRACE_category
(const char *category): This function should be used to define a user category. The category can be used to differentiate the tasks that are created during the simulation (for example, tasks from server1, server2, or request tasks, computation tasks, communication tasks). All resource utilization (host power and link bandwidth) will be classified according to the task category. Tasks that do not belong to a category are not traced. The color for the category that is being declared is random (use next function to specify a color).TRACE_category_with_color
(const char *category, const char *color): Same as TRACE_category, but let user specify a color encoded as a RGB-like string with three floats from 0 to 1. So, to specify a red color, the user can pass "1 0 0" as color parameter. A light-gray color can be specified using "0.7 0.7 0.7" as color.TRACE_msg_set_task_category
(m_task_t task, const char *category): This function should be called after the creation of a MSG task, to define the category of that task. The first parameter task
must contain a task that was created with the function MSG_task_create
. The second parameter category
must contain a category that was previously defined by the function TRACE_category
.TRACE_sd_set_task_category
(SD_task_t task, const char *category): This function should be called after the creation of a SimDAG task, to define the category of that task. The first parameter task
must contain a task that was created with the function MSG_task_create
. The second parameter category
must contain a category that was previously defined by the function TRACE_category
.TRACE_
[host|link]_variable_declare (const char *variable): Declare a user variable that will be associated to host/link. A variable can be used to trace user variables such as the number of tasks in a server, the number of clients in an application (for hosts), and so on.TRACE_
[host|link]_variable_[set|add|sub] (const char *[host|link], const char *variable, double value): Set the value of a given user variable for a given host/link. The value of this variable is always associated to the host/link. The host/link parameters should be its name as the one listed in the platform file.TRACE_
[host|link]_variable_[set|add|sub]_with_time (double time, const char *[host|link], const char *variable, double value): Same as TRACE_[host|link]_variable_[set|add|sub], but let user specify the time used to trace it. Users can specify a time that is not the simulated clock time as defined by the core simulator. This allows a fine-grain control of time definition, but should be used with caution since the trace can be inconsistent if resource utilization traces are also traced.TRACE_link_srcdst_variable_
[set|add|sub] (const char *src, const char *dst, const char *variable, double value): Same as TRACE_link_variable_[set|add|sub], but now users specify a source and destination hosts (as the names from the platform file). The tracing library will get the corresponding route that connects those two hosts (src and dst) and [set|add|sub] the value's variable for all the links of the route.TRACE_link_srcdst_variable_
[set|add|sub]_with_time (double time, const char *src, const char *dst, const char *variable, double value): Same as TRACE_link_srcdst_variable_[set|add|sub], but user specify a time different from the simulated time.To check which tracing options are available for your simulator, you can just run it with the option --help-tracing. These are the options accepted by the tracing system of SimGrid as of today, you can use them by running your simulator with the --cfg= switch:
tracing
: Safe switch. It activates (or deactivates) the tracing system. No other tracing options take effect if this one is not activated. --cfg=tracing:1
tracing/categorized
: It activates the categorized resource utilization tracing. It should be enabled if tracing categories are used by this simulator. --cfg=tracing/categorized:1
tracing/uncategorized
: It activates the uncategorized resource utilization tracing. Use it if this simulator do not use tracing categories and resource use have to be traced. --cfg=tracing/uncategorized:1
tracing/filename
: A file with this name will be created to register the simulation. The file is in the Paje format and can be analyzed using Triva or Paje visualization tools. More information can be found in these webpages: http://triva.gforge.inria.fr/ http://paje.sourceforge.net/ --cfg=tracing/filename:mytracefile.trace
tracing/onelink_only
: By default, the tracing system uses all routes in the platform file to re-create a "graph" of the platform and register it in the trace file. This option let the user tell the tracing system to use only the routes that are composed with just one link. --cfg=tracing/onelink_only:1
tracing/smpi
: This option only has effect if this simulator is SMPI-based. Traces the MPI interface and generates a trace that can be analyzed using Gantt-like visualizations. Every MPI function (implemented by SMPI) is transformed in a state, and point-to-point communications can be analyzed with arrows. --cfg=tracing/smpi:1
tracing/smpi/group
: This option only has effect if this simulator is SMPI-based. The processes are grouped by the hosts where they were executed. --cfg=tracing/smpi/group:1
tracing/msg/task
: This option only has effect if this simulator is MSG-based. It traces the behavior of all categorized MSG tasks, grouping them by hosts. --cfg=tracing/msg/task:1
tracing/msg/process
: This option only has effect if this simulator is MSG-based. It traces the behavior of all categorized MSG processes, grouping them by hosts. This option can be used to track process location if this simulator has process migration. --cfg=tracing/msg/process:1
triva/categorized
: This option generates a graph configuration file for Triva considering categorized resource utilization. --cfg=triva/categorized:graph_categorized.plist
triva/uncategorized
: This option generates a graph configuration file for Triva considering uncategorized resource utilization. --cfg=triva/categorized:graph_uncategorized.plist
Some scenarios that might help you decide which tracing options you should use to analyze your simulator.
./your_simulator \ --cfg=tracing:1 \ --cfg=tracing/uncategorized:1 \ --cfg=tracing/filename:mytracefile.trace \ --cfg=triva/uncategorized:uncat.plist
./your_simulator \ --cfg=tracing:1 \ --cfg=tracing/categorized:1 \ --cfg=tracing/filename:mytracefile.trace \ --cfg=triva/categorized:cat.plist
A simplified example using the tracing mandatory functions.
int main (int argc, char **argv) { MSG_global_init (&argc, &argv); //(... after deployment ...) //note that category declaration must be called after MSG_create_environment TRACE_category_with_color ("request", "1 0 0"); TRACE_category_with_color ("computation", "0.3 1 0.4"); TRACE_category ("finalize"); m_task_t req1 = MSG_task_create("1st_request_task", 10, 10, NULL); m_task_t req2 = MSG_task_create("2nd_request_task", 10, 10, NULL); m_task_t req3 = MSG_task_create("3rd_request_task", 10, 10, NULL); m_task_t req4 = MSG_task_create("4th_request_task", 10, 10, NULL); TRACE_msg_set_task_category (req1, "request"); TRACE_msg_set_task_category (req2, "request"); TRACE_msg_set_task_category (req3, "request"); TRACE_msg_set_task_category (req4, "request"); m_task_t comp = MSG_task_create ("comp_task", 100, 100, NULL); TRACE_msg_set_task_category (comp, "computation"); m_task_t finalize = MSG_task_create ("finalize", 0, 0, NULL); TRACE_msg_set_task_category (finalize, "finalize"); //(...) MSG_clean(); return 0; }
The SimGrid library, during an instrumented simulation, creates a trace file in the Paje file format that contains the platform utilization for the simulation that was executed. The visualization analysis of this file is performed with the visualization tool Triva, with special configurations tunned to SimGrid needs. This part of the documentation explains how to configure and use Triva to analyse a SimGrid trace file.
$ svn checkout svn://scm.gforge.inria.fr/svn/triva $ cd triva $ cat INSTALL
$ source /usr/GNUstep/System/Library/Makefiles/GNUstep.sh
$ ./Triva.app/Triva --help Usage: Triva [OPTIONS...] TRACE0 [TRACE1] Trace Analysis through Visualization TimeInterval --ti_frequency {double} Animation: frequency of updates --ti_hide Hide the TimeInterval window --ti_forward {double} Animation: value to move time-slice --ti_apply Apply the configuration --ti_update Update on slider change --ti_animate Start animation --ti_start {double} Start of time slice --ti_size {double} Size of time slice Triva --comparison Compare Trace Files (Experimental) --graph Configurable Graph --list Print Trace Type Hierarchy --hierarchy Export Trace Type Hierarchy (dot) --stat Trace Statistics and Memory Utilization --instances List All Trace Entities --linkview Link View (Experimental) --treemap Squarified Treemap --merge Merge Trace Files (Experimental) --check Check Trace File Integrity GraphConfiguration --gc_conf {file} Graph Configuration in Property List Format --gc_apply Apply the configuration --gc_hide Hide the GraphConfiguration window
{ node = (HOST); edge = (LINK);
HOST = { size = power; scale = global; };
LINK = { src = source; dst = destination; size = bandwidth; scale = global; };
graphviz-algorithm = neato; }
HOST = { size = power; scale = global; sep_host = { type = separation; size = power; values = (prequest, pcomputation); }; }; LINK = { src = source; dst = destination; size = bandwidth; scale = global; sep_link = { type = separation; size = bandwidth; values = (brequest, bcomputation); }; };
gra_host = { type = gradient; scale = global; values = (numberOfTasks); }; color_host = { type = color; values = (is_server); };
{ node = (HOST); edge = (LINK); HOST = { size = power; scale = global; sep_host = { type = separation; size = power; values = (pcompute, pfinalize); }; }; LINK = { src = source; dst = destination; size = bandwidth;\section tracing_tracing Tracing Simulations for Visualization The trace visualization is widely used to observe and understand the behavior of parallel applications and distributed algorithms. Usually, this is done in a two-step fashion: the user instruments the application and the traces are analyzed after the end of the execution. The visualization itself can highlights unexpected behaviors, bottlenecks and sometimes can be used to correct distributed algorithms. The SimGrid team has instrumented the library in order to let users trace their simulations and analyze them. This part of the user manual explains how the tracing-related features can be enabled and used during the development of simulators using the SimGrid library. \subsection tracing_tracing_howitworks How it works For now, the SimGrid library is instrumented so users can trace the <b>platform utilization</b> using the MSG, SimDAG and SMPI interface. This means that the tracing will register how much power is used for each host and how much bandwidth is used for each link of the platform. The idea with this type of tracing is to observe the overall view of resources utilization in the first place, especially the identification of bottlenecks, load-balancing among hosts, and so on. The idea of the tracing facilities is to give SimGrid users to possibility to classify MSG and SimDAG tasks by category, tracing the platform utilization (hosts and links) for each of the categories. For that, the tracing interface enables the declaration of categories and a function to mark a task with a previously declared category. <em>The tasks that are not classified according to a category are not traced</em>. Even if the user does not specify any category, the simulations can still be traced in terms of resource utilization by using a special parameter that is detailed below. \subsection tracing_tracing_enabling Enabling using CMake With the sources of SimGrid, it is possible to enable the tracing using the parameter <b>-Denable_tracing=ON</b> when the cmake is executed. The section \ref tracing_tracing_functions describes all the functions available when this Cmake options is activated. These functions will have no effect if SimGrid is configured without this option (they are wiped-out by the C-preprocessor). \verbatim $ cmake -Denable_tracing=ON . $ make
TRACE_category
(const char *category): This function should be used to define a user category. The category can be used to differentiate the tasks that are created during the simulation (for example, tasks from server1, server2, or request tasks, computation tasks, communication tasks). All resource utilization (host power and link bandwidth) will be classified according to the task category. Tasks that do not belong to a category are not traced. The color for the category that is being declared is random (use next function to specify a color).TRACE_category_with_color
(const char *category, const char *color): Same as TRACE_category, but let user specify a color encoded as a RGB-like string with three floats from 0 to 1. So, to specify a red color, the user can pass "1 0 0" as color parameter. A light-gray color can be specified using "0.7 0.7 0.7" as color.TRACE_msg_set_task_category
(m_task_t task, const char *category): This function should be called after the creation of a MSG task, to define the category of that task. The first parameter task
must contain a task that was created with the function MSG_task_create
. The second parameter category
must contain a category that was previously defined by the function TRACE_category
.TRACE_sd_set_task_category
(SD_task_t task, const char *category): This function should be called after the creation of a SimDAG task, to define the category of that task. The first parameter task
must contain a task that was created with the function MSG_task_create
. The second parameter category
must contain a category that was previously defined by the function TRACE_category
.TRACE_
[host|link]_variable_declare (const char *variable): Declare a user variable that will be associated to host/link. A variable can be used to trace user variables such as the number of tasks in a server, the number of clients in an application (for hosts), and so on.TRACE_
[host|link]_variable_[set|add|sub] (const char *[host|link], const char *variable, double value): Set the value of a given user variable for a given host/link. The value of this variable is always associated to the host/link. The host/link parameters should be its name as the one listed in the platform file.TRACE_
[host|link]_variable_[set|add|sub]_with_time (double time, const char *[host|link], const char *variable, double value): Same as TRACE_[host|link]_variable_[set|add|sub], but let user specify the time used to trace it. Users can specify a time that is not the simulated clock time as defined by the core simulator. This allows a fine-grain control of time definition, but should be used with caution since the trace can be inconsistent if resource utilization traces are also traced.TRACE_link_srcdst_variable_
[set|add|sub] (const char *src, const char *dst, const char *variable, double value): Same as TRACE_link_variable_[set|add|sub], but now users specify a source and destination hosts (as the names from the platform file). The tracing library will get the corresponding route that connects those two hosts (src and dst) and [set|add|sub] the value's variable for all the links of the route.TRACE_link_srcdst_variable_
[set|add|sub]_with_time (double time, const char *src, const char *dst, const char *variable, double value): Same as TRACE_link_srcdst_variable_[set|add|sub], but user specify a time different from the simulated time.These are the options accepted by the tracing system of SimGrid:
tracing
: Safe switch. It activates (or deactivates) the tracing system. No other tracing options take effect if this one is not activated.tracing/platform
: Register the simulation platform in the trace file.tracing/onelink_only
: By default, the tracing system uses all routes in the platform file to re-create a "graph" of the platform and register it in the trace file. This option let the user tell the tracing system to use only the routes that are composed with just one link.tracing/categorized
: It activates the categorized resource utilization tracing. It should be enabled if tracing categories are used by this simulator.tracing/uncategorized
: It activates the uncategorized resource utilization tracing. Use it if this simulator do not use tracing categories and resource use have to be traced.tracing/filename
: A file with this name will be created to register the simulation. The file is in the Paje format and can be analyzed using Triva or Paje visualization tools. More information can be found in these webpages: http://triva.gforge.inria.fr/ http://paje.sourceforge.net/tracing/smpi
: This option only has effect if this simulator is SMPI-based. Traces the MPI interface and generates a trace that can be analyzed using Gantt-like visualizations. Every MPI function (implemented by SMPI) is transformed in a state, and point-to-point communications can be analyzed with arrows.tracing/smpi/group
: This option only has effect if this simulator is SMPI-based. The processes are grouped by the hosts where they were executed.tracing/msg/task
: This option only has effect if this simulator is MSG-based. It traces the behavior of all categorized MSG tasks, grouping them by hosts.tracing/msg/process
: This option only has effect if this simulator is MSG-based. It traces the behavior of all categorized MSG processes, grouping them by hosts. This option can be used to track process location if this simulator has process migration.triva/categorized
:graph_categorized.plist : This option generates a graph configuration file for Triva considering categorized resource utilization.triva/uncategorized
:graph_uncategorized.plist : This option generates a graph configuration file for Triva considering uncategorized resource utilization.A simplified example using the tracing mandatory functions.
int main (int argc, char **argv) { MSG_global_init (&argc, &argv); //(... after deployment ...) //note that category declaration must be called after MSG_create_environment TRACE_category_with_color ("request", "1 0 0"); TRACE_category_with_color ("computation", "0.3 1 0.4"); TRACE_category ("finalize"); m_task_t req1 = MSG_task_create("1st_request_task", 10, 10, NULL); m_task_t req2 = MSG_task_create("2nd_request_task", 10, 10, NULL); m_task_t req3 = MSG_task_create("3rd_request_task", 10, 10, NULL); m_task_t req4 = MSG_task_create("4th_request_task", 10, 10, NULL); TRACE_msg_set_task_category (req1, "request"); TRACE_msg_set_task_category (req2, "request"); TRACE_msg_set_task_category (req3, "request"); TRACE_msg_set_task_category (req4, "request"); m_task_t comp = MSG_task_create ("comp_task", 100, 100, NULL); TRACE_msg_set_task_category (comp, "computation"); m_task_t finalize = MSG_task_create ("finalize", 0, 0, NULL); TRACE_msg_set_task_category (finalize, "finalize"); //(...) MSG_clean(); return 0; }
The SimGrid library, during an instrumented simulation, creates a trace file in the Paje file format that contains the platform utilization for the simulation that was executed. The visualization analysis of this file is performed with the visualization tool Triva, with special configurations tunned to SimGrid needs. This part of the documentation explains how to configure and use Triva to analyse a SimGrid trace file.
$ svn checkout svn://scm.gforge.inria.fr/svn/triva $ cd triva $ cat INSTALL
$ source /usr/GNUstep/System/Library/Makefiles/GNUstep.sh
$ ./Triva.app/Triva --help Usage: Triva [OPTIONS...] TRACE0 [TRACE1] Trace Analysis through Visualization TimeInterval --ti_frequency {double} Animation: frequency of updates --ti_hide Hide the TimeInterval window --ti_forward {double} Animation: value to move time-slice --ti_apply Apply the configuration --ti_update Update on slider change --ti_animate Start animation --ti_start {double} Start of time slice --ti_size {double} Size of time slice Triva --comparison Compare Trace Files (Experimental) --graph Configurable Graph --list Print Trace Type Hierarchy --hierarchy Export Trace Type Hierarchy (dot) --stat Trace Statistics and Memory Utilization --instances List All Trace Entities --linkview Link View (Experimental) --treemap Squarified Treemap --merge Merge Trace Files (Experimental) --check Check Trace File Integrity GraphConfiguration --gc_conf {file} Graph Configuration in Property List Format --gc_apply Apply the configuration --gc_hide Hide the GraphConfiguration window
{ node = (HOST); edge = (LINK);
HOST = { size = power; scale = global; };
LINK = { src = source; dst = destination; size = bandwidth; scale = global; };
graphviz-algorithm = neato; }
HOST = { size = power; scale = global; sep_host = { type = separation; size = power; values = (prequest, pcomputation); }; }; LINK = { src = source; dst = destination; size = bandwidth; scale = global; sep_link = { type = separation; size = bandwidth; values = (brequest, bcomputation); }; };
gra_host = { type = gradient; scale = global; values = (numberOfTasks); }; color_host = { type = color; values = (is_server); };
{ node = (HOST); edge = (LINK); HOST = { size = power; scale = global; sep_host = { type = separation; size = power; values = (pcompute, pfinalize); }; }; LINK = { src = source; dst = destination; size = bandwidth; scale = global; sep_link = { type = separation; size = bandwidth; values = (bcompute, bfinalize); }; }; graphviz-algorithm = neato; }
$ Triva -l masterslave_forwarder.trace iFile c platform c HOST v power v is_slave v is_master v task_creation v task_computation v pcompute v pfinalize c LINK v bandwidth v latency v bcompute v bfinalize c user_type
$ defaults write Triva 'pcompute Color' '1 0 0' $ defaults write Triva 'bcompute Color' '1 0 0'
scale = global; sep_link = { type = separation; size = bandwidth; values = (bcompute, bfinalize); }; }; graphviz-algorithm = neato; }
$ Triva -l masterslave_forwarder.trace iFile c platform c HOST v power v is_slave v is_master v task_creation v task_computation v pcompute v pfinalize c LINK v bandwidth v latency v bcompute v bfinalize c user_type
$ defaults write Triva 'pcompute Color' '1 0 0' $ defaults write Triva 'bcompute Color' '1 0 0'
Back to the main Simgrid Documentation page |
The version of Simgrid documented here is v3.6.2. Documentation of other versions can be found in their respective archive files (directory doc/html). |
Generated for SimGridAPI by
![]() |