FAIRYFAR-INTERNAL
 
  FAIRYFAR-INTERNAL  |  SITEMAP  |  ABOUT-ME  |  HOME  
您的足迹: CPU weight与nice的区别
CPU weight与nice的区别

Linux系统是抢占式的,对普通进程采用的是完全公平调度算法(CFS)。

Linux的进程调度并未使用直接均分时间片的方式,而是对优先级进行了改进,采用了两种不同的优先级范围,一种是nice值,范围是-20到+19,越大的nice值意味着更低的优先级,低nice值的进程会获得更多的处理器时间(按比例获得),第二种范围是实时优先级,其值是可配置的,默认情况下它的变化范围是从0到99,与nice值意义相反,越高的实时优先级数值意味着进程优先级越高,任何实时进程的优先级都高于普通进程。

nice

nice的范围为:[-20, 19]的整数值,值越小进程优先级越高。

weight

cgroup v1

在cgroup v1中,nice没有对应的用户接口。

weight对应的读写接口为cpu.shares,范围为:[2, 262144]的整数值。

nice与weight的换算关系(注意:这是一个近似换算关系,Linux对换算结果进行了微调): $$ weight = 1024 * {1.25}^{-nice} $$

cgroup v2

在cgroup v2中,nice对应读写接口为cpu.weight.nice

weight对应的读写接口为cpu.weight,范围为:[1, 10000]的整数值。

setpriority/getpriority

int setpriority(int which, int who, int prio);

setpriority/getpriority可以设置/获取进程优先级。只有超级用户(root)允许降低此值。

以下设置不会报错:

setpriority(PRIO_PROCESS, 0, 20);

但实际生效的nice值为19。

参考



打赏作者以资鼓励:
移动端扫码阅读: