Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Update copyright headers.
[simgrid.git] / src / bindings / java / org / simgrid / msg / VM.java
index 8338a79..8a9b108 100644 (file)
@@ -1,6 +1,6 @@
 /* Java bindings of the s4u::VirtualMachine */
 
-/* Copyright (c) 2006-2017. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2006-2018. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
@@ -10,26 +10,55 @@ package org.simgrid.msg;
 public class VM extends Host {
        // No need to declare a new bind variable: we use the one inherited from the super class Host
 
-       private Host currentHost; 
+       private Host currentHost;
+       private int coreAmount = 1;
 
-       /** Create a `basic' VM (i.e. 1GB of RAM, other values are not taken into account). */
+       /**
+        * Create a `basic' VM : 1 core and 1GB of RAM.
+        * @param host Host node
+        * @param name name of the machine
+        */     
        public VM(Host host, String name) {
-               this(host,name,1024, 0, 0);
+               this(host,name, /*coreAmount*/1, 1024, 0, 0);
+       }
+
+       /**
+        * Create a VM without useless values (for humans)
+        * @param host Host node
+        * @param name name of the machine
+        * @param coreAmount the amount of cores of the VM
+        */     
+       public VM(Host host, String name, int coreAmount) {
+               this(host,name, coreAmount, 1024, 0, 0);
+       }
+
+       /**
+        * Create a VM with 1 core
+        * @param host Host node
+        * @param name name of the machine
+        * @param ramSize size of the RAM that should be allocated (in MBytes)
+        * @param migNetSpeed (network bandwith allocated for migrations in MB/s, if you don't know put zero ;))
+        * @param dpIntensity (dirty page percentage according to migNetSpeed, [0-100], if you don't know put zero ;))
+        */     
+       public VM(Host host, String name, int ramSize, int migNetSpeed, int dpIntensity){
+               this(host, name, /*coreAmount*/1, ramSize, migNetSpeed, dpIntensity);
        }
 
        /**
         * Create a VM
         * @param host Host node
         * @param name name of the machine
+        * @param coreAmount the amount of cores of the VM
         * @param ramSize size of the RAM that should be allocated (in MBytes)
         * @param migNetSpeed (network bandwith allocated for migrations in MB/s, if you don't know put zero ;))
         * @param dpIntensity (dirty page percentage according to migNetSpeed, [0-100], if you don't know put zero ;))
         */
-       public VM(Host host, String name, int ramSize, int migNetSpeed, int dpIntensity){
+       public VM(Host host, String name, int coreAmount, int ramSize, int migNetSpeed, int dpIntensity){
                super();
                super.name = name;
-               this.currentHost = host; 
-               create(host, name, ramSize, migNetSpeed, dpIntensity);
+               this.currentHost = host;
+               this.coreAmount = coreAmount;
+               create(host, name, coreAmount, ramSize, migNetSpeed, dpIntensity);
        }
 
        /** Retrieve the list of all existing VMs */
@@ -37,18 +66,6 @@ public class VM extends Host {
 
        /** Retrieve a VM from its name */
        public static native VM getVMByName(String name);
-       
-       /** Shutdown and unref the VM. 
-        * 
-        * Actually, this strictly equivalent to shutdown().
-        * In C and in libvirt, the destroy function also releases the memory associated to the VM, 
-        * but this is not the way it goes in Java. The VM will only get destroyed by the garbage 
-        * collector when it is not referenced anymore by your variables. So, to see the VM really 
-        * destroyed, don't call this function but simply release any ref you have on it. 
-        */
-       public void destroy() {
-               shutdown();
-       }
 
        /* Make sure that the GC also destroys the C object */
        protected void finalize() throws Throwable {
@@ -68,14 +85,18 @@ public class VM extends Host {
        /** Returns whether the given VM is currently suspended */      
        public native int isSuspended();
 
+       /** Returns the amount of virtual CPUs provided */
+       public int getCoreAmount() {
+               return coreAmount;
+       }
+       
        /**
         * Natively implemented method create the VM.
         * @param ramSize size of the RAM that should be allocated (in MB)
         * @param migNetSpeed (network bandwith allocated for migrations in MB/s, if you don't know put zero ;))
         * @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 ramSize, int migNetSpeed, int dpIntensity);
-
+       private native void create(Host host, String name, int coreAmount, int ramSize, int migNetSpeed, int dpIntensity);
 
        /**
         * Set a CPU bound for a given VM.
@@ -86,14 +107,16 @@ public class VM extends Host {
        /**  start the VM */
        public native void start();
 
-
        /**
-        * Immediately kills all processes within the given VM. 
-        * 
+        * Immediately kills all processes within the given VM.
+        *
         * No extra delay occurs. If you want to simulate this too, you want to use a MSG_process_sleep()
         */
        public native void shutdown();
 
+       /** Shutdown and unref the VM. */
+       public native void destroy();
+
        /** Change the host on which all processes are running
         * (pre-copy is implemented)
         */     
@@ -104,24 +127,22 @@ public class VM extends Host {
                  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; 
+               // If the migration correcly returned, then we should change the currentHost value.
+               this.currentHost = destination;
        }
        private native void nativeMigration(Host destination) throws MsgException;
 
        /** 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
-        * use a \ref File.write() before or after, depending on the exact semantic
-        * of VM suspend to you.
+        * No suspension cost occurs. If you want to simulate this too, you want to use a \ref File.write() before or
+        * after, depending on the exact semantic 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
-        * use a \ref File.read() before or after, depending on the exact semantic
-        * of VM resume to you.
+        * No resume cost occurs. If you want to simulate this too, you want to use a \ref File.read() before or after,
+        * depending on the exact semantic of VM resume to you.
         */
        public native void resume();