使用 perf 工具进行性能分析

1、perf简介

perf 是 Linux 内核自带的一个性能分析工具,它能够采集和分析系统和应用程序的性能数据。perf 是基于 Linux 内核的性能计数器(Performance Counters)实现的,通过它可以收集大量关于 CPU、内存、I/O 等方面的信息。perf 支持多种分析模式,如采样(Sampling)、跟踪(Tracing)、事件计数等。perf 工具的关键功能如下:

  • CPU 性能计数:收集 CPU 周期、指令、缓存访问等信息。
  • 调用图分析:分析函数调用的频率、调用链和性能瓶颈。
  • 时间跟踪:对程序的执行时间进行精确分析。
  • 内存访问:分析内存访问模式,如缓存命中率、内存带宽使用等。
  • 事件跟踪:支持跟踪不同事件,如系统调用、进程调度等。

2、perf安装

大多数现代 Linux 发行版都已预装 perf 工具。如果你的系统中没有安装 perf,可以通过以下命令进行安装:

sudo apt update
sudo apt install linux-tools-common linux-tools-$(uname -r)

3、perf的基本使用

3.1、查看CPU性能计数器

最简单的 perf 命令之一是查看 CPU 性能计数器信息。可以使用 perf stat 命令来收集一些基本的统计信息:

perf stat ls

上面的命令会执行 ls 命令并输出 CPU 使用情况,如周期数、指令数、缓存命中率等。

 Performance counter stats for 'ls':1.615207      task-clock (msec)         #    0.999 CPUs utilized          1,234,568      context-switches          #    0.764 K/sec                  567,876      CPU-migrations            #    0.351 K/sec                  100,056,789    page-faults               #    61.92 K/sec                  2,456,789,123  cycles                    #    1.517 GHz                   1,234,567,890  instructions              #    0.50  insns per cycle        345,678,901  branches                  #    213.12 M/sec                 123,456,789  branch-misses             #    35.66% of all branches       0.001500123 seconds time elapsed

常见的统计项包括:

  • task-clock:任务执行时间
  • cycles:CPU周期数
  • instructions:指令数
  • branches:分支指令数
  • branch-misses:分支预测失败的次数
  • page-faults:页面错误数

3.2、查看系统调用和事件

如果你想查看某个程序的系统调用,可以使用 perf trace 命令。例如:

perf trace ./my_program

该命令会列出 my_program 程序执行时的系统调用,类似于 strace,但是 perf trace 会提供更多的性能分析信息。

3.3、调用图

perf 还支持生成调用图,可以帮助我们了解函数调用的情况。使用 perf record 进行采样,然后通过 perf report 查看调用图。

perf record -g ./my_program
perf report

-g 选项启用了调用图的采样。执行 perf report 后,您可以看到函数调用图,并找出可能的性能瓶颈

3.4、分析热点函数

假设我们需要分析某个程序中最耗时的函数。可以通过 perf record 和 perf report 获得:

perf record -e cycles -a -- sleep 10
perf report

上面命令会记录所有 CPU 上的周期,并且在执行 10 秒后生成报告。在报告中,可以查看哪些函数消耗了最多的 CPU 周期。

4、perf进阶使用

4.1、跟踪特定事件

perf 支持多种硬件和软件事件,可以通过 -e 参数指定感兴趣的事件。例如,监控指令计数和缓存命中率:

perf stat -e instructions,cache-references,cache-misses ls

常见的性能事件包括:

  • instructions:执行的指令数
  • cycles:CPU 周期
  • cache-references:缓存访问次数
  • cache-misses:缓存未命中的次数

4.2、CPU级别性能分析

有时候,CPU 上的性能问题会影响整个系统的表现。perf 可以帮助我们分析 CPU 级别的事件。例如,查看 CPU 使用率、上下文切换等:

perf stat -e cpu-clock,task-clock,cpu-migrations,context-switches -a

此命令会实时显示系统级的 CPU 性能数据,包括上下文切换和 CPU 迁移情况。

