目录
目录README.md

赛题题目:基于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收益预测

  1. 分析动态库的二进制特征(如分支密度、循环复杂度、间接调用比例)
  2. 构建预测模型,评估库应用PGO后的潜在性能提升
  3. 对OpenHarmony应用中的动态库进行排序,识别最值得优化的目标
测试用例管理
  1. 基于提供的标准测试集,验证至少3款OpenHarmony应用中的高收益动态库
  2. 测试覆盖以下关键场景: (1)高频函数调用路径 (2)分支密集区域 (3)内存密集操作
优化策略推荐
  1. 基于性能分析数据,生成带量化收益预测的编译参数建议(如-O级别、内联阈值等)
  2. 提供优先级排序的优化建议列表
  3. 输出具体的编译命令行参数
效果验证
  1. 在RK3568开发板上实测优化效果,主要指标: (1)CPU指令数降低比例 (2)IPC (每周期指令数) 提升
  2. 参考指标(加分项): (1)冷启动时延 (2)帧渲染稳定性
技术要求

二进制分析:提取动态库的特征(可使用任何适合的工具) 动态追踪:采集性能数据,如热点函数、分支预测、缓存命中率等 预测模型:训练模型预测PGO收益,输入特征可包括: 二进制特征:分支密度、函数大小分布等 运行时特征:热点函数占比、分支预测失败率等 交付物 技术报告:详细说明技术方案、算法设计、实验结果和性能提升分析 可运行的技术原型:提供完整源代码和使用说明,确保评委可复现结果 输出内容: 优化分析报告:包含库收益预测和优先级排序 验证结果:通过实际编译参数调整验证优化建议,高收益库性能提升≥10%

评分标准:

评估维度 权重 评分细则 验证方法 收益预测准确性 35% - 预测与实际收益偏差<5%得25分

  • 偏差<3%得30分
  • 偏差<1%得35分 对比预测收益与实际测量收益 优化效果 30% - 高收益库实际CPU指令数降低≥5%:20分
  • 每降低1%加2分(上限30分)
  • 误优化率>5%扣15分 对比优化前后perf report数据 工程化水平 10% - 实现自动化工作流得5分
  • 提供可视化分析界面得5分 审查工具链的易用性与分析能力 创新加分项(20分上限) 多维度优化:除PGO外,探索其他编译优化维度(如指令集优化、LTO等)(+10分); 无源码分析能力:针对仅有二进制文件的动态库实现有效分析(+10分)。

赛题联系人:

范刚 fan.gang@huawei.com

参考资料:

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

参赛资源支持:

OpenHarmony社区:基于Windows PC,不提供额外硬件

赛题交流讨论链接:

https://www.chaspark.com/#/races/competitions/1136109649061687296

AutoGain-PGO

开发环境搭建

perf 安装下载

请使用系统包管理器或从源码编译方式安装 perf 工具。以 Ubuntu 为例:

sudo apt update
sudo apt install linux-tools-common linux-tools-$(uname -r)

llvm-bolt 安装

推荐使用源码编译安装:

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 <动态库路径> <测试目录路径> <运行命令> [运行参数...]

实际路径请换成你的完整路径,例如:

./run.sh /home/ning/Desktop/LibPGO/install/rocksdb/lib/librocksdb.so.9.0.0 \
         /home/ning/Desktop/LibPGO/Test/rocksdb/fillseq \
         /home/ning/Desktop/LibPGO/App/rocksdb/build/db_bench --benchmarks=fillseq --compression_type=none

结果如下:

事件名称 计数 平均周期 总周期 估算时间(s)
iTLB-loads 644,529 10 6,445,290 0.003069
iTLB-load-misses 213,368 250 53,342,000 0.025401
L2-load-misses 388 45 17,460 0.000008
L1-icache-load-misses 16,147,962 25 403,699,050 0.192238
branch-misses:u 16,453 20 329,060 0.000157
合计 463,832,860 0.220873

PGO 收益验证

使用以下命令比较 BOLT 优化前后的效果:

cd AutoGain-PGO
./run.sh <原始动态库路径> <优化后动态库路径> <测试目录路径> <运行命令> [运行参数...]
./compare.sh /home/ning/Desktop/LibPGO/install/rocksdb/lib/librocksdb.so.9.0.0 \
            /home/ning/Desktop/LibPGO/Test/rocksdb/fillseq/librocksdb_bolt.so \
         /home/ning/Desktop/LibPGO/Test/rocksdb/fillseq \
         /home/ning/Desktop/LibPGO/App/rocksdb/build/db_bench --benchmarks=fillseq --compression_type=none

上述命令会在测试目录下生成两个结果文件:

✅ 测试完成:
原始库结果: /home/ning/Desktop/LibPGO/Test/rocksdb/fillseq/origin_result.txt
优化库结果: /home/ning/Desktop/LibPGO/Test/rocksdb/fillseq/preload_result.txt

提取结果

python scripts/extract_compare_result.py <测试结果路径>
===== 指定事件的平均值统计(Original) =====
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
===== 指定事件的平均值统计(PGO) =====
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 使用命令

性能采样记录

perf record -e iTLB-loads:u,iTLB-load-misses:u,L1-dcache-loads:u,L1-dcache-load-misses:u,\
L1-icache-load-misses:u,L2-loads:u,L2-load-misses:u,LLC-loads:u,LLC-load-misses:u,\
branches:u,branch-misses:u,cache-references:u,cache-misses:u,instructions,cycles \
-j any,u -g -o perf.data [command] [argvs]

TopDown 分析指标收集

perf stat -e topdown-total-slots,topdown-slots-issued,topdown-slots-retired,\
topdown-fetch-bubbles,topdown-recovery-bubbles,l2_rqsts.code_rd_miss,\
L2-load-misses:u,cycles,branch-misses,baclears.any \
[command] [argvs]

TopDown 结构分析方法

perf stat --topdown [command] [argvs]

以上命令用于微架构级瓶颈定位,分析指令吞吐、分支预测、缓存失效等问题。

其它第三方库测试

请参阅 测试命令说明

关于
71.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

©Copyright 2023 CCF 开源发展委员会
Powered by Trustie& IntelliDE 京ICP备13000930号