当前位置: 首页 > article >正文

CloudSim 里CloudletScheduler类

CloudletScheduler 类

简介

CloudletScheduler 是一个核心组件,在云计算仿真环境中,它负责定义虚拟机(VM)如何调度和执行其Cloudlets(云任务)。

  • 抽象类:CloudletScheduler 是一个抽象类,这意味着它不能直接实例化,而是需要通过子类来实现具体的功能。

  • 调度策略:这个类代表了虚拟机用来运行其Cloudlets的调度策略。调度策略决定了Cloudlets如何在虚拟机上分配和执行,包括它们如何共享或分配CPU时间、处理元素(PE)等资源。

  • 执行Cloudlets:任何扩展 CloudletScheduler 类的子类都必须实现执行Cloudlets的功能。这意味着子类需要提供具体的逻辑来管理Cloudlets的执行,包括开始、暂停、恢复和结束Cloudlets。

  • Cloudlet管理接口:CloudletScheduler 类还实现了Cloudlet管理的接口。这可能包括添加、删除、更新和查询Cloudlets状态的方法,以及可能的其他管理功能。

  • 每个VM的实例:每个虚拟机都需要有自己的 CloudletScheduler 实例。这是因为每个虚拟机可能有不同的资源和调度需求,因此需要独立的调度器来管理其Cloudlets。

CloudletScheduler 类是云计算仿真工具(如CloudSim)中的一个关键组件,它允许开发者模拟和研究不同的调度策略,以优化资源使用效率、减少任务执行时间、提高系统吞吐量等。通过扩展这个抽象类,开发者可以创建自定义的调度器,以适应特定的应用场景或研究目标。

其他的类如
CloudletSchedulerDynamicWorkload 链接
CloudletSchedulerSpaceShared链接
CloudletSchedulerTimeShared 链接
继承自它

类属性

之前的运行时间

	/** The previous time. */
	private double previousTime;

当前可用的计算频率列表

	/** The list of current mips share available for the VM using the scheduler.
	 * It is provided by {@link CloudletScheduler#updateCloudletsProcessing(double, List)} method.
	 * at every simulation step. */
	private List<Double> currentMipsShare;

获得可用的计算能力

	private double currentCapacity;

等待队列

	/** The list of cloudlet waiting to be executed on the VM. */
	protected List<? extends Cloudlet> cloudletWaitingList;

正在执行的任务

	/** The list of cloudlets being executed on the VM. */
	protected List<? extends Cloudlet> cloudletExecList;

暂停的任务

	/** The list of paused cloudlets. */
	protected List<? extends Cloudlet> cloudletPausedList;

已经完成的任务

	/** The list of finished cloudlets. */
	protected List<? extends Cloudlet> cloudletFinishedList;

失败的任务

	/** The list of failed cloudlets. */
	protected List<? extends Cloudlet> cloudletFailedList;

最近完成的任务

	/** Buffer list of the latest finished cloudlets. */
	protected List<Cloudlet> cloudletJustFinishedList;

类方法

初始化

	/**
	 * Creates a new CloudletScheduler object. 
	 * A CloudletScheduler must be created before starting the actual simulation.
	 * 
	 * @pre $none
	 * @post $none
	 */
	public CloudletScheduler()

更新运行时间

	/**
	 * Updates the processing of cloudlets running under management of this scheduler.
	 * 
	 * @param currentTime current simulation time
	 * @param mipsShare list with MIPS share of each Pe available to the scheduler
	 * @return the predicted completion time of the earliest finishing cloudlet, 
         * or 0 if there is no next events
	 * @pre currentTime >= 0
	 * @post $none
	 */
	public double updateCloudletsProcessing(double currentTime, List<Double> mipsShare)

	@Deprecated
	public double updateVmProcessing(double currentTime, List<Double> mipsShare)

