Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
renaming value of presence state to "presence" (to get a good time-slice value later on)
[simgrid.git] / doc / FAQ.doc
index 1e10e5f..766cc83 100644 (file)
@@ -72,29 +72,7 @@ filter (e.g. with bash):
 ./msg_test small_platform.xml small_deployment.xml 2>&1 | ../../tools/MSG_visualization/colorize.pl
 \endverbatim
 
-We also have a more graphical output. Have a look at MSG_paje_output(). It 
-generates an input to <a href="http://www-id.imag.fr/Logiciels/paje/">Paje</a>.
-<center>
-\htmlonly
- <a href="Paje_MSG_screenshot.jpg"><img src="Paje_MSG_screenshot_thn.jpg"></a>
-\endhtmlonly
-</center>
-
-Visualization with Paje can be seen as a kind of postmortem
-analysis. However, as soon as you start playing with big simulations,
-you'll realize that processing such output is kind of tricky. There is
-so much generic information that it is hard to find the information
-you are looking for.
-
-As a matter of fact, logging really depends on simulations (e.g. what
-kind of events is important...). That is why we do not propose a big
-dump of your whole simulation (it would slow everything down) but give
-you neat tools to structure you logs. Have a look at \ref XBT_log. In
-fact, rather than a post-mortem analysis, you may want to do it on the
-fly. The process you are running can do whatever you want. Have you
-thought about adding a global structure where you directly compute the
-information that are really important rather than writing everything
-down and then processing huge files?
+We also have a more graphical output. Have a look at section \ref faq_tracing.
 
 \subsection faq_C Argh! Do I really have to code in C?
 
@@ -397,11 +375,10 @@ TODO
 \verbatim
 "cmake -D[name]=[value] ... ./"
  
-[name]                 disable_gtnets                  [value] ON/OFF or TRUE/FALSE or 1/0
-               disable_java                            ON/OFF or TRUE/FALSE or 1/0
-               disable_lua                             ON/OFF or TRUE/FALSE or 1/0
-               disable_ruby                            ON/OFF or TRUE/FALSE or 1/0
-
+[name]                 enable_gtnets                   [value] ON/OFF or TRUE/FALSE or 1/0
+               enable_java                             ON/OFF or TRUE/FALSE or 1/0
+               enable_lua                              ON/OFF or TRUE/FALSE or 1/0
+               enable_ruby                             ON/OFF or TRUE/FALSE or 1/0
                enable_compile_optimizations            ON/OFF or TRUE/FALSE or 1/0
                enable_compile_warnings                 ON/OFF or TRUE/FALSE or 1/0
                enable_maintainer_mode                  ON/OFF or TRUE/FALSE or 1/0
@@ -419,13 +396,13 @@ TODO
                                                                                                                                                           
 \subsubsection faq_cmakeoption2 Options explaination
 
-  \li disable_gtnets : set to true implie that user doesn't want to use gtnets.
+  \li enable_gtnets : set to true implie that user wants to use gtnets.
 
-  \li disable_java : set to true implie that user doesn't want to add java langage into simgrid compilation.
+  \li enable_java : set to true implie that user wants to add java langage into simgrid compilation.
 
-  \li disable_lua : set to true implie that user doesn't want to add lua langage into simgrid compilation.
+  \li enable_lua : set to true implie that user wants to add lua langage into simgrid compilation.
 
-  \li disable_ruby : set to true implie that user doesn't want to add ruby langage into simgrid compilation.
+  \li enable_ruby : set to true implie that user wants to add ruby langage into simgrid compilation.
 
   \li enable_compile_optimizations : add flags "-O3 -finline-functions -funroll-loops -fno-strict-aliasing"
 
@@ -489,11 +466,10 @@ src/gras/DataDesc/ddt_parse.yy.c
 Those options are initialized the first time you launch \"cmake ./\" whithout specified option.
 
 \verbatim
