# hiperf 应用性能优化剖析组件 - [简介](#简介) - [架构](#架构) - [约束](#约束) - [编译构建](编译构建) - [目录](#目录) - [使用说明](#使用说明) - [接口说明](#接口说明) - [相关仓](相关仓) ## 简介 hiperf 是 OpenHarmony 为开发人员提供的用于调试的命令行工具,用于抓取特定程序或者系统的性能数据,类似内核的 perf 工具,该工具支持在 Windows/Linux/Mac 等操作系统上运行。 ### 架构 ![](figures/hiperf_architecture_zh.png) ## 目录 ``` /developtools/hiperf ├── demo # demo 程序 │   ├── cpp # C++ demo 程序,示范了如何调用API和模拟的采样场景 │   └── js # JS demo 程序,示范了如何调用API ├── include # 工程的头文件 │   └── nonlinux # 交叉编译的头文件(非linux平台) ├── interfaces # 接口忘记 │   ├── innerkits # C++ API 接口 │   └── kits # JS API 接口 ├── proto # report 命令导出到proto的数据结构定义 ├── script # Host 脚本,包括 HTML │   └── test # 脚本的单元测试 ├── src # 源代码文件夹 └── test # 源代码的单元测试 ``` ## 约束 运行环境条件约束如下 | 依赖组件 | 版本 | | -------- | ----- | | Python | 3.7.0 | | | | ## 编译构建 #### 基础配置 - 确保组件名在于产品形态配置的 json 中 - [产品形态配置](https://gitee.com/openharmony/productdefine_common) - 加入 `"developtools:hiperf":{}` 即可 #### 编译命令 | 编译说明 | 编译参数 | | -------------------------------------- | ----------------------------------- | | 只编译当前设备平台的二进制执行文件 | --build-target hiperf_target | | 编译所有的平台的所有组件(包括单元测试) | --build-target hiperf_all | | 编译目标为 x86_64 Linux 平台的工具 | --gn-args "hiperf_target_host=true" | | 编译单元测试 | --build-target hiperf_unittest | | 编译单元测试的接口部分(命令行部分) | --build-target hiperf_interfacetest | #### 编译输出 #### | 编译目标 | 运行平台 | 文件位置 | 文件名 | | ----------------- | -------- | ----------------------------------------------------- | -------------------- | | Dev 端命令行程序 | arm | out\ohos-arm-release\developtools\hiperf\hiperf | hiperf | | | linux | out\ohos-arm-release\clang_x64\developtools\hiperf | hiperf | | Host 端命令行程序 | linux | out\ohos-arm-release\clang_x64\developtools\hiperf | hiperf_host | | | windows | out\ohos-arm-release\mingw_x86_64\developtools\hiperf | hiperf_host.exe | | Host 端动态库 | linux | out\ohos-arm-release\clang_x64\developtools\hiperf | libhiperf_report.so | | | windows | out\ohos-arm-release\mingw_x86_64\developtools\hiperf | libhiperf_report.dll | 也可以在编译完成后 运行 developtools/hiperf/script/package.sh 打包到out文件夹中 ``` host/ └── developtools ├── hiperf │   ├── bin # 所有的二进制文件 │   │   ├── linux # linux 平台 │   │   │   └── x86_64 │   │   │   ├── hiperf_host # PC运行的执行程序,支持Report和Dump命令 │   │   │   └── libhiperf_report.so # PC运行的LIB文件,供python脚本使用 │   │   ├── ohos │   │   │   └── arm # arm 平台 │   │   │   └── hiperf # 板端执行程序 │   │   └── windows # windows 平台 │   │   └── x86_64 │   │   ├── hiperf_host.exe # PC运行的执行程序 │   │   └── libhiperf_report.dll # PC运行的LIB文件 │   │ │   │ # 下面都是python文件,在PC侧执行 │   ├── command_script.py # hiperf 命令行的包装脚本,产生采样数据 │   ├── hiperf_utils.py # 脚本自己的工具类 │   ├── loadlib_test.py # lib 测试脚本 │   ├── make_diff.py # 产生Diff数据的脚本 │   ├── make_report.py # 从采样数据产生报告的脚本 │   ├── recv_binary_cache.py # 收集符号表的脚本 │   └── report.html # HTML 展示页面的模板 └── hiperf.tar.gz # 上述文件的打包文件 ``` #### 带调试符号的版本 - 在对应的平台out里面找 exe.unstripped 和 lib.unstripped,例如: - out\ohos-arm-release\clang_x64\exe.unstripped\clang_x64\developtools\hiperf ## 使用说明 ### 测试代码 我们在 hiperf_example_cmd.cpp 里面提供了一些测试代码, 用来验证一些采样功能,比如线程调度,内存申请,CPU 负荷等等。 代码位于 ``` hiperf\demo\cpp\hiperf_example_cmd.cpp ``` 测试命令帮助 ``` ./hiperf_example_cmd --help this is a demo test command Use the following commands to simulate different scenarios --help this page --thread setup the thread number, default is 5 second --time