【test】【linux perf】【Android simpleperf】 获取火焰图 使用示例

这篇具有很好参考价值的文章主要介绍了【test】【linux perf】【Android simpleperf】 获取火焰图 使用示例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

火焰图

https://www.brendangregg.com/flamegraphs.html
(1)火焰图简介:火焰图(Flame Graph)是由Linux性能优化大师Brendan Gregg发明的,Flame Graph以一个全局的视野来看待时间分布,它从底部往顶部,列出所有可能的调用栈。其他的呈现方法,一般只能列出单一的调用栈或者非层次化的时间分布。
(2)火焰图含义:
1)y 轴表示调用栈, 每一层都是一个函数. 调用栈越深, 火焰就越高, 顶部就是正在执行的函数, 下方都是它的父函数.
2)x 轴表示抽样数, 如果一个函数在 x 轴占据的宽度越宽, 就表示它被抽到的次数多, 即执行的时间长. 注意, x 轴不代表时间, 而是所有的调用栈合并后, 按字母顺序排列的。
3)火焰图就是看顶层的哪个函数占据的宽度最大. 只要有 “平顶”(plateaus), 就表示该函数可能存在性能问题。
4)颜色没有特殊含义, 因为火焰图表示的是 CPU 的繁忙程度, 所以一般选择暖色调.
(3)互动性:火焰图是基于 stack 信息生成的 SVG 图片, 用来展示 CPU 的调用栈,可以与用户互动。
(4)访达查看:点击某一层,火焰图会水平放大,该层占据所有宽度,显示详细信息。此时左上角会显示”reset zoom“,点击后图片就会恢复当原样。
(5)搜索:按下Ctrl+f会显示一个搜索框,用户可以输入关键词过着正则表达式,符合条件的函数会高亮显示。

git clone https://github.com/brendangregg/FlameGraph.git

perf

Perf是一个包含22种子工具的工具集,以下是最常用的5种:
perf list
perf stat
perf top
perf record
perf report

perf list

使用perf list命令可以列出所有能够触发perf采样点的事件。
(1)不同的系统会列出不同的结果该列表很。但是按照事件类型都可以归为以下三类:
1)Hardware Event:由PMU硬件产生的事件,比如cache命中;
2)Software Event:内核软件产生的事件,比如进程切换;
3)Trachpoint Event:内核中的静态 tracepoint 所触发的事件,这些 tracepoint 用来判断程序运行期间内核的行为细节,比如 slab 分配器的分配次数等。

(2)同时还可以显示特定模块支持的perf事件:hw/cache/pmu都是硬件相关的;tracepoint基于内核的ftrace;sw实际上是内核计数器。
1)hw/hardware显示支持的硬件事件相关,如: perf list hardware
2)sw/software显示支持的软件事件列表: perf list sw
3)cache/hwcache显示硬件cache相关事件列表: perf list cache
4)pmu显示支持的PMU事件列表: perf list pmu
5) tracepoint显示支持的所有tracepoint列表,这个列表就比较庞大: perf list tracepoint

perf record

记录指定命令或进程的性能数据。它可以捕获各种硬件和软件事件,以及进程的执行轨迹,以便后续进行性能分析。

perf record [options] <command>

-e <event>:指定要监测的性能事件。可以是硬件事件(如 CPU 指令、缓存命中等)或软件事件(如 CPU 周期、上下文切换等)。可以使用 perf list 命令查看可用的事件列表。
-e cpu-clock 指perf record监控的指标为cpu周期。
-g:记录程序的调用图(call graph)信息,用于分析函数调用关系。
-p <pid>:指定要监测的进程 ID,而不是运行特定命令。
-o <output-file>:指定输出文件,将记录的性能数据保存到文件中。
-F <frequency>:指定采样频率,即记录性能事件的间隔时间。
--call-graph <type>:指定调用图的类型,如 fp(frame pointer)或 dwarf(使用 DWARF 调试信息)。

perf script

用于将记录的性能数据解析并生成可读的文本输出。它可以将 perf.data 文件中的二进制性能数据转换为文本形式,以便进行后续的分析和可视化。

perf script [options] <command>

