From: navarro Date: Tue, 21 Feb 2012 12:39:35 +0000 (+0100) Subject: Add function read write open close and stat to workstation model X-Git-Tag: exp_20120308~38^2~1 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/40f248ed1c13510a3eb82dea178406c8104dd2f1 Add function read write open close and stat to workstation model --- diff --git a/src/include/surf/surf.h b/src/include/surf/surf.h index 7b40a75686..84f17e7d31 100644 --- a/src/include/surf/surf.h +++ b/src/include/surf/surf.h @@ -193,6 +193,12 @@ typedef struct surf_network_model_extension_public { xbt_dict_t properties); } s_surf_model_extension_network_t; +typedef struct s_surf_file { + char *name; /**< @brief host name if any */ + void *data; /**< @brief user data */ +} s_surf_file_t; +typedef struct s_surf_file *surf_file_t; + /** \brief Workstation model extension public * \ingroup SURF_models * @@ -218,6 +224,11 @@ typedef struct surf_workstation_model_extension_public { double amount, double rate); double (*get_link_bandwidth) (const void *link); /**< Return the current bandwidth of a network link */ double (*get_link_latency) (const void *link); /**< Return the current latency of a network link */ + surf_action_t(*open) (void *workstation, const char* path, const char* mode); + surf_action_t(*close) (void *workstation, surf_file_t fp); + surf_action_t(*read) (void *workstation, void* ptr, size_t size, size_t nmemb, surf_file_t stream); + surf_action_t(*write) (void *workstation, const void* ptr, size_t size, size_t nmemb, surf_file_t stream); + surf_action_t(*stat) (void *workstation, int fd, void* buf); int (*link_shared) (const void *link); xbt_dict_t(*get_properties) (const void *resource); void* (*link_create_resource) (const char *name, diff --git a/src/simix/smx_io.c b/src/simix/smx_io.c index a19b3093bf..60fe284061 100644 --- a/src/simix/smx_io.c +++ b/src/simix/smx_io.c @@ -46,9 +46,7 @@ smx_action_t SIMIX_file_read(smx_process_t process, void* ptr, size_t size, size #endif action->io.host = host; - // TODO in surf model disk??? - // action->io.surf_io = surf_workstation_model->extension.storage.read(host->host, name), - action->io.surf_io = surf_workstation_model->extension.workstation.sleep(host->host, 1.0); + action->io.surf_io = surf_workstation_model->extension.workstation.read(host->host, ptr, size, nmemb, (surf_file_t)stream), surf_workstation_model->action_data_set(action->io.surf_io, action); XBT_DEBUG("Create io action %p", action); @@ -88,9 +86,7 @@ smx_action_t SIMIX_file_write(smx_process_t process, const void* ptr, size_t siz #endif action->io.host = host; - // TODO in surf model disk??? - // action->io.surf_io = surf_workstation_model->extension.storage.write(host->host, name), - action->io.surf_io = surf_workstation_model->extension.workstation.sleep(host->host, 2.0); + action->io.surf_io = surf_workstation_model->extension.workstation.write(host->host, ptr, size, nmemb, (surf_file_t)stream); surf_workstation_model->action_data_set(action->io.surf_io, action); XBT_DEBUG("Create io action %p", action); @@ -128,9 +124,7 @@ smx_action_t SIMIX_file_open(smx_process_t process, const char* path, const char #endif action->io.host = host; - // TODO in surf model disk??? - // action->io.surf_io = surf_workstation_model->extension.storage.open(host->host, name), - action->io.surf_io = surf_workstation_model->extension.workstation.sleep(host->host, 3.0); + action->io.surf_io = surf_workstation_model->extension.workstation.open(host->host, path, mode); surf_workstation_model->action_data_set(action->io.surf_io, action); XBT_DEBUG("Create io action %p", action); @@ -167,9 +161,7 @@ smx_action_t SIMIX_file_close(smx_process_t process, smx_file_t fp) #endif action->io.host = host; - // TODO in surf model disk??? - // action->io.surf_io = surf_workstation_model->extension.storage.close(host->host, name), - action->io.surf_io = surf_workstation_model->extension.workstation.sleep(host->host, 4.0); + action->io.surf_io = surf_workstation_model->extension.workstation.close(host->host, (surf_file_t)fp); surf_workstation_model->action_data_set(action->io.surf_io, action); XBT_DEBUG("Create io action %p", action); @@ -207,9 +199,7 @@ smx_action_t SIMIX_file_stat(smx_process_t process, int fd, void* buf) #endif action->io.host = host; - // TODO in surf model disk??? - // action->io.surf_io = surf_workstation_model->extension.storage.stat(host->host, name), - action->io.surf_io = surf_workstation_model->extension.workstation.sleep(host->host, 5.0); + action->io.surf_io = surf_workstation_model->extension.workstation.stat(host->host, fd, buf); surf_workstation_model->action_data_set(action->io.surf_io, action); XBT_DEBUG("Create io action %p", action); diff --git a/src/surf/workstation.c b/src/surf/workstation.c index eb89b6f3a4..2c7319421f 100644 --- a/src/surf/workstation.c +++ b/src/surf/workstation.c @@ -290,6 +290,36 @@ static xbt_dict_t ws_get_properties(const void *ws) return surf_resource_properties(((workstation_CLM03_t) ws)->cpu); } +static surf_action_t ws_action_open(void *workstation, const char* path, const char* mode) +{ + return surf_cpu_model->extension.cpu. + sleep(((workstation_CLM03_t) workstation)->cpu, 1); +} + +static surf_action_t ws_action_close(void *workstation, surf_file_t fp) +{ + return surf_cpu_model->extension.cpu. + sleep(((workstation_CLM03_t) workstation)->cpu, 2); +} + +static surf_action_t ws_action_read(void *workstation, void* ptr, size_t size, size_t nmemb, surf_file_t stream) +{ + return surf_cpu_model->extension.cpu. + sleep(((workstation_CLM03_t) workstation)->cpu, 3); +} + +static surf_action_t ws_action_write(void *workstation, const void* ptr, size_t size, size_t nmemb, surf_file_t stream) +{ + return surf_cpu_model->extension.cpu. + sleep(((workstation_CLM03_t) workstation)->cpu, 4); +} + +static surf_action_t ws_action_stat(void *workstation, int fd, void* buf) +{ + return surf_cpu_model->extension.cpu. + sleep(((workstation_CLM03_t) workstation)->cpu, 5); +} + static void surf_workstation_model_init_internal(void) { surf_workstation_model = surf_model_init(); @@ -342,6 +372,11 @@ static void surf_workstation_model_init_internal(void) surf_workstation_model->extension.workstation.get_properties = ws_get_properties; + surf_workstation_model->extension.workstation.open = ws_action_open; + surf_workstation_model->extension.workstation.close = ws_action_close; + surf_workstation_model->extension.workstation.read = ws_action_read; + surf_workstation_model->extension.workstation.write = ws_action_write; + surf_workstation_model->extension.workstation.stat = ws_action_stat; } void surf_workstation_model_init_current_default(void)