Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge pull request #193 from Takishipp/signals
[simgrid.git] / doc / doxygen / platform.doc
index 7f4b8f2..1ef202b 100644 (file)
 
 @tableofcontents
 
-In order to run any simulation, SimGrid must be provided with three things:
-something to run (i.e., your code), a description of the platform on which you want to simulate your application, and 
-information about the deployment of the application: Which process should be executed onto which processor/core?
-
-For the last two items, there are essentially three possible ways you can provide
-this information as an input:
-\li You can program, if you're using MSG, some of the platform and
-    deployment functions. If you choose to follow this approach, check the dedicated documentation
-    (\ref msg_simulation).
-\li You can use two XML files: one for the platform description and the other for the deployment. 
-\li You can program the description of your platform  in Lua format.
-
-For more information on SimGrid's deployment features, please refer to the \ref deployment section.
-
-The platform description may be intricate. This documentation is all about how to write this file. First, the basic 
-concepts are introduced. Then, advanced options are explained. Finally, some hints and tips on how to write a better 
-platform description are given.
-
-\section pf_overview Some words about XML and DTD
-
-We opted for XML not only because it is extensible but also because many tools (and plugins for existing tools) are 
-available that facilitate editing and validating XML files. Furthermore, libraries that parse XML are often already
-available and very well tested.
-
-The XML checking is done based on the [simgrid.dtd](http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd) Document Type 
-Definition (DTD) file.
-
-If you read the DTD, you should notice the following:
-\li The platform tag has a version attribute. The current version is <b>4</b>. This attribute might be used in the 
-    provide backward compatibility.
-\li The DTD contains definitions for both the platform description and deployment files used by SimGrid.
-
-\section pf_basics Basic concepts
-
-Nowadays, the Internet is composed of a bunch of independently managed
-networks. Within each of those networks, there are entry and exit
-points (most of the time, you can both enter and exit through the same
-point); this allows to leave the current network and reach other
-networks, possibly even in other locations.
-At the upper level, such a network is called
-<b>Autonomous System (AS)</b>, while at the lower level it is named
-sub-network, or LAN (local area network).
-They are indeed autonomous: routing is defined
-(within the limits of his network) by the administrator, and so, those
-networks can operate without a connection to other
-networks. So-called gateways allow you to go from one network to
-another, if such a (physical) connection exists. Every node in one network
-that can be directly reached (i.e., without traversing other nodes) from
-another network is called a gateway.
-Each autonomous system consists of equipment such as cables (network links),
-routers and switches as well as computers.
-
-The structure of the SimGrid platform description relies exactly on the same
-concept as a real-life platform (see above).  Every resource (computers,
-network equipment etc.) belongs to an AS, which can be defined by using the
-\<AS\> tag. Within an AS, the routing between its elements can be defined
-abitrarily. There are several modes for routing, and exactly one mode must be
-selected by specifying the routing attribute in the AS tag:
-
-\verbatim
-<AS id="AS0" routing="Full">
-\endverbatim
-
-\remark
-  Other supported values for the routing attribute can be found below, Section
-  \ref pf_raf.
-
-There is also the ``<route>`` tag; this tag takes two attributes, ``src`` (source)
-and ``dst`` (destination). Both source and destination must be valid identifiers
-for routers (these will be introduced later). Contained by the ``<route>`` are
-network links; these links must be used in order to communicate from the source
-to the destination specified in the tag. Hence, a route merely describes
-how to reach a router from another router.
-
-\remark
-  More information and (code-)examples can be found in Section \ref pf_rm.
-
-An AS can also contain itself one or more AS; this allows you to
-model the hierarchy of your platform.
-
-### Within each AS, the following types of resources exist:
-
-%Resource        | Documented in Section | Description
---------------- | --------------------- | -----------
-AS              |                       | Every Autonomous System (AS) may contain one or more AS.
-host            | \ref pf_host          | This entity carries out the actual computation. For this reason, it contains processors (with potentially multiple cores).
-router          | \ref pf_router        | In SimGrid, routers are used to provide helpful information to routing algorithms.  Routers may also act as gateways, connecting several autonomous systems with each other.
-link            | \ref pf_link          | In SimGrid, (network)links define a connection between two or potentially even more resources. Every link has a bandwidth and a latency and may potentially experience congestion.
-cluster         | \ref pf_cluster       | In SimGrid, clusters were introduced to model large and homogenous environments. They are not really a resource by themselves - technically, they are only a shortcut, as they will internally set up all the hosts, network and routing for you, i.e., using this resource, one can easily setup thousands of hosts and links in a few lines of code. Each cluster is itself an AS.
-
-%As it is desirable to interconnect these resources, a routing has to be
-defined. The AS is supposed to be Autonomous, hence this has to be done at the
-AS level. The AS handles two different types of entities (<b>host/router</b>
-and <b>AS</b>). However, the user is responsible to define routes between those resources,
-otherwise entities will be unconnected and therefore unreachable from other
-entities. Although several routing algorithms are built into SimGrid (see
-\ref pf_rm), you might encounter a case where you want to define routes
-manually (for instance, due to specific requirements of your platform).
-
-There are three tags to use:
-\li <b>ASroute</b>: to define routes between two  <b>AS</b>
-\li <b>route</b>: to define routes between two <b>host/router</b>
-\li <b>bypassRoute</b>: to define routes between two <b>AS</b> that
-    will bypass default routing (as specified by the ``routing`` attribute
-    supplied to ``<AS>``, see above).
+As @ref starting_components "explained in the introduction," any
+SimGrid study must entail the description of the platform on which you
+want to simulate your application. You have to describe **each element
+of your platform**, such as computing hosts, clusters, each disks,
+links, etc. You must also define the **routing on your platform**, ie
+which path is taken between two hosts. Finally, you may also describe
+an **experimental scenario**, with qualitative changes (e.g.,
+bandwidth changes representing an external load) and qualitative
+changes (representing how some elements fail and restart over time).
+
+You should really separate your application from the platform
+description, as it will ease your experimental campain afterward.
+Mixing them is seen as a really bad experimental practice. The easiest
+to enforce this split is to put the platform description in a XML
+file. Many example platforms are provided in the archive, and this
+page gives all needed details to write such files, as well as some
+hints and tricks about describing your platform.
+
+On the other side, XML is sometimes not expressive enough for some
+platforms, in particular large platforms exhibiting repetitive
+patterns that are not simply expressed in XML.  In practice, many
+users end up generating their XML platform files from some sort of
+scripts. It is probably preferable to rewrite your XML @ref
+platform_lua "platform using the lua scripting language" instead.
+In the future, it should be possible to describe the platform directly
+in C++, but this is not possible yet.
+
+As usual, SimGrid is a versatile framework, and you should find the
+way of describing your platform that best fits your experimental
+practice. 
+
+\section pf_overview Describing the platform with XML
+
+Your platform description should follow the specification presented in
+the [simgrid.dtd](http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd)
+DTD file. The same DTD is used for both the platform and deployment
+files.
+
+From time to time, this DTD evolves to introduce possibly
+backward-incompatible changes. That is why each platform desciption is
+enclosed within a @c platform tag, that have a @c version attribute. 
+The current version is <b>4.1</b>. The @c simgrid_update_xml program can
+upgrade most of the past platform files to the recent formalism.
+
+\section pf_first_example First Platform Example 
+
+Here is a very simple platform file, containing 3 resources (two hosts
+and one link), and explicitly giving the route between the hosts.
+
+\code{.xml}
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
+<platform version="4.1">
+  <zone id="first zone" routing="Full">
+    <!-- the resources -->
+    <host id="host1" speed="1Mf"/>
+    <host id="host2" speed="2Mf"/>
+    <link id="link1" bandwidth="125MBps" latency="100us"/>
+    <!-- the routing: specify how the hosts are interconnected -->
+    <route src="host1" dst="host2">
+      <link_ctn id="link1"/>
+    </route>
+  </zone>
+</platform>
+\endcode
 
