Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add energy VM example (simple but should be sufficient) - Adrien
authorAd(rien) L <adrien.lebre@inria.fr>
Tue, 20 Oct 2015 13:01:35 +0000 (15:01 +0200)
committerAd(rien) L <adrien.lebre@inria.fr>
Tue, 20 Oct 2015 13:01:35 +0000 (15:01 +0200)
examples/msg/energy/vm/1 [new file with mode: 0644]
examples/msg/energy/vm/2.out [new file with mode: 0644]
examples/msg/energy/vm/README [new file with mode: 0644]
examples/msg/energy/vm/deployment_consumption.xml [new file with mode: 0644]
examples/msg/energy/vm/energy_platform.xml [new file with mode: 0644]
examples/msg/energy/vm/vm [new file with mode: 0755]
examples/msg/energy/vm/vm.c [new file with mode: 0644]

diff --git a/examples/msg/energy/vm/1 b/examples/msg/energy/vm/1
new file mode 100644 (file)
index 0000000..41fcfb8
--- /dev/null
@@ -0,0 +1 @@
+-bash: 2.out: command not found
diff --git a/examples/msg/energy/vm/2.out b/examples/msg/energy/vm/2.out
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/examples/msg/energy/vm/README b/examples/msg/energy/vm/README
new file mode 100644 (file)
index 0000000..6f0e6cb
--- /dev/null
@@ -0,0 +1,12 @@
+Fact 1: 
+Two hosts: one task on the PM, the two hosts have the same energyfootprint
+Fact 2: 
+Two hosts: host1 hosts one VM, one task inside the VM (the same task as before), another task on the PM. the VM is correctly shutdowned at the end. Energy seems to consider the two tasks (that is the energyfootprint is equals to the energyfootprint to one host with two tasks.
+
+Issue 1: 
+If you kill the VM before terminating internal tasks you get warning and energy is not correct
+[10.000000] [msg_test/INFO] Total simulation time: 10.00
+[10.000000] /Users/alebre/DEVELOPMENTS/SIMGRID/simgrid/src/msg/msg_host.c:157: [msg/WARNING] dp_objs: 1 pending task?
+[10.000000] [surf_energy/INFO] Total energy of host MyHost1: 1300.000000 Joules
+Issue 2: 
+
diff --git a/examples/msg/energy/vm/deployment_consumption.xml b/examples/msg/energy/vm/deployment_consumption.xml
new file mode 100644 (file)
index 0000000..b9c8941
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+<platform version="3">
+
+  <process host="MyHost1" function="dvfs_test" />
+
+</platform>
diff --git a/examples/msg/energy/vm/energy_platform.xml b/examples/msg/energy/vm/energy_platform.xml
new file mode 100644 (file)
index 0000000..8009e81
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+<platform version="3">
+<AS  id="AS0"  routing="Full">
+  <!-- Multiple pstate processor capacities can be defined as a list of powers specified for a given host -->
+  <!-- The enabled pstate can be set through the "pstate" attribute (lowest pstate corresponds to the highest processor power) -->
+  <host id="MyHost1" power="100.0Mf,50.0Mf,20.0Mf" pstate="0" >
+        <!--  List of min_power:max_power pairs (in Watts) corresponding to the power consumed when the processor is idle and when it is fully loaded -->
+        <!--  The list must contain one power pair for each previously defined pstate-->
+        <prop id="watt_per_state" value="95.0:200.0, 93.0:170.0, 90.0:150.0" />
+        <prop id="watt_off" value="10" />
+  </host>
+  <host id="MyHost2" power="100.0Mf,50.0Mf,20.0Mf" pstate="0" >
+        <prop id="watt_per_state" value="95.0:200.0, 93.0:170.0, 90.0:150.0" />
+        <prop id="watt_off" value="10" />
+  </host>
+
+  <link id="link1" bandwidth="100kBps" latency="0"/>
+  <route src="MyHost1" dst="MyHost2"><link_ctn id="link1"/></route>
+  
+</AS>
+</platform>
diff --git a/examples/msg/energy/vm/vm b/examples/msg/energy/vm/vm
new file mode 100755 (executable)
index 0000000..9b0e79b
Binary files /dev/null and b/examples/msg/energy/vm/vm differ
diff --git a/examples/msg/energy/vm/vm.c b/examples/msg/energy/vm/vm.c
new file mode 100644 (file)
index 0000000..9b0543e
--- /dev/null
@@ -0,0 +1,123 @@
+/* Copyright (c) 2007-2010, 2013-2015. The SimGrid Team.
+ * All rights reserved.                                                     */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
+#include<stdio.h>
+
+#include "simgrid/msg.h"
+#include "xbt/sysdep.h"         /* calloc */
+#include "simgrid/plugins.h"
+
+/* Create a log channel to have nice outputs. */
+#include "xbt/log.h"
+#include "xbt/asserts.h"
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test,
+                             "Messages specific for this msg example");
+
+static msg_host_t host1 = NULL;
+static msg_host_t host2 = NULL;
+static msg_vm_t vm1 = NULL;
+static double start;
+
+int dvfs(int argc, char *argv[]);
+int shutdown_vm(void *ignored1, void *ignored2);
+
+int worker_func() {
+       //MSG_process_on_exit(shutdown_vm, NULL);
+
+       msg_task_t task1 = MSG_task_create("t1", 300E6, 0, NULL);
+  MSG_task_execute (task1);
+  MSG_task_destroy(task1);
+  XBT_INFO("Worker fun done");
+       return 0;
+}
+
+/*
+int shutdown_vm(void *ignored1, void *ignored2) {
+  start = MSG_get_clock();
+  XBT_INFO("Shutting down the VM");
+       MSG_vm_shutdown(vm1);
+
+
+  XBT_INFO("VM is now down (duration: %.2f s). Current peak speed=%.0E flop/s; Energy dissipated=%.0f J",
+                 MSG_get_clock()-start,
+                 MSG_host_get_current_power_peak(host), MSG_host_get_consumed_energy(host));
+
+       return 0;
+}
+*/
+
+int dvfs(int argc, char *argv[])
+{
+  host1 = MSG_host_by_name("MyHost1");
+  host2 = MSG_host_by_name("MyHost2");
+
+  double start = MSG_get_clock();
+
+  /* Host 1 */
+  XBT_INFO("Creating and starting a VM");
+       vm1 = MSG_vm_create(host1,
+                      "vm1", /* name */
+                      4, /* number of cpus */
+                      2048, /* ram size */
+                      100, /* net cap */
+                      "", /* disk path */
+                      1024 * 20, /* disk size */
+                      10, /* mig netspeed */
+                      50 /* dp intensity */
+                      );
+
+  // on Host1 create two tasks, one inside a VM  the other one  directly on the host 
+       MSG_vm_start(vm1);
+  msg_process_t p11 = MSG_process_create("p11", worker_func, NULL, vm1); 
+  msg_process_t p12 = MSG_process_create("p12", worker_func, NULL, host1);
+  //XBT_INFO("Task on Host started");
+
+
+  // on Host2, create two tasks directlu on the host: Energy of host 1 and host 2 should be the same. 
+  msg_process_t p21 = MSG_process_create("p21", worker_func, NULL, host2);
+  msg_process_t p22 = MSG_process_create("p22", worker_func, NULL, host2);
+
+  /* Wait and see */
+       MSG_process_sleep(5);
+       MSG_process_sleep(5);
+       MSG_vm_shutdown(vm1);
+
+  return 0;
+}
+
+int main(int argc, char *argv[])
+{
+  msg_error_t res = MSG_OK;
+  sg_energy_plugin_init();
+  MSG_init(&argc, argv);
+
+  if (argc != 3) {
+    XBT_CRITICAL("Usage: %s platform_file deployment_file\n",
+              argv[0]);
+    XBT_CRITICAL
+        ("example: %s msg_platform.xml msg_deployment.xml\n",
+         argv[0]);
+    exit(1);
+  }
+
+  MSG_create_environment(argv[1]);
+
+  /*   Application deployment */
+  MSG_function_register("dvfs_test", dvfs);
+
+  MSG_launch_application(argv[2]);
+
+  res = MSG_main();
+
+  XBT_INFO("Total simulation time: %.2f", MSG_get_clock());
+
+  if (res == MSG_OK)
+    return 0;
+  else
+    return 1;
+}
+