
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