为什么我不能使用功率/能量核心的perf事件修改器/
我试图通过以下命令使用事件功率/能量核心/使用perf工具读取内核空间中的系统功率:为什么我不能使用功率/能量核心的perf事件修改器/
perf stat -a -e power/energy-cores/:k -I 1000 sleep 10
的:k是想在这个文档https://perf.wiki.kernel.org/index.php/Tutorial描述colects的事件只是在内核空间的修饰,但是当我使用这个:き得到的错误如下:
[email protected]:/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
首先我虽然这个事件不支持:k修饰符,但我做了其他测试,现在我认为这可能是一个bug o我试着用错误的语法。为了测试它,我试过其他事件象下面这样:
的缓存缺失事件可以以两种方式高速缓存未命中或CPU /缓存缺失堪称/所以我用改性
[email protected]:/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
[email protected]:/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
[email protected]:/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/
有人尝试都有一个线索我怎么能使用:k修改器的功率/能量核心/事件?
结果: 它的工作没有:正如答案所指出的,但不幸的是对我来说似乎不支持修饰符。
[email protected]:~$ 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
[email protected]:~$ 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/
通常当你开始测量任何事件与perf
命令的第一步,是运行perf list
并检查事件power/energy cores
是由您的系统支持。我将给出一个在我的系统上运行perf列表的例子。
~/linux-4.11.3/tools/perf$ ./perf list
List of pre-defined events (to be used in -e):
branch-instructions OR branches [Hardware event]
branch-misses [Hardware event]
power/energy-cores/ [Kernel PMU event]
这样的话,你将成为确定事件是否电力/能源核心的测量实际上是由支持你的系统。
一旦得到确认,你应该使用下面的语法来衡量此事件:
你也可以使用:
./perf stat -a -e power/energy-cores/ -I 1000 sleep 30
(不:K或不:U)1
编辑#答:K或:U,如果你能像下面指定事件power/energy-cores
: -
./perf stat -a -e energy-cores:k -I 1000 sleep 30
(但perf
不能,除非你指定的完全合格的识别energy-cores
事件事件名称如下:power/energy-cores
)。
但正如我在第二次编辑中所建议的那样,这些计数器无论如何都不支持用户空间和内核空间分离。
编辑#2:
不幸的是,这些RAPL计数器不分离基于内核空间和用户空间中的值。此外,与这些事件相关的绩效监测单位也不能进行抽样。
这是证明代码:
此外,你可以阅读下面的补丁,以了解: -
嗨@Arnabjyoti卡利塔你是正确的问题是:我的系统支持更强大的能量/能量核心,但无论如何,似乎不是用k或任何其他修改器。 你对这些修饰符如何被支持有任何线索吗?我非常需要它,如果没有其他方式,我需要尝试添加支持。 –
Hi @Leandro,当你运行perf stat命令时,你会收到什么样的消息?你怎么知道即使系统支持这个事件,你没有得到正确/合适的值? –
我在我的问题的末尾添加了结果,事件在perf列表中被设置,并且它返回没有修饰符的值,但是我需要的是由内核和用户空间分隔的值。 –