什么是perf?
Linux功能调优东西,32内核以上自带的东西,软件功能剖析。在2.6.31及后续版别的linux内核里,装置perf十分的简单。
简直可以处理一切与功能相关的工作。
什么是功能工作?
指在处理器或许操作体系中发生,或许影响到程序功能的硬件工作或许软件工作。
首要重视点在哪里?
算法优化(空间复杂度、时刻复杂度)、代码优化(说到履行速度、削减内存占用)
点评程序对硬件资源的运用情况,例如各级cache的拜访次数,各级cache的丢掉次数、流水线中止周期、前端总线拜访次数等。
点评程序对操作体系资源的运用情况,体系调用次数、上下文切换次数、使命搬迁次数。
基本原理?
硬件的话选用PMC(performance monitoring unit)CPU的部件,在特定的条件下勘探的功能工作是否发生以及发生的次数。
软件功能测验,内置于kernel,散布在各个功能模块中,计算和操作体系相关功能工作。
怎么运用高精度的采样?
假如需求选用高精度的采样,需求在拟定功能工作时,在工作后增加后缀“:p”或许“:pp”
[cpp] view plain copy
0:无精度确保
1:采样指令好触发功能时刻的指令误差为常数(:p)
2:尽量确保误差为0(:pp)
3:确保误差有必要为0(:ppp)
有哪些常用的指令?
1、perf list 列出一切可以触发perf采样点的工作(当时硬件环境支撑的功能工作)
全体分为三类hardware(硬件发生)、software(内核软件发生)、tradepoint(内核中静态tracepoint触发工作)。
[html] view plain copy
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的射中次数
常用的参数如下
[cpp] view plain copy
-e,指定功能工作
-p,指定剖析进程的PID
-t,指定待剖析线程的TID
-r N,接连剖析N次
-d,全面功能剖析,选用更多的功能工作
一次剖析后的成果如下:
[html] view plain copy
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周期数”进行全体系的功能剖析
常见的参数如下:
[cpp] view plain copy
-p:指定进程PID
-t:指定线程的TID
-a:剖析整个体系的功能(默许)
-d:界面刷新周期,默许是2秒
成果输出中,份额是该符号引发的功能时刻在整个监测域中占的份额,一般称为热度。
[html] view plain copy
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/