第九章 分布式调度(重点)

本文详细探讨了分布式调度中的各种算法,包括调度目标、有效性评价参数、分类(如非抢占式/抢占式、适应性/非适应性),重点关注静态调度的建模、任务聚类与分配,以及动态调度的负载平衡策略。还介绍了甘特图在任务调度中的应用和进程转移与远程执行的考虑因素。
摘要由CSDN通过智能技术生成

第九章 分布式调度

1调度算法

一、调度算法的目标

分布式调度的基本目标:分布式调度的基本目标是尽快得到计算结果和有效地利用资源

  • 负载均衡:维持整个分布式系统上各个资源上的负载大致相同
  • 负载共享:防止某个处理机上的负载过重

负载共享比负载均衡更容易达到。负载平衡是为了提高整个系统的流量,而负载共享是为了缩短特定程序的执行时间。

二、调度算法的有效性评价

有许多参数用来确定或衡量一个调度算法的有效性:

  • 通信代价:这个参数考虑的是向一个给定的节点传送或者从一个给定的节点接受一个报文所花费的时间,如果将某个进程分配到一个执行地点之后,这个进程不必和其他的任何进程通信,那么代价就低。
  • 执行代价:这个参数反映的是将一个进程分配到一个指定的执行节点,在这个节点的执行环境下,执行这个程序所需要的额外开销。(因为可能这个节点的环境、操作系统 之类的不适合这个进程,所以有额外的开销)
  • 资源利用率:表明当前各个节点的负载情况,给一个进程分配的执行节点是否合适。

三、调度算法的分类

在这里插入图片描述

其他的一些分类方法:

  • 非抢先式的和抢先式的:对非抢先式的调度算法,一个进程开始执行后就不能中断。在抢先式调度算法中,进程可以中断,从一个处理机上移走,到另一个处理机上继续执行。
  • 适应性和非适应性的:非适应性的调度算法只能使用一种负载分配策略,不会根据系统的反馈改变自己的行为,而适应性的调度算法能根据系统的反馈调整自己的行为,采用不同的负载分配策略。

在分布式系统当中必须要对调度层次做一个选择,有两个层次,局部调度解决在单个节点上为个作业分配处理资源的问题,而全局调度解决的是选择那个处理机来解决问题。我们在这里主要考虑全局调度。

而静态调度和动态调度所考虑的是进程到处理机的分配时间及资源利用率。

静态调度

  1. 调度时机:在任务执行之前进行。一旦任务开始执行,调度决策通常不会改变。
  2. 灵活性:较低。静态调度不适应运行时环境的变化,因为所有的调度决策都是预先做出的。
  3. 资源利用率:可能不是最优的,特别是在系统负载动态变化的环境下。

动态调度

  1. 调度时机:在任务执行期间进行。调度决策根据当前系统状态实时做出。
  2. 灵活性:较高。动态调度能够适应运行时环境的变化,如任务延迟、新任务的到来、资源的变化等。
  3. 资源利用率:通常更高,因为调度器可以实时地根据系统的当前状态优化资源分配。

**从调度算法的有效性来看,调度算法分为了最优调度算法和次优调度算法。**最优调度算法要求调度者必须获得所有进程的状态信息和系统中所有相关的可用信息。一般来说最优调度算法是一个NP完全性问题,所以在实际的系统中,常常采用次优的调度算法。

次优调度算法被分为两类:近似的次优调度算法和启发式的次优调度算法

①近似的次优调度常和最优调度使用相同的算法,但是近似的次优调度不搜索这个算法的所有解空间,而是在这个算法的解空间中的一个子集中搜索,目的是尽快地找到一个较好的解。而最优调度则是搜索这个算法的整个解空间,目的是获得最好的解。使用近似的次优调度算法必须能够判定所得到的解是否是可以被接受的,也就是说,必须能够确定最优解和次优解之间的近似程度。

②启发式的次优调度算法常使用比较简明的规则和一些直觉的规则来进行调度。这些启发式的规则往往是不能证明其正确性,在特定情况下可能还是错误的,但是在绝大多数的情况下是能够被接受的。以下为启发式调度算法常用的启发式规则:

  • 相互依赖性较大的进程,由于它们之间常有比较多的进程通信应该分配到比较接近的执行节点上,可能的话,应该在同一个节点上。

  • 访问共享文件的进程应该分配到比较接近的执行节点上,可能的话,应该分配在文件服务员节点上。

  • 很少有内在关系的进程可以分布在不同的机器上。

  • 如果一个节点已经是重负载的,不应该向该节点分配另外一个进程。

