如何给linux进程设置实时优先级

本篇内容主要讲解“如何给linux进程设置实时优先级”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何给linux进程设置实时优先级”吧!

创新互联主要从事成都做网站、成都网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务宜昌,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575

linux内核有五种调度方法:

SCHED_FIFO 实时调度策略,first in first out

SCHED_RR 实时调度策略,robin round 

SCHED_OTHER 分时调度策略

SCHED_BATCH 批处理

SCHED_IDLE  优先级最低的策略

实时进程和分时进程的调度算法不同,分别在rt.c和fair.c中实现。实时进程的优先级总是高于普通进程。

实时进程根据实时优先级决定顺序。而分时进程按完全公平分配调度(CFS)。

实时进程有两种策略,FIFO和RR,实时优先级的范围[0, MAX_RT_PRIO-1], 默认为[0,99]。实时优先级队列是一组链表,每个优先级对应一个链表,先执行高的数值对应的链表。

FIFO 一旦处于可执行状态就会一直执行,直到它自己阻塞或者释放CPU。只能被优先级更高的进程抢占。一般用于延时要求较短的进程,被赋予较高的优先级。

RR  执行直到时间片用完或者自己阻塞和释放CPU。只能被优先级更高的进程抢占。一般用于延时要求稍长的进程,被赋予较低的优先级。

要设置实时优先级,可以调用sched_setscheduler()

也可以用linux命令 chrt. chrt 也是调用了sched_setscheduler()这个函数。

用法:

chrt -p pid

chrt -p 1


Output:
pid 1's current scheduling policy: SCHED_OTHER
pid 1's current scheduling priority: 0

chrt -m

Output:
SCHED_OTHER min/max priority    : 0/0
SCHED_FIFO min/max priority     : 1/99
SCHED_RR min/max priority       : 1/99
SCHED_BATCH min/max priority    : 0/0

To set scheduling policy to SCHED_FIFO, enter:
# chrt -f -p [1..99] {pid}

Set policy to SCHED_FIFO with 50 priority:
# chrt -f -p 50 1024

To set scheduling policy to SCHED_RR, enter:
# chrt -r -p [1..99] {pid}

To set policy scheduling policy to SCHED_OTHER, enter:
# chrt -o -p 0 {pid}
# chrt -o -p 0 1024

如果设置不成功可能是由于一些限制,

http://home.lupaworld.com/home-space-uid-56821-do-blog-id-232810.html

需要改变

real-time priority              (-r) 0

可以直接使用 ulimit -r 99来改变,每次开机修改会重置。

如果要永久修改可以在/etc/security/limits.conf中修改。

还要给/usr/bin/chrt命令授权CAP_SYS_NICE能力,如下:

setcap  cap_sys_nice=eip  /usr/bin/chrt

否则可能会出现以下报错:

chrt: failed to set pid 0's policy: Operation not permitted

到此,相信大家对“如何给linux进程设置实时优先级”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


标题名称:如何给linux进程设置实时优先级
文章路径:http://pwwzsj.com/article/pcddog.html