/* * 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.List; import org.cloudbus.cloudsim.DatacenterCharacteristics; import org.cloudbus.cloudsim.Vm; /** /** * PeProvisioner is an abstract class that represents the provisioning policy used by a host * to allocate its PEs to virtual machines inside it. It gets a physical PE * and manage it in order to provide this PE as virtual PEs for VMs. * In that way, a given PE might be shared among different VMs. * Each host's PE has to have its own instance of a PeProvisioner. * When extending this class, care must be taken to guarantee that the field * availableMips will always contain the amount of free mips available for future allocations. * * @author Anton Beloglazov * @since CloudSim Toolkit 2.0 */ public abstract class PeProvisioner { /** The total mips capacity of the PE that the provisioner can allocate to VMs. */ private double mips; /** The available mips. */ private double availableMips; /** * Creates a new PeProvisioner. * * @param mips The total mips capacity of the PE that the provisioner can allocate to VMs * * @pre mips>=0 * @post $none */ public PeProvisioner(double mips) { setMips(mips); setAvailableMips(mips); } /** * Allocates a new virtual PE with a specific capacity for a given VM. * The virtual PE to be added will use the total or partial mips capacity * of the physical PE. * * @param vm the virtual machine for which the new virtual PE is being allocated * @param mips the mips to be allocated to the virtual PE of the given VM * * @return $true if the virtual PE could be allocated; $false otherwise * * @pre $none * @post $none */ public abstract boolean allocateMipsForVm(Vm vm, double mips); /** * Allocates a new virtual PE with a specific capacity for a given VM. * * @param vmUid the virtual machine for which the new virtual PE is being allocated * @param mips the mips to be allocated to the virtual PE of the given VM * * @return $true if the virtual PE could be allocated; $false otherwise * * @pre $none * @post $none * @see #allocateMipsForVm(org.cloudbus.cloudsim.Vm, double) */ public abstract boolean allocateMipsForVm(String vmUid, double mips); /** * Allocates a new set of virtual PEs with a specific capacity for a given VM. * The virtual PE to be added will use the total or partial mips capacity * of the physical PE. * * @param vm the virtual machine for which the new virtual PE is being allocated * @param mips the list of mips capacity of each virtual PE to be allocated to the VM * * @return $true if the set of virtual PEs could be allocated; $false otherwise * * @pre $none * @post $none * @todo In this case, each PE can have a different capacity, what * in many places this situation is not considered, such as * in the {@link Vm}, {@link Pe} and {@link DatacenterCharacteristics} * classes. */ public abstract boolean allocateMipsForVm(Vm vm, List<Double> mips); /** * Gets the list of allocated virtual PEs' MIPS for a given VM. * * @param vm the virtual machine the get the list of allocated virtual PEs' MIPS * * @return list of allocated virtual PEs' MIPS * * @pre $none * @post $none */ public abstract List<Double> getAllocatedMipsForVm(Vm vm); /** * Gets total allocated MIPS for a given VM for all PEs. * * @param vm the virtual machine the get the total allocated MIPS capacity * * @return total allocated MIPS * * @pre $none * @post $none */ public abstract double getTotalAllocatedMipsForVm(Vm vm); /** * Gets the MIPS capacity of a virtual Pe allocated to a given VM. * * @param vm virtual machine to get a given virtual PE capacity * @param peId the virtual pe id * * @return allocated MIPS for the virtual PE * * @pre $none * @post $none */ public abstract double getAllocatedMipsForVmByVirtualPeId(Vm vm, int peId); /** * Releases all virtual PEs allocated to a given VM. * * @param vm the vm * * @pre $none * @post none */ public abstract void deallocateMipsForVm(Vm vm); /** * Releases all virtual PEs allocated to all VMs. * * @pre $none * @post none */ public void deallocateMipsForAllVms() { setAvailableMips(getMips()); } /** * Gets the MIPS. * * @return the MIPS */ public double getMips() { return mips; } /** * Sets the MIPS. * * @param mips the MIPS to set */ public void setMips(double mips) { this.mips = mips; } /** * Gets the available MIPS in the PE. * * @return available MIPS * * @pre $none * @post $none */ public double getAvailableMips() { return availableMips; } /** * Sets the available MIPS in the PE. * * @param availableMips the availableMips to set */ protected void setAvailableMips(double availableMips) { this.availableMips = availableMips; } /** * Gets the total allocated MIPS. * * @return the total allocated MIPS */ public double getTotalAllocatedMips() { double totalAllocatedMips = getMips() - getAvailableMips(); if (totalAllocatedMips > 0) { return totalAllocatedMips; } return 0; } /** * Gets the utilization of the Pe in percents. * * @return the utilization */ public double getUtilization() { return getTotalAllocatedMips() / getMips(); } }