在TQ2440上執行perf,生成Flame Graph

weixin_34162629發表於2017-11-05

參考

平臺

TQ2440
Linux-4.10.17

概述

Perf是Linux kernel自帶的系統效能優化工具。Perf在Linux原始碼中的位置是linux-4.10.17/tools/perf,編譯perf之前需要先交叉編譯zlib和elfutils。

正文

1、交叉編譯zlib

zlib可以到http://www.zlib.net/下載,我下載的版本是zlib-1.2.11下面是編譯指令碼:
#!/bin/bash

export CC=arm-linux-gcc

.././../Third_Part/Zlib/zlib-1.2.11/configure \
    --prefix=`pwd`
make
make install

 

2、交叉編譯elfutils

elfutils可以到http://www.linuxfromscratch.org/blfs/view/svn/general/elfutils.html下載,我下載的版本是elfutils-0.170 下面是編譯指令碼:
export LDFLAGS=-L/home/pengdonglin/disk_ext/TQ2440/zlib/lib
export CPPFLAGS=-I/home/pengdonglin/disk_ext/TQ2440/zlib/include
export LIBS=-lz
../configure --host=arm-linux --prefix=`pwd`
make
make install
 
 
編譯完成後,將生成的libelf相關動態庫拷貝到交叉編譯工具鏈的libc下,對於TQ2440使用的是armv4版本,所以拷貝到如下目錄:arm-2014.05/arm-none-linux-gnueabi/libc/armv4t/lib/



3、編譯perf

進入linux-4.10.17/tools/perf,然後修改目錄下的Makfile:
diff --git a/tools/perf/Makefile b/tools/perf/Makefile
index 32a64e6..dd85078 100644
--- a/tools/perf/Makefile
+++ b/tools/perf/Makefile
@@ -1,3 +1,7 @@
+export EXTLIBS =--static -lelf -lebl -L/home/pengdonglin/disk_ext/TQ2440/zlib/lib -L/home/pengdonglin/disk_ext/TQ2440/elfutils-0.170/build/lib
+export ARCH=arm
+export CROSS_COMPILE=arm-linux-
+
 #
 # This is a simple wrapper Makefile that calls the main Makefile.perf
 # with a -j option to do parallel builds

然後在linux-4.10.17/tools/perf執行make,最後就會在該目錄下編譯生成一個名為perf的檔案。

 

4、配置核心,支援perf

配置核心,使能下面兩個配置。
CONFIG_PERF_EVENTS=y
CONFIG_HW_PERF_EVENTS=y
 
然後重新編譯核心,用新的核心啟動板子。
 

5、測試

按照https://github.com/brendangregg/FlameGraph上面的說明嘗試生成一個火焰圖
 
我用telnet登入板子,然後使用tinyplay播放一首wav音樂,對應的程式號是1021
 
 
然後在板子上使用下面的perf命令收集資料:
perf record -F 180 -p 1021 -g -- sleep 120
 
 
收集完成之後,會在當前目錄下生成一個perf.data的檔案,再在板子上執行下面的命令:
perf script > out.perf
 
這個命令根據perf.data生成out.perf檔案,緊接著在PC機上使用stackcollapse-perf.pl將out.perf轉成out.folded:
~/disk_ext/FlameGraph/stackcollapse-perf.pl out.perf > out.folded
 
最後利用flamegraph.pl將out.folded轉成kernel.svg:
~/disk_ext/FlameGraph/flamegraph.pl out.folded > kernel.svg
 
 
 
用瀏覽器開啟生成的kernel.svg檔案:
 
 
 
完。
 
 
 
 
 

相關文章