首页 > 其他分享 >perfetto 简介

perfetto 简介

时间:2023-01-17 00:33:05浏览次数:37  
标签:log trace buffer 简介 perfetto GPU CPU

转自:https://cloud.tencent.com/developer/article/1905180

 

1. Recording settings

录制的设置,主要有三种模式,适合不同的场景。

1.1 Stop when full

in-memory buffer size

代表可以存储trace的最大buffer大小。在内存中,不会影响到IO。

Max duration

设置此次 trace 抓取的最大时长。

Stop when full模式下,perfetto停止工作受Max duration和buffer size影响,一旦满足其中一个条件,perfetto将会停止。 优点:trace不会因为overwrite而导致丢失。 缺点:如果trace太多,会导致提前结束,无法录制到出现问题时候的trace。 一般10s,64mb也就够用了。

1.2 Ring buffer 

可以看到选项和2.1 Stop when full一样,意思也是一样。Ring buffer模式只会收到Max duration的影响,时间到了就停止抓取trace,但是trace会有被overwrite的风险。

 

1.3 Long trace

用于长时间地抓取trace,但是由于需要定时将buffer中的trace写到文件里面去,会有IO的影响。前面两个选项和前两个模式的意思是一样的。

Flush on disk every

间隔多少时间将buffer中的trace写入到文件中。这个数值不能太大也不能太小。太大了,容易丢trace,太小了容易影响IO。

Long trace主要是受Max duration,或者ctrl + c暂停命令。

 

2. CPU

CPU选项是经常使用的,基本上除了syscalls不打开,前面三个都会常规打开

2.1 Coarse CPU usage countor

粗粒度的CPU使用统计

2.2 Scheduling details

可以看到每个CPU上运行的task。

2.3 CPU frequency and idle states

可以看到每颗CPU的运行频率以及是否空闲

2.4 Syscalls

需要userdebug版本系统,可以记录每一个系统调用,但是对性能影响比较大

 

3. GPU

可以记录 GPU 主频以及GPU 内存使用

3.1 GPU Frequency

可以看到GPU频率

3.2 GPU Memory

可以看到GPU内存使用量以及各个进程的占用,仅Android 12+以上使用。

 

4. Power

5. Memory

 

6. Android apps & svcs

6.1 Atrace userspace anotations

开启这个选项之后,选择合适的atrace tag就可以开启对应的trace了,这个tag就对应了System Tracing的界面的catergray。

6.2 Event log (logcat)

可以实时记录log,然后将log和trace信息一一对应。 非常有利于分析问题。选择合适的log类型,就可以记录log了。

生成的perfetto文件,滑动下方的android log,可以看到有一根竖线,对应到trace的tag,日志和trace tag的一一对应

 

6.3 Frame timeline

这个是Android 12(S)的新功能,具体如何使用可以参考这个网址的官方视频

https://www.youtube.com/playlist?list=PLWz5rJ2EKKc-xjSI-rWn9SViXivBhQUnp

可以看到SF某一帧是合成的APP的哪一帧,已经合成的状态,具体作用,大家可以参考上面的链接视频。

 

7. Chrome

这个选项,主要是分析webview相关的性能问题,我也用的不多,大家如果遇到需要分析webview相关的性能问题,可以尝试开启这些功能。

8. Advanced settings

目前就一个功能,开启ftrace,对于需要分析内核性能问题,可以开启这个,选择对应的tag。或者可以自己增加。

 

9. 开启 APP 的 Atrace

atrace_apps: "*"

 

总结配置:

adb shell perfetto \
  -c - --txt \
  -o /data/misc/perfetto-traces/trace \
<<EOF

buffers: {
    size_kb: 63488
    fill_policy: DISCARD
}
buffers: {
    size_kb: 2048
    fill_policy: DISCARD
}
data_sources: {
    config {
        name: "android.gpu.memory"
    }
}
data_sources: {
    config {
        name: "linux.process_stats"
        target_buffer: 1
        process_stats_config {
            scan_all_processes_on_start: true
        }
    }
}
data_sources: {
    config {
        name: "android.log"
        android_log_config {
            log_ids: LID_EVENTS
            log_ids: LID_CRASH
            log_ids: LID_KERNEL
            log_ids: LID_DEFAULT
            log_ids: LID_RADIO
            log_ids: LID_SECURITY
            log_ids: LID_STATS
            log_ids: LID_SYSTEM
        }
    }
}
data_sources: {
    config {
        name: "android.surfaceflinger.frametimeline"
    }
}
data_sources: {
    config {
        name: "linux.sys_stats"
        sys_stats_config {
            stat_period_ms: 1000
            stat_counters: STAT_CPU_TIMES
            stat_counters: STAT_FORK_COUNT
        }
    }
}
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: "power/cpu_frequency"
            ftrace_events: "power/cpu_idle"
            ftrace_events: "power/gpu_frequency"
            ftrace_events: "gpu_mem/gpu_mem_total"
            ftrace_events: "sched/sched_process_exit"
            ftrace_events: "sched/sched_process_free"
            ftrace_events: "task/task_newtask"
            ftrace_events: "task/task_rename"
            ftrace_events: "ftrace/print"
            atrace_categories: "am"
            atrace_categories: "adb"
            atrace_categories: "aidl"
            atrace_categories: "dalvik"
            atrace_categories: "audio"
            atrace_categories: "binder_lock"
            atrace_categories: "binder_driver"
            atrace_categories: "bionic"
            atrace_categories: "camera"
            atrace_categories: "database"
            atrace_categories: "gfx"
            atrace_categories: "hal"
            atrace_categories: "input"
            atrace_categories: "network"
            atrace_categories: "nnapi"
            atrace_categories: "pm"
            atrace_categories: "power"
            atrace_categories: "rs"
            atrace_categories: "res"
            atrace_categories: "rro"
            atrace_categories: "sm"
            atrace_categories: "ss"
            atrace_categories: "vibrator"
            atrace_categories: "video"
            atrace_categories: "view"
            atrace_categories: "webview"
            atrace_categories: "wm"
            atrace_apps: "*"
        }
    }
}
duration_ms: 10000

EOF

 

标签:log,trace,buffer,简介,perfetto,GPU,CPU
From: https://www.cnblogs.com/treecarrybear/p/17056783.html

相关文章

  • Mavne简介与安装
    为什么需要Maven为什么要使用Maven?它能帮助我们解决什么问题?添加第三方jar包在今天的JavaEE开发领域,有大量的第三方框架和工具可以供我们使用。要使用这些jar包最简......
  • MybatisPlus简介
    介绍​​MyBatis-Plus​​​(简称MP)是一个​​MyBatis​​的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。我们的愿景是成为MyBatis最好的搭......
  • 几种常用的传感器(加速度传感器、重力传感器、方向传感器、陀螺仪)简介
    现在的手机或者其他便携设备中用到了越来越多的传感器,什么加速度传感器,方向传感器、重力传感器、陀螺仪、g-sensor、o-sensor等等,这些传感器到底是干什么用的,各自有什么特......
  • HTML 简介
    1.网页1.1什么是网页:网站是指在因特网上根据一定的规则,使用HTML等制作的用于展示特定内容相关的网页集合。网页是网站中的一“页”,通常是HTML格式的文件,它要......
  • GraphQL (一)简介
    GraphQL是Facebook创造的基于Graph的API查询语言,本文开始对GraphQL进行学习。本文介绍GraphQL的基本概念以及一个简单的ApolloServer实例GraphQL简介graphql是一种用......
  • Android开发学习之路--Android Studio项目目录结构简介
       既然已经搭建好环境了,那就对AndroidStudio中项目目录结构做个简单的了解了,这里以最简单的Hello工程为例子,新建好工程后看如下三个工程视图:1、Android工程manifest......
  • 第十九节:Pinia简介及state、getter、action详解、常用Api、setup简化写法
    一. 简介       二.state       三.getter     四.action   五.常用Api    六.setup简化写法   ......
  • 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介
    目录普冉PY32系列(一)PY32F0系列32位CortexM0+MCU简介普冉PY32系列(二)UbuntuGCCToolchain和VSCode开发环境PY32F0系列上市其实相当长一段时间了,样品已经吃灰......
  • [0]为什么是SpinalHDL-Spinal简介
    [0]为什么是SpinalHDL-Spinal简介1.verilog/VHDL打咩稍微先说两句SpinalHDL,硬件描述语言(HDL)分为verilog/VHDL和其他(雾),不过确实是这样,众多eda基本只对这两种语言有良好支......
  • ATX server简介
    简介atxserver是移动设备管理平台;搭建这样的一个平台,需要 python3.x+nodejs+rethinkdb,及atxserver2和atxserver2-android-provider 其他部件的作用:1、rethink......