-/*! \page platform Model the underlying platform
+/*! \page platform Describing the virtual platform
@tableofcontents
<b>Example:</b>
\code
<AS id="AS0" routing="Full">
- <host id="host1" power="1000000000"/>
- <host id="host2" power="1000000000"/>
+ <host id="host1" speed="1000000000"/>
+ <host id="host2" speed="1000000000"/>
<link id="link1" bandwidth="125000000" latency="0.000100"/>
<route src="host1" dst="host2"><link_ctn id="link1"/></route>
</AS>
Attribute name | Mandatory | Values | Description
--------------- | --------- | ------ | -----------
id | yes | String | The identifier of the host. facilitates referring to this AS.
-power | yes | double (must be > 0.0) | Computational power of every core of this host in FLOPS. Must be larger than 0.0.
-core | no | int (Default: 1) | The number of cores of this host. If more than one core is specified, the "power" parameter refers to every core, i.e., the total computational power is no_of_cores*power.<br /> If 6 cores are specified, up to 6 tasks can be executed without sharing the computational power; if more than 6 tasks are executed, computational power will be shared among these tasks. <br /> <b>Warning:</b> Although functional, this model was never scientifically assessed.
-availability | no | int | <b>Specify if the percentage of power available.</b> (What? TODO)
+speed | yes | double (must be > 0.0) | Computational power of every core of this host in FLOPS. Must be larger than 0.0.
+core | no | int (Default: 1) | The number of cores of this host. If more than one core is specified, the "speed" parameter refers to every core, i.e., the total computational power is no_of_cores*speed.<br /> If 6 cores are specified, up to 6 tasks can be executed without sharing the computational power; if more than 6 tasks are executed, computational power will be shared among these tasks. <br /> <b>Warning:</b> Although functional, this model was never scientifically assessed.
availability_file| no | string | (Relative or absolute) filename to use as input; must contain availability traces for this host. The syntax of this file is defined below. <br /> <b>Note:</b> The filename must be specified with your system's format.
-state | no | ON\|OFF<br/> (Default: ON) | Is this host running or not?
state_file | no | string | Same mechanism as availability_file.<br /> <b>Note:</b> The filename must be specified with your system's format.
coordinates | no | string | Must be provided when choosing the Vivaldi, coordinate-based routing model for the AS the host belongs to. More details can be found in the Section \ref pf_P2P_tags.
+pstate | no | double (Default: 0.0) | FIXME: Not yet documented.
### Possible children: ###
### Example ###
\verbatim
- <host id="host1" power="1000000000"/>
- <host id="host2" power="1000000000">
+ <host id="host1" speed="1000000000"/>
+ <host id="host2" speed="1000000000">
<prop id="color" value="blue"/>
<prop id="rendershape" value="square"/>
</host>
\verbatim
<platform version="4">
- <host id="bob" power="500Gf" availability_file="bob.trace" />
+ <host id="bob" speed="500Gf" availability_file="bob.trace" />
</platform>
\endverbatim
\verbatim
<platform version="4">
- <host id="bob" power="500Gf" state="ON" />
+ <host id="bob" speed="500Gf" state="ON" />
</platform>
\endverbatim
prefix | yes | string | Each node of the cluster has to have a name. This name will be prefixed with this prefix.
suffix | yes | string | Each node of the cluster will be suffixed with this suffix
radical | yes | string | Regexp used to generate cluster nodes name. Syntax: "10-20" will give you 11 machines numbered from 10 to 20, "10-20;2" will give you 12 machines, one with the number 2, others numbered as before. The produced number is concatenated between prefix and suffix to form machine names.
-power | yes | int | Same as the ``power`` attribute of the ``\<host\>`` tag.
+speed | yes | int | Same as the ``speed`` attribute of the ``\<host\>`` tag.
core | no | int (default: 1) | Same as the ``core`` attribute of the ``\<host\>`` tag.
bw | yes | int | Bandwidth for the links between nodes and backbone (if any). See the \ref pf_link "link section" for syntax/details.
lat | yes | int | Latency for the links between nodes and backbone (if any). See <b>link</b> section for syntax/details.
limiter_link | no | int | Bandwidth for limiter link (if any). This adds a specific link for each node, to set the maximum bandwidth reached when communicating in both directions at the same time. In theory this value should be 2*bw for fullduplex links, but in reality this might be less. This value will depend heavily on the communication model, and on the cluster's hardware, so no default value can be set, this has to be measured. More details can be obtained in <a href="https://hal.inria.fr/hal-00919507/"> "Toward Better Simulation of MPI Applications on Ethernet/TCP Networks"</a>
loopback_bw | no | int | Bandwidth for loopback (if any). See <b>link</b> section for syntax/details. If loopback_bw and loopback_lat (see below) attributes are omitted, no loopback link is created and all intra-node communication will use the main network link of the node. Loopback link is a \ref pf_sharing_policy_fatpipe "\b FATPIPE".
loopback_lat | no | int | Latency for loopback (if any). See <b>link</b> section for syntax/details. See loopback_bw for more info.
-topology | no | FLAT\|TORUS\|FAT_TREE (default: FLAT) | Network topology to use. SimGrid currently supports FLAT (with or without backbone, as described before), <a href="http://en.wikipedia.org/wiki/Torus_interconnect">TORUS </a> and FAT_TREE attributes for this tag.
-topo_parameters | no | string | Specific parameters to pass for the topology defined in the topology tag. For torus networks, comma-separated list of the number of nodes in each dimension of the torus. For fat trees, refer to \ref simgrid::surf::AsClusterFatTree "AsClusterFatTree documentation".
+topology | no | FLAT\|TORUS\|FAT_TREE\|DRAGONFLY (default: FLAT) | Network topology to use. SimGrid currently supports FLAT (with or without backbone, as described before), <a href="http://en.wikipedia.org/wiki/Torus_interconnect">TORUS </a>, FAT_TREE, and DRAGONFLY attributes for this tag.
+topo_parameters | no | string | Specific parameters to pass for the topology defined in the topology tag. For torus networks, comma-separated list of the number of nodes in each dimension of the torus. For fat trees, refer to \ref simgrid::kernel::routing::AsClusterFatTree "AsClusterFatTree documentation". For dragonfly, refer to \ref simgrid::kernel::routing::AsClusterDragonfly "AsClusterDragonfly documentation".
-TODO
the router name is defined as the resulting String in the following
java line of code:
\verbatim
<cluster id="my_cluster_1" prefix="" suffix="" radical="0-262144"
- power="1e9" bw="125e6" lat="5E-5"/>
+ speed="1e9" bw="125e6" lat="5E-5"/>
<cluster id="my_cluster_2" prefix="c-" suffix=".me" radical="0-99"
- power="1e9" bw="125e6" lat="5E-5"
+ speed="1e9" bw="125e6" lat="5E-5"
bb_bw="2.25e9" bb_lat="5E-4"/>
\endverbatim
prefix | yes | string | Each node of the cabinet has to have a name. This name will be prefixed with this prefix.
suffix | yes | string | Each node of the cabinet will be suffixed with this suffix
radical | yes | string | Regexp used to generate cabinet nodes name. Syntax: "10-20" will give you 11 machines numbered from 10 to 20, "10-20;2" will give you 12 machines, one with the number 2, others numbered as before. The produced number is concatenated between prefix and suffix to form machine names.
-power | yes | int | Same as the ``power`` attribute of the \ref pf_host "<host>" tag.
+speed | yes | int | Same as the ``speed`` attribute of the \ref pf_host "<host>" tag.
bw | yes | int | Bandwidth for the links between nodes and backbone (if any). See the \ref pf_link "link section" for syntax/details.
lat | yes | int | Latency for the links between nodes and backbone (if any). See the \ref pf_link "link section" for syntax/details.
\verbatim
<AS id="my_cluster1" routing="Cluster">
<cabinet id="cabinet1" prefix="host-" suffix=".cluster1"
- power="1Gf" bw="125MBps" lat="100us" radical="1-10"/>
+ speed="1Gf" bw="125MBps" lat="100us" radical="1-10"/>
<cabinet id="cabinet2" prefix="host-" suffix=".cluster1"
- power="1Gf" bw="125MBps" lat="100us" radical="11-20"/>
+ speed="1Gf" bw="125MBps" lat="100us" radical="11-20"/>
<cabinet id="cabinet3" prefix="host-" suffix=".cluster1"
- power="1Gf" bw="125MBps" lat="100us" radical="21-30"/>
+ speed="1Gf" bw="125MBps" lat="100us" radical="21-30"/>
<backbone id="backbone1" bandwidth="2.25GBps" latency="500us"/>
</AS>
Attribute name | Mandatory | Values | Description
--------------- | --------- | ------ | -----------
id | yes | string | The identifier of the peer. Facilitates referring to this peer.
-power | yes | int | See the description of the ``host`` tag for this attribute
+speed | yes | int | See the description of the ``host`` tag for this attribute
bw_in | yes | int | Bandwidth downstream
bw_out | yes | int | Bandwidth upstream
lat | yes | double | Latency for both up- and downstream, in seconds.
\verbatim
<peer id="FOO"
coordinates="12.8 14.4 6.4"
- power="1.5Gf"
+ speed="1.5Gf"
bw_in="2.25GBps"
bw_out="2.25GBps"
lat="500us" />
\verbatim
<AS id="as_FOO" routing="Cluster">
- <host id="peer_FOO" power="1.5Gf"/>
+ <host id="peer_FOO" speed="1.5Gf"/>
<link id="link_FOO_UP" bandwidth="2.25GBps" latency="500us"/>
<link id="link_FOO_DOWN" bandwidth="2.25GBps" latency="500us"/>
<router id="router_FOO" coordinates="25.5 9.4 1.4"/>
is just some doc valuable only at the time of writing.
This section describes the storage management under SimGrid ; nowadays
it's only usable with MSG. It relies basically on linux-like concepts.
- You also may want to have a look to its corresponding section in \ref
- msg_file_management ; access functions are organized as a POSIX-like
+ You also may want to have a look to its corresponding section in
+ @ref msg_file ; access functions are organized as a POSIX-like
interface.
\subsubsection pf_sto_conc Storage - Main Concepts
content="content/small_content.txt"
content_type="txt_unix" attach="denise"/>
- <host id="alice" power="1Gf">
+ <host id="alice" speed="1Gf">
<mount storageId="Disk2" name="c:"/>
</host>
- <host id="denise" power="1Gf">
+ <host id="denise" speed="1Gf">
<mount storageId="Disk2" name="c:"/>
<mount storageId="Disk4" name="/home"/>
</host>
<AS id="AS0" routing="Floyd">
<cluster id="my_cluster_1" prefix="c-" suffix=""
- radical="0-1" power="1000000000" bw="125000000" lat="5E-5"
+ radical="0-1" speed="1000000000" bw="125000000" lat="5E-5"
router_id="router1"/>
<AS id="AS1" routing="None">
- <host id="host1" power="1000000000"/>
+ <host id="host1" speed="1000000000"/>
</AS>
<link id="link1" bandwidth="100000" latency="0.01"/>
Dijkstra example :
\verbatim
<AS id="AS_2" routing="Dijkstra">
- <host id="AS_2_host1" power="1000000000"/>
- <host id="AS_2_host2" power="1000000000"/>
- <host id="AS_2_host3" power="1000000000"/>
+ <host id="AS_2_host1" speed="1000000000"/>
+ <host id="AS_2_host2" speed="1000000000"/>
+ <host id="AS_2_host3" speed="1000000000"/>
<link id="AS_2_link1" bandwidth="1250000000" latency="5E-4"/>
<link id="AS_2_link2" bandwidth="1250000000" latency="5E-4"/>
<link id="AS_2_link3" bandwidth="1250000000" latency="5E-4"/>
DijkstraCache example:
\verbatim
<AS id="AS_2" routing="DijkstraCache">
- <host id="AS_2_host1" power="1000000000"/>
+ <host id="AS_2_host1" speed="1000000000"/>
...
(platform unchanged compared to upper example)
\endverbatim
Full example :
\verbatim
<AS id="AS0" routing="Full">
- <host id="host1" power="1000000000"/>
- <host id="host2" power="1000000000"/>
+ <host id="host1" speed="1000000000"/>
+ <host id="host2" speed="1000000000"/>
<link id="link1" bandwidth="125000000" latency="0.000100"/>
<route src="host1" dst="host2"><link_ctn id="link1"/></route>
</AS>
\verbatim
<AS id="AS0" routing="Full">
<cluster id="my_cluster_1" prefix="c-" suffix=".me"
- radical="0-149" power="1000000000" bw="125000000" lat="5E-5"
+ radical="0-149" speed="1000000000" bw="125000000" lat="5E-5"
bb_bw="2250000000" bb_lat="5E-4"/>
<cluster id="my_cluster_2" prefix="c-" suffix=".me"
- radical="150-299" power="1000000000" bw="125000000" lat="5E-5"
- bb_bw="2250000000" bb_lat="5E-4"/>
+ radical="150-299" speed="1000000000" bw="125000000" lat="5E-5"
+ bb_bw="2250000000" bb_lat="5E-4"/>
<link id="backbone" bandwidth="1250000000" latency="5E-4"/>
\verbatim
<AS id="AS_Big" routing="Dijkstra">
<AS id="AS_1" routing="Full">
- <host id="AS_1_host1" power="1000000000"/>
+ <host id="AS_1_host1" speed="1000000000"/>
<link id="AS_1_link" bandwidth="1250000000" latency="5E-4"/>
<router id="AS_1_gateway"/>
<route src="AS_1_host1" dst="AS_1_gateway">
</route>
</AS>
<AS id="AS_2" routing="Floyd">
- <host id="AS_2_host1" power="1000000000"/>
- <host id="AS_2_host2" power="1000000000"/>
- <host id="AS_2_host3" power="1000000000"/>
+ <host id="AS_2_host1" speed="1000000000"/>
+ <host id="AS_2_host2" speed="1000000000"/>
+ <host id="AS_2_host3" speed="1000000000"/>
<link id="AS_2_link1" bandwidth="1250000000" latency="5E-4"/>
<link id="AS_2_link2" bandwidth="1250000000" latency="5E-4"/>
<link id="AS_2_link3" bandwidth="1250000000" latency="5E-4"/>
\verbatim
<AS id="AS0" routing="Full">
- <host id="bob" power="1000000000"/>
+ <host id="bob" speed="1000000000"/>
</AS>
<trace id="myTrace" file="bob.trace" periodicity="1.0"/>
<trace_connect trace="myTrace" element="bob" kind="POWER"/>
| trace | yes | String | Identifier of the referenced trace (specified of the trace's \c id attribute) |
| element | yes | String | The identifier of the referenced entity as given by its \c id attribute |
-\section pf_hints Hints and tips, or how to write a platform efficiently
+\section pf_hints Hints, tips and frequently requested features
Now you should know at least the syntax and be able to create a
platform by your own. However, after having ourselves wrote some platforms, there
produce good platform and some choices you can make in order to have
faster simulations. Here's some hints and tips, then.
+@subsection Finding the platform example that you need
+
+Most platform files that we ship are in the @c examples/platforms
+folder. The good old @c grep tool can find the examples you need when
+wondering on a specific XML tag. Here is an example session searching
+for @ref pf_trace "trace_connect":
+
+@verbatim
+% cd examples/platforms
+% grep -R -i -n --include="*.xml" "trace_connect" .
+./two_hosts_platform_with_availability_included.xml:26:<trace_connect kind="SPEED" trace="A" element="Cpu A"/>
+./two_hosts_platform_with_availability_included.xml:27:<trace_connect kind="HOST_AVAIL" trace="A_failure" element="Cpu A"/>
+./two_hosts_platform_with_availability_included.xml:28:<trace_connect kind="SPEED" trace="B" element="Cpu B"/>
+./two_hosts.xml:17: <trace_connect trace="Tremblay_power" element="Tremblay" kind="SPEED"/>
+@endverbatim
+
\subsection pf_as_h AS Hierarchy
The AS design allows SimGrid to go fast, because computing route is
done only for the set of resources defined in this AS. If you're using
<AS id="exitAS_4" routing="Full">
<router id="router_4"/>
</AS>
-<cluster id="cl_4_1" prefix="c_4_1-" suffix="" radical="1-20" power="1000000000" bw="125000000" lat="5E-5" bb_bw="2250000000" bb_lat="5E-4"/>
-<cluster id="cl_4_2" prefix="c_4_2-" suffix="" radical="1-20" power="1000000000" bw="125000000" lat="5E-5" bb_bw="2250000000" bb_lat="5E-4"/>
+<cluster id="cl_4_1" prefix="c_4_1-" suffix="" radical="1-20" speed="1000000000" bw="125000000" lat="5E-5" bb_bw="2250000000" bb_lat="5E-4"/>
+<cluster id="cl_4_2" prefix="c_4_2-" suffix="" radical="1-20" speed="1000000000" bw="125000000" lat="5E-5" bb_bw="2250000000" bb_lat="5E-4"/>
<link id="4_1" bandwidth="2250000000" latency="5E-5"/>
<link id="4_2" bandwidth="2250000000" latency="5E-5"/>
<link id="bb_4" bandwidth="2250000000" latency="5E-4"/>
<prop id="network/coordinates" value="yes"></prop>
</config>
<AS id="AS0" routing="Vivaldi">
- <host id="100030591" coordinates="25.5 9.4 1.4" power="1.5Gf" />
- <host id="100036570" coordinates="-12.7 -9.9 2.1" power="7.3Gf" />
+ <host id="100030591" coordinates="25.5 9.4 1.4" speed="1.5Gf" />
+ <host id="100036570" coordinates="-12.7 -9.9 2.1" speed="7.3Gf" />
...
- <host id="100429957" coordinates="17.5 6.7 18.8" power="8.3Gf" />
+ <host id="100429957" coordinates="17.5 6.7 18.8" speed="8.3Gf" />
</AS>
</platform>
\endverbatim
<prop id="network/coordinates" value="yes"></prop>
</config>
<AS id="AS0" routing="Vivaldi">
- <peer id="peer-0" coordinates="173.0 96.8 0.1" power="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
- <peer id="peer-1" coordinates="247.0 57.3 0.6" power="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
- <peer id="peer-2" coordinates="243.4 58.8 1.4" power="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
+ <peer id="peer-0" coordinates="173.0 96.8 0.1" speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
+ <peer id="peer-1" coordinates="247.0 57.3 0.6" speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
+ <peer id="peer-2" coordinates="243.4 58.8 1.4" speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
</AS>
</platform>
\endverbatim
\li <b>Cluster</b>: Cluster routing, specific to cluster tag, should
not be used.
-\subsection pf_switch How to describe a switch given that is no switch tag?
+\subsection pf_switch I want to describe a switch but there is no switch tag!
+
+Actually we did not include switch tag. But when you're trying to
+simulate a switch, assuming
+fluid bandwidth models are used (which SimGrid uses by default unless
+ns-3 or constant network models are activated), the limiting factor is
+switch backplane bandwidth. So, essentially, at least from
+the simulation perspective, a switch is similar to a
+link: some device that is traversed by flows and with some latency and
+so,e maximum bandwidth. Thus, you can simply simulate a switch as a
+link. Many links
+can be connected to this "switch", which is then included in routes just
+as a normal link.
-Actually we did not include switch tag, ok. But when you're trying to
-simulate a switch, the only major impact it has when you're using
-fluid model (and SimGrid uses fluid model unless you activate
-ns-3 or constant network mode) is the impact of the upper limit of
-the switch motherboard speed that will eventually be reached if you're
-using intensively your switch. So, the switch impact is similar to a
-link one. That's why we are used to describe a switch using a link tag
-(as a link is not an edge by a hyperedge, you can connect more than 2
-other links to it).
-\subsection pf_multicabinets How to model multi-cabinets clusters?
+\subsection pf_multicabinets I want to describe multi-cabinets clusters!
You have several possibilities, as usual when modeling things. If your
cabinets are homogeneous and the intercabinet network negligible for
<cluster> per cabinet and interconnect them together. This is
what we did in the G5K example platform for the Graphen cluster.
-\subsection pf_platform_multipath How to express multipath routing in platform files?
+\subsection pf_platform_multipath I want to express multipath routing in platform files!
It is unfortunately impossible to express the fact that there is more
than one routing path between two given hosts. Let's consider the