+As we said, the englobing @ref pf_overview "&lt;platform&gt;" tag is
+used to specify the dtd version used for this file.
+
+Then, every resource (specified with @ref pf_tag_host, @ref
+pf_tag_link or others) must be located within a given **networking
+zone**.  Each zone is in charge of the routing between its
+resources. It means that when an host wants to communicate with
+another host of the same zone, it is the zone's duty to find the list
+of links that are involved in the communication. Here, since the @ref
+pf_tag_zone tag has **Full** as a **routing attribute**, all routes
+must be explicitely given using the @ref pf_tag_route and @ref
+pf_tag_linkctn tags (this @ref pf_rm "routing model" is both simple
+and inefficient :) It is OK to not specify the route between two
+hosts, as long as the processes located on them never try to
+communicate together.
+
+A zone can contain several zones itself, leading to a hierarchical
+decomposition of the platform. This can be more efficient (as the
+inter-zone routing gets factorized with @ref pf_tag_zoneroute), and
+allows to have more than one routing model in your platform. For
+example, you could have a coordinate-based routing for the WAN parts
+of your platforms, a full routing within each datacenter, and a highly
+optimized routing within each cluster of the datacenter.  In this
+case, determining the route between two given hosts gets @ref
+routing_basics "somewhat more complex" but SimGrid still computes
+these routes for you in a time- and space-efficient manner.
 Here is an illustration of these concepts:
 
-![An illustration of an AS hierarchy. Here, AS1 contains 5 other ASes who in turn may contain other ASes as well.](AS_hierarchy.png)
- Circles represent processing units and squares represent network routers. Bold
-    lines represent communication links. AS2 models the core of a national
-    network interconnecting a small flat cluster (AS4) and a larger
-    hierarchical cluster (AS5), a subset of a LAN (AS6), and a set of peers
-    scattered around the world (AS7).
-
-\section pf_pftags Resource description
-
-\subsection  pf_As Platform: The &lt;AS&gt; tag
-
-The concept of an AS was already outlined above (Section \ref pf_basics);
-recall that the AS is so important because it groups other resources (such
-as routers/hosts) together (in fact, these resources must be contained by
-an AS).
-
-Available attributes :
-
-Attribute name  | Mandatory | Values | Description
---------------- | --------- | ------ | -----------
-id              | yes       | String | The identifier of an AS; facilitates referring to this AS. ID must be unique.
-routing         | yes       | Full\| Floyd\| Dijkstra\| DijkstraCache\| None\| Vivaldi\| Cluster | See Section \ref pf_rm for details.
-
-
-<b>Example:</b>
-\code
-<AS id="AS0" routing="Full">
-   <host id="host1" power="1000000000"/>
-   <host id="host2" power="1000000000"/>
-   <link id="link1" bandwidth="125000000" latency="0.000100"/>
-   <route src="host1" dst="host2"><link_ctn id="link1"/></route>
-</AS>
-\endcode
-
-In this example, AS0 contains two hosts (host1 and host2). The route
-between the hosts goes through link1.
+![A hierarchy of networking zones.](AS_hierarchy.png)
 
-\subsection pf_Cr Computing resources: hosts, clusters and peers.
+Circles represent processing units and squares represent network
+routers. Bold lines represent communication links. The zone "AS2"
+models the core of a national network interconnecting a small flat
+cluster (AS4) and a larger hierarchical cluster (AS5), a subset of a
+LAN (AS6), and a set of peers scattered around the world (AS7).
 
-\subsubsection pf_host &lt;host/&gt;
+\section pf_res Resource description
 
-A <b>host</b> represents a computer/node card. Every host is able to execute
-code and it can send and receive data to/from other hosts. Most importantly,
-a host can contain more than 1 core.
+\subsection pf_res_computing Computing Resources
 
-### Attributes: ###
+\subsubsection pf_tag_host &lt;host&gt;
 
-Attribute name  | Mandatory | Values | Description
---------------- | --------- | ------ | -----------
-id              | yes       | String | The identifier of the host. facilitates referring to this AS.
-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 "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_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_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.
+An host is the computing resource on which an actor can execute.
 
-### Possible children: ###
+Attribute         | Values                                 | Description
+----------------- | -------------------------------------- | -----------
+id                | String (mandatory)                     | The identifier of the host. facilitates referring to this AS.
+speed             | double (mandatory)                     | Computational power of every core of this host in FLOPS (must be positive)
+core              | int (defaults to 1)                    | Number of cores (see @ref howto_multicore)
+state             | optionally "OFF"                       | If set to OFF, the host is initially turned off.
+availability_file | File name (optional) | (Relative or absolute) filename to use as input; must contain availability traces for this host. The syntax of this file is defined below.
+state_file        | File name (optional) |  File to use as a state profile (see @ref howto_churn)
+coordinates       | String (mandatory when using Vivaldi routing) | The coordinates of this host (see @ref pf_P2P_tags).
+pstate     | Double (Defaults to 0) | FIXME: Not yet documented.
 
