• yarn的调度策略


    一. yarn的资源分配模型

    无论先进先出调度器,容量调度器,还是公平调度器,他们的核心:资源分配模型是一样的。

    1. 调度器维护着多个队列的信息,用户可以向任意一个或多个队列提交job。每次NodeManager向ResourceManager发送心跳时,调度器都会选择一个队列,再在队列上选择一个应用,然后尝试在这个应用上分配资源。调度器优先选择本地资源是申请请求,其次是同机架的机器,最后是任意机器。
    2. 简言之,3种调度器就是说明如何选择一个队列,如何在队列上选择一个应用

    二.单机操作系统中的任务调度

    1. 先来先服务调度
      (1)先来先服务的调度算法,维护一个后备进程/作业等待队列,该算法每次从后备作业队列中选择一个或几个作业进入内存,分配必要资源,创建的进程放入到就绪队列中
      (2)这种调度算法不利于短作业,利于长作业。长作业如果先进入到后备队列就会先被执行,使得后续到来的短作业拥有很长的等待时间

    2. 短作业优先调度算法
      (1)短作业优先调度算法也只维护一个后备作业/进程等待队列,调度器每次选择一个或多个运行时间较短的作业调入内存,分配资源。cpu进程调度时,再从就绪队列中选择一个估计运行时间最短的进程将时间片分配给它。
      (2)该算法优先调度短作业执行,当不断有短作业进入后备内存时,会使得长作业无法被调度,形成“死锁”。而且,作业的执行时间是用户对作业运行的估计值,这种估计值会被用户有意无意的放大或缩小,使得该算法不能做到真正的短作业优先调度

    3. 优先级调度算法
      (1)优先级调度算法从后被作业队列中选取优先级最高的进程调入内存,分配资源,加入就绪队列。在进程调度中,cpu从就绪队列中选择优先级最高的进程分配给其时间片
      (2)剥夺式优先级与非剥夺式优先级:当有优先级更高的进程进入就绪队列时,处理剂是否立刻被剥夺分配给高优先级的进程,还是要等待低优先级的进程处理完毕再让出处理机
      (3)静态优先级与动态优先级:进程在整个运行期间是保持不变还是根据进程占有的CPU时间长短,就需等待时间长短改变自身的优先级

    4. 高相应比优先调度
      (1)高相应比调度主要应用于作业调度
      (2)该调度算法是对先进先出和短作业优先的一种综合调度,同时考虑每个作业的等待时间和估计运行时间,从中选择响应比最高的作业投入运行
      响应必(R_p=frac{等待时间+要求服务时间}{要求服务时间}=1+frac{等待时间}{要求服务时间})
      (3)短作业:要求服务时间越短,响应必越高
      长作业:随着等待时间的增加,响应必越高

    5. 时间片轮转调度
      (1)时间片轮转算法把就绪进程排序成一个队列,进程调度算法按照先进先出的顺序依次执行,每次执行时间是一个时间片,不论进程是否执行完毕,都会让出处理机去处理下一个进程。
      (2)时间片轮转调度中,如果时间片太大,每个进程都能在一个时间片内执行完毕,则时间片轮转算法变成了先来先服务调度。如果时间片设置的太小,则处理机需要在进程间频繁切换,使得处理机开销增大,真正用于用户进程的时间减少
      (3)时间片的设置应该综合考虑一下几个因素:
      系统响应时间,就绪队列的进程数目,系统的处理能力

    6. 多级反馈队列调度
      (1)多级反馈队列调度是优先级调度算法和时间片轮转算法的结合发展,该调度算法能动态调整进程优先级和时间片的大小,同时也不必预先估计进程的执行时间
      (2)多级反馈队列的设计思想

      • 应用设置多个就绪队列,每个就绪队列的优先级不同。一级队列的优先级最高,2级队列次之,优先级随队列标号的增大而减小
      • 下级就绪队列的时间片要比上级队列的时间片增大一倍。序号越大的队列时间片越长

      (3)多级反馈队列的进程调度方式:

      • 新进程会放到第1级就绪队列的末尾,按照先来先服务的顺序被调度执行,当该进程执行时,若在一个时间片内处理完毕,则将该进程从队列中撤除;若在1个时间片内未运行完毕,则将其放到2级队列中等待处理,若在2级队列更长的时间片内还没处理完毕,则进入3级队列
      • 仅当1级队列空时,调度程序才去调度2级队列的进程。仅当i级队列为空,采取调度i+1级队列的任务
      • 如果处理机正在执行第i级队列中的进程,有新的进程进入到1~i-1中的任何一个队列,则此时的新进程会抢占处理机,原来的进程放到第i级队列的末尾等待下一轮被调用

      (4)多级反馈队列的优势

      • 短作业优先
      • 短批处理作业的周转时间很短
      • 长批处理作业经过前面几个队列的部分执行,不会长期得不到处理
  • 相关阅读:
    redis同步指定key数据到其他redis中
    Golang 生成随机数
    怎么理解“平均负载”? 进行分析等
    Golang打印空心金字塔for循环实现
    python十几行代码实现三级菜单
    mysql增量恢复
    python内建函数
    python练习题总结
    迭代器和生成器
    python基础数据类型
  • 原文地址:https://www.cnblogs.com/72808ljup/p/5344635.html
Copyright © 2020-2023  润新知