X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a182030b5a8c0db05a1de18ca230b61e76363ebc..f9b6de55a6f3f3c53cee2fcb55935cbcb851a4f1:/src/instr/msg_task_instr.c?ds=sidebyside diff --git a/src/instr/msg_task_instr.c b/src/instr/msg_task_instr.c index 75b8a91989..adfbc59ef4 100644 --- a/src/instr/msg_task_instr.c +++ b/src/instr/msg_task_instr.c @@ -1,31 +1,29 @@ -/* - * msg.c - * - * Created on: Nov 24, 2009 - * Author: Lucas Schnorr - * License: 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. - * - * Copyright (c) 2009 The SimGrid team. - */ +/* Copyright (c) 2010. The SimGrid Team. + * All rights reserved. */ + +/* 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 "instr/private.h" #ifdef HAVE_TRACING +static xbt_dict_t task_containers = NULL; static xbt_dict_t current_task_category = NULL; void __TRACE_msg_init (void) { current_task_category = xbt_dict_new(); + task_containers = xbt_dict_new(); } void __TRACE_current_category_set (m_task_t task) { char processid[100]; + char *var_cpy = NULL; snprintf (processid, 100, "%p", SIMIX_process_self()); - xbt_dict_set (current_task_category, processid, xbt_strdup (task->category), xbt_free); + var_cpy = xbt_strdup (task->category); + xbt_dict_set (current_task_category, processid, var_cpy, xbt_free); } void __TRACE_current_category_unset () @@ -44,22 +42,54 @@ char *__TRACE_current_category_get (smx_process_t proc) void __TRACE_task_location (m_task_t task) { - char container[200]; - m_process_t process = MSG_process_self(); - m_host_t host = MSG_process_get_host (process); - if (IS_TRACING_PROCESSES){ - //container is a process - TRACE_process_alias_container (process, host, container, 200); - __TRACE_msg_process_location (process); - }else{ - //container is a host - TRACE_host_container (host, container, 200); + char container[200]; + char name[200], alias[200]; + char *val_one = NULL; + m_process_t process = NULL; + m_host_t host = NULL; + if (!IS_TRACING_TASKS) return; + process = MSG_process_self(); + host = MSG_process_get_host (process); + + //tasks are grouped by host + TRACE_host_container (host, container, 200); + TRACE_task_container (task, name, 200); + TRACE_task_alias_container (task, process, host, alias, 200); + //check if task container is already created + if (!xbt_dict_get_or_null (task_containers, alias)){ + pajeCreateContainer (MSG_get_clock(), alias, "TASK", container, name); + pajeSetState (MSG_get_clock(), "category", alias, task->category); + val_one = xbt_strdup ("1"); + xbt_dict_set (task_containers, alias, val_one, xbt_free); } +} + +void __TRACE_task_location_present (m_task_t task) +{ + char alias[200]; + m_process_t process = NULL; + m_host_t host = NULL; + if (!IS_TRACING_TASKS) return; + //updating presence state of this task location + process = MSG_process_self(); + host = MSG_process_get_host (process); + + TRACE_task_alias_container (task, process, host, alias, 200); + pajePushState (MSG_get_clock(), "presence", alias, "presence"); +} + +void __TRACE_task_location_not_present (m_task_t task) +{ + char alias[200]; + m_process_t process = NULL; + m_host_t host = NULL; + if (!IS_TRACING_TASKS) return; + //updating presence state of this task location + process = MSG_process_self(); + host = MSG_process_get_host (process); - char name[200], alias[200]; - TRACE_task_container (task, name, 200); TRACE_task_alias_container (task, process, host, alias, 200); - if (IS_TRACING_TASKS) pajeCreateContainer (MSG_get_clock(), alias, "TASK", container, name); + pajePopState (MSG_get_clock(), "presence", alias); } /* @@ -67,20 +97,21 @@ void __TRACE_task_location (m_task_t task) */ void TRACE_msg_set_task_category(m_task_t task, const char *category) { + char name[200]; if (!IS_TRACING) return; //set task category task->category = xbt_new (char, strlen (category)+1); strncpy(task->category, category, strlen(category)+1); - char name[200];//, alias[200], process_alias[200]; + //tracing task location based on host + __TRACE_task_location (task); + __TRACE_task_location_present (task); + TRACE_task_container (task, name, 200); //create container of type "task" to indicate behavior if (IS_TRACING_TASKS) pajeCreateContainer (MSG_get_clock(), name, "task", category, name); if (IS_TRACING_TASKS) pajePushState (MSG_get_clock(), "task-state", name, "created"); - - //tracing task location based on process/host - __TRACE_task_location (task); } /* MSG_task_create related function*/ @@ -94,9 +125,9 @@ void TRACE_msg_task_create (m_task_t task) /* MSG_task_execute related functions */ void TRACE_msg_task_execute_start (m_task_t task) { + char name[200]; if (!IS_TRACING || !IS_TRACED(task)) return; - char name[200]; TRACE_task_container (task, name, 200); if (IS_TRACING_TASKS) pajePushState (MSG_get_clock(), "task-state", name, "execute"); @@ -105,9 +136,9 @@ void TRACE_msg_task_execute_start (m_task_t task) void TRACE_msg_task_execute_end (m_task_t task) { + char name[200]; if (!IS_TRACING || !IS_TRACED(task)) return; - char name[200]; TRACE_task_container (task, name, 200); if (IS_TRACING_TASKS) pajePopState (MSG_get_clock(), "task-state", name); @@ -117,12 +148,15 @@ void TRACE_msg_task_execute_end (m_task_t task) /* MSG_task_destroy related functions */ void TRACE_msg_task_destroy (m_task_t task) { + char name[200]; if (!IS_TRACING || !IS_TRACED(task)) return; - char name[200]; TRACE_task_container (task, name, 200); if (IS_TRACING_TASKS) pajeDestroyContainer (MSG_get_clock(), "task", name); + //finish the location of this task + __TRACE_task_location_not_present (task); + //free category xbt_free (task->category); return; @@ -136,26 +170,34 @@ void TRACE_msg_task_get_start (void) void TRACE_msg_task_get_end (double start_time, m_task_t task) { + char name[200]; if (!IS_TRACING || !IS_TRACED(task)) return; - char name[200]; TRACE_task_container (task, name, 200); if (IS_TRACING_TASKS) pajePopState (MSG_get_clock(), "task-state", name); - //tracing task location based on process/host + __TRACE_msg_volume_finish (task); + __TRACE_task_location (task); + __TRACE_task_location_present (task); } /* MSG_task_put related functions */ int TRACE_msg_task_put_start (m_task_t task) { + char name[200]; if (!IS_TRACING || !IS_TRACED(task)) return 0; - char name[200]; TRACE_task_container (task, name, 200); if (IS_TRACING_TASKS) pajePopState (MSG_get_clock(), "task-state", name); if (IS_TRACING_TASKS) pajePushState (MSG_get_clock(), "task-state", name, "communicate"); + __TRACE_msg_volume_start (task); + + //trace task location grouped by host + __TRACE_task_location_not_present (task); + + //set current category __TRACE_current_category_set (task); return 1; }