您的位置:首页 > 其它

cloudsim相关疑问与解答

2014-08-15 15:18 260 查看
翻译:https://code.google.com/p/cloudsim/wiki/FAQ#Getting_started

开始:

1. 什么是cloudsim?他能做什么和不能做什么?

Cloudsim是一个工具(库)用来云计算场景的模拟(注意不是仿真)。它提供基本的类用来描述数据中心,虚拟机,应用程序,用户,计算资源,和一些策略(如调度和提供等)对系统不同部分的管理。

这些组件放在一起可以帮助用户评估在云资源使用方面的新策略(策略,调度算法,映射和负载平衡策略等)。它也可以用来从不同方面评估一些策略的效率,从花销到程序运行时间。它还支持绿色IT策略的评估。

以上是我们预想的常见的场景和使用者已经探索过的。然而,在使用方面没有限制。你可以用它做:类可以被扩展和代替,新的策略可以被添加和编写使用的新的场景。把它认为成你自己模拟云环境的一个编译模块。

因此,Cloudsim并不是现成可用的解决方案,不是在你工程中设置一些参数然后收集结果。作为一个库,Cloudsim要求你写一个Java程序使用它的组件去构建渴望的场景。当然,Cloudsim可以被使用去创建这样一个现成可用的解决方案,例如:

Bhathiya Wickremasinghe, Rodrigo N. Calheiros, and Rajkumar Buyya. CloudAnalyst:一个基于Cloudsim的可视化模拟器用于分析云计算环境和应用。

2. Cloudsim对于我的工程是一个适合的工具吗?

Cloudsim是个模拟器(注意模拟器和仿真器的区别),因此他不运行任何实际的软件技术。模拟可以被定义为“在一个硬件模型上运行一个软件的模型”。由于它是关于模型的,具体技术细节被抽象。更多信息关于模拟器和仿真器或者其他实验方法的不同可以查看:

Gustedt, J.; Jeannot, E.; and Quinson, M. Experimental methodologies for large-scale systems: a survey, Parallel Processing Letters, World Scientific, 2009, 19(3), 399-418.

因此,如果你的项目的目标是运行一个你开发实际软件或者计划在一个实际的系统上去开发,那么或许你得在一个小规模的数据中心中进行软件开发和测试。

3. 使用Cloudsim我需要知道什么?如何安装它?

使用Cloudsim需要的先前知识是基本的java编程(因为Cloudsim使用java写的)和一些关于云计算的知识。了解一些关于IDE编程像eclipse或者Netbeans是方便的,因为他们简化了许多应用程序开发的任务。二者选其一,Ant和Maven可以用于应用程序的编译。

Cloudsim没有必要安装:你仅仅需要解压下载的包在任一目录下,把它添加到你的java classpath就可以使用了。如果你用Eclipse或者NetBeans,你可以把Cloudsim作为一个工程添加,之后他就对以后通过IDE创建的工程可用。

4. 如何更使用进一步学习Cloudsim?

你可以从Cloudsim包中的例子开始。他们从简单的场景慢慢到复杂。之后你就知道如何把组件放在一起去建立你自己的场景。

由于基本的组件不能满足你的工程,你可以研究API,因此你可以使用高级的特性,和扩展或者代替组件。

其他信息资源是CloudSim group.

5. Cloudsim能够运行我的应用程序?

不行,Cloudsim是一个模拟器,他不能运行一个真实的程序,他是用来模拟和测试不同的调度和虚拟机分配算法。

Cloudsim组件,通信和事件:

1. 在Cloudsim包中提供的组件的默认行为是什么?如何改变他们?

数据中心举止像一个IaaS提供商:它从代理商接收虚拟机的请求然后在主机中创建虚拟机。

在Cloudsim中的代理商只是提交一些需要被创建的虚拟机表和顺序的调度云任务。代理商被提供作为一个例子,它应该被你自己的调度策略,和(或者)虚拟机和云任务的生成策略所代替。

去改变默认的行为,你可以或者扩展这些类去增加一些行为,或者实现新的类。在后者,这些新的实体必须扩展SimEntity和实现processEvent()方法。

2. 如何编写一个定期的行为被实体接受?

通过设置一个内部事件周期性的被设置来完成。一旦事件被接收,处理方法将被调用,然后想要的行为在这个处理方法中实现。下面我们展示如何为Datacenterclass实现它。相同的步骤可以被用于在Broker中的行为。

1) 扩展Datacenter。

2) 定义一个新的标签去描述周期性事件

3) 重写processOtherEvent,去探索这个周期性事件和调用处理方法。

4) 实现处理方法,最后,这个方法为了这个事件也调度下一个调用。

重要:你的代码必须包含一个停止生成内部实事件的条件,否则模拟将不会结束。

class NewDatacenter extends Datacenter {

public static final int PERIODIC_EVENT = 67567; //choose any unused value you want to represent the tag.

:

@Override

protected void processOtherEvent(SimEvent ev) {

if (ev == null){

Log.printLine("Warning: "+CloudSim.clock()+": "+this.getName()+": Null event ignored.");

} else {

int tag = ev.getTag();

switch(tag){

case PERIODIC_EVENT: processPeriodicEvent(ev); break;

default: Log.printLine("Warning: "+CloudSim.clock()+":"+this.getName()+": Unknown event ignored. Tag:"+tag);

}

}

}

:

private void processPeriodicEvent(SimEvent ev) {

//your code here

:

float delay; //contains the delay to the next periodic event

boolean generatePeriodicEvent; //true if new internal events have to be generated

if (generatePeriodicEvent) send(getId(),delay,PERIODIC_EVENT,data);

}

:

}

3. 如何创建自己定义的信息类型?如何使他们被其他实体接收?

这一过程与前一个类似。首先,一个新的信息标签必须在某个地方声明。然后一个处理这个信息的方法必须添加到信息的接收者中。代码和前一个类似,除了处理方法,它不会内部的生成这个事件,而是等待某些实体发送事件。

策略和算法

1. 默认的调度策略是什么和如何更改他们?

Cloudsim模拟CPU资源的调度在两个层次上:主机和VM

在主机层,主机分享每一个处理器单元的片给运行在其上的每一个虚拟机。由于资源被分享在虚拟机之间,这种调度称作VmScheduler。一个主机的这种调度是这个主机构造函数的一个参数。

在虚拟机层,每一个虚拟机在其实运行的云任务之间划分从主机接收的资源。由于在这一层资源被云任务共享,这种调度称为CloudScheduler。一个虚拟机的这种调度室它的构造函数的参数。

在这两层,有两种默认策略可用:第一个策略,xSpaceShared(X代表VmScheduler或者CloudletScheduler),云任务或者虚拟机要求处理单元独自占用。这意味着如果有比可用的处理单元多的运行单元(VMS或者Cloudlets),后几个单元到达等待队列,直到有足够的资源可用。第二个策略,xTimeShared,可用处理单元片是共享的在运行单元之间,所有单元同时运行。

去定义我们自己的策略,你必须扩展VmSheduler或者CloudScheduler,为处理单元的共享创建方法,在相关对象的构造函数期间传递新类。

2. 哪些调度决定应该在虚拟机层实现和哪些调度决定应该在代理层实现?

VmScheduler模拟在虚拟机层的调度行为,如VMMs(XenVMware)。因此如果你想模拟这种软件的行为,关于运行在相同主机上是虚拟机之间的资源分配,这里就是新的策略被实现的地方。

类似,CloudScheduler模拟在操作系统层的调度行为:给一些并行在这个系统上的应用程序,可用的CPU资源如何分配给他们?如果你想模拟这种行为,CloudScheduler就是你需要扩展的类。

有一点在两种调度中没有考虑:一个代理商给了一些云任务,哪一个应该第一个执行?这种决定,代表了应用程序层的行为,应该定义在Broker层.

3. 默认的提供策略是什么和如何更改?

提供问题包括定义,在这个数据中心中的可利用主机之间,哪一个主机应该接收一个用户提出新机器请求。在数据中心中主机提供给一个虚拟机是一个简单的策略,即运行最少虚拟机的主机接收下一个虚拟机。这个行为定义在VMAllocationPolicySimple类中。要改变这个行为,可以扩展这个类去定义一个新的提供策略,和在数据中心初始化时传递这个对象。

