11 #ifndef WRENCH_SIMULATION_H
12 #define WRENCH_SIMULATION_H
16 #include <nlohmann/json.hpp>
18 #include <wrench/simulation/SimulationOutput.h>
25 class NetworkProximityService;
26 class FileRegistryService;
27 class EnergyMeterService;
28 class BandwidthMeterService;
30 class BatchComputeService;
31 class BareMetalComputeService;
32 class CloudComputeService;
33 class VirtualizedClusterComputeService;
36 class SimulationOutput;
53 void init(
int *,
char **);
73 std::shared_ptr<T>
add(T *t) {
74 auto s = std::shared_ptr<T>(t);
83 std::map<std::string, double>
getEnergyConsumed(
const std::vector<std::string> &hostnames);
93 void stageFile(
WorkflowFile *file, std::shared_ptr<StorageService> ss, std::string directory_absolute_path);
100 static std::vector<std::string> getRoute(std::string &src_host, std::string &dst_host);
102 double getLinkUsage(
const std::string &link_name,
bool record_as_time_stamp);
103 std::map<std::string, double>
getEnergyConsumed(
const std::vector<std::string> &hostnames,
bool record_as_time_stamps);
105 static bool doesHostExist(std::string hostname);
106 static bool isHostOn(std::string hostname);
107 static void turnOnHost(std::string hostname);
108 static void turnOffHost(std::string hostname);
109 static bool doesLinkExist(std::string linkname);
110 static bool isLinkOn(std::string linkname);
111 static void turnOnLink(std::string linkname);
112 static void turnOffLink(std::string linkname);
115 void setPstate(
const std::string &hostname,
int pstate);
116 static int getCurrentPstate(
const std::string &hostname);
118 std::shared_ptr<ComputeService> startNewService(
ComputeService *service);
119 std::shared_ptr<StorageService> startNewService(
StorageService *service);
122 std::shared_ptr<MemoryManager> startNewService(MemoryManager *service);
124 static double getCurrentSimulatedDate();
126 static void sleep(
double duration);
127 static void compute(
double flops);
135 void readFromDisk(
double num_bytes, std::string hostname, std::string mount_point);
136 void readFromDiskAndWriteToDiskConcurrently(
double num_bytes_to_read,
double num_bytes_to_write,
137 std::string hostname,
138 std::string read_mount_point,
139 std::string write_mount_point);
140 void writeToDisk(
double num_bytes, std::string hostname, std::string mount_point);
142 void readWithMemoryCache(
WorkflowFile *file,
double n_bytes, std::shared_ptr<FileLocation> location);
143 void writebackWithMemoryCache(
WorkflowFile *file,
double n_bytes, std::shared_ptr<FileLocation> location,
bool is_dirty);
144 void writeThroughWithMemoryCache(
WorkflowFile *file,
double n_bytes, std::shared_ptr<FileLocation> location);
145 MemoryManager* getMemoryManagerByHost(std::string hostname);
147 static double getMemoryCapacity();
148 static unsigned long getNumCores();
149 static double getFlopRate();
150 static std::string getHostName();
152 static std::vector<std::string> getLinknameList();
153 static double getLinkUsage(std::string linkname);
154 static double getLinkBandwidth(std::string linkname);
155 static bool isPageCachingEnabled();
164 std::unique_ptr<S4U_Simulation> s4u_simulation;
166 std::set<std::shared_ptr<WMS>> wmses;
168 std::set<std::shared_ptr<FileRegistryService>> file_registry_services;
170 std::set<std::shared_ptr<EnergyMeterService>> energy_meter_services;
172 std::set<std::shared_ptr<BandwidthMeterService>> bandwidth_meter_services;
174 std::set<std::shared_ptr<NetworkProximityService>> network_proximity_services;
176 std::set<std::shared_ptr<ComputeService>> compute_services;
178 std::set<std::shared_ptr<StorageService>> storage_services;
180 std::set<std::shared_ptr<MemoryManager>> memory_managers;
182 static int unique_disk_sequence_number;
186 void platformSanityCheck();
187 void checkSimulationSetup();
190 void startAllProcesses();
191 void addService(std::shared_ptr<ComputeService> service);
192 void addService(std::shared_ptr<StorageService> service);
193 void addService(std::shared_ptr<NetworkProximityService> service);
194 void addService(std::shared_ptr<WMS> service);
195 void addService(std::shared_ptr<FileRegistryService> service);
196 void addService(std::shared_ptr<EnergyMeterService> service);
197 void addService(std::shared_ptr<BandwidthMeterService> service);
198 void addService(std::shared_ptr<MemoryManager> memory_manager);
200 std::string getWRENCHVersionString() {
return WRENCH_VERSION_STRING; }
202 bool is_running =
false;
204 unsigned int on_state_change_callback_id;
206 static bool pagecache_enabled;
211 #endif //WRENCH_SIMULATION_H