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
cosmetics in comments
[simgrid.git]
/
src
/
simix
/
smx_global.c
diff --git
a/src/simix/smx_global.c
b/src/simix/smx_global.c
index
3bb6bff
..
ecd64f0
100644
(file)
--- a/
src/simix/smx_global.c
+++ b/
src/simix/smx_global.c
@@
-16,6
+16,7
@@
#ifdef HAVE_MC
#include "mc/mc_private.h"
#endif
#ifdef HAVE_MC
#include "mc/mc_private.h"
#endif
+#include "mc/mc_record.h"
#ifdef HAVE_SMPI
#include "smpi/private.h"
#ifdef HAVE_SMPI
#include "smpi/private.h"
@@
-28,9
+29,9
@@
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_kernel, simix,
smx_global_t simix_global = NULL;
static xbt_heap_t simix_timers = NULL;
smx_global_t simix_global = NULL;
static xbt_heap_t simix_timers = NULL;
-static void* SIMIX_
action
_mallocator_new_f(void);
-static void SIMIX_
action_mallocator_free_f(void* action
);
-static void SIMIX_
action_mallocator_reset_f(void* action
);
+static void* SIMIX_
synchro
_mallocator_new_f(void);
+static void SIMIX_
synchro_mallocator_free_f(void* synchro
);
+static void SIMIX_
synchro_mallocator_reset_f(void* synchro
);
/* FIXME: Yeah, I'll do it in a portable maner one day [Mt] */
#include <signal.h>
/* FIXME: Yeah, I'll do it in a portable maner one day [Mt] */
#include <signal.h>
@@
-168,9
+169,9
@@
void SIMIX_global_init(int *argc, char **argv)
simix_global->create_process_function = SIMIX_process_create;
simix_global->kill_process_function = SIMIX_process_kill;
simix_global->cleanup_process_function = SIMIX_process_cleanup;
simix_global->create_process_function = SIMIX_process_create;
simix_global->kill_process_function = SIMIX_process_kill;
simix_global->cleanup_process_function = SIMIX_process_cleanup;
- simix_global->
action
_mallocator = xbt_mallocator_new(65536,
- SIMIX_
action_mallocator_new_f, SIMIX_action
_mallocator_free_f,
- SIMIX_
action
_mallocator_reset_f);
+ simix_global->
synchro
_mallocator = xbt_mallocator_new(65536,
+ SIMIX_
synchro_mallocator_new_f, SIMIX_synchro
_mallocator_free_f,
+ SIMIX_
synchro
_mallocator_reset_f);
simix_global->autorestart = SIMIX_host_restart_processes;
surf_init(argc, argv); /* Initialize SURF structures */
simix_global->autorestart = SIMIX_host_restart_processes;
surf_init(argc, argv); /* Initialize SURF structures */
@@
-264,7
+265,7
@@
void SIMIX_clean(void)
xbt_os_timer_free(simix_global->timer_par);
#endif
xbt_os_timer_free(simix_global->timer_par);
#endif
- xbt_mallocator_free(simix_global->
action
_mallocator);
+ xbt_mallocator_free(simix_global->
synchro
_mallocator);
xbt_free(simix_global);
simix_global = NULL;
xbt_free(simix_global);
simix_global = NULL;
@@
-280,7
+281,7
@@
void SIMIX_clean(void)
*/
XBT_INLINE double SIMIX_get_clock(void)
{
*/
XBT_INLINE double SIMIX_get_clock(void)
{
- if(MC_is_active()){
+ if(MC_is_active()
|| MC_record_replay_is_active()
){
return MC_process_clock_get(SIMIX_process_self());
}else{
return surf_get_clock();
return MC_process_clock_get(SIMIX_process_self());
}else{
return surf_get_clock();
@@
-306,6
+307,12
@@
static int process_syscall_color(void *p)
*/
void SIMIX_run(void)
{
*/
void SIMIX_run(void)
{
+ if(MC_record_path) {
+ MC_record_replay_init();
+ MC_record_replay_from_string(MC_record_path);
+ return;
+ }
+
double time = 0;
smx_process_t process;
surf_action_t action;
double time = 0;
smx_process_t process;
surf_action_t action;
@@
-334,7
+341,7
@@
void SIMIX_run(void)
xbt_os_cputimer_resume(simix_global->timer_seq);
#endif
xbt_os_cputimer_resume(simix_global->timer_seq);
#endif
- /* Move all kill
ing
processes to the end of the list, because killing a process that have an ongoing simcall is a bad idea */
+ /* Move all kill
er
processes to the end of the list, because killing a process that have an ongoing simcall is a bad idea */
xbt_dynar_three_way_partition(simix_global->process_that_ran, process_syscall_color);
/* answer sequentially and in a fixed arbitrary order all the simcalls that were issued during that sub-round */
xbt_dynar_three_way_partition(simix_global->process_that_ran, process_syscall_color);
/* answer sequentially and in a fixed arbitrary order all the simcalls that were issued during that sub-round */
@@
-367,16
+374,16
@@
void SIMIX_run(void)
* - because the communication failed or were canceled after startup. In this case, it's called from the function
* we are in, by the chunk:
* set = model->states.failed_action_set;
* - because the communication failed or were canceled after startup. In this case, it's called from the function
* we are in, by the chunk:
* set = model->states.failed_action_set;
- * while ((
action
= xbt_swag_extract(set)))
- * SIMIX_simcall_post((smx_
action_t) action
->data);
+ * while ((
synchro
= xbt_swag_extract(set)))
+ * SIMIX_simcall_post((smx_
synchro_t) synchro
->data);
* This order is also fixed because it depends of the order in which the surf actions were
* added to the system, and only maestro can add stuff this way, through simcalls.
* This order is also fixed because it depends of the order in which the surf actions were
* added to the system, and only maestro can add stuff this way, through simcalls.
- * We thus use the inductive hypothesis once again to conclude that the order in which
action
s are
+ * We thus use the inductive hypothesis once again to conclude that the order in which
synchro
s are
* poped out of the swag does not depend on the user code's execution order.
* poped out of the swag does not depend on the user code's execution order.
- * - because the communication terminated. In this case,
action
s are served in the order given by
+ * - because the communication terminated. In this case,
synchro
s are served in the order given by
* set = model->states.done_action_set;
* set = model->states.done_action_set;
- * while ((
action
= xbt_swag_extract(set)))
- * SIMIX_simcall_post((smx_
action_t) action
->data);
+ * while ((
synchro
= xbt_swag_extract(set)))
+ * SIMIX_simcall_post((smx_
synchro_t) synchro
->data);
* and the argument is very similar to the previous one.
* So, in any case, the orders of calls to SIMIX_comm_finish() do not depend on the order in which user processes are executed.
* So, in any cases, the orders of processes within process_to_run do not depend on the order in which user processes were executed previously.
* and the argument is very similar to the previous one.
* So, in any case, the orders of calls to SIMIX_comm_finish() do not depend on the order in which user processes are executed.
* So, in any cases, the orders of processes within process_to_run do not depend on the order in which user processes were executed previously.
@@
-394,7
+401,7
@@
void SIMIX_run(void)
xbt_dynar_foreach(simix_global->process_that_ran, iter, process) {
if (process->simcall.call != SIMCALL_NONE) {
xbt_dynar_foreach(simix_global->process_that_ran, iter, process) {
if (process->simcall.call != SIMCALL_NONE) {
- SIMIX_simcall_
pr
e(&process->simcall, 0);
+ SIMIX_simcall_
handl
e(&process->simcall, 0);
}
}
}
}
}
}
@@
-420,13
+427,13
@@
void SIMIX_run(void)
/* Wake up all processes waiting for a Surf action to finish */
xbt_dynar_foreach(model_list, iter, model) {
while ((action = surf_model_extract_failed_action_set(model)))
/* Wake up all processes waiting for a Surf action to finish */
xbt_dynar_foreach(model_list, iter, model) {
while ((action = surf_model_extract_failed_action_set(model)))
- SIMIX_simcall_
post((smx_action
_t) surf_action_get_data(action));
+ SIMIX_simcall_
exit((smx_synchro
_t) surf_action_get_data(action));
while ((action = surf_model_extract_done_action_set(model)))
if (surf_action_get_data(action) == NULL)
XBT_DEBUG("probably vcpu's action %p, skip", action);
else
while ((action = surf_model_extract_done_action_set(model)))
if (surf_action_get_data(action) == NULL)
XBT_DEBUG("probably vcpu's action %p, skip", action);
else
- SIMIX_simcall_
post((smx_action
_t) surf_action_get_data(action));
+ SIMIX_simcall_
exit((smx_synchro
_t) surf_action_get_data(action));
}
/* Autorestart all process */
}
/* Autorestart all process */
@@
-444,8
+451,6
@@
void SIMIX_run(void)
XBT_DEBUG("### time %f, empty %d", time, xbt_dynar_is_empty(simix_global->process_to_run));
XBT_DEBUG("### time %f, empty %d", time, xbt_dynar_is_empty(simix_global->process_to_run));
- // !(time == -1.0 && xbt_dynar_is_empty())
-
} while (time != -1.0 || !xbt_dynar_is_empty(simix_global->process_to_run));
} while (time != -1.0 || !xbt_dynar_is_empty(simix_global->process_to_run));
@@
-538,50
+543,43
@@
void SIMIX_display_process_status(void)
("Legend of the following listing: \"Process <pid> (<name>@<host>): <status>\"");
xbt_swag_foreach(process, simix_global->process_list) {
("Legend of the following listing: \"Process <pid> (<name>@<host>): <status>\"");
xbt_swag_foreach(process, simix_global->process_list) {
- if (process->waiting_
action
) {
+ if (process->waiting_
synchro
) {
- const char*
action
_description = "unknown";
- switch (process->waiting_
action
->type) {
+ const char*
synchro
_description = "unknown";
+ switch (process->waiting_
synchro
->type) {
- case SIMIX_
ACTION
_EXECUTE:
-
action
_description = "execution";
+ case SIMIX_
SYNC
_EXECUTE:
+
synchro
_description = "execution";
break;
break;
- case SIMIX_
ACTION
_PARALLEL_EXECUTE:
-
action
_description = "parallel execution";
+ case SIMIX_
SYNC
_PARALLEL_EXECUTE:
+
synchro
_description = "parallel execution";
break;
break;
- case SIMIX_
ACTION
_COMMUNICATE:
-
action
_description = "communication";
+ case SIMIX_
SYNC
_COMMUNICATE:
+
synchro
_description = "communication";
break;
break;
- case SIMIX_
ACTION
_SLEEP:
-
action
_description = "sleeping";
+ case SIMIX_
SYNC
_SLEEP:
+
synchro
_description = "sleeping";
break;
break;
- case SIMIX_
ACTION
_JOIN:
-
action
_description = "joining";
+ case SIMIX_
SYNC
_JOIN:
+
synchro
_description = "joining";
break;
break;
- case SIMIX_
ACTION
_SYNCHRO:
-
action
_description = "synchronization";
+ case SIMIX_
SYNC
_SYNCHRO:
+
synchro
_description = "synchronization";
break;
break;
- case SIMIX_ACTION_IO:
- action_description = "I/O";
- break;
- /* **************************************/
- /* TUTORIAL: New API */
- case SIMIX_ACTION_NEW_API:
- action_description = "NEW API";
- /* **************************************/
-
+ case SIMIX_SYNC_IO:
+ synchro_description = "I/O";
break;
}
break;
}
- XBT_INFO("Process %lu (%s@%s): waiting for %s
action
%p (%s) in state %d to finish",
+ XBT_INFO("Process %lu (%s@%s): waiting for %s
synchro
%p (%s) in state %d to finish",
process->pid, process->name, sg_host_name(process->smx_host),
process->pid, process->name, sg_host_name(process->smx_host),
-
action_description, process->waiting_action
,
- process->waiting_
action->name, (int)process->waiting_action
->state);
+
synchro_description, process->waiting_synchro
,
+ process->waiting_
synchro->name, (int)process->waiting_synchro
->state);
}
else {
XBT_INFO("Process %lu (%s@%s)", process->pid, process->name, sg_host_name(process->smx_host));
}
else {
XBT_INFO("Process %lu (%s@%s)", process->pid, process->name, sg_host_name(process->smx_host));
@@
-589,31
+587,30
@@
void SIMIX_display_process_status(void)
}
}
}
}
-static void* SIMIX_
action
_mallocator_new_f(void) {
- smx_
action_t action = xbt_new(s_smx_action
_t, 1);
-
action
->simcalls = xbt_fifo_new();
- return
action
;
+static void* SIMIX_
synchro
_mallocator_new_f(void) {
+ smx_
synchro_t synchro = xbt_new(s_smx_synchro
_t, 1);
+
synchro
->simcalls = xbt_fifo_new();
+ return
synchro
;
}
}
-static void SIMIX_
action_mallocator_free_f(void* action
) {
- xbt_fifo_free(((smx_
action_t) action
)->simcalls);
- xbt_free(
action
);
+static void SIMIX_
synchro_mallocator_free_f(void* synchro
) {
+ xbt_fifo_free(((smx_
synchro_t) synchro
)->simcalls);
+ xbt_free(
synchro
);
}
}
-static void SIMIX_
action_mallocator_reset_f(void* action
) {
+static void SIMIX_
synchro_mallocator_reset_f(void* synchro
) {
// we also recycle the simcall list
// we also recycle the simcall list
- xbt_fifo_t fifo = ((smx_
action_t) action
)->simcalls;
+ xbt_fifo_t fifo = ((smx_
synchro_t) synchro
)->simcalls;
xbt_fifo_reset(fifo);
xbt_fifo_reset(fifo);
- memset(
action, 0, sizeof(s_smx_action
_t));
- ((smx_
action_t) action
)->simcalls = fifo;
+ memset(
synchro, 0, sizeof(s_smx_synchro
_t));
+ ((smx_
synchro_t) synchro
)->simcalls = fifo;
}
}
-xbt_dict_t
SIMIX_pre
_asr_get_properties(smx_simcall_t simcall, const char *name){
+xbt_dict_t
simcall_HANDLER
_asr_get_properties(smx_simcall_t simcall, const char *name){
return SIMIX_asr_get_properties(name);
}
xbt_dict_t SIMIX_asr_get_properties(const char *name)
{
return xbt_lib_get_or_null(as_router_lib, name, ROUTING_PROP_ASR_LEVEL);
}
return SIMIX_asr_get_properties(name);
}
xbt_dict_t SIMIX_asr_get_properties(const char *name)
{
return xbt_lib_get_or_null(as_router_lib, name, ROUTING_PROP_ASR_LEVEL);
}
-