-Tag name        | Description | Documentation
-------------    | ----------- | -------------
-\<mount/\>        | Defines mounting points between some storage resource and the host. | \ref pf_storage_entity_mount
-\<prop/\>         | The prop tag allows you to define additional information on this host following the attribute/value schema. You may want to use it to give information to the tool you use for rendering your simulation, for example. | N/A
+#### Included tags ####
 
-### Example ###
+ - @ref pf_tag_mount Specifies the storages mounted on that host
+ - @ref pf_tag_prop Specifies a user-defined property of that host, that you can retrieve with MSG_host_get_property_value() or simgrid::s4u::Host::property().
 
-\verbatim
-   <host id="host1" power="1000000000"/>
-   <host id="host2" power="1000000000">
-       <prop id="color" value="blue"/>
-       <prop id="rendershape" value="square"/>
-   </host>
-\endverbatim
+#### Examples ####
 
+\code{.xml}
+<host id="host1" speed="1000000000"/>
+<host id="host2" speed="1000000000">
+   <prop id="color" value="blue"/>
+   <prop id="rendershape" value="square"/>
+</host>
+\endcode
 
 \anchor pf_host_dynamism
 ### Expressing dynamism ###
@@ -196,7 +149,7 @@ and a separate text file whose syntax is exemplified below.
 
 \verbatim
 <platform version="4">
-  <host id="bob" power="500Gf" availability_file="bob.trace" />
+  <host id="bob" speed="500Gf" availability_file="bob.trace" />
 </platform>
 \endverbatim
 
@@ -222,53 +175,7 @@ will start delivering 80\% of its power. In this example, this amounts to 400 Mf
 Since the periodicity in line 1 was set to be 1.0, i.e., 1 timestep, this host will
 continue to provide 500 Mflop/s from time 21. From time 32 it will provide 250 MFlop/s and so on.
 
-### Changing initial state ###
-
-It is also possible to specify whether the host is up or down by setting the
-``state`` attribute to either <b>ON</b> (default value) or <b>OFF</b>.
-
-#### Example: Expliciting the default value "ON" ####
-
-\verbatim
-<platform version="4">
-   <host id="bob" power="500Gf" state="ON" />
-</platform>
-\endverbatim
-
-If you want this host to be unavailable, simply substitute ON with OFF.
-
-\anchor pf_host_churn
-### Expressing churn ###
-
-To express the fact that a host can change state over time (as in P2P
-systems, for instance), it is possible to use a file describing the time
-at which the host is turned on or off. An example of the content
-of such a file is presented below.
-
-#### Adding a state file ####
-
-\verbatim
-<platform version="4">
-  <host id="bob" power="500Gf" state_file="bob.fail" />
-</platform>
-\endverbatim
-
-#### Example of "bob.fail" file ####
-
-~~~{.py}
-  PERIODICITY 10.0
-  1.0 0
-  2.0 1
-~~~
-
-A zero value means <b>down</b> (i.e., OFF) while a positive one means <b>up and
-  running</b> (i.e., ON). From time 0.0 to time 1.0, the host is on as usual. At time 1.0, it is
-turned off and at time 2.0, it is turned on again until time 12 (2 plus the
-periodicity 10). It will be turned off again at time 13.0 until time 23.0, and
-so on.
-
-
-\subsubsection pf_cluster &lt;cluster&gt;
+\subsubsection pf_tag_cluster &lt;cluster&gt;
 
 ``<cluster />`` represents a machine-cluster. It is most commonly used
 when one wants to define many hosts and a network quickly. Technically,
@@ -320,9 +227,9 @@ id              | yes       | string | The identifier of the cluster. Facilitate
 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.
+bw              | yes       | int    | Bandwidth for the links between nodes and backbone (if any). See the \ref pf_tag_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.
 sharing_policy  | no        | string | Sharing policy for the links between nodes and backbone (if any). See <b>link</b> section for syntax/details.
 bb_bw           | no        | int    | Bandwidth for backbone (if any). See <b>link</b> section for syntax/details. If bb_bw and bb_lat (see below) attributes are omitted, no backbone is created (alternative cluster architecture <b>described before</b>).
@@ -332,14 +239,14 @@ limiter_link      | no        | int    | Bandwidth for limiter link (if any). Th
 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\|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".
+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. Please refer to the specific documentation for \ref simgrid::kernel::routing::FatTreeZone "FatTree NetZone", \ref simgrid::kernel::routing::DragonflyZone "Dragonfly NetZone".
 
 
 the router name is defined as the resulting String in the following
 java line of code:
 
 @verbatim
-router_name = prefix + clusterId + _router + suffix;
+router_name = prefix + clusterId + "_router" + suffix;
 @endverbatim
 
 
@@ -349,10 +256,10 @@ Consider the following two (and independent) uses of the ``cluster`` tag:
 
 \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
 
@@ -372,7 +279,7 @@ c-99.me
     This tag is only available when the routing mode of the AS
     is set to ``Cluster``.
 
-The ``&lt;cabinet /&gt;`` tag is, like the \ref pf_cluster "&lt;cluster&gt;" tag,
+The ``&lt;cabinet /&gt;`` tag is, like the \ref pf_tag_cluster "&lt;cluster&gt;" tag,
 a meta-tag. This means that it is simply a shortcut for creating a set of (homogenous) hosts and links quickly;
 unsurprisingly, this tag was introduced to setup cabinets in data centers quickly. Unlike
 &lt;cluster&gt;, however, the &lt;cabinet&gt; assumes that you create the backbone
@@ -386,9 +293,9 @@ id              | yes       | string | The identifier of the cabinet. Facilitate
 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 "&lt;host&gt;" 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.
