
該項目是KDAB研發的努力,以創建用於性能數據的獨立GUI。作為第一個目標,我們希望在Linux Perf上提供像Kcachegrind這樣的UI。展望未來,我們打算在此雨傘下支持其他各種績效數據格式。
以下是一些屏幕截圖,顯示了動作中熱點的最重要功能:
熱點的主要特徵是perf.data文件的圖形可視化。


注意:內線函數的邊框比非內部函數更暗。





時間線允許按時間,過程或線程過濾結果。數據視圖將相應更新。



您還可以從熱點啟動perf ,以介紹新啟動的應用程序或附加到已經運行的過程(ES)。不過,請考慮以下注意事項。


注意:尚未在所有Linux發行版中打包熱點。在這種情況下,或者如果要使用最新版本,請使用適用於任何最近的Linux發行版的適應性。
熱點可在AUR(https://aur.archlinux.org/packages/hotspot)中使用。
Hotspot可在Debian(https://packages.debian.org/hotspot)和ubuntu(https://packages.ubuntu.com/hotspot)中找到。
可以從我們的覆蓋層(https://github.com/kdab/kdab-overlay)獲得熱點ebuilds。
Hotspot可在Fedora(https://packages.fedoraproject.org/pkgs/hotspot/hotspot/)中找到。
您可以轉到最新版本或連續構建。在這兩種情況下,您都可以在可以下載的“資產”下找到適合。取消貼上附件文件(如果是最新版本的情況),然後使其可執行,然後運行它。
請使用最新版本來獲取最新版本。如果不起作用,請報告錯誤並測試最新的穩定版本。
注意:您的系統庫或首選項未更改。如果您想再次刪除熱點,只需刪除下載的文件即可。在此處了解有關附屬的更多信息。
要了解如何調試適應性,請參閱黑客。
來自Source的Hotspot為您提供最新,最大的功能,但是您必須確保其所有依賴關係可用。大多數用戶可能應該從Distro軟件包管理器或作為附屬物中安裝熱點。
對於每個想為熱點做出貢獻或使用最新版本而沒有附屬詳細說明的每個人的人,就可以在黑客上找到。
首先,用perf記錄一些數據。要獲取backtraces,您需要啟用矮人呼叫模式:
perf record --call-graph dwarf < your application >
...
[ perf record: Woken up 58 times to write data ]
[ perf record: Captured and wrote 14.874 MB perf.data (1865 samples) ]現在,如果您在同一台計算機上有熱點,則需要做的就是啟動它。它將在當前目錄中自動打開perf.data文件(類似於perf report )。
另外,您可以在控制台上指定數據文件的路徑:
hotspot /path/to/perf.data根據您的需求,您可能需要將其他命令行選項傳遞給熱點。這允許在“設置”下的GUI中找到的一次性集合配置選項,還允許將Linux Perf Data Files轉換為較小且便攜式的Perfdata格式(有關此的詳細信息,請參見導入 /導出)。所有命令行選項均以--help :
Usage: hotspot [options] [files...]
Linux perf GUI for performance analysis.
Options:
-h, --help Displays help on commandline options.
--help-all Displays help including Qt specific options.
-v, --version Displays version information.
--sysroot <path> Path to sysroot which is used to find libraries.
--kallsyms <path> Path to kallsyms file which is used to resolve
kernel symbols.
--debugPaths <paths> Colon separated list of paths that contain debug
information. These paths are relative to the
executable and not to the current working directory.
--extraLibPaths <paths> Colon separated list of extra paths to find
libraries.
--appPath <path> Path to folder containing the application executable
and libraries.
--sourcePaths <paths> Colon separated list of search paths for the source
code.
--arch <path> Architecture to use for unwinding.
--exportTo <path> Path to .perfparser output file to which the input
data should be exported. A single input file has to
be given too.
--perf-binary <path> Path to the perf binary.
--objdump-binary <path> Path to the objdump binary.
Arguments:
files Optional input files to open on startup, i.e.
perf.data files.
熱點支持一種非常有力的等待時間分析或CPU分析的方法。該分析基於Linux調度程序中的內核跟踪點。通過錄製該數據,我們可以找到Delta在CPU上沒有線程的時間Delta,而是在CPU上運行的時間。可能有多種原因,可以使用此技術找到所有原因:
read()或write()mmap() 'ed文件數據時nanosleep()或yield()futex()等鎖定爭論通過利用調度程序中的內核跟踪點,開銷非常易於管理,只有當該過程實際被切換時,我們才付出代價。最值得注意的是,當可以直接在用戶空間中處理Mutex鎖定操作時,我們不會支付價格。
要使用熱點進行外CPU分析,您需要使用非常具體的命令記錄數據:
perf record
-e cycles # on-CPU profiling
-e sched:sched_switch --switch-events # off-CPU profiling
--sample-cpu # track on which core code is executed
-m 8M # reduce chance of event loss
--aio -z # reduce disk-I/O overhead and data size
--call-graph dwarf # we definitely want backtraces
< your application >另外,您可以在Hotspot的集成記錄頁面中使用CPU複選框。
在分析過程中,您可以在CPU數據的“循環”成本視圖之間切換到“ CPU時間段”成本視圖以進行等待時間分析。通常,您需要在兩者之間進行更改,例如在代碼中找到可能需要進一步並行化的位置(另請參見Amdahl的法律)。
還將向您顯示“ Sched:Sched_switch”成本。但是我認為這僅有用,因為它僅表示調度程序開關的數量。對我來說,之間的時間通常更有趣 - 這就是在“非CPU時間”指標中向您展示的。
如果您要在嵌入式系統上錄製,則需要用熱點分析開發機上的數據。為此,請確保您的Sysroot包含放鬆所需的調試信息(請參見下文)。然後將數據記錄在您的嵌入式系統上:
embedded$ perf record --call-graph dwarf < your application >
...
[ perf record: Woken up 58 times to write data ]
[ perf record: Captured and wrote 14.874 MB perf.data (1865 samples) ]
embedded$ cp /proc/kallsyms /tmp/kallsyms # make pseudo-file a real file如果您的嵌入式機器使用的平台與主機不同,則可以。在主機上,執行以下步驟,然後分析數據:
host$ scp embedded:perf.data embedded:/tmp/kallsyms .
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms
perf.data如果您是從Sysroot之外的路徑手動部署應用程序,請這樣做:
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
perf.data如果您的應用程序還使用Sysroot和AppPath之外的庫,請執行此操作:
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
--extraLibPaths /path/to/lib1:/path/to/lib2:...
perf.data而且,最糟糕的情況,如果您還在非標準位置使用拆分調試文件,請執行此操作:
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
--extraLibPaths /path/to/lib1:/path/to/lib2:...
--debugPaths /path/to/debug1:/path/to/debug2:...
perf.dataperf.data文件格式不是獨立的。要分析它,您需要訪問配置文件過程的可執行文件和庫以及調試符號。這使得在機器上共享此類文件變得笨拙,例如,從同事那裡獲得幫助以調查性能問題或出於錯誤報告目的。
熱點使您可以導出分析的數據,然後將其完全獨立。可以通過“文件>另存為”菜單操作訪問此功能。然後將數據保存在自包含的*.perfparser文件中。要再次將數據導入熱點,只需直接打開該文件代替原始的perf.data文件即可。
作為替代方案,您還可以使用--exportTo選項從命令行(無GUI,也可以與自動化構建一起使用)進行導出。
注意:文件格式尚不穩定。含義由一個版本的熱點導出的數據只能通過同一版本回到中。隨著時間的允許,將來將解決此問題。
熱點當前僅顯示時間軸中的跟踪點的名稱。


熱點包括一個拆卸器,可以向您顯示每個說明的成本。拆卸器使用顏色指示哪些裝配線對應於哪個源代碼行。為了簡化導航,您只需單擊一條線,另一個視圖將跳到它。您可以雙擊以關注函數呼叫。在Sourcecode視圖中,您可以按CTRL+F或按搜索圖標打開搜索窗口。
如果您在不同目錄中具有源,則可以使用--sourcePaths或設置來選擇告訴拆卸器在此處搜索源代碼。
如果上述內容中有任何破壞,並且輸出不如perf report ,請在GitHub上報告一個問題。也就是說,人們可能會絆倒一些已知問題:
放鬆堆棧以產生回溯是一門黑暗藝術,在許多方面可能會出錯。熱點依靠perfparser (見下文),這反過來依賴於libdw從Elfutils放鬆堆棧。在大多數情況下,這效果很好,但仍然會出錯。最值得注意的是,當以下情況下,放鬆將失敗。
perf.data文件引用的精靈文件(即可執行文件或庫)--debugPaths <paths> :在非標準位置分開調試文件時使用此功能--extraLibPaths <paths> :自錄製以來,當您將庫移動到其他位置時,請使用此此事。--appPath <paths> :這是上述兩個字段的組合。該路徑是遞歸穿越的,尋找調試文件和庫。--sysroot <path> :嘗試檢查在嵌入式平台上記錄的數據文件時使用此此事-O2 -g之類的內容調用。您將不得不重複perf record步驟默認情況下, perf record僅將堆棧的一部分複製到數據文件。這可能會導致非常深的呼叫堆棧問題,這將在某個時候切斷。此問題將破壞熱點中自上而下的呼叫樹,如自上而下的視圖或火焰圖中的可視化。要解決此問題,您可以嘗試增加堆棧垃圾場的大小,即:
perf record --call-graph dwarf,32768
請注意,這可能會大大增加perf.data文件的大小 - 謹慎使用它。還要看看man perf record 。
對於某些情況,遞歸功能調用根本無法解開。另請參見#93
熱點支持通過debuginfod下載調試符號。可以通過在設置中添加下載URL或使用在環境中定義的DEBUGINFOD_URLS啟動熱點來啟用這一點。
與perf report相比,Hotspot錯過了許多功能。其中一些計劃在將來解決。其他人可能永遠不會實施。但是請注意,當前Hotspot中無法使用以下功能:
--itrace , --mem-mode , --branch-stack and --branch-history ,都不支持使用sudo或作為root用戶啟動熱點不是一個好主意。請參閱例如編輯文件作為有關此問題的文章的根源。問題#83在此聯繫人中也很重要。
但是沒有超級用戶權限,您可能會在使用Hotspot的記錄功能時看到錯誤消息,例如以下內容:
You may not have permission to collect stats.
Consider tweaking /proc/sys/kernel/perf_event_paranoid:
-1 - Not paranoid at all
0 - Disallow raw tracepoint access for unpriv
1 - Disallow cpu events for unpriv
2 - Disallow kernel profiling for unpriv
為了加入此限制,熱點可以以提高特權運行完美自身。
當前的數據導出僅限於一種格式,該格式只能由同一版本的熱點讀回。這使得不可能與其他可視化工具進行互操作。這是已知的,將來會得到改善。最值得注意的是,計劃但尚未實施向諸如Perfetto或Mozilla Profiler等網絡觀眾的出口。歡迎補丁!
該項目利用QT公司為其QT創建者IDE創建的出色的perfparser實用程序。如果您已經在使用QT創建者,請考慮利用其集成的CPU使用分析儀。
Hotspot在GPL V2+下獲得許可。有關更多信息,請參見License.gpl.txt,或聯繫[email protected],如果您的許可條件尚不清楚。