Linux进程优先级和nice值

Linux进程优先级和nice值

2023年8月2日发(作者:)

Linux进程优先级和nice值在学习了linux的完全公平调度算法(CFS)后,记录下学习轨迹这篇⽂章主要讲述,完全公平调度算法的⼯作⽅式,和⼀些调度知识我们可以通过ps -l看到当前正在运⾏的进程的详细信息其中F:表⽰进程旗标,标识进程所拥有的权限,当我切换到root的时候为4表⽰拥有root权限,为1仅有fork()权限R:表⽰进程当前的状态UID:拥有该进程⽤户的⽤户IDR:当前正在运⾏(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采取的不是简单的时间⽚调度算法,⽽是改进的优先级调度算法CFSLinux系统是抢占式的,什么概念呢,系统当前运⾏⼀个进程,但这个时候⼀个具有更⾼优先级的进程突然得到某种资源进⼊了就绪状态,然后他就来到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值给负值必须要⽤rootnice值不是优先级,但会影响优先级 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证明虚拟运⾏时间=实际运⾏时间

发布者:admin,转转请注明出处:http://www.yc00.com/web/1690957202a472712.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信