-i <input-file>:指定输入文件,即要解析的 perf.data 文件,默认为当前目录下的 perf.data。
-s <script-file>:指定脚本文件,用于对解析后的数据进行进一步处理和输出定制。
-F <format>:指定输出格式,支持的格式包括 comm, pid, tid, time, cpu, event, trace 等。
-D:输出调试信息,用于调试解析过程。
--ns:以纳秒为单位显示时间戳。

perf stat

启动应用程序并分析该程序完整生命周期的性能状况。虽然perf top也可以指定pid,但是对于perf top而言必须先启动应用才能查看信息。perf stat能够运行指令,并且能完整统计应用整个生命周期的信息。

perf report

读取perf record创建的文件,并给出热点分析结果

perf top

实时的观察下CPU时间的花费情况

官方perf使用示例

https://www.brendangregg.com/perf.html
抓cpu使用情况

# Sample CPU stack traces for the entire system, at 99 Hertz, for 10 seconds (< Linux 4.11):
perf record -F 99 -ag -- sleep 10

# Sample CPU stack traces for the entire system, at 99 Hertz, for 10 seconds (>= Linux 4.11):
perf record -F 99 -g -- sleep 10

记录60s系统中发生的所有上下文切换事件

perf record -e context-switches -ag -- sleep 60

监测整个系统的 CPU 使用情况

perf record -g -a

抓取 CPU 事件数据

# Sample on-CPU kernel instructions, for 5 seconds:
perf record -e cycles:k -a -- sleep 5 

# Sample on-CPU user instructions, for 5 seconds:
perf record -e cycles:u -a -- sleep 5 

# Sample on-CPU user instructions precisely (using PEBS), for 5 seconds:
perf record -e cycles:up -a -- sleep 5 

统计 CPU 循环事件、指令数、缓存引用、缓存失效和总线周期等性能指标的命令

# Various basic CPU statistics, system wide, for 10 seconds:
perf stat -e cycles,instructions,cache-references,cache-misses,bus-cycles -a sleep 10

以mysqld进程为例

-g:记录程序的调用图(call graph)信息,用于分析函数调用关系

sudo perf record -a -g -F99 -p $(pgrep -x mysqld) -- sleep 60
sudo perf report -n --stdio
#用perf script工具对perf.data进行解析
sudo perf script -i perf.data > perf.unfold

使用火焰图展示结果

#将perf.script中的符号进行折叠
./FlameGraph/stackcollapse-perf.pl ./perf.unfold>  perf.folded
#最后生成svg图
./FlameGraph/flamegraph.pl ./perf.folded> out.svg

参考:

https://blog.csdn.net/ActionTech/article/details/103478620
https://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html
https://www.cnblogs.com/happyliu/p/6142929.html
https://blog.csdn.net/mijichui2153/article/details/103225756

android

simpleperf

https://blog.csdn.net/zhuyong006/article/details/103112571
https://android.googlesource.com/platform/system/extras/+/master/simpleperf/doc/scripts_reference.md#run_simpleperf_without_usb_connection_py

https://blog.csdn.net/chaihuasong/article/details/110475287
1.获取perf.data文件

simpleperf record -e context-switches -a -g -- sleep 20 #抓取系统中发生的所有上下文切换事件
simpleperf record -a -g -- sleep 20 #抓取整个系统的 CPU 使用情况

2.使用adb获取perf.data文件,需要使用android ndk
3.下载android ndk,并配置好
https://developer.android.google.cn/ndk/downloads?hl=zh-cn
4将perf.data文件放到Android ndk的simpleperf目录
5.使用cmd进入simpleperf目录
6.在cmd中使用report_html.py生成火焰图文章来源地址https://www.toymoban.com/news/detail-839041.html

python report_html.py

到了这里,关于【test】【linux perf】【Android simpleperf】 获取火焰图 使用示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • linux之perf(2)list事件

    Linux之perf(2)list事件 Author:Onceday Date:2023年9月3日 漫漫长路,才刚刚开始… 全系列文章请查看专栏 : Perf性能分析_Once_day的博客-CSDN博客。 参考文档: Tutorial - Perf Wiki (kernel.org) perf-list(1) - Linux manual page (man7.org) 1. 概述 perf list 用于列出可用的性能事件,这些事件可以用于 perf

    2024年02月09日
    浏览(34)
  • linux之perf(8)annotate标注

    Linux之perf(8)annotate标注 Author:Onceday Date:2023年10月12日 漫漫长路,才刚刚开始… 全系列文章请查看专栏 : Perf性能分析_Once_day的博客-CSDN博客。 注:该文档内容采用了GPT4.0生成的回答,部分文本准确率可能存在问题 。 参考文档: Tutorial - Perf Wiki (kernel.org) perf-annotate(1) - Linux m

    2024年02月07日
    浏览(34)
  • Linux性能分析工具Perf简单教程

    *以下操作基于Ubuntu-22.04.2 LST 1. 安装Perf 打开一个命令终端,并运行以下命令,这个命令需要sudo或者root权限。如果系统提示缺省其他的依赖库,则一并安装即可。 2. Perf简介 Perf是基于Linux内核perf_events接口实现的性能分析工具。我们可以用它来分析一个程序的性能,找出影响

    2024年03月13日
    浏览(64)
  • linux下性能分析工具Perf安装与用法

    目录 1、Perf介绍 2、火焰图分类  (1)CPU  (2)Memory Flame Graphs  (3)Off-CPU Flame Graphs  (4)Hot/Cold Flame Graphs  (5)Differential  3、火焰图安装命令 (1)安装Perf工具 (2)下载可视化工具FlameGraph  4、火焰图demo测试 (1)生成CPU火焰图1 (2)火焰图表解析 (3)当前程序图标

    2024年02月04日
    浏览(44)
  • 【SA8295P 源码分析 (一)】60 - QNX Host 如何新增 android_test 分区给 Android GVM 挂载使用

    【源码分析】 因为一些原因,本文需要移除, 对于已经购买的兄弟,不用担心,不是跑路, 我会继续持续提供技术支持, 有什么模块想学习的,或者有什么问题有疑问的, 请私聊我,我们 +VX 沟通技术问题,一起学习,一起进步 接下来,我一一私聊已经购买的兄弟添加V

    2024年02月07日
    浏览(46)
  • 【ARM Coresight 系列文章 20 -- linux perf 与 ARM coresight】

    请阅读 【ARM Coresight SoC-400/SoC-600 专栏导读】

    2024年02月10日
    浏览(43)
  • i5 1240p使用perf避坑指南

    新入手了一台小米迷你主机,CPU是英特尔的十二代i5 1240p,intel i5 1240p微架构属于alder lake,有4个大核,8个小核,每个大核有两个线程,因此,该CPU多线程能力为12核16线程。最近在研究性能剖析相关的知识,没想到遇到了不少坑,记于此。 首先尝试了在windows wsl中使用perf 安装

    2024年02月03日
    浏览(52)
  • Unity 使用NuGet获取所需dll —— 示例:安卓 + NPOI插件

      目录 前言 一、开发环境介绍 1. Unity版本 2. 发布平台 3. 本次目标 二、围绕NPOI的失败历程(纯吐槽,可跳过) 三、记录正确步骤 1. 准备环境         ①.创建/打开c#类库         ②. VS打开NuGet包管理器 2. 整理包以及依赖         ①. Nuget搜索插件         ②. 查看

    2024年02月09日
    浏览(48)
  • Android 图表开源库调研及使用示例

    原文地址: Android图表开源库调研及使用示例 - Stars-One的杂货小窝 之前做的几个项目都是需要实现图表统计展示,于是做之前调研了下,做下记录 AAChartCore-Kotlin 基于webview,本质上还是使用js PhilJay/MPAndroidChart,老牌使用原生canvas绘制的图标,但似乎因为收费而不再更新了,文档不全

    2024年02月05日
    浏览(41)
  • Android 调试桥 (adb) 使用教程/示例

    Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信。adb 命令可用于执行各种设备操作,例如安装和调试应用。adb 提供对 Unix shell(可用来在设备上运行各种命令)的访问权限。它是一种客户端-服务器程序,包括以下三个组件: 客户端 :用于发送命令。

    2024年02月09日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包