1.Cloudsim体系结构及核心类
CloudSim是一款云计算仿真软件,其由澳大利亚墨尔本大学网格实验室和Gridbus项目于2009年推出,它是一个函数库,可在Windows和Linux系统上跨平台运行,CloudSim的体系结构主要分为四个层次,如图1所示:
3.实现基于多维QoS的资源调度算法
开始仿真模拟时,首先需要创建一个数据中心,然后再数据中心中创建CPU、内存等资源,此时只需要向代理中心注册资源信息,用户就可以使用数据中心的资源进行仿真模拟。
在仿真资源分配试验中,其步骤及其各个步骤中的代码如下:
(1) 初始化Cloudsim包,代码如下:
Int num_user= 1 ; //定义用户数量
Calendar calendar=Calendar.getInstance();
boolean trace_flag=false;
CloudSim.init(num_user, calendar, trace_flag); //初始化CloudSim包
(2)创建数据中心(Datacenter),代码如下所示:
DataCenter datacenter()=createDatacenter("Datacenter_0");
(3) 创建数据中心代理(Broker),代码如下所示:
DatacenterBroker broker=createBroker();
Int brokerId=broker.get_id();
(4) 创建虚拟机,代码如下所示:
vmlist=new VirtualMachineList(); //创建虚拟机列表
Vmvm=new Vm(vmid, brokerld, mips, PesNumber, ram, bw, size,
vmm,new CloudletSchedulerTimeShared()); //创建虚拟机
vmlist.add(vm); //加入虚拟机列表
broker.submitVMList(vmlist);//提交虚拟机列表
(5) 创建云任务,代码如下所示:
cloudletList = new CloudletList();//创建云任务列表
Cloudlet cloudlet=new Cloudlet(id, length, file_size, output_size);
cloudlet.setUserlD(brokerld);
……
cloudletList.add(cloudlet); //将任务加入任务列表
……
broker.submitCloudletList(cloudletList);//向代理提交任务列表
(6) 执行资源调度算法,完成任务到虚拟机的映射,代码如下所示:
broker. bindCloudletsToVms();
(7) 启动仿真程序,代码如下所示:
CloudSim.startSimulation();
(8) 打印仿真结果,代码如下所示:
List<Cloudlet> newList = broker.getCloudletReceivedList();
CloudSim.stopSimulation();
printCloudletList(newList);
注:任务到虚拟机的映射是由DatacenterBroker类中的bindCloudletsToVms()函数实现。该函数根据不同的策略来实现任务的映射。在《云计算》刘鹏著的示例中,提供了两种映射算法,一种是作业顺序分配的算法、另一种是以总完成时间最短为导向的贪心算法。本人的目标是基于多维QoS的资源调度算法,所以重载了云任务Cloudlet类,在类中增加了与QoS相关的属性,比如资源需求、QoS需求、作业优先级等。然后在资源分配函数中根据这些属性的值,选定分配策略,来完成任务到虚拟机的映射。另外个人认为,在资源调度层面,并不需要指定每维QoS的具体来源、具体意义,映射算法中只需要将其作为一个参数做相应的运算即可。
使用Cloudsim实现基于多维QoS的资源调度算法之二:实现基于多维QoS的资源调度算法
原文地址:http://blog.csdn.net/hanchaoqi/article/details/36199299