33.perf工具使用

2024-05-26 16:28
文章标签 工具 使用 33 perf

本文主要是介绍33.perf工具使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 基本介绍
    • `perf`命令使用
      • reference


欢迎访问个人网络日志🌹🌹知行空间🌹🌹


基本介绍

Perf(Performance Counters for Linux,性能计数器子系统)是一个Linux性能分析工具,用于分析系统和应用程序的运行时性能。这个工具位于 Linux 内核源代码树中,具体位置在 tools/perf 目录下。虽然它是一个用户空间的应用程序,但却是唯一一个被包含在 Linux 内核源码中的复杂用户软件。

Perf可以帮助开发人员和系统管理员进行函数级和指令级的热点查找,可以用来分析程序中热点函数的CPU占用率,了解CPU性能计数器、内核跟踪点和硬件事件等信息,从而找到性能瓶颈,优化软件性能并诊断问题。

通过 perf 命令,我们可以获得系统在运行过程中的各种性能数据,例如 CPU 利用率、内存使用情况、磁盘 I/O 等。perf 可以用于多个方面的性能分析,以下是一些常用的用途:

  • CPU 性能分析,通过 perf命令,可以监测 CPU 的使用率、上下文切换次数、缓存命中率等指标,可以帮助开发者找出 CPU 性能瓶颈,优化程序的运行效率。
  • 内存性能分析perf 命令可以监测内存的使用情况,例如内存泄漏、内存碎片等问题,可以帮助开发者优化内存的管理,提高系统的稳定性。
  • 函数级别采样perf可以对程序进行函数级别的采样,从而了解程序的性能瓶颈在哪里。其基本原理是每隔一个固定时间,CPU 会产生一个中断,记录当前是哪个进程、哪个函数,然后给对应的进程和函数加一个统计值,从而知道 CPU 在某个进程或某个函数上花费了多少时间。

如果系统没有安装Perf,安装方式为:

sudo apt install linux-tools-common linux-tools-generic

查看是否安装成功:

perf --version
# perf version 5.15.148

权限设置,默认运行perf命令需要sudo权限,可以通过修改/etc/sysctt.conf文件进行设置

sudo vi /etc/sysctl.conf
# add line
kernel.perf_event_paranoid = 0

perf命令使用

命令格式为:

perf <options> subcommand <options/arguments>

perf支持很多subcommand选项,常用的子命令有:

  • annotate读取perf.data,展示带注释代码,实际使用发现展示的汇编代码
sudo perf annotate -f# Percent│       xor    %r15d,%r15d
#        │       lea    0x9(%rsp),%rbp
#        │       testb  $0x3,0x90(%rsp)
#        │     ↓ je     96
#        │       swapgs
#        │       nop
#        │       xchg   %ax,%ax
#        │       mov    %cr3,%rax
#        │       bts    $0x3f,%rax
#        │       and    $0xffffffffffffe7ff,%rax
#        │       mov    %rax,%cr3
#        │       xchg   %ax,%ax
#        │       mov    $0x48,%ecx
  • list,展示perf命令可以用来评估程序性能的事件
sudo perf list -h# Usage: perf list [<options>] [hw|sw|cache|tracepoint|pmu|sdt|metric|metricgroup|event_glob]

通过上面的命令可以查看事件类型,hwhardware硬件相关事件,PMUPerformance Monitoring Unit相关事件等

  • record,记录程序运行时的数据
sudo perf record -e cpu-clock -aR sleep 10# [ perf record: Woken up 1 times to write data ]
# [ perf record: Captured and wrote 0.002 MB perf.data (~150 samples) ]
  • report,展示perf命令记录的数据
sudo perf report -i perf.data
  • stat查看具体某个事件相关的统计结果
sudo perf stat -e cpu-clock -aR sleep 10#  Performance counter stats for 'sleep 10':#               1.13 msec cpu-clock                 #    0.000 CPUs utilized          #       10.002228914 seconds time elapsed#        0.001793000 seconds user
#        0.000000000 seconds sys

statrecord子命令的主要区别是record会将结果保存到perf.data文件中,而stat是直接展示结果。

  • top是直接展示整个系统的CPU内存等使用情况
  • script读取perf.data数据,并展示迹输出trace out
子命令作用
annotate汇编代码及注释
list查看所有事件
stat查看某事件相关的性能数据
record录制某事件相关的性能数据,并保存perf.data文件
report加载perf.data文件
top系统相关的性能数据
scriptperf.data相关的trace out

使用perf命令追踪一个正在运行的进程:

sudo perf stat --pid <pid>

reference

1.https://phoenixnap.com/kb/linux-perf#:~:text=The%20Linux%20perf%20tool%20is,and%20analyzing%20CPU%20event%20data.
2.https://cloud.tencent.com/developer/article/2228048

这篇关于33.perf工具使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1004985

相关文章

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

使用Python实现无损放大图片功能

《使用Python实现无损放大图片功能》本文介绍了如何使用Python的Pillow库进行无损图片放大,区分了JPEG和PNG格式在放大过程中的特点,并给出了示例代码,JPEG格式可能受压缩影响,需先... 目录一、什么是无损放大?二、实现方法步骤1:读取图片步骤2:无损放大图片步骤3:保存图片三、示php

使用Python实现一个简易计算器的新手指南

《使用Python实现一个简易计算器的新手指南》计算器是编程入门的经典项目,它涵盖了变量、输入输出、条件判断等核心编程概念,通过这个小项目,可以快速掌握Python的基础语法,并为后续更复杂的项目打下... 目录准备工作基础概念解析分步实现计算器第一步:获取用户输入第二步:实现基本运算第三步:显示计算结果进

python之uv使用详解

《python之uv使用详解》文章介绍uv在Ubuntu上用于Python项目管理,涵盖安装、初始化、依赖管理、运行调试及Docker应用,强调CI中使用--locked确保依赖一致性... 目录安装与更新standalonepip 安装创建php以及初始化项目依赖管理uv run直接在命令行运行pytho

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