+speed           | yes       | int    | Same as the ``speed`` attribute of the \ref pf_tag_host "&lt;host&gt;" tag.
+bw              | yes       | int    | Bandwidth for the links between nodes and backbone (if any). See the \ref pf_tag_link "link section" for syntax/details.
+lat             | yes       | int    | Latency for the links between nodes and backbone (if any). See the \ref pf_tag_link "link section" for syntax/details.
 
 \note
     Please note that as of now, it is impossible to change attributes such as,
@@ -403,11 +310,11 @@ shows how to use the cabinet tag.
 \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>
@@ -422,59 +329,41 @@ The hosts generated in the above example are named host-1.cluster, host-2.cluste
 etc.
 
 
-\subsubsection pf_peer The &lt;peer&gt; tag
+\subsubsection pf_peer \<peer\> (Vivaldi netzones only)
 
-This tag represents a peer, as in Peer-to-Peer (P2P) networks. However, internally,
-SimGrid transforms a peer into an AS (similar to Cluster). Hence, this tag
-is virtually only a shortcut that comes with some pre-defined resources
-and values. These are:
+This tag represents a peer, as in Peer-to-Peer (P2P) networks. This
+can only be used in Vivaldi NetZones. It creates the following
+resources to the NetZone:
 
-\li A tiny AS whose routing type is cluster is created
 \li A host
 \li Two links: One for download and one for upload. This is
     convenient to use and simulate stuff under the last mile model (e.g., ADSL peers).
 \li It connects the two links to the host
-\li It creates a router (a gateway) that serves as an entry point for this peer zone.
-    This router has coordinates.
 
 #### Attributes ####
 
 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
-bw_in           | yes       | int    | Bandwidth downstream
-bw_out          | yes       | int    | Bandwidth upstream
-lat             | yes       | double | Latency for both up- and downstream, in seconds.
+speed           | yes       | int    | See the description of the ``host`` tag for this attribute
+bw_in           | yes       | int    | Bandwidth of the private downstream link
+bw_out          | yes       | int    | Bandwidth of the private upstream link
 coordinates     | no        | string | Coordinates of the gateway for this peer. Example value: 12.8 14.4 6.4
 sharing_policy  | no        | SHARED\|FULLDUPLEX (default: FULLDUPLEX) | Sharing policy for links. See <b>link</b> description for details.
 availability_file| no       | string | Availability file for the peer. Same as host availability file. See <b>host</b> description for details.
 state_file      | no        | string | State file for the peer. Same as host state file. See <b>host</b> description for details.
 
-Internally, SimGrid transforms any ``\<peer/\>`` construct such as
-\verbatim
-<peer id="FOO"
-  coordinates="12.8 14.4 6.4"
-  power="1.5Gf"
-  bw_in="2.25GBps"
-  bw_out="2.25GBps"
-  lat="500us" />
-\endverbatim
-into an ``\<AS\>`` (see Sections \ref pf_basics and \ref pf_As). In fact, this example of the ``\<peer/\>`` tag
-is completely equivalent to the following declaration:
 
-\verbatim
-<AS id="as_FOO" routing="Cluster">
-   <host id="peer_FOO" power="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"/>
-   <host_link id="peer_FOO" up="link_FOO_UP" down="link_FOO_DOWN"/>
-</AS>
-\endverbatim
+The communication latency between an host A=(xA,yA,zA) and an host
+B=(xB,yB,zB) is computed as follows:
+ latency = sqrt( (xA-xB)² + (yA-yB)² ) + zA + zB
 
+See the documentation of simgrid::kernel::routing::VivaldiZone for
+details on how the latency is computed from the coordinate, and on the
+the up and down bandwidth are used.
 
-\subsection pf_ne Network equipments: links and routers
+\subsection pf_ne Network equipments
 
 There are two tags at all times available to represent network entities and
 several other tags that are available only in certain contexts.
@@ -502,7 +391,7 @@ several other tags that are available only in certain contexts.
 
 \subsubsection pf_router &lt;router/&gt;
 
-%As said before, <b>router</b> is used only to give some information
+As said before, <b>router</b> is used only to give some information
 for routing algorithms. So, it does not have any attributes except :
 
 #### Attributes ####
@@ -518,7 +407,7 @@ coordinates     | no        | string | Must be provided when choosing the Vivald
  <router id="gw_dc1_horizdist"/>
 \endverbatim
 
-\subsubsection pf_link &lt;link/&gt;
+\subsubsection pf_tag_link &lt;link&gt;
 
 Network links can represent one-hop network connections. They are
 characterized by their id and their bandwidth; links can (but may not) be subject
@@ -667,7 +556,6 @@ be adjusted to 0.01 (or 10ms) and one second later it will be set again to 1ms.
 value will not change until second 5, when the periodicity defined in line 1
 kicks in. It then loops back, starting at 100µs (the initial value) for one second.
 
-
 #### The ``<prop/>`` tag ####
 
 Similar to the ``<host>`` tag, a link may also contain the ``<prop/>`` tag; see the host
@@ -718,7 +606,7 @@ Entity name     | Description
 --------------- | -----------
 \ref pf_storage_entity_storage_type "storage_type"    | Defines a template for a particular kind of storage (such as a hard-drive) and specifies important features of the storage, such as capacity, performance (read/write), contents, ... Different models of hard-drives use different storage_types (because the difference between an SSD and an HDD does matter), as they differ in some specifications (e.g., different sizes or read/write performance).
 \ref pf_storage_entity_storage "storage"        | Defines an actual instance of a storage type (disk, RAM, ...); uses a ``storage_type`` template (see line above) so that you don't need to re-specify the same details over and over again.
-\ref pf_storage_entity_mount "mount"          | Must be wrapped by a \ref pf_host tag; declares which storage(s) this host has mounted and where (i.e., the mountpoint).
+\ref pf_tag_mount "mount"          | Must be wrapped by a \ref pf_tag_host tag; declares which storage(s) this host has mounted and where (i.e., the mountpoint).
 
 
 \anchor pf_storage_content_file
@@ -794,10 +682,9 @@ these might also help you to get started.
 Attribute name  | Mandatory | Values | Description
 --------------- | --------- | ------ | -----------
 id              | yes       | string | Identifier of this storage_type; used when referring to it
-model           | yes       | string | For reasons of future backwards compatibility only; specifies the name of the model for the storage that should be used
+model           | no        | string | In the future, this will allow to change the performance model to use
 size            | yes       | string | Specifies the amount of available storage space; you can specify storage like "500GiB" or "500GB" if you want. (TODO add a link to all the available abbreviations)
 content         | yes       | string | Path to a \ref pf_storage_content_file "Storage Content File" on your system. This file must exist.
