参考

平台

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./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
--- a/tools/perf/Makefile
+++ b/tools/perf/Makefile
@@ -, +, @@
+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  -p  -g -- sleep 
 
 
收集完成之后,会在当前目录下生成一个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文件:
 
 
 
完。
 
 
 
 
 

在TQ2440上运行perf,生成Flame Graph的更多相关文章

  1. 使用perf生成Flame Graph(火焰图)

      具体的步骤参见这里: <flame graph:图形化perf call stack数据的小工具>   使用SystemTap脚本制作火焰图,内存较少时,分配存储采样的数组可能失败,需 ...

  2. perf + Flame Graph火焰图分析程序性能

    1.perf命令简要介绍 性能调优时,我们通常需要分析查找到程序百分比高的热点代码片段,这便需要使用 perf record 记录单个函数级别的统计信息,并使用 perf report 来显示统计结果 ...

  3. VS2010生成的文件在别的机器上运行提示“丢失MSVCR100D.dll”<转>

    用vs2010编写的程序经常会发生的一个问题.在自己的机器上运行的好好的,但是在别的机器上就会发生没有找到MSVCR100D.dll.这是 个很头疼的问题.对于一些代码量几百行的小程序,我不可能要求其 ...

  4. 使用Flame Graph进行系统性能分析

    关键词:Flame Graph.perf.perl. FlameGraph是由BrendanGregg开发的一款开源可视化性能分析工具,形象的成为火焰图. 从底向上像火苗一样逐渐变小,也反映了相互之间 ...

  5. linux系统分析工具续-SystemTap和火焰图(Flame Graph)

    本文为网上各位大神文章的综合简单实践篇,参考文章较多,有些总结性东西,自认暂无法详细写出,建议读文中列出的参考文档,相信会受益颇多.下面开始吧(本文出自 “cclo的博客” 博客,请务必保留此出处ht ...

  6. [失败]SystemTap和火焰图(Flame Graph)

    本文参考http://blog.51cto.com/xuclv/1184517 SystemTap简介: SystemTap provides free software (GPL) infrastr ...

  7. u-boot-2015.01在tq2440上的初步移植

    作者: 彭东林 邮箱: pengdonglin137@163.com QQ:   405728433 开发板:     tq2440 工具:       Win7 + VMware + Debian6 ...

  8. 通过Mono 在 Heroku 上运行 .NET 应用

    英文原文:Running .NET on Heroku 中文原文:在 Heroku 上运行 .NET 应用 自从加入了Heroku之后,我就想在这个平台上运行.NET程序.现在我很高兴向大家宣布,我们 ...

  9. Linux上运行NET

    今天尝试了下Ubuntu上运行NET程序,按照 https://github.com/aspnet/Home 的指引,一步一步来: 1.安装DNVM(原名KVM) Linux控制台下输入 curl - ...

随机推荐

  1. mount过程分析之一(基于3.16.3内核)【转】

    转自:https://blog.csdn.net/zr_lang/article/details/39963253 一直想写有些关于文件系统的博文,但是由于近一年来实在太忙,所以没有时间写.前几日赶上 ...

  2. git学习——Git 基础要点【转】

    转自:http://blog.csdn.net/zeroboundary/article/details/10549555 简单地说,Git 究竟是怎样的一个系统呢?请注意,接下来的内容非常重要,若是 ...

  3. linux挂载mount参数优化

    一. 1) 蓝色:表示经过优化的xfs mount时的参数defaults,noatime,nodiratime,nobarrier,discard,allocsize=256m,logbufs=8, ...

  4. jquery-easyui:格式化列

    主框架页面: 在主界面区会加载西区菜单点击的URL内容. <!DOCTYPE html> <html> <head> <meta charset=" ...

  5. Android 7.0 行为变更

    Android 7.0 除了提供诸多新特性和功能外,还对系统和 API 行为做出了各种变更.本文重点介绍您应该了解并在开发应用时加以考虑的一些主要变更. 如果您之前发布过 Android 应用,请注意 ...

  6. K-means聚类算法的三种改进(K-means++,ISODATA,Kernel K-means)介绍与对比

      一.概述 在本篇文章中将对四种聚类算法(K-means,K-means++,ISODATA和Kernel K-means)进行详细介绍,并利用数据集来真实地反映这四种算法之间的区别. 首先需要明确 ...

  7. Codeforces 219C Color Stripe(思维+字符串)

    题目链接:http://codeforces.com/problemset/problem/219/C 题目大意: 给出一个字符串,只包含k种字符,问最少修改多少个字符(不增长新的种类)能够得到一个新 ...

  8. 【PAT】1051 Pop Sequence (25)(25 分)

    Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, ..., N and p ...

  9. awk 调用 shell 命令,并传递参数

    from:awk 调用 shell 命令的两种方法:system 与 print shell 向awk传递命令,这样使用即可: awk -v  ...  但反过来呢?awk调用外部命令,同时也传参呢? ...

  10. 039 DataFrame的理解

    1.构成 由RDD+Schema构成 RDD: DataFrame中的数据 ===> df.rdd Schema: RDD中数据的结构 ===> df.schema df是dataFram ...