X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/32d226bfd7b55aea890fca59ba6dcd3ade1c7247..878020909e91d141e57373397d8dede76c5fde03:/src/simix/libsmx.cpp diff --git a/src/simix/libsmx.cpp b/src/simix/libsmx.cpp index 1dbcd2001f..f6d5d73dc4 100644 --- a/src/simix/libsmx.cpp +++ b/src/simix/libsmx.cpp @@ -11,37 +11,32 @@ /* 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 + #include "src/mc/mc_replay.h" #include "smx_private.h" #include "src/mc/mc_forward.h" #include "xbt/ex.h" #include /* isfinite() */ #include "mc/mc.h" +#include "src/simix/smx_host_private.h" +#include "src/simix/smx_private.hpp" + +#include XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix); #include "popping_bodies.cpp" -/** - * \ingroup simix_host_management - * \brief Start the host if it is off - * - * \param host A SIMIX host - */ -void simcall_host_on(sg_host_t host) +void simcall_call(smx_process_t process) { - simcall_BODY_host_on(host); -} - -/** - * \ingroup simix_host_management - * \brief Stop the host if it is on - * - * \param host A SIMIX host - */ -void simcall_host_off(sg_host_t host) -{ - simcall_BODY_host_off(host); + if (process != simix_global->maestro_process) { + XBT_DEBUG("Yield process '%s' on simcall %s (%d)", process->name, + SIMIX_simcall_name(process->simcall.call), (int)process->simcall.call); + SIMIX_process_yield(process); + } else { + SIMIX_simcall_handle(&process->simcall, 0); + } } /** @@ -53,7 +48,7 @@ void simcall_host_off(sg_host_t host) */ xbt_dict_t simcall_host_get_properties(sg_host_t host) { - return simcall_BODY_host_get_properties(host); + return simgrid::simix::kernel(std::bind(SIMIX_host_get_properties, host)); } /** @@ -77,7 +72,7 @@ xbt_dict_t simcall_asr_get_properties(const char *name) */ xbt_swag_t simcall_host_get_process_list(sg_host_t host) { - return simcall_BODY_host_get_process_list(host); + return simgrid::simix::kernel(std::bind(SIMIX_host_get_process_list, host)); } /** @@ -89,7 +84,8 @@ xbt_swag_t simcall_host_get_process_list(sg_host_t host) */ double simcall_host_get_current_power_peak(sg_host_t host) { - return simcall_BODY_host_get_current_power_peak(host); + return simgrid::simix::kernel( + std::bind(SIMIX_host_get_current_power_peak, host)); } /** @@ -102,7 +98,8 @@ double simcall_host_get_current_power_peak(sg_host_t host) */ double simcall_host_get_power_peak_at(sg_host_t host, int pstate_index) { - return simcall_BODY_host_get_power_peak_at(host, pstate_index); + return simgrid::simix::kernel( + std::bind(SIMIX_host_get_power_peak_at, host, pstate_index)); } /** @@ -114,20 +111,26 @@ double simcall_host_get_power_peak_at(sg_host_t host, int pstate_index) */ void simcall_host_set_pstate(sg_host_t host, int pstate_index) { - simcall_BODY_host_set_pstate(host, pstate_index); + simgrid::simix::kernel( + std::bind(SIMIX_host_set_pstate, host, pstate_index)); } /** \ingroup simix_host_management * \brief Returns the amount of watt dissipated at the given pstate when the host is idling */ -double simcall_host_get_wattmin_at(msg_host_t host, int pstate){ - return simcall_BODY_host_get_wattmin_at(host, pstate); +double simcall_host_get_wattmin_at(msg_host_t host, int pstate) +{ + return simgrid::simix::kernel( + std::bind(SIMIX_host_get_wattmin_at, host, pstate)); } + /** \ingroup simix_host_management * \brief Returns the amount of watt dissipated at the given pstate when the host burns CPU at 100% */ -double simcall_host_get_wattmax_at(msg_host_t host, int pstate){ - return simcall_BODY_host_get_wattmax_at(host, pstate); +double simcall_host_get_wattmax_at(msg_host_t host, int pstate) +{ + return simgrid::simix::kernel( + std::bind(SIMIX_host_get_wattmax_at, host, pstate)); } @@ -312,8 +315,9 @@ e_smx_state_t simcall_process_execution_wait(smx_synchro_t execution) * * \return The host object of the VM */ -void* simcall_vm_create(const char *name, sg_host_t phys_host){ - return simcall_BODY_vm_create(name, phys_host); +void* simcall_vm_create(const char *name, sg_host_t phys_host) +{ + return simgrid::simix::kernel(std::bind(SIMIX_vm_create, name, phys_host)); } /** @@ -324,7 +328,7 @@ void* simcall_vm_create(const char *name, sg_host_t phys_host){ */ void simcall_vm_start(sg_host_t vm) { - simcall_BODY_vm_start(vm); + return simgrid::simix::kernel(std::bind(SIMIX_vm_start, vm)); } /** @@ -336,7 +340,7 @@ void simcall_vm_start(sg_host_t vm) */ int simcall_vm_get_state(sg_host_t vm) { - return simcall_BODY_vm_get_state(vm); + return simgrid::simix::kernel(std::bind(SIMIX_vm_get_state, vm)); } /** @@ -348,27 +352,27 @@ int simcall_vm_get_state(sg_host_t vm) */ void *simcall_vm_get_pm(sg_host_t vm) { - return simcall_BODY_vm_get_pm(vm); + return simgrid::simix::kernel(std::bind(SIMIX_vm_get_pm, vm)); } void simcall_vm_set_bound(sg_host_t vm, double bound) { - simcall_BODY_vm_set_bound(vm, bound); + simgrid::simix::kernel(std::bind(SIMIX_vm_set_bound, vm, bound)); } void simcall_vm_set_affinity(sg_host_t vm, sg_host_t pm, unsigned long mask) { - simcall_BODY_vm_set_affinity(vm, pm, mask); + simgrid::simix::kernel(std::bind(SIMIX_vm_set_affinity, vm, pm, mask)); } void simcall_host_get_params(sg_host_t vm, vm_params_t params) { - simcall_BODY_host_get_params(vm, params); + simgrid::simix::kernel(std::bind(SIMIX_host_get_params, vm, params)); } void simcall_host_set_params(sg_host_t vm, vm_params_t params) { - simcall_BODY_host_set_params(vm, params); + simgrid::simix::kernel(std::bind(SIMIX_host_set_params, vm, params)); } /** @@ -380,7 +384,7 @@ void simcall_host_set_params(sg_host_t vm, vm_params_t params) */ void simcall_vm_migrate(sg_host_t vm, sg_host_t host) { - simcall_BODY_vm_migrate(vm, host); + return simgrid::simix::kernel(std::bind(SIMIX_vm_migrate, vm, host)); } /** @@ -446,7 +450,7 @@ void simcall_vm_shutdown(sg_host_t vm) */ void simcall_vm_destroy(sg_host_t vm) { - simcall_BODY_vm_destroy(vm); + simgrid::simix::kernel(std::bind(SIMIX_vm_destroy, vm)); } /** @@ -465,7 +469,8 @@ void simcall_vm_destroy(sg_host_t vm) */ void simcall_vm_migratefrom_resumeto(sg_host_t vm, sg_host_t src_pm, sg_host_t dst_pm) { - simcall_BODY_vm_migratefrom_resumeto(vm, src_pm, dst_pm); + simgrid::simix::kernel(std::bind( + SIMIX_vm_migratefrom_resumeto, vm, src_pm, dst_pm)); } /** @@ -588,7 +593,7 @@ void simcall_process_resume(smx_process_t process) */ int simcall_process_count(void) { - return simcall_BODY_process_count(); + return simgrid::simix::kernel(SIMIX_process_count); } /** @@ -599,12 +604,7 @@ int simcall_process_count(void) */ int simcall_process_get_PID(smx_process_t process) { - if (process == SIMIX_process_self()) { - /* avoid a simcall if this function is called by the process itself */ - return SIMIX_process_get_PID(process); - } - - return simcall_BODY_process_get_PID(process); + return SIMIX_process_get_PID(process); } /** @@ -615,12 +615,7 @@ int simcall_process_get_PID(smx_process_t process) */ int simcall_process_get_PPID(smx_process_t process) { - if (process == SIMIX_process_self()) { - /* avoid a simcall if this function is called by the process itself */ - return SIMIX_process_get_PPID(process); - } - - return simcall_BODY_process_get_PPID(process); + return SIMIX_process_get_PPID(process); } /** @@ -631,12 +626,7 @@ int simcall_process_get_PPID(smx_process_t process) */ void* simcall_process_get_data(smx_process_t process) { - if (process == SIMIX_process_self()) { - /* avoid a simcall if this function is called by the process itself */ - return SIMIX_process_get_data(process); - } - - return simcall_BODY_process_get_data(process); + return SIMIX_process_get_data(process); } /** @@ -649,13 +639,7 @@ void* simcall_process_get_data(smx_process_t process) */ void simcall_process_set_data(smx_process_t process, void *data) { - if (process == SIMIX_process_self()) { - /* avoid a simcall if this function is called by the process itself */ - SIMIX_process_self_set_data(process, data); - } - else { - simcall_BODY_process_set_data(process, data); - } + simgrid::simix::kernel(std::bind(SIMIX_process_set_data, process, data)); } static void kill_process(void* arg) @@ -697,7 +681,7 @@ double simcall_process_get_kill_time(smx_process_t process) { */ sg_host_t simcall_process_get_host(smx_process_t process) { - return simcall_BODY_process_get_host(process); + return SIMIX_process_get_host(process); } /** @@ -710,11 +694,7 @@ sg_host_t simcall_process_get_host(smx_process_t process) */ const char* simcall_process_get_name(smx_process_t process) { - if (process == SIMIX_process_self()) { - /* avoid a simcall if this function is called by the process itself */ - return process->name; - } - return simcall_BODY_process_get_name(process); + return SIMIX_process_get_name(process); } /** @@ -727,7 +707,7 @@ const char* simcall_process_get_name(smx_process_t process) */ int simcall_process_is_suspended(smx_process_t process) { - return simcall_BODY_process_is_suspended(process); + return simcall_BODY_process_is_suspended(process); } /** @@ -738,7 +718,7 @@ int simcall_process_is_suspended(smx_process_t process) */ xbt_dict_t simcall_process_get_properties(smx_process_t process) { - return simcall_BODY_process_get_properties(process); + return SIMIX_process_get_properties(process); } /** * \ingroup simix_process_management @@ -1363,7 +1343,9 @@ sg_size_t simcall_storage_get_used_size (smx_storage_t storage){ */ xbt_dict_t simcall_host_get_mounted_storage_list(sg_host_t host) { - return simcall_BODY_host_get_mounted_storage_list(host); + return simgrid::simix::kernel(std::bind( + SIMIX_host_get_mounted_storage_list, host + )); } /** @@ -1374,7 +1356,9 @@ xbt_dict_t simcall_host_get_mounted_storage_list(sg_host_t host) */ xbt_dynar_t simcall_host_get_attached_storage_list(sg_host_t host) { - return simcall_BODY_host_get_attached_storage_list(host); + return simgrid::simix::kernel(std::bind( + SIMIX_host_get_attached_storage_list, host + )); } /** @@ -1401,7 +1385,10 @@ xbt_dict_t simcall_storage_get_content(smx_storage_t storage) return simcall_BODY_storage_get_content(storage); } - +void simcall_run_kernel(std::function const& code) +{ + return simcall_BODY_run_kernel((void*) &code); +} #ifdef HAVE_MC