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()));
			}
		}
	}

}

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

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

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

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

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

    int id = 0;就是指令的id
    long length = 40000;指令的长度
    long fileSize = 300;文件的大小
    long outputSize = 300;输出的大小
    
  • 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;
    	}
    
  3. 创建虚拟中心代理

  4. 创建虚拟机

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

  6. 分配任务到虚拟机上

  7. 启动仿真

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CloudSim DE,也就是基于云计算仿真框架CloudSim开发的一个扩展模块,主要用于在云环境下进行分布式任务调度和能耗优化的研究。 CloudSim DE在CloudSim的基础上引入了分布式任务调度算法和能耗优化算法,通过模拟云环境中的虚拟机、数据中心和用户等实体的行为,以及调度和能耗优化策略的效果,从而评估和比较不同调度和优化算法的性能。 CloudSim DE的主要特点包括: 1. 分布式任务调度:可以模拟云环境中的分布式任务调度过程,根据任务需求和资源可用性等因素,动态决策任务分配和调度,以提高系统性能和资源利用率。 2. 能耗优化:可以模拟云环境中的能耗优化过程,通过优化虚拟机的分布和资源管理等策略,降低数据中心的能耗和运营成本。 3. 比较和评估:可以根据用户需求和实际场景,选择不同的任务调度算法和能耗优化策略,并通过对比不同算法的性能指标来评估其优劣和适用性。 CloudSim DE对于云计算研究和应用具有重要意义,它为研究人员提供了一个可靠且方便的仿真平台,可以帮助他们设计和验证新的任务调度和能耗优化算法,从而提升云环境的性能和资源利用效率。同时,CloudSim DE也为用户提供了一种基于实验仿真的方式,来比较和选择最优的任务调度和能耗优化策略,帮助用户更好地管理和使用云计算资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值