Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge before commiting VM changes - Adrien
authorAdrien Lebre <alebre@adsein-4.local>
Wed, 8 Apr 2015 11:27:25 +0000 (13:27 +0200)
committerAdrien Lebre <alebre@adsein-4.local>
Wed, 8 Apr 2015 11:27:25 +0000 (13:27 +0200)
1  2 
src/bindings/java/jmsg_vm.c
src/bindings/java/org/simgrid/msg/VM.java
src/msg/msg_vm.c
src/surf/vm_workstation_hl13.cpp

@@@ -11,7 -11,7 +11,7 @@@
  #include "jmsg_host.h"
  #include "jmsg_process.h"
  #include "jxbt_utilities.h"
- #include "msg/msg.h"
+ #include "simgrid/msg.h"
  XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg);
  
  static jfieldID jvm_field_bind;
@@@ -125,11 -125,11 +125,13 @@@ JNIEXPORT void JNICAL
  Java_org_simgrid_msg_VM_internalmig(JNIEnv *env, jobject jvm, jobject jhost) {
    msg_vm_t vm = jvm_get_native(env,jvm);
    msg_host_t host = jhost_get_native(env, jhost);
++  xbt_ex_t e;
    TRY{
    MSG_vm_migrate(vm,host);
--  } CATCH_ANONYMOUS{
--      XBT_INFO("CATCH EXCEPTION MIGRATION");
--      jxbt_throw_host_failure(env, (char*)"during migration");
++  } CATCH(e){
++     XBT_INFO("CATCH EXCEPTION MIGRATION %s",e.msg);
++     xbt_ex_free(e);
++     jxbt_throw_host_failure(env, (char*)"during migration");
    } 
  }
  
@@@ -8,22 -8,20 +8,20 @@@
  
  package org.simgrid.msg;
  
