Actors: the Active Entities
===========================
-Starting and Stoping Actors
+Starting and Stopping Actors
---------------------------
- **Creating actors:**
Most actors are started from the deployment XML file, because this
- is a :ref:`better scientific habbit <howto_science>`, but you can
+ is a :ref:`better scientific habit <howto_science>`, but you can
also create them directly from your code.
.. tabs::
See also :cpp:func:`sg_actor_kill`, :cpp:func:`sg_actor_kill_all`, :cpp:func:`sg_actor_exit`, :cpp:func:`sg_actor_on_exit`.
- - **Controling the actor life cycle from the XML:**
+ - **Controlling the actor life cycle from the XML:**
You can specify a start time and a kill time in the deployment file.
.. tabs::
This demonstrates the ``start_time`` and ``kill_time`` attribute of the :ref:`pf_tag_actor` tag.
+ .. example-tab:: examples/python/actor-lifetime/actor-lifetime.py
+
+ This file is not really interesting: the important matter is in the XML file.
+
+ .. example-tab:: examples/c/actor-lifetime/actor-lifetime.c
+
+ This file is not really interesting: the important matter is in the XML file.
+
- **Daemonize actors:**
Some actors may be intended to simulate daemons that run in background. This example show how to transform a regular
actor into a daemon that will be automatically killed once the simulation is over.
See also :cpp:func:`sg_actor_daemonize` and :cpp:func:`sg_actor_is_daemon`.
+ - **Specify the stack size to use**
+ The stack size can be specified by default on the command line,
+ globally by changing the configuration with :cpp:func:`simgrid::s4u::Engine::set_config(std::string)`,
+ or for a specific actor using :cpp:func:`simgrid::s4u::Actor::set_stacksize` before its start.
+
+ .. tabs::
+
+ .. example-tab:: examples/s4u/actor-stacksize/s4u-actor-stacksize.cpp
+
+ .. example-tab:: examples/c/actor-stacksize/actor-stacksize.c
+
Inter-Actors Interactions
-------------------------
.. tabs::
- .. example-tab:: examples/s4u/async-wait/s4u-async-wait.cpp
+ .. example-tab:: examples/s4u/comm-wait/s4u-comm-wait.cpp
See also :cpp:func:`simgrid::s4u::Mailbox::put_async()` and :cpp:func:`simgrid::s4u::Comm::wait()`.
- .. example-tab:: examples/python/async-wait/async-wait.py
+ .. example-tab:: examples/python/comm-wait/comm-wait.py
See also :py:func:`simgrid.Mailbox.put_async()` and :py:func:`simgrid.Comm.wait()`.
+ .. example-tab:: examples/c/comm-wait/comm-wait.c
+
+ See also :cpp:func:`sg_mailbox_put_async()` and :cpp:func:`sg_comm__wait()`.
+
+ - **Suspending communications:**
+ The ``suspend()`` and ``resume()`` functions allow to block the
+ progression of a given communication for a while and then unblock it.
+ ``is_suspended()`` can be used to retrieve whether the activity is
+ currently blocked or not.
+
+ .. tabs::
+
+ .. example-tab:: examples/s4u/comm-suspend/s4u-comm-suspend.cpp
+
+ See also :cpp:func:`simgrid::s4u::Activity::suspend()`
+ :cpp:func:`simgrid::s4u::Activity::resume()` and
+ :cpp:func:`simgrid::s4u::Activity::is_suspended()`.
+
+
- **Waiting for all communications in a set:**
The ``wait_all()`` function is useful when you want to block until
all activities in a given set have completed.
.. tabs::
- .. example-tab:: examples/s4u/async-waitall/s4u-async-waitall.cpp
+ .. example-tab:: examples/s4u/comm-waitall/s4u-comm-waitall.cpp
See also :cpp:func:`simgrid::s4u::Comm::wait_all()`.
- .. example-tab:: examples/python/async-waitall/async-waitall.py
+ .. example-tab:: examples/python/comm-waitall/comm-waitall.py
See also :py:func:`simgrid.Comm.wait_all()`.
+ .. example-tab:: examples/c/comm-waitall/comm-waitall.c
+
+ See also :cpp:func:`sg_comm_wait_all()`.
+
- **Waiting for the first completed communication in a set:**
The ``wait_any()`` function is useful
when you want to block until one activity of the set completes, no
.. tabs::
- .. example-tab:: examples/s4u/async-waitany/s4u-async-waitany.cpp
+ .. example-tab:: examples/s4u/comm-waitany/s4u-comm-waitany.cpp
See also :cpp:func:`simgrid::s4u::Comm::wait_any()`.
- .. example-tab:: examples/python/async-waitany/async-waitany.py
+ .. example-tab:: examples/python/comm-waitany/comm-waitany.py
See also :py:func:`simgrid.Comm.wait_any()`.
- .. example-tab:: examples/c/async-waitany/async-waitany.c
+ .. example-tab:: examples/c/comm-waitany/comm-waitany.c
See also :cpp:func:`sg_comm_wait_any`.
See also :py:func:`simgrid.this_actor.execute()`.
+ .. example-tab:: examples/c/exec-basic/exec-basic.c
+
+ See also :cpp:func:`void sg_actor_execute(double)`
+ and :cpp:func:`void sg_actor_execute_with_priority(double, double)`.
+
- **Asynchronous execution:**
You can start asynchronous executions, just like you would fire
background threads.
:py:func:`simgrid.Exec.get_remaining_ratio()`,
:py:func:`simgrid.this_actor.exec_async()` and
:py:func:`simgrid.Activity.cancel()`.
-
+
+ .. example-tab:: examples/c/exec-async/exec-async.c
+
+ See also :cpp:func:`sg_actor_exec_init()`,
+ :cpp:func:`sg_exec_start()`,
+ :cpp:func:`sg_exec_wait()`,
+ :cpp:func:`sg_exec_get_remaining()`,
+ :cpp:func:`sg_exec_get_remaining_ratio()`,
+ :cpp:func:`sg_actor_exec_async()` and
+ :cpp:func:`sg_exec_cancel()`,
+
- **Remote execution:**
You can start executions on remote hosts, or even change the host
on which they occur during their execution.
See also :py:func:`simgrid.Exec.set_host()`.
+ .. example-tab:: examples/c/exec-remote/exec-remote.c
+
+ See also :cpp:func:`sg_exec_set_host()`.
+
- **Parallel executions:**
These objects are convenient abstractions of parallel
computational kernels that span over several machines, such as a
See also :cpp:func:`simgrid::s4u::Host::get_pstate_speed` and :cpp:func:`simgrid::s4u::Host::set_pstate`.
+ .. example-tab:: examples/c/exec-dvfs/exec-dvfs.c
+
+ See also :cpp:func:`sg_host_get_pstate_speed` and :cpp:func:`sg_host_set_pstate`.
+
.. example-tab:: examples/python/exec-dvfs/exec-dvfs.py
See also :py:func:`Host.get_pstate_speed` and :py:func:`Host.set_pstate`.
.. example-tab:: examples/s4u/io-file-remote/s4u-io-file-remote.cpp
+ .. example-tab:: examples/c/io-file-remote/io-file-remote.c
+
.. _s4u_ex_IPC:
Classical synchronization objects
- :cpp:func:`simgrid::s4u::Link::get_property()` and :cpp:func:`simgrid::s4u::Link::set_property()`
- :cpp:func:`simgrid::s4u::NetZone::get_property()` and :cpp:func:`simgrid::s4u::NetZone::set_property()`
+ .. example-tab:: examples/c/platform-properties/platform-properties.c
+
+ - :cpp:func:`sg_actor_get_property()` and :cpp:func:`sg_actor_set_property()`
+ - :cpp:func:`sg_host_get_property()` and :cpp:func:sg_host_set_property()`
+ - :cpp:func:`sg_link_get_property()` and :cpp:func:`sg_link_set_property()`
+ - :cpp:func:`sg_link_get_property()` and :cpp:func:`sg_link_set_property()`
+
.. group-tab:: XML
**Deployment file:**
.. example-tab:: examples/s4u/platform-failures/s4u-platform-failures.cpp
+ .. example-tab:: examples/c/platform-failures/platform-failures.c
+
.. group-tab:: XML
.. showfile:: examples/platforms/small_platform_failures.xml
- **Platform Tracing:**
This program is a toy example just loading the platform, so that
- you can play with the platform visualization. Recommanded options:
+ you can play with the platform visualization. Recommended options:
``--cfg=tracing:yes --cfg=tracing/categorized:yes``
.. tabs::
.. showfile:: examples/s4u/app-masterworkers/s4u-app-masterworkers-fun.cpp
:language: cpp
+
+ .. group-tab:: C
+
+ .. showfile:: examples/c/app-masterworker/app-masterworker.c
+ :language: cpp
Data diffusion
--------------
.. showfile:: examples/s4u/app-bittorrent/s4u-tracker.cpp
:language: cpp
+ .. group-tab:: C
+
+ .. showfile:: examples/c/app-bittorrent/app-bittorrent.c
+ :language: cpp
+
+ .. showfile:: examples/c/app-bittorrent/bittorrent-peer.c
+ :language: cpp
+
+ .. showfile:: examples/c/app-bittorrent/tracker.c
+ :language: cpp
+
- **Chained Send:**
Data broadcast over a ring of processes.
.. example-tab:: examples/s4u/app-chainsend/s4u-app-chainsend.cpp
+ .. group-tab:: C
+
+ .. showfile:: examples/c/app-chainsend/chainsend.c
+ :language: c
+
+ .. showfile:: examples/c/app-chainsend/broadcaster.c
+ :language: c
+
+ .. showfile:: examples/c/app-chainsend/peer.c
+ :language: c
+
Distributed Hash Tables (DHT)
-----------------------------
.. showfile:: examples/s4u/dht-kademlia/node.cpp
:language: cpp
+ .. group-tab:: C
+
+ .. showfile:: examples/c/dht-kademlia/dht-kademlia.c
+ :language: cpp
+
+ .. showfile:: examples/c/dht-kademlia/routing_table.c
+ :language: cpp
+
+ .. showfile:: examples/c/dht-kademlia/answer.c
+ :language: cpp
+
+ .. showfile:: examples/c/dht-kademlia/message.c
+ :language: cpp
+
+ .. showfile:: examples/c/dht-kademlia/node.c
+ :language: cpp
+
.. _s4u_ex_clouds:
Simulating Clouds
.. example-tab:: examples/s4u/cloud-simple/s4u-cloud-simple.cpp
+ .. example-tab:: examples/c/cloud-simple/cloud-simple.c
+
- **Migrating VMs**
This example shows how to migrate VMs between PMs.
.. example-tab:: examples/s4u/cloud-migration/s4u-cloud-migration.cpp
+ .. example-tab:: examples/c/cloud-migration/cloud-migration.c
+
+=======================
+Model-Related Examples
+=======================
+
+ - **ns-3 as a SimGrid Network Model**
+ This simple ping-pong example demonstrates how to use the bindings to the Network
+ Simulator. The most interesting is probably not the C++ files since
+ they are unchanged from the other simulations, but the associated files,
+ such as the platform file to see how to declare a platform to be used
+ with the ns-3 bindings of SimGrid and the tesh file to see how to actually
+ start a simulation in these settings.
+
+ .. tabs::
+
+ .. example-tab:: examples/s4u/network-ns3/s4u-network-ns3.cpp
+
+ .. group-tab:: XML
+
+ **Platform files:**
+
+ .. showfile:: examples/platforms/small_platform_one_link_routes.xml
+ :language: xml
+
=======================
Model-Checking Examples
=======================