一个linux 查看进程优先级能够设置的优先级范围有多大,最高优先级是多

博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Linux进程优先级和nice值_Linux教程_Linux公社-Linux系统门户网站
你好,游客
Linux进程优先级和nice值
来源:Linux社区&
作者:lenomirei
在学习了Linux的完全公平调度算法(CFS)后,记录下学习轨迹,这篇文章主要讲述,完全公平调度算法的工作方式,和一些调度知识
我们可以通过ps -l看到当前正在运行的进程的详细信息其中
F:表示进程旗标,标识进程所拥有的权限,当我切换到root的时候为4表示拥有root权限,为1仅有fork()权限
R:表示进程当前的状态
R:当前正在运行(RUNNING)
S:睡眠(SLEEP)
D:不可中断
T:停止(STOP)
Z:僵尸进程(ZOMBIE)
UID:拥有该进程用户的用户ID
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就被称为最小粒度
本文永久更新链接地址:
相关资讯 & & &
& (11/03/:12)
& (02/18/:28)
& (10/08/:21)
& (09/05/:57)
& (11/03/:07)
& (07/15/:37)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款Linux进程优先级的调整方法(转)
我的图书馆
Linux进程优先级的调整方法(转)
linux下的进程调度优先级是从-20到19,一共40个级别,数字越大,表示进程的优先级越低。默认时候,进程的优先级是0。查看进程优先级有两个办法:ps和top。top命令显示的NI列的值。或者可以使用ps -efl来查看,也是在ni列表示了进程的优先级。进程的优先级可以在程序运行的时候设置,也可以在程序运行过程中动态的修改。运 行的时候设置进程的优先级可以使用nice命令,比如要使得top命令运行时候的优先级是5而不是默认的0,则可以使用nice -n 5 top,来使得top命令运行在5的优先级别。如果top命令已经在运行,则有两个办法可以动态的调整进程的级别。可以在top中输入r命令,然后按照提 示输入top命令对应的进程号,再按照提示输入要调整到哪个级别。另一个方法是使用renice命令,帮助如下:[oracle@rac1 ~]$ renice --helpusage: renice priority [ [ -p ] pids ] [ [ -g ] pgrps ] [ [ -u ] users ]此 命令使用也很简单,可以调整单个进程,一个用户或者一个组的所有进程的优先级。示例如下:renice +10 -u oracle,此命令把oracle用户的所有进程的优先级全部调为10,包括新创建的和已经在运行的oracle用户的所有进程。此处的+10并不是表 示在现有级别上再往上调整10个级别,而是调整到正10的级别,所以多次运行此命令,进程的优先级不会再发生变化,将一直停留在+10级别。注意:如果不是root权限,则侄只能降调度优先级而不能提高,即使是自己用户的进程,自己把它调高了后,优先级也不能再被调会原来的值了,除非使用root用户来调回去。系统重启后,对进程优先级的调整全部失效,所有进程的调度回到默认的初始级别。转:linux设置进程优先级&&转自:http://man.ddvip.com/linux/Mandrakelinuxref/process-priority.html系统中运行的每个进程都有一个优先级(亦称“nice 值”),其范围从 -20 (最高优先级)到 19 (最低优先级)。默认情况下,进程的优先级是 0 (“基本”调度优先级)。优先级比较大的进程(nice 值比较小,最低到 -20)相对优先级比较小的进程(直到 19)将比较频繁地被调度运行,因此就拥有更多的进程周期。一般用户只能降低它们自己进程的优先级别,并限于 0 到 19 之间。超级用户(root)可以将任何进程的优先级设定为任何值。renice如果某个或某些进程消耗了过多的系统资源,除了终止它们,您还可以更改它们的优先级。为此,请使用&renice&命令。其语法为:renice 优先级 [[-p] pid ...] [[-g] pgrp ...] [[-u] 用户名 ...]其中,优先级是指优先级的值;pid&(对多个进程请使用&-p&选项)表示进程 ID 号;pgrp&(如果有多个,请用&-g)表示进程组 ID 号;而用户(如果不只一个,请用&-u)表示进程所有者的用户名。假定您运行了一个执行长时间科学运算的进程(其&PID&为 785),但是您又想要玩一个游戏而想要释放一些系统资源。那么您可以:$ renice +15 785这样,您的那个进程可能需要花费更长一些时间完成,不过它就不会从其他进程手里抢走&CPU&时间片。如果您是系统管理员,而且您发觉某些用户执行了过多的进程并消耗了过多的系统资源时,您只需键入一个命令就可以改变这些用户进程的优先级:# renice +20 -u li_si这样,li_si 的所有进程都将拥有最低优先级,因而就不会阻碍其他用户的进程了。nice既然您已经了解可以更改进程的优先级,您可能需要按照指定的优先级执行命令。为此,请使用&nice&命令。此时,您需要把您要运行的命令作为&nice&的一个参数。而其另一个参数&-n&可用来设置优先级别。默认情况下&nice&将设置优先级为 10。比如,您想要创建一张&Mandrakelinux&安装&CD-ROM&的&ISO&映像:$ dd if=/dev/cdrom of=~/mdk1.iso在某些装配标准&IDE&CD-ROM&的系统上,复制大量信息的进程将消耗过多系统资源。要避免复制操作阻碍其他进程,您可以用如下命令在一个比较低的优先级上启动该进程:$ nice -n 19 dd if=/dev/cdrom of=~/mdk1.iso然后就可以继续工作了。
TA的最新馆藏[转]&[转]&
喜欢该文的人也喜欢51CTO旗下网站
进程、线程、优先级概念(1)
《走入IBM小型机世界(第2版)》第2章为第一日上帝说:"我要计算"便有了计算机。本节为大家介绍进程、线程、优先级概念。
作者:Orain来源:电子工业出版社| 15:29
2.3& 进程、线程
AIX操作系统属于多任务系统,允许同时执行多个程序。那么程序和进程、线程有什么关系?
2.3.1& 进程、线程、优先级概念(1)
系统中执行的程序被称为进程。为了提高运行效率,进程可以被拆分成多个线程执行(需要程序本身支持,采用多线程编写方式编写),每个CPU在同一时刻,只能执行一个线程,一个线程执行完毕退出(或者自己主动进入睡眠状态)、线程等待其他外设(IO操作)、有更高优先级的中断发生(在vmstat命令输出中表现为一次in,即一次中断Interrupt)、或者达到了此线程最大允许运行时间,操作系统就会强制进行线程切换(在vmstat命令输出中表现为一次cs,即一次Content Switch),让CPU去执行另一个线程。
在AIX操作系统中,所有等待执行的线程都放在运行队列里面,每隔10 ms,操作系统重新计算线程的优先级(也就是每隔10ms,线程的执行顺序会重新排列),CPU优先执行队列前面的几个线程(每个CPU执行一个线程,n个CPU的系统则可以同时执行队列前n个线程)。如果CPU正在执行一个线程,此线程的优先级在下次计算时就会被降低(当使用默认的调度模式时),因此如果一个线程长时间占据CPU,它的优先级会越来越低。如果下一次优先级计算的时候,另一个线程的优先级高于此线程,则CPU就会将此线程"踢"到等待队列里面(执行队列中靠后的位置),而去执行另一个更高优先级(执行队列中靠前的位置)的线程。线程本身也会由于IO、任务执行结束休眠等原因,自己降低执行优先级,而进入等待队列。
一个4 CPU的系统可以用这样的情况来比喻:这是一个有人监督管理的排队队列,有4个窗口在进行处理,每个窗口有2个工作人员,一个审核,一个盖章(这就是4个CPU开启了SMT的情况)。这样这个系统可以同时让8个人到窗口(相当于8个线程),但是由于窗口只有4个,所以前4个人能够递交审核,另外4个需要稍等片刻。审核的时间有长有短,以第一窗口为例,审核结束,交给盖章的人处理,这是第二个人就可以递交自己的文件等待审核,而第一个人要等待文件盖章,任务还没有执行完。这就是SMT启动的情况:有时可以并行两条指令,有时则不行。
可能第二个人审核的时候,发现材料不全,要求他再准备(这就是等待IO),这个人就只好排到队列后面,慢慢找材料(进行IO处理),系统又可以分派一个人到第一窗口。此时第一窗口盖章工作结束,第一个人拿着完整材料退出(相当于执行完操作),又有一个新人被指派到第一窗口。也就是永远都有两个人在一个窗口(一个CPU),这就是SMT的功能。
我们再来看那个准备材料的人,假如他已经准备好,此时就可以向管理队列的人申请"加塞儿"(提高优先级),管理人员看到他是由于准备材料而离开,则允许插队,从队列的后面插到队列前面,那么下一个空闲窗口处理的人就可能是他。
要是此时又进来一个人,拿着领导批条(也就是更高优先级的中断产生了),管理人员不敢怠慢,甚至让当前正在处理的一个窗口停下来,先把他撵回队列(在队列中的位置根据已经处理的时间长短决定,如果已经处理了很长时间,则排在队列靠后,否则靠前),让这个优先级高的人先处理。
实际情况与以上排队情况类似,如图2-7所示,优先级总计128级,0为最高级,127为最低级,虽然是一个大队列,但是在每个级别可能有多个等待线程,当轮到此优先级线程执行的时候,具有相同优先级的线程按一定顺序关系(线程调度规则)先后执行。
优先级少于40(优先级较高,数值越低优先级越高)的线程为系统内核线程。每个普通线程的默认优先级是60,通过nice命令可以增加或者减少优先级,上下幅度为20,这样一个普通程序的优先级可以在40~80之间的变化范围。除了nice之外,还有一些数值是由占用CPU时间片产生的所谓CPU惩罚值确定的,占用CPU时间片越长,优先级越低。
图2-7& AIX线程调度中的128级优先级和等待队列
问题:是否系统CPU越多,程序执行越快?
答案:不一定。由于CPU最小执行单位是线程,因此即使某个程序负载很大,需要消耗大量CPU计算能力,但是如果此程序不能拆分成更多的线程,则尽管有很多CPU,也只能闲置。不过通常系统不止一个程序在执行,有很多操作系统的调度程序、设备驱动程序,都需要CPU执行,因此一般情况下,增加CPU数量会让分配给这个单线程程序的CPU时间片不会被别的任务抢占,从而间接提高程序的计算速度。不过由于只是辅助作用,更多的CPU对程序执行速度提升的效果会越来越不明显。
操作系统有几种调度模式和参数控制线程优先级,在默认模式下,通过修改这些参数(使用schedutune命令),能够对CPU执行线程情况产生很多影响:
(1)加快线程切换速度,对OLTP(OnLine Transaction Process在线交易,例如银行窗口,需要交互输入输出)一类业务有好处,可以让交易更快地得到响应。方法是通过参数加快占据CPU资源的线程的优先级衰减,尽快进行进程切换。
(2)延长每个线程执行时间,有益于计算性业务(大量查询、报表、统计、科学计算)。由于每次切换都有不必要的操作系统处理,让每个线程执行时间最长可以更快速完成线程的工作。
(3)将某个进程(及其线程)与某个CPU绑定,防止此进程的过渡耗费系统CPU资源,将其占用量限制在某(几)个CPU。
而AIX系统有更多的预先定义的进程调度规则,影响具有相同优先级的进程(队列):
(1)SCHED_FIFO,先进先出模式。如果设定此种规则,则线程会持续执行,直到自动退出、被终止或者更高优先级的线程需要执行。只有固定优先级线程才可以使用此方式。
(2)SCHED_RR,循环模式。如果某个线程用完CPU时间片,将被扔到队列中的最后排队。也是只有固定优先级的线程才能使用这种规则。
(3)SCHED_OTHER,这种策略在POSIX标准1003.4a中定义,每个时间片后都重新计算线程优先级。
(4)SCHED_FIFO2,与SCHED_FIFO相同,除了一点:只允许某个线程处于队列首位一定的时间,而不允许无限期执行它。此策略的意思是尽力保证执行此线程,但到了一定时间还是禁止它永远占据CPU。这个时间可以用schedtune -a参数控制。
(5)SCHED_FIFO3,属于SCHED_FIFO3策略的线程永远占据执行队列首位(在同一优先级队列中),为了防止属于SCHED_FIFO2规则的线程占据在属于SCHED_FIFO3规则线程之前,一旦一个SCHED_FIFO3线程进入队列,队列规则参数即被修改,以阻止SCHED_FIFO2规则对此优先级队列起作用。也就是说,FIFO3的线程会屏蔽属于同一优先级的FIFO2线程。
(6)SCHED_FIFO4,SCHED_FIFO4规则使即使有高优先级线程进入队列,如果低优先级线程只比它低一个等级(优先级数字多1),那么低优先级线程仍将继续占据此CPU。 控制命令(AIX&5.2以前版本,注意,数字越小,优先级越高): &#/usr/samples/kernel/schedtune&&&&&&'&控制CPU线程调度参数 &-t参数&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'&修改时间片大小 &-r&-d&参数&&&&&&&&&&&&&&&&&&&&&&&&&&&&'&配合使用修改线程优先级衰减控制&
比较小的r使得线程优先级计算变化范围缩减,nice对程序的优先级控制更加明显;
比较大的r则相反,线程优先级计算变化跨度加大,nice作用更为不明显;
比较小的d 增大了CPU惩罚值,加速线程切换;
比较大的d 减少了CPU占用惩罚,降低线程切换。-D参数&&&&&&&&&&&&&&&&&&&&&&&&'&将所有的schedtune参数都恢复为默认值; &#vmo&&&&&&&&&&&&&&&&&&&&&&&&'&AIX&5.2以后提供的新命令,类似vmtune &#schedo&&&&&&&&&&&&&&&&&&&&&'&AIX&5.2以后提供的新命令,类似schedtune &#bindprocessor&-q&&&&&&&&&&&'&查看可用的CPU&& &#bindprocessor&13039&3&&&&&&'&将进程13039绑定到第3号CPU(不可以用其他的CPU) &#bindprocessor&-u&13039&&&&&'&解除对13039的绑定 &#nice&-5&vmstat&10&3&&&&&&&&'&设定vmstat进程的优先级(降低5,从60降低到65) &#nice&--5&vmstat&10&3&&&&&&&'&设定优先级,提高5,从60提高到55) &#renice&-5&7569&&&&&&&&&&&&&'&重新调整进程7569的优先级(在原来基础之上提高5)&
【责任编辑: TEL:(010)】&&&&&&
大家都在看猜你喜欢
热点热点头条头条热点
24H热文一周话题本月最赞
讲师:30919人学习过
讲师:16378人学习过
讲师:13031人学习过
精选博文论坛热帖下载排行
本书非常详细而全面地介绍了C#程序设计语言。本书不是“5分钟学习C#”式的手册,也不是那种教您“照猫画虎”地创建一些与您的实际工作需要...
订阅51CTO邮刊【图文】进程调度_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
&&进程调度程序,也叫做调度程序,可以看做是在可运行态进程之间分配有限的处理器时间资源的内核子系统,是内核的组成部分,主要负责选择下一个将要运行的进程。
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢

我要回帖

更多关于 android 进程优先级 的文章

 

随机推荐