策略和算法
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/目录下。
使用这种库,请确定你尊重由软件开发者定义的使用条款。