From a282cd526f86a0a40d53e51967237697f7291389 Mon Sep 17 00:00:00 2001 From: mquinson Date: Wed, 12 Dec 2007 20:29:53 +0000 Subject: [PATCH] Finish the code cleanup by killing completely the KCCFLN05 model (rip, crappy model) git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@5122 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- src/Makefile.am | 2 +- src/Makefile.in | 50 +- src/surf/workstation_KCCFLN05.c | 1416 ------------------------------- 3 files changed, 25 insertions(+), 1443 deletions(-) delete mode 100644 src/surf/workstation_KCCFLN05.c diff --git a/src/Makefile.am b/src/Makefile.am index 78f465906f..c6dccb36f1 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -171,7 +171,7 @@ SURF_SRC= \ surf/surfxml_parse.c \ surf/cpu.c surf/network.c surf/workstation.c \ surf/surf_timer.c \ - surf/workstation_KCCFLN05.c surf/workstation_ptask_L07.c \ + surf/workstation_ptask_L07.c \ xbt/xbt_sg_stubs.c if CONTEXT_THREADS diff --git a/src/Makefile.in b/src/Makefile.in index 1e81ed6661..638e8c7656 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -132,26 +132,26 @@ am__libsimgrid_la_SOURCES_DIST = xbt/snprintf.c xbt/xbt_str.c \ surf/fair_bottleneck.c surf/lagrange.c surf/trace_mgr.c \ surf/random_mgr.c surf/surf.c surf/surfxml_parse.c surf/cpu.c \ surf/network.c surf/workstation.c surf/surf_timer.c \ - xbt/xbt_sg_stubs.c xbt/xbt_os_thread.c \ - xbt/xbt_thread_context.c xbt/xbt_ucontext.c \ - surf/gtnets/gtnets_simulator.cc surf/gtnets/gtnets_topology.cc \ - surf/gtnets/gtnets_interface.cc surf/network_gtnets.c \ - surf/sdp.c simix/smx_global.c simix/smx_deployment.c \ - simix/smx_config.c simix/smx_environment.c simix/smx_host.c \ - simix/smx_process.c simix/smx_action.c simix/smx_synchro.c \ - xbt/xbt_context.c msg/msg_config.c msg/task.c msg/host.c \ - msg/m_process.c msg/gos.c msg/global.c msg/environment.c \ - msg/deployment.c simdag/sd_global.c simdag/sd_link.c \ - simdag/sd_task.c simdag/sd_workstation.c gras/gras.c \ - gras/Transport/transport.c gras/Transport/transport_private.h \ - gras/Msg/gras_msg_mod.c gras/Msg/gras_msg_types.c \ - gras/Msg/gras_msg_exchange.c gras/Msg/gras_msg_listener.c \ - gras/Msg/rpc.c gras/Msg/timer.c gras/Msg/msg_interface.h \ - gras/Msg/msg_private.h gras/Virtu/process.c \ - gras/Virtu/gras_module.c gras/DataDesc/ddt_create.c \ - gras/DataDesc/ddt_convert.c gras/DataDesc/ddt_exchange.c \ - gras/DataDesc/cbps.c gras/DataDesc/datadesc.c \ - gras/DataDesc/datadesc_interface.h \ + surf/workstation_ptask_L07.c xbt/xbt_sg_stubs.c \ + xbt/xbt_os_thread.c xbt/xbt_thread_context.c \ + xbt/xbt_ucontext.c surf/gtnets/gtnets_simulator.cc \ + surf/gtnets/gtnets_topology.cc surf/gtnets/gtnets_interface.cc \ + surf/network_gtnets.c surf/sdp.c simix/smx_global.c \ + simix/smx_deployment.c simix/smx_config.c \ + simix/smx_environment.c simix/smx_host.c simix/smx_process.c \ + simix/smx_action.c simix/smx_synchro.c xbt/xbt_context.c \ + msg/msg_config.c msg/task.c msg/host.c msg/m_process.c \ + msg/gos.c msg/global.c msg/environment.c msg/deployment.c \ + simdag/sd_global.c simdag/sd_link.c simdag/sd_task.c \ + simdag/sd_workstation.c gras/gras.c gras/Transport/transport.c \ + gras/Transport/transport_private.h gras/Msg/gras_msg_mod.c \ + gras/Msg/gras_msg_types.c gras/Msg/gras_msg_exchange.c \ + gras/Msg/gras_msg_listener.c gras/Msg/rpc.c gras/Msg/timer.c \ + gras/Msg/msg_interface.h gras/Msg/msg_private.h \ + gras/Virtu/process.c gras/Virtu/gras_module.c \ + gras/DataDesc/ddt_create.c gras/DataDesc/ddt_convert.c \ + gras/DataDesc/ddt_exchange.c gras/DataDesc/cbps.c \ + gras/DataDesc/datadesc.c gras/DataDesc/datadesc_interface.h \ gras/DataDesc/datadesc_private.h gras/DataDesc/ddt_parse.c \ gras/DataDesc/ddt_parse.yy.c gras/DataDesc/ddt_parse.yy.h \ gras/Transport/sg_transport.c \ @@ -169,9 +169,8 @@ am__libsimgrid_la_SOURCES_DIST = xbt/snprintf.c xbt/xbt_str.c \ @CONTEXT_THREADS_FALSE@am__objects_7 = xbt_ucontext.lo am__objects_8 = maxmin.lo fair_bottleneck.lo lagrange.lo trace_mgr.lo \ random_mgr.lo surf.lo surfxml_parse.lo cpu.lo network.lo \ - workstation.lo surf_timer.lo \ - workstation_ptask_L07.lo xbt_sg_stubs.lo $(am__objects_6) \ - $(am__objects_7) + workstation.lo surf_timer.lo workstation_ptask_L07.lo \ + xbt_sg_stubs.lo $(am__objects_6) $(am__objects_7) am__objects_9 = gtnets_simulator.lo gtnets_topology.lo \ gtnets_interface.lo network_gtnets.lo @HAVE_GTNETS_TRUE@am__objects_10 = $(am__objects_9) @@ -500,8 +499,8 @@ SURF_SRC = surf/maxmin.c surf/fair_bottleneck.c surf/lagrange.c \ surf/trace_mgr.c surf/random_mgr.c surf/surf.c \ surf/surfxml_parse.c surf/cpu.c surf/network.c \ surf/workstation.c surf/surf_timer.c \ - surf/workstation_ptask_L07.c \ - xbt/xbt_sg_stubs.c $(am__append_1) $(am__append_2) + surf/workstation_ptask_L07.c xbt/xbt_sg_stubs.c \ + $(am__append_1) $(am__append_2) GTNETS_SRC = \ surf/gtnets/gtnets_simulator.cc \ surf/gtnets/gtnets_topology.cc \ @@ -876,7 +875,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transport_plugin_sg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transport_plugin_tcp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/workstation.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/workstation_KCCFLN05.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/workstation_ptask_L07.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xbt_context.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xbt_jcontext.Plo@am__quote@ diff --git a/src/surf/workstation_KCCFLN05.c b/src/surf/workstation_KCCFLN05.c deleted file mode 100644 index 601f9b9ebf..0000000000 --- a/src/surf/workstation_KCCFLN05.c +++ /dev/null @@ -1,1416 +0,0 @@ -/* $Id$ */ - -/* Copyright (c) 2005 Arnaud Legrand. 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 "xbt/ex.h" -#include "xbt/dict.h" -#include "surf_private.h" - -XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_workstation, surf, - "Logging specific to the SURF workstation module (KCCFLN05)"); -XBT_LOG_EXTERNAL_CATEGORY(surf_parse); - -typedef enum { - SURF_WORKSTATION_RESOURCE_CPU, - SURF_WORKSTATION_RESOURCE_LINK, -} e_surf_workstation_model_type_t; - - -/**************************************/ -/********* router object **************/ -/**************************************/ -typedef struct router_KCCFLN05 { - char *name; - unsigned int id; -} s_router_KCCFLN05_t, *router_KCCFLN05_t; - - -/**************************************/ -/********* cpu object *****************/ -/**************************************/ -typedef struct cpu_KCCFLN05 { - surf_model_t model; /* Do not move this field: must match model_obj_t */ - xbt_dict_t properties; /* Do not move this field: must match link_KCCFLN05_t */ - e_surf_workstation_model_type_t type; /* Do not move this field: must match link_KCCFLN05_t */ - char *name; /* Do not move this field: must match link_KCCFLN05_t */ - lmm_constraint_t constraint; - lmm_constraint_t bus; - double power_scale; - double power_current; - double interference_send; - double interference_recv; - double interference_send_recv; - tmgr_trace_event_t power_event; - e_surf_cpu_state_t state_current; - tmgr_trace_event_t state_event; - int id; /* cpu and network card are a single object... */ - xbt_dynar_t incomming_communications; - xbt_dynar_t outgoing_communications; -} s_cpu_KCCFLN05_t, *cpu_KCCFLN05_t; - -/**************************************/ -/*********** network object ***********/ -/**************************************/ - -typedef struct link_KCCFLN05 { - surf_model_t model; /* Do not move this field: must match model_obj_t */ - xbt_dict_t properties; /* Do not move this field: must match cpu_KCCFLN05_t */ - e_surf_workstation_model_type_t type; /* Do not move this field: must match cpu_KCCFLN05_t */ - char *name; /* Do not move this field: must match cpu_KCCFLN05_t */ - lmm_constraint_t constraint; - double lat_current; - tmgr_trace_event_t lat_event; - double bw_current; - tmgr_trace_event_t bw_event; - e_surf_link_state_t state_current; - tmgr_trace_event_t state_event; -} s_link_KCCFLN05_t, *link_KCCFLN05_t; - - -typedef struct s_route_KCCFLN05 { - double impact_on_src; - double impact_on_dst; - double impact_on_src_with_other_recv; - double impact_on_dst_with_other_send; - link_KCCFLN05_t *links; - int size; -} s_route_KCCFLN05_t, *route_KCCFLN05_t; - -/**************************************/ -/*************** actions **************/ -/**************************************/ -typedef struct surf_action_workstation_KCCFLN05 { - s_surf_action_t generic_action; - double latency; - double lat_current; - lmm_variable_t variable; - double rate; - int suspended; - cpu_KCCFLN05_t src; /* could be avoided */ - cpu_KCCFLN05_t dst; /* could be avoided */ -} s_surf_action_workstation_KCCFLN05_t, - *surf_action_workstation_KCCFLN05_t; - - - -static int nb_workstation = 0; -static s_route_KCCFLN05_t *routing_table = NULL; -#define ROUTE(i,j) routing_table[(i)+(j)*nb_workstation] -static link_KCCFLN05_t loopback = NULL; -static xbt_dict_t parallel_task_link_set = NULL; -//added to work with GTNETS -static xbt_dict_t router_set = NULL; -static lmm_system_t maxmin_system = NULL; - - -/* convenient function */ -static void __update_cpu_usage(cpu_KCCFLN05_t cpu) -{ - unsigned int cpt; - surf_action_workstation_KCCFLN05_t action = NULL; - if ((!xbt_dynar_length(cpu->incomming_communications)) && - (!xbt_dynar_length(cpu->outgoing_communications))) { - /* No communications */ - lmm_update_constraint_bound(maxmin_system, cpu->constraint, - cpu->power_current * cpu->power_scale); - } else if ((!xbt_dynar_length(cpu->incomming_communications)) - && (xbt_dynar_length(cpu->outgoing_communications))) { - /* Emission */ - lmm_update_constraint_bound(maxmin_system, cpu->constraint, - cpu->power_current * cpu->power_scale * - cpu->interference_send); - xbt_dynar_foreach(cpu->outgoing_communications, cpt, action) - lmm_elem_set_value(maxmin_system, cpu->constraint, - action->variable, - cpu->power_current * cpu->power_scale * - ROUTE(action->src->id, - action->dst->id).impact_on_src); - } else if ((xbt_dynar_length(cpu->incomming_communications)) - && (!xbt_dynar_length(cpu->outgoing_communications))) { - /* Reception */ - lmm_update_constraint_bound(maxmin_system, cpu->constraint, - cpu->power_current * cpu->power_scale * - cpu->interference_recv); - xbt_dynar_foreach(cpu->incomming_communications, cpt, action) - lmm_elem_set_value(maxmin_system, cpu->constraint, - action->variable, - cpu->power_current * cpu->power_scale * - ROUTE(action->src->id, - action->dst->id).impact_on_dst); - } else { - /* Emission & Reception */ - lmm_update_constraint_bound(maxmin_system, cpu->constraint, - cpu->power_current * cpu->power_scale * - cpu->interference_send_recv); - xbt_dynar_foreach(cpu->outgoing_communications, cpt, action) - lmm_elem_set_value(maxmin_system, cpu->constraint, - action->variable, - cpu->power_current * cpu->power_scale * - ROUTE(action->src->id, - action->dst->id). - impact_on_src_with_other_recv); - xbt_dynar_foreach(cpu->incomming_communications, cpt, action) - lmm_elem_set_value(maxmin_system, cpu->constraint, - action->variable, - cpu->power_current * cpu->power_scale * - ROUTE(action->src->id, - action->dst->id). - impact_on_dst_with_other_send); - } -} - -/**************************************/ -/******* Resource Public **********/ -/**************************************/ - -static void *name_service(const char *name) -{ - xbt_ex_t e; - void *res = NULL; - - TRY { - res = xbt_dict_get(workstation_set, name); - } CATCH(e) { - if (e.category != not_found_error) - RETHROW; - WARN1("Host '%s' not found, verifing if it is a router", name); - res = NULL; - xbt_ex_free(e); - } - - return res; -} - -static const char *get_resource_name(void *resource_id) -{ - /* We can freely cast as a cpu_KCCFLN05_t because it has the same - prefix as link_KCCFLN05_t. However, only cpu_KCCFLN05_t - will theoretically be given as an argument here. */ - return ((cpu_KCCFLN05_t) resource_id)->name; -} - -static xbt_dict_t get_properties(void *resource) -{ - /* We can freely cast as a cpu_KCCFLN05_t because it has the same - prefix as link_KCCFLN05_t. */ - return ((cpu_KCCFLN05_t) resource)->properties; -} - -/* action_get_state is inherited from the surf module */ - -static void action_use(surf_action_t action) -{ - action->using++; - return; -} - -static int action_free(surf_action_t action) -{ - unsigned int cpt; - surf_action_t act = NULL; - cpu_KCCFLN05_t src = ((surf_action_workstation_KCCFLN05_t) action)->src; - cpu_KCCFLN05_t dst = ((surf_action_workstation_KCCFLN05_t) action)->dst; - - action->using--; - if (!action->using) { - xbt_swag_remove(action, action->state_set); - if (((surf_action_workstation_KCCFLN05_t) action)->variable) - lmm_variable_free(maxmin_system, - ((surf_action_workstation_KCCFLN05_t) action)-> - variable); - if (src) - xbt_dynar_foreach(src->outgoing_communications, cpt, act) - if (act == action) { - xbt_dynar_remove_at(src->outgoing_communications, cpt, &act); - break; - } - - if (dst) - xbt_dynar_foreach(dst->incomming_communications, cpt, act) - if (act == action) { - xbt_dynar_remove_at(dst->incomming_communications, cpt, &act); - break; - } - - if (src && (!xbt_dynar_length(src->outgoing_communications))) - __update_cpu_usage(src); - if (dst && (!xbt_dynar_length(dst->incomming_communications))) - __update_cpu_usage(dst); - - free(action); - return 1; - } - return 0; -} - -static void action_cancel(surf_action_t action) -{ - surf_action_change_state(action, SURF_ACTION_FAILED); - return; -} - -static void action_recycle(surf_action_t action) -{ - DIE_IMPOSSIBLE; - return; -} - -/* action_change_state is inherited from the surf module */ -/* action_set_data is inherited from the surf module */ - -static void action_suspend(surf_action_t action) -{ - XBT_IN1("(%p))", action); - if (((surf_action_workstation_KCCFLN05_t) action)->suspended != 2) { - ((surf_action_workstation_KCCFLN05_t) action)->suspended = 1; - lmm_update_variable_weight(maxmin_system, - ((surf_action_workstation_KCCFLN05_t) - action)->variable, 0.0); - } - XBT_OUT; -} - -static void action_resume(surf_action_t action) -{ - XBT_IN1("(%p)", action); - if (((surf_action_workstation_KCCFLN05_t) action)->suspended != 2) { - if (((surf_action_workstation_KCCFLN05_t) action)->lat_current == 0.0) - lmm_update_variable_weight(maxmin_system, - ((surf_action_workstation_KCCFLN05_t) - action)->variable, action->priority); - else - lmm_update_variable_weight(maxmin_system, - ((surf_action_workstation_KCCFLN05_t) - action)->variable, - ((surf_action_workstation_KCCFLN05_t) - action)->lat_current); - - ((surf_action_workstation_KCCFLN05_t) action)->suspended = 0; - } - XBT_OUT; -} - -static int action_is_suspended(surf_action_t action) -{ - return (((surf_action_workstation_KCCFLN05_t) action)->suspended == 1); -} - -static void action_set_max_duration(surf_action_t action, double duration) -{ /* FIXME: should inherit */ - XBT_IN2("(%p,%g)", action, duration); - action->max_duration = duration; - XBT_OUT; -} - - -static void action_set_priority(surf_action_t action, double priority) -{ - XBT_IN2("(%p,%g)", action, priority); - action->priority = priority; - lmm_update_variable_weight(maxmin_system, ((surf_action_workstation_KCCFLN05_t) action)->variable, priority); - - XBT_OUT; -} - -/**************************************/ -/******* Resource Private **********/ -/**************************************/ - -static int resource_used(void *resource_id) -{ - /* We can freely cast as a link_KCCFLN05_t because it has - the same prefix as cpu_KCCFLN05_t */ - if (((cpu_KCCFLN05_t) resource_id)->type == - SURF_WORKSTATION_RESOURCE_CPU) - return (lmm_constraint_used - (maxmin_system, ((cpu_KCCFLN05_t) resource_id)->constraint) - || ((((cpu_KCCFLN05_t) resource_id)->bus) ? - lmm_constraint_used(maxmin_system, - ((cpu_KCCFLN05_t) resource_id)-> - bus) : 0)); - else - return lmm_constraint_used(maxmin_system, - ((link_KCCFLN05_t) resource_id)-> - constraint); - -} - -static double share_resources(double now) -{ - s_surf_action_workstation_KCCFLN05_t s_action; - surf_action_workstation_KCCFLN05_t action = NULL; - - xbt_swag_t running_actions = - surf_workstation_model->common_public->states.running_action_set; - double min = generic_maxmin_share_resources(running_actions, - xbt_swag_offset(s_action, - variable), - maxmin_system, - lmm_solve); - - xbt_swag_foreach(action, running_actions) { - if (action->latency > 0) { - if (min < 0) { - min = action->latency; - DEBUG3("Updating min (value) with %p (start %f): %f", action, - action->generic_action.start, min); - } else if (action->latency < min) { - min = action->latency; - DEBUG3("Updating min (latency) with %p (start %f): %f", action, - action->generic_action.start, min); - } - } - } - - DEBUG1("min value : %f", min); - - return min; -} - -static void update_actions_state(double now, double delta) -{ - double deltap = 0.0; - surf_action_workstation_KCCFLN05_t action = NULL; - surf_action_workstation_KCCFLN05_t next_action = NULL; - xbt_swag_t running_actions = - surf_workstation_model->common_public->states.running_action_set; - - xbt_swag_foreach_safe(action, next_action, running_actions) { - deltap = delta; - if (action->latency > 0) { - if (action->latency > deltap) { - double_update(&(action->latency), deltap); - deltap = 0.0; - } else { - double_update(&(deltap), action->latency); - action->latency = 0.0; - } - if ((action->latency == 0.0) && (action->suspended == 0)) { - if ((action)->lat_current == 0.0) - lmm_update_variable_weight(maxmin_system, action->variable, 1.0); - else - lmm_update_variable_weight(maxmin_system, action->variable, - action->lat_current); - } - } - DEBUG3("Action (%p) : remains (%g) updated by %g.", - action, action->generic_action.remains, - lmm_variable_getvalue(action->variable) * deltap); - double_update(&(action->generic_action.remains), - lmm_variable_getvalue(action->variable) * deltap); - - if (action->generic_action.max_duration != NO_MAX_DURATION) - double_update(&(action->generic_action.max_duration), delta); - - if ((action->generic_action.remains <= 0) && - (lmm_get_variable_weight(action->variable) > 0)) { - action->generic_action.finish = surf_get_clock(); - surf_action_change_state((surf_action_t) action, SURF_ACTION_DONE); - } else if ((action->generic_action.max_duration != NO_MAX_DURATION) && - (action->generic_action.max_duration <= 0)) { - action->generic_action.finish = surf_get_clock(); - surf_action_change_state((surf_action_t) action, SURF_ACTION_DONE); - } else { - /* Need to check that none of the resource has failed */ - lmm_constraint_t cnst = NULL; - int i = 0; - void *constraint_id = NULL; - - while ((cnst = - lmm_get_cnst_from_var(maxmin_system, action->variable, - i++))) { - constraint_id = lmm_constraint_id(cnst); - -/* if(((link_KCCFLN05_t)constraint_id)->type== */ -/* SURF_WORKSTATION_RESOURCE_LINK) { */ -/* DEBUG2("Checking for link %s (%p)", */ -/* ((link_KCCFLN05_t)constraint_id)->name, */ -/* ((link_KCCFLN05_t)constraint_id)); */ -/* } */ -/* if(((cpu_KCCFLN05_t)constraint_id)->type== */ -/* SURF_WORKSTATION_RESOURCE_CPU) { */ -/* DEBUG3("Checking for cpu %s (%p) : %s", */ -/* ((cpu_KCCFLN05_t)constraint_id)->name, */ -/* ((cpu_KCCFLN05_t)constraint_id), */ -/* ((cpu_KCCFLN05_t)constraint_id)->state_current==SURF_CPU_OFF?"Off":"On"); */ -/* } */ - - if (((((link_KCCFLN05_t) constraint_id)->type == - SURF_WORKSTATION_RESOURCE_LINK) && - (((link_KCCFLN05_t) constraint_id)->state_current == - SURF_LINK_OFF)) || - ((((cpu_KCCFLN05_t) constraint_id)->type == - SURF_WORKSTATION_RESOURCE_CPU) && - (((cpu_KCCFLN05_t) constraint_id)->state_current == - SURF_CPU_OFF))) { - DEBUG1("Action (%p) Failed!!", action); - action->generic_action.finish = surf_get_clock(); - surf_action_change_state((surf_action_t) action, - SURF_ACTION_FAILED); - break; - } - } - } - } - return; -} - -static void update_resource_state(void *id, - tmgr_trace_event_t event_type, - double value) -{ - cpu_KCCFLN05_t cpu = id; - link_KCCFLN05_t nw_link = id; - - if (nw_link->type == SURF_WORKSTATION_RESOURCE_LINK) { - DEBUG2("Updating link %s (%p)", nw_link->name, nw_link); - if (event_type == nw_link->bw_event) { - nw_link->bw_current = value; - lmm_update_constraint_bound(maxmin_system, nw_link->constraint, - nw_link->bw_current); - } else if (event_type == nw_link->lat_event) { - double delta = value - nw_link->lat_current; - lmm_variable_t var = NULL; - surf_action_workstation_KCCFLN05_t action = NULL; - - nw_link->lat_current = value; - while (lmm_get_var_from_cnst - (maxmin_system, nw_link->constraint, &var)) { - action = lmm_variable_id(var); - action->lat_current += delta; - if (action->rate < 0) - lmm_update_variable_bound(maxmin_system, action->variable, - SG_TCP_CTE_GAMMA / (2.0 * - action-> - lat_current)); - else - lmm_update_variable_bound(maxmin_system, action->variable, - min(action->rate, - SG_TCP_CTE_GAMMA / (2.0 * - action-> - lat_current))); - if (action->suspended == 0) - lmm_update_variable_weight(maxmin_system, action->variable, - action->lat_current); - lmm_update_variable_latency(maxmin_system, action->variable, - delta); - - - } - } else if (event_type == nw_link->state_event) { - if (value > 0) - nw_link->state_current = SURF_LINK_ON; - else - nw_link->state_current = SURF_LINK_OFF; - } else { - CRITICAL0("Unknown event ! \n"); - xbt_abort(); - } - return; - } else if (cpu->type == SURF_WORKSTATION_RESOURCE_CPU) { - DEBUG3("Updating cpu %s (%p) with value %g", cpu->name, cpu, value); - if (event_type == cpu->power_event) { - cpu->power_current = value; - __update_cpu_usage(cpu); - } else if (event_type == cpu->state_event) { - if (value > 0) - cpu->state_current = SURF_CPU_ON; - else - cpu->state_current = SURF_CPU_OFF; - } else { - CRITICAL0("Unknown event ! \n"); - xbt_abort(); - } - return; - } else { - DIE_IMPOSSIBLE; - } - return; -} - -static void finalize(void) -{ - int i, j; - - xbt_dict_free(&link_set); - xbt_dict_free(&workstation_set); - xbt_dict_free(&router_set); - if (parallel_task_link_set != NULL) { - xbt_dict_free(¶llel_task_link_set); - } - xbt_swag_free(surf_workstation_model->common_public->states. - ready_action_set); - xbt_swag_free(surf_workstation_model->common_public->states. - running_action_set); - xbt_swag_free(surf_workstation_model->common_public->states. - failed_action_set); - xbt_swag_free(surf_workstation_model->common_public->states. - done_action_set); - - free(surf_workstation_model->common_public); - free(surf_workstation_model->common_private); - free(surf_workstation_model->extension_public); - - free(surf_workstation_model); - surf_workstation_model = NULL; - - for (i = 0; i < nb_workstation; i++) - for (j = 0; j < nb_workstation; j++) - free(ROUTE(i, j).links); - free(routing_table); - routing_table = NULL; - nb_workstation = 0; - - if (maxmin_system) { - lmm_system_free(maxmin_system); - maxmin_system = NULL; - } -} - -/**************************************/ -/******* Resource Private **********/ -/**************************************/ - -static surf_action_t execute(void *cpu, double size) -{ - surf_action_workstation_KCCFLN05_t action = NULL; - cpu_KCCFLN05_t CPU = cpu; - - XBT_IN2("(%s,%g)", CPU->name, size); - action = xbt_new0(s_surf_action_workstation_KCCFLN05_t, 1); - - action->generic_action.using = 1; - action->generic_action.cost = size; - action->generic_action.remains = size; - action->generic_action.priority = 1.0; - action->generic_action.max_duration = NO_MAX_DURATION; - action->generic_action.start = surf_get_clock(); - action->generic_action.finish = -1.0; - action->generic_action.model_type = - (surf_model_t) surf_workstation_model; - action->suspended = 0; - - if (CPU->state_current == SURF_CPU_ON) - action->generic_action.state_set = - surf_workstation_model->common_public->states. - running_action_set; - else - action->generic_action.state_set = - surf_workstation_model->common_public->states.failed_action_set; - xbt_swag_insert(action, action->generic_action.state_set); - - action->variable = lmm_variable_new(maxmin_system, action, - action->generic_action.priority, - -1.0, 1); - lmm_expand(maxmin_system, CPU->constraint, action->variable, 1.0); - XBT_OUT; - return (surf_action_t) action; -} - -static surf_action_t action_sleep(void *cpu, double duration) -{ - surf_action_workstation_KCCFLN05_t action = NULL; - - XBT_IN2("(%s,%g)", ((cpu_KCCFLN05_t) cpu)->name, duration); - - action = (surf_action_workstation_KCCFLN05_t) execute(cpu, 1.0); - action->generic_action.max_duration = duration; - action->suspended = 2; - lmm_update_variable_weight(maxmin_system, action->variable, 0.0); - - XBT_OUT; - return (surf_action_t) action; -} - -static e_surf_cpu_state_t resource_get_state(void *cpu) -{ - return ((cpu_KCCFLN05_t) cpu)->state_current; -} - -static double get_speed(void *cpu, double load) -{ - return load * (((cpu_KCCFLN05_t) cpu)->power_scale); -} - -static double get_available_speed(void *cpu) -{ - return ((cpu_KCCFLN05_t) cpu)->power_current; -} - -static surf_action_t communicate(void *src, void *dst, double size, - double rate) -{ - surf_action_workstation_KCCFLN05_t action = NULL; - cpu_KCCFLN05_t card_src = src; - cpu_KCCFLN05_t card_dst = dst; - route_KCCFLN05_t route = &(ROUTE(card_src->id, card_dst->id)); - int route_size = route->size; - int i; - - XBT_IN4("(%s,%s,%g,%g)", card_src->name, card_dst->name, size, rate); - xbt_assert2(route_size, - "You're trying to send data from %s to %s but there is no connexion between these two cards.", - card_src->name, card_dst->name); - - action = xbt_new0(s_surf_action_workstation_KCCFLN05_t, 1); - - action->generic_action.using = 1; - action->generic_action.cost = size; - action->generic_action.remains = size; - action->generic_action.max_duration = NO_MAX_DURATION; - action->generic_action.start = surf_get_clock(); - action->generic_action.finish = -1.0; - action->src = src; - action->dst = dst; - action->generic_action.model_type = - (surf_model_t) surf_workstation_model; - action->suspended = 0; /* Should be useless because of the - calloc but it seems to help valgrind... */ - action->generic_action.state_set = - surf_workstation_model->common_public->states.running_action_set; - - xbt_dynar_push(card_src->outgoing_communications, &action); - xbt_dynar_push(card_dst->incomming_communications, &action); - - xbt_swag_insert(action, action->generic_action.state_set); - action->rate = rate; - - action->latency = 0.0; - for (i = 0; i < route_size; i++) - action->latency += route->links[i]->lat_current; - action->lat_current = action->latency; - - if (action->latency > 0) - action->variable = lmm_variable_new(maxmin_system, action, 0.0, -1.0, route_size + 4); /* +1 for the src bus - +1 for the dst bus - +1 for the src cpu - +1 for the dst cpu */ - else - action->variable = lmm_variable_new(maxmin_system, action, 1.0, -1.0, - route_size + 4); - - if (action->rate < 0) { - if (action->lat_current > 0) - lmm_update_variable_bound(maxmin_system, action->variable, - SG_TCP_CTE_GAMMA / (2.0 * - action->lat_current)); - else - lmm_update_variable_bound(maxmin_system, action->variable, -1.0); - } else { - if (action->lat_current > 0) - lmm_update_variable_bound(maxmin_system, action->variable, - min(action->rate, - SG_TCP_CTE_GAMMA / (2.0 * - action-> - lat_current))); - else - lmm_update_variable_bound(maxmin_system, action->variable, - action->rate); - } - - lmm_update_variable_latency(maxmin_system, action->variable, - action->latency); /* Should be useless */ - - for (i = 0; i < route_size; i++) - lmm_expand(maxmin_system, route->links[i]->constraint, - action->variable, 1.0); - if (card_src->bus) - lmm_expand(maxmin_system, card_src->bus, action->variable, 1.0); - if (card_dst->bus) - lmm_expand(maxmin_system, card_dst->bus, action->variable, 1.0); - lmm_expand(maxmin_system, card_src->constraint, action->variable, 0.0); - lmm_expand(maxmin_system, card_dst->constraint, action->variable, 0.0); - - XBT_OUT; - return (surf_action_t) action; -} - -static surf_action_t execute_parallel_task(int workstation_nb, - void **workstation_list, - double *computation_amount, - double *communication_amount, - double amount, double rate) -{ - surf_action_workstation_KCCFLN05_t action = NULL; - int i, j, k; - int nb_link = 0; - int nb_host = 0; - - if (parallel_task_link_set == NULL) { - parallel_task_link_set = xbt_dict_new(); - } - - /* Compute the number of affected resources... */ - for (i = 0; i < workstation_nb; i++) { - for (j = 0; j < workstation_nb; j++) { - cpu_KCCFLN05_t card_src = workstation_list[i]; - cpu_KCCFLN05_t card_dst = workstation_list[j]; - int route_size = ROUTE(card_src->id, card_dst->id).size; - link_KCCFLN05_t *route = - ROUTE(card_src->id, card_dst->id).links; - - if (communication_amount[i * workstation_nb + j] > 0) - for (k = 0; k < route_size; k++) { - xbt_dict_set(parallel_task_link_set, route[k]->name, - route[k], NULL); - } - } - } - nb_link = xbt_dict_length(parallel_task_link_set); - xbt_dict_reset(parallel_task_link_set); - - - for (i = 0; i < workstation_nb; i++) - if (computation_amount[i] > 0) - nb_host++; - - action = xbt_new0(s_surf_action_workstation_KCCFLN05_t, 1); - DEBUG3("Creating a parallel task (%p) with %d cpus and %d links.", - action, nb_host, nb_link); - action->generic_action.using = 1; - action->generic_action.cost = amount; - action->generic_action.remains = amount; - action->generic_action.max_duration = NO_MAX_DURATION; - action->generic_action.start = surf_get_clock(); - action->generic_action.finish = -1.0; - action->generic_action.model_type = - (surf_model_t) surf_workstation_model; - action->suspended = 0; /* Should be useless because of the - calloc but it seems to help valgrind... */ - action->generic_action.state_set = - surf_workstation_model->common_public->states.running_action_set; - - xbt_swag_insert(action, action->generic_action.state_set); - action->rate = rate; - - if (action->rate > 0) - action->variable = lmm_variable_new(maxmin_system, action, 1.0, -1.0, - nb_host + nb_link); - else - action->variable = - lmm_variable_new(maxmin_system, action, 1.0, action->rate, - nb_host + nb_link); - - for (i = 0; i < workstation_nb; i++) - if (computation_amount[i] > 0) - lmm_expand(maxmin_system, - ((cpu_KCCFLN05_t) workstation_list[i])->constraint, - action->variable, computation_amount[i]); - - for (i = 0; i < workstation_nb; i++) { - for (j = 0; j < workstation_nb; j++) { - cpu_KCCFLN05_t card_src = workstation_list[i]; - cpu_KCCFLN05_t card_dst = workstation_list[j]; - int route_size = ROUTE(card_src->id, card_dst->id).size; - link_KCCFLN05_t *route = - ROUTE(card_src->id, card_dst->id).links; - - for (k = 0; k < route_size; k++) { - if (communication_amount[i * workstation_nb + j] > 0) { - lmm_expand_add(maxmin_system, route[k]->constraint, - action->variable, - communication_amount[i * workstation_nb + j]); - } - } - } - } - - if (nb_link + nb_host == 0) { - action->generic_action.cost = 1.0; - action->generic_action.remains = 0.0; - } - - return (surf_action_t) action; -} - -/* returns an array of link_KCCFLN05_t */ -static const void **get_route(void *src, void *dst) -{ - cpu_KCCFLN05_t card_src = src; - cpu_KCCFLN05_t card_dst = dst; - route_KCCFLN05_t route = &(ROUTE(card_src->id, card_dst->id)); - - return (const void **) route->links; -} - -static int get_route_size(void *src, void *dst) -{ - cpu_KCCFLN05_t card_src = src; - cpu_KCCFLN05_t card_dst = dst; - route_KCCFLN05_t route = &(ROUTE(card_src->id, card_dst->id)); - return route->size; -} - -static const char *get_link_name(const void *link) -{ - return ((link_KCCFLN05_t) link)->name; -} - -static double get_link_bandwidth(const void *link) -{ - return ((link_KCCFLN05_t) link)->bw_current; -} - -static double get_link_latency(const void *link) -{ - return ((link_KCCFLN05_t) link)->lat_current; -} - -/**************************************/ -/*** Resource Creation & Destruction **/ -/**************************************/ - - -static void router_free(void *router) -{ - free(((router_KCCFLN05_t) router)->name); -} - -static void router_new(const char *name) -{ - static unsigned int nb_routers = 0; - router_KCCFLN05_t router; - - INFO1("Creating a router %s", name); - - router = xbt_new0(s_router_KCCFLN05_t, 1); - - router->name = xbt_strdup(name); - router->id = nb_routers++; - xbt_dict_set(router_set, name, router, router_free); -} - -static void parse_routers(void) -{ - //add a dumb router just to be GTNETS compatible - router_new(A_surfxml_router_id); -} - -static void cpu_free(void *cpu) -{ - free(((cpu_KCCFLN05_t) cpu)->name); - xbt_dynar_free(&(((cpu_KCCFLN05_t) cpu)->incomming_communications)); - xbt_dynar_free(&(((cpu_KCCFLN05_t) cpu)->outgoing_communications)); - free(cpu); -} - -static cpu_KCCFLN05_t cpu_new(const char *name, double power_scale, - double power_initial, - tmgr_trace_t power_trace, - e_surf_cpu_state_t state_initial, - tmgr_trace_t state_trace, - double interference_send, - double interference_recv, - double interference_send_recv, - double max_outgoing_rate, - xbt_dict_t cpu_properties_k) -{ - cpu_KCCFLN05_t cpu = xbt_new0(s_cpu_KCCFLN05_t, 1); - - xbt_assert1(! xbt_dict_get_or_null(workstation_set, name), - "Host '%s' declared several times in the platform file.",name); - - CDEBUG8(surf_parse, "cpu_new(%s,power_scale=%.2f,power_initial=%.2f,state_init=%d,isend=%.2f,irecv=%.2f,isendrev=%.2f) -> %p", - name,power_scale,power_initial,state_initial,interference_send,interference_recv,interference_send_recv,cpu); - - cpu->model = (surf_model_t) surf_workstation_model; - cpu->type = SURF_WORKSTATION_RESOURCE_CPU; - cpu->name = xbt_strdup(name); - cpu->id = nb_workstation++; - - cpu->power_scale = power_scale; - xbt_assert0(cpu->power_scale > 0, "Power has to be >0"); - - cpu->power_current = power_initial; - if (power_trace) - cpu->power_event = - tmgr_history_add_trace(history, power_trace, 0.0, 0, cpu); - - cpu->state_current = state_initial; - if (state_trace) - cpu->state_event = - tmgr_history_add_trace(history, state_trace, 0.0, 0, cpu); - - cpu->interference_send = interference_send; - cpu->interference_recv = interference_recv; - cpu->interference_send_recv = interference_send_recv; - - cpu->constraint = - lmm_constraint_new(maxmin_system, cpu, - cpu->power_current * cpu->power_scale); - if (max_outgoing_rate > 0) - cpu->bus = lmm_constraint_new(maxmin_system, cpu, max_outgoing_rate); - - cpu->incomming_communications = - xbt_dynar_new(sizeof(surf_action_workstation_KCCFLN05_t), NULL); - cpu->outgoing_communications = - xbt_dynar_new(sizeof(surf_action_workstation_KCCFLN05_t), NULL); - - /*add the property set*/ - cpu->properties = current_property_set; - - xbt_dict_set(workstation_set, name, cpu, cpu_free); - - return cpu; -} - -static void create_routing_table(void) -{ - routing_table = xbt_new0(s_route_KCCFLN05_t, nb_workstation * nb_workstation); -} - -static void parse_cpu_init(void) -{ - double power_scale = 0.0; - double power_initial = 0.0; - tmgr_trace_t power_trace = NULL; - e_surf_cpu_state_t state_initial = SURF_CPU_OFF; - tmgr_trace_t state_trace = NULL; - double interference_send = 0.0; - double interference_recv = 0.0; - double interference_send_recv = 0.0; - double max_outgoing_rate = -1.0; - - power_scale = get_cpu_power(A_surfxml_host_power); - surf_parse_get_double(&power_initial, A_surfxml_host_availability); - surf_parse_get_trace(&power_trace, A_surfxml_host_availability_file); - - xbt_assert0((A_surfxml_host_state == A_surfxml_host_state_ON) || - (A_surfxml_host_state == A_surfxml_host_state_OFF), - "Invalid state"); - if (A_surfxml_host_state == A_surfxml_host_state_ON) - state_initial = SURF_CPU_ON; - if (A_surfxml_host_state == A_surfxml_host_state_OFF) - state_initial = SURF_CPU_OFF; - surf_parse_get_trace(&state_trace, A_surfxml_host_state_file); - - surf_parse_get_double(&interference_send, - A_surfxml_host_interference_send); - surf_parse_get_double(&interference_recv, - A_surfxml_host_interference_recv); - surf_parse_get_double(&interference_send_recv, - A_surfxml_host_interference_send_recv); - surf_parse_get_double(&max_outgoing_rate, - A_surfxml_host_max_outgoing_rate); - current_property_set = xbt_dict_new(); - - cpu_new(A_surfxml_host_id, power_scale, power_initial, power_trace, - state_initial, state_trace, interference_send, interference_recv, - interference_send_recv, max_outgoing_rate,current_property_set); -} - -static void link_free(void *nw_link) -{ - free(((link_KCCFLN05_t) nw_link)->name); - free(nw_link); -} - -static link_KCCFLN05_t link_new(char *name, - double bw_initial, - tmgr_trace_t bw_trace, - double lat_initial, - tmgr_trace_t lat_trace, - e_surf_link_state_t - state_initial, - tmgr_trace_t state_trace, - e_surf_link_sharing_policy_t - policy, xbt_dict_t properties_args) -{ - link_KCCFLN05_t nw_link = xbt_new0(s_link_KCCFLN05_t, 1); - - - nw_link->model = (surf_model_t) surf_workstation_model; - nw_link->type = SURF_WORKSTATION_RESOURCE_LINK; - nw_link->name = name; - nw_link->bw_current = bw_initial; - if (bw_trace) - nw_link->bw_event = - tmgr_history_add_trace(history, bw_trace, 0.0, 0, nw_link); - nw_link->state_current = state_initial; - nw_link->lat_current = lat_initial; - if (lat_trace) - nw_link->lat_event = - tmgr_history_add_trace(history, lat_trace, 0.0, 0, nw_link); - if (state_trace) - nw_link->state_event = - tmgr_history_add_trace(history, state_trace, 0.0, 0, nw_link); - - nw_link->constraint = - lmm_constraint_new(maxmin_system, nw_link, nw_link->bw_current); - - if (policy == SURF_LINK_FATPIPE) - lmm_constraint_shared(nw_link->constraint); - - /*add the property set*/ - nw_link->properties = properties_args; - - xbt_dict_set(link_set, name, nw_link, link_free); - - return nw_link; -} - -static void parse_link_init(void) -{ - char *name_link; - double bw_initial; - tmgr_trace_t bw_trace; - double lat_initial; - tmgr_trace_t lat_trace; - e_surf_link_state_t state_initial_link = SURF_LINK_ON; - e_surf_link_sharing_policy_t policy_initial_link = SURF_LINK_SHARED; - tmgr_trace_t state_trace; - - name_link = xbt_strdup(A_surfxml_link_id); - surf_parse_get_double(&bw_initial, A_surfxml_link_bandwidth); - surf_parse_get_trace(&bw_trace, A_surfxml_link_bandwidth_file); - surf_parse_get_double(&lat_initial, A_surfxml_link_latency); - surf_parse_get_trace(&lat_trace, A_surfxml_link_latency_file); - - xbt_assert0((A_surfxml_link_state == - A_surfxml_link_state_ON) - || (A_surfxml_link_state == - A_surfxml_link_state_OFF), "Invalid state"); - if (A_surfxml_link_state == A_surfxml_link_state_ON) - state_initial_link = SURF_LINK_ON; - else if (A_surfxml_link_state == - A_surfxml_link_state_OFF) - state_initial_link = SURF_LINK_OFF; - - if (A_surfxml_link_sharing_policy == - A_surfxml_link_sharing_policy_SHARED) - policy_initial_link = SURF_LINK_SHARED; - else if (A_surfxml_link_sharing_policy == - A_surfxml_link_sharing_policy_FATPIPE) - policy_initial_link = SURF_LINK_FATPIPE; - - surf_parse_get_trace(&state_trace, A_surfxml_link_state_file); - - current_property_set = xbt_dict_new(); - link_new(name_link, bw_initial, bw_trace, - lat_initial, lat_trace, state_initial_link, state_trace, - policy_initial_link,/*add properties*/current_property_set); -} - -static void route_new(int src_id, int dst_id, - link_KCCFLN05_t * link_list, int nb_link, - double impact_on_src, double impact_on_dst, - double impact_on_src_with_other_recv, - double impact_on_dst_with_other_send) -{ - route_KCCFLN05_t route = &(ROUTE(src_id, dst_id)); - - route->size = nb_link; - route->links = link_list = xbt_realloc(link_list, sizeof(link_KCCFLN05_t) * nb_link); - route->impact_on_src = impact_on_src; - route->impact_on_dst = impact_on_dst; - route->impact_on_src_with_other_recv = impact_on_src_with_other_recv; - route->impact_on_dst_with_other_send = impact_on_dst_with_other_send; -} - -static int src_id = -1; -static int dst_id = -1; -static double impact_on_src; -static double impact_on_dst; -static double impact_on_src_with_other_recv; -static double impact_on_dst_with_other_send; - -static void parse_route_set_endpoints(void) -{ - cpu_KCCFLN05_t cpu_tmp = NULL; - - cpu_tmp = (cpu_KCCFLN05_t) name_service(A_surfxml_route_src); - if (cpu_tmp != NULL) { - src_id = cpu_tmp->id; - } else { - xbt_assert1(xbt_dict_get_or_null(router_set, A_surfxml_route_src), - "Invalid name '%s': neither a cpu nor a router!", - A_surfxml_route_src); - src_id = -1; - return; - } - - cpu_tmp = (cpu_KCCFLN05_t) name_service(A_surfxml_route_dst); - if (cpu_tmp != NULL) { - dst_id = cpu_tmp->id; - } else { - xbt_assert1(xbt_dict_get_or_null(router_set, A_surfxml_route_dst), - "Invalid name '%s': neither a cpu nor a router!", - A_surfxml_route_dst); - dst_id = -1; - return; - } - - surf_parse_get_double(&impact_on_src, A_surfxml_route_impact_on_src); - surf_parse_get_double(&impact_on_dst, A_surfxml_route_impact_on_dst); - surf_parse_get_double(&impact_on_src_with_other_recv, - A_surfxml_route_impact_on_src_with_other_recv); - surf_parse_get_double(&impact_on_dst_with_other_send, - A_surfxml_route_impact_on_dst_with_other_send); - - - route_action = A_surfxml_route_action; - route_link_list = xbt_dynar_new(sizeof(char *), &free_string); - -} - -static void parse_route_set_route(void) -{ - char* name; - if (src_id != -1 && dst_id != -1) { - name = bprintf("%x#%x",src_id, dst_id); - - manage_route(route_table, name, route_action, 0); - free(name); - } -} - -static void add_loopback(void) -{ - int i; - - /* Adding loopback if needed */ - for (i = 0; i < nb_workstation; i++) { - if (!ROUTE(i, i).size) { - if (!loopback) - loopback = link_new(xbt_strdup("__MSG_loopback__"), - 498000000, NULL, 0.000015, NULL, - SURF_LINK_ON, NULL, - SURF_LINK_FATPIPE, NULL); - ROUTE(i, i).size = 1; - ROUTE(i, i).links = xbt_new0(link_KCCFLN05_t, 1); - ROUTE(i, i).links[0] = loopback; - } - } -} - -static void add_route(void) -{ - xbt_ex_t e; - int nb_link = 0; - unsigned int cpt = 0; - int link_list_capacity = 0; - link_KCCFLN05_t *link_list = NULL; - xbt_dict_cursor_t cursor = NULL; - char *key,*data, *end; - const char *sep = "#"; - xbt_dynar_t links, keys; - char* link = NULL; - - if (routing_table == NULL) create_routing_table(); - - xbt_dict_foreach(route_table, cursor, key, data) { - nb_link = 0; - links = (xbt_dynar_t)data; - keys = xbt_str_split_str(key, sep); - - link_list_capacity = xbt_dynar_length(links); - link_list = xbt_new(link_KCCFLN05_t, link_list_capacity); - - src_id = strtol(xbt_dynar_get_as(keys, 0, char*), &end, 16); - dst_id = strtol(xbt_dynar_get_as(keys, 1, char*), &end, 16); - /*ATTRIBUTES NOT USED ANYMORE. WILL BE REMOVED FROM MODEL.*/ - impact_on_src = 0;//atof(xbt_dynar_get_as(keys, 2, char*)); - impact_on_dst = 0; //atof(xbt_dynar_get_as(keys, 3, char*)); - impact_on_src_with_other_recv = 0;//atof(xbt_dynar_get_as(keys, 4, char*)); - impact_on_dst_with_other_send = 0;//atof(xbt_dynar_get_as(keys, 5, char*)); - - - xbt_dynar_foreach (links, cpt, link) { - TRY { - link_list[nb_link++] = xbt_dict_get(link_set, link); - } - CATCH(e) { - RETHROW1("Link %s not found (dict raised this exception: %s)", link); - } - } - route_new(src_id, dst_id, link_list, nb_link,impact_on_src, - impact_on_dst, impact_on_src_with_other_recv, - impact_on_dst_with_other_send); - } - - xbt_dict_free(&route_table); - -} - -static void add_traces(void) -{ - xbt_dynar_t trace_connect = NULL; - unsigned int cpt; - int connect_element, connect_kind; - char *value, *trace_id, *connector_id; - link_KCCFLN05_t link; - cpu_KCCFLN05_t host = NULL; - tmgr_trace_t trace; - - if (!traces_connect_list) return; - - /*for all trace connects parse them and update traces for hosts or links */ - xbt_dynar_foreach (traces_connect_list, cpt, value) { - trace_connect = xbt_str_split_str(value, "#"); - trace_id = xbt_dynar_get_as(trace_connect, 0, char*); - connect_element = atoi(xbt_dynar_get_as(trace_connect, 1, char*)); - connect_kind = atoi(xbt_dynar_get_as(trace_connect, 2, char*)); - connector_id = xbt_dynar_get_as(trace_connect, 3, char*); - - xbt_assert1((trace = xbt_dict_get_or_null(traces_set_list, trace_id)), "Trace %s undefined", trace_id); - - if (connect_element == A_surfxml_trace_c_connect_element_HOST) { - xbt_assert1((host = xbt_dict_get_or_null(workstation_set, connector_id)), "Host %s undefined", connector_id); - switch (connect_kind) { - case A_surfxml_trace_c_connect_kind_AVAILABILITY: host->state_event = tmgr_history_add_trace(history, trace, 0.0, 0, host); break; - case A_surfxml_trace_c_connect_kind_POWER: host->power_event = tmgr_history_add_trace(history, trace, 0.0, 0, host); break; - } - } - else { - xbt_assert1((link = xbt_dict_get_or_null(link_set, connector_id)), "Link %s undefined", connector_id); - switch (connect_kind) { - case A_surfxml_trace_c_connect_kind_AVAILABILITY: link->state_event = tmgr_history_add_trace(history, trace, 0.0, 0, link); break; - case A_surfxml_trace_c_connect_kind_BANDWIDTH: link->bw_event = tmgr_history_add_trace(history, trace, 0.0, 0, link); break; - case A_surfxml_trace_c_connect_kind_LATENCY: link->lat_event = tmgr_history_add_trace(history, trace, 0.0, 0, link); break; - } - } - } - - xbt_dynar_free(&trace_connect); - xbt_dynar_free(&traces_connect_list); - xbt_dict_free(&traces_set_list); -} - -static void define_callbacks(const char *file) -{ - CDEBUG0(surf_parse, "Use the KCCFKN05 model"); - - /* Adding callback functions */ - surf_parse_reset_parser(); - surfxml_add_callback(STag_surfxml_host_cb_list, &parse_cpu_init); - surfxml_add_callback(STag_surfxml_prop_cb_list, &parse_properties); - surfxml_add_callback(STag_surfxml_router_cb_list, &parse_routers); - surfxml_add_callback(STag_surfxml_link_cb_list, &parse_link_init); - surfxml_add_callback(STag_surfxml_route_cb_list, &parse_route_set_endpoints); - surfxml_add_callback(ETag_surfxml_link_c_ctn_cb_list, &parse_route_elem); - surfxml_add_callback(ETag_surfxml_route_cb_list, &parse_route_set_route); - surfxml_add_callback(STag_surfxml_platform_cb_list, &init_data); - surfxml_add_callback(ETag_surfxml_platform_cb_list, &add_route); - surfxml_add_callback(ETag_surfxml_platform_cb_list, &add_loopback); - surfxml_add_callback(ETag_surfxml_platform_cb_list, &add_traces); - surfxml_add_callback(STag_surfxml_set_cb_list, &parse_sets); - surfxml_add_callback(STag_surfxml_route_c_multi_cb_list, &parse_route_multi_set_endpoints); - surfxml_add_callback(ETag_surfxml_route_c_multi_cb_list, &parse_route_multi_set_route); - surfxml_add_callback(STag_surfxml_foreach_cb_list, &parse_foreach); - surfxml_add_callback(STag_surfxml_cluster_cb_list, &parse_cluster); - surfxml_add_callback(STag_surfxml_trace_cb_list, &parse_trace_init); - surfxml_add_callback(ETag_surfxml_trace_cb_list, &parse_trace_finalize); - surfxml_add_callback(STag_surfxml_trace_c_connect_cb_list, &parse_trace_c_connect); - surfxml_add_callback(STag_surfxml_random_cb_list, &init_randomness); - surfxml_add_callback(ETag_surfxml_random_cb_list, &add_randomness); -} - -/**************************************/ -/********* Module creation ***********/ -/**************************************/ - -static void model_init_internal(void) -{ - s_surf_action_t action; - - surf_workstation_model = xbt_new0(s_surf_workstation_model_t, 1); - - surf_workstation_model->common_private = - xbt_new0(s_surf_model_private_t, 1); - surf_workstation_model->common_public = - xbt_new0(s_surf_model_public_t, 1); - surf_workstation_model->extension_public = - xbt_new0(s_surf_workstation_model_extension_public_t, 1); - - surf_workstation_model->common_public->states.ready_action_set = - xbt_swag_new(xbt_swag_offset(action, state_hookup)); - surf_workstation_model->common_public->states.running_action_set = - xbt_swag_new(xbt_swag_offset(action, state_hookup)); - surf_workstation_model->common_public->states.failed_action_set = - xbt_swag_new(xbt_swag_offset(action, state_hookup)); - surf_workstation_model->common_public->states.done_action_set = - xbt_swag_new(xbt_swag_offset(action, state_hookup)); - - surf_workstation_model->common_public->name_service = name_service; - surf_workstation_model->common_public->get_resource_name = - get_resource_name; - surf_workstation_model->common_public->action_get_state = - surf_action_get_state; - surf_workstation_model->common_public->action_get_start_time = - surf_action_get_start_time; - surf_workstation_model->common_public->action_get_finish_time = - surf_action_get_finish_time; - surf_workstation_model->common_public->action_use = action_use; - surf_workstation_model->common_public->action_free = action_free; - surf_workstation_model->common_public->action_cancel = action_cancel; - surf_workstation_model->common_public->action_recycle = - action_recycle; - surf_workstation_model->common_public->action_change_state = - surf_action_change_state; - surf_workstation_model->common_public->action_set_data = - surf_action_set_data; - surf_workstation_model->common_public->suspend = action_suspend; - surf_workstation_model->common_public->resume = action_resume; - surf_workstation_model->common_public->is_suspended = - action_is_suspended; - surf_workstation_model->common_public->set_max_duration = - action_set_max_duration; - surf_workstation_model->common_public->set_priority = - action_set_priority; - surf_workstation_model->common_public->name = "Workstation KCCFLN05"; - - surf_workstation_model->common_private->resource_used = resource_used; - surf_workstation_model->common_private->share_resources = - share_resources; - surf_workstation_model->common_private->update_actions_state = - update_actions_state; - surf_workstation_model->common_private->update_resource_state = - update_resource_state; - surf_workstation_model->common_private->finalize = finalize; - - surf_workstation_model->extension_public->execute = execute; - surf_workstation_model->extension_public->sleep = action_sleep; - surf_workstation_model->extension_public->get_state = - resource_get_state; - surf_workstation_model->extension_public->get_speed = get_speed; - surf_workstation_model->extension_public->get_available_speed = - get_available_speed; - - surf_workstation_model->common_public->get_properties = get_properties; - - surf_workstation_model->extension_public->communicate = communicate; - surf_workstation_model->extension_public->execute_parallel_task = - execute_parallel_task; - surf_workstation_model->extension_public->get_route = get_route; - surf_workstation_model->extension_public->get_route_size = - get_route_size; - surf_workstation_model->extension_public->get_link_name = - get_link_name; - surf_workstation_model->extension_public->get_link_bandwidth = - get_link_bandwidth; - surf_workstation_model->extension_public->get_link_latency = - get_link_latency; - - workstation_set = xbt_dict_new(); - router_set = xbt_dict_new(); - link_set = xbt_dict_new(); - if (!maxmin_system) - maxmin_system = lmm_system_new(); -} - -/**************************************/ -/*************** Generic **************/ -/**************************************/ -void surf_workstation_model_init_KCCFLN05(const char *filename) -{ - xbt_assert0(!surf_cpu_model, "CPU model type already defined"); - xbt_assert0(!surf_network_model, - "network model type already defined"); - model_init_internal(); - define_callbacks(filename); - - xbt_dynar_push(model_list, &surf_workstation_model); -} -- 2.20.1