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

文章目录

  • 火焰图
  • perf
    • perf list
    • perf record
    • perf script
    • perf stat
    • perf report
    • perf top
  • 官方perf使用示例
    • 记录60s系统中发生的所有上下文切换事件
    • 监测整个系统的 CPU 使用情况
    • 抓取 CPU 事件数据
    • 统计 CPU 循环事件、指令数、缓存引用、缓存失效和总线周期等性能指标的命令
    • 以mysqld进程为例
    • 使用火焰图展示结果
    • 参考:
  • 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生成火焰图

python report_html.py

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/726110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unity学习(45)——选择角色菜单——客户端处理服务器的数据

1.已知客户端ReceiveCallBack中已经收到来自服务器返回的数据包。 2.问题是客户端MessageManager中的Update并没有拆解该数据包 &#xff0c;因该是因为脚本没有挂载。 挂在SelectMenu场景中的Camera上即可。 挂载后成功达到目地 其中Update中的List是一个起到全局效果的static…

构建 LLM 支持的应用程序

LangChain 教程&#xff1a;构建 LLM 支持的应用程序的指南 一、引言 在当前的科技浪潮中&#xff0c;大型语言模型&#xff08;LLM&#xff09;已经成为引领人工智能发展的重要力量。许多企业和开发者都渴望利用LLM构建出功能强大的应用程序。然而&#xff0c;对于初学者来说…

【七】【SQL】自连接

自连接初见 数据库中的自连接是一种特殊类型的SQL查询&#xff0c;它允许表与自身进行连接&#xff0c;以便查询表中与其他行相关联的行。自连接通常用于处理那些存储在同一个表中的但彼此之间具有层级或关系的数据。为了实现自连接&#xff0c;通常需要给表使用别名&#xff…

CVPR 2024 | Modular Blind Video Quality Assessment:模块化无参视频质量评估

