Interface VmAllocationPolicy

All Known Subinterfaces:
VmAllocationPolicyMigration, VmAllocationPolicyMigrationDynamicUpperThreshold
All Known Implementing Classes:
VmAllocationPolicyAbstract, VmAllocationPolicyBatchPlacementUnderloadedHosts, VmAllocationPolicyBestFit, VmAllocationPolicyFirstFit, VmAllocationPolicyMigrationAbstract, VmAllocationPolicyMigrationBestFitStaticThreshold, VmAllocationPolicyMigrationDynamicUpperThresholdFirstFit, VmAllocationPolicyMigrationFirstFitStaticThreshold, 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()
      Returns the Datacenter associated to the VmAllocationPolicy.
      Returns:
      the Datacenter associated to the VmAllocationPolicy
    • setDatacenter

      VmAllocationPolicy setDatacenter(Datacenter datacenter)
      Sets the Datacenter associated to the VmAllocationPolicy
      Parameters:
      datacenter - the Datacenter to set
      Returns:
      this VmAllocationPolicy
    • 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

      Set<HostSuitability> allocateHostForVm(List<Vm> vmList)
      Tries to allocate a host for a each Vm or VmGroup into a given List. The method should define how it will find a suitable Host for each Vm and then call allocateHostForVm(Vm, Host) to actually create the VM inside the selected Host.
      Parameters:
      vmList - the List of Vms or VmGroups to allocate a host to
      Returns:
      a Set of HostSuitability to indicate if a Vm was placed into the host or not, containing a HostSuitability object for the last Host where each VM was tried to be created; or an empty set if the Datacenter has no hosts.
      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:
    • 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

      VmAllocationPolicy 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 placed. It then returns an Optional<Host> that may contain a suitable Host for that Vm or not.

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

      Parameters:
      findHostForVmFunction - the BiFunction to set
    • getHostList

      <T extends Host> List<T> getHostList()
      Gets the list of Hosts available in the Datacenter linked to this VmAllocationPolicy, which will be used to place VMs.
      Type Parameters:
      T - the host type
      Returns:
      datacenter 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
    • 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:
      true if VM migration is supported; false otherwise.
      See Also:
    • isParallelHostSearchEnabled

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

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

      VmAllocationPolicy 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)
      Returns:
      this VmAllocationPolicy