X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/11831064373ded4fb4f294f3a579f7c4915bc23e..611d822b02f836d7abe031cced6adc4281ef4356:/src/bindings/java/org/simgrid/msg/VM.java diff --git a/src/bindings/java/org/simgrid/msg/VM.java b/src/bindings/java/org/simgrid/msg/VM.java index cd2c7e81ab..8a9b10868f 100644 --- a/src/bindings/java/org/simgrid/msg/VM.java +++ b/src/bindings/java/org/simgrid/msg/VM.java @@ -1,123 +1,102 @@ -/* JNI interface to virtual machine in Simgrid */ +/* Java bindings of the s4u::VirtualMachine */ -/* Copyright (c) 2006-2014. 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. */ package org.simgrid.msg; -import java.util.Vector; -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) +public class VM extends Host { + // No need to declare a new bind variable: we use the one inherited from the super class Host - /* Static functions */ - // GetByName is inherited from the super class Host + private Host currentHost; + private int coreAmount = 1; + /** + * 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, /*coreAmount*/1, 1024, 0, 0); + } - private static Vector vms= new Vector<>(); - private Host currentHost; + /** + * 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); + } - /* 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) { - this(host,name,1,1024, -1, null, -1,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 + * Create a VM + * @param host Host node * @param name name of the machine - * @param nCore number of core + * @param coreAmount the amount of cores of the VM * @param ramSize size of the RAM that should be allocated (in MBytes) - * @param netCap (not used for the moment) - * @param diskPath (not used for the moment) - * @param diskSize (not used for the moment) * @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 nCore, int ramSize, - int netCap, String diskPath, int diskSize, 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, nCore, ramSize, netCap, diskPath, diskSize, migNetSpeed, dpIntensity); - vms.add(this); + super.name = name; + this.currentHost = host; + this.coreAmount = coreAmount; + create(host, name, coreAmount, ramSize, migNetSpeed, dpIntensity); } - public static VM[] all(){ - VM[] allvms = new VM[vms.size()]; - vms.toArray(allvms); - return allvms; - } + /** Retrieve the list of all existing VMs */ + public static native VM[] all(); - public static VM getVMByName(String name){ - for (VM vm : vms){ - if (vm.getName().equals(name)) - return vm; - } - return null; - } - @Override - public void finalize() { - try { - nativeFinalize(); - } catch (Throwable e) { - e.printStackTrace(); - } + /** Retrieve a VM from its name */ + public static native VM getVMByName(String name); + + /* Make sure that the GC also destroys the C object */ + protected void finalize() throws Throwable { + nativeFinalize(); } private native void nativeFinalize(); - - /* JNI / Native code */ - - /* get/set property methods are inherited from the Host class. */ - - /** Returns whether the given VM is currently suspended - */ + /** Returns whether the given VM is currently suspended */ public native int isCreated(); - /** Returns whether the given VM is currently running - */ + /** Returns whether the given VM is currently running */ public native int isRunning(); - /** Returns whether the given VM is currently running - */ + /** Returns whether the given VM is currently running */ public native int isMigrating(); - /** Returns whether the given VM is currently suspended - */ + /** 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(); - + /** Returns the amount of virtual CPUs provided */ + public int getCoreAmount() { + return coreAmount; + } + /** * Natively implemented method create the VM. - * @param nCore number of core * @param ramSize size of the RAM that should be allocated (in MB) - * @param netCap (not used for the moment) - * @param diskPath (not used for the moment) - * @param diskSize (not used for the moment) * @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 nCore, int ramSize, - int netCap, String diskPath, int diskSize, 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. @@ -125,79 +104,50 @@ public class VM extends Host{ */ public native void setBound(double bound); - /** - * start the VM - */ + /** start the VM */ 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 + * 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(); - /** - * 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); - - + /** Shutdown and unref the VM. */ + public native void destroy(); /** Change the host on which all processes are running * (pre-copy is implemented) */ public void migrate(Host destination) throws HostFailureException{ try { - this.internalmig(destination); + this.nativeMigration(destination); } catch (Exception e){ 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(); - /** 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) - * 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 save(); - - /** Immediately resumes the execution of all processes previously saved - * within the given VM - * Not yet implemented (for the moment it behaves like resume) - * - * 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 restore(); - - - /** - * Class initializer, to initialize various JNI stuff - */ - public static native void nativeInit(); + /** Class initializer (for JNI), don't do it yourself */ + private static native void nativeInit(); static { nativeInit(); }