http://www.cnblogs.com/wang_yb/archive/2012/09/04/2670564.html
http://liwei.life/2016/04/07/linux%E7%9A%84%E8%BF%9B%E7%A8%8B%E4%BC%98%E5%85%88%E7%BA%A7/
http://www.cnblogs.com/imapla/p/4234258.html
http://blog.csdn.net/peimichael/article/details/5218335 nice: 更改优先级 nice -n bash
如果是超级用户,则-n后面的值可以为负数:-<=x<= renice: 如果您正好启动了一个进程,但意识到它应该以不同的优先级运行,那么有一种方法可以在启动之后对其进行更改,即使用 renice命令。您可以为进程指定一个绝对优先级(不是调整值) renice +x PID
x指的是一个数字,PID为需要指定的进程的PID值

  用top或者ps命令会输出PRI/PR、NI、%ni/%nice这三种指标值,这些到底是什么东西?先给出大概的解释如下:

  PRI :进程优先权,代表这个进程可被执行的优先级,其值越小,优先级就越高,越早被执行;

  NI :进程Nice值,代表这个进程的优先值;

  %nice :改变过优先级的进程的占用CPU的百分比。

  PRI是比较好理解的,即进程的优先级,或者通俗点说就是程序被CPU执行的先后顺序,此值越小进程的优先级别越高。那NI呢?就是我们所要说的nice值了,其表示进程可被执行的优先级的修正数值。如前面所说,PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice。由此看出,PR是根据NICE排序的,规则是NICE越小PR越前(小,优先权更大),即其优先级会变高,则其越快被执行。如果NICE相同则进程uid是root的优先权更大。

  在LINUX系统中,Nice值的范围从-20到+(不同系统的值范围是不一样的),正值表示低优先级,负值表示高优先级,值为零则表示不会调整该进程的优先级。具有最高优先级的程序,其nice值最低,所以在LINUX系统中,值-20使得一项任务变得非常重要;与之相反,如果任务的nice为+,则表示它是一个高尚的、无私的任务,允许所有其他任务比自己享有宝贵的CPU时间的更大使用份额,这也就是nice的名称的来意。

  进程在创建时被赋予不同的优先级值,而如前面所说,nice的值是表示进程优先级值可被修正数据值,因此,每个进程都在其计划执行时被赋予一个nice值,这样系统就可以根据系统的资源以及具体进程的各类资源消耗情况,主动干预进程的优先级值。在通常情况下,子进程会继承父进程的nice值,比如在系统启动的过程中,init进程会被赋予0,其他所有进程继承了这个nice值(因为其他进程都是init的子进程)。

  对nice值一个形象比喻,假设在一个CPU轮转中,有2个runnable的进程A和B,如果他们的nice值都为0,假设内核会给他们每人分配1k个cpu时间片。但是假设进程A的为0,但是B的值为-,那么此时CPU可能分别给A和B分配1k和1.5k的时间片。故可以形象的理解为,nice的值影响了内核分配给进程的cpu时间片的多少,时间片越多的进程,其优先级越高,其优先级值(PRI)越低。%nice,就是改变过优先级的进程的占用CPU的百分比,如上例中就是0.5k/.5k=/=%。

  由此可见,进程nice值和进程优先级不是一个概念,但是进程nice值会影响到进程的优先级变化。

  参考资料:
  [] http://blog.csdn.net/longdel/article/details/7317511
[root@server1 ~]# chrt

chrt - manipulate real-time attributes of a process.

Set policy:
chrt [options] <policy> <priority> {<pid> | <command> [<arg> ...]} Get policy:
chrt [options] {<pid> | <command> [<arg> ...]} Scheduling policies:
-b | --batch set policy to SCHED_BATCH
-f | --fifo set policy to SCHED_FIFO
-i | --idle set policy to SCHED_IDLE
-o | --other set policy to SCHED_OTHER
-r | --rr set policy to SCHED_RR (default) Options:
-h | --help display this help
-p | --pid operate on existing given pid
-m | --max show min and max valid priorities
-v | --verbose display status information
-V | --version output version information

