在学习了linux的完全公平调度算法(CFS)后,记录下学习轨迹

这篇文章主要讲述,完全公平调度算法的工作方式,和一些调度知识

我们可以通过ps -l看到当前正在运行的进程的详细信息其中

  • F:表示进程旗标,标识进程所拥有的权限,当我切换到root的时候为4表示拥有root权限,为1仅有fork()权限
  • R:表示进程当前的状态UID:拥有该进程用户的用户ID
    • R:当前正在运行(RUNNING)
    • S:睡眠(SLEEP)
    • D:不可中断
    • T:停止(STOP)
    • Z:僵尸进程(ZOMBIE)
  • PID:进程号
  • PPID:该进程父进程的进程好
  • C:CPU是用百分比
  • PRI:优先级
  • NI:nice值
  • ADDR/SZ/WCHAN:都与内存有关
  • TTY:登陆者的终端,和远程登陆脱不开干系
  • TIME:占用CPU时间
  • CMD:造成此进程的命令

这次讲的重点主要和PRI还有NI有关

我们把主要进程分为两种:1.I/O消耗型进程;2.处理器消耗型进程             当然也有既是I/O消耗型也是处理器消耗型的进程

I/O消耗型进程如字面意思一样,轮到它的时候会把大部分时间消耗在I/O请求和等待I/O上,真正使用CPU的时间很少,处理器消耗性进程会把大部分时间用在使用CPU进行计算之类的,如果给这两种继承分配的时间片长度相等,就会体现出不公平。

同时我们想给处理器消耗型的进程多一些处理器时间,而给I/O消耗性进程少一些处理器时间,于是linux采取的不是简单的时间片调度算法,而是改进的优先级调度算法CFS

Linux系统是抢占式的,什么概念呢,系统当前运行一个进程,但这个时候一个具有更高优先级的进程突然得到某种资源进入了就绪状态,然后他就来到cpu面前一脚踢开正在运行的进程(你奏凯,我先来)就抢夺了与CPU共度的美好时光。。。

CFS直接分配的不是时间片,而是CPU使用比,这个比例会收到nice值得影响,然后你懂,nice值低比重就高,nice高比重就低

Q:Linux使用的CFS调度器,决定抢占时机的就是上面说的CPU使用比,注意!反而CPU使用比低的新进程会立刻投入运行,CPU使用比高的新进程会延迟运行,为什么呢

A:因为CFS的出发点基于一个非常简单的概念:进程调度的效果应如同系统具备一个理想中的完美多任务处理器。在这种系统中每个进程将能获得1/n的处理器时间

就是说每个进程真正使用cpu的时间是一样的,包括I/O消耗型和处理器消耗型,以达到真正的公平,这就解释了刚才的问题,CPU使用比低的占用时间会不可避免的少于占用比高的进程,那我们只好让这个进程具有抢占能力,一就绪就可以抢占,这样子“看起来CPU使用比高了”(其实没变)“看起来CPU占用时间也和其他进程一样多了”(其实不多)

抢占能力高了,交互性相对而言就好了,你看你人打个游戏,交互性就得高,不然你按个键放个技能电脑不给你处理,你就坑队友了

  • Linux对普通进程采用的是完全公平调度算法(CFS)
  • Linux的进程调度并未使用直接均分时间片的方式,而是对优先级进行了改进,采用了两种不同的优先级范围,一种是nice值,范围是-20到+19,越大的nice值意味着更低的优先级,低nice值的进程会获得更多的处理器时间(按比例获得),第二种范围是实时优先级,其值是可配置的,默认情况下它的变化范围是从0到99,与nice值意义相反,越高的实时优先级数值意味着进程优先级越高,任何实时进程的优先级都高于普通进程
    • PS:nice值还会不断对old优先级进行更改,当然也可以设置nice的值,nice值给负值必须要用root
  • nice值不是优先级,但会影响优先级 PRI(new)=PRI(old)+nice
  • 时间片过长会导致人机交互欠佳,而时间片过短会导致大量的处理器时间浪费在进程的切换上,而且I/O消耗型进程和处理器消耗型进程之间的处理器时间的不公平之处也显现出来了
  • CFS并没有直接分配时间片到进程,而是将处理器的使用比划分给了进程,这个比例还会受到nice值的影响
  • CFS的做法是允许每个进程运行一段时间,循环轮转,选择运行最少的进程作为写一个运行进程,所以根据nice值的含义-占用处理器的百分比,来根据系统中全部可运行进程总数来根据所占比例的“时间片”运行
  • linux设计总是想分配给N个进程每个进程同样多的处理器运行时间,当N趋于无穷大的时候,按理说是可以分配给无限小的时间周期,但是这么做会很糟糕,我们也无法分配无限小的时间周期,虽然越小的时间周期可以带来更好的交互性,但还是带来不可接受的切换消耗,所以引入了一个目标延迟,来模拟无限小调度周期的近似值,现在假设目标延迟就是20ms,用它除以所有当前可以运行的进程数目就可以得到每个进程获得的时间片长度,当进程数无限大时候,每个进程分配的时间就趋于无限小,很好,进程切换又爆炸了,那么如果把最小值设为为1ms呢,进程数目再多我也保证每个进程在被强占之前获得1ms的运行时间,那么这个1ms就被称为最小粒度

