Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Trace buffer is not to be handled by the format-dependent init functions
[simgrid.git] / src / instr / instr_config.c
index 1b1f1a3..6300219 100644 (file)
@@ -1,11 +1,12 @@
-/* Copyright (c) 2010. The SimGrid Team.
+/* Copyright (c) 2010-2013. 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. */
 
  * 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/instr_private.h"
 #include "instr/instr_private.h"
+#include "simgrid/sg_config.h"
+#include "surf/surf.h"
 
 #ifdef HAVE_TRACING
 
 
 #ifdef HAVE_TRACING
 
@@ -14,12 +15,18 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_config, instr, "Configuration");
 
 #define OPT_TRACING               "tracing"
 #define OPT_TRACING_PLATFORM      "tracing/platform"
 
 #define OPT_TRACING               "tracing"
 #define OPT_TRACING_PLATFORM      "tracing/platform"
+#define OPT_TRACING_TOPOLOGY      "tracing/platform/topology"
 #define OPT_TRACING_SMPI          "tracing/smpi"
 #define OPT_TRACING_SMPI_GROUP    "tracing/smpi/group"
 #define OPT_TRACING_SMPI_COMPUTING "tracing/smpi/computing"
 #define OPT_TRACING_SMPI          "tracing/smpi"
 #define OPT_TRACING_SMPI_GROUP    "tracing/smpi/group"
 #define OPT_TRACING_SMPI_COMPUTING "tracing/smpi/computing"
+#define OPT_TRACING_SMPI_INTERNALS "tracing/smpi/internals"
+#define OPT_TRACING_DISPLAY_SIZES  "tracing/smpi/display_sizes"
+#define OPT_TRACING_FORMAT        "tracing/smpi/format"
+#define OPT_TRACING_FORMAT_TI_ONEFILE "tracing/smpi/format/ti_one_file"
 #define OPT_TRACING_CATEGORIZED   "tracing/categorized"
 #define OPT_TRACING_UNCATEGORIZED "tracing/uncategorized"
 #define OPT_TRACING_MSG_PROCESS   "tracing/msg/process"
 #define OPT_TRACING_CATEGORIZED   "tracing/categorized"
 #define OPT_TRACING_UNCATEGORIZED "tracing/uncategorized"
 #define OPT_TRACING_MSG_PROCESS   "tracing/msg/process"
+#define OPT_TRACING_MSG_VM        "tracing/msg/vm"
 #define OPT_TRACING_FILENAME      "tracing/filename"
 #define OPT_TRACING_BUFFER        "tracing/buffer"
 #define OPT_TRACING_ONELINK_ONLY  "tracing/onelink_only"
 #define OPT_TRACING_FILENAME      "tracing/filename"
 #define OPT_TRACING_BUFFER        "tracing/buffer"
 #define OPT_TRACING_ONELINK_ONLY  "tracing/onelink_only"
@@ -27,41 +34,63 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_config, instr, "Configuration");
 #define OPT_TRACING_BASIC         "tracing/basic"
 #define OPT_TRACING_COMMENT       "tracing/comment"
 #define OPT_TRACING_COMMENT_FILE  "tracing/comment_file"
 #define OPT_TRACING_BASIC         "tracing/basic"
 #define OPT_TRACING_COMMENT       "tracing/comment"
 #define OPT_TRACING_COMMENT_FILE  "tracing/comment_file"
-#define OPT_TRIVA_UNCAT_CONF      "triva/uncategorized"
-#define OPT_TRIVA_CAT_CONF        "triva/categorized"
 #define OPT_VIVA_UNCAT_CONF      "viva/uncategorized"
 #define OPT_VIVA_CAT_CONF        "viva/categorized"
 #define OPT_VIVA_UNCAT_CONF      "viva/uncategorized"
 #define OPT_VIVA_CAT_CONF        "viva/categorized"
+#define OPT_TRACING_DISABLE_LINK        "tracing/disable_link"
+#define OPT_TRACING_DISABLE_POWER       "tracing/disable_power"
 
 static int trace_enabled;
 static int trace_platform;
 
 static int trace_enabled;
 static int trace_platform;
+static int trace_platform_topology;
 static int trace_smpi_enabled;
 static int trace_smpi_grouped;
 static int trace_smpi_computing;
 static int trace_smpi_enabled;
 static int trace_smpi_grouped;
 static int trace_smpi_computing;
+static int trace_view_internals;
 static int trace_categorized;
 static int trace_uncategorized;
 static int trace_msg_process_enabled;
 static int trace_categorized;
 static int trace_uncategorized;
 static int trace_msg_process_enabled;
+static int trace_msg_vm_enabled;
 static int trace_buffer;
 static int trace_onelink_only;
 static int trace_disable_destroy;
 static int trace_basic;
 static int trace_buffer;
 static int trace_onelink_only;
 static int trace_disable_destroy;
 static int trace_basic;
