/** * Gets the Host where a VM is placed. * @param vm the VM to get its Host * @return the Host where the VM is placed */ protected NetworkHost getVmHost(final Vm vm) { return (NetworkHost)vm.getHost(); }
private void appendVmMigrationMsgToStringBuilder(final StringBuilder builder, final Vm vm, final Host targetHost) { if(LOGGER.isInfoEnabled()) { builder.append(" ").append(vm).append(" will be migrated from ") .append(vm.getHost()).append(" to ").append(targetHost) .append(System.lineSeparator()); } }
@Override public Optional<Host> findHostForVm(final Vm vm) { final Set<Host> excludedHosts = new HashSet<>(); excludedHosts.add(vm.getHost()); return findHostForVm(vm, excludedHosts); }
/** * Gets a VmHostEventInfo instance from the given parameters. * The {@link #getHost() Host} attribute is defined as the {@link Host} where the {@link Vm} * is running and the {@link #getTime()} is the current simulation time. * * @param listener the listener to be notified about the event * @param vm {@link Vm} that fired the event */ static VmHostEventInfo of(final EventListener<? extends EventInfo> listener, final Vm vm) { return of(listener, vm, vm.getHost()); }
/** * Gets a VmDatacenterEventInfo instance from the given parameters. * The {@link #getDatacenter() Datacenter} attribute is defined as the {@link Datacenter} where the {@link Vm} * is running and the {@link #getTime()} is the current simulation time.. * * @param listener the listener to be notified about the event * @param vm the {@link Vm} that fired the event */ static VmDatacenterEventInfo of(final EventListener<? extends EventInfo> listener, final Vm vm) { return of(listener, vm, vm.getHost().getDatacenter()); }
/** * Gets the characteristics of the Datacenter where the VM is running. * Such characteristics include the price to run a VM in such a Datacenter. * @return */ private DatacenterCharacteristics getDcCharacteristics() { return vm.getHost().getDatacenter().getCharacteristics(); }
private double getHostStartupTime(final Cloudlet cloudlet) { return cloudlet.getVm().getHost().getStartTime(); }
private void showResourceIsUnavailable(final VerticalVmScaling scaling) { final Class<? extends ResourceManageable> resourceClass = scaling.getResourceClass(); final ResourceManageable hostResource = scaling.getVm().getHost().getResource(resourceClass); final double extraAmountToAllocate = scaling.getResourceAmountToScale(); LOGGER.warn( "{}: {}: {} requested more {} of {} capacity but the {} has just {} of available {}", scaling.getVm().getSimulation().clock(), scaling.getClass().getSimpleName(), scaling.getVm(), (long)extraAmountToAllocate, resourceClass.getSimpleName(), scaling.getVm().getHost(), hostResource.getAvailableResource(), resourceClass.getSimpleName()); }
@Override public boolean addMigratingInVm(final Vm vm) { if (vmsMigratingIn.contains(vm)) { return false; } vmsMigratingIn.add(vm); if(!allocateResourcesForVm(vm, true)){ vmsMigratingIn.remove(vm); return false; } updateProcessing(simulation.clock()); vm.getHost().updateProcessing(simulation.clock()); return true; }
/** * Checks if it is time to evaluate weather the Vm is under or overloaded. * * @param time current simulation time * @return true if it's time to check weather the Vm is over and underloaded, false otherwise */ protected boolean isTimeToCheckPredicate(final double time) { return time > lastProcessingTime && (long) time % getVm().getHost().getDatacenter().getSchedulingInterval() == 0; }
/** * Gets the {@link EdgeSwitch} that the Host where the VM receiving a packet is connected to. * @param pkt the packet targeting some VM * @return the Edge Switch connected to the Host where the targeting VM is placed */ protected EdgeSwitch getVmEdgeSwitch(final HostPacket pkt) { final Vm receiverVm = pkt.getVmPacket().getDestination(); return ((NetworkHost)receiverVm.getHost()).getEdgeSwitch(); }
/** * Gets the total monetary cost of processing power allocated from the PM hosting the VM. * * @return */ public double getProcessingCost() { final double hostMips = vm.getHost().getPeList().stream() .findFirst() .map(Pe::getCapacity) .orElse(0L); final double costPerMI = hostMips > 0 ? getDcCharacteristics().getCostPerSecond()/hostMips : 0.0; return costPerMI * getVm().getMips() * getVm().getNumberOfPes(); }
private void onClockTickListener(EventInfo eventInfo) { for (Vm vm : vmList) { System.out.printf("\t\tTime %6.1f: Vm %d Ram Usage: %6.2f%% (%4d of %4d MB)", eventInfo.getTime(), vm.getId(), vm.getRam().getPercentUtilization() * 100.0, vm.getRam().getAllocatedResource(), vm.getRam().getCapacity()); System.out.printf(" | Host Ram Allocation: %6.2f%% (%5d of %5d MB). Running Cloudlets: %d", vm.getHost().getRam().getPercentUtilization() * 100, vm.getHost().getRam().getAllocatedResource(), vm.getHost().getRam().getCapacity(), vm.getCloudletScheduler().getCloudletExecList().size()); } }
/** * Updates the processing of the Host where a Cloudlet's VM is running. * @param cloudlet */ private void updateHostProcessing(final Cloudlet cloudlet) { cloudlet.getVm().getHost().updateProcessing(getSimulation().clock()); }
private boolean isNotHostPesSuitableToUpScaleVm(final VerticalVmScaling scaling) { final Vm vm = scaling.getVm(); final double numberOfPesForScaling = scaling.getResourceAmountToScale(); final List<Double> additionalVmMips = LongStream.range(0, (long)numberOfPesForScaling).mapToObj(i -> vm.getMips()).collect(toList()); return !vm.getHost().getVmScheduler().isSuitableForVm(vm, additionalVmMips); }
public DynamicVmAllocationPolicyBestFitExample(){ /*Enables just some level of log messages. Make sure to import org.cloudsimplus.util.Log;*/ //Log.setLevel(ch.qos.logback.classic.Level.WARN); System.out.println("Starting " + getClass().getSimpleName()); simulation = new CloudSim(); @SuppressWarnings("unused") Datacenter datacenter0 = createDatacenter(); DatacenterBroker broker = new DatacenterBrokerSimple(simulation); createAndSubmitVms(broker); createAndSubmitCloudlets(broker); simulation.start(); final List<Cloudlet> finishedList = broker.getCloudletFinishedList(); finishedList.sort( Comparator.comparingLong((Cloudlet c) -> c.getVm().getHost().getId()) .thenComparingLong(c -> c.getVm().getId())); new CloudletsTableBuilder(finishedList).build(); System.out.println(getClass().getSimpleName() + " finished!"); }
private void requestVmVerticalScaling(final SimEvent evt) { if (!(evt.getData() instanceof VerticalVmScaling)) { return; } final VerticalVmScaling scaling = (VerticalVmScaling) evt.getData(); getSimulation().sendNow( evt.getSource(), scaling.getVm().getHost().getDatacenter(), CloudSimTags.VM_VERTICAL_SCALING, scaling); }
/** * Schedules the execution of the next task of a given cloudlet. */ private void scheduleNextTaskIfCurrentIsFinished(final NetworkCloudlet cloudlet) { if(!cloudlet.startNextTaskIfCurrentIsFinished(cloudlet.getSimulation().clock())){ return; } final Datacenter dc = getVm().getHost().getDatacenter(); dc.schedule(dc, dc.getSimulation().getMinTimeBetweenEvents(), CloudSimTags.VM_UPDATE_CLOUDLET_PROCESSING); }
@Override protected void createTableColumns() { final String ID = "ID"; addColumnDataFunction(getTable().addColumn("Cloudlet", ID), Identifiable::getId); addColumnDataFunction(getTable().addColumn("Status "), cloudlet -> cloudlet.getStatus().name()); addColumnDataFunction(getTable().addColumn("DC", ID), cloudlet -> cloudlet.getVm().getHost().getDatacenter().getId()); addColumnDataFunction(getTable().addColumn("Host", ID), cloudlet -> cloudlet.getVm().getHost().getId()); addColumnDataFunction(getTable().addColumn("Host PEs ", CPU_CORES), cloudlet -> cloudlet.getVm().getHost().getNumberOfWorkingPes()); addColumnDataFunction(getTable().addColumn("VM", ID), cloudlet -> cloudlet.getVm().getId()); addColumnDataFunction(getTable().addColumn("VM PEs ", CPU_CORES), cloudlet -> cloudlet.getVm().getNumberOfPes()); addColumnDataFunction(getTable().addColumn("CloudletLen", "MI"), Cloudlet::getLength); addColumnDataFunction(getTable().addColumn("CloudletPEs", CPU_CORES), Cloudlet::getNumberOfPes); TableColumn col = getTable().addColumn("StartTime", SECONDS).setFormat(TIME_FORMAT); addColumnDataFunction(col, cloudlet -> cloudlet.getExecStartTime()); col = getTable().addColumn("FinishTime", SECONDS).setFormat(TIME_FORMAT); addColumnDataFunction(col, cloudlet -> cloudlet.getFinishTime()); col = getTable().addColumn("ExecTime", SECONDS).setFormat(TIME_FORMAT); addColumnDataFunction(col, cloudlet -> Math.ceil(cloudlet.getActualCpuTime())); } }