2017-10-13 62 views
1

我試圖通過以下命令使用事件功率/能量核心/使用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/           

回答

3

通常當你開始測量任何事件與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計數器不分離基於內核空間和用戶空間中的值。此外,與這些事件相關的績效監測單位也不能進行抽樣。

這是證明代碼:

arch/x86/events/intel/rapl.c

此外,你可以閱讀下面的補丁,以瞭解: -

RAPL patch

+0

嗨@Arnabjyoti卡利塔你是正確的問題是:我的系統支持更強大的能量/能量核心,但無論如何,似乎不是用k或任何其他修改器。 你對這些修飾符如何被支持有任何線索嗎?我非常需要它,如果沒有其他方式,我需要嘗試添加支持。 –

+0

Hi @Leandro,當你運行perf stat命令時,你會收到什麼樣的消息?你怎麼知道即使系統支持這個事件,你沒有得到正確/合適的值? –

+0

我在我的問題的末尾添加了結果,事件在perf列表中被設置,並且它返回沒有修飾符的值,但是我需要的是由內核和用戶空間分隔的值。 –

相關問題