更新正在等待的任务

	/**
	 * Update the cloudlets currently waiting to execute.
	 * The default implementation (i.e., no-op) is suitable for time-shared scheduling.
	 *
	 * @param currentTime current simulation time
	 * @param info        info Any data you may need to implement the update logic
	 */
	protected void updateWaitingCloudlets(double currentTime, Object info)

		/**
	 * Receives a cloudlet to be executed in the VM managed by this scheduler.
	 * 
	 * @param cl the submitted cloudlet
	 * @return expected finish time of this cloudlet, or 0 if it is in a waiting queue
	 * @pre gl != null
	 * @post $none
	 */
	public double cloudletSubmit(Cloudlet cl)

取消任务的执行

	/**
	 * Cancels execution of a cloudlet.
	 * 
	 * @param cloudletId ID of the cloudlet being canceled
	 * @return the canceled cloudlet, $null if not found
	 * @pre $none
	 * @post $none
	 */
	public Cloudlet cloudletCancel(final int cloudletId) 

暂停一个任务的执行

	/**
	 * Pauses execution of a cloudlet.
	 * 
	 * @param cloudletId ID of the cloudlet being paused
	 * @return $true if cloudlet paused, $false otherwise
	 * @pre $none
	 * @post $none
	 */
	public boolean cloudletPause(int cloudletId)

回复一个暂停的任务

	/**
	 * Resumes execution of a paused cloudlet.
	 * 
	 * @param clId ID of the cloudlet being resumed
	 * @return expected finish time of the cloudlet, 0.0 if queued
	 * @pre $none
	 * @post $none
	 */
	public abstract double cloudletResume(int clId);

完成任务

	/**
	 * Processes a finished cloudlet.
	 * 
	 * @param cl finished cloudlet
	 * @pre rgl != $null
	 * @post $none
	 */
	public void cloudletFinish(Cloudlet cl)

得到当前任务的状态

	/**
	 * Gets the status of a cloudlet.
	 * 
	 * @param cloudletId ID of the cloudlet
	 * @return status of the cloudlet, -1 if cloudlet not found
	 * @pre $none
	 * @post $none
	 *
	 */
	public Cloudlet.CloudletStatus getCloudletStatus(final int cloudletId)

检查是否有已经完成的任务

	/**
	 * Informs if there is any cloudlet that finished to execute in the VM managed by this scheduler.
	 * 
	 * @return $true if there is at least one finished cloudlet; $false otherwise
	 * @pre $none
	 * @post $none
         * //TODO the method name would be isThereFinishedCloudlets to be clearer
	 */
	public boolean isFinishedCloudlets() 

返回下一个完成的任务

	/**
	 * Returns the next cloudlet in the finished list.
	 * 
	 * @return a finished cloudlet or $null if the respective list is empty
	 * @pre $none
	 * @post $none
	 */
	public Cloudlet getNextFinishedCloudlet()

返回虚拟机中运行的任务

	/**
	 * Returns the number of cloudlets running in the virtual machine.
	 * 
	 * @return number of cloudlets running
	 * @pre $none
	 * @post $none
	 */
	public int runningCloudlets()

返回一个任务进行任务迁移

	/**
	 * Returns one cloudlet to migrate to another vm.
	 * 
	 * @return one running cloudlet
	 * @pre $none
	 * @post $none
	 *
	 * @TODO: Remo Andreoli: No clue why it's removing the first element
	 */
	public Cloudlet migrateCloudlet() 

获得任务的预计完成时间


	/**
	 * Get the estimated completion time of a given cloudlet.
	 *
	 * @param cl the cloudlet
	 * @param time the time
	 * @return the estimated finish time
	 */
	public double getEstimatedFinishTime(Cloudlet cl, double time) 

获得总CPU利用率

	/**
	 * Gets total CPU utilization percentage of all cloudlets, according to CPU UtilizationModel of 
         * each one.
	 * 
	 * @param time the time to get the current CPU utilization
	 * @return total utilization
	 */
	public double getTotalUtilizationOfCpu(double time)