+static int trace_display_sizes = 0;
+static int trace_disable_link;
+static int trace_disable_power;
 
 static int trace_configured = 0;
 static int trace_active = 0;
 
 
 static int trace_configured = 0;
 static int trace_active = 0;
 
+
+
 static void TRACE_getopts(void)
 {
 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_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_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_boolean(_sg_cfg_set, OPT_TRACING);
+  trace_platform = xbt_cfg_get_boolean(_sg_cfg_set, OPT_TRACING_PLATFORM);
+  trace_platform_topology = xbt_cfg_get_boolean(_sg_cfg_set, OPT_TRACING_TOPOLOGY);
+  trace_smpi_enabled = xbt_cfg_get_boolean(_sg_cfg_set, OPT_TRACING_SMPI);
+  trace_smpi_grouped = xbt_cfg_get_boolean(_sg_cfg_set, OPT_TRACING_SMPI_GROUP);
+  trace_smpi_computing = xbt_cfg_get_boolean(_sg_cfg_set, OPT_TRACING_SMPI_COMPUTING);
+  trace_view_internals = xbt_cfg_get_boolean(_sg_cfg_set, OPT_TRACING_SMPI_INTERNALS);
+  trace_categorized = xbt_cfg_get_boolean(_sg_cfg_set, OPT_TRACING_CATEGORIZED);
+  trace_uncategorized = xbt_cfg_get_boolean(_sg_cfg_set, OPT_TRACING_UNCATEGORIZED);
+  trace_msg_process_enabled = xbt_cfg_get_boolean(_sg_cfg_set, OPT_TRACING_MSG_PROCESS);
+  trace_msg_vm_enabled = xbt_cfg_get_boolean(_sg_cfg_set, OPT_TRACING_MSG_VM);
+  trace_buffer = xbt_cfg_get_boolean(_sg_cfg_set, OPT_TRACING_BUFFER);
+  trace_onelink_only = xbt_cfg_get_boolean(_sg_cfg_set, OPT_TRACING_ONELINK_ONLY);
+  trace_disable_destroy = xbt_cfg_get_boolean(_sg_cfg_set, OPT_TRACING_DISABLE_DESTROY);
+  trace_basic = xbt_cfg_get_boolean(_sg_cfg_set, OPT_TRACING_BASIC);
+  trace_display_sizes = xbt_cfg_get_boolean(_sg_cfg_set, OPT_TRACING_DISPLAY_SIZES);
+  trace_disable_link = xbt_cfg_get_boolean(_sg_cfg_set, OPT_TRACING_DISABLE_LINK);
+  trace_disable_power = xbt_cfg_get_boolean(_sg_cfg_set, OPT_TRACING_DISABLE_POWER);
+}
+
+static 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()
 }
 
 int TRACE_start()
@@ -69,73 +98,123 @@ int TRACE_start()
   TRACE_getopts();
 
   // tracing system must be:
   TRACE_getopts();
 
   // tracing system must be:
-  //    - enabled (with --cfg=tracing:1)
+  //    - enabled (with --cfg=tracing:yes)
   //    - already configured (TRACE_global_init already called)
   //    - already configured (TRACE_global_init already called)
-  if (!(TRACE_is_enabled() && TRACE_is_configured())){
-    return 0;
-  }
-
-  XBT_DEBUG("Tracing starts");
-
-  /* open the trace file */
-  TRACE_paje_start();
+  if (TRACE_is_enabled() && TRACE_is_configured()) {
+    XBT_DEBUG("Tracing starts");
+
+    /* init the tracing module to generate the right output */
+    /* open internal buffer */
+    TRACE_init();
+
+    /* open the trace file(s) */
+    const char* format = sg_cfg_get_string(OPT_TRACING_FORMAT);
+    XBT_DEBUG("Tracing format %s\n", format);
+    if(!strcmp(format, "Paje")){
+      TRACE_paje_init();
+      TRACE_paje_start();
+    }else if (!strcmp(format, "TI")){
+      TRACE_TI_init();
+      TRACE_TI_start();
+    }else{
+      xbt_die("Unknown trace format :%s ", format);
+    }
 
 
-  /* activate trace */
-  if (trace_active == 1){
-    THROWF (tracing_error, 0, "Tracing is already active");
+    /* activate trace */
+    if (trace_active == 1) {
+      THROWF(tracing_error, 0, "Tracing is already active");
+    }
+    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);
+
+    if (TRACE_start_functions != NULL) {
+      void (*func) ();
+      unsigned int iter = xbt_dynar_length(TRACE_start_functions);
+      xbt_dynar_foreach(TRACE_start_functions, iter, func) {
+        func();
+      }
+    }
   }
   }
-  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_link_variables = xbt_dict_new_homogeneous (xbt_free);
-  TRACE_surf_alloc();
-  TRACE_smpi_alloc();
+  xbt_dynar_free(&TRACE_start_functions);
   return 0;
 }
 
   return 0;
 }
 
