ComputeService.h
1 
10 #ifndef SIMULATION_COMPUTESERVICE_H
11 #define SIMULATION_COMPUTESERVICE_H
12 
13 #include <map>
14 
15 #include <iostream>
16 #include <cfloat>
17 #include <climits>
18 
19 #include "wrench/services/Service.h"
20 #include "wrench/workflow/job/WorkflowJob.h"
21 #include "wrench/workflow/job/StandardJob.h"
22 #include "wrench/workflow/job/PilotJob.h"
23 
24 namespace wrench {
25 
26  class Simulation;
27 
28  class StorageService;
29 
33  class ComputeService : public Service {
34 
35  /***********************/
37  /***********************/
38 
39  friend class StandardJobExecutorTest;
40  friend class Simulation;
41 
42  /***********************/
44  /***********************/
45 
46 
47  public:
48 
52  static constexpr unsigned long ALL_CORES = ULONG_MAX;
53 
57  static constexpr double ALL_RAM = DBL_MAX;
58 
59  /***********************/
61  /***********************/
62 
63  virtual ~ComputeService() {}
64 
65  void stop() override;
66 
67 // void submitJob(WorkflowJob *job, const std::map<std::string, std::string>& = {});
68 
69  void terminateJob(std::shared_ptr<WorkflowJob> job);
70 
71  bool supportsStandardJobs();
72 
73  bool supportsPilotJobs();
74 
75  bool hasScratch();
76 
77  unsigned long getNumHosts();
78 
79  std::map<std::string, unsigned long> getPerHostNumCores();
80 
81  unsigned long getTotalNumCores();
82 
83  std::map<std::string, unsigned long> getPerHostNumIdleCores();
84 
85  virtual unsigned long getTotalNumIdleCores();
86 
87  std::map<std::string, double> getMemoryCapacity();
88 
89  std::map<std::string, double> getPerHostAvailableMemoryCapacity();
90 
91  std::map<std::string, double> getCoreFlopRate();
92 
93  double getTTL();
94 
95  double getTotalScratchSpaceSize();
96 
97  double getFreeScratchSpaceSize();
98 
99 
100  /***********************/
102  /***********************/
103 
104  /***********************/
106  /***********************/
107 
114  virtual void
115  submitStandardJob(std::shared_ptr<StandardJob> job, const std::map<std::string, std::string> &service_specific_arguments) = 0;
116 
123  virtual void submitPilotJob(std::shared_ptr<PilotJob> job, const std::map<std::string, std::string> &service_specific_arguments) = 0;
124 
129  virtual void terminateStandardJob(std::shared_ptr<StandardJob> job) = 0;
130 
135  virtual void terminatePilotJob(std::shared_ptr<PilotJob> job) = 0;
136 
141  std::shared_ptr<StorageService> getScratch();
142 
143 
144  ComputeService(const std::string &hostname,
145  std::string service_name,
146  std::string mailbox_name_prefix,
147  std::string scratch_space_mount_point);
148 
149  protected:
150 
151  friend class JobManager;
152 
153  void submitJob(std::shared_ptr<WorkflowJob> job, const std::map<std::string, std::string>& = {});
154 
155  ComputeService(const std::string &hostname,
156  std::string service_name,
157  std::string mailbox_name_prefix,
158  std::shared_ptr<StorageService> scratch_space);
159 
161  std::shared_ptr<StorageService> scratch_space_storage_service;
162 
163  /***********************/
165  /***********************/
166 
167  /***********************/
169  /***********************/
170 
171  std::shared_ptr<StorageService> getScratchSharedPtr();
172 
173  /***********************/
175  /***********************/
176 
177  private:
178 
179 
180  std::shared_ptr<StorageService> scratch_space_storage_service_shared_ptr;
181 
182  std::map<std::string, std::map<std::string, double>> getServiceResourceInformation();
183 
184  };
185 
186 
187 };
188 
189 #endif //SIMULATION_COMPUTESERVICE_H
The compute service base class.
Definition: ComputeService.h:33
Definition: Alarm.cpp:20
static constexpr unsigned long ALL_CORES
A convenient constant to mean "use all cores of a physical host" whenever a number of cores is needed...
Definition: ComputeService.h:52
A class that provides basic simulation methods. Once the simulation object has been explicitly or imp...
Definition: Simulation.h:46
static constexpr double ALL_RAM
A convenient constant to mean "use all ram of a physical host" whenever a ram capacity is needed when...
Definition: ComputeService.h:57
A service that can be added to the simulation and that can be used by a WMS when executing a workflow...
Definition: Service.h:26