• perf使用


    1./sdcard/perf record -F 99 -p 625 -g -- sleep 10

    /sdcard/perf script > /sdcard/out.perf

    git clone https://github.com/brendangregg/FlameGraph.git

    ./stackcollapse-perf.pl out.perf > out.folded

    ./flamegraph.pl out.folded > out.svg

    2. perf top

    3.perf stat -p 625

    转自:硬核干货!perf工具简介及火焰图制作与解读 - 知乎

    2、perf 使用

    perf提供的事件主要可以分为三种:

    • Hardware Event由PMU部件产生,在特定的条件下探测性能事件是否发生以及发生的次数。比如cache命中。
    • Software Event是内核产生的事件,分布在各个功能模块中,统计和操作系统相关性能事件。比如进程切换,tick数等。
    • Tracepoint Event是内核中静态tracepoint所触发的事件,这些tracepoint用来判断程序运行期间内核的行为细节,比如slab分配器的分配次数等。

    perf --help之后可以看到perf的二级命令(常用的以黑体标出)

    2.1 perf list

    perf list查看当前系统支持的性能事件

    sw实际上是内核的计数器,与硬件无关。

    hw和cache是CPU架构相关的,依赖于具体硬件。

    tracepoint是基于内核的ftrace,主线2.6.3x以上的内核版本才支持。

    软件事件:

    硬件事件:

    事件太多,不一一列举,有兴趣增加知识宽度的,可以网络搜索或者 man 解决。

    2.2 perf top

    perf top类似top命令,主要用于实时分析各个函数在某个性能事件上的热度,能够快速的定位热点函数,包括应用程序函数、

    模块函数与内核函数,甚至能够定位到热点指令。默认的性能事件为cpu cycles。

    列名含义
    Overhead符号引发的性能事件比例
    Shared Object符号所在的DSO(Dynamic Shared Object),可以是应用程序、内核、动态链接库、模块。
    Symbol符号名,前面的 [ ] 表示DSO类型,[.]表示此符号属于用户态的ELF文件,包括可执行文件与动态链接库,[k]表述此符号属于内核或模块

    当然还可以使用

    -e:指定事件

    -p:指定进程

    更多参数,请 perf --help

    2.3 perf stat

    用于输出指定程序的性能统计数据

    各事件含义前文已有解释,这里不再赘述。

    常用参数:

    -p:指定进程

    -a:从所有CPU上收集性能数据

    -C:从指定CPU上收集数据

    更多参数请参考 perf --help 或者 man

    2.4 perf record

    perf record收集采样信息,并记录在文件中,可以离线分析。使用下面的 perf report解析收集的采样数据文件。

    常用方式 perf record

    -e 指定事件

    -p 指定进程

    -g 生成调用关系(类似gcc中-g)

    -o 输出文件名

    采样一段时间,可以使用ctrl+c停止命令,这时会生成 perf.data 文件(默认文件名)

    更多参数参考 perf record --help

    2.5 perf report

    perf report 主要用来分析上面perf record生成的perf.data文件。

    常用参数:

    -i:指定输入文件

    更多参数参照 perf report --help

    3、火焰图制作与解读

    3.1 火焰图解读

    火焰图是基于 perf 结果产生的 SVG 图片,用来展示 CPU 的调用栈。(使用浏览器就能查看)

    示例:

    y 轴表示调用栈,每一层都是一个函数。调用栈越深,火焰就越高,顶部就是正在执行的函数,下方都是它的父函数。

    x 轴表示抽样数,如果一个函数在 x 轴占据的宽度越宽,就表示它被抽到的次数多,即执行的时间长。注意,x 轴不代表时间,而是所有的调用栈合并后,按字母顺序排列的。

    火焰图就是看顶层的哪个函数占据的宽度最大。只要有"平顶"(plateaus),就表示该函数可能存在性能问题。

    颜色没有特殊含义,因为火焰图表示的是 CPU 的繁忙程度,所以一般选择暖色调。

    火焰图是SVG图片,可以互动

    • 鼠标悬停,火焰图每一层都会标注函数名,鼠标悬浮时会显示完整的函数名、抽样抽中的次数、占据总抽样次数的百分比。
    • 点击放大,点击某一层,火焰图会水平放大,该层占据所有宽度。再点击左上角 reset zoom,图片恢复原样
    • 搜索,按下 Ctrl + F 会显示一个搜索框,用户可以输入关键词或正则表达式,所有符合条件的函数名会高亮显示。

    3.2 火焰图的制作

    制作火焰可以采用一款开源工具 FlameGraph

    上述步骤是github上截图,工具的README.md页面。

    原文参考:https://perf.wiki.kernel.org/index.php/Tutorial#Options_controlling_environment_selection

  • 相关阅读:
    深入理解位运算
    前置语音群呼与语音机器人群呼哪个更好
    Elasticsearch:在 Java 客户端应用中管理索引 - Elastic Stack 8.x
    vue实现404页面配置、自带的回车事件@keyup.enter
    ES6模块化(ES module)
    ASP.Net MVC 登录页面实现RSA非对称加密
    MyBatis友人帐之缓存
    【打工日常】解决docker对镜像pull的很慢的问题
    为运行 Parallels Ubuntu 20.04 虚拟机的 用户安装 PX4-Autopilot
    微服务16:微服务治理之熔断、限流
  • 原文地址:https://blog.csdn.net/wmzjzwlzs/article/details/128151100