+static xbt_dynar_t TRACE_end_functions = NULL;
+void TRACE_add_end_function(void (*func) (void))
+{
+  if (TRACE_end_functions == NULL)
+    TRACE_end_functions = xbt_dynar_new(sizeof(void (*)(void)), NULL);
+  xbt_dynar_push(TRACE_end_functions, &func);
+}
+
 int TRACE_end()
 {
 int TRACE_end()
 {
-  if (!trace_active)
-    return 1;
-
-  TRACE_generate_triva_uncat_conf();
-  TRACE_generate_triva_cat_conf();
-  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(&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(&user_vm_variables);
+    xbt_dict_free(&declared_marks);
+    xbt_dict_free(&created_categories);
+
+    /* close the trace files */
+    const char* format = sg_cfg_get_string(OPT_TRACING_FORMAT);
+    XBT_DEBUG("Tracing format %s\n", format);
+    if(!strcmp(format, "Paje")){
+      TRACE_paje_end();
+    }else if (!strcmp(format, "TI")){
+      TRACE_TI_end();
+    }else{
+      xbt_die("Unknown trace format :%s ", format);
+    }
+    /* close internal buffer */
+    TRACE_finalize();
+    /* de-activate trace */
+    trace_active = 0;
+    XBT_DEBUG("Tracing is off");
+    XBT_DEBUG("Tracing system is shutdown");
+  }
+  xbt_dynar_free(&TRACE_start_functions); /* useful when exiting early */
+  xbt_dynar_free(&TRACE_end_functions);
+  return retval;
 }
 
 int TRACE_needs_platform (void)
 {
   return TRACE_msg_process_is_enabled() ||
 }
 
 int TRACE_needs_platform (void)
 {
   return TRACE_msg_process_is_enabled() ||
+         TRACE_msg_vm_is_enabled() ||
          TRACE_categorized() ||
          TRACE_uncategorized() ||
          TRACE_platform () ||
          TRACE_categorized() ||
          TRACE_uncategorized() ||
          TRACE_platform () ||
@@ -152,6 +231,11 @@ int TRACE_platform(void)
   return trace_platform;
 }
 
   return trace_platform;
 }
 
+int TRACE_platform_topology(void)
+{
+  return trace_platform_topology;
+}
+
 int TRACE_is_configured(void)
 {
   return trace_configured;
 int TRACE_is_configured(void)
 {
   return trace_configured;
@@ -173,6 +257,10 @@ int TRACE_smpi_is_computing(void)
   return trace_smpi_computing;
 }
 
   return trace_smpi_computing;
 }
 
+int TRACE_smpi_view_internals(void)
+{
+  return trace_view_internals;
+}
 
 int TRACE_categorized (void)
 {
 
 int TRACE_categorized (void)
 {
@@ -189,6 +277,21 @@ int TRACE_msg_process_is_enabled(void)
   return trace_msg_process_enabled && TRACE_is_enabled();
 }
 
   return trace_msg_process_enabled && TRACE_is_enabled();
 }
 
+int TRACE_msg_vm_is_enabled(void)
+{
+  return trace_msg_vm_enabled && TRACE_is_enabled();
+}
+
+int TRACE_disable_link(void)
+{
+  return trace_disable_link && TRACE_is_enabled();
+}
+
+int TRACE_disable_power(void)
+{
+  return trace_disable_power && TRACE_is_enabled();
+}
+
 int TRACE_buffer (void)
 {
   return trace_buffer && TRACE_is_enabled();
 int TRACE_buffer (void)
 {
   return trace_buffer && TRACE_is_enabled();
@@ -209,175 +312,189 @@ int TRACE_basic (void)
   return trace_basic && TRACE_is_enabled();
 }
 
   return trace_basic && TRACE_is_enabled();
 }
 
-char *TRACE_get_comment (void)
-{
-  return xbt_cfg_get_string(_surf_cfg_set, OPT_TRACING_COMMENT);
-}
-
-char *TRACE_get_comment_file (void)
+int TRACE_display_sizes (void)
 {
 {
-  return xbt_cfg_get_string(_surf_cfg_set, OPT_TRACING_COMMENT_FILE);
+   return trace_display_sizes && trace_smpi_enabled && TRACE_is_enabled();
 }
 
 }
 
-char *TRACE_get_filename(void)
+char *TRACE_get_comment (void)
 {
 {
-  return xbt_cfg_get_string(_surf_cfg_set, OPT_TRACING_FILENAME);
+  return xbt_cfg_get_string(_sg_cfg_set, OPT_TRACING_COMMENT);
 }
 
 }
 
-char *TRACE_get_triva_uncat_conf (void)
+char *TRACE_get_comment_file (void)
 {
 {
-  return xbt_cfg_get_string(_surf_cfg_set, OPT_TRIVA_UNCAT_CONF);
+  return xbt_cfg_get_string(_sg_cfg_set, OPT_TRACING_COMMENT_FILE);
 }
 
 }
 
