CloudSim资源调度「建议收藏」

CloudSim资源调度「建议收藏」    本菜鸡的毕业设计选择的就是面向数据中心能耗优化的粒子群算法的设计与实现,别问我为啥选这个,我也不知道,在网上查询了很多之后发现也就GitHub上面就4个项目,好像也就第四能用。然后就是YouTube上面有一个印度小哥的视频,做了一个高大上的界面,用的InternetTopologyZoo做了一个界面,非常酷眩,然而没有源代码,全程是成果展示,心痛的要死。但是仅仅是云任务调度,而这…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

       本菜鸡的毕业设计选择的就是面向数据中心能耗优化的粒子群算法的设计与实现,别问我为啥选这个,我也不知道,在网上查询了很多之后发现也就GitHub上面就4个项目,好像也就第四能用。然后就是YouTube上面有一个印度小哥的视频,做了一个高大上的界面,用的Internet Topology Zoo做了一个界面,非常酷眩,然而没有源代码,全程是成果展示,心痛的要死。但是仅仅是云任务调度,而这种仿真题目,按照老师给的要求应该是虚拟机到物理机的映射的优化以及在这个基础上扩展,网上资料很少,这里我用了一点笨办法狗出来了,希望能帮到其他人(这也是我第一次写博客0.o,错误的地方大佬请指正)。

1.环境的准备

        这里讲的是用JAVA及Eclipse进行仿真,JAVA环境变量就不提了,这个肯定都会,然后从网上下载一个CloudSim的包,之后啊,就直接用Eclipse进行Import->Maven->Existing Maven Project导入,等它自动配置下好需要的一些jar包,第一步就搞定了。

 2.云环境的准备

      这里说的云环境其实也就是物理机,虚拟机以及云任务的参数,这里说的是能耗优化问题,所以物理机和虚拟机的主要参数是MIPS,也就是CPU的计算能力,其次则是内存RAM,处理器核数目PES,带宽BW以及存储空间大小几个参数,如下图:

CloudSim资源调度「建议收藏」

这个是CloudSim中的示例,我貌似修改了一些参数,记不太清了,但是无所谓,因为一般来说你都需要根据自己要做的东西进行这些参数的设计,你可以以根据这些参数进行自己参数的生成,最简单的方法就是生成多级文件,第一级命名为物理机和虚拟机的数目,如20-60等等,第二级则是可以命名为“PM-CPU”“PM-RAM””VM-CPU”等等的方法,之后再规定其参数的范围,写成几种规格的对应第一级命名个数的数据,直接写成TXT文件即可;又或者规定一定范围直接写随机数,根据自己的目的进行场景的生成(读写文件还是很简单的对吧,毕竟我这菜鸡都会)。云任务的主要参数则是长度,如果你对云任务没什么特定要求的话,你其实可以不用生成云任务的,因为它自带0.0,比如下图:

CloudSim资源调度「建议收藏」

这个自带的dvfs的例子当中用的是它2110303的云任务,其中又1052个云任务,一般来说没有什么特定要求,那么它是完全足够了的。之后的仿真也是模仿这个例子完成的。

3.读取并处理数据

      现在则是要对之前生成的数据进行一个读取了,根据上面的那个图片,在那个例子的包当中新建一个你喜欢的名字的类,如pso,首先直接复制dvfs中的内容进去,类名自己记得修改。之后进入PlanetLabRunner这个类,暴力一点方法是直接在里面写代码,不过如果之后还要进行别的操作的时候就比较麻烦,也可以新建一个你喜欢的名字的类,如Pla,同样继承自RunnerAbstract,然后在pso中把PlanetLabRunner的调用替换为Pla。之后则是对Pla编程,这里主要就是创建了hostList,vmList和cloudletList。如果你什么都不修改的话它就是用的就是Constants类中的参数和201110303中的云任务参数,这里我们要做的则是读取我们之前生成好的数据,然后带入到创建这三个列表的方法中,这是CloudSim自带的0.0,如下图。

CloudSim资源调度「建议收藏」

具体的参数和涵义我就不细说了。

4.虚拟机映射至物理的调度方法实现

       把数据都读出来了之后就要实现自己的调度方法,这里首先进入RunnerAbstract类,这里面有一个名为getVmAllocationPolicy()的方法,这个方法中有很多选择分支语句,对应了dvfs或者说pso,也就是程序入口类中字符串vmAllocationPolicy的内容,比如dvfs类对应的就是dvfs,这里首先你可以修改一下vmAllocationPolicy中的内容,之后在getVmAllocationPolicy()方法中添加一条选择语句。CloudSim资源调度「建议收藏」

 

之后进入PowerVmAllocationPolicySimple类中,你会发现其实它空空如也,真正的调度方案的实现在它的父类

PowerVmAllocationPolicyAbstract类中,这里你可以找到一个findHostForVm()的方法,这里也就是为虚拟机选择物理机的地方啦(故名思意?emmmm)。

