OpenHarmony性能分析工具:https://developer.huawei.com/consumer/cn/agconnect/huawei-smartperf/
论文《ArkAnalyzer: The Static Analysis Framework for OpenHarmony》 项目地址: https://gitee.com/openharmony-sig/arkanalyzer
论文《Identifying Compiler and Optimization Level in Binary Code From Multiple Architectures》
OpenHarmony LLVM-PGO工具链文档: https://gitee.com/openharmony/third_party_llvm-project
鸿蒙OS部分开源应用项目地址:https://gitee.com/explore/harmonyos-app?order=recommend
git clone https://github.com/llvm/llvm-project.git
cd llvm-project
mkdir build && cd build
cmake -DLLVM_ENABLE_PROJECTS="bolt" -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="X86" ../llvm
make -j$(nproc)
sudo make install
RocksDB PGO 优化测试
RocksDB 下载编译
git clone https://github.com/facebook/rocksdb.git
cd rocksdb
mkdir build && cd build
git checkout v9.0.0
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$HOME/Desktop/LibPGO/install/rocksdb \
-DCMAKE_INSTALL_RPATH="$HOME/Desktop/LibPGO/install/rocksdb/lib" \
-DCMAKE_C_FLAGS="-fPIC -Wl,--emit-relocs " \
-DCMAKE_CXX_FLAGS="-fPIC -Wl,--emit-relocs " \
-DBUILD_SHARED_LIBS=ON
make -j$(nproc)
make install
PGO 收益预测
使用以下命令运行收集性能数据以预测 PGO 的潜在收益:
cd AutoGain-PGO
./run.sh <动态库路径> <测试目录路径> <运行命令> [运行参数...]
赛题题目:基于PGO的OpenHarmony动态库(.so)优化自动化检测与验证系统
赛题说明:
OpenHarmony生态应用性能优化是提升用户体验的关键环节。其中,动态库(.so文件)作为核心计算模块,其执行效率直接影响应用响应速度、电池续航和设备发热。PGO(Profile-Guided Optimization)是一种强大的编译优化技术,通过收集程序实际运行数据来指导编译器优化,可为适合的动态库带来10%-15%的性能提升。 然而,在OpenHarmony生态中,PGO技术应用面临三大挑战: 收益评估困难:并非所有动态库都能从PGO中获得显著收益。计算密集型、分支逻辑复杂的库(如物理引擎、渲染器)通常收益显著,而IO绑定型或线性执行路径的库收益有限。开发者难以预先判断哪些库值得投入PGO优化成本; 测试用例构建复杂:有效的PGO优化依赖高质量的profile数据,需要测试用例覆盖关键执行路径。手动构建这些测试集耗时且往往不全面,导致次优的优化效果; 工程成本与收益平衡:PGO引入额外的构建步骤(插桩编译→收集profile→优化编译),增加了构建时间和CI/CD复杂度。对于收益有限的库,这种额外成本可能不值得。 本赛题要求参赛者开发一套自动化工具链,能够: 分析OpenHarmony应用中的动态库特征,预测PGO优化潜在收益; 自动识别高收益库并生成针对性测试用例,覆盖关键执行路径; 量化优化效果,提供性能提升报告和工程成本评估。 参赛者需在RK3568开发板上实际验证工具链效果,通过至少3个真实应用案例,证明工具能准确识别高收益库并带来≥10%的性能提升(以IPC提升、缓存命中率提高或功耗降低等指标衡量)。
赛题要求:
核心任务
开发自动化工具链实现以下功能中的一项或多项: PGO收益预测
测试用例管理
优化策略推荐
效果验证
技术要求
二进制分析:提取动态库的特征(可使用任何适合的工具) 动态追踪:采集性能数据,如热点函数、分支预测、缓存命中率等 预测模型:训练模型预测PGO收益,输入特征可包括: 二进制特征:分支密度、函数大小分布等 运行时特征:热点函数占比、分支预测失败率等 交付物 技术报告:详细说明技术方案、算法设计、实验结果和性能提升分析 可运行的技术原型:提供完整源代码和使用说明,确保评委可复现结果 输出内容: 优化分析报告:包含库收益预测和优先级排序 验证结果:通过实际编译参数调整验证优化建议,高收益库性能提升≥10%
评分标准:
评估维度 权重 评分细则 验证方法 收益预测准确性 35% - 预测与实际收益偏差<5%得25分
赛题联系人:
范刚 fan.gang@huawei.com
参考资料:
参赛资源支持:
赛题交流讨论链接:
https://www.chaspark.com/#/races/competitions/1136109649061687296
AutoGain-PGO
开发环境搭建
perf 安装下载
请使用系统包管理器或从源码编译方式安装 perf 工具。以 Ubuntu 为例:
llvm-bolt 安装
推荐使用源码编译安装:
RocksDB PGO 优化测试
RocksDB 下载编译
PGO 收益预测
使用以下命令运行收集性能数据以预测 PGO 的潜在收益:
实际路径请换成你的完整路径,例如:
结果如下:
PGO 收益验证
使用以下命令比较 BOLT 优化前后的效果:
上述命令会在测试目录下生成两个结果文件:
✅ 测试完成:
原始库结果: /home/ning/Desktop/LibPGO/Test/rocksdb/fillseq/origin_result.txt
优化库结果: /home/ning/Desktop/LibPGO/Test/rocksdb/fillseq/preload_result.txt
提取结果
instructions : 14,117,526,962.67
cycles : 8,188,889,245.33
LLC-load-misses : 76,615.67
LLC-loads : 234,411.67
branch-misses:u : 8,212,429.33
branches:u : 2,010,563,318.67
L1-icache-load-misses : 792,139,919.67
L2-load-misses : 79,099.67
L2-loads : 259,786.67
iTLB-loads : 9,743,881.33
iTLB-load-misses : 7,903,544.67
===== 时间统计平均值(秒) =====
time_elapsed : 2.555353
time_user : 1.983089
time_sys : 0.933780
instructions : 14,055,159,690.33
cycles : 7,260,055,596.33
LLC-load-misses : 74,079.33
LLC-loads : 247,470.67
branch-misses:u : 8,793,854.33
branches:u : 1,937,486,723.00
L2-load-misses : 72,756.67
L2-loads : 253,600.67
iTLB-loads : 223,644.67
iTLB-load-misses : 7,555,142.00
===== 时间统计平均值(秒) =====
time_elapsed : 2.270953
time_user : 1.674406
time_sys : 0.923900
其他 perf 使用命令
性能采样记录
TopDown 分析指标收集
TopDown 结构分析方法
以上命令用于微架构级瓶颈定位,分析指令吞吐、分支预测、缓存失效等问题。
其它第三方库测试
请参阅 测试命令说明