-char *TRACE_get_triva_cat_conf (void)
+char *TRACE_get_filename(void)
 {
 {
-  return xbt_cfg_get_string(_surf_cfg_set, OPT_TRIVA_CAT_CONF);
+  return xbt_cfg_get_string(_sg_cfg_set, OPT_TRACING_FILENAME);
 }
 
 char *TRACE_get_viva_uncat_conf (void)
 {
 }
 
 char *TRACE_get_viva_uncat_conf (void)
 {
-  return xbt_cfg_get_string(_surf_cfg_set, OPT_VIVA_UNCAT_CONF);
+  return xbt_cfg_get_string(_sg_cfg_set, OPT_VIVA_UNCAT_CONF);
 }
 
 char *TRACE_get_viva_cat_conf (void)
 {
 }
 
 char *TRACE_get_viva_cat_conf (void)
 {
-  return xbt_cfg_get_string(_surf_cfg_set, OPT_VIVA_CAT_CONF);
+  return xbt_cfg_get_string(_sg_cfg_set, OPT_VIVA_CAT_CONF);
 }
 
 void TRACE_global_init(int *argc, char **argv)
 {
   /* name of the tracefile */
 }
 
 void TRACE_global_init(int *argc, char **argv)
 {
   /* name of the tracefile */
-  char *default_tracing_filename = xbt_strdup("simgrid.trace");
-  xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_FILENAME,
+  xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_FILENAME,
                    "Trace file created by the instrumented SimGrid.",
                    "Trace file created by the instrumented SimGrid.",
-                   xbt_cfgelm_string, &default_tracing_filename, 1, 1,
-                   NULL, NULL);
+                   xbt_cfgelm_string, 1, 1, NULL, NULL);
+  xbt_cfg_setdefault_string(_sg_cfg_set, OPT_TRACING_FILENAME, "simgrid.trace");
 
   /* tracing */
 
   /* tracing */
-  int default_tracing = 0;
-  xbt_cfg_register(&_surf_cfg_set, OPT_TRACING,
+  xbt_cfg_register(&_sg_cfg_set, OPT_TRACING,
                    "Enable Tracing.",
                    "Enable Tracing.",
-                   xbt_cfgelm_int, &default_tracing, 0, 1,
-                   NULL, NULL);
+                   xbt_cfgelm_boolean, 0, 1, NULL, NULL);
+  xbt_cfg_setdefault_boolean(_sg_cfg_set, OPT_TRACING, "no");
 
   /* register platform in the trace */
 
   /* register platform in the trace */
-  int default_tracing_platform = 0;
-  xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_PLATFORM,
+  xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_PLATFORM,
                    "Register the platform in the trace as a hierarchy.",
                    "Register the platform in the trace as a hierarchy.",
-                   xbt_cfgelm_int, &default_tracing_platform, 0, 1,
-                   NULL, NULL);
+                   xbt_cfgelm_boolean, 0, 1, NULL, NULL);
+  xbt_cfg_setdefault_boolean(_sg_cfg_set, OPT_TRACING_PLATFORM, "no");
+
+  /* register platform in the trace */
+  xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_TOPOLOGY,
+                   "Register the platform topology in the trace as a graph.",
+                   xbt_cfgelm_boolean, 0, 1, NULL, NULL);
+  xbt_cfg_setdefault_boolean(_sg_cfg_set, OPT_TRACING_TOPOLOGY, "yes");
 
   /* smpi */
 
   /* smpi */
-  int default_tracing_smpi = 0;
-  xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_SMPI,
+  xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_SMPI,
                    "Tracing of the SMPI interface.",
                    "Tracing of the SMPI interface.",
-                   xbt_cfgelm_int, &default_tracing_smpi, 0, 1,
-                   NULL, NULL);
+                   xbt_cfgelm_boolean, 0, 1, NULL, NULL);
+  xbt_cfg_setdefault_boolean(_sg_cfg_set, OPT_TRACING_SMPI, "no");
 
   /* smpi grouped */
 
   /* smpi grouped */
-  int default_tracing_smpi_grouped = 0;
-  xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_SMPI_GROUP,
+  xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_SMPI_GROUP,
                    "Group MPI processes by host.",
                    "Group MPI processes by host.",
-                   xbt_cfgelm_int, &default_tracing_smpi_grouped, 0, 1,
-                   NULL, NULL);
+                   xbt_cfgelm_boolean, 0, 1, NULL, NULL);
+  xbt_cfg_setdefault_boolean(_sg_cfg_set, OPT_TRACING_SMPI_GROUP, "no");
 
   /* smpi computing */
 
   /* smpi computing */
-  int default_tracing_smpi_computing = 0;
-  xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_SMPI_COMPUTING,
+  xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_SMPI_COMPUTING,
                    "Generate states for timing out of SMPI parts of the application",
                    "Generate states for timing out of SMPI parts of the application",