然而最后影响CFS调度器调度进程的并不是优先级的nice值,因为CFS说了,我要让每个进程获得的处理器时间都是一样的(虽然不可能),所以有一个vruntime的值表示进程运行的虚拟时间(就是在处理器上跑的时间累加和)这个vruntime值越小,说明该进程应该被优先执行(或者获得更多的处理器时间片),因为他饿了。。。

一次调度间隔的虚拟运行时间=实际运行时间*(NICE_0_LOAD/权重)这就是nice值和vruntime之间的关系,其中,NICE_0_LOAD是nice为0时的权重

当nice值为0证明虚拟运行时间=实际运行时间

Linux进程优先级和nice值的更多相关文章

  1. 宋宝华: 关于Linux进程优先级数字混乱的彻底澄清

    宋宝华: 关于Linux进程优先级数字混乱的彻底澄清 原创: 宋宝华 Linux阅码场 9月20日 https://mp.weixin.qq.com/s/44Gamu17Vkl77OGV2KkRmQ ...

  2. linux 进程优先级 调度 nice pri

    转:http://www.linuxidc.com/Linux/2016-05/131244.htm 深入 Linux 的进程优先级 [日期:2016-05-11] 来源:liwei.life  作者 ...

  3. [转]Linux命令的返回值

    Linux命令的返回值 对于某些监测脚本和探测命令蛮有用的: 在 Linux 下,不管你是启动一个桌面程序也好,还是在控制台下运行命令,所有的程序在结束时,都会返回一个数字值,这个值叫做返回值,或者称 ...

  4. Linux root设置初始值的方法

    Linux root设置初始值的方法 ubuntu默认不允许使用root登录,因此初始root账户是不能使用的,需要在普通账户下利用sudo权限修改root密码. 在终端输入sudo passwd r ...

  5. linux 进程优先级 之设置实时进程 (另一种方式是设置nice值)【转】

    转自:https://www.cnblogs.com/jkred369/p/6731353.html Linux内核的三种调度策略: 1,SCHED_OTHER 分时调度策略, 2,SCHED_FIF ...

  6. LINUX进程优先级实现

    首先linux进程优先级的范围是-20到19 将当前目录下的documents目录打包,但不希望tar占用太多CPU: nice -19 tar zcf pack.tar.gz documents 这 ...

  7. Linux进程优先级的处理--Linux进程的管理与调度(二十二)

    1. linux优先级的表示 1.1 优先级的内核表示 linux优先级概述 在用户空间通过nice命令设置进程的静态优先级, 这在内部会调用nice系统调用, 进程的nice值在-20~+19之间. ...

  8. Linux进程优先级查看及修改

    进程cpu资源分配就是指进程的优先权(priority).优先权高的进程有优先执行权利.配置进程优先权对多任务环境的Linux很有用,可以改善系统性能.还可以把进程运行到指定的CPU上,这样一来,把不 ...

  9. 进程优先级、nice值

    进程cpu资源分配就是指进程的优先权(priority).优先权高的进程有优先执行权利.配置进程优先权对多任务环境的linux很有用,可以改善系统性能.还可以把进程运行到指定的CPU上,这样一来,把不 ...

随机推荐

  1. Web 安全入门-书籍及建议

    https://www.jianshu.com/p/6dcebd54fb24 (本文源于转载或摘抄整理) 2016-06-12 Fooying 优主张 最近比较忙,灵感稍微有点缺乏,本着宁缺毋滥的想法 ...

  2. Spring IOC容器交给application域对象管理

    在项目开发中,我们不能在每次使用IOC容器时,都创建一个ApplicationContext对象, 因此我们将IOC容器交给application域对象管理,application对象在服务器启动时创 ...

  3. Idea中文输入问题2

    Desc: win10 idea2017版本+jdk1.9 输入中文无法光标跟随 解决过程: 网上的各种三大类型教程(1)删除jre64(2)删除jre64,然后复制jdk的jre到idea目录,最后 ...

  4. SDUT OJ 图结构练习——最短路径 ( Floyed 算法 AND Dijkstra算法)

    图结构练习——最短路径 Time Limit: 1000 ms            Memory Limit: 65536 KiB Submit Statistic Discuss Problem ...

  5. select和epoll的实现

    select:fd_set是输入结果参数,每次select之后,还得重置fd_set (1)使用copy_from_user从用户空间拷贝fd_set到内核空间,第一步需要复制所有感兴趣的文件描述符到 ...

  6. Oracle Secure Backup设置Infiniband网络优先

    默认情况下,Oracle Secure Backup备份软件走管理网进行数据备份,如果需要Infiniband网络进行备份,则必须设置Preferred Network Interfaces功能. 下 ...

  7. JavaWeb学习笔记(十三)—— JDBC时间类型的处理

    一.Java中的时间类型 Java中用类java.util.Date对日期/时间做了封装,此类提供了对年.月.日.时.分.秒.毫秒以及时区的控制方法,同时也提供一些工具方法,比如日期/时间的比较,前后 ...

  8. JavaWeb学习笔记(五)—— request

    一.request概述 request是Servlet.service()方法的一个参数,类型为javax.servlet.http.HttpServletRequest.在客户端发出每个请求时,服务 ...

  9. Android 查看联系人电话和姓名(ContentProvider)

    1.介绍 2.使用方法 3.在AndroidManifest.xml文件中添加相关设置 <uses-permission android:name="android.permissio ...

  10. Idea 软件使用快捷键归纳

    <1>CTRL+P   方法参数提示 <2>ctrl+/ 单行注释 <3>Ctrl+Alt+M  IDEA 重复代码快速重构(抽取重复代码快捷键) <4> ...