2013-11-03 54 views
3

我最近安裝了Perf工具在我的平臺上,並且想用它來分析我的平臺。我開始剖析我用瞭解Perf工具輸出

獨立application.Below命令

PERF ./helloworld開始

爲「./helloworld」性能計數器統計:

4.555957 task-clock    # 0.000 CPUs utilized 
     1 context-switches   # 0.219 K/sec 
     0 cpu-migrations   # 0.000 K/sec 
     124 page-faults    # 0.027 M/sec 
     <not supported> cycles 
     <not supported> stalled-cycles-frontend 
     <not supported> stalled-cycles-backend 
     <not supported> instructions 
     <not supported> branches 
     <not supported> branch-misses 

     60.005519331 seconds time elapsed 

現在我不知道我應該怎麼interpretate這個output.is預期輸出?

另外,我應該怎麼做<不支持>在這裏提交,有什麼我需要啓用以支持這個領域之前運行命令?

回答

2

這些行表明您正在運行的內核缺少對perf所需的特定功能的支持,無法分析您的程序的這些方面。由於perf的大部分位於內核空間中,因此您需要確保您的內核支持您所需的功能。

編輯:

當涉及到讓你的內核這些功能,它依賴。除非這些組件已被編譯爲內核模塊,否則您需要自己編譯它們。如果他們被編譯爲模塊,你可以只需modprobe他們。請嘗試:

find /lib/modules/`uname -r` -regex .*perf.* 

如果出現列表,請嘗試使用每個模塊名稱。否則,您需要自己編譯模塊或自己編譯整個內核。

+0

謝謝,我想你是對的,但任何想法如何啓用這些啓用從Linux的支持,我是否在構建時啓用它或內核還是什麼? –

+0

@AmitSinghTomar增加了一些關於模塊的信息。 – cyphar

+0

Cypher我找不到與perf有關的模塊(find。-name * .ko | grep perf)。請指出我如何編譯這些模塊。任何提示都會足夠好。 –

-1

這取決於你想要的配置文件。 Perf沒有提供最終答案,告訴你程序有多快。如果你想測量性能,你必須知道在哪裏看。對於這些行說,嘗試手動給他們-e標誌。如perf perf -e cycles ./helloworld

+0

感謝@ayan迴應,我試着做perf stat -e週期,但得到了<不支持>的週期。另外,我如何確保我得到正確輸出Perf –

2

在dmesg輸出中搜索「Performance Events」。它可能被禁用。

例如,我的機器上,我有這個>>

Performance Events: SandyBridge events, Intel PMU driver. 
PEBS disabled due to CPU errata. 
CPUID marked event: 'cpu cycles' unavailable 
CPUID marked event: 'instructions' unavailable 
CPUID marked event: 'bus cycles' unavailable 
CPUID marked event: 'cache references' unavailable 
CPUID marked event: 'cache misses' unavailable 
CPUID marked event: 'branch instructions' unavailable 
CPUID marked event: 'branch misses' unavailable 
+0

什麼是您的CPU的確切名稱? – osgx

0

「不支持」通常是當內核不支持PERF即使內核啓用PERF模塊。或者硬件沒有像某些虛擬化硬件那樣的性能計數器? 如果沒有內核支持perf,你可能會看到「不計數」

+0

我最近交叉編譯perf爲ARM,當我執行一些kerenel /用戶線程perf它能夠給'統計'輸出,但在線程/進程很少的情況下,它失敗,並說,當你說沒有實現,什麼我應該在代碼中執行/使他們能夠統計特定進程/線程的統計信息 – kakeh