Linux使用perf工具进行性能分析的详细指南

 更新时间:2024年12月25日 11:21:04   作者:哎呦,帅小伙哦  
perf 是 Linux 内核自带的一个性能分析工具,它能够采集和分析系统和应用程序的性能数据,本文主要介绍了使用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 的基本命令和高级功能,开发者可以更高效地定位性能瓶颈,优化系统的运行效率。

到此这篇关于Linux使用perf工具进行性能分析的详细指南的文章就介绍到这了,更多相关Linux perf性能分析内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Linux下怎么切换使用两个版本的JDK

    Linux下怎么切换使用两个版本的JDK

    这篇文章主要介绍了Linux下切换使用两个版本的JDK的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-08-08
  • ubuntu下rz/sz命令的安装与使用说明

    ubuntu下rz/sz命令的安装与使用说明

    rz,sz是Linux/Unix同Windows,用ZModem协议传输文件的命令行工具,下面这篇文章主要给大家介绍了在ubuntu系统下rz/sz命令的安装与使用说明,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-07-07
  • Linux自动化交互脚本expect从安装到开发详解

    Linux自动化交互脚本expect从安装到开发详解

    运行shell脚本有时会提示输入密码,如何让脚本自动输入密码呢?这时使用expect,Expect是基于Tcl发展而来的,它不仅可以进行交互,还可以根据程序的提示模拟标准输入,实现自动化交互执行的功能,在排查expect脚本执行问题时,应关注脚本是如何被调用和执行的
    2024-06-06
  • Linux下用netstat查看网络状态、端口状态

    Linux下用netstat查看网络状态、端口状态

    这篇文章主要介绍了Linux下用netstat查看网络状态、端口状态的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-12-12
  • Linux配置和使用i3窗口管理器的教程

    Linux配置和使用i3窗口管理器的教程

    今天小编就为大家分享一篇关于Linux配置和使用i3窗口管理器的教程,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • 使用apachetop实时监控日志、动态分析服务器运行状态

    使用apachetop实时监控日志、动态分析服务器运行状态

    这篇文章主要介绍了使用apachetop实时监控日志、动态分析服务器运行状态,通过apachetop这个工具可以动态的查看apache的日志文件,还可以直观的看到访问的每个地址的请求数、速度及流量等信息,需要的朋友可以参考下
    2014-06-06
  • linux下jps命令找不到的问题及解决

    linux下jps命令找不到的问题及解决

    这篇文章主要介绍了linux下jps命令找不到的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • linux中把.c的文件编译成.so文件

    linux中把.c的文件编译成.so文件

    这篇文章主要介绍了linux中把.c的文件编译成.so文件的相关资料,本文以编译mylib.c为例讲如何编译.so文件,感兴趣的朋友跟随脚本之家小编一起学习吧
    2018-05-05
  • Linux mysql-5.6如何实现重置root密码

    Linux mysql-5.6如何实现重置root密码

    这篇文章主要介绍了Linux mysql-5.6如何实现重置root密码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • 使用Samba在Linux服务器上搭建共享文件服务的方法

    使用Samba在Linux服务器上搭建共享文件服务的方法

    Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。这篇文章主要介绍了使用Samba在Linux服务器上搭建共享文件服务 ,需要的朋友可以参考下
    2019-05-05

最新评论