Cloudsim 3.0.3中Power系列类的解析——PowerDataCenter和PowerDCBroker

来源:互联网 发布:java 游戏服务器架构 编辑:程序博客网 时间:2024/06/05 20:47

我在上一篇博客<http://blog.csdn.net/wingter92/article/details/75098626>中提到了cloudsim模拟的函数调用逻辑,针对是DC、DCBroker等类,也即所有examples中的通用逻辑。但3.0.3中包含有power扩展包,里面的Power系列Java类(PowerDC, PowerDCBroker, PowerHost等)是之前描述的类的扩展,加入了能耗相关特征和调度方法。

本文在此介绍最核心的Power类——PowerDataCenter,重点讲述对父类的扩展内容:

1、PowerDataCenter

继承:继承DataCenter,沿用的主要函数包括setXXX(),getXXX()函数和大部分processXXX()系列函数(除了processCloudletSubmit()和processVmMigrate(),因为这两个是数据中心VM调度的关键)

增加的成员:

  Double Power——数据中心的总功耗

  Boolean disableMigratations——是否开启VM迁移

  Double cloudletSubmitted —— 最近一个cloudlet的提交时刻,在每次调用processCloudletSubmit()函数的最后被设置为当前clock。

  Int migrationCount——VM迁移计数

增加、重载的重要函数:

1)updateCloudetProcessingWithoutSchedulingFutureEventsForce():这个函数间接更新了每一台host上的VM的执行进度(通过调用父类的updateVmsProcessing()方式来更新,该函数内容见开头提及的博客),同时输出当前clock、各主机当前CPU利用率以及最近一个时间窗口(clock()- lastProcessTime)内的能耗,并将其累加至PowerDC对象中的总能耗(成员命名为Power,有点不合理);其中,lastProcessTime更新在本函数内完成,所以lastProcessTime就是上一次update的时刻。

2)@Override updateCloudletProcessing():更新DC中已经在执行的任务的进度;这个函数与父类的updateCloudletProcessing()实现风格迥然不同(应该是不同的人编写的)。

    它首先进行判断:如果现在是首个任务(cloudletSubmitted==-1)或之前的任务都还没推进(cloudletSubmitted==clock()),那么就不必做update,只需要将future中的VM_DC_EVENT事件推进一个schedulingInterval再放回队列去。

    否则,说明有先前的任务处于执行阶段,进度需要update,同时还可能触发迁移操作。具体来说,先进行进度更新,即调用updateCloudetProcessingWithoutSchedulingFutureEventsForce()函数来完成更新,再调用DC.getVmAllocationPolicy().optimizeAllocation()来取得一个migrationMap,这个结构里面记录了根据VM迁移策略制定的迁移方案(即哪些VM要迁移至哪些host),然后据此完成VM迁移(又涉及到host状态更新,比较繁杂)并产生tags.VM_MIGRATE事件。完成这一系列动作之后,将future中的VM_DC_EVENT事件推进一个schedulingInterval再放回队列去。


3)@Override processCloudletSubmit(SimEvent, boolean):处理当前这个任务的提交事件;通过调用父类(DataCenter类)的processCloudletSubmit(ev, ack),而processCloudletSubmit(ev, ack)又会调用updateCloudletProcessing()(下面会讲),最后设置cloudletSubmitted = clock();


4)@Override processCloudletMirgrate(SimEvent, boolean):处理VM迁移事件,逻辑大概是:先调用updateCloudetProcessingWithoutSchedulingFutureEventsForce()来更新所有Host上所有vm的进度,然后调用父类的processVmMigrate(ev, ack)完成迁移操作。


2、PowerDataCenterBroker: 基本上等同于父类DCBroker,用于配合PowerDC来使用,仅重载了一个方法

继承:DataCenterBroker

新成员:无

重载的方法:

@Override
protected void processVmCreate(SimEvent ev)
:重载了父类DCBroker对VM创建(完成)事件(应该是DC完成创建并发回来的事件)的逻辑,但基本上就是简单判断创建成功与否然后直接调用父类的processVmCreate(ev)



原创粉丝点击