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);
}
{
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);
}
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)
-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);
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);
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);
/* 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;
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);
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);