1 /* Copyright (c) 2004-2013. The SimGrid Team.
2 * All rights reserved. */
4 /* This program is free software; you can redistribute it and/or modify it
5 * under the terms of the license (GNU LGPL) which comes with this package. */
7 #include "surf_interface.hpp"
8 #include "storage_interface.hpp"
9 #include "cpu_interface.hpp"
10 #include "network_interface.hpp"
12 #ifndef SURF_WORKSTATION_INTERFACE_HPP_
13 #define SURF_WORKSTATION_INTERFACE_HPP_
19 class WorkstationModel;
20 typedef WorkstationModel *WorkstationModelPtr;
23 typedef Workstation *WorkstationPtr;
25 class WorkstationAction;
26 typedef WorkstationAction *WorkstationActionPtr;
32 /** @ingroup SURF_callbacks
33 * @brief Callbacks handler which emit the callbacks after Workstation creation *
34 * @detail Callback functions have the following signature: `void(WorkstationPtr)`
36 extern surf_callback(void, WorkstationPtr) workstationCreatedCallbacks;
38 /** @ingroup SURF_callbacks
39 * @brief Callbacks handler which emit the callbacks after Workstation destruction *
40 * @detail Callback functions have the following signature: `void(WorkstationPtr)`
42 extern surf_callback(void, WorkstationPtr) workstationDestructedCallbacks;
44 /** @ingroup SURF_callbacks
45 * @brief Callbacks handler which emit the callbacks after Workstation State changed *
46 * @detail Callback functions have the following signature: `void(WorkstationActionPtr)`
48 extern surf_callback(void, WorkstationPtr) workstationStateChangedCallbacks;
50 /** @ingroup SURF_callbacks
51 * @brief Callbacks handler which emit the callbacks after WorkstationAction State changed *
52 * @detail Callback functions have the following signature: `void(WorkstationActionPtr)`
54 extern surf_callback(void, WorkstationActionPtr) workstationActionStateChangedCallbacks;
59 extern WorkstationModelPtr surf_workstation_model;
64 /** @ingroup SURF_workstation_interface
65 * @brief SURF Workstation model interface class
66 * @details A model is an object which handle the interactions between its Resources and its Actions
68 class WorkstationModel : public Model {
71 * @brief WorkstationModel constructor
73 * @param name the name of the model
75 WorkstationModel(const char *name);
78 * @brief WorkstationModel constructor
83 * @brief WorkstationModel destructor
88 * @brief [brief description]
89 * @details [long description]
91 virtual void adjustWeightOfDummyCpuActions();
94 * @brief [brief description]
95 * @details [long description]
97 * @param workstation_nb [description]
98 * @param workstation_list [description]
99 * @param computation_amount [description]
100 * @param communication_amount [description]
101 * @param rate [description]
102 * @return [description]
104 virtual ActionPtr executeParallelTask(int workstation_nb,
105 void **workstation_list,
106 double *computation_amount,
107 double *communication_amount,
111 * @brief [brief description]
112 * @details [long description]
114 * @param src [description]
115 * @param dst [description]
117 * @return [description]
119 virtual xbt_dynar_t getRoute(WorkstationPtr src, WorkstationPtr dst)=0;
122 * @brief [brief description]
123 * @details [long description]
125 * @param src [description]
126 * @param dst [description]
127 * @param size [description]
128 * @param rate [description]
129 * @return [description]
131 virtual ActionPtr communicate(WorkstationPtr src, WorkstationPtr dst, double size, double rate)=0;
133 CpuModelPtr p_cpuModel;
139 /** @ingroup SURF_workstation_interface
140 * @brief SURF Workstation interface class
141 * @details A workstation VM represent an virtual machine with a aggregation of a Cpu, a NetworkLink and a Storage
143 class Workstation : public Resource {
146 * @brief Workstation consrtuctor
151 * @brief Workstation constructor
153 * @param model WorkstationModel associated to this Workstation
154 * @param name The name of the Workstation
155 * @param props Dictionary of properties associated to this Workstation
156 * @param storage The Storage associated to this Workstation
157 * @param netElm The RoutingEdge associated to this Workstation
158 * @param cpu The Cpu associated to this Workstation
160 Workstation(ModelPtr model, const char *name, xbt_dict_t props,
161 xbt_dynar_t storage, RoutingEdgePtr netElm, CpuPtr cpu);
164 * @brief Workstation constructor
166 * @param model WorkstationModel associated to this Workstation
167 * @param name The name of the Workstation
168 * @param props Dictionary of properties associated to this Workstation
169 * @param constraint The lmm constraint associated to this Workstation if it is part of a LMM component
170 * @param storage The Storage associated to this Workstation
171 * @param netElm The RoutingEdge associated to this Workstation
172 * @param cpu The Cpu associated to this Workstation
174 Workstation(ModelPtr model, const char *name, xbt_dict_t props, lmm_constraint_t constraint,
175 xbt_dynar_t storage, RoutingEdgePtr netElm, CpuPtr cpu);
178 * @brief Workstation destructor
182 void setState(e_surf_resource_state_t state);
185 * @brief Get the properties of the currenrt Workstation
187 * @return The properties of the current Workstation
189 xbt_dict_t getProperties();
192 * @brief Execute some quantity of computation
194 * @param size The value of the processing amount (in flop) needed to process
195 * @return The CpuAction corresponding to the processing
198 virtual ActionPtr execute(double size)=0;
201 * @brief Make a process sleep for duration seconds
203 * @param duration The number of seconds to sleep
204 * @return The CpuAction corresponding to the sleeping
207 virtual ActionPtr sleep(double duration)=0;
210 * @brief Get the number of cores of the associated Cpu
212 * @return The number of cores of the associated Cpu
215 virtual int getCore();
218 * @brief Get the speed of the associated Cpu
221 * @return The speed of the associated Cpu
224 virtual double getSpeed(double load);
227 * @brief Get the available speed of the associated Cpu
230 * @return The available speed of the associated Cpu
233 virtual double getAvailableSpeed();
236 * @brief Get the associated Cpu power peak
238 * @return The associated Cpu power peak
241 virtual double getCurrentPowerPeak();
243 virtual double getPowerPeakAt(int pstate_index);
244 virtual int getNbPstates();
245 virtual void setPowerPeakAt(int pstate_index);
248 * @brief Return the storage of corresponding mount point
250 * @param storage The mount point
251 * @return The corresponding Storage
253 virtual StoragePtr findStorageOnMountList(const char* storage);
256 * @brief Get the xbt_dict_t of mount_point: Storage
258 * @return The xbt_dict_t of mount_point: Storage
260 virtual xbt_dict_t getStorageList();
265 * @param mount The mount point
266 * @param path The path to the file
268 * @return The StorageAction corresponding to the opening
270 virtual ActionPtr open(const char* mount, const char* path);
273 * @brief Close a file
275 * @param fd The file descriptor to close
276 * @return The StorageAction corresponding to the closing
278 virtual ActionPtr close(surf_file_t fd);
281 * @brief Unlink a file
282 * @details [long description]
284 * @param fd [description]
285 * @return [description]
287 virtual int unlink(surf_file_t fd);
290 * @brief List directory contents of a path
291 * @details [long description]
293 * @param path The path to the directory
294 * @return The StorageAction corresponding to the ls action
296 virtual ActionPtr ls(const char* mount, const char *path);
299 * @brief Get the size in bytes of the file
301 * @param fd The file descriptor to read
302 * @return The size in bytes of the file
304 virtual sg_size_t getSize(surf_file_t fd);
309 * @param fd The file descriptor to read
310 * @param size The size in bytes to read
311 * @return The StorageAction corresponding to the reading
313 virtual ActionPtr read(surf_file_t fd, sg_size_t size);
316 * @brief Write a file
318 * @param fd The file descriptor to write
319 * @param size The size in bytes to write
320 * @return The StorageAction corresponding to the writing
322 virtual ActionPtr write(surf_file_t fd, sg_size_t size);
325 * @brief Get the informations of a file descriptor
326 * @details The returned xbt_dynar_t contains:
327 * - the size of the file,
329 * - the storage name,
330 * - the storage typeId,
331 * - the storage content type
333 * @param fd The file descriptor
334 * @return An xbt_dynar_t with the file informations
336 virtual xbt_dynar_t getInfo(surf_file_t fd);
339 * @brief Get the current position of the file descriptor
341 * @param fd The file descriptor
342 * @return The current position of the file descriptor
344 virtual sg_size_t fileTell(surf_file_t fd);
347 * @brief Get the available space of the storage at the mount point
349 * @param name The mount point
350 * @return The amount of availble space in bytes
352 virtual sg_size_t getFreeSize(const char* name);
355 * @brief Get the used space of the storage at the mount point
357 * @param name The mount point
358 * @return The amount of used space in bytes
360 virtual sg_size_t getUsedSize(const char* name);
363 * @brief Set the position indictator assiociated with the file descriptor to a new position
364 * @details [long description]
366 * @param fd The file descriptor
367 * @param offset The offset from the origin
368 * @param origin Position used as a reference for the offset
369 * - SEEK_SET: beginning of the file
370 * - SEEK_CUR: current position indicator
371 * - SEEK_END: end of the file
372 * @return MSG_OK if successful, otherwise MSG_TASK_CANCELED
374 virtual int fileSeek(surf_file_t fd, sg_size_t offset, int origin);
376 xbt_dynar_t p_storage;
377 RoutingEdgePtr p_netElm;
379 NetworkLinkPtr p_network;
382 * @brief Get the list of virtual machines on the current Workstation
384 * @return The list of VMs
386 xbt_dynar_t getVms();
390 * @brief [brief description]
391 * @details [long description]
393 * @param params [description]
395 void getParams(ws_params_t params);
398 * @brief [brief description]
399 * @details [long description]
401 * @param params [description]
403 void setParams(ws_params_t params);
404 s_ws_params_t p_params;
410 /** @ingroup SURF_workstation_interface
411 * @brief SURF workstation action interface class
413 class WorkstationAction : public Action {
416 * @brief WorkstationAction constructor
418 * @param model The WorkstationModel associated to this WorkstationAction
419 * @param cost The cost of this WorkstationAction in [TODO]
420 * @param failed [description]
422 WorkstationAction(ModelPtr model, double cost, bool failed)
423 : Action(model, cost, failed) {}
426 * @brief WorkstationAction constructor
428 * @param model The WorkstationModel associated to this WorkstationAction
429 * @param cost The cost of this WorkstationAction in [TODO]
430 * @param failed [description]
431 * @param var The lmm variable associated to this StorageAction if it is part of a LMM component
433 WorkstationAction(ModelPtr model, double cost, bool failed, lmm_variable_t var)
434 : Action(model, cost, failed, var) {}
436 void setState(e_surf_action_state_t state);
440 #endif /* SURF_WORKSTATION_INTERFACE_HPP_ */