From fe832229f8b8467994bac54665117823e7ed97e9 Mon Sep 17 00:00:00 2001 From: coldpeace Date: Thu, 19 Aug 2010 16:02:25 +0000 Subject: [PATCH 1/1] move e_surf_link_sharing_policy_t structure to surf.h and fix the way to create link resource when bypassing surf xml parser git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@8160 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- src/bindings/lua/simgrid_lua.c | 94 +++++++++++++++++++++++++++++++++- src/include/surf/surf.h | 43 ++++++++++++---- src/surf/network.c | 49 ++++++------------ src/surf/surf_private.h | 5 -- src/surf/surfxml_parse.c | 12 ++++- 5 files changed, 152 insertions(+), 51 deletions(-) diff --git a/src/bindings/lua/simgrid_lua.c b/src/bindings/lua/simgrid_lua.c index 915c5adf1b..79f09ecc11 100644 --- a/src/bindings/lua/simgrid_lua.c +++ b/src/bindings/lua/simgrid_lua.c @@ -324,9 +324,16 @@ typedef struct t_host_attr typedef struct t_link_attr { + //mandatory attributes const char* id; double bandwidth; double latency; + // Optional attributes + const char* bandwidth_trace; + const char* latency_trace; + const char* state_trace; + int state_initial; + int policy; }link_attr,*p_link_attr; typedef struct t_route_attr @@ -376,6 +383,44 @@ static void create_host(const char* id,double power_peak,double power_sc, } +/** + * create link resource via network model + */ +static void create_link(const char *name, + double bw_initial,const char *trace,double lat_initial, + const char* latency_trace,int state_init, const char* state_trace,int policy) +{ + tmgr_trace_t bw_trace; + tmgr_trace_t lat_trace; + e_surf_resource_state_t state_initial_link = SURF_RESOURCE_ON; + e_surf_link_sharing_policy_t policy_initial_link = SURF_LINK_SHARED; + tmgr_trace_t st_trace; + if(trace) + bw_trace = tmgr_trace_new(trace); + else + bw_trace = tmgr_trace_new(""); + + if(latency_trace) + lat_trace = tmgr_trace_new(latency_trace); + else + lat_trace = tmgr_trace_new(""); + + if(state_trace) + st_trace = tmgr_trace_new(state_trace); + else + st_trace = tmgr_trace_new(""); + + if(state_init == -1) + state_initial_link = SURF_RESOURCE_OFF; + if(policy == -1) + policy_initial_link = SURF_LINK_FATPIPE; + + surf_link_create_resource(xbt_strdup(name), bw_initial, bw_trace, + lat_initial, lat_trace, state_initial_link, st_trace, + policy_initial_link, xbt_dict_new()); +} + + /* *create host resource via workstation_ptask_L07 model [for SimDag] */ @@ -488,6 +533,11 @@ static int Link_new(lua_State *L) // (id,bandwidth,latency) const char* id; double bandwidth,latency; + const char* bandwidth_trace; + const char* latency_trace; + const char* state_trace; + int state_initial,policy; + //get values from the table passed as argument if (lua_istable(L,-1)) { // get Id Value @@ -508,6 +558,39 @@ static int Link_new(lua_State *L) // (id,bandwidth,latency) latency = lua_tonumber(L,-1); lua_pop(L,1); + /*Optional Arguments */ + + //get bandwidth_trace value + lua_pushstring(L,"bandwidth_trace"); + lua_gettable(L, -2 ); + bandwidth_trace = lua_tostring(L,-1); + lua_pop(L,1); + + //get latency_trace value + lua_pushstring(L,"latency_trace"); + lua_gettable(L, -2 ); + latency_trace = lua_tostring(L,-1); + lua_pop(L,1); + + //get state_trace value + lua_pushstring(L,"state_trace"); + lua_gettable(L, -2 ); + state_trace = lua_tostring(L,-1); + lua_pop(L,1); + + //get state_initial value + lua_pushstring(L,"state_initial"); + lua_gettable(L, -2 ); + state_initial = lua_tonumber(L,-1); + lua_pop(L,1); + + + //get policy value + lua_pushstring(L,"policy"); + lua_gettable(L, -2 ); + policy = lua_tonumber(L,-1); + lua_pop(L,1); + } else { ERROR0("Bad Arguments to create link, Should be a table with named arguments"); return -1; @@ -517,6 +600,11 @@ static int Link_new(lua_State *L) // (id,bandwidth,latency) link->id = id; link->bandwidth = bandwidth; link->latency = latency; + link->bandwidth_trace = bandwidth_trace; + link->latency_trace = latency_trace; + link->state_trace = state_trace; + link->state_initial= state_initial; + link->policy = policy; xbt_dynar_push(link_list_d,&link); return 0; } @@ -609,7 +697,11 @@ static int surf_parse_bypass_platform() //add Links xbt_dynar_foreach(link_list_d,i,p_link) { - surf_link_create_resource((char*)p_link->id,p_link->bandwidth,p_link->latency); + /*(const char *name, + double bw_initial,const char *trace,double lat_initial, + const char* latency_trace,int state_init, const char* state_trace,int policy)*/ + create_link(p_link->id,p_link->bandwidth,p_link->bandwidth_trace,p_link->latency, + p_link->latency_trace,p_link->state_initial,p_link->state_trace,p_link->policy); } // add route xbt_dynar_foreach(route_list_d,i,p_route) diff --git a/src/include/surf/surf.h b/src/include/surf/surf.h index d32041fddf..24d45a2db3 100644 --- a/src/include/surf/surf.h +++ b/src/include/surf/surf.h @@ -22,6 +22,11 @@ SG_BEGIN_DECL() SURF_RESOURCE_OFF = 0 /**< Down & broken */ } e_surf_resource_state_t; + typedef enum { + SURF_LINK_SHARED = 1, + SURF_LINK_FATPIPE = 0 + } e_surf_link_sharing_policy_t; + /** @Brief Specify that we use that action */ XBT_PUBLIC(void) surf_action_ref(surf_action_t action); /** @brief Creates a new action. @@ -37,8 +42,6 @@ XBT_PUBLIC(void *) surf_action_new(size_t size, double cost, /** * FIXME : still improvaleb [this should be done in the binding code] */ -XBT_PUBLIC(void) network_create_resource(char *name, - double initial_bandwidth,double initial_latency); XBT_PUBLIC(void) workstation_link_create_resource(char *name, double initial_bandwidth,double initial_latency); @@ -187,8 +190,17 @@ XBT_PUBLIC_DATA(routing_t) used_routing; double (*get_link_bandwidth) (const void *link); double (*get_link_latency) (const void *link); int (*link_shared) (const void *link); - void (*create_resource) (char *name,double bw_initial,double lat_initial); void (*add_traces)(void); + void (*create_resource)(char *name, + double bw_initial, + tmgr_trace_t bw_trace, + double lat_initial, + tmgr_trace_t lat_trace, + e_surf_resource_state_t + state_initial, + tmgr_trace_t state_trace, + e_surf_link_sharing_policy_t policy, + xbt_dict_t properties); } s_surf_model_extension_network_t; /** \brief Workstation model extension public @@ -219,14 +231,18 @@ XBT_PUBLIC_DATA(routing_t) used_routing; xbt_dict_t(*get_properties) (const void *resource); void (*link_create_resource) (char *name,double bw_initial,double lat_initial); void (*cpu_create_resource)(char *name, double power_peak, - double power_scale, - tmgr_trace_t power_trace, - e_surf_resource_state_t state_initial, - tmgr_trace_t state_trace, - xbt_dict_t cpu_properties); + double power_scale, + tmgr_trace_t power_trace, + e_surf_resource_state_t state_initial, + tmgr_trace_t state_trace, + xbt_dict_t cpu_properties); void (*add_traces) (void); + } s_surf_model_extension_workstation_t; + + + /** \brief Model datatype * \ingroup SURF_models * @@ -686,10 +702,17 @@ XBT_PUBLIC(void) surf_wsL07_host_create_resource(char *name, double power_peak, /** * create link resource * see surfxml_parse.c - * FIXME : shoudl have the same prototype as net_link_new */ XBT_PUBLIC(void) surf_link_create_resource(char *name, - double bw_initial,double lat_initial); + double bw_initial, + tmgr_trace_t bw_trace, + double lat_initial, + tmgr_trace_t lat_trace, + e_surf_resource_state_t + state_initial, + tmgr_trace_t state_trace, + e_surf_link_sharing_policy_t policy, + xbt_dict_t properties); XBT_PUBLIC(void) surf_wsL07_link_create_resource(char *name, diff --git a/src/surf/network.c b/src/surf/network.c index dcdd47789a..4a3d052080 100644 --- a/src/surf/network.c +++ b/src/surf/network.c @@ -166,6 +166,21 @@ static void net_parse_link_init(void) } +static void net_create_resource(char *name, + double bw_initial, + tmgr_trace_t bw_trace, + double lat_initial, + tmgr_trace_t lat_trace, + e_surf_resource_state_t + state_initial, + tmgr_trace_t state_trace, + e_surf_link_sharing_policy_t policy, + xbt_dict_t properties) +{ + net_link_new(name, bw_initial, bw_trace, + lat_initial, lat_trace, state_initial, state_trace, + policy, xbt_dict_new()); +} static void net_add_traces(void) { xbt_dict_cursor_t cursor = NULL; @@ -620,38 +635,6 @@ static void net_action_set_max_duration(surf_action_t action, double duration) action->max_duration = duration; } - -/** - * FIXME : this should be done in the binding code !! - */ -void network_create_resource(char *name, - double initial_bandwidth,double initial_latency) -{ - - char* name_link; - double bw_initial; - tmgr_trace_t bw_trace; - double lat_initial; - tmgr_trace_t lat_trace; - e_surf_resource_state_t state_initial_link = SURF_RESOURCE_ON; - e_surf_link_sharing_policy_t policy_initial_link = SURF_LINK_SHARED; - tmgr_trace_t state_trace; - - name_link = xbt_strdup(name); - bw_initial = initial_bandwidth; - bw_trace = tmgr_trace_new(""); - lat_initial = initial_latency; - lat_trace = tmgr_trace_new(""); - // FIXME Hard Coded Values - //state_initial_link = SURF_RESOURCE_ON; - //policy_initial_link = SURF_LINK_SHARED; - state_trace = tmgr_trace_new(""); - - net_link_new(name_link, bw_initial, bw_trace, - lat_initial, lat_trace, state_initial_link, state_trace, - policy_initial_link, xbt_dict_new()); -} - static void net_finalize(void) { surf_model_exit(surf_network_model); @@ -690,8 +673,8 @@ static void surf_network_model_init_internal(void) surf_network_model->extension.network.get_link_bandwidth = net_get_link_bandwidth; surf_network_model->extension.network.link_shared = net_link_shared; - surf_network_model->extension.network.create_resource = network_create_resource; surf_network_model->extension.network.add_traces = net_add_traces; + surf_network_model->extension.network.create_resource = net_create_resource; if (!network_maxmin_system) network_maxmin_system = lmm_system_new(); diff --git a/src/surf/surf_private.h b/src/surf/surf_private.h index 61a374b0fb..cfa4f8afd3 100644 --- a/src/surf/surf_private.h +++ b/src/surf/surf_private.h @@ -31,11 +31,6 @@ extern int sg_network_fullduplex; extern const char *surf_action_state_names[6]; -typedef enum { - SURF_LINK_SHARED = 1, - SURF_LINK_FATPIPE = 0 -} e_surf_link_sharing_policy_t; - typedef struct surf_model_private { int (*resource_used) (void *resource_id); /* Share the resources to the actions and return in how much time diff --git a/src/surf/surfxml_parse.c b/src/surf/surfxml_parse.c index 933996d9c7..ea7f315474 100644 --- a/src/surf/surfxml_parse.c +++ b/src/surf/surfxml_parse.c @@ -1199,10 +1199,18 @@ void surf_wsL07_host_create_resource(char *name, double power_peak, */ void surf_link_create_resource(char *name, double bw_initial, - double lat_initial) + tmgr_trace_t bw_trace, + double lat_initial, + tmgr_trace_t lat_trace, + e_surf_resource_state_t + state_initial, + tmgr_trace_t state_trace, + e_surf_link_sharing_policy_t policy, + xbt_dict_t properties) { return surf_network_model->extension.network. - create_resource(name,bw_initial,lat_initial); + create_resource(name,bw_initial,bw_trace,lat_initial,lat_trace, + state_initial,state_trace,policy,properties); } -- 2.20.1