-content_type    | no        | ("txt_unix"\|"txt_win") | Determines which kind of filesystem you're using; make sure the filenames (stored in that file, see \ref pf_storage_content_file_structure "Storage Content File Structure"!)
 
 This tag must contain some predefined model properties, specified via the &lt;model_prop&gt; tag. Here is a list,
 see below for an example:
@@ -806,7 +693,6 @@ Property id     | Mandatory | Values | Description
 --------------- | --------- | ------ | -----------
 Bwrite          | yes       | string | Bandwidth for write access; in B/s (but you can also specify e.g. "30MBps")
 Bread           | yes       | string | Bandwidth for read access; in B/s (but you can also specify e.g. "30MBps")
-Bconnexion      | yes       | string | Throughput (of the storage connector) in B/s.
 
 \note
      A storage_type can also contain the <b>&lt;prop&gt;</b> tag. The &lt;prop&gt; tag allows you
@@ -816,26 +702,21 @@ Bconnexion      | yes       | string | Throughput (of the storage connector) in
 
 Here is a complete example for the ``storage_type`` tag:
 \verbatim
-<storage_type id="single_HDD" model="linear_no_lat" size="4000" content_type="txt_unix">
+<storage_type id="single_HDD" size="4000">
   <model_prop id="Bwrite" value="30MBps" />
   <model_prop id="Bread" value="100MBps" />
-  <model_prop id="Bconnection" value="150MBps" />
   <prop id="Brand" value="Western Digital" />
 </storage_type>
 \endverbatim
 
-\anchor pf_storage_entity_storage
-#### &lt;storage&gt; ####
-
-``storage`` attributes:
+@subsubsection pf_tag_storage &lt;storage&gt; 
 
-Attribute name | Mandatory | Values | Description
+Attributes     | Mandatory | Values | Description
 -------------- | --------- | ------ | -----------
 id             | yes       | string | Identifier of this ``storage``; used when referring to it
 typeId         | yes       | string | Here you need to refer to an already existing \ref pf_storage_entity_storage_type "\<storage_type\>"; the storage entity defined by this tag will then inherit the properties defined there.
 attach         | yes       | string | Name of a host (see Section \ref pf_host) to which this storage is <i>physically</i> attached to (e.g., a hard drive in a computer)
 content        | no        | string | When specified, overwrites the content attribute of \ref pf_storage_entity_storage_type "\<storage_type\>"
-content_type   | no        | string | When specified, overwrites the content_type attribute of \ref pf_storage_entity_storage_type "\<storage_type\>"
 
 Here are two examples:
 
@@ -843,8 +724,7 @@ Here are two examples:
      <storage id="Disk1" typeId="single_HDD" attach="bob" />
 
      <storage id="Disk2" typeId="single_SSD"
-              content="content/win_storage_content.txt"
-              content_type="txt_windows" attach="alice" />
+              content="content/win_storage_content.txt" />
 \endverbatim
 
 The first example is straightforward: A disk is defined and called "Disk1"; it is
@@ -856,39 +736,36 @@ now specifies a new content file (so the contents will be different from Disk1)
 and the filesystem uses the windows style; finally, it is attached to a second host,
 called alice (which is again not defined here).
 
-\anchor pf_storage_entity_mount
-#### &lt;mount&gt; ####
+\subsubsection pf_tag_mount &lt;mount&gt;
 
-Attributes:
-| Attribute name   | Mandatory   | Values   | Description                                                                                               |
-| ---------------- | ----------- | -------- | -------------                                                                                             |
-| id               | yes         | string   | Refers to a \ref pf_storage_entity_storage "&lt;storage&gt;" entity that will be mounted on that computer |
-| name             | yes         | string   | Path/location to/of the logical reference (mount point) of this disk
+| Attribute   | Mandatory   | Values   | Description                                                                                               |
+| ----------- | ----------- | -------- | -------------                                                                                             |
+| id          | yes         | string   | Refers to a \ref pf_storage_entity_storage "&lt;storage&gt;" entity that will be mounted on that computer |
+| name        | yes         | string   | Path/location to/of the logical reference (mount point) of this disk
 
-This tag must be enclosed by a \ref pf_host tag. It then specifies where the mountpoint of a given storage device (defined by the ``id`` attribute)
+This tag must be enclosed by a \ref pf_tag_host tag. It then specifies where the mountpoint of a given storage device (defined by the ``id`` attribute)
 is; this location is specified by the ``name`` attribute.
 
 Here is a simple example, taken from the file ``examples/platform/storage.xml``:
 
 \verbatim
-    <storage_type id="single_SSD" model="linear_no_lat" size="500GiB">
+    <storage_type id="single_SSD" size="500GiB">
        <model_prop id="Bwrite" value="60MBps" />
        <model_prop id="Bread" value="200MBps" />
-       <model_prop id="Bconnection" value="220MBps" />
     </storage_type>
 
     <storage id="Disk2" typeId="single_SSD"
               content="content/win_storage_content.txt"
-              content_type="txt_windows" attach="alice" />
+              attach="alice" />
     <storage id="Disk4" typeId="single_SSD"
              content="content/small_content.txt"
-             content_type="txt_unix" attach="denise"/>
+             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>
@@ -983,6 +860,31 @@ are all calculating shortest paths. They do require some time to converge, but
 eventually, when the routing tables have stabilized, your packets will follow
 the shortest paths.
 
+\subsection  pf_tag_zone &lt;zone&gt;
+
+Before SimGrid v3.16, networking zones used to be called Autonomous
+Systems, but this was misleading as zones may include other zones in a
+hierarchical manner. If you find any remaining reference to ASes,
+please report this as a bug.
+
+Attribute   | Value                                             | Description
+----------- | ------------------------------------------------- | ----------------------------------------------
+id          | String (mandatory)                                | The identifier of this zone (must be unique)
+routing     | One of the existing routing algorithm (mandatory) | See Section \ref pf_rm for details.
+
+<b>Example:</b>
+\code
+<AS id="AS0" routing="Full">
+   <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>
+\endcode
+
+In this example, AS0 contains two hosts (host1 and host2). The route
+between the hosts goes through link1.
+
 \subsection pf_rm Routing models
 
 For each AS, you must define explicitly which routing model will
