From f60efb7e9e5f49bab54fa609d40a55ad1d72cb90 Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Wed, 21 Oct 2015 18:56:43 +0200 Subject: [PATCH] integrate an example/test for energy+VMs --- examples/msg/energy/vm/.gitignore | 1 + examples/msg/energy/vm/energy_vm.c | 67 ++++++++++---------------- examples/platforms/energy_platform.xml | 6 +-- tools/cmake/MakeExe.cmake | 1 + tools/cmake/Tests.cmake | 1 + 5 files changed, 32 insertions(+), 44 deletions(-) create mode 100644 examples/msg/energy/vm/.gitignore diff --git a/examples/msg/energy/vm/.gitignore b/examples/msg/energy/vm/.gitignore new file mode 100644 index 0000000000..59c6fd40f4 --- /dev/null +++ b/examples/msg/energy/vm/.gitignore @@ -0,0 +1 @@ +energy_vm diff --git a/examples/msg/energy/vm/energy_vm.c b/examples/msg/energy/vm/energy_vm.c index 7b1b34e22c..edc741b761 100644 --- a/examples/msg/energy/vm/energy_vm.c +++ b/examples/msg/energy/vm/energy_vm.c @@ -14,58 +14,49 @@ #include "xbt/log.h" #include "xbt/asserts.h" -XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test, - "Messages specific for this msg example"); +XBT_LOG_NEW_DEFAULT_CATEGORY(energy_vm, "Messages of this example"); -static msg_host_t host1 = NULL; -static msg_host_t host2 = NULL; -static msg_vm_t vm1 = NULL; - -int dvfs(int argc, char *argv[]); static 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"); + XBT_INFO("This worker is done."); return 0; } -int dvfs(int argc, char *argv[]) +static int dvfs(int argc, char *argv[]) { - host1 = MSG_host_by_name("MyHost1"); - host2 = MSG_host_by_name("MyHost2"); + msg_host_t host1 = MSG_host_by_name("MyHost1"); + msg_host_t host2 = MSG_host_by_name("MyHost2"); + msg_host_t host3 = MSG_host_by_name("MyHost3"); /* 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 */ - NULL, /* 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 + XBT_INFO("Creating and starting two VMs"); + msg_vm_t vm1 = MSG_vm_create(host1, "vm1", 4, 2048, 100, NULL, 1024 * 20, 10,50); MSG_vm_start(vm1); + msg_vm_t vm2 = MSG_vm_create(host3, "vm2", 4, 2048, 100, NULL, 1024 * 20, 10,50); + MSG_vm_start(vm2); + + XBT_INFO("Create two tasks on Host1: one inside a VM, the other directly on the host"); MSG_process_create("p11", worker_func, NULL, vm1); MSG_process_create("p12", worker_func, NULL, host1); - //XBT_INFO("Task on Host started"); - - // on Host2, create two tasks directly on the host: Energy of host 1 and host 2 should be the same. + XBT_INFO("Create two tasks on Host2: both directly on the host"); MSG_process_create("p21", worker_func, NULL, host2); MSG_process_create("p22", worker_func, NULL, host2); - /* Wait and see */ + XBT_INFO("Create two tasks on Host3: both inside a VM"); + MSG_process_create("p31", worker_func, NULL, vm2); + MSG_process_create("p32", worker_func, NULL, vm2); + + XBT_INFO("Wait 5 seconds. The tasks are still running (they run for 3 seconds, but 2 tasks are co-located, so they run for 6 seconds)"); MSG_process_sleep(5); + XBT_INFO("Wait another 5 seconds. The tasks stop at some point in between"); MSG_process_sleep(5); + MSG_vm_shutdown(vm1); + MSG_vm_shutdown(vm2); return 0; } @@ -76,25 +67,19 @@ int main(int argc, char *argv[]) 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); + if (argc != 2) { + XBT_CRITICAL("Usage: %s platform_file\n", argv[0]); + xbt_die("example: %s msg_platform.xml\n", argv[0]); } MSG_create_environment(argv[1]); /* Application deployment */ - MSG_function_register("dvfs_test", dvfs); - - MSG_launch_application(argv[2]); + MSG_process_create("dvfs",dvfs,NULL,MSG_host_by_name("MyHost1")); res = MSG_main(); - XBT_INFO("Total simulation time: %.2f", MSG_get_clock()); + XBT_INFO("Total simulation time: %.2f; All hosts must have the exact same energy consumption.", MSG_get_clock()); if (res == MSG_OK) return 0; diff --git a/examples/platforms/energy_platform.xml b/examples/platforms/energy_platform.xml index 04bbc23091..9e0e4ac85c 100644 --- a/examples/platforms/energy_platform.xml +++ b/examples/platforms/energy_platform.xml @@ -3,7 +3,7 @@ - + @@ -11,11 +11,11 @@ - + - + diff --git a/tools/cmake/MakeExe.cmake b/tools/cmake/MakeExe.cmake index fd58228ccb..d92e41db2a 100644 --- a/tools/cmake/MakeExe.cmake +++ b/tools/cmake/MakeExe.cmake @@ -36,6 +36,7 @@ add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/cloud) add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/energy/consumption) add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/energy/onoff) add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/energy/pstate) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/energy/vm) add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/exception) add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/gpu) add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets) diff --git a/tools/cmake/Tests.cmake b/tools/cmake/Tests.cmake index fb199cb1ad..56d0331312 100644 --- a/tools/cmake/Tests.cmake +++ b/tools/cmake/Tests.cmake @@ -241,6 +241,7 @@ IF(NOT enable_memcheck) ADD_TESH_FACTORIES(msg-energy-pstates "thread;boost" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/energy/pstate/pstate.tesh) ADD_TESH_FACTORIES(msg-energy-consumption "thread;ucontext;raw;boost" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/energy/consumption/energy_consumption.tesh) ADD_TESH_FACTORIES(msg-energy-onoff "thread;ucontext;raw;boost" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/energy/onoff/onoff.tesh) + ADD_TESH_FACTORIES(msg-energy-vm "thread;ucontext;raw;boost" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/energy/vm/energy_vm.tesh) ADD_TESH_FACTORIES(msg-token-ring "thread;ucontext;raw;boost" --setenv srcdir=${CMAKE_HOME_DIRECTORY} --cd ${CMAKE_BINARY_DIR}/examples/msg/token_ring ${CMAKE_HOME_DIRECTORY}/examples/msg/token_ring/token_ring.tesh) ADD_TESH_FACTORIES(msg-migration "thread;ucontext;raw;boost" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/migration/migration.tesh) ADD_TESH_FACTORIES(msg-ptask "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/parallel_task/parallel_task.tesh) -- 2.20.1