/*
* Title: CloudSim Toolkit
* Description: CloudSim (Cloud Simulation) Toolkit for Modeling and Simulation of Clouds
* Licence: GPL - http://www.gnu.org/copyleft/gpl.html
*
* Copyright (c) 2009-2012, The University of Melbourne, Australia
*/
package org.cloudbus.cloudsim.provisioners;
import java.util.HashMap;
import java.util.Map;
import org.cloudbus.cloudsim.Vm;
/**
* RamProvisionerSimple is an extension of RamProvisioner which uses a best-effort policy to
* allocate memory to a VM.
*
* @author Rodrigo N. Calheiros
* @author Anton Beloglazov
* @since CloudSim Toolkit 1.0
*/
public class RamProvisionerSimple extends RamProvisioner {
/** The RAM table. */
private Map<String, Integer> ramTable;
/**
* Instantiates a new ram provisioner simple.
*
* @param availableRam the available ram
*/
public RamProvisionerSimple(int availableRam) {
super(availableRam);
setRamTable(new HashMap<String, Integer>());
}
/*
* (non-Javadoc)
* @see cloudsim.provisioners.RamProvisioner#allocateRamForVm(cloudsim.Vm, int)
*/
@Override
public boolean allocateRamForVm(Vm vm, int ram) {
int maxRam = vm.getRam();
if (ram >= maxRam) {
ram = maxRam;
}
deallocateRamForVm(vm);
if (getAvailableRam() >= ram) {
setAvailableRam(getAvailableRam() - ram);
getRamTable().put(vm.getUid(), ram);
vm.setCurrentAllocatedRam(getAllocatedRamForVm(vm));
return true;
}
vm.setCurrentAllocatedRam(getAllocatedRamForVm(vm));
return false;
}
/*
* (non-Javadoc)
* @see cloudsim.provisioners.RamProvisioner#getAllocatedRamForVm(cloudsim.Vm)
*/
@Override
public int getAllocatedRamForVm(Vm vm) {
if (getRamTable().containsKey(vm.getUid())) {
return getRamTable().get(vm.getUid());
}
return 0;
}
/*
* (non-Javadoc)
* @see cloudsim.provisioners.RamProvisioner#deallocateRamForVm(cloudsim.Vm)
*/
@Override
public void deallocateRamForVm(Vm vm) {
if (getRamTable().containsKey(vm.getUid())) {
int amountFreed = getRamTable().remove(vm.getUid());
setAvailableRam(getAvailableRam() + amountFreed);
vm.setCurrentAllocatedRam(0);
}
}
/*
* (non-Javadoc)
* @see cloudsim.provisioners.RamProvisioner#deallocateRamForVm(cloudsim.Vm)
*/
@Override
public void deallocateRamForAllVms() {
super.deallocateRamForAllVms();
getRamTable().clear();
}
/*
* (non-Javadoc)
* @see cloudsim.provisioners.RamProvisioner#isSuitableForVm(cloudsim.Vm, int)
*/
@Override
public boolean isSuitableForVm(Vm vm, int ram) {
int allocatedRam = getAllocatedRamForVm(vm);
boolean result = allocateRamForVm(vm, ram);
deallocateRamForVm(vm);
if (allocatedRam > 0) {
allocateRamForVm(vm, allocatedRam);
}
return result;
}
/**
* Gets the ram table.
*
* @return the ram table
*/
protected Map<String, Integer> getRamTable() {
return ramTable;
}
/**
* Sets the ram table.
*
* @param ramTable the ram table
*/
protected void setRamTable(Map<String, Integer> ramTable) {
this.ramTable = ramTable;
}
}