-                   xbt_cfgelm_int, &default_tracing_smpi_computing, 0, 1,
-                   NULL, NULL);
+                   xbt_cfgelm_boolean, 0, 1, NULL, NULL);
+  xbt_cfg_setdefault_boolean(_sg_cfg_set, OPT_TRACING_SMPI_COMPUTING, "no");
+
+  /* smpi internals */
+  xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_SMPI_INTERNALS,
+                   "View internal messages sent by Collective communications in SMPI",
+                   xbt_cfgelm_boolean, 0, 1, NULL, NULL);
+  xbt_cfg_setdefault_boolean(_sg_cfg_set, OPT_TRACING_SMPI_INTERNALS, "no");
 
   /* tracing categorized resource utilization traces */
 
   /* tracing categorized resource utilization traces */
-  int default_tracing_categorized = 0;
-  xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_CATEGORIZED,
+  xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_CATEGORIZED,
                    "Tracing categorized resource utilization of hosts and links.",
                    "Tracing categorized resource utilization of hosts and links.",
-                   xbt_cfgelm_int, &default_tracing_categorized, 0, 1,
-                   NULL, NULL);
+                   xbt_cfgelm_boolean, 0, 1, NULL, NULL);
+  xbt_cfg_setdefault_boolean(_sg_cfg_set, OPT_TRACING_CATEGORIZED, "no");
 
   /* tracing uncategorized resource utilization */
 
   /* tracing uncategorized resource utilization */
-  int default_tracing_uncategorized = 0;
-  xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_UNCATEGORIZED,
+  xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_UNCATEGORIZED,
                    "Tracing uncategorized resource utilization of hosts and links.",
                    "Tracing uncategorized resource utilization of hosts and links.",
-                   xbt_cfgelm_int, &default_tracing_uncategorized, 0, 1,
-                   NULL, NULL);
+                   xbt_cfgelm_boolean, 0, 1, NULL, NULL);
+  xbt_cfg_setdefault_boolean(_sg_cfg_set, OPT_TRACING_UNCATEGORIZED, "no");
+
+  /* msg process */
+  xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_MSG_PROCESS,
+                   "Tracing of MSG process behavior.",
+                   xbt_cfgelm_boolean, 0, 1, NULL, NULL);
+  xbt_cfg_setdefault_boolean(_sg_cfg_set, OPT_TRACING_MSG_PROCESS, "no");
 
   /* msg process */
 
   /* msg process */
-  int default_tracing_msg_process = 0;
-  xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_MSG_PROCESS,
+  xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_MSG_VM,
                    "Tracing of MSG process behavior.",
                    "Tracing of MSG process behavior.",
-                   xbt_cfgelm_int, &default_tracing_msg_process, 0, 1,
-                   NULL, NULL);
+                   xbt_cfgelm_boolean, 0, 1, NULL, NULL);
+  xbt_cfg_setdefault_boolean(_sg_cfg_set, OPT_TRACING_MSG_VM, "no");
+
+  /* disable tracing link */
+  xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_DISABLE_LINK,
+                   "Do not trace link bandwidth and latency.",
+                   xbt_cfgelm_boolean, 0, 1, NULL, NULL);
+  xbt_cfg_setdefault_boolean(_sg_cfg_set, OPT_TRACING_DISABLE_LINK, "no");
+
+  /* disable tracing link */
+  xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_DISABLE_POWER,
+                   "Do not trace host power.",
+                   xbt_cfgelm_boolean, 0, 1, NULL, NULL);
+  xbt_cfg_setdefault_boolean(_sg_cfg_set, OPT_TRACING_DISABLE_POWER, "no");
+
 
   /* tracing buffer */
 
   /* tracing buffer */
-  int default_buffer = 1;
-  xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_BUFFER,
+  xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_BUFFER,
                    "Buffer trace events to put them in temporal order.",
                    "Buffer trace events to put them in temporal order.",
-                   xbt_cfgelm_int, &default_buffer, 0, 1,
-                   NULL, NULL);
+                   xbt_cfgelm_boolean, 0, 1, NULL, NULL);
+  xbt_cfg_setdefault_boolean(_sg_cfg_set, OPT_TRACING_BUFFER, "yes");
 
   /* tracing one link only */
 
   /* tracing one link only */
-  int default_onelink_only = 0;
-  xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_ONELINK_ONLY,
+  xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_ONELINK_ONLY,
                    "Use only routes with one link to trace platform.",
                    "Use only routes with one link to trace platform.",
-                   xbt_cfgelm_int, &default_onelink_only, 0, 1,
-                   NULL, NULL);
+                   xbt_cfgelm_boolean, 0, 1, NULL, NULL);
+  xbt_cfg_setdefault_boolean(_sg_cfg_set, OPT_TRACING_ONELINK_ONLY, "no");
 
   /* disable destroy */
 
   /* disable destroy */
