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

方便自己查看。

 

什么是perf?

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

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

什么是性能事件?

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

主要关注点在哪里?

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

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

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

基本原理?

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

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

如何使用高精度的采样?

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

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

有哪些常用的命令?

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

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

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的命中次数

常用的参数如下

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

一次分析后的结果如下:

Performance counter stats for process id '21787':
 <span class="hljs-number">42677.253367</span> task-clock                #    <span class="hljs-number">0.142</span> CPUs utilized
<span class="hljs-number">587,906</span> context-switches # <span class="hljs-number">0.014</span> M<span class="hljs-operator">/</span>sec
<span class="hljs-number">29,209</span> CPU-migrations # <span class="hljs-number">0.001</span> M<span class="hljs-operator">/</span>sec
<span class="hljs-number">117</span> page-faults # <span class="hljs-number">0.000</span> M<span class="hljs-operator">/</span>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%]

<span class="hljs-number">300.393753095</span> seconds <span class="hljs-keyword">time</span> elapsed</code><div class="hide-preCode-box"><span class="hide-preCode-bt"><img class="look-more-preCode contentImg-no-view" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title=""></span></div></pre>

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

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

常见的参数如下:

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

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

samples  pcnt function                                                                               DSO
_______ _____ ______________________________________________________________________________________ _________
61.00 19.4% nativewritemsr_safe [kernel]

18.00 5.7% JVM_InternString libjvm.so

17.00 5.4% find_busiest
group [kernel]

17.00 5.4% spinlock [kernel]

12.00 3.8% dev_hard
startxmit [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_instanceclass_or_nullE12symbolHandle6HandleS1_P6Thread libjvm.so

5.00 1.6% br_sysfs_delbr [bridge]

5.00 1.6% futex_wait

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

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

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

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

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


文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux入门初识Linux32536 人正在系统学习中

[转帖]perf学习-linux自带性能分析工具的更多相关文章

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

    目前在做性能分析的事情,之前没怎么接触perf,找了几篇文章梳理了一下,按照问题的形式记录在这里. 方便自己查看.   什么是perf? linux性能调优工具,32内核以上自带的工具,软件性能分析. ...

  2. [转]Linux性能分析工具汇总合集

    出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面.如果没有完善的计算机系统知识,网络知识和操作系统知识, ...

  3. 超全整理!Linux性能分析工具汇总合集

    转自:http://rdc.hundsun.com/portal/article/731.html?ref=myread 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章. ...

  4. (转)超全整理!Linux性能分析工具汇总合集

    超全整理!Linux性能分析工具汇总合集 原文:http://rdc.hundsun.com/portal/article/731.html 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望, ...

  5. Linux 性能分析 工具命令

    背景知识:具备背景知识是分析性能问题时需要了解的.比如硬件 cache:再比如操作系统内核.应用程序的行为细节往往是和这些东西互相牵扯的,这些底层的东西会以意想不到的方式影响应用程序的性能,比如某些程 ...

  6. 系统级性能分析工具perf的介绍与使用

    测试环境:Ubuntu16.04(在VMWare虚拟机使用perf top存在无法显示问题) Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance pro ...

  7. Linux 性能分析工具汇总合集

    出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面.如果没有完善的计算机系统知识,网络知识和操作系统知识, ...

  8. perf性能分析工具使用分享

    @ 目录 前言 perf的介绍和安装 perf基本使用 perf list使用,可以列出所有的采样事件 perf stat 概览程序的运行情况 perf top实时显示当前系统的性能统计信息 perf ...

  9. 系统级性能分析工具 — Perf

    从2.6.31内核开始,linux内核自带了一个性能分析工具perf,能够进行函数级与指令级的热点查找. perf Performance analysis tools for Linux. Perf ...

  10. 系统级性能分析工具perf的介绍与使用[转]

    测试环境:Ubuntu16.04(在VMWare虚拟机使用perf top存在无法显示问题) Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance pro ...

随机推荐

  1. 你要了解的 OpenAI 那些事:创立简史,技术背景等

    原文: https://openaigptguide.com/what-is-openai/ OpenAI 是一家人工智能研究公司,成立于2015年,总部位于美国旧金山.目前,OpenAI由创始人Sa ...

  2. SaaS 营销怎么做?几点思考

    按大部分 SaaS 公司组织架构,梳理了这 4 大业务部门(产品.市场.销售.服务-客户成功)的职责和客户价值链条.如图: 根据客户价值体验地图,分为两块过程: 客户营销过程 客户成功过程 针对 Sa ...

  3. 在线编辑Word——插入表格

    Word中可插入表格并进行相关格式化操作用于美化表格设计.本文,将通过使用Spire.Cloud Word在线编辑器展示如何来插入格式化的表格到Word.详细步骤见以下内容: 1. 进入在线编辑Wor ...

  4. 详解CNN实现中文文本分类过程

    摘要:本文主要讲解CNN实现中文文本分类的过程,并与贝叶斯.决策树.逻辑回归.随机森林.KNN.SVM等分类算法进行对比. 本文分享自华为云社区<[Python人工智能] 二十一.Word2Ve ...

  5. 万字详解什么是生成对抗网络GAN

    摘要:这篇文章将详细介绍生成对抗网络GAN的基础知识,包括什么是GAN.常用算法(CGAN.DCGAN.infoGAN.WGAN).发展历程.预备知识,并通过Keras搭建最简答的手写数字图片生成案. ...

  6. 常用的echo和cat,这次让我折在了特殊字符丢失问题上

    摘要:用过linux的都知道,echo和cat是我们常用的展示内容和写入内容的方式. 本文分享自华为云社区<echo和cat,重定向到文件时,解决特殊字符丢失问题>,作者: 大金(内蒙的) ...

  7. TS数据类型:从C++/Java/Python到TS看元组tuple—元组的来龙去脉

    在C++有Java这种强类型语言中,常用的Array.List.Set ,在集合中只能是一种类型(可以复习下:<再谈Java数据结构-分析底层实现与应用注意事项). int data[] = n ...

  8. 火山引擎A/B测试私有化实践

    更多技术交流.求职机会.试用福利,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 作为一款面向 ToB 市场的产品--火山引擎 A/B 测试(DataTester)为了满足客户对数据安全 ...

  9. 分享个本地maven配置

    用阿里云的快有点受不了了,经常有包下载不了 settings.xml <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0&q ...

  10. Mac 播放 swf Flash文件

    Flash已不再支持,swf 文件彻底打不开了(一些教程),通过PD虚拟,安装 windows 操作系统在里在装了 flash 播放器使用了一段时间,始终不方便.于是找到了如下方法 首先安装:Adob ...