2静态调度

一、静态调度建模

静态调度算法的目标是调度一个任务集合,使他们在各个目标节点上有最短的执行时间。

总体上来说,设计调度策略时需要考虑的三个问题为:处理机的互联、任务的划分、任务的分配。通常用图模型表示任务和处理机的结构,可以用任务优先图和任务交互作用图对任务集合建模

任务优先图:有向无环图DAG,图中每个链接定义了任务间的优先关系,节点和链接上的标记表示任务的执行时间和任务完成后启动后续任务所需的时间间隔。

在这里插入图片描述

任务交互作用图:连接定义了两个任务间的相互关系,每个链接赋予了一对数,分别表示这两个任务在同一个处理机上时的通信开销和在不同处理机上时的通信开销

在这里插入图片描述

二、任务聚类与分配(重点)

任务聚类的粒度:一个给定的任务聚类的粒度被定义为 任务的计算量/通信量 如果粒度太大,就会限制并行性,因为潜在的并行小任务可能被聚类进同一个大任务而分配给一个处理器(可以认为一共10各处理器,100个小任务,现在分成了两个聚类,只用了2个处理器)。粒度太小,进程切换和通信的开销就会增加,从而降低性能(假设100个任务,分成了100个聚类,cpu就要来回切换)。

任务聚类:任务聚类就是把任务图当作一个小整体,将图中的小任务(节点)或分成不同的聚类,聚类中的小任务串行执行,不同的聚类之间并行执行。有两种策略:

  • 将不相关的任务映射到一个聚类中(非线性聚类,通过串行化减少并行化,防止较大的通信开销)
  • 将DAG中一条优先路径上的任务映射到一个聚类中(线性聚类,完全利用DAG里面的并行性,最大化并行性)

常见的聚类算法:

  • 关键路径聚类:关键路径(最长路径)一般用在线性聚类中,依赖于任务优先图中关键路径的细粒度任务必须串行执行。因为关键路径是最长的,你把任何一个小任务延迟了都会导致整体的延迟。
  • 消除通信延迟的聚类:这个方法的关键之处在于消除通信的额外开销,所以要把通信频繁的节点聚集成一类,通常的方法是将一个节点的后继节点与节点自身聚集成一类,只要总的执行时间不会被延迟
  • 任务复制:为了消除任务间的通信开销,将任务在处理机上进行复制有时是最有效的方法。它是任务划分的一个可选方法。任务复制不仅能保留程序最初的并行性,同时也能减少通信开销。

在这里插入图片描述

在这里插入图片描述

三、基于任务优先图的任务调度(重点!!)

1、甘特图

甘特图(gantt chart)能够最有效描述进程对处理器的分配情况。甘特图以处理器为纵坐标,以时间为横坐标。图中的每个方块表示进程在某个系统中的开始时间、持续时间和结束时间。处理器内的时间延迟和处理器间的时间延迟都能够在图中体现。

在这里插入图片描述

在这里插入图片描述

如果至少有一个聚类中包含两个独立的任务,则聚类是非线性的;否则,聚类就是线性的。

在这里插入图片描述

2、分叉与合并操作

一个任务优先图可以认为是许多分叉和合并操作的集合,分叉x(合并x)的粒度是:

在这里插入图片描述

Ck表执行时间 Lk表延迟

在这里插入图片描述

而任务优先图G的粒度为:

在这里插入图片描述

如果g(x)>1,合并x或分叉x就是粗粒度;否则就是细粒度。同样如果g(G)>1,图G就是粗粒度,否则就是细粒度。当表示一个应用程序的给定的有向无环图DAG(任务优先图)是粗粒度时,也就是它的一个链接上的通信代价小于分叉或者合并操作连接的相邻节点的计算代价,任何非线性聚类可以被转换成具有更少或相等执行时间的线性聚类。注意,上面的结论暗示了一个粗粒度程序的线性聚类性能优于任何非线性聚类。然而,对细粒度程序而言,可能存在也可能不存在一个非线性聚类优于线性聚类。

在这里插入图片描述

3、两种最优调度算法

两种方法都假设通信代价可以忽略,优先图中的每个节点的执行时间是一样的,即一个时间单元。具体的限制如下:

  • 在第一个有约束的调度问题中,优先图是一棵树
  • 在第二个有约束的调度问题中,只有两个处理器可以用。

