Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Disk: add solver as an option
authorBruno Donassolo <bruno.donassolo@inria.fr>
Wed, 16 Mar 2022 18:04:40 +0000 (19:04 +0100)
committerBruno Donassolo <bruno.donassolo@inria.fr>
Fri, 18 Mar 2022 08:24:44 +0000 (09:24 +0100)
Select one random test which timing should be the same between maxmin
and bmf

src/kernel/resource/DiskImpl.cpp
src/surf/cpu_cas01.cpp
teshsuite/s4u/concurrent_rw/concurrent_rw.tesh

index 5456626..8a45da6 100644 (file)
@@ -6,11 +6,18 @@
 #include "DiskImpl.hpp"
 
 #include "simgrid/s4u/Engine.hpp"
+#include "simgrid/sg_config.hpp"
 #include "src/kernel/EngineImpl.hpp"
 #include "src/kernel/lmm/maxmin.hpp"
 #include "src/kernel/resource/profile/Profile.hpp"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(res_disk, ker_resource, "Disk resources, that fuel I/O activities");
+/***********
+ * Options *
+ ***********/
+static simgrid::config::Flag<std::string> cfg_disk_solver("disk/solver",
+                                                          "Set linear equations solver used by disk model", "maxmin",
+                                                          &simgrid::kernel::lmm::System::validate_solver);
 
 namespace simgrid {
 namespace kernel {
@@ -24,7 +31,7 @@ xbt::signal<void(DiskAction const&, Action::State, Action::State)> DiskAction::o
 
 DiskModel::DiskModel(const std::string& name) : Model(name)
 {
-  set_maxmin_system(lmm::System::build("maxmin", true /* selective update */));
+  set_maxmin_system(lmm::System::build(cfg_disk_solver, true /* selective update */));
 }
 
 /************
index 18df256..b2710f5 100644 (file)
@@ -70,7 +70,7 @@ CpuCas01Model::CpuCas01Model(const std::string& name) : CpuModel(name)
     select = true;
   }
 
-  set_maxmin_system(lmm::System::build(config::get_value<std::string>("cpu/solver"), select));
+  set_maxmin_system(lmm::System::build(cfg_cpu_solver, select));
 }
 
 CpuImpl* CpuCas01Model::create_cpu(s4u::Host* host, const std::vector<double>& speed_per_pstate)
index e450afc..593a980 100644 (file)
@@ -35,3 +35,42 @@ $ ./concurrent_rw ${platfdir}/hosts_with_disks.xml "--log=root.fmt:[%10.6r]%e(%a
 > [ 10.800000] (host@bob) actor 4 is reading again!
 > [ 11.800000] (host@bob) actor 5 is reading again!
 > [ 11.840000] (maestro@) Simulation time 11.84
+
+$ ./concurrent_rw ${platfdir}/hosts_with_disks.xml "--log=root.fmt:[%10.6r]%e(%a@%h)%e%m%n" --cfg=disk/solver:bmf
+> [  0.000000] (maestro@) Configuration change: Set 'disk/solver' to 'bmf'
+> [  0.000000] (host@bob) actor 1 is writing!
+> [  0.000000] (host@bob) actor 2 is writing!
+> [  0.000000] (host@bob) actor 3 is writing!
+> [  0.000000] (host@bob) actor 4 is writing!
+> [  0.000000] (host@bob) actor 5 is writing!
+> [  0.500000] (host@bob) actor 1 goes to sleep for 1 seconds
+> [  0.500000] (host@bob) actor 2 goes to sleep for 2 seconds
+> [  0.500000] (host@bob) actor 3 goes to sleep for 3 seconds
+> [  0.500000] (host@bob) actor 4 goes to sleep for 4 seconds
+> [  0.500000] (host@bob) actor 5 goes to sleep for 5 seconds
+> [  1.500000] (host@bob) actor 1 is writing again!
+> [  1.600000] (host@bob) actor 1 goes to sleep for 5 seconds
+> [  2.500000] (host@bob) actor 2 is writing again!
+> [  2.600000] (host@bob) actor 2 goes to sleep for 4 seconds
+> [  3.500000] (host@bob) actor 3 is writing again!
+> [  3.600000] (host@bob) actor 3 goes to sleep for 3 seconds
+> [  4.500000] (host@bob) actor 4 is writing again!
+> [  4.600000] (host@bob) actor 4 goes to sleep for 2 seconds
+> [  5.500000] (host@bob) actor 5 is writing again!
+> [  5.600000] (host@bob) actor 5 goes to sleep for 1 seconds
+> [  6.600000] (host@bob) actor 1 is reading!
+> [  6.600000] (host@bob) actor 2 is reading!
+> [  6.600000] (host@bob) actor 3 is reading!
+> [  6.600000] (host@bob) actor 4 is reading!
+> [  6.600000] (host@bob) actor 5 is reading!
+> [  6.800000] (host@bob) actor 1 goes to sleep for 1 seconds
+> [  6.800000] (host@bob) actor 2 goes to sleep for 2 seconds
+> [  6.800000] (host@bob) actor 3 goes to sleep for 3 seconds
+> [  6.800000] (host@bob) actor 4 goes to sleep for 4 seconds
+> [  6.800000] (host@bob) actor 5 goes to sleep for 5 seconds
+> [  7.800000] (host@bob) actor 1 is reading again!
+> [  8.800000] (host@bob) actor 2 is reading again!
+> [  9.800000] (host@bob) actor 3 is reading again!
+> [ 10.800000] (host@bob) actor 4 is reading again!
+> [ 11.800000] (host@bob) actor 5 is reading again!
+> [ 11.840000] (maestro@) Simulation time 11.84