Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add function read write open close and stat to workstation model
authornavarro <navarro@caraja.(none)>
Tue, 21 Feb 2012 12:39:35 +0000 (13:39 +0100)
committernavarro <navarro@caraja.(none)>
Tue, 21 Feb 2012 12:39:35 +0000 (13:39 +0100)
src/include/surf/surf.h
src/simix/smx_io.c
src/surf/workstation.c

index 7b40a75..84f17e7 100644 (file)
@@ -193,6 +193,12 @@ typedef struct surf_network_model_extension_public {
                            xbt_dict_t properties);
 } s_surf_model_extension_network_t;
 
                            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
       *
      /** \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 */
                                           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,
   int (*link_shared) (const void *link);
    xbt_dict_t(*get_properties) (const void *resource);
   void* (*link_create_resource) (const char *name,
index a19b309..60fe284 100644 (file)
@@ -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;
 #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);
 
   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;
 #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);
 
   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;
 #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);
 
   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;
 #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);
 
   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;
 #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);
 
   surf_workstation_model->action_data_set(action->io.surf_io, action);
   XBT_DEBUG("Create io action %p", action);
index eb89b6f..2c73194 100644 (file)
@@ -290,6 +290,36 @@ static xbt_dict_t ws_get_properties(const void *ws)
   return surf_resource_properties(((workstation_CLM03_t) ws)->cpu);
 }
 
   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();
 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.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)
 }
 
 void surf_workstation_model_init_current_default(void)