All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.cloudbus.cloudsim.allocationpolicies.VmAllocationPolicyFirstFit Maven / Gradle / Ivy

package org.cloudbus.cloudsim.allocationpolicies;

import org.cloudbus.cloudsim.hosts.Host;
import org.cloudbus.cloudsim.vms.Vm;

import java.util.List;
import java.util.Optional;

/**
 * A First Fit VM allocation policy
 * which finds the first Host having suitable resources to place a given VM.
 * This is a high time-efficient policy with a best-case complexity O(1)
 * and a worst-case complexity O(N), where N is the number of Hosts.
 * Additionally, such a policy is resource efficient, because it performs
 * server consolidation by trying to place the maximum number of VMs
 * into the same Host in order to increase Host's resource usage.
 *
 * 

* NOTES: *

    *
  • This policy doesn't perform optimization of VM allocation by means of VM migration.
  • *
  • It has a low computational complexity but may return * and inactive Host that will be activated, while there may be active Hosts * suitable for the VM.
  • *
*

* * @author Manoel Campos da Silva Filho * @since CloudSim Plus 1.0.0 * @see VmAllocationPolicyBestFit * @see VmAllocationPolicyWorstFit */ public class VmAllocationPolicyFirstFit extends VmAllocationPolicyAbstract implements VmAllocationPolicy { /** @see #getLastHostIndex() */ private int lastHostIndex; @Override protected Optional defaultFindHostForVm(final Vm vm) { final List hostList = getHostList(); /* The for loop just defines the maximum number of Hosts to try. * When a suitable Host is found, the method returns immediately. */ final int maxTries = hostList.size(); for (int i = 0; i < maxTries; i++) { final Host host = hostList.get(lastHostIndex); if (host.isSuitableForVm(vm)) { return Optional.of(host); } /* If it gets here, the previous Host doesn't have capacity to place the VM. * Then, moves to the next Host.*/ incLastHostIndex(); } return Optional.empty(); } /** * Gets the index of the last host where a VM was placed. */ protected int getLastHostIndex() { return lastHostIndex; } /** * Increment the index to move to the next Host. * If the end of the Host list is reached, starts from the beginning. */ protected void incLastHostIndex() { lastHostIndex = ++lastHostIndex % getHostList().size(); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy