From db8a1188f020fa641b311dc3ca15a9775a6df67a Mon Sep 17 00:00:00 2001 From: alegrand Date: Tue, 2 Aug 2005 00:00:44 +0000 Subject: [PATCH] add a get_speed function to the cpu and enabled the action_cancel function git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@1574 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- src/include/surf/surf.h | 2 ++ src/surf/cpu.c | 7 +++++++ src/surf/workstation.c | 15 ++++++++++++++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/include/surf/surf.h b/src/include/surf/surf.h index 147b84f6b1..7f45c744fd 100644 --- a/src/include/surf/surf.h +++ b/src/include/surf/surf.h @@ -115,6 +115,7 @@ typedef struct surf_cpu_resource_extension_public { surf_action_t(*execute) (void *cpu, double size); surf_action_t(*sleep) (void *cpu, double duration); e_surf_cpu_state_t(*get_state) (void *cpu); + double (*get_speed) (void *cpu, double load); } s_surf_cpu_resource_extension_public_t, *surf_cpu_resource_extension_public_t; @@ -151,6 +152,7 @@ typedef struct surf_workstation_resource_extension_public { surf_action_t(*execute) (void *workstation, double size); surf_action_t(*sleep) (void *workstation, double duration); e_surf_cpu_state_t(*get_state) (void *workstation); + double (*get_speed) (void *workstation, double load); surf_action_t(*communicate) (void *workstation_src, void *workstation_dst, double size, double max_rate); diff --git a/src/surf/cpu.c b/src/surf/cpu.c index 1cb46babc1..fbcf4f1798 100644 --- a/src/surf/cpu.c +++ b/src/surf/cpu.c @@ -124,6 +124,7 @@ static void action_use(surf_action_t action) static void action_cancel(surf_action_t action) { + surf_action_change_state(action, SURF_ACTION_FAILED); return; } @@ -288,6 +289,11 @@ static e_surf_cpu_state_t get_state(void *cpu) return ((cpu_Cas01_t) cpu)->state_current; } +static double get_speed(void *cpu, double load) +{ + return load*(((cpu_Cas01_t) cpu)->power_scale); +} + static void finalize(void) { xbt_dict_free(&cpu_set); @@ -357,6 +363,7 @@ static void surf_cpu_resource_init_internal(void) surf_cpu_resource->extension_public->sleep = action_sleep; surf_cpu_resource->extension_public->get_state = get_state; + surf_cpu_resource->extension_public->get_speed = get_speed; cpu_set = xbt_dict_new(); diff --git a/src/surf/workstation.c b/src/surf/workstation.c index 2f4aef5263..22c141b6d0 100644 --- a/src/surf/workstation.c +++ b/src/surf/workstation.c @@ -117,7 +117,13 @@ static void action_use(surf_action_t action) static void action_cancel(surf_action_t action) { - DIE_IMPOSSIBLE; + if(action->resource_type==(surf_resource_t)surf_network_resource) + surf_network_resource->common_public->action_cancel(action); + else if(action->resource_type==(surf_resource_t)surf_cpu_resource) + surf_cpu_resource->common_public->action_cancel(action); + else if(action->resource_type==(surf_resource_t)surf_workstation_resource) + return parallel_action_use(action); + else DIE_IMPOSSIBLE; return; } @@ -272,6 +278,12 @@ static e_surf_cpu_state_t get_state(void *workstation) get_state(((workstation_CLM03_t) workstation)->cpu); } +static double get_speed(void *workstation, double load) +{ + return surf_cpu_resource->extension_public-> + get_speed(((workstation_CLM03_t) workstation)->cpu, load); +} + static surf_action_t execute_parallel_task (int workstation_nb, void **workstation_list, double *computation_amount, @@ -436,6 +448,7 @@ static void surf_workstation_resource_init_internal(void) surf_workstation_resource->extension_public->execute = execute; surf_workstation_resource->extension_public->sleep = action_sleep; surf_workstation_resource->extension_public->get_state = get_state; + surf_workstation_resource->extension_public->get_speed = get_speed; surf_workstation_resource->extension_public->communicate = communicate; surf_workstation_resource->extension_public->execute_parallel_task = execute_parallel_task; -- 2.20.1