From d01caf8dec7610aed836690b66e859c8f786ae36 Mon Sep 17 00:00:00 2001 From: alegrand Date: Thu, 9 Dec 2004 01:02:19 +0000 Subject: [PATCH] Adding workstation : a single CPU and a network card... git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@567 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- src/Makefile.am | 3 +- src/include/surf/surf.h | 58 ++++++++---- src/surf/cpu.c | 2 +- src/surf/workstation.c | 157 +++++++++++++++++++++++++++++++++ src/surf/workstation_private.h | 23 +++++ 5 files changed, 224 insertions(+), 19 deletions(-) create mode 100644 src/surf/workstation.c create mode 100644 src/surf/workstation_private.h diff --git a/src/Makefile.am b/src/Makefile.am index 4a67cfb0ba..a36e114791 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -25,6 +25,7 @@ EXTRA_DIST= \ surf/trace_mgr_private.h \ surf/surf_private.h \ surf/cpu_private.h \ + surf/workstation_private.h \ surf/surf_parse.l surf/surf_parse.h \ surf/network_private.h \ \ @@ -100,7 +101,7 @@ COMMON_S=\ surf/trace_mgr.c \ surf/surf.c \ surf/surf_parse.c \ - surf/cpu.c surf/network.c \ + surf/cpu.c surf/network.c surf/workstation.c \ \ gras/Transport/transport.c gras/Transport/transport_private.h gras/Transport/transport_plugin_buf.c \ \ diff --git a/src/include/surf/surf.h b/src/include/surf/surf.h index ebc3d5b4b0..0dcf20d5b8 100644 --- a/src/include/surf/surf.h +++ b/src/include/surf/surf.h @@ -55,16 +55,16 @@ typedef struct surf_action { typedef struct surf_resource_private *surf_resource_private_t; typedef struct surf_resource_public { - s_surf_action_state_t states; /* Any living action on this resource */ - void *(*name_service)(const char *name); - const char *(*get_resource_name)(void *resource_id); - - e_surf_action_state_t (*action_get_state)(surf_action_t action); - void (*action_free)(surf_action_t action); - void (*action_cancel)(surf_action_t action); - void (*action_recycle)(surf_action_t action); - void (*action_change_state)(surf_action_t action, - e_surf_action_state_t state); + s_surf_action_state_t states; /* Any living action on this resource */ + void *(*name_service) (const char *name); + const char *(*get_resource_name) (void *resource_id); + + e_surf_action_state_t(*action_get_state) (surf_action_t action); + void (*action_free) (surf_action_t action); + void (*action_cancel) (surf_action_t action); + void (*action_recycle) (surf_action_t action); + void (*action_change_state) (surf_action_t action, + e_surf_action_state_t state); } s_surf_resource_public_t, *surf_resource_public_t; typedef struct surf_resource { @@ -85,39 +85,63 @@ typedef enum { SURF_CPU_OFF = 0 /* Running */ } e_surf_cpu_state_t; -typedef struct surf_cpu_resource_extension_private *surf_cpu_resource_extension_private_t; +typedef struct surf_cpu_resource_extension_private + *surf_cpu_resource_extension_private_t; typedef struct surf_cpu_resource_extension_public { surf_action_t(*execute) (void *cpu, xbt_maxmin_float_t size); surf_action_t(*wait) (void *cpu, xbt_maxmin_float_t size); e_surf_cpu_state_t(*get_state) (void *cpu); -} s_surf_cpu_resource_extension_public_t, *surf_cpu_resource_extension_public_t; +} s_surf_cpu_resource_extension_public_t, + *surf_cpu_resource_extension_public_t; typedef struct surf_cpu_resource { surf_resource_private_t common_private; surf_resource_public_t common_public; -/* surf_cpu_resource_extension_private_t extension_private; */ surf_cpu_resource_extension_public_t extension_public; } s_surf_cpu_resource_t, *surf_cpu_resource_t; extern surf_cpu_resource_t surf_cpu_resource; void surf_cpu_resource_init(const char *filename); /* Network resource */ -typedef struct surf_network_resource_extension_private *surf_network_resource_extension_private_t; +typedef struct surf_network_resource_extension_private + *surf_network_resource_extension_private_t; typedef struct surf_network_resource_extension_public { surf_action_t(*communicate) (void *src, void *dst, xbt_maxmin_float_t size); -} s_surf_network_resource_extension_public_t, *surf_network_resource_extension_public_t; +} s_surf_network_resource_extension_public_t, + *surf_network_resource_extension_public_t; typedef struct surf_network_resource { surf_resource_private_t common_private; surf_resource_public_t common_public; -/* surf_network_resource_extension_private_t extension_private; */ surf_network_resource_extension_public_t extension_public; } s_surf_network_resource_t, *surf_network_resource_t; extern surf_network_resource_t surf_network_resource; void surf_network_resource_init(const char *filename); +/* Workstation resource */ +typedef struct surf_workstation_resource_extension_private + *surf_workstation_resource_extension_private_t; +typedef struct surf_workstation_resource_extension_public { + surf_action_t(*execute) (void *workstation, xbt_maxmin_float_t size); + surf_action_t(*wait) (void *workstation, xbt_maxmin_float_t size); + e_surf_cpu_state_t(*get_state) (void *workstation); + surf_action_t(*communicate) (void *workstation_src, + void *workstation_dst, + xbt_maxmin_float_t size); +} s_surf_workstation_resource_extension_public_t, + *surf_workstation_resource_extension_public_t; + +typedef struct surf_workstation_resource { + surf_resource_private_t common_private; + surf_resource_public_t common_public; + surf_workstation_resource_extension_public_t extension_public; +} s_surf_workstation_resource_t, *surf_workstation_resource_t; + +extern surf_workstation_resource_t surf_workstation_resource; +void surf_workstation_resource_init(const char *filename); + /*******************************************/ /*** SURF Globals **************************/ /*******************************************/ @@ -127,6 +151,6 @@ xbt_heap_float_t surf_solve(void); /* update all states and returns the time elapsed since last event */ xbt_heap_float_t surf_get_clock(void); -void surf_finalize(void); /* clean everything */ +void surf_finalize(void); /* clean everything */ #endif /* _SURF_SURF_H */ diff --git a/src/surf/cpu.c b/src/surf/cpu.c index 0fa4303209..64649efb9c 100644 --- a/src/surf/cpu.c +++ b/src/surf/cpu.c @@ -302,7 +302,7 @@ static surf_action_t execute(void *cpu, xbt_maxmin_float_t size) static e_surf_cpu_state_t get_state(void *cpu) { - return SURF_CPU_OFF; + return ((cpu_t) cpu)->state_current; } static void finalize(void) diff --git a/src/surf/workstation.c b/src/surf/workstation.c new file mode 100644 index 0000000000..d153297e85 --- /dev/null +++ b/src/surf/workstation.c @@ -0,0 +1,157 @@ +/* $Id$ */ + +/* Copyright (c) 2004 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/dict.h" +#include "workstation_private.h" +/* #include "cpu_private.h" */ +/* #include "network_private.h" */ + +XBT_LOG_NEW_DEFAULT_SUBCATEGORY(workstation, surf, + "Logging specific to the SURF workstation module"); + +surf_workstation_resource_t surf_workstation_resource = NULL; + +static xbt_dict_t workstation_set = NULL; + +static workstation_t workstation_new(const char *name) +{ + return NULL; +} + +static void *name_service(const char *name) +{ + return NULL; +} + +static const char *get_resource_name(void *resource_id) +{ + return NULL; +} + +static int resource_used(void *resource_id) +{ + return 0; +} + +static void action_free(surf_action_t action) +{ + return; +} + +static void action_cancel(surf_action_t action) +{ + return; +} + +static void action_recycle(surf_action_t action) +{ + return; +} + +static void action_change_state(surf_action_t action, + e_surf_action_state_t state) +{ + surf_action_change_state(action, state); + return; +} + +static xbt_heap_float_t share_resources(xbt_heap_float_t now) +{ + return -1.0; +} + + +static void update_actions_state(xbt_heap_float_t now, + xbt_heap_float_t delta) +{ + return; +} + +static void update_resource_state(void *id, + tmgr_trace_event_t event_type, + xbt_maxmin_float_t value) +{ + return; +} + +static surf_action_t communicate(void *workstation_src, + void *workstation_dst, + xbt_maxmin_float_t size) +{ + return NULL; +} + +static surf_action_t execute(void *workstation, xbt_maxmin_float_t size) +{ + return NULL; +} + +static e_surf_cpu_state_t get_state(void *workstation) +{ + return SURF_CPU_OFF; +} + +static void finalize(void) +{ +} + +static void surf_workstation_resource_init_internal(void) +{ + s_surf_action_t action; + + surf_workstation_resource = xbt_new0(s_surf_workstation_resource_t, 1); + + surf_workstation_resource->common_private = + xbt_new0(s_surf_resource_private_t, 1); + surf_workstation_resource->common_public = + xbt_new0(s_surf_resource_public_t, 1); +/* surf_workstation_resource->extension_private = xbt_new0(s_surf_workstation_resource_extension_private_t,1); */ + surf_workstation_resource->extension_public = + xbt_new0(s_surf_workstation_resource_extension_public_t, 1); + + surf_workstation_resource->common_public->states.ready_action_set = + xbt_swag_new(xbt_swag_offset(action, state_hookup)); + surf_workstation_resource->common_public->states.running_action_set = + xbt_swag_new(xbt_swag_offset(action, state_hookup)); + surf_workstation_resource->common_public->states.failed_action_set = + xbt_swag_new(xbt_swag_offset(action, state_hookup)); + surf_workstation_resource->common_public->states.done_action_set = + xbt_swag_new(xbt_swag_offset(action, state_hookup)); + + surf_workstation_resource->common_public->name_service = name_service; + surf_workstation_resource->common_public->get_resource_name = + get_resource_name; + surf_workstation_resource->common_public->action_get_state = + surf_action_get_state; + surf_workstation_resource->common_public->action_free = action_free; + surf_workstation_resource->common_public->action_cancel = action_cancel; + surf_workstation_resource->common_public->action_recycle = action_recycle; + surf_workstation_resource->common_public->action_change_state = + action_change_state; + + surf_workstation_resource->common_private->resource_used = resource_used; + surf_workstation_resource->common_private->share_resources = share_resources; + surf_workstation_resource->common_private->update_actions_state = + update_actions_state; + surf_workstation_resource->common_private->update_resource_state = + update_resource_state; + surf_workstation_resource->common_private->finalize = finalize; + + surf_workstation_resource->extension_public->communicate = communicate; + surf_workstation_resource->extension_public->execute = execute; + + workstation_set = xbt_dict_new(); + + xbt_assert0(maxmin_system, "surf_init has to be called first!"); +} + +void surf_workstation_resource_init(const char *filename) +{ + surf_workstation_resource_init_internal(); +/* parse_file(filename); */ + xbt_dynar_push(resource_list, &surf_workstation_resource); +} diff --git a/src/surf/workstation_private.h b/src/surf/workstation_private.h new file mode 100644 index 0000000000..9bc850b7ca --- /dev/null +++ b/src/surf/workstation_private.h @@ -0,0 +1,23 @@ +/* $Id$ */ + +/* Copyright (c) 2004 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. */ + +#ifndef _SURF_WORKSTATION_PRIVATE_H +#define _SURF_WORKSTATION_PRIVATE_H + +#include "surf_private.h" + +typedef struct workstation_link { + surf_resource_t resource; /* Any such object, added in a trace + should start by this field!!! */ + /* Using this object with the public part of + resource does not make sense */ + const char *name; + void *cpu; + void *network_card; +} s_workstation_t, *workstation_t; + +#endif /* _SURF_WORKSTATION_PRIVATE_H */ -- 2.20.1