Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Making MSG fade away (part 1)
[simgrid.git] / src / msg / msg_host.cpp
1 /* Copyright (c) 2004-2017. The SimGrid Team. All rights reserved.          */
2
3 /* This program is free software; you can redistribute it and/or modify it
4  * under the terms of the license (GNU LGPL) which comes with this package. */
5
6 #include "simgrid/s4u/Host.hpp"
7 #include "simgrid/s4u/Storage.hpp"
8 #include "src/msg/msg_private.hpp"
9 #include "src/simix/ActorImpl.hpp"
10 #include "src/simix/smx_host_private.hpp"
11
12 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(msg);
13
14 extern "C" {
15
16 /** @addtogroup m_host_management
17  * (#msg_host_t) and the functions for managing it.
18  *
19  *  A <em>location</em> (or <em>host</em>) is any possible place where  a process may run. Thus it may be represented
20  *  as a <em>physical resource with computing capabilities</em>, some <em>mailboxes</em> to enable running process to
21  *  communicate with remote ones, and some <em>private data</em> that can be only accessed by local process.
22  *  \see msg_host_t
23  */
24
25 /********************************* Host **************************************/
26 /** \ingroup m_host_management
27  *
28  * \brief Set the user data of a #msg_host_t.
29  *
30  * This functions attach \a data to \a host if it is possible.
31  */
32 msg_error_t MSG_host_set_data(msg_host_t host, void *data) {
33   sg_host_user_set(host, data);
34   return MSG_OK;
35 }
36
37 /** \ingroup m_host_management
38  *
39  * \brief Return the user data of a #msg_host_t.
40  *
41  * This functions returns the user data associated to \a host if it is possible.
42  */
43 void *MSG_host_get_data(msg_host_t host) {
44   return sg_host_user(host);
45 }
46
47 /** \ingroup m_host_management
48  *
49  * \brief Start the host if it is off
50  *
51  * See also #MSG_host_is_on() and #MSG_host_is_off() to test the current state of the host and @ref plugin_energy
52  * for more info on DVFS.
53  */
54 void MSG_host_on(msg_host_t host)
55 {
56   host->turnOn();
57 }
58
59 /** \ingroup m_host_management
60  *
61  * \brief Stop the host if it is on
62  *
63  * See also #MSG_host_is_on() and #MSG_host_is_off() to test the current state of the host and @ref plugin_energy
64  * for more info on DVFS.
65  */
66 void MSG_host_off(msg_host_t host)
67 {
68   host->turnOff();
69 }
70
71
72 /** \ingroup m_host_management
73  * \brief Return the number of cores.
74  *
75  * \param host a host
76  * \return the number of cores
77  */
78 int MSG_host_get_core_number(msg_host_t host) {
79   return host->getCoreCount();
80 }
81
82 /** \ingroup m_host_management
83  * \brief Return the list of processes attached to an host.
84  *
85  * \param host a host
86  * \param whereto a dynar in which we should push processes living on that host
87  */
88 void MSG_host_get_process_list(msg_host_t host, xbt_dynar_t whereto)
89 {
90   xbt_assert((host != nullptr), "Invalid parameters");
91   for (auto& actor : host->extension<simgrid::simix::Host>()->process_list) {
92     msg_process_t p = actor.ciface();
93     xbt_dynar_push(whereto, &p);
94   }
95 }
96
97 /** @ingroup m_host_management
98  * @brief Determine if a host is up and running.
99  *
100  * See also #MSG_host_on() and #MSG_host_off() to switch the host ON and OFF and @ref plugin_energy for more info on
101  * DVFS.
102  *
103  * @param host host to test
104  * @return Returns true if the host is up and running, and false if it's currently down
105  */
106 int MSG_host_is_on(msg_host_t host)
107 {
108   return host->isOn();
109 }
110
111 /** @ingroup m_host_management
112  * @brief Determine if a host is currently off.
113  *
114  * See also #MSG_host_on() and #MSG_host_off() to switch the host ON and OFF and @ref plugin_energy for more info on
115  * DVFS.
116  */
117 int MSG_host_is_off(msg_host_t host)
118 {
119   return host->isOff();
120 }
121
122 /** \ingroup m_host_management
123  * \brief Return the speed of the processor (in flop/s) at a given pstate. See also @ref plugin_energy.
124  *
125  * \param  host host to test
126  * \param pstate_index pstate to test
127  * \return Returns the processor speed associated with pstate_index
128  */
129 double MSG_host_get_power_peak_at(msg_host_t host, int pstate_index) {
130   xbt_assert((host != nullptr), "Invalid parameters (host is nullptr)");
131   return host->getPstateSpeed(pstate_index);
132 }
133
134
135
136 }