4. 哪些类我可以修改去实现自己的算法?

在Cloudsim中有几个地方你可以实现你的算法,依据打算要写什么算法。这里有一些类的例子你可能需要去修改和扩展。

1) DatacenterBroker—修改虚拟机提供请求被提交到数据中心的方式和云任务被提交和被分配给虚拟机的方式。

2) VmAllocationPolicy—你需要去扩展这个抽象类去实现你自己的算法,为了确定哪一个主机分配给一个新的虚拟机。你也可以实现一个动态虚拟机再分配算法通过实现optimizeAllocation方法,它每一次构件时被调用和在这个数据中心的当前虚拟机所有集被传送。

3) VmScheduler—在一个单独主机上实现资源分配给虚拟机算法。

4) CloudletScheduler—在一个单独的虚拟机实现调度云任务的算法。

5) PowerVmAllocationPolicyMigrationAbstract—一个模板类为了实现功率监控动态虚拟机整合算法,用于虚拟机在线迁移到动态再分配虚拟机在每次构件时。重写的主要方法是optimizeAllocation。

先进的特性:

1. 在一个数据中心中如何编写虚拟机移植?

虚拟机移植在一个数据中心中由一个内部数据中心事件触法。因此,触法一个移植意味着接收和处理一个VM_MIGRATION事件。

send(this.getId(),delay,CloudSimTags.VM_MIGRATE,vm);

delay字段包括评估移植完成时间。因此,当使用它时,这个方法开始移植处理必须提供评估完成时间。在延迟之后,事件由数据中心接收,随着移植的完成被解释执行:因此,从这个虚拟机上的时间是可用的在目的主机上。

获得帮助:

1. 我有一个问题该怎么办?

你应该做的第一件事是读这个FAQ。因为我们定期的在这里添加新的解答,我们会为你的问题寻找答案。

如果你的问题在这里没有解答,你应该尝试下一个先前讨论从CloudSim group.解决典型问题的代码段在这里发现。

最后,如果你的问题还没有解决,发送一个e-mail到讨论组。请尽力说清楚你的问题,这样可以加快解答时间。

2. 我的问题被解答需要多长时间?

我们尽最大的努力去解答你的问题。然而,一些因素将会影响他,例如:

1) 信息必须转发给另一个开发者,他更加熟悉这个问题。

2) 问题不清楚或者太一般,我们首先必须去理解他。

3) 信息报道bug或者代码没有预料到的行为(你应该使用 issue
tracker去加速处理)。

4) 问题已经在先前的FAQ或者讨论组被解答。

5) 信息已经被其他使用相同线程的提交所掩盖。如果有很多这种信息,他们其中的一些将会丢失。这可以避免通过使用信息的具体主题,清晰的描述了你的问题。

3. 我如何报道bug,可取的特点,不可预料的行为和其他问题?

请用issue tracker 解决,他加速更新处理。在讨论组中的问题报道将会花费更长时间去添加到问题追踪器中。

4. 你们是否能实现一些在我的工程中需要的特殊的特性?

因为我们是开发者中的一小组,我们不能支持用户提出的所有问题,但是这是我们的目的:我们提供可以广泛使用的一般的类和特性,使用者开发特定的行为。欢迎可以对大量用户有帮助的新特性的建议,可以粘贴在issue
tracker。适用范围狭窄的类和特性和打算解决特殊问题是不可能被开发的。

5. 我在MathUtil中得到NullPointerException异常,为什么?

你需呀安装Flanagan's JAVA库。在power包中的一些算法需要Michael Thomas Flanagan'sJAVA科学库。为了编译Cloudsim,下这个库是必要的。这个库可以从这里下载:

http://www.ee.ucl.ac.uk/~mflanaga/java/

一旦这个库下载完成,把它拷贝到jars/目录。如果你运行linux系统,你可以运行这个脚本 ./install-flanagan.sh,他将会下载这个库并把它放在jars/目录下。
使用这种库,请确定你尊重由软件开发者定义的使用条款。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: