`
iamzhongyong
  • 浏览: 804567 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

perf学习-linux自带性能分析工具

阅读更多

目前在做性能分析的事情,之前没怎么接触perf,找了几篇文章梳理了一下,按照问题的形式记录在这里。

方便自己查看。

 

什么是perf?

linux性能调优工具,32内核以上自带的工具,软件性能分析。在2.6.31及后续版本的Linux内核里,安装perf非常的容易。

几乎能够处理所有与性能相关的事件。

 

什么是性能事件?

指在处理器或者操作系统中发生,可能影响到程序性能的硬件事件或者软件事情。

 

主要关注点在哪里?

算法优化(空间复杂度、时间复杂度)、代码优化(提到执行速度、减少内存占用)

评估程序对硬件资源的使用情况,例如各级cache的访问次数,各级cache的丢失次数、流水线停顿周期、前端总线访问次数等。

评估程序对操作系统资源的使用情况,系统调用次数、上下文切换次数、任务迁移次数。

 

基本原理?

硬件的话采用PMC(performance monitoring unit)CPU的部件,在特定的条件下探测的性能事件是否发生以及发生的次数。

软件性能测试,内置于kernel,分布在各个功能模块中,统计和操作系统相关性能事件。

 

如何使用高精度的采样?

如果需要采用高精度的采样,需要在制定性能事情时,在事件后添加后缀“:p”或者“:pp”

1
2
3
4
0:无精度保证
1:采样指令好触发性能时间的指令偏差为常数(:p)
2:尽量保证偏差为0(:pp)
3:保证偏差必须为0(:ppp)

 

有哪些常用的命令?

1、perf list 列出所有能够触发perf采样点的事件(当前硬件环境支持的性能事件)

总体分为三类hardware(硬件产生)、software(内核软件产生)、tradepoint(内核中静态tracepoint触发事件)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
List of pre-defined events (to be used in -e):
  cpu-cycles OR cycles                               [Hardware event]处理器周期事件
  stalled-cycles-frontend OR idle-cycles-frontend    [Hardware event]
  stalled-cycles-backend OR idle-cycles-backend      [Hardware event]
  instructions                                       [Hardware event]
  cache-references                                   [Hardware event]
  cache-misses                                       [Hardware event]
  branch-instructions OR branches                    [Hardware event]
  branch-misses                                      [Hardware event]
  bus-cycles                                         [Hardware event]
 
  cpu-clock                                          [Software event]
  task-clock                                         [Software event]
  page-faults OR faults                              [Software event]
  minor-faults                                       [Software event]
  major-faults                                       [Software event]
  context-switches OR cs                             [Software event]
  cpu-migrations OR migrations                       [Software event]
  alignment-faults                                   [Software event]
  emulation-faults                                   [Software event]
 
  L1-dcache-loads                                    [Hardware cache event]
  L1-dcache-load-misses                              [Hardware cache event]
  L1-dcache-stores                                   [Hardware cache event]
  L1-dcache-store-misses                             [Hardware cache event]
  L1-dcache-prefetches                               [Hardware cache event]
  L1-dcache-prefetch-misses                          [Hardware cache event]
  L1-icache-loads                                    [Hardware cache event]
  L1-icache-load-misses                              [Hardware cache event]
  L1-icache-prefetches                               [Hardware cache event]
  L1-icache-prefetch-misses                          [Hardware cache event]
  LLC-loads                                          [Hardware cache event]
  LLC-load-misses                                    [Hardware cache event]
  LLC-stores                                         [Hardware cache event]
  LLC-store-misses                                   [Hardware cache event]
  LLC-prefetches                                     [Hardware cache event]
  LLC-prefetch-misses                                [Hardware cache event]
  dTLB-loads                                         [Hardware cache event]
  dTLB-load-misses                                   [Hardware cache event]
  dTLB-stores                                        [Hardware cache event]
  dTLB-store-misses                                  [Hardware cache event]
  dTLB-prefetches                                    [Hardware cache event]
  dTLB-prefetch-misses                               [Hardware cache event]
  iTLB-loads                                         [Hardware cache event]
  iTLB-load-misses                                   [Hardware cache event]
  branch-loads                                       [Hardware cache event]
  branch-load-misses                                 [Hardware cache event]

 

2、perf stat分析程序的整体性能

利用10个典型事件剖析了应用程序。

  • task-clock:目标任务真真占用处理器的时间,单位是毫秒,我们称之为任务执行时间,

    后面是任务的处理器占用率(执行时间和持续时间的比值)

    持续时间值从任务提交到任务结束的总时间(总时间在stat结束之后会打印出来)。

  • context-switches:上下文切换次数,前半部分是切换次数,后面是平均每秒发生次数(M是10的6次方)。

  • cpu-migrations:处理器迁移,linux为了位置各个处理器的负载均衡,

    会在特定的条件下将某个任务从一个处理器迁往另外一个处理器,此时便是发生了一次处理器迁移。

  • page-fault:缺页异常,linux内存管理子系统采用了分页机制,

    当应用程序请求的页面尚未建立、请求的页面不在内存中或者请求的页面虽在在内存中,

    但是尚未建立物理地址和虚拟地址的映射关系是,会触发一次缺页异常。

  • cycles:任务消耗的处理器周期数

  • instructions:任务执行期间产生的处理器指令数,IPC(instructions perf cycle)

    IPC是评价处理器与应用程序性能的重要指标。(很多指令需要多个处理周期才能执行完毕),

    IPC越大越好,说明程序充分利用了处理器的特征。

  • branches:程序在执行期间遇到的分支指令数。

  • branch-misses:预测错误的分支指令数

  • cache-misses:cache时效的次数

  • cache-references:cache的命中次数

 

常用的参数如下

1
2
3
4
5
-e,指定性能事件
-p,指定分析进程的PID
-t,指定待分析线程的TID
-r N,连续分析N次
-d,全面性能分析,采用更多的性能事件

一次分析后的结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Performance counter stats for process id '21787':
 
     42677.253367 task-clock                #    0.142 CPUs utilized         
          587,906 context-switches          #    0.014 M/sec                 
           29,209 CPU-migrations            #    0.001 M/sec                 
              117 page-faults               #    0.000 M/sec                 
   82,341,400,508 cycles                    #    1.929 GHz                     [83.48%]
   61,262,984,952 stalled-cycles-frontend   #   74.40% frontend cycles idle    [83.28%]
   43,113,701,768 stalled-cycles-backend    #   52.36% backend  cycles idle    [66.72%]
   44,023,301,495 instructions              #    0.53  insns per cycle       
                                            #    1.39  stalled cycles per insn [83.50%]
    8,137,448,528 branches                  #  190.674 M/sec                   [83.22%]
      430,957,756 branch-misses             #    5.30% of all branches         [83.34%]
 
    300.393753095 seconds time elapsed

 

 

3、perf top实时显示系统/进程的性能统计信息

默认性能事件“cycles CPU周期数”进行全系统的性能剖析

常见的参数如下:

1
2
3
4
-p:指定进程PID
-t:指定线程的TID
-a:分析整个系统的性能(默认)
-d:界面刷新周期,默认是2

结果输出中,比例是该符号引发的性能时间在整个监测域中占的比例,通常称为热度。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
samples  pcnt function                                                                               DSO
_______ _____ ______________________________________________________________________________________ _________
 
  61.00 19.4% native_write_msr_safe                                                                  [kernel]
  18.00  5.7% JVM_InternString                                                                       libjvm.so
  17.00  5.4% find_busiest_group                                                                     [kernel]
  17.00  5.4% _spin_lock                                                                             [kernel]
  12.00  3.8% dev_hard_start_xmit                                                                    [kernel]
  11.00  3.5% tg_load_down                                                                           [kernel]
   9.00  2.9% futex_wake                                                                             [kernel]
   8.00  2.5% do_futex                                                                               [kernel]
   7.00  2.2% load_balance_fair                                                                      [kernel]
   7.00  2.2% weighted_cpuload                                                                       [kernel]
   7.00  2.2% update_cfs_shares                                                                      [kernel]
   7.00  2.2% JVM_LatestUserDefinedLoader                                                            libjvm.so
   6.00  1.9% update_cfs_load                                                                        [kernel]
   5.00  1.6% _ZN16SystemDictionary30resolve_instance_class_or_nullE12symbolHandle6HandleS1_P6Thread libjvm.so
   5.00  1.6% br_sysfs_delbr                                                                         [bridge]
   5.00  1.6% futex_wait                                                                             [kernel]

 

4、perf  record/report记录一段时间内系统/进程的性能事件

默认在当前目录下生成数据文件:perf.data

report读取生成的perf.data文件,-i参数指定路径

 

了解perf,是性能分析的开始。

http://www.ibm.com/developerworks/cn/linux/l-cn-perf1/

0
0
分享到:
评论

相关推荐

    你知道perf学习-linux自带性能分析工具怎么用?.docx

    Perf 是 Linux 操作系统内置的一个强大的性能分析工具,它专用于软件性能分析,尤其在32内核以上的版本中广泛使用。自Linux内核2.6.31以来,perf 已经成为开发者和系统管理员进行性能调优的重要助手。这个工具能够...

    perf脚本-火焰图.zip

    Perf是Linux内核自带的一种性能分析工具,全称为Performance Events for Linux。它允许用户对程序的运行进行采样,从而获取CPU执行的各种事件的信息,如指令执行、缓存命中率、上下文切换等。Perf支持动态采样,...

    性能验证工具,可以查看到每个子函数的时间消耗情况

    "perf"是Linux内核自带的一个性能分析工具,它是“Performance Events for Linux”的缩写。perf提供了一种简单的方式来收集和分析各种性能数据,包括CPU周期、指令执行、缓存命中率等,以及用户空间和内核空间的函数...

    性能调优工具-perf介绍

    "perf"是Linux内核自带的一款强大的性能诊断工具,自内核2.6.31引入Performance Counter概念,后来在2.6.32版本更名为Performance Event。目前的版本是0.0.2,它的一大优势在于能迅速应用到内核的最新特性。 Perf...

    cpp-nperf是一个类似于perf的Linux采样CPU分析器

    perf是Linux内核自带的一款性能分析工具,它能够收集和分析各种性能事件,如CPU周期、缓存命中、分支预测等。perf使用采样技术,即在程序运行过程中周期性地暂停并检查当前的状态,从而获得程序执行的热点信息。 ##...

    perf性能剖析工具1

    perf是Linux内核自带的一款强大的性能分析工具,适用于2.6版本以上的内核,但不支持虚拟机环境。 首先,perf的安装相对简单,有两种方式:一是通过yum源直接安装,只需在终端输入相应的命令;二是源代码安装,直接...

    20200630_性能分析工具说明(内存、CPU性能相关).pdf

    8. perf:perf是Linux内核自带的性能优化工具,用于记录实时情况并分析函数时间消耗的比例。它与Linux内核紧密集成,可以利用系统新功能,查看热点函数和缓存缺失的比率。perf可以用于记录日志、设定采样周期、指定...

    Linux内核测试工具perf使用简介

    摘要:Perf是Linux kernel自带的系统性能优化工具。Perf的优势在于与Linux Kernel的紧密结合,它可以先应用到加入Kernel的new feature。pef可以用于查看热点函数,查看cashe miss的比率,从而帮助开发者来优化程序...

    测试与优化--基于Linux的代码分析与研究

    总的来说,这个主题涵盖的内容广泛,包括但不限于测试策略、代码分析方法、性能优化技巧以及利用Linux自带工具进行问题诊断。学习和掌握这些知识,对于提升软件工程的实践能力和技术水平至关重要。

    linux-perf-playground

    `perf`是Linux内核自带的一款强大的性能分析工具,它提供了对硬件事件(如CPU周期、缓存命中等)以及软件事件(如函数调用、上下文切换等)的采样和统计能力。 【描述】:“全部” "全部"这个词表明这个项目可能...

    火焰图 程序性能分析

    `perf`是Linux内核自带的一个强大的性能分析工具,用于收集硬件和软件性能计数器数据。首先需要确保系统中已经安装了`perf`。如果系统中尚未安装,可以通过以下步骤安装: - **方法一:编译内核源代码** 如果系统...

    linux 下 c简单性能检查 学习

    本文将深入探讨如何使用Linux自带的性能分析工具`gprof`进行简单的性能检查,这正是`profile_fun.sh`脚本的主要功能。我们将讨论`gprof`的工作原理,如何编译程序以启用性能数据收集,以及如何解析输出结果来识别...

    linux测试追踪工具

    perf是Linux内核自带的一种性能分析工具,它可以收集CPU周期、缓存命中率、分支预测失败等硬件事件,从而帮助我们找出性能瓶颈。ftrace则允许用户动态追踪内核事件,包括系统调用、中断、调度事件等,这对于深入理解...

    perf tools p3

    Perf是Linux内核自带的一套性能事件采样工具,其设计目标是提供一种高效、低开销的方式来收集和分析系统级、进程级乃至指令级别的性能数据。 Perf的核心特性包括: 1. **采样(Sampling)**:Perf支持周期性地记录...

    linux下查看java进程下线程占用cpu情况

    - `perf` 是Linux下的一个性能分析工具,可以用来分析特定进程或线程的CPU使用情况,包括Java进程。使用 `perf stat -p <进程ID>` 可以查看指定进程的CPU使用统计。 7. **`strace` 命令**: - `strace` 可以跟踪...

    Linux Debugging and Performance Tuning Tips and Techniques

    通过学习本书提供的各种技术和工具,读者将能够更有效地识别和解决Linux系统中的各种性能问题,从而提高系统的稳定性和响应速度。无论是对于开发者还是系统管理员来说,《Linux调试与性能调优:技巧和技术》都是一本...

    在CentOS5下编译32内核的perf二进制文件及所需的包和patch

    很多的公司,包括我们公司,还...perf工具是内核自带的一个性能评估工具,功能很强大,为了在CentOS5下进行性能优化,我们要在CentOS5下对2.6.32内核的perf源码进行编译。我这里使用了linux-2.6.32-358.el6的内核源码。

    Linux系统运行时参数命令、网络、磁盘参数和日志监控.pdf

    - `perf`: Linux内核自带的性能分析工具,用于定位性能瓶颈。 - `tcpdump`: 网络数据包分析器,用于捕获和分析网络流量。 - `sar`: 系统活动记录,用于长期收集和分析系统性能数据。 - `blktrace`: 磁盘I/O跟踪...

    linux performance analysis and tools.zip

    2. **性能事件探查器**:例如`perf`,它是Linux内核自带的一款强大的性能分析工具,可以用于采样CPU周期、硬件事件、软件事件等。 3. **磁盘和文件系统分析**:包括`iotop`(监控I/O活动)、`fsstat`(文件系统统计...

    Node.js-调试指南.pdf

    perf 是 Linux 内核自带的系统性能分析工具,可以进行函数级与指令级的热点查找。FlameGraph 是一个可视化工具,能够将 CPU 的使用情况可视化,使开发者更好地了解程序的性能瓶颈。 perf 工具的使用方法: 1. 安装...

Global site tag (gtag.js) - Google Analytics