Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
e96ffd0ce082ea51f39876022ab1624ef1472fd7
[simgrid.git] / docs / source / platform_howtos.rst
1 .. _platform:
2
3 .. raw:: html
4
5    <object id="TOC" data="graphical-toc.svg" width="100%" type="image/svg+xml"></object>
6    <script>
7    window.onload=function() { // Wait for the SVG to be loaded before changing it
8      var elem=document.querySelector("#TOC").contentDocument.getElementById("PlatformBox")
9      elem.style="opacity:0.93999999;fill:#ff0000;fill-opacity:0.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";
10    }
11    </script>
12    <br/>
13    <br/>
14
15 .. _howto:
16    
17 Modeling Hints
18 ##############
19
20 There is no perfect model, but only models that are adapted to the
21 specific study that you want to do. SimGrid provide several advanced
22 mechanisms that you can adapt to model the situation that you are
23 interested into, and it is often uneasy to see where to start with.
24 This page collects several hints and tricks on modeling situations.
25 Even if you are looking for a very advanced, specific use case, these
26 examples may help you to design the solution you need.
27
28 .. _howto_science:
29
30 Doing Science with SimGrid
31 **************************
32
33 Many users are using SimGrid as a scientific instrument for their
34 research. This tool was indeed invented to that extend, and we strive
35 to streamline this kind of usage. But SimGrid is no magical tool, and
36 it is of your responsability that the tool actually provides sensible
37 results. Fortunately, there is a vast literature on how to avoid
38 Modeling & Simulations pitfalls. We review here some specific works.
39
40 In `An Integrated Approach to Evaluating Simulation Credibility
41 <http://www.dtic.mil/dtic/tr/fulltext/u2/a405051.pdf>`_, the authors
42 provide a methodology enabling the users to increase their confidence
43 in the simulation tools they use. First of all, you must know what you
44 actually expect to discover whether the tool actually covers your
45 needs. Then, as they say, "a fool with a tool is still a fool", so you
46 need to think about your methodology before you submit your articles.
47 `Towards a Credibility Assessment of Models and Simulations
48 <https://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/20080015742.pdf>`_
49 gives a formal methodology to assess the credibility of your
50 simulation results.
51
52 `Seven Pitfalls in Modeling and Simulation Research
53 <https://dl.acm.org/citation.cfm?id=2430188>`_ is even more
54 specific. Here are the listed pitfalls: (1) Don't know whether it's
55 modeling or simulation, (2) No separation of concerns, (3) No clear
56 scientific question, (4) Implementing everything from scratch, (5)
57 Unsupported claims, (6) Toy duck approach, and (7) The tunnel view. As
58 you can see, this article is a must read. It's a pitty that it's not
59 freely available, though.
60
61 .. _howto_churn:
62
63 Modeling Churn in P2P
64 *********************
65
66 One of the biggest challenges in P2P settings is to cope with the
67 churn, meaning that resources keep appearing and disappearing. In
68 SimGrid, you can always change the state of each host manually, with
69 eg :cpp:func:`simgrid::s4u::Host::turn_on`. To reduce the burden when
70 the churn is high, you can also attach a **state profile** to the host
71 directly.
72
73 This is not possible from S4U yet (TODO), and you should use the
74 ``state_file`` attribute of :ref:`pf_tag_host`, :ref:`pf_tag_cluster`
75 or :ref:`pf_tag_link`.
76
77 Every lines (but the last) of such files describe timed events with
78 the form "date value". Example:
79
80 .. code-block:: python
81                 
82    1 0
83    2 1
84    LOOPAFTER 8
85
86 - At time t=1, the host is turned off (value 0 means OFF)
87 - At time t=2, it is turned back on (other values means ON)
88 - At time t=10, the history is reset (because that's 8 seconds after
89   the last event). So the host will be turned off again at t=11.
90
91 If your trace does not contain a LOOPAFTER line, then your profile is
92 only executed once and not repetitively.
93
94 .. _howto_multicore:
95
96 Modeling Multicore Machines
97 ***************************
98
99 Default Model
100 =============
101
102 Multicore machines are very complex, and there is many way to model
103 them. The default models of SimGrid are coarse grain and capture some
104 elements of this reality. Here is how to declare simple multicore hosts:
105
106 .. code-block:: xml
107                 
108    <host id="mymachine" speed="8Gf" core="4"/>
109
110 It declares a 4-cores host called "mymachine", each core computing 8
111 GFlops per second. If you put one activity of 8 GFlop on this host, it
112 will be computed in 1 second (by default, activities are
113 single-threaded and cannot leverage the computing power of more than
114 one core). If you put two of them together, they will still be
115 computed in one second, and so on up to 4 tasks. If you put 5 tasks,
116 they will share the total computing resource, and all tasks will be
117 computed at 5/4 = 1.25 second. That's a very simple model, but that's
118 all what you will get by default from SimGrid.
119
120 Pinning tasks to cores
121 ======================
122
123 The default model does not account for task pinning, where you
124 manually select on which core each of the existing activity should
125 execute. The best solution to model this is probably to model your
126 4-core processor as 4 separte hosts, and assigning the activities to
127 cores by migrating them to the declared hosts. In some sense, this 
128 takes the whole Network-On-Chip idea really seriously.
129
130 Some extra complications may arise here. If you have more tasks than
131 cores, you'll have to `schedule your tasks
132 <https://en.wikipedia.org/wiki/Scheduling_%28computing%29#Operating_system_process_scheduler_implementations)>`_
133 yourself on the cores (so you'd better avoid this complexity). Since
134 you cannot have more than one network model in a given SimGrid
135 simulation, you will end up with a TCP connexion between your cores. A
136 possible work around is to never start any simulated communication
137 between the cores and have the same routes from each core to the
138 rest of the external network.
139
140 Modeling a multicore CPU as a set of SimGrid hosts may seem strange
141 and unconvincing, but some users achieved very realistic simulations
142 of multi-core and GPU machines this way.
143
144 Modeling machine bootup and shutdown periods
145 ********************************************
146
147 When a physical host boots up, a lot of things happen. It takes time
148 during which the machine is not usable but dissipates energy, and
149 programs actually die and restart during a reboot. Since there is many
150 ways to model it, SimGrid does not do any modeling choice for you but
151 the most obvious ones.
152
153 Any actor (or process in MSG) running on an host that is shut down
154 will be killed and all its activities (tasks in MSG) will be
155 automatically canceled. If killed the actor was marked as
156 auto-restartable (with
157 :cpp:func:`simgrid::s4u::Actor::set_auto_restart` or with
158 :cpp:func:`MSG_process_auto_restart_set`), it will start anew with the
159 same parameters when the host boots back up.
160
161 By default, shutdowns and bootups are instantaneous. If you want to
162 add an extra delay, you have to do that yourself, for example from an
163 `controler` actor that runs on another host. The best way to do so is
164 to declare a fictionous pstate where the CPU delivers 0 flop per
165 second (so every activity on that host will be frozen when the host is
166 in this pstate). When you want to switch the host off, your controler
167 switches the host to that specific pstate (with
168 :cpp:func:`simgrid::s4u::Host::set_pstate`), waits for the amount of
169 time that you decided necessary for your host to shut down, and turns
170 the host off (with :cpp:func:`simgrid::s4u::Host::turn_off`). To boot
171 up, switch the host on, go into the specific pstate, wait a while and
172 go to a more regular pstate.
173
174 To model the energy dissipation, you need to put the right energy
175 consumption in your startup/shutdown specific pstate. Remember that
176 the energy consumed is equal to the instantaneous consumption
177 multiplied by the time in which the host keeps in that state. Do the
178 maths, and set the right instantaneous consumption to your pstate, and
179 you'll get the whole boot period to consume the amount of energy that
180 you want. You may want to have one fictionous pstate for the bootup
181 period and another one for the shutdown period.
182
183 Of course, this is only one possible way to model these things. YMMV ;)
184