• perf命令


    @(Linux基础)[perf命令]
    perf命令

    简介

    Perf是内置于Linux内核源码树中的性能剖析(profiling)工具,它基于事件采样原理,以性能事件为基础,支持针对处理器相关性能指标与操作系统相关性能指标的性能剖析,常用于性能瓶颈的查找与热点代码的定位。

    通过它,应用程序可以利用 PMU,tracepoint 和内核中的特殊计数器来进行性能统计。它不但可以分析指定应用程序的性能问题 (per thread),也可以用来分析内核的性能问题,当然也可以同时分析应用代码和内核,从而全面理解应用程序中的性能瓶颈。

    使用 perf,您可以分析程序运行期间发生的硬件事件,比如 instructions retired ,processor clock cycles 等;您也可以分析软件事件,比如 Page Fault 和进程切换。这使得 Perf 拥有了众多的性能分析能力,举例来说,使用 Perf 可以计算每个时钟周期内的指令数,称为 IPC,IPC 偏低表明代码没有很好地利用 CPU。Perf 还可以对程序进行函数级别的采样,从而了解程序的性能瓶颈究竟在哪里等等。Perf 还可以替代 strace,可以添加动态内核 probe 点,还可以做 benchmark 衡量调度器的好坏。

    perf命令

    性能调优工具如 perf,Oprofile 等的基本原理都是对被监测对象进行采样,最简单的情形是根据 tick 中断进行采样,即在 tick 中断内触发采样点,在采样点里判断程序当时的上下文。假如一个程序 90% 的时间都花费在函数 foo() 上,那么 90% 的采样点都应该落在函数 foo的上下文中。只要采样频率足够高,采样时间足够长,那么以上推论就比较可靠。因此,通过 tick 触发采样,我们便可以了解程序中哪些地方最耗时间,从而重点分析。

    perf list

    功能: 查看当前软硬件环境、支持的性能事件。

    查看所有分类事件的个数:

    perf list | awk -F: '/Tracepoint event/ { lib[$1]++ } END { for (l in lib) { printf " %-16s %d
    ", l, lib[l] } }' | sort | column
    

    性能事件分类

    • 硬件性能事件
    • 软件性能事件
    • tracepoint event

    hw:Hardware event,9个
    sw:Software event,9个
    cache:Hardware cache event,26个

    tracepoint:Tracepoint event,775个
    说明:
    hw和cache是由 PMU 硬件产生的事件,比如 cache 命中,当您需要了解程序对硬件特性的使用情况时,便需要对这些事件进行采样

    sw 是内核软件产生的事件,比如进程切换,tick 数等,与硬件无关
    tracepoint是内核中的静态 tracepoint 所触发的事件,这些 tracepoint 用来判断程序运行期间内核的行为细节,比如 slab 分配器的分配次数等。

    提示:这里的event是预定义,可以通过perf list命令列出所有的预定义event。

    perf stat

    功能:分析程序的整体性能
    示例:

    perf stat -e task-clock ./a.out # 分析 task-clock 事件
    perf stat -p 31317 # 分析 31317 进程
    perf stat -t 31318 # 分析 31318 线程
    perf stat -r 5 ./a.out # 分析 5 次就停止
    perf stat -d ./a.out # 全面分析
    

    perf top

    功能:实时显示系统/进程的性能统信息
    示例:

    perf top -a -p 31317 # 分析整个 31317 进程的性能
    perf top -n -p 31317 # 显示事件数量
    perf top --show-total-period -p 31317 # 累计事件个数
    perf top -G
    

    界面解释:

    第一列: 性能事件在整个检测域中占的比例,符号的 热度
    第二列: 符号所在 DSO(Dynamic Shared Object)
    第三列: DSO 类型(ELF可执行文件,动态链接库,内核,内核模块,VDSO 等)
    第四列: 符号名(函数名)
    

    perf record/report

    功能:

    record: 记录一段时间内系统/进程的性能事件,生成 perf.data 文件
    report: 读取 perf.data 文件,并显示分析数据
    

    示例:

    perf record -g -p 31655  # 记录一段时间的 zone_server 性能事件
    perf report           # 得到分析结果
    perf report -n        # 显示对应时间的调用次数
    perf report -v        # 显示每个符号的地址
    perf report -g flat,5%    #
    perf report -g graph,5%   #
    perf report -g fractal,5% #
    

    perf timechart

    功能: 将系统的运行状态以 SVG 图的形式输出。
    各处理器状态(run, idle)
    各进程的时间图谱(run, sleep, blocked ...)
    示例:

    perf timechart record -p 31655
    

    perf script

    功能: 查看 perf 数据文件 (perf.data)
    示例

    perf script -l # 查看当前系统中可扩展脚本
    perf script syscall-count # 查看系统调用被调度次数
    perf script sctop # 实时查看各个系统调用被调用的次数
    
  • 相关阅读:
    Maven插件方式使用Mybatis Generator
    css3渐变色板配色代码
    iframe加载顺序
    JPA N+1
    K3Cloud云星空战略实施教程(全套)更新2020-08-30
    K3Cloud云星空插件开发实战教程(全套)更新2020-07-29
    零基础C#NET网站开发实战教学(全套完结)最新更新2020-08-17
    K3Wise插件开发实战教程(全套)最新更新2020-08-17
    SQL基础培训实战教程[全套完结]最后更新时间2020-12-29
    第九篇分享:学佛第五个基础 正知正见 理悟佛法(一)[修改版]
  • 原文地址:https://www.cnblogs.com/xiaogongzi/p/8473821.html
Copyright © 2020-2023  润新知