Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add a section presenting an overview of SimGrid design goals
authorMartin Quinson <martin.quinson@ens-rennes.fr>
Fri, 5 Mar 2021 22:03:36 +0000 (23:03 +0100)
committerMartin Quinson <martin.quinson@ens-rennes.fr>
Fri, 5 Mar 2021 23:31:10 +0000 (00:31 +0100)
MANIFEST.in
docs/source/Design_goals.rst [new file with mode: 0644]
docs/source/index.rst
tools/cmake/DefinePackages.cmake

index ca80c4f..baaaced 100644 (file)
@@ -1775,6 +1775,7 @@ include docs/manpages/tesh.pod
 include docs/requirements.txt
 include docs/source/Configuring_SimGrid.rst
 include docs/source/Deploying_your_Application.rst
+include docs/source/Design_goals.rst
 include docs/source/Doxyfile
 include docs/source/Experimental_Setup.rst
 include docs/source/Installing_SimGrid.rst
diff --git a/docs/source/Design_goals.rst b/docs/source/Design_goals.rst
new file mode 100644 (file)
index 0000000..cf4ae54
--- /dev/null
@@ -0,0 +1,173 @@
+SimGrid's Design Goals
+######################
+
+Any SimGrid simulation comes down to a set of **actors** using some
+**resources** through **activities**. SimGrid provides several kinds of
+resources (link, CPU, disk, and synchronization objects such as mutex
+or semaphores) along with the corresponding activity kinds
+(communication, execution, I/O, lock). SimGrid users provide a
+platform instantiation (list of interconnected resources) and an
+application (the code executed by actors) along with the actors'
+placement on the platform.
+
+The actors (ie, the user code) can only interact with the platform
+through activities, that are somewhat similar to synchronizations.
+Some are very natural (locking a mutex is a synchronization with the
+other actors using the same mutex) while others activities constitute
+more original synchronization: execution, communication, and I/O have a
+quantitative component that depends on the resources. But still,
+writing some data to disk is seen as a synchronization with the other
+actors using the same disk. When you lock a mutex, you can proceed
+only when that mutex gets unlocked by someone else. Similarly, when you
+do an I/O, you can proceed once the disk delivered enough performance
+to fulfill your demand (along with the concurrent demands of the other
+actors occurring at the same time). Communication activities have both a
+qualitative component (the actual communication starts only when both
+the sender and receiver are ready to proceed) and a quantitative
+component (consuming the communication power of the link resources).
+
+The design of SimGrid is shaped by several design goals:
+
+ - **reproducibility**: re-executing the same simulation must lead to
+   the exact same outcome, even if it runs on another computer or
+   operating system. When possible, this should also be true when you
+   use another version of SimGrid.
+ - **speed**: running a given simulation should be as fast as possible
+ - **versatility**: ability to simulate many kinds of distributed systems
+   and resource models. But the simulation should be parsimonious too,
+   to not hinder the tool's usability. SimGrid tries to provide sane
+   default settings along with the possibility to augment and modify
+   the provided models and their default settings.   
+ - **scalability**: ability to deal with very large simulations. In the
+   number of actors, in the size of the platform, in the number of
+   events, or all together.
+
+Actors and activities
+*********************
+
+The first crux of the SimGrid design lays in the interaction between
+each actor and the activities. For the sake of reproducibility, the
+actors cannot interact directly with their environment: every
+modification request is serialized through a central component that
+processes them in a reproducible order. For the sake of speed, SimGrid
+is designed as an operating system: the actors issue **simcalls** to a
+simulation kernel that is called **maestro** (because it decides which
+actors can proceed and which ones must wait).
+
+In practice, a SimGrid simulation is a suite of so-called **scheduling
+rounds**, during which all actors that are not currently blocked on a
+simcall get executed. For that, maestro passes the control flow to the
+code of each actor, that are written in either C++, C, Fortran, Python,
+or Java. The control flow then returns to the maestro when the actor
+blocks on its next blocking simcall. Note that the time it takes to
+execute the actor code has to be reported to the simulator using
+execution activities. SMPI programs are automatically benchmarked
+while these executions must be manually reported in S4U. The simulated
+time is discrete in SimGrid and only progresses between scheduling
+rounds, so all events occurring during a given scheduling round occur
+at the exact same simulated timestamp, even if the actors are usually
+executed sequentially on the real platform.
+
+To modify their environment, the actors issue either **immediate
+simcalls** that take no time in the simulation (e.g.: spawning another
+actor), or **blocking simcalls** that must wait for future events (e.g.:
+mutex locks require the mutex to be unlocked by its owner;
+communications wait for the network to provide enough communication
+performance to fulfill the demand). A given scheduling round is
+usually composed of several sub-scheduling rounds during which
+immediate simcalls are resolved. This ends when all actors are either
+terminated or within a blocking simcall. The simulation models are
+then used to compute the time at which the first next simcall
+terminates. The time is advanced to that point, and a new scheduling
+round begins with all actors that got unblocked at that timestamp.
+
+Context switching between the actors and maestro is highly optimized
+for the sake of simulation performance. SimGrid provides several
+implementations of this mechanism, called **context factories**. These
+implementations fall into two categories: Preemptive contexts are
+based on full-fledged system threads such as pthread on Linux or Java
+threads in the JVM. They are usually better supported by external
+debuggers and profiling tools, but less efficient. The most efficient
+factories use non-preemptive mechanisms, such as SysV's ucontexts,
+boost's context, or our own hand-tuned implementation, that is written
+in assembly language. This is possible because a given actor is never
+interrupted between consecutive simcalls in SimGrid.
+
+For the sake of performance, actors can be executed in parallel using
+several system threads for non-preemptive contexts. But in our
+experience, this rarely leads to any performance improvement because
+most applications simulated on top of SimGrid are fine-grained: when
+the simulation performance really matters, the users tend to abstract
+away any large computations to efficiently simulate the control flow
+of their application. In addition, parallel simulation puts unpleasant
+restrictions on the user code, that must be correctly isolated. To be
+honest, most of the existing SMPI implementation cannot be used in
+parallel yet.
+
+Parsimonious model versatility
+******************************
+
+Another orthogonal crux of the SimGrid design is the parsimonious
+versatility in modeling. For that, we tend to unify all resource and
+activity kinds. As you have seen, we parallel the classical notion of
+**computational power** with the more original **communication power** and
+**I/O power**. Asynchronous executions are less common than the
+asynchronous communications that proliferate in MPI but they are still
+provided for sake of symmetry: they even prove useful to efficiently
+simulate thread pools. Note that asynchronous mutex locking is still to be
+added to SimGrid atm. The notion of **pstate** was introduced to model
+the stepwise variation of computational speed depending on the DVFS,
+and was reused to model the bootup and shutdown phases of a CPU: the
+computational speed is 0 at these specific pstates. This pstate notion
+was extended to represent the fact that the bandwidth provided by a
+wifi link to a given station depends on its signal-noise ratio (SNR). 
+
+Further on this line, all provided resource models are very comparable
+internally. They rely on linear inequation systems, stating for
+example that the sum of the computational power received by all
+computation activities located on a given CPU cannot overpass the
+computational power provided by this resource. This extends nicely to
+multi-resources activities such as communications using several links,
+and also to the so-called parallel tasks (abstract activities
+representing a parallel execution kernel consuming both the
+communication and computational power of a set of machines). Specific
+coefficients are added to the linear system to reflect how the real
+resources are shared between concurrent usages. The resulting system
+is then solved using a max-min objective function that maximizes the
+minimum of all shares allocated to activities. Our experience shows
+that this approach can successfully be used for fast yet accurate
+simulations of complex phenomena, provided that the model's
+coefficients and constants are carefully tailored and instantiated to
+that phenomenon.
+
+Model-checking
+**************
+
+Even if it was not in the original goals of SimGrid, the framework now
+integrates a full-featured model-checker (dubbed MC or Mc SimGrid)
+that can exhaustively explore all execution paths that the application
+could experience. Conceptually, Mc SimGrid is built upon the ideas
+presented previously. Instead of using the resource models to compute
+the order simcall terminations, it explores every order that is
+causally possible. In a simulation entailing only three concurrent
+events (i.e., simcalls) A, B, and C, it will first explore the
+scenario where the activities order is ABC, then the ACB order, then
+BAC, then BCA, then CAB and finally CBA. Of course, the number of
+scenarios to explore grows exponentially with the number of simcalls
+in the simulation. Mc SimGrid leverages reduction techniques to avoid
+re-exploring equivalent traces.
+
+In practice, Mc SimGrid can be used to verify classical `safety and
+liveness properties
+<https://en.wikipedia.org/wiki/Linear_time_property>`_, but also
+`communication determinism
+<https://hal.inria.fr/hal-01953167/document>`_, a property that allows
+more efficient solutions toward fault-tolerance. It can alleviate the
+state space explosion problem through `Dynamic Partial Ordering
+Reduction (DPOR)
+<https://en.wikipedia.org/wiki/Partial_order_reduction>`_ and `state
+equality <https://hal.inria.fr/hal-01900120/document>`_.
+
+Mc SimGrid is far more experimental than other parts of the framework,
+such as SMPI that can now be used to run many full-featured MPI codes
+out of the box.
index f84518d..c7d94ee 100644 (file)
@@ -85,7 +85,12 @@ of every page. Bugs in the code should be reported
       The SimGrid Ccmmunity <community.rst>
       Frequently asked questions <faq.rst>
 
+.. toctree::
+   :hidden:
+   :maxdepth: 2
+   :caption: SimGrid's Internals:
 
+      Design goals <Design_goals.rst>
 
 .. Cheat Sheet on the sublevels
 ..
index fef48b5..1a1c886 100644 (file)
@@ -932,6 +932,7 @@ set(DOC_SOURCES
   docs/source/Platform_Routing.rst
   docs/source/Plugins.rst
   docs/source/XML_Reference.rst
+  docs/source/Design_goals.rst
 
   docs/source/Tutorial_Algorithms.rst
   docs/source/tuto_s4u/deployment1.xml