欢迎来到天天文库
浏览记录
ID:41154017
大小:5.95 MB
页数:19页
时间:2019-08-17
《Linux高级系统级性能分析工具-perf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Linux的系统级性能剖析工具‐perf(二)承刚TAOBAOKernelTeamchenggang.qin@gmail.com第三章Perftop工具3.1perftop的基本使用方法top工具主要用于实时剖析各个函数在某个性能事件上的热度。利用perftop,能够直观地观察到当前的热点函数,并利用工具中内置的annotate功能,进一步查找热点指令。图3.perftop的界面Perftop的基本使用方法为:$perftop该命令以默认性能事件“cycles(CPU周期数)”进行全系统的性能剖析,检测系统中的所有应用程序函数与内核函数的热
2、度。图3为上述命令的执行结果。perf提供了3种用户界面,分别是tui,gtk以及tty。其中可操作性最强,功能最丰富的界面是tui,本文主要基于此界面讲解perf。top工具仅支持tui与tty,默认界面为tui。图3中展示的就是tui界面。top工具的界面具有4列信息。右面第一列为符号名,也就是函数名。左面第一列为该符号引发的性能事件在整个监测域中占的比例,我们将其称为该符号的热度。监测域是指perf监控的所有符号。默认情况下包括系统中所有进程、内核以及内核模块的函数。左面第二列为该符号所在的DSO。DSO即动态共享对象(Dynamic
3、SharedObject)的缩写。第3列为DSO的类型。perf中DSO共有5种类型,分别是:ELF可执行文件,动态链接库,内核,内核模块,VDSO等。当第3列为[.]时表示此符号属于用户态的ELF文件(包括可执行文件与动态链接库)。为[k]表示此符号属于内核或内核模块。需要提一下的是,必须在系统安装newt软件包,perf才能使能tui界面。在tui界面下按'h','?'或'F1'键时,会弹出一个帮助窗口,如图4所示。图4.tui界面的帮助窗口帮助窗口列出了perftop的所有功能。我们首先来看注解(Annotate)功能。注解功能可以进
4、一步深入分析某个符号。给出对应线程的代码并且为热点代码标记出它们触发的性能事件在整个测试域中的百分比。下面让我们来看一下如何使用注解功能。在界面上按上下键,将光标在各个symbol间移动。选定某个符号后,按下a键,得到如图5所示的界面。图5.perftop的注解功能图5显示的是[code1]中do_pi()函数的注解。从图上可以看到perf对do_pi()中的C代码给出了汇编语言的注解。并且给出了各条指令的采样率。从图上可以看到耗时较多的指令(如访存指令)比较容易被perf采到。选定某个符号后按下热键’d’,perf会过滤掉所有不属于此DS
5、O的文件。以图1中的实验为例,符号do_pi归属的DSO为thread。当在符号do_pi上按下’d’键后,perf过滤掉了所有不属于thread的符号。如图6所示。图6.符号的DSO级过滤功能类似于热键’d’,热键’t’能够过滤所有不属于当前符号所属线程的符号。热键’P’可以将perftop的当前显示的信息输出到文件’perf.hist.XXX’中。右方向键也是热键,它可以打开perftop的功能菜单。菜单上列出的各项功能分别对应上述各个热键的功能。3.2perftop的参数介绍Perftop的参数较多,本文只介绍几个常用参数的使用方法。
6、‘‐e’or‘‐‐event’:该参数用于指定待分析的性能事件。具体可以参考第3节perflist。如果我们希望利用top工具剖析系统中的Cache丢失次数,可以采用以下命令:$perftop ‐ecache‐misses‘‐c’or‘‐‐count’该参数用于指定性能计数器的采样周期。默认情况下,每秒钟采样4000次。‘‐p’or‘‐‐pid’该参数用于指定待分析进程的pid。指定pid后,perftop仅仅分析目标进程以及目标进程创建的线程。‘‐t’or‘‐‐tid’该参数用于指定带分析线程的ti
7、d。指定tid后,perftop仅分析目标线程,不包括此线程创建的其它线程。‘‐a’or‘‐‐all‐cpus’采集系统中所有CPU产生的性能事件。这也是perftop的默认情况。‘‐C’or‘‐‐cpu’指定待分析的CPU列表。如系统中有4个CPU,如果仅需采集CPU0与CPU3的数据,可通过如下方法调用perftop:$perftop ‐C0,3‘‐k’or‘‐‐vmlinux’指定带符号表的内核映像所在的路径。与GDB类似,perf只有在DSO存在符号表的情况下才能解析出IP对应的具体符号。Perf通常采用以下顺
8、序加载内核符号:1./proc/kallsyms2.用户通过’‐k’参数指定的路径。3.当前路径下的“vmlinux”文件4./boot/vmlinux5./boot/vmlin
此文档下载收益归作者所有