From 3af9dcb5714db015a7038a58701b2b453f52c6ca Mon Sep 17 00:00:00 2001 From: =?utf8?q?Paul=20B=C3=A9daride?= Date: Tue, 19 Nov 2013 15:16:57 +0100 Subject: [PATCH 1/1] No vm when ptask on --- src/surf/cpu_cas01.cpp | 12 ++++++++---- src/surf/vm_workstation.cpp | 18 +++++++++++++----- src/surf/workstation.cpp | 1 + src/surf/workstation.hpp | 1 + src/surf/workstation_ptask_L07.cpp | 2 ++ src/surf/workstation_ptask_L07.hpp | 2 +- 6 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/surf/cpu_cas01.cpp b/src/surf/cpu_cas01.cpp index 0ea02178d3..0ad4498b1e 100644 --- a/src/surf/cpu_cas01.cpp +++ b/src/surf/cpu_cas01.cpp @@ -43,8 +43,8 @@ void surf_cpu_model_init_Cas01() { char *optim = xbt_cfg_get_string(_sg_cfg_set, "cpu/optim"); - if (surf_cpu_model_pm) - return; + xbt_assert(!surf_cpu_model_pm); + xbt_assert(!surf_cpu_model_vm); if (!strcmp(optim, "TI")) { surf_cpu_model_init_ti(); @@ -52,9 +52,13 @@ void surf_cpu_model_init_Cas01() } surf_cpu_model_pm = new CpuCas01Model(); + surf_cpu_model_vm = new CpuCas01Model(); + cpu_define_callbacks(); - ModelPtr model = static_cast(surf_cpu_model_pm); - xbt_dynar_push(model_list, &model); + ModelPtr model_pm = static_cast(surf_cpu_model_pm); + ModelPtr model_vm = static_cast(surf_cpu_model_vm); + xbt_dynar_push(model_list, &model_pm); + xbt_dynar_push(model_list, &model_vm); } CpuCas01Model::CpuCas01Model() : CpuModel("cpu") diff --git a/src/surf/vm_workstation.cpp b/src/surf/vm_workstation.cpp index 744576bb88..072942ca83 100644 --- a/src/surf/vm_workstation.cpp +++ b/src/surf/vm_workstation.cpp @@ -14,15 +14,21 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_vm_workstation, surf, WorkstationVMModelPtr surf_vm_workstation_model = NULL; void surf_vm_workstation_model_init_current_default(void){ - surf_vm_workstation_model = new WorkstationVMModel(); - xbt_dynar_push(model_list, &surf_vm_workstation_model); - xbt_dynar_push(model_list_invoke, &surf_vm_workstation_model); + if (surf_cpu_model_vm) { + surf_vm_workstation_model = new WorkstationVMModel(); + ModelPtr model = static_cast(surf_vm_workstation_model); + + xbt_dynar_push(model_list, &model); + xbt_dynar_push(model_list_invoke, &model); + } } + /********* * Model * *********/ WorkstationVMModel::WorkstationVMModel() : WorkstationModel("Virtual Workstation") { + p_cpuModel = surf_cpu_model_vm; } /* ind means ''indirect'' that this is a reference on the whole dict_elm @@ -59,8 +65,10 @@ double WorkstationVMModel::shareResources(double now) /* 0. Make sure that we already calculated the resource share at the physical * machine layer. */ { - unsigned int index_of_pm_ws_model = xbt_dynar_search(model_list_invoke, &surf_workstation_model); - unsigned int index_of_vm_ws_model = xbt_dynar_search(model_list_invoke, &surf_vm_workstation_model); + ModelPtr ws_model = static_cast(surf_workstation_model); + ModelPtr vm_ws_model = static_cast(surf_vm_workstation_model); + unsigned int index_of_pm_ws_model = xbt_dynar_search(model_list_invoke, &ws_model); + unsigned int index_of_vm_ws_model = xbt_dynar_search(model_list_invoke, &vm_ws_model); xbt_assert((index_of_pm_ws_model < index_of_vm_ws_model), "Cannot assume surf_workstation_model comes before"); /* Another option is that we call sub_ws->share_resource() here. The diff --git a/src/surf/workstation.cpp b/src/surf/workstation.cpp index 19dfbd22e0..c6bec86118 100644 --- a/src/surf/workstation.cpp +++ b/src/surf/workstation.cpp @@ -30,6 +30,7 @@ void surf_workstation_model_init_current_default(void) 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(surf_workstation_model); xbt_dynar_push(model_list, &model); diff --git a/src/surf/workstation.hpp b/src/surf/workstation.hpp index dc871bb062..126757d4bf 100644 --- a/src/surf/workstation.hpp +++ b/src/surf/workstation.hpp @@ -52,6 +52,7 @@ public: double rate); virtual xbt_dynar_t getRoute(WorkstationCLM03Ptr src, WorkstationCLM03Ptr dst); virtual ActionPtr communicate(WorkstationCLM03Ptr src, WorkstationCLM03Ptr dst, double size, double rate); + CpuModelPtr p_cpuModel; }; /************ diff --git a/src/surf/workstation_ptask_L07.cpp b/src/surf/workstation_ptask_L07.cpp index 0010a53738..541045387e 100644 --- a/src/surf/workstation_ptask_L07.cpp +++ b/src/surf/workstation_ptask_L07.cpp @@ -25,6 +25,7 @@ WorkstationL07Model::WorkstationL07Model() : WorkstationModel("Workstation ptask 0.000015, NULL, SURF_RESOURCE_ON, NULL, SURF_LINK_FATPIPE, NULL)); + p_cpuModel = surf_cpu_model_pm; } WorkstationL07Model::~WorkstationL07Model() { @@ -860,4 +861,5 @@ void surf_workstation_model_init_ptask_L07(void) surf_workstation_model = new WorkstationL07Model(); ModelPtr model = static_cast(surf_workstation_model); xbt_dynar_push(model_list, &model); + xbt_dynar_push(model_list_invoke, &model); } diff --git a/src/surf/workstation_ptask_L07.hpp b/src/surf/workstation_ptask_L07.hpp index 0fcb23c624..1678943f8f 100644 --- a/src/surf/workstation_ptask_L07.hpp +++ b/src/surf/workstation_ptask_L07.hpp @@ -59,7 +59,6 @@ public: xbt_dynar_t getRoute(WorkstationCLM03Ptr src, WorkstationCLM03Ptr dst); ActionPtr communicate(WorkstationCLM03Ptr src, WorkstationCLM03Ptr dst, double size, double rate); void addTraces(); - CpuL07ModelPtr p_cpuModel; NetworkL07ModelPtr p_networkModel; }; @@ -74,6 +73,7 @@ public: tmgr_trace_t state_trace, xbt_dict_t cpu_properties); void addTraces() {DIE_IMPOSSIBLE;}; + WorkstationL07ModelPtr p_workstationModel; }; -- 2.20.1