在搜索什么人能够监测perf_events
在Linux上,我找不到什么Kernel PMU event
是?也就是说,与perf version 3.13.11-ckt39
该perf list
节目的事件,如:
branch-instructions OR cpu/branch-instructions/ [Kernel PMU event]
总体上有:
Tracepoint event
Software event
Hardware event
Hardware cache event
Raw hardware event descriptor
Hardware breakpoint
Kernel PMU event
而且我想了解它们的含义,来源。除了Kernel PMU event
项目外,我对所有人都有某种解释。
从perf Wiki教程和Brendan Gregg的页面中,我知道:
Tracepoints
最清晰-这些是内核源代码上的宏,它们是监视的探针点,它们是随ftrace
项目引入的,现在每个人都使用Software
是内核的低级计数器和一些内部数据结构(因此,它们与跟踪点不同)Hardware event
是一些非常基本的CPU事件,可以在所有体系结构上找到,并且可以通过某种方式轻松地由内核访问Hardware cache event
是-的昵称Raw hardware event descriptor
如下据我了解,
Raw hardware event descriptor
与(微结构)体系结构有关的事件比Hardware event
来自处理器监视单元(PMU)或给定处理器的其他特定功能的事件多,因此它们仅在某些微体系结构上可用(例如,“架构”的意思是“ x86_64”,其余所有实现细节都是“微架构”)。并且可以通过这些奇怪的描述符来进行检测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)
-这些描述符,它们指向的事件等等,可以在处理器手册中找到(perf Wiki中的PMU事件);
但是,当人们知道给定处理器上有一些有用的事件时,他们给它起一个昵称并将其插入linux
Hardware cache event
以方便访问-如果我错了指正(奇怪的全部
Hardware cache event
是关于something-loads
或something-misses
-非常喜欢实际的处理器的高速缓存。)现在
Hardware breakpoint
mem:<addr>[:access] [Hardware breakpoint]
是一项硬件功能,可能是大多数现代体系结构所共有的,并且在调试器中充当断点?(可能还是可以谷歌搜索的)
最后,
Kernel PMU event
我没办法去谷歌搜索;它也没有出现在Brendan的perf页面的Events列表中,所以是新的吗?
也许仅仅是PMU专门针对硬件事件的昵称?(为了便于访问,除了昵称外,它在事件列表中还有一个单独的部分。)实际上,
Hardware cache events
昵称可能是CPU缓存中的硬件事件,而Kernel PMU event
昵称是PMU事件吗?(为什么不这样称呼Hardware PMU event
?。。)这可能只是一种新的命名方案-硬件事件的昵称被分段了?这些事件涉及诸如之类的东西
cpu/mem-stores/
,再加上一些Linux版本事件在/sys/devices/
和中都有描述:# find /sys/ -type d -name events /sys/devices/cpu/events /sys/devices/uncore_cbox_0/events /sys/devices/uncore_cbox_1/events /sys/kernel/debug/tracing/events
-
debug/tracing
是forftrace
和tracepoints,其他目录与perf list
显示的完全匹配Kernel PMU event
。
有人可以给我指出什么是什么Kernel PMU events
或/sys/..events/
系统的很好的解释/文档吗?另外,是否/sys/..events/
有一些新的工作来使硬件事件系统化或类似?(然后,内核PMU就像“内核性能监视单元”。)
聚苯乙烯
为了提供更好的上下文,perf list
使用Kernel PMU event
s和Hardware cache event
s的完整列表(未列出跟踪点,但所有1374个都存在)进行了无特权的运行:
$ perf list
List of pre-defined events (to be used in -e):
cpu-cycles OR cycles [Hardware event]
instructions [Hardware event]
...
cpu-clock [Software event]
task-clock [Software event]
...
L1-dcache-load-misses [Hardware cache event]
L1-dcache-store-misses [Hardware cache event]
L1-dcache-prefetch-misses [Hardware cache event]
L1-icache-load-misses [Hardware cache event]
LLC-loads [Hardware cache event]
LLC-stores [Hardware cache event]
LLC-prefetches [Hardware cache event]
dTLB-load-misses [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]
mem-loads OR cpu/mem-loads/ [Kernel PMU event]
mem-stores OR cpu/mem-stores/ [Kernel PMU event]
ref-cycles OR cpu/ref-cycles/ [Kernel PMU event]
stalled-cycles-frontend OR cpu/stalled-cycles-frontend/ [Kernel PMU event]
uncore_cbox_0/clockticks/ [Kernel PMU event]
uncore_cbox_1/clockticks/ [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: Permission denied ]