4.3、分析多进程

perf 也支持多进程的性能分析。例如,分析整个系统中所有进程的性能:

perf stat -a -e cycles,instructions,cache-references,cache-misses

通过上述命令,perf 将会显示系统所有进程的性能数据,包括 CPU 周期、指令数、缓存访问

5、perf输出分析

perf 的输出通常包含很多细节,理解这些数据对性能分析至关重要。我们可以从以下几个方面分析输出结果:

  • CPU 周期与指令数,通过比较 cycles 和 instructions 可以计算指令的执行效率。如果 instructions 远少于 cycles,意味着 CPU 的利用率不高,可能是由于分支预测失败、内存延迟等问题
  • 缓存命中率,通过查看 cache-references 和 cache-misses,可以判断缓存命中率。如果缓存未命中过多,说明程序的内存访问模式不够友好,可能导致性能瓶颈
  • 上下文切换和 CPU 迁移,频繁的上下文切换和 CPU 迁移通常会导致性能下降。这些问题可能是由于锁竞争、IO 阻塞等原因造成的

6、总结

perf 是一个功能强大的性能分析工具,可以帮助开发人员从多个维度进行系统和应用程序的性能分析。通过掌握 perf 的基本命令和高级功能,开发者可以更高效地定位性能瓶颈,优化系统的运行效率。

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

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

相关文章

Linux挖矿程序排查

一、背景 我们收到一个阿里云安全告警,内容是服务器可能存在挖矿程序。 二、杀死挖矿程序 2.1 找到可疑服务器进程 #1.输入top命令,输入shift P会按照cpu的使用率大小从大到小进行排序,cpu使用率高的就是可疑进程。 top #2.查看运行该进程…

flask基础

from flask import Flask, requestapp Flask(__name__)# app.route(/) # def hello_world(): # put applications code here # return Hello World!app.route(/) # 路由 当用户访问特定 URL 时,Flask 会调用对应的视图函数来处理请求 def index():return …

OpenCV学习——图像融合

import cv2 as cv import cv2 as cvbg cv.imread("test_images/background.jpg", cv.IMREAD_COLOR) fg cv.imread("test_images/forground.png", cv.IMREAD_COLOR)# 打印图片尺寸 print(bg.shape) print(fg.shape)resize_size (1200, 800)bg cv.resize…

Spring Boot 项目创建

创建一个新项目: 打开 Spring Initializr 网址:https://start.spring.io/ ,然后创建一个新项目: springboot3.3.5_jdk17: Project(Maven)编程语言(Java 17)Spring Boo…

GTID下复制问题和解决

环境介绍 数据库1主2从,mysql版本是v5.19 表结构 一、主库新增记录,从库提示主键冲突 模拟故障 1, master上关闭 sql_log_bin,删除id 103 后打开 2, 确认此时从库有id103,主库没有 3, master insert id103 主从异常…

C语言初阶【13】——打印一个数的每一位(递归和非递归实现)

1. 题目 打印一个数的每一位 2.分析 首先先实现非递归方式, 以123为例。我们要获取它的每一位, 获取个位数:123 %10 3 获取十位数:123/10 12 之后在 12%10 2; 获取百位数:12/10 1 之后再1%10 1&#x…

webrtc学习----前端推流拉流,局域网socket版,一对多

提示:局域网socket版,一对多 文章目录 [TOC](文章目录) 前言一、教程二、webrtc工作流程三、推流端四、拉流五、socket服务六、效果七、备注总结 前言 WebRTC(Web Real-Time Communication)是一种实时通讯技术,允许网…

深入探讨 Go 中的高级表单验证与翻译:Gin 与 Validator 的实践之道20241223

深入探讨 Go 中的高级表单验证与翻译:Gin 与 Validator 的实践之道 在现代后端开发中,表单验证是保证数据完整性和服务稳定性的核心环节。如何优雅、高效地实现表单验证,同时提供人性化的错误提示,是每位开发者的必修课。在本文中…

