- /* Launch the sub processes: one VM per host, with one process inside each */
-
- for (i=0;i<slaves_count;i++) {
- char slavename[64];
- sprintf(slavename,"Slave %d",i);
- char**argv=xbt_new(char*,3);
- argv[0] = xbt_strdup(slavename);
- argv[1] = bprintf("%d",i);
- argv[2] = NULL;
- msg_vm_t vm = MSG_vm_start(slaves[i],2);
- MSG_vm_bind(vm, MSG_process_create_with_arguments(slavename,slave_fun,NULL,slaves[i],2,argv));
+ /* Launch VMs and worker processes. One VM per PM, and one worker process per VM. */
+
+ XBT_INFO("Launch %ld VMs", workers_count);
+ for (i=0; i< workers_count; i++) {
+ char *vm_name = bprintf("VM%02d", i);
+ char *pr_name = bprintf("WRK%02d", i);
+ char *mbox = bprintf("MBOX:WRK%02d", i);
+
+ char **wrk_argv = xbt_new(char*, 3);
+ wrk_argv[0] = pr_name;
+ wrk_argv[1] = mbox;
+ wrk_argv[2] = NULL;
+
+ XBT_INFO("create %s", vm_name);
+ msg_vm_t vm = MSG_vm_create_core(pms[i], vm_name);
+ MSG_vm_start(vm);
+ xbt_dynar_push(vms, &vm);
+
+ XBT_INFO("put %s on %s", pr_name, vm_name);
+ MSG_process_create_with_arguments(pr_name, worker_fun, NULL, vm, 2, wrk_argv);