Cloudsim中VM调度策略类在DataCenter(或PowerDataCenter)创建时需要制定,更是我们在Cloudsim上试验我们的调度算法的核心所在。
CloudSim中给出了VmAllocationPolicy抽象类,还有提供了一个VmAllocationPolicySimple简单调度策略类,其介绍见前一篇blog。
另外,Cloudsim3.0.3中提供了Power系列包(在之前几篇blog中提到的诸如PowerHost, PowerDataCenter等),自然也有对应的Policy类,并且丰富得多。Power系列包里面有三种Policy:
第一种是PowerVmAllocationPolicyAbstract(继承VmAllocationPolicy)及其子类:是没有迁移的调度策略;提供的接口基本与父类VmAllocationPolicy一致,实现并增加了一些方法。
第二种是PowerVmAllocationPolicyMigrationAbstract(本身继承第一种)及其子类:带有VM迁移的调度策略。
第三种是PowerVmSelectionPolicy及其子类:这个selection是指选择“需要迁移”的VM,所以这些类用来在执行VM migration时选择VM。
第一种策略不支持迁移,与与父类VmAllocationPolicy基本上一致,在上一篇blog中介绍了。
本文要介绍带有迁移行为的策略,即第二种;而带迁移的VM调度策略的实现需要vm selection策略的支持(即第三种),所以先介绍第三种。
3、public abstract class PowerVmSelectionPolicy
继承:无
成员:无
重要方法:
public abstract Vm getVmToMigrate(PowerHost host):在host主机上找一个合适的VM准备迁移,是抽象方法,在该抽象类中无实现;
protected List<PowerVm> getMigratableVms(PowerHost host):有实现,用来在host上获取可迁移的Vm(必须是PowerVm),可迁移=不处在迁移状态
现在选择一个有代表性的VM selection策略——PowerVmSelectionPolicyMinimumUtilization
3-a、public class PowerVmSelectionPolicyMinimumUtilization
继承:public abstract class PowerVmSelectionPolicy
增加的成员:无
重要方法:
@Override
public Vm getVmToMigrate(PowerHost host):首先获取host上可迁移的vm列表,在该列表中遍历vm,最终返回CPU利用率最低的那个vm。
选择完该迁移的VM后,就是要选择目标主机并完成迁移操作,这些内容包含在PowerVmAllocationPolicyMigrationAbstract及其子类中
4、public abstract class PowerVmAllocationPolicyMigrationAbstract
继承:PowerVmAllocationPolicyAbstract,也就是说分配策略也有所实现
增加的成员:
private PowerVmSelectionPolicy vmSelectionPolicy:采用的VM selection策略
private final List<Map<String, Object>> savedAllocation