Interface VmAllocationPolicy

All Known Subinterfaces:
VmAllocationPolicyMigration, VmAllocationPolicyMigrationDynamicUpperThreshold
All Known Implementing Classes:
VmAllocationPolicyAbstract, VmAllocationPolicyBestFit, VmAllocationPolicyFirstFit, VmAllocationPolicyMigrationAbstract, VmAllocationPolicyMigrationBestFitStaticThreshold, VmAllocationPolicyMigrationDynamicUpperThresholdFirstFit, VmAllocationPolicyMigrationStaticThreshold, VmAllocationPolicyMigrationWorstFitStaticThreshold, VmAllocationPolicyRandom, VmAllocationPolicyRoundRobin, VmAllocationPolicySimple

public interface VmAllocationPolicy
An interface to be implemented by each class that represents a policy used by a Datacenter to choose a Host to place or migrate a given Vm or VmGroup.

The VmAllocationPolicy uses Java 8 Functional Programming to enable changing, at runtime, the policy used to select a Host for a given Vm or VmGroup.

Since:
CloudSim Plus 1.0
Author:
Rodrigo N. Calheiros, Anton Beloglazov, Manoel Campos da Silva Filho
See Also:
  • Field Details

  • Method Details

    • getDatacenter

      Datacenter getDatacenter()
      Gets the Datacenter associated to the VmAllocationPolicy.
      Returns:
    • setDatacenter

      void setDatacenter(Datacenter datacenter)
      Sets the Datacenter associated to the VmAllocationPolicy
      Parameters:
      datacenter - the Datacenter to set
    • allocateHostForVm

      HostSuitability allocateHostForVm(Vm vm)
      Tries to allocate a host for a given Vm or VmGroup.
      Parameters:
      vm - the Vm or VmGroup to allocate a host to
      Returns:
      a HostSuitability to indicate if the Vm was placed into the host or not (if the Host doesn't have enough resources to allocate the Vm)
      See Also:
    • allocateHostForVm

      HostSuitability allocateHostForVm(Vm vm, Host host)
      Tries to allocate a specified host for a given Vm or VmGroup.
      Parameters:
      vm - the Vm or VmGroup to allocate a host to
      host - the host to allocate to the given Vm or VmGroup
      Returns:
      a HostSuitability to indicate if the Vm was placed into the host or not (if the Host doesn't have enough resources to allocate the Vm)
      See Also:
    • allocateHostForVm

      <T extends Vm> List<T> allocateHostForVm(Collection<T> vmCollection)
      Tries to allocate hosts for a collection of Vms or VmGroups.
      Parameters:
      vmCollection - the Vm or VmGroup collection to allocate hosts to
      Returns:
      an empty list if hosts were allocated to all VMs or a list of Vms that a suitable host couldn't be found.
      See Also:
    • scaleVmVertically

      boolean scaleVmVertically(VerticalVmScaling scaling)
      Try to scale some Vm's resource vertically up or down, respectively if:
      • the Vm is overloaded and the Host where the Vm is placed has enough capacity
      • the Vm is underloaded
      The resource to be scaled is defined by the given VerticalVmScaling object.
      Parameters:
      scaling - the VerticalVmScaling object with information of which resource is being requested to be scaled
      Returns:
      true if the requested resource was scaled, false otherwise
    • deallocateHostForVm

      void deallocateHostForVm(Vm vm)
      Releases the host used by a VM.
      Parameters:
      vm - the vm to get its host released
    • setFindHostForVmFunction

      void setFindHostForVmFunction(BiFunction<VmAllocationPolicy,Vm,Optional<Host>> findHostForVmFunction)
      Sets a BiFunction that selects a Host for a given Vm. This Function receives the current VmAllocationPolicy and the Vm requesting to be place. It then returns an Optional<Host> that may contain a suitable Host for that Vm or not.

      If not Function is set, the default VM selection method provided by implementing classes will be used.

      Parameters:
      findHostForVmFunction - the BiFunction to set
    • getHostList

      <T extends Host> List<T> getHostList()
      Gets the list of Hosts available in a Datacenter, that will be used by the Allocation Policy to place VMs.
      Type Parameters:
      T - The generic type
      Returns:
      the host list
    • getOptimizedAllocationMap

      Map<Vm,Host> getOptimizedAllocationMap(List<? extends Vm> vmList)
      Gets a map of optimized allocation for VMs according to current utilization and Hosts under and overloaded conditions. The conditions that will make a new VM placement map to be proposed and returned is defined by each implementing class.
      Parameters:
      vmList - the list of VMs to be reallocated
      Returns:
      the new vm placement map, where each key is a VM and each value is the host where such a Vm has to be placed
    • findHostForVm

      Optional<Host> findHostForVm(Vm vm)
      Finds a suitable host that has enough resources to place a given VM. Internally it may use a default implementation or one set in runtime.
      Parameters:
      vm - the vm to find a host for it
      Returns:
      an Optional containing a suitable Host to place the VM; or an empty Optional if no suitable Host was found
      See Also:
    • isVmMigrationSupported

      boolean isVmMigrationSupported()
      Checks if VM migrations are supported by this VmAllocationPolicy. Realize that even if the policy allows VM migration, such operations can be dynamically enabled/disabled by the Datacenter.
      Returns:
      See Also:
    • isParallelHostSearchEnabled

      default boolean isParallelHostSearchEnabled()
      Checks if Host's parallel search is enabled or not.
      Returns:
      true if a Host for a VM is to find in parallel; false if it's to be found sequentially
      See Also:
    • getHostCountForParallelSearch

      int getHostCountForParallelSearch()
      Gets the minimum number of Hosts to start using parallel search.
      Returns:
    • setHostCountForParallelSearch

      void setHostCountForParallelSearch(int hostCountForParallelSearch)
      Sets the minimum number of Hosts to start using parallel search.
      Parameters:
      hostCountForParallelSearch - the value to set (use Integer.MAX_VALUE to disable parallel search)