本讲是android camera性能分析专题的第35讲,我们介绍perfetto 分析cpu 调度。
更多资源:
资源 | 描述 |
---|---|
在线课程 | |
知识星球 | 星球名称:深入浅出android camera 星球id: 17296815 |
极客笔记圈 |
需要打开scheduling events trace config。
data_sources: {
config {
name: "linux.process_stats"
target_buffer: 1
process_stats_config {
scan_all_processes_on_start: true
}
}
}
data_sources: {
config {
name: "linux.ftrace"
ftrace_config {
ftrace_events: "sched/sched_switch"
ftrace_events: "power/suspend_resume"
ftrace_events: "sched/sched_wakeup"
ftrace_events: "sched/sched_wakeup_new"
ftrace_events: "sched/sched_waking"
ftrace_events: "sched/sched_process_exit"
ftrace_events: "sched/sched_process_free"
ftrace_events: "task/task_newtask"
ftrace_events: "task/task_rename"
buffer_size_kb: 2048
drain_period_ms: 250
}
}
}
cpu状态简介
cpu状态 | 说明 |
---|---|
sleeping | 线程处于休眠状态,一般是在等待事件驱动 |
runnable | 线程有task要运行,但是cpu调度器 scheduler 尚未调度让它运行,如果长时间调度不到,说明cpu繁忙 |
running | 线程正处于运行状态,线程在正常执行代码逻辑 |
uninterruptible sleep – non io | 不可中断的休眠状态,非io导致,在等内核锁。通常是低内存导致等待、各种各样的内核锁。 |
uninterruptible sleep – block io | 不可中断的休眠状态,io阻塞 |
perfetto查看scheduling wakeups
选中cpu的running状态
然后切到cpu slice,就可以看到wakeup关系
如何分析uninterruptible sleep原因
-
只适用于userdebug/eng版本
-
ftrace_config里面加入
symbolize_ksyms: true
ftrace_events: "sched/sched_blocked_reason"
- 在threadstate里面能看到,效果如下: