• 在TQ2440上运行perf,生成Flame Graph


    参考

    平台

    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文件:
     
     
     
    完。
     
  • 相关阅读:
    css水平垂直居中问题
    关系型数据库四大特性
    C++读取csv文件&&收获到的知识
    恒生面试记录
    SQL数据库操作命令
    安防产品知识记录
    学会求助(带着自己的理解去和别人探讨解决方案),处理问题责任清晰,如果不清楚可以问主管.
    一个简单又不简单的socket例子
    C++面试题总结
    大华电话面试
  • 原文地址:https://www.cnblogs.com/pengdonglin137/p/7787191.html
Copyright © 2020-2023  润新知