perf学习-linux自带性能分析工具
目前在做性能分析的事情,之前没怎么接触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': 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周期数”进行全系统的性能剖析
常见的参数如下:
-p:指定进程PID
-t:指定线程的TID
-a:分析整个系统的性能(默认)
-d:界面刷新周期,默认是2秒
结果输出中,比例是该符号引发的性能时间在整个监测域中占的比例,通常称为热度。
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
4、perf record/report记录一段时间内系统/进程的性能事件
默认在当前目录下生成数据文件:perf.data
report读取生成的perf.data文件,-i参数指定路径
了解perf,是性能分析的开始。
http://www.ibm.com/developerworks/cn/linux/l-cn-perf1/
perf学习-linux自带性能分析工具的更多相关文章
- [转]Linux性能分析工具汇总合集
出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面.如果没有完善的计算机系统知识,网络知识和操作系统知识, ...
- 超全整理!Linux性能分析工具汇总合集
转自:http://rdc.hundsun.com/portal/article/731.html?ref=myread 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章. ...
- (转)超全整理!Linux性能分析工具汇总合集
超全整理!Linux性能分析工具汇总合集 原文:http://rdc.hundsun.com/portal/article/731.html 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望, ...
- Linux 性能分析 工具命令
背景知识:具备背景知识是分析性能问题时需要了解的.比如硬件 cache:再比如操作系统内核.应用程序的行为细节往往是和这些东西互相牵扯的,这些底层的东西会以意想不到的方式影响应用程序的性能,比如某些程 ...
- 系统级性能分析工具perf的介绍与使用
测试环境:Ubuntu16.04(在VMWare虚拟机使用perf top存在无法显示问题) Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance pro ...
- Linux 性能分析工具汇总合集
出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面.如果没有完善的计算机系统知识,网络知识和操作系统知识, ...
- perf性能分析工具使用分享
@ 目录 前言 perf的介绍和安装 perf基本使用 perf list使用,可以列出所有的采样事件 perf stat 概览程序的运行情况 perf top实时显示当前系统的性能统计信息 perf ...
- 系统级性能分析工具 — Perf
从2.6.31内核开始,linux内核自带了一个性能分析工具perf,能够进行函数级与指令级的热点查找. perf Performance analysis tools for Linux. Perf ...
- 系统级性能分析工具perf的介绍与使用[转]
测试环境:Ubuntu16.04(在VMWare虚拟机使用perf top存在无法显示问题) Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance pro ...
随机推荐
- Angular企业级开发(9)-前后端分离之后添加验证码
1.背景介绍 团队开发的项目,前端基于Bootstrap+AngularJS,后端Spring MVC以RESTful接口给前端调用.开发和部署都是前后端分离.项目简单部署图如下,因为后台同时采用微服 ...
- yii2.0自带email
大部分框架都有自带的email邮件发送类,yii的邮件发送也很简单,代码如下: 修改配置文件,普通版在(config/web.php).高级版默认配置在/common/config/main-loca ...
- iOS开发之KVC
1.KVC概述 KVC(Key-value coding)是一套利用字符串标识符间接访问对象属性和关系的机制.Cocoa Programming中,Core Data,Application Scri ...
- 云片-语音验证码--短信验证码 - PHP接口
///////////////////////语音验证///////////////////////////// /** * 发送短信(语音验证码)云片语音服务 * @param $apikey ...
- Unity3D动态读取外部MP3文件给AudioSource
在PC端VR游戏开发中,需要动态加载本地的MP3文件,但是Unity3D不知道出于什么原因,到5.4.0也不支持MP3文件的外部加载(目前只支持wav和ogg). 因此要想通过www来加载mp3文件就 ...
- 光环国际的PRINCE2培训时间
一.光环国际的PRINCE2课程安排培训方式: 小班授课,50人为限; 全国网址直播课程,覆盖各个地区学员 精读原理配合独家开发大量实际案例研讨; 从商业战略角度解析PRINCE ...
- Luogu1486郁闷的出纳员【Splay】
P1486 郁闷的出纳员 题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反 ...
- 程序员的基本功之Java集合的实现细节
1.Set集合与Map 仔细对比观察上面Set下和Map下的接口名,不难发现它们如此的相似,必有原因 如果只考察Map的Key会发现,它们不可以重复,没有顺序,也就是说把Map的所有的Key集中起来就 ...
- C#研究OpenXML之路(3-OpenXMLSDKToolV25.msi)
一.OpenXMLSDKToolV25.msi 看了几天的OpenXml,感觉如果完全手写代码,将会是一件非常苦逼的事情,即要分析对应xlsx文件层次结构,以及包含的xml文件的xml标签结构,还要关 ...
- 自动化测试培训:qtp脚本获取获取汇率数据
poptest(www.poptest.cn)致力于测试开发工程师的培训,以培养能胜任做测试工具开发,完成自动化测试,性能测试,安全性测试等工作能力为目标.自8月份成立2个月内中针对企业在职人员的能力 ...