-  int default_disable_destroy = 0;
-  xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_DISABLE_DESTROY,
+  xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_DISABLE_DESTROY,
                    "Disable platform containers destruction.",
                    "Disable platform containers destruction.",
-                   xbt_cfgelm_int, &default_disable_destroy, 0, 1,
-                   NULL, NULL);
+                   xbt_cfgelm_boolean, 0, 1, NULL, NULL);
+  xbt_cfg_setdefault_boolean(_sg_cfg_set, OPT_TRACING_DISABLE_DESTROY, "no");
 
   /* basic -- Avoid extended events (impoverished trace file) */
 
   /* basic -- Avoid extended events (impoverished trace file) */
-  int default_basic = 0;
-  xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_BASIC,
+  xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_BASIC,
                    "Avoid extended events (impoverished trace file).",
                    "Avoid extended events (impoverished trace file).",
-                   xbt_cfgelm_int, &default_basic, 0, 1,
-                   NULL, NULL);
+                   xbt_cfgelm_boolean, 0, 1, NULL, NULL);
+  xbt_cfg_setdefault_boolean(_sg_cfg_set, OPT_TRACING_BASIC, "no");
+
+  /* display_sizes -- Extended events with message size information */
+  xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_DISPLAY_SIZES,
+                   "(smpi only for now) Extended events with message size information",
+                   xbt_cfgelm_boolean, 0, 1, NULL, NULL);
+  xbt_cfg_setdefault_boolean(_sg_cfg_set, OPT_TRACING_DISPLAY_SIZES, "no");
+
+  /* format -- Switch the ouput format of Tracing */
+  xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_FORMAT,
+                   "(smpi only for now) Switch the ouput format of Tracing",
+                   xbt_cfgelm_string, 1, 1, NULL, NULL);
+  xbt_cfg_setdefault_string(_sg_cfg_set, OPT_TRACING_FORMAT, "Paje");
+
+
+  /* format -- Switch the ouput format of Tracing */
+  xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_FORMAT_TI_ONEFILE,
+                   "(smpi only for now) For replay format only : output to one file only",
+                   xbt_cfgelm_boolean, 1, 1, NULL, NULL);
+  xbt_cfg_setdefault_boolean(_sg_cfg_set, OPT_TRACING_FORMAT_TI_ONEFILE, "no");
 
   /* comment */
 
   /* comment */
-  char *default_tracing_comment = xbt_strdup ("");
-  xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_COMMENT,
+  xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_COMMENT,
                    "Comment to be added on the top of the trace file.",
                    "Comment to be added on the top of the trace file.",
-                   xbt_cfgelm_string, &default_tracing_comment, 1, 1,
-                   NULL, NULL);
+                   xbt_cfgelm_string, 1, 1, NULL, NULL);
+  xbt_cfg_setdefault_string(_sg_cfg_set, OPT_TRACING_COMMENT, "");
 
   /* comment_file */
 
   /* comment_file */
-  char *default_tracing_comment_file = xbt_strdup ("");
-  xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_COMMENT_FILE,
+  xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_COMMENT_FILE,
                    "The contents of the file are added to the top of the trace file as comment.",
                    "The contents of the file are added to the top of the trace file as comment.",
-                   xbt_cfgelm_string, &default_tracing_comment_file, 1, 1,
-                   NULL, NULL);
-
-  /* Triva graph configuration for uncategorized tracing */
-  char *default_triva_uncat_conf_file = xbt_strdup ("");
-  xbt_cfg_register(&_surf_cfg_set, OPT_TRIVA_UNCAT_CONF,
-                   "Triva Graph configuration file for uncategorized resource utilization traces.",
-                   xbt_cfgelm_string, &default_triva_uncat_conf_file, 1, 1,
-                   NULL, NULL);
-
-  /* Triva graph configuration for uncategorized tracing */
-  char *default_triva_cat_conf_file = xbt_strdup ("");
-  xbt_cfg_register(&_surf_cfg_set, OPT_TRIVA_CAT_CONF,
-                   "Triva Graph configuration file for categorized resource utilization traces.",
-                   xbt_cfgelm_string, &default_triva_cat_conf_file, 1, 1,
-                   NULL, NULL);
+                   xbt_cfgelm_string, 1, 1, NULL, NULL);
+  xbt_cfg_setdefault_string(_sg_cfg_set, OPT_TRACING_COMMENT_FILE, "");
 
   /* Viva graph configuration for uncategorized tracing */
 
   /* Viva graph configuration for uncategorized tracing */
