From: navarro Date: Thu, 22 Mar 2012 14:35:04 +0000 (+0100) Subject: First step to take care of constraint into storage model X-Git-Tag: v3_7~249 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/4fcb76c0c08cf4aaa8379bb5da8215334b4e83d2 First step to take care of constraint into storage model --- diff --git a/examples/msg/io/file.c b/examples/msg/io/file.c index 91c8ee80f8..87c9618ee4 100644 --- a/examples/msg/io/file.c +++ b/examples/msg/io/file.c @@ -15,6 +15,8 @@ * - io/file.c Example with the disk resource */ +#define FILENAME "/home/user/Install/simgrid/doc/simgrid/examples/cxx/basic/basic_platform.xml" + #include #include #include "msg/msg.h" @@ -30,7 +32,7 @@ int host(int argc, char *argv[]) m_file_t file; char* mount = bprintf("C:"); - file = MSG_file_open(mount,"test.txt","rw"); + file = MSG_file_open(mount,FILENAME,"rw"); XBT_INFO("Host '%s' open %p",MSG_host_get_name(MSG_host_self()), file); size_t read = MSG_file_read(mount,NULL,0,0,file); diff --git a/examples/platforms/storage.xml b/examples/platforms/storage.xml index 41c2bb6cf7..d808970f54 100644 --- a/examples/platforms/storage.xml +++ b/examples/platforms/storage.xml @@ -11,38 +11,34 @@ - + - - - + + + - - - + + + + - - - - + - + - - - + diff --git a/src/include/surf/surf.h b/src/include/surf/surf.h index 8cc569ede4..9ce016d7e5 100644 --- a/src/include/surf/surf.h +++ b/src/include/surf/surf.h @@ -224,8 +224,7 @@ typedef struct surf_storage_model_extension_public { surf_action_t(*read) (void *storage, void* ptr, size_t size, size_t nmemb, surf_file_t stream); surf_action_t(*write) (void *storage, const void* ptr, size_t size, size_t nmemb, surf_file_t stream); surf_action_t(*stat) (void *storage, int fd, void* buf); - void* (*create_resource) (const char* id, const char* model,const char* type_id, - xbt_dict_t content, xbt_dict_t storage_properties); + void* (*create_resource) (const char* id, const char* model,const char* type_id); } s_surf_model_extension_storage_t; /** \brief Workstation model extension public @@ -365,6 +364,15 @@ typedef struct s_mount { char *name; } s_mount_t, *mount_t; +typedef struct s_content { + char *user_rights; + char *user; + char *group; + char *date; + char *time; + int size; +} s_content_t, *content_t; + /** * Resource which have a metric handled by a maxmin system */ diff --git a/src/surf/storage.c b/src/surf/storage.c index 28e3cfca40..9c89f166e5 100644 --- a/src/surf/storage.c +++ b/src/surf/storage.c @@ -31,10 +31,24 @@ typedef struct surf_storage { static void storage_action_state_set(surf_action_t action, e_surf_action_state_t state); static surf_action_t storage_action_sleep (void *storage, double duration); +static surf_action_t storage_action_execute (void *storage, double size); static surf_action_t storage_action_open(void *storage, const char* path, const char* mode) { - return storage_action_sleep(storage,1.0); + char *storage_type_id = xbt_lib_get_or_null( + storage_lib, + ((storage_t)storage)->generic_resource.name, + ROUTING_STORAGE_LEVEL); + storage_type_t storage_type = xbt_lib_get_or_null(storage_type_lib, storage_type_id,ROUTING_STORAGE_TYPE_LEVEL); + xbt_dict_t content_dict = storage_type->content; + content_t content = xbt_dict_get(content_dict,path); + + double size = content->size; + XBT_DEBUG("Disk '%s' with type_d '%s'",((storage_t)storage)->generic_resource.name,storage_type_id); + XBT_INFO("\tFile '%s' size '%f'",path,size); + + surf_action_t action = storage_action_execute(storage,size); + return action; } static surf_action_t storage_action_close(void *storage, surf_file_t fp) @@ -71,6 +85,9 @@ static surf_action_t storage_action_execute (void *storage, double size) calloc but it seems to help valgrind... */ GENERIC_LMM_ACTION(action).variable = lmm_variable_new(storage_maxmin_system, action, 1.0, -1.0 , 1); + + lmm_expand(storage_maxmin_system, STORAGE->constraint, + GENERIC_LMM_ACTION(action).variable, 1.0); XBT_OUT(); return (surf_action_t) action; } @@ -98,8 +115,7 @@ static surf_action_t storage_action_sleep (void *storage, double duration) return (surf_action_t) action; } -static void* storage_create_resource(const char* id, const char* model,const char* type_id, - xbt_dict_t content, xbt_dict_t storage_properties) +static void* storage_create_resource(const char* id, const char* model,const char* type_id) { storage_t storage = NULL; @@ -107,18 +123,25 @@ static void* storage_create_resource(const char* id, const char* model,const cha "Storage '%s' declared several times in the platform file", id); storage = (storage_t) surf_resource_new(sizeof(s_storage_t), - surf_storage_model, id,storage_properties); + surf_storage_model, id,NULL); storage->state_current = SURF_RESOURCE_ON; + storage_type_t storage_type = xbt_lib_get_or_null(storage_type_lib, type_id,ROUTING_STORAGE_TYPE_LEVEL); + int Bread = atoi(xbt_dict_get(storage_type->properties,"Bread")); + + storage->constraint = + lmm_constraint_new(storage_maxmin_system, storage, + Bread); + xbt_lib_set(storage_lib, id, SURF_STORAGE_LEVEL, storage); - XBT_DEBUG("SURF storage create resource\n\t\tid '%s'\n\t\ttype '%s' \n\t\tmodel '%s' \n\t\tcontent '%p'\n\t\tproperties '%p'\n", + XBT_DEBUG("SURF storage create resource\n\t\tid '%s'\n\t\ttype '%s' \n\t\tmodel '%s' \n\t\tproperties '%p'\n\t\tBread '%d'\n", id, model, type_id, - content, - storage_properties); + storage_type->properties, + Bread); return storage; } @@ -258,9 +281,7 @@ static void parse_storage_init(sg_platf_storage_cbarg_t storage) storage_create_resource(storage->id, ((storage_type_t) stype)->model, - ((storage_type_t) stype)->type_id, - ((storage_type_t) stype)->content, - NULL); + ((storage_type_t) stype)->type_id); } static void parse_mstorage_init(sg_platf_mstorage_cbarg_t mstorage) diff --git a/src/surf/storage_private.h b/src/surf/storage_private.h index 1162787f3b..39b1df057c 100644 --- a/src/surf/storage_private.h +++ b/src/surf/storage_private.h @@ -11,6 +11,7 @@ typedef struct storage { s_surf_resource_t generic_resource; /*< Structure with generic data. Needed at begin to interate with SURF */ e_surf_resource_state_t state_current; /*< STORAGE current state (ON or OFF) */ + lmm_constraint_t constraint; } s_storage_t, *storage_t; typedef struct surf_action_storage { diff --git a/src/surf/surf_routing.c b/src/surf/surf_routing.c index 162041e6b9..29947c5e29 100644 --- a/src/surf/surf_routing.c +++ b/src/surf/surf_routing.c @@ -760,15 +760,6 @@ static void routing_parse_storage(sg_platf_storage_cbarg_t storage) (void *) xbt_strdup(storage->type_id)); } -typedef struct s_content { - char *user_rights; - char *user; - char *group; - char *date; - char *time; - int size; -} s_content_t, *content_t; - static void free_storage_content(void *p) { content_t content = p; @@ -839,7 +830,7 @@ static void routing_parse_storage_type(sg_platf_storage_type_cbarg_t storage_typ stype->content = parse_storage_content(storage_type->content); stype->type_id = xbt_strdup(storage_type->id); - XBT_INFO("ROUTING Create a storage type id '%s' with model '%s' content '%s' and properties '%p'", + XBT_DEBUG("ROUTING Create a storage type id '%s' with model '%s' content '%s' and properties '%p'", stype->type_id, stype->model, storage_type->content,