A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
add a missing file and add MSG_vm_set_bound
[simgrid.git]
/
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
1431441
..
830739a
100644
(file)
--- 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</b>. The classical example revisited to demonstrate the use of virtual machines.
*/
* example on a cloud</b>. 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 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;
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);
msg_host_t *pms = xbt_new(msg_host_t, workers_count);
xbt_dynar_t vms = xbt_dynar_new(sizeof(msg_vm_t), NULL);
- /* Retri
ve the PMs that
launch worker processes. */
+ /* Retri
eve 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. */
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 %
l
d 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);
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);
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);
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]);
}
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) {
/* 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);
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;
}
return 0;
}
+
/** Main function */
int main(int argc, char *argv[])
{
/** 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;
}
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]);
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) {
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;
}
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;
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;
}
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);
xbt_dynar_free(&hosts_dynar);
return !(res == MSG_OK);