1# Hiperf 的抓取和展示说明
2
3Hiperf 工具是对系统性能数据进行采样记录,并将采样数据保存为文件,进行读取,展示分析。
4
5## Hiperf 的抓取
6
7### Hiperf 抓取配置参数
8
9![GitHub Logo](../../figures/perf/perfsetting.jpg)
10
11配置项说明:
12
13-     Start Hiperf Sampling:配置项的总开关。
14-     Process:离线模式下配置的是整个系统的进程。
15-     Frequency:配置抓取的频率。
16-     Call Stack:配置抓取的堆栈类型。
17-     Advance Options:更多的抓取配置项。
18  再点击 Record setting,在 output file path 输入文件名 hiprofiler_data_perf.htrace,拖动滚动条设置 buffer size 大小是 64MB,抓取时长是 50s。
19  ![GitHub Logo](../../figures/perf/perfset.jpg)
20  点击 Trace command,就会根据上面的配置生成抓取命令,点击复制按钮,会将命令行复制。
21  ![GitHub Logo](../../figures/perf/perfcommand.jpg)
22  输入 hdc shell,进入设备,执行命令。
23  ![GitHub Logo](../../figures/perf/perfexcutecommand.jpg)
24  执行完成后,进入指定目录查看,在/data/local/tmp 下就会生成 trace 文件。
25  ![GitHub Logo](../../figures/perf/perffile.jpg)
26
27### Hiperf 展示说明
28
29将抓取的 trace 文件导入 smartperf 界面查看。
30![GitHub Logo](../../figures/perf/summary.jpg)
31
32界面布局介绍:Perf 整体界面布局分为 3 个部分:
33
34-     红色区域:泳道图。
35-     绿色区域:详细信息(Perf Profile和Sample List)。
36-     黄色区域:辅助信息(Call Stack)。
37
38### Hiperf 泳道图展示
39
40Hiperf 泳道图展示按照 CPU 使用量、进程和线程展示,鼠标移动到泳道图上,悬浮框会显示 CPU 的使用量。
41![GitHub Logo](../../figures/perf/chart.jpg)
42按住 w 键放大界面,泳道图会出现 P 的标志,鼠标移动到 P 图标上,悬浮框会显示每个 callstack 和调用的深度如下图。
43![GitHub Logo](../../figures/perf/callstack.jpg)
44Hiperf 泳道图上浅色表示无效调用栈的采样点,抓取时由于设备上的对应的 so 无符号信息,函数跟地址都无法获取到,固该采样点在 tab 页中不做显示。
45![GitHub Logo](../../figures/perf/perf_nocallstack.jpg)
46
47### Hiperf 泳道图的框选功能
48
49可以对 CPU 使用量的线程和进程区数据进行框选,框选后在最下方的弹出层中会展示框选数据的统计表格,总共有四个 tab 页。
50Perf Profile 的 Tab 页如图:
51![GitHub Logo](../../figures/perf/PerfProfile.jpg)
52
53-     Call Stack:为经过符号解析后的Callstack,并且给出动态链接库或者进程名的信息。
54-     Local:为该调用方法自身占用的 CPU 时间。
55-     Sample Count:采样次数。
56-     Event Count:事件次数。
57  Sample List 的 Tab 页如图:
58  ![GitHub Logo](../../figures/perf/Samplelist.jpg)
59-     Sample Time:采样的时间戳信息。
60-     Core:当前的CPU核信息。
61-     Process:进程名。
62-     Thread:线程名。
63-     State:运行状态。
64-     Backtrace:栈顶的调用栈名称。
65
66### Hiperf 支持多种 Options 展示风格
67
68点击 Perf Profile 的 Tab 页底部的 Options,会有四个 CheckBox 复选框。
69![GitHub Logo](../../figures/perf/Options.jpg)
70
71-     Invert:反向输出调用树。
72-     Hide System so:隐藏系统库文件。
73-     Hide Thread:隐藏线程。
74-     Hide Thread State:隐藏线程状态。
75
76### Hiperf 支持过滤调用栈调用次数的展示风格
77
78点击 Perf Profile 的 Tab 页底部的 Sample Count Filter,可以填上区间值。过滤出符合该区间值调用次数的调用栈信息。
79![GitHub Logo](../../figures/perf/samplecounter.jpg)
80
81### Hiperf 功能的调用栈 Group 展示-数据分析支持剪裁功能
82
83![GitHub Logo](../../figures/perf/datamining.jpg)
84
85- 裁剪 Callstack,点击 Callstack 上一个节点符号,再点击底部 Symbol Filter 按钮,则该符号自动被裁剪掉,同时将该节点往下所有的 Callstack 内容裁剪掉。
86
87- 裁剪 Library,点击 Library 上一个节点符号,再点击底部 Library Filter 按钮,则该符号自动被裁剪掉,同时将该节点往下所有的 Callstack 内容裁剪掉。
88- 点击 Reset 按钮,将恢复选中的裁剪内容。
89
90### Hiperf 功能的调用栈 Group 展示支持按条件过滤
91
92在 Input Filter 输入关键字,会显示出带有该关键字的展示信息。
93![GitHub Logo](../../figures/perf/inputfilter.jpg)
94
95### Hiperf 辅助信息区展示调用栈
96
97当在详细信息区选择一个符号时,将展示与该符号相关的完整的调用栈。对上展示到根节点,对下则展示 CPU 占用率最大的调用栈。调用栈右侧有 Sliding bar 可以滚动。
98如下图的 Heaviest Stack Trace:
99![GitHub Logo](../../figures/perf/heaviesttrace1.jpg)
100
101### Hiperf 的火焰图功能
102
103点击 Perf Profile 左下角的柱状图的图标,会切换到火焰图页面。
104![GitHub Logo](../../figures/perf/flame.jpg)
105进入到火焰图页面,火焰图的展示跟 Perf Profile的tab页的调用栈显示一致,鼠标放到色块上,悬浮框可以显示调用栈名称,Lib,Addr,Count,% in current Thread,% in current Process,% in all Process。
106![GitHub Logo](../../figures/perf/flameshow.jpg)
107
108### Hiperf 的 show event count 功能
109
110在 Hiperf 的父级泳道图上增加筛选功能,可在 Cpu Usage 和各种 event type 之间选择,切换选择之后即可将 Hiperf 下级各个泳道图数据更新,悬浮框可以根据选择的事件名显示对应的 event count。
111![GitHub Logo](../../figures/perf/showevent.jpg)
112
113### Hiperf 的 CPU/进程级/线程级泳道支持时序火焰图, 按照每个时间点的调用栈显示功能
114
115 根据 Hiperf 父级泳道图所筛选的类型,来显示各个 CPU 或者线程的时序火焰图,用户可根据自己的需要,点击泳道图旁边的齿轮标志筛选出某个 cpu 或者线程的时序火焰图数据。
116![GitHub Logo](../../figures/perf/cpuandthreadrow.jpg)
117
118### Hiperf 的调用栈分析饼图/火焰图支持按进程、线程粒度可选, 饼图可以跳转到火焰图功能
119
120Hiperf 分为 process、thread、library、function 四层,调用栈均可在每层的表格上鼠标点击右键跳转到对应的火焰图 Tab 页。火焰图上方标题显示是由哪一层跳转而来,点击关闭图标火焰图重置为当前框选范围的所有数据。
121![GitHub Logo](../../figures/perf/perf_analysisjump.jpg)
122如上图,右键点击 hiprofiler_plugins 可以跳转到下图
123![GitHub Logo](../../figures/perf/perf_jumpframe.jpg)
124筛选面板新增 Hide Thread、Hide Thread State 筛选选项,Hiperf 可隐藏线程和线程状态。
125![GitHub Logo](../../figures/perf/perf_hide.jpg)
126