其他
宋宝华: 关于Linux进程优先级数字混乱的彻底澄清
有点晕
Linux进程的调度优先级数字会在好几个地方出现:内核,用户,top命令。他们各自都有自己的表示法。我们用一个实际的例子来说明,下面在Linux写一个最简单的程序:但是从内核的视角上面来看,又会用99减去用户在chrt里面设置的优先级:
上面的MAX_RT_PRIO的值为:
所以上述进程的优先级,在三个不同视角的值分别为:
用户 | 内核 | Top |
50 | 49 | -51 |
咋回事
Linux的RT调度策略和普通进程在调度算法上面有差异,RT的SCHED_FIFO和SCHED_RR采用的是一个bitmap:但是从用户态的API里面,则是数值越大,优先级越高。下面的代码,一个线程通过调用API把自己设置为SCHED_FIFO,优先级50
$ sudo chrt -f 88 ./a.out
对应内核视角的11,对应top视角的-89:这里还有一个特例,就是用户视角的99(内核bitmap视角的0),显示为top命令的RT:
普通的呢?
普通的讲nice的人相对来说比较简单,我们更关注它的nice值,-20~19之间,nice越低,优先级越高,权重越大,在CFS的红黑树左边的机会大。在一起
总结一下,4个例子用户 | 内核 | Top |
RT 50 | 49 (99-50) | -51 (-1-50) |
RT 99 | 0 | rt |
NICE 5 | 25 | |
NICE -5 | 15 |
(打赏的童鞋请在打赏的时候留言让在下知道是谁并感恩)
查看"Linux阅码场"精华技术文章请移步:
扫描二维码关注"Linux阅码场"