[Android][DevTips]chrt命令修改线程优先级与调度策略

前言

DevTips是一个旨在记录一些开发过程中的小技巧,没有太大的技术含量的系列,更多的作用是备忘;

此次介绍的是Android系统中内置的chrt命令的使用和一些注意事项;

测试平台

  • Android P
  • Pixel 3

Tip

用法

首先列一下帮助页面

blueline:/ $ chrt --help                                                                                                                                                                                            
usage: chrt [-Rmofrbi] {-p PID [PRIORITY] | [PRIORITY COMMAND...]}

Get/set a process' real-time scheduling policy and priority.

-p	Set/query given pid (instead of running COMMAND)
-R	Set SCHED_RESET_ON_FORK
-m	Show min/max priorities available

Set policy (default -r):

  -o  SCHED_OTHER    -f  SCHED_FIFO    -r  SCHED_RR
  -b  SCHED_BATCH    -i  SCHED_IDLE

注意一下,这里的-p参数与PC端不太一样,以Ubuntu为例:

$ chrt --help
Show or change the real-time scheduling attributes of a process.

Set policy:
 chrt [options] <priority> <command> [<arg>...]
 chrt [options] -p <priority> <pid>

...

在Ubuntu上,-p参数传递的是<priority> <pid>,而手机上为<pid> <priority>,这两个参数顺序相反,需要注意;

查看

如果要查看某个进程的调度策略与优先级,可以使用如下命令:

chrt -p `pidof com.android.systemui`

需要注意的是,这里的参数<pid>并非单指进程ID,线程ID也是可以的:

# 查看1445进程(com.android.systemui)下的线程
blueline:/ # ls /proc/1445/task/                                                                     
1445 1453 1463 1468 1618 1625 1636 1646 1650 1659 1703 1709 1716 1976 3457 7716 
1451 1454 1464 1480 1620 1626 1640 1648 1651 1667 1706 1711 1717 2770 7040 9574 
1452 1456 1466 1558 1621 1628 1642 1649 1656 1676 1707 1713 1921 3212 7357 

# 选择其中一个查看
blueline:/ # chrt -p 1453                                                                                
pid 1453's current scheduling policy: SCHED_OTHER
pid 1453's current scheduling priority: 0

设置

如果需要修改一个线程的调度策略为FIFO;
以上面的1445进程(com.android.systemui)的UI线程为例:

blueline:/ # chrt -f -p 1453 50                                                                        
blueline:/ # chrt -p 1453                                                                                
pid 1453's current scheduling policy: SCHED_FIFO
pid 1453's current scheduling priority: 50

注意,如果优先级设置不合理,会失败,并输出如下提示:

#修改前查看
blueline:/ # chrt -p 1453                                                                                
pid 1453's current scheduling policy: SCHED_OTHER
pid 1453's current scheduling priority: 0
#尝试修改
blueline:/ # chrt -f -p 1453 0                                                                           
chrt: 0 < 1
#再次查看,未能生效
blueline:/ # chrt -p 1453                                                                                
pid 1453's current scheduling policy: SCHED_OTHER
pid 1453's current scheduling priority: 0

这里输出的意思是,要求修改为0的优先级小于了FIFO调度策略允许的最小优先级1,因此设置失败;

由于这里是DevTips系列,仅记录用法,就不展开各种调度策略的原理介绍了;

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在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()来进行设定。 通过合理设置进程的调度策略和实时优先级,可以优化系统的性能,使得实时任务能够按照预定的要求运行。但需要注意的是,过高的实时优先级可能会导致系统其他进程被饿死,因此需要在设定时进行权衡和限制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值