-  char *default_viva_uncat_conf_file = xbt_strdup ("");
-  xbt_cfg_register(&_surf_cfg_set, OPT_VIVA_UNCAT_CONF,
+  xbt_cfg_register(&_sg_cfg_set, OPT_VIVA_UNCAT_CONF,
                    "Viva Graph configuration file for uncategorized resource utilization traces.",
                    "Viva Graph configuration file for uncategorized resource utilization traces.",
-                   xbt_cfgelm_string, &default_viva_uncat_conf_file, 1, 1,
-                   NULL, NULL);
+                   xbt_cfgelm_string, 1, 1, NULL, NULL);
+  xbt_cfg_setdefault_string(_sg_cfg_set, OPT_VIVA_UNCAT_CONF, "");
 
   /* Viva graph configuration for uncategorized tracing */
 
   /* Viva graph configuration for uncategorized tracing */
-  char *default_viva_cat_conf_file = xbt_strdup ("");
-  xbt_cfg_register(&_surf_cfg_set, OPT_VIVA_CAT_CONF,
+  xbt_cfg_register(&_sg_cfg_set, OPT_VIVA_CAT_CONF,
                    "Viva Graph configuration file for categorized resource utilization traces.",
                    "Viva Graph configuration file for categorized resource utilization traces.",
-                   xbt_cfgelm_string, &default_viva_cat_conf_file, 1, 1,
-                   NULL, NULL);
+                   xbt_cfgelm_string, 1, 1, NULL, NULL);
+  xbt_cfg_setdefault_string(_sg_cfg_set, OPT_VIVA_CAT_CONF, "");
 
   /* instrumentation can be considered configured now */
   trace_configured = 1;
 
   /* instrumentation can be considered configured now */
   trace_configured = 1;
@@ -414,9 +531,10 @@ void TRACE_help (int detailed)
       detailed);
   print_line (OPT_TRACING_FILENAME, "Filename to register traces",
       "  A file with this name will be created to register the simulation. The file\n"
       detailed);
   print_line (OPT_TRACING_FILENAME, "Filename to register traces",
       "  A file with this name will be created to register the simulation. The file\n"
-      "  is in the Paje format and can be analyzed using Triva or Paje visualization\n"
+      "  is in the Paje format and can be analyzed using Viva, Paje, and PajeNG visualization\n"
       "  tools. More information can be found in these webpages:\n"
       "  tools. More information can be found in these webpages:\n"
-      "     http://triva.gforge.inria.fr/\n"
+      "     http://github.com/schnorr/viva/\n"
+      "     http://github.com/schnorr/pajeng/\n"
       "     http://paje.sourceforge.net/",
       detailed);
   print_line (OPT_TRACING_SMPI, "Trace the MPI Interface (SMPI)",
       "     http://paje.sourceforge.net/",
       detailed);
   print_line (OPT_TRACING_SMPI, "Trace the MPI Interface (SMPI)",
@@ -433,6 +551,9 @@ void TRACE_help (int detailed)
       "  This option aims at tracing computations in the application, outside SMPI\n"
       "  to allow further study of simulated or real computation time",
       detailed);
       "  This option aims at tracing computations in the application, outside SMPI\n"
       "  to allow further study of simulated or real computation time",
       detailed);
+  print_line (OPT_TRACING_SMPI_INTERNALS, "Generates tracing events corresponding",
+      "  to point-to-point messages sent by collective communications",
+      detailed);
   print_line (OPT_TRACING_MSG_PROCESS, "Trace processes behavior (MSG)",
       "  This option only has effect if this simulator is MSG-based. It traces the\n"
       "  behavior of all categorized MSG processes, grouping them by hosts. This option\n"
   print_line (OPT_TRACING_MSG_PROCESS, "Trace processes behavior (MSG)",
       "  This option only has effect if this simulator is MSG-based. It traces the\n"
       "  behavior of all categorized MSG processes, grouping them by hosts. This option\n"
@@ -463,26 +584,25 @@ void TRACE_help (int detailed)
       "  trace. Keep in mind that the trace might be incomplete, without all the\n"
       "  information that would be registered otherwise.",
       detailed);
       "  trace. Keep in mind that the trace might be incomplete, without all the\n"
       "  information that would be registered otherwise.",
       detailed);
+  print_line (OPT_TRACING_DISPLAY_SIZES, "Only works for SMPI now. Add message size information",
+      "Message size (in bytes) is added to links, and to states. For collectives, the displayed value \n"
+      "is the more relevant to the collective (total sent by the process, usually)",
+      detailed);
+  print_line (OPT_TRACING_FORMAT, "Only works for SMPI now. Switch output format",
+      "Default format is Paje. Time independent traces are also supported, \n"
+      "to output traces that can later be used by the trace replay tool",
+      detailed);
+  print_line (OPT_TRACING_FORMAT_TI_ONEFILE, "Only works for SMPI now, and TI output format",
+      "By default, each process outputs to a separate file, inside a filename_files folder \n"
+      "By setting this option to yes, all processes will output to only one file \n"
+      "This is meant to avoid opening thousands of files with large simulations",
+      detailed);
   print_line (OPT_TRACING_COMMENT, "Comment to be added on the top of the trace file.",
       "  Use this to add a comment line to the top of the trace file.",
       detailed);
   print_line (OPT_TRACING_COMMENT_FILE, "File contents added to trace file as comment.",
       "  Use this to add the contents of a file to the top of the trace file as comment.",
       detailed);
   print_line (OPT_TRACING_COMMENT, "Comment to be added on the top of the trace file.",
       "  Use this to add a comment line to the top of the trace file.",
       detailed);
   print_line (OPT_TRACING_COMMENT_FILE, "File contents added to trace file as comment.",
       "  Use this to add the contents of a file to the top of the trace file as comment.",
       detailed);
