Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'task-doc' into 'master'
[simgrid.git] / docs / source / app_s4u.rst
1 .. _S4U_doc:
2
3 The S4U Interface
4 #################
5
6 .. raw:: html
7
8    <object id="TOC" data="graphical-toc.svg" type="image/svg+xml"></object>
9    <script>
10    window.onload=function() { // Wait for the SVG to be loaded before changing it
11      var elem=document.querySelector("#TOC").contentDocument.getElementById("ActorBox")
12      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";
13    }
14    </script>
15    <br/>
16    <br/>
17
18 The S4U interface (SimGrid for you) mixes the full power of SimGrid
19 with the full power of C++. This is the preferred interface to describe
20 abstract algorithms in the domains of Cloud, P2P, HPC, IoT, and similar
21 settings.
22
23 Since v3.33 (Spring 2023), S4U is the main interface of SimGrid for algorithms.
24 It is feature complete, but may still evolve slightly in future releases.
25 When this happens, compiling your code will produce deprecation warnings for 4
26 releases (one year) before the removal of the old symbols.
27
28 .. _S4U_main_concepts:
29
30 Main Concepts
31 *************
32
33 A typical SimGrid simulation is composed of several |API_s4u_Actors|_, that
34 execute user-provided functions. The actors have to explicitly use the
35 S4U interface to express their :ref:`computation <API_s4u_Exec>`,
36 :ref:`communication <API_s4u_Comm>`, :ref:`disk usage <API_s4u_Io>`,
37 and other |API_s4u_Activities|_, so that they get reflected within the
38 simulator. These activities take place on resources such as |API_s4u_Hosts|_,
39 |API_s4u_Links|_, and |API_s4u_Disks|_. SimGrid predicts the time taken by each
40 activity and orchestrates the actors accordingly, waiting for the
41 completion of these activities.
42
43
44 When **communicating**, data is not directly sent to other actors but
45 posted onto a |API_s4u_Mailbox|_ that serves as a rendezvous point between
46 communicating actors. This means that you don't need to know who you
47 are talking to, you just put your communication `Put` request in a
48 mailbox, and it will be matched with a complementary `Get`
49 request.  Alternatively, actors can interact through **classical
50 synchronization mechanisms** such as |API_s4u_Barrier|_, |API_s4u_Semaphore|_,
51 |API_s4u_Mutex|_, and |API_s4u_ConditionVariable|_.
52
53 Each actor is located on a simulated |API_s4u_Host|_. Each host is located
54 in a |API_s4u_NetZone|_, that knows the networking path between one
55 resource to another. Each NetZone is included in another one, forming
56 a tree of NetZones which root zone contains the whole platform. The
57 actors can also be located on a |API_s4U_VirtualMachine|_ that may
58 restrict the activities it contains to a limited amount of cores.
59 Virtual machines can also be migrated between hosts.
60
61 The :ref:`simgrid::s4u::this_actor <API_s4u_this_actor>` namespace
62 provides many helper functions to simplify the code of actors.
63
64 .. rst-class:: compact-list
65
66    - **Simulation Elements**
67
68       - :ref:`class Actor <API_s4u_Actor>`: Active entities executing your application.
69       - :ref:`class Engine <API_s4u_Engine>`: Simulation engine (singleton).
70       - :ref:`class Mailbox <API_s4u_Mailbox>`: Communication rendezvous, with which actors meet each other.
71
72    - **Resources**
73
74       - :ref:`class Disk <API_s4u_Disk>`: Resource on which actors can write and read data.
75       - :ref:`class Host <API_s4u_Host>`: Actor location, providing computational power.
76       - :ref:`class Link <API_s4u_Link>`: Interconnecting hosts.
77       - :ref:`class NetZone <API_s4u_NetZone>`: Sub-region of the platform, containing resources (Hosts, Links, etc).
78       - :ref:`class VirtualMachine <API_s4u_VirtualMachine>`: Execution containers that can be moved between Hosts.
79
80    - **Activities** (:ref:`class Activity <API_s4u_Activity>`): The things that actors can do on resources.
81
82       - :ref:`class Comm <API_s4u_Comm>`: Communication activity, started on Mailboxes and consuming links.
83       - :ref:`class Exec <API_s4u_Exec>`: Computation activity, started on Host and consuming CPU resources.
84       - :ref:`class Io <API_s4u_Io>`: I/O activity, started on and consuming disks.
85
86    - **Synchronization Objects**: Classical IPC that actors can use
87
88       - :ref:`class Barrier <API_s4u_Barrier>`
89       - :ref:`class ConditionVariable <API_s4u_ConditionVariable>`
90       - :ref:`class Mutex <API_s4u_Mutex>`
91       - :ref:`class Semaphore <API_s4u_Semaphore>`
92
93 .. |API_s4u_Actors| replace:: **Actors**
94 .. _API_s4u_Actors: #api-s4u-actor
95
96 .. |API_s4u_Activities| replace:: **Activities**
97 .. _API_s4u_Activities: #api-s4u-activity
98
99 .. |API_s4u_Tasks| replace:: **Tasks**
100 .. _API_s4u_Tasks: #api-s4u-task
101
102 .. |API_s4u_Hosts| replace:: **Hosts**
103 .. _API_s4u_Hosts: #api-s4u-host
104
105 .. |API_s4u_Links| replace:: **Links**
106 .. _API_s4u_Links: #api-s4u-link
107
108 .. |API_s4u_Disks| replace:: **Disks**
109 .. _API_s4u_Disks: #api-s4u-disk
110
111 .. |API_s4u_VirtualMachine| replace:: **VirtualMachines**
112
113 .. |API_s4u_Host| replace:: **Host**
114
115 .. |API_s4u_Mailbox| replace:: **Mailbox**
116
117 .. |API_s4u_Mailboxes| replace:: **Mailboxes**
118 .. _API_s4u_Mailboxes: #s4u-mailbox
119
120 .. |API_s4u_NetZone| replace:: **NetZone**
121
122 .. |API_s4u_Barrier| replace:: **Barrier**
123
124 .. |API_s4u_Semaphore| replace:: **Semaphore**
125
126 .. |API_s4u_ConditionVariable| replace:: **ConditionVariable**
127
128 .. |API_s4u_Mutex| replace:: **Mutex**
129
130 .. _s4u_Activities:
131
132 Activities
133 **********
134
135 Activities represent the actions that consume a resource, such as a
136 :ref:`Comm <API_s4u_Comm>` that consumes the *transmitting power* of
137 :ref:`Link <API_s4u_Link>` resources, or an :ref:`Exec <API_s4u_Exec>`
138 that consumes the *computing power* of :ref:`Host <API_s4u_Host>` resources.
139 See also the :ref:`full API <API_s4u_Activity>` below.
140
141 =======================
142 Asynchronous Activities
143 =======================
144
145 Every activity can be either **blocking** or **asynchronous**. For
146 example, :cpp:func:`s4u::Mailbox::put() <simgrid::s4u::Mailbox::put>`
147 and :cpp:func:`s4u::Mailbox::get() <simgrid::s4u::Mailbox::get>`
148 create blocking communications: the actor is blocked until the
149 completion of that communication. Asynchronous communications do not
150 block the actor during their execution but progress on their own.
151
152 Once your asynchronous activity is started, you can test for its
153 completion using :cpp:func:`s4u::Activity::test() <simgrid::s4u::Activity::test>`.
154 This function returns ``true`` if the activity is completed already.
155 You can also use :cpp:func:`s4u::Activity::wait() <simgrid::s4u::Activity::wait>`
156 to block until the completion of the activity. To wait for at most a given amount of time,
157 use  :cpp:func:`s4u::Activity::wait_for() <simgrid::s4u::Activity::wait_for>`.
158 Finally, to wait at most until a specified time limit, use
159 :cpp:func:`s4u::Activity::wait_until() <simgrid::s4u::Activity::wait_until>`.
160
161 Every kind of activity can be asynchronous.
162 :ref:`s4u::CommPtr <API_s4u_Comm>` are created with :cpp:func:`s4u::Mailbox::put_async() <simgrid::s4u::Mailbox::put_async>` and
163 :cpp:func:`s4u::Mailbox::get_async() <simgrid::s4u::Mailbox::get_async>`;
164 :ref:`s4u::IoPtr <API_s4u_Io>` are created with :cpp:func:`s4u::Disk::read_async() <simgrid::s4u::Disk::read_async>` and
165 :cpp:func:`s4u::Disk::write_async() <simgrid::s4u::Disk::write_async>`; and
166 :ref:`s4u::ExecPtr <API_s4u_Exec>` are created with
167 :cpp:func:`s4u::Host::exec_async() <simgrid::s4u::Host::exec_async>`.
168 In the future, it will become possible to have asynchronous IPC such as asynchronous mutex lock requests.
169
170 The following example shows how to have several concurrent
171 communications ongoing.  First, you have to declare a vector in which
172 we will store the ongoing communications. It is also useful to have a
173 vector of mailboxes.
174
175 .. literalinclude:: ../../examples/cpp/comm-waitall/s4u-comm-waitall.cpp
176    :language: c++
177    :start-after: init-begin
178    :end-before: init-end
179    :dedent: 2
180
181 Then, you start all the communications that should occur concurrently with
182 :cpp:func:`s4u::Mailbox::put_async() <simgrid::s4u::Mailbox::put_async>`.
183 Finally, the actor waits for the completion of all of them at once
184 with :cpp:func:`s4u::Comm::wait_all() <simgrid::s4u::Comm::wait_all>`.
185
186 .. literalinclude:: ../../examples/cpp/comm-waitall/s4u-comm-waitall.cpp
187    :language: c++
188    :start-after: put-begin
189    :end-before: put-end
190    :dedent: 2
191
192 =====================
193 Activities Life Cycle
194 =====================
195
196 Sometimes, you want to change the setting of an activity before it even starts.
197
198 .. todo:: write this section
199
200 =====================
201 Repeatable Activities
202 =====================
203
204 In order to simulate the execution of Dataflow applications, we introduced the
205 concept of |API_s4u_Tasks|, that can be seen as repeatable activities. A Dataflow
206 is defined as a graph of |API_s4u_Tasks| through which circulate Tokens. Tokens
207 can carry any user-defined data, using the same internal mechanisms as for the
208 other simulated objects. Each Task has to receive a token from each of its
209 predecessor to fire a new instance of a :ref:`Communication <API_s4u_Comm>`,
210 :ref:`Execution <API_s4u_Exec>`, or :ref:`I/O <API_s4u_Io>` activity.
211 On completion of this activity, the Task propagates tokens
212 to its successors, and waits for the next set of tokens to arrive.
213 Multiple instances of the same Task can run in parallel by adjusting its
214 horizontal scaling with
215 :cpp:func:`s4u::Task::set_parallelism_degree() <simgrid::s4u::Task::set_parallelism_degree>`.
216
217 :ref:`Communications <API_s4u_Comm>` (started on Mailboxes and consuming links),
218 :ref:`Executions <API_s4u_Exec>` (started on Host and consuming CPU resources)
219 :ref:`I/O <API_s4u_Io>` (started on and consuming disks).
220
221 To initiate the execution of a Dataflow, it is possible to some make
222 |API_s4u_Tasks| fire one or more activities without waiting for any token with the
223 :cpp:func:`s4u::Task::enqueue_firings() <simgrid::s4u::Task::enqueue_firings>`
224 function.
225
226 The parameters and successors of a Task can be redefined at runtime by attaching
227 callbacks to the
228 :cpp:func:`s4u::Task::on_this_start <simgrid::s4u::Task::on_this_start>`
229 and
230 :cpp:func:`s4u::Task::on_this_completion <simgrid::s4u::Task::on_this_completion>`
231 signals.
232
233
234 .. _s4u_mailbox:
235
236 Mailboxes
237 *********
238
239 Please also refer to the :ref:`API reference for s4u::Mailbox
240 <API_s4u_Mailbox>`.
241
242 ===================
243 What are Mailboxes?
244 ===================
245
246 |API_s4u_Mailboxes|_ are rendezvous points for network communications,
247 similar to URLs on which you could post and retrieve data. Actually,
248 the mailboxes are not involved in the communication once it starts,
249 but only to find the contact with which you want to communicate.
250
251 They are similar to many common things: The phone number, which allows
252 the caller to find the receiver. The Twitter hashtag, which helps
253 senders and receivers to find each other. In TCP, the pair
254 ``{host name, host port}`` to which you can connect to find your peer.
255 In HTTP, URLs through which the clients can connect to the servers.
256 In ZeroMQ, the queues are used to match senders and receivers.
257
258 One big difference with most of these systems is that no actor is the
259 exclusive owner of a mailbox, neither in sending nor in receiving.
260 Many actors can send into and/or receive from the same mailbox.  TCP
261 socket ports for example are shared on the sender side but exclusive
262 on the receiver side (only one process can receive from a given socket
263 at a given point of time).
264
265 A big difference with TCP sockets or MPI communications is that
266 communications do not start right away after a
267 :cpp:func:`Mailbox::put() <simgrid::s4u::Mailbox::put>`, but wait
268 for the corresponding :cpp:func:`Mailbox::get() <simgrid::s4u::Mailbox::get>`.
269 You can change this by :ref:`declaring a receiving actor <s4u_receiving_actor>`.
270
271 A big difference with Twitter hashtags is that SimGrid does not
272 offer easy support to broadcast a given message to many
273 receivers. So that would be like a Twitter tag where each message
274 is consumed by the first receiver.
275
276 A big difference with the ZeroMQ queues is that you cannot filter
277 on the data you want to get from the mailbox. To model such settings
278 in SimGrid, you'd have one mailbox per potential topic, and subscribe
279 to each topic individually with a
280 :cpp:func:`get_async() <simgrid::s4u::Mailbox::get_async>` on each mailbox.
281 Then, use :cpp:func:`Comm::wait_any() <simgrid::s4u::Comm::wait_any>`
282 to get the first message on any of the mailboxes you are subscribed to.
283
284 The mailboxes are not located on the network, and you can access
285 them without any latency. The network delays are only related to the
286 location of the sender and receiver once the match between them is
287 done on the mailbox. This is just like the phone number that you
288 can use locally, and the geographical distance only comes into play
289 once you start the communication by dialing this number.
290
291 =====================
292 How to use Mailboxes?
293 =====================
294
295 You can retrieve any existing mailbox from its name (which is a
296 unique string, just like a Twitter tag). This results in a
297 versatile tool that can be used to build many different
298 situations.
299
300 To model classical socket communications, use "hostname:port" as
301 mailbox names, and make sure that only one actor reads into a given
302 mailbox. This does not make it easy to build a perfectly realistic
303 model of the TCP sockets, but in most cases, this system is too
304 cumbersome for your simulations anyway. You probably want something
305 simpler, that turns out to be easy to build with the mailboxes.
306
307 Many SimGrid examples use a sort of yellow page system where the
308 mailbox names are the name of the service (such as "worker",
309 "master", or "reducer"). That way, you don't have to know where your
310 peer is located to contact it. You don't even need its name. Its
311 function is enough for that. This also gives you some sort of load
312 balancing for free if more than one actor pulls from the mailbox:
313 the first actor that can deal with the request will handle it.
314
315 =========================================
316 How are put() and get() requests matched?
317 =========================================
318
319 The matching algorithm simple: first come, first serve. When a new
320 send arrives, it matches the oldest enqueued receive. If no receive is
321 currently enqueued, then the incoming send is enqueued. As you can
322 see, the mailbox cannot contain both send and receive requests: all
323 enqueued requests must be of the same sort.
324
325 .. _s4u_receiving_actor:
326
327 ===========================
328 Declaring a Receiving Actor
329 ===========================
330
331 The last twist is that by default in the simulator, the data starts
332 to be exchanged only when both the sender and the receiver are
333 announced (it waits until both :cpp:func:`put() <simgrid::s4u::Mailbox::put()>`
334 and :cpp:func:`get() <simgrid::s4u::Mailbox::get()>` are posted).
335 In TCP, since you establish connections beforehand, the data starts to
336 flow as soon as the sender posts it, even if the receiver did not post
337 its :cpp:func:`put() <simgrid::s4u::Mailbox::put()>` yet.
338
339 To model this in SimGrid, you can declare a specific receiver to a
340 given mailbox (with the function
341 :cpp:func:`set_receiver() <simgrid::s4u::Mailbox::set_receiver()>`).
342 That way, any :cpp:func:`put() <simgrid::s4u::Mailbox::put()>`
343 posted to that mailbox will start as soon as possible, and the data
344 will already be there on the receiver host when the receiver actor
345 posts its :cpp:func:`get() <simgrid::s4u::Mailbox::get()>`
346
347 Note that being permanent receivers of a mailbox prevents actors to be
348 garbage-collected. If your simulation creates many short-lived actors
349 that are marked as permanent receiver, you should call
350 ``mailbox->set_receiver(nullptr)`` by the end of the actors so that their
351 memory gets properly reclaimed. This call should be at the end of the
352 actor's function, not in an on_exit callback.
353
354 ===============================
355 Communicating without Mailboxes
356 ===============================
357
358 Sometimes you don't want to simulate communications between actors as
359 allowed by mailboxes, but you want to create a direct communication
360 between two arbitrary hosts. This can arise when you write a
361 high-level model of a centralized scheduler, or when you model direct
362 communications such as one-sided communications in MPI or remote
363 memory direct access in PGAS.
364
365 For that, :cpp:func:`Comm::sendto() <simgrid::s4u::Comm::sendto()>`
366 simulates a direct communication between the two specified hosts. No
367 mailbox is used, and there is no rendezvous between actors. You can
368 freely mix such direct communications and rendezvous-based
369 communications. Alternatively, :cpp:func:`Comm::sendto_init()
370 <simgrid::s4u::Comm::sendto_init()>` and
371 :cpp:func:`Comm::sendto_async() <simgrid::s4u::Comm::sendto_async()>`
372 create asynchronous direct communications.
373
374 .. _s4u_raii:
375
376 Memory Management
377 *****************
378
379 For sake of simplicity, we use `RAII
380 <https://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization>`_
381 for many classes in S4U. This is an idiom where resources are automatically
382 managed through the context. Provided that you never manipulate
383 objects of type Foo directly but always FooPtr references (which are
384 defined as `boost::intrusive_ptr
385 <http://www.boost.org/doc/libs/1_61_0/libs/smart_ptr/intrusive_ptr.html>`_
386 <Foo>), you will never have to explicitly release the resource that
387 you use nor to free the memory of unused objects.
388 Here is a little example:
389
390 .. code-block:: cpp
391
392    void myFunc()
393    {
394      simgrid::s4u::MutexPtr mutex = simgrid::s4u::Mutex::create(); // Too bad we cannot use `new`
395
396      mutex->lock();   // use the mutex as a simple reference
397      //  bla bla
398      mutex->unlock();
399
400    } // The mutex gets automatically freed because the only existing reference gets out of scope
401
402 Note that Mailboxes, Hosts, and Links are not handled through smart
403 pointers (yet?). This means that it is currently impossible to destroy a
404 mailbox or a link. You can still destroy a host (but probably
405 shouldn't), using :cpp:func:`simgrid::s4u::Host::destroy`.
406
407 API Reference
408 *************
409
410 .. _API_s4u_simulation_object:
411
412 ==================
413 Simulation objects
414 ==================
415
416 .. _API_s4u_Actor:
417
418 ==============
419 ⁣  class Actor
420 ==============
421
422 .. tabs::
423
424    .. group-tab:: C++
425
426       .. doxygenclass:: simgrid::s4u::Actor
427
428       .. doxygentypedef:: aid_t
429
430
431    .. group-tab:: Python
432
433       .. autoclass:: simgrid.Actor
434
435 Basic management
436 ----------------
437
438 .. tabs::
439
440    .. group-tab:: C++
441
442       .. code:: C++
443
444          #include <simgrid/s4u/Actor.hpp>
445
446       .. doxygentypedef:: ActorPtr
447
448    .. group-tab:: Python
449
450       .. code:: Python
451
452          from simgrid import Actor
453
454    .. group-tab:: C
455
456       .. code:: C
457
458          #include <simgrid/actor.h>
459
460       .. doxygentypedef:: sg_actor_t
461       .. doxygentypedef:: const_sg_actor_t
462       .. doxygenfunction:: sg_actor_ref
463       .. doxygenfunction:: sg_actor_unref
464
465
466 Creating actors
467 ---------------
468
469 See also :ref:`the relevant example <s4u_ex_actors_create>`.
470
471 .. tabs::
472
473    .. group-tab:: C++
474
475       .. doxygenfunction:: simgrid::s4u::Actor::create(const std::string &name, s4u::Host *host, const std::function< void()> &code)
476       .. doxygenfunction:: simgrid::s4u::Actor::create(const std::string &name, s4u::Host *host, F code)
477       .. doxygenfunction:: simgrid::s4u::Actor::create(const std::string &name, s4u::Host *host, F code, Args... args)
478       .. doxygenfunction:: simgrid::s4u::Actor::create(const std::string &name, s4u::Host *host, const std::string &function, std::vector< std::string > args)
479
480       .. doxygenfunction:: simgrid::s4u::Actor::init(const std::string &name, s4u::Host *host)
481       .. doxygenfunction:: simgrid::s4u::Actor::start(const std::function< void()> &code)
482       .. doxygenfunction:: simgrid::s4u::Actor::set_stacksize
483
484    .. group-tab:: Python
485
486       .. automethod:: simgrid.Actor.create
487
488    .. group-tab:: C
489
490       .. doxygenfunction:: sg_actor_create(const char *name, sg_host_t host, xbt_main_func_t code, int argc, char *const *argv)
491       .. doxygenfunction:: sg_actor_init(const char *name, sg_host_t host)
492       .. doxygenfunction:: sg_actor_start(sg_actor_t actor, xbt_main_func_t code, int argc, char *const *argv)
493       .. doxygenfunction:: sg_actor_set_stacksize
494
495       .. doxygenfunction:: sg_actor_attach(const char *name, void *data, sg_host_t host, xbt_dict_t properties)
496       .. doxygenfunction:: sg_actor_detach()
497
498 Retrieving actors
499 -----------------
500
501 .. tabs::
502
503    .. group-tab:: C++
504
505       .. doxygenfunction:: simgrid::s4u::Actor::by_pid(aid_t pid)
506       .. doxygenfunction:: simgrid::s4u::Actor::self()
507
508    .. group-tab:: Python
509
510       .. automethod:: simgrid.Actor.by_pid
511       .. automethod:: simgrid.Actor.self
512
513    .. group-tab:: C
514
515       .. doxygenfunction:: sg_actor_by_pid(aid_t pid)
516       .. doxygenfunction:: sg_actor_self()
517       .. doxygenfunction:: sg_actor_list()
518
519 Querying info
520 -------------
521
522 .. tabs::
523
524    .. group-tab:: C++
525
526       .. doxygenfunction:: simgrid::s4u::Actor::get_cname
527       .. doxygenfunction:: simgrid::s4u::Actor::get_name
528       .. doxygenfunction:: simgrid::s4u::Actor::get_pid
529       .. doxygenfunction:: simgrid::s4u::Actor::get_ppid
530       .. doxygenfunction:: simgrid::s4u::Actor::get_properties() const
531       .. doxygenfunction:: simgrid::s4u::Actor::get_property(const std::string &key) const
532       .. doxygenfunction:: simgrid::s4u::Actor::set_property(const std::string &key, const std::string &value)
533
534       .. doxygenfunction:: simgrid::s4u::Actor::get_host
535       .. doxygenfunction:: simgrid::s4u::Actor::set_host
536
537       .. doxygenfunction:: simgrid::s4u::Actor::get_refcount
538       .. doxygenfunction:: simgrid::s4u::Actor::get_impl
539
540    .. group-tab:: Python
541
542       .. autoattribute:: simgrid.Actor.name
543       .. autoattribute:: simgrid.Actor.host
544       .. autoattribute:: simgrid.Actor.pid
545       .. autoattribute:: simgrid.Actor.ppid
546
547    .. group-tab:: C
548
549       .. doxygenfunction:: sg_actor_get_name(const_sg_actor_t actor)
550       .. doxygenfunction:: sg_actor_get_pid(const_sg_actor_t actor)
551       .. doxygenfunction:: sg_actor_get_ppid(const_sg_actor_t actor)
552       .. doxygenfunction:: sg_actor_get_properties(const_sg_actor_t actor)
553       .. doxygenfunction:: sg_actor_get_property_value(const_sg_actor_t actor, const char *name)
554
555       .. doxygenfunction:: sg_actor_get_host(const_sg_actor_t actor)
556       .. doxygenfunction:: sg_actor_set_host(sg_actor_t actor, sg_host_t host)
557
558       .. doxygenfunction:: sg_actor_get_data(const_sg_actor_t actor)
559       .. doxygenfunction:: sg_actor_set_data(sg_actor_t actor, void *userdata)
560
561 Suspending and resuming actors
562 ------------------------------
563
564 .. tabs::
565
566    .. group-tab:: C++
567
568       .. doxygenfunction:: simgrid::s4u::Actor::suspend()
569       .. doxygenfunction:: simgrid::s4u::Actor::resume()
570       .. doxygenfunction:: simgrid::s4u::Actor::is_suspended
571
572    .. group-tab:: Python
573
574       .. automethod:: simgrid.Actor.resume
575       .. automethod:: simgrid.Actor.suspend
576       .. automethod:: simgrid.Actor.is_suspended
577
578    .. group-tab:: C
579
580       .. doxygenfunction:: sg_actor_suspend(sg_actor_t actor)
581       .. doxygenfunction:: sg_actor_resume(sg_actor_t actor)
582       .. doxygenfunction:: sg_actor_is_suspended(const_sg_actor_t actor)
583
584 Specifying when actors should terminate
585 ---------------------------------------
586
587 .. tabs::
588
589    .. group-tab:: C++
590
591       .. doxygenfunction:: simgrid::s4u::Actor::kill()
592       .. doxygenfunction:: simgrid::s4u::Actor::kill_all()
593       .. doxygenfunction:: simgrid::s4u::Actor::set_kill_time(double time)
594       .. doxygenfunction:: simgrid::s4u::Actor::get_kill_time
595
596       .. doxygenfunction:: simgrid::s4u::Actor::restart()
597       .. doxygenfunction:: simgrid::s4u::Actor::daemonize()
598       .. doxygenfunction:: simgrid::s4u::Actor::is_daemon
599
600    .. group-tab:: Python
601
602       .. automethod:: simgrid.Actor.kill
603       .. automethod:: simgrid.Actor.kill_all
604
605       .. automethod:: simgrid.Actor.daemonize
606       .. automethod:: simgrid.Actor.is_daemon
607
608    .. group-tab:: C
609
610       .. doxygenfunction:: sg_actor_kill(sg_actor_t actor)
611       .. doxygenfunction:: sg_actor_kill_all()
612       .. doxygenfunction:: sg_actor_set_kill_time(sg_actor_t actor, double kill_time)
613
614       .. doxygenfunction:: sg_actor_restart(sg_actor_t actor)
615       .. doxygenfunction:: sg_actor_daemonize(sg_actor_t actor)
616       .. doxygenfunction:: sg_actor_is_daemon
617
618 .. _API_s4u_Actor_end:
619
620 Reacting to the end of actors
621 -----------------------------
622
623 .. tabs::
624
625    .. group-tab:: C++
626
627       .. doxygenfunction:: simgrid::s4u::Actor::on_exit
628       .. doxygenfunction:: simgrid::s4u::Actor::join() const
629       .. doxygenfunction:: simgrid::s4u::Actor::join(double timeout) const
630       .. doxygenfunction:: simgrid::s4u::Actor::set_auto_restart(bool autorestart)
631       .. doxygenfunction:: simgrid::s4u::Actor::get_restart_count
632
633    .. group-tab:: Python
634
635       .. automethod:: simgrid.Actor.join
636
637    .. group-tab:: C
638
639       .. doxygenfunction:: sg_actor_on_exit
640       .. doxygenfunction:: sg_actor_join(const_sg_actor_t actor, double timeout)
641       .. doxygenfunction:: sg_actor_set_auto_restart(sg_actor_t actor, int auto_restart)
642
643 Signals
644 -------
645
646 .. tabs::
647
648    .. group-tab:: C++
649
650       .. doxygenfunction:: simgrid::s4u::Actor::on_creation_cb
651       .. doxygenfunction:: simgrid::s4u::Actor::on_suspend_cb
652       .. doxygenfunction:: simgrid::s4u::Actor::on_this_suspend_cb
653       .. doxygenfunction:: simgrid::s4u::Actor::on_host_change_cb
654       .. doxygenfunction:: simgrid::s4u::Actor::on_this_host_change_cb
655       .. doxygenfunction:: simgrid::s4u::Actor::on_resume_cb
656       .. doxygenfunction:: simgrid::s4u::Actor::on_this_resume_cb
657       .. doxygenfunction:: simgrid::s4u::Actor::on_sleep_cb
658       .. doxygenfunction:: simgrid::s4u::Actor::on_this_sleep_cb
659       .. doxygenfunction:: simgrid::s4u::Actor::on_wake_up_cb
660       .. doxygenfunction:: simgrid::s4u::Actor::on_this_wake_up_cb
661       .. doxygenfunction:: simgrid::s4u::Actor::on_termination_cb
662       .. doxygenfunction:: simgrid::s4u::Actor::on_this_termination_cb
663       .. doxygenfunction:: simgrid::s4u::Actor::on_destruction_cb
664       .. doxygenfunction:: simgrid::s4u::Actor::on_this_destruction_cb
665
666 .. _API_s4u_this_actor:
667
668 ====================
669 ⁣  The current actor
670 ====================
671
672 These functions can be used in your user code to interact with the actor
673 currently running (the one retrieved with :cpp:func:`simgrid::s4u::Actor::self`).
674 Using these functions can greatly improve the code readability.
675
676 Querying info
677 -------------
678
679 .. tabs::
680
681    .. group-tab:: C++
682
683       .. doxygenfunction:: simgrid::s4u::this_actor::get_cname()
684       .. doxygenfunction:: simgrid::s4u::this_actor::get_name()
685       .. doxygenfunction:: simgrid::s4u::this_actor::get_pid()
686       .. doxygenfunction:: simgrid::s4u::this_actor::get_ppid()
687       .. doxygenfunction:: simgrid::s4u::this_actor::is_maestro()
688
689       .. doxygenfunction:: simgrid::s4u::this_actor::get_host()
690       .. doxygenfunction:: simgrid::s4u::this_actor::set_host(Host *new_host)
691
692    .. group-tab:: Python
693
694       .. autofunction:: simgrid.this_actor.get_host
695       .. autofunction:: simgrid.this_actor.set_host
696
697       .. autofunction:: simgrid.this_actor.get_pid
698       .. autofunction:: simgrid.this_actor.get_ppid
699
700    .. group-tab:: C
701
702       .. doxygenfunction:: sg_actor_self_get_data()
703       .. doxygenfunction:: sg_actor_self_set_data(void *data)
704       .. doxygenfunction:: sg_actor_self_get_name()
705       .. doxygenfunction:: sg_actor_self_get_pid()
706       .. doxygenfunction:: sg_actor_self_get_ppid()
707       .. doxygenfunction:: sg_host_self()
708       .. doxygenfunction:: sg_host_self_get_name()
709
710 Suspending and resuming
711 -----------------------
712
713 .. tabs::
714
715    .. group-tab:: C++
716
717       .. doxygenfunction:: simgrid::s4u::this_actor::suspend()
718       .. doxygenfunction:: simgrid::s4u::this_actor::yield()
719
720    .. group-tab:: Python
721
722       .. autofunction:: simgrid.this_actor.suspend
723       .. autofunction:: simgrid.this_actor.yield_
724
725    .. group-tab:: C
726
727       .. doxygenfunction:: sg_actor_yield()
728
729 Logging messages
730 ----------------
731
732 .. tabs::
733
734    .. group-tab:: C++
735
736       Please refer to :ref:`the relevant documentation <logging_prog>`.
737
738    .. group-tab:: Python
739
740        .. autofunction:: simgrid.this_actor.debug
741        .. autofunction:: simgrid.this_actor.info
742        .. autofunction:: simgrid.this_actor.warning
743        .. autofunction:: simgrid.this_actor.error
744
745 Sleeping
746 --------
747
748 .. tabs::
749
750    .. group-tab:: C++
751
752       .. doxygenfunction:: simgrid::s4u::this_actor::sleep_for(double duration)
753       .. doxygenfunction:: simgrid::s4u::this_actor::sleep_for(std::chrono::duration< Rep, Period > duration)
754       .. doxygenfunction:: simgrid::s4u::this_actor::sleep_until(const SimulationTimePoint< Duration > &wakeup_time)
755       .. doxygenfunction:: simgrid::s4u::this_actor::sleep_until(double wakeup_time)
756
757    .. group-tab:: Python
758
759       .. autofunction:: simgrid.this_actor.sleep_for
760       .. autofunction:: simgrid.this_actor.sleep_until
761
762    .. group-tab:: C
763
764       .. doxygenfunction:: sg_actor_sleep_for(double duration)
765
766 Simulating executions
767 ---------------------
768
769 Simulate the execution of some code on this actor. You can either simulate
770 parallel or sequential code and you can either block upon the termination of
771 the execution, or start an asynchronous activity.
772
773 .. tabs::
774
775    .. group-tab:: C++
776
777       .. doxygenfunction:: simgrid::s4u::this_actor::exec_async
778       .. doxygenfunction:: simgrid::s4u::this_actor::exec_init(const std::vector< s4u::Host * > &hosts, const std::vector< double > &flops_amounts, const std::vector< double > &bytes_amounts)
779       .. doxygenfunction:: simgrid::s4u::this_actor::exec_init(double flops_amounts)
780       .. doxygenfunction:: simgrid::s4u::this_actor::execute(double flop)
781       .. doxygenfunction:: simgrid::s4u::this_actor::execute(double flop, double priority)
782       .. doxygenfunction:: simgrid::s4u::this_actor::parallel_execute(const std::vector< s4u::Host * > &hosts, const std::vector< double > &flops_amounts, const std::vector< double > &bytes_amounts)
783       .. doxygenfunction:: simgrid::s4u::this_actor::thread_execute
784
785    .. group-tab:: Python
786
787       .. autofunction:: simgrid.this_actor.exec_async
788       .. autofunction:: simgrid.this_actor.exec_init
789       .. autofunction:: simgrid.this_actor.execute
790
791    .. group-tab:: C
792
793       .. doxygenfunction:: sg_actor_execute(double flops)
794       .. doxygenfunction:: sg_actor_execute_with_priority(double flops, double priority)
795       .. doxygenfunction:: sg_actor_exec_init(double computation_amount)
796       .. doxygenfunction:: sg_actor_exec_async(double computation_amount)
797       .. doxygenfunction:: sg_actor_parallel_exec_init(int host_nb, const sg_host_t* host_list, double* flops_amount, double* bytes_amount);
798
799 Exiting
800 -------
801
802 .. tabs::
803
804    .. group-tab:: C++
805
806       .. doxygenfunction:: simgrid::s4u::this_actor::exit()
807       .. doxygenfunction:: simgrid::s4u::this_actor::on_exit(const std::function< void(bool)> &fun)
808
809    .. group-tab:: Python
810
811       .. autofunction:: simgrid.this_actor.exit
812       .. autofunction:: simgrid.this_actor.on_exit
813
814    .. group-tab:: c
815
816       See also :cpp:func:`sg_actor_on_exit`.
817
818       .. doxygenfunction:: sg_actor_exit
819
820 .. _API_s4u_Engine:
821
822 ====================
823 ⁣  Simulation Engine
824 ====================
825
826 .. tabs::
827
828    .. group-tab:: C++
829
830       .. doxygenclass:: simgrid::s4u::Engine
831
832    .. group-tab:: Python
833
834       .. autoclass:: simgrid.Engine
835
836 Engin initialization
837 --------------------
838
839 .. tabs::
840
841    .. group-tab:: C++
842
843       .. doxygenfunction:: simgrid::s4u::Engine::Engine(int *argc, char **argv)
844       .. doxygenfunction:: simgrid::s4u::Engine::is_initialized()
845       .. doxygenfunction:: simgrid::s4u::Engine::shutdown()
846       .. doxygenfunction:: simgrid::s4u::Engine::get_instance()
847
848    .. group-tab:: Python
849
850        .. automethod:: simgrid.Engine.__init__
851        .. autoattribute:: simgrid.Engine.instance
852
853    .. group-tab:: C
854
855       .. doxygenfunction:: simgrid_init
856
857 Simulation setup
858 ----------------
859
860 .. tabs::
861
862    .. group-tab:: C++
863
864       .. doxygenfunction:: simgrid::s4u::Engine::set_config(const std::string &str)
865       .. doxygenfunction:: simgrid::s4u::Engine::set_config(const std::string &name, bool value)
866       .. doxygenfunction:: simgrid::s4u::Engine::set_config(const std::string &name, double value)
867       .. doxygenfunction:: simgrid::s4u::Engine::set_config(const std::string &name, int value)
868       .. doxygenfunction:: simgrid::s4u::Engine::set_config(const std::string &name, const std::string &value)
869
870       .. doxygenfunction:: simgrid::s4u::Engine::load_deployment
871       .. doxygenfunction:: simgrid::s4u::Engine::load_platform
872       .. doxygenfunction:: simgrid::s4u::Engine::flatify_platform
873       .. doxygenfunction:: simgrid::s4u::Engine::register_actor(const std::string &name)
874       .. doxygenfunction:: simgrid::s4u::Engine::register_actor(const std::string &name, F code)
875       .. doxygenfunction:: simgrid::s4u::Engine::register_default(const std::function< void(int, char **)> &code)
876       .. doxygenfunction:: simgrid::s4u::Engine::register_default(const kernel::actor::ActorCodeFactory &factory)
877
878       .. doxygenfunction:: simgrid::s4u::Engine::register_function(const std::string &name, const std::function< void(int, char **)> &code)
879       .. doxygenfunction:: simgrid::s4u::Engine::register_function(const std::string &name, const std::function< void(std::vector< std::string >)> &code)
880       .. doxygenfunction:: simgrid::s4u::Engine::register_function(const std::string &name, const kernel::actor::ActorCodeFactory &factory)
881
882    .. group-tab:: Python
883
884        .. automethod:: simgrid.Engine.load_deployment
885        .. automethod:: simgrid.Engine.load_platform
886        .. automethod:: simgrid.Engine.register_actor
887
888    .. group-tab:: C
889
890       .. doxygenfunction:: simgrid_load_deployment
891       .. doxygenfunction:: simgrid_load_platform
892       .. doxygenfunction:: simgrid_register_default
893       .. doxygenfunction:: simgrid_register_function
894
895
896 Run the simulation
897 ------------------
898
899 .. tabs::
900
901    .. group-tab:: C++
902
903       .. doxygenfunction:: simgrid::s4u::Engine::get_clock()
904       .. doxygenfunction:: simgrid::s4u::Engine::run
905       .. doxygenfunction:: simgrid::s4u::Engine::run_until
906
907    .. group-tab:: Python
908
909       .. autoattribute:: simgrid.Engine.clock
910       .. automethod:: simgrid.Engine.run
911       .. automethod:: simgrid.Engine.run_until
912
913    .. group-tab:: C
914
915       .. doxygenfunction:: simgrid_get_clock
916       .. doxygenfunction:: simgrid_run
917       .. doxygenfunction:: simgrid_run_until
918
919 Retrieving actors
920 -----------------
921
922 .. tabs::
923
924    .. group-tab:: C++
925
926       .. doxygenfunction:: simgrid::s4u::Engine::get_actor_count
927       .. doxygenfunction:: simgrid::s4u::Engine::get_all_actors
928       .. doxygenfunction:: simgrid::s4u::Engine::get_filtered_actors
929
930    .. group-tab:: C
931
932       .. doxygenfunction:: sg_actor_count()
933
934 Retrieving hosts
935 ----------------
936
937 .. tabs::
938
939    .. group-tab:: C++
940
941       .. doxygenfunction:: simgrid::s4u::Engine::get_all_hosts
942       .. doxygenfunction:: simgrid::s4u::Engine::get_host_count
943       .. doxygenfunction:: simgrid::s4u::Engine::get_filtered_hosts
944       .. doxygenfunction:: simgrid::s4u::Engine::host_by_name
945       .. doxygenfunction:: simgrid::s4u::Engine::host_by_name_or_null
946
947    .. group-tab:: Python
948
949       .. autoattribute:: simgrid.Engine.all_hosts
950       .. automethod:: simgrid.Engine.host_by_name
951
952    .. group-tab:: C
953
954       See also :cpp:func:`sg_host_list` and :cpp:func:`sg_host_count`.
955
956 Retrieving links
957 ----------------
958
959 .. tabs::
960
961    .. group-tab:: C++
962
963       .. doxygenfunction:: simgrid::s4u::Engine::get_all_links
964       .. doxygenfunction:: simgrid::s4u::Engine::get_link_count
965       .. doxygenfunction:: simgrid::s4u::Engine::get_filtered_links
966       .. doxygenfunction:: simgrid::s4u::Engine::link_by_name
967       .. doxygenfunction:: simgrid::s4u::Engine::link_by_name_or_null
968
969    .. group-tab:: Python
970
971       .. autoattribute:: simgrid.Engine.all_links
972
973 Interacting with the routing
974 ----------------------------
975
976 .. tabs::
977
978    .. group-tab:: C++
979
980       .. doxygenfunction:: simgrid::s4u::Engine::get_all_netpoints
981       .. doxygenfunction:: simgrid::s4u::Engine::get_filtered_netzones
982       .. doxygenfunction:: simgrid::s4u::Engine::get_netzone_root
983       .. doxygenfunction:: simgrid::s4u::Engine::netpoint_by_name_or_null
984       .. doxygenfunction:: simgrid::s4u::Engine::netzone_by_name_or_null
985
986    .. group-tab:: Python
987
988       .. autoattribute:: simgrid.Engine.all_netpoints
989       .. autoattribute:: simgrid.Engine.netzone_root
990       .. automethod:: simgrid.Engine.netpoint_by_name
991       .. automethod:: simgrid.Engine.netzone_by_name
992
993 Signals
994 -------
995
996 .. tabs::
997
998    .. group-tab:: C++
999
1000       .. doxygenfunction:: simgrid::s4u::Engine::on_deadlock_cb
1001       .. doxygenfunction:: simgrid::s4u::Engine::on_platform_created_cb
1002       .. doxygenfunction:: simgrid::s4u::Engine::on_platform_creation_cb
1003       .. doxygenfunction:: simgrid::s4u::Engine::on_simulation_start_cb
1004       .. doxygenfunction:: simgrid::s4u::Engine::on_simulation_end_cb
1005       .. doxygenfunction:: simgrid::s4u::Engine::on_time_advance_cb
1006
1007 .. _API_s4u_Mailbox:
1008
1009 ================
1010 ⁣  class Mailbox
1011 ================
1012
1013 .. tabs::
1014
1015    .. group-tab:: C++
1016
1017       .. doxygenclass:: simgrid::s4u::Mailbox
1018
1019    .. group-tab:: Python
1020
1021       .. autoclass:: simgrid.Mailbox
1022
1023 Please also refer to the :ref:`full doc on s4u::Mailbox <s4u_mailbox>`.
1024
1025 Basic management
1026 ----------------
1027
1028 .. tabs::
1029
1030    .. group-tab:: C++
1031
1032       .. code-block:: C++
1033
1034          #include <simgrid/s4u/Mailbox.hpp>
1035
1036       Note that there is no MailboxPtr type and that you cannot use the RAII
1037       idiom on mailboxes because they are internal objects to the simulation
1038       engine. Once created, there is no way to destroy a mailbox before the end
1039       of the simulation.
1040
1041       .. doxygenfunction:: simgrid::s4u::Mailbox::by_name(const std::string &name)
1042
1043    .. group-tab:: Python
1044
1045       .. code-block:: C++
1046
1047          #include <simgrid/mailbox.h>
1048
1049       .. automethod:: simgrid.Mailbox.by_name
1050
1051    .. group-tab:: C
1052
1053       .. code-block:: C
1054
1055          #include <simgrid/s4u/mailbox.h>
1056
1057       .. doxygentypedef:: sg_mailbox_t
1058       .. doxygentypedef:: const_sg_mailbox_t
1059
1060       .. doxygenfunction:: sg_mailbox_by_name(const char *alias)
1061
1062 Querying info
1063 -------------
1064
1065 .. tabs::
1066
1067    .. group-tab:: C++
1068
1069       .. doxygenfunction:: simgrid::s4u::Mailbox::get_cname
1070       .. doxygenfunction:: simgrid::s4u::Mailbox::get_name
1071
1072    .. group-tab:: Python
1073
1074       .. autoattribute:: simgrid.Mailbox.name
1075
1076 Sending data
1077 ------------
1078
1079 .. tabs::
1080
1081    .. group-tab:: C++
1082
1083       .. doxygenfunction:: simgrid::s4u::Mailbox::put(void *payload, uint64_t simulated_size_in_bytes)
1084       .. doxygenfunction:: simgrid::s4u::Mailbox::put(void *payload, uint64_t simulated_size_in_bytes, double timeout)
1085       .. doxygenfunction:: simgrid::s4u::Mailbox::put_async(void *data, uint64_t simulated_size_in_bytes)
1086       .. doxygenfunction:: simgrid::s4u::Mailbox::put_init()
1087       .. doxygenfunction:: simgrid::s4u::Mailbox::put_init(void *data, uint64_t simulated_size_in_bytes)
1088
1089    .. group-tab:: Python
1090
1091       .. automethod:: simgrid.Mailbox.put
1092       .. automethod:: simgrid.Mailbox.put_async
1093       .. automethod:: simgrid.Mailbox.put_init
1094
1095    .. group-tab:: C
1096
1097       .. doxygenfunction:: sg_mailbox_put(sg_mailbox_t mailbox, void *payload, long simulated_size_in_bytes)
1098       .. doxygenfunction:: sg_mailbox_put_init(sg_mailbox_t mailbox, void *payload, long simulated_size_in_bytes)
1099       .. doxygenfunction:: sg_mailbox_put_async(sg_mailbox_t mailbox, void *payload, long simulated_size_in_bytes)
1100
1101
1102 Receiving data
1103 --------------
1104
1105 .. tabs::
1106
1107    .. group-tab:: C++
1108
1109       .. doxygenfunction:: simgrid::s4u::Mailbox::empty
1110       .. doxygenfunction:: simgrid::s4u::Mailbox::front
1111       .. doxygenfunction:: simgrid::s4u::Mailbox::get()
1112       .. doxygenfunction:: simgrid::s4u::Mailbox::get(double timeout)
1113       .. doxygenfunction:: simgrid::s4u::Mailbox::get_async(T **data)
1114       .. doxygenfunction:: simgrid::s4u::Mailbox::get_init()
1115       .. doxygenfunction:: simgrid::s4u::Mailbox::iprobe(int type, const std::function<bool(void *, void *, kernel::activity::CommImpl *)>& match_fun, void *data)
1116       .. doxygenfunction:: simgrid::s4u::Mailbox::listen
1117       .. doxygenfunction:: simgrid::s4u::Mailbox::ready
1118
1119    .. group-tab:: Python
1120
1121        .. automethod:: simgrid.Mailbox.get
1122        .. automethod:: simgrid.Mailbox.get_async
1123        .. autoattribute:: simgrid.Mailbox.ready
1124
1125    .. group-tab:: C
1126
1127       .. doxygenfunction:: sg_mailbox_get(sg_mailbox_t mailbox)
1128       .. doxygenfunction:: sg_mailbox_get_async(sg_mailbox_t mailbox, void **data)
1129       .. doxygenfunction:: sg_mailbox_get_name(const_sg_mailbox_t mailbox)
1130       .. doxygenfunction:: sg_mailbox_listen(const char *alias)
1131
1132 Receiving actor
1133 ---------------
1134
1135 See :ref:`s4u_receiving_actor`.
1136
1137 .. tabs::
1138
1139    .. group-tab:: C++
1140
1141       .. doxygenfunction:: simgrid::s4u::Mailbox::get_receiver
1142       .. doxygenfunction:: simgrid::s4u::Mailbox::set_receiver(ActorPtr actor)
1143
1144    .. group-tab:: C
1145
1146       .. doxygenfunction:: sg_mailbox_set_receiver(const char *alias)
1147
1148 .. _API_s4u_Resource:
1149
1150 =========
1151 Resources
1152 =========
1153
1154 .. _API_s4u_Disk:
1155
1156 =============
1157 ⁣  class Disk
1158 =============
1159
1160 .. tabs::
1161
1162    .. group-tab:: C++
1163
1164       .. doxygenclass:: simgrid::s4u::Disk
1165
1166    .. group-tab:: Python
1167
1168       .. autoclass:: simgrid.Disk
1169
1170    .. group-tab:: C
1171
1172       .. doxygentypedef:: sg_disk_t
1173       .. doxygentypedef:: const_sg_disk_t
1174
1175 Basic management
1176 ----------------
1177
1178 .. tabs::
1179
1180    .. group-tab:: C++
1181
1182       .. code-block:: C++
1183
1184          #include <simgrid/s4u/Disk.hpp>
1185
1186       Note that there is no DiskPtr type and that you cannot use the RAII
1187       idiom on disks because SimGrid does not allow (yet) to create nor
1188       destroy resources once the simulation is started.
1189
1190       .. doxygenfunction:: simgrid::s4u::Disk::seal()
1191
1192    .. group-tab:: Python
1193
1194       .. code:: Python
1195
1196          from simgrid import Disk
1197
1198       .. automethod:: simgrid.Disk.seal
1199
1200
1201 Querying info
1202 -------------
1203
1204 .. tabs::
1205
1206    .. group-tab:: C++
1207
1208       .. doxygenfunction:: simgrid::s4u::Disk::get_cname() const
1209       .. doxygenfunction:: simgrid::s4u::Disk::get_host() const
1210       .. doxygenfunction:: simgrid::s4u::Disk::get_name() const
1211       .. doxygenfunction:: simgrid::s4u::Disk::get_properties() const
1212       .. doxygenfunction:: simgrid::s4u::Disk::get_property(const std::string &key) const
1213       .. doxygenfunction:: simgrid::s4u::Disk::get_read_bandwidth() const
1214       .. doxygenfunction:: simgrid::s4u::Disk::get_write_bandwidth() const
1215       .. doxygenfunction:: simgrid::s4u::Disk::set_property(const std::string &, const std::string &value)
1216       .. doxygenfunction:: simgrid::s4u::Disk::set_sharing_policy
1217
1218    .. group-tab:: Python
1219
1220       .. autoattribute:: simgrid.Disk.name
1221       .. automethod:: simgrid.Disk.set_sharing_policy
1222
1223 I/O operations
1224 --------------
1225
1226 .. tabs::
1227
1228    .. group-tab:: C++
1229
1230       .. doxygenfunction:: simgrid::s4u::Disk::io_init(sg_size_t size, s4u::Io::OpType type) const
1231       .. doxygenfunction:: simgrid::s4u::Disk::read(sg_size_t size) const
1232       .. doxygenfunction:: simgrid::s4u::Disk::read_async(sg_size_t size) const
1233       .. doxygenfunction:: simgrid::s4u::Disk::write(sg_size_t size) const
1234       .. doxygenfunction:: simgrid::s4u::Disk::write_async(sg_size_t size) const
1235
1236    .. group-tab:: Python
1237
1238       .. automethod:: simgrid.Disk.read
1239       .. automethod:: simgrid.Disk.read_async
1240       .. automethod:: simgrid.Disk.write
1241       .. automethod:: simgrid.Disk.write_async
1242
1243 Signals
1244 -------
1245
1246 .. tabs::
1247
1248    .. group-tab:: C++
1249
1250       .. doxygenfunction:: simgrid::s4u::Disk::on_creation_cb
1251       .. doxygenfunction:: simgrid::s4u::Disk::on_destruction_cb
1252       .. doxygenfunction:: simgrid::s4u::Disk::on_this_destruction_cb
1253       .. doxygenfunction:: simgrid::s4u::Disk::on_onoff_cb
1254       .. doxygenfunction:: simgrid::s4u::Disk::on_this_onoff_cb
1255
1256
1257 .. _API_s4u_Host:
1258
1259 =============
1260 ⁣  class Host
1261 =============
1262
1263 .. tabs::
1264
1265    .. group-tab:: C++
1266
1267       .. doxygenclass:: simgrid::s4u::Host
1268
1269    .. group-tab:: Python
1270
1271       .. autoclass:: simgrid.Host
1272
1273 Basic management
1274 ----------------
1275
1276 .. tabs::
1277
1278    .. group-tab:: C++
1279
1280       .. code-block:: C++
1281
1282          #include <simgrid/s4u/Host.hpp>
1283
1284       Note that there is no HostPtr type, and that you cannot use the RAII
1285       idiom on hosts because SimGrid does not allow (yet) to create nor
1286       destroy resources once the simulation is started.
1287
1288       .. doxygenfunction:: simgrid::s4u::Host::destroy()
1289       .. doxygenfunction:: simgrid::s4u::Host::seal()
1290
1291    .. group-tab:: Python
1292
1293       .. code:: Python
1294
1295          from simgrid import Host
1296
1297       .. automethod:: simgrid.Host.seal
1298
1299    .. group-tab:: C
1300
1301       .. code:: C
1302
1303          #include <simgrid/host.h>
1304
1305       .. doxygentypedef:: sg_host_t
1306       .. cpp:type:: const s4u_Host* const_sg_host_t
1307
1308          Pointer to a constant host object.
1309
1310 Retrieving hosts
1311 ----------------
1312
1313 .. tabs::
1314
1315    .. group-tab:: C++
1316
1317       See also :cpp:func:`simgrid::s4u::Engine::get_all_hosts`.
1318
1319       .. doxygenfunction:: simgrid::s4u::Host::by_name(const std::string &name)
1320       .. doxygenfunction:: simgrid::s4u::Host::by_name_or_null(const std::string &name)
1321       .. doxygenfunction:: simgrid::s4u::Host::current()
1322
1323    .. group-tab:: Python
1324
1325       See also :py:attr:`simgrid.Engine.all_hosts`.
1326
1327       .. automethod:: simgrid.Host.by_name
1328       .. automethod:: simgrid.Host.current
1329
1330    .. group-tab:: C
1331
1332       .. doxygenfunction:: sg_host_by_name(const char *name)
1333       .. doxygenfunction:: sg_host_count()
1334       .. doxygenfunction:: sg_host_list()
1335
1336 Modifying characteristics
1337 -------------------------
1338
1339 .. tabs::
1340
1341    .. group-tab:: C++
1342
1343       .. doxygenfunction:: simgrid::s4u::Host::set_core_count(int core_count)
1344       .. doxygenfunction:: simgrid::s4u::Host::set_coordinates(const std::string& coords)
1345       .. doxygenfunction:: simgrid::s4u::Host::set_sharing_policy
1346
1347    .. group-tab:: Python
1348
1349       .. autoattribute:: simgrid.Host.core_count
1350          :noindex:
1351       .. automethod:: simgrid.Host.set_coordinates
1352       .. automethod:: simgrid.Host.set_sharing_policy
1353
1354 Querying info
1355 -------------
1356
1357 .. tabs::
1358
1359    .. group-tab:: C++
1360
1361       .. doxygenfunction:: simgrid::s4u::Host::get_cname() const
1362       .. doxygenfunction:: simgrid::s4u::Host::get_core_count() const
1363       .. doxygenfunction:: simgrid::s4u::Host::get_name() const
1364       .. doxygenfunction:: simgrid::s4u::Host::get_available_speed() const
1365       .. doxygenfunction:: simgrid::s4u::Host::get_load() const
1366       .. doxygenfunction:: simgrid::s4u::Host::get_speed() const
1367
1368    .. group-tab:: Python
1369
1370       .. autoattribute:: simgrid.Host.name
1371       .. autoattribute:: simgrid.Host.core_count
1372       .. autoattribute:: simgrid.Host.load
1373       .. autoattribute:: simgrid.Host.speed
1374       .. autoattribute:: simgrid.Host.available_speed
1375
1376    .. group-tab:: C
1377
1378       .. doxygenfunction:: sg_host_core_count(const_sg_host_t host)
1379       .. doxygenfunction:: sg_host_get_name(const_sg_host_t host)
1380       .. doxygenfunction:: sg_host_get_load(const_sg_host_t host)
1381       .. doxygenfunction:: sg_host_get_speed(const_sg_host_t host)
1382
1383 User data and properties
1384 ------------------------
1385
1386 .. tabs::
1387
1388    .. group-tab:: C++
1389
1390       .. doxygenfunction:: simgrid::s4u::Host::get_properties() const
1391       .. doxygenfunction:: simgrid::s4u::Host::get_property(const std::string &key) const
1392       .. doxygenfunction:: simgrid::s4u::Host::set_properties(const std::unordered_map< std::string, std::string > &properties)
1393       .. doxygenfunction:: simgrid::s4u::Host::set_property(const std::string &key, const std::string &value)
1394
1395    .. group-tab:: C
1396
1397       .. doxygenfunction:: sg_host_set_property_value(sg_host_t host, const char *name, const char *value)
1398       .. doxygenfunction:: sg_host_get_properties(const_sg_host_t host)
1399       .. doxygenfunction:: sg_host_get_property_value(const_sg_host_t host, const char *name)
1400       .. doxygenfunction:: sg_host_extension_create(void(*deleter)(void *))
1401       .. doxygenfunction:: sg_host_extension_get(const_sg_host_t host, size_t rank)
1402
1403 Retrieving components
1404 ---------------------
1405
1406 .. tabs::
1407
1408    .. group-tab:: C++
1409
1410       .. doxygenfunction:: simgrid::s4u::Host::add_disk(const Disk *disk)
1411       .. doxygenfunction:: simgrid::s4u::Host::get_actor_count() const
1412       .. doxygenfunction:: simgrid::s4u::Host::get_all_actors() const
1413       .. doxygenfunction:: simgrid::s4u::Host::get_disks() const
1414       .. doxygenfunction:: simgrid::s4u::Host::remove_disk(const std::string &disk_name)
1415
1416    .. group-tab:: Python
1417
1418       .. automethod:: simgrid.Host.get_disks
1419
1420    .. group-tab:: C
1421
1422       .. doxygenfunction:: sg_host_get_actor_list(const_sg_host_t host, xbt_dynar_t whereto)
1423
1424 On/Off
1425 ------
1426
1427 .. tabs::
1428
1429    .. group-tab:: C++
1430
1431       .. doxygenfunction:: simgrid::s4u::Host::is_on() const
1432       .. doxygenfunction:: simgrid::s4u::Host::turn_off()
1433       .. doxygenfunction:: simgrid::s4u::Host::turn_on()
1434
1435    .. group-tab:: C
1436
1437       .. doxygenfunction:: sg_host_is_on(const_sg_host_t host)
1438       .. doxygenfunction:: sg_host_turn_off(sg_host_t host)
1439       .. doxygenfunction:: sg_host_turn_on(sg_host_t host)
1440
1441 .. _API_s4u_Host_dvfs:
1442
1443 DVFS
1444 ----
1445
1446 See also the :ref:`relevant examples <s4u_ex_dvfs>`.
1447
1448 .. tabs::
1449
1450    .. group-tab:: C++
1451
1452       .. doxygenfunction:: simgrid::s4u::Host::get_pstate() const
1453       .. doxygenfunction:: simgrid::s4u::Host::get_pstate_count() const
1454       .. doxygenfunction:: simgrid::s4u::Host::get_pstate_speed(unsigned long pstate_index) const
1455       .. doxygenfunction:: simgrid::s4u::Host::set_pstate(unsigned long pstate_index)
1456
1457    .. group-tab:: Python
1458
1459       .. autoattribute:: simgrid.Host.pstate
1460       .. autoattribute:: simgrid.Host.pstate_count
1461       .. automethod:: simgrid.Host.pstate_speed
1462
1463    .. group-tab:: C
1464
1465       .. doxygenfunction:: sg_host_get_available_speed(const_sg_host_t host)
1466       .. doxygenfunction:: sg_host_get_nb_pstates(const_sg_host_t host)
1467       .. doxygenfunction:: sg_host_get_pstate(const_sg_host_t host)
1468       .. doxygenfunction:: sg_host_get_pstate_speed(const_sg_host_t host, unsigned long pstate_index)
1469       .. doxygenfunction:: sg_host_set_pstate(sg_host_t host, unsigned long pstate)
1470
1471 Dynamic profiles
1472 ----------------
1473
1474 .. tabs::
1475
1476    .. group-tab:: C++
1477
1478       .. doxygenfunction:: simgrid::s4u::Host::set_speed_profile(kernel::profile::Profile *p)
1479       .. doxygenfunction:: simgrid::s4u::Host::set_state_profile(kernel::profile::Profile *p)
1480
1481    .. group-tab:: Python
1482
1483       .. automethod:: simgrid.Host.set_speed_profile
1484       .. automethod:: simgrid.Host.set_state_profile
1485
1486 Execution
1487 ---------
1488
1489 .. tabs::
1490
1491    .. group-tab:: C++
1492
1493       .. doxygenfunction:: simgrid::s4u::Host::exec_async
1494       .. doxygenfunction:: simgrid::s4u::Host::execute(double flops) const
1495       .. doxygenfunction:: simgrid::s4u::Host::execute(double flops, double priority) const
1496
1497 Platform and routing
1498 --------------------
1499
1500 You can also start direct communications between two arbitrary hosts
1501 using :cpp:func:`Comm::sendto() <simgrid::s4u::Comm::sendto()>`.
1502
1503 .. tabs::
1504
1505    .. group-tab:: C++
1506
1507       .. doxygenfunction:: simgrid::s4u::Host::get_englobing_zone() const
1508       .. doxygenfunction:: simgrid::s4u::Host::get_netpoint() const
1509       .. doxygenfunction:: simgrid::s4u::Host::route_to(const Host *dest, std::vector< Link * > &links, double *latency) const
1510       .. doxygenfunction:: simgrid::s4u::Host::route_to(const Host *dest, std::vector< kernel::resource::StandardLinkImpl * > &links, double *latency) const
1511       .. doxygenfunction:: simgrid::s4u::Host::create_disk(const std::string& name, double read_bandwidth, double write_bandwidth)
1512       .. doxygenfunction:: simgrid::s4u::Host::create_disk(const std::string& name, const std::string& read_bandwidth, const std::string& write_bandwidth)
1513
1514    .. group-tab:: Python
1515
1516       .. autoattribute:: simgrid.Host.netpoint
1517       .. automethod:: simgrid.Host.create_disk
1518
1519       .. automethod:: simgrid.Host.route_to
1520
1521    .. group-tab:: C
1522
1523       .. doxygenfunction:: sg_host_get_route(const_sg_host_t from, const_sg_host_t to, xbt_dynar_t links)
1524       .. doxygenfunction:: sg_host_get_route_bandwidth(const_sg_host_t from, const_sg_host_t to)
1525       .. doxygenfunction:: sg_host_get_route_latency(const_sg_host_t from, const_sg_host_t to)
1526       .. doxygenfunction:: sg_host_sendto(sg_host_t from, sg_host_t to, double byte_amount)
1527
1528 Signals
1529 -------
1530
1531 .. tabs::
1532
1533    .. group-tab:: C++
1534
1535       .. doxygenfunction:: simgrid::s4u::Host::on_creation_cb
1536       .. doxygenfunction:: simgrid::s4u::Host::on_destruction_cb
1537       .. doxygenfunction:: simgrid::s4u::Host::on_this_destruction_cb
1538       .. doxygenfunction:: simgrid::s4u::Host::on_speed_change_cb
1539       .. doxygenfunction:: simgrid::s4u::Host::on_this_speed_change_cb
1540       .. doxygenfunction:: simgrid::s4u::Host::on_onoff_cb
1541       .. doxygenfunction:: simgrid::s4u::Host::on_this_onoff_cb
1542       .. doxygenfunction:: simgrid::s4u::Host::on_exec_state_change_cb
1543
1544 .. _API_s4u_Link:
1545
1546 =============
1547 ⁣  class Link
1548 =============
1549
1550 .. tabs::
1551
1552    .. group-tab:: C++
1553
1554       .. doxygenclass:: simgrid::s4u::Link
1555       .. doxygenclass:: simgrid::s4u::SplitDuplexLink
1556       .. doxygenclass:: simgrid::s4u::LinkInRoute
1557
1558
1559    .. group-tab:: Python
1560
1561       .. autoclass:: simgrid.Link
1562
1563 Basic management
1564 ----------------
1565
1566 .. tabs::
1567
1568    .. group-tab:: C++
1569
1570       .. code-block:: C++
1571
1572          #include <simgrid/s4u/Link.hpp>
1573
1574       Note that there is no LinkPtr type and that you cannot use the RAII
1575       idiom on hosts because SimGrid does not allow (yet) to create nor
1576       destroy resources once the simulation is started.
1577
1578       .. doxygenfunction:: simgrid::s4u::Link::seal()
1579
1580    .. group-tab:: Python
1581
1582       .. code:: Python
1583
1584          from simgrid import Link
1585
1586       .. automethod:: simgrid.Link.seal
1587
1588    .. group-tab:: C
1589
1590       .. code:: C
1591
1592          #include <simgrid/link.h>
1593
1594       .. doxygentypedef:: sg_link_t
1595       .. cpp:type:: const s4u_Link* const_sg_link_t
1596
1597          Pointer to a constant link object.
1598
1599 Retrieving links
1600 ----------------
1601
1602 .. tabs::
1603
1604    .. group-tab:: C++
1605
1606       See also :cpp:func:`simgrid::s4u::Engine::get_all_links`.
1607
1608       .. doxygenfunction:: simgrid::s4u::Link::by_name(const std::string &name)
1609       .. doxygenfunction:: simgrid::s4u::Link::by_name_or_null(const std::string &name)
1610
1611    .. group-tab:: Python
1612
1613       See also :py:attr:`simgrid.Engine.all_links`.
1614
1615       .. automethod:: simgrid.Link.by_name
1616       .. autoattribute:: simgrid.Link.name
1617
1618    .. group-tab:: C
1619
1620       .. doxygenfunction:: sg_link_by_name(const char *name)
1621       .. doxygenfunction:: sg_link_count()
1622       .. doxygenfunction:: sg_link_list()
1623
1624 Querying info
1625 --------------
1626
1627 .. tabs::
1628
1629    .. group-tab:: C++
1630
1631       .. doxygenfunction:: simgrid::s4u::Link::get_bandwidth() const
1632       .. doxygenfunction:: simgrid::s4u::Link::get_cname() const
1633       .. doxygenfunction:: simgrid::s4u::Link::get_latency() const
1634       .. doxygenfunction:: simgrid::s4u::Link::get_name() const
1635       .. doxygenfunction:: simgrid::s4u::Link::get_sharing_policy() const
1636       .. doxygenfunction:: simgrid::s4u::Link::get_concurrency_limit() const
1637       .. doxygenfunction:: simgrid::s4u::Link::get_usage() const
1638       .. doxygenfunction:: simgrid::s4u::Link::is_used() const
1639
1640    .. group-tab:: Python
1641
1642       .. autoattribute:: simgrid.Link.bandwidth
1643       .. autoattribute:: simgrid.Link.latency
1644
1645    .. group-tab:: C
1646
1647       .. doxygenfunction:: sg_link_get_bandwidth(const_sg_link_t link)
1648       .. doxygenfunction:: sg_link_get_latency(const_sg_link_t link)
1649       .. doxygenfunction:: sg_link_get_name(const_sg_link_t link)
1650       .. doxygenfunction:: sg_link_is_shared(const_sg_link_t link)
1651
1652 Modifying characteristics
1653 -------------------------
1654
1655 .. tabs::
1656
1657    .. group-tab:: C++
1658
1659       .. doxygenfunction:: simgrid::s4u::Link::set_bandwidth(double value)
1660       .. doxygenfunction:: simgrid::s4u::Link::set_latency(double value)
1661       .. doxygenfunction:: simgrid::s4u::Link::set_latency(const std::string& value)
1662       .. doxygenfunction:: simgrid::s4u::Link::set_concurrency_limit(int limit)
1663       .. doxygenfunction:: simgrid::s4u::Link::set_sharing_policy
1664
1665    .. group-tab:: Python
1666
1667       .. automethod:: simgrid.Link.set_bandwidth
1668       .. automethod:: simgrid.Link.set_latency
1669       .. automethod:: simgrid.Link.set_concurrency_limit
1670       .. automethod:: simgrid.Link.set_sharing_policy
1671
1672    .. group-tab:: C
1673
1674       .. doxygenfunction:: sg_link_set_bandwidth(sg_link_t link, double value)
1675       .. doxygenfunction:: sg_link_set_latency(sg_link_t link, double value)
1676
1677 User data and properties
1678 ------------------------
1679
1680 .. tabs::
1681
1682    .. group-tab:: C++
1683
1684       .. doxygenfunction:: simgrid::s4u::Link::get_property(const std::string &key) const
1685       .. doxygenfunction:: simgrid::s4u::Link::set_property(const std::string &key, const std::string &value)
1686
1687    .. group-tab:: C
1688
1689       .. doxygenfunction:: sg_link_get_data(const_sg_link_t link)
1690       .. doxygenfunction:: sg_link_set_data(sg_link_t link, void *data)
1691
1692 On/Off
1693 ------
1694
1695 .. tabs::
1696
1697    .. group-tab:: C++
1698
1699       See also :cpp:func:`simgrid::s4u::Link::set_state_profile`.
1700
1701       .. doxygenfunction:: simgrid::s4u::Link::is_on() const
1702       .. doxygenfunction:: simgrid::s4u::Link::turn_off()
1703       .. doxygenfunction:: simgrid::s4u::Link::turn_on()
1704
1705    .. group-tab:: Python
1706
1707       See also :py:func:`simgrid.Link.set_state_profile`.
1708
1709       .. automethod:: simgrid.Link.is_on
1710       .. automethod:: simgrid.Link.turn_off
1711       .. automethod:: simgrid.Link.turn_on
1712
1713 Dynamic profiles
1714 ----------------
1715
1716 See :ref:`howto_churn` for more details.
1717
1718 .. tabs::
1719
1720    .. group-tab:: C++
1721
1722       .. doxygenfunction:: simgrid::s4u::Link::set_bandwidth_profile(kernel::profile::Profile *profile)
1723       .. doxygenfunction:: simgrid::s4u::Link::set_latency_profile(kernel::profile::Profile *profile)
1724       .. doxygenfunction:: simgrid::s4u::Link::set_state_profile(kernel::profile::Profile *profile)
1725
1726    .. group-tab:: Python
1727
1728       .. automethod:: simgrid.Link.set_bandwidth_profile
1729       .. automethod:: simgrid.Link.set_latency_profile
1730       .. automethod:: simgrid.Link.set_state_profile
1731
1732 WIFI links
1733 ----------
1734
1735 .. tabs::
1736
1737    .. group-tab:: C++
1738
1739       .. doxygenfunction:: simgrid::s4u::Link::set_host_wifi_rate
1740
1741    .. group-tab:: Python
1742
1743       .. automethod:: simgrid.Link.set_host_wifi_rate
1744
1745 Signals
1746 -------
1747
1748 .. tabs::
1749
1750    .. group-tab:: C++
1751
1752       .. doxygenfunction:: simgrid::s4u::Link::on_bandwidth_change_cb
1753       .. doxygenfunction:: simgrid::s4u::Link::on_this_bandwidth_change_cb
1754       .. doxygenfunction:: simgrid::s4u::Link::on_communication_state_change_cb
1755       .. doxygenfunction:: simgrid::s4u::Link::on_creation_cb
1756       .. doxygenfunction:: simgrid::s4u::Link::on_destruction_cb
1757       .. doxygenfunction:: simgrid::s4u::Link::on_this_destruction_cb
1758       .. doxygenfunction:: simgrid::s4u::Link::on_onoff_cb
1759       .. doxygenfunction:: simgrid::s4u::Link::on_this_onoff_cb
1760
1761 .. _API_s4u_NetZone:
1762
1763 ================
1764 ⁣  class NetZone
1765 ================
1766
1767 .. tabs::
1768
1769    .. group-tab:: C++
1770
1771       .. doxygenclass:: simgrid::s4u::NetZone
1772
1773    .. group-tab:: Python
1774
1775       .. autoclass:: simgrid.NetZone
1776
1777 Basic management
1778 ----------------
1779
1780 .. tabs::
1781
1782    .. group-tab:: C++
1783
1784       .. code-block:: C++
1785
1786          #include <simgrid/s4u/NetZone.hpp>
1787
1788       Note that there is no NetZonePtr type and that you cannot use the RAII
1789       idiom on network zones because SimGrid does not allow (yet) to create nor
1790       destroy resources once the simulation is started.
1791
1792       .. doxygenfunction:: simgrid::s4u::NetZone::seal
1793
1794    .. group-tab:: Python
1795
1796       .. code:: Python
1797
1798          from simgrid import NetZone
1799
1800       .. automethod:: simgrid.NetZone.seal
1801
1802    .. group-tab:: C
1803
1804       .. code:: C
1805
1806          #include <simgrid/zone.h>
1807
1808       .. doxygentypedef:: sg_netzone_t
1809       .. cpp:type:: const s4u_NetZone* const_sg_netzone_t
1810
1811          Pointer to a constant network zone object.
1812
1813 Retrieving zones
1814 ----------------
1815
1816 .. tabs::
1817
1818    .. group-tab:: C++
1819
1820       See :cpp:func:`simgrid::s4u::Engine::get_netzone_root`,
1821       :cpp:func:`simgrid::s4u::Engine::netzone_by_name_or_null` and
1822       :cpp:func:`simgrid::s4u::Engine::get_filtered_netzones`.
1823
1824    .. group-tab:: C
1825
1826       .. doxygenfunction:: sg_zone_get_by_name(const char *name)
1827       .. doxygenfunction:: sg_zone_get_root()
1828
1829 Querying info
1830 --------------
1831
1832 .. tabs::
1833
1834    .. group-tab:: C++
1835
1836       .. doxygenfunction:: simgrid::s4u::NetZone::get_cname() const
1837       .. doxygenfunction:: simgrid::s4u::NetZone::get_name() const
1838       .. doxygenfunction:: simgrid::s4u::NetZone::get_netpoint()
1839
1840    .. group-tab:: Python
1841
1842       .. autoattribute:: simgrid.NetZone.name
1843       .. autoattribute:: simgrid.NetZone.netpoint
1844
1845    .. group-tab:: C
1846
1847       .. doxygenfunction:: sg_zone_get_name(const_sg_netzone_t zone)
1848
1849 User data and properties
1850 ------------------------
1851
1852 .. tabs::
1853
1854    .. group-tab:: C++
1855
1856       .. doxygenfunction:: simgrid::s4u::NetZone::get_properties() const
1857       .. doxygenfunction:: simgrid::s4u::NetZone::get_property(const std::string &key) const
1858       .. doxygenfunction:: simgrid::s4u::NetZone::set_property(const std::string &key, const std::string &value)
1859
1860    .. group-tab:: Python
1861
1862       .. automethod:: simgrid.NetZone.set_property
1863
1864    .. group-tab:: C
1865
1866       .. doxygenfunction:: sg_zone_get_property_value(const_sg_netzone_t as, const char *name)
1867       .. doxygenfunction:: sg_zone_set_property_value(sg_netzone_t netzone, const char *name, const char *value)
1868
1869 Retrieving components
1870 ---------------------
1871
1872 .. tabs::
1873
1874    .. group-tab:: C++
1875
1876       .. doxygenfunction:: simgrid::s4u::NetZone::get_all_hosts() const
1877       .. doxygenfunction:: simgrid::s4u::NetZone::get_host_count() const
1878
1879    .. group-tab:: C
1880
1881       .. doxygenfunction:: sg_zone_get_hosts(const_sg_netzone_t zone, xbt_dynar_t whereto)
1882
1883 Routing data
1884 ------------
1885
1886 .. tabs::
1887
1888    .. group-tab:: C++
1889
1890       .. doxygenfunction:: simgrid::s4u::NetZone::add_component(kernel::routing::NetPoint *elm)
1891       .. doxygenfunction:: simgrid::s4u::NetZone::add_route
1892       .. doxygenfunction:: simgrid::s4u::NetZone::add_bypass_route
1893       .. doxygenfunction:: simgrid::s4u::NetZone::get_children() const
1894       .. doxygenfunction:: simgrid::s4u::NetZone::get_parent() const
1895       .. doxygenfunction:: simgrid::s4u::NetZone::set_parent(const NetZone* parent)
1896
1897    .. group-tab:: Python
1898
1899       .. automethod:: simgrid.NetZone.add_route
1900       .. automethod:: simgrid.NetZone.set_parent
1901
1902    .. group-tab:: C
1903
1904       .. doxygenfunction:: sg_zone_get_sons(const_sg_netzone_t zone, xbt_dict_t whereto)
1905
1906 Signals
1907 -------
1908
1909 .. tabs::
1910
1911   .. group-tab:: C++
1912
1913      .. doxygenfunction:: simgrid::s4u::NetZone::on_creation_cb
1914      .. doxygenfunction:: simgrid::s4u::NetZone::on_seal_cb
1915
1916 Creating resources
1917 ------------------
1918
1919 Zones
1920 ^^^^^
1921 .. tabs::
1922
1923   .. group-tab:: C++
1924
1925      .. doxygenfunction:: simgrid::s4u::create_full_zone
1926      .. doxygenfunction:: simgrid::s4u::create_empty_zone
1927      .. doxygenfunction:: simgrid::s4u::create_star_zone
1928      .. doxygenfunction:: simgrid::s4u::create_dijkstra_zone
1929      .. doxygenfunction:: simgrid::s4u::create_floyd_zone
1930      .. doxygenfunction:: simgrid::s4u::create_vivaldi_zone
1931      .. doxygenfunction:: simgrid::s4u::create_wifi_zone
1932      .. doxygenfunction:: simgrid::s4u::create_torus_zone
1933      .. doxygenfunction:: simgrid::s4u::create_fatTree_zone
1934      .. doxygenfunction:: simgrid::s4u::create_dragonfly_zone
1935
1936   .. group-tab:: Python
1937
1938      .. automethod:: simgrid.NetZone.create_full_zone
1939      .. automethod:: simgrid.NetZone.create_empty_zone
1940      .. automethod:: simgrid.NetZone.create_star_zone
1941      .. automethod:: simgrid.NetZone.create_dijkstra_zone
1942      .. automethod:: simgrid.NetZone.create_floyd_zone
1943      .. automethod:: simgrid.NetZone.create_vivaldi_zone
1944      .. automethod:: simgrid.NetZone.create_wifi_zone
1945      .. automethod:: simgrid.NetZone.create_torus_zone
1946      .. automethod:: simgrid.NetZone.create_fatTree_zone
1947      .. automethod:: simgrid.NetZone.create_dragonfly_zone
1948
1949 Hosts
1950 ^^^^^
1951
1952 .. tabs::
1953
1954   .. group-tab:: C++
1955
1956      .. doxygenfunction:: simgrid::s4u::NetZone::create_host(const std::string& name, const std::vector<double>& speed_per_pstate)
1957      .. doxygenfunction:: simgrid::s4u::NetZone::create_host(const std::string& name, double speed)
1958      .. doxygenfunction:: simgrid::s4u::NetZone::create_host(const std::string& name, const std::vector<std::string>& speed_per_pstate)
1959      .. doxygenfunction:: simgrid::s4u::NetZone::create_host(const std::string& name, const std::string& speed)
1960
1961   .. group-tab:: Python
1962
1963      .. automethod:: simgrid.NetZone.create_host
1964
1965 Links
1966 ^^^^^
1967
1968 .. tabs::
1969
1970   .. group-tab:: C++
1971
1972      .. doxygenfunction:: simgrid::s4u::NetZone::create_link(const std::string& name, const std::vector<double>& bandwidths)
1973      .. doxygenfunction:: simgrid::s4u::NetZone::create_link(const std::string& name, double bandwidth)
1974      .. doxygenfunction:: simgrid::s4u::NetZone::create_link(const std::string& name, const std::vector<std::string>& bandwidthds)
1975      .. doxygenfunction:: simgrid::s4u::NetZone::create_link(const std::string& name, const std::string& bandwidth)
1976      .. doxygenfunction:: simgrid::s4u::NetZone::create_split_duplex_link(const std::string& name, const std::string& bandwidth)
1977      .. doxygenfunction:: simgrid::s4u::NetZone::create_split_duplex_link(const std::string& name, double bandwidth)
1978
1979   .. group-tab:: Python
1980
1981      .. automethod:: simgrid.NetZone.create_link
1982      .. automethod:: simgrid.NetZone.create_split_duplex_link
1983
1984 Router
1985 ^^^^^^
1986
1987 .. tabs::
1988
1989   .. group-tab:: C++
1990
1991      .. doxygenfunction:: simgrid::s4u::NetZone::create_router(const std::string& name)
1992
1993   .. group-tab:: Python
1994
1995      .. automethod:: simgrid.NetZone.create_router
1996
1997 .. _API_s4u_VirtualMachine:
1998
1999 =======================
2000 ⁣  class VirtualMachine
2001 =======================
2002
2003
2004 .. doxygenclass:: simgrid::s4u::VirtualMachine
2005
2006 Basic management
2007 ----------------
2008 .. tabs::
2009
2010    .. group-tab:: C++
2011
2012       .. code-block:: C++
2013
2014          #include <simgrid/s4u/VirtualMachine.hpp>
2015
2016       Note that there is no VirtualMachinePtr type, and that you cannot use the RAII
2017       idiom on virtual machines. There is no good reason for that and should change in the future.
2018
2019    .. group-tab:: C
2020
2021       .. code:: C
2022
2023          #include <simgrid/vm.h>
2024
2025       .. doxygentypedef:: sg_vm_t
2026       .. cpp:type:: const s4u_VirtualMachine* const_sg_vm_t
2027
2028          Pointer to a constant virtual machine object.
2029
2030 Creating VMs
2031 ------------
2032
2033 .. tabs::
2034
2035    .. group-tab:: C++
2036
2037       .. doxygenfunction:: simgrid::s4u::Host::create_vm(const std::string &name, int core_amount)
2038       .. doxygenfunction:: simgrid::s4u::Host::create_vm(const std::string &name, int core_amount, size_t ramsize)
2039       .. doxygenfunction:: simgrid::s4u::VirtualMachine::destroy
2040
2041    .. group-tab:: C
2042
2043       .. doxygenfunction:: sg_vm_create_core
2044       .. doxygenfunction:: sg_vm_create_multicore
2045       .. doxygenfunction:: sg_vm_destroy
2046
2047 Querying info
2048 --------------
2049
2050 .. tabs::
2051
2052    .. group-tab:: C++
2053
2054       .. doxygenfunction:: simgrid::s4u::VirtualMachine::get_pm() const
2055       .. doxygenfunction:: simgrid::s4u::VirtualMachine::get_ramsize() const
2056       .. doxygenfunction:: simgrid::s4u::VirtualMachine::get_state() const
2057
2058       .. doxygenfunction:: simgrid::s4u::VirtualMachine::set_bound(double bound)
2059       .. doxygenfunction:: simgrid::s4u::VirtualMachine::set_pm(Host *pm)
2060       .. doxygenfunction:: simgrid::s4u::VirtualMachine::set_ramsize(size_t ramsize)
2061
2062    .. group-tab:: C
2063
2064       .. doxygenfunction:: sg_vm_get_ramsize(const_sg_vm_t vm)
2065       .. doxygenfunction:: sg_vm_set_bound(sg_vm_t vm, double bound)
2066       .. doxygenfunction:: sg_vm_set_ramsize(sg_vm_t vm, size_t size)
2067
2068       .. doxygenfunction:: sg_vm_get_name
2069       .. doxygenfunction:: sg_vm_get_pm
2070       .. doxygenfunction:: sg_vm_is_created
2071       .. doxygenfunction:: sg_vm_is_running
2072       .. doxygenfunction:: sg_vm_is_suspended
2073
2074 Life cycle
2075 ----------
2076
2077 .. tabs::
2078
2079    .. group-tab:: C++
2080
2081       .. doxygenfunction:: simgrid::s4u::VirtualMachine::resume()
2082       .. doxygenfunction:: simgrid::s4u::VirtualMachine::shutdown()
2083       .. doxygenfunction:: simgrid::s4u::VirtualMachine::start()
2084       .. doxygenfunction:: simgrid::s4u::VirtualMachine::suspend()
2085
2086    .. group-tab:: C
2087
2088       .. doxygenfunction:: sg_vm_start
2089       .. doxygenfunction:: sg_vm_suspend
2090       .. doxygenfunction:: sg_vm_resume
2091       .. doxygenfunction:: sg_vm_shutdown
2092
2093 Signals
2094 -------
2095
2096 .. tabs::
2097
2098    .. group-tab:: C++
2099
2100       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_creation_cb
2101       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_destruction_cb
2102       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_this_destruction_cb
2103       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_migration_end_cb
2104       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_this_migration_end_cb
2105       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_migration_start_cb
2106       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_this_migration_start_cb
2107       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_resume_cb
2108       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_this_resume_cb
2109       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_shutdown_cb
2110       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_this_shutdown_cb
2111       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_start_cb
2112       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_this_start_cb
2113       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_started_cb
2114       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_this_started_cb
2115       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_suspend_cb
2116       .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_this_suspend_cb
2117
2118 .. _API_s4u_Activity:
2119
2120 ==========
2121 Activities
2122 ==========
2123
2124 ==============
2125 class Activity
2126 ==============
2127
2128 .. doxygenclass:: simgrid::s4u::Activity
2129
2130 **Known subclasses:**
2131 :ref:`Communications <API_s4u_Comm>` (started on Mailboxes and consuming links),
2132 :ref:`Executions <API_s4u_Exec>` (started on Host and consuming CPU resources)
2133 :ref:`I/O <API_s4u_Io>` (started on and consuming disks).
2134 See also the :ref:`section on activities <s4u_Activities>` above.
2135
2136 Basic management
2137 ----------------
2138
2139 .. tabs::
2140
2141    .. group-tab:: C++
2142
2143       .. code-block:: C++
2144
2145          #include <simgrid/s4u/Activity.hpp>
2146
2147       .. doxygentypedef:: ActivityPtr
2148
2149 Querying info
2150 -------------
2151
2152 .. tabs::
2153
2154    .. group-tab:: C++
2155
2156       .. doxygenfunction:: simgrid::s4u::Activity::get_cname() const
2157       .. doxygenfunction:: simgrid::s4u::Activity::get_name() const
2158       .. doxygenfunction:: simgrid::s4u::Activity::get_remaining() const
2159       .. doxygenfunction:: simgrid::s4u::Activity::get_state() const
2160       .. doxygenfunction:: simgrid::s4u::Activity::set_remaining(double remains)
2161       .. doxygenfunction:: simgrid::s4u::Activity::set_state(Activity::State state)
2162
2163
2164 Activities life cycle
2165 ---------------------
2166
2167 .. tabs::
2168
2169    .. group-tab:: C++
2170
2171       .. doxygenfunction:: simgrid::s4u::Activity::start
2172       .. doxygenfunction:: simgrid::s4u::Activity::cancel
2173       .. doxygenfunction:: simgrid::s4u::Activity::test
2174       .. doxygenfunction:: simgrid::s4u::Activity::wait
2175       .. doxygenfunction:: simgrid::s4u::Activity::wait_for
2176       .. doxygenfunction:: simgrid::s4u::Activity::wait_until(double time_limit)
2177       .. doxygenfunction:: simgrid::s4u::Activity::vetoable_start()
2178
2179 Suspending and resuming an activity
2180 -----------------------------------
2181
2182 .. tabs::
2183
2184    .. group-tab:: C++
2185
2186       .. doxygenfunction:: simgrid::s4u::Activity::suspend
2187       .. doxygenfunction:: simgrid::s4u::Activity::resume
2188       .. doxygenfunction:: simgrid::s4u::Activity::is_suspended
2189
2190 .. _API_s4u_Comm:
2191
2192 =============
2193 ⁣  class Comm
2194 =============
2195
2196 .. tabs::
2197
2198    .. group-tab:: C++
2199
2200       .. doxygenclass:: simgrid::s4u::Comm
2201
2202    .. group-tab:: Python
2203
2204       .. autoclass:: simgrid.Comm
2205
2206 Basic management
2207 ----------------
2208
2209 .. tabs::
2210
2211    .. group-tab:: C++
2212
2213       .. code-block:: C++
2214
2215          #include <simgrid/s4u/Comm.hpp>
2216
2217       .. doxygentypedef:: CommPtr
2218
2219    .. group-tab:: Python
2220
2221       .. code:: Python
2222
2223          from simgrid import Comm
2224
2225    .. group-tab:: c
2226
2227       .. code:: c
2228
2229          #include <simgrid/comm.h>
2230
2231       .. doxygentypedef:: sg_comm_t
2232
2233 Querying info
2234 -------------
2235
2236 .. tabs::
2237
2238    .. group-tab:: C++
2239
2240       .. doxygenfunction:: simgrid::s4u::Comm::get_dst_data_size() const
2241       .. doxygenfunction:: simgrid::s4u::Comm::get_mailbox() const
2242       .. doxygenfunction:: simgrid::s4u::Comm::get_sender() const
2243       .. doxygenfunction:: simgrid::s4u::Comm::set_dst_data(void **buff)
2244       .. doxygenfunction:: simgrid::s4u::Comm::set_dst_data(void **buff, size_t size)
2245       .. doxygenfunction:: simgrid::s4u::Comm::detach()
2246       .. doxygenfunction:: simgrid::s4u::Comm::detach(const std::function<void(void*)>& clean_function)
2247       .. doxygenfunction:: simgrid::s4u::Comm::set_payload_size(uint64_t bytes)
2248       .. doxygenfunction:: simgrid::s4u::Comm::set_rate(double rate)
2249       .. doxygenfunction:: simgrid::s4u::Comm::set_src_data(void *buff)
2250       .. doxygenfunction:: simgrid::s4u::Comm::set_src_data(void *buff, size_t size)
2251       .. doxygenfunction:: simgrid::s4u::Comm::set_src_data_size(size_t size)
2252
2253    .. group-tab:: Python
2254
2255       .. autoattribute:: simgrid.Comm.dst_data_size
2256       .. autoattribute:: simgrid.Comm.mailbox
2257       .. autoattribute:: simgrid.Comm.sender
2258       .. autoattribute:: simgrid.Comm.state_str
2259       .. automethod:: simgrid.Comm.detach
2260       .. automethod:: simgrid.Comm.set_payload_size
2261       .. automethod:: simgrid.Comm.set_rate
2262
2263 Direct host-to-host communication
2264 ---------------------------------
2265
2266 Most communications are created using :ref:`s4u_mailbox`, but you can
2267 also start direct communications as shown below. See also the
2268 :ref:`relevant examples <s4u_ex_comm_host2host>`.
2269
2270 .. tabs::
2271
2272    .. group-tab:: C++
2273
2274       .. doxygenfunction:: simgrid::s4u::Comm::sendto
2275       .. doxygenfunction:: simgrid::s4u::Comm::sendto_init()
2276       .. doxygenfunction:: simgrid::s4u::Comm::sendto_init(Host *from, Host *to)
2277       .. doxygenfunction:: simgrid::s4u::Comm::sendto_async
2278
2279    .. group-tab:: Python
2280
2281       .. automethod:: simgrid.Comm.sendto
2282       .. automethod:: simgrid.Comm.sendto_init
2283       .. automethod:: simgrid.Comm.sendto_async
2284
2285 Life cycle
2286 ----------
2287
2288 .. tabs::
2289
2290    .. group-tab:: C++
2291
2292       .. doxygenfunction:: simgrid::s4u::Comm::cancel
2293       .. doxygenfunction:: simgrid::s4u::Comm::start
2294       .. doxygenfunction:: simgrid::s4u::Comm::test
2295       .. doxygenfunction:: simgrid::s4u::Comm::test_any(const std::vector< CommPtr >& comms)
2296       .. doxygenfunction:: simgrid::s4u::Comm::wait
2297       .. doxygenfunction:: simgrid::s4u::Comm::wait_all(const std::vector< CommPtr >& comms)
2298       .. doxygenfunction:: simgrid::s4u::Comm::wait_all_for(const std::vector< CommPtr >& comms, double timeout)
2299       .. doxygenfunction:: simgrid::s4u::Comm::wait_any(const std::vector< CommPtr >& comms)
2300       .. doxygenfunction:: simgrid::s4u::Comm::wait_any_for(const std::vector< CommPtr >& comms, double timeout)
2301       .. doxygenfunction:: simgrid::s4u::Comm::wait_for
2302       .. doxygenfunction:: simgrid::s4u::Comm::wait_until
2303
2304    .. group-tab:: Python
2305
2306       .. automethod:: simgrid.Comm.cancel
2307       .. automethod:: simgrid.Comm.start
2308       .. automethod:: simgrid.Comm.test
2309       .. automethod:: simgrid.Comm.test_any
2310       .. automethod:: simgrid.Comm.wait
2311       .. automethod:: simgrid.Comm.wait_for
2312       .. automethod:: simgrid.Comm.wait_all
2313       .. automethod:: simgrid.Comm.wait_all_for
2314       .. automethod:: simgrid.Comm.wait_any
2315       .. automethod:: simgrid.Comm.wait_any_for
2316       .. automethod:: simgrid.Comm.wait_until
2317
2318    .. group-tab:: C
2319
2320       .. doxygenfunction:: sg_comm_test
2321       .. doxygenfunction:: sg_comm_wait
2322       .. doxygenfunction:: sg_comm_wait_all
2323       .. doxygenfunction:: sg_comm_wait_any
2324
2325 Suspending and resuming a communication
2326 ---------------------------------------
2327
2328 .. tabs::
2329
2330    .. group-tab:: C++
2331
2332       .. doxygenfunction:: simgrid::s4u::Comm::suspend
2333       .. doxygenfunction:: simgrid::s4u::Comm::resume
2334       .. doxygenfunction:: simgrid::s4u::Comm::is_suspended
2335
2336    .. group-tab:: Python
2337
2338       .. automethod:: simgrid.Comm.suspend
2339       .. automethod:: simgrid.Comm.resume
2340       .. autoattribute:: simgrid.Comm.is_suspended
2341
2342 Signals
2343 -------
2344
2345 .. tabs::
2346
2347    .. group-tab:: C++
2348
2349       .. doxygenfunction:: simgrid::s4u::Comm::on_start_cb
2350       .. doxygenfunction:: simgrid::s4u::Comm::on_this_start_cb
2351       .. doxygenfunction:: simgrid::s4u::Comm::on_completion_cb
2352       .. doxygenfunction:: simgrid::s4u::Comm::on_this_completion_cb
2353       .. doxygenfunction:: simgrid::s4u::Comm::on_recv_cb
2354       .. doxygenfunction:: simgrid::s4u::Comm::on_send_cb
2355       .. doxygenfunction:: simgrid::s4u::Comm::on_suspended_cb
2356       .. doxygenfunction:: simgrid::s4u::Comm::on_resumed_cb
2357       .. doxygenfunction:: simgrid::s4u::Comm::on_veto_cb
2358
2359 .. _API_s4u_Exec:
2360
2361 =============
2362 ⁣  class Exec
2363 =============
2364
2365 .. tabs::
2366
2367    .. group-tab:: C++
2368
2369       .. doxygenclass:: simgrid::s4u::Exec
2370
2371    .. group-tab:: Python
2372
2373       .. autoclass:: simgrid.Exec
2374
2375 Basic management
2376 ----------------
2377
2378 .. tabs::
2379
2380    .. group-tab:: C++
2381
2382       .. code-block:: C++
2383
2384          #include <simgrid/s4u/Exec.hpp>
2385
2386       .. doxygentypedef:: ExecPtr
2387
2388    .. group-tab:: Python
2389
2390       .. code:: Python
2391
2392          from simgrid import Exec
2393
2394    .. group-tab:: C
2395
2396       .. code-block:: C
2397
2398          #include <simgrid/exec.h>
2399
2400       .. doxygentypedef:: sg_exec_t
2401       .. doxygentypedef:: const_sg_exec_t
2402
2403 Querying info
2404 -------------
2405
2406 .. tabs::
2407
2408    .. group-tab:: C++
2409
2410       .. doxygenfunction:: simgrid::s4u::Exec::get_cost() const
2411       .. doxygenfunction:: simgrid::s4u::Exec::get_finish_time() const
2412       .. doxygenfunction:: simgrid::s4u::Exec::get_host() const
2413       .. doxygenfunction:: simgrid::s4u::Exec::get_host_number() const
2414       .. doxygenfunction:: simgrid::s4u::Exec::get_remaining
2415       .. doxygenfunction:: simgrid::s4u::Exec::get_remaining_ratio
2416       .. doxygenfunction:: simgrid::s4u::Exec::get_start_time() const
2417       .. doxygenfunction:: simgrid::s4u::Exec::set_bound(double bound)
2418       .. doxygenfunction:: simgrid::s4u::Exec::set_host
2419       .. doxygenfunction:: simgrid::s4u::Exec::set_priority(double priority)
2420
2421    .. group-tab:: Python
2422
2423       .. autoattribute:: simgrid.Exec.host
2424       .. autoattribute:: simgrid.Exec.remaining
2425       .. autoattribute:: simgrid.Exec.remaining_ratio
2426
2427    .. group-tab:: C
2428
2429       .. doxygenfunction:: sg_exec_set_bound(sg_exec_t exec, double bound)
2430       .. doxygenfunction:: sg_exec_get_name(const_sg_exec_t exec)
2431       .. doxygenfunction:: sg_exec_set_name(sg_exec_t exec, const char* name)
2432       .. doxygenfunction:: sg_exec_set_host(sg_exec_t exec, sg_host_t new_host)
2433       .. doxygenfunction:: sg_exec_get_remaining(const_sg_exec_t exec)
2434       .. doxygenfunction:: sg_exec_get_remaining_ratio(const_sg_exec_t exec)
2435
2436 Life cycle
2437 ----------
2438
2439 .. tabs::
2440
2441    .. group-tab:: C++
2442
2443       .. doxygenfunction:: simgrid::s4u::Exec::cancel
2444       .. doxygenfunction:: simgrid::s4u::Exec::start
2445       .. doxygenfunction:: simgrid::s4u::Exec::test
2446       .. doxygenfunction:: simgrid::s4u::Exec::wait
2447       .. doxygenfunction:: simgrid::s4u::Exec::wait_any(const std::vector< ExecPtr >& execs)
2448       .. doxygenfunction:: simgrid::s4u::Exec::wait_any_for(const std::vector< ExecPtr >& execs, double timeout)
2449       .. doxygenfunction:: simgrid::s4u::Exec::wait_for
2450
2451    .. group-tab:: Python
2452
2453        .. automethod:: simgrid.Exec.cancel
2454        .. automethod:: simgrid.Exec.start
2455        .. automethod:: simgrid.Exec.test
2456        .. automethod:: simgrid.Exec.wait
2457
2458    .. group-tab:: C
2459
2460        .. doxygenfunction:: sg_exec_start(sg_exec_t exec)
2461        .. doxygenfunction:: sg_exec_cancel(sg_exec_t exec);
2462        .. doxygenfunction:: sg_exec_test(sg_exec_t exec);
2463        .. doxygenfunction:: sg_exec_wait(sg_exec_t exec);
2464        .. doxygenfunction:: sg_exec_wait_for(sg_exec_t exec, double timeout);
2465        .. doxygenfunction:: sg_exec_wait_any_for(sg_exec_t* execs, size_t count, double timeout);
2466        .. doxygenfunction:: sg_exec_wait_any(sg_exec_t* execs, size_t count);
2467
2468 Suspending and resuming an execution
2469 ------------------------------------
2470
2471 .. tabs::
2472
2473    .. group-tab:: C++
2474
2475       .. doxygenfunction:: simgrid::s4u::Exec::suspend
2476       .. doxygenfunction:: simgrid::s4u::Exec::resume
2477       .. doxygenfunction:: simgrid::s4u::Exec::is_suspended
2478
2479    .. group-tab:: Python
2480
2481       .. automethod:: simgrid.Exec.suspend
2482       .. automethod:: simgrid.Exec.resume
2483       .. autoattribute:: simgrid.Exec.is_suspended
2484
2485 Signals
2486 -------
2487
2488 .. tabs::
2489
2490    .. group-tab:: C++
2491
2492       .. doxygenfunction:: simgrid::s4u::Exec::on_start_cb
2493       .. doxygenfunction:: simgrid::s4u::Exec::on_this_start_cb
2494       .. doxygenfunction:: simgrid::s4u::Exec::on_completion_cb
2495       .. doxygenfunction:: simgrid::s4u::Exec::on_this_completion_cb
2496
2497       .. doxygenfunction:: simgrid::s4u::Exec::on_suspended_cb
2498       .. doxygenfunction:: simgrid::s4u::Exec::on_resumed_cb
2499       .. doxygenfunction:: simgrid::s4u::Exec::on_veto_cb
2500
2501 .. _API_s4u_Io:
2502
2503 ===========
2504 ⁣  class Io
2505 ===========
2506
2507 .. tabs::
2508
2509    .. group-tab:: C++
2510
2511       .. doxygenclass:: simgrid::s4u::Io
2512
2513    .. group-tab:: Python
2514
2515       .. autoclass:: simgrid.Io
2516
2517 Basic management
2518 ----------------
2519
2520 .. tabs::
2521
2522    .. group-tab:: C++
2523
2524       .. code-block:: C++
2525
2526          #include <simgrid/s4u/Io.hpp>
2527
2528       .. doxygentypedef:: IoPtr
2529
2530 Querying info
2531 -------------
2532
2533 .. tabs::
2534
2535    .. group-tab:: C++
2536
2537       .. doxygenfunction:: simgrid::s4u::Io::get_performed_ioops() const
2538       .. doxygenfunction:: simgrid::s4u::Io::get_remaining
2539
2540 Life cycle
2541 ----------
2542
2543 .. tabs::
2544
2545    .. group-tab:: C++
2546
2547       .. doxygenfunction:: simgrid::s4u::Io::cancel
2548       .. doxygenfunction:: simgrid::s4u::Io::start
2549       .. doxygenfunction:: simgrid::s4u::Io::test
2550       .. doxygenfunction:: simgrid::s4u::Io::wait
2551       .. doxygenfunction:: simgrid::s4u::Io::wait_for
2552       .. doxygenfunction:: simgrid::s4u::Io::wait_any(const std::vector<IoPtr> &ios)
2553       .. doxygenfunction:: simgrid::s4u::Io::wait_any_for(const std::vector<IoPtr> &ios, double timeout)
2554
2555    .. group-tab:: Python
2556
2557       .. automethod:: simgrid.Io.test
2558       .. automethod:: simgrid.Io.wait
2559       .. automethod:: simgrid.Io.wait_any_for
2560       .. automethod:: simgrid.Io.wait_any
2561
2562 Signals
2563 -------
2564
2565 .. tabs::
2566
2567    .. group-tab:: C++
2568
2569       .. doxygenfunction:: simgrid::s4u::Io::on_start_cb
2570       .. doxygenfunction:: simgrid::s4u::Io::on_this_start_cb
2571       .. doxygenfunction:: simgrid::s4u::Io::on_completion_cb
2572       .. doxygenfunction:: simgrid::s4u::Io::on_this_completion_cb
2573
2574       .. doxygenfunction:: simgrid::s4u::Io::on_suspended_cb
2575       .. doxygenfunction:: simgrid::s4u::Io::on_resumed_cb
2576       .. doxygenfunction:: simgrid::s4u::Io::on_veto_cb
2577
2578
2579 .. _API_s4u_Tasks:
2580
2581 ==========
2582 Tasks
2583 ==========
2584
2585 ==============
2586 class Task
2587 ==============
2588
2589 .. doxygenclass:: simgrid::s4u::Task
2590
2591 **Known subclasses:**
2592 :ref:`Communication Tasks <API_s4u_CommTask>`,
2593 :ref:`Executions Tasks <API_s4u_ExecTask>`,
2594 :ref:`I/O Tasks <API_s4u_IoTask>`.
2595 See also the :ref:`section on activities <s4u_Tasks>` above.
2596
2597 Basic management
2598 ----------------
2599
2600 .. tabs::
2601
2602    .. group-tab:: C++
2603
2604       .. code-block:: C++
2605
2606          #include <simgrid/s4u/Task.hpp>
2607
2608       .. doxygentypedef:: TaskPtr
2609
2610 Querying info
2611 -------------
2612
2613 .. tabs::
2614
2615    .. group-tab:: C++
2616
2617       .. doxygenfunction:: simgrid::s4u::Task::get_cname() const
2618       .. doxygenfunction:: simgrid::s4u::Task::get_name() const
2619       .. doxygenfunction:: simgrid::s4u::Task::get_count() const
2620       .. doxygenfunction:: simgrid::s4u::Task::get_amount() const
2621       .. doxygenfunction:: simgrid::s4u::Task::get_parallelism_degree() const
2622       .. doxygenfunction:: simgrid::s4u::Task::set_name(std::string name)
2623       .. doxygenfunction:: simgrid::s4u::Task::set_amount(double amount)
2624       .. doxygenfunction:: simgrid::s4u::Task::set_parallelism_degree(int n)
2625
2626 Life cycle
2627 ----------
2628
2629 .. tabs::
2630
2631    .. group-tab:: C++
2632       .. doxygenfunction:: simgrid::s4u::Task::enqueue_firings(int n)
2633
2634 Managing Dependencies
2635 ---------------------
2636 .. tabs::
2637
2638    .. group-tab:: C++
2639       .. doxygenfunction:: simgrid::s4u::Task::add_successor(TaskPtr t)
2640       .. doxygenfunction:: simgrid::s4u::Task::remove_successor(TaskPtr t)
2641       .. doxygenfunction:: simgrid::s4u::Task::remove_all_successors()
2642       .. doxygenfunction:: simgrid::s4u::Task::get_successors() const
2643
2644 Managing Tokens
2645 ---------------
2646 .. doxygenclass:: simgrid::s4u::Token
2647
2648 .. tabs::
2649
2650    .. group-tab:: C++
2651       .. doxygenfunction:: simgrid::s4u::Task::get_next_token_from(TaskPtr t)
2652       .. doxygenfunction:: simgrid::s4u::Task::set_token(std::shared_ptr<Token> token)
2653
2654 Signals
2655 -------
2656
2657 .. tabs::
2658
2659    .. group-tab:: C++
2660       .. doxygenfunction:: simgrid::s4u::Task::on_start_cb
2661       .. doxygenfunction:: simgrid::s4u::Task::on_this_start_cb
2662       .. doxygenfunction:: simgrid::s4u::Task::on_completion_cb
2663       .. doxygenfunction:: simgrid::s4u::Task::on_this_completion_cb
2664
2665 .. _API_s4u_CommTask:
2666
2667 =================
2668 ⁣  class CommTask
2669 =================
2670 .. tabs::
2671
2672    .. group-tab:: C++
2673
2674       .. doxygenclass:: simgrid::s4u::CommTask
2675
2676 Basic management
2677 ----------------
2678
2679 .. tabs::
2680
2681    .. group-tab:: C++
2682
2683       .. code-block:: C++
2684
2685          #include <simgrid/s4u/Task.hpp>
2686
2687       .. doxygentypedef:: CommTaskPtr
2688
2689 Querying info
2690 -------------
2691
2692 .. tabs::
2693
2694    .. group-tab:: C++
2695
2696       .. doxygenfunction:: simgrid::s4u::CommTask::get_source() const
2697       .. doxygenfunction:: simgrid::s4u::CommTask::get_destination() const
2698       .. doxygenfunction:: simgrid::s4u::CommTask::get_bytes() const
2699       .. doxygenfunction:: simgrid::s4u::CommTask::set_source(Host* source);
2700       .. doxygenfunction:: simgrid::s4u::CommTask::set_destination(Host* destination);
2701       .. doxygenfunction:: simgrid::s4u::CommTask::set_bytes(double bytes)
2702
2703
2704 .. _API_s4u_ExecTask:
2705
2706 =================
2707 ⁣  class ExecTask
2708 =================
2709 .. tabs::
2710
2711    .. group-tab:: C++
2712
2713       .. doxygenclass:: simgrid::s4u::ExecTask
2714
2715 Basic management
2716 ----------------
2717
2718 .. tabs::
2719
2720    .. group-tab:: C++
2721
2722       .. code-block:: C++
2723
2724          #include <simgrid/s4u/Task.hpp>
2725
2726       .. doxygentypedef:: ExecTaskPtr
2727
2728 Querying info
2729 -------------
2730
2731 .. tabs::
2732
2733    .. group-tab:: C++
2734
2735       .. doxygenfunction:: simgrid::s4u::ExecTask::get_host() const
2736       .. doxygenfunction:: simgrid::s4u::ExecTask::get_flops() const
2737       .. doxygenfunction:: simgrid::s4u::ExecTask::set_host(Host* host);
2738       .. doxygenfunction:: simgrid::s4u::ExecTask::set_flops(double flops);
2739
2740 .. _API_s4u_IoTask:
2741
2742 ================
2743 ⁣  class IoTask
2744 ================
2745 .. tabs::
2746
2747    .. group-tab:: C++
2748
2749       .. doxygenclass:: simgrid::s4u::IoTask
2750
2751 Basic management
2752 ----------------
2753
2754 .. tabs::
2755
2756    .. group-tab:: C++
2757
2758       .. code-block:: C++
2759
2760          #include <simgrid/s4u/Task.hpp>
2761
2762       .. doxygentypedef:: IoTaskPtr
2763
2764 Querying info
2765 -------------
2766
2767 .. tabs::
2768
2769    .. group-tab:: C++
2770
2771      .. doxygenfunction:: simgrid::s4u::IoTask::get_disk() const
2772      .. doxygenfunction:: simgrid::s4u::IoTask::get_bytes() const
2773      .. doxygenfunction:: simgrid::s4u::IoTask::get_op_type() const
2774      .. doxygenfunction:: simgrid::s4u::IoTask::set_disk(Disk* disk);
2775      .. doxygenfunction:: simgrid::s4u::IoTask::set_bytes(double bytes);
2776      .. doxygenfunction:: simgrid::s4u::IoTask::set_op_type(Io::OpType type);
2777
2778 .. _API_s4u_Synchronizations:
2779
2780 =======================
2781 Synchronization Objects
2782 =======================
2783
2784 .. _API_s4u_Mutex:
2785
2786 ==============
2787 ⁣  Mutex
2788 ==============
2789
2790 .. tabs::
2791
2792    .. group-tab:: C++
2793
2794       .. doxygenclass:: simgrid::s4u::Mutex
2795
2796    .. group-tab:: Python
2797
2798       .. autoclass:: simgrid.Mutex
2799
2800 Basic management
2801 ----------------
2802
2803    .. tabs::
2804
2805       .. group-tab:: C++
2806
2807          .. code-block:: C++
2808
2809             #include <simgrid/s4u/Mutex.hpp>
2810
2811          .. doxygentypedef:: MutexPtr
2812
2813          .. doxygenfunction:: simgrid::s4u::Mutex::create()
2814
2815       .. group-tab:: Python
2816
2817          .. code-block:: Python
2818
2819             from simgrid import Mutex
2820             mutex = Mutex()
2821
2822             # Use a context manager to acquire and automatically release the mutex
2823             # when leaving the scope.
2824             with mutex:
2825                 # Access shared resource ...
2826                 pass
2827
2828          .. automethod:: simgrid.Mutex.__init__
2829
2830       .. group-tab:: C
2831
2832          .. code-block:: C
2833
2834             #include <simgrid/mutex.h>
2835
2836          .. doxygentypedef:: sg_mutex_t
2837          .. cpp:type:: const s4u_Mutex* const_sg_mutex_t
2838
2839             Pointer to a constant mutex object.
2840
2841          .. doxygenfunction:: sg_mutex_init()
2842          .. doxygenfunction:: sg_mutex_destroy(const_sg_mutex_t mutex)
2843
2844 Locking
2845 -------
2846
2847    .. tabs::
2848
2849       .. group-tab:: C++
2850
2851          .. doxygenfunction:: simgrid::s4u::Mutex::lock()
2852          .. doxygenfunction:: simgrid::s4u::Mutex::try_lock()
2853          .. doxygenfunction:: simgrid::s4u::Mutex::unlock()
2854
2855       .. group-tab:: Python
2856
2857          .. automethod:: simgrid.Mutex.lock
2858          .. automethod:: simgrid.Mutex.try_lock
2859          .. automethod:: simgrid.Mutex.unlock
2860
2861       .. group-tab:: C
2862
2863          .. doxygenfunction:: sg_mutex_lock(sg_mutex_t mutex)
2864          .. doxygenfunction:: sg_mutex_try_lock(sg_mutex_t mutex)
2865          .. doxygenfunction:: sg_mutex_unlock(sg_mutex_t mutex)
2866
2867 .. _API_s4u_Barrier:
2868
2869 ================
2870 ⁣  Barrier
2871 ================
2872
2873 .. tabs::
2874
2875    .. group-tab:: C++
2876
2877       .. doxygenclass:: simgrid::s4u::Barrier
2878
2879    .. group-tab:: Python
2880
2881       .. autoclass:: simgrid.Barrier
2882
2883 .. tabs::
2884
2885    .. group-tab:: C++
2886
2887       .. code-block:: C++
2888
2889          #include <simgrid/s4u/Barrier.hpp>
2890
2891       .. doxygentypedef:: BarrierPtr
2892
2893       .. doxygenfunction:: simgrid::s4u::Barrier::create(unsigned int expected_actors)
2894       .. doxygenfunction:: simgrid::s4u::Barrier::wait()
2895
2896    .. group-tab:: Python
2897
2898       .. code-block:: Python
2899
2900          from simgrid import Barrier
2901          barrier = Barrier(2)
2902
2903       .. automethod:: simgrid.Barrier.__init__
2904       .. automethod:: simgrid.Barrier.wait
2905
2906    .. group-tab:: C
2907
2908       .. code-block:: C
2909
2910          #include <simgrid/barrier.hpp>
2911
2912       .. doxygentypedef:: sg_bar_t
2913
2914       .. doxygenfunction:: sg_barrier_init(unsigned int count)
2915       .. doxygenfunction:: sg_barrier_destroy(sg_bar_t bar)
2916       .. doxygenfunction:: sg_barrier_wait(sg_bar_t bar)
2917
2918
2919 .. _API_s4u_ConditionVariable:
2920
2921 ==========================
2922 ⁣  Condition variable
2923 ==========================
2924
2925 .. doxygenclass:: simgrid::s4u::ConditionVariable
2926
2927 Basic management
2928 ----------------
2929
2930    .. tabs::
2931
2932       .. group-tab:: C++
2933
2934          .. code-block:: C++
2935
2936             #include <simgrid/s4u/ConditionVariable.hpp>
2937
2938          .. doxygentypedef:: ConditionVariablePtr
2939
2940          .. doxygenfunction:: simgrid::s4u::ConditionVariable::create()
2941
2942       .. group-tab:: C
2943
2944          .. code-block:: C
2945
2946             #include <simgrid/cond.h>
2947
2948          .. doxygentypedef:: sg_cond_t
2949          .. doxygentypedef:: const_sg_cond_t
2950          .. doxygenfunction:: sg_cond_init
2951          .. doxygenfunction:: sg_cond_destroy
2952
2953 Waiting and notifying
2954 ---------------------
2955
2956    .. tabs::
2957
2958       .. group-tab:: C++
2959
2960          .. doxygenfunction:: simgrid::s4u::ConditionVariable::notify_all()
2961          .. doxygenfunction:: simgrid::s4u::ConditionVariable::notify_one()
2962          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait(s4u::MutexPtr lock)
2963          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait(const std::unique_lock< s4u::Mutex > &lock)
2964          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait(const std::unique_lock< Mutex > &lock, P pred)
2965          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_for(const std::unique_lock< s4u::Mutex > &lock, double duration)
2966          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_for(const std::unique_lock< s4u::Mutex > &lock, double duration, P pred)
2967          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_for(const std::unique_lock< s4u::Mutex > &lock, std::chrono::duration< Rep, Period > duration)
2968          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_for(const std::unique_lock< s4u::Mutex > &lock, std::chrono::duration< Rep, Period > duration, P pred)
2969          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_until(const std::unique_lock< s4u::Mutex > &lock, const SimulationTimePoint< Duration > &timeout_time)
2970          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_until(const std::unique_lock< s4u::Mutex > &lock, const SimulationTimePoint< Duration > &timeout_time, P pred)
2971          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_until(const std::unique_lock< s4u::Mutex > &lock, double timeout_time)
2972          .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_until(const std::unique_lock< s4u::Mutex > &lock, double timeout_time, P pred)
2973
2974       .. group-tab:: C
2975
2976          .. doxygenfunction:: sg_cond_notify_all
2977          .. doxygenfunction:: sg_cond_notify_one
2978          .. doxygenfunction:: sg_cond_wait
2979          .. doxygenfunction:: sg_cond_wait_for
2980
2981 .. _API_s4u_Semaphore:
2982
2983 ==================
2984 ⁣  Semaphore
2985 ==================
2986
2987 .. tabs::
2988
2989    .. group-tab:: C++
2990
2991       .. doxygenclass:: simgrid::s4u::Semaphore
2992
2993    .. group-tab:: Python
2994
2995       .. autoclass:: simgrid.Semaphore
2996
2997 Basic management
2998 ----------------
2999
3000    .. tabs::
3001
3002       .. group-tab:: C++
3003
3004          .. code-block:: C++
3005
3006             #include <simgrid/s4u/Semaphore.hpp>
3007
3008          .. doxygentypedef:: SemaphorePtr
3009          .. doxygenfunction:: simgrid::s4u::Semaphore::create(unsigned int initial_capacity)
3010
3011       .. group-tab:: Python
3012
3013          .. code-block:: Python
3014
3015             from simgrid import Semaphore
3016             semaphore = Semaphore(1)
3017             # Automatically acquire the semaphore, and release it after leaving the scope.
3018             with semaphore:
3019                 # Do something with the shared resource
3020                 pass
3021
3022          .. automethod:: simgrid.Semaphore.__init__
3023
3024       .. group-tab:: C
3025
3026          .. code-block:: C
3027
3028             #include <simgrid/semaphore.h>
3029
3030          .. doxygentypedef:: sg_sem_t
3031          .. cpp:type:: const s4u_Semaphore* const_sg_sem_t
3032
3033             Pointer to a constant semaphore object.
3034
3035          .. doxygenfunction:: sg_sem_init(int initial_value)
3036          .. doxygenfunction:: sg_sem_destroy(const_sg_sem_t sem)
3037
3038 Locking
3039 -------
3040
3041    .. tabs::
3042
3043       .. group-tab:: C++
3044
3045          .. doxygenfunction:: simgrid::s4u::Semaphore::acquire()
3046          .. doxygenfunction:: simgrid::s4u::Semaphore::acquire_timeout(double timeout)
3047          .. doxygenfunction:: simgrid::s4u::Semaphore::get_capacity() const
3048          .. doxygenfunction:: simgrid::s4u::Semaphore::release()
3049          .. doxygenfunction:: simgrid::s4u::Semaphore::would_block() const
3050
3051       .. group-tab:: Python
3052
3053          .. automethod:: simgrid.Semaphore.acquire
3054          .. automethod:: simgrid.Semaphore.acquire_timeout
3055          .. autoattribute:: simgrid.Semaphore.capacity
3056          .. automethod:: simgrid.Semaphore.release
3057          .. autoattribute:: simgrid.Semaphore.would_block
3058
3059       .. group-tab:: C
3060
3061          .. doxygenfunction:: sg_sem_acquire(sg_sem_t sem)
3062          .. doxygenfunction:: sg_sem_acquire_timeout(sg_sem_t sem, double timeout)
3063          .. doxygenfunction:: sg_sem_get_capacity(const_sg_sem_t sem)
3064          .. doxygenfunction:: sg_sem_release(sg_sem_t sem)
3065          .. doxygenfunction:: sg_sem_would_block(const_sg_sem_t sem)
3066
3067 ===============
3068 Error reporting
3069 ===============
3070
3071 .. tabs::
3072
3073    .. group-tab:: C++
3074
3075       .. doxygenclass:: simgrid::Exception
3076
3077       The following exceptions denote a problem in the simulated platform, and it is often useful to catch them.
3078
3079       .. doxygenclass:: simgrid::CancelException
3080       .. doxygenclass:: simgrid::HostFailureException
3081       .. doxygenclass:: simgrid::NetworkFailureException
3082       .. doxygenclass:: simgrid::StorageFailureException
3083       .. doxygenclass:: simgrid::TimeoutException
3084       .. doxygenclass:: simgrid::VmFailureException
3085
3086       The following errors denote a problem in the SimGrid tool itself. Most of the time, you should let these
3087       exception go, so that the simulation stops. But you may want to catch them, for example when you launch
3088       SimGrid from a python notebook and want to handle the problem accordingly.
3089
3090       .. doxygenclass:: simgrid::AssertionError
3091       .. doxygenclass:: simgrid::ParseError
3092       .. doxygenclass:: simgrid::TracingError
3093
3094    .. group-tab:: Python
3095
3096       The following exceptions denote a problem in the simulated platform, and it is often useful to catch them.
3097
3098       .. autoclass:: simgrid.CancelException
3099       .. autoclass:: simgrid.HostFailureException
3100       .. autoclass:: simgrid.NetworkFailureException
3101       .. autoclass:: simgrid.StorageFailureException
3102       .. autoclass:: simgrid.TimeoutException
3103       .. autoclass:: simgrid.VmFailureException
3104
3105       The following errors denote a problem in the SimGrid tool itself. Most of the time, you should let these
3106       exception go, so that the simulation stops. But you may want to catch them, for example when you launch
3107       SimGrid from a python notebook and want to handle the problem accordingly.
3108
3109       .. autoclass:: simgrid.AssertionError
3110
3111    .. group-tab:: C
3112
3113       .. doxygenenum:: sg_error_t
3114
3115
3116 .. |hr| raw:: html
3117
3118    <hr />