获得当前的请求频率(分内核)

	/**
	 * Gets the current requested mips.
	 * 
	 * @return the current mips
	 */
	public List<Double> getCurrentRequestedMips()

获得总请求计算量

	/**
	 * Gets the total of the current requested mips.
	 * 
	 * @return the current mips
	 */
	public double getCurrentRequestedTotalMips()

获得当前总可用的计算能力

	/**
	 * Gets the total current available mips for the Cloudlet.
	 * 
	 * @param rcl the rcl
	 * @param mipsShare the mips share
	 * @return the total current mips
         * //TODO In fact, this method is returning different data depending
         * of the subclass. It is expected that the way the method use to compute
         * the resulting value can be different in every subclass,
         * but is not supposed that each subclass returns a complete different 
         * result for the same method of the superclass.
         * In some class such as NetworkCloudletSpaceSharedScheduler (OLD CLASS),
         * the method returns the average MIPS for the available PEs,
         * in other classes such as {@link CloudletSchedulerDynamicWorkload} it returns
         * the MIPS' sum of all PEs.
	 */
	public abstract double getTotalCurrentAvailableMipsForCloudlet(Cloudlet rcl, List<Double> mipsShare);

获得当前总请求的计算能力

	/**
	 * Gets the total current requested mips for a given cloudlet.
	 * 
	 * @param cl the cloudlet
	 * @param time the time
	 * @return the total current requested mips for the given cloudlet
	 */
	public abstract double getTotalCurrentRequestedMipsForCloudlet(Cloudlet cl, double time);

获得当前分配给任务的计算能力

	/**
	 * Gets the total current allocated mips for cloudlet.
	 * 
	 * @param cl the cloudlet
	 * @param time the time
	 * @return the total current allocated mips for cloudlet
	 */
	public abstract double getTotalCurrentAllocatedMipsForCloudlet(Cloudlet cl, double time);

当前请求的内存

	/**
	 * Gets the current requested ram.
	 * 
	 * @return the current requested ram
	 */
	public double getCurrentRequestedUtilizationOfRam() 

获得当前请求的带宽

	/**
	 * Gets the current requested bw.
	 * 
	 * @return the current requested bw
	 */
	public double getCurrentRequestedUtilizationOfBw() 

获得之前的运行时间

	/**
	 * Gets the previous time.
	 * 
	 * @return the previous time
	 */
	public double getPreviousTime()

设置之前的运行时间

	/**
	 * Sets the previous time.
	 * 
	 * @param previousTime the new previous time
	 */
	protected void setPreviousTime(double previousTime) 

设置计算资源的分配情况

	/**
	 * Sets the current mips share.
	 * 
	 * @param currentMipsShare the new current mips share
	 */
	protected void setCurrentMipsShare(List<Double> currentMipsShare)

获得可用的核心数

	/**
	 * The number of PEs currently available for the VM using the scheduler,
	 * according to the current mips share provided
	 */
	public int getCurrentPEs()

计算任务可用的计算量

	/** Get the individual MIPS capacity available for each cloudlet, according to the number of
	 *  available PE provided by the current mip share.
	 */
	public double getCurrentCapacity()

更新任务可用的计算量

	/**
	 * ASSUMPTION: all PEs have the same capacity.
	 * @return capacity
	 */
	public double updateCurrentCapacity()

	@Deprecated
	protected double getCapacity(List<Double> mipsShare)

得到等待的任务队列

	/**
	 * Gets the cloudlet waiting list.
	 * 
	 * @param <T> the generic type
	 * @return the cloudlet waiting list
	 */
	@SuppressWarnings("unchecked")
	public <T extends Cloudlet> List<T> getCloudletWaitingList()

设置任务等待队列

	/**
	 * Cloudlet waiting list.
	 * 
	 * @param <T> the generic type
	 * @param cloudletWaitingList the cloudlet waiting list
	 */
	protected <T extends Cloudlet> void setCloudletWaitingList(List<T> cloudletWaitingList)

