参考

平台

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。 下面是编译脚本:
  1. #!/bin/bash
  2.  
  3. export CC=arm-linux-gcc
  4.  
  5. .././../Third_Part/Zlib/zlib-1.2./configure \
  6. --prefix=`pwd`
  7. make
  8. make install

2、交叉编译elfutils

elfutils可以到http://www.linuxfromscratch.org/blfs/view/svn/general/elfutils.html下载,我下载的版本是elfutils-0.170 下面是编译脚本:
  1. export LDFLAGS=-L/home/pengdonglin/disk_ext/TQ2440/zlib/lib
  2. export CPPFLAGS=-I/home/pengdonglin/disk_ext/TQ2440/zlib/include
  3. export LIBS=-lz
  4. ../configure --host=arm-linux --prefix=`pwd`
  5. make
  6. 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:
  1. diff --git a/tools/perf/Makefile b/tools/perf/Makefile
  2. index 32a64e6..dd85078
  3. --- a/tools/perf/Makefile
  4. +++ b/tools/perf/Makefile
  5. @@ -, +, @@
  6. +export EXTLIBS =--static -lelf -lebl -L/home/pengdonglin/disk_ext/TQ2440/zlib/lib -L/home/pengdonglin/disk_ext/TQ2440/elfutils-0.170/build/lib
  7. +export ARCH=arm
  8. +export CROSS_COMPILE=arm-linux-
  9. +
  10. #
  11. # This is a simple wrapper Makefile that calls the main Makefile.perf
  12. # 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命令收集数据:
  1. perf record -F -p -g -- sleep
 
 
收集完成之后,会在当前目录下生成一个perf.data的文件,再在板子上执行下面的命令:
  1. perf script > out.perf
 
这个命令根据perf.data生成out.perf文件,紧接着在PC机上使用stackcollapse-perf.pl将out.perf转成out.folded:
  1. ~/disk_ext/FlameGraph/stackcollapse-perf.pl out.perf > out.folded
 
最后利用flamegraph.pl将out.folded转成kernel.svg:
  1. ~/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. Binary Representation

    Given a (decimal - e.g. 3.72) number that is passed in as a string, return the binary representation ...

  2. 两种常量类型-readonly和const

    C#中有两种常量类型,分别为readonly(运行时常量)与const(编译时常量),本文将就这两种类型的不同特性进行比较并说明各自的适用场景. 工作原理 readonly 为运行时常量(动态常量), ...

  3. VMware下centos桥接模式静态ip配置

    声明:本文转载自http://blog.csdn.net/ltr15036900300/article/details/48828207,非原创. 一.配置虚拟机centos网络 备份网络文件 [ro ...

  4. IOS使用批处理打包

    一.注意 1.允许xcode访问钥匙串 首先使用xcode提供的打包工具打包,看到如下提示后,输入用户密码后点击“始终允许”后再次打包即可. 选择“Generic IOS Device”然后单击Pro ...

  5. Fiddler实现移动端手机抓包

    Fiddler是一个http调试代理,它能 够记录所有的你电脑和互联网之间的http通讯,Fiddler 可以也可以让你检查所有的http通讯,设置断点,以及Fiddle 所有的“进出”的数据(指co ...

  6. nio--自己总结

    阻塞/非阻塞  +  同步/异步 其实,这两者存在本质的区别,面向的对象是不同的. 阻塞/非阻塞:进程/线程需要操作的数据如果尚未就绪,是否妨碍了当前进程/线程的后续操作. 同步/异步:数据如果尚未就 ...

  7. MVC:分页改进URL

    http://localhost/?page=2     可以根据"可组合URL"创建一种更具吸引力的URL方案: http://localhost/page2     publi ...

  8. jmeter内存溢出处理方式记录

    方法一: 使用jmeter进行压力测试时 遇到一段时间后报内存溢出outfmenmory错误,导致jmeter卡死了,先尝试在jmeter.bat中增加了JVM_ARGS="- Xmx204 ...

  9. 【python学习-3】python数据类型

    1.数字 在python 2.x中,数字类型有4种,int.long.float 和 complex(复数):而python 3 中,只有 int.float 和 complex 3种,python ...

  10. [转]C++ STL list的初始化、添加、遍历、插入、删除、查找、排序、释放

    list是C++标准模版库(STL,Standard Template Library)中的部分内容.实际上,list容器就是一个双向链表,可以高效地进行插入删除元素. 使用list容器之前必须加上S ...