@Override public double getTotalCurrentAvailableMipsForCloudlet(ResCloudlet rcl, List<Double> mipsShare) { double totalCurrentMips = 0.0; if (mipsShare != null) { int neededPEs = rcl.getNumberOfPes(); for (double mips : mipsShare) { totalCurrentMips += mips; neededPEs--; if (neededPEs <= 0) { break; } } } return totalCurrentMips; }
/** * Gets the total current mips for the clouddlet. * * @param rcl the rcl * @param mipsShare the mips share * @return the total current mips */ @Override public double getTotalCurrentAvailableMipsForCloudlet(ResCloudlet rcl, List<Double> mipsShare) { double totalCurrentMips = 0.0; if (mipsShare != null) { int neededPEs = rcl.getNumberOfPes(); for (double mips : mipsShare) { totalCurrentMips += mips; neededPEs--; if (neededPEs <= 0) { break; } } } return totalCurrentMips; }
/** * Gets the capacity. * * @param mipsShare the mips share * @return the capacity */ protected double getCapacity(List<Double> mipsShare) { double capacity = 0.0; int cpus = 0; for (Double mips : mipsShare) { capacity += mips; if (mips > 0.0) { cpus++; } } currentCPUs = cpus; int pesInUse = 0; for (ResCloudlet rcl : getCloudletExecList()) { pesInUse += rcl.getNumberOfPes(); } if (pesInUse > currentCPUs) { capacity /= pesInUse; } else { capacity /= currentCPUs; } return capacity; }
/** * Gets the individual MIPS capacity available for each PE available for the scheduler, * considering that all PEs have the same capacity. * * @param mipsShare list with MIPS share of each PE available to the scheduler * @return the capacity of each PE */ protected double getCapacity(List<Double> mipsShare) { double capacity = 0.0; int cpus = 0; for (Double mips : mipsShare) { capacity += mips; if (mips > 0.0) { cpus++; } } currentCPUs = cpus; int pesInUse = 0; for (ResCloudlet rcl : getCloudletExecList()) { pesInUse += rcl.getNumberOfPes(); } if (pesInUse > currentCPUs) { capacity /= pesInUse; } else { capacity /= currentCPUs; } return capacity; }
@Override public void cloudletFinish(ResCloudlet rcl) { rcl.setCloudletStatus(Cloudlet.SUCCESS); rcl.finalizeCloudlet(); getCloudletFinishedList().add(rcl); usedPes -= rcl.getNumberOfPes(); }
@Override public void cloudletFinish(ResCloudlet rcl) { rcl.setCloudletStatus(Cloudlet.SUCCESS); rcl.finalizeCloudlet(); getCloudletFinishedList().add(rcl); usedPes -= rcl.getNumberOfPes(); }
if ((currentCpus - usedPes) >= rcl.getNumberOfPes()) { rcl.setCloudletStatus(Cloudlet.INEXEC); for (int i = 0; i < rcl.getNumberOfPes(); i++) { rcl.setMachineAndPeId(0, i); size *= rcl.getNumberOfPes(); rcl.getCloudlet().setCloudletLength(size); usedPes += rcl.getNumberOfPes(); + (remainingLength / (capacity * rcl.getNumberOfPes())); size *= rcl.getNumberOfPes(); rcl.getCloudlet().setCloudletLength(size);
if ((currentCpus - usedPes) >= rcl.getNumberOfPes()) { rcl.setCloudletStatus(Cloudlet.INEXEC); for (int i = 0; i < rcl.getNumberOfPes(); i++) { rcl.setMachineAndPeId(0, i); size *= rcl.getNumberOfPes(); rcl.getCloudlet().setCloudletLength(size); usedPes += rcl.getNumberOfPes(); + (remainingLength / (capacity * rcl.getNumberOfPes())); size *= rcl.getNumberOfPes(); rcl.getCloudlet().setCloudletLength(size);
(long) (capacity * timeSpam * rcl.getNumberOfPes() * Consts.MILLION)); toRemove.clear(); for (ResCloudlet rcl : getCloudletWaitingList()) { if ((currentCpus - usedPes) >= rcl.getNumberOfPes()) { rcl.setCloudletStatus(Cloudlet.INEXEC); for (int k = 0; k < rcl.getNumberOfPes(); k++) { rcl.setMachineAndPeId(0, i); usedPes += rcl.getNumberOfPes(); toRemove.add(rcl); break; for (ResCloudlet rcl : getCloudletExecList()) { double remainingLength = rcl.getRemainingCloudletLength(); double estimatedFinishTime = currentTime + (remainingLength / (capacity * rcl.getNumberOfPes())); if (estimatedFinishTime - currentTime < CloudSim.getMinTimeBetweenEvents()) { estimatedFinishTime = currentTime + CloudSim.getMinTimeBetweenEvents();
@Override public double cloudletResume(int cloudletId) { boolean found = false; int position = 0; // look for the cloudlet in the paused list for (ResCloudlet rcl : getCloudletPausedList()) { if (rcl.getCloudletId() == cloudletId) { found = true; break; } position++; } if (found) { ResCloudlet rgl = getCloudletPausedList().remove(position); rgl.setCloudletStatus(Cloudlet.INEXEC); getCloudletExecList().add(rgl); // calculate the expected time for cloudlet completion // first: how many PEs do we have? double remainingLength = rgl.getRemainingCloudletLength(); double estimatedFinishTime = CloudSim.clock() + (remainingLength / (getCapacity(getCurrentMipsShare()) * rgl.getNumberOfPes())); return estimatedFinishTime; } return 0.0; }
rcl.updateCloudletFinishedSoFar((long) (getCapacity(mipsShare) * timeSpam * rcl.getNumberOfPes() * Consts.MILLION)); + (rcl.getRemainingCloudletLength() / (getCapacity(mipsShare) * rcl.getNumberOfPes())); if (estimatedFinishTime - currentTime < CloudSim.getMinTimeBetweenEvents()) { estimatedFinishTime = currentTime + CloudSim.getMinTimeBetweenEvents();
toRemove.clear(); for (ResCloudlet rcl : getCloudletWaitingList()) { if ((currentCpus - usedPes) >= rcl.getNumberOfPes()) { rcl.setCloudletStatus(Cloudlet.INEXEC); for (int k = 0; k < rcl.getNumberOfPes(); k++) { rcl.setMachineAndPeId(0, i); usedPes += rcl.getNumberOfPes(); toRemove.add(rcl); break; for (ResCloudlet rcl : getCloudletExecList()) { double remainingLength = rcl.getRemainingCloudletLength(); double estimatedFinishTime = currentTime + (remainingLength / (capacity * rcl.getNumberOfPes())); if (estimatedFinishTime - currentTime < CloudSim.getMinTimeBetweenEvents()) { estimatedFinishTime = currentTime + CloudSim.getMinTimeBetweenEvents();
rcl.updateCloudletFinishedSoFar((long) (getCapacity(mipsShare) * timeSpam * rcl.getNumberOfPes() * Consts.MILLION)); + (rcl.getRemainingCloudletLength() / (getCapacity(mipsShare) * rcl.getNumberOfPes())); if (estimatedFinishTime - currentTime < CloudSim.getMinTimeBetweenEvents()) { estimatedFinishTime = currentTime + CloudSim.getMinTimeBetweenEvents();
+ (remainingLength / (getCapacity(getCurrentMipsShare()) * rgl.getNumberOfPes()));