perf‌命令详解

perf 命令详解

perf 是 Linux 系统中最强大的 ‌性能分析工具‌,基于内核的 perf_events 子系统实现,支持硬件性能计数器(PMC)、软件事件跟踪等功能,用于定位 CPU、内存、I/O 等性能瓶颈。以下是其核心用法与实战指南:

一、安装与基础配置
  1. 安装

# Debian/Ubuntu
sudo apt install linux-tools-common linux-tools-$(uname -r)# CentOS/RHEL
sudo yum install perf# 验证安装
perf --version

‌    2. 内核符号支持

  • 安装调试符号包(如 linux-image-$(uname -r)-dbgsym),以便 perf 解析内核函数名。
  • 临时允许非特权用户使用性能监控(可选):
sudo sysctl kernel.perf_event_paranoid=-1
二、核心功能与子命令
子命令功能描述
perf stat统计程序运行的硬件事件(如缓存命中率)
perf record记录性能数据(生成 .data 文件)
perf report分析 record 生成的数据
perf top实时监控系统或进程的性能热点
perf trace跟踪系统调用(类似 strace
perf probe动态添加内核或用户空间探针
三、常用场景与实战示例
1. 统计程序性能事件
# 统计命令执行期间的 CPU 周期、缓存命中等
perf stat -e cycles,cache-misses,branch-misses ./my_program

输出示例:

 Performance counter stats for './my_program':2,356,789      cycles                    # 3.801 GHz45,678      cache-misses              # 2.123 % of all cache refs12,345      branch-misses             # 0.56% of all branches0.001234567 seconds time elapsed
2. 采样 CPU 热点函数
# 记录进程的 CPU 使用(采样频率 99Hz)
perf record -F 99 -g -- ./my_program  # -g 记录调用栈
perf report --stdio                   # 文本报告
perf report --gui=gtk                 # 图形化分析(需安装 gtk 支持)

输出解读‌:

  • Overhead‌:函数占用的 CPU 时间比例。
  • Command‌:进程名。
  • Shared Object‌:所属动态库或可执行文件。
3. 生成火焰图(Flame Graph)
# 1. 记录性能数据
perf record -F 99 -g -- ./my_program
# 2. 生成折叠堆栈
perf script > out.perf
stackcollapse-perf.pl out.perf > out.folded
# 3. 生成火焰图
flamegraph.pl out.folded > flamegraph.svg

火焰图直观展示函数调用栈的 CPU 占用分布,横向宽度表示耗时比例。

4. 跟踪系统调用
# 类似 strace,但性能更高(记录所有线程)
perf trace -e 'syscalls:sys_enter_*' ./my_program

过滤特定系统调用:

perf trace -e 'syscalls:sys_enter_open,syscalls:sys_enter_read'
5. 动态添加探针
# 在内核函数 add_to_page_cache_lru 添加探针
perf probe --add add_to_page_cache_lru
# 跟踪探针事件
perf record -e probe:add_to_page_cache_lru -a
四、高级功能
  1. 硬件性能计数器
    使用 perf list 查看支持的事件(如 instructionsbranch-misses):

perf stat -e instructions,L1-dcache-load-misses ./my_program

‌    2. 用户空间静态探针
在代码中插入静态探针(需编译时支持):

#include <sys/sdt.h>
int main() {DTRACE_PROBE("myapp", "operation_start");  // 探针点// ...
}

跟踪探针:

perf buildid-cache --add ./my_program  # 注册程序
perf probe --exec=./my_program --add 'myapp:operation_start'
perf record -e 'probe_myapp:*' ./my_program
五、注意事项
  1. 权限要求
    • 部分功能(如硬件计数器)需要 root 权限或 CAP_PERFMON 能力。
  2. 性能开销
    • perf record 高频采样可能导致目标程序变慢,生产环境慎用。
  3. 符号解析
    • 若函数名显示为十六进制地址,需安装调试符号(如 -dbgsym 包)。

六、与其他工具对比
工具特点适用场景
perf内核级支持,硬件级性能分析CPU/内存瓶颈、调用链分析
strace系统调用跟踪文件/网络操作调试
gdb源码级调试程序崩溃、逻辑错误

掌握 perf 可快速定位性能问题,尤其在高并发、低延迟场景中作用显著。结合火焰图和动态探针,能实现从宏观到微观的全方位分析。

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

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

相关文章

【大模型基础_毛玉仁】6.4 生成增强

目录 6.4 生成增强6.4.1 何时增强1&#xff09;外部观测法2&#xff09;内部观测法 6.4.2 何处增强6.4.3 多次增强6.4.4 降本增效1&#xff09;去除冗余文本2&#xff09;复用计算结果 6.4 生成增强 检索器得到相关信息后&#xff0c;将其传递给大语言模型以期增强模型的生成能…

Leetcode 合集 -- 排列问题 | 递归

题目1 子集2 思路 代码 题目2 全排列2 思路 代码 题目3 排列总和 思路 代码 题目4 排列总和2 思路 代码

vue-office 支持预览多种文件(docx、excel、pdf、pptx)预览的vue组件库

官网地址&#xff1a;https://github.com/501351981/vue-office 支持多种文件(docx、excel、pdf、pptx)预览的vue组件库&#xff0c;支持vue2/3。也支持非Vue框架的预览。 1.在线预览word文件&#xff08;以及本地上传预览&#xff09; 1.1&#xff1a;下载组件库 npm inst…

【trino】trino配置证书https tls/ssl访问

trini版本470 一、官方文档 doc 在Security/TLS and HTTPS、Security/PEM files和Security/JKS files下 openssl文档 二、配置trino 2.1 创建server.cnf文件 [ req ] distinguished_name req_distinguished_name req_extensions v3_req[ req_distinguished_name ] coun…

ZCC8702,LED驱动芯片的“六边形战士”可替代SY8707

在LED照明的璀璨舞台上&#xff0c;驱动芯片犹如幕后英雄&#xff0c;默默掌控着灯光的闪耀与变幻。ZCC8702作为一款集大成的LED驱动芯片&#xff0c;凭借其卓越的性能、广泛的应用范围和出色的稳定性&#xff0c;成为了这个领域中当之无愧的“六边形战士”。今天&#xff0c;就…

Vue 数据传递流程图指南

今天&#xff0c;我们探讨一下 Vue 中的组件传值问题。这不仅是我们在日常开发中经常遇到的核心问题&#xff0c;也是面试过程中经常被问到的重要知识点。无论你是初学者还是有一定经验的开发者&#xff0c;掌握这些传值方式都将帮助你更高效地构建和维护 Vue 应用 目录 1. 父…

Git Restore 命令详解与实用示例

文章目录 Git Restore 命令详解与实用示例1. 恢复工作区文件到最后一次提交的状态基本命令示例恢复所有更改 2. 恢复某个文件到特定提交的状态基本命令示例 3. 恢复暂存区的文件基本命令示例恢复所有暂存的文件 git restore 的常见选项git restore 与 git checkout 比较总结 Gi…

AI 防口误指南_LLM 输出安全实践

在数字化转型的浪潮中&#xff0c;大语言模型(以下统称LLM)已成为企业技术栈中不可或缺的智能组件&#xff0c;这种强大的AI技术同时也带来了前所未有的安全挑战。它输出的内容如同双面刃&#xff0c;一面闪耀着效率与创新的光芒&#xff0c;另一面却隐藏着"幻觉"与不…

程序化广告行业(55/89):DMP与DSP对接及数据统计原理剖析

程序化广告行业&#xff08;55/89&#xff09;&#xff1a;DMP与DSP对接及数据统计原理剖析 大家好呀&#xff01;在数字化营销的大趋势下&#xff0c;程序化广告已经成为众多企业实现精准营销的关键手段。上一篇博客我们一起学习了程序化广告中的人群标签和Look Alike原理等知…

运维之 Centos7 防火墙(CentOS 7 Firewall for Operations and Maintenance)

运维之 Centos7 防火墙 1.介绍 Linux CentOS 7 防火墙/端口设置&#xff1a; 基础概念&#xff1a; 防火墙是一种网络安全设备&#xff0c;用于监控和控制网络流量&#xff0c;以保护计算机系统免受未经授权的访问和恶意攻击。Linux CentOS 7操作系统自带了一个名为iptables的…

第十五届蓝桥杯大赛软件赛省赛Python 大学 C 组题目试做(下)【本期题目:砍柴,回文字符串】

okk&#xff0c;大伙&#xff0c;这一期我们就把C组的题目刷完。 本期题目&#xff1a;砍柴&#xff0c;回文字符串 文章目录 砍柴题目思路分析举个栗子思路总结 代码 回文字符串题目思路分析代码 感谢大伙观看&#xff0c;别忘了三连支持一下大家也可以关注一下我的其它专栏&a…

Design Compiler:库特征分析(ALIB)

相关阅读 Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm1001.2014.3001.5482 简介 在使用Design Compiler时&#xff0c;可以对目标逻辑库进行特征分析&#xff0c;并创建一个称为ALIB的伪库&#xff08;可以被认为是缓存&#xff09;&…

MySQL索引原理:从B+树手绘到EXPLAIN

最近在学后端&#xff0c;学到了这里做个记录 一、为什么索引像书的目录&#xff1f; 类比&#xff1a;500页的技术书籍 vs 10页的目录缺点&#xff1a;全表扫描就像逐页翻找内容优点&#xff1a;索引将查询速度从O(n)提升到O(log n) 二、B树手绘课堂 1. 结构解剖&#xff0…

全连接RNN反向传播梯度计算

全连接RNN反向传播梯度计算 RNN数学表达式BPTT(随时间的反向传播算法)参数关系网络图L对V的梯度L对U的梯度L对W和b的梯度 RNN数学表达式 BPTT(随时间的反向传播算法) 参数关系网络图 L对V的梯度 L对U的梯度 L对W和b的梯度

C++高效读取大规模文本格式点云(windows)

需使用VS2017及以上版本&#xff0c;C语言标准选择C17&#xff0c;支持OpenMP。 执行效率明显优于ifstream stof。 // 点云数据结构 struct PointXYZ {std::array<float, 3> coord; };float string_to_float_fast(const std::string& str) {float value;auto [p…

【Linux】进程信号的捕捉处理

个人主页~ 进程信号的捕捉处理 一、信号捕捉处理的概述1、信号捕捉处理全过程2、用户态和内核态的区别&#xff08;一&#xff09;用户态&#xff08;二&#xff09;内核态&#xff08;三&#xff09;用户态与内核态的切换&#xff08;四&#xff09;硬件条件 二、再谈进程地址…

Nyquist内置函数-概述

1 Nyquist内置函数-概述 本章提供奈奎斯特&#xff08;Nyquist&#xff09;语言参考。操作按功能和抽象级别分类。奈奎斯特在两个重要级别上实现&#xff1a;“高级”级别支持行为抽象&#xff0c;这意味着像 stretch 和 at 这样的操作可以应用。这些函数是典型用户期望使用的…

数据驱动防灾:AI 大模型在地质灾害应急决策中的关键作用。基于DeepSeek/ChatGPT的AI智能体开发

全球气候变化加剧了滑坡、泥石流等地质灾害的发生频率与不确定性&#xff0c;传统基于统计与物理模型的预测方法常受限于‌数据稀疏性‌与‌动态耦合复杂性‌。近年来&#xff0c;AI智能体&#xff08;AI Agents&#xff09;与大型语言模型&#xff08;LLMs&#xff09;的突破为…

光谱相机在工业中的应用

光谱相机&#xff08;多光谱、高光谱、超光谱成像技术&#xff09;在工业领域通过捕捉物质的光谱特征&#xff08;反射、透射、辐射等&#xff09;&#xff0c;结合化学计量学与人工智能算法&#xff0c;为工业检测、质量控制和工艺优化提供高精度、非接触式的解决方案。以下是…

Dify工作流中如何去除deepseek-r1思考内容

在工作流中deepseek-r1的think标签内部的内容&#xff0c;很容易让工作流其他的llm产生幻觉&#xff0c;导致不能良好的生成目标效果。 我们通过代码的方式让deepseek-r1既有think思考链的效果&#xff0c;又不传递思考链。 工作流的逻辑为上图 去除think中的代码为 import re…