#include "src/include/simgrid/sg_config.hpp"
#include "src/include/surf/surf.hpp"
#include "src/kernel/EngineImpl.hpp"
+#include "src/kernel/resource/DiskImpl.hpp"
#include "src/kernel/resource/profile/Profile.hpp"
#include "src/simix/smx_private.hpp"
#include "src/surf/HostImpl.hpp"
/** Module management function: creates all internal data structures */
void sg_platf_init()
{
- simgrid::s4u::on_platform_created.connect(check_disk_attachment);
+ simgrid::s4u::Engine::on_platform_created.connect(check_disk_attachment);
}
/** Module management function: frees all internal data structures */
void sg_platf_exit() {
simgrid::surf::on_cluster.disconnect_slots();
- simgrid::s4u::on_platform_created.disconnect_slots();
+ simgrid::s4u::Engine::on_platform_created.disconnect_slots();
/* make sure that we will reinit the models while loading the platf once reinited */
surf_parse_models_setup_already_called = 0;
host->pimpl_->storage_ = mount_list;
mount_list.clear();
+ host->pimpl_->disks_ = std::move(args->disks);
+ for (auto d : host->pimpl_->disks_)
+ d->set_host(host);
+
/* Change from the defaults */
if (args->state_trace)
- host->pimpl_cpu->set_state_profile(args->state_trace);
+ host->set_state_profile(args->state_trace);
if (args->speed_trace)
- host->pimpl_cpu->set_speed_profile(args->speed_trace);
+ host->set_speed_profile(args->speed_trace);
if (args->pstate != 0)
- host->pimpl_cpu->set_pstate(args->pstate);
+ host->set_pstate(args->pstate);
if (not args->coord.empty())
new simgrid::kernel::routing::vivaldi::Coords(host->pimpl_netpoint, args->coord);
}
delete cabinet->radicals;
}
-void sg_platf_new_disk(simgrid::kernel::routing::DiskCreationArgs* disk)
+simgrid::kernel::resource::DiskImpl* sg_platf_new_disk(simgrid::kernel::routing::DiskCreationArgs* disk)
{
- THROW_UNIMPLEMENTED;
+ simgrid::kernel::resource::DiskImpl* d = surf_disk_model->createDisk(disk->id, disk->read_bw, disk->write_bw);
+ if (disk->properties) {
+ d->set_properties(*disk->properties);
+ delete disk->properties;
+ }
+ simgrid::s4u::Disk::on_creation(*d->get_iface());
+ return d;
}
void sg_platf_new_storage(simgrid::kernel::routing::StorageCreationArgs* storage)
/* Change from the defaults */
if (peer->state_trace)
- host->pimpl_cpu->set_state_profile(peer->state_trace);
+ host->set_state_profile(peer->state_trace);
if (peer->speed_trace)
- host->pimpl_cpu->set_speed_profile(peer->speed_trace);
+ host->set_speed_profile(peer->speed_trace);
}
/* Pick the right models for CPU, net and host, and call their model_init_preparse */
std::string host_model_name = simgrid::config::get_value<std::string>("host/model");
std::string network_model_name = simgrid::config::get_value<std::string>("network/model");
std::string cpu_model_name = simgrid::config::get_value<std::string>("cpu/model");
+ std::string disk_model_name = simgrid::config::get_value<std::string>("disk/model");
std::string storage_model_name = simgrid::config::get_value<std::string>("storage/model");
/* The compound host model is needed when using non-default net/cpu models */
XBT_DEBUG("Call vm_model_init");
surf_vm_model_init_HL13();
+ XBT_DEBUG("Call disk_model_init");
+ int disk_id = find_model_description(surf_disk_model_description, disk_model_name);
+ surf_disk_model_description[disk_id].model_init_preparse();
+
XBT_DEBUG("Call storage_model_init");
int storage_id = find_model_description(surf_storage_model_description, storage_model_name);
surf_storage_model_description[storage_id].model_init_preparse();
simgrid::kernel::routing::NetZoneImpl* sg_platf_new_Zone_begin(simgrid::kernel::routing::ZoneCreationArgs* zone)
{
if (not surf_parse_models_setup_already_called) {
- simgrid::s4u::on_platform_creation();
+ simgrid::s4u::Engine::on_platform_creation();
/* Initialize the surf models. That must be done after we got all config, and before we need the models.
* That is, after the last <config> tag, if any, and before the first of cluster|peer|zone|trace|trace_connect
return new_zone;
}
+void sg_platf_new_Zone_set_properties(std::unordered_map<std::string, std::string>* props)
+{
+ xbt_assert(current_routing, "Cannot set properties of the current Zone: none under construction");
+
+ for (auto kv = props->begin(); kv != props->end(); ++kv)
+ current_routing->get_iface()->set_property(kv->first, kv->second);
+}
+
/**
* @brief Specify that the description of the current AS is finished
*