[root@server1 ~]# chrt -f 1 bash
[root@server1 ~]# chrt -p $$
pid 6496's current scheduling policy: SCHED_FIFO
pid 6496's current scheduling priority: 1

http://blog.sina.com.cn/s/blog_65373f1401017jqx.html

1.什么是CFS
CFS(Completely Fair Scheduler)是Linux 2.6.23中引入的,针对普通进程(linux中除了普通进程之外还有实时进程,实时进程有专门的实时调度器,其实现在kernel/sched_rt.c)的一个调度器。它的实现在kernel/sched_fair.c。 CFS的设计原则是,尽力保证CPU资源在所有可运行进程之间平均划分——假如系统中一共有n个可运行进程,那么在任何时刻,每个可执行进程刚好使用了1/n的CPU资源。注意,红色字体意味着这只能是一个理想化的模型,在某一时刻(甚至可以说在每一时刻)肯定会有人超过1/n,有人不足1/n,但是CFS会以此模型为目标尽力去做到。 . vruntime
CFS通过为每个可运行进程维护一个虚拟运行时间vruntime来实现它的目标。vruntime记录了一个可执行进程到当前时刻为止执行的总时间(需要以进程总数n进行归一化,并且根据进程的优先级进行加权)。CFS每次挑选新进程投入运行的时候,采用的策略超级简单:挑选vruntime最小的可运行进程p投入运行,当运行了一段时间dt之后,进程p的vruntime相应增加Dt(vruntime+=Dt),然后CFS重新选择拥有最小vruntime的进程p'投入运行。 需要注意的是,上文中vruntime的增加值Dt并不一定等于dt,Dt的计算需要根据进程的优先级也就是nice值进行加权,并对可执行进程总数n进行归一化。例如对同样的dt,高优先级进程的Dt比低优先级进程的Dt小。也就是说高优先级进程的vruntime增加较慢,所以就有更多的机会获得CPU。 在理想的情况下,CFS应该把时间粒度划分的无限小。当一个可运行进程投入运行时,只运行无限小的时间就交出CPU。这样就可以满足任意时刻每个可运行进程的vruntime都相等的理想目标。实际中当然不可能做到无限小,每个进程的运行时间的最小粒度默认是1ms,再小的话,上下文切换的开销就相当巨大了。 . 可运行进程的维护
CFS如何快速挑选最小vruntime的可运行进程呢?答案是红黑树。红黑树是一种准平衡二叉排序树,也是一种自平衡二叉树,它的search/insert/delete操作的时间复杂度都是O(log(n)),并具有良好地动态特性(相比AVL树)。CFS将所有可运行进程组织成一个红黑树(rbtree),红黑树的key就是进程的vruntime。通过这个rbtree,CFS可以在O(log(n))时间内找到最小vruntime的进程——也就是最左边的树节点(leftmost)。并且,CFS会将leftmost节点cache起来,以便加速下一次查找。 在每一次调度中,CFS从rbtree中挑中leftmost进程投入运行,运行完之后增加这个进程的vruntime值,并将其重新insert到rbtree里(如果这个进程没有被阻塞,即仍然是可运行的)。随着系统不断运行,可运行进程会不断地从rbtree的最左边delete,再被insert到右边,是一个很有趣的过程。