单机游戏《野狗子》游戏运行时提示dbghelp.dll缺失是什么原因?dbghelp.dll缺失要怎么解决?

《野狗子》游戏运行时提示dbghelp.dll缺失:原因与解决方案 在畅游《野狗子》这款引人入胜的游戏世界时,突然遭遇“dbghelp.dll缺失”的错误提示,无疑会给玩家的探险之旅蒙上一层阴影。作为一名深耕软件开发领域的从业者,我深知此…

Unity复刻胡闹厨房复盘 模块一 新输入系统订阅链与重绑定

本文仅作学习交流,不做任何商业用途 郑重感谢siki老师的汉化教程与代码猴的免费教程以及搬运烤肉的小伙伴 版本:Unity6 模板:3D 核心 渲染管线:URP ------------------------------…

Flutter 异步编程简述

1、isolate 机制 1.1 基本使用 Dart 是基于单线程模型的语言。但是在开发当中我们经常会进行耗时操作比如网络请求,这种耗时操作会堵塞我们的代码。因此 Dart 也有并发机制 —— isolate。APP 的启动入口main函数就是一个类似 Android 主线程的一个主 isolate。与…

一键打断线(根据相交点打断)——CAD c# 二次开发

多条相交线根据交点一键打断,如下图: 部分代码如下: finally namespace IFoxDemo; public class Class1 {[CommandMethod("ddx")]public static void Demo(){//"ifox可以了".Print();Database db HostApplicationServices.Workin…

Confluent Cloud Kafka 可观测性最佳实践

Confluent Cloud 介绍 Confluent Cloud 是一个完全托管的 Apache Kafka 服务,提供高可用性和可扩展性,旨在简化数据流处理和实时数据集成。用户可以轻松创建和管理 Kafka 集群,而无需担心基础设施的维护和管理。Confluent Cloud 支持多种数据…

【C++】B2066救援题目分析和解决讲解

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯 题目💯 题目分析每个屋顶计算的元素 💯 思路解析1. **读取输入**2. **计算屋顶时间**3. **结果精确取整** 💯 完整解决代码&#x1f4a…

WPS工具栏灰色怎么办

WPS离线不登录,开启工具栏等相关功能 当你在使用WPS的过程中,若因网络问题或其他特殊原因,导致无法登录使用WPS时,可根据以下步骤开启离线兼容模式,开启此模式后,可在未登录的状态下,激活并使用…

反射探针.

一、在unity场景中如何添加反射探针? 可以先添加一个空对象,在空对象的上方添加反射探针组件(Reflection Probe) 反射探针的类型有:Baked、Custom、Realtime 其中“Baked”反射探针类型,可以将场景中的静态…

SecureCRT汉化版

目录 9.5.1版 8.1.4版 下载链接 SecureCRT 和 SecureFX 是由 VanDyke Software 开发的专业工具,分别专注于安全的终端仿真与文件传输。SecureCRT 提供高效的终端仿真和多协议支持,是网络管理和系统配置的首选工具;SecureFX 则致力于安全的…

回归预测 | MATLAB实现CNN-LSSVM卷积神经网络结合最小二乘支持向量机多输入单输出回归预测

回归预测 | MATLAB实现CNN-LSSVM卷积神经网络结合最小二乘支持向量机多输入单输出回归预测 目录 回归预测 | MATLAB实现CNN-LSSVM卷积神经网络结合最小二乘支持向量机多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 回归预测 | MATLAB实现CNN-LSSVM…

使用Vue的props进行组件传递校验时出现 Extraneous non-props attributes的解决方案

作者:CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 使用环境:WebStorm 目录 出现错误的情况 报错: 代码: 报错截图 原因分析 解决方案 方法一 方法二 出现错误的情况 以下是我遇到该错误时遇到的报错和代码&…

【知识】cuda检测GPU是否支持P2P通信及一些注意事项

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 代码流程 先检查所有GPU之间是否支持P2P通信;然后尝试启用GPU之间的P2P通信;再次检查所有GPU之间是否支持P2P通信。 test.cu&…