精华内容
下载资源
问答
  • perfetto
    千次阅读
    2021-08-30 17:38:29

    AMLogic

    adb shell cat /sys/bus/cpu/devices/cpu0/cpufreq/cpuinfo_cur_freq

    参考文档

    Android官网

    https://developer.android.google.cn/topic/performance/tracing/command-line

    https://developer.android.google.cn/studio/command-line/perfetto

    Perfetto官网

    https://perfetto.dev/docs/data-sources/native-heap-profiler

    Native heap profiler - Perfetto Tracing Docs

    其他

    https://blog.csdn.net/sinat_20059415/article/details/106305944

    adb shell setprop persist.traced.enable 1

    如下,来自https://perfetto.dev/docs/quickstart/android-tracing

    1. Using the on-device /system/bin/perfetto command

    adb shell perfetto -o /data/misc/perfetto-traces/trace_file.perfetto-trace -t 20s \
    sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory

    adb pull data/misc/perfetto-traces/trace_file.perfetto-trace

    2. Using the helper script: using the tools/record_android_trace script to record traces from the command line

    ~$curl -O https://raw.githubusercontent.com/google/perfetto/master/tools/record_android_trace

    ~$chmod u+x record_android_trace

    ~$./record_android_trace -o trace_file.perfetto-trace -t 10s -b 32mb \

    sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory

    在函数开始位置添加ATRACE_CALL()后,在systrace里可以跟踪到调用这个函数的线程。

    在函数里添加ATRACE_ASYNC_BEGIN后,在systrace里可以单独列出当前标识。

    status_t Camera3Device::RequestThread::prepareHalRequests() {

            ATRACE_ASYNC_BEGIN("still capture", mNextRequests[i].halRequest.frame_number);

    void Camera3Device::removeInFlightRequestIfReadyLocked(int idx) {

            ATRACE_ASYNC_END("still capture", frameNumber);

    pertetto_config.txt内容如下:

    buffers: {    
        size_kb: 63488    
        fill_policy: DISCARD    
    }    
    buffers: {    
        size_kb: 2048    
        fill_policy: DISCARD    
    }    
    data_sources: {    
        config {    
            name: "linux.sys_stats"    
            sys_stats_config {    
                vmstat_period_ms: 1000    
                vmstat_counters: VMSTAT_ALLOCSTALL    
            }    
        }    
    }    
    data_sources: {    
        config {    
            name: "android.heapprofd"    
            target_buffer: 0    
            heapprofd_config {    
                sampling_interval_bytes: 4096    
                process_cmdline: "cameraserver"    
                shmem_size_bytes: 8388608    
                block_client: true    
            }    
        }    
    }    
    data_sources: {    
        config {    
            name: "linux.ftrace"    
            ftrace_config {     
                ftrace_events: "power/gpu_frequency"    
                ftrace_events: "ftrace/print"    
                atrace_categories: "camera"    
            }                                                                                                                                                                                                   
        }    
    }    
    duration_ms: 10000

    cat pertetto_config | adb shell perfetto -c - --txt -o /data/misc/perfetto-traces/trace.perfetto-trace

    adb pull /data/misc/perfetto-traces/trace.perfetto-trace .

    可以用perfetto分析卡顿和内存问题,尤其卡顿问题,每一帧耗时多长,每个node的耗时多长都可以清晰的看到,CPU的占用率及频率,注意APP到Framework再到HAL的buffer跳转走的是binder,通过点击binder箭头可以前后切换。另外,某个线程如果有绑核行为,通过trace也可以清晰看出来。

    关于CPU的状态信息也可以通过cat命令查看,如下:

    adb shell cat sys/devices/system/cpu/cpufreq/policy*/scaling_min_freq

    adb shell cat sys/devices/system/cpu/cpufreq/policy*/scaling_max_freq

    adb shell cat sys/class/kgsl/kgsl-3do/devfreq/min_freq

    adb shell cat sys/class/kgsl/kgsl-3d0/devfreq/max_freq

    adb shell cat sys/class/kgsl/kgsl-3d0/devfreq/cur_freq

    adb shell cat /proc/sys/kernel/sched_boost

    adb shell cat /proc/sys/kernel/sched_window_stats_policy

    adb shell cat /proc/sys/kernel/sched_upmigrate

    adb shell cat /proc/sys/kernel/sched_downmigrate

    adb shell cat /proc/sys/devices/system/cpu/cpu*/isolate

    adb shell cat /proc/sys/devices/system/cpu/cpu*/cpufreq/scaling_min_freq

    pause

    导致卡顿的原因,有可能是丢帧,也有可能是总帧间隔方差大或者帧率方差大导致。参考systrace,帧间隔可以重点看消费者的上升沿,如果上升沿的间隔或者帧率不对,说明HAL生产者输出的buffer有问题,需要HAL排查。

    如果有丢帧可以从两个方面考虑:负载引起的资源抢占还是内存造成的内存分配慢。如果是负载引起的抢占,可以进一步确认是否是查杀策略导致的负载差异,必要时拉通系统伙伴确认,确认UI first是否生效;如果是内存引起的内存分配慢,比较模式内存占用的大小,确认boost pool是否生效,kernel log中搜boostpool。

    功耗分析思路:OPPO用的ORMS,主要参数写一写。

    1.排除相机外部因素:

    测试手法:例如是否对准人头模型,涉及是否有美颜算法,虚化算法,人脸识别算法等。

    测试环境:如iso,不同iso可能会影响单帧,多帧算法。

    版本是否正确

    功耗机型号,如显示屏,模组等是否有差异。

    2.出图size、帧率是否符合要求。

    3.feature、算法,分析测试机与对比机是否开了不同的feature,走了不同的算法。

    4.各线程占用率是否符合要求。

    5.CPU频率:测试机与对比机限频策略是否一致。

    6.GPU频率:测试机与对比机限频策略是否一致。

    Energy Aware Scheduling(EAS)

    Linux调度新特性EAS_Hugo的博客-CSDN博客_eas调度

    讲内存的文章

    内存不能为read进不去桌面_内存与IO的交换_weixin_39662228的博客-CSDN博客

    systrace分析Camera卡顿

    Camera360 录像预览滞后-完整修正版

    select a.callsite_id, a.ts, a.upid, a.heap_name, a.type, a.id, a.ts, f.name, f.rel_pc, m.build_id, m.name as mapping_name,
            sum(a.size) as space_size, sum(a.count) as space_count
          from heap_profile_allocation a join
               stack_profile_callsite c ON (a.callsite_id = c.id) join
               stack_profile_frame f ON (c.frame_id = f.id) join
               stack_profile_mapping m ON (f.mapping = m.id)
          group by 1, 2, 3, 4, 5, 6, 7 order by space_size desc;

    下面截图来自CSDN

    更多相关内容
  • Perfetto UI-crx插件

    2021-04-03 17:24:52
    此扩展程序提供了从Perfetto跟踪查看器UI启动和停止Chrome性能跟踪的功能。 需要Chrome M81正常运行。 安装此项目,即表示您同意https://www.google.com/intl/zh-CN/policies/上的《 Google服务条款和隐私权政策》。
  • python库。 资源全名:perfetto-0.2.6.tar.gz
  • Perfetto字体

    2019-10-22 17:05:31
    Perfetto字体是一款用于包装设计方面的字体
  • camera360_trace.perfetto-trace
  • title: Perfetto for linux-使用 Perfetto 分析调度问题 date: 2020-11-21 22:40 author: gatieme tags: - scheduler - linux - debug categories: - scheduler thumbnail: blogexcerpt: Perfetto 工具是 Android 下...

    title: Perfetto for linux-使用 Perfetto 分析调度问题
    date: 2020-11-21 22:40
    author: gatieme
    tags:
    - scheduler
    - linux
    - debug
    categories:
    - scheduler
    thumbnail:
    blogexcerpt:
    Perfetto 工具是 Android 下一代全新的统一的 trace 收集和分析框架, 在 Android 9.0(API级别28)或更高版本的设备上, 可以使用 System Tracing 的 System App 在设备上记录系统跟踪, 可以抓取平台和app的 trace 信息, 是用来取代 systrace 的, 但 systrace 由于历史原因也还会一直存在, 并且 Perfetto 抓取的 trace 文件也可以同样转换成 systrace 视图.


    CSDNGitHubBlog知乎掘金
    紫夜阑珊-青伶巷草debug/tools/perfettoOS 内核实验室3589560936978869597248159757

    知识共享许可协议

    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作

    因本人技术水平和知识面有限, 内容如有纰漏或者需要修正的地方, 欢迎大家指正, 也欢迎大家提供一些其他好的调试工具以供收录, 鄙人在此谢谢啦


    日期更新
    2021/03/20将 1.3 节 关于信息安全问题 展开讲解

    1 Perfetto 概述


    1.1 为什么需要 Perfetto


    Perfetto 工具是 Android 下一代全新的统一的 trace 收集和分析框架, 在 Android 9.0(API级别28)或更高版本的设备上, 可以使用 System Tracing 的 System App 在设备上记录系统跟踪, 可以抓取平台和app的 trace 信息

    perfetto_leggcy_ui

    虽然 Perfetto 是用来取代 systrace 的, 但 systrace 由于历史原因也还会一直存在, 并且 Perfetto 抓取的 trace 文件也可以同样转换成 systrace 视图.

    如果习惯用 systrace 的, 可以用 Perfetto UI 的 Open with legacy UI 转换成 systrace 视图来看

    perfetto_leggcy_ui

    1.2 Perfetto 优点


    1. 支持 Android 和 Linux 上的全系统跟踪, 可以在线抓取长时间(可达数小时)的 trace, 子系统跟踪处理器 专门设计用于将数小时的跟踪数据有效地保存到本地中, 并基于流行的SQLite查询引擎公开SQL查询接口支持 SQL 查询. 这样就可以在后台开启, 让它一直抓取 trace 了, 特别适用于那种复现概率很低, 又比较严重的性能问题.

    2. Perfetto 具有很好的可扩展性, 它除了支持标准的 tracepoints(例如CPU调度信息, 内存信息等)之外, 还可以监听系统的多种信息, 比如 procfs 以及 sysfs 接口等; 还可以通过 atrace HAL 层扩展, 在 Android P当中, Google新增加了一个 atrace HAL 层, atrace 进程可以调用这个HAL的接口来获取当前的扩展信息, 比如添加用于记录电池和电量使用的统计信息, 程序的执行路径等. 相关代码可见 Google 提交, 这样如果需要扩展 tracepoints 的话, 就可以按照 graphic 的示例添加即可.

    3. 提供全新的 Perfetto UI 网站, 用于打开的跟踪, 并通过浏览器在本地处理, 不需要任何服务器端交互. 可以在上面通过选取开关的方式, 自动生成抓取 trace 的命令, 同时可以打开 trace 文件. 另外还集成了几种预定义的 trace 分析统计工具, 详情可见它的 Metrics and auditors 选项

    Perfetto 本身是一个框架, 关于它的架构和模块的详细介绍, 可以参考它的 doc 网站, 它的源码可以参考 Android Source Tree 的 /external/perfetto 目录, 里面有很多的tools, 配置和脚本等, 可以拿来直接使用.

    1.3 关于信息安全问题


    注意
    【请知悉】

    本文虽然是在介绍 perfetto 工具, 但是

    1. 用 perfetto 进行数据分析, 数据是否会被传回 google 服务器, 未经考证;

    2. perfetto 抓取的日志中的确包含机器的一些信息;

    3. perfetto 的数据存储格式无法直接解析, 具体涉及的信息也未经剖析;

    所以如果是涉密的数据(比如你在未发布的机器/服务器/开发板/手机等终端产品上抓取的日志).

    1. 没有数据证明, 该数据不会被收集分析.

    2. 因此如果设备或者数据涉及信息安全的相关内容, 请谨慎使用.

    2021/03/20 更新(之前一直纠结于是否更新这段内容, 前段时间跟同事讨论 perfetto 的时候, 说到信息安全问题同时也提到这段内容, 所以今天更新下, 说下自己的理解).
    之前在查阅 google perfetto 的文档的过程中发现了如下描述:

    The Perfetto UI works fully offline after it has been opened once. Traces opened with the UI are processed locally by the browser and do not require any server-side interaction.
    

    上面提到整个 Perfetto UI 打开一次之后就完全脱机运行了, trace 数据的处理都是在本地进行的, 不会做任何服务器请求.

    可以看到 Perfetto UI 的确不是一个本地的网址. 虽然有上述的声明, 但是鉴于国内外信息安全的一贯环境和形势, 建议大家的环境和数据如果涉及隐私信息, 还是谨慎为妙. 毕竟不作恶并不是真的不作恶.

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5qUuBzhX-1616169787582)(https://raw.githubusercontent.com/gatieme/LDD-LinuxDeviceDrivers/master/study/debug/tools/perfetto/01-description/ping_perfetto_ui.png)]

    详细信息参见: Perfetto - System profiling, app tracing and trace analysis.

    当然 perfetto 也为大家提供了自建服务的方式, 参见 build-instructions. 如果担心信息泄露, 建议还是使用自建的服务比较稳妥. 后期我也考虑有时间就自建 peretto 服务写一篇技术分享.

    博主在此提醒, 如果因为不慎使用导致的问题, 本博主不承担任何责任.

    由于我对网络安全不甚了解, 也欢迎有意愿的同学, 可以抓下 perfetto 使用过程中的网络请求, 确认下当前版本是否有数据传回.

    谢谢大家, 小弟在此不甚感激.

    2 Android 上使用 perfetto


    2.1 使能 perfetto


    由于 Perfetto 有一套服务框架, 为了捕获跟踪, 需要运行traced(会话守护程序)和traced_probes(探测和ftrace-interop守护程序).

    默认情况下, 这些服务是没有开启的, 可以看下手机上有没有这两个进程运行来确认这点.

    adb shell "ps -ef | grep -E "traced|traced_probes" | grep -v grep"
    

    如果没有这两个服务在运行, 那么可以使用如下命令来启用 perfetto

    adb shell setprop persist.traced.enable 1
    

    2.2 抓取 trace


    跟 systrace 一样, Perfetto 为我们提供了两种方式来抓取 trace 日志.

    1. 通过 Perfetto UI 中的记录页面, 参照 Quickstart: Record traces on Android.

    2. 使用 perfetto命令行 界面.

    我们自然使用 perfetto CLI 命令行方式来抓取.

    参数使用描述
    –out用来指定 trace 输出文件
    –config用来指定配置, 例如抓多长时间, 间隔多久把内存数据写回文件, 抓取哪些 tracepoints 等等, config 文件内容, 可以自己手动编写, 也可以用 Perfetto UI网站生成
    adb shell perfetto --config :test --out /data/misc/perfetto-traces/trace //使用内置的test配置, 然后输出到/data/misc/perfetto-traces/trace
    

    另外在 Perfetto 里面默认集成了一个 test 配置, 可以使用如下命令抓取一个使用 test config 的 trace 文件

    3 服务器上使用 perfetto


    3.1 编译 perfetto


    下载 perfetto 核心代码

    git clone https://android.googlesource.com/platform/external/perfetto/ && cd perfetto
    

    下载并提取构建依赖项:

    tools/install-build-deps
    

    如果脚本因SSL错误而失败, 请尝试以方式调用该脚本 python3 tools/install-build-deps, 或升级您的openssl库.

    生成所有最常见的GN构建配置:

    tools/build_all_configs.py
    

    构建Linux跟踪二进制文件(在Linux上, 它使用密封的clang工具链, 作为步骤2的一部分下载):

    tools/ninja -C out/linux_clang_release traced traced_probes perfetto
    

    使用tools/tmux下面的便捷脚本时, 此步骤是可选的.

    3.2 使用 perfetto


    perfetto 是一个命令行工具, 在shell环境下执行, 他依赖于系统中运行的的两个服务进程 traced 和 traced_probes 来完成工作.

    Android 通过启用 perfetto 服务来自动运行 traced(会话守护程序)和traced_probes(探测和ftrace-interop守护程序).
    但是 Linux 系统中我们必须手动将这两个服务启动起来.

    3.2.1 一键式 tmux 脚本


    perfetto 为我们提供了 tools/tmux 脚本来完成类似与 Android 上类似的工作, 帮我们启动服务进程, 并设置一个工作面板.

    我们可以使用如下命令通过 tools/tmux 脚本来抓取 10S 调度的日志

    OUT=out/linux_clang_release CONFIG=test/configs/scheduling.cfg tools/tmux -n
    

    perfetto cli 工具运行时候, 需要制定 config 文件, perfetto 默认为我们提供了多个配置模板, 位于仓库路径下 test/configs 目录下.
    上面我们使用的是默认提供的 scheduling 的配置, 我们也可以自定义 config 或者用 perfeto ui 生成 config.

    脚本首先将我们需要的服务程序和 perfetto CLI 工具及其依赖库都拷贝到了 TMP 目录下 /tmp/perfetto.xxxxxx.
    然后使用 tmux 帮我们打开了一个有三个面板的 TMUX 窗口, 从上往下分别启动了: traced, traced_probes 和 perfetto 抓取日志的工作台.
    在最底下的 perfetto 工作面板中, 已经为我们预先填好了抓取 perfetto 的命令, 我们只需要回车就可以抓取 10S 调度日志.

    [本处原来有图片, 动图超出大小无法上传)(https://raw.githubusercontent.com/gatieme/LDD-LinuxDeviceDrivers/master/study/debug/tools/perfetto/perfetto_run_tmux.gif)]

    我们可以使用 Ctrl-B D 退出这个tmux会话
    也可以使用 tmux attach -t demo, 来重新连接大这个 tmux 会话.
    使用关闭它 tmux kill-session -t demo.
    更过关于 tmux 的操作, 请参照博主的另外一篇博客 linux下的终端利器----tmux.
    注意请不要使用 tmux 这篇博客中提供的配置文件, 这篇博客中重新绑定了快捷键, 否则你可能需要重新修改 tmux 脚本或者配置文件.

    脚本会将跟踪到的日志信息以二进制的格式存在到的 protobuf 中, 参照 TracePacket

    3.2.2 手动运行服务


    前面使用 tmux 运行了之后, 我们就清楚的知道启动了那些服务, 以及 perfetto 抓取的命令.

    手动将服务后台启起来, 然后运行 perfetto, 指定 config, 抓取 trace 日志.

    如下所示:

    cd out/linux_clang_release
    
    ./traced_probes &
    
    ./traced &
    
    ./perfetto --txt -c ../../test/configs/scheduling.cfg  -o trace
    

    4 perfetto 的一些技巧


    4.1 自定义Config


    目前最方便的配置文件生成方式是使用Perfetto UI 网站来帮助生成, 点击 Record new trace 会看到有很多的配置界面
    选择想要的 tracepoints 之后 点击 Trace Command, 将命令内容拷贝出来直接在终端就可以执行.

    perfetto_trace_command

    4.2 使用 SQL 查询和分析日志


    子系统 TraceProcessor 基于 SQLite 为 Perfetto 提供了查询和分析数据的能力.
    又作为独立的可执行文件提供: trace_processor.

    关于这部分的详细信息可以参照 Quickstart: SQL-based analysis and trace-based metrics

    4.3 trace 格式转换工具


    Perfetto 提供了一个兼容的 UI 来打开 原来的 systrace, 参见 catapult_trace_viewer.
    不过毕竟是要替代 systrace 的, 因此使用起来有一丢丢问题, 而且也不能打开太的 systrace 文件.

    不过 Perfetto 也提供了一些方法, 让你把你抓到的日志转换成 systrace 格式.

    • 提供的 traceconv 工具将 Perfetto 跟踪转换为其他跟踪格式.

    • 点击 Perfetto 界面的 Legacy UI, 就会把你的日志转换成 systrace 格式并用 catapult_trace_viewer 打开. 你可以点击 save 把你的 systrace 日志保存下来.

    5 参考资料


    Perfetto工具使用简介

    (两百五十七) 学习perfetto(二)——生成perfetto trace

    Perfetto使用

    android-app-performance-analysis-with-perfetto

    perfetto docs

    (七) 下篇 Android 性能优化 Perfetto 详细介绍


    展开全文
  • perfetto,只读镜像.zip

    2019-10-11 08:57:41
    perfetto是一个用于性能检测和跟踪的开源项目
  • Android perfetto tools

    2022-03-21 16:22:03
    1. perfetto 工具:record_android_trace 2. 配置文件: perfetto_config.pbtx
  • perfetto使用简介

    千次阅读 2021-09-08 11:38:14
    perfetto使用简介 文章目录perfetto使用简介一、使用方法1.1 打开perfetto的设置界面1.1.1 adb指令1.1.2 系统设置1.2 打开录制跟踪记录功能1.3 打开跟踪记录功能后,运行需要调试的APP1.4 运行完操作之后点击,可点击...

    perfetto使用简介

    一、使用方法

    1.1 打开perfetto的设置界面

    1.1.1 adb指令

    adb shell am start com.android.traceur/com.android.traceur.MainActivity
    

    1.1.2 系统设置

    打开Settings->System->Developer options->System Tracing(系统跟踪)
    在这里插入图片描述

    1.2 打开录制跟踪记录功能

    1.3 打开跟踪记录功能后,运行需要调试的APP

    1.4 运行完操作之后点击,可点击下拉菜单停止跟踪记录

    在这里插入图片描述

    1.5 导出trace文件

    adb pull /data/local/traces .
    

    二、打开trace文件

    2.1 google浏览器打开perfetto网址

    []: https://ui.perfetto.dev/#!/

    在这里插入图片描述

    2.2 打开trace文件!

    在这里插入图片描述

    三、可以开始分析了

    四、参考record command

    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"
            }
        }
    }
    duration_ms: 10000
    
    EOF
    
    展开全文
  • 接下来执行如下命令: adb push perfetto.pbtxt /data/local/tmp/perfetto.pbtxt adb shell 'cat /data/local/tmp/perfetto.pbtxt | perfetto --txt -c - -o /data/misc/perfetto-traces/trace' #或者...

    System Tracing

    "系统跟踪"就是记录一段时间内的设备活动。系统跟踪会生成跟踪文件,该文件可用于生成系统报告。此报告可帮助开发者了解如何最有效地提升应用或游戏的性能。

    在Android平台上,目前可以通过如下途径生成系统跟踪文件:

    • Traceur app: 一款用于将设备活动保存到跟踪文件的Android工具。在搭载Android 10或更高版本的设备上,跟踪文件会以Perfetto格式保存(如下所示)。在搭载较低版本Android系统的设备上,跟踪文件会以Systrace格式保存。

    • Systrace: 平台提供的旧版命令行工具,可记录短时间内的设备活动,并保存在压缩的文本文件中。该工具会生成一份报告,其中汇总了 Android 内核中的数据,例如 CPU 调度程序、磁盘活动和应用线程。

    Perfetto是什么

    Perfetto是Android 10中引入的全新下一代平台级跟踪工具。

    适用于Android、Linux和Chrome的更加通用和复杂的用于性能检测和跟踪分析的生产级开源项目。其核心是引入了一种全新的用户空间到用户空间的跟踪协议,该协议可以直接将protobuf序列化到共享内存缓冲区。且既可用于平台内部的内置数据源(例如ftrace、atrace、logcat),也可通过项目提供的SDK和库暴露给C++应用程序。

    同时该协议允许通过一个可扩展的基于protobuf的数据源配置机制对其进行动态配置。不同的数据源可以复用到用户定义的缓冲区的不同子集上,也可以将任意长的跟踪流导出到文件系统中。

    它提供了用于记录系统级和应用级活动的服务和库、低开销的native+java内存分析工具,可供SQL分析跟踪文件的库,以及一个基于Web用于将追踪文件可视化方便分析的Perfetto UI[1]

    Perfetto
    Systrace

    为什么使用它

    对于习惯了使用systrace的开发者,起初使用perfetto可能会不习惯,虽然目前该工具并不能完全替代systrace,但这只是时间问题(目前该工具代码更新非常频繁),趋势即是如此,而且也的确是很好用的.

    相比systrace的优势:

    • 其可记录任意长度的跟踪记录并导出到文件系统中.

    • 更合理的可视化分析标记功能.

    • 内建SQLite数据库,SQL查询的支持,数据后期处理非常灵活.

    • 特定操作方便程度碾压systrace(笑~)

    • 更强的拓展能力,某些特定数据的解析可以通过解析器版本更新支持 比如一开始不支持的syscall,现在支持了.

    目前的缺点:

    • 个别操作还是没systrace方便(比如目前为止还不能多选点并自动计算时间差)

    • 暂时没发现了(笑~)

    如何使用它

    抓取Perfetto跟踪文件:

    • 你可以像atrace一样使用它

    但我觉得有点脱裤子放屁的嫌疑,基本不会去这样用.

    使用配置文件指导抓取(推荐)

    配置文件是最灵活的方式,所有配置项都可按照你的喜好进行配置.

    某些android 10的设备上可能要先启动traced:

    adb shell setprop persist.traced.enable 1
    

    首先我们需要生成配置文件,这个操作建议在UI页面生成,简单的配置文件如下:

    buffers: {
        size_kb: 522240
        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: "android.log"
            android_log_config {
                log_ids: LID_DEFAULT
                log_ids: LID_SYSTEM
            }
        }
    }
    data_sources: {
        config {
            name: "linux.sys_stats"
            sys_stats_config {
                stat_period_ms: 250
                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: "raw_syscalls/sys_enter"
                ftrace_events: "raw_syscalls/sys_exit"
                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: "gfx"
                atrace_categories: "input"
                atrace_categories: "view"
                atrace_categories: "wm"
                atrace_categories: "am"
                atrace_categories: "hal"
                atrace_categories: "res"
                atrace_categories: "dalvik"
                atrace_categories: "bionic"
                atrace_categories: "pm"
                atrace_categories: "ss"
                atrace_categories: "database"
                atrace_categories: "aidl"
                atrace_categories: "binder_driver"
                atrace_categories: "binder_lock"
                atrace_apps: "*"
            }
        }
    }
    duration_ms: 30000
    

    这其中包含:

    • 首先是512M的Buffer配置,当Buffer满了会自动结束抓取.

    • 数据源配置了gpu、logcat、以及ftrace、atrace.

    • 配置此次抓取最长持续时间为30s. 接下来执行如下命令:

    adb push perfetto.pbtxt /data/local/tmp/perfetto.pbtxt
    adb shell 'cat /data/local/tmp/perfetto.pbtxt | perfetto --txt -c - -o /data/misc/perfetto-traces/trace'
    
    #或者抓取长trace时候可以使用(配置文件也要修改为长trace):
    adb shell 'cat /data/local/tmp/perfetto.pbtxt | perfetto --txt -c - -o /data/misc/perfetto-traces/trace  --detach=perf_debug'
    #结束抓取:
    adb shell 'perfetto --attach=perf_debug --stop'
    

    等待30s后导出/data/misc/perfetto-traces/trace文件即可.

    使用Traceur app抓取

    这种方式的优点在于使用方便,无需依赖PC只需要界面上点几下即可完成抓取,但是目前应用并不是那么完善,相对的灵活性也没那么高,无法抓取大部分ftrace event.

    1.开启开发者选项.

    2.进入开发者选项页面.

    3.找到"系统跟踪",然后选择打开"显示快捷图块"开关.

    3.1(可选) 选择你需要记录的tag:

    4.下拉状态栏点击"系统跟踪"图块,然后即可开始抓取.

    5.再次点击接口停止抓取并导出文件.

    adb pull /data/local/traces .
    
    • Perfetto UI抓取

    很简单,这里就略过了

    解析Trace

    perfetto抓取的trace文件,只能通过项目内提供的Trace Processor来解析到内置的SQLITE中,针对不同大小的文件解析方法会有差异:

    • 通过官方提供的python api解析

    这里就跳过了,感兴趣的建议去官网看下详细的文档.

    小文件解析

    PerfettoUI这个网站实际上通过WebAssembly技术运行了一个trace_processor,只是浏览器存在内存限制,所以通过WASM只能解析加载较小的文件,目前四大浏览器均已支持该技术:

    WASM
    PerfettoUI

    所以当你尝试加载超大的trace时,就会遇到如下类似的错误:

    ERROR

    这种情况下就不可以用浏览器直接解析了.

    超大文件如何解析

    WASM的这个内存限制来自于浏览器本身,所以加载超大文件的方法也很简单了,不要使用WASM去运行trace_processor解析文件就好,这种情况下能解析多大的trace文件取决于你机器的内存大小:

    官方已经提供了python脚本自动下载当前操作系统对应的trace_processor(目前仅支持Linux、Macos、Windows后续可能会支持,可以先使用WSL)

    # Download prebuilts (Linux and Mac only)
    curl -LO https://get.perfetto.dev/trace_processor
    chmod +x ./trace_processor
    
    # Start the interactive shell
    ./trace_processor trace.pftrace
    
    # Start a local trace processor instance to replace wasm module in the UI
    ./trace_processor -D trace.pftrace 
    
    ######################################################################################################################################################################################################################################################### 100.0%
    [494.172] processor_shell.cc:1130 Trace loaded: 1137.13 MB (29.6 MB/s)
    Error stats for this trace:
                                        name                                      idx                                   source                                    value
    ---------------------------------------- ---------------------------------------- ---------------------------------------- ----------------------------------------
    misplaced_end_event                      [NULL]                                   analysis                                                                    79854
    task_state_invalid                       [NULL]                                   analysis                                                                   130057
    [494.174] httpd.cc:136            [HTTP] Starting RPC server on 127.0.0.1:9001 and [::1]:9001
    

    此时我们刷新打开perfettoUI会自动检测到9001端口的RPC server:

    检测到RPC server

    点击"use loaded trace"即可打开9001端口上加载好的trace文件.

    tips:如果本地机器内存较小,也可以挂到大内存的工作站上然后把9001端口转发过去即可.

    分析Trace

    PerfettoUI

    • 如何查看线程唤醒端:

    在systrace上,我们一般是通过查看Runnable状态中的wakeup from,然后自己滑到对应的线程区域,如果线程之间唤醒关系比较长,那寻找起来未免太繁琐.

    Perfetto的操作方式不同,我们只需要点击Runnable后的Running状态,然后点击下方的跳转按钮,:这会自动跳转到线程调度区域中的对应轨道中,并且下方会显示当前线程的唤醒端(♦) 以及此次唤醒的调度延迟时间:选中唤醒端线程对应的slice,然后同样点击跳转按钮:即可跳转回对应的进程区域的轨道中:

    • 添加标记:

    perfetto目前提供两种标记类型,标记的方式分别为: 点击最上方的时间轨道即可添加时间点标记. 而通过按住鼠标左键选中一块区域然后点击"shift+m"即可添加常驻区域标记:通过选中已经添加的标记,我们可以选择为其添加标记名,或者更改其颜色,以及执行移除操作:而如果只是点击"m"添加的是临时区域标记,当你再次选中另外一块区域添加临时区域时,上一个临时区域会自动移除.

    指标子系统

    当我第一眼看到SQL支持的时候我就在想,是否可以直接使用一段语句提取到我们常见场景的关键性能指标,帮助我们更方便的提取到我们需要的基本性能信息,果然这一点官方也早就想到了,这就是内置的"指标"系统. 项目内置的指标大概有如下这些:

    指标名说明
    heap_profile_callsites没用过,暂时未知
    android_cpu统计出每个进程的CPU情况,包括以线程为粒度的每个核心的占用时间以及核心频率情况.
    java_heap_stats没用过,暂时未知
    android_lmk统计所有LMK事件指标,并会标记在UI中
    android_mem没用过,暂时未知
    android_ionion内存指标
    android_surfaceflinger统计掉帧指标,并标记到UI中
    android_package_listtrace中的package列表
    android_gpuGPU内存指标
    android_mem_unagg不知道怎么分类的内存指标,暂时没什么用
    display_metrics重复帧性能指标,似乎仅限google自家机器使用
    android_powrails没用过,暂时未知
    trace_metadata打印trace文件的一些基本信息
    android_startupandroid应用冷启动或热启动性能指标
    android_thread_time_in_state这个有BUG暂时不能使用

    除了以上这些,你也可以在系统关键点自行打点,并且通过自定义"指标"的方式,设计仅针对自家设备的性能指标衡量文件.

    执行指标:PerfettoUI可以执行内置指标

    执行指标分析

    如果你想执行自己的指标文件,那么就需要使用如下命令:

    ./trace_processor --run-metrics <你的指标文件> <trace>
    

    你将得到如下类似的指标分析结果:

    output

    Sql分析

    Sql分析可以直接在PerfettoUI页面执行:

    Query

    通过SQL分析其可以更高效的过滤trace文件,并且可以完成一些通过图形界面无法很方便完成的统计,

    数据库完整的ER图如下:

    ER

    一共55个table,9个view...关系比较复杂,看着比较吓人而已,实际上我们没必要全部记下来,因为常用的就那几个,并且其结构虽然复杂但是设计的却很合理,下面先解释一下常用的各个"名词",sql表名也是同名的

    slice:

    slice

    简单讲就是你通过: Trace.beginSection/ATRACE_BEGIN记录的事件

    counter:

    counter

    这个顾名思义...

    sched:

    sched

    CPU调度信息就查询这张表,但是这张表只包含Running的任务.其他状态需要自己结合end_state和ts计算或者直接用下面的表.

    thread_state:

    thread_state

    记录线程的完整状态,相当于扩展了的sched表.

    tips:

    1. 当你查询slice时发现缺少一些需要的上下文信息,此时请通过track_id去JOIN查询对应的上下文: 例如你想知道你查询的slice其属于哪个线程,此时你就可以通过JOIN thread_track找到线程的utid,然后通过utid JOIN到thread表中找到这条线程的详细信息.

    2. utid 对应 thread表,upid 对应 process表.

    简单案例

    例如我们想查看某应用在bindApplication阶段的核心分配情况,SQL只需要一句即可:

    SELECT 
    slice.name,TOTAL(sta.dur)/1e6 as cpu_dur,cpu from slice 
    JOIN thread_track ON slice.track_id=thread_track.id
    JOIN thread USING(utid)
    JOIN thread_state sta ON (sta.utid=thread_track.utid AND (sta.ts >= slice.ts AND sta.ts+sta.dur <= slice.ts+slice.dur ))
    WHERE slice.name="bindApplication" AND thread.name LIKE "%news" AND sta.state = "Running"
    GROUP BY cpu
    ORDER BY cpu_dur DESC
    

    然后你就可以得到如下的输出:

    namecpu_durcpu
    bindApplication40.1282267
    bindApplication38.1367715
    bindApplication28.7897396
    bindApplication27.3389644
    bindApplication2.4630720
    bindApplication1.5319792
    bindApplication0.6128121
    bindApplication0.4027613

    工具灵活度反正是很够了~具体怎么活用就看各位大佬发动聪明的脑袋瓜了(认真)~

    参考资料

    [1]

    Perfetto UI: https://ui.perfetto.dev

    展开全文
  • 继续学习 https://perfetto.dev/docs/quickstart/android-tracing https://perfetto.dev/docs/concepts/config 之前看的https://ui.perfetto.dev/#!...在普通模式下使用 perfetto 的一般语法如下: adb shell.
  • Systrace 和 Perfetto的使用

    千次阅读 2022-01-26 22:43:49
    抓取trace adb shell perfetto -o /data/misc/perfetto-traces/trace_file.perfetto-trace -t 20s sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory 2.3.4. 抓取结果 perfetto的...
  • Android Perfetto使用

    千次阅读 2022-04-01 10:42:01
    Perfetto是systrace 的替代,可以实现systrace的功能, 同时提供了更强大的功能, 个人认为最大优势是可以支持长时间tracing。 Android Q及P 先设置: adb shell setprop persist.traced.enable 1 Android Q...
  • android使用perfetto工具步骤

    千次阅读 2022-02-16 20:01:10
    Perfetto 是 Android 10 中引入的全新平台级跟踪工具,可以用来抓systrace,用来分析性能等问题。 一、开启perfetto功能步骤 1、打开开发者选项中的“System Tracing”,位置在Develop options -> System Tracing...
  • Perfetto工具是Android全新的统一的trace收集和分析框架,可以抓取平台和app的trace信息,是用来取代systrace的,但systrace由于历史原因也还会一直存在,并且Perfetto抓取的trace文件也可以同样转换成systrace视图...
  • Perfetto使用

    万次阅读 2020-01-06 16:31:41
    Perfetto 工具是Android下一代全新的统一的 trace 收集和分析框架,可以抓取平台和app的 trace 信息,是用来取代 systrace 的,但 systrace 由于历史原因也还会一直存在,并且 Perfetto 抓取...
  • (两百五十六)学习perfetto(一)

    千次阅读 2020-05-23 22:32:48
    学习... ... trace分析对应的UI网址 https://ui.perfetto.dev/ ...https://perfetto.dev/ ...https://perfetto.dev/docs/ ...Perfetto is a production-grade open-source stack for performance ins..
  • android 性能分析工具(02)Perfetto

    千次阅读 2022-05-04 11:07:26
    1 理解Perfetto(why+what) 1.1 Perfetto和systrace的关系 Perfetto 是 Android 10 中引入的全新平台级跟踪工具。这是适用于 Android、Linux 和 Chrome 的更加通用和复杂的开源跟踪项目。与 Systrace 不同,它提供...
  • Android 性能分析工具——Perfetto 介绍

    万次阅读 2020-12-09 18:01:25
    Android 性能分析工具——Perfetto 介绍 Perfetto 是 Android 10 中引入的全新平台级跟踪工具。这是适用于 Android、Linux 和 Chrome 的更加通用和复杂的开源跟踪项目。与 Systrace 不同,它提供数据源超集,可让你...
  • Android性能优化之Perfetto

    千次阅读 2021-09-26 16:04:26
    Perfetto 一. 通过System Tracing抓取 1. System Tracing Overview System Tracing即系统跟踪界面,用户可以通过如下两种方式进入系统跟踪界面: (1)设置 – 其他设置 – 开发者选项 – 系统跟踪(Realme GT Neo ...
  • platform_external_perfetto

    2021-03-25 14:34:45
    Perfetto-性能检测和跟踪 Perfetto是一个开放源代码项目,用于性能检测和跟踪Linux / Android / Chrome平台和用户空间应用程序。 有关文档,请参见 。 虫子 对于影响Android或内部跟踪使用内部错误跟踪器( )。 ...
  • 性能分析:Perfetto

    2021-08-10 11:50:40
    参考文档 Perfetto官网 https://perfetto.dev/docs/ https://ui.perfetto.dev/#!/record Example:
  • Android 卡顿验证方法1:系统跟踪 Perfetto
  • Android性能跟踪工具Perfetto简介

    千次阅读 2022-04-15 14:47:22
    Perfetto 是 Android 10 中引入的全新平台级跟踪工具。这是适用于 Android、Linux 和 Chrome 的更加通用和复杂的开源跟踪项目。与 Systrace 不同,它提供数据源超集,可让您以 protobuf 编码的二进制流形式记录任意...
  • 快速部署你自己的 Perfetto 服务器

    千次阅读 2020-11-30 08:00:00
    本文作者:sonicman,首发于公众号:AndroidPerformance联系方式:voidice#gmail.com转载请先向作者申请前言Perfetto 是 google 开源的...
  • trace.perfetto-trace_20210906_bk
  • Perfetto —— 靠谱的trace利器

    千次阅读 2021-07-28 22:51:43
    最近踩到的坑,报了一个cst的测试项fail,帧率不符合预期,...经过实验,可以试下perfetto抓取(果然,google极力推荐使用还是没错的,要跟上工具的变化) 1、开启trace UI am start com.android.traceur/com.android
  • 本讲是Android Camera性能分析专题的第8讲,我们介绍perfetto基本操作,包括如下内容: 折叠和展开 Perfetto pin to top功能 左移/右移/放大/缩小 搜索与定位(Zoom into selection) 高亮/取消高亮 选中区域 ...
  • 本讲是Android Camera性能分析专题的第6讲,我们介绍如何通过perfetto抓取trace,包括如下内容: 启动Tracing服务 通过命令行方式抓取perfetto trace 通过python脚本抓取perfetto trace 通过perfetto命令抓取...
  • 什么是Perfetto?Perfetto 是 Android 10 中引入的全新平台级跟踪工具。这是适用于 Android、Linux 和 Chrome 的更加通用和复杂的开源跟踪项目。与 Systrace 不同,它提供数据源超集,可让您以 protobuf 编码的二进制...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 441
精华内容 176
关键字:

perfetto