-disable_gtnets                 off
-disable_java                   off
-disable_lua                    off
-disable_ruby                   off
-
+enable_gtnets                  on
+enable_lua                     on
+enable_ruby                    on
+enable_java                    off
 enable_compile_optimizations   off
 enable_compile_warnings                off
 enable_maintainer_mode         off
@@ -1673,13 +1649,34 @@ Other models have been proposed and implemented since then (see for example
 <a href="http://mescal.imag.fr/membres/arnaud.legrand/articles/simutools09.pdf">Accuracy Study and Improvement of Network Simulation in the SimGrid Framework</a>)
 and can be activated at runtime. For example:
 \verbatim
-./mycode platform.xml deployment.xml --cfg=workstation_model:compound --cfg=network_model:LV08 -cfg=cpu_model:Cas01
+./mycode platform.xml deployment.xml --cfg=workstation/model:compound --cfg=network/model:LV08 -cfg=cpu/model:Cas01
 \endverbatim
 
 Possible models for the network are currently "Constant", "CM02",
 "LegrandVelho", "GTNets", Reno", "Reno2", "Vegas". Others will
 probably be added in the future and many of the previous ones are
-experimental and are likely to disappear without notice...
+experimental and are likely to disappear without notice... To know the
+list of the currently  implemented models, you should use the
+--help-models command line option.
+
+\verbatim
+./masterslave_forwarder ../small_platform.xml deployment_masterslave.xml  --help-models
+Long description of the workstation models accepted by this simulator:
+  CLM03: Default workstation model, using LV08 and CM02 as network and CPU
+  compound: Workstation model allowing you to use other network and CPU models
+  ptask_L07: Workstation model with better parallel task modeling
+Long description of the CPU models accepted by this simulator:
+  Cas01_fullupdate: CPU classical model time=size/power
+  Cas01: Variation of Cas01_fullupdate with partial invalidation optimization of lmm system. Should produce the same values, only faster
+  CpuTI: Variation of Cas01 with also trace integration. Should produce the same values, only faster if you use availability traces
+Long description of the network models accepted by this simulator:
+  Constant: Simplistic network model where all communication take a constant time (one second)
+  CM02: Realistic network model with lmm_solve and no correction factors
+  LV08: Realistic network model with lmm_solve and these correction factors: latency*=10.4, bandwidth*=.92, S=8775
+  Reno: Model using lagrange_solve instead of lmm_solve (experts only)
+  Reno2: Model using lagrange_solve instead of lmm_solve (experts only)
+  Vegas: Model using lagrange_solve instead of lmm_solve (experts only)
+\endverbatim
 
 \subsection faq_tracing Tracing Simulations for Visualization
 
@@ -1851,6 +1848,7 @@ Trace Analysis through Visualization
  Other auxiliary options to check the trace file:
   -c, --check                Check the integrity of trace file
   -h, --hierarchy            Export the trace type hierarchy
+  -l, --list                 List entity types
 
   -?, --help                 Give this help list
       --usage                Give a short usage message
@@ -1893,6 +1891,232 @@ take into account a new time-slice can be expensive. When this happens, the
 when the checkbox <i>Update Drawings on Sliders
 Change</i> is selected will not be followed.
 
