static void TRACE_getopts(void)
{
- trace_enabled = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING);
- trace_platform = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_PLATFORM);
- trace_platform_topology = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_TOPOLOGY);
- trace_smpi_enabled = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_SMPI);
- trace_smpi_grouped = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_SMPI_GROUP);
- trace_smpi_computing = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_SMPI_COMPUTING);
- trace_categorized = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_CATEGORIZED);
- trace_uncategorized = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_UNCATEGORIZED);
- trace_msg_process_enabled = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_MSG_PROCESS);
- trace_msg_vm_enabled = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_MSG_VM);
- trace_buffer = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_BUFFER);
- trace_onelink_only = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_ONELINK_ONLY);
- trace_disable_destroy = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_DISABLE_DESTROY);
- trace_basic = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_BASIC);
+ trace_enabled = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING);
+ trace_platform = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_PLATFORM);
+ trace_platform_topology = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_TOPOLOGY);
+ trace_smpi_enabled = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_SMPI);
+ trace_smpi_grouped = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_SMPI_GROUP);
+ trace_smpi_computing = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_SMPI_COMPUTING);
+ trace_categorized = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_CATEGORIZED);
+ trace_uncategorized = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_UNCATEGORIZED);
+ trace_msg_process_enabled = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_MSG_PROCESS);
+ trace_msg_vm_enabled = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_MSG_VM);
+ trace_buffer = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_BUFFER);
+ trace_onelink_only = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_ONELINK_ONLY);
+ trace_disable_destroy = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_DISABLE_DESTROY);
+ trace_basic = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_BASIC);
+}
+
+xbt_dynar_t TRACE_start_functions = NULL;
+void TRACE_add_start_function(void (*func) ())
+{
+ if (TRACE_start_functions == NULL)
+ TRACE_start_functions = xbt_dynar_new(sizeof(void (*)()), NULL);
+ xbt_dynar_push(TRACE_start_functions, &func);
}
int TRACE_start()
}
}
}
- trace_active = 1;
- XBT_DEBUG ("Tracing is on");
-
- /* other trace initialization */
- created_categories = xbt_dict_new_homogeneous(xbt_free);
- declared_marks = xbt_dict_new_homogeneous (xbt_free);
- user_host_variables = xbt_dict_new_homogeneous (xbt_free);
- user_vm_variables = xbt_dict_new_homogeneous (xbt_free);
- user_link_variables = xbt_dict_new_homogeneous (xbt_free);
- TRACE_surf_alloc();
- TRACE_smpi_alloc();
+ xbt_dynar_free(&TRACE_start_functions);
return 0;
}
int TRACE_end()
{
- if (!trace_active)
- return 1;
-
- TRACE_generate_viva_uncat_conf();
- TRACE_generate_viva_cat_conf();
-
- /* dump trace buffer */
- TRACE_last_timestamp_to_dump = surf_get_clock();
- TRACE_paje_dump_buffer(1);
-
- /* destroy all data structures of tracing (and free) */
- PJ_container_free_all();
- PJ_type_free_all();
- PJ_container_release();
- PJ_type_release();
- TRACE_smpi_release();
- TRACE_surf_release();
- xbt_dict_free(&user_link_variables);
- xbt_dict_free(&user_host_variables);
- xbt_dict_free(&user_vm_variables);
-
- xbt_dict_free(&declared_marks);
- xbt_dict_free(&created_categories);
-
- /* close the trace file */
- TRACE_paje_end();
-
- /* de-activate trace */
- trace_active = 0;
- XBT_DEBUG ("Tracing is off");
- XBT_DEBUG("Tracing system is shutdown");
- return 0;
+ int retval;
+ if (!trace_active) {
+ retval = 1;
+ } else {
+ retval = 0;
+
+ TRACE_generate_viva_uncat_conf();
+ TRACE_generate_viva_cat_conf();
+
+ /* dump trace buffer */
+ TRACE_last_timestamp_to_dump = surf_get_clock();
+ TRACE_paje_dump_buffer(1);
+
+ /* destroy all data structures of tracing (and free) */
+ PJ_container_free_all();
+ PJ_type_free_all();
+ PJ_container_release();
+ PJ_type_release();
+
+ if (TRACE_end_functions != NULL) {
+ void (*func) (void);
+ unsigned int iter;
+ xbt_dynar_foreach(TRACE_end_functions, iter, func) {
+ func();
+ }
+ }
+
+ xbt_dict_free(&user_link_variables);
+ xbt_dict_free(&user_host_variables);
+ xbt_dict_free(&declared_marks);
+ xbt_dict_free(&created_categories);
+
+ /* close the trace file */
+ TRACE_paje_end();
+
+ /* de-activate trace */
+ trace_active = 0;
+ XBT_DEBUG("Tracing is off");
+ XBT_DEBUG("Tracing system is shutdown");
+ }
+ xbt_dynar_free(&TRACE_end_functions);
+ return retval;
}
int TRACE_needs_platform (void)
{
return TRACE_msg_process_is_enabled() ||
- TRACE_msg_vm_is_enabled() ||
TRACE_categorized() ||
TRACE_uncategorized() ||
+ TRACE_msg_vm_is_enabled() ||
TRACE_platform () ||
(TRACE_smpi_is_enabled() && TRACE_smpi_is_grouped());
}
+
int TRACE_is_enabled(void)
{
return trace_enabled;
"Tracing of MSG process behavior.",
xbt_cfgelm_int, &default_tracing_msg_process, 0, 1,
NULL, NULL);
-
- /* msg process */
+ /* msg vm */
int default_tracing_msg_vm = 0;
- xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_MSG_VM,
- "Tracing of MSG process behavior.",
+ xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_MSG_VM,
+ "Tracing of MSG VM behavior.",
xbt_cfgelm_int, &default_tracing_msg_vm, 0, 1,
NULL, NULL);
c1->kind == INSTR_SMPI ||
c1->kind == INSTR_MSG_PROCESS ||
c1->kind == INSTR_MSG_TASK ||
+ c1->kind == INSTR_MSG_VM ||
(c2 && strcmp (c1->name, c2->name) == 0))
return 1;
else
container_t child1, child2;
const char *child1_name, *child2_name;
xbt_dict_foreach(container->children, cursor1, child1_name, child1) {
- //if child1 is not a link, a smpi node, a msg process, a msg vm or a msg task
- if (child1->kind == INSTR_LINK || child1->kind == INSTR_SMPI || child1->kind == INSTR_MSG_PROCESS || child1->kind == INSTR_MSG_VM || child1->kind == INSTR_MSG_TASK) continue;
+ if (graph_extraction_filter_out (child1, NULL)) continue;
xbt_dict_foreach(container->children, cursor2, child2_name, child2) {
- //if child2 is not a link, a smpi node, a msg process, a msg vm or a msg task
- if (child2->kind == INSTR_LINK || child2->kind == INSTR_SMPI || child2->kind == INSTR_MSG_PROCESS || child2->kind == INSTR_MSG_VM || child2->kind == INSTR_MSG_TASK) continue;
+ if (graph_extraction_filter_out (child2, child1)) continue;
+ XBT_DEBUG ("get_route from %s to %s", child1_name, child2_name);
//if child1 is not child2
if (strcmp (child1_name, child2_name) == 0) continue;
while ((xbt_heap_size(model->model_private->action_heap) > 0)
&& (double_equals(xbt_heap_maxkey(model->model_private->action_heap), now))) {
action = xbt_heap_pop(model->model_private->action_heap);
- XBT_DEBUG("Something happened to action %p", action);
+ XBT_DEBUG("Action %p: finish", action);
+ action->generic_action.finish = surf_get_clock();
#ifdef HAVE_TRACING
if (TRACE_is_enabled()) {
if(model == surf_cpu_model){
#endif
if(model == surf_cpu_model){
- action->generic_action.finish = surf_get_clock();
- XBT_DEBUG("Action %p finished", action);
-
/* set the remains to 0 due to precision problems when updating the remaining amount */
action->generic_action.remains = 0;
surf_action_state_set((surf_action_t) action, SURF_ACTION_DONE);
else{
// if I am wearing a latency hat
if (action->hat == LATENCY) {
- XBT_DEBUG("Latency paid for action %p. Activating", action);
lmm_update_variable_weight(model->model_private->maxmin_system, action->variable,
((surf_action_network_CM02_t)(action))->weight);
surf_action_lmm_heap_remove(model->model_private->action_heap,action);
action->hat == NORMAL) {
// no need to communicate anymore
// assume that flows that reached max_duration have remaining of 0
- action->generic_action.finish = surf_get_clock();
- XBT_DEBUG("Action %p finished", action);
- action->generic_action.remains = 0;
+ action->generic_action.remains = 0;
((surf_action_t)action)->finish = surf_get_clock();
model->action_state_set((surf_action_t) action,
SURF_ACTION_DONE);