两种调度算法都是最高层有限方法,也就是通过节点的优先级来选择节点。

在这里插入图片描述

在这里插入图片描述

四、基于任务相互关系图的任务调度

3动态调度

动态调度算法使用处理机节点的负载信息来做调度的决策,可以恢复负载平衡。而静态调度算法没有使用这些信息。

全局动态调度机构使用调度平衡算法来实现动态调度

一、动态调度算法的组成要素

  • 启动策略:决定谁应该激活负载平衡
  • 转移策略:决定一个节点是否在合适的状态参与负载转移
  • 选择策略:选择最适合转移最能起平衡作用的任务,并发送给合适的目标处理器
  • 收益性策略:量化系统中负载不平衡程度,并且作为系统负载平衡潜在受益的估计,评估系统负载平衡是否是有收益的。
  • 定位策略:寻找合适的节点共享负载。
  • 信息策略:决定收集系统中其他节点状态信息的时机、收集的方法和收集的信息。

二、动态负载平衡算法的分类

①全局的和局部的。局部负载平衡算法在相邻的节点间转移工作负载。全局负载平衡算法不仅在相邻节点间转移负载,还在全系统内计算负载,根据全局情况调整处理器负载。

②集中控制的和分散控制的。在集中控制算法中,中心控制器收集状态信息,做出负载平衡决策。分散控制算法把控制机制分散到全系统的各个节点。混合式负载平衡算法是集中控制和分散控制算法的折衷。

③不协作的和协作的。在不协作方法中,各个节点不知道系统中其他节点的状态,独立决定自己的定位和负载转移规则。在协作算法中,节点间相互配合来决定负载平衡决策。

④适应性的和非适应性的。在适应性算法中,负载平衡策略根据系统状态变化而改变;而非适应性方法中,这些策略是不变的。

三、动态负载平衡算法的设计决策

非抢先式的和抢先式的:抢先式的主要目的是负载共享,节点只分配新到达的任务,又称为任务放置(placement)。抢先式的算法的主要目的是充分利用系统资源,能够重新分配正在运行的任务,又称为进程迁移(migration)。

②**采用何种信息策略。**与信息策略有关的问题有:(a)周期性收集信息还是非周期性收集信息;(b)收集局部信息还是全局信息;©处理器负载指标。

③**集中控制算法和分散控制算法:**集中控制算法有一个中心处理器从系统中其他处理器收集负载信息。分散控制算法是通过每个处理器发送自己负载变化情况给所有处理器或者它的邻居来实现的。

④**采用何种启动策略。**启动策略有三种:发送者启动的、接受者启动的和对称启动的。

⑤**资源复制。**任务转移的时候,涉及到的文件和数据也必须被复制到目标处理器。为了减少转移的代价,常用的任务和数据可以事先被复制和分配到不同的处理器。

⑥**进程分类。**依据特征来区分进程类型。如果系统中运行的进程有很大的区别,它们就必须分在不同的类。当系统中有多个进程类型时,负载平衡算法必须考虑进程的类型,根据不同的类型做出改变。

四、动态负载平衡算法使用的参数

①**系统的规模。**系统中处理器的数目是影响负载平衡决策的一个参数。

系统负载情况。 需要避免颠簸现象。

③**处理器的输入流量。**进程可以以任何随机模式到达处理器,如果处理器能够测定自己的输入流量并且和其他处理器比较,它就能比较容易评估系统即时的负载水平,从而对任务转移做出更好的决策。

④**转移的负载门限。**系统中触发任务转移的负载门限是一个关键参数,因为选择不当会导致系统不平衡和任务转移的连锁反应。

⑤**任务大小。**一般来说,转移一个运行时间太短的任务是不恰当的。类似的,太大的进程或者涉及到大量数据和文件的进程最好在本地处理器上执行。

⑥**管理成本。**组成管理成本的主要因素是:处理器当前负载的测量、处理器决策使用的负载信息、决策发生的位置和处理器间任务的传送。

⑦**负载平衡的视界。**一个节点能够在其邻接节点范围内为一个任务寻找可能的目标节点,在其上运行该任务。这个邻接节点范围的直径称为视界(horizon)。这个参数设置了寻找目标节点过程中探查的邻接节点的数量。

⑧**资源要求。**任务对系统资源的要求会影响它的转移。需要较多资源的进程可能会持续等待资源变得可用,这就可能影响系统的响应时间。

4全局动态调度机构

一、全局调度机构的主要目标

