Kernel 为什么我能';t对电源/能量核心使用性能事件修饰符/
我正在尝试使用事件电源/能量核心/使用perf工具读取内核空间中的系统电源,命令如下:Kernel 为什么我能';t对电源/能量核心使用性能事件修饰符/,kernel,perf,Kernel,Perf,我正在尝试使用事件电源/能量核心/使用perf工具读取内核空间中的系统电源,命令如下: perf stat -a -e power/energy-cores/:k -I 1000 sleep 10 :k是一个修饰符,它只收集内核空间中的事件,如本文档中所述,但当我使用此:k时,我得到以下错误: user@dkphome:/sys/bus/event_source/devices/cpu$ sudo perf stat -a -e power/energy-cores/:k -I 1000 sl
perf stat -a -e power/energy-cores/:k -I 1000 sleep 10
:k是一个修饰符,它只收集内核空间中的事件,如本文档中所述,但当我使用此:k时,我得到以下错误:
user@dkphome:/sys/bus/event_source/devices/cpu$ sudo perf stat -a -e
power/energy-cores/:k -I 1000 sleep 30
event syntax error: '..nergy-cores/:k'
\___ parser error
Run 'perf list' for a list of valid events
Usage: perf stat [<options>] [<command>]
-e, --event <event> event selector. use 'perf list' to list available events
user@dkphome:/sys/bus/event_source/devices/cpu$sudo perf stat-a-e
电源/能量核心/:k-I 1000睡眠30
事件语法错误:“…Energy cores/:k”
\___分析器错误
运行“perf list”以获取有效事件的列表
用法:perf stat[][]
-e、 --事件选择器。使用“性能列表”列出可用事件
首先我认为这个事件不支持:k修饰符,但我做了其他测试,现在我认为这可能是一个bug,或者我尝试使用了错误的语法。为了测试它,我尝试了以下其他事件:
cache misses事件可以通过两种方式调用:cache misses或cpu/cache misses/所以我用修饰符尝试了这两种方式
user@dkphome:/sys/bus/event_source/devices/cpu$ sudo perf stat -a -e cache-misses:k -I 1000 sleep 5
# time counts unit events
1.000429017 287.589 cache-misses:k
2.000828552 195.999 cache-misses:k
3.001086195 216.885 cache-misses:k
4.001438671 240.842 cache-misses:k
5.000702347 314.469 cache-misses:k
user@dkphome:/sys/bus/event_source/devices/cpu$ sudo perf stat -a -e cpu/cache-misses/:k -I 1000 sleep 5
event syntax error: '..ache-misses/:k'
\___ parser error
Run 'perf list' for a list of valid events
Usage: perf stat [<options>] [<command>]
-e, --event <event> event selector. use 'perf list' to list available events
user@dkphome:/sys/bus/event_source/devices/cpu$ sudo perf stat -a -e cpu/cache-misses/ -I 1000 sleep 5
# time counts unit events
1.000379149 1.949.866 cpu/cache-misses/
2.000628057 1.023.040 cpu/cache-misses/
3.000906500 1.284.476 cpu/cache-misses/
4.001197960 853.127 cpu/cache-misses/
5.000762257 722.242 cpu/cache-misses/
user@dkphome:/sys/bus/event_source/devices/cpu$sudo perf stat-a-e缓存未命中:k-I 1000 sleep 5
#时间计数单位事件
1.000429017 287.589缓存未命中:k
2.000828552 195.999缓存未命中:k
3.001086195 216.885缓存未命中:k
4.001438671 240.842缓存未命中:k
5.000702347 314.469缓存未命中:k
user@dkphome:/sys/bus/event_source/devices/cpu$sudo perf stat-a-e cpu/cache misses/:k-I 1000 sleep 5
事件语法错误:“…ache未命中/:k”
\___分析器错误
运行“perf list”以获取有效事件的列表
用法:perf stat[][]
-e、 --事件选择器。使用“性能列表”列出可用事件
user@dkphome:/sys/bus/event_source/devices/cpu$sudo perf stat-a-e cpu/cache misses/-I 1000 sleep 5
#时间计数单位事件
1.000379149 1.949.866 cpu/缓存未命中/
2.000628057 1.023.040 cpu/缓存未命中/
3.000906500 1.284.476 cpu/缓存未命中/
4.001197960 853.127 cpu/缓存未命中/
5.000762257722.242 cpu/缓存未命中/
有人知道我如何在能量/能量核心/事件中使用:k修饰符吗
结果:
正如正确答案所指出的,它在没有:的情况下工作,但不幸的是,对我来说,修饰符似乎不支持它
user@dkphome:~$ sudo perf stat -a -e power/energy-cores/k -I 1000 sleep 5
# time counts unit events
1.000099515 <not supported> Joules power/energy-cores/k
2.000246523 <not supported> Joules power/energy-cores/k
3.000440743 <not supported> Joules power/energy-cores/k
4.000673143 <not supported> Joules power/energy-cores/k
5.000722624 <not supported> Joules power/energy-cores/k
user@dkphome:~$ sudo perf stat -a -e power/energy-cores/ -I 1000 sleep 5
# time counts unit events
1.000128209 0,19 Joules power/energy-cores/
2.000257170 0,25 Joules power/energy-cores/
3.000406715 0,26 Joules power/energy-cores/
4.000571140 0,20 Joules power/energy-cores/
5.000711815 1,01 Joules power/energy-cores/
5.000882867 0,00 Joules power/energy-cores/
user@dkphome:~$sudo perf stat-a-e电源/能源核心/k-I 1000睡眠5
#时间计数单位事件
1.000099515焦耳功率/能量芯/k
2.000246523焦耳功率/能量芯/k
3.000440743焦耳功率/能量芯/k
4.000673143焦耳功率/能量芯/k
5.000722624焦耳功率/能量芯/k
user@dkphome:~$sudo perf stat-a-e电源/能源核心/-I 1000睡眠5
#时间计数单位事件
1.000128209 0,19焦耳功率/能量芯/
2.000257170 0,25焦耳功率/能量芯/
3.000406715 0,26焦耳功率/能量芯/
4.000571140,20焦耳功率/能量芯/
5.000711815 1,01焦耳功率/能量芯/
5.000882867 0,00焦耳功率/能量芯/
通常,当您开始使用perf
命令测量任何事件时,第一步是运行perf list
并检查您的系统是否支持该事件power/energy cores
。我将给出一个在我的系统上运行perf list的示例
~/linux-4.11.3/tools/perf$。/perf list
预定义事件列表(在-e中使用):
分支指令或分支[硬件事件]
分支未命中[硬件事件]
power/energy内核/[内核PMU事件]
这样,您就可以确定您的系统是否支持对事件功率/能量核心的测量
确认后,应使用以下语法测量此事件:
/perf stat-a-e电源/能源核心/-I 1000睡眠30
(非:k或非:u)
编辑#1:
如果您可以像下面那样指定事件电源/能量核心
,则可以使用:k或:u:-
/perf stat-a-e energy cores:k-I 1000 sleep 30
(但是perf
无法识别energy cores
事件,除非您指定这样的完全限定事件名称:power/energy cores
)
但正如我在第二次编辑中所建议的,这些计数器无论如何都不支持用户空间和内核空间分离
编辑#2:
不幸的是,这些RAPL计数器没有根据内核空间或用户空间分隔值。此外,与这些事件相关的性能监视单元也不能执行采样
这就是证明