Perfetto 介绍第一篇
前言:虽然有翻译软件,虽然有chatgpt,毕竟语言隔阂,对这个工具还是一知半解,因此想通过翻译的方式和大家来一起学习下Perfetto这个强大的工具
Perfetto 介绍第二篇
#####################以下分割线#####################
英文原文在这里
Perfetto - 一个用于系统分析、应用程序trace抓取和trace分析的利器
Perfetto是一个用于性能分析和trace分析的生产级开源堆栈工具。它提供用于服务和库,可以用来抓取系统级别和应用级别的trace。也可以用来分析native和 Java 堆内存。Perfetto包括一个使用 SQL 分析跟踪数据的库和一个基于 Web 的 UI 以可视化和探索GB级别大小的trace。
![](https://img.haomeiwen.com/i2972443/4ff42daa7a705ab6.png)
抓取trace
作为工具的核心,Perfetto引入了一种新颖的从用户空间到用户空间的的trace 协议,该协议基于对共享内存缓冲区的直接protobuf序列化。这个trace 协议既能在已经构建好的数据源上使用(安卓+chrome ?),也能通过Tracing SDK 和trace事件库的方式导出到c++应用中。
android和linux 系统上的trace
在Linux和Android上,Perfetto有很多数据来源,这些数据源能够从不同的系统接口收集详细的性能数据。有关完整集合和详细信息,请参阅文档的“数据源”部分。数据来源有以下这些:
-
内核trace: Perfetto集成了linux 系统的ftrace,这使得Perfetto可以记录内核的事件(比如,调度事件,系统调用等)到trace文件中,
-
/proc and /sys pollers: 允许对进程范围或系统范围的cpu和内存计数器的状态进行采样。
-
Android HAL :可以用来记录耗电量信息
-
native堆分析:一个性能开销小的堆分析器,通过hook malloc/free/new/delete等内存相关方法,并且可以将函数调用关系与分配相关联。基于out-of-process unwinding,和动态化的采样技术,可以直接从运行中的进程采集。
-
Java堆:通过与Android runtime 深度绑定的out-of-process 分析器,可以获取到完整的内存分配快照(包括类型、字段名、持有对象大小和对其他对象的引用)。而不需要获取到全部的堆对象内容,这减少了序列化的时间和减少了文件大小。
在Android平台上,Perfetto是下一代的分析工具,会替代基于chromium的systrace. 而基于ATrace的instrumentation](https://perfetto.dev/docs/data-sources/atrace) 仍然会继续保留,你可以在这里看到更详细的信息。
Tracing SDK和用户空间检测
Perfetto Tracing SDK让C++开发者也抓取更多的app 特有的trace,既可以自定义事件类型,使用自定义的数据来源,这样更加灵活。也可以简单的使用Track Event Library 这个库,这个库只需要加上类似TRACE_EVENT("category", "event_name", "x", "str", "y", 42)
的注解,就可以简单的获得带有时间长度的slices,以及计数器和时间标记信息。
SDK是为跟踪多进程系统和多线程进程而设计的。它基于ProtoZero,这是一个用于在线程本地共享内存缓冲区上直接写入protobuf事件的库。
相同的代码既可以在完全进程模式下工作(在专用线程上托管Perfetto跟踪服务的实例),也可以在系统模式下工作,通过UNIX套接字连接到Linux/Android tracing守护进程,允许将应用程序的instrumentation与系统范围的跟踪事件相结合。
SDK基于可移植的C++17代码,使用主要的C++清理程序(ASan、TSan、MSan、LSan)进行测试。它不依赖于运行时代码修改或编译器插件。
在Chromium 上tracing
Perfetto的设计初衷是取代chrome://tracing这些基础工具,Chromium中的tracing基于Perfetto在所有主要平台(Android、CrOS、Linux、MacOS、Windows)的代码库,因此在这些系统上的trace 大体架构也类型,但在内部使用Chromium Mojo IPC系统,而不是Perfetto自己的UNIX套接字。
默认情况下,tracing在Chromium中以进程内模式工作,只记录Chromium进程发出的数据。在Android(以及Linux上,如果禁用Chromium沙箱)上,跟踪可以在混合进程内+系统模式下工作,将特定于chrome的跟踪事件与Perfetto系统事件相结合。
trace 分析
Perfetto不光能采集trace,而且还包括数据导入,数据解析和查询新旧trace格式的工具。Trace Processor.
Trace Processor是一个可移植的C++17库,它提供了面向列的表存储,专门设计用于将数小时的跟踪数据有效地保存到内存中,并提供了一个基于流行的SQLite查询引擎的SQL查询接口。跟踪数据模型变成了一组SQL表,可以通过极其强大和灵活的方式查询这些表来分析trace数据。
除此之外,跟踪处理器还包括一个基于trace的度量子系统,该子系统由初步的和可扩展的查询组成,可以以JSON或protobuf消息的形式输出关于trace的重点摘要(例如,按进程和线程划分,不同频率状态下的CPU使用情况,)。
基于trace的度量系统可以在性能测试场景或大批量分析或中轻松集成。
Trace Processor还设计用于低延迟查询和构建跟踪可视化工具。如今,Trace Processor被Perfetto UI用作Web Assembly模块,Android Studio和Android GPU Inspector用作原生C++库。
可视化trace
Perfetto还提供了一个全新的跟踪可视化工具,用于打开和查询长达数小时的跟踪,可在ui.Perfetto.dev上获得。新的可视化工具利用了现代网络平台技术。其基于多线程设计的WebWorkers使UI始终保持响应;Trace Processor和SQLite的分析能力通过WebAssembly在浏览器中完全可用。
Perfetto UI在打开一次后可以完全离线工作。使用UI打开的跟踪由浏览器本地处理,不需要任何服务器端交互。
![](https://img.haomeiwen.com/i2972443/9b1ba615b2245fa4.png)
欢迎参与进来
问题反馈
Android 系统的trace ,请点击这里
chrome 系统的trace,请点击这里
#####################以上分割线#####################
后记:
1 本次主要使用百度翻译,虽然被骂,但至少翻译这个工具降低了门槛。
2 英文文档中的长难句真的是又长又难,基于百度的翻译,然后自己再调整下,水平实在有限。
3 技术背景知识不够,有些专有名词不知道怎么翻译,也不知道百度翻译的是否准确,功夫在诗外。
4 万事开头难,中间难不难,还不知道。中间的事后面再说,正确一天翻译一篇。
5 虽然可能会有人不屑,但总要有人去做不起眼的小事。
6 google 厉害,这个perfetto 工具也很厉害。君子善假于物也。
7 工具的使用是最简单的入门,背后还有更多的东西值得学习。
8 水平实在有限,闻过则喜,希望有更多的人反馈,期待更好的建议