云计算仿真工具中文注释DatacenterCharacteristics.java

 
/*
 * 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-2010, The University of Melbourne, Australia
 */

package org.cloudbus.cloudsim;

import java.util.List;

import org.cloudbus.cloudsim.core.CloudSim;
import org.cloudbus.cloudsim.lists.HostList;
import org.cloudbus.cloudsim.lists.PeList;

/**
 * 表示datacenter的一些静态的属性
 * 方法:
 * 查找满足条件的主机
 * 获得一些价格参数
 * 获得一些pe的状态,数量和host的状态,数量信息
 * 
 * DatacenterCharacteristics represents static properties of a
 * resource such as resource architecture, Operating System (OS), management
 * policy (time- or space-shared), cost and time zone at which the resource
 * is located along resource configuration.
 *
 * @author      Manzur Murshed
 * @author  Rajkumar Buyya
 * @author  Rodrigo N. Calheiros
 * @author  Anton Beloglazov
 * @since   CloudSim Toolkit 1.0
 */
public class DatacenterCharacteristics {

    /** The resource id -- setup when Resource is created. */
    private int id;

    /** The architecture. */
    private String architecture;

    /** The os. */
    private String os;

    /** The host list. */
    private List<? extends Host> hostList;

    /** The time zone -- difference from GMT. */
    private double timeZone;

    /** Price/CPU-unit if unit = sec., then G$/CPU-sec. */
    private double costPerSecond;

    /** Resource Types -- allocation policy. */
    private int allocationPolicy;

    /** Time-shared system using Round-Robin(循环赛) algorithm. */
    public static final int TIME_SHARED = 0;

    /** Spaced-shared system using First Come First Serve (FCFS) algorithm. */
    public static final int SPACE_SHARED = 1;

    /** Assuming all PEs in all Machines have the same rating. */
    public static final int OTHER_POLICY_SAME_RATING = 2;

    /** Assuming all PEs in a Machine have the same rating. However, each Machine has different rating to each other. */
    public static final int OTHER_POLICY_DIFFERENT_RATING = 3;

    /**
     * 接受提前预定机制
     *  A resource that supports Advanced Reservation mechanisms. 
    */
    public static final int ADVANCE_RESERVATION = 4;

    /** The vmm. */
    private String vmm;

    /** The cost per mem. */
    private double costPerMem;

    /** The cost per storage. */
    private double costPerStorage;

    /** The cost per bw. */
    private double costPerBw;

 /**
  * Allocates a new DatacenterCharacteristics object.
  * If the time zone is invalid, then by default, it will be GMT+0.
  *
  * @param architecture  the architecture of a resource
  * @param os            the operating system used
  * @param vmm   the virtual machine monitor used
  * @param hostList   list of machines in a resource
  * @param timeZone   local time zone of a user that owns this reservation.
  * Time zone should be of range [GMT-12 ... GMT+13]
  * @param costPerSec    the cost per sec to use this resource
  * @param costPerMem the cost to use memory in this resource
  * @param costPerStorage the cost to use storage in this resource
  * @param costPerBw the cost per bw
  *
  * @pre architecture != null
  * @pre OS != null
  * @pre VMM != null
  * @pre machineList != null
  * @pre timeZone >= -12 && timeZone <= 13
  * @pre costPerSec >= 0.0
  * @pre costPerMem >= 0
  * @pre costPerStorage >= 0
  * @post $none
  */
 public DatacenterCharacteristics(
   String architecture,
   String os,
   String vmm,
   List<? extends Host> hostList,
   double timeZone,
   double costPerSec,
   double costPerMem,
   double costPerStorage,
   double costPerBw) {
        setId(-1);
        setArchitecture(architecture);
        setOs(os);
        setHostList(hostList);
        setAllocationPolicy(allocationPolicy);
        setCostPerSecond(costPerSec);

        setTimeZone(0.0);

  setVmm(vmm);
  setCostPerMem(costPerMem);
  setCostPerStorage(costPerStorage);
  setCostPerBw(costPerBw);
 }


    /**
     * Gets the name of a resource.
     *
     * @return the resource name
     *
     * @pre $none
     * @post $result != null
     */
    public String getResourceName() {
        return CloudSim.getEntityName(getId());
    }

    /**
     * Gets a Machine with at least one empty Pe.
     * 获得一个有空闲pe的机器
     * @return a Machine object or  if not found
     * @pre $none
     * @post $none
     */
    public Host getHostWithFreePe() {
        return HostList.getHostWithFreePe(getHostList());
    }

    /**
     * 有给定数量pe的机器
     * Gets a Machine with at least a given number of free Pe.
     *
     * @param peNumber the pe number
     * @return a Machine object or  if not found
     * @pre $none
     * @post $none
     */
    public Host getHostWithFreePe(int peNumber) {
        return HostList.getHostWithFreePe(getHostList(), peNumber);
    }

