Cloudsim 3.0.3中Power系列类的解析——PowerHost, PowerVM, PowerModel

15 篇文章 0 订阅
7 篇文章 1 订阅

Cloudsim 3.0.3中Power系列类的解析——PowerHost, PowerVM, PowerModel

注:本文是同名旧文的mardown重制版

在Cloudsim3.0.3系列博客的上一篇讲到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()),然后累加返回。

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

2、PowerVm

继承:Vm

新成员

  • List 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——线性能耗模型为例:

3.1 PowerModelLinear

成员

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

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

  • staticPower:静态功耗

方法

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

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值