clousim学习笔记----关于cloudlet从生到死

1 cloudlet 什么意思

首先cloulet  并不继承cloudsim 中的simEntity ,所以他只是作为在不同的实体之间传递任务信息的用途。他作为一个任务的载体,需要记录的信息有:brokerId 


2 cloudlet  的生命周期:

Created 初始化创建 
Ready  已经获取了资源
InExec 在执行中,还没有执行结束
 Queued  没有足够的pe,进入队列等候
FAILED  执行失败,但在工程中,并没有用到貌似
CANCELED 在数据中心进行强制关闭cancel 的时候
 PAUSED  执行迁移
 Resumed 重新启动,从暂停唤醒
 Failed_resource_unavailable  一个在所有条件以外的以外


3 ResCloudlet  

他不是对cloudlet的简单继承,而是对cloudlet的封装,并且加入了到达和结束时间,和当前完成的cloudlet的长度等属性。


4 cloudletScheduler 什么的干活 :

cloudsim自带了这么几个:

CloudletSchedulerDynamicWorkload ,CloudletSchedulerDynamicWorkload ,CloudletSchedulerTimeShared ,NetworkCloudletSpaceSharedScheduler ,CloudletSchedulerDynamicWorkload

用途:

被vm 调用,用来维护这么几rescloudlet个队列:等待,在等待,在暂停,已完成,失败的这么几个队列 .然后在这几个队列中选择合适的任务,分配mips 等资源

5 基本属性

cloudletLength 在虚拟机计算资源上执行的依据,每次判断当前执行的长度和这个长度的大小,进而判断是不是任务完成
vm.getCloudletScheduler().updateVmProcessing(currentTime, mipsShare);
rescloudlet.updateCloudletFinishedSoFar((long) (getCapacity(mipsShare) * timeSpam * rcl.getNumberOfPes() * Consts.MILLION))
cloudletFileSize 在计算带宽花销的时候用来计算,和单位带宽费用相乘,
cloudletOutputSize 在计算贷款花费的时候,会用来进行计算,
和单位带宽费用相乘


5 cloudlet事件: submit 和return 

broker.submit ,将输入的任务,提交到broker ,和vm进行绑定,在改vm当中进行执行,然后broker 在将这些vm映射到相应的云计算中心的主机上,进行放置到物理机上


return:将数据中心已经处理好的cloudlet列表给打broker的receiveList 列表当中,接着做一些数据中心和模拟的停止和清理工作。数据中心在每次执行cloudlet执行的时候,都要判断本数据中心,所有的host上的所有虚拟机当中的所有的cloudlet都执行完成,如果一个cloudlet执行完成就,发给broker 一个已经执行完成的cloudlet,因为提到的datacenter,broekr 都是simEntity , 所以他们之间的消息传递,都是用send()函数,制定收信息的模拟实体,然后cloudsim 会将该消息压入一个消息队列,每个调度周期,都会从future队列当中取消息进行知心,没有更多future消息,那么模拟结束。


  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
下面是一个简单的实现,包括任务和虚拟机的定义,以及使用两种不同的方法进行任务调度的示例代码: ```java import java.util.*; public class Cloudlet { private int id; private long length; private long finishTime; public Cloudlet(int id, long length) { this.id = id; this.length = length; this.finishTime = -1; } public int getId() { return id; } public long getLength() { return length; } public long getFinishTime() { return finishTime; } public void setFinishTime(long finishTime) { this.finishTime = finishTime; } } public class Vm { private int id; private long capacity; private List<Cloudlet> cloudlets; public Vm(int id, long capacity) { this.id = id; this.capacity = capacity; this.cloudlets = new ArrayList<>(); } public int getId() { return id; } public long getCapacity() { return capacity; } public List<Cloudlet> getCloudlets() { return cloudlets; } public void addCloudlet(Cloudlet cloudlet) { cloudlets.add(cloudlet); } } public class CloudletScheduler { public static void bindCloudletsToVmsSimple(List<Cloudlet> cloudlets, List<Vm> vms) { int numVms = vms.size(); int currentVm = 0; for (Cloudlet cloudlet : cloudlets) { Vm vm = vms.get(currentVm); vm.addCloudlet(cloudlet); currentVm = (currentVm + 1) % numVms; } } public static void bindCloudletsToVmsTimeAware(List<Cloudlet> cloudlets, List<Vm> vms) { PriorityQueue<Vm> queue = new PriorityQueue<>((vm1, vm2) -> { long time1 = vm1.getCloudlets().stream().mapToLong(Cloudlet::getLength).sum(); long time2 = vm2.getCloudlets().stream().mapToLong(Cloudlet::getLength).sum(); return Long.compare(time1, time2); }); queue.addAll(vms); for (Cloudlet cloudlet : cloudlets) { Vm vm = queue.poll(); vm.addCloudlet(cloudlet); queue.offer(vm); } } public static void main(String[] args) { List<Cloudlet> cloudlets = new ArrayList<>(); cloudlets.add(new Cloudlet(1, 100)); cloudlets.add(new Cloudlet(2, 200)); cloudlets.add(new Cloudlet(3, 150)); cloudlets.add(new Cloudlet(4, 80)); List<Vm> vms = new ArrayList<>(); vms.add(new Vm(1, 300)); vms.add(new Vm(2, 200)); bindCloudletsToVmsSimple(cloudlets, vms); System.out.println("Simple strategy:"); for (Vm vm : vms) { System.out.println("VM " + vm.getId() + ":"); for (Cloudlet cloudlet : vm.getCloudlets()) { System.out.println("\tCloudlet " + cloudlet.getId() + ": " + cloudlet.getLength()); } } bindCloudletsToVmsTimeAware(cloudlets, vms); System.out.println("Time-aware strategy:"); for (Vm vm : vms) { System.out.println("VM " + vm.getId() + ":"); for (Cloudlet cloudlet : vm.getCloudlets()) { System.out.println("\tCloudlet " + cloudlet.getId() + ": " + cloudlet.getLength()); } } } } ``` 在这个示例代码中,我们首先定义了Cloudlet和Vm两个类,分别表示任务和虚拟机。Cloudlet类包含任务的ID、任务长度和完成时间等属性,Vm类包含虚拟机的ID、容量和已分配的任务列表等属性。 然后,我们定义了CloudletScheduler类,其中包含两个静态方法bindCloudletsToVmsSimple和bindCloudletsToVmsTimeAware,分别对应顺序分配和时间贪心两种策略。这两个方法接受两个参数:任务列表和虚拟机列表。在bindCloudletsToVmsSimple方法中,我们使用一个循环将任务顺序分配给虚拟机,保证每个虚拟机运行相同数量的任务以均衡负载。在bindCloudletsToVmsTimeAware方法中,我们使用一个优先队列来维护虚拟机的任务完成时间,每次将任务分配给完成时间最早的虚拟机,以期望使所有任务的完成时间最短。 最后,在main方法中,我们创建了一个简单的测试用例,包含四个任务和两个虚拟机,并依次使用两种方法进行任务调度,输出每个虚拟机分配的任务列表。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值