Ahao's Technical Blog Ahao's Technical Blog
首页
  • 001.基础篇
  • 002.玩转AOSP篇
  • 003.学穿Binder篇
  • 004.基础组件篇
  • 005.系统启动过程分析
  • 006.Hal开发入门与实践
  • 007.显示系统
  • 008.核心系统服务
  • 009.开发工具
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

阿豪讲Framework

不积跬步无以至千里
首页
  • 001.基础篇
  • 002.玩转AOSP篇
  • 003.学穿Binder篇
  • 004.基础组件篇
  • 005.系统启动过程分析
  • 006.Hal开发入门与实践
  • 007.显示系统
  • 008.核心系统服务
  • 009.开发工具
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 基础篇

  • 玩转AOSP篇

  • 学穿Binder篇

  • 基础组件篇

  • 系统启动过程分析

  • Hal开发入门与实践

  • 显示系统

  • 核心系统服务

  • 开发工具

    • Perfetto 上手指南1 —— Trace 的抓取
    • Perfetto 上手指南2 —— 基础使用
    • Perfetto 上手指南3 —— CPU 信息分析
      • 1.CPU 信息的抓取
      • 2.查看 CPU 频率
      • 3.查看 CPU 占用率
      • 4.线程状态分析
        • 4.1 Running
        • 4.2 Runnable
        • 4.3 Sleeping
        • 4.4 Uninterruptible Sleep (IO)
        • 4.5 Uninterruptible Sleep (Non IO)
      • 5.CPU 调度情况分析
  • Framework
  • 开发工具
阿豪
2025-10-08
目录

Perfetto 上手指南3 —— CPU 信息分析

# Perfetto 上手指南3 —— CPU 信息分析

# 1.CPU 信息的抓取

要查看 CPU 信息,在抓取之前,需要勾选上下面几个选项:

20250321133909

# 2.查看 CPU 频率

在 CPUX Frequency 区域可以看到每个核心的频率变化情况:

20250321134405

一个常见的场景是查看某段 slice 跑在哪个 CPU 以及对应的频率

找到我们关心的 slice,假设是下面的 Choreogrepher#doFrame 78786:

20250321135355

选择其上方的 Running,可以在信息区看到下面的信息:

20250321135502

点击 Running on CPU 6,跳转到 CPU 区域,可以看到当前 Task 运行在 CPU 6 上,鼠标移动到下方的频率区域即可查看到对应的频率了:

20250321135626

# 3.查看 CPU 占用率

首先在操作区任意位置框选出我们关心的时间段:

20250321135721

在下方的信息区域可以查看到每个线程/进程的 CPU 时间占用情况:

20250321141341

从上到下可以看到每个线程/进程的 CPU 占用情况,越上面的线程/进程占用时间越多、

CPU 占用率 = CPU占用时间 / 总时间 / 核心数,上面的例子就是:

334.08 / 110.95 / 8 =  37.6%
1

# 4.线程状态分析

操作区的 thread_state slice 用于展示线程的运行状态。主要有以下几种类型:

  • Running,深绿色
  • Runnable,浅绿色
  • Sleeping,白色
  • Uninterruptible Sleep (IO),橙色
  • Uninterruptible Sleep (Non IO),紫红色

# 4.1 Running

20250322114004

深绿色的表示线程处于运行状态(RUNNING),线程在正常执行代码逻辑。

下方信息区相关的信息如下:

20250322122540

# 4.2 Runnable

20250322122743

浅绿色表示线程处于可运行状态(Runnable),线程正在等待调度器的调度上 CPU 执行。

# 4.3 Sleeping

20250322124058

空白区域表示线程处于睡眠状态(Sleeping),多见于 epoll_wait 系统调用。

# 4.4 Uninterruptible Sleep (IO)

20250323112034

橙色区域代表 Uninterruptible Sleep (IO) 状态,一般线程在 IO 操作上阻塞了。 不可中断状态实际上是系统对进程和硬件设备的一种保护机制。比如,当一个进程向磁盘读写数据时,为了保证数据的一致性,在得到磁盘回复前,它是不能被其他进程或者中断打断的。

20250323112201

在下方信息区域可以找到阻塞函数

# 4.5 Uninterruptible Sleep (Non IO)

20250323113337

紫红色区域代表 Uninterruptible Sleep (Non IO),一般是在等待锁或者是 Binder 远程调用。

20250323113433

下方信息区域可以看到阻塞函数

# 5.CPU 调度情况分析

20250323113739

在 CPU 信息区域,我们可以看到每个线程/任务在 CPU 上的调度情况,通过 SOC 供应商的文档,我们可以知道 CPU 的大小核情况,从何了解到每个任务跑在什么类型的核心上,通常需要和竞品做对比。

20250323113957

当我们把鼠标放在某一个任务上时,该任务就会高亮,其他任务变成灰色,方便我们查看单个任务的调度情况。

Perfetto 上手指南2 —— 基础使用

← Perfetto 上手指南2 —— 基础使用

最近更新
01
显示疑难问题分析基础
10-08
02
Perfetto 上手指南1 —— Trace 的抓取
10-08
03
Perfetto 上手指南2 —— 基础使用
10-08
更多文章>
Theme by Vdoing | Copyright © 2020-2025 AHao Framework | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式