Logo AND Algorithmique Numérique Distribuée

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