linux 提高进程优先级nice+ 进程调度CFS的更多相关文章

  1. Linux的进程优先级

    Linux的进程优先级 为什么要有进程优先级?这似乎不用过多的解释,毕竟自从多任务操作系统诞生以来,进程执行占用cpu的能力就是一个必须要可以人为控制的事情.因为有的进程相对重要,而有的进程则没那么重 ...

  2. Linux的进程优先级NI和PR到底有什么区别

    Linux的进程优先级NI和PR到底有什么区别 - 51CTO.COM http://os.51cto.com/art/201605/511559.htm

  3. 【原创】(五)Linux进程调度-CFS调度器

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...

  4. Linux的进程优先级NI和PR

    为什么要有进程优先级? 这似乎不用过多的解释,毕竟自从多任务操作系统诞生以来,进程执行占用cpu的能力就是一个必须要可以人为控制的事情.因为有的进程相对重要,而有的进程则没那么重要. 进程优先级起作用 ...

  5. Linux内核——进程管理之CFS调度器(基于版本4.x)

    <奔跑吧linux内核>3.2笔记,不足之处还望大家批评指正 建议阅读博文https://www.cnblogs.com/openix/p/3262217.html理解linux cfs调 ...

  6. linux 内核学习之八 进程调度过程分析

    一  关于进程的补充 进程调度的时机 中断处理过程(包括时钟中断.I/O中断.系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule() ...

  7. Linux内核分析——理解进程调度时机跟踪分析进程调度与进程切换的过程

    20135125陈智威 +原创作品转载请注明出处 +<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验 ...

  8. android 提高进程优先级 拍照永不崩溃(闪退)

    首先科普一下Android系统进程的优先级: 当系统的内存不足时, android系统将根据进程优先级选择杀死一些不太重要的进程. 进程优先级从高到低分别为: 1. 前台进程. 以下的进程为前台进程: ...

  9. Linux改变进程优先级的nice命令

    前言: VPS普遍性能不高,很多人可能有这样一个感受,在执行du.tar等命令时,会造成系统负载飙升,Apache响应缓慢.这时nice命令改变进程优先级可能能缓解这种状况.nice命令用于调整Lin ...

随机推荐

  1. .net 4.0 ValidateRequest=&quot;false&quot; 无效

    昨天安装了VisualStudio 2010 Ultimate,今天把最近的一个项目升级到了4.0下,结果跑了一下,发现关于页面启用 ValidateRequest="false" ...

  2. CentOS 5.8/6.7若干优化

    CentOS系统安装之后并不能立即投入生产环境使用,往往需要先经过我们运维人员的优化才行.在此讲解几点关于Linux系统安装后的基础优化操作.注意:本次优化都是基于CentOS(5.8/6.7). 下 ...

  3. hbase与mapreduce集成

    一:运行给定的案例 1.获取jar包里的方法 2.运行hbase自带的mapreduce程序 lib/hbase-server-0.98.6-hadoop2.jar 3.具体运行 4.运行一个小方法 ...

  4. CTE初识

    微软从SQl2005起引入了CTE(Common Table Expression)以强化T-SQL.这是一个类似于非持久视图的好东西. 正常的SQL语句: select * from person. ...

  5. Team Homework #2

    王宇杰,北航计算机学院2011级本科生,学号11061180.本人没有什么特长,典型的死宅一个.学过一点c和java.对于第一次的个人作业就表示亚历山大,希望各位大神不吝分享自己的代码,并做好注释.希 ...

  6. PKUSC2016滚粗记

    Day0 坐飞机来北京,地铁上接到电话,以为是诈骗电话马上就挂了,然后看了一下是北京的电话,赶脚有点不对...打回去居然是报到处老师的电话..走了几个小时,到勺园和其他学校的神犇合住.TAT,感觉第二 ...

  7. MVC Razor中 如何截断字符串

    有时候显示的内容过长,使用MVC编程时,如何截断显示的内容呢.我知道你肯定有很多办法这样做的,但是在学习MVC时,还是使用一些新的办法做吧> Razor 标记语法编程. @helper Trun ...

  8. Lucene.Net 2.3.1开发介绍 —— 四、搜索(二)

    原文:Lucene.Net 2.3.1开发介绍 -- 四.搜索(二) 4.3 表达式用户搜索,只会输入一个或几个词,也可能是一句话.输入的语句是如何变成搜索条件的上一篇已经略有提及. 4.3.1 观察 ...

  9. Android基础之——MacOSX下elipse开发环境的配置

    前不久换了台macbook,然后自己就把开发环境给配好了,本来这事就这么过去了,今天有位博友留言让我写一篇关于配置的文章,考虑到这个东西确实以后可能还会用,那就写下来,分享给大家,正好自己也再次回想一 ...

  10. 手機Web頁面信息

    手機瀏覽器的寬度為980px: 使用980px寫頁面時,若是遇到字體變大情況,是因為block或者inline-block沒有設置寬高.設置即顯示正常. 980px設計,禁止手機頁面縮放: <m ...