X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/b062e616e32f48b7c1d794cd60c0c85d881d719e..a4cd8aafa1caf358f873f87b142f76185acf1901:/examples/msg/cloud/masterslave_virtual_machines.c diff --git a/examples/msg/cloud/masterslave_virtual_machines.c b/examples/msg/cloud/masterslave_virtual_machines.c index 1431441771..830739a678 100644 --- a/examples/msg/cloud/masterslave_virtual_machines.c +++ b/examples/msg/cloud/masterslave_virtual_machines.c @@ -19,16 +19,14 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test, * example on a cloud. The classical example revisited to demonstrate the use of virtual machines. */ -double task_comp_size = 10000000; -double task_comm_size = 10000000; +const double task_comp_size = 10000000; +const double task_comm_size = 10000000; int master_fun(int argc, char *argv[]); int worker_fun(int argc, char *argv[]); -int nb_hosts=3; -//int nb_vms=nb_host*2; // 2 VMs per PM - + static void work_batch(int workers_count) { int i; @@ -55,14 +53,14 @@ int master_fun(int argc, char *argv[]) msg_host_t *pms = xbt_new(msg_host_t, workers_count); xbt_dynar_t vms = xbt_dynar_new(sizeof(msg_vm_t), NULL); - /* Retrive the PMs that launch worker processes. */ + /* Retrieve the PMs that will launch worker processes. */ for (i = 1; i < argc; i++) pms[i - 1] = MSG_get_host_by_name(argv[i]); /* Launch VMs and worker processes. One VM per PM, and one worker process per VM. */ - XBT_INFO("Launch %ld VMs", workers_count); + XBT_INFO("Launch %d VMs", workers_count); for (i=0; i< workers_count; i++) { char *vm_name = bprintf("VM%02d", i); char *pr_name = bprintf("WRK%02d", i); @@ -75,6 +73,12 @@ int master_fun(int argc, char *argv[]) XBT_INFO("create %s", vm_name); msg_vm_t vm = MSG_vm_create_core(pms[i], vm_name); + + s_ws_params_t params; + memset(¶ms, 0, sizeof(params)); + params.ramsize = 1L * 1024 * 1024 * 1024; // 1Gbytes + MSG_host_set_params(vm, ¶ms); + MSG_vm_start(vm); xbt_dynar_push(vms, &vm); @@ -130,7 +134,7 @@ int master_fun(int argc, char *argv[]) MSG_vm_migrate(vm, pms[1]); } - /* Migration with default policy is called (i.e. live migration with pre-copy strategy */ + /* Migration with default policy is called (i.e. live migration with pre-copy strategy) */ /* If you want to use other policy such as post-copy or cold migration, you should add a third parameter that defines the policy */ XBT_INFO("Migrate all VMs to PM(%s)", MSG_host_get_name(pms[2])); xbt_dynar_foreach(vms, i, vm) { @@ -140,7 +144,7 @@ int master_fun(int argc, char *argv[]) } - XBT_INFO("Shutdown the first worker processes gracefuly. The the second half will forcefully get killed"); + XBT_INFO("Shutdown the half of worker processes gracefuly. The remaining half will be forcibly killed"); for (i = 0; i < workers_count; i++) { char mbox[64]; sprintf(mbox, "MBOX:WRK%02d", i); @@ -201,18 +205,22 @@ int worker_fun(int argc, char *argv[]) return 0; } + /** Main function */ int main(int argc, char *argv[]) { + const int nb_hosts = 3; + MSG_init(&argc, argv); if (argc != 2) { printf("Usage: %s example/msg/msg_platform.xml\n", argv[0]); return 1; } - /* Load the platform file */ + + /* Load the platform file */ MSG_create_environment(argv[1]); - /* Retrieve the first hosts from the platform file */ + /* Retrieve hosts from the platform file */ xbt_dynar_t hosts_dynar = MSG_hosts_as_dynar(); if (xbt_dynar_length(hosts_dynar) <= nb_hosts) { @@ -220,7 +228,7 @@ int main(int argc, char *argv[]) return 1; } - msg_host_t master_pm; + msg_host_t master_pm = NULL; char **master_argv = xbt_new(char *, 12); master_argv[0] = xbt_strdup("master"); master_argv[11] = NULL; @@ -239,12 +247,13 @@ int main(int argc, char *argv[]) break; } + msg_error_t res = 1; + if (master_pm!=NULL){ + MSG_process_create_with_arguments("master", master_fun, NULL, master_pm, nb_hosts + 1, master_argv); - MSG_process_create_with_arguments("master", master_fun, NULL, master_pm, nb_hosts+1, master_argv); - - msg_error_t res = MSG_main(); - XBT_INFO("Simulation time %g", MSG_get_clock()); - + res = MSG_main(); + XBT_INFO("Bye (simulation time %g)", MSG_get_clock()); + } xbt_dynar_free(&hosts_dynar); return !(res == MSG_OK);