Linux 浅谈之性能分析工具 perf
Linux 浅谈之性能分析工具 perf
HELLO,各位博友好,我是阿呆 🙈🙈🙈
这里是 Linux 浅谈系列,收录在操作系统专栏中 😜😜😜
本系列将记录一些阿呆个人整理的 OS 相关知识 🏃🏃🏃
OK,兄弟们,废话不多直接开冲 🌞🌞🌞
一 🏠 概述
什么是 PERF
perf 是一个 Linux 性能分析工具,它利用 PMU、tracepoint 和内核计数器来进行性能统计
内核计数器是一个基于内核的子系统,它提供一个性能分析框架,比如硬件(CPU、PMU( Performance Monitoring Unit ) 功能和软件 (软件计数器、tracepoint) 功能
什么是 PMU
性能监视单元(Performance Monitor Unit),CPU 提供的一个单元(硬件),通过访问相关寄存器读取 CPU 的一些性能数据
内存读写很快,但是无法和处理器指令执行速度相比。cache 是一种 SRAM,读写速度非常快,能和处理器相匹配。因此将常用的数据保存在 cache 中,处理器便无需等待,从而提高性能
tracepoints
tracepoints 是内核源码中的一些 hook,在特定代码被执行时触发,该特性可被各种trace/debug 工具所使用
perf 将 tracepoint 时间记录下来,生成报告,分析这些报告,调优人员便可以了解程序运行期间内核的各种细节,tracepint 对应的 sysfs 节点在 /sys/kernel/debug/tracing/events 目录
PERF 整体架构
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WGmW4F2f-1677034090822)(E:\2022年MD文档\2023 年 MD文档\二月\操作系统\Linux 浅谈之性能分析工具 perf.assets\1676896375395.png)]](https://img-blog.csdnimg.cn/1f963b4898e94693ae668f122ccd0ece.png)
二 🏠 核心
PERF 使用
事件分为三种
- Hardware Event PMU 部件产生,探测性能事件的发生次数(如 cache 命中)
- Software Event 内核产生,统计和操作系统性能相关事件(如 进程切换)
- Tracepoint Event 静态 tracepoint 触发事件(判断程序运行期内核行为,分配器分配次数)
perf --help 可看到 perf 二级命令
perf list
perf list查看当前系统支持的性能事件
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xa9XIrMe-1677034090823)(E:\2022年MD文档\2023 年 MD文档\二月\操作系统\Linux 浅谈之性能分析工具 perf.assets\1676897086463.png)]](https://img-blog.csdnimg.cn/22a62ae9cb0f44fd98344294e19d2eee.png)
perf top
perf top 类似 top 命令,实时分析各函数在某性能事件的热度,快速定位热点函数
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z0F26RBE-1677034090824)(E:\2022年MD文档\2023 年 MD文档\二月\操作系统\Linux 浅谈之性能分析工具 perf.assets\1676897154333.png)]](https://img-blog.csdnimg.cn/70d05eddb34b423e9ae62a6f532a6cbb.png)
perf stat
用于输出指定程序的性能统计数据
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yLFgteQJ-1677034090824)(E:\2022年MD文档\2023 年 MD文档\二月\操作系统\Linux 浅谈之性能分析工具 perf.assets\1676897212741.png)]](https://img-blog.csdnimg.cn/7cf4302d82754cf9b733a0836adfd125.png)
perf record
perf record 收集采样信息,并记录在文件中,可离线分析
常用方式 perf record
-e 指定事件
-p 指定进程
-g 生成调用关系(类似gcc中-g)
-o 输出文件名
更多参数参考 perf record --help
perf report
perf report 分析 perf record 生成的 perf.data 文件
常用参数:-i:指定输入文件
火焰图制作与解读
火焰图是基于 perf 结果产生的 SVG 图片,用来展示 CPU 的调用栈
y 轴表示调用栈,每一层是一个函数,调用栈越深,火焰就越高,顶部就是正在执行的函数,下方都是它的父函数
x 轴表示抽样数,如果一个函数在 x 轴占据的宽度越宽,就表示它被抽到的次数多,即执行的时间长(x 轴不代表时间,而是所有的调用栈合并后,按字母顺序排列的)
火焰图就是看顶层的哪个函数占据的宽度最大。只要有 平顶,就表示该函数可能存在性能问题
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uygcmEr3-1677034090825)(E:\2022年MD文档\2023 年 MD文档\二月\操作系统\Linux 浅谈之性能分析工具 perf.assets\1676897438542.png)]](https://img-blog.csdnimg.cn/59b8b0ea503148b0a9b324ffebcce12f.png)
常用操作
先用 top -Hp + 进程号
执行 SQL, 占用 CPU 最高的那个线程号应该就是要抓的线程
用 perf record -g --call-graph dwarf -e cpu-clock -F 1000 -t 线程号 -o perf.data
抓取, 等 SQL 结束 ctrl + c 结束掉
用 perf report -i perf.data --no-ch //查看data文件内容
三 🏠 结语
身处于这个浮躁的社会,却有耐心看到这里,你一定是个很厉害的人吧 👍👍👍
各位博友觉得文章有帮助的话,别忘了点赞 + 关注哦,你们的鼓励就是我最大的动力
博主还会不断更新更优质的内容,加油吧!技术人! 💪💪💪
相关文章:
Linux 浅谈之性能分析工具 perf
Linux 浅谈之性能分析工具 perf HELLO,各位博友好,我是阿呆 🙈🙈🙈 这里是 Linux 浅谈系列,收录在操作系统专栏中 😜😜😜 本系列将记录一些阿呆个人整理的 OS 相关知识…...
代码随想录-Day7:四数相加、三数之和
454. 四数相加 II 给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0示例 1: 输入࿱…...
jsp在线考试系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
一、源码特点 jsp 在线考试系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5 开发,数据库为Mysql,使用j…...
【总结】2023数学建模美赛!收官!
今年的美赛时间是2.17-2.21,这学期疫情放开了之后管的没那么严了,我们小组就都提前一天到学校了,全力准备17号的比赛。 时间流程 刚拿到6个题的时候,我们三个人一人看两个题,每个人从两个题中再选出来一个自己觉得有…...
C# GDI+ winform绘图知识总结
一、Graphics GDI是GDI(Windows Graphics Device Interface)的后继者,它是.NET Framework为操作图形提供的应用程序编程接口,主要用在窗体上绘制各种图形图像,可以用于绘制各种数据图像、数学仿真等。 Graphics类是G…...
【研究空间复用及函数调用问题】
本篇总结函数调用过程会存在的一些奇怪现象,空间复用问题,其实本质上涉及函数调用的底层原理,理解函数栈帧的创建和销毁这样的问题直接迎刃而解。1.空间复用问题案例1案例22.函数调用过程不清晰问题案例33.总结1.空间复用问题 案例1 我们先…...
SQL常用查询语句
SELECT语句用于查询数据库中的内容 目录 1 查询指定表的所有内容 2 显示所有行的指定列 3 显示指定行的指定列 4 对查询结果进行排序 4.1 按照单一字段排序 4.2 多重排序 5 查询数据总数 5.1 查询一共有多少行 5.2 统计符合条件的有多少行 6 给查询出来的…...
【Python实战】一大波高颜值主播来袭:快看,某网站颜值排名,为了这个排名我可是大费周章啦,第一名不亏是你...(人脸检测+爬虫实战)
导语 民间一直有个传闻......「听说某站的小哥哥小姐姐颜值都很高哦!」 (不是颜值高才能加入,是优秀的人恰好颜值高) 所有文章完整的素材源码都在👇👇 粉丝白嫖源码福利,请移步至CSDN社区或文末…...
Linux进程学习【三】
✨个人主页: Yohifo 🎉所属专栏: Linux学习之旅 🎊每篇一句: 图片来源 🎃操作环境: CentOS 7.6 阿里云远程服务器 Perseverance is not a long race; it is many short races one after another…...
Spring自动装配的底层逻辑
Spring是如何自动装配Bean的?看源码一些自己的理解,如有错漏,请指正 使用Spring之前我们要先去web.xml中设置一下Spring的配置文件,在Spring的配置文件中,是通过component-scan扫描器去扫描base-package底下所有的类装…...
华为OD机试 - 数组合并(C++) | 附带编码思路 【2023】
刷算法题之前必看 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:https://blog.csdn.net/hihell/category_12199283.html 华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730 华为OD机试题…...
在vue3+ts的项目中,如何解决vant组件自带表单校验不生效?
问题描述: 点击发送验证码后,为了让逻辑更加严谨,使用了vant组件自带的表单校验,进行二次校验,防止验证码发送成功后,登录手机号被二次修改,但根据官网描述cv之后不生效,甚至连获取…...
华为OD机试真题Python实现【子序列长度】真题+解题思路+代码(20222023)
子序列长度 题目 有 N 个正整数组成的一个序列 给定一个整数sum 求长度最长的的连续子序列使他们的和等于sum 返回次子序列的长度 如果没有满足要求的序列 返回-1 🔥🔥🔥🔥🔥👉👉👉👉👉👉 华为OD机试(Python)真题目录汇总 ## 输入 两行输入 第一行…...
【答疑现场】我一个搞嵌入式的,有必要学习Python吗?
【答疑现场】我一个搞嵌入式的,有必要学习Python吗? 文章目录1 写在前面2 一个结论3 Python在嵌入式领域能干啥事4 Python是用来干大事的5 友情推荐6 福利活动大家好,我是架构师李肯,一个专注于嵌入式物联网系统架构设计的攻城狮。…...
MySQL存表报错问题 Incorrect string value
MySQL存表报错问题 Incorrect string value 问题 Incorrect string value: ‘\xF0\xA8\xA5\xA5\xE5\xAD…’ for column ‘xxxxxxx’ at row 1 意思是错误的字符,常出现在添加中文字符的时候。这个问题的产生原因主要是因为一些特色中文字符或者Emoji表情占4个字…...
SAP ABAP DIALOG长文本编辑框
1. 在SCREEN100 中创建一个定制控制(容器),命名为PP *&---------------------------------------------------------------------* *& Report ZTEST_TEXT *& *&---------------------------------------------------------------------* *& *…...
电子技术——负反馈特性
电子技术——负反馈特性 本节我们进一步深入介绍负反馈特性。 增益脱敏性 假设 β\betaβ 是一个常数。考虑下面的微分方程: dAfdA(1Aβ)2dA_f \frac{dA}{(1 A\beta)^2} dAf(1Aβ)2dA 将上式除以 AfA1AβA_f \frac{A}{1A\beta}Af1AβA 得到࿱…...
网站移动端性能优化方法
移动端优化 click 的 300ms 延迟响应 click 的 300ms 延迟是由双击缩放(double tap to zoom)所导致的,由于用户可以进行双击缩放或者双击滚动的操作,当用户一次点击屏幕之后,浏览器并不能立刻判断用户是确实要打开这个链接,还是想要进行双击操作。因此,移动端浏览器就等…...
2023年AI语音会议汇总
2023年,AI语音领域学术会议精彩纷呈,语音之家汇总了国内外重要的会议呈现给大家,大家可根据时间统筹安排好2023年的学术活动交流行程。如果信息有误,欢迎指正。 ICASSP 2023 2023 IEEE International Conference on Acoustics, S…...
Mybatis持久层框架 | Mapper加载方式、目录结构解析
💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Mapper(resource、class、package)加载方式 resource方式加载 通过resource或url加载单个mapper,接口文件与映射文件不在同一路径下,只能用re…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...
