cloudsim仿真平台扩展的例子_云编程

cloudsim仿真平台扩展的例子_云编程CloudSim3.0.3的网络编程详解—以*org.cloudbus.cloudsim.examples.network.NetworkExample1为例

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

Jetbrains全系列IDE稳定放心使用
以 org.cloudbus.cloudsim.examples.network.NetworkExample1 为例,该例子展示了如何创建一个有网络拓扑的数据中心并且在其上运行一个云任务。例子通过读取topology.brite 文件来构造网络拓扑。网络拓扑的信息包括节点的位置,节点间的有向边,边时延,边带宽等信息。能够模拟基于网络位置,时延,带宽等的网络环境,有效地计算网络传输造成的花销。与前面例子不同的是,网络编程需要调用 org.cloudbus.cloudsim.NetworkTopology 构造网络拓扑图,然后把 CloudSim 实体与拓扑图的节点进行映射。  

/**
 * org.cloudbus.cloudsim.examples.network.NetworkExample1
 * A simple example showing how to create
 * a datacenter with one host and a network
 * topology and and run one cloudlet on it.
 */

public static void main(String[] args) { 
 Log.printLine("Starting NetworkExample1..."); 
 // 第一步:初始化 CloudSim 
 int num_user = 1; 
 Calendar calendar = Calendar.getInstance(); 
 boolean trace_flag = false; 
 CloudSim.init(num_user, calendar, trace_flag); 
//第二步:创建数据中心 
 Datacenter datacenter0 = createDatacenter("Datacenter_0"); 
 //第三步:创建代理 
 DatacenterBroker broker = createBroker(); 
 int brokerId = broker.getId(); 
//第四步:创建一个虚拟机 
 vmlist = new ArrayList<Vm>(); 
 //虚拟机参数 
 int vmid = 0; 
 int mips = 250; 
 long size = 10000; 
 int ram = 512; 
 long bw = 1000; 

 int pesNumber = 1; 
 String vmm = "Xen"; 
 //创建虚拟机 
 Vm vm1 = new Vm(vmid, brokerId, mips, pesNumber, ram, bw, size, vmm, 
new CloudletSchedulerTimeShared()); 
 vmlist.add(vm1); 
//提交虚拟机列表到代理 
 broker.submitVmList(vmlist); 
//第五步:创建一个任务 
 cloudletList = new ArrayList<Cloudlet>(); 
//任务参数 
 int id = 0; 
 long length = 40000; 
 long fileSize = 300; 
 long outputSize = 300; 
 UtilizationModel utilizationModel = new UtilizationModelFull(); 
 Cloudlet cloudlet1 = new Cloudlet(id, length, pesNumber, fileSize, outputSize, 
utilizationModel, utilizationModel, utilizationModel); 
 cloudlet1.setUserId(brokerId); 
 cloudletList.add(cloudlet1); 
 //提交任务列表到代理 
 broker.submitCloudletList(cloudletList); 
//第六步:配置网络 
 //加载网络拓扑文件 

 NetworkTopology.buildNetworkTopology("topology.brite"); 
 //注意:直接运行该例子,可能会运行失败,报错找不到 topology.brite 
 //解决方法:方法一:buildNetworkTopology()中的参数改为 topology.brite 
//的绝对路径;方法二:把 topology.brite 拷贝到项目的根目录下 
//CloudSim 实体与拓扑图中的对象建立映射 
//数据中心对应拓扑图的节点 0 
int briteNode=0; 
 NetworkTopology.mapNode(datacenter0.getId(),briteNode); 
 //代理对应拓扑图的节点 3 
 briteNode=3; 
 NetworkTopology.mapNode(broker.getId(),briteNode); 

 // 第七步:启动仿真 
 CloudSim.startSimulation(); 
 //第七步:统计结果并输出结果 
 List<Cloudlet> newList = broker.getCloudletReceivedList(); 
CloudSim.stopSimulation(); 
 printCloudletList(newList); 
//打印数据中心的成本 
 datacenter0.printDebts(); 
Log.printLine("NetworkExample1 finished!"); 

 } 

topology.brite 如下:

Topology: ( 5 Nodes, 8 Edges ) 
Model (1 - RTWaxman): 5 5 5 1 2 0.15000000596046448 0.20000000298023224 1 1 
10.0 1024.0 

Nodes: ( 5 ) 
0 1 3 3 3 -1 RT_NODE 
1 0 3 3 3 -1 RT_NODE 
2 4 3 3 3 -1 RT_NODE 
3 3 1 3 3 -1 RT_NODE 
4 3 3 4 4 -1 RT_NODE 

Edges: ( 8 ) 
0 2 0 3.0 1.1 10.0 -1 -1 E_RT U 
1 2 1 4.0 2.1 10.0 -1 -1 E_RT U 
2 3 0 2.8284271247461903 3.9 10.0 -1 -1 E_RT U 
3 3 1 3.605551275463989 4.1 10.0 -1 -1 E_RT U 
4 4 3 2.0 5.0 10.0 -1 -1 E_RT U 
5 4 2 1.0 4.0 10.0 -1 -1 E_RT U 
6 0 4 2.0 3.0 10.0 -1 -1 E_RT U 
7 1 4 3.0 4.1 10.0 -1 -1 E_RT U 