得到任务执行队列

	/**
	 * Gets the cloudlet exec list.
	 * 
	 * @param <T> the generic type
	 * @return the cloudlet exec list
	 */
	@SuppressWarnings("unchecked")
	public <T extends Cloudlet> List<T> getCloudletExecList()

设置任务执行队列

	/**
	 * Sets the cloudlet exec list.
	 * 
	 * @param <T> the generic type
	 * @param cloudletExecList the new cloudlet exec list
	 */
	protected <T extends Cloudlet> void setCloudletExecList(List<T> cloudletExecList)

得到任务暂停队列

	/**
	 * Gets the cloudlet paused list.
	 * 
	 * @param <T> the generic type
	 * @return the cloudlet paused list
	 */
	@SuppressWarnings("unchecked")
	public <T extends Cloudlet> List<T> getCloudletPausedList()

设置任务暂停队列

	/**
	 * Sets the cloudlet paused list.
	 * 
	 * @param <T> the generic type
	 * @param cloudletPausedList the new cloudlet paused list
	 */
	protected <T extends Cloudlet> void setCloudletPausedList(List<T> cloudletPausedList)

得到任务完成队列

	/**
	 * Gets the cloudlet finished list.
	 * 
	 * @param <T> the generic type
	 * @return the cloudlet finished list
	 */
	@SuppressWarnings("unchecked")
	public <T extends Cloudlet> List<T> getCloudletFinishedList()

设置任务完成队列

	/**
	 * Sets the cloudlet finished list.
	 * 
	 * @param <T> the generic type
	 * @param cloudletFinishedList the new cloudlet finished list
	 */
	protected <T extends Cloudlet> void setCloudletFinishedList(List<T> cloudletFinishedList)

得到任务失败队列

	/**
	 * Gets the cloudlet failed list.
	 * 
	 * @param <T> the generic type
	 * @return the cloudlet failed list.
	 */
	@SuppressWarnings("unchecked")
	public <T extends Cloudlet> List<T>  getCloudletFailedList()

设置任务失败队列

	/**
	 * Sets the cloudlet failed list.
	 * 
	 * @param <T> the generic type
	 * @param cloudletFailedList the new cloudlet failed list.
	 */
	protected <T extends Cloudlet> void setCloudletFailedList(List<T> cloudletFailedList)

http://www.kler.cn/a/396413.html

相关文章:

  • Apache Paimon、Apache Hudi、Apache Iceberg对比分析
  • Python读写Excel的全面教程
  • JDBC-Mysql 时区问题详解
  • 4. Spring Cloud Ribbon 实现“负载均衡”的详细配置说明
  • Flutter:input输入框
  • linux,一、部署LNMP环境二、配置动静分离三、地址重写四、编写systemd Unit文件
  • 使用importlib动态导入python类
  • Codeforces Round 987 (Div. 2)(前四道)
  • 开发需求总结17-vue echart报错:Cannot read property get ‘Attribute‘ of undefined
  • 基于PHP技术的校园站的设计与实现
  • ​‌华为交换机在Spine-Leaf架构中的使用场景​
  • 我谈二值形态学基本运算——腐蚀、膨胀、开运算、闭运算
  • java xml 文本解析
  • git如何开启SSH?
  • vcenter service基本异常处理
  • rom定制系列------红米10x 5G版本安卓12-miui14批量线刷固件
  • 鸿蒙实战:页面跳转
  • FromData格式提交接口时入参被转成JSON格式问题
  • 前端(3)——快速入门JaveScript
  • uni-app移动端与PC端兼容预览PDF文件
  • Rust 语言学习笔记(四)
  • Qt中实现旋转动画效果
  • Electron 项目启动外部可执行文件的几种方式
  • 网络安全之WINDOWS端口及病毒编写
  • 发国外SCI/SSCI/AHCI,文章被WOS数据库漏检,应该如何催检索?附催检索(信)邮件模板!
  • CAP与BASE分布式理论