2018-11-04 19:39:53 weixin_38915451 阅读数 99

请教一个LINUX perf生成火炬图的问题

OS:SUSE12
步骤如下:
STEP1:
sh -x ./perf.sh

STEP2:
perf script -i perf.data &> perf.unfold
/scripts/stackcollapse-perf.pl perf.unfold &> perf.folded

STEP3:
/scripts/flamegraph.pl perf.folded > perf.svg

但:最后一步报错如图在这里插入图片描述
查看perf.folded文件内容也为“Permission denied”字样:
cat perf.folded
-bash: /scripts/stackcollapse-perf.pl: Permission denied

请指点,为谢。

2017-09-01 14:54:20 zijingshanke 阅读数 316

电子书:《Linux Perf Master》

《The Linux Perf Master》(暂用名) 是一本关于开源软件的电子书。本书与常见的专题类书籍不同,作者以应用性能诊断入手,尝试从多个不同的维度介绍以 Linux 操作系统为核心的开源架构技术体系。全书分为以下几个部分:

  • 第一部分:介绍 Linux 性能诊断的入门方法。包括资源利用评估、性能监控、性能优化等工作涉及的工具和方法论,以 Stack
    Overflow 为例介绍一个真实的应用系统架构组成;

  • 第二部分:基础设施管理工具。介绍
    Ganglia,Ntop,Graphite,Ansible,Puppet,SaltStack 等基础设施管理 & 可视化工具;

  • 第三部分:操作系统工作原理。介绍 Linux 操作系统工作原理(Not only Works,But Also How),从动态追踪技术的角度理解应用程序与系统行为;
  • 第四部分:通信协议与网络工程。介绍基于 TCP/IP 协议的负载均衡技术,封包过滤技术和态势感知技术;微服务之后的挑战:分布式追踪系统(Planning);
  • 第五部分:信息安全篇。介绍木马入侵、黑客攻击、防护与检测,IPv6 、容器等技术发展对安全工作的挑战;介绍信息安全法律;
  • 第六部分:工程管理篇。尝试跳出 IT 视野讨论人才培养,DevOps 组织、效率和工程管理方法;
  • 第七部分:社区文化篇。介绍黑客文化、开源作者、开发者社区和知识产权法,“技术首先是关于人的”(Technology is first
    about human beings)。

特色章节

  • 基于Linux单机的负载评估
  • Netflix性能分析模型
  • 动态追踪技术:DTrace
  • 基于Ganglia实现集群性能态势感知
  • 新一代Ntopng网络流量监控—可视化和架构分析
  • 基于LVS的AAA负载均衡架构实践
  • 木马来袭:黑客入侵导致的性能问题
  • 性能优化思路:从珠海航展交通管控实践谈起

下载

国内用户访问GitBook不太稳定,提供百度云快捷下载,同时提供了pdf、mobi、ePub三种格式。
- Edition 0.2 20170701
- Edition 0.1 20170210

GitBook工具链

本次编辑过程中,早期没有使用Markdown发表的文章,就办法做到一键复用,必须再次进行繁琐的排版。另外,个人也不推荐使用编辑器:GitBook Editor for Mac ,它使用起来不太友好,也很容易崩溃。也不推荐在本地搭建一套自己的GitBook服务端,对个人用户来说过于繁琐。我的方式是“本地编写+自动同步”的方式:Git + Markdown真是珠联璧合、威力无穷。more >>> 我的写作工具链

https://riboseyim.github.io/2017/12/21/eBook-LPM/

2019-11-24 16:42:22 mijichui2153 阅读数 69

一、Perf简介:

1、系统级性能优化通常包括两个阶段:性能剖析(performance profiling)和代码优化。性能剖析的目标是寻找性能瓶颈,查找引发性能问题的原因及热点代码。代码优化的目标是针对具体性能问题而优化代码或编译选项,以改善软件性能。本篇主要讲性能分析中常用的工具——perf。

2、Perf的原理:

(1)Perf是内置于Linux内核源码树中的性能剖析(profiling)工具。它基于事件采样原理,以性能事件为基础,支持针对处理器相关性能指标与操作系统相关性能指标的性能剖析。常用于性能瓶颈的查找与热点代码的定位。
(2)通过它,应用程序可以利用 PMU,tracepoint 和内核中的特殊计数器来进行性能统计。
(3)使用 perf可以分析程序运行期间发生的硬件事件,比如 cache miss等;也可以分析软件事件,比如 page fault 和进程切换。

上述部分名词介绍:

1)PMU:性能监控单元(Performance Monitor Unit), CPU提供的一个性能监视单元,用于统计CPU性能数据;
2)Tracepoint:散落在内核源代码中的一些 hook,它们可以在特定的代码被运行到时被触发,这一特性可以被各种 trace/debug 工具所使用。
3)内核运行状态计数,例如:  1) 进程切换   2) Page fault   3) 中断计数

