阅读论文看懂 CloudSim 框架
CloudSim官方网址:http://www.cloudbus.org/cloudsim/
原论文链接:CloudSim: a toolkit for modeling and simulation of cloud computing environments and evaluation of resource provisioning algorithms
0 论文作者介绍
Rodrigo N. Calheiros
-
所属单位:澳大利亚墨尔本大学计算机科学与软件工程系,Cloud Computing and Distributed Systems (CLOUDS) Laboratory
-
主要研究领域:Rodrigo N. Calheiros 主要从事云计算、分布式系统、资源管理与调度、以及性能评估等方面的研究。他在CloudSim工具的开发上起到了关键作用。
Rajiv Ranjan
-
所属单位:澳大利亚新南威尔士大学计算机科学与工程学院
-
主要研究领域:Rajiv Ranjan 主要研究云计算中的数据管理、虚拟化技术、网络和存储管理等方面。他的研究重点包括云服务提供商与用户之间的资源调度和优化问题。
Anton Beloglazov
-
所属单位:澳大利亚墨尔本大学计算机科学与软件工程系,Cloud Computing and Distributed Systems (CLOUDS) Laboratory
-
主要研究领域:Anton Beloglazov 主要研究云计算资源管理、负载均衡、能源优化、虚拟化技术等。他在CloudSim工具开发中贡献了大量关于虚拟机调度和资源优化的内容。
César A. F. De Rose
-
所属单位:巴西里约热内卢天主教大学计算机科学系
-
主要研究领域:César A. F. De Rose 主要从事云计算、分布式系统、以及网络和计算架构的研究。他的工作主要集中在云计算资源的高效管理和优化策略上。
Rajkumar Buyya
-
所属单位:澳大利亚墨尔本大学计算机科学与软件工程系,Cloud Computing and Distributed Systems (CLOUDS) Laboratory
-
主要研究领域:Rajkumar Buyya 是云计算领域的知名学者,研究方向包括云计算、虚拟化、大数据处理和高效资源管理。他是CloudSim工具的主要创始人之一,并且为云计算领域的研究和实践做出了重要贡献。
这些作者的共同研究重点是云计算环境的建模、仿真和资源调度算法,CloudSim作为一个工具,广泛应用于学术研究和实际云计算系统的评估。
1 快读论文
1.1 题目和摘要
1.1.1 题目翻译
CloudSim:用于云计算环境建模与仿真以及资源供应算法评估的工具包
通过题目,我们可以看出:
- 此篇论文的主要介绍对象是名为”CloudSim"的工具包
- 这个工具包的作用为云计算环境建模与仿真以及资源供应算法评估
1.1.2 摘要翻译
云计算是一项近期的发展,其中 IT 基础设施和应用以“服务”的形式提供给终端用户,并采用基于使用量的付费模式。它能够根据需求(随时间变化的工作负载模式和服务质量 QoS 要求),按需利用虚拟化服务。基于云计算模型所托管的应用服务具有复杂的资源配置、组合、配置与部署需求。在不同系统与用户配置和需求下,以可重复的方式评估云资源调度策略、应用工作负载模型以及资源性能模型的表现,往往难以实现。为了解决这一挑战,我们提出了 CloudSim:一个可扩展的仿真工具包,用于建模和模拟云计算系统及应用资源配置环境。CloudSim 工具包支持对云系统组件(如数据中心、虚拟机 VMs 以及资源调度策略)的系统建模与行为建模。它实现了通用的应用资源调度技术,且能够以较低成本和难度进行扩展。目前,CloudSim 已支持对包含单一云和互联云(云联盟)在内的云计算环境进行建模与仿真。此外,它还提供了自定义接口,用于在互联云计算场景下实现虚拟机分配的策略与调度技术。目前,来自包括美国 HP 实验室在内的多家研究机构的研究人员,正使用 CloudSim 开展云资源调度与数据中心资源的节能管理研究。CloudSim 的实用性通过一个案例研究得以展示,该案例涉及在混合云联盟环境中对应用服务的动态资源配置。案例研究结果表明,在资源与服务需求波动的情况下,云联盟计算模型能够显著提升应用的 QoS 要求。
关键词:云计算;建模与仿真;性能评估;资源管理;应用调度
1) 研究背景
云计算作为一种新兴模式,将 IT 基础设施和应用以服务的形式提供,并采用按需付费机制。然而,云应用的资源配置、组合和部署过程复杂多变,随时间变化的负载和服务质量要求进一步增加了研究和实践的难度。
2) 研究问题
在不同用户需求和系统配置下,如何以可重复的方式有效评估云资源调度策略、应用工作负载模型以及资源性能模型,是当前研究中的主要挑战。
3) 研究方法
为应对上述问题,作者提出了 CloudSim,一个可扩展的云计算仿真工具包。它能够对数据中心、虚拟机和调度策略等关键组件进行建模与仿真,并支持单一云和云联盟环境,同时为研究者提供可扩展的接口以便自定义策略。
4) 研究贡献
CloudSim 已被包括 HP Labs 在内的研究机构采用,用于云资源调度与数据中心能效管理。通过在混合云联盟环境下的案例研究,作者证明该工具能够显著提升在资源和服务需求波动下的应用服务质量(QoS)。
1.2 方法
作者设计了一个分层的 CloudSim 框架 :
- 底层是仿真核心引擎,基于离散事件管理。
- 中间层支持虚拟化建模(VM 管理、内存、带宽、存储分配等)。
- 高层暴露用户接口,允许研究人员定义数据中心、虚拟机、应用任务(Cloudlets)、调度策略等。
- 支持动态工作负载、联合云(federated clouds)、市场建模等扩展功能 。
这种架构允许开发者方便地扩展 VM 分配策略、应用资源调度算法,并模拟不同 QoS 和市场环境。
1.3 实验与结果
作者进行了三类实验:
- 可扩展性与开销测试:结果显示 CloudSim 能在短时间内模拟多达 100 万台主机,初始化开销仅约 12 秒,内存占用不超过 320MB,性能优于早期版本 。
- 调度策略验证:通过空间共享与时间共享的任务调度实验,结果符合预期,证明了系统的正确性 。
- 联合云实验:在三云联合场景下,简单的负载迁移策略就能使应用平均响应时间减少 50%,makespan 提升 20%,显示联合云模型的优势 。
- 能耗管理实验:引入 DVFS 和 VM 迁移策略后,数据中心能耗降低可达 50%,但会带来 SLA 违约与迁移开销的权衡 。
1.4 结论
作者认为 CloudSim 为云计算研究提供了一个低成本、可重复、可扩展的实验环境,能够帮助研究人员在真实部署前测试和优化资源调度、QoS、能效管理等策略。它已被 HP Labs、Duke 大学等机构采用,用于云资源分配、能效管理、SLA 优化和工作流调度研究 。未来工作包括加入公共云的定价模型、数据库服务建模、QoS 监控与能效优化等 。
2 CloudSim 架构
CloudSim 采用自底向上分层设计:底层是高效的事件驱动仿真引擎,中间层建模了云计算的资源与虚拟化,上层为用户提供灵活的实验接口,并通过扩展功能支持网络、联合云、动态负载与能耗管理,从而成为研究云计算调度与资源管理的通用工具。CloudSim 分层架构图如图2.1所示。
2.1 核心仿真层(CloudSim core simulation engine)
2.1.1 功能定位
CloudSim 的最底层,类似“心脏”,负责整个仿真过程的运行。
2.1.2 核心机制
基于离散事件驱动,维护事件队列,按时间顺序调度事件。仿真过程中的每个实体,都继承自 SimEntity,且通过事件进行仿真。核心仿真层还提供灵活控制,支持仿真过程中动态创建和销毁实体,暂停、恢复和重启仿真。
2.1.3 优势
相比早期基于 SimJava 的设计,该版本 CloudSim 去掉了多线程限制,能支持数十万甚至上百万级规模的仿真,开销极低(初始化百万主机仅需 ~12 秒)。
2.2 CloudSim层(CloudSim)
2.2.1 功能定位
负责对云计算的基础设施和虚拟化环境建模。
2.2.2 关键组件
Datacenter
建模云服务提供商的物理数据中心,包含大量主机(Host)。
Host
表示单个物理服务器,定义 CPU(MIPS)、内存、存储、带宽等参数,并支持 VM 分配策略。
VM
Virtual Machine 的缩写,承载用户任务的虚拟资源,支持空间共享 (space-shared) 和时间共享 (time-shared) 两种 CPU 核分配策略。
Cloudlet
抽象应用任务的计算需求(指令数、数据传输大小等),是仿真中的基本工作单元。
VmAllocationPolicy
定义 VM 分配到主机的策略(默认是 FCFS,可扩展为能耗感知、QoS 优先等)。
CloudletScheduler
定义 VM 内部任务的调度策略(如 FCFS、优先级调度)。
RamProvisioner
内存分配。
BwProvisioner
带宽分配。
2.2.3 扩展性
研究人员可以继承这些抽象类,实现自定义的调度与分配算法。
2.3 用户代码层(User code)
2.3.1 功能定位
这是研究者和开发者直接交互的层,允许用户“编排”实验环境。
2.3.2 可定义内容
1) 云环境配置
设置数据中心数量、主机参数(CPU、内存、存储)、VM 数量与配置。
2) 应用场景
定义任务数量、任务负载模式(静态或动态)、任务分配方式。
3) 策略实现
通过继承接口或类,编写自定义的 VM 分配策略、调度算法、资源市场机制等。
4) 仿真场景
例如单一云 vs 联合云、节能调度 vs 性能优先、QoS 保障 vs SLA 违约等。
2.3.3 意义
这一层相当于实验编排层,研究人员无需修改底层代码即可进行大规模仿真实验。
2.4 扩展功能
CloudSim 提供了大量扩展能力,使其不仅能模拟基础资源,还能支持复杂场景:
- 网络建模
- 使用 BRITE 拓扑生成器建模网络节点和链路延迟。
- 采用延迟矩阵(latency matrix)模拟消息传输时延。
- 联合云
- 通过 CloudCoordinator 支持多个云之间的互联、资源迁移与负载转移。
- 可研究 云联盟 (cloud federation)、云突发 (cloud bursting) 等场景。
- 动态工作负载建模
- 通过 UtilizationModel 抽象任务的资源需求随时间变化。
- 支持模拟 SLA 违约与 QoS 波动场景。
- 能耗建模
- 提供 PowerModel,支持对主机的功耗进行建模。
- 可验证 DVFS(动态电压与频率调节)、VM 迁移等节能策略。
- 动态实体创建
- 仿真过程中可动态加入或移除用户、Broker 或数据中心,用于测试云环境的弹性与故障恢复能力。
3 CloudSim 的设计与实现
这一部分重点在于类的设计和底层实现机制。CloudSim 的类设计图如图3.1所示 。
3.1 类设计
3.1.1 BwProvisioner
这是一个抽象类,用于建模虚拟机(VM)带宽配置的策略。其主要作用是负责为部署在数据中心中的一组竞争性虚拟机分配网络带宽。云系统的开发者和研究人员可以通过扩展该类并实现自己的策略(如优先级、服务质量 QoS),以满足其应用的需求。BwProvisioningSimple 策略允许虚拟机根据需要预留任意数量的带宽;然而,这一分配仍受到宿主机总可用带宽的限制。
3.1.2 CloudCoordinator
这个抽象类将基于云的数据中心扩展到联合体中。它的职责是周期性地监控数据中心资源的内部状态,并据此做出动态负载分流的决策。该组件的具体实现包括需要使用的特定传感器以及在负载分流过程中应遵循的策略。数据中心资源的监控由 updateDatacenter() 方法完成,该方法通过向传感器发送查询来实现。服务/资源发现通过 setDatacenter() 抽象方法实现,该方法可以被扩展,用于实现自定义协议和机制(如组播、广播、点对点)。此外,该组件还可以被扩展,用于模拟基于云的服务,例如 Amazon EC2 负载均衡器。对于希望将其应用服务部署到多个云中的开发者,可以通过扩展该类来实现自定义的跨云资源配置策略。
3.1.3 Cloudlet
这个类用于建模基于云的应用服务(例如内容分发、社交网络和业务流程)。CloudSim 会根据应用的计算需求来协调其复杂性。每个应用服务在其生命周期内都有预先分配的指令长度,以及需要完成的数据传输开销(包括预取和后取)。该类还可以被扩展,用于支持其他应用性能和组成指标的建模,例如面向数据库应用中的事务处理。
3.1.4 CloudScheduler
这个抽象类由不同的策略实现所扩展,这些策略决定了虚拟机(VM)中各个 Cloudlet 所分配的处理能力份额。正如之前所述,提供了两种资源分配策略:空间共享 (CloudletSchedulerSpaceShared) 和时间共享 (CloudletSchedulerTimeShared)。
3.1.5 Datacenter
这个类用于建模由云服务提供商(如 Amazon、Azure、App Engine)所提供的核心基础设施层服务(硬件)。它封装了一组计算主机,这些主机在硬件配置(内存、核心数、计算能力和存储)方面可以是同质的,也可以是异质的。此外,每个 Datacenter 组件都会实例化一个通用的应用资源配置组件,该组件实现了一系列策略,用于为主机和虚拟机分配带宽、内存和存储设备。
3.1.6 DatacenterBroker or Cloud Broker
该类模拟了一个代理(Broker),负责在 SaaS 提供商和云服务提供商之间进行协商而这些谈判是由 QoS(服务质量)需求所驱动的。代理代表 SaaS 提供商,通过查询 CIS 来发现合适的云服务提供商,并进行在线谈判,以分配能够满足应用 QoS 需求的资源或服务。研究人员和系统开发者需要扩展该类,用于评估和测试自定义的代理策略。代理和 CloudCoordinator 之间的区别在于,前者代表客户(即这些组件的决策是为了提高与用户相关的性能指标),而后者代表数据中心行事,即它试图最大化数据中心的整体性能,而不考虑特定客户的需求。
3.1.7 DatacenterCharacteristics
这个类包含数据中心资源的配置信息。
3.1.8 Host
该类用于建模物理资源,例如计算服务器或存储服务器。它封装了重要信息,包括内存和存储容量、处理核心的数量和类型(用于表示多核机器)、虚拟机之间处理能力的分配策略,以及为虚拟机提供内存和带宽的配置策略。
3.1.9 NetworkTopology
这个类用于在仿真中引入网络行为(如延迟)。它存储了由 BRITE 拓扑生成器生成的网络拓扑信息。
3.1.10 RamProvisioner
这是一个抽象类,表示为虚拟机 (VM) 分配主内存 (RAM) 的策略。只有当 RamProvisioner 组件确认宿主机具有足够的可用内存时,VM 才能在该主机上执行和部署。RamProvisionerSimple 不对 VM 请求的内存数量设置限制;然而,如果请求超过了宿主机的可用内存容量,则该请求会被直接拒绝。
3.1.11 SanStorage
该类用于建模 存储区域网络 (SAN),这是云数据中心中常见的用于存储大量数据的基础设施(例如 Amazon S3、Azure Blob Storage)。SanStorage 实现了一个简单接口,可用于模拟任意数据量的存储和检索,但受限于网络带宽的可用性。在运行时访问 SAN 中的文件会导致任务执行产生额外延迟,这是由于数据在数据中心内部网络中传输时产生的额外延迟造成的。
3.1.12 Sensor
该接口必须被实现,以实例化传感器组件,供 CloudCoordinator 用于监控特定的性能参数(如能耗、资源利用率)。需要注意的是,CloudCoordinator 利用这些动态性能信息来进行负载均衡决策。该接口定义的方法包括:1. 设置性能参数的最小和最大阈值;2. 定期更新测量值。该类可用于建模现实中的云服务,例如 Amazon CloudWatch 和 Microsoft Azure FabricController。一个数据中心可以实例化一个或多个传感器,每个传感器负责监控一个特定的数据中心性能参数。
3.1.13 VM
该类用于建模虚拟机 (VM),由云主机组件管理和托管。每个 VM 组件都包含一个子组件,用于存储与该 VM 相关的特性,包括:可用内存、处理器、存储容量,以及 VM 的内部资源分配策略,该策略继承自一个名为 CloudletScheduler 的抽象组件。
3.1.14 VmmAllocationPolicy
这是一个抽象类,表示虚拟机监控器 (VMM) 用于将虚拟机 (VM) 分配到宿主机的策略。VmmAllocationPolicy 的主要功能是从数据中心中选择满足 VM 部署所需内存、存储和可用性要求的可用宿主机。
3.1.15 VmScheduler
这是一个抽象类,由 Host 组件实现,用于建模将处理器核心分配给虚拟机 (VM) 所需的策略(包括空间共享和时间共享)。该类的功能可以轻松被重写,以适应应用特定的处理器共享策略。
3.2 核心仿真框架
之前版本的 CloudSim 中事件处理与实体间消息传递依赖于 SimJava 库,而 SimJava 本身存在的局限性对构建可扩展模拟环境形成了显著制约。具体来看,这些局限性体现在多个关键方面:其一,它不允许在运行时通过编程方式重置模拟,也无法在仿真启动后(即运行时)创建新的仿真实体;其二,其多线程特性会随着系统规模扩大导致性能开销显著增加,这主要是因为线程间过多的上下文切换消耗了大量资源;此外,多线程设计还为系统调试增添了额外的复杂性。为克服这些局限,进而实现对包含数千个实体的复杂场景的模拟,开发了一个全新的离散事件管理框架,如图3.2所示。
3.2.1 CloudSim
作为核心类,主要负责管理事件队列并控制模拟事件的分步(顺序)执行。在运行时 CloudSim 实体生成的每个事件都会存储在名为“未来事件 ”的队列中。这些事件会根据其时间参数进行排序并插入队列。接着,在模拟的每一步中安排的事件会从“未来事件” 队列中移除并转移到延迟事件队列中。 随后,针对每个实体调用事件处理方法,该方法从延迟事件队列中选择事件并执行相应的操作。这种组织方式允许灵活管理模拟,并提供了以下强大功能:
-
实体的停用(保留)
-
实体在不同状态(例如等待到激活)之间的上下文切换。暂停和
恢复模拟过程
-
运行时创建新实体
-
在运行时中止并重新启动模拟
3.2.2 DeferredQueue
此类实现了 CloudSim 所使用的延迟事件队列。
3.2.3 FutureQueue
此类实现了 CloudSim 所访问的未来事件队列。
3.2.4 CloudInformationService
CIS 是一个提供资源注册、索引和发现功能的实体。CIS 支持两个基本操作:(1)发布 publish() ,允许实体向 CIS 注册自身;(2)搜索 search() ,允许诸如云协调器和代理之类的实体发现其他实体的状态和端点联系地址。该实体还会在模拟结束时通知相关实体。
3.2.5 SimEntity
这是一个抽象类,代表能够向其他实体发送消息、处理接收到的消息以及触发和处理事件的模拟实体。所有实体都必须继承此类并重写其三个核心方法: startEntity()、processEvent() 和 shutdownEntity(),分别是定义实体初始化、事件处理和实体销毁的操作。SimEntity 类提供了安排新事件和向其他实体发送消息的能力,其中网络延迟根据 BRITE 模型 计算。实体创建后会自动在 CIS 中注册。
3.2.6 CloudSimTags
此类包含各种静态事件或命令标签,这些标签表明 CloudSim 实体在接收或发送事件时需要执行的操作类型。
3.2.7 SimEvent
此实体表示在两个或多个实体之间传递的仿真事件。SimEvent 存储有关事件的以下信息:类型、初始化时间、事件应发生的时间、结束时间、事件应传递到目标实体的时间、源实体和目标实体的 ID、事件标签以及必须传递给目标实体的数据。
3.2.8 CloudSimShutdown
这是一个等待所有最终用户和代理实体终止的实体,然后向CIS发出模
拟结束信号。
3.2.9 Predicate
Predicate(谓词)用于从延迟队列中选择事件。这是一个抽象类,必须对其进行扩展才能创建新的 Predicate。
3.2.10 PredicateAny
此类表示一个谓词,用于匹配延迟事件队列中的任何事件。在 CloudSim 类中有一个可公开访问的此类谓词的实例, 名为 CloudSim.SIM_ANY, 因此无需创建新的实例。
3.2.11 PredicateFrom
此类表示一个谓词, 用于选择由特定实体触发的事件。
3.2.12 PredicateNone
这表示一个与延迟事件队列中的任何事件都不匹配的谓词。在 CloudSim 类中有一个公开可访问的此类谓词的静态实例, 名为 CloudSim.SIM_NONE;因此,用户无 需创建此类的新实例。
3.2.13 PredicateNotFrom
表示用于选择未由特定实体发送的事件的谓词,。
3.2.14 PredicateNotTyp
表示用于选择不匹配特定标签的事件的谓词。
3.2.15 PredicateTyp
表示用于选择具有特定标签的事件的谓词。
3.3 数据中心内部处理
任务单元的处理由各自的虚拟机 (VM) 执行,因此其进度必须在每个仿真步骤中持续更新和监控。为此,会生成一个内部事件,用于通知 DataCenter 实体,表明某个任务单元预计在不久的将来完成。因此,在每个仿真步骤中,每个 DataCenter 实体都会对其管理的每台主机调用名为 updateVMsProcessing() 的方法。随后,被调用的虚拟机会更新当前在主机上运行的活跃任务的处理状态。该方法的输入参数类型为当前仿真时间,返回参数类型为该主机上某个虚拟机当前运行任务的下一个预计完成时间。下一个内部事件时间为所有主机返回的任务完成时间中的最小值。
在主机层面,调用 updateVMsProcessing() 会触发 updateCloudletsProcessing() 方法,该方法指示每个虚拟机将其任务单元的状态(完成、挂起、执行中)更新给 DataCenter 实体。该方法实现的逻辑与前述 updateVMsProcessing() 类似,但作用于 VM 层级。一旦调用此方法,虚拟机会返回它们当前管理的任务单元的下一个预计完成时间。所有计算出的完成时间中的最小值会发送给 DataCenter 实体。因此,完成时间会被保存在一个队列中,DataCenter 会在每次事件处理步骤后查询该队列。等待在完成队列中的已完成任务会直接返回给 CloudBroker 或 CloudCoordinator。
这一过程在图3.3中以时序图的形式进行了展示。
3.4 实体间通信机制
图3.4展示了 核心 CloudSim 实体之间的通信流程。在仿真开始时,每个 Datacenter 实体会向 CIS Registry 注册。随后,CIS 提供注册类型的功能,例如用于将用户/代理请求映射到合适的云服务提供商的匹配服务。接下来,代表用户的 DataCenter Broker 会咨询 CIS 服务,以获取能够提供符合应用 QoS、硬件和软件要求 的基础设施服务的云服务提供商列表。如果找到匹配的服务,DataCenter Broker 会将应用部署到 CIS 推荐的云上。
到目前为止描述的通信流程属于仿真实验中的基本流程。根据不同策略,该流程可能存在一些变体。例如,来自代理 (Broker) 到数据中心 (Datacenter) 的消息可能需要数据中心其他部分的确认,例如关于某个操作的执行情况,或用户可创建虚拟机的最大数量。
4 总结
CloudSim 作为一个开源的云计算仿真工具包,为研究者和开发者提供了一个高效、可扩展、可重复的实验平台,用于模拟和评估云计算环境中的资源调度、任务分配、能效管理、服务质量保障等关键问题。通过分层架构设计,CloudSim 将仿真核心、资源建模与用户接口清晰分离,使得用户能够在不修改底层机制的情况下,灵活定义数据中心、虚拟机、任务负载及各类调度策略。
论文中通过多组实验验证了 CloudSim 在可扩展性、调度正确性、联合云优势以及能耗管理等方面的有效性。其已被多家研究机构广泛采用,并在云资源管理、能效优化、SLA 保障等研究方向中发挥了重要作用。