本讲是Android Camera性能分析专题的第35讲,我们介绍Perfetto 分析CPU 调度。
更多资源:
资源 | 描述 |
---|---|
在线课程 | 极客笔记在线课程 |
知识星球 | 星球名称:深入浅出Android Camera 星球ID: 17296815 |
极客笔记圈 |
Perfetto CPU 调度分析需要打开的Config
需要打开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里面能看到,效果如下: