perf使用教程

Perf是Linux内核的性能分析工具,用于监控如cache命中、上下文切换等性能指标。通过perf list查看可监控事件,perf stat进行整体性能分析,perf record记录函数级统计,perf report展示详细报告。在实践中,perf帮助定位CPU瓶颈,如过多的CPU迁移和页错误,以及函数级别的性能问题,如libcurl和malloc操作。掌握perf的使用能有效提升程序性能。
摘要由CSDN通过智能技术生成

perf使用教程

Perf简介

Perf是Linux kernel中的系统性能优化工具,perf基本原理的话是在CPU的PMU register中Get/Set performance counters来获得诸如instructions executed,cache-missed suffered,branches mispredicted等信息。

perf本身的工具有很多,这里主要介绍个人在查询程序性能问题时使用的一些工具
包括perf list、perf stat、perf record、perf report

perf list

使用perf之前肯定要知道perf能监控哪些性能指标吧?那么就要使用perf list进行查看,通常使用的指标是cpu-clock/task-clock等,具体要根据需要来判断

 $ perf list 
 List of pre-defined events (to be used in -e): 
 cpu-cycles OR cycles [Hardware event] 
 instructions [Hardware event] 
…
 cpu-clock [Software event] 
 task-clock [Software event] 
 context-switches OR cs [Software event] 
…
 ext4:ext4_allocate_inode [Tracepoint event] 
 kmem:kmalloc [Tracepoint event] 
 module:module_load [Tracepoint event] 
 workqueue:workqueue_execution [Tracepoint event] 
 sched:sched_{wakeup,switch} [Tracepoint event] 
 syscalls:sys_{enter,exit}_epoll_wait [Tracepoint event] 
…

不同内核版本列出的结果不一样多…不过基本是够用的,但是无论多少,我们可以基本将其分为三类

  1. Hardware Event 是由 PMU 硬件产生的事件,比如 cache 命中,当您需要了解程序对硬件特性的使用情况时,便需要对这些事件进行采样
  2. Software Event 是内核软件产生的事件,比如进程切换,tick 数等
  3. Tracepoint event 是内核中的静态 tracepoint 所触发的事件,这些 tracepoint 用来判断程序运行期间内核的行为细节,比如 slab 分配器的分配次数等

具体监控哪个变量的话,譬如使用后面的perf report工具,则加-e 监控指标,如

perf report -e cpu-clock ls
监控运行ls命令时的cpu时钟占用监控

perf stat

刚刚知道了可以监控哪些事件,但是事件这么多,该如何下手呢?

解决问题的时候有条理才解决的更快,所以面对一个性能问题的时候,最好采用自顶向下的策略。先整体看看该程序运行时各种统计事件的大概,再针对某些方向深入细节。而不要一下子扎进琐碎细节,会一叶障目的。

整体监测代码性能就需要使用perf stat这个工具,该工具主要是从全局上监控,可以看到程序导致性能瓶颈主要是什么原因。因为不同的程序导致其性能瓶颈的原因不同,譬如有些程序慢是由于计算量大,而有些程序是由于频繁的I/O导致性能瓶颈,他们的优化方式不同。perf stat通过概括精简的方式提供被调试程序运行的整体情况和汇总数据。

使用方法

perf stats 程序
譬如
perf stat ./gw --gtpu-ip 172.31.24.58 --sgw-s11-ip 172.31.24.250 --zmq-ip 172.31.31.174 --sgi-if eth1 --teid 1 --mysql 172.31.20.157 -cgw

程序运行完之后,然后使用ctrl+c来终止程序(若程序自动终止则不用),之后,perf便会打印出监控事件结果,类似结果如下:

Performance counter stats for './gw --gtpu-ip 172.31.24.58 --sgw-s11-ip 172.31.24.250 --zmq-ip 172.31.31.174 --sgi-if eth1 --teid 1 --mysql 172.31.20.157 -cgw':

       1773.651816 task-clock (msec)         #    0.016 CPUs utilized          
            79,054 context-switches          #    0.045 M/sec                  
               
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值