在这里本来采用的是FF的法子,我对它进行了一点点修改。不过这里实际上是每个虚拟机创建的时候都会为它寻找一次合适的映射方法,如果把算法写在这里,如果是FF,FFD什么的倒是还行,(原谅我狭隘的只考虑做毕业设计的选择,毕竟大佬看这也没啥帮助)但是毕业设计在这方面大多数都是蚁群/粒子群/遗传等等的群智能算法,那如果虚拟机多的时候,仿真一次要跑好多次算法,每次结果还都不大一样,这就很头疼,所以应当只跑一次。我直接用的最偷懒的方法,在PlanetLabRunner类读取数据的时候就直接跑算法,然后把映射方案写到文本文件当中,然后在findHostForVm()当中读取,然后再分配。

CloudSim资源调度「建议收藏」

省略掉的是它原来的顺序方案。这个方法倒对所有的算法都还算友好,不管你是用什么算法仿真,但是都是可以用的。

5.云任务调度的实现

     仅仅完成以上四个步骤,你查看控制台会发现实际只有你虚拟机数目的个数的云任务被执行了,其他的任务绑定时会说虚拟机不可用。如果你跑过例子你会发现它云任务的分配方式是给每一个云任务分配一个虚拟机,但如果虚拟机数目少于云任务(反正我的虚拟机一般就几十个到一两百,用的是它20110303的,有1052个任务),那么其他的任务就无法执行。这个时候就需要修改一下调度方法了。最简单的方法是你自己写一个简单的调度算法,如果要求比较高,那么可以写一个PSO/GA/SA等等方法,以时间最短原则绑定云任务。其次,也可以参照刘鹏教授的《云计算》第二版一书的两个例子,写一个顺序调度和一个贪心调度方法(这里提醒一下第三版没有这个内容了,第二版第九章还是第十章才有,我要吐槽一下他第三版把那一章删掉了….)。

 

最后,关于虚拟机映射至物理机和云任务的绑定就是这样了。除此之外还可以用NetworkTopology

类当中的buildNetworkTopology()以及mapNode()方法构建网络拓扑,CloudSim自带的拓扑比较简单,如果要求较高的话则是可以通过修改这些实现自定义的拓扑连接。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182368.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 语义分割最新算法_nonnegative integers

    语义分割最新算法_nonnegative integers翻译来自:https://gist.github.com/khanhnamle1994/e2ff59ddca93c0205ac4e566d40b5e88语义分割方面的资源:https://github.com/mrgloom/awesome-semantic-segmentation1.什么是语义分割语义分割是当今计算机视觉领域的关键问题之一。从宏观上看,语义分割是一项高层次的任务,…

    2022年4月19日
    118
  • Windows Subsystem for Android 安装<简化向>[通俗易懂]

    Windows Subsystem for Android 安装<简化向>[通俗易懂](总共安装时间≤1小时)能在Windows上运行安卓子系统还是第一次,既然Microsoft能开放给我们,那不妨尝试一下安装吧!

    2022年7月16日
    97
  • STM32开发项目:ADS1115的驱动与使用

    STM32开发项目:ADS1115的驱动与使用日期作者版本说明2020.09.24TaoV0.0完成主体内容的撰写目录ADS1115介绍驱动源码头文件源文件使用指南基本步骤注意事项ADS1115介绍ADS1115是具有PGA、振荡器、电压基准、比较器的16位、860SPS、4通道Δ-ΣADC,数据通过一个I2C兼容型串行接口进行传输。有关它的详细说明可以参考官方数据手册。驱动源码头文件#ifndef__ADS1115_H__#define__ADS1115_H__#include…

    2025年7月3日
    3
  • windows进程system占用CPU(电脑cpu过高怎么处理)

    自从升级到Win10系统后,经常发现任务管理器中的System进程占用了很高的CPU内存,这也导致多项应用程序无法正常运行,并且这个进程占用内存是没有上限,对于这种情况我们该如何处理呢?下面我们就一起来看看System占用CPU内存过高的解决方法。1、右键点击开始菜单,打开计算机管理页面;2、在计算机管理页面中打开计算机“服务”界面;3、在…

    2022年4月13日
    215
  • Vim:如何退出Vim编辑器?

    Vim:如何退出Vim编辑器?Vim:如何退出Vim编辑器?(笑)这个问题可以说是每个初学者的必经之路咯解决办法如下!请注意非常重要的一点!在vim里面不管何时,直接输入“:”就会在最下面显示出一行,vim开始进入命令模式(而不是write模式)当初自己傻得不行,明知道命令却不知道如何使用,分享给那些一样和我不知道怎么使用命令的…:q//退出:q!//退出且不保存(:quit!的缩写):wq//保存并退出:wq!//保存并退出即使文件没有写入权限(强制保存退出):x//保存并退出(类似:w

    2022年6月5日
    68
  • 安全视角下的CAN协议分析

    安全视角下的CAN协议分析目录相关背景CAN节点介绍CAN帧结构介绍CAN总线攻击面分析CAN总线安全缺陷基于ID的仲裁机制安全缺陷针对CAN总线的攻击方式[2]参考文章相关背景控制器局域网(CANbus)由罗伯特·博世公司于1983年开发。该协议于1986年美国密歇根州底特律市举行的国际汽车工程师学会(SAE)会议上正式发表。第一个CAN控制芯片,由英特尔和飞利浦生产,并且于1987年发布。世界上第一台装载了基于CAN的多重线系统的汽车是1991年推出的梅赛德斯-奔驰W140。..

    2022年6月28日
    36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号