将perf跟funcgraph-retval结合起来使用

简介: 将perf跟funcgraph-retval结合起来使用

作者

pengdonglin137@163.com

概述

下面是之前写的使用funcgraph-retval的文章:

上面的文章里,都是直接通过命令行配置ftrace来使用的,过程稍微有些繁琐,linux提供了perf工具,通过perf工具可以简化上面的一些操作。

正文

这里用到的是perf的ftrace子命令,帮助信息如下:

# perf ftrace -h
 Usage: perf ftrace [<options>] [<command>]
    or: perf ftrace [<options>] -- [<command>] [<options>]
    or: perf ftrace {trace|latency} [<options>] [<command>]
    or: perf ftrace {trace|latency} [<options>] -- [<command>] [<options>]
    -D, --delay <n>       Number of milliseconds to wait before starting tracing after program start
    -F, --funcs <[FILTER]>
                          Show available functions to filter
    -G, --graph-funcs <func>
                          Trace given functions using function_graph tracer
    -g, --nograph-funcs <func>
                          Set nograph filter on given functions
    -m, --buffer-size <size>
                          Size of per cpu buffer, needs to use a B, K, M or G suffix.
    -N, --notrace-funcs <func>
                          Do not trace given functions
    -T, --trace-funcs <func>
                          Trace given functions using function tracer
    -t, --tracer <tracer>
                          Tracer to use: function_graph(default) or function
        --func-opts <options>
                          Function tracer options, available options: call-graph,irq-info
        --graph-opts <options>
                          Graph tracer options, available options: nosleep-time,noirqs,verbose,thresh=<n>,depth=<n>
        --inherit         Trace children processes

ftrace子命令默认使用的是function_graph这个跟踪器,并且提供了下面一些辅助选项:

-G 指定要跟踪的函数,只能设置一个
-g 设置不跟踪的函数,只能设置一个
--graph-opts 控制输出哪些信息,比如verbose参数可以输出最详细的信息

下面以cat /proc/stat为例:

# echo 1 > /sys/kernel/tracing/options/funcgraph-retval
# perf ftrace -G ksys_read cat /proc/stat

可以得到下面的日志:

...
 43)               |    vfs_read() {
 43)               |      rw_verify_area() {
 43)               |        security_file_permission() {
 43)               |          selinux_file_permission() {
 43)               |            inode_security() {
 43)   0.159 us    |              __cond_resched(); /* = 0x0 */
 43)   0.475 us    |            } /* inode_security = 0xffff88811534def8 */
 43)   0.160 us    |            avc_policy_seqno(); /* = 0x1 */
 43)   1.103 us    |          } /* selinux_file_permission = 0x0 */
 43)   0.161 us    |          bpf_lsm_file_permission(); /* = 0x0 */
 43)   1.865 us    |        } /* security_file_permission = 0x0 */
 43)   2.151 us    |      } /* rw_verify_area = 0x0 */
 43)   0.174 us    |      __get_task_ioprio(); /* = 0x4004 */
 43)               |      proc_reg_read_iter() {
 43)               |        seq_read_iter() {
 43)               |          mutex_lock() {
 43)   0.172 us    |            __cond_resched(); /* = 0x0 */
 43)   0.482 us    |          } /* mutex_lock = 0x0 */
 43)   0.160 us    |          single_start(); /* = 0x0 */
 43)   0.162 us    |          single_stop(); /* = 0xffffffff81490e70 */
 43)   0.251 us    |          mutex_unlock(); /* = 0xffff888836c3d180 */
 43)   2.244 us    |        } /* seq_read_iter = 0x0 */
 43)   2.689 us    |      } /* proc_reg_read_iter = 0x0 */
 43)   5.745 us    |    } /* vfs_read = 0x0 */
...
目录
打赏
0
2
2
1
113
分享
相关文章
PERF EVENT 硬件篇
简介 本文将通过以 X86 为例子介绍硬件 PMU 如何为 linux kernel perf_event 子系统提供硬件性能采集功能 理解硬件 MSR (Model Specify Register) 可以理解为CPU硬件的专用寄存器,下述的所有寄存器都是这个类型 汇编指令 rdmsr/wrm.
4083 0
倚天产品介绍|倚天虚拟化:CPU虚拟化原理介绍
虚拟化技术中最关键的技术之一就是CPU虚拟化。在没有硬件辅助虚拟化技术出来之前,通常都是通过TCG(软件进行指令翻译)的方式实现CPU虚拟化。但是由于TCG方式的虚拟化层开销太大,性能太差,因此引入了硬件辅助虚拟化技术。
HTML5 3D地球仪可按经纬坐标定位特效
这是一个基于HTML5的3D地球仪动画,地球仪不仅可以自动自西向东旋转,而且还可以旋转到指定经纬度坐标。另外,还有一个控制面板,可以控制地球是否自转、光晕是否显示,以及地理缩放。你也可以通过拖拽鼠标来改变地球仪的视角,可以将它移至南北极的视角,也可以移至赤道的视角,非常方便。需要的朋友可下载试试!
378 2
Perf Arm SPE介绍与使用
本次分享的主题是 Perf Arm-SPE 的介绍及使用,本次分享主要介绍如何在倚天 710 平台上利用 Arm-SPE 特性定位伪共享问题、分析内存访问、分析指令延时以及监控访存延时等功能。 1. 背景介绍 2. Arm SPE的原理 3. Arm SPE在倚天服务器上的应用 4. Arm SPE 更多特性与功能的探索
492 0
Linux性能分析利器:全面掌握perf工具
【10月更文挑战第18天】 在Linux系统中,性能分析是确保软件运行效率的关键步骤。`perf`工具,作为Linux内核自带的性能分析工具,为开发者提供了强大的性能监控和分析能力。本文将全面介绍`perf`工具的使用,帮助你成为性能优化的高手。
475 1
一文讲明Hystrix熔断器
这篇文章详细阐述了Hystrix熔断器的原理和应用,解释了分布式系统中服务雪崩的问题,并展示了如何在Spring Cloud框架中使用Hystrix进行熔断和降级处理。
一文讲明Hystrix熔断器
【问题复盘】在Ubuntu 20.04下安装OFED驱动 复盘:在Ubuntu 20.04下安装OFED驱动
整个问题主要是由于不同的内核版本导致文件路径不同,进而导致安装过程中某些库无法按预期安装而出现问题。 为什么使用最新的OFED驱动解决了问题呢?推测是最新驱动补充了之前缺失的某些文件,因此后续安装过程能够正常进行。 例如,在OFED 5.4中,某个安装所需的文件F位于A处,但安装程序却在B处查找该文件,导致报错。而在OFED 5.8中,该安装所需的文件F被移回到B处,此时不管去哪里查找都能找到文件F,因此安装可以正常进行。
751 0
MQTT协议在智能制造中的应用案例与效益分析
【6月更文挑战第8天】MQTT协议在智能制造中的应用案例与效益分析
405 1
动态规划详解背包问题及实践(附C++代码)
背包问题是一个经典的组合优化问题,它可以被抽象为一个把物品放入背包中的过程,以求最终背包中物品价值的最大化
BXA
1073 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等