OpenHarmony实战开发-hiperf 应用性能优化剖析组件

简介

hiperf 是 OpenHarmony 为开发人员提供的用于调试的命令行工具,用于抓取特定程序或者系统的性能数据,类似内核的 perf 工具,该工具支持在 Windows/Linux/Mac 等操作系统上运行。

架构

在这里插入图片描述

目录

/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			# 源代码的单元测试

约束

运行环境条件约束如下
在这里插入图片描述

编译构建

基础配置

  • 确保组件名在于产品形态配置的 json 中产品形态配置加入 “developtools:hiperf”:{} 即可

编译命令

在这里插入图片描述

编译输出

在这里插入图片描述
也可以在编译完成后

运行 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
<think>好的,用户现在想了解HIperf中的硬件性能计数器hw-instructions的含义。我需要先回顾之前的对话,确保回答的一致性和准确性。之前用户询问了hw-cpu-cycles,我详细解释了其定义、用途和相关指标。现在用户转向hw-instructions,可能需要类似的结构。 首先,检查用户提供的引用内容。引用[1]提到支持的硬件事件包括hw-instructions,而引用[2]介绍了hiperfOpenHarmony的性能分析工具。这些信息需要整合到回答中,以保持引用的一致性。 接下来,确定hw-instructions的定义。hw-instructions应该指CPU执行的指令数。需要明确其与hw-cpu-cycles的关系,比如如何计算CPI(每条指令周期数),这在之前的回答中已经涉及,所以需要在这里再次提及,但重点放在hw-instructions上。 用户可能想知道这个指标的具体用途,比如如何用于性能优化,识别高效或低效的代码区域。结合之前的回答,可以提到与CPI的关系,高或低的值可能意味着什么,以及如何结合其他指标如缓存未命中或分支预测失败来分析问题。 同时,用户可能需要实际的使用示例,比如如何用hiperf命令采集hw-instructions,以及输出的解读。例如,给出一个hiperf stat命令的例子,并解释结果的意义。 还要注意用户可能的问题扩展,比如如何与其他指标结合,或者为什么指令数高但性能差。这些可以作为相关问题提出,帮助用户进一步探索。 需要确保回答结构清晰,分点说明含义、用途和示例,并附上相关问题。同时,正确引用之前的引用标记,比如[^1]和[^2],以保持参考文献的一致性。 最后,检查语言是否符合中文要求,术语是否准确,避免技术错误,并保持口语化的思考过程,但正式的回答结构。</think>HIperf采集的 **`hw-instructions`** 是硬件性能计数器(PMU)中的核心指标,用于衡量CPU实际执行的指令数量。以下是其详细解析: --- ### **1. 具体含义** - **定义** `hw-instructions` 表示 **CPU在特定时间段内实际完成的指令总数**,反映程序的计算密度和指令执行效率。它是衡量程序复杂性和CPU工作负载的基础指标[^1]。 - **与`hw-cpu-cycles`的关系**:结合两者可计算 **CPI(每条指令消耗的时钟周期数)**: $$ \text{CPI} = \frac{\text{hw-cpu-cycles}}{\text{hw-instructions}} $$ CPI值越低,表明CPU执行效率越高(单位时间内完成更多指令);CPI高可能因流水线阻塞、缓存失效或分支预测失败导致[^1]。 - **关键特性** - **区分指令类型**:某些架构支持细分指令类型(如浮点指令、整数指令),但`hw-instructions`通常统计所有指令。 - **特权级统计**:通过HIperf事件修饰符(如`u`/`k`),可分别统计用户态和内核态的指令数。 --- ### **2. 主要用途** - **性能效率评估** - **代码优化验证**:对比优化前后的指令数变化,直接衡量优化效果。例如,循环展开(Loop Unrolling)可能减少指令数。 - **算法复杂度分析**:指令数与算法时间复杂度相关,可辅助定位高复杂度代码段。 - **微架构行为分析** - **指令并行度评估**:若`hw-instructions`高但`hw-cpu-cycles`低,可能因超标量流水线的高并行度(如同时执行多条指令)。 - **资源争用检测**:结合`hw-stalled-cycles`(流水线停滞周期数),识别因资源冲突导致的指令吞吐下降。 - **功耗管理** - **动态电压频率调节(DVFS)影响**:指令数不受CPU频率影响,但`hw-cpu-cycles`会随频率变化,两者结合可评估能效策略。 --- ### **3. 实际使用示例** 通过HIperf命令采集`hw-instructions`: ```bash hiperf stat -e hw-instructions,hw-cpu-cycles -p <进程ID> --interval 1000 ``` 输出示例: ``` PERF_STAT INSTRUCTIONS 2.8e9 instructions/sec PERF_STAT CPU_CYCLES 4.2e9 cycles/sec ``` 计算CPI: $$ \text{CPI} = \frac{4.2 \times 10^9}{2.8 \times 10^9} \approx 1.5 \, \text{cycles/instruction} $$ 表明平均每条指令消耗1.5个周期,效率较高。 --- ### **相关问题** 1. 如何通过`hw-instructions`和`hw-branch-misses`分析分支预测效率? 2. 指令数高是否一定意味着程序性能差? 3. HIperf如何统计SIMD指令(如NEON/AVX)的指令数? [^1]: 硬件性能计数器说明文档 [^2]: OpenHarmony hiperf工具架构设计
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值