-  print_line (OPT_TRIVA_UNCAT_CONF, "Generate graph configuration for Triva",
-      "  This option can be used in all types of simulators build with SimGrid\n"
-      "  to generate a uncategorized resource utilization graph to be used as\n"
-      "  configuration for the Triva visualization analysis. This option\n"
-      "  can be used with tracing/categorized:1 and tracing:1 options to\n"
-      "  analyze an unmodified simulator before changing it to contain\n"
-      "  categories.",
-      detailed);
-  print_line (OPT_TRIVA_CAT_CONF, "generate uncategorized graph configuration for Triva",
-      "  This option can be used if this simulator uses tracing categories\n"
-      "  in its code. The file specified by this option holds a graph configuration\n"
-      "  file for the Triva visualization tool that can be used to analyze a categorized\n"
-      "  resource utilization.",
-      detailed);
   print_line (OPT_VIVA_UNCAT_CONF, "Generate a graph configuration for Viva",
       "  This option can be used in all types of simulators build with SimGrid\n"
       "  to generate a uncategorized resource utilization graph to be used as\n"
   print_line (OPT_VIVA_UNCAT_CONF, "Generate a graph configuration for Viva",
       "  This option can be used in all types of simulators build with SimGrid\n"
       "  to generate a uncategorized resource utilization graph to be used as\n"
@@ -497,6 +617,12 @@ void TRACE_help (int detailed)
       "  file for the Viva visualization tool that can be used to analyze a categorized\n"
       "  resource utilization.",
       detailed);
       "  file for the Viva visualization tool that can be used to analyze a categorized\n"
       "  resource utilization.",
       detailed);
+  print_line (OPT_TRACING_TOPOLOGY, "Register the platform topology as a graph",
+        "  This option (enabled by default) can be used to disable the tracing of\n"
+        "  the platform topology in the trace file. Sometimes, such task is really\n"
+        "  time consuming, since it must get the route from each host ot other hosts\n"
+        "  within the same Autonomous System (AS).",
+        detailed);
 }
 
 static void output_types (const char *name, xbt_dynar_t types, FILE *file)
 }
 
 static void output_types (const char *name, xbt_dynar_t types, FILE *file)
@@ -614,16 +740,6 @@ static void generate_cat_configuration (const char *output, const char *name, in
   }
 }
 
   }
 }
 
-void TRACE_generate_triva_uncat_conf (void)
-{
-  generate_uncat_configuration (TRACE_get_triva_uncat_conf (), "triva", 1);
-}
-
-void TRACE_generate_triva_cat_conf (void)
-{
-  generate_cat_configuration (TRACE_get_triva_cat_conf(), "triva", 1);
-}
-
 void TRACE_generate_viva_uncat_conf (void)
 {
   generate_uncat_configuration (TRACE_get_viva_uncat_conf (), "viva", 0);
 void TRACE_generate_viva_uncat_conf (void)
 {
   generate_uncat_configuration (TRACE_get_viva_uncat_conf (), "viva", 0);
@@ -667,6 +783,7 @@ void instr_resume_tracing (void)
 
 #undef OPT_TRACING
 #undef OPT_TRACING_PLATFORM
 
 #undef OPT_TRACING
 #undef OPT_TRACING_PLATFORM
+#undef OPT_TRACING_TOPOLOGY
 #undef OPT_TRACING_SMPI
 #undef OPT_TRACING_SMPI_GROUP
 #undef OPT_TRACING_CATEGORIZED
 #undef OPT_TRACING_SMPI
 #undef OPT_TRACING_SMPI_GROUP
 #undef OPT_TRACING_CATEGORIZED
@@ -679,8 +796,6 @@ void instr_resume_tracing (void)
 #undef OPT_TRACING_BASIC
 #undef OPT_TRACING_COMMENT
 #undef OPT_TRACING_COMMENT_FILE
 #undef OPT_TRACING_BASIC
 #undef OPT_TRACING_COMMENT
 #undef OPT_TRACING_COMMENT_FILE
-#undef OPT_TRIVA_UNCAT_CONF
-#undef OPT_TRIVA_CAT_CONF
 #undef OPT_VIVA_UNCAT_CONF
 #undef OPT_VIVA_CAT_CONF
 
 #undef OPT_VIVA_UNCAT_CONF
 #undef OPT_VIVA_CAT_CONF