linux 设置实时进程,给进程设置实时优先级

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]。实时优先级队列是一组链表,每个优先级对应一个链表,先执行高的数值对应的链表。

1344867441_5577.png

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

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

需要改变

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值