WorkstationModelPtr surf_workstation_model = NULL;
-//FIXME:Faire hériter ou composer de cup et network
-
/*************
* CallBacks *
*************/
xbt_cfg_setdefault_boolean(_sg_cfg_set, "network/crosstraffic", "yes");
surf_cpu_model_init_Cas01();
surf_network_model_init_LegrandVelho();
+ surf_workstation_model->p_cpuModel = surf_cpu_model_pm;
ModelPtr model = static_cast<ModelPtr>(surf_workstation_model);
xbt_dynar_push(model_list, &model);
}
WorkstationModel::WorkstationModel() : Model("Workstation") {
+ p_cpuModel = surf_cpu_model_pm;
}
WorkstationModel::~WorkstationModel() {
double WorkstationModel::shareResources(double now){
adjustWeightOfDummyCpuActions();
- double min_by_cpu = surf_cpu_model_pm->shareResources(now);
+ double min_by_cpu = p_cpuModel->shareResources(now);
double min_by_net = surf_network_model->shareResources(now);
-
- XBT_DEBUG("model %p, %s min_by_cpu %f, %s min_by_net %f",
- this, surf_cpu_model_pm->m_name.c_str(), min_by_cpu, surf_network_model->m_name.c_str(), min_by_net);
-
- if (min_by_cpu >= 0.0 && min_by_net >= 0.0)
- return min(min_by_cpu, min_by_net);
- else if (min_by_cpu >= 0.0)
- return min_by_cpu;
- else if (min_by_net >= 0.0)
- return min_by_net;
- else
- return min_by_cpu; /* probably min_by_cpu == min_by_net == -1 */
-}
-
-void WorkstationModel::updateActionsState(double now, double delta){
+ double min_by_sto = -1;
+ if (p_cpuModel == surf_cpu_model_pm)
+ min_by_sto = surf_storage_model->shareResources(now);
+
+ XBT_DEBUG("model %p, %s min_by_cpu %f, %s min_by_net %f, %s min_by_sto %f",
+ this, surf_cpu_model_pm->m_name.c_str(), min_by_cpu,
+ surf_network_model->m_name.c_str(), min_by_net,
+ surf_storage_model->m_name.c_str(), min_by_sto);
+
+ double res = max(max(min_by_cpu, min_by_net), min_by_sto);
+ if (min_by_cpu >= 0.0 && min_by_cpu < res)
+ res = min_by_cpu;
+ if (min_by_net >= 0.0 && min_by_net < res)
+ res = min_by_net;
+ if (min_by_sto >= 0.0 && min_by_sto < res)
+ res = min_by_sto;
+ return res;
+}
+
+void WorkstationModel::updateActionsState(double /*now*/, double /*delta*/){
return;
}
return -1;
}
-void WorkstationCLM03::updateState(tmgr_trace_event_t event_type, double value, double date){
+void WorkstationCLM03::updateState(tmgr_trace_event_t /*event_type*/, double /*value*/, double /*date*/){
THROW_IMPOSSIBLE; /* This model does not implement parallel tasks */
}
return st->close(fd);
}
-ActionPtr WorkstationCLM03::read(surf_file_t fd, sg_storage_size_t size) {
+ActionPtr WorkstationCLM03::read(surf_file_t fd, sg_size_t size) {
StoragePtr st = findStorageOnMountList(fd->mount);
XBT_DEBUG("READ on disk '%s'",st->m_name);
return st->read(fd, size);
}
-ActionPtr WorkstationCLM03::write(surf_file_t fd, sg_storage_size_t size) {
+ActionPtr WorkstationCLM03::write(surf_file_t fd, sg_size_t size) {
StoragePtr st = findStorageOnMountList(fd->mount);
XBT_DEBUG("WRITE on disk '%s'",st->m_name);
return st->write(fd, size);
return st->ls(path);
}
-sg_storage_size_t WorkstationCLM03::getSize(surf_file_t fd){
+sg_size_t WorkstationCLM03::getSize(surf_file_t fd){
return fd->size;
}
xbt_dynar_t WorkstationCLM03::getInfo( surf_file_t fd)
{
StoragePtr st = findStorageOnMountList(fd->mount);
- sg_storage_size_t *psize = xbt_new(sg_storage_size_t, 1);
+ sg_size_t *psize = xbt_new(sg_size_t, 1);
*psize = fd->size;
xbt_dynar_t info = xbt_dynar_new(sizeof(void*), NULL);
- xbt_dynar_push_as(info, sg_storage_size_t *, psize);
+ xbt_dynar_push_as(info, sg_size_t *, psize);
xbt_dynar_push_as(info, void *, fd->mount);
xbt_dynar_push_as(info, void *, (void *)st->m_name);
xbt_dynar_push_as(info, void *, st->p_typeId);
return info;
}
-sg_storage_size_t WorkstationCLM03::getFreeSize(const char* name)
+sg_size_t WorkstationCLM03::getFreeSize(const char* name)
{
StoragePtr st = findStorageOnMountList(name);
return st->m_size - st->m_usedSize;
}
-sg_storage_size_t WorkstationCLM03::getUsedSize(const char* name)
+sg_size_t WorkstationCLM03::getUsedSize(const char* name)
{
StoragePtr st = findStorageOnMountList(name);
return st->m_usedSize;