package org.cloudbus.cloudsim.container.resourceAllocatorMigrationEnabled; import org.cloudbus.cloudsim.container.core.ContainerHost; import org.cloudbus.cloudsim.container.core.ContainerHostList; import org.cloudbus.cloudsim.container.core.PowerContainerHost; import org.cloudbus.cloudsim.container.containerSelectionPolicies.PowerContainerSelectionPolicy; import org.cloudbus.cloudsim.container.hostSelectionPolicies.HostSelectionPolicy; import org.cloudbus.cloudsim.container.vmSelectionPolicies.PowerContainerVmSelectionPolicy; import java.util.*; /** * Created by sareh on 13/08/15. */ public abstract class PowerContainerVmAllocationPolicyMigrationAbstractContainerHostSelectionUnderUtilizedAdded extends PowerContainerVmAllocationPolicyMigrationAbstractContainerHostSelection { private double underUtilizationThr; public PowerContainerVmAllocationPolicyMigrationAbstractContainerHostSelectionUnderUtilizedAdded( List<? extends ContainerHost> hostList, PowerContainerVmSelectionPolicy vmSelectionPolicy, PowerContainerSelectionPolicy containerSelectionPolicy, HostSelectionPolicy hostSelectionPolicy, double underUtilizationThr, int numberOfVmTypes, int[] vmPes, float[] vmRam, long vmBw, long vmSize, double[] vmMips) { super(hostList, vmSelectionPolicy, containerSelectionPolicy, hostSelectionPolicy, numberOfVmTypes, vmPes, vmRam, vmBw, vmSize, vmMips); setUnderUtilizationThr(underUtilizationThr); } @Override /** * Gets the under utilized host. *Checks if the utilization is under the threshold then counts it as underUtilized :) * @param excludedHosts the excluded hosts * @return the under utilized host */ protected PowerContainerHost getUnderUtilizedHost(Set<? extends ContainerHost> excludedHosts) { List<ContainerHost> underUtilizedHostList = getUnderUtilizedHostList(excludedHosts); if (underUtilizedHostList.size() == 0) { return null; } ContainerHostList.sortByCpuUtilizationDescending(underUtilizedHostList); // Log.print(String.format("The under Utilized Hosts are %d", underUtilizedHostList.size())); PowerContainerHost underUtilizedHost = (PowerContainerHost) underUtilizedHostList.get(0); return underUtilizedHost; } @Override /** * Gets the under utilized host. * * @param excludedHosts the excluded hosts * @return the under utilized host */ protected List<ContainerHost> getUnderUtilizedHostList(Set<? extends ContainerHost> excludedHosts) { List<ContainerHost> underUtilizedHostList = new ArrayList<>(); for (PowerContainerHost host : this.<PowerContainerHost>getContainerHostList()) { if (excludedHosts.contains(host)) { continue; } double utilization = host.getUtilizationOfCpu(); if (!areAllVmsMigratingOutOrAnyVmMigratingIn(host) && utilization < getUnderUtilizationThr() && !areAllContainersMigratingOutOrAnyContainersMigratingIn(host)) { underUtilizedHostList.add(host); } } return underUtilizedHostList; } public double getUnderUtilizationThr() { return underUtilizationThr; } public void setUnderUtilizationThr(double underUtilizationThr) { this.underUtilizationThr = underUtilizationThr; } }