3、Perf安装:

自己网上搜就好了,一般都是内置在linux内核源码的tool目录下的。一般如下是可以的:

sudo apt-get install linux-source

cd /usr/src

cd tools/perf

make && make install

二、Perf命令:

注意:有些命令必须在root用户下才可以执行,或起作用。

1、 perf --version

查看perf当前版本;

2、perf --help

查看帮助文档,即可用指令;

3、perf list

使用perf list命令可以列出所有能够触发perf采样点的事件。

(1)不同的系统会列出不同的结果该列表很。但是按照事件类型都可以归为以下三类:

1)Hardware Event:由PMU硬件产生的事件,比如cache命中;

2)Software Event:内核软件产生的事件,比如进程切换;

3)Trachpoint Event:内核中的静态 tracepoint 所触发的事件,这些 tracepoint 用来判断程序运行期间内核的行为细节,比如 slab 分配器的分配次数等。

(2)同时还可以显示特定模块支持的perf事件:hw/cache/pmu都是硬件相关的;tracepoint基于内核的ftrace;sw实际上是内核计数器。

1)hw/hardware显示支持的硬件事件相关,如: perf list hardware

2)sw/software显示支持的软件事件列表: perf list sw

3)cache/hwcache显示硬件cache相关事件列表: perf list cache

4)pmu显示支持的PMU事件列表: perf list pmu  
5) tracepoint显示支持的所有tracepoint列表,这个列表就比较庞大: perf list tracepoint

4、perf top

实时的观察下CPU时间的花费情况。如下图:

5、perf stat

启动应用程序并分析该程序完整生命周期的性能状况。虽然perf top也可以指定pid,但是对于perf top而言必须先启动应用才能查看信息。perf stat能够运行指令,并且能完整统计应用整个生命周期的信息。

 

6、perf record

收集采样信息,并将其记录在一个文档里(默认是perf.data),随后可用于perf report对数据文件进行分析。例如:

perf record -F 99 -p 13204 -g -- sleep 30

perf record表示记录,-F 99表示每秒99次,-p 13204是进程号,即对哪个进程进行分析,-g表示记录调用栈,sleep 30则是持续30秒。另外perf record常用选项如下:

-e record指定PMU事件
    --filter  event事件过滤器
-a  录取所有CPU的事件
-p  录取指定pid进程的事件
-o  指定录取保存数据的文件名
-g  使能函数调用图功能
-C 录取指定CPU的事件

7、perf report

读取perf record创建的文件,并给出热点分析结果

更多指令,以及这些指令的详细介绍参见

https://blog.csdn.net/u012679583/article/details/82349364

https://www.cnblogs.com/arnoldlu/p/6241297.html

 

三、火焰图:

(1)火焰图简介:火焰图(Flame Graph)是由Linux性能优化大师Brendan Gregg发明的,Flame Graph以一个全局的视野来看待时间分布,它从底部往顶部,列出所有可能的调用栈。其他的呈现方法,一般只能列出单一的调用栈或者非层次化的时间分布。

(2)火焰图含义:

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

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

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

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

(3)互动性:火焰图是基于 stack 信息生成的 SVG 图片, 用来展示 CPU 的调用栈,可以与用户互动。

(4)访达查看:点击某一层,火焰图会水平放大,该层占据所有宽度,显示详细信息。此时左上角会显示”reset zoom“,点击后图片就会恢复当原样。

(5)搜索:按下Ctrl+f会显示一个搜索框,用户可以输入关键词过着正则表达式,符合条件的函数会高亮显示。

 

四、生成火焰图的实例

 

1、下载工具FlameGraph:

链接 https://github.com/brendangregg/FlameGraph 。我们主要是用到其中的几个文件。

2、记录数据(perf record指令):

perf record -F 99 -p 16637 -g -- sleep 30  #记录数据

此处-F 99表示一秒采样99此;

对-p 16637表示对进程16637进行记录,这个进程号是需要你实现选取的;

sleep 30表示采样的时间是30s;

执行完成后会生成perf.data文件,如下:

3、用perf script工具对perf.data进行解析
perf script > out.perf

执行完成后生成out.perf文件,如下:

4、折叠调用栈(用到FlameGraph中的stackcollapse-perf.pl文件):
./FlameGraph-master/stackcollapse-perf.pl out.perf > out.folded

执行后生成out.folded文件,如下:

5、生成火焰图(用到FlameGraph中的flamegraph.pl文件):
./FlameGraph-master/flamegraph.pl out.folded > perf.svg

执行后生成perf.svr文件,这个就是我们想要的火焰图了。

