[067]perfetto进阶使用

前言

[061]perfetto使用简介中,介绍了如何使用System Tracing的界面中来抓perfetto trace,这个方式的好处就是不需要连接电脑,可以离线抓取,但是perfetto有其他强大的功能,需要使用连接电脑才能发挥。

一、Record new trace

打开以下链接

https://ui.perfetto.dev/#!/record

简单理解,这个界面是用于可视化开启关闭perfetto的选项生成对应的指令。


二、Recording settings

首先是选择录制的设置,主要有三种模式,每种模式的作用不一样。

2.1 Stop when full

2.1.1 In-memory buffer size

代表每一个核上可以存储的最大的trace的buffer,在内存中,不会影响IO。

2.1.2 Max duration

设置此次trace抓取的最大时长,图中就是10s。

小结

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


2.2 Ring buffer

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


2.3 Long trace

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


2.3.1 Max file size

代表生成long trace的最大文件大小,在使用perfetto,你需要评估一下可能生成的文件的大小,如果在你设置的Max duration期间,Max file size超了,会有异常bug产生,perfetto会停不下来来了。

2.3.2 Flush on disk every

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

小结

Long trace主要是受Max duration,或者ctrl + c暂停命令。
我个人最推荐的配置:
64MB,30m,10GB,2500ms。

当然对于long trace,一般是用于用户去复现问题,我更推荐用[061]perfetto使用简介的离线抓取方式。

2.4 选择合适模式

这三种模式的特性都了解了,可以根据自己的实际使用需求,选择合适的模式抓取perfetto trace。

三、Recording command

这个界面就是生成指令的地方,点击右上角的复制按钮,在PC连接手机的情况下,运行这个指令就可以抓取trace了。

下面各个选项的打开关闭,都会更新这个Recording command。

四、CPU

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


4.1 Coarse CPU usage countor

我一般都会开,但是目前没有发现在perfetto的文件打开之后主要对应那块的数据。

4.2 Scheduling details

可以看到每个cpu上运行的task


4.3 CPU frequency and idle states

可以看到每个cpu的运行频率


4.4 Syscalls

可以记录每一个系统调用,但是我一般不开,因为感觉影响性能比较大。

五、GPU

可以记录GPU的主频和GPU的内存


5.1 GPU frequency

可以看到GPU的频率,繁忙程度


5.2 GPU memory

可以看到目前只能在Android12+以上的使用

六、Power

我基本就不开了,对处理功耗的问题的朋友有用。可以尝试开一下,看看什么效果。


七、Memory

有关内存的那么多选项,大家可以按需选择开启关闭,英文也比较简单的。
我一般不开,当怀疑是内存导致的性能问题,我会选择开启。


八、Android APP & svcs

这是最重要的选项,性能优化肯定要用到的。


8.1 Atrace userspace annotations

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


8.2 Event log(logcat)

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


生成的perfetto文件,滑动下方的android log,可以看到有一根竖线,对应到trace的tag,日志和trace tag的一一对应,是不是很牛逼的功能。

8.3 Frame timeline

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

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

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



九、Chrome

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


十、Advanced settings

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


十一、开启APP的Atrace

这个开关,并不在这个界面中,我们可以手动加上这个flag

atrace_apps: "*"

总结

大家可以发现,perfetto的功能比传统的systrace的功能强大很多,而且google也在推荐使用这个。
这个应该是未来的趋势,我贴一个我常用的perfetto的指令。

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容