@Override public org.cloudbus.cloudsim.CloudletScheduler getScheduler(double mips, int pes, String schedulerAlias) { return new CloudletSchedulerTimeShared(); } },
@Override public double updateVmProcessing(double currentTime, List<Double> mipsShare) { setCurrentMipsShare(mipsShare); double timeSpam = currentTime - getPreviousTime(); for (ResCloudlet rcl : getCloudletExecList()) { rcl.updateCloudletFinishedSoFar((long) (getCapacity(mipsShare) * timeSpam * rcl.getNumberOfPes() * Consts.MILLION)); if (getCloudletExecList().size() == 0) { setPreviousTime(currentTime); return 0.0; for (ResCloudlet rcl : getCloudletExecList()) { long remainingLength = rcl.getRemainingCloudletLength(); if (remainingLength == 0) {// finished: remove from the list toRemove.add(rcl); cloudletFinish(rcl); continue; getCloudletExecList().removeAll(toRemove); for (ResCloudlet rcl : getCloudletExecList()) { double estimatedFinishTime = currentTime + (rcl.getRemainingCloudletLength() / (getCapacity(mipsShare) * rcl.getNumberOfPes())); if (estimatedFinishTime - currentTime < CloudSim.getMinTimeBetweenEvents()) { estimatedFinishTime = currentTime + CloudSim.getMinTimeBetweenEvents(); setPreviousTime(currentTime); return nextEvent;
@Override public double cloudletSubmit(Cloudlet cloudlet) { return cloudletSubmit(cloudlet, 0.0); }
@Override public double getTotalCurrentAvailableMipsForCloudlet(ResCloudlet rcl, List<Double> mipsShare) { /*@todo It isn't being used any the the given parameters.*/ return getCapacity(getCurrentMipsShare()); }
@Override public boolean cloudletPause(int cloudletId) { boolean found = false; int position = 0; for (ResCloudlet rcl : getCloudletExecList()) { if (rcl.getCloudletId() == cloudletId) { found = true; break; } position++; } if (found) { // remove cloudlet from the exec list and put it in the paused list ResCloudlet rcl = getCloudletExecList().remove(position); if (rcl.getRemainingCloudletLength() == 0) { cloudletFinish(rcl); } else { rcl.setCloudletStatus(Cloudlet.PAUSED); getCloudletPausedList().add(rcl); } return true; } return false; }
@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; }
for (ResCloudlet rcl : getCloudletFinishedList()) { if (rcl.getCloudletId() == cloudletId) { found = true; return getCloudletFinishedList().remove(position).getCloudlet(); for (ResCloudlet rcl : getCloudletExecList()) { if (rcl.getCloudletId() == cloudletId) { found = true; ResCloudlet rcl = getCloudletExecList().remove(position); if (rcl.getRemainingCloudletLength() == 0) { cloudletFinish(rcl); } else { rcl.setCloudletStatus(Cloudlet.CANCELED); for (ResCloudlet rcl : getCloudletPausedList()) { if (rcl.getCloudletId() == cloudletId) { found = true; return getCloudletPausedList().remove(position).getCloudlet();
@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()); }
@Override public int getCloudletStatus(int cloudletId) { for (ResCloudlet rcl : getCloudletExecList()) { if (rcl.getCloudletId() == cloudletId) { return rcl.getCloudletStatus(); } } for (ResCloudlet rcl : getCloudletPausedList()) { if (rcl.getCloudletId() == cloudletId) { return rcl.getCloudletStatus(); } } return -1; }
@Override public int runningCloudlets() { return getCloudletExecList().size(); }
@Override public boolean isFinishedCloudlets() { return getCloudletFinishedList().size() > 0; }
@Override public Cloudlet migrateCloudlet() { ResCloudlet rgl = getCloudletExecList().remove(0); rgl.finalizeCloudlet(); return rgl.getCloudlet(); }
@Override public Cloudlet getNextFinishedCloudlet() { if (getCloudletFinishedList().size() > 0) { return getCloudletFinishedList().remove(0).getCloudlet(); } return null; }
private static List<Vm> createVM(int userId, int vms, int idShift) { //Creates a container to store VMs. This list is passed to the broker later LinkedList<Vm> list = new LinkedList<Vm>(); //VM Parameters long size = 10000; //image size (MB) int ram = 512; //vm memory (MB) int mips = 250; long bw = 1000; int pesNumber = 1; //number of cpus String vmm = "Xen"; //VMM name //create VMs Vm[] vm = new Vm[vms]; for(int i=0;i<vms;i++){ vm[i] = new Vm(idShift + i, userId, mips, pesNumber, ram, bw, size, vmm, new CloudletSchedulerTimeShared()); list.add(vm[i]); } return list; }
/** * 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); }
private static List<Vm> createVM(int userId, int vms, int idShift) { //Creates a container to store VMs. This list is passed to the broker later LinkedList<Vm> list = new LinkedList<Vm>(); //VM Parameters long size = 10000; //image size (MB) int ram = 512; //vm memory (MB) int mips = 250; long bw = 1000; int pesNumber = 1; //number of cpus String vmm = "Xen"; //VMM name //create VMs Vm[] vm = new Vm[vms]; for(int i=0;i<vms;i++){ vm[i] = new Vm(idShift + i, userId, mips, pesNumber, ram, bw, size, vmm, new CloudletSchedulerTimeShared()); list.add(vm[i]); } return list; }
@Override public double getTotalUtilizationOfCpu(double time) { /* * @todo */ double totalUtilization = 0; for (ResCloudlet gl : getCloudletExecList()) { totalUtilization += gl.getCloudlet().getUtilizationOfCpu(time); } return totalUtilization; }
private static List<Vm> createVM(int userId, int vms) { //Creates a container to store VMs. This list is passed to the broker later LinkedList<Vm> list = new LinkedList<Vm>(); //VM Parameters long size = 10000; //image size (MB) int ram = 512; //vm memory (MB) int mips = 1000; long bw = 1000; int pesNumber = 1; //number of cpus String vmm = "Xen"; //VMM name //create VMs Vm[] vm = new Vm[vms]; for(int i=0;i<vms;i++){ vm[i] = new Vm(i, userId, mips, pesNumber, ram, bw, size, vmm, new CloudletSchedulerTimeShared()); //for creating a VM with a space shared scheduling policy for cloudlets: //vm[i] = Vm(i, userId, mips, pesNumber, ram, bw, size, priority, vmm, new CloudletSchedulerSpaceShared()); list.add(vm[i]); } return list; }
Vm vm1 = new Vm(vmid, brokerId, mips, pesNumber, ram, bw, size, vmm, new CloudletSchedulerTimeShared()); Vm vm2 = new Vm(vmid, brokerId, mips * 2, pesNumber, ram, bw, size, vmm, new CloudletSchedulerTimeShared());