6、把这个perf.svg文件sz到本地,如下图。用浏览器打开后就是我们看到的火焰图了。

 

 

四、其他应用实例

1、查找时间上的热点函数

(1)测试代码如下:

#include <iostream>
#include <vector>

using namespace std;

void longa()
{
  int i,j;
  for(i = 0; i < 1000000; i++)
  j=i;
}
 
void foo2()
{
  int i;
  for(i=0 ; i < 10; i++)
       longa();
}
 
void foo1()
{
  int i;
  for(i = 0; i< 100; i++)
     longa();
}
 
int main(void)
{
  foo1();
  foo2();
}

(2)编译代码  g++ test.cpp -o test

(3)开始记录  perf record -g -e cpu-clock ./test

(4)查看统计结果  perf report

(5)结果如下图所示:

 

2013-02-27 16:11:12 a254373829 阅读数 3713

perf是一个性能分析的tool. 类似ftrace都是/proc/等接口来获取内核的信息。

常用命令:

perf list   #列出所有能够触发perf采样点的事件

$ 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] …


perf stat #用于统计一个命令执行过程中事件信息

perf stat [<options>] [<command>]

options:

-e, --event <event>

-p, --pid <n>

...

$perf stat ./t1 
 Performance counter stats for './t1': 

 262.738415 task-clock-msecs # 0.991 CPUs 
 2 context-switches # 0.000 M/sec 
 1 CPU-migrations # 0.000 M/sec 
 81 page-faults # 0.000 M/sec 
 9478851 cycles # 36.077 M/sec (scaled from 98.24%) 
 6771 instructions # 0.001 IPC (scaled from 98.99%) 
 111114049 branches # 422.908 M/sec (scaled from 99.37%) 
 8495 branch-misses # 0.008 % (scaled from 95.91%) 
 12152161 cache-references # 46.252 M/sec (scaled from 96.16%) 
 7245338 cache-misses # 27.576 M/sec (scaled from 95.49%) 

  0.265238069 seconds time elapsed 



perf top #用于观察整个系统当前的状态


perf record #用于细粒度的统计信息,会生成一个perf.data统计文件,可用perf report输出信息

usage: perf record [<options>] [<command>]
    or: perf record [<options>] -- <command> [<options>]

options:

-e, --event <event>

-p, --pid <n> record events on existing process id

-g, --call-graph      do call-graph (stack chain/backtrace) recording

...

图 2. perf report 示例


2014-08-22 17:06:52 RHEL_admin 阅读数 2536

perf是一款集成于Linux内核(2.6+)性能分析工具。这里所用平台:RHEL6 64bit

安装

perf是随着Linux内核(2.6+)代码一起发布的,安装很简单,默认安装没有激活TUI(text-based user interface)选项的,如果要激活TUI选项,前提是要安装newt-devel RPM包。

[root@rhel6164 ~]# rpm -qa | grep newt-devel
newt-devel-0.52.11-2.el6.x86_64 #如果要激活perf的TUI选项,就要提前安装newt-devel包
[root@rhel6164 ~]# cd linux-3.10.34/tools/perf/ #进入内核perf目录
[root@rhel6164 perf]# make #直接编译perf
[root@rhel6164 perf]# make install DESTDIR="installation_path" #不用默认安装路径,指定安装路径到“installation_path"
[root@rhel6164 perf]# perf --version
perf version 3.10.34
使用

直接在输入perf就可以看到perf的使用说明

[root@rhel6164 ~]# perf

 usage: perf [--version] [--help] COMMAND [ARGS]

 The most commonly used perf commands are:
   annotate        Read perf.data (created by perf record) and display annotated code
   archive         Create archive with object files with build-ids found in perf.data file
   bench           General framework for benchmark suites
   buildid-cache   Manage build-id cache.
   buildid-list    List the buildids in a perf.data file
   diff            Read two perf.data files and display the differential profile
   evlist          List the event names in a perf.data file
   inject          Filter to augment the events stream with additional information
   kmem            Tool to trace/measure kernel memory(slab) properties
   kvm             Tool to trace/measure kvm guest os
   list            List all symbolic event types
   lock            Analyze lock events
   mem             Profile memory accesses
   record          Run a command and record its profile into perf.data
   report          Read perf.data (created by perf record) and display the profile
   sched           Tool to trace/measure scheduler properties (latencies)
   script          Read perf.data (created by perf record) and display trace output
   stat            Run a command and gather performance counter statistics
   test            Runs sanity tests.
   timechart       Tool to visualize total system behavior during a workload
   top             System profiling tool.
   trace           strace inspired tool
   probe           Define new dynamic tracepoints

 See 'perf help COMMAND' for more information on a specific command.



Linux perf(目录)

阅读数 801

perf

阅读数 612

没有更多推荐了,返回首页