/** * Gets the total length (across all PEs) of this Cloudlet. It considers the * {@link #cloudletLength} of the cloudlet to be executed in each Pe and the * {@link #numberOfPes}.<br/> * * For example, setting the cloudletLenght as 10000 MI and * {@link #numberOfPes} to 4, each Pe will execute 10000 MI. Thus, the * entire cloudlet has a total length of 40000 MI. * * * @return the total length of this Cloudlet * * @see #setCloudletLength(long) * @pre $none * @post $result >= 0.0 */ public long getCloudletTotalLength() { return getCloudletLength() * getNumberOfPes(); }
@Override public Cloudlet migrateCloudlet() { ResCloudlet rcl = getCloudletExecList().remove(0); rcl.finalizeCloudlet(); Cloudlet cl = rcl.getCloudlet(); usedPes -= cl.getNumberOfPes(); return cl; }
/** * Returns the first cloudlet to migrate to another VM. * * @return the first running cloudlet * @pre $none * @post $none * * @todo it doesn't check if the list is empty */ @Override public Cloudlet migrateCloudlet() { ResCloudlet rcl = getCloudletExecList().remove(0); rcl.finalizeCloudlet(); Cloudlet cl = rcl.getCloudlet(); usedPes -= cl.getNumberOfPes(); return cl; }
@Override public double cloudletSubmit(Cloudlet cl, double fileTransferTime) { ResCloudlet rcl = new ResCloudlet(cl); rcl.setCloudletStatus(Cloudlet.INEXEC); for (int i = 0; i < cl.getNumberOfPes(); i++) { rcl.setMachineAndPeId(0, i); } getCloudletExecList().add(rcl); return getEstimatedFinishTime(rcl, getPreviousTime()); }
/** * Initialises all local attributes. * * @pre $none * @post $none */ private void init() { // get number of PEs required to run this Cloudlet pesNumber = cloudlet.getNumberOfPes(); // if more than 1 Pe, then create an array if (pesNumber > 1) { machineArrayId = new int[pesNumber]; peArrayId = new int[pesNumber]; } arrivalTime = CloudSim.clock(); cloudlet.setSubmissionTime(arrivalTime); // default values finishedTime = NOT_FOUND; // Cannot finish in this hourly slot. machineId = NOT_FOUND; peId = NOT_FOUND; index = 0; totalCompletionTime = 0.0; startExecTime = 0.0; // In case a Cloudlet has been executed partially by some other grid // hostList. cloudletFinishedSoFar = cloudlet.getCloudletFinishedSoFar() * Consts.MILLION; }
@Override public double cloudletSubmit(Cloudlet cloudlet, double fileTransferTime) { if ((currentCpus - usedPes) >= cloudlet.getNumberOfPes()) { ResCloudlet rcl = new ResCloudlet(cloudlet); rcl.setCloudletStatus(Cloudlet.INEXEC); for (int i = 0; i < cloudlet.getNumberOfPes(); i++) { rcl.setMachineAndPeId(0, i); usedPes += cloudlet.getNumberOfPes(); } else {// no enough free PEs: go to the waiting queue ResCloudlet rcl = new ResCloudlet(cloudlet);
/** * Receives an cloudlet to be executed in the VM managed by this scheduler. * * @param cl the cl * @param fileTransferTime the file transfer time * @return predicted completion time * @pre _gl != null * @post $none */ @Override public double cloudletSubmit(Cloudlet cl, double fileTransferTime) { ResCloudlet rcl = new ResCloudlet(cl); rcl.setCloudletStatus(Cloudlet.INEXEC); for (int i = 0; i < cl.getNumberOfPes(); i++) { rcl.setMachineAndPeId(0, i); } getCloudletExecList().add(rcl); return getEstimatedFinishTime(rcl, getPreviousTime()); }
@Override public double cloudletSubmit(Cloudlet cloudlet, double fileTransferTime) { if ((currentCpus - usedPes) >= cloudlet.getNumberOfPes()) { ResCloudlet rcl = new ResCloudlet(cloudlet); rcl.setCloudletStatus(Cloudlet.INEXEC); for (int i = 0; i < cloudlet.getNumberOfPes(); i++) { rcl.setMachineAndPeId(0, i); usedPes += cloudlet.getNumberOfPes(); } else {// no enough free PEs: go to the waiting queue ResCloudlet rcl = new ResCloudlet(cloudlet);
@Override public double cloudletSubmit(Cloudlet cloudlet, double fileTransferTime) { ResCloudlet rcl = new ResCloudlet(cloudlet); rcl.setCloudletStatus(Cloudlet.INEXEC); for (int i = 0; i < cloudlet.getNumberOfPes(); i++) { rcl.setMachineAndPeId(0, i); } getCloudletExecList().add(rcl); // use the current capacity to estimate the extra amount of // time to file transferring. It must be added to the cloudlet length double extraSize = getCapacity(getCurrentMipsShare()) * fileTransferTime; long length = (long) (cloudlet.getCloudletLength() + extraSize); cloudlet.setCloudletLength(length); return cloudlet.getCloudletLength() / getCapacity(getCurrentMipsShare()); }
/** * Receives an cloudlet to be executed in the VM managed by this scheduler. * * @param cloudlet the submited cloudlet * @param fileTransferTime time required to move the required files from the SAN to the VM * @return expected finish time of this cloudlet * @pre gl != null * @post $none */ @Override public double cloudletSubmit(Cloudlet cloudlet, double fileTransferTime) { ResCloudlet rcl = new ResCloudlet(cloudlet); rcl.setCloudletStatus(Cloudlet.INEXEC); for (int i = 0; i < cloudlet.getNumberOfPes(); i++) { rcl.setMachineAndPeId(0, i); } getCloudletExecList().add(rcl); // use the current capacity to estimate the extra amount of // time to file transferring. It must be added to the cloudlet length double extraSize = getCapacity(getCurrentMipsShare()) * fileTransferTime; long length = (long) (cloudlet.getCloudletLength() + extraSize); cloudlet.setCloudletLength(length); return cloudlet.getCloudletLength() / getCapacity(getCurrentMipsShare()); }
/** * Processes the return of cloudlets. * * @param ev a simulation event. * @since 1.0 */ @Override protected void processCloudletReturn(SimEvent ev) { Cloudlet cloudlet = (Cloudlet) ev.getData(); getCloudletReceivedList().add(cloudlet); Log.printLine(CloudSim.clock()+": "+getName()+ ": Cloudlet "+cloudlet.getCloudletId()+" received"); cloudletsSubmitted -= 1; Cloudlet newCloudlet = new Cloudlet(this.cloudletId, (long) ((long)this.maxLengthOfCloudlets * RandomNumberGenerator.getRandomNumbers(1).get(0)), cloudlet.getNumberOfPes(), cloudlet.getCloudletLength(), cloudlet.getCloudletOutputSize(), cloudlet.getUtilizationModelCpu(), cloudlet.getUtilizationModelRam(), cloudlet.getUtilizationModelBw()); newCloudlet.setUserId(getId()); newCloudlet.setVmId(cloudlet.getVmId()); getCloudletList().add(newCloudlet); this.cloudletId++; submitCloudlets(); }