@Override public org.cloudbus.cloudsim.VmScheduler getScheduler(List<Pe> peList, String schedulerAlias) { return new VmSchedulerSpaceShared(peList); } },
@Override public void deallocatePesForVm(Vm vm) { getFreePes().addAll(getPeAllocationMap().get(vm.getUid())); getPeAllocationMap().remove(vm.getUid()); double totalMips = 0; for (double mips : getMipsMap().get(vm.getUid())) { totalMips += mips; } setAvailableMips(getAvailableMips() + totalMips); getMipsMap().remove(vm.getUid()); }
/** * Instantiates a new vm space-shared scheduler. * * @param pelist the pelist */ public VmSchedulerSpaceShared(List<? extends Pe> pelist) { super(pelist); setPeAllocationMap(new HashMap<String, List<Pe>>()); setFreePes(new ArrayList<Pe>()); getFreePes().addAll(pelist); }
@Override public boolean allocatePesForVm(Vm vm, List<Double> mipsShare) { // if there is no enough free PEs, fails if (getFreePes().size() < mipsShare.size()) { return false; } List<Pe> selectedPes = new ArrayList<Pe>(); Iterator<Pe> peIterator = getFreePes().iterator(); Pe pe = peIterator.next(); double totalMips = 0; for (Double mips : mipsShare) { if (mips <= pe.getMips()) { selectedPes.add(pe); if (!peIterator.hasNext()) { break; } pe = peIterator.next(); totalMips += mips; } } if (mipsShare.size() > selectedPes.size()) { return false; } getFreePes().removeAll(selectedPes); getPeAllocationMap().put(vm.getUid(), selectedPes); getMipsMap().put(vm.getUid(), mipsShare); setAvailableMips(getAvailableMips() - totalMips); return true; }
storage, peList, new VmSchedulerSpaceShared(peList)
storage, peList, new VmSchedulerSpaceShared(peList)
storage, peList, new VmSchedulerSpaceShared(peList)