X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/8477291df42541085fa7c670fd39ba16dfa8860e..638b21d2071c77f39da2f322156f05f75bf91517:/src/simgrid/host.cpp diff --git a/src/simgrid/host.cpp b/src/simgrid/host.cpp index 396f4a325d..4f4ea787a7 100644 --- a/src/simgrid/host.cpp +++ b/src/simgrid/host.cpp @@ -42,7 +42,7 @@ int SD_HOST_LEVEL; int SIMIX_HOST_LEVEL; int ROUTING_HOST_LEVEL; int SURF_CPU_LEVEL; - +int USER_HOST_LEVEL; #include "src/msg/msg_private.h" // MSG_host_priv_free. FIXME: killme #include "src/simdag/private.h" // __SD_workstation_destroy. FIXME: killme @@ -51,20 +51,30 @@ int SURF_CPU_LEVEL; #include "src/surf/surf_routing.hpp" static XBT_INLINE void surf_cpu_free(void *r) { - delete static_cast(r); + delete static_cast(r); } static XBT_INLINE void routing_asr_host_free(void *p) { - delete static_cast(p); + delete static_cast(p); } - -void sg_host_init() { // FIXME: only add the needed levels +void sg_host_init() { MSG_HOST_LEVEL = xbt_lib_add_level(host_lib, (void_f_pvoid_t) __MSG_host_priv_free); SD_HOST_LEVEL = xbt_lib_add_level(host_lib,__SD_workstation_destroy); SIMIX_HOST_LEVEL = xbt_lib_add_level(host_lib,SIMIX_host_destroy); SURF_CPU_LEVEL = xbt_lib_add_level(host_lib,surf_cpu_free); ROUTING_HOST_LEVEL = xbt_lib_add_level(host_lib,routing_asr_host_free); + USER_HOST_LEVEL = xbt_lib_add_level(host_lib,NULL); +} +// ========== User data Layer ========== +void *sg_host_user(sg_host_t host) { + return xbt_lib_get_level(host, USER_HOST_LEVEL); +} +void sg_host_user_set(sg_host_t host, void* userdata) { + xbt_lib_set(host_lib,host->key,USER_HOST_LEVEL,userdata); +} +void sg_host_user_destroy(sg_host_t host) { + xbt_lib_unset(host_lib,host->key,USER_HOST_LEVEL,1); } // ========== MSG Layer ============== @@ -93,7 +103,8 @@ smx_host_priv_t sg_host_simix(sg_host_t host){ return (smx_host_priv_t) xbt_lib_get_level(host, SIMIX_HOST_LEVEL); } void sg_host_simix_set(sg_host_t host, smx_host_priv_t smx_host) { - xbt_lib_set(host_lib,host->key,SIMIX_HOST_LEVEL,smx_host); + xbt_assert(xbt_lib_get_or_null(host_lib,host->key,SIMIX_HOST_LEVEL) == NULL); + xbt_lib_set(host_lib,host->key,SIMIX_HOST_LEVEL,smx_host); } void sg_host_simix_destroy(sg_host_t host) { xbt_lib_unset(host_lib,host->key,SIMIX_HOST_LEVEL,1); @@ -106,14 +117,20 @@ surf_cpu_t sg_host_surfcpu(sg_host_t host) { void sg_host_surfcpu_set(sg_host_t host, surf_cpu_t cpu) { xbt_lib_set(host_lib, host->key, SURF_CPU_LEVEL, cpu); } +void sg_host_surfcpu_register(sg_host_t host, surf_cpu_t cpu) +{ + surf_callback_emit(simgrid::surf::cpuCreatedCallbacks, cpu); + surf_callback_emit(simgrid::surf::cpuStateChangedCallbacks, cpu, SURF_RESOURCE_ON, cpu->getState()); + sg_host_surfcpu_set(host, cpu); +} void sg_host_surfcpu_destroy(sg_host_t host) { xbt_lib_unset(host_lib,host->key,SURF_CPU_LEVEL,1); } // ========== RoutingEdge ============ -RoutingEdge *sg_host_edge(sg_host_t host) { - return (RoutingEdge*) xbt_lib_get_level(host, ROUTING_HOST_LEVEL); +surf_RoutingEdge *sg_host_edge(sg_host_t host) { + return (surf_RoutingEdge*) xbt_lib_get_level(host, ROUTING_HOST_LEVEL); } -void sg_host_edge_set(sg_host_t host, RoutingEdge *edge) { +void sg_host_edge_set(sg_host_t host, surf_RoutingEdge *edge) { xbt_lib_set(host_lib, host->key, ROUTING_HOST_LEVEL, edge); } void sg_host_edge_destroy(sg_host_t host, int do_callback) { @@ -141,12 +158,26 @@ int sg_host_get_state(sg_host_t host) { return surf_host_get_state(surf_host_resource_priv(host)); } -/** @brief Returns the total energy consumed by the host (in Joules) */ +/** @brief Returns the total energy consumed by the host (in Joules). + * + * See also @ref SURF_plugin_energy. + */ double sg_host_get_consumed_energy(sg_host_t host) { return surf_host_get_consumed_energy(host); } -/** @brief Gets the pstate at which that host currently runs */ +/** @brief Returns the number of power states for a host. + * + * See also @ref SURF_plugin_energy. + */ +int sg_host_get_nb_pstates(sg_host_t host) { + return surf_host_get_nb_pstates(host); +} + +/** @brief Gets the pstate at which that host currently runs. + * + * See also @ref SURF_plugin_energy. + */ int sg_host_get_pstate(sg_host_t host) { return surf_host_get_pstate(host); }