前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Perfetto 与systrace

Perfetto 与systrace

作者头像
用户9732312
发布2022-05-13 21:06:28
3.1K0
发布2022-05-13 21:06:28
举报
文章被收录于专栏:ADAS性能优化

Perfetto是用于性能检测和跟踪分析的生产级开源堆栈。它提供用于记录系统级和应用程序级跟踪的服务和库,本机Java堆分析,使用SQL分析跟踪的库以及基于Web的UI以可视化的系统性能分析。在Android上,Perfetto是下一代系统性能的分析工具,它取代了systrace。 仍完全支持SYSTRACE.

其架构图如下:

Perfetto能抓哪些平台的log

Ø Android

Ø Linux

Ø Chrome

Ø 其他baselinux的嵌入式系统

Ø Fuchsia

· 内核跟踪:Perfetto与Linux的ftrace集成,并允许将内核事件(例如调度事件,系统调用)记录到log 中。

· / proc和/sys pollers,它们可以随时间采样进程范围或系统范围的cpu和内存计数器的状态。

· 与Android HALs模块集成,用于记录电池和电量消耗计数器。

· Native memroy profiling:能分析进程的native的memory 包括malloc / free / new / delete并将内存与调用栈相关联。

· Java memory分析:与Android RunTime集成,能分析进程堆保留图的完整快照(类型,字段名称,保留的大小和对其他对象的引用),能分析出java内存使用情况。

PerfettoUI 能解析哪些log

  • Perfetto native protobuf format
  • Linux ftrace
  • Android systrace
  • Chrome JSON (including JSON embedding Android systrace text)
  • Fuchsia binary format log
  • Ninja logs (the build system)

Tracing SDK anduser-space instrumentation

可以在C++ 程序中添加Perfetto trace来debug 程序的性能问题。如TRACE_EVENT("category", "event_name","x", "str", "y", 42)。

Trace analysis

除抓log外功能外,Perfetto代码库还包括一个专用项目,用于导入,解析和查询新的和旧的systrace log 分析--Trace Processor。

Trace Processor是一个可移植的C ++ 11库,它提供面向列的表存储,专门设计用于将数小时的跟踪数据有效地保存到内存中,并基于流行的SQLite查询引擎公开SQL查询接口。跟踪数据模型成为一组 SQL表,可以通过极其强大和灵活的方式查询和联接这些SQL表以分析跟踪数据。

最重要的是,Trace Processor还包括一个基于跟踪的指标子系统,该子系统由预烘焙和可扩展的查询组成,可以以JSON或protobuf消息的形式(例如,不同频率下的CPU使用率)输出有关跟踪的强类型摘要。状态,按进程和线程细分)。

基于跟踪的度量标准允许在性能测试方案或批处理分析或大型跟踪主体中轻松集成跟踪。

跟踪处理器还设计用于低延迟查询和构建跟踪可视化器。Perfetto UI将跟踪处理器用作Web程序集模块,将Android Studio和 Android GPU检查器用作本机C ++库。

Tracevisualization

Perfetto还提供了一个全新的跟踪可视化工具,用于打开和查询长达数小时的跟踪,可从ui.perfetto.dev获得。新的可视化工具利用了现代Web平台技术。基于WebWorkers的多线程设计使UI始终保持响应;浏览器和SQLite的分析能力可通过WebAssembly在浏览器中完全使用。

打开一次后,Perfetto UI可以完全脱机工作。使用UI打开的跟踪由浏览器在本地处理,不需要任何服务器端交互。

Perfetto与systrace

· Perfetto完全兼容systrace

· Perfetto可以抓更丰富、更全面,更长时间的log。Perfetto 适用于多平台。

· Perfetto 是基于SQL lite的,更便于后处理。

· Perfetto 可以显示 sys call/进程memory/系统memory等

· Perfetto 显示不够systrace 友好。

Memory debug 例子

我们可以使用Perfetto从内核获取有关内存管理事件的信息。

  • 拍照时memory 使用情况

adb shell perfetto \

-c ---txt \

-o/data/misc/perfetto-traces/trace \

<<EOF

buffers: {

size_kb: 8960

fill_policy: DISCARD

}

buffers: {

size_kb:1280

fill_policy: DISCARD

}

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: "mm_event/mm_event_record"

ftrace_events: "kmem/rss_stat"

ftrace_events: "kmem/ion_heap_grow"

ftrace_events: "kmem/ion_heap_shrink"

}

}

}

duration_ms: 30000

EOF

拍照完成后,pull trace 文件。

使用提取文件adb pull/data/misc/perfetto-traces/trace ~/mem-trace 并上传到Perfetto UI。这将显示有关系统memory使用情况的总体统计信息,并扩展每个进程的统计信息。这将显示摄像机各种内存统计信息的时间表。

我们可以看到大约有2/3,内存增加了(在mem.rss.anon跟踪中)。这是查看应用程序内存使用情况如何对不同触发器做出反应的好方法。

Analyzing the Native Heap

应用程序通常通过mallocC ++获取内存,new而不是直接从内核获取内存。分配器确保您的内存得到更有效的处理,并且确保请求内核的开销仍然很低。

我们可以记录本地分配,并使用heapprofd释放进程执行的 分配。结果配置文件可用于将内存使用情况归因于特定的函数调用堆栈,从而支持本机代码和Java代码的混合使用。配置文件仅显示运行时完成的分配,之前显示的任何分配都不会显示。

使用tools/heap_profile脚本来分析进程

$ tools/heap_profile -n system_server

Profiling active. Press Ctrl+C to terminate.

You may disconnect your device.

Wrote profiles to /tmp/profile-1283e247-2170-4f92-8181-683763e17445(symlink /tmp/heap_profile-latest)

Thesecan be viewed using pprof. Googlers: head to pprof/ and upload them.

当您看到“性能分析”处于活动状态时,请测试你的用例。完成后,按Ctrl-C结束配置文件。

然后将raw-trace文件从输出目录 上载到Perfetto UI,然后单击显示的菱形标记。

可用的选项卡是

  • space: how many bytes were allocated but not freed at this callstack the moment the dump was created.
  • alloc_space: how many bytes were allocated (including ones freed at the moment of the dump) at this callstack
  • objects: how many allocations without matching frees were sampled at this callstack.
  • alloc_objects: how many allocations (including ones with matching frees) were sampled at this callstack.

默认视图将向您显示配置文件运行时完成但尚未释放的所有分配(空格选项卡)。

我们可以看到,在的路径中分配了很多内存 ResourceManager.loadApkAssets。要获得以这种方式分配的总内存,我们可以在“焦点”文本框中输入“loadApkAssets”。这只会显示某些框架与“ loadApkAssets”匹配的调用堆栈。

Perfetto 提供了更丰富的分析手段和更强大的功能,然而,其坏处非常明显。

· 抓Perfetto log比较复杂,不知道怎么抓,不习惯。

· 就是需要把自己的perfetto 上传到https://ui.perfetto.dev/#!/才能解析。安全性/方便性得不到解决。

然而,我们将会提供非常方便、非常安全的方式解决perfetto 解析的问题,敬请期待!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Android性能优化 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Perfetto能抓哪些平台的log
  • PerfettoUI 能解析哪些log
  • Tracing SDK anduser-space instrumentation
  • Trace analysis
  • Tracevisualization
  • Perfetto与systrace
  • Memory debug 例子
  • Analyzing the Native Heap
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档