淘先锋技术网

首页 1 2 3 4 5 6 7

    在上一篇博客中<http://blog.csdn.net/wingter92/article/details/75253375>,讲到PowerDatacenter:

    的确,Cloudsim中的power系列类最关键的是PowerDatacenter,因为整个数据中心的能耗统计都由它完成,并且其重载了一些重要事件处理方法,如processCloudletSubmit()和processVmMigrate(),在数据中心状态推进方面调用的主要是自己的方法:updateCloudletProcessing() => updateCloudetProcessingWithoutSchedulingFutureEventsForce()


这篇博客介绍power系列类中的PowerHost、PowerVM,他们不是实体,但提供统计能耗所需的信息。

1、PowerHost

继承:extends HostDynamicWorkload;这一点很重要,因为父类HostDynamicWorkload记录了host的CPU利用率(in MIPS),同时提供了关于CPU利用率、RAM利用率、BW利用率的一系列get()和set()函数。在PowerHost中,这些资源利用率要用来传给PowerModel计算功耗。

新成员:

powermodel(一个PowerModel类对象)

新方法:

getPower():调用(父类的)getUtilizationOfCpu()获得当前时刻利用率,再传给powermodel.getPower(util)获得功耗(Watt)

getMaxPower():调用powermodel.getPower(1),即利用率为1.0。

getEnergyLinearInterpolation(double fromUtilization, double toUtilization, double time):这个很关键,是利用简单插值估算一个时间窗口time内的主机能耗,估算方式是取首尾两点的平均功耗*时间,当然首尾两点的功耗是getPower(util)出来的。 值得一提的是,在PowerDC的update操作中,对最近这个时间窗口内的总能耗统计是通过累加各个host的总能耗,各个host的总能耗就是由该函数计算得到。

setPowerModel()、getPowerModel():设置、获取的PowerModel成员。

重载方法:

无,完全继承了父类HostDynamicWorkload的updateVmsProcessing()方法。


1-a、PowerHostUtiliztionHistory

继承:PowerHost

新成员:无

新增的方法:

protected double[] getUtilizationHistory():获取该host的利用率历史记录。它的计算方法是遍历host上的所有VM,提取它们的利用率历史记录(vm.getUtilizationHistory()),然后累加返回。


Note:如果在调度过程中,不需要主机的历史利用率,则该方法用不到。不过在Power包的带迁移VM调度策略类中,很多方法接收或返回的是PowerHostUtiliztionHistory对象,因此自定义调度策略类时,采用PowerHostUtiliztionHistory对象会有比较好的扩展性(Java多态)。


2、PowerVm

继承:Vm

新成员:

List<Double> utilizationHistory:很关键,其记录了该VM的历史CPU占用(in MIPS),历史记录一般会在VM调度策略中用到。

HISTORY_LENGTH:历史记录中的数据个数

previousTime:上一次本VM的利用率更新的时刻,在updateVmProcessing()中被推进到currentTime,但必须满足currentTime是整数个最小调度间隔——这里有些疑问,因为任务状态更新时刻很可能不是整数,这可能导致utilizationHistory缺少记录。

schedulingInterval:VM内的最小调度间隔,每两个历史记录之间至少间隔一个schedulingInterval

新方法:

都是关于新成员的set(), get()方法

重载方法:

@Override
public double updateVmProcessing(currentTime, mipsShare) :调用了父类VM.updateVmProcessing(  ,  ),然后向utilizationHistory中添加利用率记录(如果(currentTime-0.1) % utilizationHistory == 0,0.1我理解为模拟中实体的启动延迟),然后推进previousTime到currentTime。

 

3、PowerModel

类型:是一个Interface

API:就一个,getPower(double)函数;


这里以它的一个典型实现:PowerModelLinear——线性能耗模型为例

PowerModelLinear

成员:

maxPower:最大功耗,即右端点(u=1)

constant:直线的斜率,分子是功耗,分母是[0,100]

staticPower:静态功耗

方法:

构造方法:PowerModelLinear(double maxPower, double staticPowerPercent):根据staticPowerPercent和maxPower就能得到staticPower,再两点一线得出斜率。

其它都是关于成员的set、get函数。