Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
docs: start the user manual, and rephrase some parts of the intro
[simgrid.git] / docs / source / intro_concepts.rst
1 .. First introduction
2
3 What is SimGrid
4 ===============
5
6 SimGrid is a framework to simulate distributed computer systems. 
7
8 It can be used to either assess abstract algorithms, or to profile and
9 debug real distributed applications.  SimGrid enables studies in the
10 domains of (data-)Grids, IaaS Clouds, Clusters, High Performance
11 Computing, Volunteer Computing and Peer-to-Peer systems.
12
13 Technically speaking, SimGrid is a library. It is neither a graphical
14 interface nor a command-line simulator running user scripts. The
15 interaction with SimGrid is done by writing programs with the exposed
16 functions to build your own simulator.
17
18 SimGrid is a Free Software distributed under the LGPL license. You are
19 thus welcome to use it as you wish, or even to modify and distribute
20 your version (provided that your version is as free as ours). It also
21 means that SimGrid is developed by a vivid community of users and
22 developers. We hope that you will come and join us!
23
24 SimGrid is the result of almost 20 years of research from several
25 groups, both in France and in the USA. It benefited of many funding
26 from various research instances, including the ANR, Inria, CNRS,
27 University of Lorraine, University of Hawai'i at Manoa, ENS Rennes and
28 many others. Many thanks to our generous sponsors!
29
30 SimGrid is a powerful tool, but its learning curve can be rather
31 steep. This manual will hopefully help and guide you to the features
32 you want to use. Please report any issue that you see in this manual,
33 including typos or unclear elements. You can even propose changes by
34 clicking on the "Edit on GitLab" button at the top of every page.
35
36 Typical Study based on SimGrid
37 ------------------------------
38
39 Any SimGrid study entails the following components:
40
41  - The studied **Application**. This can be either a distributed
42    algorithm described in our simple APIs, or a full featured real
43    parallel application using for example the MPI interface 
44    :ref:`(more info) <application>`.
45
46  - The **Virtual Platform**. This is a description of a given
47    distributed system (machines, links, disks, clusters, etc). Most of
48    the platform files are written in XML althrough a Lua interface is
49    under development.  SimGrid makes it easy to augment the Virtual
50    Platform with a Dynamic Scenario where for example the links are
51    slowed down (because of external usage), the machines fail. You
52    have even support to specify the applicative workload that you want
53    to feed to your application
54    :ref:`(more info) <platform>`.
55
56  - The application's **Deployment Description**. In SimGrid
57    terminology, the application is an inert set of source files and
58    binaries. To make it run, you have to describe how your application
59    should be deployed on the virtual platform. You need to specify
60    which process is mapped on which host, along with their parameters
61    :ref:`(more info) <scenario>`.
62
63  - The **Platform Models**. They describe how the virtual platform
64    reacts to the actions of the application. For example, they compute
65    the time taken by a given communication on the virtual platform.
66    These models are already included in SimGrid, and you only need to
67    pick one and maybe tweak its configuration to get your results
68    :ref:`(more info) <models>`.
69
70 These components are put together to run a **simulation**, that is an
71 experiment or a probe. The result of one or many simulation provides
72 an **outcome** (logs, visualization, statistical analysis) that help
73 answering the **question** targeted by this study.
74
75 Here are some questions on which SimGrid is particularly relevant:
76
77  - **Compare an Application to another**. This is the classical use
78    case for scientists, who use SimGrid to test how the solution that
79    they contribute compares to the existing solutions from the
80    literature.
81
82  - **Design the best Virtual Platform for a given Application.**
83    Tweaking the platform file is much easier than building a new real
84    platform for testing purpose. SimGrid also allows co-design of the
85    platform and the application by modifying both of them.
86
87  - **Debug Real Applications**. With real systems, is sometimes
88    difficult to reproduce the exact run leading to the bug that you
89    are tracking. With SimGrid, you are *clairvoyant* about your
90    *reproducible experiments*: you can explore every part of the
91    system, and your probe will not change the simulated state. It also
92    makes it easy to mock some parts of the real system that are not
93    under study.
94
95 Depending on the context, you may see some parts of this process as
96 less important, but you should pay close attention if you want to be
97 confident in the results coming out of your simulations. In
98 particular, you should not trust blindly your results but always
99 strive to double-check them. Likewise, you should question the realism
100 of your input configuration, and we even encourage you to doubt (and
101 check) the provided performance models.
102
103 To ease such questioning, you really should logically separate these
104 parts in your experimental setup. It is seen as a very bad practice to
105 merge the application, the platform and the deployment all together.
106 SimGrid is versatile and your mileage may vary, but you should start
107 with your Application specified as a C++ or Java program, using one of
108 the provided XML platform file, and with your deployment in a separate
109 XML file.
110
111 SimGrid Execution Modes
112 -----------------------
113
114 Depending on the intended study, SimGrid can be run in several execution modes.
115
116 **Simulation Mode**. This is the most common execution mode, where you want
117 to study how your application behaves on the virtual platform under
118 the experimental scenario.
119
120 In this mode, SimGrid can provide information about the time taken by
121 your application, the amount of energy dissipated by the platform to
122 run your application and the detailed usage of each resource.
123
124 **Model-Checking Mode**. This can be seen as a sort of exhaustive
125 testing mode, where every possible outcome of your application is
126 explored. In some sense, this mode tests your application for all
127 possible platforms that you could imagine (and more).
128
129 You just provide the application and its deployment (amount of
130 processes and parameters), and the model-checker will literally
131 explore all possible outcomes by testing all possible message
132 interleavings: if at some point a given process can either receive the
133 message A first or the message B depending on the platform
134 characteristics, the model-checker will explore the scenario where A
135 arrives first, and then rewind to the same point to explore the
136 scenario where B arrives first.
137
138 This is a very powerful mode, where you can evaluate the correction of
139 your application. It can verify either **safety properties** (asserts) 
140 or **liveless properties** stating for example that if a given event
141 occurs, then another given event will occur in a finite amount of
142 steps. This mode is not only usable with the abstract algorithms
143 developed on top of the SimGrid APIs, but also with real MPI
144 applications (to some extend).
145
146 The main limit of Model Checking lays in the huge amount of scenarios
147 to explore. SimGrid tries to explore only non-redundant scenarios
148 thanks to classical reduction techniques (such as DPOR and stateful
149 exploration) but the exploration may well never finish if you don't
150 carefully adapt your application to this mode.
151
152 A classical trap is that the Model Checker can only verify whether
153 your application fits the provided properties, which is useless if you
154 have a bug in your property. Remember also that one way for your
155 application to never violate a given assert is to not start at all
156 because of a stupid bug.
157
158 Another limit of this mode is that it does not use the performance
159 models of the simulation mode. Time becomes discrete: You can say for
160 example that the application took 42 steps to run, but there is no way
161 to know the amount of seconds that it took or the amount of watts that
162 it dissipated.
163
164 Finally, the model checker only explores the interleavings of
165 computations and communications. Other factors such as thread
166 execution interleaving are not considered by the SimGrid model
167 checker.
168
169 The model checker may well miss existing issues, as it computes the
170 possible outcomes *from a given initial situation*. There is no way to
171 prove the correction of your application in all generality with this
172 tool.
173
174 **Benchmark Recording Mode**. During debug sessions, continuous
175 integration testing and other similar use cases, you are often only
176 interested in the control flow. If your application apply filters to
177 huge images split in small blocks, the filtered image is probably not
178 what you are interested in. You are probably looking for a way to run
179 each computation kernel only once, save on disk the time it takes and
180 some other metadata. This code block can then be skipped in simulation
181 and replaced by a synthetic block using the cached information. The
182 virtual platform will take this block into account without requesting
183 the real hosting machine to benchmark it.
184
185 SimGrid Limits
186 --------------
187
188 This framework is by no means the perfect holly grail able to solve
189 every problem on earth. 
190
191 **SimGrid scope is limited to distributed systems.** Real-time
192 multi-threaded systems are not in the scope. You could probably tweak
193 SimGrid for such studies (or the framework could possibly be extended
194 in this direction), but another framework specifically targeting this
195 use case would probably be more suited.
196
197 **There is currently no support for wireless networks**. 
198 The framework could certainly be improved in this direction, but this
199 is still to be done.
200
201 **There is no perfect model, only models adapted to your study.**
202 The SimGrid models target fast, large studies yet requesting a
203 realistic results. In particular, our models abstract away parameters
204 and phenomenon that are often irrelevant to the realism in our
205 context. 
206
207 SimGrid is simply not intended to any study that would mandate the
208 abstracted phenomenon. Here are some **studies that you should not do
209 with SimGrid**:
210
211  - Studying the effect of L3 vs L2 cache effects on your application
212  - Comparing kernel schedulers and policies
213  - Comparing variants of TCP
214  - Exploring pathological cases where TCP breaks down, resulting in
215    abnormal executions.
216  - Studying security aspects of your application, in presence of
217    malicious agents.
218
219 SimGrid Success Stories
220 -----------------------
221
222 SimGrid was cited in over 1,500 scientific papers (according to Google
223 Scholar). Among them
224 `over 200 publications <https://simgrid.org/Usages.html>`_
225 (written by about 300 individuals) use SimGrid as a scientific
226 instrument to conduct their experimental evaluation. These 
227 numbers do not count the articles contributing to SimGrid.
228 This instrument was used in many research communities, such as 
229 `High-Performance Computing <https://hal.inria.fr/inria-00580599/>`_,
230 `Cloud Computing <http://dx.doi.org/10.1109/CLOUD.2015.125>`_,
231 `Workflow Scheduling <http://dl.acm.org/citation.cfm?id=2310096.2310195>`_,
232 `Big Data <https://hal.inria.fr/hal-01199200/>`_ and
233 `MapReduce <http://dx.doi.org/10.1109/WSCAD-SSC.2012.18>`_,
234 `Data Grid <http://ieeexplore.ieee.org/document/7515695/>`_,
235 `Volunteer Computing <http://www.sciencedirect.com/science/article/pii/S1569190X17301028>`_,
236 `Peer-to-Peer Computing <https://hal.archives-ouvertes.fr/hal-01152469/>`_,
237 `Network Architecture <http://dx.doi.org/10.1109/TPDS.2016.2613043>`_,
238 `Fog Computing <http://ieeexplore.ieee.org/document/7946412/>`_, or
239 `Batch Scheduling <https://hal.archives-ouvertes.fr/hal-01333471>`_
240 `(more info) <https://simgrid.org/Usages.html>`_.
241
242 If your platform description is accurate enough (see
243 `here <http://hal.inria.fr/hal-00907887>`_ or
244 `there <https://hal.inria.fr/hal-01523608>`_),
245 SimGrid can provide high-quality performance predictions. For example,
246 we determined the speedup achieved by the Tibidabo Arm-based
247 cluster before its construction
248 (`paper <http://hal.inria.fr/hal-00919507>`_). In this case, 
249 some differences between the prediction and the real timings were due to
250 misconfiguration or other problems with the real platforms. To some extent,
251 SimGrid could even be used to debug the real platform :)
252
253 SimGrid is also used to debug, improve and tune several large
254 applications.
255 `BigDFT <http://bigdft.org>`_ (a massively parallel code
256 computing the electronic structure of chemical elements developped by
257 the CEA), `StarPU <http://starpu.gforge.inria.fr/>`_ (a
258 Unified Runtime System for Heterogeneous Multicore Architectures
259 developped by Inria Bordeaux) and
260 `TomP2P <https://tomp2p.net/dev/simgrid/>`_ (a high performance
261 key-value pair storage library developed at University of Zurich).
262 Some of these applications enjoy large user communities themselves.
263
264 ..  LocalWords:  SimGrid