Android 系统调试技巧(3)进程抢占分析

free-jdx 2021-03-29 15:00:21 5643
1. 前言

这里介绍进程抢占方面的问题

2.进程抢占分析
(1)Android4.4 renice 命令
USAGE: renice [[-r] [-t TYPE] priority pids ...] [-g pid]
r 实时进程优先等级;
t 切换调度器"RR":SCHED_RR; "FIFO":SCHED_FIFO; "NORMAL":SCHED_OTHER; "OTHER":SCHED_OTHER;
g 打印当前进程的调度器类型

renice -r [prio] [pids]             动态更改实时进程优先级
renice -r -t [type] [prio] [pids]      动态更改普通进程提为实时进程,并设置进程优先级
renice -g pids                   查看进程的调度器
renice [prio] [pids]               动态降低普通进程的优先级
busybox-smp renice [nice] -p [pids] 动态提升普通进程的优先级
调整进程优先级时,PR{Priority},NI{nice}。PR范围-20~19越小,进程优先权就越高,换算公式为:PR(new) = PR(old) + NI 

范例:

a.动态更改实时进程优先级

b.动态更改普通进程提为实时进程,并设置进程优先级

c. 查看进程的调度器

d. 动态降低普通进程的优先级

e. 动态提升普通进程优先级

(2)Android7.0 renice 命令

usage: renice [-gpu] -n increment ID ..

renice -n [nice] -p [pids]             动态调整进程nice值
renice -n [nice] -g [pids]             动态调整进程空间所有线程的nice值

范例:
a.调整进程的nice值
renice -n -8 -p 1729

b.调整进程中所有线程的nice值
renice -n -8 -g 1729

c.通过ps -p命令或者top命令观察是否生效

(3)Android7.0 taskset命令
usage: taskset [-ap] [mask] [PID | cmd [args...]]
-p      Set/get the affinity of given PID instead of a new command.
-a      Set/get the affinity of all threads of the PID.
mask   十六进制,需要绑定的cpu对应 bitmap mask,cpu0 mask 为1,cpu1 mask 为2,cpu2 mask 为4,cpu0-1 mask为1+2=3.....

范例:
a.确保需要绑定的cpu处于online状态
echo 0 > /sys/kernel/autohotplug/enable (如果平台使用了cpu-hotplug开关核策略,首先需要关闭)
echo 1 >/sys/devices/system/cpu/cpuX/online (如果平台4个cpu,X为0,1,2,3)

b.对进程组所有的线程设置cpu亲和性
taskset -ap 1 1729 (绑定1729组所有线程到cpu0)
taskset -ap 3 1729 (绑定1729组所有线程到cpu0-1)
taskset -ap 6 1729 (绑定1729组所有线程到cpu1-2)
taskset -ap c 1729 (绑定1729组所有线程到cpu2-3)
taskset -ap e 1729 (绑定1729组所有线程到cpu1-3)

c.对单个线程设置cpu亲和性
taskset -p 1 1729 (绑定进程1729到cpu0)
taskset -p 3 1729 (绑定进程1729到cpu0-1)
taskset -p 6 1729 (绑定进程1729到cpu1-2)
taskset -p c 1729 (绑定进程1729到cpu2-3)
taskset -p e 1729 (绑定进程1729到cpu1-3)

d. 观察cpu亲和性状态
Busybox-smp top -d 1 | grep 1729 (观察进程1729的迁移变化)

(4)Android top命令
Usage: top [ -m max_procs ] [ -n iterations ] [ -d delay ] [ -s sort_column ] [ -t ] [ -h ]
    -m num  Maximum number of processes to display.
    -n num  Updates to show before exiting.
    -d num  Seconds to wait between updates.
    -s col  Column to sort by (cpu,vss,rss,thr).
    -H      Show threads instead of processes.

范例:

通过top观察进程和线程负载变化

top -d 1 -m 12 -t -H

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
free-jdx
红包 98 7 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
free-jdx
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区