实时内核中,使用chrt设置进程和线程的实时调度属性

安装了带实时补丁的linux内核后,就可以让指定的进程或者线程拥有实时优先级。有一些系统调用可以在代码中来精细控制线程和进程的优先级,如果不方便修改代码,则可以通过chrt命令来达到这个目的。

关于实时优先级和实时调度算法,可以参考linux文档:http://man7.org/linux/man-pages/man7/sched.7.html。简而言之,linux中有五种调度策略:

非实时调度:SCHED_OTHER, SCHED_IDLE, SCHED_BATCH

实时调度:SCHED_FIFO, SCHED_RR

 

chrt这个命令只有在打了实时补丁的内核中可以使用,在非实时内核中运行会报类似no permission的错。

 

1、查看进程的优先级和调度策略(应该显示的是主线程的优先级和调度策略):

chrt -p [pid]

(这里的非实时进程优先级为0,实时进程优先级1~99,数值越大优先级越高)

 

2、查看进程的所有线程的优先级和调度策略:

chrt -a -p [pid]

 

3、查看每种调度策略对应的优先级范围:

chrt -m

 

4、设置进程的调度策略(可以看到只有主线程变成了实时调度):

chrt -f -p [prio] [pid] // SCHED_FIFO

chrt -r -p [prio] [pid] // SCHED_RR

 

5、如果

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Linux进程调度策略和实时优先级可以通过调整相关参数进行设定。 进程调度策略由调度类别和调度策略两部分组成。调度类别包括实时进程和普通进程,而调度策略包括FIFO(先进先出)、RR(轮转)、以及其他一些非实时调度策略。 对于实时进程,可以通过设置调度策略和实时优先级,来决定进程调度次序。调度策略包括SCHED_FIFO(先进先出)和SCHED_RR(轮转)两种。SCHED_FIFO策略下,实时进程的执行顺序按照进入等待队列的先后顺序,优先级越高的进程越先执行;而SCHED_RR策略下,实时进程以时间片为单位进行轮转调度,每个进程执行一个时间片后切换到下一个进程实时进程实时优先级范围为1-99,优先级越高的进程调度的机会越多。 对于普通进程,可以选择使用其他非实时调度策略,如SCHED_NORMAL(普通进程默认调度策略)等。除了实时优先级外,普通进程还有一个静态优先级,范围从0-39,静态优先级越高的进程在竞争CPU资源时被CPU调度程序考虑的机会越多。 在Linux系统,可以使用相关命令和API函数来设定进程调度策略和实时优先级。例如,通过使用命令"chrt"可以更改进程调度策略和实时优先级,而在编程时可以使用调度相关的函数如sched_setscheduler()和sched_setparam()来进行设定。 通过合理设置进程调度策略和实时优先级,可以优化系统的性能,使得实时任务能够按照预定的要求运行。但需要注意的是,过高的实时优先级可能会导致系统其他进程被饿死,因此需要在设定时进行权衡和限制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值