- import org.simgrid.msg.Host;
- import org.simgrid.msg.Process;
  
  public class VM extends Host{
        // Please note that we are not declaring a new bind variable 
        //(the bind variable has been inherited from the super class Host)
-       
        /* Static functions */ 
        // GetByName is inherited from the super class Host
-       
  
-        private static VM[] vms=null;    
-     private Host currentHost; 
+       private static VM[] vms=null;     
+       private Host currentHost; 
  
        /* Constructors / destructors */
-     /**
+       /**
         * Create a `basic' VM (i.e. 1 core, 1GB of RAM, other values are not taken into account).
         */
        public VM(Host host, String name) {
  
        private static void addVM(VM vm){
                VM[] vmsN=null; 
-               int i=0;
+               int i=0;
                if(VM.vms == null)
                        vmsN = new VM[1]; 
                else
                        vmsN = new VM[vms.length+1]; 
-               
                for (i=0; i<vmsN.length-1 ; i ++){
                        vmsN[i]=vms[i]; 
                } 
                vmsN[i]=vm;
                vms=vmsN;
        }
-    public static VM[] all(){
+       public static VM[] all(){
                return vms;
        }
        public static VM getVMByName(String name){
                for (int i=0 ; i < vms.length ; i++){
-                         if (vms[i].getName().equals(name))
-                                       return vms[i];          
+                       if (vms[i].getName().equals(name))
+                               return vms[i];          
                }
                return null; 
        }
        protected void finalize() {
                destroy();
        }
-       
  
        /* JNI / Native code */
  
        /* get/set property methods are inherited from the Host class. */
-       
        /** Returns whether the given VM is currently suspended
         */     
        public native int isCreated();
-       
        /** Returns whether the given VM is currently running
         */
        public native int isRunning();
        /** Returns whether the given VM is currently running
         */
        public native int isMigrating();
-       
        /** Returns whether the given VM is currently suspended
         */     
        public native int isSuspended();
-               
        /** Returns whether the given VM is currently saving
         */
        public native int isSaving();
-       
        /** Returns whether the given VM is currently saved
         */
        public native int isSaved();
        /** Returns whether the given VM is currently restoring its state
         */
        public native boolean isRestoring();
-       
        /**
         * Natively implemented method create the VM.
         * @param nCore number of core
         * @param dpIntensity (dirty page intensity, a percentage of migNetSpeed [0-100],  if you don't know put zero ;))
         */
        private native void create(Host host, String name, int nCore, int ramSize, 
-                        int netCap, String diskPath, int diskSize, int migNetSpeed, int dpIntensity);
+                       int netCap, String diskPath, int diskSize, int migNetSpeed, int dpIntensity);
  
  
        /**
         */
        public native void start();
  
-       
        /**
         * Immediately kills all processes within the given VM. Any memory that they allocated will be leaked.
         * No extra delay occurs. If you want to simulate this too, you want to use a MSG_process_sleep() or something
         */
        public native void shutdown();
-       
        /**  
         * Invoke native migration routine
-       */
+        */
        public native void internalmig(Host destination) throws Exception; // TODO add throws DoubleMigrationException (i.e. when you call migrate on a VM that is already migrating);
  
  
-       
        /** Change the host on which all processes are running
         * (pre-copy is implemented)
         */     
                try {
                        this.internalmig(destination);
                } catch (Exception e){
 -                      Msg.info("an exception occurs during the migration of VM "+this.getName());
 -                      throw new HostFailureException();
 +                Msg.info("Migration of VM "+this.getName()+" to "+destination.getName()+" is impossible ("+e.getMessage()+")");
 +                throw new HostFailureException();
                }
                // If the migration correcly returned, then we should change the currentHost value. 
                this.currentHost = destination; 
        }
-       
        /** Immediately suspend the execution of all processes within the given VM
         *
         * No suspension cost occurs. If you want to simulate this too, you want to
         * of VM suspend to you.
         */     
        public native void suspend();
-       
        /** Immediately resumes the execution of all processes within the given VM
         *
         * No resume cost occurs. If you want to simulate this too, you want to
         * of VM resume to you.
         */
        public native void resume();
-       
        /** Immediately suspend the execution of all processes within the given VM 
         *  and save its state on the persistent HDD
         *  Not yet implemented (for the moment it behaves like suspend)
         *  of VM suspend to you.
         */     
        public native void save();
-       
        /** Immediately resumes the execution of all processes previously saved 
         * within the given VM
         *  Not yet implemented (for the moment it behaves like resume)
         * of VM resume to you.
         */
        public native void restore();
-       
  
        /**
         * Destroy the VM
         */
        public native void destroy();
  
-       
  
        /**
         * Class initializer, to initialize various JNI stuff
diff --combined src/msg/msg_vm.c
@@@ -221,9 -221,7 +221,7 @@@ msg_vm_t MSG_vm_create_core(msg_host_t 
  
    XBT_DEBUG("A new VM (%s) has been created", name);
  
-   #ifdef HAVE_TRACING
    TRACE_msg_vm_create(name, ind_pm);
-   #endif
  
    return ind_vm;
  }
@@@ -250,9 -248,7 +248,7 @@@ void MSG_vm_destroy(msg_vm_t vm
  
    __MSG_host_destroy(vm);
  
-   #ifdef HAVE_TRACING
    TRACE_msg_vm_end(vm);
-   #endif
  }
  
  
@@@ -266,9 -262,7 +262,7 @@@ void MSG_vm_start(msg_vm_t vm
  {
    simcall_vm_start(vm);
  
-   #ifdef HAVE_TRACING
    TRACE_msg_vm_start(vm);
-   #endif
  }
  
  
@@@ -284,9 -278,7 +278,7 @@@ void MSG_vm_shutdown(msg_vm_t vm
    /* msg_vm_t equals to msg_host_t */
    simcall_vm_shutdown(vm);
  
-   // #ifdef HAVE_TRACING
    // TRACE_msg_vm_(vm);
-   // #endif
  }
  
  
