X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/3ac73c74583bb8cad30ead8a3ded22945c2af61e..4e78565ea6b354a0e6250a87b483f909665a0ac3:/src/surf/workstation.c diff --git a/src/surf/workstation.c b/src/surf/workstation.c index 7bcdc8d26d..34b9b81662 100644 --- a/src/surf/workstation.c +++ b/src/surf/workstation.c @@ -19,14 +19,14 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_workstation, surf, surf_model_t surf_workstation_model = NULL; -void __init_workstation_CLM03(workstation_CLM03_t ws, const char *id, surf_model_t workstation_model) +void __init_workstation_CLM03(workstation_CLM03_t ws, const char *id) { - ws->generic_resource.model = workstation_model; + ws->generic_resource.model = surf_workstation_model; ws->generic_resource.name = xbt_strdup(id); - ws->storage = xbt_lib_get_or_null(storage_lib,id,ROUTING_STORAGE_HOST_LEVEL); - ws->net_elm = xbt_lib_get_or_null(host_lib,id,ROUTING_HOST_LEVEL); + ws->storage = xbt_lib_get_or_null(storage_lib, id, ROUTING_STORAGE_HOST_LEVEL); + ws->net_elm = xbt_lib_get_or_null(host_lib, id, ROUTING_HOST_LEVEL); - XBT_DEBUG("Create ws %s with %ld mounted disks",id,xbt_dynar_length(ws->storage)); + XBT_DEBUG("Create ws %s with %ld mounted disks", id, xbt_dynar_length(ws->storage)); xbt_lib_set(host_lib, id, SURF_WKS_LEVEL, ws); } @@ -34,7 +34,7 @@ static void workstation_new(sg_platf_host_cbarg_t host) { workstation_CLM03_t workstation = xbt_new0(s_workstation_CLM03_t, 1); - __init_workstation_CLM03(workstation, host->id, surf_workstation_model); + __init_workstation_CLM03(workstation, host->id); } @@ -111,7 +111,16 @@ double ws_share_resources(surf_model_t workstation_model, double now) double min_by_cpu = cpu_model->model_private->share_resources(cpu_model, now); double min_by_net = net_model->model_private->share_resources(net_model, now); - return min(min_by_cpu, min_by_net); + // XBT_INFO("%p %s min_by_cpu, %s %f min_by_net %f", workstation_model, cpu_model->name, min_by_cpu, net_model->name, min_by_net); + + if (min_by_cpu >= 0.0 && min_by_net >= 0.0) + return min(min_by_cpu, min_by_net); + else if (min_by_cpu >= 0.0) + return min_by_cpu; + else if (min_by_net >= 0.0) + return min_by_net; + else + return min_by_cpu; /* probably min_by_cpu == min_by_net == -1 */ } void ws_update_actions_state(surf_model_t workstation_model, double now, double delta) @@ -133,7 +142,7 @@ void ws_finalize(surf_model_t workstation_model) -static surf_action_t ws_execute(void *workstation, double size) +surf_action_t ws_execute(void *workstation, double size) { surf_resource_t cpu = ((surf_resource_t) surf_cpu_resource_priv(workstation)); return cpu->model->extension.cpu.execute(workstation, size); @@ -186,7 +195,7 @@ static void ws_action_set_max_duration(surf_action_t action, DIE_IMPOSSIBLE; } -static void ws_action_set_priority(surf_action_t action, double priority) +void ws_action_set_priority(surf_action_t action, double priority) { if (action->model_obj->type == SURF_MODEL_TYPE_NETWORK) surf_network_model->set_priority(action, priority); @@ -239,7 +248,7 @@ static surf_action_t ws_communicate(void *workstation_src, dst->net_elm, size, rate); } -static e_surf_resource_state_t ws_get_state(void *workstation) +e_surf_resource_state_t ws_get_state(void *workstation) { surf_resource_t cpu = ((surf_resource_t) surf_cpu_resource_priv(workstation)); return cpu->model->extension.cpu.get_state(workstation); @@ -432,6 +441,7 @@ static void surf_workstation_model_init_internal(void) /* For VM support, we have a surf cpu model object for each workstation model * object. The physical workstation model object has the cpu model object of * the physical machine layer. */ + xbt_assert(surf_cpu_model_pm); model->extension.workstation.cpu_model = surf_cpu_model_pm; model->extension.workstation.execute = ws_execute; @@ -461,26 +471,27 @@ static void surf_workstation_model_init_internal(void) void surf_workstation_model_init_current_default(void) { - - surf_workstation_model_init_internal(); - xbt_cfg_setdefault_int(_sg_cfg_set, "network/crosstraffic", 1); + surf_cpu_model_init_Cas01(); surf_network_model_init_LegrandVelho(); + /* surf_cpu_mode_pm and surf_network_model must be initialized in advance. */ + xbt_assert(surf_cpu_model_pm); + xbt_assert(surf_network_model); + surf_workstation_model_init_internal(); + xbt_dynar_push(model_list, &surf_workstation_model); xbt_dynar_push(model_list_invoke, &surf_workstation_model); sg_platf_host_add_cb(workstation_new); -// sg_platf_postparse_add_cb(create_workstations); } void surf_workstation_model_init_compound() { - xbt_assert(surf_cpu_model_pm, "No CPU model defined yet!"); xbt_assert(surf_network_model, "No network model defined yet!"); + surf_workstation_model_init_internal(); xbt_dynar_push(model_list, &surf_workstation_model); xbt_dynar_push(model_list_invoke, &surf_workstation_model); sg_platf_host_add_cb(workstation_new); -// sg_platf_postparse_add_cb(create_workstations); }