安卓系统中线程优先级Priority查看方式汇总
背景:
在audio相关模块开发时候,会有遇到一些优先级比较高的线程比如快速混音线程FastMixer,但是这个快速混音中的快到底是如何体现的呢?其实有一个部分就是线程的优先级,优先级直接会影响线程的cpu获取情况,本文主要来给大家讲解一下如何获取查看系统中相关线程的优先级情况。
adb shell查看线程优先级方式:
查看某个进程各个线程的优先级情况
top -H -p 1014
Threads: 18 total, 0 running, 18 sleeping, 0 stopped, 0 zombieMem: 2728512K total, 2675760K used, 52752K free, 52092K buffersSwap: 524284K total, 0K used, 524284K free, 1206072K cached
400%cpu 0%user 0%nice 150%sys 250%idle 0%iow 0%irq 0%sirq 0%hostTID USER PR NI VIRT RES SHR S[%CPU] %MEM TIME+ THREAD PROCESS 3811 audioserver 20 0 11G 22M 16M S 0.0 0.8 0:00.19 binder:1014_5 audioserver2886 audioserver 20 0 11G 22M 16M S 0.0 0.8 0:00.46 binder:1014_4 audioserver2007 audioserver 20 0 11G 22M 16M S 0.0 0.8 0:00.32 binder:1014_3 audioserver1918 audioserver 1 -19 11G 22M 16M S 0.0 0.8 0:00.13 AudioOut_2D audioserver1917 audioserver -4 -19 11G 22M 16M S 0.0 0.8 0:00.00 FastMixer audioserver1909 audioserver 1 -19 11G 22M 16M S 0.0 0.8 0:00.07 AudioOut_15 audioserver1906 audioserver -4 -19 11G 22M 16M S 0.0 0.8 0:03.11 FastMixer audioserver1907 audioserver 1 -19 11G 22M 16M S 0.0 0.8 0:01.04 AudioOut_D audioserver1908 audioserver 20 0 11G 22M 16M S 0.0 0.8 0:00.00 HwBinder:1014_3 audioserver1905 audioserver 20 0 11G 22M 16M S 0.0 0.8 0:00.03 TimerThread audioserver1342 audioserver 4 -16 11G 22M 16M S 0.0 0.8 0:00.00 ApmAudio audioserver1343 audioserver 4 -16 11G 22M 16M S 0.0 0.8 0:00.77 ApmOutput audioserver1106 audioserver 4 -16 11G 22M 16M S 0.0 0.8 0:00.00 AudioFlinger_Pa audioserver1102 audioserver 20 0 11G 22M 16M S 0.0 0.8 0:00.00 HwBinder:1014_2 audioserver1099 audioserver 20 0 11G 22M 16M S 0.0 0.8 0:00.00 HwBinder:1014_1 audioserver1067 audioserver 20 0 11G 22M 16M S 0.0 0.8 0:00.43 binder:1014_2 audioserver1066 audioserver 20 0 11G 22M 16M S 0.0 0.8 0:00.04 binder:1014_1 audioserver1014 audioserver 20 0 11G 22M 16M S 0.0 0.8 0:00.81 audioserver audioserver
这里主要看到 PR NI这两个值。
chrt -p 1906查看具体的scheduling
130|gemini:/ # chrt -p 1906
pid 1906's current scheduling policy: SCHED_FIFO
pid 1906's current scheduling priority: 3
gemini:/ # chrt -p 1014
pid 1014's current scheduling policy: SCHED_OTHER
pid 1014's current scheduling priority: 0
gemini:/ #
SCHED_FIFO(先进先出实时调度)
特点:
实时调度策略,无时间片限制相同优先级按FIFO顺序执行高优先级线程可立即抢占低优先级线程线程会一直运行直到:主动放弃、被更高优先级线程抢占、阻塞
SCHED_OTHER(完全公平调度CFS)
特点:
默认调度策略,所有普通线程使用基于完全公平调度器(CFS)算法使用动态优先级,受nice值影响有固定的CPU时间片
Perfetto查看线程优先级方法:
FastMixer线程优先级为96 (real-time)
普通的MxierThread的优先级为 Priority 101:
可以看到其实这里看到静态priority是 96和101,和上面top获取的是有一个转换关系
原文地址:
https://mp.weixin.qq.com/s/LsjJA8WNEfRFV4ts9kdTqQ
更多framework实战干货,请关注下面“千里马学框架”