程序会寻找标记“Nodes:”和“Edges:”,“Nodes”是节点信息,其中第一列是节点序号,第二列是节点的横坐标,第三列是纵坐标。“Edges”是边信息,第一列是边序号,第二列是

始节点序号,第三列是终节点序号,第四列是边长度,第五列是边时延,第六列是边带宽。CloudSim 中只用到了以上信息。如此,我们就能构造自己需要的网络拓扑了。

运行仿真样例的结果如下图:

Starting NetworkExample1… 
Initialising… 
Topology file: topology.brite 
Starting CloudSim version 3.0 
Datacenter_0 is starting… 
Broker is starting… 
Entities started. 
0.0: Broker: Cloud Resource List received with 1 resource(s) 
7.800000190734863: Broker: Trying to Create VM #0 in Datacenter_0 
15.700000381469726: Broker: VM #0 has been created in Datacenter #2, Host #0 
15.700000381469726: Broker: Sending cloudlet 0 to VM #0 
183.50000057220458: Broker: Cloudlet 0 received 
183.50000057220458: Broker: All Cloudlets executed. Finishing… 
183.50000057220458: Broker: Destroying VM #0 
Broker is shutting down… 
Simulation: No more future events 
CloudInformationService: Notify all CloudSim entities for shutting down. 
Datacenter_0 is shutting down… 
Broker is shutting down… 
Simulation completed. 
Simulation completed. 
========== OUTPUT ========== 
Cloudlet ID STATUS Data center ID VM ID Time Start Time 
Finish Time 
 0 SUCCESS 2 0 160 19.6 
179.6 
*****Datacenter: Datacenter_0***** 
User id Debt 
3 35.6 
********************************** 
NetworkExample1 finished! 

    那么实体之间的通信延迟是如何影响到模拟程序的clock推演的呢?答案是SimEntity.send(int entityId, double delay, int cloudSimTag, Object data) 函数中调用了delay += getNetworkDelay(srcId, entityId)。具体而言,所有实体(包括DC, DCBroker)在向其它实体发送事件时,delay参数中包含了通信延迟。由笔者系列文章的第一篇(CloudSim(3.0.3)运行机制见解)可知,事件是先被缓存在CloudSim.future队列中,该事件被取出时clock自然就被推进了,最后目标实体调用相关方法完成事件处理。

    那么在“Broker: Trying to Create VM #0 in Datacenter_0”之前的7.8秒(模拟时间)是怎么产生的呢?这其实是3.9*2=7.8,其中3.9s是DC(拓扑0号节点)和DCBroker(拓扑3号节点)之间的通信延迟。DCBroker从CloudSim类处弄到了DC列表之后,向DC发送CloudSimTags.RESOURCE_CHARACTERISTICS事件,DC再回复带有DC特性对象的CloudSimTags.RESOURCE_CHARACTERISTICS事件,这样一来一回,clock就推演了3.9*2=7.8s。

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

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

(0)
上一篇 2022年10月12日 下午11:36
下一篇 2022年10月12日 下午11:36


相关推荐

  • internal server error原因及解决

    internal server error原因及解决常见的内部服务错误的原因有二,一是服务器资源紧张,二是文件权限错误。1.错误的原因一:服务器资源超载。服务器的资源超载:即同一时间内处理器有太多的进程需要处理的时候,会出现500错误。借助SSH,可

    2022年7月4日
    33
  • spring bean的生命周期面试如何回答_面试maven的生命周期

    spring bean的生命周期面试如何回答_面试maven的生命周期SpringBean生命周期

    2026年1月27日
    8
  • mysql报错1396_mysql连接不上数据库

    mysql报错1396_mysql连接不上数据库我似乎无法重新创建一个已删除的简单用户,即使以root用户身份在MySQL中也是如此。我的情况是:用户’jack’曾经存在,但是我从mysql.user中删除了它以重新创建它。我在那张桌子上看不到任何痕迹。如果我对其他随机用户名(例如“jimmy”)执行此命令,则该命令会正常工作(就像最初对“jack”所做的一样)。我已经做了些什么来破坏用户“jack”,以及如何撤销该破坏,以便重新创建“…

    2022年8月12日
    7
  • html超链接样式设置「建议收藏」

    html超链接样式设置「建议收藏」type=”text/css”>A {FONT-SIZE: 16px; FONT-FAMILY: 宋体}A:link {COLOR: #0055bb; TEXT-DECORATION: none}A:visited {COLOR: #0077bb; TEXT-DECORATION: none}A:hover {COLOR: #ff0000

    2022年7月19日
    16
  • Android图片裁剪之自由裁剪

    Android图片裁剪之自由裁剪

    2021年12月4日
    41
  • 一步步学习SPD2010–第二章节–处理SP网站(2)–管理网站用户和权限

    一步步学习SPD2010–第二章节–处理SP网站(2)–管理网站用户和权限SPD不仅提供给你能力去自定义SPFoundation和SPServer网站。而且还帮助你管理和保护你的网站,而不必打开浏览器。当你在浏览器中创建网站时,你可以选择网站是否有它自己的安全设置。然而,当你用SPD创建网站时,你的网站自动继承父网站的安全设定。如果你正自定义一个新的网站来满足业务需求,或者想把你的网站做成模板,以使你能够基于自定义创建更多其他网站,你不想让其他用户使用你的网站直到你的

    2022年6月18日
    30

发表回复

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

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