1# FileSystem 的抓取和展示说明
2
3FileSystem 分析文件系统的信息和活动,比如读和写操作等。
4
5## FileSystem 的抓取
6
7### FileSystem 抓取配置参数
8
9![GitHub Logo](../../figures/FileSystem/filesystemsetting.jpg)
10配置项说明:
11
12-     Start FileSystem Record:配置项的总开关。
13-     Process:默认配置的是整个系统的,也可选择单进程抓取。
14-     Max Unwind Level:配置抓取调用栈的最大深度。
15
16再点击 Record setting,在 output file path 输入文件名 hiprofiler_data_filesystem.htrace,拖动滚动条设置 buffer size 大小是 64MB,抓取时长是 50s。
17![GitHub Logo](../../figures/FileSystem/filesystemrecord.jpg)
18点击 Trace command,就会根据上面的配置生成抓取命令,点击复制按钮,会将命令行复制。
19![GitHub Logo](../../figures/FileSystem/FileSystemcommand.jpg)
20输入 hdc shell,进入设备,执行命令。
21![GitHub Logo](../../figures/FileSystem/FileSystemexcutecommand.jpg)
22执行完成后,进入指定目录查看,在/data/local/tmp 下就会生成 trace 文件。
23![GitHub Logo](../../figures/FileSystem/FileSystemfile.jpg)
24
25### FileSystem 展示说明
26
27将抓取的 trace 文件导入 smartperf 界面查看。
28![GitHub Logo](../../figures/FileSystem/FileSystemsummary.jpg)
29
30界面布局介绍:FileSystem 整体界面布局分为 3 个部分:
31
32-     红色区域:泳道图。
33-     绿色区域:详细信息。
34-     黄色区域:辅助信息(Callstack)。
35
36### FileSystem 泳道图展示
37
38FileSystem 泳道图按照读操作和写操作展示,鼠标移动到泳道图上,悬浮框会以 10ms 为周期展示读,写类型系统调用的次数。
39![GitHub Logo](../../figures/FileSystem/FileSystemchart.jpg)
40按住 w 键放大界面,悬浮框会显示当前时刻的文件读写次数。
41![GitHub Logo](../../figures/FileSystem/FileSystemcount.jpg)
42
43### FileSystem 泳道图的框选功能
44
45可以对读写操作泳道图进行框选,框选后展示框选数据的统计表格,总共有六个 tab 页。
46FileSystem statistics 的 Tab 页如图:
47![GitHub Logo](../../figures/FileSystem/FileSystemstatistics.jpg)
48
49-     Syscall/Process: 按照数据类型,进程分类显示。
50-     Count: 系统调用的数量。
51-     Logical Writes:写数据统计。
52-     Logical Reads:读数据统计。
53-     Other Filesystem Bytes:其他数据量。
54-     Duration:总时长。
55-     Min Duration:最小时长。
56-     Avg Duration: 平均时长。
57-     Max Duration:最大时长。
58  FileSystem CallTree 的 Tab 页如图:
59  ![GitHub Logo](../../figures/FileSystem/FileSystemCalltree.jpg)
60-     Call Stack:为经过符号解析后的Callstack,并且给出动态链接库或者进程名的信息。
61-     Local:为该调用方法自身占用的 CPU 时间。
62-     Weight:为该调用方法占用的 CPU 时间。
63-     %:为该调用方法占用的 CPU 时间占比。
64  FileSystem Events 的 Tab 页如图:
65  ![GitHub Logo](../../figures/FileSystem/FileSystemevents.jpg)
66-     Start: 起始时间。
67-     Duration:时长。
68-     Process:进程名。
69-     Thread:线程名。
70-     Type:操作类型。
71-     File Descriptor:文件描述符。
72-     File Path:文件路径。
73-     First Argument:系统调用的第一个参数。
74-     Second Argument:系统调用的第二个参数。
75-     Third Argument:系统调用的第三个参数。
76-     Fourth Argument:系统调用的第四个参数。
77-     Return:系统调用的返回值。
78-     Error:错误码。
79-     Backtrace:调用栈顶部函数,并显示调用栈深度。
80  File Descriptor History 的 Tab 页如图:
81  ![GitHub Logo](../../figures/FileSystem/FileSystemhistory.jpg)
82-     Start: 起始时间。
83-     Duration:时长。
84-     Process:进程名。
85-     Type:操作类型。
86-     File Descriptor:文件描述符。
87-     Path:文件路径。
88-     Backtrace:调用栈顶部函数,并显示调用栈深度。
89  File Descriptor Time Slice 的 Tab 页如图:
90  ![GitHub Logo](../../figures/FileSystem/FileSystemtimeslice.jpg)
91-     Open Time: 打开的起始时间。
92-     Open Duration:打开的时长。
93-     Process:进程名。
94-     File Descriptor:文件描述符。
95-     Path:文件路径。
96-     Backtrace:调用栈顶部函数,并显示调用栈深度。
97
98### FileSystem 支持多种 Options 展示风格
99
100点击 FileSystem CallTree 的 Tab 页底部的 Options,会有四个 CheckBox 复选框。
101![GitHub Logo](../../figures/FileSystem/FileSystemOptions.jpg)
102
103-     Invert:反向输出调用树。
104-     Hide System so:隐藏系统库文件。
105-     Hide Event:隐藏事件。
106-     Hide Thread:隐藏线程。
107
108### FileSystem 支持过滤调用栈调用次数的展示风格
109
110点击 FileSystem CallTree 的 Tab 页底部的 Sample Count Filter,可以填上区间值。过滤出符合该区间值调用次数的调用栈信息。
111![GitHub Logo](../../figures/FileSystem/FileSystemsamplecounter.jpg)
112
113### FileSystem 功能的调用栈 Group 展示-数据分析支持剪裁功能
114
115![GitHub Logo](../../figures/FileSystem/FileSystemdatamining.jpg)
116
117- 裁剪 Callstack,点击 Callstack 上一个节点符号,再点击底部 Symbol Filter 按钮,则该符号自动被裁剪掉,同时将该节点往下所有的 Callstack 内容裁剪掉。
118
119- 裁剪 Library,点击 Library 上一个节点符号,再点击底部 Library Filter 按钮,则该符号自动被裁剪掉,同时将该节点往下所有的 Callstack 内容裁剪掉。
120- 点击 Reset 按钮,将恢复选中的裁剪内容。
121
122### FileSystem 功能的调用栈 Group 展示支持按条件过滤
123
124在 Input Filter 输入关键字,会显示出带有该关键字的展示信息。
125![GitHub Logo](../../figures/FileSystem/FileSysteminputfilter.jpg)
126
127### FileSystem 辅助信息区展示调用栈
128
129当在详细信息区选择一个符号时,将展示与该符号相关的完整的调用栈。如下图的 Heaviest Stack Trace:
130![GitHub Logo](../../figures/FileSystem/FileSystemheaviesttrace.jpg)
131
132### FileSystem 的事件类型的过滤
133
134通过选择可以过滤是 Open 类型,还是 Close 类型事件。
135![GitHub Logo](../../figures/FileSystem/filesystemfilter.jpg)
136
137### FileSystem 的火焰图功能
138
139点击 FileSystem CallTree 左下角的柱状图的图标,会切换到火焰图页面。
140![GitHub Logo](../../figures/FileSystem/FileSystemflame.jpg)
141进入到火焰图页面,火焰图的展示跟 Callinfo 的 tab 页的调用栈显示一致,鼠标放到色块上,悬浮框可以显示调用栈名称、所属Lib库、函数地址、耗时及其占比。
142![GitHub Logo](../../figures/FileSystem/FileSystemflameshow.jpg)
143鼠标左键火焰图,会进入下一级界面,左键上级则返回上一级界面。
144![GitHub Logo](../../figures/FileSystem/FileSystemflamelevel.jpg)
145