OpenHarmony子系统开发 - 调测工具(二),hiperf、HiDumper使用指导,
OpenHarmony子系统开发 - 调测工具(二)
三、hiperf使用指导
hiperf是为开发人员提供性能采样分析的工具,基于内核perf机制进行的用户态能力的扩展,可以对指定的程序或者整个系统进行性能采样。
hiperf支持的命令有:list、stat、record、report等,可以通过hiperf -h进行查看。
下面对hiperf的常用命令进行详细说明:
list 命令
参数说明
列出设备上支持的所有perf事件名称,事件名称用于 stat 和 record命令的 -e 和 -g 参数。
Usage: hiperf list [event type]
使用示例
下面列出了设备支持的hardware事件,并且会提示哪些事件此设备不支持。
hiperf list hwevent not support hw-stalled-cycles-backendevent not support hw-stalled-cycles-frontendevent not support hw-ref-cpu-cyclesSupported events for hardware: hw-cpu-cycles hw-instructions hw-cache-references hw-cache-misses hw-branch-instructions hw-branch-misses hw-bus-cycles
stat 命令
参数说明
监听指定目标程序,周期性打印性能计数器的值。
Usage: hiperf stat [options] Collect performance counter information.
使用示例
下面是通过 stat 监听整个系统3秒的示例:
hiperf stat -d 3 -athis is root mode, perfEventParanoid assume as -1Start Profiling...Timeout exit (total 3009 ms) count name | comment | coverage 132523 hw-branch-instructions | 15.750 M/sec | (100%) 62554 hw-branch-misses | 47.202372% miss rate | (100%) 6994768 hw-cpu-cycles | 0.832068 GHz | (100%) 1237627 hw-instructions | 5.651758 cycles per instruction | (100%) 248 sw-context-switches | 29.959 K/sec | (100%) 0 sw-page-faults | 0.000 /sec | (100%) 9402580 sw-task-clock | 0.002758 cpus used | (100%)
字段说明
record 命令
参数说明
采样指定目标程序,并且将采样数据保存到指定的文件中(默认为perf.data)
Usage: hiperf record [options] Collect performance sampling information.
说明:该频率越高cpu负载会越高,但是数据采样会越多。
说明:该值越高,事件丢失率会越低,但是内存占用会增大。
使用示例
-
对全系统所有进程采样3秒,并且显示详细的日志信息
hiperf record -d 3 -a --verbose
-
指定使用fp方式进行回栈
hiperf record -s fp -d 3 -a
-
指定使用dwarf方式进行回栈
hiperf record -s dwarf -d 3 -a
-
指定采样offcpu事件
hiperf record --offcpu -s dwarf -d 3 -a
-
指定延迟回栈
hiperf record -d 3 -s dwarf --delay-unwind -a
-
禁止回栈,此时会保存堆栈数据到perf.data文件
hiperf record -d 3 -s dwarf --disable-unwind -a
-
指定追踪的包名,如果指定的包名对应的进程不存在则会延时等待10秒,超时后进程退出
hiperf record -d 3 -s dwarf --app com.ohos.launch
-
指定对采样结果数据进行压缩保存
hiperf record -z -s dwarf -d 3 -a
report 命令
参数说明
此命令主要用于展示record中抓取的采样数据
Usage: hiperf report [option] Report sampling information from perf.data.
使用示例
-
输出采样数据的报告,默认读取perf.data文件
hiperf report
输出结果举例:
Heating count comm pid tid dso func 5.68% 15073949 hiperf_example_ 1085 1091 /system/lib/ld-musl-arm.so.1 malloc 2.57% 6834119 hiperf_example_ 1085 1091 [kernel.kallsyms] vector_swi 2.27% 6013910 hiperf_example_ 1085 1087 /system/lib/ld-musl-arm.so.1 malloc 2.19% 5805738 hiperf_example_ 1085 1091 /system/lib/ld-musl-arm.so.1 vfprintf 2.09% 5543362 hiperf_example_ 1085 1091 [kernel.kallsyms] ktime_get_ts64report done
-
输出采集数据的调用栈报告
hiperf report -s
-
指定符号表路径
hiperf report -s --symbol-dir /data/local/tmp
-
指定结果过滤的关键字,指定后会只显示包含该关键字的信息。比如过滤libutils.z.so则命令如下:
hiperf report --dsos libuitls.z.so
-
指定按照特定的关键字进行排序展示,比如按照dso进行排序:
hiperf report --sort dso
四、HiDumper概述
功能简介
HiDumper是OpenHarmony为开发、测试人员、IDE工具提供的系统信息获取工具,帮助开发者分析、定位问题。本章节内容适用于标准系统。
源码目录说明
/base/hiviewdfx/hidumper├── frameworks # 框架代码│ ├── native # 导出功能核心代码│ │ │── include # 头文件目录│ │ │── src # 源文件目录│ │ │── common # 通用功能代码│ │ │── executor # 导出过程执行器代码│ │ │── factory # 跟进导出项生成导出执行器│ │ │── manager # 导出管理核心代码│ │ │── util # 工具类源代码│── sa_profile # Hidumper sa属性文件│── services # Hidumper服务源码│ │── native # 服务C++源码│ │── zidl # 通讯功能源码目录│ │ │── include # 通讯功能头文件│ │ │── src # 通讯功能源代码├── test # 测试用例目录│ ├── unittest # 单元测试代码│ ├── moduletest # 模块级别测试代码
HiDumper使用指导
命令参数说明
表1 HiDumper命令参数说明
使用实例
HiDumper可以为开发者导出系统当前基本信息,通过这些基本信息可以定位分析问题。给子服务和元能力传递复杂参数时,参数需要加双引号。
具体步骤如下:
-
进入设备命令行,输入 hidumper -h 获取基本信息介绍,功能语法介绍。
hidumper -h
-
输入 hidumper -lc 获取系统信息分类列表。
hidumper -lc
-
输入 hidumper -c 获取系统base、system等所有分类信息。
hidumper -c
-
输入 hidumper -c [base | system] 按 base 或 system 分类获取系统簇信息。
hidumper -c basehidumper -c system
-
输入 hidumper -ls 命令获取系统中元能力列表。
hidumper -ls
-
输入 hidumper -s 命令获取系统全部元能力信息。
hidumper -s
-
运行 hidumper -s 3301 -a \"-h\" 命令获取id为3301的元能力的帮助。
hidumper -s 3301 -a \"-h\"
-
运行 hidumper -s 3008命令获取id为3008的元能力的全部信息。
hidumper -s 3008
-
运行 hidumper -e 命令获取Faultlog模块生成的崩溃历史信息。
hidumper -e
-
运行 hidumper --net [pid] 命令获取网络信息;如果指定了进程的pid,则只获取该进程的网络流量使用信息。
hidumper --nethidumper --net 1024
-
运行 hidumper --storage [pid] 命令获取存储相关信息;如果指定了进程的pid,则只获取该进程的io信息。
hidumper --storagehidumper --storage 1024
-
运行 hidumper -p 命令获取进程信息,包括进程、线程的列表和信息。
hidumper -p
-
运行 hidumper -p 1024 命令获取pid为1024的进程信息。
hidumper -p 1024
-
运行 hidumper --cpuusage [pid] 命令获取CPU的使用信息。如果指定了进程的pid,则只获取该进程的CPU使用信息。
hidumper --cpuusagehidumper --cpuusage 1024
-
运行 hidumper --cpufreq 命令获取每一个CPU核实际运行的频率。
hidumper --cpufreq
-
运行 hidumper --mem [pid] 命令获取全部的内存使用信息。如果指定进程的pid,只获取该进程的内存使用情况。
hidumper --mem [pid]
当携带pid参数时输出结果中第一列标题的详细说明如下:
名称 描述 GL GPU内存 Graph 图形内存 ark ts heap ArkTS堆的内存占用 guard 保护段所占内存 native heap 堆内存 AnonPage other 其它没有被映射到文件的页所占内存 stack 栈内存 .hap 应用程序所占内存 .db 进程加载的.db数据文件所占内存 .so 进程加载的.so动态库所占内存 .ttf 进程加载的.ttf字体文件所占内存 dev 进程加载的以/dev开头的文件所占内存 FilePage other 其它有被映射到文件的页所占内存 -
运行 hidumper --zip 命令压缩信息数据到/data/dumper目录下。
hidumper --zip
-
运行 hidumper -t timeout 命令设置超时时间,单位:秒。默认值是30s。如果设置为0表示无超时限制。
hidumper -t [timeout]
-
运行 hidumper --mem-smaps pid [-v] 命令获取指定进程内存信息的详细使用情况。
hidumper --mem-smaps pid [-v]