Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add MSG_file_seek function
[simgrid.git] / src / surf / workstation.hpp
1 #include "surf.hpp"
2 #include "storage.hpp"
3 #include "cpu.hpp"
4 #include "network.hpp"
5
6 #ifndef WORKSTATION_HPP_
7 #define WORKSTATION_HPP_
8
9 /***********
10  * Classes *
11  ***********/
12
13 class WorkstationModel;
14 typedef WorkstationModel *WorkstationModelPtr;
15
16 class WorkstationCLM03;
17 typedef WorkstationCLM03 *WorkstationCLM03Ptr;
18
19 class WorkstationCLM03Lmm;
20 typedef WorkstationCLM03Lmm *WorkstationCLM03LmmPtr;
21
22 class WorkstationAction;
23 typedef WorkstationAction *WorkstationActionPtr;
24
25 class WorkstationActionLmm;
26 typedef WorkstationActionLmm *WorkstationActionLmmPtr;
27
28 /*********
29  * Tools *
30  *********/
31 extern WorkstationModelPtr surf_workstation_model;
32
33 /*********
34  * Model *
35  *********/
36 class WorkstationModel : public Model {
37 public:
38   WorkstationModel(string name): Model(name) {};
39   WorkstationModel();
40   ~WorkstationModel();
41   virtual void parseInit(sg_platf_host_cbarg_t host);
42   WorkstationCLM03Ptr createResource(string name);
43   double shareResources(double now);
44   virtual void adjustWeightOfDummyCpuActions();
45
46   void updateActionsState(double now, double delta);
47
48   virtual ActionPtr executeParallelTask(int workstation_nb,
49                                         void **workstation_list,
50                                         double *computation_amount,
51                                         double *communication_amount,
52                                         double rate);
53  virtual xbt_dynar_t getRoute(WorkstationCLM03Ptr src, WorkstationCLM03Ptr dst);
54  virtual ActionPtr communicate(WorkstationCLM03Ptr src, WorkstationCLM03Ptr dst, double size, double rate);
55  CpuModelPtr p_cpuModel;
56 };
57
58 /************
59  * Resource *
60  ************/
61
62 class WorkstationCLM03 : virtual public Resource {
63 public:
64   WorkstationCLM03(WorkstationModelPtr model, const char* name, xbt_dict_t properties, xbt_dynar_t storage, RoutingEdgePtr netElm, CpuPtr cpu);
65
66   void updateState(tmgr_trace_event_t event_type, double value, double date);
67
68   virtual ActionPtr execute(double size);
69   virtual ActionPtr sleep(double duration);
70   e_surf_resource_state_t getState();
71
72   virtual int getCore();
73   virtual double getSpeed(double load);
74   virtual double getAvailableSpeed();
75   virtual double getCurrentPowerPeak();
76   virtual double getPowerPeakAt(int pstate_index);
77   virtual int getNbPstates();
78   virtual void setPowerPeakAt(int pstate_index);
79   virtual double getConsumedEnergy();
80
81   xbt_dict_t getProperties();
82
83   StoragePtr findStorageOnMountList(const char* storage);
84   xbt_dict_t getStorageList();
85   ActionPtr open(const char* mount, const char* path);
86   ActionPtr close(surf_file_t fd);
87   int unlink(surf_file_t fd);
88   ActionPtr ls(const char* mount, const char *path);
89   sg_size_t getSize(surf_file_t fd);
90   ActionPtr read(surf_file_t fd, sg_size_t size);
91   ActionPtr write(surf_file_t fd, sg_size_t size);
92   xbt_dynar_t getInfo( surf_file_t fd);
93   sg_size_t fileTell(surf_file_t fd);
94   sg_size_t getFreeSize(const char* name);
95   sg_size_t getUsedSize(const char* name);
96   sg_size_t fileSeek(surf_file_t fd, sg_size_t offset, int origin);
97
98   bool isUsed();
99   //bool isShared();
100   xbt_dynar_t p_storage;
101   RoutingEdgePtr p_netElm;
102   CpuPtr p_cpu;
103   NetworkCm02LinkPtr p_network;
104
105   xbt_dynar_t getVms();
106
107   /* common with vm */
108   void getParams(ws_params_t params);
109   void setParams(ws_params_t params);
110   s_ws_params_t p_params;
111 };
112
113 class WorkstationCLM03Lmm : virtual public WorkstationCLM03, public ResourceLmm {
114 public:
115   WorkstationCLM03Lmm(WorkstationModelPtr model, const char* name, xbt_dict_t props, xbt_dynar_t storage, RoutingEdgePtr netElm, CpuPtr cpu):
116           WorkstationCLM03(model, name, props, storage, netElm, cpu){};
117   e_surf_resource_state_t getState();
118 };
119
120 /**********
121  * Action *
122  **********/
123 class WorkstationAction : virtual public Action {
124 public:
125   WorkstationAction(ModelPtr model, double cost, bool failed): Action(model, cost, failed) {};
126 };
127
128 class WorkstationActionLmm : public ActionLmm, public WorkstationAction {
129 public:
130   WorkstationActionLmm(ModelPtr model, double cost, bool failed): ActionLmm(model, cost, failed), WorkstationAction(model, cost, failed) {};
131 };
132
133
134 #endif /* WORKSTATION_HPP_ */