A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Automatic refcounting on the src and dst actors of a comm
[simgrid.git]
/
src
/
s4u
/
s4u_Host.cpp
diff --git
a/src/s4u/s4u_Host.cpp
b/src/s4u/s4u_Host.cpp
index
54ecde3
..
24163be
100644
(file)
--- a/
src/s4u/s4u_Host.cpp
+++ b/
src/s4u/s4u_Host.cpp
@@
-1,11
+1,12
@@
-/* Copyright (c) 2006-201
8
. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2006-201
9
. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
#include "simgrid/kernel/routing/NetPoint.hpp"
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
#include "simgrid/kernel/routing/NetPoint.hpp"
+#include "simgrid/s4u/Actor.hpp"
#include "simgrid/s4u/Engine.hpp"
#include "simgrid/s4u/Engine.hpp"
-#include "s
rc/simix/smx_host_private
.hpp"
+#include "s
imgrid/s4u/Exec
.hpp"
#include "src/surf/HostImpl.hpp"
#include <string>
#include "src/surf/HostImpl.hpp"
#include <string>
@@
-28,9
+29,9
@@
simgrid::xbt::signal<void(Host&)> Host::on_destruction;
simgrid::xbt::signal<void(Host&)> Host::on_state_change;
simgrid::xbt::signal<void(Host&)> Host::on_speed_change;
simgrid::xbt::signal<void(Host&)> Host::on_state_change;
simgrid::xbt::signal<void(Host&)> Host::on_speed_change;
-Host::Host(
const char*
name) : name_(name)
+Host::Host(
std::string
name) : name_(name)
{
{
- xbt_assert(Host::by_name_or_null(name) == nullptr, "Refusing to create a second host named '%s'.", name);
+ xbt_assert(Host::by_name_or_null(name) == nullptr, "Refusing to create a second host named '%s'.", name
.c_str()
);
Engine::get_instance()->host_register(std::string(name_), this);
new simgrid::surf::HostImpl(this);
}
Engine::get_instance()->host_register(std::string(name_), this);
new simgrid::surf::HostImpl(this);
}
@@
-48,7
+49,7
@@
Host::~Host()
/** @brief Fire the required callbacks and destroy the object
*
/** @brief Fire the required callbacks and destroy the object
*
- * Don't delete directly a
n H
ost, call h->destroy() instead.
+ * Don't delete directly a
h
ost, call h->destroy() instead.
*
* This is cumbersome but this is the simplest solution to ensure that the
* onDestruction() callback receives a valid object (because of the destructor
*
* This is cumbersome but this is the simplest solution to ensure that the
* onDestruction() callback receives a valid object (because of the destructor
@@
-68,14
+69,6
@@
Host* Host::by_name(std::string name)
{
return Engine::get_instance()->host_by_name(name);
}
{
return Engine::get_instance()->host_by_name(name);
}
-Host* Host::by_name(const char* name)
-{
- return Engine::get_instance()->host_by_name(std::string(name));
-}
-Host* Host::by_name_or_null(const char* name)
-{
- return Engine::get_instance()->host_by_name_or_null(std::string(name));
-}
Host* Host::by_name_or_null(std::string name)
{
return Engine::get_instance()->host_by_name_or_null(name);
Host* Host::by_name_or_null(std::string name)
{
return Engine::get_instance()->host_by_name_or_null(name);
@@
-93,8
+86,8
@@
void Host::turn_on()
{
if (is_off()) {
simgrid::simix::simcall([this] {
{
if (is_off()) {
simgrid::simix::simcall([this] {
- this->pimpl_->turn_on();
this->pimpl_cpu->turn_on();
this->pimpl_cpu->turn_on();
+ this->pimpl_->turn_on();
on_state_change(*this);
});
}
on_state_change(*this);
});
}
@@
-124,7
+117,7
@@
int Host::get_pstate_count() const
}
/**
}
/**
- *
\
brief Return a copy of the list of actors that are executing on this host.
+ *
@
brief Return a copy of the list of actors that are executing on this host.
*
* Daemons and regular actors are all mixed in this list.
*/
*
* Daemons and regular actors are all mixed in this list.
*/
@@
-156,13
+149,13
@@
void Host::actorList(std::vector<ActorPtr>* whereto)
}
/**
}
/**
- *
\
brief Find a route toward another host
+ *
@
brief Find a route toward another host
*
*
- *
\
param dest [IN] where to
- *
\
param links [OUT] where to store the list of links (must exist, cannot be nullptr).
- *
\
param latency [OUT] where to store the latency experienced on the path (or nullptr if not interested)
+ *
@
param dest [IN] where to
+ *
@
param links [OUT] where to store the list of links (must exist, cannot be nullptr).
+ *
@
param latency [OUT] where to store the latency experienced on the path (or nullptr if not interested)
* It is the caller responsibility to initialize latency to 0 (we add to provided route)
* It is the caller responsibility to initialize latency to 0 (we add to provided route)
- *
\
pre links!=nullptr
+ *
@
pre links!=nullptr
*
* walk through the routing components tree and find a route between hosts
* by calling each "get_route" function in each routing component.
*
* walk through the routing components tree and find a route between hosts
* by calling each "get_route" function in each routing component.
@@
-194,7
+187,7
@@
std::unordered_map<std::string, std::string>* Host::get_properties()
}
/** Retrieve the property value (or nullptr if not set) */
}
/** Retrieve the property value (or nullptr if not set) */
-const char* Host::get_property(
const char*
key) const
+const char* Host::get_property(
std::string
key) const
{
return this->pimpl_->get_property(key);
}
{
return this->pimpl_->get_property(key);
}
@@
-230,7
+223,9
@@
double Host::get_speed() const
return this->pimpl_cpu->get_speed(1.0);
}
/** @brief Returns the current computation load (in flops per second)
return this->pimpl_cpu->get_speed(1.0);
}
/** @brief Returns the current computation load (in flops per second)
+ *
* The external load (coming from an availability trace) is not taken in account.
* The external load (coming from an availability trace) is not taken in account.
+ * You may also be interested in the load plugin.
*/
double Host::get_load() const
{
*/
double Host::get_load() const
{
@@
-263,9
+258,9
@@
int Host::get_pstate() const
}
/**
}
/**
- *
\
ingroup simix_storage_management
- *
\brief Returns the list of storages attached to an
host.
- *
\
return a vector containing all storages attached to the host
+ *
@
ingroup simix_storage_management
+ *
@brief Returns the list of storages attached to a
host.
+ *
@
return a vector containing all storages attached to the host
*/
std::vector<const char*> Host::get_attached_storages() const
{
*/
std::vector<const char*> Host::get_attached_storages() const
{
@@
-291,14
+286,18
@@
std::unordered_map<std::string, Storage*> const& Host::get_mounted_storages()
return *mounts_;
}
return *mounts_;
}
+ExecPtr Host::exec_async(double flops)
+{
+ return this_actor::exec_init(flops)->set_host(this);
+}
+
void Host::execute(double flops)
{
execute(flops, 1.0 /* priority */);
}
void Host::execute(double flops, double priority)
{
void Host::execute(double flops)
{
execute(flops, 1.0 /* priority */);
}
void Host::execute(double flops, double priority)
{
- smx_activity_t s = simcall_execution_start(nullptr, flops, 1 / priority /*priority*/, 0. /*bound*/, this);
- simcall_execution_wait(s);
+ this_actor::exec_init(flops)->set_host(this)->set_priority(1 / priority)->start()->wait();
}
} // namespace s4u
}
} // namespace s4u
@@
-313,11
+312,11
@@
size_t sg_host_count()
*
* Uses sg_host_count() to know the array size.
*
*
* Uses sg_host_count() to know the array size.
*
- *
\return an array of \
ref sg_host_t containing all the hosts in the platform.
- *
\
remark The host order in this array is generally different from the
+ *
@return an array of @
ref sg_host_t containing all the hosts in the platform.
+ *
@
remark The host order in this array is generally different from the
* creation/declaration order in the XML platform (we use a hash table
* internally).
* creation/declaration order in the XML platform (we use a hash table
* internally).
- *
\
see sg_host_count()
+ *
@
see sg_host_count()
*/
sg_host_t* sg_host_list()
{
*/
sg_host_t* sg_host_list()
{
@@
-417,22
+416,22
@@
double sg_host_speed(sg_host_t host)
return host->get_speed();
}
return host->get_speed();
}
-/**
\
brief Return the speed of the processor (in flop/s) at a given pstate. See also @ref plugin_energy.
+/**
@
brief Return the speed of the processor (in flop/s) at a given pstate. See also @ref plugin_energy.
*
*
- *
\
param host host to test
- *
\
param pstate_index pstate to test
- *
\
return Returns the processor speed associated with pstate_index
+ *
@
param host host to test
+ *
@
param pstate_index pstate to test
+ *
@
return Returns the processor speed associated with pstate_index
*/
double sg_host_get_pstate_speed(sg_host_t host, int pstate_index)
{
return host->get_pstate_speed(pstate_index);
}
*/
double sg_host_get_pstate_speed(sg_host_t host, int pstate_index)
{
return host->get_pstate_speed(pstate_index);
}
-/**
\
ingroup m_host_management
- *
\
brief Return the number of cores.
+/**
@
ingroup m_host_management
+ *
@
brief Return the number of cores.
*
*
- *
\
param host a host
- *
\
return the number of cores
+ *
@
param host a host
+ *
@
return the number of cores
*/
int sg_host_core_count(sg_host_t host)
{
*/
int sg_host_core_count(sg_host_t host)
{
@@
-470,9
+469,9
@@
void sg_host_set_pstate(sg_host_t host, int pstate)
host->set_pstate(pstate);
}
host->set_pstate(pstate);
}
-/**
\
ingroup m_host_management
+/**
@
ingroup m_host_management
*
*
- *
\
brief Start the host if it is off
+ *
@
brief Start the host if it is off
*
* See also #sg_host_is_on() and #sg_host_is_off() to test the current state of the host and @ref plugin_energy
* for more info on DVFS.
*
* See also #sg_host_is_on() and #sg_host_is_off() to test the current state of the host and @ref plugin_energy
* for more info on DVFS.
@@
-482,9
+481,9
@@
void sg_host_turn_on(sg_host_t host)
host->turn_on();
}
host->turn_on();
}
-/**
\
ingroup m_host_management
+/**
@
ingroup m_host_management
*
*
- *
\
brief Stop the host if it is on
+ *
@
brief Stop the host if it is on
*
* See also #MSG_host_is_on() and #MSG_host_is_off() to test the current state of the host and @ref plugin_energy
* for more info on DVFS.
*
* See also #MSG_host_is_on() and #MSG_host_is_off() to test the current state of the host and @ref plugin_energy
* for more info on DVFS.
@@
-519,7
+518,7
@@
int sg_host_is_off(sg_host_t host)
return host->is_off();
}
return host->is_off();
}
-/** @brief Get the properties of a
n
host */
+/** @brief Get the properties of a host */
xbt_dict_t sg_host_get_properties(sg_host_t host)
{
xbt_dict_t as_dict = xbt_dict_new_homogeneous(xbt_free_f);
xbt_dict_t sg_host_get_properties(sg_host_t host)
{
xbt_dict_t as_dict = xbt_dict_new_homogeneous(xbt_free_f);
@@
-532,13
+531,13
@@
xbt_dict_t sg_host_get_properties(sg_host_t host)
return as_dict;
}
return as_dict;
}
-/**
\
ingroup m_host_management
- *
\
brief Returns the value of a given host property
+/**
@
ingroup m_host_management
+ *
@
brief Returns the value of a given host property
*
*
- *
\
param host a host
- *
\
param name a property name
- *
\
return value of a property (or nullptr if property not set)
-*/
+ *
@
param host a host
+ *
@
param name a property name
+ *
@
return value of a property (or nullptr if property not set)
+
*/
const char* sg_host_get_property_value(sg_host_t host, const char* name)
{
return host->get_property(name);
const char* sg_host_get_property_value(sg_host_t host, const char* name)
{
return host->get_property(name);
@@
-550,11
+549,11
@@
void sg_host_set_property_value(sg_host_t host, const char* name, const char* va
}
/**
}
/**
- *
\
brief Find a route between two hosts
+ *
@
brief Find a route between two hosts
*
*
- *
\
param from where from
- *
\
param to where to
- *
\
param links [OUT] where to store the list of links (must exist, cannot be nullptr).
+ *
@
param from where from
+ *
@
param to where to
+ *
@
param links [OUT] where to store the list of links (must exist, cannot be nullptr).
*/
void sg_host_route(sg_host_t from, sg_host_t to, xbt_dynar_t links)
{
*/
void sg_host_route(sg_host_t from, sg_host_t to, xbt_dynar_t links)
{
@@
-564,10
+563,10
@@
void sg_host_route(sg_host_t from, sg_host_t to, xbt_dynar_t links)
xbt_dynar_push(links, &link);
}
/**
xbt_dynar_push(links, &link);
}
/**
- *
\
brief Find the latency of the route between two hosts
+ *
@
brief Find the latency of the route between two hosts
*
*
- *
\
param from where from
- *
\
param to where to
+ *
@
param from where from
+ *
@
param to where to
*/
double sg_host_route_latency(sg_host_t from, sg_host_t to)
{
*/
double sg_host_route_latency(sg_host_t from, sg_host_t to)
{
@@
-577,10
+576,10
@@
double sg_host_route_latency(sg_host_t from, sg_host_t to)
return res;
}
/**
return res;
}
/**
- *
\
brief Find the bandwitdh of the route between two hosts
+ *
@
brief Find the bandwitdh of the route between two hosts
*
*
- *
\
param from where from
- *
\
param to where to
+ *
@
param from where from
+ *
@
param to where to
*/
double sg_host_route_bandwidth(sg_host_t from, sg_host_t to)
{
*/
double sg_host_route_bandwidth(sg_host_t from, sg_host_t to)
{
@@
-612,10
+611,10
@@
void sg_host_dump(sg_host_t host)
}
}
}
}
-/**
\brief Return the list of actors attached to an
host.
+/**
@brief Return the list of actors attached to a
host.
*
*
- *
\
param host a host
- *
\
param whereto a dynar in which we should push actors living on that host
+ *
@
param host a host
+ *
@
param whereto a dynar in which we should push actors living on that host
*/
void sg_host_get_actor_list(sg_host_t host, xbt_dynar_t whereto)
{
*/
void sg_host_get_actor_list(sg_host_t host, xbt_dynar_t whereto)
{
@@
-629,3
+628,8
@@
sg_host_t sg_host_self()
smx_actor_t process = SIMIX_process_self();
return (process == nullptr) ? nullptr : process->host_;
}
smx_actor_t process = SIMIX_process_self();
return (process == nullptr) ? nullptr : process->host_;
}
+
+double sg_host_load(sg_host_t host)
+{
+ return host->get_load();
+}