当前位置: 首页 > 科技观察

利用Cloudsim实现基于多维QoS的资源调度算法

时间:2023-03-13 20:45:08 科技观察

Cloudsim是一款开源的云计算仿真软件,它继承了网格计算仿真软件Gridsim的编程模型,支持云计算的研发。它是一个自包含的平台,支持数据中心、服务代理、调度和分配策略,支持大规模云计算基础设施的建模和仿真,可以在Windows和Linux上跨平台运行。本文介绍利用Cloudsim云仿真平台对资源调度算法进行仿真。其中包括Cloudsim环境的配置、资源调度算法的嵌入和仿真结果的分析。一、配置Cloudsim环境1、首先介绍Cloudsim环境的配置1.1.Cloudsim的运行需要Java环境,所以需要下载JDK和CloudsimJDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.htmlCloudsim:http://code.google.com/p/cloudsim/downloads/1.2,JDK安装配置http://jingyan.baidu.com/article/f96699bb8b38e0894e3c1bef.html注意安装路径不要出现汉字,否则安装时会出现未知错误运行程序。1.3.Cloudsim安装与配置将下载的Cloudsim解压,解压路径不能出现汉字。例如:D:\programfiles\。在环境变量ClassPath中添加D:\programfiles\cloudsim-3.0.3\jars\cloudsim-3.0.3.jar;D:\programfiles\cloudsim-3.0.3\jars\cloudsim-examples-3.0.3。jar;D:\programfiles\cloudsim-3.0.3\jars\cloudsim-3.0.3-sources.jar;D:\programfiles\cloudsim-3.0.3\jars\cloudsim-examples-3.0.3-sources。罐;至此Cloudsim1.4配置完成,安装eclipse,将Cloudsim平台导入eclipse解压得到Java工程,即Cloudsim仿真平台。因为cloudsim是开源的,它为我们提供了它所有的源代码。我们可以根据自己的需要修改Cloudsim,重新编译,得到自己的满足自己需求的仿真平台。而且使用eclipse工具可以更方便的进行开发。eclipse的安装过程就不详细说了。本文只简单说明导入Cloudsim的过程。打开eclipse并创建一个新的Java项目。取消使用默认位置选项。添加cloudsim的路径。单击完成。如下图所示:此时cloudsim的所有项目代码都已经导入到新项目中了。Cloudsim附带了一些示例程序。选择任意一个运行,Console窗口会打印程序的运行状态。如果配置没有错误,会出现类似下图的情况。至此,Cloudsim环境搭建完成。接下来就是在Cloudsim平台上实现自己的资源调度算法了。#p#二、实现基于多维QoS的资源调度算法1、Cloudsim架构及核心类CloudSim是一款云计算仿真软件,由澳大利亚墨尔本大学网格实验室和Gridbus项目于2009年推出。它是一个可以在Windows和Linux系统上跨平台运行的函数库。CloudSim的架构主要分为四个层次,如图1所示:图1Cloudsim架构Cloudsim仿真层是虚拟数据中心环境的配置和配置,为云计算仿真提供支持,包括虚拟机、内存、容量和带宽接口。该层用于研究将主机分配给虚拟机的策略,通过扩展核心虚拟机调度功能实现。Cloudsim的最上层是用户代码层,它提供了主机、应用程序、虚拟机、用户数量和应用程序类型、代理调度策略等一些基本实体。通过扩展这些实体,云应用开发者可以在该层开发用户需求分布、应用配置、云可用性场景等应用调度技术,并对Cloudsim支持的云配置进行Robust测试。通过扩展Cloudsim提供的基础功能,研究人员可以基于特定的环境和配置进行测试,完成云计算关键技术的开发和研究。CloudSim继承了GridSim,支持云计算的研发。CloudSim的组件工具都是开源的。其中,CloudSim有两个独特的功能:***,提供虚拟化引擎,使用户能够在数据中心的节点上建立和管理独立和协作的虚拟化服务;第二,将处理核心分配给虚拟化服务,可以灵活切换时间共享和空间共享。CloudSim函数库中有几个主要的核心类,如表1所示:表1Cloudsim主要核心类2.Cloudsim工作模型在云数据中心,特定应用的虚拟机由虚拟机分配给主机机器分配控制器(VmAllocationPolicy)完成,Cloudsim在主机层和虚拟机层都实现了基于时间共享和空间共享的调度策略。通常,来自不同用户的任务是相对独立的。假设有m个用户User={User1,User2,...,Userm},n个任务Task={t1,t2,...,tn},n个虚拟资源VM={VM1,VM2,...VMn},p个数据中心Datacenter={Datacenter1,Datacenter2,...Datacenterp},Cloudsim的工作模型如图2所示:图2Cloudsim的工作模型其中,CIS(CloudInformationService)将用户请求映射到合适的云服务提供商,DatacenterBroker模拟SaaS提供商代理,根据QoS要求协商资源和服务分配策略。VmScheduler是一个抽象类,它实现了主机组件,模拟了虚拟机的分配和调度策略。扩展这个抽象类可以调整处理器共享策略。VmAllocationPolicy表示虚拟机监视器调度策略,用于为主机分配虚拟机。3、实现基于多维QoS的资源调度算法在开始模拟时,首先需要创建一个数据中心,然后在数据中心创建CPU、内存等资源。这时候你只需要向代理中心注册资源信息,用户就可以使用数据中心的模拟资源了。在模拟资源分配测试中,步骤及各步骤代码如下:(1)初始化Cloudsim包,代码如下:Intnum_user=1;//定义用户数Calendarcalendar=Calendar.getInstance();booleantrace_flag=false;CloudSim.init(num_user,calendar,trace_flag);//初始化CloudSim包(2)创建数据中心(Datacenter),代码如下:DataCenterdatacenter()=createDatacenter("Datacenter_0");(3)创建数据中心代理(Broker),代码如下:DatacenterBrokerbroker=createBroker();IntbrokerId=broker.get_id();(4)创建虚拟机,代码如下:vmlist=newVirtualMachineList();//创建虚拟机列表vmvm=newVm(vmid,brokerld,mips,PesNumber,ram,bw,size,vmm,newCloudletSchedulerTimeShared());//创建虚拟机vmlist.add(vm);//添加到虚拟机列表broker.submitVMList(vmlist);//提交虚拟机列表(5)创建云任务,代码如下:cloudletList=newCloudletList();//创建云任务列表Cloudletcloudlet=newCloudlet(id,length,file_size,output_size);cloudlet.setUserlD(brokerld);……cloudletList.add(cloudlet);//添加任务到tasklist...broker.submitCloudletList(cloudletList);//将任务列表提交给broker(6)执行资源调度算法,完成任务到虚拟机的映射。代码如下:bindCloudletsToVms();(7)启动仿真程序,代码如下:CloudSim.startSimulation();(8)打印模拟结果,代码如下:ListnewList=broker.getCloudletReceivedList();CloudSim.stopSimulation();printCloudletList(newList);注:任务到虚拟机的映射由DatacenterBroker类中的bindCloudletsToVms()函数实现该函数,实现根据不同策略进行任务映射。刘鹏写的例子中,提供了两种映射算法,一种是作业顺序分配算法,一种是面向总完成时间最短的贪心算法。我的目标是基于多维QoS的资源调度算法,所以我重载了云任务Cloudlet类,并在该类中添加了QoS相关的属性,如资源需求、QoS需求、作业优先级等。然后,在资源分配函数中,根据这些属性的取值,选择一种分配策略,完成从任务到虚拟机的映射。另外,我个人认为在资源调度层面,没有必要具体说明QoS各个维度的具体来源和具体含义。在映射算法中,只需要将其作为参数进行相应的计算即可。博文来源:http://blog.csdn.net/hanchaoqi/article/details/36043879http://blog.csdn.net/hanchaoqi/article/details/36199299