    /**
     * 获得pe的计算能力
     * Gets Millions Instructions Per Second (MIPS) Rating of a Processing
     * Element (Pe). It is assumed all PEs' rating is same in a given machine.
     *
     * @return the MIPS Rating or  if no PEs are exists.
     * @pre $none
     * @post $result >= -1
     */
    @SuppressWarnings("unchecked")
 public int getMipsOfOnePe() {
        if (getHostList().size() == 0) {
            return -1;
        }

        return PeList.getMips((List<Pe>) getHostList().get(0).getPeList(), 0);
    }

    /**
     * 指定机器指定pe的mips
     * Gets Millions Instructions Per Second (MIPS) Rating of a Processing
     * Element (Pe).
     * It is essential to use this method when a resource is made up
     * of heterogenous PEs/machines.
     *
     * @param id        the machine ID
     * @param peId      the Pe ID
     * @return the MIPS Rating or  if no PEs are exists.
     * @pre id >= 0
     * @pre peID >= 0
     * @post $result >= -1
     */
    @SuppressWarnings("unchecked")
 public int getMipsOfOnePe(int id, int peId) {
        if (getHostList().size() == 0) {
            return -1;
        }

        return PeList.getMips((List<Pe>) HostList.getById(getHostList(), id).getPeList(), peId);
    }

    /**
     * 得到整个mips
     * Gets the total MIPS rating, which is the sum of MIPS rating of all
     * machines in a resource.
     * <p>
     * Total MIPS rating for:
     * <ul>
     * <li>TimeShared = 1 Rating of a Pe * Total number of PEs
     * <li>Other policy same rating = same as TimeShared
     * <li>SpaceShared = Sum of all PEs in all Machines
     * <li>Other policy different rating = same as SpaceShared
     * <li>Advance Reservation = 0 or unknown.
     * You need to calculate this manually.
     * </ul>
     *
     * @return the sum of MIPS ratings
     *
     * @pre $none
     * @post $result >= 0
     */
    public int getMips() {
        int mips = 0;
        switch (getAllocationPolicy()) {
            // Assuming all PEs in all Machine have same rating.
            case DatacenterCharacteristics.TIME_SHARED:
            case DatacenterCharacteristics.OTHER_POLICY_SAME_RATING:
                mips = getMipsOfOnePe() * HostList.getPesNumber(getHostList());
                break;

            // Assuming all PEs in a given Machine have the same rating.
            // But different machines in a Cluster can have different rating
            case DatacenterCharacteristics.SPACE_SHARED:
            case DatacenterCharacteristics.OTHER_POLICY_DIFFERENT_RATING:
             for (Host host : getHostList()) {
              mips += host.getTotalMips();
             }
                break;

            default:
                break;
        }

        return mips;
    }

    /**
     * 
     * Gets the CPU time given the specified parameters (only for TIME_SHARED).
     * <tt>NOTE:</tt> The CPU time for SPACE_SHARED and ADVANCE_RESERVATION
     * are not yet implemented.
     *
     * @param cloudletLength     the length of a Cloudlet
     * @param load              the load of a Cloudlet
     *
     * @return the CPU time
     *
     * @pre cloudletLength >= 0.0
     * @pre load >= 0.0
     * @post $result >= 0.0
     */
    public double getCpuTime(double cloudletLength, double load) {
        double cpuTime = 0.0;

        switch (getAllocationPolicy()) {
            case DatacenterCharacteristics.TIME_SHARED:
                cpuTime = cloudletLength / ( getMipsOfOnePe() * (1.0 - load));
                break;

            default:
                break;
        }

        return cpuTime;
    }

    /**
     * Gets the total number of PEs for all Machines.
     *
     * @return number of PEs
     *
     * @pre $none
     * @post $result >= 0
     */
    public int getPesNumber() {
        return HostList.getPesNumber(getHostList());
    }

    /**
     * Gets the total number of <tt>FREE</tt> or non-busy PEs for all Machines.
     *
     * @return number of PEs
     *
     * @pre $none
     * @post $result >= 0
     */
    public int getFreePesNumber() {
        return HostList.getFreePesNumber(getHostList());
    }

    /**
     * Gets the total number of <tt>BUSY</tt> PEs for all Machines.
     *
     * @return number of PEs
     *
     * @pre $none
     * @post $result >= 0
     */
    public int getBusyPesNumber() {
        return HostList.getBusyPesNumber(getHostList());
    }

    /**
     * Sets the particular Pe status on a Machine.
     *
     * @param status   Pe status, either <tt>Pe.FREE</tt> or <tt>Pe.BUSY</tt>
     * @param hostId    Machine ID
     * @param peId     Pe id
     * @return
     * otherwise (Machine id or Pe id might not be exist)
     * @pre machineID >= 0
     * @pre peID >= 0
     * @post $none
     */
    public boolean setPeStatus(int status, int hostId, int peId) {
        return HostList.setPeStatus(getHostList(), status, hostId, peId);
    }

