第35讲 Perfetto 分析CPU 调度 - Android Camera性能分析

2024年10月30日 第35讲 Perfetto 分析CPU 调度 极客笔记

本讲是Android Camera性能分析专题的第35讲,我们介绍Perfetto 分析CPU 调度。

更多资源:

资源 描述
在线课程 极客笔记在线课程
知识星球 星球名称:深入浅出Android Camera
星球ID: 17296815
Wechat 极客笔记圈

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里面能看到,效果如下:

本文链接:http://so.lmcjl.com/news/16598/

展开阅读全文