无参视频质量评估 (Blind Video Quality Assessment&#xff0c;BVQA) 在评估和改善各种视频平台并服务用户的观看体验方面发挥着关键作用。当前基于深度学习的模型主要以下采样/局部块采样的形式分析视频内容&#xff0c;而忽视了实际空域分辨率和时域帧率对视频质量的影响&am…

学习 考证 帆软 FCP-FineBI V6.0 心得

学习背景&#xff1a; 自2024年1月起&#xff0c;大部分时间就在家里度过了&#xff0c;想着还是需要充实一下自己&#xff0c;我是一个充满热情的个体。由于之前公司也和帆软结缘&#xff0c;无论是 Fine-Report 和 Fine-BI 都有接触3年之久&#xff0c;但是主要做为管理者并…

多重验证及比特币脚本中的P2PK、P2PKH、P2SH机制

在数字货币的世界中&#xff0c;安全性和有效性是核心要素。其中&#xff0c;二重验证作为一种强化账户安全的重要手段&#xff0c;以及比特币赎回脚本系统中的P2PK、P2PKH、P2SH等交易类型&#xff0c;对于理解区块链技术的底层逻辑和实现方式至关重要。本文将对这些概念进行深…

使用rust实现九九乘法表

rust目前拥有接近c/c的运行速度以及更快的编码支持&#xff0c;所以是很值得学习得一门语言。rust的语法及设计理念与其他的语言也有许多的不同之处。比如其特有的所有权属性。可以让开发者快速的开发出高效的运行程序。对于内存的管理也有极好的管理方案。 在这里使用rust语言…

在Java中,Scanner类是用来获取用户输入的

在Java中&#xff0c;Scanner类是用来获取用户输入的。以下是一个简单的示例&#xff0c;展示如何使用Scanner类从控制台读取用户输入&#xff1a; java import java.util.Scanner; // 导入Scanner类 public class Main { public static void main(String[] args)…

基于jwt -用户离线检测的实现思路

其实思路很简单。就是,用户与系统交互的token。token的拦截时间 - token的创建时间 用户与系统交互的时间差值。只要这个时间差值为负数&#xff0c;就判定为离线。基于此,我们每次与系统交互,都需要重新创建token&#xff0c;从而不断刷新token的创建时间来给下次系统判定来使…

MyBatis复杂映射开发之多对多查询

多对多查询的模型 用户表和角色表的关系为&#xff0c;一个用户有多个角色&#xff0c;一个角色被多个用户使用。 多对多查询的需求&#xff1a;查询所有用户的同时查询出该用户对应的所有角色。 startuml !theme plain top to bottom direction skinparam linetype ortho cl…

C# 在exe中启动另外一个exe时的关闭方法

在C#中&#xff0c;如果你想要从一个exe程序中启动另一个exe程序&#xff0c;并希望在需要时能够关闭它。 一、启动外部exe程序&#xff1a; 使用System.Diagnostics.Process启动程序&#xff0c;代码如下&#xff1a; private void btnStart_Click(object sender, RoutedEve…

阿里云服务器使用教程_搭建网站教程_2024建站教程

使用阿里云服务器快速搭建网站教程&#xff0c;先为云服务器安装宝塔面板&#xff0c;然后在宝塔面板上新建站点&#xff0c;阿里云服务器网aliyunfuwuqi.com以搭建WordPress网站博客为例&#xff0c;来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流…

自然语言处理(NLP)—— 语言学、结构的主要任务

1. 计算语言学的任务 1.1 自然语言处理任务——句法分析任务 1.1.1 词法&#xff08;Syntatic tasks:Word level&#xff09; 在自然语言处理中&#xff0c;词法分析主要涉及到词汇层面的处理&#xff0c;包括形态划分、分词、切分以及词性标注等任务。 1.1.1.1 形态划分&am…

XUbuntu22.04之显示实时网速(二百一十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

智能网联各地市政策盘点

本文旨在对2023年及2024年初各地市所出台的智能网联相关政策进行全面的梳理与总结。通过与此前发布的关于2023年和2024年初各部委、省、直辖市智能网联相关政策的盘点相互呼应&#xff0c;力求为读者呈现一个全面、系统的政策概览。 文 | 吴冬升 全文6000字&#xff0c;预计阅读…

轮询--一起学习吧之架构

一、定义 轮询&#xff08;Polling&#xff09;是一种CPU决策如何提供周边设备服务的方式&#xff0c;又称“程控输出入”&#xff08;Programmed I/O&#xff09;。这种方式是由CPU定时发出询问&#xff0c;依序询问每一个周边设备是否需要其服务&#xff0c;有即给予服务&am…

html--3D爱心

文章目录 代码效果 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>爱心</title><style type"text/css">*{margin: 0px;border: 0px;}body{overflow: hidden;background-…

Docker-部署若依项目

文章目录 后端一、搭建局域网二、redis安装测试 三、MySQL安装四、后端项目放入位置及使用Dockerfile自定义镜像后端项目放入位置 前端配置检查各个端口是否启动nginx部署 首先得先把内部的文件给删除清空 docker images–查看有哪些文件 docker rmi -f ID–删除ID 后端 一、…

腾讯QQ推出AI聊天搭子;零一万物01AI宣布开源Yi-9B模型

&#x1f989; AI新闻 &#x1f680; 腾讯QQ推出AI聊天搭子&#xff0c;进军AI对话领域 摘要&#xff1a;腾讯QQ合作筑梦岛和混元助手&#xff0c;推出了AI对话功能“AI聊天搭子”&#xff0c;提供多种虚拟角色与用户实时互动&#xff0c;目前已开启测试。此外&#xff0c;抖…

STM32/GD32——I2C通信协议

芯片选型 Ciga Device — GD32F470系列 通讯规则 I2C协议&#xff08;或称IIC&#xff09;是由飞利浦&#xff08;现在的恩智浦半导体&#xff09;公司开发的一种通用的总线协议。它使用两根线&#xff08;时钟线和数据线&#xff09;来传输数据&#xff0c;支持多个设备共享…