    /**
     * Gets the cost per Millions Instruction (MI) associated with a resource.
     *
     * @return the cost using a resource
     *
     * @pre $none
     * @post $result >= 0.0
     */
    public double getCostPerMi() {
        return getCostPerSecond() / getMipsOfOnePe();
    }

    /**
     * Gets the total number of machines.
     *
     * @return total number of machines this resource has.
     */
    public int getHostsNumber() {
        return getHostList().size();
    }

    /**
     * Gets the current number of failed machines.
     *
     * @return current number of failed machines this resource has.
     */
    public int getFailedHostsNumber() {
        int failedHostsNumber = 0;
        for (Host host : getHostList()) {
            if (host.isFailed()) {
                failedHostsNumber++;
            }
        }
        return failedHostsNumber;
    }

    /**
     * Checks whether all machines of this resource are working properly or not.
     *
     * @return  if all machines are working,
     *  otherwise
     */
    public boolean isWorking() {
        boolean result = false;
        if (getFailedHostsNumber() == 0) {
            result = true;
        }

        return result;
    }

 /**
  * Get the cost to use memory in this resource.
  *
  * @return the cost to use memory
  */
 public double getCostPerMem() {
  return costPerMem;
 }

 /**
  * Sets cost to use memory.
  *
  * @param costPerMem  cost to use memory
  *
  * @pre costPerMem >= 0
  * @post $none
  */
 public void setCostPerMem(double costPerMem) {
  this.costPerMem = costPerMem;
 }

 /**
  * Get the cost to use storage in this resource.
  *
  * @return the cost to use storage
  */
 public double getCostPerStorage() {
  return costPerStorage;
 }

 /**
  * Sets cost to use storage.
  *
  * @param costPerStorage  cost to use storage
  *
  * @pre costPerStorage >= 0
  * @post $none
  */
 public void setCostPerStorage(double costPerStorage) {
  this.costPerStorage = costPerStorage;
 }

 /**
  * Get the cost to use bandwidth in this resource.
  *
  * @return the cost to use bw
  */
 public double getCostPerBw() {
  return costPerBw;
 }

 /**
  * Sets cost to use bw cost to use bw.
  *
  * @param costPerBw the cost per bw
  *
  * @pre costPerBw >= 0
  * @post $none
  */
 public void setCostPerBw(double costPerBw) {
  this.costPerBw = costPerBw;
 }

 /**
  * Gets the VMM in use in the datacenter.
  *
  * @return the VMM name
  */
 public String getVmm() {
  return vmm;
 }

 /**
  * Gets the id.
  *
  * @return the id
  */
 protected int getId() {
  return id;
 }

 /**
  * Sets the id.
  *
  * @param id the new id
  */
 protected void setId(int id) {
  this.id = id;
 }

 /**
  * Gets the architecture.
  *
  * @return the architecture
  */
 protected String getArchitecture() {
  return architecture;
 }

 /**
  * Sets the architecture.
  *
  * @param architecture the new architecture
  */
 protected void setArchitecture(String architecture) {
  this.architecture = architecture;
 }

 /**
  * Gets the os.
  *
  * @return the os
  */
 protected String getOs() {
  return os;
 }

 /**
  * Sets the os.
  *
  * @param os the new os
  */
 protected void setOs(String os) {
  this.os = os;
 }

 /**
  * Gets the host list.
  *
  * @param <T> the generic type
  * @return the host list
  */
 @SuppressWarnings("unchecked")
 public <T extends Host> List<T> getHostList() {
  return (List<T>) hostList;
 }

 /**
  * Sets the host list.
  *
  * @param <T> the generic type
  * @param hostList the new host list
  */
 protected <T extends Host> void setHostList(List<T> hostList) {
  this.hostList = hostList;
 }

 /**
  * Gets the time zone.
  *
  * @return the time zone
  */
 protected double getTimeZone() {
  return timeZone;
 }

 /**
  * Sets the time zone.
  *
  * @param timeZone the new time zone
  */
 protected void setTimeZone(double timeZone) {
  this.timeZone = timeZone;
 }

 /**
  * Gets the cost per second.
  *
  * @return the cost per second
  */
 protected double getCostPerSecond() {
  return costPerSecond;
 }

 /**
  * Sets the cost per second.
  *
  * @param costPerSecond the new cost per second
  */
 protected void setCostPerSecond(double costPerSecond) {
  this.costPerSecond = costPerSecond;
 }

 /**
  * Gets the allocation policy.
  *
  * @return the allocation policy
  */
 protected int getAllocationPolicy() {
  return allocationPolicy;
 }

 /**
  * Sets the allocation policy.
  *
  * @param allocationPolicy the new allocation policy
  */
 protected void setAllocationPolicy(int allocationPolicy) {
  this.allocationPolicy = allocationPolicy;
 }

 /**
  * Sets the vmm.
  *
  * @param vmm the new vmm
  */
 protected void setVmm(String vmm) {
  this.vmm = vmm;
 }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值