From eb0d17e326deb7947689894a70f33db5dbe37a94 Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Tue, 25 Oct 2022 14:01:49 +0200 Subject: [PATCH] Draft a first version of the Models chapter in the doc --- ChangeLog | 1 + MANIFEST.in | 1 + docs/source/Configuring_SimGrid.rst | 51 +- docs/source/Models.rst | 399 ++-- docs/source/app_s4u.rst | 2 + docs/source/img/graphical-toc.svg | 517 ++--- docs/source/img/lmm-overview.svg | 3004 +++++++++++++++++++++++++++ tools/cmake/DefinePackages.cmake | 1 + 8 files changed, 3503 insertions(+), 473 deletions(-) create mode 100644 docs/source/img/lmm-overview.svg diff --git a/ChangeLog b/ChangeLog index a3609f1b65..a93aef74bc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -9,6 +9,7 @@ MPI: to detect dangerous code that /may/ work on some MPI implems. Models: + - Write the section of the manual about models, at least. - WiFi: the total capacity of a link depends on the amout of flows on that link. - Use the nonlinear callback feature of LMM to reflect this. - Calibration values can be changed to match different MCS configurations diff --git a/MANIFEST.in b/MANIFEST.in index 26263423c3..ccc49b505e 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1820,6 +1820,7 @@ include docs/source/img/eclipseScreenShot.png include docs/source/img/extlink.png include docs/source/img/extlink.svg include docs/source/img/graphical-toc.svg +include docs/source/img/lmm-overview.svg include docs/source/img/smpi_simgrid_alltoall_pair_16.png include docs/source/img/smpi_simgrid_alltoall_ring_16.png include docs/source/img/starzone.drawio diff --git a/docs/source/Configuring_SimGrid.rst b/docs/source/Configuring_SimGrid.rst index a715cc9208..6ff5b665a9 100644 --- a/docs/source/Configuring_SimGrid.rst +++ b/docs/source/Configuring_SimGrid.rst @@ -393,27 +393,28 @@ Manual calibration factors ^^^^^^^^^^^^^^^^^^^^^^^^^^ SimGrid can take network irregularities such as a slow startup or changing behavior depending on the message size into account. -The values provided by default were computed a long time ago through data fitting one the timings of either packet-level simulators or direct -experiments on real platforms. These default values should be OK for most users, but if simulation realism is really important to -you, you probably want to recalibrate the models (i.e., devise sensible values for your specific settings). This section only -describes how to pass new values to the models while the calibration process involved in the computation of these values is -described :ref:`in the relevant chapter `. +The values provided by default were computed a long time ago through data fitting one the timings of either packet-level +simulators or direct experiments on real platforms. These default values should be OK for most users, but if simulation realism +is really important to you, you probably want to recalibrate the models (i.e., devise sensible values for your specific +settings). This section only describes how to pass new values to the models while the calibration process involved in the +computation of these values is described :ref:`in the relevant chapter `. -We found out that many networking effects can be realistically accounted for with the three following correction factors. They were shown -to be enough to capture slow-start effects, the different transmission modes of MPI systems (eager vs. rendez-vous mode), or the -non linear effects of wifi sharing. +We found out that many networking effects can be realistically accounted for with the three following correction factors. They +were shown to be enough to capture slow-start effects, the different transmission modes of MPI systems (eager vs. rendez-vous +mode), or the non linear effects of wifi sharing. **Option** ``network/latency-factor`` **Default:** 1.0, but overridden by most models -This option specifies a multiplier to apply to the *physical* latency (i.e., the one described in the platform) of the set of links involved in a communication. The factor can either be a constant to apply to any -communication, or it may depend on the message size. The ``CM02`` model does not use any correction factor, so the -latency-factor remains to 1. The ``LV08`` model sets it to 13.01 to model slow-start, while the ``SMPI`` model has several -possible values depending on the interval in which the message size falls. The default SMPI setting given below specifies for example that a message smaller than -257 bytes will get a latency multiplier of 2.01467 while a message whose size is in [15424, 65472] will get a latency multiplier -of 3.48845. The ``wifi`` model goes further and uses a callback in the program to compute the factor that must be non-linear in -this case. +This option specifies a multiplier to apply to the *physical* latency (i.e., the one described in the platform) of the set of +links involved in a communication. The factor can either be a constant to apply to any communication, or it may depend on the +message size. The ``CM02`` model does not use any correction factor, so the latency-factor remains to 1. The ``LV08`` model sets +it to 13.01 to model slow-start, while the ``SMPI`` model has several possible values depending on the interval in which the +message size falls. The default SMPI setting given below specifies for example that a message smaller than 257 bytes will get a +latency multiplier of 2.01467 while a message whose size is in [15424, 65472] will get a latency multiplier of 3.48845. The +``wifi`` model goes further and uses a callback in the program to compute the factor that must be non-linear in this case. -This multiplier is applied to the latency computed from the platform, that is the sum of all link *physical* latencies over the :ref:`network path ` used by the considered communication, to derive the *effective* end-to-end latency. +This multiplier is applied to the latency computed from the platform, that is the sum of all link *physical* latencies over the +:ref:`network path ` used by the considered communication, to derive the *effective* end-to-end latency. Constant factors are easy to express, but the interval-based syntax used in SMPI is somewhat complex. It expects a set of factors separated by semicolons, each of the form ``boundary:factor``. For example if your specification is @@ -421,8 +422,8 @@ factors separated by semicolons, each of the form ``boundary:factor``. For examp 5000 and beyond. If your first interval does include size=0, then the default value of 1 is used before. Changing the factor callback is not possible from the command line and must be done from your code, as shown in `this example `_. Note that the chosen -model only provide some default settings, not more. You can pick a ``LV08`` to get some of the settings, and override the latency -with an interval-based value. +model only provide some default settings. You can pick a ``LV08`` to get some of the settings, and override the latency with an +interval-based value. SMPI default value: 65472:11.6436; 15424:3.48845; 9376:2.59299; 5776:2.18796; 3484:1.88101; 1426:1.61075; 732:1.9503; 257:1.95341;0:2.01467 (interval boundaries are sorted automatically). These values were computed by data fitting on the Stampede @@ -431,17 +432,19 @@ Supercomputer at TACC, with optimal deployment of processes on nodes. To accurat **Option** ``network/bandwidth-factor`` **Default:** 1.0, but overridden by most models -Setting this option automatically adjusts the *effective* bandwidth (i.e., the one perceived by the application) used by any given communication. As with latency-factor above, the value -can be a constant (``CM02`` uses 1 -- no correction -- while ``LV08`` uses 0.97 to discount TCP headers while computing the -payload bandwidth), interval-based (as the default provided by the ``SMPI``), or using in-program callbacks (as with ``wifi``). +Setting this option automatically adjusts the *effective* bandwidth (i.e., the one perceived by the application) used by any +given communication. As with latency-factor above, the value can be a constant (``CM02`` uses 1 -- no correction -- while +``LV08`` uses 0.97 to discount TCP headers while computing the payload bandwidth), interval-based (as the default provided by +the ``SMPI``), or using in-program callbacks (as with ``wifi``). -SMPI default value: 65472:0.940694;15424:0.697866;9376:0.58729;5776:1.08739;3484:0.77493;1426:0.608902;732:0.341987;257:0.338112;0:0.812084 +SMPI default value: 65472:0.940694;15424:0.697866;9376:0.58729;5776:1.08739;3484:0.77493;1426:0.608902;732:0.341987;257:0.338112;0:0.812084 This was also computed on the Stampede Supercomputer. **Option** ``network/weight-S`` **Default:** depends on the model -Value used to account for RTT-unfairness when sharing a bottleneck (network connections with a large RTT are generally penalized against those with a small one). Described in `Accuracy Study and Improvement of Network -Simulation in the SimGrid Framework `_ +Value used to account for RTT-unfairness when sharing a bottleneck (network connections with a large RTT are generally penalized +against those with a small one). Described in `Accuracy Study and Improvement of Network Simulation in the SimGrid Framework +`_ Default values for ``CM02`` is 0. ``LV08`` sets it to 20537 while both ``SMPI`` and ``IB`` set it to 8775. diff --git a/docs/source/Models.rst b/docs/source/Models.rst index 2c87454a97..ff17944745 100644 --- a/docs/source/Models.rst +++ b/docs/source/Models.rst @@ -1,21 +1,122 @@ +.. raw:: html + + + +
+
+ .. _models: The SimGrid Models ################## -.. todo:: - - - Main existing models (contention, cste, LM07) - - Main concepts (Routing, LMM) + link to the papers - - How to switch on the command line +As for any simulator, the models are very important components in SimGrid. This page first introduces the several kind of models +used in SimGrid before focusing on the **performance models** that compute the duration of :ref:`every activities +` in the simulator depending on the platform characteristics and on the other activities that are sharing the +resources. + +The **routing models** constitute advanced elements of the platform description. This description naturally entails +:ref:`components` that are very related to the performance models, because determining for example the execution time +of a task obviously depends on the characteristics of the machine executing it. Furthermore, networking zones can be +interconnected to form larger platforms `in a scalable way `_. Each of these zone can be given +a specific :ref:`routing model` that efficiently computes the list of links entailing a network path between +two given hosts. + +The model checker uses an abstraction of the performance simulations. Mc SimGrid explores every causally possible executions of +the application, completely abstracting the performance away. The simulated time not even computed in this mode! The abstraction +involved in this process also models the mutual impacts between actions, to not re-explore histories that only differ by the +order of independent and unrelated actions. As with the rest of the model checker, these models are unfortunately still to be +documented properly. + +Finally, the `SimGrid-FMI external plugin `_ can be used to integrate any FMI-based +models into SimGrid. This was used to accurately study a *Smart grid* through co-simulation: `PandaPower +`_ was used to simulate the power grid, `ns-3 `_ co-simulate was used the +communication network while SimGrid was simulating the IT infrastructure. Please refer to the `relevant publication +`_ for more details. + +Modeled resources +***************** + +The main objective of SimGrid is to provide timing information for three kind of resources: network, CPU and disk. + +The **network models** are improved and assessed since almost 20 years. It should be possible to get accurate predictions once +you properly :ref:`calibrate the models for your settings`. As detailed in the next section, SimGrid +provides several network models. Two plugins can be used to compute the network energy consumption: One for the :ref:`wired +networks`, and another one for the :ref:`Wi-Fi networks`. Some users find :ref:`TCP +simulated performance counter-intuitive` at first in SimGrid, sometimes because of a misunderstanding of the +TCP behavior in real networks. + +The **computing models** are less developed in SimGrid. With the S4U interface, the user specifies the amount of flops that each +computation "consumes", and the model simply divides this amount by the host's flops rate to compute the duration of this +execution. In SMPI, the user code is automatically timed, and the :ref:`computing speed` of the host +machine is used to evaluate the corresponding amount of flops. This model should be sufficient for most users, even if assuming +a constant flops rate for each machine is a simplification. In reality, the flops rate varies because of I/O, memory and cache +effects. It is somehow possible to :ref:`overcome this simplification`, but the required +calibration process is rather intricate and not documented yet (feel free to :ref:`contact the community` on need). +In the future, more advanced models may be added but the existing model proved good enough for all experiments done on +distributed applications during the last two decades. The CPU energy consumption can be computed with the :ref:`relevant +plugin`. + +The **disk models** of SimGrid are more recent than for the network and computing resources, but they should still be correct +for most users. Studies have shown that they are sensible under some conditions, and a :ref:`calibration process` is +provided. As usual, you probably want to double-check their predictions through an appropriate validation campaign. + +SimGrid main models +******************* + +SimGrid aims at the sweet spot between accuracy and simulation speed. Concerning the accuracy, our goal is to report correct +performance trends when comparing competing designs with minimal burden on the user, while allowing power users to fine tune the +simulation models for predictions that are within 5% or below of the results on real machines. For example, we determined the +`speedup achieved by the Tibidabo ARM-based cluster `_ before its construction. On the other +side, the tool must be fast and scalable enough to study modern IT systems at scale. SimGrid was for example used to `simulate a +Chord ring involving millions of actors `_ (even if that not really more instructive for +this protocol than smaller simulations), or `a qualification run at full-scale of the Stampede supercomputer +`_. + +Most of our models are based on a linear max-min solver (LMM), as depicted below. The actors' activities are represented by +actions in the simulation kernel, accounting the initial amount of work of the corresponding activity (in flops for computing +activities or bytes for networking and disk activities), and the remaining amount of work. At each simulation step, the +instantaneous computing and communicating speed of each action is computed according to the model. A set of constraints is used +to express for example that the instantaneous speed of actions on a given resource must remain smaller than the instantaneous +speed of that resource. In the example below, it is stated that the speed :math:`x_1` of activity 1 plus the speed :math:`x_n` +of activity :math:`n` must remain smaller than the capacity :math:`C_A` of the corresponding host A. + +.. image:: img/lmm-overview.svg + +There is obviously many valuation of :math:`x_1 \ldots{} x_n` that respect such as set of constraints. SimGrid usually computes +the instantaneous speeds according to a Max-Mix objective function, that maximizing the minimum over all :math:`x_i`. The +coefficients associated to each variable in the inequalities are used to model some performance effects, such as the fact that +TCP tend to favor communications with small RTTs. These coefficients computed from both hardcoded values and from the +:ref:`latency and bandwidth factors`. + +Once the instantaneous speeds are computed, the simulation kernel computes the earliest terminating action from their speeds and +remaining work. The simulated time is then updated along with the values in the LMM. The corresponding activities terminate, +unblocking the corresponding actors that can further execute. + +Most of the SimGrid models build upon the LMM solver, that they adapt and configure for a given usage. **CM02** is the simplest +LMM model as it does not introduce any correction factors. This model should be used if you prefer understandable results over +realistic ones. **LV08** (the default model) uses constant factors that are intended to capture common effects such as +slow-start, or the fact that TCP headers reduce the *effective* bandwidth. **SMPI** use more advanced factors that also capture +the MPI-specific effects such as the eager vs. rendez-vous communication mode. You can :ref:`pick another +model` on the command line, and these models can be :ref:`further configured`. + +**L07** is rather distinct because it uses another objective function called *bottleneck*. This is because this model is +intended to be used for parallel tasks that are actions mixing flops and bytes while the Max-Min objective function requires +that all variables are expressed using the same unit. This is also why in reality, we have one LMM system per resource kind in +the simulation, but the idea remains similar. .. _understanding_lv08: The default TCP model -********************* +===================== -When simulating a data transfer between two hosts, you may be surprised -by the obtained simulation time. Lets consider the following platform: +When simulating a data transfer between two hosts, you may be surprised by the obtained simulation time. Lets consider the +following platform: .. code-block:: xml @@ -28,55 +129,148 @@ by the obtained simulation time. Lets consider the following platform: -If host `A` sends `100kB` (a hundred kilobytes) to host `B`, one could expect -that this communication would take `0.81` seconds to complete according to a -simple latency-plus-size-divided-by-bandwidth model (0.01 + 8e5/1e6 = 0.81). -However, the default TCP model of SimGrid is a bit more complex than that. It -accounts for three phenomena that directly impact the simulation time even +If host `A` sends `100kB` (a hundred kilobytes) to host `B`, one could expect that this communication would take `0.81` seconds +to complete according to a simple latency-plus-size-divided-by-bandwidth model (0.01 + 8e5/1e6 = 0.81). However, the default TCP +model of SimGrid is a bit more complex than that. It accounts for three phenomena that directly impact the simulation time even on such a simple example: - - The size of a message at the application level (i.e., 100kB in this - example) is not the size that will actually be transferred over the - network. To mimic the fact that TCP and IP headers are added to each packet of - the original payload, the TCP model of SimGrid empirically considers that - `only 97% of the nominal bandwidth` are available. In other words, the + - The size of a message at the application level (i.e., 100kB in this example) is not the size that will actually be + transferred over the network. To mimic the fact that TCP and IP headers are added to each packet of the original payload, + the TCP model of SimGrid empirically considers that `only 97% of the nominal bandwidth` are available. In other words, the size of your message is increased by a few percents, whatever this size be. - - In the real world, the TCP protocol is not able to fully exploit the - bandwidth of a link from the emission of the first packet. To reflect this - `slow start` phenomenon, the latency declared in the platform file is - multiplied by `a factor of 13.01`. Here again, this is an empirically - determined value that may not correspond to every TCP implementations on - every networks. It can be tuned when more realistic simulated times for - short messages are needed though. - - - When data is transferred from A to B, some TCP ACK messages travel in the - opposite direction. To reflect the impact of this `cross-traffic`, SimGrid - simulates a flow from B to A that represents an additional bandwidth - consumption of `0.05`. The route from B to A is implicitly declared in the - platform file and uses the same link `link1` as if the two hosts were - connected through a communication bus. The bandwidth share allocated to the - flow from A to B is then the available bandwidth of `link1` (i.e., 97% of - the nominal bandwidth of 1Mb/s) divided by 1.05 (i.e., the total consumption). - This feature, activated by default, can be disabled by adding the - `--cfg=network/crosstraffic:0` flag to command line. - -As a consequence, the time to transfer 100kB from A to B as simulated by the -default TCP model of SimGrid is not 0.81 seconds but + - In the real world, the TCP protocol is not able to fully exploit the bandwidth of a link from the emission of the first + packet. To reflect this `slow start` phenomenon, the latency declared in the platform file is multiplied by `a factor of + 13.01`. Here again, this is an empirically determined value that may not correspond to every TCP implementations on every + networks. It can be tuned when more realistic simulated times for short messages are needed though. + + - When data is transferred from A to B, some TCP ACK messages travel in the opposite direction. To reflect the impact of this + `cross-traffic`, SimGrid simulates a flow from B to A that represents an additional bandwidth consumption of `0.05`. The + route from B to A is implicitly declared in the platform file and uses the same link `link1` as if the two hosts were + connected through a communication bus. The bandwidth share allocated to the flow from A to B is then the available bandwidth + of `link1` (i.e., 97% of the nominal bandwidth of 1Mb/s) divided by 1.05 (i.e., the total consumption). This feature, + activated by default, can be disabled by adding the `--cfg=network/crosstraffic:0` flag to command line. + +As a consequence, the time to transfer 100kB from A to B as simulated by the default TCP model of SimGrid is not 0.81 seconds +but .. code-block:: python 0.01 * 13.01 + 800000 / ((0.97 * 1e6) / 1.05) = 0.996079 seconds. -.. _model_ns3: + +WiFi zones +========== + +In SimGrid, WiFi networks are modeled with WiFi zones, where a zone contains the access point of the WiFi network and the hosts +connected to it (called station in the WiFi world). Links inside WiFi zones are modeled as regular links with a specific +attribute, and these links are then added to routes between hosts. The main difference of WiFi networks is that their +performance is not given by the link bandwidth and latency but by both the access point WiFi characteristics and the distance +between the access point and the hosts. + +Such WiFi zones can be used in both the LMM-based model or with ns-3, and are supposed to behave similarly in both cases. + +Declaring a WiFi zone +--------------------- + +To declare a new WiFi network, simply declare a network zone with the ``WIFI`` routing. + +.. code-block:: xml + + + +Inside this zone you must declare which host or router will be the access point of the WiFi network. + +.. code-block:: xml + + + +Afterward simply declare the hosts and routers inside the WiFi network. Remember that one must have the same name as declared in +the property "access point". + +.. code-block:: xml + + + + + +Finally, close the WiFi zone. + +.. code-block:: xml + + + +The WiFi zone may be connected to another zone using a traditional link and a zoneRoute. Note that the connection between two +zones is always wired. + +.. code-block:: xml + + + + + + + +WiFi network performance +------------------------ + +The performance of a wifi network is controlled by 3 property that can be added to hosts connected to the wifi zone: + + * ``mcs`` (`Modulation and Coding Scheme `_) + Roughly speaking, it defines the speed at which the access point is + exchanging data with all stations. It depends on its model and configuration, + and the possible values are listed for example on Wikipedia. + |br| By default, ``mcs=3``. + It is a property of the WiFi zone. + * ``nss`` (Number of Spatial Streams, or `number of antennas `_) + defines the amount of simultaneous data streams that the AP can sustain. + Not all value of MCS and NSS are valid nor compatible (cf. `802.11n standard `_). + |br| By default, ``nss=1``. + It is a property of the WiFi zone. + * ``wifi_distance`` is the distance from the station to the access point. Each + station can have a specific value. + |br| By default, ``wifi_distance=10``. + It is a property of stations of the WiFi network. + +Here is an example of a zone changing ``mcs`` and ``nss`` values. + +.. code-block:: xml + + + + + + ... + + +Here is an example of a host changing ``wifi_distance`` value. + +.. code-block:: xml + + + + + +Other models +************ + +SimGrid provides two other models in addition to the LMM-based ones. + +First, the **constant-time model** is a simplistic network model where all communication take a constant time (one second). It +provides the lowest realism, but is marginally faster and much simpler to understand. This model may reveal interesting if you +plan to study abstract distributed algorithms such as leader election or causal broadcast. + +On the contrary, the **ns-3 based model** is the most accurate network model that you can get in SimGrid. It relies on the +well-known `ns-3 packet-level network simulator `_ to compute every timing information of your simulation. +For example, this may be used to investigate the validity of a simulation. Note that this model is much slower than the +LMM-based models, because ns-3 simulates every network packet involved in as communication while SimGrid only recompute the +instantaneous speeds when one of the communications starts or stops. Both simulators are linear in the size of their input, but +ns-3 has a much larger input in case of large steady communications. ns-3 as a SimGrid model -*********************** +======================= -You can use the well-known `ns-3 packet-level network simulator -`_ as a SimGrid model, for example to investigate the -validity of your simulation. Just install ns-3 and recompile SimGrid -accordingly. +You need to install ns-3 and recompile SimGrid accordingly to use this model. The SimGrid/ns-3 binding only contains features that are common to both systems. Not all ns-3 models are available from SimGrid (only the TCP and WiFi ones are), @@ -88,10 +282,10 @@ immediately upon startup. Compiling the ns-3/SimGrid binding -================================== +---------------------------------- Installing ns-3 ---------------- +^^^^^^^^^^^^^^^ SimGrid requires ns-3 version 3.26 or higher, and you probably want the most recent version of both SimGrid and ns-3. While the Debian package of SimGrid @@ -100,7 +294,7 @@ of ns-3 by grabbing the ``libns3-dev ns3`` packages. Alternatively, you can install ns-3 from scratch (see the `ns-3 documentation `_). Enabling ns-3 in SimGrid ------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^ SimGrid must be recompiled with the ``enable_ns3`` option activated in cmake. Optionally, use ``NS3_HINT`` to tell cmake where ns3 is installed on @@ -125,7 +319,7 @@ integration. If no test is run at all, you probably forgot to enable ns-3 in cma $ ctest -R ns3 Troubleshooting ---------------- +^^^^^^^^^^^^^^^ If you use a version of ns-3 that is not known to SimGrid yet, edit ``tools/cmake/Modules/FindNS3.cmake`` in your SimGrid tree, according to the @@ -145,10 +339,10 @@ include guard. This can be achieved with the following command (as root): .. _ns3_use: Using ns-3 from SimGrid -======================= +----------------------- Platform files compatibility ----------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Any route longer than one will be ignored when using ns-3. They are harmless, but you still need to connect your hosts using one-hop routes. @@ -223,105 +417,9 @@ the ns-3 node from any given host with the .. doxygenfunction:: simgrid::get_ns3node_from_sghost - -WiFi platforms -^^^^^^^^^^^^^^ - -In SimGrid, WiFi networks are modeled with WiFi zones, where a zone contains -the access point of the WiFi network and the hosts connected to it (called -station in the WiFi world). Links inside WiFi zones are modeled as regular -links with a specific attribute, and these links are then added to routes -between hosts. The main difference When using ns-3 WiFi networks is that -the network performance is not given by the link bandwidth and latency but -by the access point WiFi characteristics, and the distance between the access -point and the hosts. - -So, to declare a new WiFi network, simply declare a zone with the ``WIFI`` -routing. - -.. code-block:: xml - - - -Inside this zone you must declare which host or router will be the access point -of the WiFi network. - -.. code-block:: xml - - - -Afterward simply declare the hosts and routers inside the WiFi network. Remember -that one must have the same name as declared in the property "access point". - -.. code-block:: xml - - - - - -Finally, close the WiFi zone. - -.. code-block:: xml - - - -The WiFi zone may be connected to another zone using a traditional link and -a zoneRoute. Note that the connection between two zones is always wired. - -.. code-block:: xml - - - - - - - -WiFi network performance -"""""""""""""""""""""""" - -The performance of a wifi network is controlled by 3 property that can be added -to hosts connected to the wifi zone: - - * ``mcs`` (`Modulation and Coding Scheme `_) - Roughly speaking, it defines the speed at which the access point is - exchanging data with all stations. It depends on its model and configuration, - and the possible values are listed for example on Wikipedia. - |br| By default, ``mcs=3``. - It is a property of the WiFi zone. - * ``nss`` (Number of Spatial Streams, or `number of antennas `_) - defines the amount of simultaneous data streams that the AP can sustain. - Not all value of MCS and NSS are valid nor compatible (cf. `802.11n standard `_). - |br| By default, ``nss=1``. - It is a property of the WiFi zone. - * ``wifi_distance`` is the distance from the station to the access point. Each - station can have a specific value. - |br| By default, ``wifi_distance=10``. - It is a property of stations of the WiFi network. - -Here is an example of a zone changing ``mcs`` and ``nss`` values. - -.. code-block:: xml - - - - - - ... - - -Here is an example of a host changing ``wifi_distance`` value. - -.. code-block:: xml - - - - - -Random Number Generator ------------------------ - -It is possible to define a fixed or random seed to the ns3 random number -generator using the config tag. +Random seed +----------- +It is possible to define a fixed or random seed to the ns3 random number generator using the config tag. .. code-block:: xml @@ -366,7 +464,6 @@ Arguably, SimGrid could detect this situation and report it, but unfortunately, this is still to be done. - .. |br| raw:: html
diff --git a/docs/source/app_s4u.rst b/docs/source/app_s4u.rst index 014a1e96ed..53d9a1dac0 100644 --- a/docs/source/app_s4u.rst +++ b/docs/source/app_s4u.rst @@ -30,6 +30,8 @@ the old symbols. If you want an API that will never ever evolve in the future, you should use the :ref:`deprecated MSG API ` instead. +.. _S4U_main_concepts: + Main Concepts ************* diff --git a/docs/source/img/graphical-toc.svg b/docs/source/img/graphical-toc.svg index f710aa1db3..a10042169e 100644 --- a/docs/source/img/graphical-toc.svg +++ b/docs/source/img/graphical-toc.svg @@ -2,21 +2,21 @@ + inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)" + sodipodi:docname="graphical-toc.svg" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + guidetolerance="10" + inkscape:showpageshadow="0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1"> ExperimentalExperimentalSetup Profiles SimulationSimulation Model CheckingModel Checking Property + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';stroke-width:0.264583px">Property Reduction + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.46806px;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';stroke-width:0.264583px">Reduction ▸ Safety + style="font-size:4.23333px;stroke-width:0.264583px">▸ Safety ▸ Liveness + style="font-size:4.23333px;stroke-width:0.264583px">▸ Liveness ▸ Patterns + style="font-size:4.23333px;stroke-width:0.264583px">▸ Patterns Exhaustive testExhaustive test ▸ DPOR + style="font-size:4.23333px;stroke-width:0.264583px">▸ DPOR @@ -2601,10 +2601,10 @@ id="text1032-0-1" y="130.17258" x="150.47285" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;line-height:4.4979167px;font-family:'Amiri Quran Colored';-inkscape-font-specification:'Amiri Quran Colored';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;line-height:4.49792px;font-family:'Amiri Quran Colored';-inkscape-font-specification:'Amiri Quran Colored';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" xml:space="preserve">▸ State @@ -2612,10 +2612,10 @@ id="text1032-0-1-8" y="134.97" x="154.33516" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;line-height:4.4979167px;font-family:'Amiri Quran Colored';-inkscape-font-specification:'Amiri Quran Colored';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;line-height:4.49792px;font-family:'Amiri Quran Colored';-inkscape-font-specification:'Amiri Quran Colored';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" xml:space="preserve">Equality @@ -5346,36 +5346,30 @@ - x - + id="tspan12224">x - ← - + id="tspan12228">← - 2 - + id="tspan12232">2 @@ -5469,9 +5463,9 @@ id="text15126" y="135.22546" x="255.25545" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;line-height:6.61458302px;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-align:start;letter-spacing:-0.01322917px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;line-height:6.61458px;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-align:start;letter-spacing:-0.0132292px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" xml:space="preserve"> - y - + style="stroke-width:0.352778">y - ← - + style="stroke-width:0.352778">← - 1 - + style="stroke-width:0.352778">1 - send(1) - + id="tspan12232-3">send(1) - send(2) - + id="tspan12232-3-7">send(2) + inkscape:label="text1028-1-4-1-1" /> - - + id="tspan32726" /> - - + style="font-variant:normal;font-weight:normal;font-size:23.9992px;font-family:Helvetica;-inkscape-font-specification:Helvetica;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="text34358" /> Plugins + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.46806px;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';stroke-width:0.264583px">Plugins Your code ▸ Signals + style="font-size:4.23333px;stroke-width:0.264583px">▸ Signals ▸ Extensions + style="font-size:4.23333px;stroke-width:0.264583px">▸ Extensions deep inside - + + style="display:inline;opacity:0.93999999;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.35277778;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:label="ModelsBox" + transform="translate(-1.3229068,-6.6145851)" /> operations - + Counter exampleCounter example - $./my_simulator|MSG_visualization/colorize.pl - $./my_simulator|MSG_visualization/colorize.pl[0.000] - [0.000][Tremblay:master]Got3workersand6taskstoprocess - [Tremblay:master]Got3workersand6taskstoprocess[0.000] - [0.000][Tremblay:master]Sending’Task_0’to’Jupiter’ - [Tremblay:master]Sending’Task_0’to’Jupiter’[0.148] - [0.148][Tremblay:master]Sending’Task_1’to’Fafard’ - [Tremblay:master]Sending’Task_1’to’Fafard’[0.148] - [0.148][Jupiter:worker]Processing’Task_0’ - [Jupiter:worker]Processing’Task_0’[0.347] - [0.347][Tremblay:master]Sending’Task_2’to’Ginette’ - [Tremblay:master]Sending’Task_2’to’Ginette’[0.347] - [0.347][Fafard:worker]Processing’Task_1’ - [Fafard:worker]Processing’Task_1’[0.476] - [0.476][Tremblay:master]Sending’Task_3’to’Jupiter’ - [Tremblay:master]Sending’Task_3’to’Jupiter’[0.476] - [0.476][Ginette:worker]Processing’Task_2’ - [Ginette:worker]Processing’Task_2’[0.803] - [0.803][Jupiter:worker]’Task_0’done - [Jupiter:worker]’Task_0’done[0.951] - [0.951][Tremblay:master]Sending’Task_4’to’Fafard’ - [Tremblay:master]Sending’Task_4’to’Fafard’[0.951] - [0.951][Jupiter:worker]Processing’Task_3’ - [Jupiter:worker]Processing’Task_3’[1.003] - [1.003][Fafard:worker]’Task_1’done - [Fafard:worker]’Task_1’done[1.202] - [1.202][Tremblay:master]Sending’Task_5’to’Ginette’ - [Tremblay:master]Sending’Task_5’to’Ginette’[1.202] - [1.202][Fafard:worker]Processing’Task_4’ - [Fafard:worker]Processing’Task_4’[1.507] - [1.507][Ginette:worker]’Task_2’done - [Ginette:worker]’Task_2’done[1.606] - [1.606][Jupiter:worker]’Task_3’done - [Jupiter:worker]’Task_3’done[1.635] - [1.635][Tremblay:master]Alltasksdispatched.Let’sstopworkers. - [Tremblay:master]Alltasksdispatched.Let’sstopworkers.[1.635] - [1.635][Ginette:worker]Processing’Task_5’ - [Ginette:worker]Processing’Task_5’[1.637] - [1.637][Jupiter:worker]I’mdone.Seeyou! - [Jupiter:worker]I’mdone.Seeyou![1.857] - [1.857][Fafard:worker]’Task_4’done - [Fafard:worker]’Task_4’done[1.859] - [1.859][Fafard:worker]I’mdone.Seeyou! - [Fafard:worker]I’mdone.Seeyou![2.666] - [2.666][Ginette:worker]’Task_5’done - [Ginette:worker]’Task_5’done[2.668] - [2.668][Tremblay:master]Goodbyenow! - [Tremblay:master]Goodbyenow![2.668] - [2.668][Ginette:worker]I’mdone.Seeyou! - [Ginette:worker]I’mdone.Seeyou![2.668][]Simulationtime2.66766 - + style="stroke-width:0.0891421">[2.668][]Simulationtime2.66766 Textual logsTextual logs R visualizations @@ -6159,7 +6084,7 @@ inkscape:label="CalibrBox" /> AutomaticAutomaticCalibration Config UserUserManual Routing + style="font-size:4.93889px;stroke-width:0.264583px">Routing paths + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.58611px;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';stroke-width:0.264583px">paths Abstract ActorsAbstract Actors Offline TracesOffline Traces Real MPI CodeReal MPI Code Examples + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';stroke-width:0.264583px">Examples Reference + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';stroke-width:0.264583px">Reference diff --git a/docs/source/img/lmm-overview.svg b/docs/source/img/lmm-overview.svg new file mode 100644 index 0000000000..13789f16d3 --- /dev/null +++ b/docs/source/img/lmm-overview.svg @@ -0,0 +1,3004 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 37243524524553053050664 + +++... + ⩽ + C + A + ⩽ + C + B + ⩽ + C + E + ⩽ + C + C + ⩽ + C + D + + ... + ... + ... + Activities + Actions + Constraints + work + remaining + variable + Actors + Userinterface + Simulation kernel + Linear MaxMin solver + x + α + A1 + 1 + x + 1 + x + α + B2 + 2 + + x + 2 + + x + α + C2 + 2 + x + α + C3 + 3 + + x + 3 + + x + α + E3 + 3 + x + α + D2 + 2 + x + α + An + n + + x + n + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 2 + 3 + n + + diff --git a/tools/cmake/DefinePackages.cmake b/tools/cmake/DefinePackages.cmake index f8003c9d8a..e3970eeae6 100644 --- a/tools/cmake/DefinePackages.cmake +++ b/tools/cmake/DefinePackages.cmake @@ -879,6 +879,7 @@ set(DOC_SOURCES docs/source/img/extlink.png docs/source/img/extlink.svg docs/source/img/graphical-toc.svg + docs/source/img/lmm-overview.svg docs/source/img/smpi_simgrid_alltoall_pair_16.png docs/source/img/smpi_simgrid_alltoall_ring_16.png docs/source/img/starzone.drawio -- 2.20.1