@@@ -425,10 -417,7 +417,7 @@@ static int migration_rx_fun(int argc, c
     msg_host_priv_t priv = msg_host_resource_priv(vm);
     priv->is_migrating = 0;
     XBT_DEBUG("VM(%s) moved from PM(%s) to PM(%s)", ms->vm->key, ms->src_pm->key, ms->dst_pm->key);
-    #ifdef HAVE_TRACING
-     TRACE_msg_vm_change_host(ms->vm, ms->src_pm, ms->dst_pm);
-    #endif
+    TRACE_msg_vm_change_host(ms->vm, ms->src_pm, ms->dst_pm);
    }
    // Inform the SRC that the migration has been correctly performed
    {
@@@ -464,7 -453,7 +453,7 @@@ static void reset_dirty_pages(msg_vm_t 
    xbt_dict_cursor_t cursor = NULL;
    dirty_page_t dp = NULL;
    xbt_dict_foreach(priv->dp_objs, cursor, key, dp) {
-     double remaining = MSG_task_get_remaining_computation(dp->task);
+     double remaining = MSG_task_get_flops_amount(dp->task);
      dp->prev_clock = MSG_get_clock();
      dp->prev_remaining = remaining;
  
@@@ -525,7 -514,7 +514,7 @@@ static double lookup_computed_flop_coun
    xbt_dict_cursor_t cursor = NULL;
    dirty_page_t dp = NULL;
    xbt_dict_foreach(priv->dp_objs, cursor, key, dp) {
-     double remaining = MSG_task_get_remaining_computation(dp->task);
+     double remaining = MSG_task_get_flops_amount(dp->task);
  
      double clock = MSG_get_clock();
  
  void MSG_host_add_task(msg_host_t host, msg_task_t task)
  {
    msg_host_priv_t priv = msg_host_resource_priv(host);
-   double remaining = MSG_task_get_remaining_computation(task);
+   double remaining = MSG_task_get_flops_amount(task);
    char *key = bprintf("%s-%p", task->name, task);
  
    dirty_page_t dp = xbt_new0(s_dirty_page, 1);
@@@ -588,7 -577,7 +577,7 @@@ void MSG_host_del_task(msg_host_t host
     * computation has been done until now, and keep the information for the
     * lookup_() function that will called soon. */
    if (priv->dp_enabled) {
-     double remaining = MSG_task_get_remaining_computation(task);
+     double remaining = MSG_task_get_flops_amount(task);
      double clock = MSG_get_clock();
      // double updated = calc_updated_pages(key, host, dp, remaining, clock);
      double updated = get_computed(key, host, dp, remaining, clock);
@@@ -814,7 -803,7 +803,7 @@@ static int migration_tx_fun(int argc, c
      sg_size_t sent = 0;
      double clock_prev_send = MSG_get_clock();
      TRY {
--      XBT_INFO("Stage 2, gonna send %llu", updated_size);
++      XBT_DEBUG("Stage 2, gonna send %llu", updated_size);
        sent = send_migration_data(ms->vm, ms->src_pm, ms->dst_pm, updated_size, ms->mbox, 2, stage2_round, mig_speed, mig_timeout);
      } CATCH_ANONYMOUS {
        //hostfailure (if you want to know whether this is the SRC or the DST please check directly in send_migration_data code)
@@@ -858,7 -847,7 +847,7 @@@ stage3
    stop_dirty_page_tracking(ms->vm);
  
    TRY {
--    XBT_INFO("Stage 3: Gonna send %f", remaining_size);
++    XBT_DEBUG("Stage 3: Gonna send %f", remaining_size);
      send_migration_data(ms->vm, ms->src_pm, ms->dst_pm, remaining_size, ms->mbox, 3, 0, mig_speed, -1);
    } CATCH_ANONYMOUS {
      //hostfailure (if you want to know whether this is the SRC or the DST please check directly in send_migration_data code)
    }
  
    // At that point the Migration is considered valid for the SRC node but remind that the DST side should relocate effectively the VM on the DST node.
--  XBT_INFO("mig: tx_done");
++  XBT_DEBUG("mig: tx_done");
  
    return 0;
  }
@@@ -975,12 -964,6 +964,12 @@@ void MSG_vm_migrate(msg_vm_t vm, msg_ho
  
    msg_host_t old_pm = simcall_vm_get_pm(vm);
  
-   if(!MSG_host_is_off(old_pm))
++  if(MSG_host_is_off(old_pm))
 +    THROWF(vm_error, 0, "SRC host(%s) seems off, cannot start a migration", sg_host_name(old_pm));
 + 
-   if(!MSG_host_is_off(new_pm))
++  if(MSG_host_is_off(new_pm))
 +    THROWF(vm_error, 0, "DST host(%s) seems off, cannot start a migration", sg_host_name(new_pm));
 +  
    if (!MSG_vm_is_running(vm))
      THROWF(vm_error, 0, "VM(%s) is not running", sg_host_name(vm));
  
    // This part is done in the RX code, to handle the corner case where SRC can crash just at the end of the migration process
    // In that case, the VM has been already assigned to the DST node.
    //XBT_DEBUG("VM(%s) moved from PM(%s) to PM(%s)", vm->key, old_pm->key, new_pm->key);
-   //#ifdef HAVE_TRACING
    //TRACE_msg_vm_change_host(vm, old_pm, new_pm);
-   //#endif
  }
  
  
@@@ -1029,9 -1010,7 +1016,7 @@@ void MSG_vm_suspend(msg_vm_t vm
  
    XBT_DEBUG("vm_suspend done");
  
-   #ifdef HAVE_TRACING
    TRACE_msg_vm_suspend(vm);
-   #endif
  }
  
  
@@@ -1044,9 -1023,7 +1029,7 @@@ void MSG_vm_resume(msg_vm_t vm
  {
    simcall_vm_resume(vm);
  
-   #ifdef HAVE_TRACING
    TRACE_msg_vm_resume(vm);
-   #endif
  }
  
  
@@@ -1066,9 -1043,7 +1049,7 @@@ void MSG_vm_save(msg_vm_t vm
      THROWF(vm_error, 0, "VM(%s) is migrating", sg_host_name(vm));
  
    simcall_vm_save(vm);
-   #ifdef HAVE_TRACING
    TRACE_msg_vm_save(vm);
-   #endif
  }
  
  /** @brief Restore the execution of the VM. All processes on the VM run again.
@@@ -1082,9 -1057,7 +1063,7 @@@ void MSG_vm_restore(msg_vm_t vm
  {
    simcall_vm_restore(vm);
  
-   #ifdef HAVE_TRACING
    TRACE_msg_vm_restore(vm);
-   #endif
  }
  
  
@@@ -183,26 -183,26 +183,26 @@@ double WorkstationVMHL13Model::shareRes
  
  ActionPtr WorkstationVMHL13Model::executeParallelTask(int workstation_nb,
                                          void **workstation_list,
-                                         double *computation_amount,
-                                         double *communication_amount,
+                                         double *flops_amount,
+                                         double *bytes_amount,
                                          double rate){
  #define cost_or_zero(array,pos) ((array)?(array)[pos]:0.0)
    if ((workstation_nb == 1)
-       && (cost_or_zero(communication_amount, 0) == 0.0))
-     return ((WorkstationCLM03Ptr)workstation_list[0])->execute(computation_amount[0]);
+       && (cost_or_zero(bytes_amount, 0) == 0.0))
+     return ((WorkstationCLM03Ptr)workstation_list[0])->execute(flops_amount[0]);
    else if ((workstation_nb == 1)
-            && (cost_or_zero(computation_amount, 0) == 0.0))
-     return communicate((WorkstationCLM03Ptr)workstation_list[0], (WorkstationCLM03Ptr)workstation_list[0],communication_amount[0], rate);
+            && (cost_or_zero(flops_amount, 0) == 0.0))
+     return communicate((WorkstationCLM03Ptr)workstation_list[0], (WorkstationCLM03Ptr)workstation_list[0],bytes_amount[0], rate);
    else if ((workstation_nb == 2)
-              && (cost_or_zero(computation_amount, 0) == 0.0)
-              && (cost_or_zero(computation_amount, 1) == 0.0)) {
+              && (cost_or_zero(flops_amount, 0) == 0.0)
+              && (cost_or_zero(flops_amount, 1) == 0.0)) {
      int i,nb = 0;
      double value = 0.0;
  
      for (i = 0; i < workstation_nb * workstation_nb; i++) {
-       if (cost_or_zero(communication_amount, i) > 0.0) {
+       if (cost_or_zero(bytes_amount, i) > 0.0) {
          nb++;
-         value = cost_or_zero(communication_amount, i);
+         value = cost_or_zero(bytes_amount, i);
        }
      }
      if (nb == 1)
@@@ -385,7 -385,7 +385,7 @@@ void WorkstationVMHL13::migrate(surf_re
       /* keep the bound value of the cpu action of the VM. */
       double old_bound = p_action->getBound();
       if (old_bound != 0) {
--       XBT_INFO("migrate VM(%s): set bound (%f) at %s", vm_name, old_bound, pm_name_dst);
++       XBT_DEBUG("migrate VM(%s): set bound (%f) at %s", vm_name, old_bound, pm_name_dst);
         new_cpu_action->setBound(old_bound);
       }