-/* Copyright (c) 2010. The SimGrid Team.
+/* Copyright (c) 2010, 2012-2014. 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. */
+ * under the terms of the license (GNU LGPL) which comes with this package. */
#include "instr/instr_private.h"
-#include "mc/mc.h"
#ifdef HAVE_TRACING
#include "surf/surf_private.h"
-#include "surf/network_private.h"
#include "xbt/graph.h"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_routing, instr, "Tracing platform hierarchy");
-extern xbt_dict_t defined_types; /* from instr_interface.c */
-
static int platform_created = 0; /* indicate whether the platform file has been traced */
static xbt_dynar_t currentContainer = NULL; /* push and pop, used only in creation */
//create the link
static long long counter = 0;
- if(MC_is_active())
- MC_ignore_data_bss(&counter, sizeof(counter));
-
char key[INSTR_DEFAULT_STR_SIZE];
snprintf (key, INSTR_DEFAULT_STR_SIZE, "%lld", counter++);
new_pajeStartLink(SIMIX_get_clock(), father, link_type, src, "topology", key);
XBT_DEBUG (" linkContainers %s <-> %s", src->name, dst->name);
}
-static int graph_extraction_filter_out (container_t c1, container_t c2)
-{
- if (c1->kind == INSTR_LINK ||
- c1->kind == INSTR_SMPI ||
- c1->kind == INSTR_MSG_PROCESS ||
- c1->kind == INSTR_MSG_TASK ||
- (c2 && strcmp (c1->name, c2->name) == 0))
- return 1;
- else
- return 0;
-}
-
static void recursiveGraphExtraction (AS_t rc, container_t container, xbt_dict_t filter)
{
if (!TRACE_platform_topology()){
- XBT_DEBUG("Graph extracing disable by user.");
+ XBT_DEBUG("Graph extraction disabled by user.");
return;
}
- XBT_DEBUG ("Graph extraction for routing_component = %s", rc->name);
- if (!xbt_dict_is_empty(rc->routing_sons)){
+ XBT_DEBUG ("Graph extraction for routing_component = %s", surf_AS_get_name(rc));
+ if (!xbt_dict_is_empty(surf_AS_get_routing_sons(rc))){
xbt_dict_cursor_t cursor = NULL;
AS_t rc_son;
char *child_name;
//bottom-up recursion
- xbt_dict_foreach(rc->routing_sons, cursor, child_name, rc_son) {
- container_t child_container = xbt_dict_get (container->children, rc_son->name);
+ xbt_dict_foreach(surf_AS_get_routing_sons(rc), cursor, child_name, rc_son) {
+ container_t child_container = xbt_dict_get (container->children, surf_AS_get_name(rc_son));
recursiveGraphExtraction (rc_son, child_container, filter);
}
}
{
- xbt_graph_t graph = xbt_graph_new_graph (0, NULL);
+ xbt_graph_t graph = xbt_graph_new_graph (0, NULL);
xbt_dict_t nodes = xbt_dict_new_homogeneous(NULL);
xbt_dict_t edges = xbt_dict_new_homogeneous(NULL);
xbt_edge_t edge = NULL;
xbt_dict_cursor_t cursor = NULL;
char *edge_name;
- rc->get_graph(graph,nodes,edges,rc);
+ surf_AS_get_graph(rc, graph, nodes, edges);
xbt_dict_foreach(edges,cursor,edge_name,edge) {
linkContainers(PJ_container_get(edge->src->data), PJ_container_get(edge->dst->data), filter);
}
xbt_dict_free (&edges);
xbt_graph_free_graph(graph,xbt_free, xbt_free, NULL);
}
-
}
/*
container_t new = PJ_container_new (link_name, INSTR_LINK, father);
- if (TRACE_categorized() || TRACE_uncategorized() || TRACE_platform()){
+ if ((TRACE_categorized() || TRACE_uncategorized() || TRACE_platform()) && (! TRACE_disable_link())) {
type_t bandwidth = PJ_type_get_or_null ("bandwidth", new->type);
if (bandwidth == NULL){
bandwidth = PJ_type_variable_new ("bandwidth", NULL, new->type);
container_t father = *(container_t*)xbt_dynar_get_ptr(currentContainer, xbt_dynar_length(currentContainer)-1);
container_t new = PJ_container_new (host->id, INSTR_HOST, father);
- if (TRACE_categorized() || TRACE_uncategorized() || TRACE_platform()) {
+ if ((TRACE_categorized() || TRACE_uncategorized() || TRACE_platform()) && (! TRACE_disable_power())) {
type_t power = PJ_type_get_or_null ("power", new->type);
if (power == NULL){
power = PJ_type_variable_new ("power", NULL, new->type);
}
- new_pajeSetVariable (0, new, power, host->power_peak);
+
+ double current_power_state;
+ xbt_dynar_get_cpy(host->power_peak, host->pstate, ¤t_power_state);
+ new_pajeSetVariable (0, new, power, current_power_state);
}
if (TRACE_uncategorized()){
type_t power_used = PJ_type_get_or_null ("power_used", new->type);
currentContainer = NULL;
xbt_dict_t filter = xbt_dict_new_homogeneous(xbt_free);
XBT_DEBUG ("Starting graph extraction.");
- recursiveGraphExtraction (routing_platf->root, PJ_container_get_root(), filter);
+ recursiveGraphExtraction (surf_platf_get_root(routing_platf), PJ_container_get_root(), filter);
XBT_DEBUG ("Graph extraction finished.");
xbt_dict_free(&filter);
platform_created = 1;
static void recursiveXBTGraphExtraction (xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges,
AS_t rc, container_t container)
{
- if (!xbt_dict_is_empty(rc->routing_sons)){
+ if (!xbt_dict_is_empty(surf_AS_get_routing_sons(rc))){
xbt_dict_cursor_t cursor = NULL;
AS_t rc_son;
char *child_name;
//bottom-up recursion
- xbt_dict_foreach(rc->routing_sons, cursor, child_name, rc_son) {
- container_t child_container = xbt_dict_get (container->children, rc_son->name);
+ xbt_dict_foreach(surf_AS_get_routing_sons(rc), cursor, child_name, rc_son) {
+ container_t child_container = xbt_dict_get (container->children, surf_AS_get_name(rc_son));
recursiveXBTGraphExtraction (graph, nodes, edges, rc_son, child_container);
}
}
- rc->get_graph(graph,nodes,edges,rc);
+ surf_AS_get_graph(rc, graph, nodes, edges);
}
xbt_graph_t instr_routing_platform_graph (void)
xbt_graph_t ret = xbt_graph_new_graph (0, NULL);
xbt_dict_t nodes = xbt_dict_new_homogeneous(NULL);
xbt_dict_t edges = xbt_dict_new_homogeneous(NULL);
- recursiveXBTGraphExtraction (ret, nodes, edges, routing_platf->root, PJ_container_get_root());
+ recursiveXBTGraphExtraction (ret, nodes, edges, surf_platf_get_root(routing_platf), PJ_container_get_root());
xbt_dict_free (&nodes);
xbt_dict_free (&edges);
return ret;