关键词:
perf list
– 性能事件与 CPU 及内核版本相关
Develop>perf list
List of pre-defined events (to be used in -e):
cpu-cycles OR cycles [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]
ref-cycles [Hardware event]
cpu-clock [Software event]
task-clock [Software event]
page-faults OR faults [Software event]
context-switches OR cs [Software event]
cpu-migrations OR migrations [Software event]
minor-faults [Software event]
major-faults [Software event]
alignment-faults [Software event]
emulation-faults [Software event]
dummy [Software event]
L1-dcache-loads [Hardware cache event]
L1-dcache-stores [Hardware cache event]
L1-icache-loads [Hardware cache event]
L1-icache-load-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]
dTLB-loads [Hardware cache event]
dTLB-load-misses [Hardware cache event]
dTLB-stores [Hardware cache event]
dTLB-store-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]
branch-instructions OR cpu/branch-instructions/[Kernel PMU event]
branch-misses OR cpu/branch-misses/[Kernel PMU event]
bus-cycles OR cpu/bus-cycles/[Kernel PMU event]
cache-misses OR cpu/cache-misses/[Kernel PMU event]
cache-references OR cpu/cache-references/[Kernel PMU event]
cpu-cycles OR cpu/cpu-cycles/[Kernel PMU event]
instructions OR cpu/instructions/[Kernel PMU event]
ref-cycles OR cpu/ref-cycles/[Kernel PMU event]
rNNN [Raw hardware event descriptor]
cpu/t1=v1[,t2=v2,t3 ...]/modifier [Raw hardware event descriptor]
(see ‘man perf-list‘ on how to encode it)
mem:<addr>[:access][Hardware breakpoint]
[Tracepoints not available:No such file or directory ]
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的命中次数
perf stat ./a.out
–‘-p’: 指定待分析进程的 PID
–‘-t’: 指定待分析线程的 TID
–‘-d’: 全面性能分析,采用更多的性能事件
Develop>perf stat -d -p 6371
^C
Performance counter stats for process id ‘6371‘:
12179.626710 task-clock (msec)# 1.248 CPUs utilized [100.00%]
96673 context-switches # 0.008 M/sec [100.00%]
0 cpu-migrations # 0.000 K/sec [100.00%]
32 page-faults # 0.003 K/sec
20442151906 cycles # 1.678 GHz [29.64%]
<not supported> stalled-cycles-frontend
<not supported> stalled-cycles-backend
7297770919 instructions # 0.36 insns per cycle [44.12%]
1236856463 branches # 101.551 M/sec [43.73%]
61040864 branch-misses # 4.94% of all branches [42.98%] //分支预测失效数。
3268288054 L1-dcache-loads # 268.341 M/sec [27.91%]
<not supported> L1-dcache-load-misses
105416823 LLC-loads # 8.655 M/sec [27.47%]
6321634 LLC-load-misses # 6.00% of all LL-cache hits [28.42%]
9.758418636 seconds time elapsed //表示采集的时间
–‘-p’: 指定待分析进程的 PID
–‘-t’: 指定待分析线程的 TID
–‘-c’: 事件的采样周期
–‘-d’: 界面的刷新周期( Default : 2s )
–‘-E’: 显示的函数条数
–‘-r <priority>’: 将 perf top 作为实时任务,优先级为<priority>
– ‘-K‘: 不显示内核符号
– ‘-U‘: 不显示用户符号
perf top -p 6371-K
PerfTop:7027 irqs/sec kernel:30.8% exact:0.0%[4000Hz cycles],(target_pid:6371)
-----------------------------------------------------------------------------------------------------------------------
34.03% server [.] dpdk::run_dp_thread(void*)
16.35% server [.] dpdk::capture::dp_process_cycle()
10.61% server [.] dpdk::Interface::send_burst()
9.45% server [.]CQdiscHtb::Dequeue()
4.34% server [.] update_cconfig_thread_readflag()
4.33% server [.] update_cconfig_thread_vsys_readflag(unsigned short)
4.02% server [.] _ZN4dpdk7capture10dp_processEv.clone.47
3.10% server [.] dpdk::Interface::recv_burst()
3.08%[vdso][.] __vdso_clock_gettime
2.65% server [.]CQdiscCtrl::Qos_Stream_Control(rte_mbuf*)
2.24% server [.] eth_em_recv_scattered_pkts
1.77% librt-2.15.so [.] clock_gettime
1.21% server [.] ipflow_new::flow_ha::dequeue()
0.88% server [.] DP_update_vsys_read_flag()
–# perf record [options][<command>]
–# perf record [options]--<command>[options]
–‘-e’:指定性能事件(默认事件: cycles)
–‘-p’:指定待分析进程的 PID
–‘-t’:指定待分析线程的 TID
–‘-a’:分析整个系统的性能(Default)
–‘-c’:事件的采样周期
–‘-o’:指定输出文件(Default: perf.data )
–‘-g’:记录函数间的调用关系
–‘-r <priority>’:将 perf top 作为实时任务,优先级为
<priority>
–‘-u <uid>’:只分析用户<uid>创建的进程
perf record -g -e cpu-clock ./a.out
perf record -g -e cpu-clock -p 6371
perf report
# perf report [-i <file> | --input=file]
–‘-i’:输入文件名
–‘-v’:显示每个符号的地址
–‘-d <dso>’:只显示指定 dso 的符号
–‘-n’:显示每个符号对应的事件数
–‘-v’:显示每个符号的地址
–‘--comms=<comm>’只显示指定 comm 的信息
–‘-S <symbol name>’只考虑指定符号
–‘-U’只显示已解析的符号
–‘-g [type,min]’按照[type,min]指定的方式显示函数调用图
- –‘-g [type,min]’ 按照 [type,min] 指定的方式显示函数
调用图
type : flat - 线性展开所有调用链
graph – 显示调用树,并显示每个调用树对应
的绝对开销率
fractal – 显示调用树,并显示每个调用树对应
的相对开销率
min :只显示开销率大于 min 的符号
perf report -g fractal -i perf.data
# To display the perf.data header info, please use --header/--header-only options.
#
# Samples: 20K of event ‘cpu-clock‘
# Event count (approx.): 5111500000
#
# Children Self Command Shared Object Symbol
# ........ ........ ....... ................. ............................
#
100.00%0.00% a.out libc-2.15.so [.] __libc_start_main
|
--- __libc_start_main
100.00%0.00% a.out a.out [.] main
|
--- main
__libc_start_main
100.00%99.99% a.out a.out [.] test
|
--- test
main
__libc_start_main
0.00%0.00% a.out [unknown][.]0xec81485354415541
|
---0xec81485354415541
0.00%0.00% a.out ld-2.15.so [.]0x0000000000014092
|
---0x7fd281be9092
0xec81485354415541
0.00%0.00% a.out ld-2.15.so [.]0x000000000000325a
|
---0x7fd281bd825a
0x7fd281be9092
0xec81485354415541
0.00%0.00% a.out [kernel.kallsyms][k]0x0000000000813c8a
|
---0xffffffff82613c8a
test
main
__libc_start_main
0.00%0.00% a.out ld-2.15.so [.]0x0000000000016897
|
---0x7fd281beb897
0x7fd281bd825a
0x7fd281be9092
0xec81485354415541
0.00%0.00% a.out [kernel.kallsyms][k] smp_apic_timer_interrupt
|
--- smp_apic_timer_interrupt
0xffffffff82613c8a
test
main
__libc_start_main
0.00%0.00% a.out [kernel.kallsyms][k]0x0000000000813152
#include<stdlib.h>
int test(){
unsignedint i=0;
while(1)
i++;
}
int main(){
test();
}
使用 perf 了解内存压力
】使用perf了解内存压力【英文标题】:Understandingmemorypressureusingperf【发布时间】:2014-12-2805:40:29【问题描述】:我正在尝试使用perf分析应用程序,我现在只对进出DRAM的流量感兴趣。我无法从结果中了解此应用程序从DRAM获得的... 查看详情
开发工具perf性能分析工具perf的编译和使用说明(代码片段)
源码位置:kernel/tools/perf配置内核以支持perfmakexxx_defconfigmakemenuconfig设置以下配置:CONFIG_HAVE_PERF_EVENTS=yCONFIG_PERF_USE_VMALLOC=y编译perf工具makeCROSS_COMPILE=xxxARCH=xxxdefconfigmak 查看详情
开发工具perf性能分析工具perf的编译和使用说明(代码片段)
源码位置:kernel/tools/perf配置内核以支持perfmakexxx_defconfigmakemenuconfig设置以下配置:CONFIG_HAVE_PERF_EVENTS=yCONFIG_PERF_USE_VMALLOC=y编译perf工具makeCROSS_COMPILE=xxxARCH=xxxdefconfigmak 查看详情
perf-tools使用方法
项目地址https://github.com/brendangregg/perf-tools安装内核3.2以上gitclone--depth1https://github.com/brendangregg/perf-tools单独工具安装wgethttps://raw.githubusercontent.com/brendangregg/perf-tools/master/iosnoop目 查看详情
perf 使用字段分隔符选项获取时间
】perf使用字段分隔符选项获取时间【英文标题】:perfgettimeelaspedwithfieldseparatoroption【发布时间】:2014-12-0220:06:55【问题描述】:我有一个程序可以解析linux命令perf的输出。它需要使用选项-x,(字段分隔符选项。我想使用perf提... 查看详情
我无法使用 protractor-perf 运行测试示例
】我无法使用protractor-perf运行测试示例【英文标题】:Ican\'trunthetestexamplewithprotractor-perf【发布时间】:2015-02-2313:03:14【问题描述】:我正在尝试从自述文件中运行示例:varProtractorPerf=require(\'protractor-perf\');describe(\'angularjshomepageto... 查看详情
如何使用 linux perf 工具进行代码理解
】如何使用linuxperf工具进行代码理解【英文标题】:Howtouselinuxperftoolforcodecomprehension【发布时间】:2015-08-0716:50:17【问题描述】:我对“perf”记录调用图的能力着迷,并试图了解如何使用它来理解新的代码库。我在调试模式下编... 查看详情
使用 perf 监控每个 CPU 的内存访问
】使用perf监控每个CPU的内存访问【英文标题】:UsingperftomonitormemoryaccessofeveryCPU【发布时间】:2017-01-1612:14:26【问题描述】:我正在尝试使用linuxperftool对我的程序中的内存访问进行采样。具体来说,我使用perf来监控NUMA中每个CPU... 查看详情
使用perf+flamegraph生成进程火焰图
FlameGraph代码:https://github.com/cobblau/FlameGraph 使用方法1,perfrecord--call-graphdwarf-p123452,perfscript|FlameGraph/stackcollapse-perf.pl|FlameGraph/flamegraph.pl>process.svg 使用其他工具如何生成火焰图 查看详情
perf:软件事件之间的奇怪关系
...:26:44【问题描述】:好的,所以这真的让我很烦。我正在使用perf来记录cpu-clock事件(软件事件):$>perfrecord-ecpu-clocksrun-n1./stream...perfreport生成的表格是空的。我正在使用perf来记录perf列 查看详情
开发工具perf性能分析工具perf的编译和使用说明(代码片段)
源码位置:kernel/tools/perf配置内核以支持perfmakexxx_defconfigmakemenuconfig设置以下配置:CONFIG_HAVE_PERF_EVENTS=yCONFIG_PERF_USE_VMALLOC=y编译perf工具makeCROSS_COMPILE=xxxARCH=xxxdefconfigmakeCROSS_COMPILE=xxxARCH=xxxmenuconfigmakeCROSS_COMP... 查看详情
我如何使用 perf 来分析我的代码?
】我如何使用perf来分析我的代码?【英文标题】:howcaniuseperftoprofilemycode?【发布时间】:2014-08-0500:56:01【问题描述】:我正在尝试使用“perf”来查看我在Linux上的C++程序中所有CPU的使用情况。我想附加到正在运行的进程并获取... 查看详情
如何使用kernel/perf_event*。[hc]分析框架?(代码片段)
....cperf_event_xscale.c我无法理解这些文件的层次结构以及如何使用它们?我可以假设它们总是存在并在内核模块中使用它们吗?我的内核模块在Cortex-A7或Cortex-A15内核上运行。在/arch/arm/kernel/目录下似乎有很多非常有用的东西,但是没... 查看详情
如何使用 Rocket Lake 通过 perf 访问 RAPL?
】如何使用RocketLake通过perf访问RAPL?【英文标题】:howtoaccessRAPLviaperfwithRocketLake?【发布时间】:2021-04-0715:33:15【问题描述】:我有一个RocketLakeCPU(11900K),但是perf还不支持访问电源事件,我该怎么做?性能事件列表:pastebin.com+tcs... 查看详情
错误:perf.data 文件没有样本
...布时间】:2017-06-2111:18:58【问题描述】:我目前正在学习使用perf。我有硬件事件的输出,但没有cpu-cycles或cpu-clock等软件事件的输出。我使用详细选项调用perf:$>perfrecord-v./pi-serial-psmmapsize528384BReferencePi:3.1 查看详情
使用 perf 获取事件计数取决于其他事件的发生
】使用perf获取事件计数取决于其他事件的发生【英文标题】:Usingperftogeteventscountsdependingontheoccurrenceofotherevents【发布时间】:2018-04-1903:54:00【问题描述】:是否有任何可能的方法可以根据其他事件的发生来获取事件计数器的值... 查看详情
如何使用 perf stat 计算 MIPS
】如何使用perfstat计算MIPS【英文标题】:HowtocalculateMIPSusingperfstat【发布时间】:2018-11-1816:47:46【问题描述】:以下answeraboutBenchmarking-HowtocountnumberofinstructionssenttoCPUtofindconsumedMIPS建议:perfstat./my_program在Linux上将使用CPU性能计数器... 查看详情
使用 perf_events/oprofile 在 Linux 上分析 JIT 的输出?
】使用perf_events/oprofile在Linux上分析JIT的输出?【英文标题】:ProfilingoutputofJITonLinuxwithperf_events/oprofile?【发布时间】:2012-10-0219:35:06【问题描述】:我想使用硬件性能计数器分析由Linux上的JIT生成的代码。据我所知,最常见的分... 查看详情