你好,游客 登录 注册 发布搜索
背景:
阅读新闻

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

[日期:2015-09-01] 来源:51CTO  作者: [字体: ]

  Cloudsim是一款开源的云计算仿真软件,它继承了网格计算仿真软件Gridsim的编程模型,支持云计算的研究和开发。它是一个自足的支持数据中心、服务代理人、调度和分配策略的平台,支持大型云计算的基础设施的建模与仿真,并且可以在Windows和Linux上跨平台运行。

  本文介绍的是利用Cloudsim云仿真平台对资源调度算法进行仿真。其中包括Cloudsim环境的配置,资源调度算法的嵌入和仿真结果的分析。

  一、配置Cloudsim环境

  1、首先介绍Cloudsim环境的配置

  1.1、Cloudsim的运行需要Java环境,所以需要下载JDK和Cloudsim

  JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

  Cloudsim:http://code.google.com/p/cloudsim/downloads/

  1.2、JDK的安装和配置

  http://jingyan.baidu.com/article/f96699bb8b38e0894e3c1bef.html

  注意安装路径不要出现汉字,否则运行程序时可能会出现未知错误。

  1.3、Cloudsim的安装和配置

  将下载的Cloudsim解压缩,解压路径中也不要出现汉字。比如:D:\program files\。在环境变量ClassPath中加入D:\program files\cloudsim-3.0.3\jars\cloudsim-3.0.3.jar;

  D:\program files\cloudsim-3.0.3\jars\cloudsim-examples-3.0.3.jar;

  D:\program files\cloudsim-3.0.3\jars\cloudsim-3.0.3-sources.jar;

  D:\program files\cloudsim-3.0.3\jars\cloudsim-examples-3.0.3-sources.jar;

  至此已经完成Cloudsim的配置

  1.4、安装eclipse,并将Cloudsim平台导入eclipse

  解压缩得到的是一个Java工程,即Cloudsim仿真平台。因为cloudsim是开源的,所以给我们提供了它的所有源码。我们可以根据自己的需要,修改Cloudsim,重新编译,获得符合自己需求自己的仿真平台。而使用eclipse工具能更便利的开发。eclipse的安装过程不再赘述。本文只简单说明导入Cloudsim过程。

  打开eclipse,新建Java Project。取消Use default location选项。将cloudsim的路径加入。单击Finish即可。如下图:

  

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

 

  此时cloudsim的正个项目代码都已经导入到新建工程中,Cloudsim自带了一些示例程序,选择任意一个运行,将会在Console窗口打印程序运行状态。若果配置没有出错,会出现类似下图情况。

  

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

 

  此时Cloudsim的环境搭建已经完成。下一步就是在Cloudsim平台上实现自己的资源调度算法了。

  二、实现基于多维QoS的资源调度算法

  1.Cloudsim体系结构及核心类

  CloudSim是一款云计算仿真软件,其由澳大利亚墨尔本大学网格实验室和Gridbus项目于2009年推出,它是一个函数库,可在Windows和Linux系统上跨平台运行,CloudSim的体系结构主要分为四个层次,如图1所示:

  

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

 

  图1 Cloudsim 体系结构

  Cloudsim仿真层为云计算的虚拟数据中心环境的配置和仿真提供支持,包括虚拟机、内存、容量及带宽的接口,该层用于主机分配到虚拟机的策略研究,并通过扩展核心的虚拟机调度函数实现。

  Cloudsim最上层是用户代码层,该层提供一些基本的实体,如主机、应用、虚拟机,用户数和应用类型,以及代理调度策略等。通过扩展这些实体,云应用开发人员可以在该层开发各种用户需求分布、应用配置、云可用性场景等应用调度技术,并执行Cloudsim支持的云配置的Robust测试。

  通过扩展Cloudsim提供的基本功能,研究者能基于特定环境和配置进行测试,完成云计算关键技术的开发研究。

  CloudSim继承了GridSim并支持云计算的研究和开发,CloudSim的组件工具均为开源的。其中CloudSim具有两个独特功能:

  第一,提供虚拟化的引擎,使用户可在数据中心的节点上建立和管理独立的、协同的虚拟化服务;

  第二,在对虚拟化服务分配处理核心时,可在时间共享和空间共享之间灵活切换。

  在CloudSim函数库中有几个主要核心类,如表1所示:

  

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

 

  表1 Cloudsim主要核心类

  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所示:

  

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

 

  图2 Cloudsim的工作模型

  其中,CIS(Cloud Information Service)将用户请求映射到合适的云服务提供商,DatacenterBroker模拟SaaS提供商代理,根据QoS的需求协商资源和服务的分配策略。VmScheduler是实现主机组件的抽象类,模拟虚拟机的分配调度策略,扩展此抽象类能调整处理器的共享策略。 VmAllocationPolicy代表虚拟机监视器调度策略,该策略用于将虚拟机分配给主机。

  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 newList = broker.getCloudletReceivedList(); CloudSim.stopSimulation(); printCloudletList(newList);

  注:任务到虚拟机的映射是由DatacenterBroker类中的bindCloudletsToVms()函数实现。该函数根据不同的策略来实现任务的映射。在《云计算》刘鹏著的示例中,提供了两种映射算法,一种是作业顺序分配的算法、另一种是以总完成时间最短为导向的贪心算法。本人的目标是基于多维QoS的资源调度算法,所以重载了云任务Cloudlet类,在类中增加了与QoS相关的属性,比如资源需求、QoS 需求、作业优先级等。然后在资源分配函数中根据这些属性的值,选定分配策略,来完成任务到虚拟机的映射。另外个人认为,在资源调度层面,并不需要指定每维 QoS的具体来源、具体意义,映射算法中只需要将其作为一个参数做相应的运算即可。

收藏 推荐 打印 | 录入:574107552 | 阅读:
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款