X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/32d226bfd7b55aea890fca59ba6dcd3ade1c7247..be27c3513d2b7d273749db733659600b10dc0a54:/src/simix/libsmx.cpp diff --git a/src/simix/libsmx.cpp b/src/simix/libsmx.cpp index 1dbcd2001f..4f1d8cd0fd 100644 --- a/src/simix/libsmx.cpp +++ b/src/simix/libsmx.cpp @@ -11,126 +11,111 @@ /* 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); + 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); + } } -/** - * \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) +// ***** Host simcalls +// Those functions are replaced by methods on the Host object. + +/** \ingroup simix_host_management + * \deprecated */ +xbt_swag_t simcall_host_get_process_list(sg_host_t host) { - simcall_BODY_host_off(host); + return host->getProcessList(); } -/** - * \ingroup simix_host_management - * \brief Returns a dict of the properties assigned to a host. - * - * \param host A host - * \return The properties of this host - */ -xbt_dict_t simcall_host_get_properties(sg_host_t host) +/** \ingroup simix_host_management + * \deprecated */ +double simcall_host_get_current_power_peak(sg_host_t host) { - return simcall_BODY_host_get_properties(host); + return host->getCurrentPowerPeak(); } -/** - * \ingroup simix_host_management - * \brief Returns a dict of the properties assigned to a router or AS. - * - * \param name The name of the router or AS - * \return The properties - */ -xbt_dict_t simcall_asr_get_properties(const char *name) +/** \ingroup simix_host_management + * \deprecated */ +double simcall_host_get_power_peak_at(sg_host_t host, int pstate_index) { - return simcall_BODY_asr_get_properties(name); + return host->getPowerPeakAt(pstate_index); } -/** - * \ingroup simix_host_management - * \brief Returns the list of processes attached to the host. - * - * \param host A SIMIX host - * \return the swag of attached processes - */ -xbt_swag_t simcall_host_get_process_list(sg_host_t host) +/** \ingroup simix_host_management + * \deprecated */ +double simcall_host_get_wattmin_at(msg_host_t host, int pstate) { - return simcall_BODY_host_get_process_list(host); + return host->getWattMinAt(pstate); } -/** - * \ingroup simix_host_management - * \brief Returns the power peak of a host. - * - * \param host A SIMIX host - * \return the current power peak value (double) - */ -double simcall_host_get_current_power_peak(sg_host_t host) +/** \ingroup simix_host_management + * \deprecated */ +double simcall_host_get_wattmax_at(msg_host_t host, int pstate) { - return simcall_BODY_host_get_current_power_peak(host); + return host->getWattMaxAt(pstate); } -/** - * \ingroup simix_host_management - * \brief Returns one power peak (in flops/s) of a host at a given pstate - * - * \param host A SIMIX host - * \param pstate_index pstate to test - * \return the current power peak value (double) for pstate_index - */ -double simcall_host_get_power_peak_at(sg_host_t host, int pstate_index) +/** \deprecated */ +void simcall_host_get_params(sg_host_t vm, vm_params_t params) { - return simcall_BODY_host_get_power_peak_at(host, pstate_index); + vm->getParams(params); } -/** - * \ingroup simix_host_management - * \brief Sets the pstate at which the host should run - * - * \param host A SIMIX host - * \param pstate_index The pstate to which the CPU power will be set - */ -void simcall_host_set_pstate(sg_host_t host, int pstate_index) +/** \deprecated */ +void simcall_host_set_params(sg_host_t vm, vm_params_t params) { - simcall_BODY_host_set_pstate(host, pstate_index); + vm->setParams(params); } -/** \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); +/** \ingroup simix_storage_management + * \deprecated */ +xbt_dict_t simcall_host_get_mounted_storage_list(sg_host_t host) +{ + return host->getMountedStorageList(); } -/** \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); + +/** \ingroup simix_storage_management + * \deprecated */ +xbt_dynar_t simcall_host_get_attached_storage_list(sg_host_t host) +{ + return host->getAttachedStorageList(); } +// ***** Other simcalls +/** + * \ingroup simix_host_management + * \brief Returns a dict of the properties assigned to a router or AS. + * + * \param name The name of the router or AS + * \return The properties + */ +xbt_dict_t simcall_asr_get_properties(const char *name) +{ + return simcall_BODY_asr_get_properties(name); +} /** * \ingroup simix_process_management @@ -312,8 +297,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 +310,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 +322,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 +334,17 @@ 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); -} - -void simcall_host_get_params(sg_host_t vm, vm_params_t params) -{ - simcall_BODY_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_vm_set_affinity, vm, pm, mask)); } /** @@ -380,7 +356,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 +422,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 +441,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 +565,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 +576,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 +587,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 +598,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 +611,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 +653,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 +666,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 +679,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 +690,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 @@ -1355,28 +1307,6 @@ sg_size_t simcall_storage_get_used_size (smx_storage_t storage){ return simcall_BODY_storage_get_used_size(storage); } -/** - * \ingroup simix_storage_management - * \brief Returns the list of storages mounted on an host. - * \param host A SIMIX host - * \return a dict containing all storages mounted on the host - */ -xbt_dict_t simcall_host_get_mounted_storage_list(sg_host_t host) -{ - return simcall_BODY_host_get_mounted_storage_list(host); -} - -/** - * \ingroup simix_storage_management - * \brief Returns the list of storages attached to an host. - * \param host A SIMIX host - * \return a dict containing all storages attached to the host - */ -xbt_dynar_t simcall_host_get_attached_storage_list(sg_host_t host) -{ - return simcall_BODY_host_get_attached_storage_list(host); -} - /** * \ingroup simix_storage_management * \brief Returns a dict of the properties assigned to a storage element. @@ -1401,7 +1331,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