@@ -1050,11 +952,11 @@ Floyd example:
 <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"/>
@@ -1091,9 +993,9 @@ routing model (the path is given relative to SimGrid's source directory)
 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"/>
@@ -1114,7 +1016,7 @@ Dijkstra example :
 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
@@ -1141,8 +1043,8 @@ if there are no example files listed here, this is likely to be correct.
 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>
@@ -1159,7 +1061,7 @@ routing model (the path is given relative to SimGrid's source directory):
 
 | Name                                     | Description                                                                                                                         |
 | ---------------------------------------- | ------------------------------------------------------------------------------                                                      |
-| \ref pf_routing_model_cluster "Cluster"  | This is specific to the \ref pf_cluster "&lt;cluster/&gt;" tag and should not be used by the user, as several assumptions are made. |
+| \ref pf_routing_model_cluster "Cluster"  | This is specific to the \ref pf_tag_cluster "&lt;cluster/&gt;" tag and should not be used by the user, as several assumptions are made. |
 | \ref pf_routing_model_none    "None"     | No routing at all. Unless you know what you're doing, avoid using this mode in combination with a non-constant network model.       |
 | \ref pf_routing_model_vivaldi "Vivaldi"  | Perfect when you want to use coordinates. Also see the corresponding \ref pf_P2P_tags "P2P section" below.                          |
 
@@ -1184,7 +1086,7 @@ available within this model and if you try to communicate within the AS that
 uses this model, SimGrid will fail unless you have explicitly activated the
 \ref options_model_select_network_constant "Constant Network Model" (this model charges
 the same for every single communication). It should
-be noted, however, that you can still attach an \ref pf_routing_tag_asroute "ASroute",
+be noted, however, that you can still attach an \ref pf_tag_asroute "ASroute",
 as is demonstrated in the example below:
 
 \verbinclude platforms/cluster_and_one_host.xml
@@ -1203,12 +1105,9 @@ routing model (the path is given relative to SimGrid's source directory):
 For more information on how to use the [Vivaldi Coordinates](https://en.wikipedia.org/wiki/Vivaldi_coordinates),
 see also Section \ref pf_P2P_tags "P2P tags".
 
-For documentation on how to activate this model (as some initialization must be done
-in the simulator), see Section \ref options_model_network_coord "Activating Coordinate Based Routing".
-
 Note that it is possible to combine the Vivaldi routing model with other routing models;
 an example can be found in the file \c examples/platforms/cloud.xml. This
-examples models an AS using Vivaldi that contains other ASes that use different
+examples models a NetZone using Vivaldi that contains other NetZones that use different
 routing models.
 
 #### Example platform files ####
@@ -1225,10 +1124,10 @@ There are currently four different ways to define routes:
 
 | Name                                              | Description                                                                         |
 | ------------------------------------------------- | ----------------------------------------------------------------------------------- |
-| \ref pf_routing_tag_route "route"                 | Used to define route between host/router                                            |
-| \ref pf_routing_tag_asroute "ASroute"             | Used to define route between different AS                                           |
-| \ref pf_routing_tag_bypassroute "bypassRoute"     | Used to supersede normal routes as calculated by the network model between host/router; e.g., can be used to use a route that is not the shortest path for any of the shortest-path routing models. |
-| \ref pf_routing_tag_bypassasroute "bypassASroute"  | Used in the same way as bypassRoute, but for AS                                     |
+| \ref pf_tag_route "route"                 | Used to define route between host/router                                            |
+| \ref pf_tag_zoneroute "zoneRoute"             | Used to define route between different zones                                           |
+| \ref pf_tag_bypassroute "bypassRoute"     | Used to supersede normal routes as calculated by the network model between host/router; e.g., can be used to use a route that is not the shortest path for any of the shortest-path routing models. |
+| \ref pf_tag_bypassasroute "bypassZoneRoute"  | Used in the same way as bypassRoute, but for zones                                     |
 
 Basically all those tags will contain an (ordered) list of references
 to link that compose the route you want to define.
@@ -1244,14 +1143,14 @@ Consider the example below:
 \endverbatim
 
 The route here from host Alice to Bob will be first link1, then link2,
-and finally link3. What about the reverse route? \ref pf_routing_tag_route "Route" and
-\ref pf_routing_tag_asroute "ASroute" have an optional attribute \c symmetrical, that can
+and finally link3. What about the reverse route? \ref pf_tag_route "Route" and
+\ref pf_tag_zoneroute "ASroute" have an optional attribute \c symmetrical, that can
 be either \c YES or \c NO. \c YES means that the reverse route is the same
 route in the inverse order, and is set to \c YES by default. Note that
 this is not the case for bypass*Route, as it is more probable that you
 want to bypass only one default route.
 
-For an \ref pf_routing_tag_asroute "ASroute", things are just slightly more complicated, as you have
+For an \ref pf_tag_zoneroute "ASroute", things are just slightly more complicated, as you have
 to give the id of the gateway which is inside the AS you want to access ... 
 So it looks like this:
 
@@ -1267,11 +1166,11 @@ it means that it must pass through router1 to get out of the AS, then
 pass through link1, and get into AS2 by being received by router2.
 router1 must belong to AS1 and router2 must belong to AS2.
 
-\subsubsection pf_linkctn &lt;link_ctn/&gt;
+\subsubsection pf_tag_linkctn &lt;link_ctn&gt;
 
 This entity has only one purpose: Refer to an already existing
-\ref pf_link "&lt;link/&gt;" when defining a route, i.e., it
-can only occur as a child of \ref pf_routing_tag_route "&lt;route/&gt;"
+\ref pf_tag_link "&lt;link/&gt;" when defining a route, i.e., it
+can only occur as a child of \ref pf_tag_route "&lt;route/&gt;"
 
 | Attribute name  | Mandatory | Values | Description                                                   |
 | --------------- | --------- | ------ | -----------                                                   |
@@ -1285,7 +1184,7 @@ entity (the path is given relative to SimGrid's source directory):
 
 \verbinclude example_filelist_xmltag_linkctn
 
-\subsubsection pf_routing_tag_asroute ASroute
+\subsubsection pf_tag_zoneroute &lt;zoneRoute&gt;
 
 The purpose of this entity is to define a route between two ASes.
 This is mainly useful when you're in the \ref pf_routing_model_full "Full routing model".
@@ -1296,7 +1195,7 @@ This is mainly useful when you're in the \ref pf_routing_model_full "Full routin
 | --------------- | --------- | ------ | -----------                                                                                                                                |
 | src             | yes       | String | The identifier of the source AS                                                                                                            |
 | dst             | yes       | String | See the \c src attribute                                                                                                                   |
-| gw_src          | yes       | String | The gateway that will be used within the src AS; this can be any \ref pf_host "Host" or \ref pf_router "Router" defined within the src AS. |
+| gw_src          | yes       | String | The gateway that will be used within the src AS; this can be any \ref pf_tag_host "Host" or \ref pf_router "Router" defined within the src AS. |
 | gw_dst          | yes       | String | Same as \c gw_src, but with the dst AS instead.                                                                                            |
 | symmetrical     | no        | YES\|NO (Default: YES) | If this route is symmetric, the opposite route (from dst to src) will also be declared implicitly.               | 
 
@@ -1305,12 +1204,12 @@ This is mainly useful when you're in the \ref pf_routing_model_full "Full routin
 \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"/>
 
@@ -1327,12 +1226,12 @@ This is mainly useful when you're in the \ref pf_routing_model_full "Full routin
 </AS>
 \endverbatim
 
-\subsubsection pf_routing_tag_route route 
+\subsubsection pf_tag_route &lt;route&gt; 
 
 The principle is the same as for 
-\ref pf_routing_tag_asroute "ASroute": The route contains a list of links that
+\ref pf_tag_zoneroute "ASroute": The route contains a list of links that
 provide a path from \c src to \c dst. Here, \c src and \c dst can both be either a 
-\ref pf_host "host" or \ref pf_router "router".  This is mostly useful for the 
+\ref pf_tag_host "host" or \ref pf_router "router".  This is mostly useful for the 
 \ref pf_routing_model_full "Full routing model" as well as for the 
 \ref pf_routing_model_shortest_path "shortest-paths" based models (as they require 
 topological information).
@@ -1366,9 +1265,9 @@ A route in the \ref pf_routing_model_shortest_path "Shortest-Path routing model"
     (network-)graph and the employed algorithms need to know which edge connects
     which pair of entities.
 
-\subsubsection pf_routing_tag_bypassasroute bypassASroute
+\subsubsection pf_tag_bypassasroute bypassASroute
 
-%As said before, once you choose
+As said before, once you choose
 a model, it (most likely; the constant network model, for example, doesn't) calculates routes for you. But maybe you want to
 define some of your routes, which will be specific. You may also want
 to bypass some routes defined in lower level AS at an upper stage:
@@ -1403,9 +1302,9 @@ connects the router \c my_cluster_1_router in the source cluster to the router
 \c my_cluster_2_router in the destination router. Additionally, as the \c symmetrical
 attribute was not given, this route is presumed to be symmetrical.
 
-\subsubsection pf_routing_tag_bypassroute bypassRoute
+\subsubsection pf_tag_bypassroute bypassRoute
 
-%As said before, once you choose
+As said before, once you choose
 a model, it (most likely; the constant network model, for example, doesn't) calculates routes for you. But maybe you want to
 define some of your routes, which will be specific. You may also want
 to bypass some routes defined in lower level AS at an upper stage :
@@ -1441,7 +1340,7 @@ and AS_2. If you want to make a host (h1) from AS_1 with another one
 (h2) from AS_2 then you'll have to proceed as follows:
 \li First, you have to ensure that a route is defined from h1 to the
     AS_1's exit gateway and from h2 to AS_2's exit gateway.
-\li Then, you'll have to define a route between AS_1 to AS_2. %As those
+\li Then, you'll have to define a route between AS_1 to AS_2. As those
     AS are both resources belonging to AS_Big, then it has to be done
     at AS_big level. To define such a route, you have to give the
     source AS (AS_1), the destination AS (AS_2), and their respective
@@ -1451,18 +1350,18 @@ and AS_2. If you want to make a host (h1) from AS_1 with another one
     defined inside AS_Big. If you choose some shortest-path model,
     this route will be computed automatically.
 
-%As said before, there are mainly 2 tags for routing :
+As said before, there are mainly 2 tags for routing :
 \li <b>ASroute</b>: to define routes between two  <b>AS</b>
 \li <b>route</b>: to define routes between two <b>host/router</b>
 
-%As we are dealing with routes between AS, it means that those we'll
+As we are dealing with routes between AS, it means that those we'll
 have some definition at AS_Big level. Let consider AS_1 contains 1
 host, 1 link and one router and AS_2 3 hosts, 4 links and one router.
 There will be a central router, and a cross-like topology. At the end
 of the crosses arms, you'll find the 3 hosts and the router that will
 act as a gateway. We have to define routes inside those two AS. Let
 say that AS_1 contains full routes, and AS_2 contains some Floyd
-routing (as we don't want to bother with defining all routes). %As
+routing (as we don't want to bother with defining all routes). As
 we're using some shortest path algorithms to route into AS_2, we'll
 then have to define some <b>route</b> to gives some topological
 information to SimGrid. Here is a file doing it all :
@@ -1470,7 +1369,7 @@ information to SimGrid. Here is a file doing it all :
 \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">
@@ -1478,9 +1377,9 @@ information to SimGrid. Here is a file doing it all :
      </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"/>
@@ -1503,93 +1402,67 @@ information to SimGrid. Here is a file doing it all :
 </AS>
 \endverbatim
 
-\section pf_other_tags Tags not (directly) describing the platform
+\section pf_other Other tags
 
 The following tags can be used inside a \<platform\> tag even if they are not
 directly describing the platform:
-\li \ref pf_config "config": it allows you to pass some configuration stuff like, for
-    example, the network model and so on. It follows the
-\li \ref pf_include "include": allows you to include another file into the current one.
 
-\subsection pf_config config
+  - @ref pf_tag_config passes configuration options, e.g. to change the network model;
+  - @ref pf_tag_prop gives user-defined properties to various elements
 
-The only purpose of this tag is to contain the \c prop tags, as described below.
-These tags will then configure the options as described by Section \ref options.
-(See the example)
+\subsection pf_tag_config &lt;config&gt;
 
-#### Attributes ####
+Adding configuration flags into the platform file is particularly
+useful when the described platform is best used with specific
+flags. For example, you could finely tune SMPI in your platform file directly.
 
-| Attribute name  | Mandatory | Values                  | Description                                                                                                  |
-| --------------- | --------- | ----------------------  | -----------                                                                                                  |
-| id              | yes       | String                  | The identifier of the config tag when referring to id; this is basically useless, though.                    |
+| Attribute  | Values              | Description                                    |
+| ---------- | ------------------- | ---------------------------------------------- |
+| id         | String (optional)   | This optional identifier is ignored by SimGrid |
 
-#### Possible children ####
+* **Included tags:** @ref pf_tag_prop to specify a given configuration item (see @ref options).
 
-Tag name        | Description | Documentation
-------------    | ----------- | -------------
-\<prop/\>       | The prop tag allows you to define different configuration options following the attribute/value schema. See the \ref options page. | N/A
+Any such configuration must be given at the very top of the platform file.
 
-#### Example ####
+* **Example**
 
 \verbatim
 <?xml version='1.0'?>
 <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
 <platform version="4">
-<config id="General">
-       <prop id="maxmin/precision" value="0.000010"></prop>
-       <prop id="cpu/optim" value="TI"></prop>
-       <prop id="host/model" value="compound"></prop>
-       <prop id="network/model" value="SMPI"></prop>
-       <prop id="path" value="~/"></prop>
-       <prop id="smpi/bw-factor" value="65472:0.940694;15424:0.697866;9376:0.58729"></prop>
+<config>
+       <prop id="maxmin/precision" value="0.000010" />
+       <prop id="cpu/optim" value="TI" />
+       <prop id="network/model" value="SMPI" />
+       <prop id="smpi/bw-factor" value="65472:0.940694;15424:0.697866;9376:0.58729" />
 </config>
 
 <AS  id="AS0"  routing="Full">
 ...
 \endverbatim
 
-\subsection pf_include include
-
-Even if it can be used in other contexts, this tag was originally created
-to be used with \ref pf_trace. The idea was to have a file describing the
-platform, and another file attaching traces of a given period to the platform.
-
-The drawback is that the file chuncks that will be included do not
-constitute valid XML files. This may explain why this feature was never really
-used in practice (as far as we know). Other mechanisms, such as the ability to load
-several platform files one after the other, could be considered in the future.
-
-In the meanwhile, the \c include tag allows you to import other platforms into your
-local file. This is done with the intention to help people
-combine their different AS and provide new platforms. Those files
-should contain XML that consists of 
-\ref pf_include "include", \ref pf_cluster "cluster", \ref pf_peer "peer", \ref pf_As "AS", \ref pf_trace "trace", \ref pf_trace "tags".
-
-Do not forget to close the tag to make it work, or you will end up with an invalid XML file.
+\subsection pf_tag_prop &lt;prop&gt;
 
-#### Attributes ####
+Defines a user-defined property, identified with a name and having a
+value. You can specify such properties to most kind of resources:
+@ref pf_tag_zone, @ref pf_tag_host, @ref pf_tag_storage,
+@ref pf_tag_cluster and @ref pf_tag_link. These values can be retrieved
+at runtime with MSG_zone_property() or simgrid::s4u::NetZone::property(),
+or similar functions.
 
-| Attribute name  | Mandatory | Values                  | Description                                                                                                  |
-| --------------- | --------- | ----------------------  | -----------                                                                                                  |
-| file            | yes       | String                  | Filename of the path you want to include with either relative or absolute path. |
+| Attribute | Values                  | Description                                                                               |
+| --------- | ----------------------  | ----------------------------------------------------------------------------------------- |
+| id        | String (mandatory)      | Identifier of this property. Must be unique for a given property holder, eg host or link. |
+| value     | String (mandatory)      | Value of this property; The semantic is completely up to you.                             |
 
+* **Included tags:** none.
 
 #### Example ####
 
-The following example includes two files, clusterA.xml and clusterB.xml and
-combines them two one platform file; all hosts, routers etc. defined in 
-each of them will then be usable.
+\code{.xml}
+<prop id="Operating System" value="Linux" />
+\endcode
 
-\verbatim
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
-<platform version="4">
-       <AS id="main" routing="Full">
-               <include file="clusterA.xml"></include>
-               <include file="clusterB.xml"></include>
-       </AS>
-</platform>
-\endverbatim
 
 \subsection pf_trace trace and trace_connect
 
@@ -1606,7 +1479,7 @@ entity.
 
 \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"/>
@@ -1626,7 +1499,7 @@ entity.
 | --------------- | --------- | ---------------------- | -----------                                                                                       |
 | id              | yes       | String                 | Identifier of this trace; this is the name you pass on to \c trace_connect.                       |
 | file            | no        | String                 | Filename of the file that contains the information - the path must follow the style of your OS. You can omit this, but then you must specifiy the values inside of &lt;trace&gt; and &lt;/trace&gt; - see the example below. |
-| trace_periodicity | yes | String | This is the same as for \ref pf_host "hosts" (see there for details) |
+| trace_periodicity | yes | String | This is the same as for \ref pf_tag_host "hosts" (see there for details) |
 
 Here is an example  of trace when no file name is provided:
 
@@ -1654,7 +1527,7 @@ are some best practices you should pay attention to in order to
 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
+@subsection pf_hints_search 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
@@ -1693,8 +1566,8 @@ non-intuitive schema ... Something like that :
 <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"/>
@@ -1737,21 +1610,18 @@ SimGrid allows you to use some coordinated-based system, like vivaldi,
 to describe a platform. The main concept is that you have some peers
 that are located somewhere: this is the function of the
 <b>coordinates</b> of the \<peer\> or \<host\> tag. There's nothing
-complicated in using it, here is an example of it:
+complicated in using it, here is an example:
 
 \verbatim
 <?xml version='1.0'?>
 <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
 <platform version="4">
 
-<config id="General">
-       <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
@@ -1774,13 +1644,10 @@ That is for example what is commonly done when using peers (see Section \ref pf_
 <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
 <platform version="4">
 
-<config id="General">
- <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