+- <b>Understanding Triva - graph</b>: this part of the documention explains how
+  to analyze the traces using the graph view of Triva, when the user executes
+the tool passing <em>--graph</em> as parameter. Triva opens three windows when
+this parameter is used: the <i>Time Interval</i> window (previously described),
+the <i>Graph Representation</i> window, and the <em>Graph Configuration</em>
+window. The Graph Representation is the window where drawings take place.
+Initially, it is completely white waiting for a proper graph configuration input
+by the user. We start the description of this type of analysis by describing the
+<i>Graph Configuration</i> window (depicted below). By using a particular
+configuration, triva
+can be used to customize the graph drawing according to
+the SimGrid trace that was created with user-specific categories. Before delving
+into the details of this customization, let us first explain the major parts of
+the graph configuration window. The buttons located in the top-right corner can
+be used to delete, copy and create a new configuration. The checkbox in the
+top-middle part of the window indicates if the configuration typed in the
+textfield is syntactically correct (we are using the non-XML 
+<a href="http://en.wikipedia.org/wiki/Property_list">Property List Format</a> to
+describe the configuration). The pop-up button located on the top-left corner 
+indicates the selected configuration (the user can have multiple graph
+configurations). The bottom-left text field contains the name of the current
+configuration (updates on this field must be followed by typing enter on the
+keyboard to take into account the name change). The bottom-right <em>Apply</em>
+button activates the current configuration, resulting on an update on the graph
+drawings.
+<center>
+\htmlonly
+<a href="triva-graph_configuration.png" border=0><img src="triva-graph_configuration.png" width="50%" border=0></a>
+\endhtmlonly
+</center>
+<b>Basic SimGrid Configuration</b>: The figure shows in the big textfield the
+basic configuration that should be used during the analysis of a SimGrid trace
+file. The basic logic of the configuration is as follows:
+\verbatim
+{
+  node = (HOST);
+  edge = (LINK);
+\endverbatim
+The nodes of the graph will be created based on the <i>node</i> parameter, which
+in this case is the different <em>"HOST"</em>s of the platform 
+used to simulate. The <i>edge</i> parameter indicates that the edges of the
+graph will be created based on the <em>"LINK"</em>s of the platform. After the
+definition of these two parameters, the configuration must detail how
+<em>HOST</em>s and <em>LINK</em>s should be drawn. For that, the configuration
+must have an entry for each of the types used. For <em>HOST</em>, as basic
+configuration, we have:
+\verbatim
+  HOST = {
+    size = power;
+    scale = global;
+  };
+\endverbatim
+The parameter <em>size</em> indicates which variable from the trace file will be
+used to define the size of the node HOST in the visualization. If the simulation
+was executed with availability traces, the size of the nodes will be changed
+according to these traces. The parameter <em>scale</em> indicates if the value
+of the variable is <em>global</em> or <em>local</em>. If it is global, the value
+will be relative to the power of all other hosts, if it is local, the value will
+be relative locally.
+For <em>LINK</em> we have:
+\verbatim
+  LINK = {
+    src = SrcHost;
+    dst = DstHost;
+    
+    size = bandwidth;
+    scale = global;
+  };
+\endverbatim
+For the types specified in the <em>edge</em> parameter (such as <em>LINK</em>),
+the configuration must contain two additional parameters: <em>src</em> and
+<em>dst</em> that are used to properly identify which nodes this edge is
+connecting. The values <em>SrcHost</em> and <em>DstHost</em> are always present
+in the SimGrid trace file and should not be changed in the configuration. The
+parameter <em>size</em> for the LINK, in this case, is configured as the
+variable <em>bandwidth</em>, with a <em>global</em> scale. The scale meaning
+here is exactly the same used for nodes. The last parameter is the GraphViz
+algorithm used to calculate the position of the nodes in the graph
+representation.
+\verbatim
+  graphviz-algorithm = neato;
+}
+\endverbatim
+<b>Customizing the Graph Representation</b>: triva is capable to handle
+a customized graph representation based on the variables present in the trace
+file. In the case of SimGrid, every time a category is created for tasks, two
+variables in the trace file are defined: one to indicate node utilization (how
+much power was used by that task category), and another to indicate link
+utilization (how much bandwidth was used by that category). For instance, if the
+user declares a category named <i>request</i>, there will be variables named
+<b>p</b><i>request</i> and a <b>b</b><i>request</i> (<b>p</b> for power and
+<b>b</b> for bandwidth). It is important to notice that the variable
+<i>prequest</i> in this case is only available for HOST, and
+<i>brequest</i> is only available for LINK. <b>Example</b>: suppose there are
+two categories for tasks: request and compute. To create a customized graph
+representation with a proportional separation of host and link utilization, use
+as configuration for HOST and LINK this:
+\verbatim
+  HOST = {
+    size = power;
+    scale = global;
+  
+    sep_host = {
+      type = separation;
+      size = power;
+      values = (prequest, pcomputation);
+    };
+  };
+
+  LINK = {
+    src = SrcHost;
+    dst = DstHost;
+    size = bandwidth;
+    scale = global;
+
+    sep_link = {
+      type = separation;
+      size = bandwidth;
+      values = (brequest, bcomputation);
+    };
+  };
+\endverbatim
+Where <i>sep_host</i> contains a composition of type <i>separation</i> where
+its max size is the <i>power</i> of the host and the variables <i>prequest</i>
+and <i>pcomputation</i> are drawn proportionally to the size of the HOST. And
+<i>sep_link</i> is also a separation where max is defined as the
+<i>bandwidth</i> of the link, and the variables <i>brequest</i> and
+<i>bcomputation</i> are drawn proportionally within a LINK.
+<i>This configuration enables the analysis of resource utilization by MSG tasks,
+and the identification of load-balancing issues, network bottlenecks, for
+instance.</i> \n
+<b>Other compositions</b>: besides <i>separation</i>, it is possible to use
+other types of compositions, such as gradients, and colors, like this:
+\verbatim
+    gra_host = {
+      type = gradient;
+      scale = global;
+      values = (numberOfTasks);
+    };
+    color_host = {
+      type = color;
+      values = (is_server);
+    };
+\endverbatim
+Where <i>gra_host</i> creates a gradient within a node of the graph, using a
+global scale and using as value a variable called <i>numberOfTasks</i>, that
+could be declared by the user using the optional tracing functions of SimGrid.
+If scale is global, the max and min value for the gradient will be equal to the
+max and min numberOfTasks among all hosts, and if scale is local, the max and
+min value based on the value of numberOfTasks locally in each host.
+And <i>color_host</i> composition draws a square based on a positive value of
+the variable <i>is_server</i>, that could also be defined by the user using the
+SimGrid tracing functions. \n
+<b>The Graph Visualization</b>: The next figure shows a graph visualization of a
+given time-slice of the masterslave_forwarder example (present in the SimGrid
+sources). The red color indicates tasks from the <i>compute</i> category. This
+visualization was generated with the following configuration:
+\verbatim
+{
+  node = (HOST);
+  edge = (LINK);
+
+  HOST = {
+    size = power;
+    scale = global;
+  
+    sep_host = {
+      type = separation;
+      size = power;
+      values = (pcompute, pfinalize);
+    };
+  };
+  LINK = {
+    src = SrcHost;
+    dst = DstHost;
+    size = bandwidth;
+    scale = global;
+
+    sep_link = {
+      type = separation;
+      size = bandwidth;
+      values = (bcompute, bfinalize);
+    };
+  };
+  graphviz-algorithm = neato;
+}
+\endverbatim
+<center>
+\htmlonly
+<a href="triva-graph_visualization.png" border=0><img src="triva-graph_visualization.png" width="50%" border=0></a>
+\endhtmlonly
+</center>
+
+- <b>Understading Triva - colors</b>: An important issue when using Triva is how
+  to define colors. To do that, we have to know which variables are defined in
+the trace file generated by the SimGrid library. The parameter <em>--list</em> 
+lists the variables for a given trace file:
+\verbatim
+$ 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
+\endverbatim
+We can see that HOST has seven variables (from power to pfinalize) and LINK has
+four (from bandwidth to bfinalize). To define a red color for the
+<i>pcompute</i> and <i>bcompute</i> (which are defined based on user category
+<i>compute</i>), execute:
+\verbatim
+$ defaults write Triva 'pcompute Color' '1 0 0'
+$ defaults write Triva 'bcompute Color' '1 0 0'
+\endverbatim
+Where the three numbers in each line are the RGB color with values from 0 to 1.
+
 \section faq_troubleshooting Troubleshooting
 
 \subsection faq_trouble_lib_compil SimGrid compilation and installation problems