From: Ad(rien) L Date: Tue, 20 Oct 2015 13:01:35 +0000 (+0200) Subject: Add energy VM example (simple but should be sufficient) - Adrien X-Git-Tag: v3_13~1644^2~2 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/f34f8817d6436a1d9c5876a67e842ba38033816a Add energy VM example (simple but should be sufficient) - Adrien --- diff --git a/examples/msg/energy/vm/1 b/examples/msg/energy/vm/1 new file mode 100644 index 0000000000..41fcfb81e7 --- /dev/null +++ b/examples/msg/energy/vm/1 @@ -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 index 0000000000..e69de29bb2 diff --git a/examples/msg/energy/vm/README b/examples/msg/energy/vm/README new file mode 100644 index 0000000000..6f0e6cb75b --- /dev/null +++ b/examples/msg/energy/vm/README @@ -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 index 0000000000..b9c8941609 --- /dev/null +++ b/examples/msg/energy/vm/deployment_consumption.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/examples/msg/energy/vm/energy_platform.xml b/examples/msg/energy/vm/energy_platform.xml new file mode 100644 index 0000000000..8009e81595 --- /dev/null +++ b/examples/msg/energy/vm/energy_platform.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/msg/energy/vm/vm b/examples/msg/energy/vm/vm new file mode 100755 index 0000000000..9b0e79bc8d 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 index 0000000000..9b0543eda1 --- /dev/null +++ b/examples/msg/energy/vm/vm.c @@ -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 + +#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; +} +