perf之record

如果CPU的使用率突然暴涨,如何迅速定位是哪个进程、哪段代码引起的呢?我们需要一个profiling工具,对CPU上执行的代码进行采样、统计,告诉我们CPU到底在忙些什么。

perf 就是这样的工具。我们举个例子看看 perf 是怎样工作的。

首先我们用以下命令模拟出CPU利用率暴涨的现象:

1

$ cat /dev/zero > /dev/null

然后我们看到 CPU 1 的 %system 飙升到95%:

1

2

3

4

5

6

# sar -P ALL -u 2 2

08:21:16 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle

08:21:18 PM     all      2.25      0.00     48.25      0.00      0.00     49.50

08:21:18 PM       0      0.50      0.00      1.00      0.00      0.00     98.51

08:21:18 PM       1      4.02      0.00     95.98      0.00      0.00      0.00

现在我们用 perf 工具采样:

1

2

3

# perf record -a -e cycles -o cycle.perf -g sleep 10

[ perf record: Woken up 18 times to write data ]

[ perf record: Captured and wrote 4.953 MB cycle.perf (~216405 samples) ]

注:”-a”表示对所有CPU采样,如果只需针对特定的CPU,可以使用”-C”选项。

把采样的数据生成报告:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

# perf report -i cycle.perf | more

...

# Samples: 40K of event ‘cycles‘

# Event count (approx.): 18491174032

#

# Overhead          Command                   Shared Object              Symbol

# ........  ...............  ..............................    ................

#

75.65%              cat  [kernel.kallsyms]                 [k] __clear_user

|

--- __clear_user

|

|--99.56%-- read_zero

|          vfs_read

|          sys_read

|          system_call_fastpath

|          __GI___libc_read

--0.44%-- [...]

2.34%              cat  [kernel.kallsyms]                 [k] system_call

|

--- system_call

|

|--56.72%-- __write_nocancel

|

--43.28%-- __GI___libc_read

...

我们很清楚地看到,CPU利用率有75%来自 cat 进程 的 sys_read 系统调用,perf 甚至精确地告诉了我们是消耗在 read_zero 这个 kernel routine 上。

转自:http://linuxperf.com/?p=36

时间: 2024-11-05 17:30:15

perf之record的相关文章

系统级性能分析工具 — Perf

离2.6.31内核开始.linux核心配备了性能分析工具perf,它可以是功能级和指令级热外表. perf Performance analysis tools for Linux. Performance counters for Linux are a new kernel-based subsystem that provide a framework for all things performance analysis. It covers hardware level (CPU/PM

perf工具-linux下性能分析工具

从2.6.31内核开始,linux内核自带了一个性能分析工具perf,能够进行函数级与指令级的热点查找. perf Performance analysis tools for Linux. Performance counters for Linux are a new kernel-based subsystem that provide a framework for all things performance analysis. It covers hardware level (CP

perf命令

@(Linux基础)[perf命令] perf命令 ---- 简介 Perf是内置于Linux内核源码树中的性能剖析(profiling)工具,它基于事件采样原理,以性能事件为基础,支持针对处理器相关性能指标与操作系统相关性能指标的性能剖析,常用于性能瓶颈的查找与热点代码的定位. 通过它,应用程序可以利用 PMU,tracepoint 和内核中的特殊计数器来进行性能统计.它不但可以分析指定应用程序的性能问题 (per thread),也可以用来分析内核的性能问题,当然也可以同时分析应用代码和内核

内核调试-perf introduction

perf概念 perf_event Perf_events是目前在Linux上使用广泛的profiling/tracing工具,除了本身是内核(kernel)的组成部分以外,还提供了用户空间(user-space)的命令行 工具("perf","perf-record","perf-stat"等等). perf_events提供两种工作模式: 采样模式(sampling) 计数模式(counting) "perf record"

内核 跟踪与统计工具

Tracing and Profiling Contents [hide] 1 Tracing and Profiling in Yocto 1.1 General Setup 2 Overall Architecture of the Linux Tracing and Profiling Tools 3 Basic Usage (with examples) for each of the Yocto Tracing Tools 3.1 perf 3.1.1 Setup 3.1.2 Basi

Linux下的两个辅助编程工具 perf 和 GDB

前几天在实验室做了几个小实验,受益匪浅,写代码倒是其次,最重要的是渐渐了解了真实的 计算机科学 工作方式. 很多工作都可以用 linux 下的工具高效完成,例如 要跑一组实验,其中有两个参数变动,那么就不需要手动运行多次,只用一个 Shell Script 就能完成.配合 awk 效率更高. 其中两个工具真得很受用,一个是 GDB, 一个是 perf.前者用于程序调试,后者用于程序性能侦测. GDB 是linux下很出色的调试器, 很多常用的调试工具,例如 breakpoint, call st

perf 工具介绍3

http://blog.chinaunix.net/uid-10540984-id-3854969.html http://blog.csdn.net/zhangskd/article/details/37902159 [[email protected] ~]# perf record -e cpu-clock ./t1 [ perf record: Woken up 1 times to write data ][ perf record: Captured and wrote 0.003

Perf Event :Linux下的系统性能调优工具

Perf Event :Linux下的系统性能调优工具 2011-05-27 10:35 刘 明 IBMDW 字号:T | T Perf Event 是一款随 Linux 内核代码一同发布和维护的性能诊断工具,由内核社区维护和发展.Perf 不仅可以用于应用程序的性能统计分析,也可以应用于内核代码的性能统计和分析.得益于其优秀的体系结构设计,越来越多的新功能被加入 Perf,使其已经成为一个多功能的性能统计工具集 .本文将介绍 Perf 在应用程序开发上的应用. AD:2014WOT全球软件技术

Perf工具

前段时间Linux下用nmon监控程序的运行,发现CPU的使用率很高,系统态Sys的比例很高.程序的速度不是很快,怀疑和上面的原因有关. 分别使用perf record,perf report和top -H -p,pstack分析发现.2种可能性,跳表skiplist和内存大量分配回收时lru回收,都会用到spin lock自旋锁,导致CPU Sys的使用率很高. 最后替换了跳表skiplist,CPU Sys的使用率很高的问题得以解决. perf工具是Linux自带的性能分析工具,常用的命令: