• Cloudsim入门


    如何使用cloudsim?

    直接上github搜索cloudsim

    Release cloudsim-3.0 · Cloudslab/cloudsim · GitHub

    首先来个源代码,这个是cloudsimexample1

    package org.cloudbus.cloudsim.examples;
    
    /*
     * Title:        CloudSim Toolkit
     * Description:  CloudSim (Cloud Simulation) Toolkit for Modeling and Simulation
     *               of Clouds
     * Licence:      GPL - http://www.gnu.org/copyleft/gpl.html
     *
     * Copyright (c) 2009, The University of Melbourne, Australia
     */
    
    import java.text.DecimalFormat;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.LinkedList;
    import java.util.List;
    
    import org.cloudbus.cloudsim.Cloudlet;
    import org.cloudbus.cloudsim.CloudletSchedulerTimeShared;
    import org.cloudbus.cloudsim.Datacenter;
    import org.cloudbus.cloudsim.DatacenterBroker;
    import org.cloudbus.cloudsim.DatacenterCharacteristics;
    import org.cloudbus.cloudsim.Host;
    import org.cloudbus.cloudsim.Log;
    import org.cloudbus.cloudsim.Pe;
    import org.cloudbus.cloudsim.Storage;
    import org.cloudbus.cloudsim.UtilizationModel;
    import org.cloudbus.cloudsim.UtilizationModelFull;
    import org.cloudbus.cloudsim.Vm;
    import org.cloudbus.cloudsim.VmAllocationPolicySimple;
    import org.cloudbus.cloudsim.VmSchedulerTimeShared;
    import org.cloudbus.cloudsim.core.CloudSim;
    import org.cloudbus.cloudsim.provisioners.BwProvisionerSimple;
    import org.cloudbus.cloudsim.provisioners.PeProvisionerSimple;
    import org.cloudbus.cloudsim.provisioners.RamProvisionerSimple;
    
    /**
     * A simple example showing how to create a datacenter with one host and run one
     * cloudlet on it.
     */
    public class CloudSimExample1 {
    
    	/** The cloudlet list. */
    	private static List<Cloudlet> cloudletList;
    
    	/** The vmlist. */
    	private static List<Vm> vmlist;
    
    	/**
    	 * Creates main() to run this example.
    	 *
    	 * @param args the args
    	 */
    	public static void main(String[] args) {
    
    		Log.printLine("Starting CloudSimExample1...");
    
    		try {
    			// First step: Initialize the CloudSim package. It should be called
    			// before creating any entities.
    			int num_user = 1; // number of cloud users
    			Calendar calendar = Calendar.getInstance();
    			boolean trace_flag = false; // mean trace events
    
    			// Initialize the CloudSim library
    			CloudSim.init(num_user, calendar, trace_flag);
    
    			// Second step: Create Datacenters
    			// Datacenters are the resource providers in CloudSim. We need at
    			// list one of them to run a CloudSim simulation
    			Datacenter datacenter0 = createDatacenter("Datacenter_0");
    
    			// Third step: Create Broker
    			DatacenterBroker broker = createBroker();
    			int brokerId = broker.getId();
    
    			// Fourth step: Create one virtual machine
    			vmlist = new ArrayList<Vm>();
    
    			// VM description
    			int vmid = 0;
    			int mips = 1000;
    			long size = 10000; // image size (MB)
    			int ram = 512; // vm memory (MB)
    			long bw = 1000;
    			int pesNumber = 1; // number of cpus
    			String vmm = "Xen"; // VMM name
    
    			// create VM
    			Vm vm = new Vm(vmid, brokerId, mips, pesNumber, ram, bw, size, vmm, new CloudletSchedulerTimeShared());
    
    			// add the VM to the vmList
    			vmlist.add(vm);
    
    			// submit vm list to the broker
    			broker.submitVmList(vmlist);
    
    			// Fifth step: Create one Cloudlet
    			cloudletList = new ArrayList<Cloudlet>();
    
    			//   properties
    			int id = 0;
    			long length = 400000;
    			long fileSize = 300;
    			long outputSize = 300;
    			UtilizationModel utilizationModel = new UtilizationModelFull();
    
    			Cloudlet cloudlet = new Cloudlet(id, length, pesNumber, fileSize, outputSize, utilizationModel, utilizationModel, utilizationModel);
    			cloudlet.setUserId(brokerId);
    			cloudlet.setVmId(vmid);
    
    			// add the cloudlet to the list
    			cloudletList.add(cloudlet);
    
    			// submit cloudlet list to the broker
    			broker.submitCloudletList(cloudletList);
    
    			// Sixth step: Starts the simulation
    			CloudSim.startSimulation();
    
    			CloudSim.stopSimulation();
    
    			//Final step: Print results when simulation is over
    			List<Cloudlet> newList = broker.getCloudletReceivedList();
    			printCloudletList(newList);
    
    			// Print the debt of each user to each datacenter
    			datacenter0.printDebts();
    
    			Log.printLine("CloudSimExample1 finished!");
    		} catch (Exception e) {
    			e.printStackTrace();
    			Log.printLine("Unwanted errors happen");
    		}
    	}
    
    	/**
    	 * Creates the datacenter.
    	 *
    	 * @param name the name
    	 *
    	 * @return the datacenter
    	 */
    	private static Datacenter createDatacenter(String name) {
    
    		// Here are the steps needed to create a PowerDatacenter:
    		// 1. We need to create a list to store
    		// our machine
    		List<Host> hostList = new ArrayList<Host>();
    
    		// 2. A Machine contains one or more PEs or CPUs/Cores.
    		// In this example, it will have only one core.
    		List<Pe> peList = new ArrayList<Pe>();
    
    		int mips = 1000;
    
    		// 3. Create PEs and add these into a list.
    		peList.add(new Pe(0, new PeProvisionerSimple(mips))); // need to store Pe id and MIPS Rating
    
    		// 4. Create Host with its id and list of PEs and add them to the list
    		// of machines
    		int hostId = 0;
    		int ram = 2048; // host memory (MB)
    		long storage = 1000000; // host storage
    		int bw = 10000;
    
    		hostList.add(
    			new Host(
    				hostId,
    				new RamProvisionerSimple(ram),
    				new BwProvisionerSimple(bw),
    				storage,
    				peList,
    				new VmSchedulerTimeShared(peList)
    			)
    		); // This is our machine
    
    		// 5. Create a DatacenterCharacteristics object that stores the
    		// properties of a data center: architecture, OS, list of
    		// Machines, allocation policy: time- or space-shared, time zone
    		// and its price (G$/Pe time unit).
    		String arch = "x86"; // system architecture
    		String os = "Linux"; // operating system
    		String vmm = "Xen";
    		double time_zone = 10.0; // time zone this resource located
    		double cost = 3.0; // the cost of using processing in this resource
    		double costPerMem = 0.05; // the cost of using memory in this resource
    		double costPerStorage = 0.001; // the cost of using storage in this
    										// resource
    		double costPerBw = 0.0; // the cost of using bw in this resource
    		LinkedList<Storage> storageList = new LinkedList<Storage>(); // we are not adding SAN
    													// devices by now
    
    		DatacenterCharacteristics characteristics = new DatacenterCharacteristics(
    				arch, os, vmm, hostList, time_zone, cost, costPerMem,
    				costPerStorage, costPerBw);
    
    		// 6. Finally, we need to create a PowerDatacenter object.
    		Datacenter datacenter = null;
    		try {
    			datacenter = new Datacenter(name, characteristics, new VmAllocationPolicySimple(hostList), storageList, 0);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    
    		return datacenter;
    	}
    
    	// We strongly encourage users to develop their own broker policies, to
    	// submit vms and cloudlets according
    	// to the specific rules of the simulated scenario
    	/**
    	 * Creates the broker.
    	 *
    	 * @return the datacenter broker
    	 */
    	private static DatacenterBroker createBroker() {
    		DatacenterBroker broker = null;
    		try {
    			broker = new DatacenterBroker("Broker");
    		} catch (Exception e) {
    			e.printStackTrace();
    			return null;
    		}
    		return broker;
    	}
    
    	/**
    	 * Prints the Cloudlet objects.
    	 *
    	 * @param list list of Cloudlets
    	 */
    	private static void printCloudletList(List<Cloudlet> list) {
    		int size = list.size();
    		Cloudlet cloudlet;
    
    		String indent = "    ";
    		Log.printLine();
    		Log.printLine("========== OUTPUT ==========");
    		Log.printLine("Cloudlet ID" + indent + "STATUS" + indent
    				+ "Data center ID" + indent + "VM ID" + indent + "Time" + indent
    				+ "Start Time" + indent + "Finish Time");
    
    		DecimalFormat dft = new DecimalFormat("###.##");
    		for (int i = 0; i < size; i++) {
    			cloudlet = list.get(i);
    			Log.print(indent + cloudlet.getCloudletId() + indent + indent);
    
    			if (cloudlet.getCloudletStatus() == Cloudlet.SUCCESS) {
    				Log.print("SUCCESS");
    
    				Log.printLine(indent + indent + cloudlet.getResourceId()
    						+ indent + indent + indent + cloudlet.getVmId()
    						+ indent + indent
    						+ dft.format(cloudlet.getActualCPUTime()) + indent
    						+ indent + dft.format(cloudlet.getExecStartTime())
    						+ indent + indent
    						+ dft.format(cloudlet.getFinishTime()));
    			}
    		}
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248
    • 249
    • 250
    • 251
    • 252
    • 253
    • 254
    • 255
    • 256
    • 257
    • 258
    • 259
    • 260
    • 261
    • 262
    • 263

    这个代码的目的是创造一个主机,一个任务的数据中心

    但是第一次看到这个肯定看的云里雾里的,下面就来先分析一下这些玩意是干什么的。

    • Datacenter,顾名思义就是数据中心

    • DatacenterBroker,这个是数据中心代理,负责云计算中根据用户的qos要求协调用户以及服务供应商,以后vm绑定数据中心,还有cloudlet绑定数据中心,以及vm绑定cloudlet都和这个broker有关

    • Cloudlet,这个是指令,有四个属性

      int id = 0;就是指令的id
      long length = 40000;指令的长度
      long fileSize = 300;文件的大小
      long outputSize = 300;输出的大小
      
      • 1
      • 2
      • 3
      • 4
    • UtilizationModel,在构造cloudlet的时候,这个是必须的,是一个应用的模型

    流程分析

    在这里插入图片描述

    1. 首先是cloudsim的初始化,需要三个参数CloudSim.init(num_user, calendar, trace_flag),分别是云用户的数量,日期,还有是否跟踪事件。

    2. 第二部开始构建数据中心,这里的实例有一个代码

      private static Datacenter createDatacenter(String name) {
      
      		// Here are the steps needed to create a PowerDatacenter:
      		// 1. We need to create a list to store
      		// our machine
      //使用一个list来存放我们的主机
      		List<Host> hostList = new ArrayList<Host>();
      
      		// 2. A Machine contains one or more PEs or CPUs/Cores.
      		// In this example, it will have only one core.
      		List<Pe> peList = new ArrayList<Pe>();
      //一个主机有多个pes或者是cpu
      //mips就是单位时间处理命令的量
      		int mips = 1000;
      
      		// 3. Create PEs and add these into a list.
      //创建pes并且加入到list里面
      		peList.add(new Pe(0, new PeProvisionerSimple(mips))); // need to store Pe id and MIPS Rating
      
      		// 4. Create Host with its id and list of PEs and add them to the list
      		// of machines
      		int hostId = 0;
      		int ram = 2048; // host memory (MB)主机内存
      		long storage = 1000000; // host storage应该是外存
      		int bw = 10000;//带宽
      
      		hostList.add(
      			new Host(
      				hostId,
      				new RamProvisionerSimple(ram),
      				new BwProvisionerSimple(bw),
      				storage,
      				peList,
      				new VmSchedulerTimeShared(peList)虚拟机的时间共享分配策略
      			)
      		); // This is our machine
      
      		// 5. Create a DatacenterCharacteristics object that stores the
      		// properties of a data center: architecture, OS, list of
      		// Machines, allocation policy: time- or space-shared, time zone
      		// and its price (G$/Pe time unit).
      		String arch = "x86"; // system architecture
      		String os = "Linux"; // operating system
      		String vmm = "Xen";
      		double time_zone = 10.0; // time zone this resource located
      		double cost = 3.0; // the cost of using processing in this resource
      		double costPerMem = 0.05; // the cost of using memory in this resource
      		double costPerStorage = 0.001; // the cost of using storage in this
      										// resource
      		double costPerBw = 0.0; // the cost of using bw in this resource
      		LinkedList<Storage> storageList = new LinkedList<Storage>(); // we are not adding SAN
      													// devices by now
      
      		DatacenterCharacteristics characteristics = new DatacenterCharacteristics(
      				arch, os, vmm, hostList, time_zone, cost, costPerMem,
      				costPerStorage, costPerBw);
      
      		// 6. Finally, we need to create a PowerDatacenter object.
      		Datacenter datacenter = null;
      		try {
      			datacenter = new Datacenter(name, characteristics, new VmAllocationPolicySimple(hostList), storageList, 0);
      		} catch (Exception e) {
      			e.printStackTrace();
      		}
      
      		return datacenter;
      	}
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      • 47
      • 48
      • 49
      • 50
      • 51
      • 52
      • 53
      • 54
      • 55
      • 56
      • 57
      • 58
      • 59
      • 60
      • 61
      • 62
      • 63
      • 64
      • 65
      • 66
      • 67
    3. 创建虚拟中心代理

    4. 创建虚拟机

    5. 创建云任务,设定任务数量

    6. 分配任务到虚拟机上

    7. 启动仿真

  • 相关阅读:
    RTSP/Onvif安防监控平台EasyNVR抓包命令tcpdump使用不了,该如何解决?
    Java入门教程(14) ——Scanner 获取键盘输入
    高性能云原生数据对象存储MinIO实战-上
    SpringBoot整合Redis数据库-小白也能轻松上手-自带云Redis数据库
    sql-labs SQL注入平台——第二关Less-2 GET - Error based - Intiger based (基于错误的GET整型注入)
    IOS – OpenGL ES 图像侵蚀边缘色彩模糊 GPUImageRGBErosionFilter
    特征工程 - 当你遇到正负样本不均
    vim手册(vim cheatsheet)
    列表推导式,Python中最好的特性?可读性?
    关于CSDN的那些你不知道的小知识
  • 原文地址:https://blog.csdn.net/qq_43445553/article/details/126324972