init
This commit is contained in:
609
src/org/cloudbus/cloudsim/Vm.java
Normal file
609
src/org/cloudbus/cloudsim/Vm.java
Normal file
@@ -0,0 +1,609 @@
|
||||
/*
|
||||
* 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;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Vm represents a VM: it runs inside a Host, sharing hostList with other VMs. It processes
|
||||
* cloudlets. This processing happens according to a policy, defined by the CloudletScheduler. Each
|
||||
* VM has a owner, which can submit cloudlets to the VM to be executed
|
||||
*
|
||||
* @author Rodrigo N. Calheiros
|
||||
* @author Anton Beloglazov
|
||||
* @since CloudSim Toolkit 1.0
|
||||
*/
|
||||
public class Vm {
|
||||
|
||||
/** The id. */
|
||||
private int id;
|
||||
|
||||
/** The user id. */
|
||||
private int userId;
|
||||
|
||||
/** The uid. */
|
||||
private String uid;
|
||||
|
||||
/** The size. */
|
||||
private long size;
|
||||
|
||||
/** The MIPS. */
|
||||
private double mips;
|
||||
|
||||
/** The number of PEs. */
|
||||
private int numberOfPes;
|
||||
|
||||
/** The ram. */
|
||||
private int ram;
|
||||
|
||||
/** The bw. */
|
||||
private long bw;
|
||||
|
||||
/** The vmm. */
|
||||
private String vmm;
|
||||
|
||||
/** The Cloudlet scheduler. */
|
||||
private CloudletScheduler cloudletScheduler;
|
||||
|
||||
/** The host. */
|
||||
private Host host;
|
||||
|
||||
/** In migration flag. */
|
||||
private boolean inMigration;
|
||||
|
||||
/** The current allocated size. */
|
||||
private long currentAllocatedSize;
|
||||
|
||||
/** The current allocated ram. */
|
||||
private int currentAllocatedRam;
|
||||
|
||||
/** The current allocated bw. */
|
||||
private long currentAllocatedBw;
|
||||
|
||||
/** The current allocated mips. */
|
||||
private List<Double> currentAllocatedMips;
|
||||
|
||||
/** The VM is being instantiated. */
|
||||
private boolean beingInstantiated;
|
||||
|
||||
/** The mips allocation history. */
|
||||
private final List<VmStateHistoryEntry> stateHistory = new LinkedList<VmStateHistoryEntry>();
|
||||
|
||||
/**
|
||||
* Creates a new VMCharacteristics object.
|
||||
*
|
||||
* @param id unique ID of the VM
|
||||
* @param userId ID of the VM's owner
|
||||
* @param mips the mips
|
||||
* @param numberOfPes amount of CPUs
|
||||
* @param ram amount of ram
|
||||
* @param bw amount of bandwidth
|
||||
* @param size amount of storage
|
||||
* @param vmm virtual machine monitor
|
||||
* @param cloudletScheduler cloudletScheduler policy for cloudlets
|
||||
* @pre id >= 0
|
||||
* @pre userId >= 0
|
||||
* @pre size > 0
|
||||
* @pre ram > 0
|
||||
* @pre bw > 0
|
||||
* @pre cpus > 0
|
||||
* @pre priority >= 0
|
||||
* @pre cloudletScheduler != null
|
||||
* @post $none
|
||||
*/
|
||||
public Vm(
|
||||
int id,
|
||||
int userId,
|
||||
double mips,
|
||||
int numberOfPes,
|
||||
int ram,
|
||||
long bw,
|
||||
long size,
|
||||
String vmm,
|
||||
CloudletScheduler cloudletScheduler) {
|
||||
setId(id);
|
||||
setUserId(userId);
|
||||
setUid(getUid(userId, id));
|
||||
setMips(mips);
|
||||
setNumberOfPes(numberOfPes);
|
||||
setRam(ram);
|
||||
setBw(bw);
|
||||
setSize(size);
|
||||
setVmm(vmm);
|
||||
setCloudletScheduler(cloudletScheduler);
|
||||
|
||||
setInMigration(false);
|
||||
setBeingInstantiated(true);
|
||||
|
||||
setCurrentAllocatedBw(0);
|
||||
setCurrentAllocatedMips(null);
|
||||
setCurrentAllocatedRam(0);
|
||||
setCurrentAllocatedSize(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the processing of cloudlets running on this VM.
|
||||
*
|
||||
* @param currentTime current simulation time
|
||||
* @param mipsShare array with MIPS share of each Pe available to the scheduler
|
||||
* @return time predicted completion time of the earliest finishing cloudlet, or 0 if there is no
|
||||
* next events
|
||||
* @pre currentTime >= 0
|
||||
* @post $none
|
||||
*/
|
||||
public double updateVmProcessing(double currentTime, List<Double> mipsShare) {
|
||||
if (mipsShare != null) {
|
||||
return getCloudletScheduler().updateVmProcessing(currentTime, mipsShare);
|
||||
}
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the current requested mips.
|
||||
*
|
||||
* @return the current requested mips
|
||||
*/
|
||||
public List<Double> getCurrentRequestedMips() {
|
||||
List<Double> currentRequestedMips = getCloudletScheduler().getCurrentRequestedMips();
|
||||
if (isBeingInstantiated()) {
|
||||
currentRequestedMips = new ArrayList<Double>();
|
||||
for (int i = 0; i < getNumberOfPes(); i++) {
|
||||
currentRequestedMips.add(getMips());
|
||||
}
|
||||
}
|
||||
return currentRequestedMips;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the current requested total mips.
|
||||
*
|
||||
* @return the current requested total mips
|
||||
*/
|
||||
public double getCurrentRequestedTotalMips() {
|
||||
double totalRequestedMips = 0;
|
||||
for (double mips : getCurrentRequestedMips()) {
|
||||
totalRequestedMips += mips;
|
||||
}
|
||||
return totalRequestedMips;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the current requested max mips among all virtual PEs.
|
||||
*
|
||||
* @return the current requested max mips
|
||||
*/
|
||||
public double getCurrentRequestedMaxMips() {
|
||||
double maxMips = 0;
|
||||
for (double mips : getCurrentRequestedMips()) {
|
||||
if (mips > maxMips) {
|
||||
maxMips = mips;
|
||||
}
|
||||
}
|
||||
return maxMips;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the current requested bw.
|
||||
*
|
||||
* @return the current requested bw
|
||||
*/
|
||||
public long getCurrentRequestedBw() {
|
||||
if (isBeingInstantiated()) {
|
||||
return getBw();
|
||||
}
|
||||
return (long) (getCloudletScheduler().getCurrentRequestedUtilizationOfBw() * getBw());
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the current requested ram.
|
||||
*
|
||||
* @return the current requested ram
|
||||
*/
|
||||
public int getCurrentRequestedRam() {
|
||||
if (isBeingInstantiated()) {
|
||||
return getRam();
|
||||
}
|
||||
return (int) (getCloudletScheduler().getCurrentRequestedUtilizationOfRam() * getRam());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get utilization created by all clouddlets running on this VM.
|
||||
*
|
||||
* @param time the time
|
||||
* @return total utilization
|
||||
*/
|
||||
public double getTotalUtilizationOfCpu(double time) {
|
||||
return getCloudletScheduler().getTotalUtilizationOfCpu(time);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get utilization created by all cloudlets running on this VM in MIPS.
|
||||
*
|
||||
* @param time the time
|
||||
* @return total utilization
|
||||
*/
|
||||
public double getTotalUtilizationOfCpuMips(double time) {
|
||||
return getTotalUtilizationOfCpu(time) * getMips();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the uid.
|
||||
*
|
||||
* @param uid the new uid
|
||||
*/
|
||||
public void setUid(String uid) {
|
||||
this.uid = uid;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get unique string identificator of the VM.
|
||||
*
|
||||
* @return string uid
|
||||
*/
|
||||
public String getUid() {
|
||||
return uid;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate unique string identificator of the VM.
|
||||
*
|
||||
* @param userId the user id
|
||||
* @param vmId the vm id
|
||||
* @return string uid
|
||||
*/
|
||||
public static String getUid(int userId, int vmId) {
|
||||
return userId + "-" + vmId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the id.
|
||||
*
|
||||
* @return the id
|
||||
*/
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the id.
|
||||
*
|
||||
* @param id the new id
|
||||
*/
|
||||
protected void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the user id.
|
||||
*
|
||||
* @param userId the new user id
|
||||
*/
|
||||
protected void setUserId(int userId) {
|
||||
this.userId = userId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the ID of the owner of the VM.
|
||||
*
|
||||
* @return VM's owner ID
|
||||
* @pre $none
|
||||
* @post $none
|
||||
*/
|
||||
public int getUserId() {
|
||||
return userId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the mips.
|
||||
*
|
||||
* @return the mips
|
||||
*/
|
||||
public double getMips() {
|
||||
return mips;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the mips.
|
||||
*
|
||||
* @param mips the new mips
|
||||
*/
|
||||
protected void setMips(double mips) {
|
||||
this.mips = mips;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the number of pes.
|
||||
*
|
||||
* @return the number of pes
|
||||
*/
|
||||
public int getNumberOfPes() {
|
||||
return numberOfPes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the number of pes.
|
||||
*
|
||||
* @param numberOfPes the new number of pes
|
||||
*/
|
||||
protected void setNumberOfPes(int numberOfPes) {
|
||||
this.numberOfPes = numberOfPes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the amount of ram.
|
||||
*
|
||||
* @return amount of ram
|
||||
* @pre $none
|
||||
* @post $none
|
||||
*/
|
||||
public int getRam() {
|
||||
return ram;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the amount of ram.
|
||||
*
|
||||
* @param ram new amount of ram
|
||||
* @pre ram > 0
|
||||
* @post $none
|
||||
*/
|
||||
public void setRam(int ram) {
|
||||
this.ram = ram;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the amount of bandwidth.
|
||||
*
|
||||
* @return amount of bandwidth
|
||||
* @pre $none
|
||||
* @post $none
|
||||
*/
|
||||
public long getBw() {
|
||||
return bw;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the amount of bandwidth.
|
||||
*
|
||||
* @param bw new amount of bandwidth
|
||||
* @pre bw > 0
|
||||
* @post $none
|
||||
*/
|
||||
public void setBw(long bw) {
|
||||
this.bw = bw;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the amount of storage.
|
||||
*
|
||||
* @return amount of storage
|
||||
* @pre $none
|
||||
* @post $none
|
||||
*/
|
||||
public long getSize() {
|
||||
return size;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the amount of storage.
|
||||
*
|
||||
* @param size new amount of storage
|
||||
* @pre size > 0
|
||||
* @post $none
|
||||
*/
|
||||
public void setSize(long size) {
|
||||
this.size = size;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the VMM.
|
||||
*
|
||||
* @return VMM
|
||||
* @pre $none
|
||||
* @post $none
|
||||
*/
|
||||
public String getVmm() {
|
||||
return vmm;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the VMM.
|
||||
*
|
||||
* @param vmm the new VMM
|
||||
*/
|
||||
protected void setVmm(String vmm) {
|
||||
this.vmm = vmm;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the host that runs this VM.
|
||||
*
|
||||
* @param host Host running the VM
|
||||
* @pre host != $null
|
||||
* @post $none
|
||||
*/
|
||||
public void setHost(Host host) {
|
||||
this.host = host;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the host.
|
||||
*
|
||||
* @return the host
|
||||
*/
|
||||
public Host getHost() {
|
||||
return host;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the vm scheduler.
|
||||
*
|
||||
* @return the vm scheduler
|
||||
*/
|
||||
public CloudletScheduler getCloudletScheduler() {
|
||||
return cloudletScheduler;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the vm scheduler.
|
||||
*
|
||||
* @param cloudletScheduler the new vm scheduler
|
||||
*/
|
||||
protected void setCloudletScheduler(CloudletScheduler cloudletScheduler) {
|
||||
this.cloudletScheduler = cloudletScheduler;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if is in migration.
|
||||
*
|
||||
* @return true, if is in migration
|
||||
*/
|
||||
public boolean isInMigration() {
|
||||
return inMigration;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the in migration.
|
||||
*
|
||||
* @param inMigration the new in migration
|
||||
*/
|
||||
public void setInMigration(boolean inMigration) {
|
||||
this.inMigration = inMigration;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the current allocated size.
|
||||
*
|
||||
* @return the current allocated size
|
||||
*/
|
||||
public long getCurrentAllocatedSize() {
|
||||
return currentAllocatedSize;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the current allocated size.
|
||||
*
|
||||
* @param currentAllocatedSize the new current allocated size
|
||||
*/
|
||||
protected void setCurrentAllocatedSize(long currentAllocatedSize) {
|
||||
this.currentAllocatedSize = currentAllocatedSize;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the current allocated ram.
|
||||
*
|
||||
* @return the current allocated ram
|
||||
*/
|
||||
public int getCurrentAllocatedRam() {
|
||||
return currentAllocatedRam;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the current allocated ram.
|
||||
*
|
||||
* @param currentAllocatedRam the new current allocated ram
|
||||
*/
|
||||
public void setCurrentAllocatedRam(int currentAllocatedRam) {
|
||||
this.currentAllocatedRam = currentAllocatedRam;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the current allocated bw.
|
||||
*
|
||||
* @return the current allocated bw
|
||||
*/
|
||||
public long getCurrentAllocatedBw() {
|
||||
return currentAllocatedBw;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the current allocated bw.
|
||||
*
|
||||
* @param currentAllocatedBw the new current allocated bw
|
||||
*/
|
||||
public void setCurrentAllocatedBw(long currentAllocatedBw) {
|
||||
this.currentAllocatedBw = currentAllocatedBw;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the current allocated mips.
|
||||
*
|
||||
* @return the current allocated mips
|
||||
* @TODO replace returning the field by a call to getCloudletScheduler().getCurrentMipsShare()
|
||||
*/
|
||||
public List<Double> getCurrentAllocatedMips() {
|
||||
return currentAllocatedMips;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the current allocated mips.
|
||||
*
|
||||
* @param currentAllocatedMips the new current allocated mips
|
||||
*/
|
||||
public void setCurrentAllocatedMips(List<Double> currentAllocatedMips) {
|
||||
this.currentAllocatedMips = currentAllocatedMips;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if is being instantiated.
|
||||
*
|
||||
* @return true, if is being instantiated
|
||||
*/
|
||||
public boolean isBeingInstantiated() {
|
||||
return beingInstantiated;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the being instantiated.
|
||||
*
|
||||
* @param beingInstantiated the new being instantiated
|
||||
*/
|
||||
public void setBeingInstantiated(boolean beingInstantiated) {
|
||||
this.beingInstantiated = beingInstantiated;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the state history.
|
||||
*
|
||||
* @return the state history
|
||||
*/
|
||||
public List<VmStateHistoryEntry> getStateHistory() {
|
||||
return stateHistory;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the state history entry.
|
||||
*
|
||||
* @param time the time
|
||||
* @param allocatedMips the allocated mips
|
||||
* @param requestedMips the requested mips
|
||||
* @param isInMigration the is in migration
|
||||
*/
|
||||
public void addStateHistoryEntry(
|
||||
double time,
|
||||
double allocatedMips,
|
||||
double requestedMips,
|
||||
boolean isInMigration) {
|
||||
VmStateHistoryEntry newState = new VmStateHistoryEntry(
|
||||
time,
|
||||
allocatedMips,
|
||||
requestedMips,
|
||||
isInMigration);
|
||||
if (!getStateHistory().isEmpty()) {
|
||||
VmStateHistoryEntry previousState = getStateHistory().get(getStateHistory().size() - 1);
|
||||
if (previousState.getTime() == time) {
|
||||
getStateHistory().set(getStateHistory().size() - 1, newState);
|
||||
return;
|
||||
}
|
||||
}
|
||||
getStateHistory().add(newState);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user