①**性能要求:**调度机构占用整个系统的开销最小,它们不应该占用不使用此机构的应用程序的时间,也不应该使被调度的应用程序的执行产生大的延迟。

②**支持的系统规模:**应该能支持几百个甚至上千个工作站。

③**容错:**一个或几个机器崩溃时,系统的远程执行设备应该在几秒钟之后能够继续工作。

④**公平性:**不管分配作业到哪个机器上,为该作业提供的性能都是同样可接受的。

二、全局调度机构解决的问题

①有关负载的信息是如何传送的,使用公布的还是回答查询的办法?即选择哪一种信息策略。

②谁主动发起远程执行的请求,是作业进入的顾客节点(源节点)还是处理此作业的节点(服务员节点)?一个物理节点处理机可以是一个源节点,也可以是一个服务员节点。在服务员主动的情况下,此服务员主动寻找工作。这里所要解决的是选择什么样的启动策略。

③谁来决策为一个作业(程序)选择一个合适的执行主机,请求的发起者还是一个集中的服务员节点?这里要解决的是定位策略的问题。

三、集中式调度

集中式调度是在系统中有一个中央调度服务员,负责搜集状态信息并做出全部调度决策。各机器周期性地向它发送状态更新报文,报告它们的负载信息;顾客向它发送远程执行请求。中央调度服务员根据负载情况,建立一个主机候选者的有序表,依次选择主机,对顾客的远程执行请求进行响应。使用中央调度服务员查询状态会减少报文传送数目。但是因为机器由于本地活动可以在任何时间改变其负载,所以将产生状态信息过时的问题。

解决集中式调度的容错问题的典型方法是提供多个备用服务员。

集中调度的最后一个问题是在何处运行调度程序。调度程序没有任何特殊要求,可放到任何空闲机器上,并可根据需要迁移。

集中式方法支持的规模较大,但集中式方法可靠性较差,不易扩充

四、分散式调度

在全分散方案中,每个机器自己进行选择活动。它必须不断地记录整个系统状态或者当需要时查询系统状态信息。在前一种情况下,每个机器(即使是忙碌的机器)要定期地产生更新报文并向其他主机广播(公布)。而每个主机中维持一个主机状态表。在后一种情况下只有对主机选择有兴趣的那些主机才关心状态信息(查询)。采用查询方法,即每个需要获得空闲主机的顾客机发送查询报文请求得到当前状态信息,请求中包括所需资源的说明。该顾客从所有愿意成为候选主机的机器那里得到回答,并从中选取一个最合适的机器。

**两个要解决的问题。**第一是查询者可能要求接收大量的、几乎是同时到来的回答报文, 以及N2报文的传送要消耗网络的带宽。第二是可能产生冲突。

  • **第一个问题的解决方法:**一个相当简单的办法是放宽选择主机的标准,它可以不是最佳的,即不是负载最轻的,但可以是较轻的、较好的。查询者只考虑全部回答报文中的一部分,扔掉其余部分。

  • 第二个问题解决办法是在迁移程序前先发送一个执行请求,被选择机只对第一个请求回答并等待申请者传送被执行的程序。

分散式方法具有较高可靠性,实现简单,容易扩充,但效率较低。

五、混合式调度

混合式调度结构中,每个工作站有一个局部调度程序,还有一个后台作业队列,用户提交的作业和远程作业都放到此队列中。有一个工作站除了局部调度程序和作业队列外,还有一个协调程序(协调者)。协调者定期(例如每两分钟)向各个工作站查询,看有哪些工作站可用作远程执行的源,哪些工作站后台作业队列中有作业等待处理。中央协调者为有后台作业等候的工作站上的调度程序分配空闲工作站资源。各工作站如果其队列中有多个后台作业,则由本地调度执行程序决定下次应执行哪个作业。

5进程转移和远程执行

进程转移的主要目的就是使由个人工作站组成的系统的计算资源容易共享,用户在执行若干相对独立的任务时,可把它们从某些重负载工作站移到另外一些轻负载工作站上加快完成。

  • 抢先方式(进程迁移):进程迁移是把进程转移到一个较好的执行节点继续执行。
  • 非抢先方式(进程放置):为进程选择一个执行节点,在此节点上启动此进程。

进程转移和远程执行一般要求:

  • 透明性:进程运行的结果与该进程在系统中什么地方执行无关。
  • 有效性:迁移一个进程需要时间,支持该进程远程执行也需要时间,这些时间应尽量短。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值