Cloudsim入门

这篇具有很好参考价值的文章主要介绍了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的时候,这个是必须的,是一个应用的模型

流程分析

Cloudsim入门

  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. 启动仿真文章来源地址https://www.toymoban.com/news/detail-452995.html

到了这里,关于Cloudsim入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • GitHub必会小技巧,教你如何快速找到好项目,学编程必备_github搜索项目技巧

    学编程跟代码打交道,如果你不会使用GitHub,你可能需要回炉重造了。很多新手还没有认识到GitHub的强大,不管是学习、毕设和工作,都能在上面找到很多好用的项目资源。 但是找项目一直都是新手的最头疼的问题,尤其是盲搜项目,那就更难了。那么今天, 教大家几个G

    2024年04月17日
    浏览(43)
  • 如何从github拉取代码(入门篇)

    一、安装 Git: Git 可以在多种操作系统上使用,包括 Windows、macOS 和 Linux。以下是在 Windows 上安装 Git 的步骤: 访问 Git 的官方网站 https://git-scm.com/downloads。 在网站上选择适合你的操作系统版本的 Git 安装程序。 下载安装程序并运行。 在安装程序的向导中选择默认选项,直到

    2024年02月13日
    浏览(35)
  • github注册,入门及如何提交代码(图形化界面方式)

    GitHub是一个代码托管网站 全球最大的同性交友网站 ,你可以在网站上创建代码仓库。当你写代码时,你可以把你的代码托管到各个代码仓库里去,可以设置私有/公有属性。 GitHub上有成千上万开源项目,他们愿意将代码公开,其他人可以去改造代码,并将改造的成果贡献出来

    2024年02月08日
    浏览(44)
  • GitHub的使用(入门)

    本文参考和部分图片来源如何上传代码到github?,但本地操作与其不同 Git Bash的复制快捷键为ctrl+insert,粘贴快捷键为:shift+insert 官网下载地址:Git - Downloads ,选择windows版本,默认的版本是windows 64;也点击“Older releases”选择与系统匹配的版本进行下载(32bit/64bit) 安装步骤可

    2023年04月08日
    浏览(22)
  • GitHub入门指南:一步一步教你使用GitHub

    引言: GitHub是一个流行的代码托管平台,它提供了强大的版本控制和协作功能,对于开发者来说是一个不可或缺的工具。本文将一步一步地教你如何使用GitHub,从注册账号到代码同步,让你能够快速上手并充分利用这个平台。 打开GitHub官网(github.com)。 点击右上角的\\\"Sign

    2024年02月15日
    浏览(39)
  • Github基础入门(2):github打不开?保姆级教程教你流畅使用GIthub

     上篇帖子简单介绍了git,github及其注册,今天想写如何解决github打不开的问题。 在网址github后面加一个fast即可 例, 原网址:https://github.com/... 现在:https://github fast .com/... watt toolkit可以加速github的访问服务。 可以去官网,可以直接去微软商店搜索:watt toolkit 打开后,选择下

    2024年01月19日
    浏览(45)
  • 全文搜索引擎 Elasticsearch 入门使用

    目录 1、安装 2、基本概念 2.1 Node 与 Cluster 2.2 Index 2.3 Document  2.4 Type 3、新建和删除 Index 4、中文分词设置  5、数据操作  5.1 新增记录  5.2 查看记录   5.3 删除记录 5.4 更新记录  6、数据查询 6.1 返回所有记录 6.2 全文搜索  6.3 逻辑运算 7、参考链接 本文从零开始,讲解如何

    2024年02月09日
    浏览(39)
  • 【超简单】一文入门在Ubuntu系统使用GitHub

    【大家好,我是编程的赛赛,专注于保姆级代码教程】 总览        Github是基于git的代码仓库,对于开发项目的科研者或者工程师,代码仓库都是不可多得的版本控制与多端编程工具,今天这篇文章带你轻松Github入门,简单的项目本文的操作足矣。         当然,国内用

    2024年02月08日
    浏览(28)
  • 快速入门:使用 Gemini Embeddings 和 Elasticsearch 进行向量搜索

    Gemini 是 Google DeepMind 开发的多模态大语言模型家族,作为 LaMDA 和 PaLM 2 的后继者。由 Gemini Ultra、Gemini Pro 和 Gemini Nano 组成,于 2023 年 12 月 6 日发布,定位为 OpenAI 的竞争者 GPT-4。 本教程演示如何使用 Gemini API 创建嵌入并将其存储在 Elasticsearch 中。 Elasticsearch 将使我们能够执

    2024年01月21日
    浏览(39)
  • Github Desktop 下载、安装、汉化和卸载(新手入门使用教程)

    打开GitHub Desktop官网https://desktop.github.com/ 点击 download for Windows(64bit),下载 GitHub Desktop 启动安装 双击下载好的安装包,启动安装 安装进度 显示安装进度页面,稍微耐心等等,页面消失即安装完成 GithubDesktopZhTool为GitHubDesktop汉化工具。 注:遇到汉化失败,重试一下子。 意

    2024年04月17日
    浏览(114)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包