MultiRECloudSim——基于CloudSim的多维度资源调度工具包

前言

CloudSim是一款在学术界常见的用于云计算仿真的工具包。其设计架构和常用的使用方法已经可见于论文GitHub源码中的example案例。本文默认阅读者已经具备了一些相关的背景知识,比如具备一定Java编程基础、已经能自己使用Maven构建项目并解决依赖问题,以及对CloudSim的基本概念有初步了解并有过基本实践。另外,本文基于的CloudSim版本是3.0.3。本文将介绍的核心内容是一款基于CloudSim拓展出来的仿真平台。拓展部分完全由华南理工大学林伟伟教授的相关团队开发。

本文的研究动机

  • CloudSim的原作者在设计之初,对多种资源的考虑其实都只停留在很浅的层面上。在CloudSim中,一共出现了三种资源,分别是CPU、内存和带宽(bandwidth)。之所以说停留在很浅的层面,是因为在任务提交(submit)和后面调度的过程中都没有考虑过内存和带宽的约束。此外,在PowerDatacenter统计能耗的时候,也没有把内存和带宽的资源能耗考虑进去。
图1 CloudSim的任务提交没考虑一些约束
图2 CloudSim统计能耗只考虑CPU
  • 日志输出繁杂的,不方便定位bug。CloudSim专门提供了一个Log类用于全局的日志记录或者输出到控制台。然而,需要输出的地方太多,而对输出到控制台的开关控制的粒度也不够细,只有一个全局的Log.enable()可用。如果只想知道Datacenter类的updateCloudletProcessing,则还需往相应模块的代码专门添加enable和disable代码。此外,日志输出的代码位置也不容易定位。如果能对日志输出代码的行数和类文件名一目了然,对于debug有很大帮助。
图3 CloudSim的日志开关

                                                    

  • CloudSim对于虚拟机资源请求量的统计方式不够通用。如下图所示,CloudSim是直接将虚拟机上所有的Cloudlet的CPU利用率线性相加起来作为虚拟机的总CPU利用率,然后乘以总MIPS作为虚拟机的总MIPS请求量。这显然不合理。
图4 CloudletSchedulerDynamicWorkload统计单个虚拟机上的CPU利用率

 

  • CloudSim为了能够仿真负载变动这一过程,实现了UtilizationModelPlanetLabInMemory。但是这个类的使用局限性很大,完全是为了使用PlanetLab数据而量身定制的。首先UtilizationModelPlanetLabInMemory不能根据使用者想法决定是否模拟负载变动,其次可运行的数据总量被限制在了288个(因为PlanetLab的每个数据文件就是每隔5分钟,记录了一天内负载利用率,一共刚好288行数据)。                                  
图5 UtilizationModelPlanetLabInMemory只限制288个数据点的模拟

 

本文的解决方案与贡献

  • 针对提交任务未考虑资源限制这一点,我们拓展了Broker提交任务部分的代码,并实现了一些任务与虚拟机的绑定策略(CloudletAssignmentPolicy)。同时为了配合多资源维度的调度,还拓展了CloudSim的其他功能。比如对内存、I/O等资源的资源分配和历史利用率统计。
  • 对于日志输出繁杂这一问题,为了方便定位bug,首先需要知道日志输出的类文件名以及行号,为此我们改写了CloudSim的Log类的相关打印函数。
  • CS的资源请求量统计方式其实是CS中众多逻辑不严谨地方的其中一处。除了完善原CS的资源请求量统计方式,还修补了很多地方的代码。比如vCPU超分、VM可以被关闭的状态判定等等。
  • 为了更好地模拟负载变动,弥补原CS的设计缺陷,我们拓展了一个新的资源模型来模拟资源变动。

综上,我们提出了MultiRECloudSim来进一步完善CS。代码可见于,相关论文见于

关于一些符号和术语

本文中的一些术语或符号会交替使用,以下术语或符号在本文中的含义其实是一样的。

表1 符号说明(注:XXX表示资源种类)
云任务 Cloudlet
主机/服务器/物理机 Host
CS CloudSim
虚拟机 VM
MCS MultiRECloudSim
PE 主机的处理单元(核数)
vCPU 虚拟机的核(通常支持超分)
broker/datacenterbroker 数据中心代理
CloudletScheduler 任务调度器
XXXProvisioner 资源供应器
CloudletXXXAllocator 资源分配器

MCS架构介绍

下图所示为MCS的完整类架构,由于篇幅限制,本文只讨论针对研究动机提出的解决方案。

图6 MCS拓展的类与CS的关系

调度实体的拓展:

SimCloudlet:此类拓展了原CS的Cloudlet对多种类型资源的需求,包括CPU,内存,IO和带宽。 CS中,CPU支持静态和动态变化的资源需求(动态依靠UtilizationModelPlanetLabInMemory)。现在,依靠UtilizationModelByFile,内存、IO和带宽也支持动态需求。

SimPowerHost:此类对需要CPU、内存、IO和带宽资源的主机进行建模,并在每个更新时间点将资源分配和附加到VM上。该类也增加了内存、IO和带宽等能耗模型作为新增字段。在SimPowerDatacenter中,这些字段被调用以统计能耗。

SimPowerHostMultiR:此类继承了SimPowerHost,未在上图中列出。该类主要拓展的功能是增加对主机和虚拟机中多种资源利用率变动的记录。

SimPowerHost还会记录不同时间所有资源的利用率。这些记录的不同种类资源的利用率数据,会结合对应的能耗模型被用于计算主机功耗。

SimPowerVm:除了新添加的IO资源外,与PowerVm没有其他区别。

围绕调度实体周边的拓展——资源分配

CloudletCpuA

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值