Cloudsim 3.0.3中VM调度策略系列类解析(无迁移的策略)

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

Cloudsim 3.0.3中VM调度策略系列类解析(无迁移的策略)

注:本文为旧文的markdown重制版

Cloudsim中VM调度策略类在DataCenter(或PowerDataCenter)创建时需要制定,更是我们在Cloudsim上试验我们的调度算法的核心所在。

CloudSim中给出了VmAllocationPolicy抽象类,还有提供了一个VmAllocationPolicySimple简单调度策略类,本文会对他们进行介绍。

另外,Cloudsim3.0.3中提供了Power系列包(在之前几篇blog中提到的诸如PowerHost, PowerDataCenter等),自然也有对应的Policy类,并且丰富得多。

Power系列包里面有三种Policy:

第一种是PowerVmAllocationPolicyAbstract(继承VmAllocationPolicy)及其子类:是没有迁移的调度策略;提供的接口基本与父类VmAllocationPolicy一致,实现并增加了一些方法。

第二种是PowerVmAllocationPolicyMigrationAbstract(本身继承第一种)及其子类:带有VM迁移的调度策略

第三种是PowerVmSelectionPolicy及其子类:这个selection是指选择“需要迁移”的VM,所以这些类用来在执行VM migration时选择VM

本文介绍第一种。

BTW,根据对example6的研究,我发现一旦VM在host上创建成功,会立刻占用主机资源(RAM和Pe),比如2G,4Pe的主机,最多可以创建4台512M,1Pe的VM,再创建就会产生VM创建失败事件。这可能是host内某些策略规定的,比较死板,毕竟实际生产环境不是如此,但确实简化了实验逻辑。

1、abstract class VmAllocationPolicy

继承:无

成员
- List< ? extends Host> hostList:主机列表,策略本身当然要知晓各host的状况才能为到来的VM分配主机。

主要方法

  • 构造函数public VmAllocationPolicy(List< ? extends Host> list):就是初始化hostList。

  • public abstract boolean allocateHostForVm(Vm vm):抽象方法,用来给vm分配主机,主机未指定。

  • public abstract boolean allocateHostForVm(Vm vm, Host host):抽象方法,用来给vm分配指定的主机。

  • public abstract List< Map< String, Object>> optimizeAllocation(List< ? extends Vm> vmList):为一堆VM制定分配方案,返回VM->Host映射。

  • public abstract void deallocateHostForVm(Vm vm):从对应主机上释放VM

  • public abstract Host getHost(Vm vm);

现在来看一下VmAllocationPolicy的子类VmAllocationPolicySimple,它实现了相关方法,一种简单的调度策略;

1-a、class VmAllocationPolicySimple

继承:父类VmAllocationPolicy

新增成员

  • private Map< String, Host> vmTable:VM.id -> host的映射,即全局分配结果

  • private Map< String, Integer> usedPes:VM.id -> 它所需PE数的映射

  • private List freePes:一个list,长度和hostList一样,每一个元素对应一个host上的空闲PE数

主要方法

  • @Override
    public boolean allocateHostForVm(Vm vm):实现了父类的对应方法,即实现为VM寻找并分配一台主机的逻辑。首先,用vmTable判断vm是否已经“有主”,有主就不用做了;否则,遍历freePes列表以寻找一个“最空闲”的主机(空闲Pe最多),尝试分配给它。如果VM在目标主机创建失败(可能是内存不足等原因),就重新遍历,且不再查看失败过的主机。所有host都失败,就return false。这个方法基本体现了Simple的思想——找最闲。

  • @Override
    public void deallocateHostForVm(Vm vm):实现父类对应方法,即实现释放某个vm的逻辑。

  • @Override
    public boolean allocateHostForVm(Vm vm, Host host) :将vm分配给制定的主机(没有什么策略可言),如果VM创建失败,return false;

  • @Override
    public List< Map< String, Object>> optimizeAllocation(List< ? extends Vm> vmList) :在该Simple策略中没有给出实现。


现在来看看Power包里的VM调度策略类们,从父抽象类说起

2、public abstract class PowerVmAllocationPolicyAbstract

继承:父类VmAllocationPolicy

新成员

  • private final Map< String, Host> vmTable:同前

重要方法

  • @Override
    public boolean allocateHostForVm(Vm vm, Host host):指定了host,同前

  • @Override
    public boolean allocateHostForVm(Vm vm):未指定host,先调用findHostForVm(vm)来找一个合适的主机,再调用上面那个方法。

  • public PowerHost findHostForVm(Vm vm):这个方法才是Power系列策略调度的实质(再次说明Power包的编写者应该是另一个家伙),虽然这是抽象类,但这里给了一个简单的寻找合适主机的逻辑:遍历hostList,找到满足资源需求的就分配。

现在来看看它的一个简单实现——PowerVmAllocationPolicySimple

2-a、public class PowerVmAllocationPolicySimple

继承:父类PowerVmAllocationPolicyAbstract

新成员:无,看来只需要vmTable足矣。

重要方法

  • @Override
    public List< Map< String, Object>> optimizeAllocation(List< ? extends Vm> vmList):一个空方法,即不做optimization

可以看到,PowerVmAllocationPolicySimple没有重载非常关键的findHostForVm(vm)函数,它沿用了父类(虽然是抽象类)的实现,所以Power包里的Simple含义即FF(First-Fit)调度。

以上都是不支持migration的VM调度策略,另一篇blog会讲述migration所需的selection策略,再讲支持迁移的VM调度策略。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于遗传算法(Genetic Algorithm,GA)改进CloudSim资源调度策略是一种常用的方法,它能够优化资源的分配和任务调度,以提高云计算环境下的性能和效率。下面是一般的步骤: 1. 定义适应度函数:首先,需要定义一个适应度函数来评估每个个体(即资源调度策略)的优劣。适应度函数可以根据任务完成时间、资源利用率等指标来衡量。 2. 初始化种群:使用GA时,需要初始化一个初始种群,其每个个体代表一个资源调度策略。可以随机生成或者采用其他启发式方法生成初始种群。 3. 选择操作:通过选择操作,从当前种群选择一部分较好的个体作为下一代的父代。常用的选择操作包括轮盘赌选择、锦标赛选择等。 4. 交叉操作:通过交叉操作,将选的父代个体进行交叉,产生新的后代个体。交叉操作可以使用单点交叉、多点交叉等方式。 5. 变异操作:为了保持种群的多样性,在交叉操作后,需要对新生成的后代个体进行变异操作。变异操作可以随机改变个体的某些特征或参数。 6. 更新种群:根据选择、交叉和变异操作生成的后代个体,更新当前种群。 7. 重复步骤3至6,直到满足终止条件。终止条件可以是达到最大迭代次数或者达到一定的收敛程度。 8. 选择最优解:在GA的最后一代种群,根据适应度函数选择最优的个体作为最终的资源调度策略。 需要注意的是,具体的GA实现可以根据你的需求和实际情况进行调整。你可以根据CloudSim的框架和API,将GA的操作嵌入到资源调度策略,并根据实验结果对其进行优化和调整。此外,还可以考虑使用GA的变种或结合其他优化算法来进一步改进资源调度策略

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值