Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Bugfix in Java Cloud API. Bugfix in the associated example. Add a tesh file for the...
authorSamuel Lepetit <samuel.lepetit@inria.fr>
Thu, 14 Jun 2012 15:43:58 +0000 (17:43 +0200)
committerSamuel Lepetit <samuel.lepetit@inria.fr>
Thu, 14 Jun 2012 15:43:58 +0000 (17:43 +0200)
CMakeLists.txt
examples/async/Slave.java
examples/cloud/Cloud.java
examples/cloud/Master.java
examples/cloud/Slave.java
examples/cloud/cloud.tesh [new file with mode: 0644]
src/jmsg_vm.c
src/jmsg_vm.h

index 9806f48..bf8b5b3 100644 (file)
@@ -261,6 +261,7 @@ set(TESH_FILES
   ${CMAKE_HOME_DIRECTORY}/examples/migration/migration.tesh
   ${CMAKE_HOME_DIRECTORY}/examples/masterslave/masterslave.tesh
   ${CMAKE_HOME_DIRECTORY}/examples/chord/chord.tesh
+  ${CMAKE_HOME_DIRECTORY}/examples/cloud/cloud.tesh
   ${CMAKE_HOME_DIRECTORY}/examples/suspend/suspend.tesh
   ${CMAKE_HOME_DIRECTORY}/examples/master_slave_kill/kill.tesh
   ${CMAKE_HOME_DIRECTORY}/examples/mutualExclusion/mutualexclusion.tesh
@@ -445,6 +446,7 @@ ADD_TEST(bittorrent      ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE
 ADD_TEST(bypass          ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/master_slave_bypass/bypass.tesh)
 ADD_TEST(commTime        ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/commTime/commtime.tesh)
 ADD_TEST(chord          ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/chord/chord.tesh)
+ADD_TEST(cloud          ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/cloud/cloud.tesh)
 ADD_TEST(kill            ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/master_slave_kill/kill.tesh)
 ADD_TEST(masterslave     ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/masterslave/masterslave.tesh)
 ADD_TEST(migration       ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/migration/migration.tesh)
@@ -454,7 +456,7 @@ ADD_TEST(priority        ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE
 ADD_TEST(startKillTime   ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/startKillTime/startKillTime.tesh)
 ADD_TEST(suspend         ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/suspend/suspend.tesh)
 #Don't forget to put new test in this list!!!
-set(test_list async bittorrent bypass chord commTime kill masterslave migration mutualExclusion pingPong priority startKillTime suspend)
+set(test_list async bittorrent bypass chord cloud commTime kill masterslave migration mutualExclusion pingPong priority startKillTime suspend)
 if(HAVE_TRACING)
   ADD_TEST(tracing         ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/tracing/tracingPingPong.tesh)
   set(test_list ${test_list} tracing)
index d58910f..ca06965 100644 (file)
@@ -27,7 +27,6 @@ public class Slave extends Process {
                }
 
                int num = Integer.valueOf(args[0]).intValue();
-               
                Comm comm = null;
                boolean slaveFinished = false;
                while(!slaveFinished) {  
index 69dd79b..6cdd6ac 100644 (file)
@@ -14,8 +14,8 @@ import org.simgrid.msg.MsgException;
  * Example showing the use of the new experimental Cloud API.
  */
 public class Cloud {
-       public static final double task_comp_size = 10000000;
-       public static final double task_comm_size = 10000000;
+       public static final double task_comp_size = 10;
+       public static final double task_comm_size = 10;
 
        public static void main(String[] args) throws MsgException {       
            Msg.init(args); 
index 791a956..2a46bc5 100644 (file)
@@ -55,10 +55,10 @@ public class Master extends Process {
                Msg.info("Sleep long enough for everyone to be done with previous batch of work");
                waitFor(1000 - Msg.getClock());
                
-               Msg.info("Add one more process per VM, and dispatch a batch of work to everyone");
+               Msg.info("Add one more process per VM.");
                for (int i = 0; i < vms.size(); i++) {
                        VM vm = vms.get(i);
-                       Slave slave = new Slave(hosts[i],i + slavesCount);
+                       Slave slave = new Slave(hosts[i],i + vms.size());
                        slave.start();
                        vm.bind(slave);
                }
@@ -73,25 +73,23 @@ public class Master extends Process {
                        VM vm = vms.get(i);
                        vm.suspend();
                        vm.migrate(hosts[2]);
+                       vm.resume();
                }
                
                workBatch(slavesCount * 2);
                
-               Msg.info("Let's shut down the simulation. 10 first processes will be shut down cleanly while the second half will forcefully get killed");
-               
-               for (int i = 0; i < 10; i++) {
-                       FinalizeTask task = new FinalizeTask(0,0);
-                       task.send("slave_" + i);
-               }
+               Msg.info("Let's shut down the simulation and kill everyone.");
                
                for (int i = 0; i < vms.size(); i++) {
                        vms.get(i).shutdown();
                }                               
+               Msg.info("Master done.");
        }
        
        public void workBatch(int slavesCount) throws MsgException {
                for (int i = 0; i < slavesCount; i++) {
                        Task task = new Task("Task_" + i, Cloud.task_comp_size, Cloud.task_comm_size);
+                       Msg.info("Sending to " + i);
                        task.send("slave_" + i);
                }
        }
index ca5ecaf..8f7cde3 100644 (file)
@@ -11,7 +11,6 @@ import org.simgrid.msg.Msg;
 import org.simgrid.msg.MsgException;
 import org.simgrid.msg.Process;
 import org.simgrid.msg.Task;
-import org.simgrid.msg.TaskCancelledException;
 
 public class Slave extends Process {
        private int number;
@@ -20,7 +19,8 @@ public class Slave extends Process {
                this.number = number;
        }
        public void main(String[] args) throws MsgException {
-               while(true) {  
+               while(true) {                   
+                       Msg.info("Receiving on " + "slave_" + number);
                        Task task = Task.receive("slave_"+number);      
 
                        if (task instanceof FinalizeTask) {
@@ -29,10 +29,10 @@ public class Slave extends Process {
                        Msg.info("Received \"" + task.getName() +  "\". Processing it.");
                        try {
                                task.execute();
-                       } catch (TaskCancelledException e) {
+                       } catch (MsgException e) {
 
                        }
-               //      Msg.info("\"" + task.getName() + "\" done ");
+                       Msg.info("\"" + task.getName() + "\" done ");
                }
 
                Msg.info("Received Finalize. I'm done. See you!");
diff --git a/examples/cloud/cloud.tesh b/examples/cloud/cloud.tesh
new file mode 100644 (file)
index 0000000..7fcf70e
--- /dev/null
@@ -0,0 +1,160 @@
+#! ./tesh
+
+! output sort
+
+$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar cloud/Cloud ${srcdir:=.}/examples/platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+> [  0.000000] (0:@) Ready to run MSG_MAIN
+> [  0.000000] (10:Slave 8@Jean_Yves) Receiving on slave_8
+> [  0.000000] (11:Slave 9@Fafard) Receiving on slave_9
+> [  0.000000] (1:Master@Jacquelin) Launched 10 VMs
+> [  0.000000] (1:Master@Jacquelin) Send a first batch of work to everyone
+> [  0.000000] (1:Master@Jacquelin) Sending to 0
+> [  0.000000] (2:Slave 0@Jacquelin) Receiving on slave_0
+> [  0.000000] (3:Slave 1@Intel) Receiving on slave_1
+> [  0.000000] (4:Slave 2@Provost) Receiving on slave_2
+> [  0.000000] (5:Slave 3@Fernand) Receiving on slave_3
+> [  0.000000] (6:Slave 4@Bescherelle) Receiving on slave_4
+> [  0.000000] (7:Slave 5@Ethernet) Receiving on slave_5
+> [  0.000000] (8:Slave 6@Kuenning) Receiving on slave_6
+> [  0.000000] (9:Slave 7@Dodge) Receiving on slave_7
+> [  0.000195] (1:Master@Jacquelin) Sending to 1
+> [  0.000195] (2:Slave 0@Jacquelin) Received "Task_0". Processing it.
+> [  0.000195] (2:Slave 0@Jacquelin) "Task_0" done 
+> [  0.000195] (2:Slave 0@Jacquelin) Receiving on slave_0
+> [  0.918964] (1:Master@Jacquelin) Sending to 2
+> [  0.918964] (3:Slave 1@Intel) Received "Task_1". Processing it.
+> [  0.918964] (3:Slave 1@Intel) "Task_1" done 
+> [  0.918964] (3:Slave 1@Intel) Receiving on slave_1
+> [  2.798763] (1:Master@Jacquelin) Sending to 3
+> [  2.798763] (4:Slave 2@Provost) Received "Task_2". Processing it.
+> [  2.798763] (4:Slave 2@Provost) "Task_2" done 
+> [  2.798763] (4:Slave 2@Provost) Receiving on slave_2
+> [  4.624559] (1:Master@Jacquelin) Sending to 4
+> [  4.624559] (5:Slave 3@Fernand) Received "Task_3". Processing it.
+> [  4.624559] (5:Slave 3@Fernand) "Task_3" done 
+> [  4.624559] (5:Slave 3@Fernand) Receiving on slave_3
+> [  5.487412] (1:Master@Jacquelin) Sending to 5
+> [  5.487412] (6:Slave 4@Bescherelle) Received "Task_4". Processing it.
+> [  5.487412] (6:Slave 4@Bescherelle) "Task_4" done 
+> [  5.487412] (6:Slave 4@Bescherelle) Receiving on slave_4
+> [  6.547690] (1:Master@Jacquelin) Sending to 6
+> [  6.547690] (7:Slave 5@Ethernet) Received "Task_5". Processing it.
+> [  6.547690] (7:Slave 5@Ethernet) "Task_5" done 
+> [  6.547690] (7:Slave 5@Ethernet) Receiving on slave_5
+> [  7.405064] (1:Master@Jacquelin) Sending to 7
+> [  7.405064] (8:Slave 6@Kuenning) Received "Task_6". Processing it.
+> [  7.405064] (8:Slave 6@Kuenning) "Task_6" done 
+> [  7.405064] (8:Slave 6@Kuenning) Receiving on slave_6
+> [  8.805320] (1:Master@Jacquelin) Sending to 8
+> [  8.805320] (9:Slave 7@Dodge) Received "Task_7". Processing it.
+> [  8.805320] (9:Slave 7@Dodge) "Task_7" done 
+> [  8.805320] (9:Slave 7@Dodge) Receiving on slave_7
+> [  9.730479] (10:Slave 8@Jean_Yves) Received "Task_8". Processing it.
+> [  9.730479] (10:Slave 8@Jean_Yves) "Task_8" done 
+> [  9.730479] (10:Slave 8@Jean_Yves) Receiving on slave_8
+> [  9.730479] (1:Master@Jacquelin) Sending to 9
+> [ 11.715289] (11:Slave 9@Fafard) Received "Task_9". Processing it.
+> [ 11.715289] (1:Master@Jacquelin) Now suspend all VMs, just for fun
+> [ 11.715289] (1:Master@Jacquelin) Wait a while
+> [ 13.715289] (11:Slave 9@Fafard) "Task_9" done 
+> [ 13.715289] (11:Slave 9@Fafard) Receiving on slave_9
+> [ 13.715289] (1:Master@Jacquelin) Enough. Let's resume everybody.
+> [ 13.715289] (1:Master@Jacquelin) Sleep long enough for everyone to be done with previous batch of work
+> [1000.000000] (12:Slave 10@Jacquelin) Receiving on slave_10
+> [1000.000000] (13:Slave 11@Intel) Receiving on slave_11
+> [1000.000000] (14:Slave 12@Provost) Receiving on slave_12
+> [1000.000000] (15:Slave 13@Fernand) Receiving on slave_13
+> [1000.000000] (16:Slave 14@Bescherelle) Receiving on slave_14
+> [1000.000000] (17:Slave 15@Ethernet) Receiving on slave_15
+> [1000.000000] (18:Slave 16@Kuenning) Receiving on slave_16
+> [1000.000000] (19:Slave 17@Dodge) Receiving on slave_17
+> [1000.000000] (1:Master@Jacquelin) Add one more process per VM.
+> [1000.000000] (1:Master@Jacquelin) Migrate everyone to the second host.
+> [1000.000000] (1:Master@Jacquelin) Suspend everyone, move them to the third host, and resume them.
+> [1000.000000] (1:Master@Jacquelin) Sending to 0
+> [1000.000000] (20:Slave 18@Jean_Yves) Receiving on slave_18
+> [1000.000000] (21:Slave 19@Fafard) Receiving on slave_19
+> [1000.000195] (1:Master@Jacquelin) Sending to 1
+> [1000.000195] (2:Slave 0@Provost) Received "Task_0". Processing it.
+> [1000.000195] (2:Slave 0@Provost) "Task_0" done 
+> [1000.000195] (2:Slave 0@Provost) Receiving on slave_0
+> [1000.918964] (1:Master@Jacquelin) Sending to 2
+> [1000.918964] (3:Slave 1@Provost) Received "Task_1". Processing it.
+> [1000.918964] (3:Slave 1@Provost) "Task_1" done 
+> [1000.918964] (3:Slave 1@Provost) Receiving on slave_1
+> [1002.798763] (1:Master@Jacquelin) Sending to 3
+> [1002.798763] (4:Slave 2@Provost) Received "Task_2". Processing it.
+> [1002.798763] (4:Slave 2@Provost) "Task_2" done 
+> [1002.798763] (4:Slave 2@Provost) Receiving on slave_2
+> [1004.624559] (1:Master@Jacquelin) Sending to 4
+> [1004.624559] (5:Slave 3@Provost) Received "Task_3". Processing it.
+> [1004.624559] (5:Slave 3@Provost) "Task_3" done 
+> [1004.624559] (5:Slave 3@Provost) Receiving on slave_3
+> [1005.487412] (1:Master@Jacquelin) Sending to 5
+> [1005.487412] (6:Slave 4@Provost) Received "Task_4". Processing it.
+> [1005.487412] (6:Slave 4@Provost) "Task_4" done 
+> [1005.487412] (6:Slave 4@Provost) Receiving on slave_4
+> [1006.547690] (1:Master@Jacquelin) Sending to 6
+> [1006.547690] (7:Slave 5@Provost) Received "Task_5". Processing it.
+> [1006.547690] (7:Slave 5@Provost) "Task_5" done 
+> [1006.547690] (7:Slave 5@Provost) Receiving on slave_5
+> [1007.405064] (1:Master@Jacquelin) Sending to 7
+> [1007.405064] (8:Slave 6@Provost) Received "Task_6". Processing it.
+> [1007.405064] (8:Slave 6@Provost) "Task_6" done 
+> [1007.405064] (8:Slave 6@Provost) Receiving on slave_6
+> [1008.805320] (1:Master@Jacquelin) Sending to 8
+> [1008.805320] (9:Slave 7@Provost) Received "Task_7". Processing it.
+> [1008.805320] (9:Slave 7@Provost) "Task_7" done 
+> [1008.805320] (9:Slave 7@Provost) Receiving on slave_7
+> [1009.730479] (10:Slave 8@Provost) Received "Task_8". Processing it.
+> [1009.730479] (10:Slave 8@Provost) "Task_8" done 
+> [1009.730479] (10:Slave 8@Provost) Receiving on slave_8
+> [1009.730479] (1:Master@Jacquelin) Sending to 9
+> [1011.715289] (11:Slave 9@Provost) Received "Task_9". Processing it.
+> [1011.715289] (11:Slave 9@Provost) "Task_9" done 
+> [1011.715289] (11:Slave 9@Provost) Receiving on slave_9
+> [1011.715289] (1:Master@Jacquelin) Sending to 10
+> [1011.715484] (12:Slave 10@Provost) Received "Task_10". Processing it.
+> [1011.715484] (12:Slave 10@Provost) "Task_10" done 
+> [1011.715484] (12:Slave 10@Provost) Receiving on slave_10
+> [1011.715484] (1:Master@Jacquelin) Sending to 11
+> [1012.634253] (13:Slave 11@Provost) Received "Task_11". Processing it.
+> [1012.634253] (13:Slave 11@Provost) "Task_11" done 
+> [1012.634253] (13:Slave 11@Provost) Receiving on slave_11
+> [1012.634253] (1:Master@Jacquelin) Sending to 12
+> [1014.514051] (14:Slave 12@Provost) Received "Task_12". Processing it.
+> [1014.514051] (14:Slave 12@Provost) "Task_12" done 
+> [1014.514051] (14:Slave 12@Provost) Receiving on slave_12
+> [1014.514051] (1:Master@Jacquelin) Sending to 13
+> [1016.339847] (15:Slave 13@Provost) Received "Task_13". Processing it.
+> [1016.339847] (15:Slave 13@Provost) "Task_13" done 
+> [1016.339847] (15:Slave 13@Provost) Receiving on slave_13
+> [1016.339847] (1:Master@Jacquelin) Sending to 14
+> [1017.202700] (16:Slave 14@Provost) Received "Task_14". Processing it.
+> [1017.202700] (16:Slave 14@Provost) "Task_14" done 
+> [1017.202700] (16:Slave 14@Provost) Receiving on slave_14
+> [1017.202700] (1:Master@Jacquelin) Sending to 15
+> [1018.262978] (17:Slave 15@Provost) Received "Task_15". Processing it.
+> [1018.262978] (17:Slave 15@Provost) "Task_15" done 
+> [1018.262978] (17:Slave 15@Provost) Receiving on slave_15
+> [1018.262978] (1:Master@Jacquelin) Sending to 16
+> [1019.120353] (18:Slave 16@Provost) Received "Task_16". Processing it.
+> [1019.120353] (18:Slave 16@Provost) "Task_16" done 
+> [1019.120353] (18:Slave 16@Provost) Receiving on slave_16
+> [1019.120353] (1:Master@Jacquelin) Sending to 17
+> [1020.520609] (19:Slave 17@Provost) Received "Task_17". Processing it.
+> [1020.520609] (19:Slave 17@Provost) "Task_17" done 
+> [1020.520609] (19:Slave 17@Provost) Receiving on slave_17
+> [1020.520609] (1:Master@Jacquelin) Sending to 18
+> [1021.445768] (1:Master@Jacquelin) Sending to 19
+> [1021.445768] (20:Slave 18@Provost) Received "Task_18". Processing it.
+> [1021.445768] (20:Slave 18@Provost) "Task_18" done 
+> [1021.445768] (20:Slave 18@Provost) Receiving on slave_18
+> [1023.430577] (0:@) Done running MSG_MAIN
+> [1023.430577] (0:@) MSG_main finished
+> [1023.430577] (0:@) Clean java world
+> [1023.430577] (0:@) Clean native world
+> [1023.430577] (1:Master@Jacquelin) Let's shut down the simulation and kill everyone.
+> [1023.430577] (1:Master@Jacquelin) Master done.
+> [1023.430577] (21:Slave 19@Provost) Received "Task_19". Processing it.
+
index 1615e42..3f0945e 100644 (file)
@@ -84,3 +84,9 @@ Java_org_simgrid_msg_VM_resume(JNIEnv *env, jobject jvm) {
 
        MSG_vm_resume(vm);
 }
+JNIEXPORT void JNICALL
+Java_org_simgrid_msg_VM_shutdown(JNIEnv *env, jobject jvm) {
+       msg_vm_t vm = jvm_get_native(env,jvm);
+
+       MSG_vm_shutdown(vm);
+}
index fa5a965..0acedc5 100644 (file)
@@ -87,4 +87,11 @@ Java_org_simgrid_msg_VM_suspend(JNIEnv *env, jobject jvm);
  */
 JNIEXPORT void JNICALL
 Java_org_simgrid_msg_VM_resume(JNIEnv *env, jobject jvm);
+/**
+ * Class                       org_simgrid_msg_VM
+ * Method                      shutdown
+ * Signature   ()V
+ */
+JNIEXPORT void JNICALL
+Java_org_simgrid_msg_VM_shutdown(JNIEnv *env, jobject jvm);
 #endif