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);
106 static bool isHostOn(std::string hostname);
110 static bool isLinkOn(std::string linkname);
115 void setPstate(
const std::string &hostname,
int pstate);
122 std::shared_ptr<MemoryManager>
startNewService(MemoryManager *service);
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();
154 static double getLinkBandwidth(std::string linkname);
155 static bool isPageCachingEnabled();
156 static bool isHostShutdownSimulationEnabled();
157 static bool isEnergySimulationEnabled();
167 std::unique_ptr<S4U_Simulation> s4u_simulation;
169 std::set<std::shared_ptr<WMS>> wmses;
171 std::set<std::shared_ptr<FileRegistryService>> file_registry_services;
173 std::set<std::shared_ptr<EnergyMeterService>> energy_meter_services;
175 std::set<std::shared_ptr<BandwidthMeterService>> bandwidth_meter_services;
177 std::set<std::shared_ptr<NetworkProximityService>> network_proximity_services;
179 std::set<std::shared_ptr<ComputeService>> compute_services;
181 std::set<std::shared_ptr<StorageService>> storage_services;
183 std::set<std::shared_ptr<MemoryManager>> memory_managers;
185 static int unique_disk_sequence_number;
189 void platformSanityCheck();
190 void checkSimulationSetup();
193 void startAllProcesses();
194 void addService(std::shared_ptr<ComputeService> service);
195 void addService(std::shared_ptr<StorageService> service);
196 void addService(std::shared_ptr<NetworkProximityService> service);
197 void addService(std::shared_ptr<WMS> service);
198 void addService(std::shared_ptr<FileRegistryService> service);
199 void addService(std::shared_ptr<EnergyMeterService> service);
200 void addService(std::shared_ptr<BandwidthMeterService> service);
201 void addService(std::shared_ptr<MemoryManager> memory_manager);
203 std::string getWRENCHVersionString() {
return WRENCH_VERSION_STRING; }
205 bool is_running =
false;
207 unsigned int on_state_change_callback_id;
209 static bool energy_enabled;
210 static bool host_shutdown_enabled;
211 static bool pagecache_enabled;
216 #endif //WRENCH_SIMULATION_H
static std::map< std::string, std::vector< std::string > > getHostnameListByCluster()
**
Definition: Simulation.cpp:377
std::shared_ptr< T > add(T *t)
Method to add a service to the simulation.
Definition: Simulation.h:73
static double getMinPowerConsumption(const std::string &hostname)
Get the minimum power consumption for the host (i.e., idling) at its current pstate.
Definition: Simulation.cpp:1218
std::shared_ptr< ComputeService > startNewService(ComputeService *service)
Starts a new compute service during WMS execution (i.e., one that was not passed to Simulation::add()...
Definition: Simulation.cpp:1240
void instantiatePlatform(std::string)
Instantiate a simulated platform.
Definition: Simulation.cpp:241
static int getCurrentPstate(const std::string &hostname)
Get the current power state of a host.
Definition: Simulation.cpp:1200
static bool isHostOn(std::string hostname)
Returns whether a host is on or not.
Definition: Simulation.cpp:1011
A file registry service (a.k.a. replica catalog) that holds a database of which files are available a...
Definition: FileRegistryService.h:35
static void sleep(double duration)
Make the calling process sleep for a number of (simulated) seconds.
Definition: Simulation.cpp:1092
static bool isLinkOn(std::string linkname)
Returns whether a link is on or not.
Definition: Simulation.cpp:1036
The storage service base class.
Definition: StorageService.h:36
The compute service base class.
Definition: ComputeService.h:33
void setPstate(const std::string &hostname, int pstate)
Set the power state of the host.
Definition: Simulation.cpp:1181
static std::vector< int > getListOfPstates(const std::string &hostname)
Get the list of power states available for a host.
Definition: Simulation.cpp:1209
static void compute(double flops)
Make the calling process compute.
Definition: Simulation.cpp:1100
void launch()
Launch the simulation.
Definition: Simulation.cpp:386
static std::vector< std::string > getRoute(std::string &src_host, std::string &dst_host)
Get the list of link names on the route between two hosts.
Definition: Simulation.cpp:277
static void turnOnLink(std::string linkname)
Turns on a link.
Definition: Simulation.cpp:1052
void init(int *, char **)
Initialize the simulation, which parses out WRENCH-specific and SimGrid-specific command-line argumen...
Definition: Simulation.cpp:98
static void turnOffHost(std::string hostname)
Turns off a host.
Definition: Simulation.cpp:1019
static double getHostMemoryCapacity(std::string hostname)
Get the memory_manager_service capacity of a host given a hostname.
Definition: Simulation.cpp:984
static std::vector< std::string > getHostnameList()
Get the list of names of all the physical hosts in the platform.
Definition: Simulation.cpp:267
static unsigned long getHostNumCores(std::string hostname)
Get the number of cores of a host given a hostname.
Definition: Simulation.cpp:993
double getEnergyConsumed(const std::string &hostname)
Obtains the current energy consumption of a host.
Definition: Simulation.cpp:1118
static bool doesHostExist(std::string hostname)
Wrapper for S4U_Simulation hostExists()
Definition: Simulation.cpp:957
Simulation()
Constructor.
Definition: Simulation.cpp:64
A class that provides basic simulation methods. Once the simulation object has been explicitly or imp...
Definition: Simulation.h:46
void stageFile(WorkflowFile *file, std::shared_ptr< StorageService > ss)
Stage a copy of a file at a storage service in the root of the (unique) mount point.
Definition: Simulation.cpp:677
~Simulation()
Destructor.
Definition: Simulation.cpp:81
static void turnOnHost(std::string hostname)
Turns on a host.
Definition: Simulation.cpp:1027
static double getMaxPowerConsumption(const std::string &hostname)
Get the maximum power consumption for the host (i.e., 100% utilization) at its current pstate.
Definition: Simulation.cpp:1227
static void turnOffLink(std::string linkname)
Turns off a link.
Definition: Simulation.cpp:1044
static double getHostFlopRate(std::string hostname)
Get the flop rate of one core of a host given a hostname.
Definition: Simulation.cpp:1002
static bool doesLinkExist(std::string linkname)
Wrapper for S4U_Simulation linkExists()
Definition: Simulation.cpp:967
static int getNumberofPstates(const std::string &hostname)
Get the total number of power states of a host.
Definition: Simulation.cpp:1191
SimulationOutput & getOutput()
Get the simulation output object.
Definition: Simulation.cpp:1108
A network proximity service that continuously estimates inter-host latencies and can be queried for s...
Definition: NetworkProximityService.h:26
A class that contains post-mortem simulation-generated data.
Definition: SimulationOutput.h:27
double getLinkUsage(const std::string &link_name, bool record_as_time_stamp)
Get the current usage of a particular link.
Definition: Simulation.cpp:306
A data file used/produced by a WorkflowTask in a Workflow.
Definition: WorkflowFile.h:26
static double getCurrentSimulatedDate()
Get the current simulated date.
Definition: Simulation.cpp:975