Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
move VM setBound to the plugin
authorFrederic Suter <frederic.suter@cc.in2p3.fr>
Fri, 15 Dec 2017 19:37:27 +0000 (20:37 +0100)
committerFrederic Suter <frederic.suter@cc.in2p3.fr>
Fri, 15 Dec 2017 19:37:27 +0000 (20:37 +0100)
NEWS
include/simgrid/s4u/VirtualMachine.hpp
src/msg/msg_vm.cpp
src/plugins/vm/s4u_VirtualMachine.cpp

diff --git a/NEWS b/NEWS
index a4552aa..decbae7 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -5,7 +5,7 @@ __   _____ _ __ ___(_) ___  _ __   |___ / / |( _ )
   \_/ \___|_|  |___/_|\___/|_| |_| |____(_)_|\___/
                (not released yet)
 
-The "Oh Oh Oh! SimGrid 4 is coming to town" release.
+The "Ho Ho Ho! SimGrid 4 is coming to town" release.
 
  * Convert most of (but not all) MSG examples to S4U.
  * New model: energy consumption due to the network.
index c999f96..94af590 100644 (file)
@@ -56,6 +56,7 @@ public:
   simgrid::s4u::Host* getPm();
   size_t getRamsize();
   void setRamsize(size_t ramsize);
+  void setBound(double bound);
 
   e_surf_vm_state_t getState();
 
index 88e602f..2d9e4ab 100644 (file)
@@ -789,34 +789,8 @@ msg_host_t MSG_vm_get_pm(msg_vm_t vm)
   return vm->getPm();
 }
 
-/** @brief Set a CPU bound for a given VM.
- *  @ingroup msg_VMs
- *
- * 1. Note that in some cases MSG_task_set_bound() may not intuitively work for VMs.
- *
- * For example,
- *  On PM0, there are Task1 and VM0.
- *  On VM0, there is Task2.
- * Now we bound 75% to Task1\@PM0 and bound 25% to Task2\@VM0.
- * Then,
- *  Task1\@PM0 gets 50%.
- *  Task2\@VM0 gets 25%.
- * This is NOT 75% for Task1\@PM0 and 25% for Task2\@VM0, respectively.
- *
- * This is because a VM has the dummy CPU action in the PM layer. Putting a task on the VM does not affect the bound of
- * the dummy CPU action. The bound of the dummy CPU action is unlimited.
- *
- * There are some solutions for this problem. One option is to update the bound of the dummy CPU action automatically.
- * It should be the sum of all tasks on the VM. But, this solution might be costly, because we have to scan all tasks
- * on the VM in share_resource() or we have to trap both the start and end of task execution.
- *
- * The current solution is to use MSG_vm_set_bound(), which allows us to directly set the bound of the dummy CPU action.
- *
- * 2. Note that bound == 0 means no bound (i.e., unlimited). But, if a host has multiple CPU cores, the CPU share of a
- *    computation task (or a VM) never exceeds the capacity of a CPU core.
- */
 void MSG_vm_set_bound(msg_vm_t vm, double bound)
 {
-  simgrid::simix::kernelImmediate([vm, bound]() { vm->pimpl_vm_->setBound(bound); });
+  vm->setBound(bound);
 }
 }
index e4f8a46..8bda7e7 100644 (file)
@@ -128,7 +128,36 @@ void VirtualMachine::setRamsize(size_t ramsize)
 {
   pimpl_vm_->setRamsize(ramsize);
 }
-
+/** @brief Set a CPU bound for a given VM.
+ *  @ingroup msg_VMs
+ *
+ * 1. Note that in some cases MSG_task_set_bound() may not intuitively work for VMs.
+ *
+ * For example,
+ *  On PM0, there are Task1 and VM0.
+ *  On VM0, there is Task2.
+ * Now we bound 75% to Task1\@PM0 and bound 25% to Task2\@VM0.
+ * Then,
+ *  Task1\@PM0 gets 50%.
+ *  Task2\@VM0 gets 25%.
+ * This is NOT 75% for Task1\@PM0 and 25% for Task2\@VM0, respectively.
+ *
+ * This is because a VM has the dummy CPU action in the PM layer. Putting a task on the VM does not affect the bound of
+ * the dummy CPU action. The bound of the dummy CPU action is unlimited.
+ *
+ * There are some solutions for this problem. One option is to update the bound of the dummy CPU action automatically.
+ * It should be the sum of all tasks on the VM. But, this solution might be costly, because we have to scan all tasks
+ * on the VM in share_resource() or we have to trap both the start and end of task execution.
+ *
+ * The current solution is to use setBound(), which allows us to directly set the bound of the dummy CPU action.
+ *
+ * 2. Note that bound == 0 means no bound (i.e., unlimited). But, if a host has multiple CPU cores, the CPU share of a
+ *    computation task (or a VM) never exceeds the capacity of a CPU core.
+ */
+void VirtualMachine::setBound(double bound)
+{
+  simgrid::simix::kernelImmediate([this, bound]() { pimpl_vm_->setBound(bound); });
+}
 /** @brief Retrieve a copy of the parameters of that VM/PM
  *  @details The ramsize and overcommit fields are used on the PM too */
 void VirtualMachine::getParameters(vm_params_t params)